From aa67dab1eebe3cdba573741857051005ba72cc3b Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 8 May 2017 16:56:25 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2406 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 2d857904595833667d469db97c746bbd8696eac4 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 130 ++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/Nerve_GIC/doc/Intro_graph_induced_complex.h (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h new file mode 100644 index 00000000..0b51e345 --- /dev/null +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -0,0 +1,130 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau + * + * Copyright (C) 2016 INRIA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ +#define DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ + +namespace Gudhi { + +namespace graph_induced_complex { + +/** \defgroup graph_induced_complex Graph induced complex + * + * \author Mathieu Carrière + * + * @{ + * + * \section complexes Graph induced complexes (GIC) and Nerves + * + * GIC and Nerves are simplicial complexes built on top of a point cloud P. + * + * \subsection nervedefinition Nerve definition + * + * Assume you are given a cover C of your point cloud P, that is a set of subsets of P + * whose union is P itself. Then, the Nerve of this cover + * is the simplicial complex that has one k-simplex per k-fold intersection of cover elements. + * See also Wikipedia . + * + * \subsection nerveexample Example + * + * This example builds the Nerve of a point cloud sampled on a 3D human shape. + * The cover C comes from the preimages of intervals covering the height function. + * All intervals have the resolution (either the length or the number of the intervals) + * and gain (overlap percentage). + * + * \include + * + * When launching: + * + * \code $> + * \endcode + * + * the program output is: + * + * \include + * + * \section gicdefinition GIC definition + * + * Again, assume you are given a cover C of your point cloud P. Moreover, assume + * you are also given a graph G built on top of P. Then, for any clique in G + * whose nodes all belong to different elements of C, the GIC includes a corresponding + * simplex, whose dimension is the number of nodes in the clique minus one. + * + * \subsection gicexample Example + * + * This example builds the GIC of a point cloud sampled on a 3D human shape. + * The cover C comes from the preimages of intervals covering the height function, + * and the graph G comes from a Rips complex built with a threshold parameter. + * Note that if the gain is too big, the number of cliques increases a lot, + * which make the computation time much larger. + * + * \include + * + * When launching: + * + * \code $> + * \endcode + * + * the program output is: + * + * \include + * + * \subsection mapperdeltadefinition Mapper Delta + * + * If one restricts to the cliques in G whose nodes all belong to preimages of consecutive + * intervals (assuming the cover of the height function is minimal, i.e. no more than + * two intervals can intersect at a time), the GIC is of dimension one, i.e. a graph. + * We call this graph the Mapper Delta, since it is related to the usual Mapper (see + * this article ). + * + * \subsection mapperdeltaexample Example + * + * Mapper Delta comes with optimal selection for the Rips threshold, + * the resolution and the gain of the function cover. In this example, + * we compute the Mapper Delta of a point cloud sampled on a 3D human shape, + * where the graph G comes from a Rips complex with optimal threshold, + * and the cover C comes from the preimages of intervals covering the height function, + * with optimal resolution and gain. Note that optimal threshold, resolution and gain + * also exist for the Nerve of this cover. + * + * \include + * + * When launching: + * + * \code $> + * \endcode + * + * the program output is: + * + * \include + * + * + * \copyright GNU General Public License v3. + * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim + */ +/** @} */ // end defgroup graph_induced_complex + +} // namespace graph_induced_complex + +} // namespace Gudhi + +#endif // DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ -- cgit v1.2.3 From 01b7bec722e18851acfc826ca572d01a127339c1 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 9 May 2017 14:04:29 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2408 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 324d557360a52e7181d9cf3c7d77c8445a367808 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 72 +++++++++----- src/Nerve_GIC/example/CMakeLists.txt | 17 +++- src/Nerve_GIC/example/GIC.cpp | 23 +---- src/Nerve_GIC/example/GIC.txt | 57 +++++++++++ src/Nerve_GIC/example/MapperDelta.cpp | 62 ------------ src/Nerve_GIC/example/MapperDeltaCoord.cpp | 61 ++++++++++++ src/Nerve_GIC/example/MapperDeltaCoord.txt | 125 ++++++++++++++++++++++++ src/Nerve_GIC/example/MapperDeltaFunc.cpp | 61 ++++++++++++ src/Nerve_GIC/example/MapperDeltaFunc.txt | 16 +++ src/Nerve_GIC/example/Nerve.cpp | 14 +-- src/Nerve_GIC/example/Nerve.txt | 45 +++++++++ src/Nerve_GIC/example/simple_GIC.cpp | 77 --------------- src/Nerve_GIC/include/gudhi/GIC.h | 17 +++- 13 files changed, 453 insertions(+), 194 deletions(-) create mode 100644 src/Nerve_GIC/example/GIC.txt delete mode 100644 src/Nerve_GIC/example/MapperDelta.cpp create mode 100644 src/Nerve_GIC/example/MapperDeltaCoord.cpp create mode 100644 src/Nerve_GIC/example/MapperDeltaCoord.txt create mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.cpp create mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.txt create mode 100644 src/Nerve_GIC/example/Nerve.txt delete mode 100644 src/Nerve_GIC/example/simple_GIC.cpp (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 0b51e345..44e23983 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -33,9 +33,7 @@ namespace graph_induced_complex { * * @{ * - * \section complexes Graph induced complexes (GIC) and Nerves - * - * GIC and Nerves are simplicial complexes built on top of a point cloud P. + * \section nerves Nerves * * \subsection nervedefinition Nerve definition * @@ -46,78 +44,106 @@ namespace graph_induced_complex { * * \subsection nerveexample Example * - * This example builds the Nerve of a point cloud sampled on a 3D human shape. - * The cover C comes from the preimages of intervals covering the height function. + * This example builds the Nerve of a point cloud sampled on a 3D human shape (human.off). + * The cover C comes from the preimages of intervals (10 intervals with gain 0.3) + * covering the height function (coordinate 2), + * which are then refined into their connected components using the triangulation of the .OFF file. * All intervals have the resolution (either the length or the number of the intervals) * and gain (overlap percentage). * - * \include + * \include Nerve_GIC/Nerve.cpp * * When launching: * - * \code $> + * \code $> ./Nerve ../../../data/points/human.off 2 10 0.3 * \endcode * * the program output is: * - * \include + * \include Nerve_GIC/Nerve.txt + * + * \section gic Graph Induced Complexes (GIC) * - * \section gicdefinition GIC definition + * \subsection gicdefinition GIC definition * * Again, assume you are given a cover C of your point cloud P. Moreover, assume * you are also given a graph G built on top of P. Then, for any clique in G * whose nodes all belong to different elements of C, the GIC includes a corresponding * simplex, whose dimension is the number of nodes in the clique minus one. + * See this article + * for more details. * * \subsection gicexample Example * - * This example builds the GIC of a point cloud sampled on a 3D human shape. - * The cover C comes from the preimages of intervals covering the height function, - * and the graph G comes from a Rips complex built with a threshold parameter. + * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). + * The cover C comes from the preimages of intervals (with length 0.1 and gain 0) + * covering the height function (coordinate 2), + * and the graph G comes from a Rips complex built with threshold 0.1. * Note that if the gain is too big, the number of cliques increases a lot, * which make the computation time much larger. * - * \include + * \include Nerve_GIC/GIC.cpp * * When launching: * - * \code $> + * \code $> ./GIC ../../../data/points/human.off 0.1 2 0.1 0 * \endcode * * the program output is: * - * \include + * \include Nerve_GIC/GIC.txt * * \subsection mapperdeltadefinition Mapper Delta * * If one restricts to the cliques in G whose nodes all belong to preimages of consecutive * intervals (assuming the cover of the height function is minimal, i.e. no more than * two intervals can intersect at a time), the GIC is of dimension one, i.e. a graph. - * We call this graph the Mapper Delta, since it is related to the usual Mapper (see - * this article ). + * We call this graph the Mapper Delta, since it is related to the usual Mapper. See + * this article for more details. * * \subsection mapperdeltaexample Example * * Mapper Delta comes with optimal selection for the Rips threshold, * the resolution and the gain of the function cover. In this example, - * we compute the Mapper Delta of a point cloud sampled on a 3D human shape, + * we compute the Mapper Delta of a point cloud sampled on a 3D human shape (human.off), * where the graph G comes from a Rips complex with optimal threshold, - * and the cover C comes from the preimages of intervals covering the height function, + * and the cover C comes from the preimages of intervals covering the height function (coordinate 2), * with optimal resolution and gain. Note that optimal threshold, resolution and gain * also exist for the Nerve of this cover. * - * \include + * \include Nerve_GIC/MapperDeltaCoord.cpp * * When launching: * - * \code $> + * \code $> ./MapperDeltaCoord ../../../data/points/human.off 2 * \endcode * * the program output is: * - * \include + * \include MapperDeltaCoord.txt + * + * We also provide an example on a set of 72 pictures taken around the same object (lucky_cat.off). + * The function is now the first eigenfunction given by PCA, whose values + * are written in a file (lucky_cat_PCA1). Threshold, resolution and gain are automatically selected as before. + * + * \include Nerve_GIC/MapperDeltaFunc.cpp + * + * When launching: + * + * \code $> ./MapperDeltaFunc ../../../data/points/COIL_database/lucky_cat.off ../../../data/points/COIL_database/lucky_cat_PCA1 + * \endcode + * + * the program output is: + * + * \include MapperDeltaFunc.txt + * + * If you have python and firefox, all the previous .txt files can then be plotted using + * Kepler-Mapper + * with the following: + * + * \code python visu.py && firefox SC_visu.html + * \endcode * - * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index e4debf2d..d499613d 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -1,8 +1,21 @@ cmake_minimum_required(VERSION 2.6) project(Nerve_GIC_examples) -add_executable ( GIC simple_GIC.cpp ) -target_link_libraries(GIC ${Boost_SYSTEM_LIBRARY}) +add_executable ( Nerve Nerve.cpp ) +target_link_libraries(Nerve ${Boost_SYSTEM_LIBRARY}) + +add_executable ( GIC GIC.cpp ) +target_link_libraries(GIC ${Boost_SYSTEM_LIBRARY}) + +add_executable ( MapperDeltaCoord MapperDeltaCoord.cpp ) +target_link_libraries(MapperDeltaCoord ${Boost_SYSTEM_LIBRARY}) + +add_executable ( MapperDeltaFunc MapperDeltaFunc.cpp ) +target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) + if (TBB_FOUND) + target_link_libraries(Nerve ${TBB_LIBRARIES}) target_link_libraries(GIC ${TBB_LIBRARIES}) + target_link_libraries(MapperDeltaCoord ${TBB_LIBRARIES}) + target_link_libraries(MapperDeltaFunc ${TBB_LIBRARIES}) endif() \ No newline at end of file diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index 5161a46b..30a485d5 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain\n"; - std::cerr << " i.e.: " << progName << " ../../data/points/test.off 1.5 1 10 0.3 \n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 1.5 2 10 0.3 \n"; exit(-1); // ----- >> } @@ -12,7 +12,6 @@ int main(int argc, char **argv) { std::string off_file_name(argv[1]); double threshold = atof(argv[2]); - //std::string func_file_name = argv[3]; int coord = atoi(argv[3]); double resolution = atof(argv[4]); double gain = atof(argv[5]); @@ -30,24 +29,12 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_graph_from_automatic_rips(off_file_name); - //GIC.set_graph_from_rips(threshold, off_file_name); - //GIC.set_graph_from_OFF(off_file_name); - + GIC.set_graph_from_rips(threshold, off_file_name); GIC.set_function_from_coordinate(coord, off_file_name); - //GIC.set_function_from_file(func_file_name); - - GIC.set_color_from_coordinate(coord, off_file_name); - //GIC.set_color_from_file(func_file_name); - - GIC.set_automatic_resolution_for_GICMAP(); - GIC.set_gain(); + GIC.set_color_from_coordinate(off_file_name, coord); + GIC.set_resolution_double(resolution); GIC.set_gain(gain); GIC.set_cover_from_function(1); - - //GIC.find_GIC_simplices(); - //GIC.find_Nerve_simplices(); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - + GIC.find_GIC_simplices(); GIC.plot_with_KeplerMapper(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/example/GIC.txt b/src/Nerve_GIC/example/GIC.txt new file mode 100644 index 00000000..9871cf41 --- /dev/null +++ b/src/Nerve_GIC/example/GIC.txt @@ -0,0 +1,57 @@ +Cloud +Function +0 0 +27 26 +0 -0.949318 240 +1 -0.949346 240 +2 -0.822129 50 +3 -0.822037 51 +4 -0.723847 48 +5 -0.722679 48 +6 -0.625409 57 +7 -0.625771 57 +8 -0.528161 99 +9 -0.528188 99 +10 -0.436343 126 +11 -0.436356 126 +12 -0.330775 194 +13 -0.233638 98 +14 -0.116276 100 +15 -0.129017 144 +16 -0.116513 103 +17 -0.0213554 243 +18 -0.0301512 65 +19 -0.0315443 66 +20 0.0750623 308 +21 0.166778 305 +22 0.270037 307 +23 0.371609 380 +24 0.468078 306 +25 0.567395 312 +26 0.721079 534 +0 3 +1 2 +2 5 +3 4 +4 7 +5 6 +6 9 +7 8 +8 10 +9 11 +10 12 +11 12 +12 13 +13 15 +14 19 +15 17 +16 18 +17 20 +18 20 +19 20 +20 21 +21 22 +22 23 +23 24 +24 25 +25 26 diff --git a/src/Nerve_GIC/example/MapperDelta.cpp b/src/Nerve_GIC/example/MapperDelta.cpp deleted file mode 100644 index 1f8f1582..00000000 --- a/src/Nerve_GIC/example/MapperDelta.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include - -void usage(int nbArgs, char * const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, (argv[0] - 1)); - - std::string off_file_name(argv[1]); - int coord = atoi(argv[2]); - bool verb = 0; if(argc == 4) verb = 1; - - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - - // --------------------------------------- - // Init of a Mapper Delta from an OFF file - // --------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); - - GIC.set_graph_from_automatic_rips(off_file_name); - GIC.set_function_from_coordinate(coord, off_file_name); - GIC.set_color_from_coordinate(coord, off_file_name); - GIC.set_automatic_resolution_for_GICMAP(); - GIC.set_gain(); - GIC.set_cover_from_function(1); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_with_KeplerMapper(); - - Simplex_tree stree; GIC.create_complex(stree); - - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - - // ------------------------------------------ - // Display information about the Mapper Delta - // ------------------------------------------ - - if(verb){ - output_stream << "Mapper Delta is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; - - output_stream << "Iterator on Mapper Delta simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; - } - output_stream << std::endl; - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp new file mode 100644 index 00000000..aa12afe6 --- /dev/null +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -0,0 +1,61 @@ +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off coordinate \n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + + std::string off_file_name(argv[1]); + int coord = atoi(argv[2]); + bool verb = 0; if(argc == 4) verb = 1; + + // Type definitions + using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ + boost::property < vertex_filtration_t, Filtration_value >,\ + boost::property < edge_filtration_t, Filtration_value > >; + + // --------------------------------------- + // Init of a Mapper Delta from an OFF file + // --------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_function_from_coordinate(coord, off_file_name); + GIC.set_color_from_coordinate(off_file_name, coord); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); + GIC.set_cover_from_function(1); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.plot_with_KeplerMapper(); + + Simplex_tree stree; GIC.create_complex(stree); + + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); + + // ------------------------------------------ + // Display information about the Mapper Delta + // ------------------------------------------ + + if(verb){ + output_stream << "Mapper Delta is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + output_stream << "Iterator on Mapper Delta simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; + } + } + + return 0; +} diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.txt b/src/Nerve_GIC/example/MapperDeltaCoord.txt new file mode 100644 index 00000000..2c2296ea --- /dev/null +++ b/src/Nerve_GIC/example/MapperDeltaCoord.txt @@ -0,0 +1,125 @@ +Cloud +Function +0 0 +61 60 +0 -0.954369 220 +1 -0.954377 220 +2 -0.902361 54 +3 -0.901235 55 +4 -0.84796 27 +5 -0.844637 29 +6 -0.777883 37 +7 -0.778882 39 +8 -0.72868 42 +9 -0.72734 42 +10 -0.677728 48 +11 -0.676848 48 +12 -0.633796 48 +13 -0.634232 48 +14 -0.567924 52 +15 -0.567897 52 +16 -0.52287 77 +17 -0.522897 77 +18 -0.467859 105 +19 -0.467886 105 +20 -0.422377 87 +21 -0.422383 87 +22 -0.363537 80 +23 -0.363508 80 +24 -0.312836 126 +25 -0.267775 84 +26 -0.197152 78 +27 -0.149293 96 +28 -0.134636 48 +29 -0.134463 51 +30 -0.104389 93 +31 -0.108561 96 +32 -0.105219 93 +33 -0.0362235 183 +34 -0.0498358 53 +35 -0.050197 51 +36 -0.000444973 187 +37 0.000472738 42 +38 -0.000214643 42 +39 0.0616246 164 +40 0.0590725 29 +41 0.0590271 31 +42 0.108834 170 +43 0.110991 50 +44 0.110952 50 +45 0.158372 129 +46 0.161945 54 +47 0.161972 54 +48 0.210958 76 +49 0.221521 73 +50 0.221548 73 +51 0.263419 220 +52 0.324345 241 +53 0.371963 311 +54 0.422902 272 +55 0.476693 223 +56 0.530461 246 +57 0.58285 217 +58 0.63636 203 +59 0.690953 230 +60 0.76296 309 +0 3 +1 2 +2 4 +3 5 +4 6 +5 7 +6 9 +7 8 +8 10 +9 11 +10 13 +11 12 +12 14 +13 15 +14 17 +15 16 +16 18 +17 19 +18 20 +19 21 +20 22 +21 23 +22 24 +23 24 +24 25 +25 26 +26 27 +27 31 +28 30 +29 32 +30 35 +31 33 +32 34 +33 36 +34 37 +35 38 +36 39 +37 41 +38 40 +39 42 +40 43 +41 44 +42 45 +43 46 +44 47 +45 48 +46 49 +47 50 +48 51 +49 51 +50 51 +51 52 +52 53 +53 54 +54 55 +55 56 +56 57 +57 58 +58 59 +59 60 diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp new file mode 100644 index 00000000..20924b9c --- /dev/null +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -0,0 +1,61 @@ +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off coordinate \n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + + std::string off_file_name(argv[1]); + std::string func_file_name = argv[2]; + bool verb = 0; if(argc == 4) verb = 1; + + // Type definitions + using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ + boost::property < vertex_filtration_t, Filtration_value >,\ + boost::property < edge_filtration_t, Filtration_value > >; + + // --------------------------------------- + // Init of a Mapper Delta from an OFF file + // --------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_function_from_file(func_file_name); + GIC.set_color_from_file(func_file_name); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); + GIC.set_cover_from_function(1); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.plot_with_KeplerMapper(); + + Simplex_tree stree; GIC.create_complex(stree); + + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); + + // ------------------------------------------ + // Display information about the Mapper Delta + // ------------------------------------------ + + if(verb){ + output_stream << "Mapper Delta is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + output_stream << "Iterator on Mapper Delta simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; + } + } + + return 0; +} diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.txt b/src/Nerve_GIC/example/MapperDeltaFunc.txt new file mode 100644 index 00000000..046d2278 --- /dev/null +++ b/src/Nerve_GIC/example/MapperDeltaFunc.txt @@ -0,0 +1,16 @@ +Cloud +Function +0 0 +6 6 +0 -1382.24 20 +1 385.162 3 +2 246.455 12 +3 2204.66 4 +4 2238.94 5 +5 5346.1 39 +0 1 +0 2 +1 3 +2 4 +3 5 +4 5 diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index adcc715d..d4a68c71 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -3,16 +3,16 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain --v \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 1 0.3 --v \n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 10 0.3 --v \n"; exit(-1); // ----- >> } int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, (argv[0] - 1)); + if ((argc != 5) && (argc != 6)) usage(argc, (argv[0] - 1)); std::string off_file_name(argv[1]); int coord = atoi(argv[2]); - double resolution = atof(argv[3]); + int resolution = atoi(argv[3]); double gain = atof(argv[4]); bool verb = 0; if(argc == 6) verb = 1; @@ -28,11 +28,11 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); + GIC.set_graph_from_OFF(off_file_name); GIC.set_function_from_coordinate(coord, off_file_name); - GIC.set_color_from_coordinate(coord, off_file_name); - GIC.set_resolution_double(resolution); - GIC.set_gain(gain); - GIC.set_cover_from_function(1); + GIC.set_color_from_coordinate(off_file_name, --coord); + GIC.set_resolution_int(resolution); GIC.set_gain(gain); + GIC.set_cover_from_function(0); GIC.find_Nerve_simplices(); GIC.plot_with_KeplerMapper(); diff --git a/src/Nerve_GIC/example/Nerve.txt b/src/Nerve_GIC/example/Nerve.txt new file mode 100644 index 00000000..9ebb2fbb --- /dev/null +++ b/src/Nerve_GIC/example/Nerve.txt @@ -0,0 +1,45 @@ +Cloud +Function +0 0 +21 20 +0 -0.0149926 290 +1 -0.0152551 291 +2 -0.0695028 127 +3 -0.0700955 128 +4 -0.0449554 250 +5 -0.045006 251 +6 -0.0130144 247 +7 -0.0131973 247 +8 0.0766414 127 +9 -0.0118972 165 +10 -0.0121551 165 +11 0.0785204 128 +12 0.0559145 183 +13 -0.0298394 542 +14 0.0569878 181 +15 -0.0201742 388 +16 -0.00110905 208 +17 -0.00131087 208 +18 0.0228028 854 +19 0.0181739 764 +20 0.0307483 597 +0 2 +1 3 +2 5 +3 4 +4 6 +5 7 +6 9 +7 10 +8 12 +9 13 +10 13 +11 14 +12 16 +13 15 +14 17 +15 18 +16 18 +17 18 +18 19 +19 20 diff --git a/src/Nerve_GIC/example/simple_GIC.cpp b/src/Nerve_GIC/example/simple_GIC.cpp deleted file mode 100644 index 5161a46b..00000000 --- a/src/Nerve_GIC/example/simple_GIC.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include - -void usage(int nbArgs, char * const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain\n"; - std::cerr << " i.e.: " << progName << " ../../data/points/test.off 1.5 1 10 0.3 \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, (argv[0] - 1)); - - std::string off_file_name(argv[1]); - double threshold = atof(argv[2]); - //std::string func_file_name = argv[3]; - int coord = atoi(argv[3]); - double resolution = atof(argv[4]); - double gain = atof(argv[5]); - bool verb = 0; if(argc == 7) verb = 1; - - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); - - GIC.set_graph_from_automatic_rips(off_file_name); - //GIC.set_graph_from_rips(threshold, off_file_name); - //GIC.set_graph_from_OFF(off_file_name); - - GIC.set_function_from_coordinate(coord, off_file_name); - //GIC.set_function_from_file(func_file_name); - - GIC.set_color_from_coordinate(coord, off_file_name); - //GIC.set_color_from_file(func_file_name); - - GIC.set_automatic_resolution_for_GICMAP(); - GIC.set_gain(); - GIC.set_cover_from_function(1); - - //GIC.find_GIC_simplices(); - //GIC.find_Nerve_simplices(); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - - GIC.plot_with_KeplerMapper(); - - Simplex_tree stree; GIC.create_complex(stree); - - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if(verb){ - output_stream << "Graph induced complex is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; - - output_stream << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; - } - output_stream << std::endl; - } - } - - return 0; -} diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index abd833e0..c373b25c 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -45,6 +45,7 @@ #include // for std::max #include // for std::uint32_t #include +#include #define CONSTANT 10 #define ETA 0.001 @@ -549,7 +550,7 @@ class Graph_induced_complex { * @param[in] off_file_name name of the input .OFF file. * */ - void set_color_from_coordinate(int k = 0, const std::string& off_file_name){ + void set_color_from_coordinate(const std::string& off_file_name, int k = 0){ Points_off_reader off_reader(off_file_name); int numpts = off_reader.get_point_cloud().size(); for(int i = 0; i < numpts; i++) func_color.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); @@ -569,7 +570,7 @@ class Graph_induced_complex { /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a .pdf output. */ void plot_with_neato(){ - char mapp[11] = "mapper.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; + char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ maxv = std::max(maxv, iit->second.second); minv = std::min(minv, iit->second.second); @@ -598,7 +599,7 @@ class Graph_induced_complex { void plot_with_KeplerMapper(){ int num_simplices = simplices.size(); int num_edges = 0; - char mapp[11] = "mapper.txt"; std::ofstream graphic(mapp); + char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); for (int i = 0; i < num_simplices; i++) if (simplices[i].size() == 2) if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) @@ -711,11 +712,17 @@ class Graph_induced_complex { } public: - /** \brief Computes the simplices in the Mapper Delta. + /** \brief Computes the simplices in the Mapper Delta by looking at all the edges of the graph + * and adding the corresponding edges in the Mapper Delta if the images of the endpoints belong + * to consecutive intervals. + * + * \remark WARNING: the output of this function is correct ONLY if the cover is minimal, i.e. + * the gain is less than 0.5!!! + * */ void find_GICMAP_simplices_with_functional_minimal_cover(){ - int v1, v2; + int v1, v2; assert(gain < 0.5); // Loop on all points. for(std::map >::iterator it = cover.begin(); it != cover.end(); it++){ -- cgit v1.2.3 From b90fa03eb3157e4603e922e120673c80cb05732e Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 9 May 2017 14:44:31 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2410 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: bd5bb67cfc029182dd794969dd2548ba2621ae1c --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 44e23983..8c31b262 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -137,9 +137,10 @@ namespace graph_induced_complex { * * \include MapperDeltaFunc.txt * - * If you have python and firefox, all the previous .txt files can then be plotted using - * Kepler-Mapper - * with the following: + * If you have python and firefox, all the previous .txt files can then be displayed in a browser. + * We provide a .py file called visu.py that comes from the + * Kepler-Mapper library. + * One can visualize data by launching: * * \code python visu.py && firefox SC_visu.html * \endcode -- cgit v1.2.3 From 9e1a4e80bc3f2cffc965dc3f5194ea308ca9afab Mon Sep 17 00:00:00 2001 From: mcarrier Date: Wed, 10 May 2017 15:32:55 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2411 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 92552c44d0a2369735bd29495c3504f53010a06c --- src/Nerve_GIC/doc/COPYRIGHT | 19 ++++++ src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 25 ++++++-- src/Nerve_GIC/doc/gic_complex.png | Bin 0 -> 56761 bytes src/Nerve_GIC/doc/nerve.png | Bin 0 -> 45129 bytes src/Nerve_GIC/include/gudhi/GIC.h | 70 +++++++++++++++------ src/Nerve_GIC/test/data/cloud | 5 ++ src/Nerve_GIC/test/data/cover | 3 + src/Nerve_GIC/test/data/graph | 3 + src/Nerve_GIC/test/test.cpp | 79 ++++++++++++++++++++++++ 9 files changed, 181 insertions(+), 23 deletions(-) create mode 100644 src/Nerve_GIC/doc/COPYRIGHT create mode 100644 src/Nerve_GIC/doc/gic_complex.png create mode 100644 src/Nerve_GIC/doc/nerve.png create mode 100644 src/Nerve_GIC/test/data/cloud create mode 100644 src/Nerve_GIC/test/data/cover create mode 100644 src/Nerve_GIC/test/data/graph create mode 100644 src/Nerve_GIC/test/test.cpp (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/COPYRIGHT b/src/Nerve_GIC/doc/COPYRIGHT new file mode 100644 index 00000000..0c36a526 --- /dev/null +++ b/src/Nerve_GIC/doc/COPYRIGHT @@ -0,0 +1,19 @@ +The files of this directory are part of the Gudhi Library. The Gudhi library +(Geometric Understanding in Higher Dimensions) is a generic C++ library for +computational topology. + +Author(s): Mathieu Carrière + +Copyright (C) 2017 INRIA + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 8c31b262..f30d51a4 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -33,23 +33,31 @@ namespace graph_induced_complex { * * @{ * + * \section covers Covers + * + * Nerves and Graph Induced Complexes require a cover C of the input point cloud P, + * that is a set of subsets of P whose union is P itself. + * Very often, this cover is obtained from the preimage of a family of intervals covering + * the image of some scalar-valued function f defined on P. This family is parameterized + * by its resolution, which can be either the number or the length of the intervals, + * and its gain, which is the overlap percentage between consecutive intervals (ordered by their first values). + * * \section nerves Nerves * * \subsection nervedefinition Nerve definition * - * Assume you are given a cover C of your point cloud P, that is a set of subsets of P - * whose union is P itself. Then, the Nerve of this cover + * Assume you are given a cover C of your point cloud P. Then, the Nerve of this cover * is the simplicial complex that has one k-simplex per k-fold intersection of cover elements. * See also Wikipedia . * + * \image html "nerve.png" "Nerve of a double torus" + * * \subsection nerveexample Example * * This example builds the Nerve of a point cloud sampled on a 3D human shape (human.off). * The cover C comes from the preimages of intervals (10 intervals with gain 0.3) * covering the height function (coordinate 2), * which are then refined into their connected components using the triangulation of the .OFF file. - * All intervals have the resolution (either the length or the number of the intervals) - * and gain (overlap percentage). * * \include Nerve_GIC/Nerve.cpp * @@ -62,6 +70,13 @@ namespace graph_induced_complex { * * \include Nerve_GIC/Nerve.txt * + * The first three lines are requirements for visualization with Kepler-Mapper. + * The fourth line contains the number of vertices nv and edges ne of the Nerve. + * The next nv lines represent the vertices. Each line contains the vertex ID, + * the number of data points it contains, and their average color function value. + * Finally, the next ne lines represent the edges, characterized by the ID of their vertices. + * + * * \section gic Graph Induced Complexes (GIC) * * \subsection gicdefinition GIC definition @@ -73,6 +88,8 @@ namespace graph_induced_complex { * See this article * for more details. * + * \image html "gic_complex.png" "GIC of a point cloud." + * * \subsection gicexample Example * * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). diff --git a/src/Nerve_GIC/doc/gic_complex.png b/src/Nerve_GIC/doc/gic_complex.png new file mode 100644 index 00000000..fb4b20ad Binary files /dev/null and b/src/Nerve_GIC/doc/gic_complex.png differ diff --git a/src/Nerve_GIC/doc/nerve.png b/src/Nerve_GIC/doc/nerve.png new file mode 100644 index 00000000..b66da4a4 Binary files /dev/null and b/src/Nerve_GIC/doc/nerve.png differ diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index c373b25c..e9b7a1f1 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -162,10 +162,21 @@ class Graph_induced_complex { * */ void set_graph_from_file(const std::string& graph_file_name){ - int neighb; int vid; std::ifstream input(graph_file_name); std::string line; std::vector edge(2); + int neighb; int vid; std::ifstream input(graph_file_name); std::string line; std::vector edge(2); int n = 0; while(std::getline(input,line)){ std::stringstream stream(line); stream >> vid; edge[0] = vid; while(stream >> neighb){edge[1] = neighb; st.insert_simplex_and_subfaces(edge);} + n++; + } + + std::vector empty; + for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for (auto simplex : st.complex_simplex_range()) { + if(st.dimension(simplex) == 1){ + std::vector vertices; + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + } } } @@ -191,6 +202,16 @@ class Graph_induced_complex { } i++; } + + std::vector empty; + for(int i = 0; i < numpts; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for (auto simplex : st.complex_simplex_range()) { + if(st.dimension(simplex) == 1){ + std::vector vertices; + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } } public: // Set graph from Rips complex. @@ -204,6 +225,17 @@ class Graph_induced_complex { Points_off_reader off_reader(off_file_name); Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), threshold, Euclidean_distance()); rips_complex_from_points.create_complex(st, 1); data_dimension = off_reader.get_point_cloud()[0].size(); + + std::vector empty; int n = off_reader.get_point_cloud().size(); + for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for (auto simplex : st.complex_simplex_range()) { + if(st.dimension(simplex) == 1){ + std::vector vertices; + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } + } public: // Automatic tuning of Rips complex. @@ -277,6 +309,16 @@ class Graph_induced_complex { Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), delta, Euclidean_distance()); rips_complex_from_points.create_complex(st, 1); + std::vector empty; + for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for (auto simplex : st.complex_simplex_range()) { + if(st.dimension(simplex) == 1){ + std::vector vertices; + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } + } @@ -337,7 +379,7 @@ class Graph_induced_complex { std::ifstream input(cover_file_name); std::string line; while(std::getline(input,line)){ cov_elts.clear(); std::stringstream stream(line); - while(stream >> cov){cov_elts.push_back(cov); cov_number.push_back(cov);} + while(stream >> cov){cov_elts.push_back(cov); cov_number.push_back(cov); cover_fct.insert(std::pair(cov,cov));} cover.insert(std::pair >(vertex_id, cov_elts)); vertex_id++; } std::vector::iterator it; @@ -442,17 +484,6 @@ class Graph_induced_complex { std::vector points(num_pts); for(int i = 0; i < num_pts; i++) points[i] = i; std::sort(points.begin(),points.end(),functional_comp); - // Build adjacency matrix - std::vector empty; - for(int i = 0; i < num_pts; i++) adjacency_matrix.insert(std::pair >(points[i],empty)); - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } - int id = 0; int pos = 0; double min_prop_int; double max_prop_int; for(int i = 0; i < res; i++){ @@ -627,7 +658,6 @@ class Graph_induced_complex { public: /** \brief Creates the simplicial complex. * - * \tparam SimplicialComplexForGIC must meet `SimplicialComplexForRips` concept. * @param[in] complex SimplicialComplexForGIC to be created. * */ @@ -685,14 +715,16 @@ class Graph_induced_complex { } // Remove edges - int current_id = 1; - auto simplex = st.complex_simplex_range().begin(); int num_rem = 0; - for(int i = 0; i < simplex_id-1; i++){ + if(simplex_to_remove.size() > 1){ + int current_id = 1; + auto simplex = st.complex_simplex_range().begin(); int num_rem = 0; + for(int i = 0; i < simplex_id-1; i++){ int j = i+1; auto simplex_tmp = simplex; simplex_tmp++; if(j == simplex_to_remove[current_id]){st.remove_maximal_simplex(*simplex_tmp); current_id++; num_rem++;} else simplex++; - } simplex = st.complex_simplex_range().begin(); - for(int i = 0; i < simplex_to_remove[0]; i++) simplex++; st.remove_maximal_simplex(*simplex); + } simplex = st.complex_simplex_range().begin(); + for(int i = 0; i < simplex_to_remove[0]; i++) simplex++; st.remove_maximal_simplex(*simplex); + } // Build the Simplex Tree corresponding to the graph st.expansion(maximal_dim); diff --git a/src/Nerve_GIC/test/data/cloud b/src/Nerve_GIC/test/data/cloud new file mode 100644 index 00000000..82fc5c79 --- /dev/null +++ b/src/Nerve_GIC/test/data/cloud @@ -0,0 +1,5 @@ +OFF +3 0 0 +0 0 0 +2 1 0 +4 0 0 \ No newline at end of file diff --git a/src/Nerve_GIC/test/data/cover b/src/Nerve_GIC/test/data/cover new file mode 100644 index 00000000..5f5fbe75 --- /dev/null +++ b/src/Nerve_GIC/test/data/cover @@ -0,0 +1,3 @@ +1 +2 +3 \ No newline at end of file diff --git a/src/Nerve_GIC/test/data/graph b/src/Nerve_GIC/test/data/graph new file mode 100644 index 00000000..37142800 --- /dev/null +++ b/src/Nerve_GIC/test/data/graph @@ -0,0 +1,3 @@ +0 1 +0 2 +1 2 \ No newline at end of file diff --git a/src/Nerve_GIC/test/test.cpp b/src/Nerve_GIC/test/test.cpp new file mode 100644 index 00000000..20e5ee4d --- /dev/null +++ b/src/Nerve_GIC/test/test.cpp @@ -0,0 +1,79 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE "graph_induced_complex" + +#include +#include // float comparison +#include +#include +#include +#include // std::max +#include +#include +#include + +bool are_almost_the_same(float a, float b) { + return std::fabs(a - b) < std::numeric_limits::epsilon(); +} + +BOOST_AUTO_TEST_CASE(check_nerve) { + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); + std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); + std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.find_Nerve_simplices(); Simplex_tree stree; GIC.create_complex(stree); + + BOOST_CHECK(stree.num_vertices() == 3); + BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 0); + BOOST_CHECK(stree.dimension() == 0); +} + +BOOST_AUTO_TEST_CASE(check_GICMAP) { + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(1); + std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); + std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); + std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Simplex_tree stree; GIC.create_complex(stree); + + BOOST_CHECK(stree.num_vertices() == 3); + BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 2); + BOOST_CHECK(stree.dimension() == 1); +} + +BOOST_AUTO_TEST_CASE(check_GIC) { + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); + std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); + std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); + + BOOST_CHECK(stree.num_vertices() == 3); + BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 4); + BOOST_CHECK(stree.dimension() == 2); +} + + -- cgit v1.2.3 From 47b98207fa51f6a05094334ebf4471968a1bc526 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Sat, 13 May 2017 16:14:33 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2415 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 24964dc19f3bf6646ac5c8218b12714f4821cadc --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 8 +- src/Nerve_GIC/example/CMakeLists.txt | 3 - src/Nerve_GIC/example/GIC.cpp | 10 +- src/Nerve_GIC/example/GIC.txt | 125 +++++++++++------ src/Nerve_GIC/example/GICvoronoi.cpp | 8 +- src/Nerve_GIC/example/MapperDeltaCoord.cpp | 10 +- src/Nerve_GIC/example/MapperDeltaCoord.txt | 173 +++++++++++++----------- src/Nerve_GIC/example/MapperDeltaFunc.cpp | 6 +- src/Nerve_GIC/example/MapperDeltaFunc.txt | 7 +- src/Nerve_GIC/example/Nerve.cpp | 8 +- src/Nerve_GIC/example/Nerve.txt | 49 +++---- src/Nerve_GIC/include/gudhi/GIC.h | 105 +++++++++++--- src/Nerve_GIC/test/test_GIC.cpp | 17 ++- 13 files changed, 324 insertions(+), 205 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index f30d51a4..9d7883e0 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -93,9 +93,9 @@ namespace graph_induced_complex { * \subsection gicexample Example * * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). - * The cover C comes from the preimages of intervals (with length 0.1 and gain 0) + * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) * covering the height function (coordinate 2), - * and the graph G comes from a Rips complex built with threshold 0.1. + * and the graph G comes from a Rips complex built with threshold 0.075. * Note that if the gain is too big, the number of cliques increases a lot, * which make the computation time much larger. * @@ -103,7 +103,7 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./GIC ../../../data/points/human.off 0.1 2 0.1 0 + * \code $> ./GIC ../../../data/points/human.off 0.075 2 0.075 0 * \endcode * * the program output is: @@ -159,7 +159,7 @@ namespace graph_induced_complex { * Kepler-Mapper library. * One can visualize data by launching: * - * \code python visu.py && firefox SC_visu.html + * \code python visu.py && firefox SC.html * \endcode * * \copyright GNU General Public License v3. diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index a4cb0f03..a2e4efe5 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -13,9 +13,6 @@ target_link_libraries(MapperDeltaCoord ${Boost_SYSTEM_LIBRARY}) add_executable ( MapperDeltaFunc MapperDeltaFunc.cpp ) target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) -add_executable ( GICvoronoi GICvoronoi.cpp ) -target_link_libraries(GICvoronoi ${Boost_SYSTEM_LIBRARY}) - file(COPY visu.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) if (TBB_FOUND) diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index 1ab15ecc..cae0d55d 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain\n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 0.075 2 10 0.3 \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 0.075 2 0.075 0 \n"; exit(-1); // ----- >> } @@ -24,10 +24,12 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_color_from_coordinate(off_file_name, coord); - GIC.set_function_from_coordinate(coord, off_file_name); + GIC.read_point_cloud(off_file_name); - GIC.set_graph_from_rips(threshold, off_file_name); + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); + + GIC.set_graph_from_rips(threshold); GIC.set_resolution_double(resolution); GIC.set_gain(gain); GIC.set_cover_from_function(1); diff --git a/src/Nerve_GIC/example/GIC.txt b/src/Nerve_GIC/example/GIC.txt index 9871cf41..6d9f07f5 100644 --- a/src/Nerve_GIC/example/GIC.txt +++ b/src/Nerve_GIC/example/GIC.txt @@ -1,57 +1,92 @@ -Cloud -Function -0 0 -27 26 -0 -0.949318 240 -1 -0.949346 240 -2 -0.822129 50 -3 -0.822037 51 -4 -0.723847 48 -5 -0.722679 48 -6 -0.625409 57 -7 -0.625771 57 -8 -0.528161 99 -9 -0.528188 99 -10 -0.436343 126 -11 -0.436356 126 -12 -0.330775 194 -13 -0.233638 98 -14 -0.116276 100 -15 -0.129017 144 -16 -0.116513 103 -17 -0.0213554 243 -18 -0.0301512 65 -19 -0.0315443 66 -20 0.0750623 308 -21 0.166778 305 -22 0.270037 307 -23 0.371609 380 -24 0.468078 306 -25 0.567395 312 -26 0.721079 534 +../../../../data/points/human.off +coordinate 2 +coordinate 2 +0.075 0 +44 43 +0 -0.954369 220 +1 -0.954377 220 +2 -0.869559 45 +3 -0.869405 45 +4 -0.794255 25 +5 -0.795222 26 +6 -0.723847 48 +7 -0.722679 48 +8 -0.633796 48 +9 -0.634232 48 +10 -0.564455 48 +11 -0.564428 48 +12 -0.491837 98 +13 -0.491864 98 +14 -0.422733 88 +15 -0.422739 88 +16 -0.343376 74 +17 -0.343367 74 +18 -0.271635 96 +19 -0.190912 96 +20 -0.158869 3 +21 -0.158905 3 +22 -0.114958 97 +23 -0.108561 96 +24 -0.115241 100 +25 -0.0317845 185 +26 -0.041866 50 +27 -0.0429161 51 +28 0.0353033 158 +29 0.0275106 31 +30 0.0252492 30 +31 0.107097 170 +32 0.110226 51 +33 0.110952 50 +34 0.186188 57 +35 0.176564 97 +36 0.186215 57 +37 0.256898 232 +38 0.338811 268 +39 0.406299 273 +40 0.481925 220 +41 0.555454 241 +42 0.632415 198 +43 0.744473 407 0 3 1 2 -2 5 -3 4 +2 4 +3 5 4 7 5 6 6 9 7 8 8 10 9 11 -10 12 +10 13 11 12 -12 13 +12 14 13 15 -14 19 +14 16 15 17 16 18 -17 20 -18 20 -19 20 -20 21 -21 22 -22 23 -23 24 -24 25 -25 26 +17 18 +18 19 +19 23 +20 22 +21 24 +22 27 +23 25 +24 26 +25 28 +26 29 +27 30 +28 31 +29 33 +30 32 +31 35 +32 34 +33 36 +34 37 +35 37 +36 37 +37 38 +38 39 +39 40 +40 41 +41 42 +42 43 diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp index 2d50ab4d..141268a5 100644 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -22,15 +22,17 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_color_from_coordinate(off_file_name); + GIC.read_point_cloud(off_file_name); + + GIC.set_color_from_coordinate(); GIC.set_graph_from_OFF(off_file_name); - GIC.set_cover_from_Voronoi(m, off_file_name); + GIC.set_cover_from_Voronoi(m); GIC.find_GIC_simplices(); - GIC.plot_with_KeplerMapper(); + GIC.plot_with_Geomview(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index 950ee58a..c4d86caf 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate \n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 --v \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 --v \n"; exit(-1); // ----- >> } @@ -21,10 +21,12 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_color_from_coordinate(off_file_name, coord); - GIC.set_function_from_coordinate(coord, off_file_name); + GIC.read_point_cloud(off_file_name); - GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); + + GIC.set_graph_from_automatic_rips(); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.txt b/src/Nerve_GIC/example/MapperDeltaCoord.txt index 2c2296ea..c1ead814 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.txt +++ b/src/Nerve_GIC/example/MapperDeltaCoord.txt @@ -1,68 +1,73 @@ -Cloud -Function -0 0 -61 60 -0 -0.954369 220 -1 -0.954377 220 -2 -0.902361 54 -3 -0.901235 55 +../../../../data/points/human.off +coordinate 2 +coordinate 2 +0.072934 0.3 +65 64 +0 -0.954816 218 +1 -0.954824 218 +2 -0.903705 57 +3 -0.9035 57 4 -0.84796 27 -5 -0.844637 29 -6 -0.777883 37 -7 -0.778882 39 -8 -0.72868 42 -9 -0.72734 42 -10 -0.677728 48 -11 -0.676848 48 +5 -0.847937 27 +6 -0.794255 25 +7 -0.791001 29 +8 -0.73369 36 +9 -0.733071 35 +10 -0.683795 40 +11 -0.682735 40 12 -0.633796 48 13 -0.634232 48 -14 -0.567924 52 -15 -0.567897 52 -16 -0.52287 77 -17 -0.522897 77 -18 -0.467859 105 -19 -0.467886 105 -20 -0.422377 87 -21 -0.422383 87 -22 -0.363537 80 -23 -0.363508 80 -24 -0.312836 126 -25 -0.267775 84 -26 -0.197152 78 -27 -0.149293 96 -28 -0.134636 48 -29 -0.134463 51 -30 -0.104389 93 -31 -0.108561 96 -32 -0.105219 93 -33 -0.0362235 183 -34 -0.0498358 53 -35 -0.050197 51 -36 -0.000444973 187 -37 0.000472738 42 -38 -0.000214643 42 -39 0.0616246 164 -40 0.0590725 29 -41 0.0590271 31 -42 0.108834 170 -43 0.110991 50 -44 0.110952 50 -45 0.158372 129 -46 0.161945 54 -47 0.161972 54 -48 0.210958 76 -49 0.221521 73 -50 0.221548 73 -51 0.263419 220 -52 0.324345 241 -53 0.371963 311 -54 0.422902 272 -55 0.476693 223 -56 0.530461 246 -57 0.58285 217 -58 0.63636 203 -59 0.690953 230 -60 0.76296 309 +14 -0.585137 64 +15 -0.585197 64 +16 -0.527997 66 +17 -0.528025 66 +18 -0.478646 93 +19 -0.478673 93 +20 -0.43674 99 +21 -0.436761 99 +22 -0.380976 70 +23 -0.380955 70 +24 -0.33528 72 +25 -0.335279 72 +26 -0.277496 112 +27 -0.232679 96 +28 -0.1842 77 +29 -0.149795 16 +30 -0.150304 16 +31 -0.119698 90 +32 -0.122291 74 +33 -0.119626 94 +34 -0.0849586 74 +35 -0.0681724 107 +36 -0.0856915 73 +37 -0.0263688 211 +38 -0.025358 49 +39 -0.025088 50 +40 0.0287585 146 +41 0.022349 34 +42 0.0213867 34 +43 0.0768417 175 +44 0.081987 34 +45 0.0819086 34 +46 0.128047 150 +47 0.129348 53 +48 0.128561 54 +49 0.173705 104 +50 0.180884 53 +51 0.180911 53 +52 0.229553 68 +53 0.233083 77 +54 0.23311 77 +55 0.283572 215 +56 0.338574 266 +57 0.381249 299 +58 0.433627 244 +59 0.485309 214 +60 0.535849 237 +61 0.588559 193 +62 0.638771 196 +63 0.692993 222 +64 0.763344 307 0 3 1 2 2 4 @@ -86,40 +91,44 @@ Function 20 22 21 23 22 24 -23 24 -24 25 +23 25 +24 26 25 26 26 27 -27 31 -28 30 -29 32 -30 35 -31 33 -32 34 +27 28 +28 32 +29 31 +30 33 +31 34 +32 35 33 36 -34 37 -35 38 -36 39 -37 41 -38 40 +34 39 +35 37 +36 38 +37 40 +38 41 39 42 40 43 -41 44 -42 45 +41 45 +42 44 43 46 44 47 45 48 46 49 47 50 48 51 -49 51 -50 51 -51 52 -52 53 -53 54 +49 52 +50 53 +51 54 +52 55 +53 55 54 55 55 56 56 57 57 58 58 59 59 60 +60 61 +61 62 +62 63 +63 64 diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index 658b0273..1c3a77a5 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate \n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 --v \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; exit(-1); // ----- >> } @@ -21,10 +21,12 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); + GIC.read_point_cloud(off_file_name); + GIC.set_color_from_file(func_file_name); GIC.set_function_from_file(func_file_name); - GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_graph_from_automatic_rips(); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.txt b/src/Nerve_GIC/example/MapperDeltaFunc.txt index 046d2278..01b0fbea 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.txt +++ b/src/Nerve_GIC/example/MapperDeltaFunc.txt @@ -1,6 +1,7 @@ -Cloud -Function -0 0 +../../../../data/points/COIL_database/lucky_cat.off +../../../../data/points/COIL_database/lucky_cat_PCA1 +../../../../data/points/COIL_database/lucky_cat_PCA1 +2592.99 0.3 6 6 0 -1382.24 20 1 385.162 3 diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index a0de31ae..a549f544 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain --v \n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 2 10 0.3 --v \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/human.off 2 10 0.3 --v \n"; exit(-1); // ----- >> } @@ -23,8 +23,10 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_color_from_coordinate(off_file_name, coord); - GIC.set_function_from_coordinate(coord, off_file_name); + GIC.read_point_cloud(off_file_name); + + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); GIC.set_graph_from_OFF(off_file_name); diff --git a/src/Nerve_GIC/example/Nerve.txt b/src/Nerve_GIC/example/Nerve.txt index 9ebb2fbb..a6fad665 100644 --- a/src/Nerve_GIC/example/Nerve.txt +++ b/src/Nerve_GIC/example/Nerve.txt @@ -1,28 +1,29 @@ -Cloud -Function -0 0 +../../../../data/points/human.off +coordinate 2 +coordinate 2 +0 0.3 21 20 -0 -0.0149926 290 -1 -0.0152551 291 -2 -0.0695028 127 -3 -0.0700955 128 -4 -0.0449554 250 -5 -0.045006 251 -6 -0.0130144 247 -7 -0.0131973 247 -8 0.0766414 127 -9 -0.0118972 165 -10 -0.0121551 165 -11 0.0785204 128 -12 0.0559145 183 -13 -0.0298394 542 -14 0.0569878 181 -15 -0.0201742 388 -16 -0.00110905 208 -17 -0.00131087 208 -18 0.0228028 854 -19 0.0181739 764 -20 0.0307483 597 +0 -0.927412 290 +1 -0.927011 291 +2 -0.708477 127 +3 -0.709946 128 +4 -0.513775 250 +5 -0.514319 251 +6 -0.376304 247 +7 -0.376315 247 +8 -0.104886 127 +9 -0.168391 165 +10 -0.16871 165 +11 -0.105984 128 +12 -0.0174106 183 +13 0.0197303 542 +14 -0.0161482 181 +15 0.159925 388 +16 0.204922 208 +17 0.204892 208 +18 0.368798 854 +19 0.542323 764 +20 0.709288 597 0 2 1 3 2 5 diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 205aa87e..7be71df3 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -67,6 +67,7 @@ typedef gss::Kd_tree_search Points_ds; std::map func; std::map func_color; +Gudhi::Points_off_reader off_reader("tmp"); namespace Gudhi { @@ -110,6 +111,10 @@ class Graph_induced_complex { int resolution_int; double resolution_double; double gain; + std::vector subsamples; + std::string cover_name; + std::string point_cloud_name; + std::string color_name; // Simplex comparator private: @@ -160,6 +165,12 @@ class Graph_induced_complex { public: void set_verbose(bool verb = 0){verbose = verb;} + public: + void read_point_cloud(const std::string& off_file_name){ + off_reader = Points_off_reader(off_file_name); + point_cloud_name = off_file_name; + } + // ******************************************************************************************************************* // Graphs. // ******************************************************************************************************************* @@ -230,8 +241,7 @@ class Graph_induced_complex { * @param[in] off_file_name name of the input .OFF file. * */ - void set_graph_from_rips(const double& threshold, const std::string& off_file_name){ - Points_off_reader off_reader(off_file_name); + void set_graph_from_rips(const double& threshold){ Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), threshold, Euclidean_distance()); rips_complex_from_points.create_complex(st, 1); data_dimension = off_reader.get_point_cloud()[0].size(); @@ -254,9 +264,8 @@ class Graph_induced_complex { * @param[in] N number of subsampling iteration (default value 100). * */ - void set_graph_from_automatic_rips(const std::string& off_file_name, int N = 100){ + void set_graph_from_automatic_rips(int N = 100){ - Points_off_reader off_reader(off_file_name); int n = off_reader.get_point_cloud().size(); int m = floor(n/pow(log(n)/log(CONSTANT),1+ETA)); m = std::min(m,n-1); std::vector samples(m); double delta = 0; int dim = off_reader.get_point_cloud()[0].size(); data_dimension = dim; @@ -268,7 +277,7 @@ class Graph_induced_complex { for(int i = 0; i < n; i++) dist[i] = dumb; double d; - char distances[100]; sprintf(distances,"%s_dist",(char*) off_file_name.c_str()); + char distances[100]; sprintf(distances,"%s_dist",(char*) point_cloud_name.c_str()); std::ifstream input(distances, std::ios::out | std::ios::binary); if(input.good()){ @@ -347,6 +356,7 @@ class Graph_induced_complex { std::stringstream stream(line); stream >> f; func.insert(std::pair(vertex_id, f)); vertex_id++; } + cover_name = func_file_name; } public: // Set function from kth coordinate @@ -356,10 +366,11 @@ class Graph_induced_complex { * @param[in] off_file_name name of the input .OFF file. * */ - void set_function_from_coordinate(const int& k, const std::string& off_file_name){ - Points_off_reader off_reader(off_file_name); + void set_function_from_coordinate(const int& k){ int n = off_reader.get_point_cloud().size(); for(int i = 0; i < n; i++) func.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); + char coordinate[100]; sprintf(coordinate, "coordinate %d", k); + cover_name = coordinate; } public: // Set function from vector. @@ -399,20 +410,23 @@ class Graph_induced_complex { std::sort(cov_number.begin(),cov_number.end()); it = std::unique(cov_number.begin(),cov_number.end()); cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size()-1; for(int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; + cover_name = cover_file_name; } + /* TODO: complete method with nearest geodesic neighbor + public: // Set cover from Voronoi /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. * * @param[in] m number of points in the subsample. * @param[in] off_file_name name of the input .OFF file. * - */ - void set_cover_from_Voronoi(const int& m, const std::string& off_file_name){ - Points_off_reader off_reader(off_file_name); + + void set_cover_from_Voronoi(const int& m){ + int n = off_reader.get_point_cloud().size(); data_dimension = off_reader.get_point_cloud()[0].size(); Pointsd pointsd(m+1); std::vector samples(m); SampleWithoutReplacement(n,m,samples); - double* coord = new double[data_dimension]; + double* coord = new double[data_dimension]; subsamples = samples; for(int i = 1; i <= m; i++){ for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[samples[i-1]][j]; @@ -424,7 +438,7 @@ class Graph_induced_complex { for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[i][j]; pointsd[0] = Pointd(data_dimension, coord+0, coord + data_dimension); Points_ds points_ds(pointsd); auto knn_range = points_ds.query_k_nearest_neighbors(pointsd[0], 2, true); - Cover_t cluster = (knn_range.begin()+1)->first-1; + Cover_t cluster; // = nearest geodesic neighbor. if(cluster >= 0){ // Case where i is not a subsample point. cover[i].push_back(cluster); cover_color[cluster].second += func_color[i]; cover_color[cluster].first++; } @@ -437,9 +451,10 @@ class Graph_induced_complex { for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; delete [] coord; - maximal_dim = m-1; + maximal_dim = m-1; cover_name = "Voronoi"; } + */ public: // Automatic tuning of resolution for Mapper Delta. /** \brief Computes the optimal length of intervals for a Mapper Delta. @@ -627,6 +642,7 @@ class Graph_induced_complex { std::stringstream stream(line); stream >> f; func_color.insert(std::pair(vertex_id, f)); vertex_id++; } + color_name = color_file_name; } public: // Set color from kth coordinate @@ -636,10 +652,11 @@ class Graph_induced_complex { * @param[in] off_file_name name of the input .OFF file. * */ - void set_color_from_coordinate(const std::string& off_file_name, int k = 0){ - Points_off_reader off_reader(off_file_name); + void set_color_from_coordinate(int k = 0){ int n = off_reader.get_point_cloud().size(); for(int i = 0; i < n; i++) func_color[i] = off_reader.get_point_cloud()[i][k]; + char coordinate[100]; sprintf(coordinate, "coordinate %d", k); + color_name = coordinate; } public: // Set color from vector. @@ -652,8 +669,9 @@ class Graph_induced_complex { for(unsigned int i = 0; i < color.size(); i++) func_color.insert(std::pair(i, color[i])); } - public: // Create a .dot file that can be compiled with neato to produce a .pdf file + public: // Create a .dot file that can be compiled with neato to produce a .pdf file. /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a .pdf output. + * For Mapper Delta only. */ void plot_with_neato(){ char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; @@ -682,8 +700,9 @@ class Graph_induced_complex { if(systemRet == -1) std::cout << "Visualization failed. Do you have neato?" << std::endl; } - public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file - /** \brief Creates a .html file for KeplerMapper once the simplicial complex is computed to get a nice visualization in browser. + public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file. + /** \brief Creates a .html file for KeplerMapper once the simplicial complex is computed to get a nice visualization + * of its 1_skeleton in browser. */ void plot_with_KeplerMapper(){ @@ -694,9 +713,10 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) num_edges++; - graphic << "Cloud" << std::endl; - graphic << "Function" << std::endl; - graphic << 0 << " " << 0 << std::endl; + graphic << point_cloud_name << std::endl; + graphic << cover_name << std::endl; + graphic << color_name << std::endl; + graphic << resolution_double << " " << gain << std::endl; graphic << cover_color.size() << " " << num_edges << std::endl; for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) @@ -707,11 +727,52 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; graphic.close(); - char command[100]; sprintf(command, "python visu.py && firefox SC_visu.html"); + char command[100]; sprintf(command, "python visu.py && firefox SC.html"); int systemRet = system(command); if(systemRet == -1) std::cout << "Visualization failed. Do you have python and firefox?" << std::endl; } + /* + public: // Create a .off file that can be visualized with Geomview. + /** \brief Creates a .off file for visualization with Geomview. + * For GIC computed with Voronoi only. + * + void plot_with_Geomview(){ + + assert(data_dimension <= 3); + char mapp[11] = "SC.off"; std::ofstream graphic(mapp); + graphic << "OFF" << std::endl; int m = subsamples.size(); int numedges = 0; int numfaces = 0; + std::vector > edges, faces; int numsimplices = simplices.size(); + for (int i = 0; i < numsimplices; i++) { + if(simplices[i].size() == 2){ numedges++; + edges.push_back(simplices[i]); + } + if(simplices[i].size() == 3){ numfaces++; + faces.push_back(simplices[i]); + } + } + graphic << m << " " << numedges + numfaces << std::endl; + for(int i = 0; i < m; i++) graphic << off_reader.get_point_cloud()[subsamples[i]][0] << " " \ + << off_reader.get_point_cloud()[subsamples[i]][1] << " " \ + << off_reader.get_point_cloud()[subsamples[i]][2] << std::endl; + for(int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; + for(int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; + graphic.close(); + + char cl[11] = "cloud.off"; std::ofstream cloud(cl); + cloud << "COFF" << std::endl << 4706 << " " << 9408 << std::endl; + for(int i = 0; i < off_reader.get_point_cloud().size(); i++) + cloud << off_reader.get_point_cloud()[i][0] << " " << off_reader.get_point_cloud()[i][1] << " " << off_reader.get_point_cloud()[i][2] << " " <<\ + cover[i][0]*1.0/(maximal_dim+1) << " " <<\ + 0 << " " <<\ + cover[i][0]*1.0/(maximal_dim+1) << " " << 0.5 << std::endl; + + char command[100]; sprintf(command, "geomview SC.off"); + int systemRet = system(command); + if(systemRet == -1) std::cout << "Visualization failed. Do you have geomview?" << std::endl; + + }*/ + // ******************************************************************************************************************* // ******************************************************************************************************************* diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index 1ca44f19..baf494e3 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -40,9 +40,10 @@ bool are_almost_the_same(float a, float b) { BOOST_AUTO_TEST_CASE(check_nerve) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.set_color_from_coordinate(); GIC.find_Nerve_simplices(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); @@ -53,9 +54,10 @@ BOOST_AUTO_TEST_CASE(check_nerve) { BOOST_AUTO_TEST_CASE(check_GICMAP) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(1); + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.set_color_from_coordinate(); GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); @@ -66,9 +68,10 @@ BOOST_AUTO_TEST_CASE(check_GICMAP) { BOOST_AUTO_TEST_CASE(check_GICcover) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - std::string cloud_file_name("data/cloud"); GIC.set_color_from_file(cloud_file_name); + GIC.set_color_from_coordinate(); GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); @@ -76,17 +79,19 @@ BOOST_AUTO_TEST_CASE(check_GICcover) { BOOST_CHECK(stree.dimension() == 2); } +/* BOOST_AUTO_TEST_CASE(check_GICvoronoi) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; - std::string cloud_file_name("data/cloud"); GIC.set_color_from_coordinate(cloud_file_name); + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); + GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); - GIC.set_cover_from_Voronoi(2,cloud_file_name); + GIC.set_cover_from_Voronoi(2); GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 2); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 1); BOOST_CHECK(stree.dimension() == 1); } - +*/ -- cgit v1.2.3 From 7d6b227a4529c0b6f8be899f613b1299d73160b5 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 15 May 2017 14:33:05 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2424 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 93dd0d2099fce5d2b5b05f2ddc22cfebecac14fc --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 39 ++-- src/Nerve_GIC/example/CMakeLists.txt | 3 + src/Nerve_GIC/example/GIC.cpp | 4 +- src/Nerve_GIC/example/GIC.txt | 181 ++++++++-------- src/Nerve_GIC/example/GICvoronoi.cpp | 11 +- src/Nerve_GIC/example/MapperDeltaCoord.cpp | 2 +- src/Nerve_GIC/example/MapperDeltaCoord.txt | 277 ++++++++++++------------ src/Nerve_GIC/example/MapperDeltaFunc.cpp | 2 +- src/Nerve_GIC/example/MapperDeltaFunc.txt | 27 +-- src/Nerve_GIC/example/Nerve.cpp | 2 +- src/Nerve_GIC/example/Nerve.txt | 89 ++++---- src/Nerve_GIC/example/km.py | 4 +- src/Nerve_GIC/include/gudhi/GIC.h | 201 +++++++++-------- src/Nerve_GIC/test/test_GIC.cpp | 14 +- 14 files changed, 429 insertions(+), 427 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 9d7883e0..3a6c6c85 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -33,6 +33,8 @@ namespace graph_induced_complex { * * @{ * + * Visualizations of the simplicial complexes require neato, python and firefox!! + * * \section covers Covers * * Nerves and Graph Induced Complexes require a cover C of the input point cloud P, @@ -63,7 +65,7 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./Nerve ../../../data/points/human.off 2 10 0.3 + * \code $> ./Nerve ../../../data/points/human.off 2 10 0.3 --v * \endcode * * the program output is: @@ -90,7 +92,7 @@ namespace graph_induced_complex { * * \image html "gic_complex.png" "GIC of a point cloud." * - * \subsection gicexample Example + * \subsection gicexample Example with cover from function * * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) @@ -103,13 +105,32 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./GIC ../../../data/points/human.off 0.075 2 0.075 0 + * \code $> ./GIC ../../../data/points/human.off 0.075 2 0.075 0 --v * \endcode * * the program output is: * * \include Nerve_GIC/GIC.txt * + * \subsection gicexamplevor Example with cover from Voronoï + * + * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). + * We randomly subsampled 100 points in the point cloud, which act as seeds of + * a geodesic Voronoï diagram. Each cell of the diagram is then an element of C. + * The graph G (used to compute both the geodesics for Voronoï and the GIC) + * comes from the triangulation of the human shape. + * + * \include Nerve_GIC/GICvoronoi.cpp + * + * When launching: + * + * \code $> ./GICvoronoi ../../../data/points/human.off 100 --v + * \endcode + * + * the program output is: + * + * \include Nerve_GIC/GICvoronoi.txt + * * \subsection mapperdeltadefinition Mapper Delta * * If one restricts to the cliques in G whose nodes all belong to preimages of consecutive @@ -132,7 +153,7 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./MapperDeltaCoord ../../../data/points/human.off 2 + * \code $> ./MapperDeltaCoord ../../../data/points/human.off 2 --v * \endcode * * the program output is: @@ -147,21 +168,13 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./MapperDeltaFunc ../../../data/points/COIL_database/lucky_cat.off ../../../data/points/COIL_database/lucky_cat_PCA1 + * \code $> ./MapperDeltaFunc ../../../data/points/COIL_database/lucky_cat.off ../../../data/points/COIL_database/lucky_cat_PCA1 --v * \endcode * * the program output is: * * \include MapperDeltaFunc.txt * - * If you have python and firefox, all the previous .txt files can then be displayed in a browser. - * We provide a .py file called visu.py that comes from the - * Kepler-Mapper library. - * One can visualize data by launching: - * - * \code python visu.py && firefox SC.html - * \endcode - * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index a2e4efe5..b2c501c3 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -13,6 +13,9 @@ target_link_libraries(MapperDeltaCoord ${Boost_SYSTEM_LIBRARY}) add_executable ( MapperDeltaFunc MapperDeltaFunc.cpp ) target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) +add_executable ( GICvoronoi GICvoronoi.cpp ) +target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) + file(COPY visu.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) if (TBB_FOUND) diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index cae0d55d..1889cb33 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -2,8 +2,8 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain\n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 0.075 2 0.075 0 \n"; + std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 0.075 2 0.075 0 --v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/example/GIC.txt b/src/Nerve_GIC/example/GIC.txt index 6d9f07f5..79f61e92 100644 --- a/src/Nerve_GIC/example/GIC.txt +++ b/src/Nerve_GIC/example/GIC.txt @@ -1,92 +1,89 @@ -../../../../data/points/human.off -coordinate 2 -coordinate 2 -0.075 0 -44 43 -0 -0.954369 220 -1 -0.954377 220 -2 -0.869559 45 -3 -0.869405 45 -4 -0.794255 25 -5 -0.795222 26 -6 -0.723847 48 -7 -0.722679 48 -8 -0.633796 48 -9 -0.634232 48 -10 -0.564455 48 -11 -0.564428 48 -12 -0.491837 98 -13 -0.491864 98 -14 -0.422733 88 -15 -0.422739 88 -16 -0.343376 74 -17 -0.343367 74 -18 -0.271635 96 -19 -0.190912 96 -20 -0.158869 3 -21 -0.158905 3 -22 -0.114958 97 -23 -0.108561 96 -24 -0.115241 100 -25 -0.0317845 185 -26 -0.041866 50 -27 -0.0429161 51 -28 0.0353033 158 -29 0.0275106 31 -30 0.0252492 30 -31 0.107097 170 -32 0.110226 51 -33 0.110952 50 -34 0.186188 57 -35 0.176564 97 -36 0.186215 57 -37 0.256898 232 -38 0.338811 268 -39 0.406299 273 -40 0.481925 220 -41 0.555454 241 -42 0.632415 198 -43 0.744473 407 -0 3 -1 2 -2 4 -3 5 -4 7 -5 6 -6 9 -7 8 -8 10 -9 11 -10 13 -11 12 -12 14 -13 15 -14 16 -15 17 -16 18 -17 18 -18 19 -19 23 -20 22 -21 24 -22 27 -23 25 -24 26 -25 28 -26 29 -27 30 -28 31 -29 33 -30 32 -31 35 -32 34 -33 36 -34 37 -35 37 -36 37 -37 38 -38 39 -39 40 -40 41 -41 42 -42 43 +Graph induced complex is of dimension 1 - 87 simplices - 44 vertices. +Iterator on graph induced complex simplices +0 +1 +2 +2 1 +3 +3 0 +4 +4 2 +5 +5 3 +6 +6 5 +7 +7 4 +8 +8 7 +9 +9 6 +10 +10 8 +11 +11 9 +12 +12 11 +13 +13 10 +14 +14 12 +15 +15 13 +16 +16 14 +17 +17 15 +18 +18 16 +18 17 +19 +19 18 +20 +21 +22 +22 20 +23 +23 19 +24 +24 21 +25 +25 23 +26 +26 24 +27 +27 22 +28 +28 25 +29 +29 26 +30 +30 27 +31 +31 28 +32 +32 30 +33 +33 29 +34 +34 32 +35 +35 31 +36 +36 33 +37 +37 34 +37 35 +37 36 +38 +38 37 +39 +39 38 +40 +40 39 +41 +41 40 +42 +42 41 +43 +43 42 diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp index 141268a5..9bf3de5e 100644 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -2,18 +2,17 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off threshold N\n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 0.075 100 \n"; + std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 100 --v \n"; exit(-1); // ----- >> } int main(int argc, char **argv) { - if ((argc != 4) && (argc != 5)) usage(argc, (argv[0] - 1)); + if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); std::string off_file_name(argv[1]); - double threshold = atof(argv[2]); - int m = atoi(argv[3]); - bool verb = 0; if(argc == 5) verb = 1; + int m = atoi(argv[2]); + bool verb = 0; if(argc == 4) verb = 1; // ---------------------------------------------------------------------------- // Init of a graph induced complex from an OFF file diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index c4d86caf..9445e988 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -2,7 +2,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate \n"; + std::cerr << "Usage: " << progName << " filename.off coordinate [--v] \n"; std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 --v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.txt b/src/Nerve_GIC/example/MapperDeltaCoord.txt index c1ead814..faf832c7 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.txt +++ b/src/Nerve_GIC/example/MapperDeltaCoord.txt @@ -1,134 +1,143 @@ -../../../../data/points/human.off -coordinate 2 -coordinate 2 -0.072934 0.3 -65 64 -0 -0.954816 218 -1 -0.954824 218 -2 -0.903705 57 -3 -0.9035 57 -4 -0.84796 27 -5 -0.847937 27 -6 -0.794255 25 -7 -0.791001 29 -8 -0.73369 36 -9 -0.733071 35 -10 -0.683795 40 -11 -0.682735 40 -12 -0.633796 48 -13 -0.634232 48 -14 -0.585137 64 -15 -0.585197 64 -16 -0.527997 66 -17 -0.528025 66 -18 -0.478646 93 -19 -0.478673 93 -20 -0.43674 99 -21 -0.436761 99 -22 -0.380976 70 -23 -0.380955 70 -24 -0.33528 72 -25 -0.335279 72 -26 -0.277496 112 -27 -0.232679 96 -28 -0.1842 77 -29 -0.149795 16 -30 -0.150304 16 -31 -0.119698 90 -32 -0.122291 74 -33 -0.119626 94 -34 -0.0849586 74 -35 -0.0681724 107 -36 -0.0856915 73 -37 -0.0263688 211 -38 -0.025358 49 -39 -0.025088 50 -40 0.0287585 146 -41 0.022349 34 -42 0.0213867 34 -43 0.0768417 175 -44 0.081987 34 -45 0.0819086 34 -46 0.128047 150 -47 0.129348 53 -48 0.128561 54 -49 0.173705 104 -50 0.180884 53 -51 0.180911 53 -52 0.229553 68 -53 0.233083 77 -54 0.23311 77 -55 0.283572 215 -56 0.338574 266 -57 0.381249 299 -58 0.433627 244 -59 0.485309 214 -60 0.535849 237 -61 0.588559 193 -62 0.638771 196 -63 0.692993 222 -64 0.763344 307 -0 3 -1 2 -2 4 -3 5 -4 6 -5 7 -6 9 -7 8 -8 10 -9 11 -10 13 -11 12 -12 14 -13 15 -14 17 -15 16 -16 18 -17 19 -18 20 -19 21 -20 22 -21 23 -22 24 -23 25 -24 26 -25 26 -26 27 -27 28 -28 32 -29 31 -30 33 -31 34 -32 35 -33 36 -34 39 -35 37 -36 38 -37 40 -38 41 -39 42 -40 43 -41 45 -42 44 -43 46 -44 47 -45 48 -46 49 -47 50 -48 51 -49 52 -50 53 -51 54 -52 55 -53 55 -54 55 -55 56 -56 57 -57 58 -58 59 -59 60 -60 61 -61 62 -62 63 -63 64 +Mapper Delta is of dimension 1 - 141 simplices - 71 vertices. +Iterator on Mapper Delta simplices +0 +1 +2 +2 1 +3 +3 0 +4 +4 2 +5 +5 3 +6 +6 4 +7 +7 5 +8 +8 6 +9 +9 7 +10 +10 9 +11 +11 8 +12 +12 11 +13 +13 10 +14 +14 12 +15 +15 13 +16 +16 14 +17 +17 15 +18 +18 17 +19 +19 16 +20 +20 18 +21 +21 19 +22 +22 20 +23 +23 21 +24 +24 22 +25 +25 23 +26 +26 24 +27 +27 25 +28 +28 26 +28 27 +29 +29 28 +30 +30 29 +31 +32 +33 +33 30 +34 +34 31 +35 +35 32 +36 +36 34 +37 +37 33 +38 +38 35 +39 +39 37 +40 +40 38 +41 +41 36 +42 +42 39 +43 +43 40 +44 +44 41 +45 +45 42 +46 +46 44 +47 +47 43 +48 +48 45 +49 +49 46 +50 +50 47 +51 +51 48 +52 +52 49 +53 +53 50 +54 +54 51 +55 +55 52 +56 +56 53 +57 +57 54 +58 +58 55 +59 +59 56 +60 +60 57 +60 58 +60 59 +61 +61 60 +62 +62 61 +63 +63 62 +64 +64 63 +65 +65 64 +66 +66 65 +67 +67 66 +68 +68 67 +69 +69 68 +70 +70 69 diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index 1c3a77a5..448323b1 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -2,7 +2,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate \n"; + std::cerr << "Usage: " << progName << " filename.off function [--v] \n"; std::cerr << " i.e.: " << progName << " ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.txt b/src/Nerve_GIC/example/MapperDeltaFunc.txt index 01b0fbea..d13d0695 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.txt +++ b/src/Nerve_GIC/example/MapperDeltaFunc.txt @@ -1,17 +1,10 @@ -../../../../data/points/COIL_database/lucky_cat.off -../../../../data/points/COIL_database/lucky_cat_PCA1 -../../../../data/points/COIL_database/lucky_cat_PCA1 -2592.99 0.3 -6 6 -0 -1382.24 20 -1 385.162 3 -2 246.455 12 -3 2204.66 4 -4 2238.94 5 -5 5346.1 39 -0 1 -0 2 -1 3 -2 4 -3 5 -4 5 +Mapper Delta is of dimension 1 - 8 simplices - 4 vertices. +Iterator on Mapper Delta simplices +0 +1 +1 0 +2 +2 0 +3 +3 1 +3 2 diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index a549f544..84f74625 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -2,7 +2,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain --v \n"; + std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; std::cerr << " i.e.: " << progName << " ../../../../data/human.off 2 10 0.3 --v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/example/Nerve.txt b/src/Nerve_GIC/example/Nerve.txt index a6fad665..2a861c5f 100644 --- a/src/Nerve_GIC/example/Nerve.txt +++ b/src/Nerve_GIC/example/Nerve.txt @@ -1,46 +1,43 @@ -../../../../data/points/human.off -coordinate 2 -coordinate 2 -0 0.3 -21 20 -0 -0.927412 290 -1 -0.927011 291 -2 -0.708477 127 -3 -0.709946 128 -4 -0.513775 250 -5 -0.514319 251 -6 -0.376304 247 -7 -0.376315 247 -8 -0.104886 127 -9 -0.168391 165 -10 -0.16871 165 -11 -0.105984 128 -12 -0.0174106 183 -13 0.0197303 542 -14 -0.0161482 181 -15 0.159925 388 -16 0.204922 208 -17 0.204892 208 -18 0.368798 854 -19 0.542323 764 -20 0.709288 597 -0 2 -1 3 -2 5 -3 4 -4 6 -5 7 -6 9 -7 10 -8 12 -9 13 -10 13 -11 14 -12 16 -13 15 -14 17 -15 18 -16 18 -17 18 -18 19 -19 20 +Nerve is of dimension 1 - 41 simplices - 21 vertices. +Iterator on Nerve simplices +0 +1 +2 +2 0 +3 +3 1 +4 +4 3 +5 +5 2 +6 +6 4 +7 +7 5 +8 +9 +9 6 +10 +10 7 +11 +12 +12 8 +13 +13 9 +13 10 +14 +14 11 +15 +15 13 +16 +16 12 +17 +17 14 +18 +18 15 +18 16 +18 17 +19 +19 18 +20 +20 19 diff --git a/src/Nerve_GIC/example/km.py b/src/Nerve_GIC/example/km.py index 881273ad..a1a08156 100755 --- a/src/Nerve_GIC/example/km.py +++ b/src/Nerve_GIC/example/km.py @@ -248,9 +248,9 @@ class KeplerMapper(object): if custom_tooltips is not None: tooltip_s = "

Cluster %s

"%k + " ".join(str(custom_tooltips[complex["nodes"][k][0]]).split(" ")) if maximum == minimum: - tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) - else: tooltip_i = 0 + else: + tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(complex["nodes"][k][2])), "color": tooltip_i}) else: tooltip_s = "

Cluster %s

Contains %s members."%(k,len(complex["nodes"][k])) diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 7be71df3..72e08513 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -53,21 +53,13 @@ #define ETA 0.001 #define MASK 0 -namespace gss = Gudhi::spatial_searching; - using Simplex_tree = Gudhi::Simplex_tree<>; using Filtration_value = Simplex_tree::Filtration_value; using Rips_complex = Gudhi::rips_complex::Rips_complex; using Point = std::vector; -typedef CGAL::Epick_d > K; -typedef typename K::Point_d Pointd; -typedef std::vector Pointsd; -typedef gss::Kd_tree_search Points_ds; - std::map func; std::map func_color; -Gudhi::Points_off_reader off_reader("tmp"); namespace Gudhi { @@ -99,19 +91,22 @@ class Graph_induced_complex { private: bool verbose; // whether to display information. + std::vector point_cloud; typedef int Cover_t; // elements of cover C are indexed by integers. std::vector > simplices; std::map > cover; int maximal_dim; // maximal dimension of output simplicial complex. int data_dimension; // dimension of input data. + int n; // number of points. std::map cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. std::map > cover_color; // size and coloring of the vertices of the output simplicial complex. Simplex_tree<> st; std::map > adjacency_matrix; + std::vector > distances; int resolution_int; double resolution_double; double gain; - std::vector subsamples; + std::vector voronoi_subsamples; std::string cover_name; std::string point_cloud_name; std::string color_name; @@ -167,8 +162,11 @@ class Graph_induced_complex { public: void read_point_cloud(const std::string& off_file_name){ - off_reader = Points_off_reader(off_file_name); + Gudhi::Points_off_reader off_reader = Points_off_reader(off_file_name); + point_cloud = off_reader.get_point_cloud(); point_cloud_name = off_file_name; + n = point_cloud.size(); + data_dimension = point_cloud[0].size(); } // ******************************************************************************************************************* @@ -207,7 +205,7 @@ class Graph_induced_complex { * */ void set_graph_from_OFF(const std::string& off_file_name){ - int n, numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; + int numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; std::ifstream input(off_file_name); std::string line; getline(input, line); input >> n; input >> numfaces; input >> numedges; i = 0; while(i < n){input >> x; input >> x; input >> x; i++;} @@ -242,10 +240,10 @@ class Graph_induced_complex { * */ void set_graph_from_rips(const double& threshold){ - Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), threshold, Euclidean_distance()); - rips_complex_from_points.create_complex(st, 1); data_dimension = off_reader.get_point_cloud()[0].size(); + Rips_complex rips_complex_from_points(point_cloud, threshold, Euclidean_distance()); + rips_complex_from_points.create_complex(st, 1); - std::vector empty; int n = off_reader.get_point_cloud().size(); + std::vector empty; for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ @@ -257,58 +255,59 @@ class Graph_induced_complex { } - public: // Automatic tuning of Rips complex. - /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling. - * - * @param[in] off_file_name name of the input .OFF file. - * @param[in] N number of subsampling iteration (default value 100). - * + public: // Pairwise distances. + /** \brief Computes all pairwise distances (Euclidean norm). */ - void set_graph_from_automatic_rips(int N = 100){ - - int n = off_reader.get_point_cloud().size(); - int m = floor(n/pow(log(n)/log(CONSTANT),1+ETA)); m = std::min(m,n-1); - std::vector samples(m); double delta = 0; int dim = off_reader.get_point_cloud()[0].size(); data_dimension = dim; + void compute_pairwise_distances(){ - if(verbose) std::cout << n << " points in R^" << dim << std::endl; - if(verbose) std::cout << "Subsampling " << m << " points" << std::endl; - - std::vector > dist(n); std::vector dumb(n); - for(int i = 0; i < n; i++) dist[i] = dumb; - double d; - - char distances[100]; sprintf(distances,"%s_dist",(char*) point_cloud_name.c_str()); - std::ifstream input(distances, std::ios::out | std::ios::binary); + double d; std::vector dumb(n); for(int i = 0; i < n; i++) distances.push_back(dumb); + char distance[100]; sprintf(distance,"%s_dist",(char*) point_cloud_name.c_str()); + std::ifstream input(distance, std::ios::out | std::ios::binary); if(input.good()){ if(verbose) std::cout << "Reading distances..." << std::endl; for(int i = 0; i < n; i++){ - for (int j = 0; j < n; j++){ - input.read((char*) &d,8); dist[i][j] = d; + for (int j = i; j < n; j++){ + input.read((char*) &d,8); distances[i][j] = d; distances[j][i] = d; } } input.close(); } + else{ if(verbose) std::cout << "Computing distances..." << std::endl; - input.close(); std::ofstream output(distances, std::ios::out | std::ios::binary); + input.close(); std::ofstream output(distance, std::ios::out | std::ios::binary); for(int i = 0; i < n; i++){ if( (int) floor( 100*(i*1.0+1)/(n*1.0) ) %10 == 0 ) if(verbose) std::cout << "\r" << floor( 100*(i*1.0+1)/(n*1.0) ) << "%" << std::flush; - for (int j = 0; j < n; j++){ - double dis = 0; for(int k = 0; k < dim; k++) dis += pow(off_reader.get_point_cloud()[i][k]-off_reader.get_point_cloud()[j][k],2); - dis = std::sqrt(dis); dist[i][j] = dis; output.write((char*) &dis,8); + for (int j = i; j < n; j++){ + double dis = 0; for(int k = 0; k < data_dimension; k++) + dis += pow(point_cloud[i][k]-point_cloud[j][k],2); + dis = std::sqrt(dis); distances[i][j] = dis; distances[j][i] = dis; + output.write((char*) &dis,8); } } output.close(); if(verbose) std::cout << std::endl; } - for(int i = 0; i < n; i++){ - for(int j = i; j < n; j++){ - double dis = 0; for(int k = 0; k < dim; k++) dis += pow(off_reader.get_point_cloud()[i][k]-off_reader.get_point_cloud()[j][k],2); - dist[i][j] = std::sqrt(dis); dist[j][i] = std::sqrt(dis); - } - } + } + + public: // Automatic tuning of Rips complex. + /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling. + * + * @param[in] off_file_name name of the input .OFF file. + * @param[in] N number of subsampling iteration (default value 100). + * + */ + void set_graph_from_automatic_rips(int N = 100){ + + int m = floor(n/pow(log(n)/log(CONSTANT),1+ETA)); m = std::min(m,n-1); + std::vector samples(m); double delta = 0; + + if(verbose) std::cout << n << " points in R^" << data_dimension << std::endl; + if(verbose) std::cout << "Subsampling " << m << " points" << std::endl; + + if(distances.size() == 0) compute_pairwise_distances(); //#pragma omp parallel for for (int i = 0; i < N; i++){ @@ -316,7 +315,7 @@ class Graph_induced_complex { SampleWithoutReplacement(n,m,samples); double hausdorff_dist = 0; for (int j = 0; j < n; j++){ - double mj = dist[j][samples[0]]; for (int k = 1; k < m; k++) mj = std::min(mj, dist[j][samples[k]]); + double mj = distances[j][samples[0]]; for (int k = 1; k < m; k++) mj = std::min(mj, distances[j][samples[k]]); hausdorff_dist = std::max(hausdorff_dist, mj); } delta += hausdorff_dist/N; @@ -324,7 +323,7 @@ class Graph_induced_complex { } if(verbose) std::cout << "delta = " << delta << std::endl; - Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), delta, Euclidean_distance()); + Rips_complex rips_complex_from_points(point_cloud, delta, Euclidean_distance()); rips_complex_from_points.create_complex(st, 1); std::vector empty; @@ -363,12 +362,10 @@ class Graph_induced_complex { /** \brief Creates the function f from the k-th coordinate of the point cloud P. * * @param[in] k coordinate to use (start at 0). - * @param[in] off_file_name name of the input .OFF file. * */ void set_function_from_coordinate(const int& k){ - int n = off_reader.get_point_cloud().size(); - for(int i = 0; i < n; i++) func.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); + for(int i = 0; i < n; i++) func.insert(std::pair(i,point_cloud[i][k])); char coordinate[100]; sprintf(coordinate, "coordinate %d", k); cover_name = coordinate; } @@ -380,7 +377,6 @@ class Graph_induced_complex { * */ void set_function_from_vector(const std::vector& function){ - int n = function.size(); for(int i = 0; i < n; i++) func.insert(std::pair(i, function[i])); } @@ -413,48 +409,56 @@ class Graph_induced_complex { cover_name = cover_file_name; } - /* TODO: complete method with nearest geodesic neighbor - public: // Set cover from Voronoi /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. * * @param[in] m number of points in the subsample. - * @param[in] off_file_name name of the input .OFF file. * - + */ void set_cover_from_Voronoi(const int& m){ - int n = off_reader.get_point_cloud().size(); data_dimension = off_reader.get_point_cloud()[0].size(); - Pointsd pointsd(m+1); std::vector samples(m); SampleWithoutReplacement(n,m,samples); - double* coord = new double[data_dimension]; subsamples = samples; - - for(int i = 1; i <= m; i++){ - for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[samples[i-1]][j]; - pointsd[i] = Pointd(data_dimension, coord+0, coord + data_dimension); cover_fct[i-1] = i-1; - } std::cout << std::endl; - - int curr_subsample = 0; - for(int i = 0; i < n; i++){ - for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[i][j]; - pointsd[0] = Pointd(data_dimension, coord+0, coord + data_dimension); Points_ds points_ds(pointsd); - auto knn_range = points_ds.query_k_nearest_neighbors(pointsd[0], 2, true); - Cover_t cluster; // = nearest geodesic neighbor. - if(cluster >= 0){ // Case where i is not a subsample point. - cover[i].push_back(cluster); cover_color[cluster].second += func_color[i]; cover_color[cluster].first++; - } - else{ // Case where i is a subsample point. - cover[i].push_back(curr_subsample); cover_color[curr_subsample].second += func_color[i]; - cover_color[curr_subsample].first++; curr_subsample++; + voronoi_subsamples.resize(m); SampleWithoutReplacement(n,m,voronoi_subsamples); + if(distances.size() == 0) compute_pairwise_distances(); + std::vector mindist(n); for(int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); + + // Compute the geodesic distances to subsamples with Dijkstra + for(int i = 0; i < m; i++){ + if(verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; + int seed = voronoi_subsamples[i]; + std::vector dist(n); std::vector process(n); + for(int j = 0; j < n; j++){ dist[j] = std::numeric_limits::max(); process[j] = j; } + dist[seed] = 0; int curr_size = process.size(); int min_point, min_index; double min_dist; + std::vector neighbors; int num_neighbors; + + while(curr_size > 0){ + min_dist = std::numeric_limits::max(); min_index = -1; min_point = -1; + for(int j = 0; j < curr_size; j++){ + if(dist[process[j]] < min_dist){ + min_point = process[j]; min_dist = dist[process[j]]; min_index = j; + } + } + assert(min_index != -1); process.erase(process.begin() + min_index); + assert(min_point != -1); neighbors = adjacency_matrix[min_point]; num_neighbors = neighbors.size(); + for(int j = 0; j < num_neighbors; j++){ + double d = dist[min_point] + distances[min_point][neighbors[j]]; + dist[neighbors[j]] = std::min(dist[neighbors[j]], d); + } + curr_size = process.size(); } + + for(int j = 0; j < n; j++) + if(mindist[j] > dist[j]){ + mindist[j] = dist[j]; + if(cover[j].size() == 0) cover[j].push_back(i); + else cover[j][0] = i; + } } + for(int i = 0; i < n; i++){ cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; - - delete [] coord; maximal_dim = m-1; cover_name = "Voronoi"; } - */ public: // Automatic tuning of resolution for Mapper Delta. /** \brief Computes the optimal length of intervals for a Mapper Delta. @@ -653,8 +657,7 @@ class Graph_induced_complex { * */ void set_color_from_coordinate(int k = 0){ - int n = off_reader.get_point_cloud().size(); - for(int i = 0; i < n; i++) func_color[i] = off_reader.get_point_cloud()[i][k]; + for(int i = 0; i < n; i++) func_color.insert(std::pair(i, point_cloud[i][k])); char coordinate[100]; sprintf(coordinate, "coordinate %d", k); color_name = coordinate; } @@ -670,15 +673,15 @@ class Graph_induced_complex { } public: // Create a .dot file that can be compiled with neato to produce a .pdf file. - /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a .pdf output. - * For Mapper Delta only. + /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a nice visualization + * of its 1-skeleton in a .pdf file. */ void plot_with_neato(){ char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ maxv = std::max(maxv, iit->second.second); minv = std::min(minv, iit->second.second); - } //std::cout << minv << " " << maxv << std::endl; + } int k = 0; std::vector nodes; nodes.clear(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ if(iit->second.first > MASK){ @@ -701,8 +704,8 @@ class Graph_induced_complex { } public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file. - /** \brief Creates a .html file for KeplerMapper once the simplicial complex is computed to get a nice visualization - * of its 1_skeleton in browser. + /** \brief Creates a .txt file for KeplerMapper once the simplicial complex is computed to get a nice visualization + * of its 1-skeleton in browser. */ void plot_with_KeplerMapper(){ @@ -732,16 +735,16 @@ class Graph_induced_complex { if(systemRet == -1) std::cout << "Visualization failed. Do you have python and firefox?" << std::endl; } - /* + public: // Create a .off file that can be visualized with Geomview. /** \brief Creates a .off file for visualization with Geomview. * For GIC computed with Voronoi only. - * + */ void plot_with_Geomview(){ assert(data_dimension <= 3); - char mapp[11] = "SC.off"; std::ofstream graphic(mapp); - graphic << "OFF" << std::endl; int m = subsamples.size(); int numedges = 0; int numfaces = 0; + char gic[11] = "SC.off"; std::ofstream graphic(gic); + graphic << "OFF" << std::endl; int m = voronoi_subsamples.size(); int numedges = 0; int numfaces = 0; std::vector > edges, faces; int numsimplices = simplices.size(); for (int i = 0; i < numsimplices; i++) { if(simplices[i].size() == 2){ numedges++; @@ -752,26 +755,18 @@ class Graph_induced_complex { } } graphic << m << " " << numedges + numfaces << std::endl; - for(int i = 0; i < m; i++) graphic << off_reader.get_point_cloud()[subsamples[i]][0] << " " \ - << off_reader.get_point_cloud()[subsamples[i]][1] << " " \ - << off_reader.get_point_cloud()[subsamples[i]][2] << std::endl; + for(int i = 0; i < m; i++) graphic << point_cloud[voronoi_subsamples[i]][0] << " " \ + << point_cloud[voronoi_subsamples[i]][1] << " " \ + << point_cloud[voronoi_subsamples[i]][2] << std::endl; for(int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; for(int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; graphic.close(); - char cl[11] = "cloud.off"; std::ofstream cloud(cl); - cloud << "COFF" << std::endl << 4706 << " " << 9408 << std::endl; - for(int i = 0; i < off_reader.get_point_cloud().size(); i++) - cloud << off_reader.get_point_cloud()[i][0] << " " << off_reader.get_point_cloud()[i][1] << " " << off_reader.get_point_cloud()[i][2] << " " <<\ - cover[i][0]*1.0/(maximal_dim+1) << " " <<\ - 0 << " " <<\ - cover[i][0]*1.0/(maximal_dim+1) << " " << 0.5 << std::endl; - char command[100]; sprintf(command, "geomview SC.off"); int systemRet = system(command); if(systemRet == -1) std::cout << "Visualization failed. Do you have geomview?" << std::endl; - }*/ + } // ******************************************************************************************************************* // ******************************************************************************************************************* diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index baf494e3..e8051cf0 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -53,11 +53,10 @@ BOOST_AUTO_TEST_CASE(check_nerve) { BOOST_AUTO_TEST_CASE(check_GICMAP) { - Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(1); - std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.set_color_from_coordinate(); GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); @@ -68,10 +67,9 @@ BOOST_AUTO_TEST_CASE(check_GICMAP) { BOOST_AUTO_TEST_CASE(check_GICcover) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; - std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.set_color_from_coordinate(); GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); @@ -79,12 +77,11 @@ BOOST_AUTO_TEST_CASE(check_GICcover) { BOOST_CHECK(stree.dimension() == 2); } -/* + BOOST_AUTO_TEST_CASE(check_GICvoronoi) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; - std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); - GIC.set_color_from_coordinate(); + std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); GIC.set_cover_from_Voronoi(2); GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); @@ -93,5 +90,4 @@ BOOST_AUTO_TEST_CASE(check_GICvoronoi) { BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 1); BOOST_CHECK(stree.dimension() == 1); } -*/ -- cgit v1.2.3 From 2e0fed6817558aa0e887eb228642f7ebdd302d4c Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 29 May 2017 14:45:32 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2462 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: b158f4e6fab11aae7ee9927324829aa0b4c18026 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/example/GIC.cpp | 68 +++++++++---- src/Nerve_GIC/example/GICvoronoi.cpp | 68 +++++++++---- src/Nerve_GIC/example/MapperDeltaCoord.cpp | 72 +++++++++----- src/Nerve_GIC/example/MapperDeltaFunc.cpp | 72 +++++++++----- src/Nerve_GIC/example/MapperDeltaFunc.dot | 10 ++ src/Nerve_GIC/example/MapperDeltaFunc.txt | 10 -- src/Nerve_GIC/example/Nerve.cpp | 74 +++++++++----- src/Nerve_GIC/include/gudhi/GIC.h | 127 ++++++++++-------------- src/Nerve_GIC/test/test_GIC.cpp | 4 - 10 files changed, 307 insertions(+), 200 deletions(-) create mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.dot delete mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.txt (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 3a6c6c85..95c0ca40 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -173,7 +173,7 @@ namespace graph_induced_complex { * * the program output is: * - * \include MapperDeltaFunc.txt + * \include MapperDeltaFunc.dot * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index 1889cb33..0f50f712 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include void usage(int nbArgs, char * const progName) { @@ -24,40 +46,44 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.read_point_cloud(off_file_name); + bool check = GIC.read_point_cloud(off_file_name); - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ - GIC.set_graph_from_rips(threshold); + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); - GIC.set_resolution_double(resolution); GIC.set_gain(gain); - GIC.set_cover_from_function(1); + GIC.set_graph_from_rips(threshold); - GIC.find_GIC_simplices(); + GIC.set_resolution_double(resolution); GIC.set_gain(gain); + GIC.set_cover_from_function(1); - GIC.plot_with_KeplerMapper(); + GIC.find_GIC_simplices(); - Simplex_tree stree; GIC.create_complex(stree); + GIC.plot_txt(); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); + Simplex_tree stree; GIC.create_complex(stree); - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- - if(verb){ - output_stream << "Graph induced complex is of dimension " << stree.dimension() << + if(verb){ + output_stream << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + output_stream << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; } - output_stream << std::endl; } } diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp index 9bf3de5e..8061c42d 100644 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include void usage(int nbArgs, char * const progName) { @@ -21,38 +43,42 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.read_point_cloud(off_file_name); + bool check = GIC.read_point_cloud(off_file_name); - GIC.set_color_from_coordinate(); + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ - GIC.set_graph_from_OFF(off_file_name); + GIC.set_color_from_coordinate(); - GIC.set_cover_from_Voronoi(m); + GIC.set_graph_from_OFF(off_file_name); - GIC.find_GIC_simplices(); + GIC.set_cover_from_Voronoi(m); - GIC.plot_with_Geomview(); + GIC.find_GIC_simplices(); - Simplex_tree stree; GIC.create_complex(stree); + GIC.plot_OFF(); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); + Simplex_tree stree; GIC.create_complex(stree); - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- - if(verb){ - output_stream << "Graph induced complex is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if(verb){ + output_stream << "Graph induced complex is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + output_stream << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; } - output_stream << std::endl; } } diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index 9445e988..84a25bad 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include void usage(int nbArgs, char * const progName) { @@ -21,40 +43,44 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.read_point_cloud(off_file_name); + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); - GIC.set_graph_from_automatic_rips(); + GIC.set_graph_from_automatic_rips(); - GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(1); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); + GIC.set_cover_from_function(1); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_with_KeplerMapper(); + GIC.plot_txt(); - Simplex_tree stree; GIC.create_complex(stree); + Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); - // ------------------------------------------ - // Display information about the Mapper Delta - // ------------------------------------------ + // ------------------------------------------ + // Display information about the Mapper Delta + // ------------------------------------------ - if(verb){ - output_stream << "Mapper Delta is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if(verb){ + output_stream << "Mapper Delta is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Mapper Delta simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + output_stream << "Iterator on Mapper Delta simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; } - output_stream << std::endl; } } diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index 448323b1..fa95ca58 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include void usage(int nbArgs, char * const progName) { @@ -21,40 +43,44 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.read_point_cloud(off_file_name); + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ - GIC.set_color_from_file(func_file_name); - GIC.set_function_from_file(func_file_name); + GIC.set_color_from_file(func_file_name); + GIC.set_function_from_file(func_file_name); - GIC.set_graph_from_automatic_rips(); + GIC.set_graph_from_automatic_rips(); - GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(1); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); + GIC.set_cover_from_function(1); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_with_KeplerMapper(); + GIC.plot_pdf(); - Simplex_tree stree; GIC.create_complex(stree); + Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); - // ------------------------------------------ - // Display information about the Mapper Delta - // ------------------------------------------ + // ------------------------------------------ + // Display information about the Mapper Delta + // ------------------------------------------ - if(verb){ - output_stream << "Mapper Delta is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if(verb){ + output_stream << "Mapper Delta is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Mapper Delta simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + output_stream << "Iterator on Mapper Delta simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; } - output_stream << std::endl; } } diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.dot b/src/Nerve_GIC/example/MapperDeltaFunc.dot new file mode 100644 index 00000000..beafa7f1 --- /dev/null +++ b/src/Nerve_GIC/example/MapperDeltaFunc.dot @@ -0,0 +1,10 @@ +graph Mapper { +0[shape=circle fontcolor=black color=black label="0:26" style=filled fillcolor="0, 1, 1"] +1[shape=circle fontcolor=black color=black label="1:4" style=filled fillcolor="0.240095, 1, 1"] +2[shape=circle fontcolor=black color=black label="2:11" style=filled fillcolor="0.209621, 1, 1"] +3[shape=circle fontcolor=black color=black label="3:42" style=filled fillcolor="0.6, 1, 1"] + 0 -- 1 [weight=15]; + 0 -- 2 [weight=15]; + 1 -- 3 [weight=15]; + 2 -- 3 [weight=15]; +} \ No newline at end of file diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.txt b/src/Nerve_GIC/example/MapperDeltaFunc.txt deleted file mode 100644 index d13d0695..00000000 --- a/src/Nerve_GIC/example/MapperDeltaFunc.txt +++ /dev/null @@ -1,10 +0,0 @@ -Mapper Delta is of dimension 1 - 8 simplices - 4 vertices. -Iterator on Mapper Delta simplices -0 -1 -1 0 -2 -2 0 -3 -3 1 -3 2 diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index 84f74625..8f8037d4 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -1,9 +1,31 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/human.off 2 10 0.3 --v \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 10 0.3 --v \n"; exit(-1); // ----- >> } @@ -23,40 +45,44 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.read_point_cloud(off_file_name); + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); - GIC.set_graph_from_OFF(off_file_name); + GIC.set_graph_from_OFF(off_file_name); - GIC.set_resolution_int(resolution); GIC.set_gain(gain); - GIC.set_cover_from_function(0); + GIC.set_resolution_int(resolution); GIC.set_gain(gain); + GIC.set_cover_from_function(0); - GIC.find_Nerve_simplices(); + GIC.find_Nerve_simplices(); - GIC.plot_with_KeplerMapper(); + GIC.plot_txt(); - Simplex_tree stree; GIC.create_complex(stree); + Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- - if(verb){ - output_stream << "Nerve is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if(verb){ + output_stream << "Nerve is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Nerve simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + output_stream << "Iterator on Nerve simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; } - output_stream << std::endl; } } diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index d763b636..d670cef6 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -30,10 +30,6 @@ #include #include #include -#include -#include - -#include #include #include @@ -41,11 +37,7 @@ #include #include // for numeric_limits #include // for pair<> -#include // for greater<> -#include -#include #include // for std::max -#include // for std::uint32_t #include #include @@ -111,25 +103,16 @@ class Graph_induced_complex { std::string point_cloud_name; std::string color_name; - // Simplex comparator - private: - bool simplex_comp(const std::vector& s1, const std::vector& s2){ - if(s1.size() == s2.size()){ - return s1[0] < s2[0]; - } - else return s1.size() < s2.size(); - } - // Point comparator private: - static bool functional_comp(const int& a, const int& b){ + static bool functional_comp(int a, int b){ if(func[a] == func[b]) return a < b; else return func[a] < func[b]; } // DFS private: - void dfs(std::map >& G, const int& p, std::vector& cc, std::map& visit){ + void dfs(std::map >& G, int p, std::vector& cc, std::map& visit){ cc.push_back(p); visit[p] = true; int neighb = G[p].size(); for (int i = 0; i < neighb; i++) @@ -161,12 +144,16 @@ class Graph_induced_complex { void set_verbose(bool verb = 0){verbose = verb;} public: - void read_point_cloud(const std::string& off_file_name){ + bool read_point_cloud(std::string off_file_name){ Gudhi::Points_off_reader off_reader = Points_off_reader(off_file_name); - point_cloud = off_reader.get_point_cloud(); - point_cloud_name = off_file_name; - n = point_cloud.size(); - data_dimension = point_cloud[0].size(); + bool check = off_reader.is_valid(); + if(check){ + point_cloud = off_reader.get_point_cloud(); + point_cloud_name = off_file_name; + n = point_cloud.size(); + data_dimension = point_cloud[0].size(); + return check; + } else return check; } // ******************************************************************************************************************* @@ -179,7 +166,7 @@ class Graph_induced_complex { * @param[in] graph_file_name name of the input graph file. * */ - void set_graph_from_file(const std::string& graph_file_name){ + void set_graph_from_file(std::string graph_file_name){ int neighb; int vid; std::ifstream input(graph_file_name); std::string line; std::vector edge(2); int n = 0; while(std::getline(input,line)){ std::stringstream stream(line); stream >> vid; edge[0] = vid; @@ -204,7 +191,7 @@ class Graph_induced_complex { * @param[in] off_file_name name of the input .OFF file. * */ - void set_graph_from_OFF(const std::string& off_file_name){ + void set_graph_from_OFF(std::string off_file_name){ int numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; std::ifstream input(off_file_name); std::string line; getline(input, line); input >> n; input >> numfaces; input >> numedges; @@ -238,7 +225,7 @@ class Graph_induced_complex { * @param[in] threshold threshold value for the Rips complex. * */ - void set_graph_from_rips(const double& threshold){ + void set_graph_from_rips(double threshold){ Rips_complex rips_complex_from_points(point_cloud, threshold, Euclidean_distance()); rips_complex_from_points.create_complex(st, 1); @@ -259,9 +246,9 @@ class Graph_induced_complex { */ void compute_pairwise_distances(){ - double d; std::vector dumb(n); for(int i = 0; i < n; i++) distances.push_back(dumb); - char distance[100]; sprintf(distance,"%s_dist",(char*) point_cloud_name.c_str()); - std::ifstream input(distance, std::ios::out | std::ios::binary); + double d; std::vector zeros(n); for(int i = 0; i < n; i++) distances.push_back(zeros); + std::string distance = point_cloud_name; distance.append("_dist"); + std::ifstream input(distance.c_str(), std::ios::out | std::ios::binary); if(input.good()){ if(verbose) std::cout << "Reading distances..." << std::endl; @@ -277,8 +264,8 @@ class Graph_induced_complex { if(verbose) std::cout << "Computing distances..." << std::endl; input.close(); std::ofstream output(distance, std::ios::out | std::ios::binary); for(int i = 0; i < n; i++){ - if( (int) floor( 100*(i*1.0+1)/(n*1.0) ) %10 == 0 ) - if(verbose) std::cout << "\r" << floor( 100*(i*1.0+1)/(n*1.0) ) << "%" << std::flush; + int state = (int) floor( 100*(i*1.0+1)/n ) %10; + if( state == 0 && verbose) std::cout << "\r" << state << "%" << std::flush; for (int j = i; j < n; j++){ double dis = 0; for(int k = 0; k < data_dimension; k++) dis += pow(point_cloud[i][k]-point_cloud[j][k],2); @@ -347,7 +334,7 @@ class Graph_induced_complex { * @param[in] func_file_name name of the input function file. * */ - void set_function_from_file(const std::string& func_file_name){ + void set_function_from_file(std::string func_file_name){ int vertex_id = 0; std::ifstream input(func_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; @@ -362,7 +349,7 @@ class Graph_induced_complex { * @param[in] k coordinate to use (start at 0). * */ - void set_function_from_coordinate(const int& k){ + void set_function_from_coordinate(int k){ for(int i = 0; i < n; i++) func.insert(std::pair(i,point_cloud[i][k])); char coordinate[100]; sprintf(coordinate, "coordinate %d", k); cover_name = coordinate; @@ -374,7 +361,7 @@ class Graph_induced_complex { * @param[in] function input vector of values. * */ - void set_function_from_vector(const std::vector& function){ + void set_function_from_vector(std::vector function){ for(int i = 0; i < n; i++) func.insert(std::pair(i, function[i])); } @@ -389,7 +376,7 @@ class Graph_induced_complex { * @param[in] cover_file_name name of the input cover file. * */ - void set_cover_from_file(const std::string& cover_file_name){ + void set_cover_from_file(std::string cover_file_name){ int vertex_id = 0; Cover_t cov; std::vector cov_elts, cov_number; std::ifstream input(cover_file_name); std::string line; while(std::getline(input,line)){ @@ -413,7 +400,7 @@ class Graph_induced_complex { * @param[in] m number of points in the subsample. * */ - void set_cover_from_Voronoi(const int& m){ + void set_cover_from_Voronoi(int m = 100){ voronoi_subsamples.resize(m); SampleWithoutReplacement(n,m,voronoi_subsamples); if(distances.size() == 0) compute_pairwise_distances(); @@ -497,7 +484,7 @@ class Graph_induced_complex { public: // Automatic tuning of resolution for Mapper Point. /** \brief Computes the optimal length of intervals for a standard Mapper. */ - void set_automatic_resolution_for_MAP(const double& gain){ + void set_automatic_resolution_for_MAP(double gain){ double reso = 0; for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ @@ -516,7 +503,7 @@ class Graph_induced_complex { * @param[in] token boolean specifying whether we use the length or the number of intervals for the cover of im(f). * */ - void set_cover_from_function(const bool& token){ + void set_cover_from_function(bool token){ // Read function values and compute min and max std::map::iterator it; @@ -537,8 +524,8 @@ class Graph_induced_complex { } x = minf + (resolution_int-1)*incr - alpha; y = maxf; std::pair interM(x,y); intervals.push_back(interM); res = intervals.size(); - for(int i = 0; i < res; i++) - if(verbose) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; + if(verbose) + for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } else{ // Case we use a double for the length of the intervals. @@ -549,8 +536,8 @@ class Graph_induced_complex { y = x + resolution_double; } std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); - for(int i = 0; i < res; i++) if(verbose) std::cout << "Interval " << i << " = [" << \ - intervals[i].first << ", " << intervals[i].second << "]" << std::endl; + if(verbose) + for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } // Sort points according to function values @@ -562,7 +549,7 @@ class Graph_induced_complex { for(int i = 0; i < res; i++){ // Find points in the preimage - std::map > prop; prop.clear(); + std::map > prop; std::pair inter1 = intervals[i]; int tmp = pos; @@ -571,20 +558,20 @@ class Graph_induced_complex { if(i != 0){ std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); + prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } } std::pair inter2 = intervals[i+1]; while(func[points[tmp]] < inter2.first && tmp != n){ - prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); + prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } pos = tmp; while(func[points[tmp]] < inter1.second && tmp != n){ - prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); + prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } @@ -594,12 +581,12 @@ class Graph_induced_complex { std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); + prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } while(tmp != n){ - prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); + prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } @@ -638,7 +625,7 @@ class Graph_induced_complex { * @param[in] color_file_name name of the input color file. * */ - void set_color_from_file(const std::string& color_file_name){ + void set_color_from_file(std::string color_file_name){ int vertex_id = 0; std::ifstream input(color_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; @@ -656,8 +643,7 @@ class Graph_induced_complex { */ void set_color_from_coordinate(int k = 0){ for(int i = 0; i < n; i++) func_color.insert(std::pair(i, point_cloud[i][k])); - char coordinate[100]; sprintf(coordinate, "coordinate %d", k); - color_name = coordinate; + color_name = "coordinate "; color_name.append(std::to_string(k)); } public: // Set color from vector. @@ -666,7 +652,7 @@ class Graph_induced_complex { * @param[in] color input vector of values. * */ - void set_color_from_vector(const std::vector& color){ + void set_color_from_vector(std::vector color){ for(unsigned int i = 0; i < color.size(); i++) func_color.insert(std::pair(i, color[i])); } @@ -674,7 +660,7 @@ class Graph_induced_complex { /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a nice visualization * of its 1-skeleton in a .pdf file. */ - void plot_with_neato(){ + void plot_pdf(){ char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ @@ -696,16 +682,14 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK){ graphic << " " << simplices[i][0] << " -- " << simplices[i][1] << " [weight=15];" << std::endl; ke++;} graphic << "}"; graphic.close(); - char command[100]; sprintf(command, "neato SC.dot -Tpdf -o SC_visu.pdf && rm SC.dot"); - int systemRet = system(command); - if(systemRet == -1) std::cout << "Visualization failed. Do you have neato?" << std::endl; + std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; } public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file. /** \brief Creates a .txt file for KeplerMapper once the simplicial complex is computed to get a nice visualization * of its 1-skeleton in browser. */ - void plot_with_KeplerMapper(){ + void plot_txt(){ int num_simplices = simplices.size(); int num_edges = 0; char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); @@ -728,17 +712,15 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; graphic.close(); - char command[100]; sprintf(command, "python visu.py && firefox SC.html"); - int systemRet = system(command); - if(systemRet == -1) std::cout << "Visualization failed. Do you have python and firefox?" << std::endl; + std::cout << "SC.txt generated. It can be visualized with e.g. python visu.py and firefox." << std::endl; } - public: // Create a .off file that can be visualized with Geomview. - /** \brief Creates a .off file for visualization with Geomview. + public: // Create a .off file that can be visualized (e.g. with Geomview). + /** \brief Creates a .off file for visualization. * For GIC computed with Voronoi only. */ - void plot_with_Geomview(){ + void plot_OFF(){ assert(data_dimension <= 3); char gic[11] = "SC.off"; std::ofstream graphic(gic); @@ -759,10 +741,7 @@ class Graph_induced_complex { for(int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; for(int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; graphic.close(); - - char command[100]; sprintf(command, "geomview SC.off"); - int systemRet = system(command); - if(systemRet == -1) std::cout << "Visualization failed. Do you have geomview?" << std::endl; + std::cout << "SC.off generated. It can be visualized with e.g. geomview." << std::endl; } @@ -792,7 +771,7 @@ class Graph_induced_complex { * @param[in] cover_elts vector of points represented by vectors of cover elements (the ones to which they belong). * */ - void find_all_simplices(const std::vector > & cover_elts){ + void find_all_simplices(std::vector > cover_elts){ int num_nodes = cover_elts.size(); std::vector simplex; for(int i = 0; i < num_nodes; i++) @@ -824,7 +803,7 @@ class Graph_induced_complex { if(st.dimension(simplex) == 1){ std::vector > comp; for(auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); - if(comp[0].size() == 1 && comp[1].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); + if(comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); } simplex_id++; } @@ -863,13 +842,15 @@ class Graph_induced_complex { * and adding the corresponding edges in the Mapper Delta if the images of the endpoints belong * to consecutive intervals. * - * \remark WARNING: the output of this function is correct ONLY if the cover is minimal, i.e. - * the gain is less than 0.5!!! + * @exception std::invalid_argument In case the gain is greater or equal to 0.5 (causes incorrect output). * */ void find_GICMAP_simplices_with_functional_minimal_cover(){ - int v1, v2; assert(gain < 0.5); + if (gain >= 0.5) + throw std::invalid_argument("the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); + + int v1, v2; // Loop on all points. for(std::map >::iterator it = cover.begin(); it != cover.end(); it++){ diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index e8051cf0..6b6621fd 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -33,10 +33,6 @@ #include #include -bool are_almost_the_same(float a, float b) { - return std::fabs(a - b) < std::numeric_limits::epsilon(); -} - BOOST_AUTO_TEST_CASE(check_nerve) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; -- cgit v1.2.3 From 9f799012e531d4ea7cd85b815911d6271031c0e9 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 3 Jul 2017 18:25:45 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2579 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 697cb9e3146f0b068c6df4e74d972958e793d94b --- data/points/KleinBottle5D.off | 15878 ++++++++++++++++++++++ src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 58 +- src/Nerve_GIC/doc/gicvisu.png | Bin 0 -> 110995 bytes src/Nerve_GIC/doc/gicvoronoivisu | 5 + src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf | Bin 0 -> 20745 bytes src/Nerve_GIC/doc/mapperdeltacoordvisu2.pdf | Bin 0 -> 16912 bytes src/Nerve_GIC/doc/mapperdeltafuncvisu.pdf | Bin 0 -> 10904 bytes src/Nerve_GIC/doc/nervevisu.png | Bin 0 -> 76988 bytes src/Nerve_GIC/example/GIC.cpp | 10 +- src/Nerve_GIC/example/GIC.txt | 89 - src/Nerve_GIC/example/GICvoronoi.cpp | 10 +- src/Nerve_GIC/example/GICvoronoi.txt | 563 - src/Nerve_GIC/example/MapperDeltaCoord.cpp | 12 +- src/Nerve_GIC/example/MapperDeltaCoord.txt | 143 - src/Nerve_GIC/example/MapperDeltaFunc.cpp | 10 +- src/Nerve_GIC/example/MapperDeltaFunc.dot | 10 - src/Nerve_GIC/example/Nerve.cpp | 8 +- src/Nerve_GIC/include/gudhi/GIC.h | 306 +- src/Nerve_GIC/test/test_GIC.cpp | 22 +- 19 files changed, 16112 insertions(+), 1012 deletions(-) create mode 100755 data/points/KleinBottle5D.off create mode 100644 src/Nerve_GIC/doc/gicvisu.png create mode 100644 src/Nerve_GIC/doc/gicvoronoivisu create mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf create mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu2.pdf create mode 100644 src/Nerve_GIC/doc/mapperdeltafuncvisu.pdf create mode 100644 src/Nerve_GIC/doc/nervevisu.png delete mode 100644 src/Nerve_GIC/example/GIC.txt delete mode 100644 src/Nerve_GIC/example/GICvoronoi.txt delete mode 100644 src/Nerve_GIC/example/MapperDeltaCoord.txt delete mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.dot (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/data/points/KleinBottle5D.off b/data/points/KleinBottle5D.off new file mode 100755 index 00000000..ea5c3fa3 --- /dev/null +++ b/data/points/KleinBottle5D.off @@ -0,0 +1,15878 @@ +OFF +15876 0 0 +3 0 0 0 1 +3.05 0 0.09983 0 0.9988 +3.1 0 0.1987 0 0.995 +3.149 0 0.2955 0 0.9888 +3.199 0 0.3894 0 0.9801 +3.247 0 0.4794 0 0.9689 +3.296 0 0.5646 0 0.9553 +3.343 0 0.6442 0 0.9394 +3.389 0 0.7174 0 0.9211 +3.435 0 0.7833 0 0.9004 +3.479 0 0.8415 0 0.8776 +3.523 0 0.8912 0 0.8525 +3.565 0 0.932 0 0.8253 +3.605 0 0.9636 0 0.7961 +3.644 0 0.9854 0 0.7648 +3.682 0 0.9975 0 0.7317 +3.717 0 0.9996 0 0.6967 +3.751 0 0.9917 0 0.66 +3.783 0 0.9738 0 0.6216 +3.813 0 0.9463 0 0.5817 +3.841 0 0.9093 0 0.5403 +3.867 0 0.8632 0 0.4976 +3.891 0 0.8085 0 0.4536 +3.913 0 0.7457 0 0.4085 +3.932 0 0.6755 0 0.3624 +3.949 0 0.5985 0 0.3153 +3.964 0 0.5155 0 0.2675 +3.976 0 0.4274 0 0.219 +3.985 0 0.335 0 0.17 +3.993 0 0.2392 0 0.1205 +3.997 0 0.1411 0 0.07074 +4 0 0.04158 0 0.02079 +4 0 -0.05837 0 -0.0292 +3.997 0 -0.1577 0 -0.07912 +3.992 0 -0.2555 0 -0.1288 +3.984 0 -0.3508 0 -0.1782 +3.974 0 -0.4425 0 -0.2272 +3.961 0 -0.5298 0 -0.2756 +3.946 0 -0.6119 0 -0.3233 +3.929 0 -0.6878 0 -0.3702 +3.909 0 -0.7568 0 -0.4161 +3.887 0 -0.8183 0 -0.4611 +3.863 0 -0.8716 0 -0.5048 +3.837 0 -0.9162 0 -0.5474 +3.808 0 -0.9516 0 -0.5885 +3.778 0 -0.9775 0 -0.6282 +3.746 0 -0.9937 0 -0.6663 +3.711 0 -0.9999 0 -0.7027 +3.675 0 -0.9962 0 -0.7374 +3.638 0 -0.9825 0 -0.7702 +3.598 0 -0.9589 0 -0.8011 +3.558 0 -0.9258 0 -0.8301 +3.516 0 -0.8835 0 -0.8569 +3.472 0 -0.8323 0 -0.8816 +3.427 0 -0.7728 0 -0.9041 +3.382 0 -0.7055 0 -0.9243 +3.335 0 -0.6313 0 -0.9422 +3.287 0 -0.5507 0 -0.9578 +3.239 0 -0.4646 0 -0.971 +3.19 0 -0.3739 0 -0.9817 +3.141 0 -0.2794 0 -0.99 +3.091 0 -0.1822 0 -0.9958 +3.042 0 -0.08309 0 -0.9991 +2.992 0 0.01681 0 -1 +2.942 0 0.1165 0 -0.9983 +2.892 0 0.2151 0 -0.9941 +2.842 0 0.3115 0 -0.9875 +2.793 0 0.4048 0 -0.9784 +2.744 0 0.4941 0 -0.9668 +2.696 0 0.5784 0 -0.9528 +2.649 0 0.657 0 -0.9365 +2.603 0 0.729 0 -0.9178 +2.557 0 0.7937 0 -0.8968 +2.513 0 0.8504 0 -0.8735 +2.47 0 0.8987 0 -0.8481 +2.428 0 0.938 0 -0.8206 +2.388 0 0.9679 0 -0.791 +2.349 0 0.9882 0 -0.7594 +2.312 0 0.9985 0 -0.7259 +2.277 0 0.9989 0 -0.6907 +2.243 0 0.9894 0 -0.6536 +2.211 0 0.9699 0 -0.615 +2.182 0 0.9407 0 -0.5748 +2.154 0 0.9022 0 -0.5332 +2.128 0 0.8546 0 -0.4903 +2.105 0 0.7985 0 -0.4461 +2.084 0 0.7344 0 -0.4008 +2.065 0 0.663 0 -0.3545 +2.048 0 0.5849 0 -0.3073 +2.034 0 0.501 0 -0.2594 +2.022 0 0.4121 0 -0.2108 +2.013 0 0.3191 0 -0.1617 +2.006 0 0.2229 0 -0.1122 +2.002 0 0.1245 0 -0.06235 +2 0 0.02478 0 -0.01239 +2.001 0 -0.07515 0 0.0376 +2.004 0 -0.1743 0 0.0875 +2.009 0 -0.2718 0 0.1372 +2.018 0 -0.3665 0 0.1865 +2.028 0 -0.4575 0 0.2354 +2.041 0 -0.544 0 0.2837 +2.056 0 -0.6251 0 0.3312 +2.074 0 -0.6999 0 0.378 +2.094 0 -0.7677 0 0.4238 +2.117 0 -0.8278 0 0.4685 +2.141 0 -0.8797 0 0.5121 +2.168 0 -0.9228 0 0.5544 +2.196 0 -0.9566 0 0.5953 +2.227 0 -0.9809 0 0.6347 +2.26 0 -0.9954 0 0.6725 +2.294 0 -1 0 0.7087 +2.331 0 -0.9946 0 0.743 +2.369 0 -0.9792 0 0.7756 +2.408 0 -0.954 0 0.8061 +2.449 0 -0.9193 0 0.8347 +2.492 0 -0.8755 0 0.8612 +2.535 0 -0.8228 0 0.8855 +2.58 0 -0.762 0 0.9076 +2.626 0 -0.6935 0 0.9275 +2.673 0 -0.6181 0 0.945 +2.721 0 -0.5366 0 0.9602 +2.769 0 -0.4496 0 0.9729 +2.818 0 -0.3582 0 0.9833 +2.867 0 -0.2632 0 0.9911 +2.917 0 -0.1656 0 0.9965 +2.967 0 -0.06632 0 0.9994 +2.996 0.1499 0 0.04998 1 +3.044 0.1523 0.1011 0.04998 0.9988 +3.091 0.1547 0.2011 0.04998 0.995 +3.138 0.157 0.2992 0.04998 0.9888 +3.185 0.1594 0.3943 0.04998 0.9801 +3.231 0.1617 0.4855 0.04998 0.9689 +3.277 0.164 0.5719 0.04998 0.9553 +3.323 0.1663 0.6526 0.04998 0.9394 +3.367 0.1685 0.7269 0.04998 0.9211 +3.411 0.1707 0.794 0.04998 0.9004 +3.454 0.1728 0.8532 0.04998 0.8776 +3.496 0.1749 0.904 0.04998 0.8525 +3.537 0.177 0.9459 0.04998 0.8253 +3.576 0.179 0.9784 0.04998 0.7961 +3.615 0.1809 1.001 0.04998 0.7648 +3.652 0.1827 1.014 0.04998 0.7317 +3.688 0.1845 1.017 0.04998 0.6967 +3.722 0.1862 1.01 0.04998 0.66 +3.754 0.1879 0.9931 0.04998 0.6216 +3.785 0.1894 0.9663 0.04998 0.5817 +3.814 0.1908 0.93 0.04998 0.5403 +3.841 0.1922 0.8846 0.04998 0.4976 +3.866 0.1935 0.8305 0.04998 0.4536 +3.889 0.1946 0.7683 0.04998 0.4085 +3.91 0.1957 0.6986 0.04998 0.3624 +3.929 0.1966 0.622 0.04998 0.3153 +3.945 0.1974 0.5394 0.04998 0.2675 +3.96 0.1982 0.4516 0.04998 0.219 +3.972 0.1988 0.3595 0.04998 0.17 +3.981 0.1992 0.264 0.04998 0.1205 +3.989 0.1996 0.166 0.04998 0.07074 +3.993 0.1998 0.06656 0.04998 0.02079 +3.996 0.2 -0.03337 0.04998 -0.0292 +3.995 0.1999 -0.1328 0.04998 -0.07912 +3.993 0.1998 -0.2307 0.04998 -0.1288 +3.987 0.1995 -0.3261 0.04998 -0.1782 +3.98 0.1991 -0.418 0.04998 -0.2272 +3.969 0.1986 -0.5056 0.04998 -0.2756 +3.956 0.198 -0.588 0.04998 -0.3233 +3.941 0.1972 -0.6643 0.04998 -0.3702 +3.923 0.1963 -0.7338 0.04998 -0.4161 +3.903 0.1953 -0.7958 0.04998 -0.4611 +3.88 0.1942 -0.8497 0.04998 -0.5048 +3.855 0.1929 -0.895 0.04998 -0.5474 +3.827 0.1915 -0.9311 0.04998 -0.5885 +3.798 0.19 -0.9578 0.04998 -0.6282 +3.766 0.1884 -0.9747 0.04998 -0.6663 +3.732 0.1867 -0.9818 0.04998 -0.7027 +3.696 0.1849 -0.979 0.04998 -0.7374 +3.658 0.183 -0.9662 0.04998 -0.7702 +3.618 0.181 -0.9437 0.04998 -0.8011 +3.576 0.179 -0.9116 0.04998 -0.8301 +3.533 0.1768 -0.8703 0.04998 -0.8569 +3.488 0.1746 -0.8202 0.04998 -0.8816 +3.442 0.1723 -0.7618 0.04998 -0.9041 +3.395 0.1699 -0.6958 0.04998 -0.9243 +3.346 0.1675 -0.6227 0.04998 -0.9422 +3.297 0.165 -0.5433 0.04998 -0.9578 +3.247 0.1625 -0.4585 0.04998 -0.971 +3.196 0.1599 -0.369 0.04998 -0.9817 +3.144 0.1573 -0.2758 0.04998 -0.99 +3.092 0.1547 -0.1798 0.04998 -0.9958 +3.04 0.1521 -0.08202 0.04998 -0.9991 +2.987 0.1495 0.0166 0.04998 -1 +2.935 0.1469 0.1151 0.04998 -0.9983 +2.883 0.1443 0.2123 0.04998 -0.9941 +2.831 0.1417 0.3075 0.04998 -0.9875 +2.78 0.1391 0.3996 0.04998 -0.9784 +2.729 0.1366 0.4876 0.04998 -0.9668 +2.679 0.134 0.5707 0.04998 -0.9528 +2.63 0.1316 0.648 0.04998 -0.9365 +2.582 0.1292 0.7188 0.04998 -0.9178 +2.535 0.1268 0.7824 0.04998 -0.8968 +2.489 0.1246 0.838 0.04998 -0.8735 +2.445 0.1223 0.8852 0.04998 -0.8481 +2.402 0.1202 0.9234 0.04998 -0.8206 +2.361 0.1182 0.9523 0.04998 -0.791 +2.322 0.1162 0.9716 0.04998 -0.7594 +2.285 0.1143 0.981 0.04998 -0.7259 +2.249 0.1126 0.9806 0.04998 -0.6907 +2.216 0.1109 0.9701 0.04998 -0.6536 +2.185 0.1093 0.9499 0.04998 -0.615 +2.156 0.1079 0.92 0.04998 -0.5748 +2.129 0.1065 0.8807 0.04998 -0.5332 +2.105 0.1053 0.8325 0.04998 -0.4903 +2.083 0.1042 0.7759 0.04998 -0.4461 +2.063 0.1032 0.7113 0.04998 -0.4008 +2.046 0.1024 0.6394 0.04998 -0.3545 +2.032 0.1017 0.5609 0.04998 -0.3073 +2.019 0.1011 0.4767 0.04998 -0.2594 +2.01 0.1006 0.3876 0.04998 -0.2108 +2.003 0.1002 0.2943 0.04998 -0.1617 +1.999 0.1 0.198 0.04998 -0.1122 +1.997 0.09992 0.09947 0.04998 -0.06235 +1.997 0.09995 -0.0002278 0.04998 -0.01239 +2 0.1001 -0.1001 0.04998 0.0376 +2.006 0.1004 -0.1992 0.04998 0.0875 +2.014 0.1008 -0.2964 0.04998 0.1372 +2.024 0.1013 -0.3909 0.04998 0.1865 +2.037 0.1019 -0.4817 0.04998 0.2354 +2.052 0.1027 -0.5678 0.04998 0.2837 +2.07 0.1036 -0.6485 0.04998 0.3312 +2.089 0.1046 -0.7228 0.04998 0.378 +2.111 0.1056 -0.7901 0.04998 0.4238 +2.135 0.1068 -0.8497 0.04998 0.4685 +2.161 0.1081 -0.9009 0.04998 0.5121 +2.188 0.1095 -0.9433 0.04998 0.5544 +2.218 0.111 -0.9764 0.04998 0.5953 +2.249 0.1126 -0.9999 0.04998 0.6347 +2.282 0.1142 -1.014 0.04998 0.6725 +2.317 0.1159 -1.017 0.04998 0.7087 +2.353 0.1177 -1.011 0.04998 0.743 +2.39 0.1196 -0.9947 0.04998 0.7756 +2.429 0.1216 -0.9685 0.04998 0.8061 +2.469 0.1236 -0.9328 0.04998 0.8347 +2.511 0.1256 -0.8879 0.04998 0.8612 +2.553 0.1278 -0.8342 0.04998 0.8855 +2.596 0.1299 -0.7722 0.04998 0.9076 +2.64 0.1321 -0.7027 0.04998 0.9275 +2.685 0.1344 -0.6261 0.04998 0.945 +2.731 0.1366 -0.5434 0.04998 0.9602 +2.777 0.139 -0.4553 0.04998 0.9729 +2.823 0.1413 -0.3627 0.04998 0.9833 +2.87 0.1436 -0.2665 0.04998 0.9911 +2.917 0.146 -0.1676 0.04998 0.9965 +2.965 0.1484 -0.06713 0.04998 0.9994 +2.985 0.2995 0 0.09983 1 +3.03 0.304 0.1022 0.09983 0.9988 +3.074 0.3085 0.2034 0.09983 0.995 +3.119 0.3129 0.3026 0.09983 0.9888 +3.163 0.3174 0.3989 0.09983 0.9801 +3.207 0.3218 0.4912 0.09983 0.9689 +3.251 0.3261 0.5787 0.09983 0.9553 +3.294 0.3305 0.6606 0.09983 0.9394 +3.336 0.3347 0.7359 0.09983 0.9211 +3.378 0.339 0.8041 0.09983 0.9004 +3.42 0.3431 0.8644 0.09983 0.8776 +3.46 0.3472 0.9162 0.09983 0.8525 +3.5 0.3511 0.9591 0.09983 0.8253 +3.539 0.355 0.9926 0.09983 0.7961 +3.576 0.3588 1.016 0.09983 0.7648 +3.613 0.3625 1.03 0.09983 0.7317 +3.648 0.366 1.034 0.09983 0.6967 +3.682 0.3695 1.028 0.09983 0.66 +3.715 0.3727 1.012 0.09983 0.6216 +3.746 0.3759 0.9858 0.09983 0.5817 +3.776 0.3789 0.9502 0.09983 0.5403 +3.804 0.3817 0.9055 0.09983 0.4976 +3.83 0.3843 0.852 0.09983 0.4536 +3.855 0.3868 0.7904 0.09983 0.4085 +3.878 0.3891 0.7212 0.09983 0.3624 +3.898 0.3911 0.6452 0.09983 0.3153 +3.917 0.393 0.563 0.09983 0.2675 +3.933 0.3947 0.4756 0.09983 0.219 +3.948 0.3961 0.3838 0.09983 0.17 +3.96 0.3973 0.2886 0.09983 0.1205 +3.969 0.3983 0.1908 0.09983 0.07074 +3.976 0.399 0.0915 0.09983 0.02079 +3.981 0.3995 -0.008343 0.09983 -0.0292 +3.984 0.3997 -0.1077 0.09983 -0.07912 +3.983 0.3997 -0.2057 0.09983 -0.1288 +3.98 0.3994 -0.3012 0.09983 -0.1782 +3.975 0.3988 -0.3933 0.09983 -0.2272 +3.967 0.398 -0.4811 0.09983 -0.2756 +3.956 0.3969 -0.5638 0.09983 -0.3233 +3.942 0.3956 -0.6405 0.09983 -0.3702 +3.926 0.3939 -0.7104 0.09983 -0.4161 +3.908 0.3921 -0.7729 0.09983 -0.4611 +3.886 0.3899 -0.8273 0.09983 -0.5048 +3.862 0.3875 -0.8732 0.09983 -0.5474 +3.836 0.3849 -0.91 0.09983 -0.5885 +3.807 0.382 -0.9374 0.09983 -0.6282 +3.775 0.3788 -0.9552 0.09983 -0.6663 +3.742 0.3754 -0.9631 0.09983 -0.7027 +3.706 0.3718 -0.9612 0.09983 -0.7374 +3.668 0.368 -0.9493 0.09983 -0.7702 +3.627 0.364 -0.9278 0.09983 -0.8011 +3.585 0.3597 -0.8968 0.09983 -0.8301 +3.541 0.3553 -0.8566 0.09983 -0.8569 +3.495 0.3507 -0.8076 0.09983 -0.8816 +3.448 0.346 -0.7504 0.09983 -0.9041 +3.399 0.3411 -0.6856 0.09983 -0.9243 +3.349 0.3361 -0.6137 0.09983 -0.9422 +3.298 0.3309 -0.5356 0.09983 -0.9578 +3.246 0.3257 -0.4521 0.09983 -0.971 +3.193 0.3204 -0.3639 0.09983 -0.9817 +3.139 0.315 -0.272 0.09983 -0.99 +3.085 0.3095 -0.1774 0.09983 -0.9958 +3.03 0.3041 -0.08091 0.09983 -0.9991 +2.976 0.2986 0.01637 0.09983 -1 +2.921 0.2931 0.1135 0.09983 -0.9983 +2.867 0.2876 0.2094 0.09983 -0.9941 +2.813 0.2822 0.3033 0.09983 -0.9875 +2.759 0.2769 0.394 0.09983 -0.9784 +2.706 0.2716 0.4807 0.09983 -0.9668 +2.655 0.2663 0.5625 0.09983 -0.9528 +2.604 0.2612 0.6386 0.09983 -0.9365 +2.554 0.2563 0.7082 0.09983 -0.9178 +2.506 0.2514 0.7706 0.09983 -0.8968 +2.459 0.2467 0.825 0.09983 -0.8735 +2.414 0.2422 0.8711 0.09983 -0.8481 +2.37 0.2378 0.9083 0.09983 -0.8206 +2.329 0.2337 0.9361 0.09983 -0.791 +2.289 0.2297 0.9544 0.09983 -0.7594 +2.252 0.2259 0.9629 0.09983 -0.7259 +2.217 0.2224 0.9615 0.09983 -0.6907 +2.184 0.2191 0.9503 0.09983 -0.6536 +2.153 0.216 0.9293 0.09983 -0.615 +2.125 0.2132 0.8987 0.09983 -0.5748 +2.099 0.2106 0.8588 0.09983 -0.5332 +2.076 0.2083 0.81 0.09983 -0.4903 +2.056 0.2063 0.7528 0.09983 -0.4461 +2.038 0.2045 0.6877 0.09983 -0.4008 +2.023 0.203 0.6154 0.09983 -0.3545 +2.01 0.2017 0.5366 0.09983 -0.3073 +2 0.2007 0.4521 0.09983 -0.2594 +1.993 0.2 0.3627 0.09983 -0.2108 +1.988 0.1995 0.2694 0.09983 -0.1617 +1.986 0.1993 0.1729 0.09983 -0.1122 +1.987 0.1994 0.07442 0.09983 -0.06235 +1.99 0.1997 -0.02523 0.09983 -0.01239 +1.996 0.2002 -0.125 0.09983 0.0376 +2.004 0.201 -0.2239 0.09983 0.0875 +2.014 0.2021 -0.3209 0.09983 0.1372 +2.027 0.2034 -0.4151 0.09983 0.1865 +2.042 0.2049 -0.5055 0.09983 0.2354 +2.059 0.2066 -0.5913 0.09983 0.2837 +2.078 0.2085 -0.6714 0.09983 0.3312 +2.1 0.2107 -0.7453 0.09983 0.378 +2.123 0.213 -0.812 0.09983 0.4238 +2.148 0.2155 -0.8709 0.09983 0.4685 +2.175 0.2182 -0.9215 0.09983 0.5121 +2.204 0.2211 -0.9632 0.09983 0.5544 +2.234 0.2242 -0.9956 0.09983 0.5953 +2.266 0.2273 -1.018 0.09983 0.6347 +2.299 0.2307 -1.031 0.09983 0.6725 +2.334 0.2341 -1.034 0.09983 0.7087 +2.369 0.2377 -1.027 0.09983 0.743 +2.406 0.2414 -1.01 0.09983 0.7756 +2.444 0.2453 -0.9824 0.09983 0.8061 +2.483 0.2492 -0.9457 0.09983 0.8347 +2.523 0.2532 -0.8998 0.09983 0.8612 +2.564 0.2573 -0.845 0.09983 0.8855 +2.606 0.2614 -0.782 0.09983 0.9076 +2.648 0.2657 -0.7113 0.09983 0.9275 +2.691 0.27 -0.6337 0.09983 0.945 +2.734 0.2743 -0.5499 0.09983 0.9602 +2.778 0.2787 -0.4606 0.09983 0.9729 +2.822 0.2831 -0.3669 0.09983 0.9833 +2.866 0.2876 -0.2695 0.09983 0.9911 +2.911 0.292 -0.1695 0.09983 0.9965 +2.955 0.2965 -0.0679 0.09983 0.9994 +2.966 0.4483 0 0.1494 1 +3.008 0.4546 0.1033 0.1494 0.9988 +3.05 0.461 0.2056 0.1494 0.995 +3.092 0.4673 0.3059 0.1494 0.9888 +3.133 0.4736 0.4032 0.1494 0.9801 +3.175 0.4798 0.4966 0.1494 0.9689 +3.216 0.486 0.5852 0.1494 0.9553 +3.257 0.4922 0.6681 0.1494 0.9394 +3.297 0.4983 0.7445 0.1494 0.9211 +3.337 0.5044 0.8137 0.1494 0.9004 +3.377 0.5103 0.875 0.1494 0.8776 +3.416 0.5162 0.9279 0.1494 0.8525 +3.454 0.522 0.9717 0.1494 0.8253 +3.492 0.5277 1.006 0.1494 0.7961 +3.528 0.5333 1.031 0.1494 0.7648 +3.565 0.5387 1.046 0.1494 0.7317 +3.6 0.544 1.051 0.1494 0.6967 +3.634 0.5492 1.045 0.1494 0.66 +3.667 0.5541 1.03 0.1494 0.6216 +3.698 0.5589 1.005 0.1494 0.5817 +3.729 0.5635 0.9698 0.1494 0.5403 +3.758 0.5679 0.9258 0.1494 0.4976 +3.785 0.5721 0.873 0.1494 0.4536 +3.811 0.576 0.812 0.1494 0.4085 +3.835 0.5796 0.7434 0.1494 0.3624 +3.858 0.583 0.6679 0.1494 0.3153 +3.878 0.5861 0.5863 0.1494 0.2675 +3.897 0.5889 0.4993 0.1494 0.219 +3.913 0.5914 0.4079 0.1494 0.17 +3.927 0.5936 0.313 0.1494 0.1205 +3.939 0.5954 0.2155 0.1494 0.07074 +3.949 0.5968 0.1164 0.1494 0.02079 +3.956 0.5979 0.01669 0.1494 -0.0292 +3.961 0.5986 -0.08261 0.1494 -0.07912 +3.963 0.599 -0.1805 0.1494 -0.1288 +3.963 0.5989 -0.2761 0.1494 -0.1782 +3.959 0.5984 -0.3683 0.1494 -0.2272 +3.953 0.5975 -0.4563 0.1494 -0.2756 +3.945 0.5962 -0.5392 0.1494 -0.3233 +3.933 0.5944 -0.6162 0.1494 -0.3702 +3.919 0.5923 -0.6865 0.1494 -0.4161 +3.902 0.5897 -0.7495 0.1494 -0.4611 +3.882 0.5867 -0.8044 0.1494 -0.5048 +3.859 0.5833 -0.8509 0.1494 -0.5474 +3.834 0.5795 -0.8883 0.1494 -0.5885 +3.806 0.5752 -0.9165 0.1494 -0.6282 +3.775 0.5706 -0.935 0.1494 -0.6663 +3.742 0.5655 -0.9438 0.1494 -0.7027 +3.706 0.5601 -0.9428 0.1494 -0.7374 +3.668 0.5544 -0.9319 0.1494 -0.7702 +3.627 0.5482 -0.9114 0.1494 -0.8011 +3.585 0.5418 -0.8814 0.1494 -0.8301 +3.54 0.535 -0.8423 0.1494 -0.8569 +3.493 0.528 -0.7946 0.1494 -0.8816 +3.445 0.5207 -0.7386 0.1494 -0.9041 +3.395 0.5131 -0.675 0.1494 -0.9243 +3.343 0.5053 -0.6044 0.1494 -0.9422 +3.291 0.4973 -0.5276 0.1494 -0.9578 +3.237 0.4892 -0.4454 0.1494 -0.971 +3.182 0.4809 -0.3586 0.1494 -0.9817 +3.126 0.4725 -0.2681 0.1494 -0.99 +3.07 0.464 -0.1748 0.1494 -0.9958 +3.013 0.4554 -0.07974 0.1494 -0.9991 +2.957 0.4469 0.01614 0.1494 -1 +2.9 0.4383 0.1118 0.1494 -0.9983 +2.844 0.4298 0.2064 0.1494 -0.9941 +2.788 0.4213 0.2988 0.1494 -0.9875 +2.732 0.4129 0.3882 0.1494 -0.9784 +2.678 0.4047 0.4736 0.1494 -0.9668 +2.624 0.3966 0.5541 0.1494 -0.9528 +2.572 0.3887 0.6289 0.1494 -0.9365 +2.521 0.381 0.6972 0.1494 -0.9178 +2.471 0.3735 0.7583 0.1494 -0.8968 +2.423 0.3663 0.8116 0.1494 -0.8735 +2.377 0.3593 0.8565 0.1494 -0.8481 +2.333 0.3526 0.8925 0.1494 -0.8206 +2.291 0.3463 0.9194 0.1494 -0.791 +2.252 0.3403 0.9366 0.1494 -0.7594 +2.214 0.3346 0.9442 0.1494 -0.7259 +2.179 0.3294 0.9419 0.1494 -0.6907 +2.147 0.3245 0.9299 0.1494 -0.6536 +2.117 0.3199 0.9081 0.1494 -0.615 +2.09 0.3158 0.8768 0.1494 -0.5748 +2.065 0.3121 0.8362 0.1494 -0.5332 +2.044 0.3089 0.7869 0.1494 -0.4903 +2.025 0.306 0.7292 0.1494 -0.4461 +2.009 0.3036 0.6637 0.1494 -0.4008 +1.995 0.3016 0.591 0.1494 -0.3545 +1.985 0.3 0.512 0.1494 -0.3073 +1.977 0.2988 0.4272 0.1494 -0.2594 +1.972 0.298 0.3377 0.1494 -0.2108 +1.97 0.2977 0.2443 0.1494 -0.1617 +1.97 0.2977 0.1478 0.1494 -0.1122 +1.973 0.2982 0.04932 0.1494 -0.06235 +1.979 0.299 -0.05022 0.1494 -0.01239 +1.987 0.3002 -0.1498 0.1494 0.0376 +1.997 0.3018 -0.2485 0.1494 0.0875 +2.01 0.3037 -0.3452 0.1494 0.1372 +2.025 0.306 -0.4391 0.1494 0.1865 +2.042 0.3086 -0.5291 0.1494 0.2354 +2.061 0.3115 -0.6143 0.1494 0.2837 +2.082 0.3147 -0.694 0.1494 0.3312 +2.105 0.3182 -0.7673 0.1494 0.378 +2.13 0.3219 -0.8334 0.1494 0.4238 +2.157 0.3259 -0.8917 0.1494 0.4685 +2.185 0.3302 -0.9416 0.1494 0.5121 +2.214 0.3346 -0.9825 0.1494 0.5544 +2.245 0.3393 -1.014 0.1494 0.5953 +2.277 0.3441 -1.036 0.1494 0.6347 +2.31 0.3492 -1.048 0.1494 0.6725 +2.345 0.3544 -1.05 0.1494 0.7087 +2.38 0.3597 -1.042 0.1494 0.743 +2.416 0.3652 -1.024 0.1494 0.7756 +2.454 0.3708 -0.9957 0.1494 0.8061 +2.491 0.3765 -0.958 0.1494 0.8347 +2.53 0.3824 -0.9111 0.1494 0.8612 +2.569 0.3883 -0.8553 0.1494 0.8855 +2.609 0.3943 -0.7913 0.1494 0.9076 +2.649 0.4004 -0.7196 0.1494 0.9275 +2.69 0.4065 -0.6409 0.1494 0.945 +2.731 0.4127 -0.556 0.1494 0.9602 +2.772 0.4189 -0.4657 0.1494 0.9729 +2.813 0.4252 -0.3709 0.1494 0.9833 +2.855 0.4315 -0.2724 0.1494 0.9911 +2.897 0.4378 -0.1714 0.1494 0.9965 +2.939 0.4441 -0.06862 0.1494 0.9994 +2.94 0.596 0 0.1987 1 +2.979 0.6039 0.1043 0.1987 0.9988 +3.018 0.6118 0.2076 0.1987 0.995 +3.057 0.6197 0.309 0.1987 0.9888 +3.096 0.6276 0.4073 0.1987 0.9801 +3.135 0.6354 0.5017 0.1987 0.9689 +3.173 0.6432 0.5913 0.1987 0.9553 +3.212 0.651 0.6752 0.1987 0.9394 +3.25 0.6588 0.7526 0.1987 0.9211 +3.288 0.6665 0.8228 0.1987 0.9004 +3.325 0.6741 0.8851 0.1987 0.8776 +3.363 0.6817 0.9389 0.1987 0.8525 +3.4 0.6891 0.9838 0.1987 0.8253 +3.436 0.6965 1.019 0.1987 0.7961 +3.472 0.7038 1.045 0.1987 0.7648 +3.507 0.711 1.061 0.1987 0.7317 +3.542 0.718 1.066 0.1987 0.6967 +3.576 0.7249 1.062 0.1987 0.66 +3.609 0.7315 1.047 0.1987 0.6216 +3.641 0.738 1.023 0.1987 0.5817 +3.672 0.7443 0.9888 0.1987 0.5403 +3.702 0.7504 0.9455 0.1987 0.4976 +3.73 0.7561 0.8934 0.1987 0.4536 +3.757 0.7617 0.8331 0.1987 0.4085 +3.783 0.7669 0.7651 0.1987 0.3624 +3.807 0.7717 0.6902 0.1987 0.3153 +3.829 0.7763 0.6091 0.1987 0.2675 +3.85 0.7804 0.5227 0.1987 0.219 +3.868 0.7842 0.4317 0.1987 0.17 +3.885 0.7875 0.3372 0.1987 0.1205 +3.899 0.7904 0.24 0.1987 0.07074 +3.911 0.7928 0.1412 0.1987 0.02079 +3.921 0.7948 0.04171 0.1987 -0.0292 +3.928 0.7962 -0.05744 0.1987 -0.07912 +3.932 0.7971 -0.1553 0.1987 -0.1288 +3.934 0.7975 -0.2508 0.1987 -0.1782 +3.933 0.7973 -0.3431 0.1987 -0.2272 +3.929 0.7965 -0.4312 0.1987 -0.2756 +3.923 0.7952 -0.5143 0.1987 -0.3233 +3.913 0.7933 -0.5916 0.1987 -0.3702 +3.901 0.7908 -0.6622 0.1987 -0.4161 +3.886 0.7876 -0.7256 0.1987 -0.4611 +3.867 0.7839 -0.781 0.1987 -0.5048 +3.846 0.7796 -0.828 0.1987 -0.5474 +3.822 0.7747 -0.8661 0.1987 -0.5885 +3.795 0.7692 -0.895 0.1987 -0.6282 +3.765 0.7631 -0.9143 0.1987 -0.6663 +3.732 0.7565 -0.9239 0.1987 -0.7027 +3.696 0.7493 -0.9238 0.1987 -0.7374 +3.658 0.7416 -0.9139 0.1987 -0.7702 +3.618 0.7333 -0.8944 0.1987 -0.8011 +3.575 0.7246 -0.8655 0.1987 -0.8301 +3.529 0.7154 -0.8276 0.1987 -0.8569 +3.482 0.7058 -0.781 0.1987 -0.8816 +3.433 0.6958 -0.7262 0.1987 -0.9041 +3.381 0.6854 -0.6639 0.1987 -0.9243 +3.329 0.6747 -0.5947 0.1987 -0.9422 +3.274 0.6638 -0.5192 0.1987 -0.9578 +3.219 0.6525 -0.4384 0.1987 -0.971 +3.162 0.6411 -0.353 0.1987 -0.9817 +3.105 0.6294 -0.2639 0.1987 -0.99 +3.047 0.6177 -0.1721 0.1987 -0.9958 +2.989 0.6059 -0.07852 0.1987 -0.9991 +2.93 0.594 0.01589 0.1987 -1 +2.872 0.5822 0.1101 0.1987 -0.9983 +2.814 0.5704 0.2032 0.1987 -0.9941 +2.756 0.5586 0.2942 0.1987 -0.9875 +2.699 0.5471 0.3822 0.1987 -0.9784 +2.643 0.5357 0.4661 0.1987 -0.9668 +2.588 0.5245 0.5452 0.1987 -0.9528 +2.534 0.5136 0.6187 0.1987 -0.9365 +2.482 0.503 0.6857 0.1987 -0.9178 +2.431 0.4928 0.7455 0.1987 -0.8968 +2.382 0.4829 0.7976 0.1987 -0.8735 +2.336 0.4734 0.8413 0.1987 -0.8481 +2.291 0.4644 0.8763 0.1987 -0.8206 +2.249 0.4559 0.902 0.1987 -0.791 +2.209 0.4478 0.9183 0.1987 -0.7594 +2.172 0.4402 0.9249 0.1987 -0.7259 +2.137 0.4332 0.9218 0.1987 -0.6907 +2.105 0.4268 0.9089 0.1987 -0.6536 +2.076 0.4209 0.8863 0.1987 -0.615 +2.05 0.4156 0.8543 0.1987 -0.5748 +2.027 0.4109 0.8132 0.1987 -0.5332 +2.007 0.4068 0.7633 0.1987 -0.4903 +1.989 0.4033 0.7051 0.1987 -0.4461 +1.975 0.4003 0.6393 0.1987 -0.4008 +1.963 0.398 0.5663 0.1987 -0.3545 +1.955 0.3963 0.487 0.1987 -0.3073 +1.949 0.3952 0.4021 0.1987 -0.2594 +1.947 0.3946 0.3125 0.1987 -0.2108 +1.947 0.3946 0.219 0.1987 -0.1617 +1.949 0.3952 0.1226 0.1987 -0.1122 +1.955 0.3962 0.02419 0.1987 -0.06235 +1.963 0.3979 -0.07517 0.1987 -0.01239 +1.973 0.4 -0.1745 0.1987 0.0376 +1.986 0.4025 -0.2729 0.1987 0.0875 +2.001 0.4056 -0.3693 0.1987 0.1372 +2.018 0.4091 -0.4627 0.1987 0.1865 +2.037 0.413 -0.5523 0.1987 0.2354 +2.058 0.4172 -0.637 0.1987 0.2837 +2.081 0.4219 -0.7161 0.1987 0.3312 +2.106 0.4269 -0.7888 0.1987 0.378 +2.132 0.4322 -0.8543 0.1987 0.4238 +2.16 0.4378 -0.9119 0.1987 0.4685 +2.189 0.4437 -0.9611 0.1987 0.5121 +2.219 0.4498 -1.001 0.1987 0.5544 +2.25 0.4561 -1.032 0.1987 0.5953 +2.283 0.4627 -1.053 0.1987 0.6347 +2.316 0.4695 -1.064 0.1987 0.6725 +2.35 0.4764 -1.065 0.1987 0.7087 +2.385 0.4834 -1.056 0.1987 0.743 +2.42 0.4906 -1.037 0.1987 0.7756 +2.457 0.498 -1.008 0.1987 0.8061 +2.493 0.5054 -0.9697 0.1987 0.8347 +2.53 0.5129 -0.9218 0.1987 0.8612 +2.568 0.5205 -0.8651 0.1987 0.8855 +2.605 0.5281 -0.8001 0.1987 0.9076 +2.643 0.5359 -0.7274 0.1987 0.9275 +2.682 0.5436 -0.6477 0.1987 0.945 +2.72 0.5514 -0.5618 0.1987 0.9602 +2.759 0.5592 -0.4705 0.1987 0.9729 +2.798 0.5671 -0.3746 0.1987 0.9833 +2.836 0.575 -0.2752 0.1987 0.9911 +2.875 0.5829 -0.1731 0.1987 0.9965 +2.914 0.5908 -0.0693 0.1987 0.9994 +2.907 0.7422 0 0.2474 1 +2.943 0.7514 0.1053 0.2474 0.9988 +2.979 0.7606 0.2096 0.2474 0.995 +3.015 0.7698 0.3118 0.2474 0.9888 +3.051 0.779 0.4111 0.2474 0.9801 +3.087 0.7882 0.5065 0.2474 0.9689 +3.123 0.7973 0.5971 0.2474 0.9553 +3.159 0.8065 0.6819 0.2474 0.9394 +3.194 0.8157 0.7603 0.2474 0.9211 +3.23 0.8248 0.8314 0.2474 0.9004 +3.266 0.8339 0.8947 0.2474 0.8776 +3.302 0.843 0.9494 0.2474 0.8525 +3.337 0.8521 0.9952 0.2474 0.8253 +3.372 0.861 1.031 0.2474 0.7961 +3.407 0.87 1.058 0.2474 0.7648 +3.442 0.8788 1.075 0.2474 0.7317 +3.476 0.8875 1.081 0.2474 0.6967 +3.509 0.896 1.078 0.2474 0.66 +3.542 0.9045 1.064 0.2474 0.6216 +3.574 0.9127 1.04 0.2474 0.5817 +3.606 0.9207 1.007 0.2474 0.5403 +3.636 0.9285 0.9646 0.2474 0.4976 +3.666 0.936 0.9133 0.2474 0.4536 +3.694 0.9433 0.8537 0.2474 0.4085 +3.721 0.9502 0.7864 0.2474 0.3624 +3.747 0.9567 0.7121 0.2474 0.3153 +3.771 0.9628 0.6316 0.2474 0.2675 +3.793 0.9685 0.5457 0.2474 0.219 +3.814 0.9738 0.4552 0.2474 0.17 +3.832 0.9785 0.3611 0.2474 0.1205 +3.849 0.9827 0.2644 0.2474 0.07074 +3.863 0.9863 0.1659 0.2474 0.02079 +3.875 0.9894 0.0667 0.2474 -0.0292 +3.884 0.9918 -0.03223 0.2474 -0.07912 +3.891 0.9935 -0.1299 0.2474 -0.1288 +3.895 0.9946 -0.2254 0.2474 -0.1782 +3.896 0.9949 -0.3177 0.2474 -0.2272 +3.895 0.9945 -0.4059 0.2474 -0.2756 +3.89 0.9934 -0.4891 0.2474 -0.3233 +3.883 0.9915 -0.5666 0.2474 -0.3702 +3.872 0.9888 -0.6375 0.2474 -0.4161 +3.859 0.9853 -0.7013 0.2474 -0.4611 +3.842 0.981 -0.7572 0.2474 -0.5048 +3.822 0.9759 -0.8047 0.2474 -0.5474 +3.799 0.97 -0.8434 0.2474 -0.5885 +3.773 0.9634 -0.8729 0.2474 -0.6282 +3.744 0.9559 -0.893 0.2474 -0.6663 +3.712 0.9477 -0.9034 0.2474 -0.7027 +3.676 0.9387 -0.9042 0.2474 -0.7374 +3.639 0.9291 -0.8953 0.2474 -0.7702 +3.598 0.9187 -0.8768 0.2474 -0.8011 +3.555 0.9077 -0.8491 0.2474 -0.8301 +3.509 0.896 -0.8123 0.2474 -0.8569 +3.461 0.8838 -0.7669 0.2474 -0.8816 +3.411 0.871 -0.7135 0.2474 -0.9041 +3.359 0.8577 -0.6525 0.2474 -0.9243 +3.305 0.8439 -0.5846 0.2474 -0.9422 +3.25 0.8298 -0.5105 0.2474 -0.9578 +3.193 0.8153 -0.4311 0.2474 -0.971 +3.135 0.8005 -0.3472 0.2474 -0.9817 +3.076 0.7855 -0.2596 0.2474 -0.99 +3.017 0.7703 -0.1693 0.2474 -0.9958 +2.957 0.755 -0.07726 0.2474 -0.9991 +2.897 0.7396 0.01563 0.2474 -1 +2.837 0.7243 0.1084 0.2474 -0.9983 +2.777 0.709 0.2 0.2474 -0.9941 +2.717 0.6939 0.2894 0.2474 -0.9875 +2.659 0.6789 0.3759 0.2474 -0.9784 +2.601 0.6642 0.4584 0.2474 -0.9668 +2.545 0.6499 0.5361 0.2474 -0.9528 +2.49 0.6358 0.6081 0.2474 -0.9365 +2.437 0.6222 0.6738 0.2474 -0.9178 +2.385 0.6091 0.7323 0.2474 -0.8968 +2.336 0.5965 0.7831 0.2474 -0.8735 +2.289 0.5844 0.8256 0.2474 -0.8481 +2.244 0.573 0.8594 0.2474 -0.8206 +2.202 0.5622 0.8841 0.2474 -0.791 +2.162 0.552 0.8993 0.2474 -0.7594 +2.125 0.5426 0.905 0.2474 -0.7259 +2.091 0.5339 0.901 0.2474 -0.6907 +2.06 0.5259 0.8873 0.2474 -0.6536 +2.032 0.5187 0.864 0.2474 -0.615 +2.006 0.5123 0.8314 0.2474 -0.5748 +1.984 0.5067 0.7897 0.2474 -0.5332 +1.966 0.5019 0.7393 0.2474 -0.4903 +1.95 0.4979 0.6807 0.2474 -0.4461 +1.937 0.4947 0.6144 0.2474 -0.4008 +1.928 0.4922 0.5412 0.2474 -0.3545 +1.921 0.4906 0.4617 0.2474 -0.3073 +1.918 0.4897 0.3767 0.2474 -0.2594 +1.917 0.4895 0.287 0.2474 -0.2108 +1.919 0.4901 0.1936 0.2474 -0.1617 +1.925 0.4914 0.09726 0.2474 -0.1122 +1.932 0.4934 -0.0009488 0.2474 -0.06235 +1.942 0.496 -0.1001 0.2474 -0.01239 +1.955 0.4992 -0.1992 0.2474 0.0376 +1.97 0.5031 -0.2972 0.2474 0.0875 +1.987 0.5074 -0.3931 0.2474 0.1372 +2.007 0.5123 -0.4861 0.2474 0.1865 +2.028 0.5177 -0.5751 0.2474 0.2354 +2.051 0.5236 -0.6593 0.2474 0.2837 +2.075 0.5299 -0.7378 0.2474 0.3312 +2.101 0.5365 -0.8098 0.2474 0.378 +2.129 0.5435 -0.8746 0.2474 0.4238 +2.157 0.5509 -0.9315 0.2474 0.4685 +2.187 0.5585 -0.9799 0.2474 0.5121 +2.218 0.5664 -1.019 0.2474 0.5544 +2.25 0.5745 -1.049 0.2474 0.5953 +2.282 0.5828 -1.07 0.2474 0.6347 +2.316 0.5912 -1.08 0.2474 0.6725 +2.349 0.5999 -1.08 0.2474 0.7087 +2.384 0.6086 -1.07 0.2474 0.743 +2.418 0.6175 -1.05 0.2474 0.7756 +2.453 0.6264 -1.02 0.2474 0.8061 +2.488 0.6354 -0.9808 0.2474 0.8347 +2.524 0.6444 -0.932 0.2474 0.8612 +2.559 0.6535 -0.8743 0.2474 0.8855 +2.595 0.6627 -0.8084 0.2474 0.9076 +2.631 0.6718 -0.7347 0.2474 0.9275 +2.667 0.681 -0.6541 0.2474 0.945 +2.703 0.6902 -0.5672 0.2474 0.9602 +2.739 0.6994 -0.4749 0.2474 0.9729 +2.775 0.7085 -0.3781 0.2474 0.9833 +2.811 0.7177 -0.2777 0.2474 0.9911 +2.847 0.7269 -0.1747 0.2474 0.9965 +2.883 0.7361 -0.06994 0.2474 0.9994 +2.866 0.8866 0 0.2955 1 +2.899 0.8968 0.1062 0.2955 0.9988 +2.932 0.907 0.2114 0.2955 0.995 +2.965 0.9172 0.3145 0.2955 0.9888 +2.998 0.9274 0.4147 0.2955 0.9801 +3.031 0.9377 0.511 0.2955 0.9689 +3.065 0.948 0.6025 0.2955 0.9553 +3.098 0.9583 0.6882 0.2955 0.9394 +3.131 0.9687 0.7675 0.2955 0.9211 +3.165 0.9791 0.8395 0.2955 0.9004 +3.199 0.9895 0.9037 0.2955 0.8776 +3.233 0.9999 0.9593 0.2955 0.8525 +3.266 1.01 1.006 0.2955 0.8253 +3.3 1.021 1.043 0.2955 0.7961 +3.334 1.031 1.071 0.2955 0.7648 +3.367 1.042 1.088 0.2955 0.7317 +3.401 1.052 1.096 0.2955 0.6967 +3.434 1.062 1.093 0.2955 0.66 +3.467 1.072 1.08 0.2955 0.6216 +3.499 1.082 1.057 0.2955 0.5817 +3.531 1.092 1.025 0.2955 0.5403 +3.562 1.102 0.9831 0.2955 0.4976 +3.592 1.111 0.9326 0.2955 0.4536 +3.622 1.12 0.8737 0.2955 0.4085 +3.65 1.129 0.8072 0.2955 0.3624 +3.677 1.137 0.7336 0.2955 0.3153 +3.703 1.145 0.6537 0.2955 0.2675 +3.727 1.153 0.5684 0.2955 0.219 +3.749 1.16 0.4785 0.2955 0.17 +3.77 1.166 0.3849 0.2955 0.1205 +3.788 1.172 0.2886 0.2955 0.07074 +3.804 1.177 0.1905 0.2955 0.02079 +3.819 1.181 0.09166 0.2955 -0.0292 +3.83 1.185 -0.007005 0.2955 -0.07912 +3.839 1.188 -0.1045 0.2955 -0.1288 +3.846 1.19 -0.1998 0.2955 -0.1782 +3.849 1.191 -0.292 0.2955 -0.2272 +3.85 1.191 -0.3802 0.2955 -0.2756 +3.847 1.19 -0.4636 0.2955 -0.3233 +3.842 1.188 -0.5412 0.2955 -0.3702 +3.833 1.186 -0.6124 0.2955 -0.4161 +3.821 1.182 -0.6765 0.2955 -0.4611 +3.806 1.177 -0.7328 0.2955 -0.5048 +3.787 1.172 -0.7808 0.2955 -0.5474 +3.766 1.165 -0.8201 0.2955 -0.5885 +3.741 1.157 -0.8503 0.2955 -0.6282 +3.712 1.148 -0.8711 0.2955 -0.6663 +3.681 1.139 -0.8824 0.2955 -0.7027 +3.646 1.128 -0.884 0.2955 -0.7374 +3.609 1.116 -0.8761 0.2955 -0.7702 +3.568 1.104 -0.8587 0.2955 -0.8011 +3.525 1.09 -0.8321 0.2955 -0.8301 +3.479 1.076 -0.7965 0.2955 -0.8569 +3.431 1.061 -0.7524 0.2955 -0.8816 +3.38 1.046 -0.7002 0.2955 -0.9041 +3.327 1.029 -0.6406 0.2955 -0.9243 +3.273 1.012 -0.5741 0.2955 -0.9422 +3.216 0.9949 -0.5015 0.2955 -0.9578 +3.158 0.977 -0.4236 0.2955 -0.971 +3.099 0.9587 -0.3412 0.2955 -0.9817 +3.039 0.9401 -0.2552 0.2955 -0.99 +2.978 0.9213 -0.1664 0.2955 -0.9958 +2.917 0.9024 -0.07594 0.2955 -0.9991 +2.856 0.8834 0.01537 0.2955 -1 +2.794 0.8644 0.1065 0.2955 -0.9983 +2.733 0.8454 0.1965 0.2955 -0.9941 +2.673 0.8267 0.2845 0.2955 -0.9875 +2.613 0.8082 0.3694 0.2955 -0.9784 +2.554 0.7901 0.4504 0.2955 -0.9668 +2.497 0.7723 0.5266 0.2955 -0.9528 +2.441 0.755 0.5972 0.2955 -0.9365 +2.387 0.7383 0.6614 0.2955 -0.9178 +2.335 0.7222 0.7186 0.2955 -0.8968 +2.285 0.7068 0.7681 0.2955 -0.8735 +2.237 0.6921 0.8094 0.2955 -0.8481 +2.192 0.6781 0.8421 0.2955 -0.8206 +2.15 0.665 0.8656 0.2955 -0.791 +2.11 0.6528 0.8798 0.2955 -0.7594 +2.074 0.6415 0.8846 0.2955 -0.7259 +2.04 0.6311 0.8797 0.2955 -0.6907 +2.01 0.6217 0.8652 0.2955 -0.6536 +1.983 0.6133 0.8412 0.2955 -0.615 +1.959 0.6059 0.8079 0.2955 -0.5748 +1.938 0.5995 0.7656 0.2955 -0.5332 +1.921 0.5941 0.7148 0.2955 -0.4903 +1.907 0.5898 0.6558 0.2955 -0.4461 +1.896 0.5864 0.5892 0.2955 -0.4008 +1.888 0.5841 0.5158 0.2955 -0.3545 +1.884 0.5827 0.4361 0.2955 -0.3073 +1.882 0.5822 0.3511 0.2955 -0.2594 +1.884 0.5827 0.2614 0.2955 -0.2108 +1.888 0.5841 0.168 0.2955 -0.1617 +1.896 0.5864 0.07189 0.2955 -0.1122 +1.905 0.5894 -0.02609 0.2955 -0.06235 +1.918 0.5933 -0.1249 0.2955 -0.01239 +1.933 0.5979 -0.2236 0.2955 0.0376 +1.95 0.6032 -0.3212 0.2955 0.0875 +1.969 0.6091 -0.4167 0.2955 0.1372 +1.99 0.6157 -0.5092 0.2955 0.1865 +2.013 0.6228 -0.5976 0.2955 0.2354 +2.038 0.6304 -0.6812 0.2955 0.2837 +2.064 0.6385 -0.7591 0.2955 0.3312 +2.091 0.6469 -0.8304 0.2955 0.378 +2.12 0.6558 -0.8944 0.2955 0.4238 +2.15 0.665 -0.9506 0.2955 0.4685 +2.18 0.6744 -0.9982 0.2955 0.5121 +2.212 0.6841 -1.037 0.2955 0.5544 +2.244 0.694 -1.066 0.2955 0.5953 +2.276 0.7041 -1.085 0.2955 0.6347 +2.309 0.7143 -1.095 0.2955 0.6725 +2.342 0.7246 -1.094 0.2955 0.7087 +2.376 0.7349 -1.083 0.2955 0.743 +2.41 0.7453 -1.063 0.2955 0.7756 +2.443 0.7558 -1.032 0.2955 0.8061 +2.477 0.7662 -0.9913 0.2955 0.8347 +2.511 0.7767 -0.9416 0.2955 0.8612 +2.545 0.7871 -0.883 0.2955 0.8855 +2.578 0.7976 -0.8162 0.2955 0.9076 +2.612 0.8079 -0.7416 0.2955 0.9275 +2.645 0.8183 -0.6601 0.2955 0.945 +2.679 0.8286 -0.5723 0.2955 0.9602 +2.712 0.8389 -0.4791 0.2955 0.9729 +2.745 0.8492 -0.3814 0.2955 0.9833 +2.778 0.8594 -0.2801 0.2955 0.9911 +2.811 0.8696 -0.1762 0.2955 0.9965 +2.844 0.8798 -0.07054 0.2955 0.9994 +2.818 1.029 0 0.3429 1 +2.848 1.04 0.107 0.3429 0.9988 +2.878 1.051 0.213 0.3429 0.995 +2.908 1.062 0.317 0.3429 0.9888 +2.938 1.073 0.4181 0.3429 0.9801 +2.969 1.084 0.5152 0.3429 0.9689 +2.999 1.095 0.6075 0.3429 0.9553 +3.03 1.106 0.6941 0.3429 0.9394 +3.061 1.117 0.7742 0.3429 0.9211 +3.092 1.129 0.8471 0.3429 0.9004 +3.124 1.14 0.9121 0.3429 0.8776 +3.156 1.152 0.9686 0.3429 0.8525 +3.188 1.164 1.016 0.3429 0.8253 +3.22 1.176 1.054 0.3429 0.7961 +3.253 1.187 1.083 0.3429 0.7648 +3.286 1.199 1.101 0.3429 0.7317 +3.318 1.211 1.109 0.3429 0.6967 +3.351 1.223 1.107 0.3429 0.66 +3.383 1.235 1.095 0.3429 0.6216 +3.416 1.247 1.073 0.3429 0.5817 +3.448 1.259 1.042 0.3429 0.5403 +3.479 1.27 1.001 0.3429 0.4976 +3.51 1.281 0.9513 0.3429 0.4536 +3.54 1.292 0.8932 0.3429 0.4085 +3.57 1.303 0.8274 0.3429 0.3624 +3.598 1.313 0.7546 0.3429 0.3153 +3.625 1.323 0.6754 0.3429 0.2675 +3.651 1.333 0.5907 0.3429 0.219 +3.675 1.341 0.5014 0.3429 0.17 +3.697 1.35 0.4084 0.3429 0.1205 +3.718 1.357 0.3126 0.3429 0.07074 +3.736 1.364 0.215 0.3429 0.02079 +3.752 1.37 0.1166 0.3429 -0.0292 +3.766 1.375 0.01823 0.3429 -0.07912 +3.777 1.379 -0.07898 0.3429 -0.1288 +3.786 1.382 -0.1741 0.3429 -0.1782 +3.791 1.384 -0.2662 0.3429 -0.2272 +3.794 1.385 -0.3544 0.3429 -0.2756 +3.794 1.385 -0.4378 0.3429 -0.3233 +3.79 1.383 -0.5155 0.3429 -0.3702 +3.783 1.381 -0.5869 0.3429 -0.4161 +3.773 1.377 -0.6513 0.3429 -0.4611 +3.759 1.372 -0.708 0.3429 -0.5048 +3.742 1.366 -0.7565 0.3429 -0.5474 +3.722 1.359 -0.7963 0.3429 -0.5885 +3.698 1.35 -0.8271 0.3429 -0.6282 +3.67 1.34 -0.8487 0.3429 -0.6663 +3.64 1.329 -0.8608 0.3429 -0.7027 +3.606 1.316 -0.8633 0.3429 -0.7374 +3.569 1.303 -0.8564 0.3429 -0.7702 +3.529 1.288 -0.8401 0.3429 -0.8011 +3.485 1.272 -0.8146 0.3429 -0.8301 +3.439 1.256 -0.7802 0.3429 -0.8569 +3.391 1.238 -0.7374 0.3429 -0.8816 +3.34 1.219 -0.6866 0.3429 -0.9041 +3.287 1.2 -0.6283 0.3429 -0.9243 +3.231 1.179 -0.5633 0.3429 -0.9422 +3.174 1.159 -0.4922 0.3429 -0.9578 +3.115 1.137 -0.4159 0.3429 -0.971 +3.055 1.115 -0.335 0.3429 -0.9817 +2.994 1.093 -0.2506 0.3429 -0.99 +2.933 1.07 -0.1635 0.3429 -0.9958 +2.87 1.048 -0.07458 0.3429 -0.9991 +2.808 1.025 0.01509 0.3429 -1 +2.745 1.002 0.1046 0.3429 -0.9983 +2.683 0.9793 0.193 0.3429 -0.9941 +2.621 0.9568 0.2793 0.3429 -0.9875 +2.561 0.9347 0.3626 0.3429 -0.9784 +2.501 0.9129 0.4421 0.3429 -0.9668 +2.443 0.8917 0.5168 0.3429 -0.9528 +2.386 0.871 0.5859 0.3429 -0.9365 +2.332 0.8511 0.6487 0.3429 -0.9178 +2.279 0.8319 0.7045 0.3429 -0.8968 +2.229 0.8136 0.7527 0.3429 -0.8735 +2.181 0.7961 0.7927 0.3429 -0.8481 +2.136 0.7797 0.8242 0.3429 -0.8206 +2.094 0.7643 0.8466 0.3429 -0.791 +2.055 0.75 0.8598 0.3429 -0.7594 +2.019 0.7368 0.8635 0.3429 -0.7259 +1.986 0.7249 0.8578 0.3429 -0.6907 +1.956 0.7141 0.8425 0.3429 -0.6536 +1.93 0.7045 0.8178 0.3429 -0.615 +1.907 0.6962 0.7839 0.3429 -0.5748 +1.888 0.6892 0.7411 0.3429 -0.5332 +1.872 0.6834 0.6898 0.3429 -0.4903 +1.86 0.6788 0.6305 0.3429 -0.4461 +1.851 0.6755 0.5637 0.3429 -0.4008 +1.845 0.6734 0.49 0.3429 -0.3545 +1.842 0.6725 0.4103 0.3429 -0.3073 +1.843 0.6727 0.3252 0.3429 -0.2594 +1.846 0.674 0.2356 0.3429 -0.2108 +1.853 0.6764 0.1424 0.3429 -0.1617 +1.862 0.6799 0.04648 0.3429 -0.1122 +1.875 0.6843 -0.05122 0.3429 -0.06235 +1.889 0.6896 -0.1497 0.3429 -0.01239 +1.906 0.6958 -0.248 0.3429 0.0376 +1.925 0.7027 -0.3451 0.3429 0.0875 +1.946 0.7104 -0.4401 0.3429 0.1372 +1.969 0.7188 -0.5319 0.3429 0.1865 +1.994 0.7278 -0.6198 0.3429 0.2354 +2.02 0.7374 -0.7027 0.3429 0.2837 +2.048 0.7474 -0.7798 0.3429 0.3312 +2.076 0.7579 -0.8504 0.3429 0.378 +2.106 0.7687 -0.9137 0.3429 0.4238 +2.136 0.7798 -0.969 0.3429 0.4685 +2.167 0.7912 -1.016 0.3429 0.5121 +2.199 0.8028 -1.054 0.3429 0.5544 +2.231 0.8145 -1.082 0.3429 0.5953 +2.264 0.8263 -1.1 0.3429 0.6347 +2.296 0.8382 -1.109 0.3429 0.6725 +2.329 0.8502 -1.108 0.3429 0.7087 +2.362 0.8621 -1.096 0.3429 0.743 +2.394 0.874 -1.074 0.3429 0.7756 +2.427 0.8859 -1.042 0.3429 0.8061 +2.459 0.8976 -1.001 0.3429 0.8347 +2.491 0.9093 -0.9506 0.3429 0.8612 +2.523 0.9209 -0.8912 0.3429 0.8855 +2.554 0.9324 -0.8234 0.3429 0.9076 +2.586 0.9439 -0.748 0.3429 0.9275 +2.617 0.9552 -0.6656 0.3429 0.945 +2.647 0.9664 -0.577 0.3429 0.9602 +2.678 0.9775 -0.483 0.3429 0.9729 +2.708 0.9886 -0.3845 0.3429 0.9833 +2.738 0.9996 -0.2823 0.3429 0.9911 +2.768 1.011 -0.1775 0.3429 0.9965 +2.798 1.021 -0.07109 0.3429 0.9994 +2.763 1.168 0 0.3894 1 +2.79 1.18 0.1078 0.3894 0.9988 +2.817 1.191 0.2145 0.3894 0.995 +2.844 1.202 0.3193 0.3894 0.9888 +2.871 1.214 0.4211 0.3894 0.9801 +2.899 1.226 0.519 0.3894 0.9689 +2.927 1.237 0.6121 0.3894 0.9553 +2.955 1.249 0.6995 0.3894 0.9394 +2.983 1.261 0.7804 0.3894 0.9211 +3.012 1.274 0.8541 0.3894 0.9004 +3.042 1.286 0.9199 0.3894 0.8776 +3.072 1.299 0.9773 0.3894 0.8525 +3.102 1.312 1.026 0.3894 0.8253 +3.133 1.325 1.065 0.3894 0.7961 +3.164 1.338 1.094 0.3894 0.7648 +3.196 1.351 1.113 0.3894 0.7317 +3.228 1.365 1.122 0.3894 0.6967 +3.26 1.378 1.121 0.3894 0.66 +3.292 1.392 1.11 0.3894 0.6216 +3.324 1.405 1.089 0.3894 0.5817 +3.356 1.419 1.058 0.3894 0.5403 +3.388 1.433 1.018 0.3894 0.4976 +3.42 1.446 0.9694 0.3894 0.4536 +3.451 1.459 0.9122 0.3894 0.4085 +3.481 1.472 0.8472 0.3894 0.3624 +3.51 1.484 0.7751 0.3894 0.3153 +3.539 1.496 0.6967 0.3894 0.2675 +3.566 1.508 0.6127 0.3894 0.219 +3.591 1.518 0.5241 0.3894 0.17 +3.616 1.529 0.4317 0.3894 0.1205 +3.638 1.538 0.3365 0.3894 0.07074 +3.658 1.547 0.2394 0.3894 0.02079 +3.676 1.554 0.1414 0.3894 -0.0292 +3.692 1.561 0.04345 0.3894 -0.07912 +3.705 1.566 -0.05343 0.3894 -0.1288 +3.716 1.571 -0.1483 0.3894 -0.1782 +3.723 1.574 -0.2402 0.3894 -0.2272 +3.728 1.576 -0.3283 0.3894 -0.2756 +3.729 1.577 -0.4117 0.3894 -0.3233 +3.728 1.576 -0.4895 0.3894 -0.3702 +3.722 1.574 -0.5611 0.3894 -0.4161 +3.714 1.57 -0.6257 0.3894 -0.4611 +3.702 1.565 -0.6827 0.3894 -0.5048 +3.686 1.559 -0.7316 0.3894 -0.5474 +3.667 1.55 -0.772 0.3894 -0.5885 +3.644 1.541 -0.8035 0.3894 -0.6282 +3.618 1.53 -0.8257 0.3894 -0.6663 +3.588 1.517 -0.8386 0.3894 -0.7027 +3.555 1.503 -0.8421 0.3894 -0.7374 +3.519 1.488 -0.8362 0.3894 -0.7702 +3.479 1.471 -0.8209 0.3894 -0.8011 +3.436 1.453 -0.7966 0.3894 -0.8301 +3.39 1.433 -0.7634 0.3894 -0.8569 +3.342 1.413 -0.7219 0.3894 -0.8816 +3.29 1.391 -0.6725 0.3894 -0.9041 +3.237 1.369 -0.6157 0.3894 -0.9243 +3.181 1.345 -0.5521 0.3894 -0.9422 +3.123 1.321 -0.4826 0.3894 -0.9578 +3.064 1.296 -0.4078 0.3894 -0.971 +3.003 1.27 -0.3286 0.3894 -0.9817 +2.942 1.244 -0.2458 0.3894 -0.99 +2.879 1.217 -0.1604 0.3894 -0.9958 +2.816 1.191 -0.07317 0.3894 -0.9991 +2.753 1.164 0.01481 0.3894 -1 +2.689 1.137 0.1026 0.3894 -0.9983 +2.626 1.11 0.1893 0.3894 -0.9941 +2.564 1.084 0.274 0.3894 -0.9875 +2.502 1.058 0.3557 0.3894 -0.9784 +2.442 1.032 0.4335 0.3894 -0.9668 +2.383 1.008 0.5066 0.3894 -0.9528 +2.326 0.9835 0.5742 0.3894 -0.9365 +2.271 0.9603 0.6355 0.3894 -0.9178 +2.218 0.938 0.6899 0.3894 -0.8968 +2.168 0.9167 0.7368 0.3894 -0.8735 +2.12 0.8965 0.7755 0.3894 -0.8481 +2.076 0.8775 0.8058 0.3894 -0.8206 +2.034 0.8599 0.8271 0.3894 -0.791 +1.995 0.8435 0.8392 0.3894 -0.7594 +1.96 0.8285 0.842 0.3894 -0.7259 +1.928 0.815 0.8354 0.3894 -0.6907 +1.899 0.8029 0.8193 0.3894 -0.6536 +1.874 0.7923 0.7939 0.3894 -0.615 +1.852 0.7832 0.7594 0.3894 -0.5748 +1.834 0.7756 0.7161 0.3894 -0.5332 +1.82 0.7695 0.6644 0.3894 -0.4903 +1.809 0.7649 0.6048 0.3894 -0.4461 +1.802 0.7618 0.5377 0.3894 -0.4008 +1.798 0.7601 0.464 0.3894 -0.3545 +1.797 0.7598 0.3842 0.3894 -0.3073 +1.8 0.7609 0.2992 0.3894 -0.2594 +1.805 0.7633 0.2097 0.3894 -0.2108 +1.814 0.7669 0.1167 0.3894 -0.1617 +1.825 0.7718 0.02103 0.3894 -0.1122 +1.839 0.7777 -0.07631 0.3894 -0.06235 +1.856 0.7847 -0.1744 0.3894 -0.01239 +1.875 0.7927 -0.2722 0.3894 0.0376 +1.896 0.8015 -0.3688 0.3894 0.0875 +1.919 0.8112 -0.4631 0.3894 0.1372 +1.943 0.8216 -0.5544 0.3894 0.1865 +1.97 0.8327 -0.6415 0.3894 0.2354 +1.997 0.8444 -0.7237 0.3894 0.2837 +2.026 0.8565 -0.8001 0.3894 0.3312 +2.056 0.8691 -0.8699 0.3894 0.378 +2.086 0.882 -0.9323 0.3894 0.4238 +2.117 0.8951 -0.9868 0.3894 0.4685 +2.149 0.9085 -1.033 0.3894 0.5121 +2.181 0.922 -1.07 0.3894 0.5544 +2.213 0.9356 -1.097 0.3894 0.5953 +2.245 0.9492 -1.115 0.3894 0.6347 +2.277 0.9628 -1.123 0.3894 0.6725 +2.309 0.9763 -1.12 0.3894 0.7087 +2.341 0.9898 -1.108 0.3894 0.743 +2.373 1.003 -1.085 0.3894 0.7756 +2.404 1.016 -1.053 0.3894 0.8061 +2.434 1.029 -1.01 0.3894 0.8347 +2.465 1.042 -0.959 0.3894 0.8612 +2.494 1.055 -0.8987 0.3894 0.8855 +2.524 1.067 -0.8302 0.3894 0.9076 +2.553 1.079 -0.754 0.3894 0.9275 +2.581 1.091 -0.6708 0.3894 0.945 +2.609 1.103 -0.5814 0.3894 0.9602 +2.637 1.115 -0.4866 0.3894 0.9729 +2.664 1.126 -0.3873 0.3894 0.9833 +2.691 1.138 -0.2844 0.3894 0.9911 +2.718 1.149 -0.1788 0.3894 0.9965 +2.745 1.161 -0.07159 0.3894 0.9994 +2.701 1.305 0 0.435 1 +2.725 1.316 0.1085 0.435 0.9988 +2.749 1.328 0.2159 0.435 0.995 +2.773 1.34 0.3214 0.435 0.9888 +2.797 1.351 0.4239 0.435 0.9801 +2.822 1.363 0.5225 0.435 0.9689 +2.847 1.375 0.6163 0.435 0.9553 +2.873 1.388 0.7045 0.435 0.9394 +2.899 1.4 0.7862 0.435 0.9211 +2.926 1.413 0.8606 0.435 0.9004 +2.953 1.427 0.9272 0.435 0.8776 +2.981 1.44 0.9854 0.435 0.8525 +3.01 1.454 1.035 0.435 0.8253 +3.039 1.468 1.074 0.435 0.7961 +3.069 1.482 1.104 0.435 0.7648 +3.099 1.497 1.124 0.435 0.7317 +3.13 1.512 1.134 0.435 0.6967 +3.162 1.527 1.134 0.435 0.66 +3.193 1.543 1.124 0.435 0.6216 +3.225 1.558 1.104 0.435 0.5817 +3.257 1.573 1.074 0.435 0.5403 +3.289 1.589 1.035 0.435 0.4976 +3.321 1.604 0.987 0.435 0.4536 +3.353 1.62 0.9306 0.435 0.4085 +3.384 1.635 0.8664 0.435 0.3624 +3.414 1.649 0.7951 0.435 0.3153 +3.444 1.663 0.7175 0.435 0.2675 +3.472 1.677 0.6343 0.435 0.219 +3.499 1.69 0.5464 0.435 0.17 +3.525 1.703 0.4547 0.435 0.1205 +3.549 1.714 0.3601 0.435 0.07074 +3.571 1.725 0.2636 0.435 0.02079 +3.59 1.734 0.1661 0.435 -0.0292 +3.608 1.743 0.06864 0.435 -0.07912 +3.623 1.75 -0.02785 0.435 -0.1288 +3.636 1.756 -0.1224 0.435 -0.1782 +3.645 1.761 -0.2141 0.435 -0.2272 +3.652 1.764 -0.302 0.435 -0.2756 +3.655 1.766 -0.3853 0.435 -0.3233 +3.655 1.766 -0.4632 0.435 -0.3702 +3.652 1.764 -0.5349 0.435 -0.4161 +3.645 1.761 -0.5997 0.435 -0.4611 +3.634 1.755 -0.657 0.435 -0.5048 +3.62 1.749 -0.7064 0.435 -0.5474 +3.602 1.74 -0.7472 0.435 -0.5885 +3.581 1.73 -0.7793 0.435 -0.6282 +3.556 1.718 -0.8023 0.435 -0.6663 +3.527 1.704 -0.816 0.435 -0.7027 +3.494 1.688 -0.8204 0.435 -0.7374 +3.459 1.671 -0.8154 0.435 -0.7702 +3.419 1.652 -0.8012 0.435 -0.8011 +3.377 1.631 -0.7781 0.435 -0.8301 +3.331 1.609 -0.7462 0.435 -0.8569 +3.283 1.586 -0.706 0.435 -0.8816 +3.232 1.561 -0.6579 0.435 -0.9041 +3.178 1.535 -0.6026 0.435 -0.9243 +3.122 1.508 -0.5406 0.435 -0.9422 +3.064 1.48 -0.4727 0.435 -0.9578 +3.005 1.451 -0.3995 0.435 -0.971 +2.944 1.422 -0.322 0.435 -0.9817 +2.881 1.392 -0.2409 0.435 -0.99 +2.818 1.361 -0.1572 0.435 -0.9958 +2.755 1.331 -0.07172 0.435 -0.9991 +2.691 1.3 0.01451 0.435 -1 +2.627 1.269 0.1006 0.435 -0.9983 +2.563 1.238 0.1856 0.435 -0.9941 +2.5 1.208 0.2685 0.435 -0.9875 +2.438 1.178 0.3485 0.435 -0.9784 +2.378 1.149 0.4246 0.435 -0.9668 +2.319 1.12 0.4961 0.435 -0.9528 +2.261 1.092 0.5622 0.435 -0.9365 +2.206 1.066 0.622 0.435 -0.9178 +2.153 1.04 0.6749 0.435 -0.8968 +2.103 1.016 0.7204 0.435 -0.8735 +2.056 0.993 0.7578 0.435 -0.8481 +2.011 0.9715 0.7868 0.435 -0.8206 +1.97 0.9515 0.807 0.435 -0.791 +1.932 0.9331 0.8181 0.435 -0.7594 +1.897 0.9164 0.8199 0.435 -0.7259 +1.866 0.9013 0.8124 0.435 -0.6907 +1.838 0.888 0.7956 0.435 -0.6536 +1.814 0.8764 0.7695 0.435 -0.615 +1.794 0.8667 0.7345 0.435 -0.5748 +1.778 0.8586 0.6907 0.435 -0.5332 +1.765 0.8524 0.6386 0.435 -0.4903 +1.755 0.8479 0.5787 0.435 -0.4461 +1.75 0.8452 0.5115 0.435 -0.4008 +1.747 0.8441 0.4376 0.435 -0.3545 +1.749 0.8447 0.3579 0.435 -0.3073 +1.753 0.8468 0.2729 0.435 -0.2594 +1.761 0.8504 0.1836 0.435 -0.2108 +1.771 0.8555 0.09088 0.435 -0.1617 +1.784 0.8619 -0.004427 0.435 -0.1122 +1.8 0.8696 -0.1014 0.435 -0.06235 +1.819 0.8785 -0.1989 0.435 -0.01239 +1.839 0.8885 -0.2962 0.435 0.0376 +1.862 0.8994 -0.3922 0.435 0.0875 +1.886 0.9113 -0.4859 0.435 0.1372 +1.913 0.9239 -0.5764 0.435 0.1865 +1.94 0.9372 -0.6628 0.435 0.2354 +1.969 0.9511 -0.7443 0.435 0.2837 +1.999 0.9655 -0.8198 0.435 0.3312 +2.029 0.9803 -0.8888 0.435 0.378 +2.061 0.9953 -0.9504 0.435 0.4238 +2.092 1.011 -1.004 0.435 0.4685 +2.124 1.026 -1.049 0.435 0.5121 +2.156 1.042 -1.085 0.435 0.5544 +2.188 1.057 -1.112 0.435 0.5953 +2.22 1.072 -1.129 0.435 0.6347 +2.252 1.088 -1.135 0.435 0.6725 +2.283 1.103 -1.132 0.435 0.7087 +2.314 1.118 -1.119 0.435 0.743 +2.344 1.132 -1.095 0.435 0.7756 +2.374 1.147 -1.062 0.435 0.8061 +2.403 1.161 -1.019 0.435 0.8347 +2.431 1.174 -0.9668 0.435 0.8612 +2.459 1.188 -0.9057 0.435 0.8855 +2.486 1.201 -0.8364 0.435 0.9076 +2.512 1.214 -0.7595 0.435 0.9275 +2.538 1.226 -0.6755 0.435 0.945 +2.564 1.238 -0.5854 0.435 0.9602 +2.589 1.251 -0.4899 0.435 0.9729 +2.613 1.262 -0.3898 0.435 0.9833 +2.638 1.274 -0.2862 0.435 0.9911 +2.662 1.286 -0.18 0.435 0.9965 +2.686 1.297 -0.07205 0.435 0.9994 +2.633 1.438 0 0.4794 1 +2.654 1.45 0.1091 0.4794 0.9988 +2.675 1.461 0.2172 0.4794 0.995 +2.696 1.473 0.3233 0.4794 0.9888 +2.717 1.484 0.4265 0.4794 0.9801 +2.739 1.496 0.5257 0.4794 0.9689 +2.761 1.509 0.6202 0.4794 0.9553 +2.784 1.521 0.709 0.4794 0.9394 +2.808 1.534 0.7914 0.4794 0.9211 +2.833 1.547 0.8666 0.4794 0.9004 +2.858 1.561 0.9339 0.4794 0.8776 +2.884 1.575 0.9928 0.4794 0.8525 +2.911 1.59 1.043 0.4794 0.8253 +2.938 1.605 1.083 0.4794 0.7961 +2.967 1.621 1.114 0.4794 0.7648 +2.996 1.637 1.135 0.4794 0.7317 +3.026 1.653 1.146 0.4794 0.6967 +3.056 1.67 1.147 0.4794 0.66 +3.087 1.687 1.137 0.4794 0.6216 +3.119 1.704 1.118 0.4794 0.5817 +3.151 1.721 1.089 0.4794 0.5403 +3.183 1.739 1.051 0.4794 0.4976 +3.215 1.756 1.004 0.4794 0.4536 +3.247 1.774 0.9483 0.4794 0.4085 +3.279 1.791 0.8851 0.4794 0.3624 +3.31 1.808 0.8146 0.4794 0.3153 +3.34 1.825 0.7379 0.4794 0.2675 +3.37 1.841 0.6555 0.4794 0.219 +3.398 1.856 0.5684 0.4794 0.17 +3.425 1.871 0.4774 0.4794 0.1205 +3.45 1.885 0.3835 0.4794 0.07074 +3.474 1.898 0.2876 0.4794 0.02079 +3.495 1.91 0.1907 0.4794 -0.0292 +3.515 1.92 0.09379 0.4794 -0.07912 +3.531 1.929 -0.002255 0.4794 -0.1288 +3.546 1.937 -0.09644 0.4794 -0.1782 +3.557 1.943 -0.1878 0.4794 -0.2272 +3.565 1.948 -0.2755 0.4794 -0.2756 +3.57 1.95 -0.3587 0.4794 -0.3233 +3.572 1.951 -0.4366 0.4794 -0.3702 +3.57 1.95 -0.5083 0.4794 -0.4161 +3.565 1.948 -0.5733 0.4794 -0.4611 +3.556 1.943 -0.6309 0.4794 -0.5048 +3.543 1.936 -0.6806 0.4794 -0.5474 +3.527 1.927 -0.722 0.4794 -0.5885 +3.507 1.916 -0.7546 0.4794 -0.6282 +3.483 1.903 -0.7783 0.4794 -0.6663 +3.455 1.887 -0.7928 0.4794 -0.7027 +3.423 1.87 -0.7981 0.4794 -0.7374 +3.388 1.851 -0.7941 0.4794 -0.7702 +3.35 1.83 -0.781 0.4794 -0.8011 +3.308 1.807 -0.7591 0.4794 -0.8301 +3.263 1.783 -0.7285 0.4794 -0.8569 +3.215 1.756 -0.6896 0.4794 -0.8816 +3.164 1.728 -0.643 0.4794 -0.9041 +3.11 1.699 -0.5892 0.4794 -0.9243 +3.055 1.669 -0.5288 0.4794 -0.9422 +2.997 1.637 -0.4624 0.4794 -0.9578 +2.937 1.605 -0.391 0.4794 -0.971 +2.876 1.571 -0.3151 0.4794 -0.9817 +2.813 1.537 -0.2358 0.4794 -0.99 +2.75 1.502 -0.1539 0.4794 -0.9958 +2.686 1.467 -0.07022 0.4794 -0.9991 +2.622 1.432 0.01421 0.4794 -1 +2.558 1.397 0.09848 0.4794 -0.9983 +2.494 1.363 0.1817 0.4794 -0.9941 +2.431 1.328 0.2628 0.4794 -0.9875 +2.369 1.294 0.3411 0.4794 -0.9784 +2.308 1.261 0.4155 0.4794 -0.9668 +2.249 1.229 0.4854 0.4794 -0.9528 +2.192 1.197 0.5498 0.4794 -0.9365 +2.137 1.167 0.6081 0.4794 -0.9178 +2.084 1.139 0.6595 0.4794 -0.8968 +2.034 1.111 0.7036 0.4794 -0.8735 +1.987 1.086 0.7397 0.4794 -0.8481 +1.943 1.062 0.7674 0.4794 -0.8206 +1.902 1.039 0.7865 0.4794 -0.791 +1.865 1.019 0.7965 0.4794 -0.7594 +1.831 1 0.7973 0.4794 -0.7259 +1.801 0.9839 0.789 0.4794 -0.6907 +1.774 0.9694 0.7714 0.4794 -0.6536 +1.752 0.9569 0.7447 0.4794 -0.615 +1.733 0.9466 0.709 0.4794 -0.5748 +1.718 0.9383 0.6648 0.4794 -0.5332 +1.706 0.932 0.6124 0.4794 -0.4903 +1.698 0.9278 0.5522 0.4794 -0.4461 +1.694 0.9256 0.4849 0.4794 -0.4008 +1.694 0.9253 0.411 0.4794 -0.3545 +1.697 0.9269 0.3313 0.4794 -0.3073 +1.703 0.9302 0.2465 0.4794 -0.2594 +1.712 0.9353 0.1575 0.4794 -0.2108 +1.724 0.942 0.06503 0.4794 -0.1617 +1.739 0.9502 -0.02988 0.4794 -0.1122 +1.757 0.9599 -0.1263 0.4794 -0.06235 +1.777 0.9709 -0.2234 0.4794 -0.01239 +1.799 0.983 -0.32 0.4794 0.0376 +1.824 0.9962 -0.4154 0.4794 0.0875 +1.849 1.01 -0.5084 0.4794 0.1372 +1.877 1.025 -0.5981 0.4794 0.1865 +1.906 1.041 -0.6838 0.4794 0.2354 +1.935 1.057 -0.7644 0.4794 0.2837 +1.966 1.074 -0.8391 0.4794 0.3312 +1.997 1.091 -0.9072 0.4794 0.378 +2.029 1.109 -0.9679 0.4794 0.4238 +2.061 1.126 -1.021 0.4794 0.4685 +2.093 1.144 -1.065 0.4794 0.5121 +2.125 1.161 -1.1 0.4794 0.5544 +2.157 1.178 -1.126 0.4794 0.5953 +2.189 1.196 -1.142 0.4794 0.6347 +2.22 1.213 -1.148 0.4794 0.6725 +2.25 1.229 -1.143 0.4794 0.7087 +2.28 1.245 -1.129 0.4794 0.743 +2.309 1.261 -1.105 0.4794 0.7756 +2.337 1.277 -1.071 0.4794 0.8061 +2.364 1.292 -1.027 0.4794 0.8347 +2.391 1.306 -0.974 0.4794 0.8612 +2.416 1.32 -0.9122 0.4794 0.8855 +2.441 1.334 -0.8421 0.4794 0.9076 +2.465 1.347 -0.7645 0.4794 0.9275 +2.489 1.36 -0.6798 0.4794 0.945 +2.512 1.372 -0.589 0.4794 0.9602 +2.534 1.384 -0.4928 0.4794 0.9729 +2.556 1.396 -0.3922 0.4794 0.9833 +2.577 1.408 -0.2879 0.4794 0.9911 +2.598 1.419 -0.181 0.4794 0.9965 +2.619 1.431 -0.07247 0.4794 0.9994 +2.558 1.568 0 0.5227 1 +2.575 1.579 0.1097 0.5227 0.9988 +2.593 1.59 0.2183 0.5227 0.995 +2.612 1.601 0.325 0.5227 0.9888 +2.63 1.613 0.4287 0.5227 0.9801 +2.65 1.624 0.5286 0.5227 0.9689 +2.669 1.637 0.6237 0.5227 0.9553 +2.69 1.649 0.7131 0.5227 0.9394 +2.711 1.662 0.7961 0.5227 0.9211 +2.733 1.676 0.872 0.5227 0.9004 +2.756 1.69 0.94 0.5227 0.8776 +2.78 1.705 0.9997 0.5227 0.8525 +2.805 1.72 1.05 0.5227 0.8253 +2.831 1.736 1.092 0.5227 0.7961 +2.858 1.752 1.123 0.5227 0.7648 +2.886 1.769 1.145 0.5227 0.7317 +2.915 1.787 1.157 0.5227 0.6967 +2.944 1.805 1.158 0.5227 0.66 +2.975 1.824 1.15 0.5227 0.6216 +3.006 1.843 1.132 0.5227 0.5817 +3.037 1.862 1.104 0.5227 0.5403 +3.069 1.882 1.066 0.5227 0.4976 +3.102 1.902 1.02 0.5227 0.4536 +3.134 1.921 0.9655 0.5227 0.4085 +3.166 1.941 0.9032 0.5227 0.3624 +3.198 1.961 0.8337 0.5227 0.3153 +3.229 1.98 0.7578 0.5227 0.2675 +3.259 1.998 0.6763 0.5227 0.219 +3.289 2.016 0.59 0.5227 0.17 +3.317 2.033 0.4998 0.5227 0.1205 +3.343 2.05 0.4067 0.5227 0.07074 +3.368 2.065 0.3115 0.5227 0.02079 +3.391 2.079 0.2153 0.5227 -0.0292 +3.412 2.092 0.1189 0.5227 -0.07912 +3.43 2.103 0.02334 0.5227 -0.1288 +3.446 2.113 -0.0704 0.5227 -0.1782 +3.459 2.121 -0.1614 0.5227 -0.2272 +3.469 2.127 -0.2489 0.5227 -0.2756 +3.476 2.131 -0.3319 0.5227 -0.3233 +3.479 2.133 -0.4097 0.5227 -0.3702 +3.479 2.133 -0.4814 0.5227 -0.4161 +3.475 2.131 -0.5466 0.5227 -0.4611 +3.468 2.126 -0.6044 0.5227 -0.5048 +3.456 2.119 -0.6545 0.5227 -0.5474 +3.441 2.11 -0.6963 0.5227 -0.5885 +3.422 2.098 -0.7295 0.5227 -0.6282 +3.399 2.084 -0.7539 0.5227 -0.6663 +3.373 2.068 -0.7692 0.5227 -0.7027 +3.342 2.049 -0.7753 0.5227 -0.7374 +3.308 2.028 -0.7724 0.5227 -0.7702 +3.271 2.005 -0.7604 0.5227 -0.8011 +3.229 1.98 -0.7396 0.5227 -0.8301 +3.185 1.953 -0.7103 0.5227 -0.8569 +3.138 1.924 -0.6728 0.5227 -0.8816 +3.087 1.893 -0.6277 0.5227 -0.9041 +3.034 1.86 -0.5754 0.5227 -0.9243 +2.979 1.826 -0.5166 0.5227 -0.9422 +2.921 1.791 -0.4519 0.5227 -0.9578 +2.861 1.754 -0.3822 0.5227 -0.971 +2.8 1.717 -0.3081 0.5227 -0.9817 +2.738 1.679 -0.2306 0.5227 -0.99 +2.675 1.64 -0.1505 0.5227 -0.9958 +2.611 1.601 -0.06868 0.5227 -0.9991 +2.547 1.561 0.0139 0.5227 -1 +2.483 1.522 0.09632 0.5227 -0.9983 +2.419 1.483 0.1777 0.5227 -0.9941 +2.356 1.444 0.257 0.5227 -0.9875 +2.294 1.407 0.3335 0.5227 -0.9784 +2.234 1.369 0.4062 0.5227 -0.9668 +2.175 1.333 0.4743 0.5227 -0.9528 +2.118 1.298 0.537 0.5227 -0.9365 +2.063 1.265 0.5937 0.5227 -0.9178 +2.011 1.233 0.6437 0.5227 -0.8968 +1.961 1.202 0.6863 0.5227 -0.8735 +1.915 1.174 0.7211 0.5227 -0.8481 +1.871 1.147 0.7475 0.5227 -0.8206 +1.831 1.123 0.7654 0.5227 -0.791 +1.795 1.101 0.7744 0.5227 -0.7594 +1.762 1.08 0.7743 0.5227 -0.7259 +1.733 1.062 0.765 0.5227 -0.6907 +1.708 1.047 0.7467 0.5227 -0.6536 +1.686 1.034 0.7193 0.5227 -0.615 +1.668 1.023 0.6832 0.5227 -0.5748 +1.655 1.014 0.6385 0.5227 -0.5332 +1.645 1.008 0.5858 0.5227 -0.4903 +1.638 1.005 0.5255 0.5227 -0.4461 +1.636 1.003 0.458 0.5227 -0.4008 +1.637 1.004 0.3841 0.5227 -0.3545 +1.641 1.006 0.3045 0.5227 -0.3073 +1.649 1.011 0.2199 0.5227 -0.2594 +1.66 1.018 0.1312 0.5227 -0.2108 +1.674 1.026 0.03913 0.5227 -0.1617 +1.691 1.037 -0.05532 0.5227 -0.1122 +1.71 1.048 -0.1512 0.5227 -0.06235 +1.731 1.062 -0.2477 0.5227 -0.01239 +1.755 1.076 -0.3437 0.5227 0.0376 +1.781 1.092 -0.4383 0.5227 0.0875 +1.808 1.108 -0.5305 0.5227 0.1372 +1.836 1.126 -0.6195 0.5227 0.1865 +1.866 1.144 -0.7043 0.5227 0.2354 +1.897 1.163 -0.784 0.5227 0.2837 +1.928 1.182 -0.8578 0.5227 0.3312 +1.96 1.202 -0.925 0.5227 0.378 +1.992 1.221 -0.9848 0.5227 0.4238 +2.024 1.241 -1.037 0.5227 0.4685 +2.056 1.261 -1.08 0.5227 0.5121 +2.088 1.28 -1.114 0.5227 0.5544 +2.12 1.3 -1.139 0.5227 0.5953 +2.151 1.319 -1.154 0.5227 0.6347 +2.181 1.337 -1.159 0.5227 0.6725 +2.21 1.355 -1.154 0.5227 0.7087 +2.239 1.373 -1.139 0.5227 0.743 +2.266 1.389 -1.114 0.5227 0.7756 +2.293 1.406 -1.079 0.5227 0.8061 +2.319 1.422 -1.034 0.5227 0.8347 +2.343 1.437 -0.9806 0.5227 0.8612 +2.367 1.451 -0.9181 0.5227 0.8855 +2.39 1.465 -0.8473 0.5227 0.9076 +2.411 1.478 -0.769 0.5227 0.9275 +2.432 1.491 -0.6837 0.5227 0.945 +2.453 1.504 -0.5923 0.5227 0.9602 +2.472 1.516 -0.4955 0.5227 0.9729 +2.491 1.527 -0.3942 0.5227 0.9833 +2.51 1.539 -0.2894 0.5227 0.9911 +2.528 1.55 -0.1819 0.5227 0.9965 +2.546 1.561 -0.07284 0.5227 0.9994 +2.476 1.694 0 0.5646 1 +2.491 1.704 0.1101 0.5646 0.9988 +2.506 1.715 0.2193 0.5646 0.995 +2.522 1.725 0.3265 0.5646 0.9888 +2.538 1.736 0.4307 0.5646 0.9801 +2.554 1.747 0.5311 0.5646 0.9689 +2.571 1.759 0.6268 0.5646 0.9553 +2.589 1.771 0.7168 0.5646 0.9394 +2.608 1.784 0.8004 0.5646 0.9211 +2.628 1.798 0.8769 0.5646 0.9004 +2.649 1.812 0.9456 0.5646 0.8776 +2.671 1.827 1.006 0.5646 0.8525 +2.694 1.843 1.057 0.5646 0.8253 +2.718 1.86 1.099 0.5646 0.7961 +2.744 1.877 1.132 0.5646 0.7648 +2.77 1.895 1.154 0.5646 0.7317 +2.798 1.914 1.167 0.5646 0.6967 +2.827 1.934 1.169 0.5646 0.66 +2.856 1.954 1.162 0.5646 0.6216 +2.887 1.975 1.144 0.5646 0.5817 +2.918 1.996 1.117 0.5646 0.5403 +2.949 2.018 1.081 0.5646 0.4976 +2.982 2.04 1.036 0.5646 0.4536 +3.014 2.062 0.9821 0.5646 0.4085 +3.046 2.084 0.9207 0.5646 0.3624 +3.078 2.106 0.8522 0.5646 0.3153 +3.11 2.128 0.7772 0.5646 0.2675 +3.141 2.149 0.6966 0.5646 0.219 +3.171 2.17 0.6112 0.5646 0.17 +3.2 2.189 0.5219 0.5646 0.1205 +3.228 2.208 0.4296 0.5646 0.07074 +3.254 2.226 0.3352 0.5646 0.02079 +3.278 2.243 0.2396 0.5646 -0.0292 +3.3 2.258 0.1439 0.5646 -0.07912 +3.32 2.271 0.04893 0.5646 -0.1288 +3.337 2.283 -0.04433 0.5646 -0.1782 +3.352 2.293 -0.135 0.5646 -0.2272 +3.363 2.301 -0.2221 0.5646 -0.2756 +3.371 2.306 -0.3049 0.5646 -0.3233 +3.376 2.31 -0.3825 0.5646 -0.3702 +3.378 2.311 -0.4543 0.5646 -0.4161 +3.375 2.309 -0.5195 0.5646 -0.4611 +3.369 2.305 -0.5776 0.5646 -0.5048 +3.359 2.298 -0.6279 0.5646 -0.5474 +3.346 2.289 -0.6702 0.5646 -0.5885 +3.328 2.277 -0.7039 0.5646 -0.6282 +3.306 2.262 -0.7289 0.5646 -0.6663 +3.281 2.245 -0.745 0.5646 -0.7027 +3.252 2.225 -0.7521 0.5646 -0.7374 +3.218 2.202 -0.7501 0.5646 -0.7702 +3.182 2.177 -0.7392 0.5646 -0.8011 +3.142 2.149 -0.7197 0.5646 -0.8301 +3.098 2.119 -0.6917 0.5646 -0.8569 +3.051 2.087 -0.6556 0.5646 -0.8816 +3.001 2.053 -0.612 0.5646 -0.9041 +2.949 2.018 -0.5612 0.5646 -0.9243 +2.894 1.98 -0.5041 0.5646 -0.9422 +2.837 1.941 -0.4411 0.5646 -0.9578 +2.778 1.901 -0.3731 0.5646 -0.971 +2.717 1.859 -0.3009 0.5646 -0.9817 +2.655 1.817 -0.2252 0.5646 -0.99 +2.593 1.774 -0.147 0.5646 -0.9958 +2.529 1.73 -0.06709 0.5646 -0.9991 +2.465 1.687 0.01358 0.5646 -1 +2.402 1.643 0.09409 0.5646 -0.9983 +2.338 1.6 0.1735 0.5646 -0.9941 +2.276 1.557 0.251 0.5646 -0.9875 +2.214 1.515 0.3256 0.5646 -0.9784 +2.154 1.474 0.3965 0.5646 -0.9668 +2.096 1.434 0.4629 0.5646 -0.9528 +2.039 1.395 0.524 0.5646 -0.9365 +1.985 1.358 0.579 0.5646 -0.9178 +1.934 1.323 0.6274 0.5646 -0.8968 +1.885 1.289 0.6686 0.5646 -0.8735 +1.839 1.258 0.702 0.5646 -0.8481 +1.797 1.229 0.7272 0.5646 -0.8206 +1.757 1.202 0.7439 0.5646 -0.791 +1.722 1.178 0.7518 0.5646 -0.7594 +1.69 1.156 0.7507 0.5646 -0.7259 +1.662 1.137 0.7406 0.5646 -0.6907 +1.638 1.121 0.7215 0.5646 -0.6536 +1.618 1.107 0.6935 0.5646 -0.615 +1.601 1.096 0.6569 0.5646 -0.5748 +1.589 1.087 0.6119 0.5646 -0.5332 +1.58 1.081 0.5589 0.5646 -0.4903 +1.576 1.078 0.4983 0.5646 -0.4461 +1.575 1.077 0.4309 0.5646 -0.4008 +1.577 1.079 0.357 0.5646 -0.3545 +1.583 1.083 0.2776 0.5646 -0.3073 +1.592 1.089 0.1932 0.5646 -0.2594 +1.605 1.098 0.1048 0.5646 -0.2108 +1.62 1.108 0.01321 0.5646 -0.1617 +1.638 1.121 -0.08072 0.5646 -0.1122 +1.659 1.135 -0.176 0.5646 -0.06235 +1.682 1.15 -0.2718 0.5646 -0.01239 +1.706 1.167 -0.3671 0.5646 0.0376 +1.733 1.186 -0.4609 0.5646 0.0875 +1.761 1.205 -0.5523 0.5646 0.1372 +1.791 1.225 -0.6404 0.5646 0.1865 +1.821 1.246 -0.7243 0.5646 0.2354 +1.853 1.267 -0.8031 0.5646 0.2837 +1.885 1.289 -0.876 0.5646 0.3312 +1.917 1.311 -0.9422 0.5646 0.378 +1.949 1.333 -1.001 0.5646 0.4238 +1.981 1.356 -1.052 0.5646 0.4685 +2.013 1.377 -1.094 0.5646 0.5121 +2.045 1.399 -1.128 0.5646 0.5544 +2.076 1.42 -1.151 0.5646 0.5953 +2.106 1.441 -1.165 0.5646 0.6347 +2.135 1.461 -1.17 0.5646 0.6725 +2.164 1.48 -1.164 0.5646 0.7087 +2.191 1.499 -1.148 0.5646 0.743 +2.217 1.517 -1.122 0.5646 0.7756 +2.242 1.534 -1.086 0.5646 0.8061 +2.266 1.55 -1.041 0.5646 0.8347 +2.289 1.566 -0.9866 0.5646 0.8612 +2.31 1.581 -0.9234 0.5646 0.8855 +2.331 1.595 -0.852 0.5646 0.9076 +2.35 1.608 -0.773 0.5646 0.9275 +2.369 1.621 -0.6872 0.5646 0.945 +2.387 1.633 -0.5952 0.5646 0.9602 +2.403 1.644 -0.4979 0.5646 0.9729 +2.42 1.655 -0.3961 0.5646 0.9833 +2.436 1.666 -0.2907 0.5646 0.9911 +2.451 1.677 -0.1828 0.5646 0.9965 +2.466 1.687 -0.07316 0.5646 0.9994 +2.388 1.816 0 0.6052 1 +2.401 1.825 0.1106 0.6052 0.9988 +2.413 1.834 0.2201 0.6052 0.995 +2.426 1.844 0.3278 0.6052 0.9888 +2.439 1.854 0.4325 0.6052 0.9801 +2.453 1.865 0.5333 0.6052 0.9689 +2.468 1.876 0.6294 0.6052 0.9553 +2.483 1.888 0.72 0.6052 0.9394 +2.5 1.9 0.8041 0.6052 0.9211 +2.517 1.914 0.8812 0.6052 0.9004 +2.536 1.928 0.9505 0.6052 0.8776 +2.556 1.943 1.011 0.6052 0.8525 +2.577 1.959 1.064 0.6052 0.8253 +2.6 1.976 1.106 0.6052 0.7961 +2.624 1.995 1.14 0.6052 0.7648 +2.649 2.014 1.163 0.6052 0.7317 +2.675 2.034 1.176 0.6052 0.6967 +2.703 2.055 1.18 0.6052 0.66 +2.732 2.077 1.173 0.6052 0.6216 +2.761 2.099 1.156 0.6052 0.5817 +2.792 2.122 1.13 0.6052 0.5403 +2.823 2.146 1.095 0.6052 0.4976 +2.855 2.17 1.051 0.6052 0.4536 +2.887 2.195 0.9981 0.6052 0.4085 +2.92 2.22 0.9377 0.6052 0.3624 +2.952 2.244 0.8702 0.6052 0.3153 +2.984 2.269 0.7962 0.6052 0.2675 +3.016 2.293 0.7166 0.6052 0.219 +3.047 2.316 0.6321 0.6052 0.17 +3.076 2.339 0.5437 0.6052 0.1205 +3.105 2.36 0.4522 0.6052 0.07074 +3.132 2.381 0.3586 0.6052 0.02079 +3.157 2.4 0.2639 0.6052 -0.0292 +3.18 2.418 0.1688 0.6052 -0.07912 +3.201 2.434 0.07448 0.6052 -0.1288 +3.22 2.448 -0.01822 0.6052 -0.1782 +3.235 2.46 -0.1084 0.6052 -0.2272 +3.248 2.469 -0.1952 0.6052 -0.2756 +3.258 2.477 -0.2777 0.6052 -0.3233 +3.264 2.481 -0.3551 0.6052 -0.3702 +3.267 2.483 -0.4268 0.6052 -0.4161 +3.266 2.483 -0.4921 0.6052 -0.4611 +3.261 2.479 -0.5503 0.6052 -0.5048 +3.253 2.473 -0.601 0.6052 -0.5474 +3.24 2.463 -0.6436 0.6052 -0.5885 +3.224 2.451 -0.6779 0.6052 -0.6282 +3.203 2.435 -0.7036 0.6052 -0.6663 +3.179 2.417 -0.7204 0.6052 -0.7027 +3.151 2.395 -0.7283 0.6052 -0.7374 +3.119 2.371 -0.7274 0.6052 -0.7702 +3.083 2.344 -0.7176 0.6052 -0.8011 +3.044 2.314 -0.6993 0.6052 -0.8301 +3.002 2.282 -0.6726 0.6052 -0.8569 +2.956 2.247 -0.638 0.6052 -0.8816 +2.907 2.21 -0.5958 0.6052 -0.9041 +2.856 2.171 -0.5467 0.6052 -0.9243 +2.801 2.13 -0.4913 0.6052 -0.9422 +2.745 2.087 -0.4301 0.6052 -0.9578 +2.687 2.043 -0.3639 0.6052 -0.971 +2.627 1.997 -0.2935 0.6052 -0.9817 +2.566 1.95 -0.2197 0.6052 -0.99 +2.504 1.903 -0.1434 0.6052 -0.9958 +2.441 1.855 -0.06546 0.6052 -0.9991 +2.378 1.807 0.01325 0.6052 -1 +2.315 1.76 0.09181 0.6052 -0.9983 +2.252 1.712 0.1693 0.6052 -0.9941 +2.19 1.665 0.2449 0.6052 -0.9875 +2.129 1.619 0.3176 0.6052 -0.9784 +2.07 1.574 0.3867 0.6052 -0.9668 +2.012 1.53 0.4512 0.6052 -0.9528 +1.957 1.487 0.5106 0.6052 -0.9365 +1.903 1.447 0.564 0.6052 -0.9178 +1.853 1.408 0.6108 0.6052 -0.8968 +1.805 1.372 0.6505 0.6052 -0.8735 +1.76 1.338 0.6825 0.6052 -0.8481 +1.719 1.307 0.7064 0.6052 -0.8206 +1.681 1.278 0.7219 0.6052 -0.791 +1.646 1.251 0.7287 0.6052 -0.7594 +1.616 1.228 0.7267 0.6052 -0.7259 +1.589 1.208 0.7157 0.6052 -0.6907 +1.566 1.19 0.6959 0.6052 -0.6536 +1.547 1.176 0.6673 0.6052 -0.615 +1.532 1.164 0.6302 0.6052 -0.5748 +1.521 1.156 0.5848 0.6052 -0.5332 +1.513 1.151 0.5316 0.6052 -0.4903 +1.51 1.148 0.4709 0.6052 -0.4461 +1.51 1.148 0.4034 0.6052 -0.4008 +1.514 1.151 0.3297 0.6052 -0.3545 +1.522 1.157 0.2504 0.6052 -0.3073 +1.532 1.165 0.1664 0.6052 -0.2594 +1.546 1.175 0.07841 0.6052 -0.2108 +1.563 1.188 -0.01271 0.6052 -0.1617 +1.582 1.203 -0.1061 0.6052 -0.1122 +1.604 1.219 -0.2007 0.6052 -0.06235 +1.628 1.237 -0.2958 0.6052 -0.01239 +1.653 1.257 -0.3903 0.6052 0.0376 +1.681 1.278 -0.4833 0.6052 0.0875 +1.71 1.3 -0.5738 0.6052 0.1372 +1.74 1.323 -0.661 0.6052 0.1865 +1.771 1.347 -0.7439 0.6052 0.2354 +1.803 1.371 -0.8217 0.6052 0.2837 +1.835 1.395 -0.8936 0.6052 0.3312 +1.868 1.42 -0.9589 0.6052 0.378 +1.9 1.444 -1.017 0.6052 0.4238 +1.932 1.469 -1.067 0.6052 0.4685 +1.964 1.493 -1.108 0.6052 0.5121 +1.995 1.517 -1.14 0.6052 0.5544 +2.025 1.54 -1.163 0.6052 0.5953 +2.055 1.562 -1.176 0.6052 0.6347 +2.083 1.583 -1.18 0.6052 0.6725 +2.11 1.604 -1.173 0.6052 0.7087 +2.136 1.624 -1.156 0.6052 0.743 +2.161 1.643 -1.129 0.6052 0.7756 +2.184 1.661 -1.093 0.6052 0.8061 +2.206 1.677 -1.047 0.6052 0.8347 +2.227 1.693 -0.9919 0.6052 0.8612 +2.247 1.708 -0.9281 0.6052 0.8855 +2.265 1.722 -0.8561 0.6052 0.9076 +2.282 1.735 -0.7766 0.6052 0.9275 +2.299 1.747 -0.6902 0.6052 0.945 +2.314 1.759 -0.5977 0.6052 0.9602 +2.328 1.77 -0.4999 0.6052 0.9729 +2.342 1.78 -0.3976 0.6052 0.9833 +2.355 1.79 -0.2919 0.6052 0.9911 +2.368 1.8 -0.1835 0.6052 0.9965 +2.38 1.809 -0.07344 0.6052 0.9994 +2.295 1.933 0 0.6442 1 +2.304 1.941 0.1109 0.6442 0.9988 +2.314 1.949 0.2209 0.6442 0.995 +2.324 1.958 0.3288 0.6442 0.9888 +2.335 1.967 0.4339 0.6442 0.9801 +2.347 1.976 0.5352 0.6442 0.9689 +2.359 1.987 0.6317 0.6442 0.9553 +2.372 1.998 0.7227 0.6442 0.9394 +2.386 2.01 0.8074 0.6442 0.9211 +2.402 2.023 0.885 0.6442 0.9004 +2.418 2.037 0.9548 0.6442 0.8776 +2.436 2.052 1.016 0.6442 0.8525 +2.456 2.068 1.069 0.6442 0.8253 +2.477 2.086 1.113 0.6442 0.7961 +2.499 2.105 1.147 0.6442 0.7648 +2.523 2.125 1.171 0.6442 0.7317 +2.548 2.146 1.185 0.6442 0.6967 +2.574 2.168 1.189 0.6442 0.66 +2.602 2.192 1.183 0.6442 0.6216 +2.631 2.216 1.168 0.6442 0.5817 +2.661 2.241 1.143 0.6442 0.5403 +2.691 2.267 1.108 0.6442 0.4976 +2.723 2.293 1.065 0.6442 0.4536 +2.755 2.32 1.013 0.6442 0.4085 +2.787 2.347 0.9541 0.6442 0.3624 +2.819 2.375 0.8876 0.6442 0.3153 +2.852 2.402 0.8146 0.6442 0.2675 +2.883 2.429 0.736 0.6442 0.219 +2.915 2.455 0.6526 0.6442 0.17 +2.945 2.481 0.5651 0.6442 0.1205 +2.974 2.505 0.4746 0.6442 0.07074 +3.002 2.528 0.3819 0.6442 0.02079 +3.028 2.55 0.2879 0.6442 -0.0292 +3.052 2.571 0.1936 0.6442 -0.07912 +3.074 2.589 0.09999 0.6442 -0.1288 +3.093 2.606 0.00789 0.6442 -0.1782 +3.11 2.62 -0.08176 0.6442 -0.2272 +3.124 2.631 -0.1681 0.6442 -0.2756 +3.135 2.64 -0.2503 0.6442 -0.3233 +3.142 2.647 -0.3275 0.6442 -0.3702 +3.146 2.65 -0.3991 0.6442 -0.4161 +3.147 2.65 -0.4644 0.6442 -0.4611 +3.143 2.648 -0.5227 0.6442 -0.5048 +3.136 2.641 -0.5737 0.6442 -0.5474 +3.125 2.632 -0.6167 0.6442 -0.5885 +3.11 2.619 -0.6515 0.6442 -0.6282 +3.091 2.603 -0.6777 0.6442 -0.6663 +3.068 2.584 -0.6953 0.6442 -0.7027 +3.041 2.561 -0.7042 0.6442 -0.7374 +3.01 2.536 -0.7042 0.6442 -0.7702 +2.976 2.507 -0.6956 0.6442 -0.8011 +2.938 2.475 -0.6785 0.6442 -0.8301 +2.897 2.44 -0.6531 0.6442 -0.8569 +2.852 2.402 -0.62 0.6442 -0.8816 +2.804 2.362 -0.5794 0.6442 -0.9041 +2.754 2.319 -0.5319 0.6442 -0.9243 +2.701 2.275 -0.4781 0.6442 -0.9422 +2.645 2.228 -0.4187 0.6442 -0.9578 +2.588 2.18 -0.3544 0.6442 -0.971 +2.529 2.13 -0.2859 0.6442 -0.9817 +2.469 2.08 -0.2141 0.6442 -0.99 +2.408 2.028 -0.1398 0.6442 -0.9958 +2.346 1.976 -0.06379 0.6442 -0.9991 +2.284 1.924 0.01291 0.6442 -1 +2.222 1.872 0.08947 0.6442 -0.9983 +2.16 1.82 0.165 0.6442 -0.9941 +2.099 1.768 0.2386 0.6442 -0.9875 +2.04 1.718 0.3094 0.6442 -0.9784 +1.981 1.669 0.3765 0.6442 -0.9668 +1.925 1.621 0.4393 0.6442 -0.9528 +1.87 1.575 0.4969 0.6442 -0.9365 +1.818 1.531 0.5486 0.6442 -0.9178 +1.768 1.49 0.5938 0.6442 -0.8968 +1.722 1.45 0.632 0.6442 -0.8735 +1.678 1.413 0.6625 0.6442 -0.8481 +1.638 1.38 0.6851 0.6442 -0.8206 +1.601 1.349 0.6994 0.6442 -0.791 +1.568 1.321 0.7052 0.6442 -0.7594 +1.539 1.296 0.7022 0.6442 -0.7259 +1.513 1.274 0.6904 0.6442 -0.6907 +1.491 1.256 0.6699 0.6442 -0.6536 +1.474 1.241 0.6407 0.6442 -0.615 +1.46 1.23 0.6031 0.6442 -0.5748 +1.45 1.221 0.5574 0.6442 -0.5332 +1.444 1.216 0.5039 0.6442 -0.4903 +1.442 1.215 0.4432 0.6442 -0.4461 +1.444 1.216 0.3757 0.6442 -0.4008 +1.449 1.22 0.3021 0.6442 -0.3545 +1.457 1.228 0.2232 0.6442 -0.3073 +1.469 1.238 0.1395 0.6442 -0.2594 +1.484 1.25 0.05194 0.6442 -0.2108 +1.502 1.265 -0.03863 0.6442 -0.1617 +1.522 1.282 -0.1314 0.6442 -0.1122 +1.545 1.301 -0.2253 0.6442 -0.06235 +1.57 1.322 -0.3196 0.6442 -0.01239 +1.596 1.345 -0.4133 0.6442 0.0376 +1.625 1.368 -0.5053 0.6442 0.0875 +1.654 1.393 -0.5949 0.6442 0.1372 +1.685 1.419 -0.6811 0.6442 0.1865 +1.716 1.446 -0.7631 0.6442 0.2354 +1.748 1.473 -0.8399 0.6442 0.2837 +1.781 1.5 -0.9107 0.6442 0.3312 +1.813 1.527 -0.9749 0.6442 0.378 +1.845 1.554 -1.032 0.6442 0.4238 +1.877 1.581 -1.081 0.6442 0.4685 +1.908 1.607 -1.121 0.6442 0.5121 +1.939 1.633 -1.152 0.6442 0.5544 +1.968 1.658 -1.174 0.6442 0.5953 +1.997 1.682 -1.186 0.6442 0.6347 +2.024 1.705 -1.189 0.6442 0.6725 +2.05 1.727 -1.181 0.6442 0.7087 +2.075 1.747 -1.164 0.6442 0.743 +2.098 1.767 -1.136 0.6442 0.7756 +2.12 1.785 -1.099 0.6442 0.8061 +2.14 1.802 -1.052 0.6442 0.8347 +2.159 1.818 -0.9967 0.6442 0.8612 +2.177 1.833 -0.9323 0.6442 0.8855 +2.193 1.847 -0.8597 0.6442 0.9076 +2.208 1.86 -0.7797 0.6442 0.9275 +2.222 1.871 -0.6928 0.6442 0.945 +2.234 1.882 -0.5999 0.6442 0.9602 +2.246 1.892 -0.5016 0.6442 0.9729 +2.258 1.902 -0.399 0.6442 0.9833 +2.268 1.91 -0.2928 0.6442 0.9911 +2.278 1.919 -0.1841 0.6442 0.9965 +2.288 1.927 -0.07368 0.6442 0.9994 +2.195 2.045 0 0.6816 1 +2.202 2.052 0.1112 0.6816 0.9988 +2.21 2.059 0.2214 0.6816 0.995 +2.218 2.066 0.3297 0.6816 0.9888 +2.226 2.074 0.4351 0.6816 0.9801 +2.235 2.082 0.5367 0.6816 0.9689 +2.245 2.091 0.6336 0.6816 0.9553 +2.256 2.102 0.725 0.6816 0.9394 +2.268 2.113 0.8101 0.6816 0.9211 +2.281 2.125 0.8882 0.6816 0.9004 +2.296 2.139 0.9586 0.6816 0.8776 +2.312 2.154 1.021 0.6816 0.8525 +2.33 2.17 1.074 0.6816 0.8253 +2.349 2.188 1.118 0.6816 0.7961 +2.37 2.207 1.153 0.6816 0.7648 +2.392 2.228 1.178 0.6816 0.7317 +2.416 2.25 1.193 0.6816 0.6967 +2.441 2.274 1.198 0.6816 0.66 +2.467 2.299 1.193 0.6816 0.6216 +2.495 2.325 1.178 0.6816 0.5817 +2.524 2.352 1.154 0.6816 0.5403 +2.554 2.38 1.121 0.6816 0.4976 +2.585 2.408 1.079 0.6816 0.4536 +2.617 2.438 1.028 0.6816 0.4085 +2.649 2.467 0.9699 0.6816 0.3624 +2.681 2.497 0.9045 0.6816 0.3153 +2.713 2.527 0.8326 0.6816 0.2675 +2.745 2.557 0.7551 0.6816 0.219 +2.776 2.586 0.6727 0.6816 0.17 +2.807 2.615 0.5862 0.6816 0.1205 +2.836 2.642 0.4967 0.6816 0.07074 +2.865 2.669 0.4049 0.6816 0.02079 +2.891 2.693 0.3118 0.6816 -0.0292 +2.916 2.717 0.2183 0.6816 -0.07912 +2.939 2.738 0.1254 0.6816 -0.1288 +2.959 2.757 0.034 0.6816 -0.1782 +2.977 2.773 -0.05508 0.6816 -0.2272 +2.992 2.787 -0.1409 0.6816 -0.2756 +3.003 2.798 -0.2227 0.6816 -0.3233 +3.012 2.806 -0.2997 0.6816 -0.3702 +3.017 2.811 -0.3712 0.6816 -0.4161 +3.019 2.812 -0.4364 0.6816 -0.4611 +3.016 2.81 -0.4948 0.6816 -0.5048 +3.01 2.804 -0.546 0.6816 -0.5474 +3.001 2.795 -0.5893 0.6816 -0.5885 +2.987 2.782 -0.6246 0.6816 -0.6282 +2.969 2.766 -0.6515 0.6816 -0.6663 +2.947 2.746 -0.6698 0.6816 -0.7027 +2.922 2.722 -0.6795 0.6816 -0.7374 +2.893 2.695 -0.6806 0.6816 -0.7702 +2.86 2.664 -0.6731 0.6816 -0.8011 +2.823 2.63 -0.6572 0.6816 -0.8301 +2.783 2.592 -0.6332 0.6816 -0.8569 +2.739 2.552 -0.6015 0.6816 -0.8816 +2.693 2.509 -0.5625 0.6816 -0.9041 +2.644 2.463 -0.5167 0.6816 -0.9243 +2.592 2.415 -0.4647 0.6816 -0.9422 +2.538 2.365 -0.4071 0.6816 -0.9578 +2.482 2.313 -0.3447 0.6816 -0.971 +2.425 2.259 -0.2781 0.6816 -0.9817 +2.366 2.204 -0.2083 0.6816 -0.99 +2.306 2.148 -0.136 0.6816 -0.9958 +2.246 2.092 -0.06209 0.6816 -0.9991 +2.185 2.035 0.01257 0.6816 -1 +2.124 1.979 0.08707 0.6816 -0.9983 +2.064 1.923 0.1605 0.6816 -0.9941 +2.004 1.867 0.2321 0.6816 -0.9875 +1.946 1.813 0.3009 0.6816 -0.9784 +1.889 1.759 0.3662 0.6816 -0.9668 +1.833 1.708 0.4271 0.6816 -0.9528 +1.78 1.658 0.4828 0.6816 -0.9365 +1.729 1.611 0.5328 0.6816 -0.9178 +1.681 1.566 0.5764 0.6816 -0.8968 +1.636 1.524 0.613 0.6816 -0.8735 +1.593 1.484 0.6422 0.6816 -0.8481 +1.555 1.448 0.6635 0.6816 -0.8206 +1.519 1.415 0.6765 0.6816 -0.791 +1.487 1.386 0.6812 0.6816 -0.7594 +1.459 1.359 0.6772 0.6816 -0.7259 +1.435 1.337 0.6646 0.6816 -0.6907 +1.415 1.318 0.6434 0.6816 -0.6536 +1.398 1.303 0.6137 0.6816 -0.615 +1.386 1.291 0.5756 0.6816 -0.5748 +1.377 1.283 0.5296 0.6816 -0.5332 +1.373 1.279 0.476 0.6816 -0.4903 +1.372 1.278 0.4152 0.6816 -0.4461 +1.374 1.28 0.3478 0.6816 -0.4008 +1.381 1.286 0.2744 0.6816 -0.3545 +1.39 1.295 0.1957 0.6816 -0.3073 +1.403 1.307 0.1125 0.6816 -0.2594 +1.419 1.322 0.02544 0.6816 -0.2108 +1.438 1.339 -0.06453 0.6816 -0.1617 +1.459 1.359 -0.1566 0.6816 -0.1122 +1.482 1.381 -0.2498 0.6816 -0.06235 +1.508 1.405 -0.3432 0.6816 -0.01239 +1.535 1.43 -0.4359 0.6816 0.0376 +1.564 1.457 -0.5271 0.6816 0.0875 +1.593 1.484 -0.6157 0.6816 0.1372 +1.624 1.513 -0.7009 0.6816 0.1865 +1.656 1.543 -0.7817 0.6816 0.2354 +1.688 1.573 -0.8574 0.6816 0.2837 +1.72 1.603 -0.9272 0.6816 0.3312 +1.752 1.632 -0.9903 0.6816 0.378 +1.784 1.662 -1.046 0.6816 0.4238 +1.815 1.691 -1.094 0.6816 0.4685 +1.846 1.72 -1.133 0.6816 0.5121 +1.876 1.747 -1.163 0.6816 0.5544 +1.904 1.774 -1.184 0.6816 0.5953 +1.932 1.8 -1.196 0.6816 0.6347 +1.958 1.824 -1.197 0.6816 0.6725 +1.983 1.847 -1.189 0.6816 0.7087 +2.006 1.869 -1.171 0.6816 0.743 +2.028 1.889 -1.142 0.6816 0.7756 +2.048 1.908 -1.104 0.6816 0.8061 +2.067 1.925 -1.057 0.6816 0.8347 +2.084 1.941 -1.001 0.6816 0.8612 +2.099 1.956 -0.9358 0.6816 0.8855 +2.113 1.969 -0.8628 0.6816 0.9076 +2.126 1.981 -0.7823 0.6816 0.9275 +2.138 1.992 -0.695 0.6816 0.945 +2.149 2.002 -0.6016 0.6816 0.9602 +2.158 2.011 -0.503 0.6816 0.9729 +2.167 2.019 -0.4001 0.6816 0.9833 +2.175 2.026 -0.2936 0.6816 0.9911 +2.183 2.034 -0.1845 0.6816 0.9965 +2.19 2.04 -0.07387 0.6816 0.9994 +2.09 2.152 0 0.7174 1 +2.095 2.157 0.1114 0.7174 0.9988 +2.1 2.163 0.2219 0.7174 0.995 +2.106 2.168 0.3304 0.7174 0.9888 +2.112 2.175 0.436 0.7174 0.9801 +2.119 2.182 0.5379 0.7174 0.9689 +2.127 2.19 0.6352 0.7174 0.9553 +2.135 2.199 0.7269 0.7174 0.9394 +2.145 2.209 0.8124 0.7174 0.9211 +2.157 2.221 0.8909 0.7174 0.9004 +2.169 2.234 0.9617 0.7174 0.8776 +2.184 2.248 1.024 0.7174 0.8525 +2.2 2.265 1.078 0.7174 0.8253 +2.217 2.283 1.123 0.7174 0.7961 +2.236 2.302 1.159 0.7174 0.7648 +2.257 2.324 1.184 0.7174 0.7317 +2.279 2.347 1.2 0.7174 0.6967 +2.303 2.371 1.206 0.7174 0.66 +2.329 2.398 1.202 0.7174 0.6216 +2.355 2.425 1.188 0.7174 0.5817 +2.383 2.454 1.165 0.7174 0.5403 +2.413 2.484 1.133 0.7174 0.4976 +2.443 2.515 1.092 0.7174 0.4536 +2.474 2.547 1.042 0.7174 0.4085 +2.505 2.579 0.9851 0.7174 0.3624 +2.537 2.612 0.9208 0.7174 0.3153 +2.569 2.645 0.85 0.7174 0.2675 +2.6 2.677 0.7736 0.7174 0.219 +2.632 2.71 0.6923 0.7174 0.17 +2.662 2.741 0.6069 0.7174 0.1205 +2.692 2.772 0.5184 0.7174 0.07074 +2.72 2.801 0.4276 0.7174 0.02079 +2.747 2.829 0.3355 0.7174 -0.0292 +2.773 2.855 0.2429 0.7174 -0.07912 +2.796 2.879 0.1508 0.7174 -0.1288 +2.817 2.9 0.06009 0.7174 -0.1782 +2.835 2.919 -0.02835 0.7174 -0.2272 +2.851 2.935 -0.1137 0.7174 -0.2756 +2.863 2.948 -0.1951 0.7174 -0.3233 +2.873 2.958 -0.2717 0.7174 -0.3702 +2.879 2.964 -0.343 0.7174 -0.4161 +2.882 2.967 -0.4081 0.7174 -0.4611 +2.881 2.966 -0.4666 0.7174 -0.5048 +2.876 2.961 -0.5179 0.7174 -0.5474 +2.867 2.952 -0.5616 0.7174 -0.5885 +2.855 2.939 -0.5974 0.7174 -0.6282 +2.838 2.922 -0.6249 0.7174 -0.6663 +2.818 2.901 -0.6439 0.7174 -0.7027 +2.794 2.877 -0.6545 0.7174 -0.7374 +2.766 2.848 -0.6565 0.7174 -0.7702 +2.734 2.815 -0.6502 0.7174 -0.8011 +2.699 2.779 -0.6356 0.7174 -0.8301 +2.661 2.739 -0.613 0.7174 -0.8569 +2.619 2.696 -0.5828 0.7174 -0.8816 +2.574 2.65 -0.5453 0.7174 -0.9041 +2.526 2.601 -0.5012 0.7174 -0.9243 +2.476 2.55 -0.451 0.7174 -0.9422 +2.424 2.496 -0.3953 0.7174 -0.9578 +2.37 2.44 -0.3348 0.7174 -0.971 +2.314 2.382 -0.2702 0.7174 -0.9817 +2.256 2.323 -0.2024 0.7174 -0.99 +2.198 2.263 -0.1322 0.7174 -0.9958 +2.139 2.203 -0.06034 0.7174 -0.9991 +2.08 2.142 0.01221 0.7174 -1 +2.021 2.081 0.08462 0.7174 -0.9983 +1.962 2.02 0.156 0.7174 -0.9941 +1.904 1.961 0.2255 0.7174 -0.9875 +1.848 1.902 0.2923 0.7174 -0.9784 +1.792 1.845 0.3556 0.7174 -0.9668 +1.738 1.79 0.4146 0.7174 -0.9528 +1.687 1.737 0.4685 0.7174 -0.9365 +1.637 1.686 0.5168 0.7174 -0.9178 +1.591 1.638 0.5587 0.7174 -0.8968 +1.547 1.593 0.5937 0.7174 -0.8735 +1.506 1.551 0.6214 0.7174 -0.8481 +1.469 1.512 0.6414 0.7174 -0.8206 +1.435 1.477 0.6532 0.7174 -0.791 +1.405 1.446 0.6568 0.7174 -0.7594 +1.378 1.419 0.6519 0.7174 -0.7259 +1.355 1.395 0.6385 0.7174 -0.6907 +1.336 1.376 0.6165 0.7174 -0.6536 +1.321 1.36 0.5863 0.7174 -0.615 +1.31 1.349 0.5478 0.7174 -0.5748 +1.302 1.341 0.5015 0.7174 -0.5332 +1.299 1.337 0.4477 0.7174 -0.4903 +1.299 1.338 0.3869 0.7174 -0.4461 +1.303 1.342 0.3197 0.7174 -0.4008 +1.31 1.349 0.2465 0.7174 -0.3545 +1.321 1.36 0.1682 0.7174 -0.3073 +1.334 1.374 0.08538 0.7174 -0.2594 +1.351 1.391 -0.001082 0.7174 -0.2108 +1.37 1.411 -0.09039 0.7174 -0.1617 +1.392 1.433 -0.1817 0.7174 -0.1122 +1.416 1.458 -0.274 0.7174 -0.06235 +1.442 1.484 -0.3666 0.7174 -0.01239 +1.469 1.513 -0.4584 0.7174 0.0376 +1.498 1.543 -0.5485 0.7174 0.0875 +1.528 1.574 -0.636 0.7174 0.1372 +1.559 1.605 -0.7201 0.7174 0.1865 +1.591 1.638 -0.7999 0.7174 0.2354 +1.622 1.67 -0.8745 0.7174 0.2837 +1.654 1.703 -0.9432 0.7174 0.3312 +1.686 1.736 -1.005 0.7174 0.378 +1.717 1.768 -1.06 0.7174 0.4238 +1.748 1.8 -1.107 0.7174 0.4685 +1.778 1.83 -1.145 0.7174 0.5121 +1.806 1.86 -1.174 0.7174 0.5544 +1.834 1.888 -1.194 0.7174 0.5953 +1.86 1.916 -1.204 0.7174 0.6347 +1.885 1.941 -1.205 0.7174 0.6725 +1.909 1.965 -1.196 0.7174 0.7087 +1.93 1.988 -1.177 0.7174 0.743 +1.951 2.009 -1.148 0.7174 0.7756 +1.969 2.028 -1.109 0.7174 0.8061 +1.986 2.045 -1.061 0.7174 0.8347 +2.001 2.061 -1.004 0.7174 0.8612 +2.015 2.075 -0.9388 0.7174 0.8855 +2.027 2.088 -0.8653 0.7174 0.9076 +2.038 2.099 -0.7844 0.7174 0.9275 +2.048 2.109 -0.6967 0.7174 0.945 +2.056 2.117 -0.603 0.7174 0.9602 +2.064 2.125 -0.5041 0.7174 0.9729 +2.07 2.132 -0.4009 0.7174 0.9833 +2.076 2.138 -0.2942 0.7174 0.9911 +2.082 2.143 -0.1849 0.7174 0.9965 +2.087 2.149 -0.07401 0.7174 0.9994 +1.98 2.254 0 0.7513 1 +1.983 2.257 0.1116 0.7513 0.9988 +1.986 2.261 0.2222 0.7513 0.995 +1.989 2.265 0.3308 0.7513 0.9888 +1.993 2.269 0.4367 0.7513 0.9801 +1.998 2.275 0.5388 0.7513 0.9689 +2.004 2.281 0.6363 0.7513 0.9553 +2.011 2.289 0.7283 0.7513 0.9394 +2.019 2.298 0.8141 0.7513 0.9211 +2.028 2.309 0.893 0.7513 0.9004 +2.039 2.321 0.9643 0.7513 0.8776 +2.052 2.336 1.027 0.7513 0.8525 +2.066 2.352 1.082 0.7513 0.8253 +2.082 2.37 1.127 0.7513 0.7961 +2.099 2.39 1.163 0.7513 0.7648 +2.118 2.411 1.19 0.7513 0.7317 +2.139 2.435 1.206 0.7513 0.6967 +2.162 2.461 1.213 0.7513 0.66 +2.186 2.488 1.21 0.7513 0.6216 +2.212 2.517 1.198 0.7513 0.5817 +2.238 2.548 1.175 0.7513 0.5403 +2.267 2.58 1.144 0.7513 0.4976 +2.296 2.613 1.104 0.7513 0.4536 +2.326 2.648 1.056 0.7513 0.4085 +2.357 2.683 0.9997 0.7513 0.3624 +2.388 2.718 0.9365 0.7513 0.3153 +2.419 2.754 0.8669 0.7513 0.2675 +2.45 2.789 0.7917 0.7513 0.219 +2.481 2.825 0.7115 0.7513 0.17 +2.512 2.859 0.6273 0.7513 0.1205 +2.541 2.893 0.5399 0.7513 0.07074 +2.57 2.925 0.4501 0.7513 0.02079 +2.597 2.956 0.359 0.7513 -0.0292 +2.622 2.985 0.2673 0.7513 -0.07912 +2.646 3.012 0.1761 0.7513 -0.1288 +2.667 3.036 0.08614 0.7513 -0.1782 +2.686 3.057 -0.001616 0.7513 -0.2272 +2.702 3.076 -0.08635 0.7513 -0.2756 +2.715 3.091 -0.1672 0.7513 -0.3233 +2.726 3.103 -0.2436 0.7513 -0.3702 +2.733 3.111 -0.3146 0.7513 -0.4161 +2.736 3.115 -0.3796 0.7513 -0.4611 +2.736 3.115 -0.4381 0.7513 -0.5048 +2.732 3.11 -0.4896 0.7513 -0.5474 +2.725 3.102 -0.5336 0.7513 -0.5885 +2.714 3.089 -0.5698 0.7513 -0.6282 +2.699 3.072 -0.5978 0.7513 -0.6663 +2.68 3.051 -0.6176 0.7513 -0.7027 +2.657 3.025 -0.629 0.7513 -0.7374 +2.631 2.995 -0.6321 0.7513 -0.7702 +2.601 2.961 -0.6269 0.7513 -0.8011 +2.567 2.922 -0.6135 0.7513 -0.8301 +2.53 2.88 -0.5923 0.7513 -0.8569 +2.49 2.835 -0.5636 0.7513 -0.8816 +2.447 2.786 -0.5278 0.7513 -0.9041 +2.401 2.734 -0.4854 0.7513 -0.9243 +2.353 2.679 -0.437 0.7513 -0.9422 +2.303 2.621 -0.3832 0.7513 -0.9578 +2.25 2.562 -0.3246 0.7513 -0.971 +2.196 2.5 -0.2621 0.7513 -0.9817 +2.141 2.437 -0.1964 0.7513 -0.99 +2.085 2.373 -0.1282 0.7513 -0.9958 +2.028 2.308 -0.05855 0.7513 -0.9991 +1.97 2.243 0.01185 0.7513 -1 +1.913 2.178 0.08211 0.7513 -0.9983 +1.856 2.113 0.1514 0.7513 -0.9941 +1.8 2.049 0.2188 0.7513 -0.9875 +1.745 1.987 0.2835 0.7513 -0.9784 +1.692 1.926 0.3448 0.7513 -0.9668 +1.64 1.867 0.4018 0.7513 -0.9528 +1.59 1.81 0.4539 0.7513 -0.9365 +1.543 1.756 0.5004 0.7513 -0.9178 +1.498 1.705 0.5406 0.7513 -0.8968 +1.456 1.657 0.5741 0.7513 -0.8735 +1.417 1.613 0.6003 0.7513 -0.8481 +1.381 1.572 0.6189 0.7513 -0.8206 +1.349 1.535 0.6295 0.7513 -0.791 +1.32 1.502 0.632 0.7513 -0.7594 +1.295 1.474 0.6261 0.7513 -0.7259 +1.273 1.449 0.6119 0.7513 -0.6907 +1.256 1.429 0.5893 0.7513 -0.6536 +1.242 1.414 0.5585 0.7513 -0.615 +1.232 1.402 0.5196 0.7513 -0.5748 +1.226 1.395 0.4731 0.7513 -0.5332 +1.223 1.393 0.4192 0.7513 -0.4903 +1.225 1.394 0.3584 0.7513 -0.4461 +1.229 1.399 0.2913 0.7513 -0.4008 +1.237 1.408 0.2184 0.7513 -0.3545 +1.249 1.421 0.1405 0.7513 -0.3073 +1.263 1.438 0.05824 0.7513 -0.2594 +1.28 1.457 -0.0276 0.7513 -0.2108 +1.3 1.48 -0.1162 0.7513 -0.1617 +1.322 1.505 -0.2067 0.7513 -0.1122 +1.346 1.532 -0.2981 0.7513 -0.06235 +1.372 1.562 -0.3897 0.7513 -0.01239 +1.4 1.593 -0.4805 0.7513 0.0376 +1.428 1.626 -0.5696 0.7513 0.0875 +1.458 1.66 -0.656 0.7513 0.1372 +1.489 1.695 -0.739 0.7513 0.1865 +1.52 1.73 -0.8176 0.7513 0.2354 +1.551 1.766 -0.891 0.7513 0.2837 +1.583 1.802 -0.9585 0.7513 0.3312 +1.614 1.837 -1.019 0.7513 0.378 +1.644 1.872 -1.073 0.7513 0.4238 +1.674 1.906 -1.118 0.7513 0.4685 +1.703 1.938 -1.156 0.7513 0.5121 +1.731 1.97 -1.184 0.7513 0.5544 +1.757 2 -1.203 0.7513 0.5953 +1.782 2.029 -1.212 0.7513 0.6347 +1.806 2.056 -1.212 0.7513 0.6725 +1.828 2.081 -1.202 0.7513 0.7087 +1.848 2.104 -1.182 0.7513 0.743 +1.867 2.125 -1.152 0.7513 0.7756 +1.884 2.144 -1.113 0.7513 0.8061 +1.899 2.162 -1.065 0.7513 0.8347 +1.913 2.177 -1.007 0.7513 0.8612 +1.925 2.191 -0.9412 0.7513 0.8855 +1.935 2.203 -0.8673 0.7513 0.9076 +1.944 2.213 -0.786 0.7513 0.9275 +1.952 2.221 -0.698 0.7513 0.945 +1.958 2.229 -0.604 0.7513 0.9602 +1.963 2.235 -0.5049 0.7513 0.9729 +1.968 2.24 -0.4015 0.7513 0.9833 +1.972 2.244 -0.2946 0.7513 0.9911 +1.975 2.248 -0.1851 0.7513 0.9965 +1.978 2.252 -0.0741 0.7513 0.9994 +1.865 2.35 0 0.7833 1 +1.866 2.351 0.1116 0.7833 0.9988 +1.867 2.353 0.2223 0.7833 0.995 +1.869 2.355 0.3311 0.7833 0.9888 +1.871 2.357 0.4371 0.7833 0.9801 +1.874 2.361 0.5393 0.7833 0.9689 +1.878 2.366 0.637 0.7833 0.9553 +1.883 2.372 0.7292 0.7833 0.9394 +1.889 2.38 0.8153 0.7833 0.9211 +1.896 2.39 0.8945 0.7833 0.9004 +1.906 2.401 0.9662 0.7833 0.8776 +1.916 2.415 1.03 0.7833 0.8525 +1.929 2.431 1.085 0.7833 0.8253 +1.943 2.449 1.131 0.7833 0.7961 +1.959 2.469 1.168 0.7833 0.7648 +1.977 2.491 1.195 0.7833 0.7317 +1.996 2.515 1.212 0.7833 0.6967 +2.017 2.542 1.22 0.7833 0.66 +2.04 2.571 1.218 0.7833 0.6216 +2.064 2.601 1.206 0.7833 0.5817 +2.09 2.634 1.185 0.7833 0.5403 +2.117 2.668 1.155 0.7833 0.4976 +2.145 2.703 1.116 0.7833 0.4536 +2.174 2.74 1.068 0.7833 0.4085 +2.204 2.777 1.014 0.7833 0.3624 +2.234 2.815 0.9517 0.7833 0.3153 +2.265 2.854 0.8833 0.7833 0.2675 +2.295 2.893 0.8092 0.7833 0.219 +2.326 2.931 0.7303 0.7833 0.17 +2.356 2.969 0.6472 0.7833 0.1205 +2.385 3.005 0.5609 0.7833 0.07074 +2.413 3.041 0.4723 0.7833 0.02079 +2.44 3.075 0.3822 0.7833 -0.0292 +2.465 3.107 0.2916 0.7833 -0.07912 +2.489 3.137 0.2012 0.7833 -0.1288 +2.51 3.164 0.1121 0.7833 -0.1782 +2.53 3.188 0.02512 0.7833 -0.2272 +2.546 3.209 -0.05897 0.7833 -0.2756 +2.56 3.226 -0.1393 0.7833 -0.3233 +2.571 3.24 -0.2152 0.7833 -0.3702 +2.578 3.249 -0.2859 0.7833 -0.4161 +2.583 3.255 -0.3508 0.7833 -0.4611 +2.584 3.256 -0.4093 0.7833 -0.5048 +2.581 3.252 -0.4609 0.7833 -0.5474 +2.575 3.244 -0.5052 0.7833 -0.5885 +2.565 3.232 -0.5418 0.7833 -0.6282 +2.551 3.215 -0.5704 0.7833 -0.6663 +2.533 3.193 -0.5909 0.7833 -0.7027 +2.512 3.166 -0.6032 0.7833 -0.7374 +2.487 3.135 -0.6072 0.7833 -0.7702 +2.459 3.099 -0.6031 0.7833 -0.8011 +2.427 3.059 -0.5911 0.7833 -0.8301 +2.392 3.015 -0.5713 0.7833 -0.8569 +2.354 2.966 -0.5441 0.7833 -0.8816 +2.313 2.915 -0.5099 0.7833 -0.9041 +2.269 2.86 -0.4693 0.7833 -0.9243 +2.223 2.801 -0.4227 0.7833 -0.9422 +2.175 2.74 -0.3708 0.7833 -0.9578 +2.124 2.677 -0.3143 0.7833 -0.971 +2.073 2.612 -0.2538 0.7833 -0.9817 +2.019 2.545 -0.1902 0.7833 -0.99 +1.965 2.477 -0.1242 0.7833 -0.9958 +1.911 2.408 -0.05673 0.7833 -0.9991 +1.856 2.338 0.01148 0.7833 -1 +1.801 2.269 0.07956 0.7833 -0.9983 +1.746 2.2 0.1466 0.7833 -0.9941 +1.692 2.133 0.2119 0.7833 -0.9875 +1.64 2.066 0.2746 0.7833 -0.9784 +1.588 2.001 0.3338 0.7833 -0.9668 +1.539 1.939 0.3888 0.7833 -0.9528 +1.491 1.879 0.439 0.7833 -0.9365 +1.445 1.821 0.4837 0.7833 -0.9178 +1.403 1.767 0.5222 0.7833 -0.8968 +1.362 1.717 0.554 0.7833 -0.8735 +1.325 1.67 0.5788 0.7833 -0.8481 +1.291 1.627 0.596 0.7833 -0.8206 +1.261 1.589 0.6054 0.7833 -0.791 +1.233 1.554 0.6068 0.7833 -0.7594 +1.21 1.525 0.6 0.7833 -0.7259 +1.19 1.5 0.5849 0.7833 -0.6907 +1.174 1.479 0.5617 0.7833 -0.6536 +1.161 1.463 0.5304 0.7833 -0.615 +1.152 1.452 0.4912 0.7833 -0.5748 +1.147 1.446 0.4444 0.7833 -0.5332 +1.146 1.444 0.3904 0.7833 -0.4903 +1.148 1.447 0.3297 0.7833 -0.4461 +1.153 1.454 0.2628 0.7833 -0.4008 +1.162 1.465 0.1903 0.7833 -0.3545 +1.174 1.479 0.1128 0.7833 -0.3073 +1.189 1.498 0.03106 0.7833 -0.2594 +1.206 1.52 -0.0541 0.7833 -0.2108 +1.226 1.545 -0.1419 0.7833 -0.1617 +1.248 1.573 -0.2315 0.7833 -0.1122 +1.273 1.604 -0.3221 0.7833 -0.06235 +1.298 1.636 -0.4126 0.7833 -0.01239 +1.326 1.671 -0.5023 0.7833 0.0376 +1.354 1.707 -0.5903 0.7833 0.0875 +1.384 1.744 -0.6756 0.7833 0.1372 +1.414 1.782 -0.7573 0.7833 0.1865 +1.445 1.82 -0.8347 0.7833 0.2354 +1.475 1.859 -0.907 0.7833 0.2837 +1.506 1.897 -0.9733 0.7833 0.3312 +1.536 1.935 -1.033 0.7833 0.378 +1.565 1.973 -1.085 0.7833 0.4238 +1.594 2.009 -1.13 0.7833 0.4685 +1.622 2.044 -1.166 0.7833 0.5121 +1.648 2.077 -1.193 0.7833 0.5544 +1.674 2.109 -1.211 0.7833 0.5953 +1.698 2.139 -1.219 0.7833 0.6347 +1.72 2.167 -1.218 0.7833 0.6725 +1.74 2.193 -1.207 0.7833 0.7087 +1.759 2.217 -1.187 0.7833 0.743 +1.776 2.238 -1.156 0.7833 0.7756 +1.792 2.258 -1.116 0.7833 0.8061 +1.805 2.275 -1.067 0.7833 0.8347 +1.817 2.29 -1.009 0.7833 0.8612 +1.827 2.303 -0.943 0.7833 0.8855 +1.836 2.314 -0.8687 0.7833 0.9076 +1.843 2.323 -0.7871 0.7833 0.9275 +1.849 2.33 -0.6989 0.7833 0.945 +1.854 2.336 -0.6047 0.7833 0.9602 +1.857 2.34 -0.5054 0.7833 0.9729 +1.86 2.344 -0.4018 0.7833 0.9833 +1.862 2.346 -0.2948 0.7833 0.9911 +1.863 2.348 -0.1853 0.7833 0.9965 +1.864 2.349 -0.07415 0.7833 0.9994 +1.745 2.44 0 0.8134 1 +1.744 2.439 0.1116 0.8134 0.9988 +1.744 2.439 0.2223 0.8134 0.995 +1.744 2.438 0.3311 0.8134 0.9888 +1.744 2.439 0.4372 0.8134 0.9801 +1.745 2.441 0.5395 0.8134 0.9689 +1.748 2.444 0.6373 0.8134 0.9553 +1.751 2.449 0.7297 0.8134 0.9394 +1.756 2.455 0.816 0.8134 0.9211 +1.762 2.463 0.8955 0.8134 0.9004 +1.769 2.474 0.9676 0.8134 0.8776 +1.778 2.487 1.032 0.8134 0.8525 +1.789 2.502 1.087 0.8134 0.8253 +1.802 2.52 1.134 0.8134 0.7961 +1.816 2.54 1.171 0.8134 0.7648 +1.832 2.562 1.199 0.8134 0.7317 +1.85 2.587 1.217 0.8134 0.6967 +1.87 2.615 1.225 0.8134 0.66 +1.891 2.645 1.224 0.8134 0.6216 +1.914 2.677 1.214 0.8134 0.5817 +1.938 2.711 1.193 0.8134 0.5403 +1.964 2.747 1.164 0.8134 0.4976 +1.991 2.784 1.127 0.8134 0.4536 +2.019 2.823 1.081 0.8134 0.4085 +2.047 2.863 1.027 0.8134 0.3624 +2.077 2.904 0.9662 0.8134 0.3153 +2.106 2.945 0.8991 0.8134 0.2675 +2.136 2.987 0.8263 0.8134 0.219 +2.166 3.028 0.7486 0.8134 0.17 +2.195 3.069 0.6668 0.8134 0.1205 +2.223 3.109 0.5817 0.8134 0.07074 +2.251 3.148 0.4942 0.8134 0.02079 +2.278 3.185 0.4052 0.8134 -0.0292 +2.303 3.22 0.3156 0.8134 -0.07912 +2.326 3.253 0.2263 0.8134 -0.1288 +2.347 3.283 0.1381 0.8134 -0.1782 +2.367 3.309 0.05185 0.8134 -0.2272 +2.383 3.333 -0.03155 0.8134 -0.2756 +2.397 3.352 -0.1113 0.8134 -0.3233 +2.409 3.368 -0.1868 0.8134 -0.3702 +2.417 3.38 -0.2572 0.8134 -0.4161 +2.422 3.387 -0.3219 0.8134 -0.4611 +2.423 3.389 -0.3803 0.8134 -0.5048 +2.422 3.386 -0.432 0.8134 -0.5474 +2.416 3.379 -0.4765 0.8134 -0.5885 +2.408 3.367 -0.5135 0.8134 -0.6282 +2.395 3.349 -0.5426 0.8134 -0.6663 +2.379 3.327 -0.5638 0.8134 -0.7027 +2.359 3.299 -0.577 0.8134 -0.7374 +2.336 3.267 -0.582 0.8134 -0.7702 +2.31 3.23 -0.5791 0.8134 -0.8011 +2.28 3.188 -0.5683 0.8134 -0.8301 +2.247 3.142 -0.5499 0.8134 -0.8569 +2.211 3.091 -0.5243 0.8134 -0.8816 +2.172 3.037 -0.4918 0.8134 -0.9041 +2.13 2.979 -0.4529 0.8134 -0.9243 +2.086 2.917 -0.4082 0.8134 -0.9422 +2.04 2.853 -0.3582 0.8134 -0.9578 +1.992 2.786 -0.3037 0.8134 -0.971 +1.943 2.717 -0.2454 0.8134 -0.9817 +1.892 2.646 -0.1839 0.8134 -0.99 +1.841 2.574 -0.1202 0.8134 -0.9958 +1.789 2.501 -0.05487 0.8134 -0.9991 +1.736 2.428 0.01111 0.8134 -1 +1.684 2.355 0.07695 0.8134 -0.9983 +1.632 2.282 0.1418 0.8134 -0.9941 +1.581 2.21 0.2049 0.8134 -0.9875 +1.53 2.14 0.2654 0.8134 -0.9784 +1.481 2.072 0.3225 0.8134 -0.9668 +1.434 2.005 0.3756 0.8134 -0.9528 +1.389 1.942 0.4238 0.8134 -0.9365 +1.346 1.882 0.4666 0.8134 -0.9178 +1.305 1.825 0.5034 0.8134 -0.8968 +1.267 1.772 0.5337 0.8134 -0.8735 +1.232 1.723 0.5569 0.8134 -0.8481 +1.2 1.678 0.5728 0.8134 -0.8206 +1.171 1.638 0.5809 0.8134 -0.791 +1.146 1.602 0.5812 0.8134 -0.7594 +1.124 1.571 0.5735 0.8134 -0.7259 +1.105 1.546 0.5576 0.8134 -0.6907 +1.09 1.525 0.5337 0.8134 -0.6536 +1.079 1.509 0.5019 0.8134 -0.615 +1.072 1.498 0.4624 0.8134 -0.5748 +1.067 1.493 0.4154 0.8134 -0.5332 +1.067 1.492 0.3614 0.8134 -0.4903 +1.07 1.496 0.3008 0.8134 -0.4461 +1.076 1.504 0.2341 0.8134 -0.4008 +1.085 1.517 0.1619 0.8134 -0.3545 +1.097 1.534 0.08496 0.8134 -0.3073 +1.112 1.555 0.003869 0.8134 -0.2594 +1.13 1.58 -0.08057 0.8134 -0.2108 +1.15 1.608 -0.1675 0.8134 -0.1617 +1.172 1.639 -0.2562 0.8134 -0.1122 +1.196 1.672 -0.3458 0.8134 -0.06235 +1.221 1.708 -0.4353 0.8134 -0.01239 +1.248 1.745 -0.5238 0.8134 0.0376 +1.276 1.785 -0.6106 0.8134 0.0875 +1.305 1.825 -0.6947 0.8134 0.1372 +1.334 1.866 -0.7752 0.8134 0.1865 +1.364 1.907 -0.8514 0.8134 0.2354 +1.394 1.949 -0.9223 0.8134 0.2837 +1.423 1.99 -0.9874 0.8134 0.3312 +1.452 2.031 -1.046 0.8134 0.378 +1.481 2.071 -1.097 0.8134 0.4238 +1.508 2.109 -1.14 0.8134 0.4685 +1.535 2.146 -1.175 0.8134 0.5121 +1.56 2.181 -1.201 0.8134 0.5544 +1.584 2.215 -1.218 0.8134 0.5953 +1.606 2.246 -1.226 0.8134 0.6347 +1.627 2.275 -1.224 0.8134 0.6725 +1.646 2.302 -1.212 0.8134 0.7087 +1.663 2.326 -1.191 0.8134 0.743 +1.679 2.348 -1.159 0.8134 0.7756 +1.693 2.367 -1.119 0.8134 0.8061 +1.705 2.384 -1.069 0.8134 0.8347 +1.715 2.398 -1.011 0.8134 0.8612 +1.724 2.41 -0.9442 0.8134 0.8855 +1.731 2.42 -0.8696 0.8134 0.9076 +1.736 2.428 -0.7877 0.8134 0.9275 +1.74 2.434 -0.6993 0.8134 0.945 +1.743 2.438 -0.605 0.8134 0.9602 +1.745 2.44 -0.5055 0.8134 0.9729 +1.746 2.442 -0.4019 0.8134 0.9833 +1.746 2.442 -0.2948 0.8134 0.9911 +1.746 2.442 -0.1853 0.8134 0.9965 +1.746 2.441 -0.07415 0.8134 0.9994 +1.621 2.524 0 0.8415 1 +1.619 2.521 0.1116 0.8415 0.9988 +1.617 2.518 0.2222 0.8415 0.995 +1.615 2.516 0.331 0.8415 0.9888 +1.614 2.514 0.437 0.8415 0.9801 +1.614 2.514 0.5393 0.8415 0.9689 +1.615 2.515 0.6372 0.8415 0.9553 +1.617 2.518 0.7297 0.8415 0.9394 +1.62 2.523 0.8162 0.8415 0.9211 +1.624 2.53 0.896 0.8415 0.9004 +1.63 2.539 0.9683 0.8415 0.8776 +1.638 2.551 1.033 0.8415 0.8525 +1.647 2.565 1.089 0.8415 0.8253 +1.658 2.583 1.136 0.8415 0.7961 +1.671 2.603 1.174 0.8415 0.7648 +1.686 2.625 1.202 0.8415 0.7317 +1.702 2.651 1.221 0.8415 0.6967 +1.72 2.679 1.23 0.8415 0.66 +1.74 2.71 1.23 0.8415 0.6216 +1.761 2.743 1.22 0.8415 0.5817 +1.784 2.779 1.201 0.8415 0.5403 +1.809 2.817 1.173 0.8415 0.4976 +1.834 2.856 1.137 0.8415 0.4536 +1.861 2.898 1.092 0.8415 0.4085 +1.888 2.94 1.04 0.8415 0.3624 +1.916 2.984 0.9802 0.8415 0.3153 +1.944 3.028 0.9143 0.8415 0.2675 +1.973 3.073 0.8428 0.8415 0.219 +2.001 3.117 0.7664 0.8415 0.17 +2.03 3.161 0.6859 0.8415 0.1205 +2.057 3.204 0.6021 0.8415 0.07074 +2.084 3.246 0.5158 0.8415 0.02079 +2.11 3.286 0.428 0.8415 -0.0292 +2.134 3.324 0.3395 0.8415 -0.07912 +2.157 3.36 0.2512 0.8415 -0.1288 +2.178 3.393 0.1639 0.8415 -0.1782 +2.197 3.422 0.07854 0.8415 -0.2272 +2.214 3.448 -0.004115 0.8415 -0.2756 +2.228 3.47 -0.08328 0.8415 -0.3233 +2.24 3.488 -0.1582 0.8415 -0.3702 +2.248 3.501 -0.2282 0.8415 -0.4161 +2.254 3.51 -0.2927 0.8415 -0.4611 +2.256 3.513 -0.351 0.8415 -0.5048 +2.255 3.512 -0.4028 0.8415 -0.5474 +2.251 3.505 -0.4475 0.8415 -0.5885 +2.243 3.493 -0.4848 0.8415 -0.6282 +2.232 3.476 -0.5145 0.8415 -0.6663 +2.217 3.453 -0.5364 0.8415 -0.7027 +2.199 3.425 -0.5504 0.8415 -0.7374 +2.178 3.392 -0.5564 0.8415 -0.7702 +2.153 3.353 -0.5546 0.8415 -0.8011 +2.125 3.31 -0.5451 0.8415 -0.8301 +2.094 3.261 -0.5282 0.8415 -0.8569 +2.06 3.209 -0.5041 0.8415 -0.8816 +2.024 3.152 -0.4733 0.8415 -0.9041 +1.985 3.091 -0.4362 0.8415 -0.9243 +1.943 3.026 -0.3934 0.8415 -0.9422 +1.9 2.959 -0.3454 0.8415 -0.9578 +1.855 2.889 -0.293 0.8415 -0.971 +1.808 2.816 -0.2368 0.8415 -0.9817 +1.76 2.741 -0.1776 0.8415 -0.99 +1.711 2.665 -0.116 0.8415 -0.9958 +1.662 2.589 -0.05298 0.8415 -0.9991 +1.613 2.511 0.01072 0.8415 -1 +1.563 2.434 0.0743 0.8415 -0.9983 +1.514 2.358 0.1369 0.8415 -0.9941 +1.465 2.282 0.1978 0.8415 -0.9875 +1.418 2.208 0.2561 0.8415 -0.9784 +1.372 2.136 0.3111 0.8415 -0.9668 +1.327 2.067 0.3621 0.8415 -0.9528 +1.284 2 0.4084 0.8415 -0.9365 +1.244 1.937 0.4493 0.8415 -0.9178 +1.205 1.877 0.4844 0.8415 -0.8968 +1.17 1.822 0.513 0.8415 -0.8735 +1.137 1.771 0.5347 0.8415 -0.8481 +1.107 1.724 0.5492 0.8415 -0.8206 +1.08 1.682 0.5561 0.8415 -0.791 +1.056 1.645 0.5553 0.8415 -0.7594 +1.036 1.614 0.5466 0.8415 -0.7259 +1.019 1.587 0.5299 0.8415 -0.6907 +1.006 1.566 0.5054 0.8415 -0.6536 +0.9958 1.551 0.4731 0.8415 -0.615 +0.9892 1.541 0.4333 0.8415 -0.5748 +0.9861 1.536 0.3861 0.8415 -0.5332 +0.9863 1.536 0.3321 0.8415 -0.4903 +0.9897 1.541 0.2717 0.8415 -0.4461 +0.9963 1.552 0.2053 0.8415 -0.4008 +1.006 1.566 0.1335 0.8415 -0.3545 +1.018 1.586 0.05709 0.8415 -0.3073 +1.033 1.609 -0.02333 0.8415 -0.2594 +1.051 1.636 -0.107 0.8415 -0.2108 +1.07 1.667 -0.1931 0.8415 -0.1617 +1.092 1.701 -0.2808 0.8415 -0.1122 +1.115 1.737 -0.3693 0.8415 -0.06235 +1.14 1.776 -0.4576 0.8415 -0.01239 +1.167 1.817 -0.545 0.8415 0.0376 +1.194 1.859 -0.6306 0.8415 0.0875 +1.222 1.903 -0.7134 0.8415 0.1372 +1.25 1.947 -0.7926 0.8415 0.1865 +1.279 1.991 -0.8675 0.8415 0.2354 +1.307 2.036 -0.9372 0.8415 0.2837 +1.335 2.08 -1.001 0.8415 0.3312 +1.363 2.123 -1.058 0.8415 0.378 +1.39 2.165 -1.108 0.8415 0.4238 +1.416 2.206 -1.15 0.8415 0.4685 +1.442 2.245 -1.184 0.8415 0.5121 +1.465 2.282 -1.209 0.8415 0.5544 +1.488 2.317 -1.225 0.8415 0.5953 +1.509 2.349 -1.231 0.8415 0.6347 +1.528 2.379 -1.228 0.8415 0.6725 +1.545 2.407 -1.216 0.8415 0.7087 +1.561 2.431 -1.194 0.8415 0.743 +1.575 2.453 -1.162 0.8415 0.7756 +1.587 2.472 -1.121 0.8415 0.8061 +1.598 2.489 -1.071 0.8415 0.8347 +1.607 2.502 -1.012 0.8415 0.8612 +1.614 2.513 -0.9448 0.8415 0.8855 +1.619 2.522 -0.8699 0.8415 0.9076 +1.623 2.528 -0.7879 0.8415 0.9275 +1.626 2.532 -0.6993 0.8415 0.945 +1.627 2.535 -0.6048 0.8415 0.9602 +1.628 2.535 -0.5054 0.8415 0.9729 +1.627 2.534 -0.4017 0.8415 0.9833 +1.626 2.533 -0.2947 0.8415 0.9911 +1.624 2.53 -0.1852 0.8415 0.9965 +1.622 2.527 -0.07411 0.8415 0.9994 +1.493 2.602 0 0.8674 1 +1.489 2.596 0.1114 0.8674 0.9988 +1.486 2.591 0.222 0.8674 0.995 +1.483 2.586 0.3306 0.8674 0.9888 +1.481 2.582 0.4365 0.8674 0.9801 +1.48 2.58 0.5389 0.8674 0.9689 +1.479 2.579 0.6367 0.8674 0.9553 +1.48 2.58 0.7293 0.8674 0.9394 +1.481 2.583 0.8159 0.8674 0.9211 +1.485 2.588 0.8958 0.8674 0.9004 +1.489 2.596 0.9684 0.8674 0.8776 +1.496 2.607 1.033 0.8674 0.8525 +1.503 2.621 1.09 0.8674 0.8253 +1.513 2.638 1.137 0.8674 0.7961 +1.524 2.657 1.176 0.8674 0.7648 +1.537 2.68 1.205 0.8674 0.7317 +1.552 2.706 1.225 0.8674 0.6967 +1.569 2.735 1.235 0.8674 0.66 +1.587 2.767 1.235 0.8674 0.6216 +1.607 2.801 1.227 0.8674 0.5817 +1.628 2.839 1.209 0.8674 0.5403 +1.651 2.878 1.182 0.8674 0.4976 +1.675 2.92 1.146 0.8674 0.4536 +1.7 2.963 1.103 0.8674 0.4085 +1.726 3.008 1.052 0.8674 0.3624 +1.752 3.054 0.9935 0.8674 0.3153 +1.779 3.101 0.929 0.8674 0.2675 +1.806 3.149 0.8589 0.8674 0.219 +1.833 3.196 0.7838 0.8674 0.17 +1.86 3.243 0.7046 0.8674 0.1205 +1.887 3.29 0.6221 0.8674 0.07074 +1.913 3.335 0.5371 0.8674 0.02079 +1.938 3.378 0.4505 0.8674 -0.0292 +1.961 3.419 0.3631 0.8674 -0.07912 +1.983 3.458 0.2759 0.8674 -0.1288 +2.004 3.493 0.1896 0.8674 -0.1782 +2.022 3.526 0.1052 0.8674 -0.2272 +2.039 3.554 0.02332 0.8674 -0.2756 +2.053 3.579 -0.05516 0.8674 -0.3233 +2.064 3.599 -0.1295 0.8674 -0.3702 +2.073 3.614 -0.1991 0.8674 -0.4161 +2.079 3.624 -0.2633 0.8674 -0.4611 +2.082 3.629 -0.3215 0.8674 -0.5048 +2.082 3.629 -0.3733 0.8674 -0.5474 +2.078 3.623 -0.4182 0.8674 -0.5885 +2.072 3.611 -0.4559 0.8674 -0.6282 +2.062 3.594 -0.4861 0.8674 -0.6663 +2.048 3.571 -0.5087 0.8674 -0.7027 +2.032 3.542 -0.5235 0.8674 -0.7374 +2.012 3.508 -0.5305 0.8674 -0.7702 +1.99 3.468 -0.5298 0.8674 -0.8011 +1.964 3.423 -0.5216 0.8674 -0.8301 +1.935 3.373 -0.5061 0.8674 -0.8569 +1.904 3.318 -0.4836 0.8674 -0.8816 +1.869 3.259 -0.4545 0.8674 -0.9041 +1.833 3.195 -0.4192 0.8674 -0.9243 +1.794 3.128 -0.3783 0.8674 -0.9422 +1.754 3.057 -0.3324 0.8674 -0.9578 +1.712 2.984 -0.2821 0.8674 -0.971 +1.668 2.908 -0.2281 0.8674 -0.9817 +1.623 2.83 -0.1711 0.8674 -0.99 +1.578 2.75 -0.1118 0.8674 -0.9958 +1.531 2.67 -0.05106 0.8674 -0.9991 +1.485 2.589 0.01034 0.8674 -1 +1.439 2.508 0.07159 0.8674 -0.9983 +1.392 2.428 0.1319 0.8674 -0.9941 +1.347 2.348 0.1905 0.8674 -0.9875 +1.303 2.271 0.2466 0.8674 -0.9784 +1.259 2.196 0.2995 0.8674 -0.9668 +1.218 2.123 0.3484 0.8674 -0.9528 +1.178 2.053 0.3927 0.8674 -0.9365 +1.14 1.987 0.4317 0.8674 -0.9178 +1.104 1.925 0.465 0.8674 -0.8968 +1.071 1.867 0.4919 0.8674 -0.8735 +1.04 1.814 0.5121 0.8674 -0.8481 +1.013 1.765 0.5252 0.8674 -0.8206 +0.9879 1.722 0.5309 0.8674 -0.791 +0.9661 1.684 0.529 0.8674 -0.7594 +0.9476 1.652 0.5193 0.8674 -0.7259 +0.9322 1.625 0.5019 0.8674 -0.6907 +0.9201 1.604 0.4768 0.8674 -0.6536 +0.9113 1.589 0.444 0.8674 -0.615 +0.9058 1.579 0.4039 0.8674 -0.5748 +0.9035 1.575 0.3567 0.8674 -0.5332 +0.9043 1.577 0.3027 0.8674 -0.4903 +0.9082 1.583 0.2424 0.8674 -0.4461 +0.9151 1.595 0.1763 0.8674 -0.4008 +0.9248 1.612 0.105 0.8674 -0.3545 +0.9371 1.634 0.02919 0.8674 -0.3073 +0.9519 1.66 -0.05051 0.8674 -0.2594 +0.969 1.689 -0.1333 0.8674 -0.2108 +0.9882 1.723 -0.2185 0.8674 -0.1617 +1.009 1.759 -0.3052 0.8674 -0.1122 +1.032 1.799 -0.3925 0.8674 -0.06235 +1.056 1.841 -0.4797 0.8674 -0.01239 +1.081 1.885 -0.5659 0.8674 0.0376 +1.107 1.93 -0.6501 0.8674 0.0875 +1.134 1.977 -0.7316 0.8674 0.1372 +1.161 2.024 -0.8095 0.8674 0.1865 +1.188 2.072 -0.883 0.8674 0.2354 +1.216 2.119 -0.9514 0.8674 0.2837 +1.242 2.166 -1.014 0.8674 0.3312 +1.269 2.212 -1.07 0.8674 0.378 +1.294 2.256 -1.118 0.8674 0.4238 +1.319 2.299 -1.159 0.8674 0.4685 +1.342 2.34 -1.192 0.8674 0.5121 +1.365 2.379 -1.216 0.8674 0.5544 +1.385 2.415 -1.231 0.8674 0.5953 +1.405 2.449 -1.236 0.8674 0.6347 +1.422 2.48 -1.232 0.8674 0.6725 +1.438 2.507 -1.219 0.8674 0.7087 +1.453 2.532 -1.196 0.8674 0.743 +1.465 2.554 -1.164 0.8674 0.7756 +1.476 2.573 -1.122 0.8674 0.8061 +1.485 2.589 -1.072 0.8674 0.8347 +1.492 2.601 -1.012 0.8674 0.8612 +1.498 2.611 -0.9449 0.8674 0.8855 +1.502 2.618 -0.8698 0.8674 0.9076 +1.505 2.623 -0.7875 0.8674 0.9275 +1.506 2.626 -0.6988 0.8674 0.945 +1.506 2.626 -0.6044 0.8674 0.9602 +1.505 2.624 -0.5049 0.8674 0.9729 +1.504 2.621 -0.4013 0.8674 0.9833 +1.501 2.617 -0.2943 0.8674 0.9911 +1.498 2.612 -0.1849 0.8674 0.9965 +1.495 2.606 -0.07402 0.8674 0.9994 +1.361 2.674 0 0.8912 1 +1.356 2.665 0.1112 0.8912 0.9988 +1.352 2.657 0.2216 0.8912 0.995 +1.349 2.65 0.33 0.8912 0.9888 +1.345 2.643 0.4358 0.8912 0.9801 +1.343 2.638 0.538 0.8912 0.9689 +1.341 2.635 0.6358 0.8912 0.9553 +1.341 2.634 0.7284 0.8912 0.9394 +1.341 2.635 0.8151 0.8912 0.9211 +1.343 2.639 0.8952 0.8912 0.9004 +1.347 2.646 0.968 0.8912 0.8776 +1.352 2.656 1.033 0.8912 0.8525 +1.358 2.668 1.09 0.8912 0.8253 +1.366 2.685 1.138 0.8912 0.7961 +1.376 2.704 1.177 0.8912 0.7648 +1.388 2.727 1.207 0.8912 0.7317 +1.401 2.753 1.227 0.8912 0.6967 +1.416 2.782 1.238 0.8912 0.66 +1.433 2.815 1.24 0.8912 0.6216 +1.451 2.851 1.232 0.8912 0.5817 +1.471 2.889 1.215 0.8912 0.5403 +1.492 2.931 1.189 0.8912 0.4976 +1.514 2.974 1.155 0.8912 0.4536 +1.537 3.02 1.113 0.8912 0.4085 +1.561 3.067 1.063 0.8912 0.3624 +1.586 3.116 1.006 0.8912 0.3153 +1.611 3.166 0.9431 0.8912 0.2675 +1.637 3.216 0.8743 0.8912 0.219 +1.662 3.266 0.8007 0.8912 0.17 +1.688 3.316 0.7228 0.8912 0.1205 +1.713 3.366 0.6417 0.8912 0.07074 +1.738 3.414 0.558 0.8912 0.02079 +1.761 3.46 0.4727 0.8912 -0.0292 +1.784 3.504 0.3866 0.8912 -0.07912 +1.805 3.546 0.3005 0.8912 -0.1288 +1.824 3.585 0.2153 0.8912 -0.1782 +1.842 3.62 0.1318 0.8912 -0.2272 +1.858 3.651 0.05075 0.8912 -0.2756 +1.872 3.678 -0.027 0.8912 -0.3233 +1.883 3.7 -0.1008 0.8912 -0.3702 +1.892 3.717 -0.1699 0.8912 -0.4161 +1.898 3.729 -0.2338 0.8912 -0.4611 +1.901 3.735 -0.2919 0.8912 -0.5048 +1.902 3.736 -0.3436 0.8912 -0.5474 +1.899 3.731 -0.3887 0.8912 -0.5885 +1.893 3.72 -0.4267 0.8912 -0.6282 +1.885 3.703 -0.4574 0.8912 -0.6663 +1.873 3.68 -0.4806 0.8912 -0.7027 +1.858 3.651 -0.4962 0.8912 -0.7374 +1.84 3.616 -0.5042 0.8912 -0.7702 +1.82 3.575 -0.5047 0.8912 -0.8011 +1.796 3.529 -0.4978 0.8912 -0.8301 +1.77 3.477 -0.4837 0.8912 -0.8569 +1.741 3.42 -0.4628 0.8912 -0.8816 +1.709 3.358 -0.4354 0.8912 -0.9041 +1.676 3.292 -0.402 0.8912 -0.9243 +1.64 3.222 -0.3631 0.8912 -0.9422 +1.603 3.149 -0.3192 0.8912 -0.9578 +1.563 3.072 -0.271 0.8912 -0.971 +1.523 2.992 -0.2192 0.8912 -0.9817 +1.482 2.911 -0.1644 0.8912 -0.99 +1.439 2.828 -0.1075 0.8912 -0.9958 +1.397 2.744 -0.0491 0.8912 -0.9991 +1.354 2.659 0.00994 0.8912 -1 +1.311 2.575 0.06885 0.8912 -0.9983 +1.268 2.491 0.1268 0.8912 -0.9941 +1.226 2.409 0.1831 0.8912 -0.9875 +1.185 2.328 0.237 0.8912 -0.9784 +1.145 2.249 0.2877 0.8912 -0.9668 +1.106 2.174 0.3345 0.8912 -0.9528 +1.069 2.101 0.3767 0.8912 -0.9365 +1.034 2.032 0.4139 0.8912 -0.9178 +1.001 1.968 0.4453 0.8912 -0.8968 +0.9709 1.908 0.4706 0.8912 -0.8735 +0.9428 1.852 0.4892 0.8912 -0.8481 +0.9174 1.802 0.5009 0.8912 -0.8206 +0.8947 1.758 0.5054 0.8912 -0.791 +0.8749 1.719 0.5024 0.8912 -0.7594 +0.8581 1.686 0.4918 0.8912 -0.7259 +0.8443 1.659 0.4736 0.8912 -0.6907 +0.8336 1.638 0.4479 0.8912 -0.6536 +0.8259 1.623 0.4147 0.8912 -0.615 +0.8213 1.614 0.3743 0.8912 -0.5748 +0.8198 1.611 0.3269 0.8912 -0.5332 +0.8211 1.613 0.273 0.8912 -0.4903 +0.8254 1.622 0.2129 0.8912 -0.4461 +0.8324 1.635 0.1472 0.8912 -0.4008 +0.842 1.654 0.07646 0.8912 -0.3545 +0.8541 1.678 0.001266 0.8912 -0.3073 +0.8685 1.706 -0.07766 0.8912 -0.2594 +0.8851 1.739 -0.1596 0.8912 -0.2108 +0.9035 1.775 -0.2438 0.8912 -0.1617 +0.9237 1.815 -0.3294 0.8912 -0.1122 +0.9453 1.857 -0.4156 0.8912 -0.06235 +0.9682 1.902 -0.5015 0.8912 -0.01239 +0.9922 1.949 -0.5864 0.8912 0.0376 +1.017 1.998 -0.6693 0.8912 0.0875 +1.042 2.048 -0.7494 0.8912 0.1372 +1.068 2.098 -0.8259 0.8912 0.1865 +1.093 2.148 -0.8981 0.8912 0.2354 +1.119 2.198 -0.965 0.8912 0.2837 +1.144 2.248 -1.026 0.8912 0.3312 +1.169 2.296 -1.081 0.8912 0.378 +1.193 2.343 -1.128 0.8912 0.4238 +1.215 2.388 -1.168 0.8912 0.4685 +1.237 2.431 -1.199 0.8912 0.5121 +1.258 2.471 -1.222 0.8912 0.5544 +1.277 2.509 -1.236 0.8912 0.5953 +1.295 2.543 -1.24 0.8912 0.6347 +1.311 2.575 -1.235 0.8912 0.6725 +1.325 2.603 -1.221 0.8912 0.7087 +1.338 2.628 -1.198 0.8912 0.743 +1.349 2.65 -1.165 0.8912 0.7756 +1.358 2.668 -1.123 0.8912 0.8061 +1.366 2.683 -1.072 0.8912 0.8347 +1.372 2.695 -1.012 0.8912 0.8612 +1.376 2.704 -0.9443 0.8912 0.8855 +1.379 2.71 -0.869 0.8912 0.9076 +1.381 2.713 -0.7867 0.8912 0.9275 +1.381 2.713 -0.6979 0.8912 0.945 +1.38 2.711 -0.6035 0.8912 0.9602 +1.378 2.708 -0.5041 0.8912 0.9729 +1.375 2.702 -0.4006 0.8912 0.9833 +1.372 2.695 -0.2938 0.8912 0.9911 +1.368 2.688 -0.1846 0.8912 0.9965 +1.364 2.679 -0.07388 0.8912 0.9994 +1.225 2.738 0 0.9128 1 +1.22 2.727 0.111 0.9128 0.9988 +1.216 2.716 0.221 0.9128 0.995 +1.211 2.706 0.3293 0.9128 0.9888 +1.207 2.697 0.4348 0.9128 0.9801 +1.204 2.69 0.5369 0.9128 0.9689 +1.201 2.684 0.6346 0.9128 0.9553 +1.2 2.681 0.7271 0.9128 0.9394 +1.2 2.68 0.8138 0.9128 0.9211 +1.201 2.683 0.8939 0.9128 0.9004 +1.203 2.688 0.9669 0.9128 0.8776 +1.207 2.696 1.032 0.9128 0.8525 +1.212 2.708 1.089 0.9128 0.8253 +1.219 2.724 1.138 0.9128 0.7961 +1.227 2.743 1.177 0.9128 0.7648 +1.238 2.765 1.208 0.9128 0.7317 +1.249 2.792 1.229 0.9128 0.6967 +1.263 2.822 1.241 0.9128 0.66 +1.278 2.855 1.243 0.9128 0.6216 +1.294 2.892 1.236 0.9128 0.5817 +1.312 2.931 1.221 0.9128 0.5403 +1.331 2.974 1.196 0.9128 0.4976 +1.351 3.02 1.163 0.9128 0.4536 +1.373 3.067 1.122 0.9128 0.4085 +1.395 3.117 1.074 0.9128 0.3624 +1.418 3.168 1.018 0.9128 0.3153 +1.441 3.22 0.9566 0.9128 0.2675 +1.465 3.274 0.8893 0.9128 0.219 +1.489 3.327 0.817 0.9128 0.17 +1.513 3.38 0.7406 0.9128 0.1205 +1.536 3.432 0.6609 0.9128 0.07074 +1.559 3.483 0.5786 0.9128 0.02079 +1.581 3.533 0.4946 0.9128 -0.0292 +1.602 3.58 0.4098 0.9128 -0.07912 +1.622 3.625 0.3249 0.9128 -0.1288 +1.641 3.666 0.2408 0.9128 -0.1782 +1.658 3.704 0.1583 0.9128 -0.2272 +1.673 3.738 0.07814 0.9128 -0.2756 +1.686 3.767 0.001164 0.9128 -0.3233 +1.697 3.791 -0.07197 0.9128 -0.3702 +1.705 3.81 -0.1406 0.9128 -0.4161 +1.711 3.824 -0.2041 0.9128 -0.4611 +1.715 3.832 -0.262 0.9128 -0.5048 +1.716 3.834 -0.3137 0.9128 -0.5474 +1.714 3.83 -0.3589 0.9128 -0.5885 +1.709 3.82 -0.3972 0.9128 -0.6282 +1.702 3.803 -0.4284 0.9128 -0.6663 +1.691 3.78 -0.4522 0.9128 -0.7027 +1.678 3.75 -0.4686 0.9128 -0.7374 +1.662 3.714 -0.4776 0.9128 -0.7702 +1.644 3.673 -0.4793 0.9128 -0.8011 +1.622 3.625 -0.4736 0.9128 -0.8301 +1.598 3.572 -0.461 0.9128 -0.8569 +1.572 3.513 -0.4417 0.9128 -0.8816 +1.544 3.449 -0.4161 0.9128 -0.9041 +1.513 3.381 -0.3845 0.9128 -0.9243 +1.481 3.308 -0.3476 0.9128 -0.9422 +1.446 3.232 -0.3058 0.9128 -0.9578 +1.411 3.152 -0.2598 0.9128 -0.971 +1.374 3.07 -0.2102 0.9128 -0.9817 +1.336 2.985 -0.1577 0.9128 -0.99 +1.297 2.899 -0.1031 0.9128 -0.9958 +1.258 2.811 -0.04711 0.9128 -0.9991 +1.219 2.724 0.009538 0.9128 -1 +1.18 2.636 0.06606 0.9128 -0.9983 +1.141 2.549 0.1217 0.9128 -0.9941 +1.102 2.463 0.1757 0.9128 -0.9875 +1.065 2.379 0.2272 0.9128 -0.9784 +1.028 2.297 0.2757 0.9128 -0.9668 +0.9929 2.219 0.3203 0.9128 -0.9528 +0.9593 2.143 0.3606 0.9128 -0.9365 +0.9274 2.072 0.3958 0.9128 -0.9178 +0.8975 2.005 0.4254 0.9128 -0.8968 +0.8697 1.943 0.4489 0.9128 -0.8735 +0.8442 1.886 0.466 0.9128 -0.8481 +0.8212 1.835 0.4763 0.9128 -0.8206 +0.8007 1.789 0.4795 0.9128 -0.791 +0.7829 1.749 0.4754 0.9128 -0.7594 +0.7679 1.716 0.4639 0.9128 -0.7259 +0.7556 1.688 0.445 0.9128 -0.6907 +0.7462 1.667 0.4187 0.9128 -0.6536 +0.7397 1.653 0.3851 0.9128 -0.615 +0.736 1.645 0.3444 0.9128 -0.5748 +0.735 1.642 0.297 0.9128 -0.5332 +0.7368 1.646 0.2432 0.9128 -0.4903 +0.7413 1.656 0.1834 0.9128 -0.4461 +0.7483 1.672 0.1181 0.9128 -0.4008 +0.7576 1.693 0.04784 0.9128 -0.3545 +0.7693 1.719 -0.02666 0.9128 -0.3073 +0.7831 1.75 -0.1048 0.9128 -0.2594 +0.7988 1.785 -0.1858 0.9128 -0.2108 +0.8163 1.824 -0.2689 0.9128 -0.1617 +0.8353 1.866 -0.3534 0.9128 -0.1122 +0.8557 1.912 -0.4383 0.9128 -0.06235 +0.8772 1.96 -0.523 0.9128 -0.01239 +0.8996 2.01 -0.6065 0.9128 0.0376 +0.9227 2.062 -0.688 0.9128 0.0875 +0.9463 2.114 -0.7668 0.9128 0.1372 +0.9701 2.168 -0.8418 0.9128 0.1865 +0.9939 2.221 -0.9125 0.9128 0.2354 +1.018 2.274 -0.978 0.9128 0.2837 +1.041 2.326 -1.038 0.9128 0.3312 +1.064 2.377 -1.091 0.9128 0.378 +1.086 2.426 -1.137 0.9128 0.4238 +1.107 2.473 -1.175 0.9128 0.4685 +1.126 2.517 -1.205 0.9128 0.5121 +1.145 2.559 -1.227 0.9128 0.5544 +1.163 2.598 -1.24 0.9128 0.5953 +1.178 2.633 -1.243 0.9128 0.6347 +1.193 2.666 -1.238 0.9128 0.6725 +1.206 2.694 -1.223 0.9128 0.7087 +1.217 2.719 -1.199 0.9128 0.743 +1.227 2.741 -1.165 0.9128 0.7756 +1.235 2.759 -1.122 0.9128 0.8061 +1.241 2.773 -1.071 0.9128 0.8347 +1.246 2.784 -1.011 0.9128 0.8612 +1.249 2.791 -0.9432 0.9128 0.8855 +1.251 2.795 -0.8677 0.9128 0.9076 +1.251 2.796 -0.7853 0.9128 0.9275 +1.251 2.795 -0.6966 0.9128 0.945 +1.249 2.791 -0.6022 0.9128 0.9602 +1.246 2.784 -0.503 0.9128 0.9729 +1.243 2.777 -0.3997 0.9128 0.9833 +1.238 2.767 -0.2931 0.9128 0.9911 +1.234 2.757 -0.1842 0.9128 0.9965 +1.229 2.746 -0.0737 0.9128 0.9994 +1.087 2.796 0 0.932 1 +1.082 2.782 0.1106 0.932 0.9988 +1.076 2.768 0.2203 0.932 0.995 +1.071 2.756 0.3283 0.932 0.9888 +1.067 2.744 0.4336 0.932 0.9801 +1.063 2.734 0.5354 0.932 0.9689 +1.06 2.726 0.6329 0.932 0.9553 +1.058 2.721 0.7253 0.932 0.9394 +1.057 2.718 0.8119 0.932 0.9211 +1.057 2.718 0.8921 0.932 0.9004 +1.058 2.722 0.9652 0.932 0.8776 +1.061 2.729 1.031 0.932 0.8525 +1.065 2.74 1.088 0.932 0.8253 +1.071 2.755 1.137 0.932 0.7961 +1.078 2.773 1.177 0.932 0.7648 +1.087 2.796 1.208 0.932 0.7317 +1.097 2.822 1.23 0.932 0.6967 +1.109 2.852 1.243 0.932 0.66 +1.122 2.886 1.246 0.932 0.6216 +1.137 2.924 1.24 0.932 0.5817 +1.153 2.965 1.226 0.932 0.5403 +1.17 3.009 1.202 0.932 0.4976 +1.188 3.056 1.17 0.932 0.4536 +1.207 3.106 1.131 0.932 0.4085 +1.228 3.158 1.084 0.932 0.3624 +1.248 3.211 1.03 0.932 0.3153 +1.27 3.266 0.9695 0.932 0.2675 +1.291 3.322 0.9037 0.932 0.219 +1.313 3.378 0.8329 0.932 0.17 +1.335 3.434 0.758 0.932 0.1205 +1.357 3.489 0.6797 0.932 0.07074 +1.378 3.543 0.5988 0.932 0.02079 +1.398 3.596 0.5162 0.932 -0.0292 +1.417 3.646 0.4327 0.932 -0.07912 +1.436 3.693 0.349 0.932 -0.1288 +1.453 3.738 0.2661 0.932 -0.1782 +1.469 3.778 0.1846 0.932 -0.2272 +1.483 3.814 0.1055 0.932 -0.2756 +1.495 3.846 0.02933 0.932 -0.3233 +1.506 3.873 -0.04311 0.932 -0.3702 +1.514 3.894 -0.1112 0.932 -0.4161 +1.52 3.909 -0.1743 0.932 -0.4611 +1.524 3.919 -0.2319 0.932 -0.5048 +1.525 3.922 -0.2836 0.932 -0.5474 +1.524 3.919 -0.3289 0.932 -0.5885 +1.52 3.909 -0.3675 0.932 -0.6282 +1.513 3.893 -0.3991 0.932 -0.6663 +1.504 3.87 -0.4235 0.932 -0.7027 +1.493 3.84 -0.4408 0.932 -0.7374 +1.479 3.804 -0.4507 0.932 -0.7702 +1.462 3.761 -0.4535 0.932 -0.8011 +1.443 3.712 -0.4492 0.932 -0.8301 +1.422 3.658 -0.4381 0.932 -0.8569 +1.399 3.597 -0.4204 0.932 -0.8816 +1.373 3.532 -0.3965 0.932 -0.9041 +1.346 3.461 -0.3668 0.932 -0.9243 +1.316 3.386 -0.3319 0.932 -0.9422 +1.286 3.307 -0.2922 0.932 -0.9578 +1.254 3.225 -0.2484 0.932 -0.971 +1.221 3.139 -0.2011 0.932 -0.9817 +1.186 3.052 -0.1509 0.932 -0.99 +1.152 2.962 -0.0987 0.932 -0.9958 +1.117 2.872 -0.0451 0.932 -0.9991 +1.081 2.781 0.00913 0.932 -1 +1.046 2.69 0.06323 0.932 -0.9983 +1.011 2.6 0.1165 0.932 -0.9941 +0.9762 2.511 0.1681 0.932 -0.9875 +0.9424 2.424 0.2173 0.932 -0.9784 +0.9096 2.34 0.2635 0.932 -0.9668 +0.8779 2.258 0.306 0.932 -0.9528 +0.8477 2.181 0.3442 0.932 -0.9365 +0.8192 2.107 0.3774 0.932 -0.9178 +0.7923 2.038 0.4052 0.932 -0.8968 +0.7675 1.974 0.427 0.932 -0.8735 +0.7447 1.916 0.4426 0.932 -0.8481 +0.7242 1.863 0.4514 0.932 -0.8206 +0.706 1.816 0.4534 0.932 -0.791 +0.6903 1.776 0.4482 0.932 -0.7594 +0.6771 1.742 0.4358 0.932 -0.7259 +0.6664 1.714 0.4161 0.932 -0.6907 +0.6583 1.693 0.3892 0.932 -0.6536 +0.6528 1.679 0.3552 0.932 -0.615 +0.6499 1.672 0.3144 0.932 -0.5748 +0.6495 1.671 0.2669 0.932 -0.5332 +0.6516 1.676 0.2132 0.932 -0.4903 +0.656 1.687 0.1537 0.932 -0.4461 +0.6628 1.705 0.08882 0.932 -0.4008 +0.6718 1.728 0.0192 0.932 -0.3545 +0.6828 1.756 -0.05456 0.932 -0.3073 +0.6957 1.79 -0.1318 0.932 -0.2594 +0.7104 1.827 -0.2118 0.932 -0.2108 +0.7267 1.869 -0.2939 0.932 -0.1617 +0.7443 1.914 -0.3771 0.932 -0.1122 +0.7631 1.963 -0.4608 0.932 -0.06235 +0.783 2.014 -0.5442 0.932 -0.01239 +0.8036 2.067 -0.6263 0.932 0.0376 +0.8248 2.122 -0.7064 0.932 0.0875 +0.8464 2.177 -0.7836 0.932 0.1372 +0.8682 2.233 -0.8572 0.932 0.1865 +0.89 2.289 -0.9264 0.932 0.2354 +0.9116 2.345 -0.9904 0.932 0.2837 +0.9328 2.399 -1.049 0.932 0.3312 +0.9534 2.452 -1.1 0.932 0.378 +0.9733 2.503 -1.145 0.932 0.4238 +0.9922 2.552 -1.182 0.932 0.4685 +1.01 2.598 -1.211 0.932 0.5121 +1.027 2.642 -1.232 0.932 0.5544 +1.042 2.681 -1.243 0.932 0.5953 +1.057 2.718 -1.246 0.932 0.6347 +1.069 2.751 -1.239 0.932 0.6725 +1.081 2.78 -1.224 0.932 0.7087 +1.09 2.805 -1.199 0.932 0.743 +1.099 2.826 -1.165 0.932 0.7756 +1.105 2.843 -1.121 0.932 0.8061 +1.11 2.856 -1.07 0.932 0.8347 +1.114 2.866 -1.01 0.932 0.8612 +1.116 2.872 -0.9414 0.932 0.8855 +1.117 2.874 -0.8659 0.932 0.9076 +1.117 2.873 -0.7835 0.932 0.9275 +1.116 2.87 -0.6948 0.932 0.945 +1.113 2.864 -0.6006 0.932 0.9602 +1.11 2.855 -0.5016 0.932 0.9729 +1.106 2.845 -0.3985 0.932 0.9833 +1.101 2.832 -0.2922 0.932 0.9911 +1.096 2.819 -0.1836 0.932 0.9965 +1.091 2.805 -0.07347 0.932 0.9994 +0.946 2.847 0 0.949 1 +0.9403 2.83 0.1102 0.949 0.9988 +0.9348 2.813 0.2195 0.949 0.995 +0.9297 2.798 0.3271 0.949 0.9888 +0.9249 2.784 0.432 0.949 0.9801 +0.9208 2.771 0.5336 0.949 0.9689 +0.9174 2.761 0.6308 0.949 0.9553 +0.9148 2.753 0.7231 0.949 0.9394 +0.9132 2.748 0.8096 0.949 0.9211 +0.9127 2.747 0.8897 0.949 0.9004 +0.9133 2.749 0.9629 0.949 0.8776 +0.9152 2.754 1.029 0.949 0.8525 +0.9184 2.764 1.086 0.949 0.8253 +0.923 2.778 1.136 0.949 0.7961 +0.9289 2.796 1.176 0.949 0.7648 +0.9362 2.818 1.208 0.949 0.7317 +0.945 2.844 1.23 0.949 0.6967 +0.9551 2.875 1.244 0.949 0.66 +0.9666 2.909 1.248 0.949 0.6216 +0.9794 2.948 1.243 0.949 0.5817 +0.9934 2.99 1.23 0.949 0.5403 +1.009 3.035 1.208 0.949 0.4976 +1.025 3.084 1.177 0.949 0.4536 +1.042 3.135 1.139 0.949 0.4085 +1.06 3.189 1.093 0.949 0.3624 +1.078 3.245 1.041 0.949 0.3153 +1.097 3.302 0.9818 0.949 0.2675 +1.117 3.361 0.9175 0.949 0.219 +1.136 3.419 0.8482 0.949 0.17 +1.156 3.478 0.7749 0.949 0.1205 +1.175 3.536 0.6981 0.949 0.07074 +1.194 3.593 0.6187 0.949 0.02079 +1.212 3.649 0.5375 0.949 -0.0292 +1.23 3.702 0.4553 0.949 -0.07912 +1.247 3.752 0.373 0.949 -0.1288 +1.262 3.799 0.2913 0.949 -0.1782 +1.277 3.842 0.2109 0.949 -0.2272 +1.29 3.881 0.1328 0.949 -0.2756 +1.301 3.915 0.05748 0.949 -0.3233 +1.31 3.944 -0.01422 0.949 -0.3702 +1.318 3.967 -0.08171 0.949 -0.4161 +1.324 3.984 -0.1444 0.949 -0.4611 +1.328 3.995 -0.2018 0.949 -0.5048 +1.329 4 -0.2533 0.949 -0.5474 +1.328 3.998 -0.2987 0.949 -0.5885 +1.325 3.989 -0.3375 0.949 -0.6282 +1.32 3.973 -0.3695 0.949 -0.6663 +1.312 3.95 -0.3946 0.949 -0.7027 +1.302 3.92 -0.4126 0.949 -0.7374 +1.29 3.883 -0.4236 0.949 -0.7702 +1.276 3.84 -0.4275 0.949 -0.8011 +1.259 3.79 -0.4245 0.949 -0.8301 +1.241 3.734 -0.4148 0.949 -0.8569 +1.22 3.672 -0.3988 0.949 -0.8816 +1.198 3.605 -0.3766 0.949 -0.9041 +1.174 3.532 -0.3489 0.949 -0.9243 +1.148 3.455 -0.3159 0.949 -0.9422 +1.121 3.374 -0.2784 0.949 -0.9578 +1.093 3.289 -0.2368 0.949 -0.971 +1.064 3.201 -0.1918 0.949 -0.9817 +1.034 3.111 -0.144 0.949 -0.99 +1.003 3.018 -0.09421 0.949 -0.9958 +0.9719 2.925 -0.04305 0.949 -0.9991 +0.9407 2.831 0.008716 0.949 -1 +0.9095 2.737 0.06036 0.949 -0.9983 +0.8786 2.644 0.1111 0.949 -0.9941 +0.8482 2.553 0.1604 0.949 -0.9875 +0.8184 2.463 0.2073 0.949 -0.9784 +0.7895 2.376 0.2512 0.949 -0.9668 +0.7616 2.292 0.2915 0.949 -0.9528 +0.7351 2.212 0.3275 0.949 -0.9365 +0.7099 2.137 0.3588 0.949 -0.9178 +0.6864 2.066 0.3847 0.949 -0.8968 +0.6646 2 0.4049 0.949 -0.8735 +0.6447 1.94 0.4188 0.949 -0.8481 +0.6268 1.886 0.4263 0.949 -0.8206 +0.6109 1.839 0.427 0.949 -0.791 +0.5973 1.798 0.4207 0.949 -0.7594 +0.5859 1.763 0.4074 0.949 -0.7259 +0.5767 1.736 0.387 0.949 -0.6907 +0.5699 1.715 0.3595 0.949 -0.6536 +0.5654 1.702 0.3252 0.949 -0.615 +0.5632 1.695 0.2841 0.949 -0.5748 +0.5632 1.695 0.2366 0.949 -0.5332 +0.5654 1.702 0.1831 0.949 -0.4903 +0.5698 1.715 0.1239 0.949 -0.4461 +0.5762 1.734 0.05952 0.949 -0.4008 +0.5845 1.759 -0.009453 0.949 -0.3545 +0.5947 1.79 -0.08243 0.949 -0.3073 +0.6066 1.826 -0.1588 0.949 -0.2594 +0.62 1.866 -0.2377 0.949 -0.2108 +0.6347 1.91 -0.3186 0.949 -0.1617 +0.6507 1.958 -0.4007 0.949 -0.1122 +0.6678 2.01 -0.483 0.949 -0.06235 +0.6857 2.064 -0.565 0.949 -0.01239 +0.7043 2.12 -0.6456 0.949 0.0376 +0.7234 2.177 -0.7242 0.949 0.0875 +0.7428 2.236 -0.8 0.949 0.1372 +0.7624 2.294 -0.872 0.949 0.1865 +0.7818 2.353 -0.9397 0.949 0.2354 +0.8011 2.411 -1.002 0.949 0.2837 +0.82 2.468 -1.059 0.949 0.3312 +0.8383 2.523 -1.109 0.949 0.378 +0.856 2.576 -1.153 0.949 0.4238 +0.8728 2.627 -1.188 0.949 0.4685 +0.8886 2.674 -1.216 0.949 0.5121 +0.9034 2.719 -1.235 0.949 0.5544 +0.917 2.76 -1.246 0.949 0.5953 +0.9293 2.797 -1.248 0.949 0.6347 +0.9404 2.83 -1.24 0.949 0.6725 +0.95 2.859 -1.224 0.949 0.7087 +0.9583 2.884 -1.198 0.949 0.743 +0.9652 2.905 -1.163 0.949 0.7756 +0.9707 2.921 -1.12 0.949 0.8061 +0.9748 2.934 -1.068 0.949 0.8347 +0.9775 2.942 -1.007 0.949 0.8612 +0.979 2.946 -0.9391 0.949 0.8855 +0.9792 2.947 -0.8635 0.949 0.9076 +0.9783 2.944 -0.7812 0.949 0.9275 +0.9764 2.938 -0.6926 0.949 0.945 +0.9735 2.93 -0.5986 0.949 0.9602 +0.9698 2.919 -0.4999 0.949 0.9729 +0.9655 2.906 -0.3971 0.949 0.9833 +0.9606 2.891 -0.2912 0.949 0.9911 +0.9553 2.875 -0.1829 0.949 0.9965 +0.9497 2.858 -0.0732 0.949 0.9994 +0.8025 2.891 0 0.9636 1 +0.797 2.871 0.1097 0.9636 0.9988 +0.7916 2.851 0.2186 0.9636 0.995 +0.7865 2.833 0.3257 0.9636 0.9888 +0.7818 2.816 0.4302 0.9636 0.9801 +0.7776 2.801 0.5314 0.9636 0.9689 +0.774 2.788 0.6283 0.9636 0.9553 +0.7712 2.778 0.7204 0.9636 0.9394 +0.7693 2.771 0.8067 0.9636 0.9211 +0.7683 2.768 0.8868 0.9636 0.9004 +0.7684 2.768 0.96 0.9636 0.8776 +0.7695 2.772 1.026 0.9636 0.8525 +0.7719 2.78 1.084 0.9636 0.8253 +0.7754 2.793 1.133 0.9636 0.7961 +0.7802 2.81 1.174 0.9636 0.7648 +0.7862 2.832 1.207 0.9636 0.7317 +0.7934 2.858 1.23 0.9636 0.6967 +0.8019 2.889 1.244 0.9636 0.66 +0.8117 2.924 1.249 0.9636 0.6216 +0.8225 2.963 1.246 0.9636 0.5817 +0.8345 3.006 1.233 0.9636 0.5403 +0.8475 3.053 1.212 0.9636 0.4976 +0.8614 3.103 1.183 0.9636 0.4536 +0.8762 3.156 1.146 0.9636 0.4085 +0.8916 3.212 1.102 0.9636 0.3624 +0.9077 3.27 1.051 0.9636 0.3153 +0.9242 3.329 0.9935 0.9636 0.2675 +0.9411 3.39 0.9307 0.9636 0.219 +0.9581 3.451 0.8631 0.9636 0.17 +0.9752 3.513 0.7912 0.9636 0.1205 +0.9921 3.574 0.716 0.9636 0.07074 +1.009 3.633 0.6382 0.9636 0.02079 +1.025 3.691 0.5585 0.9636 -0.0292 +1.04 3.747 0.4777 0.9636 -0.07912 +1.055 3.8 0.3967 0.9636 -0.1288 +1.069 3.85 0.3162 0.9636 -0.1782 +1.082 3.896 0.2371 0.9636 -0.2272 +1.093 3.937 0.16 0.9636 -0.2756 +1.103 3.973 0.0856 0.9636 -0.3233 +1.112 4.004 0.01467 0.9636 -0.3702 +1.119 4.029 -0.05218 0.9636 -0.4161 +1.124 4.049 -0.1144 0.9636 -0.4611 +1.127 4.061 -0.1714 0.9636 -0.5048 +1.129 4.067 -0.2229 0.9636 -0.5474 +1.129 4.066 -0.2683 0.9636 -0.5885 +1.126 4.058 -0.3073 0.9636 -0.6282 +1.122 4.042 -0.3398 0.9636 -0.6663 +1.116 4.02 -0.3654 0.9636 -0.7027 +1.108 3.99 -0.3842 0.9636 -0.7374 +1.097 3.953 -0.3961 0.9636 -0.7702 +1.085 3.909 -0.4012 0.9636 -0.8011 +1.071 3.858 -0.3995 0.9636 -0.8301 +1.055 3.801 -0.3913 0.9636 -0.8569 +1.038 3.738 -0.3769 0.9636 -0.8816 +1.019 3.669 -0.3565 0.9636 -0.9041 +0.998 3.595 -0.3307 0.9636 -0.9243 +0.976 3.516 -0.2998 0.9636 -0.9422 +0.9529 3.432 -0.2644 0.9636 -0.9578 +0.9287 3.345 -0.2251 0.9636 -0.971 +0.9036 3.255 -0.1824 0.9636 -0.9817 +0.8778 3.162 -0.137 0.9636 -0.99 +0.8515 3.067 -0.08966 0.9636 -0.9958 +0.8248 2.971 -0.04098 0.9636 -0.9991 +0.798 2.874 0.008297 0.9636 -1 +0.7712 2.778 0.05746 0.9636 -0.9983 +0.7446 2.682 0.1058 0.9636 -0.9941 +0.7185 2.588 0.1525 0.9636 -0.9875 +0.6929 2.496 0.1971 0.9636 -0.9784 +0.6681 2.407 0.2387 0.9636 -0.9668 +0.6442 2.321 0.2768 0.9636 -0.9528 +0.6214 2.238 0.3107 0.9636 -0.9365 +0.5999 2.161 0.34 0.9636 -0.9178 +0.5798 2.088 0.364 0.9636 -0.8968 +0.5612 2.021 0.3824 0.9636 -0.8735 +0.5442 1.96 0.3948 0.9636 -0.8481 +0.5289 1.905 0.4008 0.9636 -0.8206 +0.5155 1.857 0.4003 0.9636 -0.791 +0.504 1.815 0.3929 0.9636 -0.7594 +0.4944 1.781 0.3787 0.9636 -0.7259 +0.4868 1.753 0.3576 0.9636 -0.6907 +0.4812 1.733 0.3296 0.9636 -0.6536 +0.4776 1.72 0.2949 0.9636 -0.615 +0.476 1.714 0.2537 0.9636 -0.5748 +0.4763 1.716 0.2062 0.9636 -0.5332 +0.4785 1.724 0.1529 0.9636 -0.4903 +0.4826 1.739 0.09403 0.9636 -0.4461 +0.4885 1.76 0.03019 0.9636 -0.4008 +0.496 1.787 -0.0381 0.9636 -0.3545 +0.5052 1.82 -0.1103 0.9636 -0.3073 +0.5157 1.858 -0.1856 0.9636 -0.2594 +0.5276 1.901 -0.2635 0.9636 -0.2108 +0.5407 1.948 -0.3432 0.9636 -0.1617 +0.5548 1.998 -0.4239 0.9636 -0.1122 +0.5698 2.053 -0.5049 0.9636 -0.06235 +0.5856 2.109 -0.5854 0.9636 -0.01239 +0.6019 2.168 -0.6646 0.9636 0.0376 +0.6186 2.228 -0.7416 0.9636 0.0875 +0.6356 2.289 -0.8158 0.9636 0.1372 +0.6526 2.351 -0.8863 0.9636 0.1865 +0.6696 2.412 -0.9524 0.9636 0.2354 +0.6864 2.472 -1.013 0.9636 0.2837 +0.7028 2.531 -1.069 0.9636 0.3312 +0.7186 2.589 -1.117 0.9636 0.378 +0.7339 2.644 -1.159 0.9636 0.4238 +0.7484 2.696 -1.194 0.9636 0.4685 +0.762 2.745 -1.22 0.9636 0.5121 +0.7746 2.79 -1.238 0.9636 0.5544 +0.7863 2.832 -1.248 0.9636 0.5953 +0.7967 2.87 -1.249 0.9636 0.6347 +0.806 2.903 -1.24 0.9636 0.6725 +0.8141 2.933 -1.223 0.9636 0.7087 +0.821 2.957 -1.197 0.9636 0.743 +0.8266 2.977 -1.162 0.9636 0.7756 +0.8309 2.993 -1.118 0.9636 0.8061 +0.8341 3.004 -1.065 0.9636 0.8347 +0.836 3.011 -1.005 0.9636 0.8612 +0.8368 3.014 -0.9362 0.9636 0.8855 +0.8365 3.013 -0.8606 0.9636 0.9076 +0.8352 3.008 -0.7784 0.9636 0.9275 +0.8329 3 -0.69 0.9636 0.945 +0.8299 2.989 -0.5963 0.9636 0.9602 +0.8261 2.976 -0.4978 0.9636 0.9729 +0.8217 2.96 -0.3954 0.9636 0.9833 +0.8168 2.942 -0.2899 0.9636 0.9911 +0.8116 2.924 -0.1821 0.9636 0.9965 +0.8062 2.904 -0.07288 0.9636 0.9994 +0.657 2.927 0 0.9757 1 +0.6519 2.904 0.1092 0.9757 0.9988 +0.6469 2.882 0.2175 0.9757 0.995 +0.6421 2.861 0.3241 0.9757 0.9888 +0.6377 2.841 0.4282 0.9757 0.9801 +0.6337 2.823 0.5289 0.9757 0.9689 +0.6303 2.808 0.6255 0.9757 0.9553 +0.6275 2.796 0.7172 0.9757 0.9394 +0.6254 2.786 0.8034 0.9757 0.9211 +0.6242 2.781 0.8834 0.9757 0.9004 +0.6238 2.779 0.9565 0.9757 0.8776 +0.6244 2.782 1.022 0.9757 0.8525 +0.626 2.789 1.08 0.9757 0.8253 +0.6286 2.801 1.13 0.9757 0.7961 +0.6323 2.817 1.172 0.9757 0.7648 +0.6371 2.838 1.205 0.9757 0.7317 +0.6429 2.864 1.229 0.9757 0.6967 +0.6498 2.895 1.244 0.9757 0.66 +0.6577 2.93 1.25 0.9757 0.6216 +0.6666 2.97 1.247 0.9757 0.5817 +0.6765 3.014 1.236 0.9757 0.5403 +0.6872 3.062 1.216 0.9757 0.4976 +0.6988 3.113 1.188 0.9757 0.4536 +0.711 3.168 1.153 0.9757 0.4085 +0.7239 3.225 1.11 0.9757 0.3624 +0.7374 3.285 1.06 0.9757 0.3153 +0.7512 3.347 1.005 0.9757 0.2675 +0.7654 3.41 0.9434 0.9757 0.219 +0.7797 3.474 0.8773 0.9757 0.17 +0.794 3.537 0.8071 0.9757 0.1205 +0.8083 3.601 0.7335 0.9757 0.07074 +0.8223 3.663 0.6572 0.9757 0.02079 +0.8359 3.724 0.5791 0.9757 -0.0292 +0.8491 3.783 0.4998 0.9757 -0.07912 +0.8615 3.838 0.4202 0.9757 -0.1288 +0.8733 3.891 0.341 0.9757 -0.1782 +0.8841 3.939 0.2631 0.9757 -0.2272 +0.8939 3.982 0.1871 0.9757 -0.2756 +0.9026 4.021 0.1137 0.9757 -0.3233 +0.91 4.054 0.04356 0.9757 -0.3702 +0.9161 4.081 -0.02262 0.9757 -0.4161 +0.9207 4.102 -0.08432 0.9757 -0.4611 +0.9239 4.116 -0.141 0.9757 -0.5048 +0.9255 4.123 -0.1923 0.9757 -0.5474 +0.9255 4.123 -0.2377 0.9757 -0.5885 +0.9238 4.116 -0.2769 0.9757 -0.6282 +0.9205 4.101 -0.3098 0.9757 -0.6663 +0.9155 4.079 -0.336 0.9757 -0.7027 +0.9088 4.049 -0.3556 0.9757 -0.7374 +0.9005 4.012 -0.3685 0.9757 -0.7702 +0.8906 3.968 -0.3747 0.9757 -0.8011 +0.8791 3.916 -0.3743 0.9757 -0.8301 +0.8661 3.859 -0.3676 0.9757 -0.8569 +0.8516 3.794 -0.3548 0.9757 -0.8816 +0.8359 3.724 -0.3362 0.9757 -0.9041 +0.8188 3.648 -0.3123 0.9757 -0.9243 +0.8007 3.567 -0.2835 0.9757 -0.9422 +0.7815 3.482 -0.2503 0.9757 -0.9578 +0.7615 3.393 -0.2132 0.9757 -0.971 +0.7407 3.3 -0.1729 0.9757 -0.9817 +0.7194 3.205 -0.13 0.9757 -0.99 +0.6976 3.108 -0.08506 0.9757 -0.9958 +0.6755 3.01 -0.03888 0.9757 -0.9991 +0.6533 2.911 0.007873 0.9757 -1 +0.6311 2.812 0.05451 0.9757 -0.9983 +0.6091 2.714 0.1003 0.9757 -0.9941 +0.5874 2.617 0.1446 0.9757 -0.9875 +0.5662 2.523 0.1868 0.9757 -0.9784 +0.5457 2.431 0.2261 0.9757 -0.9668 +0.526 2.343 0.2619 0.9757 -0.9528 +0.5071 2.259 0.2937 0.9757 -0.9365 +0.4894 2.18 0.3209 0.9757 -0.9178 +0.4727 2.106 0.3431 0.9757 -0.8968 +0.4574 2.038 0.3598 0.9757 -0.8735 +0.4434 1.976 0.3705 0.9757 -0.8481 +0.4309 1.92 0.3751 0.9757 -0.8206 +0.4199 1.871 0.3733 0.9757 -0.791 +0.4105 1.829 0.3649 0.9757 -0.7594 +0.4028 1.794 0.3498 0.9757 -0.7259 +0.3967 1.767 0.328 0.9757 -0.6907 +0.3922 1.747 0.2995 0.9757 -0.6536 +0.3895 1.735 0.2645 0.9757 -0.615 +0.3884 1.73 0.2231 0.9757 -0.5748 +0.3889 1.733 0.1757 0.9757 -0.5332 +0.391 1.742 0.1225 0.9757 -0.4903 +0.3947 1.759 0.06411 0.9757 -0.4461 +0.3999 1.781 0.0008393 0.9757 -0.4008 +0.4064 1.811 -0.06673 0.9757 -0.3545 +0.4143 1.846 -0.138 0.9757 -0.3073 +0.4233 1.886 -0.2124 0.9757 -0.2594 +0.4335 1.931 -0.2891 0.9757 -0.2108 +0.4446 1.981 -0.3676 0.9757 -0.1617 +0.4566 2.034 -0.4469 0.9757 -0.1122 +0.4693 2.091 -0.5265 0.9757 -0.06235 +0.4827 2.15 -0.6055 0.9757 -0.01239 +0.4964 2.212 -0.6831 0.9757 0.0376 +0.5106 2.275 -0.7586 0.9757 0.0875 +0.5248 2.338 -0.8312 0.9757 0.1372 +0.5392 2.402 -0.9 0.9757 0.1865 +0.5535 2.466 -0.9645 0.9757 0.2354 +0.5675 2.528 -1.024 0.9757 0.2837 +0.5812 2.59 -1.078 0.9757 0.3312 +0.5945 2.649 -1.125 0.9757 0.378 +0.6072 2.705 -1.165 0.9757 0.4238 +0.6193 2.759 -1.198 0.9757 0.4685 +0.6306 2.809 -1.224 0.9757 0.5121 +0.641 2.856 -1.24 0.9757 0.5544 +0.6506 2.898 -1.249 0.9757 0.5953 +0.6591 2.937 -1.249 0.9757 0.6347 +0.6667 2.97 -1.24 0.9757 0.6725 +0.6732 2.999 -1.222 0.9757 0.7087 +0.6787 3.024 -1.195 0.9757 0.743 +0.6831 3.043 -1.159 0.9757 0.7756 +0.6864 3.058 -1.115 0.9757 0.8061 +0.6887 3.068 -1.062 0.9757 0.8347 +0.6899 3.074 -1.001 0.9757 0.8612 +0.6902 3.075 -0.9327 0.9757 0.8855 +0.6895 3.072 -0.8572 0.9757 0.9076 +0.688 3.065 -0.7751 0.9757 0.9275 +0.6857 3.055 -0.687 0.9757 0.945 +0.6827 3.041 -0.5935 0.9757 0.9602 +0.679 3.025 -0.4954 0.9757 0.9729 +0.6749 3.007 -0.3935 0.9757 0.9833 +0.6703 2.987 -0.2885 0.9757 0.9911 +0.6655 2.965 -0.1812 0.9757 0.9965 +0.6604 2.942 -0.07251 0.9757 0.9994 +0.5099 2.956 0 0.9854 1 +0.5055 2.931 0.1086 0.9854 0.9988 +0.5011 2.905 0.2163 0.9854 0.995 +0.497 2.881 0.3223 0.9854 0.9888 +0.4931 2.859 0.4258 0.9854 0.9801 +0.4896 2.838 0.5261 0.9854 0.9689 +0.4865 2.821 0.6222 0.9854 0.9553 +0.4839 2.806 0.7136 0.9854 0.9394 +0.482 2.794 0.7995 0.9854 0.9211 +0.4807 2.787 0.8793 0.9854 0.9004 +0.4801 2.783 0.9524 0.9854 0.8776 +0.4803 2.785 1.018 0.9854 0.8525 +0.4812 2.79 1.077 0.9854 0.8253 +0.4831 2.801 1.127 0.9854 0.7961 +0.4857 2.816 1.169 0.9854 0.7648 +0.4893 2.837 1.202 0.9854 0.7317 +0.4937 2.862 1.227 0.9854 0.6967 +0.499 2.893 1.242 0.9854 0.66 +0.5051 2.929 1.249 0.9854 0.6216 +0.512 2.969 1.248 0.9854 0.5817 +0.5197 3.013 1.238 0.9854 0.5403 +0.5281 3.062 1.219 0.9854 0.4976 +0.5372 3.115 1.193 0.9854 0.4536 +0.5469 3.171 1.158 0.9854 0.4085 +0.5571 3.23 1.117 0.9854 0.3624 +0.5677 3.292 1.069 0.9854 0.3153 +0.5787 3.355 1.015 0.9854 0.2675 +0.5899 3.42 0.9555 0.9854 0.219 +0.6013 3.486 0.8911 0.9854 0.17 +0.6128 3.553 0.8225 0.9854 0.1205 +0.6241 3.619 0.7505 0.9854 0.07074 +0.6353 3.684 0.6759 0.9854 0.02079 +0.6462 3.747 0.5993 0.9854 -0.0292 +0.6568 3.808 0.5215 0.9854 -0.07912 +0.6668 3.866 0.4434 0.9854 -0.1288 +0.6762 3.921 0.3656 0.9854 -0.1782 +0.685 3.971 0.2889 0.9854 -0.2272 +0.6929 4.017 0.214 0.9854 -0.2756 +0.6999 4.058 0.1416 0.9854 -0.3233 +0.706 4.093 0.07242 0.9854 -0.3702 +0.711 4.122 0.006951 0.9854 -0.4161 +0.7149 4.145 -0.0542 0.9854 -0.4611 +0.7176 4.16 -0.1105 0.9854 -0.5048 +0.719 4.169 -0.1616 0.9854 -0.5474 +0.7192 4.17 -0.207 0.9854 -0.5885 +0.7181 4.163 -0.2464 0.9854 -0.6282 +0.7156 4.149 -0.2796 0.9854 -0.6663 +0.7119 4.127 -0.3064 0.9854 -0.7027 +0.7068 4.098 -0.3268 0.9854 -0.7374 +0.7004 4.061 -0.3406 0.9854 -0.7702 +0.6927 4.016 -0.3479 0.9854 -0.8011 +0.6838 3.964 -0.3488 0.9854 -0.8301 +0.6737 3.906 -0.3436 0.9854 -0.8569 +0.6624 3.84 -0.3325 0.9854 -0.8816 +0.6501 3.769 -0.3157 0.9854 -0.9041 +0.6368 3.692 -0.2938 0.9854 -0.9243 +0.6226 3.61 -0.267 0.9854 -0.9422 +0.6076 3.523 -0.236 0.9854 -0.9578 +0.5919 3.432 -0.2012 0.9854 -0.971 +0.5756 3.337 -0.1633 0.9854 -0.9817 +0.5588 3.24 -0.1228 0.9854 -0.99 +0.5417 3.141 -0.0804 0.9854 -0.9958 +0.5244 3.04 -0.03676 0.9854 -0.9991 +0.507 2.939 0.007444 0.9854 -1 +0.4896 2.838 0.05154 0.9854 -0.9983 +0.4723 2.738 0.09483 0.9854 -0.9941 +0.4553 2.64 0.1367 0.9854 -0.9875 +0.4387 2.543 0.1764 0.9854 -0.9784 +0.4226 2.45 0.2133 0.9854 -0.9668 +0.4071 2.36 0.2469 0.9854 -0.9528 +0.3924 2.275 0.2765 0.9854 -0.9365 +0.3785 2.194 0.3017 0.9854 -0.9178 +0.3655 2.119 0.322 0.9854 -0.8968 +0.3535 2.05 0.3369 0.9854 -0.8735 +0.3426 1.986 0.346 0.9854 -0.8481 +0.3329 1.93 0.3492 0.9854 -0.8206 +0.3244 1.881 0.3461 0.9854 -0.791 +0.3171 1.839 0.3366 0.9854 -0.7594 +0.3112 1.804 0.3207 0.9854 -0.7259 +0.3065 1.777 0.2981 0.9854 -0.6907 +0.3032 1.758 0.2692 0.9854 -0.6536 +0.3012 1.746 0.2338 0.9854 -0.615 +0.3005 1.742 0.1924 0.9854 -0.5748 +0.3011 1.746 0.145 0.9854 -0.5332 +0.303 1.757 0.09215 0.9854 -0.4903 +0.3061 1.775 0.03415 0.9854 -0.4461 +0.3104 1.8 -0.02851 0.9854 -0.4008 +0.3158 1.831 -0.09531 0.9854 -0.3545 +0.3221 1.868 -0.1657 0.9854 -0.3073 +0.3295 1.91 -0.239 0.9854 -0.2594 +0.3377 1.958 -0.3145 0.9854 -0.2108 +0.3467 2.01 -0.3917 0.9854 -0.1617 +0.3563 2.066 -0.4697 0.9854 -0.1122 +0.3665 2.125 -0.5478 0.9854 -0.06235 +0.3772 2.187 -0.6252 0.9854 -0.01239 +0.3882 2.251 -0.7012 0.9854 0.0376 +0.3995 2.316 -0.7751 0.9854 0.0875 +0.4109 2.382 -0.846 0.9854 0.1372 +0.4223 2.449 -0.9132 0.9854 0.1865 +0.4337 2.514 -0.9761 0.9854 0.2354 +0.4448 2.579 -1.034 0.9854 0.2837 +0.4557 2.642 -1.086 0.9854 0.3312 +0.4662 2.703 -1.132 0.9854 0.378 +0.4762 2.761 -1.171 0.9854 0.4238 +0.4857 2.816 -1.202 0.9854 0.4685 +0.4946 2.867 -1.226 0.9854 0.5121 +0.5027 2.915 -1.242 0.9854 0.5544 +0.5102 2.958 -1.249 0.9854 0.5953 +0.5169 2.997 -1.248 0.9854 0.6347 +0.5227 3.03 -1.238 0.9854 0.6725 +0.5277 3.059 -1.219 0.9854 0.7087 +0.5318 3.083 -1.192 0.9854 0.743 +0.5351 3.102 -1.156 0.9854 0.7756 +0.5374 3.116 -1.111 0.9854 0.8061 +0.539 3.125 -1.058 0.9854 0.8347 +0.5397 3.129 -0.997 0.9854 0.8612 +0.5396 3.129 -0.9286 0.9854 0.8855 +0.5388 3.124 -0.8532 0.9854 0.9076 +0.5372 3.115 -0.7713 0.9854 0.9275 +0.5351 3.102 -0.6835 0.9854 0.945 +0.5323 3.086 -0.5904 0.9854 0.9602 +0.5291 3.068 -0.4928 0.9854 0.9729 +0.5254 3.046 -0.3913 0.9854 0.9833 +0.5215 3.023 -0.2869 0.9854 0.9911 +0.5172 2.999 -0.1802 0.9854 0.9965 +0.5129 2.973 -0.0721 0.9854 0.9994 +0.3615 2.978 0 0.9927 1 +0.358 2.95 0.1079 0.9927 0.9988 +0.3546 2.922 0.2149 0.9927 0.995 +0.3514 2.895 0.3203 0.9927 0.9888 +0.3483 2.869 0.4232 0.9927 0.9801 +0.3455 2.846 0.5229 0.9927 0.9689 +0.343 2.826 0.6186 0.9927 0.9553 +0.341 2.809 0.7096 0.9927 0.9394 +0.3393 2.795 0.7952 0.9927 0.9211 +0.3381 2.786 0.8748 0.9927 0.9004 +0.3375 2.78 0.9478 0.9927 0.8776 +0.3374 2.78 1.014 0.9927 0.8525 +0.338 2.784 1.072 0.9927 0.8253 +0.3391 2.794 1.123 0.9927 0.7961 +0.3409 2.808 1.165 0.9927 0.7648 +0.3433 2.828 1.199 0.9927 0.7317 +0.3463 2.853 1.224 0.9927 0.6967 +0.35 2.884 1.24 0.9927 0.66 +0.3543 2.919 1.248 0.9927 0.6216 +0.3593 2.96 1.248 0.9927 0.5817 +0.3647 3.005 1.239 0.9927 0.5403 +0.3708 3.054 1.221 0.9927 0.4976 +0.3773 3.108 1.196 0.9927 0.4536 +0.3842 3.165 1.163 0.9927 0.4085 +0.3916 3.226 1.124 0.9927 0.3624 +0.3993 3.289 1.077 0.9927 0.3153 +0.4072 3.355 1.025 0.9927 0.2675 +0.4154 3.422 0.9669 0.9927 0.219 +0.4236 3.49 0.9042 0.9927 0.17 +0.4319 3.558 0.8374 0.9927 0.1205 +0.4402 3.626 0.7671 0.9927 0.07074 +0.4484 3.694 0.6941 0.9927 0.02079 +0.4563 3.759 0.6192 0.9927 -0.0292 +0.464 3.823 0.543 0.9927 -0.07912 +0.4714 3.883 0.4663 0.9927 -0.1288 +0.4783 3.94 0.39 0.9927 -0.1782 +0.4847 3.993 0.3146 0.9927 -0.2272 +0.4906 4.041 0.2409 0.9927 -0.2756 +0.4958 4.084 0.1695 0.9927 -0.3233 +0.5003 4.121 0.1012 0.9927 -0.3702 +0.504 4.152 0.03652 0.9927 -0.4161 +0.5069 4.176 -0.02404 0.9927 -0.4611 +0.509 4.193 -0.07995 0.9927 -0.5048 +0.5102 4.203 -0.1308 0.9927 -0.5474 +0.5105 4.205 -0.1761 0.9927 -0.5885 +0.5098 4.2 -0.2157 0.9927 -0.6282 +0.5082 4.186 -0.2493 0.9927 -0.6663 +0.5056 4.165 -0.2766 0.9927 -0.7027 +0.502 4.136 -0.2977 0.9927 -0.7374 +0.4975 4.099 -0.3124 0.9927 -0.7702 +0.4921 4.054 -0.3209 0.9927 -0.8011 +0.4858 4.002 -0.3232 0.9927 -0.8301 +0.4786 3.943 -0.3194 0.9927 -0.8569 +0.4706 3.877 -0.3099 0.9927 -0.8816 +0.4618 3.804 -0.295 0.9927 -0.9041 +0.4523 3.726 -0.275 0.9927 -0.9243 +0.4422 3.643 -0.2504 0.9927 -0.9422 +0.4314 3.554 -0.2216 0.9927 -0.9578 +0.4202 3.462 -0.1891 0.9927 -0.971 +0.4086 3.366 -0.1536 0.9927 -0.9817 +0.3966 3.267 -0.1156 0.9927 -0.99 +0.3843 3.166 -0.0757 0.9927 -0.9958 +0.3719 3.064 -0.03462 0.9927 -0.9991 +0.3594 2.961 0.00701 0.9927 -1 +0.3469 2.858 0.04853 0.9927 -0.9983 +0.3346 2.756 0.08927 0.9927 -0.9941 +0.3224 2.656 0.1286 0.9927 -0.9875 +0.3105 2.558 0.1658 0.9927 -0.9784 +0.299 2.463 0.2004 0.9927 -0.9668 +0.2879 2.372 0.2317 0.9927 -0.9528 +0.2774 2.285 0.2591 0.9927 -0.9365 +0.2674 2.203 0.2823 0.9927 -0.9178 +0.2582 2.127 0.3006 0.9927 -0.8968 +0.2496 2.057 0.3137 0.9927 -0.8735 +0.2419 1.993 0.3213 0.9927 -0.8481 +0.235 1.936 0.3231 0.9927 -0.8206 +0.229 1.886 0.3187 0.9927 -0.791 +0.2239 1.844 0.3082 0.9927 -0.7594 +0.2197 1.81 0.2913 0.9927 -0.7259 +0.2165 1.783 0.2681 0.9927 -0.6907 +0.2142 1.765 0.2387 0.9927 -0.6536 +0.2129 1.754 0.2031 0.9927 -0.615 +0.2125 1.751 0.1615 0.9927 -0.5748 +0.2131 1.756 0.1143 0.9927 -0.5332 +0.2146 1.768 0.06169 0.9927 -0.4903 +0.217 1.787 0.004168 0.9927 -0.4461 +0.2202 1.814 -0.05785 0.9927 -0.4008 +0.2242 1.847 -0.1238 0.9927 -0.3545 +0.2289 1.886 -0.1932 0.9927 -0.3073 +0.2344 1.931 -0.2654 0.9927 -0.2594 +0.2404 1.98 -0.3398 0.9927 -0.2108 +0.247 2.035 -0.4156 0.9927 -0.1617 +0.2541 2.093 -0.4921 0.9927 -0.1122 +0.2615 2.155 -0.5687 0.9927 -0.06235 +0.2693 2.219 -0.6445 0.9927 -0.01239 +0.2774 2.285 -0.7189 0.9927 0.0376 +0.2856 2.353 -0.7911 0.9927 0.0875 +0.2939 2.421 -0.8603 0.9927 0.1372 +0.3022 2.489 -0.9258 0.9927 0.1865 +0.3104 2.557 -0.987 0.9927 0.2354 +0.3185 2.624 -1.043 0.9927 0.2837 +0.3264 2.689 -1.094 0.9927 0.3312 +0.3339 2.751 -1.138 0.9927 0.378 +0.3412 2.81 -1.175 0.9927 0.4238 +0.348 2.867 -1.205 0.9927 0.4685 +0.3543 2.919 -1.228 0.9927 0.5121 +0.3602 2.967 -1.243 0.9927 0.5544 +0.3655 3.011 -1.249 0.9927 0.5953 +0.3702 3.05 -1.247 0.9927 0.6347 +0.3743 3.084 -1.236 0.9927 0.6725 +0.3778 3.112 -1.216 0.9927 0.7087 +0.3806 3.136 -1.188 0.9927 0.743 +0.3828 3.154 -1.152 0.9927 0.7756 +0.3844 3.167 -1.106 0.9927 0.8061 +0.3853 3.174 -1.053 0.9927 0.8347 +0.3856 3.177 -0.9923 0.9927 0.8612 +0.3854 3.175 -0.924 0.9927 0.8855 +0.3845 3.168 -0.8487 0.9927 0.9076 +0.3832 3.157 -0.767 0.9927 0.9275 +0.3814 3.142 -0.6796 0.9927 0.945 +0.3792 3.124 -0.5869 0.9927 0.9602 +0.3766 3.102 -0.4898 0.9927 0.9729 +0.3737 3.079 -0.3889 0.9927 0.9833 +0.3706 3.053 -0.2851 0.9927 0.9911 +0.3672 3.025 -0.1791 0.9927 0.9965 +0.3638 2.997 -0.07164 0.9927 0.9994 +0.2122 2.992 0 0.9975 1 +0.21 2.961 0.1071 0.9975 0.9988 +0.2078 2.93 0.2134 0.9975 0.995 +0.2057 2.901 0.3181 0.9975 0.9888 +0.2037 2.873 0.4204 0.9975 0.9801 +0.2019 2.847 0.5194 0.9975 0.9689 +0.2003 2.824 0.6146 0.9975 0.9553 +0.1989 2.805 0.7051 0.9975 0.9394 +0.1978 2.789 0.7903 0.9975 0.9211 +0.197 2.777 0.8696 0.9975 0.9004 +0.1965 2.77 0.9425 0.9975 0.8776 +0.1963 2.768 1.008 0.9975 0.8525 +0.1965 2.771 1.067 0.9975 0.8253 +0.1971 2.779 1.118 0.9975 0.7961 +0.198 2.793 1.16 0.9975 0.7648 +0.1994 2.812 1.194 0.9975 0.7317 +0.2011 2.836 1.22 0.9975 0.6967 +0.2033 2.867 1.238 0.9975 0.66 +0.2058 2.902 1.246 0.9975 0.6216 +0.2087 2.943 1.247 0.9975 0.5817 +0.2119 2.988 1.239 0.9975 0.5403 +0.2155 3.039 1.223 0.9975 0.4976 +0.2194 3.093 1.199 0.9975 0.4536 +0.2235 3.152 1.168 0.9975 0.4085 +0.2279 3.213 1.13 0.9975 0.3624 +0.2325 3.278 1.085 0.9975 0.3153 +0.2372 3.345 1.034 0.9975 0.2675 +0.2421 3.414 0.9778 0.9975 0.219 +0.2471 3.484 0.9168 0.9975 0.17 +0.2521 3.554 0.8517 0.9975 0.1205 +0.257 3.625 0.7832 0.9975 0.07074 +0.262 3.694 0.7119 0.9975 0.02079 +0.2668 3.762 0.6386 0.9975 -0.0292 +0.2714 3.827 0.5641 0.9975 -0.07912 +0.2759 3.89 0.489 0.9975 -0.1288 +0.2801 3.949 0.4141 0.9975 -0.1782 +0.284 4.004 0.34 0.9975 -0.2272 +0.2875 4.054 0.2676 0.9975 -0.2756 +0.2907 4.099 0.1973 0.9975 -0.3233 +0.2935 4.138 0.13 0.9975 -0.3702 +0.2958 4.171 0.06607 0.9975 -0.4161 +0.2976 4.197 0.006136 0.9975 -0.4611 +0.2989 4.215 -0.04933 0.9975 -0.5048 +0.2997 4.226 -0.09989 0.9975 -0.5474 +0.2999 4.23 -0.1452 0.9975 -0.5885 +0.2996 4.225 -0.1849 0.9975 -0.6282 +0.2987 4.212 -0.2188 0.9975 -0.6663 +0.2972 4.192 -0.2467 0.9975 -0.7027 +0.2952 4.163 -0.2685 0.9975 -0.7374 +0.2926 4.126 -0.2841 0.9975 -0.7702 +0.2894 4.081 -0.2937 0.9975 -0.8011 +0.2857 4.029 -0.2973 0.9975 -0.8301 +0.2815 3.969 -0.295 0.9975 -0.8569 +0.2768 3.903 -0.2872 0.9975 -0.8816 +0.2716 3.83 -0.2741 0.9975 -0.9041 +0.266 3.751 -0.2561 0.9975 -0.9243 +0.26 3.666 -0.2335 0.9975 -0.9422 +0.2536 3.577 -0.207 0.9975 -0.9578 +0.247 3.483 -0.1769 0.9975 -0.971 +0.2401 3.386 -0.1438 0.9975 -0.9817 +0.233 3.285 -0.1083 0.9975 -0.99 +0.2257 3.183 -0.07094 0.9975 -0.9958 +0.2184 3.079 -0.03245 0.9975 -0.9991 +0.211 2.975 0.006572 0.9975 -1 +0.2036 2.871 0.04549 0.9975 -0.9983 +0.1962 2.767 0.08365 0.9975 -0.9941 +0.189 2.666 0.1204 0.9975 -0.9875 +0.182 2.566 0.1552 0.9975 -0.9784 +0.1752 2.47 0.1874 0.9975 -0.9668 +0.1686 2.378 0.2163 0.9975 -0.9528 +0.1624 2.29 0.2416 0.9975 -0.9365 +0.1565 2.207 0.2627 0.9975 -0.9178 +0.151 2.13 0.2791 0.9975 -0.8968 +0.146 2.059 0.2904 0.9975 -0.8735 +0.1415 1.995 0.2964 0.9975 -0.8481 +0.1374 1.938 0.2967 0.9975 -0.8206 +0.1339 1.888 0.2911 0.9975 -0.791 +0.1309 1.846 0.2795 0.9975 -0.7594 +0.1285 1.812 0.2618 0.9975 -0.7259 +0.1266 1.785 0.238 0.9975 -0.6907 +0.1253 1.767 0.208 0.9975 -0.6536 +0.1246 1.758 0.1722 0.9975 -0.615 +0.1245 1.756 0.1306 0.9975 -0.5748 +0.1249 1.762 0.08345 0.9975 -0.5332 +0.1259 1.775 0.0312 0.9975 -0.4903 +0.1274 1.796 -0.02582 0.9975 -0.4461 +0.1294 1.824 -0.08714 0.9975 -0.4008 +0.1318 1.859 -0.1523 0.9975 -0.3545 +0.1348 1.9 -0.2207 0.9975 -0.3073 +0.1381 1.947 -0.2917 0.9975 -0.2594 +0.1417 1.999 -0.3648 0.9975 -0.2108 +0.1457 2.055 -0.4392 0.9975 -0.1617 +0.15 2.116 -0.5143 0.9975 -0.1122 +0.1546 2.179 -0.5893 0.9975 -0.06235 +0.1593 2.246 -0.6635 0.9975 -0.01239 +0.1641 2.314 -0.7361 0.9975 0.0376 +0.1691 2.384 -0.8066 0.9975 0.0875 +0.174 2.454 -0.874 0.9975 0.1372 +0.179 2.525 -0.9378 0.9975 0.1865 +0.184 2.594 -0.9973 0.9975 0.2354 +0.1888 2.663 -1.052 0.9975 0.2837 +0.1935 2.729 -1.101 0.9975 0.3312 +0.198 2.793 -1.143 0.9975 0.378 +0.2023 2.853 -1.179 0.9975 0.4238 +0.2064 2.911 -1.208 0.9975 0.4685 +0.2102 2.964 -1.229 0.9975 0.5121 +0.2136 3.012 -1.242 0.9975 0.5544 +0.2167 3.056 -1.248 0.9975 0.5953 +0.2195 3.095 -1.244 0.9975 0.6347 +0.2219 3.129 -1.233 0.9975 0.6725 +0.2239 3.157 -1.213 0.9975 0.7087 +0.2255 3.18 -1.184 0.9975 0.743 +0.2268 3.198 -1.147 0.9975 0.7756 +0.2276 3.209 -1.101 0.9975 0.8061 +0.228 3.216 -1.048 0.9975 0.8347 +0.2281 3.217 -0.987 0.9975 0.8612 +0.2278 3.213 -0.9187 0.9975 0.8855 +0.2272 3.204 -0.8437 0.9975 0.9076 +0.2263 3.191 -0.7623 0.9975 0.9275 +0.2251 3.174 -0.6752 0.9975 0.945 +0.2236 3.153 -0.5831 0.9975 0.9602 +0.2219 3.13 -0.4865 0.9975 0.9729 +0.2201 3.103 -0.3863 0.9975 0.9833 +0.218 3.075 -0.2831 0.9975 0.9911 +0.2159 3.044 -0.1778 0.9975 0.9965 +0.2137 3.013 -0.07114 0.9975 0.9994 +0.06238 2.999 0 0.9998 1 +0.06167 2.965 0.1063 0.9998 0.9988 +0.06098 2.932 0.2118 0.9998 0.995 +0.0603 2.899 0.3157 0.9998 0.9888 +0.05967 2.869 0.4172 0.9998 0.9801 +0.05908 2.841 0.5156 0.9998 0.9689 +0.05856 2.815 0.6102 0.9998 0.9553 +0.0581 2.794 0.7002 0.9998 0.9394 +0.05773 2.776 0.785 0.9998 0.9211 +0.05745 2.762 0.864 0.9998 0.9004 +0.05726 2.753 0.9366 0.9998 0.8776 +0.05718 2.749 1.002 0.9998 0.8525 +0.05721 2.751 1.061 0.9998 0.8253 +0.05736 2.758 1.112 0.9998 0.7961 +0.05762 2.77 1.155 0.9998 0.7648 +0.058 2.788 1.19 0.9998 0.7317 +0.0585 2.812 1.216 0.9998 0.6967 +0.05912 2.842 1.234 0.9998 0.66 +0.05985 2.878 1.244 0.9998 0.6216 +0.0607 2.918 1.245 0.9998 0.5817 +0.06165 2.964 1.238 0.9998 0.5403 +0.06271 3.015 1.224 0.9998 0.4976 +0.06386 3.07 1.201 0.9998 0.4536 +0.06509 3.13 1.171 0.9998 0.4085 +0.0664 3.193 1.135 0.9998 0.3624 +0.06777 3.259 1.092 0.9998 0.3153 +0.0692 3.327 1.043 0.9998 0.2675 +0.07066 3.397 0.9881 0.9998 0.219 +0.07215 3.469 0.9289 0.9998 0.17 +0.07365 3.541 0.8655 0.9998 0.1205 +0.07515 3.613 0.7988 0.9998 0.07074 +0.07663 3.684 0.7293 0.9998 0.02079 +0.07808 3.754 0.6577 0.9998 -0.0292 +0.07949 3.822 0.5848 0.9998 -0.07912 +0.08084 3.886 0.5113 0.9998 -0.1288 +0.08211 3.948 0.4379 0.9998 -0.1782 +0.08329 4.005 0.3653 0.9998 -0.2272 +0.08437 4.057 0.2941 0.9998 -0.2756 +0.08535 4.103 0.225 0.9998 -0.3233 +0.08619 4.144 0.1587 0.9998 -0.3702 +0.08691 4.178 0.09557 0.9998 -0.4161 +0.08747 4.206 0.03631 0.9998 -0.4611 +0.08789 4.226 -0.01867 0.9998 -0.5048 +0.08815 4.238 -0.06894 0.9998 -0.5474 +0.08824 4.243 -0.1141 0.9998 -0.5885 +0.08817 4.239 -0.1539 0.9998 -0.6282 +0.08792 4.227 -0.1881 0.9998 -0.6663 +0.0875 4.207 -0.2165 0.9998 -0.7027 +0.08691 4.179 -0.239 0.9998 -0.7374 +0.08615 4.142 -0.2556 0.9998 -0.7702 +0.08523 4.098 -0.2663 0.9998 -0.8011 +0.08414 4.045 -0.2712 0.9998 -0.8301 +0.0829 3.986 -0.2705 0.9998 -0.8569 +0.08151 3.919 -0.2643 0.9998 -0.8816 +0.07998 3.845 -0.253 0.9998 -0.9041 +0.07832 3.766 -0.237 0.9998 -0.9243 +0.07655 3.68 -0.2166 0.9998 -0.9422 +0.07467 3.59 -0.1923 0.9998 -0.9578 +0.0727 3.495 -0.1645 0.9998 -0.971 +0.07065 3.397 -0.1339 0.9998 -0.9817 +0.06855 3.296 -0.1009 0.9998 -0.99 +0.06639 3.192 -0.06614 0.9998 -0.9958 +0.06421 3.087 -0.03027 0.9998 -0.9991 +0.06201 2.982 0.00613 0.9998 -1 +0.05982 2.876 0.04242 0.9998 -0.9983 +0.05765 2.772 0.07798 0.9998 -0.9941 +0.05551 2.669 0.1122 0.9998 -0.9875 +0.05342 2.568 0.1445 0.9998 -0.9784 +0.0514 2.471 0.1742 0.9998 -0.9668 +0.04946 2.378 0.2009 0.9998 -0.9528 +0.04761 2.289 0.2239 0.9998 -0.9365 +0.04588 2.206 0.2429 0.9998 -0.9178 +0.04426 2.128 0.2574 0.9998 -0.8968 +0.04278 2.057 0.267 0.9998 -0.8735 +0.04144 1.992 0.2713 0.9998 -0.8481 +0.04024 1.935 0.2702 0.9998 -0.8206 +0.03921 1.885 0.2634 0.9998 -0.791 +0.03834 1.843 0.2507 0.9998 -0.7594 +0.03764 1.81 0.2321 0.9998 -0.7259 +0.03711 1.784 0.2076 0.9998 -0.6907 +0.03675 1.767 0.1773 0.9998 -0.6536 +0.03656 1.758 0.1412 0.9998 -0.615 +0.03654 1.757 0.09952 0.9998 -0.5748 +0.03669 1.764 0.05258 0.9998 -0.5332 +0.037 1.779 0.0006879 0.9998 -0.4903 +0.03747 1.801 -0.05578 0.9998 -0.4461 +0.03809 1.831 -0.1164 0.9998 -0.4008 +0.03885 1.868 -0.1806 0.9998 -0.3545 +0.03974 1.91 -0.248 0.9998 -0.3073 +0.04075 1.959 -0.3178 0.9998 -0.2594 +0.04187 2.013 -0.3896 0.9998 -0.2108 +0.04308 2.071 -0.4625 0.9998 -0.1617 +0.04438 2.134 -0.5361 0.9998 -0.1122 +0.04575 2.199 -0.6094 0.9998 -0.06235 +0.04717 2.268 -0.682 0.9998 -0.01239 +0.04863 2.338 -0.7529 0.9998 0.0376 +0.05012 2.41 -0.8216 0.9998 0.0875 +0.05162 2.482 -0.8873 0.9998 0.1372 +0.05312 2.554 -0.9493 0.9998 0.1865 +0.0546 2.625 -1.007 0.9998 0.2354 +0.05605 2.695 -1.06 0.9998 0.2837 +0.05746 2.763 -1.107 0.9998 0.3312 +0.05881 2.828 -1.148 0.9998 0.378 +0.0601 2.889 -1.182 0.9998 0.4238 +0.0613 2.947 -1.21 0.9998 0.4685 +0.06242 3.001 -1.229 0.9998 0.5121 +0.06345 3.05 -1.242 0.9998 0.5544 +0.06437 3.095 -1.246 0.9998 0.5953 +0.06518 3.134 -1.242 0.9998 0.6347 +0.06587 3.167 -1.229 0.9998 0.6725 +0.06645 3.195 -1.208 0.9998 0.7087 +0.06691 3.217 -1.179 0.9998 0.743 +0.06725 3.233 -1.141 0.9998 0.7756 +0.06748 3.244 -1.096 0.9998 0.8061 +0.06758 3.249 -1.042 0.9998 0.8347 +0.06757 3.249 -0.9811 0.9998 0.8612 +0.06745 3.243 -0.9129 0.9998 0.8855 +0.06724 3.233 -0.8381 0.9998 0.9076 +0.06692 3.217 -0.7571 0.9998 0.9275 +0.06652 3.198 -0.6705 0.9998 0.945 +0.06604 3.175 -0.5789 0.9998 0.9602 +0.06549 3.149 -0.4829 0.9998 0.9729 +0.06489 3.12 -0.3834 0.9998 0.9833 +0.06424 3.089 -0.281 0.9998 0.9911 +0.06356 3.056 -0.1765 0.9998 0.9965 +0.06286 3.022 -0.0706 0.9998 0.9994 +-0.0876 2.999 0 0.9996 1 +-0.08652 2.962 0.1054 0.9996 0.9988 +-0.08547 2.926 0.21 0.9996 0.995 +-0.08445 2.891 0.3131 0.9996 0.9888 +-0.08348 2.858 0.4138 0.9996 0.9801 +-0.08259 2.827 0.5115 0.9996 0.9689 +-0.08178 2.8 0.6054 0.9996 0.9553 +-0.08108 2.776 0.6948 0.9996 0.9394 +-0.08049 2.756 0.7791 0.9996 0.9211 +-0.08004 2.74 0.8578 0.9996 0.9004 +-0.07973 2.729 0.9302 0.9996 0.8776 +-0.07956 2.724 0.9959 0.9996 0.8525 +-0.07956 2.724 1.054 0.9996 0.8253 +-0.07973 2.729 1.105 0.9996 0.7961 +-0.08006 2.741 1.149 0.9996 0.7648 +-0.08057 2.758 1.184 0.9996 0.7317 +-0.08125 2.782 1.211 0.9996 0.6967 +-0.08211 2.811 1.23 0.9996 0.66 +-0.08314 2.846 1.24 0.9996 0.6216 +-0.08432 2.887 1.243 0.9996 0.5817 +-0.08567 2.933 1.237 0.9996 0.5403 +-0.08716 2.984 1.224 0.9996 0.4976 +-0.08879 3.04 1.203 0.9996 0.4536 +-0.09055 3.1 1.174 0.9996 0.4085 +-0.09241 3.163 1.139 0.9996 0.3624 +-0.09437 3.23 1.098 0.9996 0.3153 +-0.0964 3.3 1.05 0.9996 0.2675 +-0.0985 3.372 0.9977 0.9996 0.219 +-0.1006 3.445 0.9403 0.9996 0.17 +-0.1028 3.519 0.8788 0.9996 0.1205 +-0.1049 3.592 0.8139 0.9996 0.07074 +-0.1071 3.665 0.7462 0.9996 0.02079 +-0.1092 3.737 0.6764 0.9996 -0.0292 +-0.1112 3.806 0.6052 0.9996 -0.07912 +-0.1131 3.873 0.5333 0.9996 -0.1288 +-0.115 3.936 0.4615 0.9996 -0.1782 +-0.1167 3.994 0.3903 0.9996 -0.2272 +-0.1183 4.048 0.3204 0.9996 -0.2756 +-0.1197 4.096 0.2525 0.9996 -0.3233 +-0.1209 4.139 0.1872 0.9996 -0.3702 +-0.1219 4.175 0.125 0.9996 -0.4161 +-0.1228 4.203 0.06646 0.9996 -0.4611 +-0.1234 4.225 0.012 0.9996 -0.5048 +-0.1238 4.238 -0.03794 0.9996 -0.5474 +-0.124 4.244 -0.08301 0.9996 -0.5885 +-0.1239 4.242 -0.1229 0.9996 -0.6282 +-0.1236 4.231 -0.1574 0.9996 -0.6663 +-0.123 4.211 -0.1863 0.9996 -0.7027 +-0.1222 4.183 -0.2095 0.9996 -0.7374 +-0.1212 4.147 -0.227 0.9996 -0.7702 +-0.1199 4.103 -0.2388 0.9996 -0.8011 +-0.1183 4.051 -0.245 0.9996 -0.8301 +-0.1166 3.991 -0.2457 0.9996 -0.8569 +-0.1146 3.924 -0.2412 0.9996 -0.8816 +-0.1125 3.85 -0.2318 0.9996 -0.9041 +-0.1101 3.77 -0.2178 0.9996 -0.9243 +-0.1076 3.685 -0.1995 0.9996 -0.9422 +-0.105 3.594 -0.1774 0.9996 -0.9578 +-0.1022 3.498 -0.1521 0.9996 -0.971 +-0.0993 3.399 -0.1239 0.9996 -0.9817 +-0.09632 3.297 -0.09344 0.9996 -0.99 +-0.09327 3.193 -0.0613 0.9996 -0.9958 +-0.09018 3.087 -0.02806 0.9996 -0.9991 +-0.08708 2.981 0.005683 0.9996 -1 +-0.08397 2.874 0.03933 0.9996 -0.9983 +-0.08089 2.769 0.07226 0.9996 -0.9941 +-0.07786 2.665 0.1039 0.9996 -0.9875 +-0.07491 2.564 0.1336 0.9996 -0.9784 +-0.07205 2.466 0.1609 0.9996 -0.9668 +-0.06931 2.373 0.1853 0.9996 -0.9528 +-0.0667 2.283 0.2061 0.9996 -0.9365 +-0.06425 2.199 0.223 0.9996 -0.9178 +-0.06197 2.121 0.2355 0.9996 -0.8968 +-0.05988 2.05 0.2433 0.9996 -0.8735 +-0.058 1.985 0.2461 0.9996 -0.8481 +-0.05632 1.928 0.2435 0.9996 -0.8206 +-0.05488 1.879 0.2354 0.9996 -0.791 +-0.05366 1.837 0.2217 0.9996 -0.7594 +-0.05269 1.804 0.2023 0.9996 -0.7259 +-0.05196 1.779 0.1772 0.9996 -0.6907 +-0.05148 1.762 0.1464 0.9996 -0.6536 +-0.05124 1.754 0.1101 0.9996 -0.615 +-0.05125 1.754 0.06842 0.9996 -0.5748 +-0.05149 1.763 0.02168 0.9996 -0.5332 +-0.05197 1.779 -0.02983 0.9996 -0.4903 +-0.05267 1.803 -0.08571 0.9996 -0.4461 +-0.05358 1.834 -0.1456 0.9996 -0.4008 +-0.05469 1.872 -0.2089 0.9996 -0.3545 +-0.05599 1.917 -0.2751 0.9996 -0.3073 +-0.05746 1.967 -0.3437 0.9996 -0.2594 +-0.05908 2.022 -0.4141 0.9996 -0.2108 +-0.06084 2.083 -0.4856 0.9996 -0.1617 +-0.06271 2.147 -0.5575 0.9996 -0.1122 +-0.06469 2.214 -0.6293 0.9996 -0.06235 +-0.06674 2.285 -0.7 0.9996 -0.01239 +-0.06884 2.357 -0.7692 0.9996 0.0376 +-0.07098 2.43 -0.8361 0.9996 0.0875 +-0.07314 2.504 -0.8999 0.9996 0.1372 +-0.07529 2.577 -0.9601 0.9996 0.1865 +-0.07741 2.65 -1.016 0.9996 0.2354 +-0.07949 2.721 -1.067 0.9996 0.2837 +-0.0815 2.79 -1.112 0.9996 0.3312 +-0.08342 2.856 -1.152 0.9996 0.378 +-0.08525 2.918 -1.185 0.9996 0.4238 +-0.08697 2.977 -1.211 0.9996 0.4685 +-0.08855 3.031 -1.229 0.9996 0.5121 +-0.09 3.081 -1.24 0.9996 0.5544 +-0.09129 3.125 -1.243 0.9996 0.5953 +-0.09242 3.164 -1.238 0.9996 0.6347 +-0.09339 3.197 -1.224 0.9996 0.6725 +-0.09419 3.224 -1.203 0.9996 0.7087 +-0.09482 3.246 -1.173 0.9996 0.743 +-0.09527 3.261 -1.135 0.9996 0.7756 +-0.09554 3.271 -1.089 0.9996 0.8061 +-0.09565 3.274 -1.036 0.9996 0.8347 +-0.0956 3.272 -0.9746 0.9996 0.8612 +-0.09538 3.265 -0.9066 0.9996 0.8855 +-0.09502 3.253 -0.832 0.9996 0.9076 +-0.09452 3.236 -0.7514 0.9996 0.9275 +-0.09389 3.214 -0.6653 0.9996 0.945 +-0.09315 3.189 -0.5743 0.9996 0.9602 +-0.09232 3.16 -0.479 0.9996 0.9729 +-0.0914 3.129 -0.3803 0.9996 0.9833 +-0.09041 3.095 -0.2787 0.9996 0.9911 +-0.08938 3.06 -0.175 0.9996 0.9965 +-0.08831 3.023 -0.07001 0.9996 0.9994 +-0.2374 2.991 0 0.9969 1 +-0.2342 2.951 0.1045 0.9969 0.9988 +-0.2312 2.913 0.2081 0.9969 0.995 +-0.2282 2.875 0.3103 0.9969 0.9888 +-0.2254 2.84 0.4102 0.9969 0.9801 +-0.2228 2.807 0.507 0.9969 0.9689 +-0.2204 2.777 0.6002 0.9969 0.9553 +-0.2183 2.751 0.689 0.9969 0.9394 +-0.2166 2.729 0.7728 0.9969 0.9211 +-0.2152 2.711 0.851 0.9969 0.9004 +-0.2142 2.699 0.9231 0.9969 0.8776 +-0.2136 2.692 0.9887 0.9969 0.8525 +-0.2135 2.69 1.047 0.9969 0.8253 +-0.2139 2.694 1.098 0.9969 0.7961 +-0.2147 2.705 1.142 0.9969 0.7648 +-0.216 2.721 1.178 0.9969 0.7317 +-0.2178 2.744 1.205 0.9969 0.6967 +-0.2201 2.773 1.225 0.9969 0.66 +-0.2228 2.807 1.236 0.9969 0.6216 +-0.226 2.848 1.24 0.9969 0.5817 +-0.2297 2.894 1.235 0.9969 0.5403 +-0.2338 2.945 1.223 0.9969 0.4976 +-0.2382 3.001 1.203 0.9969 0.4536 +-0.243 3.062 1.176 0.9969 0.4085 +-0.2481 3.126 1.143 0.9969 0.3624 +-0.2535 3.194 1.103 0.9969 0.3153 +-0.2591 3.265 1.058 0.9969 0.2675 +-0.2649 3.338 1.007 0.9969 0.219 +-0.2708 3.412 0.9512 0.9969 0.17 +-0.2768 3.487 0.8915 0.9969 0.1205 +-0.2827 3.562 0.8285 0.9969 0.07074 +-0.2886 3.636 0.7626 0.9969 0.02079 +-0.2944 3.709 0.6946 0.9969 -0.0292 +-0.3001 3.78 0.6252 0.9969 -0.07912 +-0.3055 3.849 0.555 0.9969 -0.1288 +-0.3106 3.913 0.4848 0.9969 -0.1782 +-0.3154 3.973 0.4151 0.9969 -0.2272 +-0.3198 4.029 0.3466 0.9969 -0.2756 +-0.3237 4.079 0.2799 0.9969 -0.3233 +-0.3272 4.123 0.2157 0.9969 -0.3702 +-0.3302 4.16 0.1544 0.9969 -0.4161 +-0.3326 4.19 0.09656 0.9969 -0.4611 +-0.3344 4.213 0.04265 0.9969 -0.5048 +-0.3355 4.228 -0.006929 0.9969 -0.5474 +-0.3361 4.234 -0.05184 0.9969 -0.5885 +-0.3359 4.233 -0.09178 0.9969 -0.6282 +-0.3351 4.223 -0.1265 0.9969 -0.6663 +-0.3337 4.204 -0.1559 0.9969 -0.7027 +-0.3315 4.177 -0.1798 0.9969 -0.7374 +-0.3287 4.141 -0.1982 0.9969 -0.7702 +-0.3252 4.098 -0.2111 0.9969 -0.8011 +-0.3211 4.046 -0.2186 0.9969 -0.8301 +-0.3164 3.986 -0.2208 0.9969 -0.8569 +-0.3111 3.919 -0.218 0.9969 -0.8816 +-0.3052 3.846 -0.2104 0.9969 -0.9041 +-0.2989 3.765 -0.1984 0.9969 -0.9243 +-0.292 3.679 -0.1823 0.9969 -0.9422 +-0.2848 3.588 -0.1625 0.9969 -0.9578 +-0.2772 3.493 -0.1395 0.9969 -0.971 +-0.2693 3.393 -0.1138 0.9969 -0.9817 +-0.2612 3.291 -0.08594 0.9969 -0.99 +-0.2529 3.186 -0.05642 0.9969 -0.9958 +-0.2444 3.08 -0.02584 0.9969 -0.9991 +-0.2359 2.973 0.005234 0.9969 -1 +-0.2275 2.866 0.03621 0.9969 -0.9983 +-0.2191 2.76 0.0665 0.9969 -0.9941 +-0.2108 2.656 0.09553 0.9969 -0.9875 +-0.2027 2.554 0.1227 0.9969 -0.9784 +-0.1949 2.456 0.1476 0.9969 -0.9668 +-0.1874 2.362 0.1695 0.9969 -0.9528 +-0.1803 2.272 0.1881 0.9969 -0.9365 +-0.1737 2.188 0.2029 0.9969 -0.9178 +-0.1675 2.11 0.2135 0.9969 -0.8968 +-0.1618 2.039 0.2195 0.9969 -0.8735 +-0.1567 1.974 0.2206 0.9969 -0.8481 +-0.1522 1.917 0.2166 0.9969 -0.8206 +-0.1483 1.868 0.2073 0.9969 -0.791 +-0.145 1.827 0.1926 0.9969 -0.7594 +-0.1424 1.794 0.1724 0.9969 -0.7259 +-0.1405 1.77 0.1466 0.9969 -0.6907 +-0.1392 1.754 0.1154 0.9969 -0.6536 +-0.1387 1.747 0.07892 0.9969 -0.615 +-0.1388 1.748 0.03728 0.9969 -0.5748 +-0.1395 1.758 -0.00924 0.9969 -0.5332 +-0.1409 1.775 -0.06032 0.9969 -0.4903 +-0.1429 1.801 -0.1156 0.9969 -0.4461 +-0.1455 1.833 -0.1746 0.9969 -0.4008 +-0.1486 1.873 -0.237 0.9969 -0.3545 +-0.1523 1.919 -0.3021 0.9969 -0.3073 +-0.1564 1.97 -0.3694 0.9969 -0.2594 +-0.1609 2.028 -0.4384 0.9969 -0.2108 +-0.1658 2.089 -0.5084 0.9969 -0.1617 +-0.1711 2.155 -0.5787 0.9969 -0.1122 +-0.1765 2.224 -0.6487 0.9969 -0.06235 +-0.1822 2.296 -0.7177 0.9969 -0.01239 +-0.1881 2.37 -0.785 0.9969 0.0376 +-0.194 2.444 -0.85 0.9969 0.0875 +-0.2 2.52 -0.912 0.9969 0.1372 +-0.2059 2.594 -0.9703 0.9969 0.1865 +-0.2118 2.668 -1.024 0.9969 0.2354 +-0.2175 2.74 -1.074 0.9969 0.2837 +-0.223 2.81 -1.117 0.9969 0.3312 +-0.2283 2.877 -1.155 0.9969 0.378 +-0.2334 2.94 -1.186 0.9969 0.4238 +-0.238 2.999 -1.211 0.9969 0.4685 +-0.2424 3.054 -1.228 0.9969 0.5121 +-0.2463 3.103 -1.237 0.9969 0.5544 +-0.2498 3.148 -1.239 0.9969 0.5953 +-0.2529 3.186 -1.233 0.9969 0.6347 +-0.2555 3.219 -1.219 0.9969 0.6725 +-0.2576 3.246 -1.197 0.9969 0.7087 +-0.2592 3.266 -1.166 0.9969 0.743 +-0.2604 3.281 -1.128 0.9969 0.7756 +-0.261 3.289 -1.082 0.9969 0.8061 +-0.2612 3.291 -1.028 0.9969 0.8347 +-0.261 3.288 -0.9674 0.9969 0.8612 +-0.2602 3.279 -0.8996 0.9969 0.8855 +-0.2591 3.265 -0.8254 0.9969 0.9076 +-0.2576 3.246 -0.7452 0.9969 0.9275 +-0.2557 3.222 -0.6597 0.9969 0.945 +-0.2535 3.194 -0.5693 0.9969 0.9602 +-0.2511 3.164 -0.4748 0.9969 0.9729 +-0.2484 3.13 -0.3769 0.9969 0.9833 +-0.2455 3.094 -0.2762 0.9969 0.9911 +-0.2425 3.056 -0.1734 0.9969 0.9965 +-0.2394 3.017 -0.06937 0.9969 0.9994 +-0.3865 2.975 0 0.9917 1 +-0.3811 2.933 0.1034 0.9917 0.9988 +-0.3758 2.892 0.2061 0.9917 0.995 +-0.3706 2.853 0.3073 0.9917 0.9888 +-0.3657 2.815 0.4063 0.9917 0.9801 +-0.3612 2.78 0.5023 0.9917 0.9689 +-0.357 2.748 0.5947 0.9917 0.9553 +-0.3533 2.719 0.6828 0.9917 0.9394 +-0.3502 2.695 0.766 0.9917 0.9211 +-0.3477 2.676 0.8438 0.9917 0.9004 +-0.3458 2.662 0.9155 0.9917 0.8776 +-0.3447 2.653 0.9809 0.9917 0.8525 +-0.3443 2.65 1.039 0.9917 0.8253 +-0.3447 2.653 1.091 0.9917 0.7961 +-0.3459 2.662 1.134 0.9917 0.7648 +-0.3479 2.678 1.17 0.9917 0.7317 +-0.3508 2.7 1.199 0.9917 0.6967 +-0.3544 2.728 1.219 0.9917 0.66 +-0.3589 2.762 1.231 0.9917 0.6216 +-0.3641 2.802 1.236 0.9917 0.5817 +-0.3701 2.848 1.232 0.9917 0.5403 +-0.3767 2.9 1.221 0.9917 0.4976 +-0.3841 2.956 1.203 0.9917 0.4536 +-0.392 3.017 1.178 0.9917 0.4085 +-0.4004 3.082 1.146 0.9917 0.3624 +-0.4093 3.15 1.108 0.9917 0.3153 +-0.4186 3.222 1.064 0.9917 0.2675 +-0.4281 3.295 1.015 0.9917 0.219 +-0.4379 3.37 0.9614 0.9917 0.17 +-0.4478 3.446 0.9037 0.9917 0.1205 +-0.4577 3.523 0.8425 0.9917 0.07074 +-0.4675 3.598 0.7786 0.9917 0.02079 +-0.4772 3.673 0.7124 0.9917 -0.0292 +-0.4866 3.745 0.6448 0.9917 -0.07912 +-0.4956 3.814 0.5764 0.9917 -0.1288 +-0.5042 3.88 0.5077 0.9917 -0.1782 +-0.5122 3.942 0.4396 0.9917 -0.2272 +-0.5196 3.999 0.3725 0.9917 -0.2756 +-0.5262 4.05 0.3071 0.9917 -0.3233 +-0.5321 4.095 0.244 0.9917 -0.3702 +-0.5371 4.134 0.1837 0.9917 -0.4161 +-0.5412 4.165 0.1266 0.9917 -0.4611 +-0.5443 4.189 0.07329 0.9917 -0.5048 +-0.5464 4.205 0.02409 0.9917 -0.5474 +-0.5474 4.213 -0.02063 0.9917 -0.5885 +-0.5473 4.213 -0.0606 0.9917 -0.6282 +-0.5461 4.203 -0.09559 0.9917 -0.6663 +-0.5438 4.186 -0.1254 0.9917 -0.7027 +-0.5404 4.159 -0.15 0.9917 -0.7374 +-0.5359 4.124 -0.1693 0.9917 -0.7702 +-0.5302 4.081 -0.1833 0.9917 -0.8011 +-0.5236 4.03 -0.192 0.9917 -0.8301 +-0.5159 3.971 -0.1958 0.9917 -0.8569 +-0.5072 3.904 -0.1947 0.9917 -0.8816 +-0.4977 3.83 -0.1889 0.9917 -0.9041 +-0.4873 3.75 -0.1789 0.9917 -0.9243 +-0.4761 3.665 -0.165 0.9917 -0.9422 +-0.4643 3.573 -0.1475 0.9917 -0.9578 +-0.4519 3.478 -0.1269 0.9917 -0.971 +-0.4389 3.378 -0.1037 0.9917 -0.9817 +-0.4256 3.276 -0.07839 0.9917 -0.99 +-0.4119 3.171 -0.05151 0.9917 -0.9958 +-0.3981 3.064 -0.0236 0.9917 -0.9991 +-0.3842 2.957 0.004781 0.9917 -1 +-0.3703 2.85 0.03307 0.9917 -0.9983 +-0.3565 2.744 0.06069 0.9917 -0.9941 +-0.343 2.64 0.0871 0.9917 -0.9875 +-0.3298 2.538 0.1118 0.9917 -0.9784 +-0.317 2.44 0.1341 0.9917 -0.9668 +-0.3047 2.345 0.1537 0.9917 -0.9528 +-0.2931 2.256 0.1701 0.9917 -0.9365 +-0.2822 2.172 0.1827 0.9917 -0.9178 +-0.2721 2.094 0.1914 0.9917 -0.8968 +-0.2628 2.023 0.1956 0.9917 -0.8735 +-0.2545 1.959 0.1951 0.9917 -0.8481 +-0.2471 1.902 0.1897 0.9917 -0.8206 +-0.2408 1.853 0.1791 0.9917 -0.791 +-0.2356 1.813 0.1634 0.9917 -0.7594 +-0.2314 1.781 0.1423 0.9917 -0.7259 +-0.2283 1.757 0.116 0.9917 -0.6907 +-0.2264 1.743 0.08439 0.9917 -0.6536 +-0.2256 1.736 0.04771 0.9917 -0.615 +-0.2259 1.739 0.006111 0.9917 -0.5748 +-0.2273 1.749 -0.04015 0.9917 -0.5332 +-0.2297 1.768 -0.09078 0.9917 -0.4903 +-0.2331 1.794 -0.1454 0.9917 -0.4461 +-0.2375 1.828 -0.2036 0.9917 -0.4008 +-0.2428 1.869 -0.2649 0.9917 -0.3545 +-0.249 1.916 -0.3289 0.9917 -0.3073 +-0.2559 1.97 -0.3949 0.9917 -0.2594 +-0.2635 2.028 -0.4624 0.9917 -0.2108 +-0.2717 2.091 -0.5308 0.9917 -0.1617 +-0.2805 2.159 -0.5994 0.9917 -0.1122 +-0.2896 2.229 -0.6677 0.9917 -0.06235 +-0.2991 2.302 -0.7349 0.9917 -0.01239 +-0.3088 2.377 -0.8003 0.9917 0.0376 +-0.3187 2.453 -0.8635 0.9917 0.0875 +-0.3286 2.529 -0.9235 0.9917 0.1372 +-0.3385 2.605 -0.98 0.9917 0.1865 +-0.3482 2.68 -1.032 0.9917 0.2354 +-0.3577 2.753 -1.079 0.9917 0.2837 +-0.3668 2.823 -1.121 0.9917 0.3312 +-0.3756 2.89 -1.157 0.9917 0.378 +-0.3838 2.954 -1.187 0.9917 0.4238 +-0.3915 3.014 -1.21 0.9917 0.4685 +-0.3986 3.068 -1.226 0.9917 0.5121 +-0.4051 3.118 -1.234 0.9917 0.5544 +-0.4108 3.162 -1.235 0.9917 0.5953 +-0.4158 3.2 -1.228 0.9917 0.6347 +-0.42 3.232 -1.213 0.9917 0.6725 +-0.4233 3.258 -1.19 0.9917 0.7087 +-0.4259 3.278 -1.159 0.9917 0.743 +-0.4276 3.291 -1.12 0.9917 0.7756 +-0.4286 3.298 -1.074 0.9917 0.8061 +-0.4287 3.299 -1.02 0.9917 0.8347 +-0.4281 3.295 -0.9596 0.9917 0.8612 +-0.4267 3.284 -0.8921 0.9917 0.8855 +-0.4246 3.268 -0.8183 0.9917 0.9076 +-0.4219 3.247 -0.7386 0.9917 0.9275 +-0.4186 3.221 -0.6537 0.9917 0.945 +-0.4147 3.192 -0.564 0.9917 0.9602 +-0.4104 3.159 -0.4704 0.9917 0.9729 +-0.4057 3.123 -0.3733 0.9917 0.9833 +-0.4007 3.084 -0.2735 0.9917 0.9911 +-0.3955 3.044 -0.1717 0.9917 0.9965 +-0.3901 3.003 -0.0687 0.9917 0.9994 +-0.5347 2.952 0 0.984 1 +-0.5268 2.908 0.1024 0.984 0.9988 +-0.519 2.865 0.204 0.984 0.995 +-0.5114 2.823 0.3041 0.984 0.9888 +-0.5042 2.783 0.4021 0.984 0.9801 +-0.4974 2.746 0.4972 0.984 0.9689 +-0.4913 2.712 0.5888 0.984 0.9553 +-0.4858 2.682 0.6761 0.984 0.9394 +-0.4811 2.656 0.7587 0.984 0.9211 +-0.4773 2.635 0.836 0.984 0.9004 +-0.4744 2.619 0.9074 0.984 0.8776 +-0.4725 2.609 0.9724 0.984 0.8525 +-0.4717 2.604 1.031 0.984 0.8253 +-0.4721 2.606 1.082 0.984 0.7961 +-0.4735 2.614 1.126 0.984 0.7648 +-0.4762 2.629 1.163 0.984 0.7317 +-0.4799 2.649 1.191 0.984 0.6967 +-0.4849 2.677 1.212 0.984 0.66 +-0.491 2.711 1.225 0.984 0.6216 +-0.4982 2.75 1.231 0.984 0.5817 +-0.5065 2.796 1.229 0.984 0.5403 +-0.5157 2.847 1.219 0.984 0.4976 +-0.526 2.903 1.202 0.984 0.4536 +-0.537 2.964 1.179 0.984 0.4085 +-0.5488 3.03 1.148 0.984 0.3624 +-0.5613 3.099 1.112 0.984 0.3153 +-0.5743 3.17 1.07 0.984 0.2675 +-0.5877 3.245 1.023 0.984 0.219 +-0.6015 3.321 0.9711 0.984 0.17 +-0.6154 3.397 0.9153 0.984 0.1205 +-0.6294 3.475 0.8561 0.984 0.07074 +-0.6433 3.551 0.794 0.984 0.02079 +-0.6569 3.627 0.7298 0.984 -0.0292 +-0.6702 3.7 0.664 0.984 -0.07912 +-0.683 3.77 0.5973 0.984 -0.1288 +-0.6952 3.838 0.5304 0.984 -0.1782 +-0.7065 3.9 0.4638 0.984 -0.2272 +-0.7171 3.958 0.3982 0.984 -0.2756 +-0.7266 4.011 0.3341 0.984 -0.3233 +-0.735 4.057 0.2722 0.984 -0.3702 +-0.7422 4.097 0.2128 0.984 -0.4161 +-0.7481 4.13 0.1566 0.984 -0.4611 +-0.7526 4.155 0.1039 0.984 -0.5048 +-0.7557 4.172 0.0551 0.984 -0.5474 +-0.7573 4.181 0.01058 0.984 -0.5885 +-0.7574 4.181 -0.02939 0.984 -0.6282 +-0.7559 4.173 -0.06459 0.984 -0.6663 +-0.7528 4.156 -0.09486 0.984 -0.7027 +-0.7482 4.13 -0.1201 0.984 -0.7374 +-0.742 4.096 -0.1402 0.984 -0.7702 +-0.7343 4.054 -0.1553 0.984 -0.8011 +-0.7251 4.003 -0.1654 0.984 -0.8301 +-0.7145 3.944 -0.1706 0.984 -0.8569 +-0.7025 3.878 -0.1712 0.984 -0.8816 +-0.6893 3.805 -0.1673 0.984 -0.9041 +-0.6749 3.726 -0.1593 0.984 -0.9243 +-0.6594 3.64 -0.1475 0.984 -0.9422 +-0.6429 3.549 -0.1323 0.984 -0.9578 +-0.6256 3.454 -0.1142 0.984 -0.971 +-0.6076 3.354 -0.0935 0.984 -0.9817 +-0.5891 3.252 -0.07079 0.984 -0.99 +-0.5701 3.147 -0.04656 0.984 -0.9958 +-0.5509 3.041 -0.02135 0.984 -0.9991 +-0.5315 2.934 0.004325 0.984 -1 +-0.5121 2.827 0.0299 0.984 -0.9983 +-0.4929 2.721 0.05485 0.984 -0.9941 +-0.4741 2.617 0.07862 0.984 -0.9875 +-0.4557 2.516 0.1007 0.984 -0.9784 +-0.4379 2.418 0.1206 0.984 -0.9668 +-0.4209 2.324 0.1378 0.984 -0.9528 +-0.4048 2.235 0.1519 0.984 -0.9365 +-0.3896 2.151 0.1624 0.984 -0.9178 +-0.3756 2.073 0.1691 0.984 -0.8968 +-0.3628 2.003 0.1715 0.984 -0.8735 +-0.3512 1.939 0.1694 0.984 -0.8481 +-0.3411 1.883 0.1626 0.984 -0.8206 +-0.3324 1.835 0.1508 0.984 -0.791 +-0.3252 1.795 0.134 0.984 -0.7594 +-0.3195 1.764 0.1122 0.984 -0.7259 +-0.3154 1.741 0.08524 0.984 -0.6907 +-0.3129 1.727 0.0533 0.984 -0.6536 +-0.312 1.722 0.01647 0.984 -0.615 +-0.3125 1.725 -0.02506 0.984 -0.5748 +-0.3147 1.737 -0.07104 0.984 -0.5332 +-0.3182 1.757 -0.1212 0.984 -0.4903 +-0.3232 1.784 -0.1751 0.984 -0.4461 +-0.3296 1.819 -0.2325 0.984 -0.4008 +-0.3372 1.861 -0.2927 0.984 -0.3545 +-0.346 1.91 -0.3555 0.984 -0.3073 +-0.3558 1.964 -0.4201 0.984 -0.2594 +-0.3667 2.024 -0.4861 0.984 -0.2108 +-0.3783 2.089 -0.5529 0.984 -0.1617 +-0.3907 2.157 -0.6198 0.984 -0.1122 +-0.4037 2.228 -0.6863 0.984 -0.06235 +-0.4171 2.303 -0.7516 0.984 -0.01239 +-0.4308 2.378 -0.8152 0.984 0.0376 +-0.4448 2.455 -0.8763 0.984 0.0875 +-0.4587 2.532 -0.9345 0.984 0.1372 +-0.4726 2.609 -0.989 0.984 0.1865 +-0.4863 2.685 -1.039 0.984 0.2354 +-0.4996 2.758 -1.085 0.984 0.2837 +-0.5124 2.829 -1.125 0.984 0.3312 +-0.5247 2.897 -1.159 0.984 0.378 +-0.5363 2.96 -1.187 0.984 0.4238 +-0.5471 3.02 -1.209 0.984 0.4685 +-0.557 3.075 -1.223 0.984 0.5121 +-0.5659 3.124 -1.23 0.984 0.5544 +-0.5738 3.168 -1.23 0.984 0.5953 +-0.5806 3.205 -1.222 0.984 0.6347 +-0.5864 3.237 -1.206 0.984 0.6725 +-0.5909 3.262 -1.183 0.984 0.7087 +-0.5943 3.281 -1.151 0.984 0.743 +-0.5966 3.293 -1.112 0.984 0.7756 +-0.5977 3.299 -1.066 0.984 0.8061 +-0.5976 3.299 -1.012 0.984 0.8347 +-0.5964 3.293 -0.9513 0.984 0.8612 +-0.5942 3.28 -0.884 0.984 0.8855 +-0.591 3.263 -0.8106 0.984 0.9076 +-0.5869 3.24 -0.7315 0.984 0.9275 +-0.5819 3.213 -0.6473 0.984 0.945 +-0.5762 3.181 -0.5584 0.984 0.9602 +-0.5699 3.146 -0.4656 0.984 0.9729 +-0.5629 3.108 -0.3694 0.984 0.9833 +-0.5556 3.067 -0.2707 0.984 0.9911 +-0.5479 3.025 -0.1699 0.984 0.9965 +-0.54 2.981 -0.06798 0.984 0.9994 +-0.6816 2.922 0 0.9738 1 +-0.6709 2.876 0.1012 0.9738 0.9988 +-0.6603 2.83 0.2017 0.9738 0.995 +-0.6501 2.787 0.3008 0.9738 0.9888 +-0.6404 2.745 0.3977 0.9738 0.9801 +-0.6312 2.706 0.4918 0.9738 0.9689 +-0.6229 2.67 0.5825 0.9738 0.9553 +-0.6154 2.638 0.6691 0.9738 0.9394 +-0.6089 2.61 0.751 0.9738 0.9211 +-0.6036 2.587 0.8276 0.9738 0.9004 +-0.5996 2.57 0.8986 0.9738 0.8776 +-0.5968 2.558 0.9634 0.9738 0.8525 +-0.5955 2.552 1.022 0.9738 0.8253 +-0.5956 2.553 1.073 0.9738 0.7961 +-0.5972 2.56 1.117 0.9738 0.7648 +-0.6003 2.573 1.154 0.9738 0.7317 +-0.605 2.593 1.183 0.9738 0.6967 +-0.6112 2.62 1.205 0.9738 0.66 +-0.6189 2.653 1.219 0.9738 0.6216 +-0.6281 2.692 1.225 0.9738 0.5817 +-0.6386 2.737 1.224 0.9738 0.5403 +-0.6505 2.788 1.216 0.9738 0.4976 +-0.6636 2.844 1.201 0.9738 0.4536 +-0.6778 2.905 1.179 0.9738 0.4085 +-0.693 2.97 1.15 0.9738 0.3624 +-0.7091 3.039 1.115 0.9738 0.3153 +-0.7259 3.112 1.075 0.9738 0.2675 +-0.7433 3.186 1.03 0.9738 0.219 +-0.7612 3.263 0.9802 0.9738 0.17 +-0.7792 3.34 0.9263 0.9738 0.1205 +-0.7974 3.418 0.8691 0.9738 0.07074 +-0.8154 3.495 0.809 0.9738 0.02079 +-0.8332 3.571 0.7467 0.9738 -0.0292 +-0.8505 3.645 0.6828 0.9738 -0.07912 +-0.8671 3.717 0.618 0.9738 -0.1288 +-0.883 3.785 0.5527 0.9738 -0.1782 +-0.8979 3.849 0.4878 0.9738 -0.2272 +-0.9117 3.908 0.4236 0.9738 -0.2756 +-0.9241 3.961 0.3609 0.9738 -0.3233 +-0.9352 4.009 0.3002 0.9738 -0.3702 +-0.9447 4.049 0.2418 0.9738 -0.4161 +-0.9526 4.083 0.1864 0.9738 -0.4611 +-0.9586 4.109 0.1344 0.9738 -0.5048 +-0.9629 4.127 0.08607 0.9738 -0.5474 +-0.9652 4.137 0.04179 0.9738 -0.5885 +-0.9655 4.138 0.001843 0.9738 -0.6282 +-0.9638 4.131 -0.03356 0.9738 -0.6663 +-0.96 4.115 -0.06425 0.9738 -0.7027 +-0.9543 4.09 -0.09012 0.9738 -0.7374 +-0.9465 4.057 -0.1111 0.9738 -0.7702 +-0.9368 4.015 -0.1273 0.9738 -0.8011 +-0.9251 3.965 -0.1386 0.9738 -0.8301 +-0.9116 3.908 -0.1454 0.9738 -0.8569 +-0.8964 3.842 -0.1476 0.9738 -0.8816 +-0.8795 3.77 -0.1456 0.9738 -0.9041 +-0.8611 3.691 -0.1396 0.9738 -0.9243 +-0.8413 3.606 -0.13 0.9738 -0.9422 +-0.8202 3.516 -0.1171 0.9738 -0.9578 +-0.7981 3.421 -0.1014 0.9738 -0.971 +-0.775 3.322 -0.08324 0.9738 -0.9817 +-0.7513 3.22 -0.06314 0.9738 -0.99 +-0.7269 3.116 -0.04159 0.9738 -0.9958 +-0.7023 3.01 -0.01908 0.9738 -0.9991 +-0.6774 2.904 0.003866 0.9738 -1 +-0.6526 2.797 0.02672 0.9738 -0.9983 +-0.628 2.692 0.04897 0.9738 -0.9941 +-0.6039 2.588 0.07009 0.9738 -0.9875 +-0.5803 2.487 0.08959 0.9738 -0.9784 +-0.5576 2.39 0.107 0.9738 -0.9668 +-0.5358 2.297 0.1218 0.9738 -0.9528 +-0.5151 2.208 0.1336 0.9738 -0.9365 +-0.4958 2.125 0.142 0.9738 -0.9178 +-0.4779 2.048 0.1467 0.9738 -0.8968 +-0.4615 1.978 0.1473 0.9738 -0.8735 +-0.4468 1.915 0.1436 0.9738 -0.8481 +-0.4339 1.86 0.1354 0.9738 -0.8206 +-0.4229 1.813 0.1224 0.9738 -0.791 +-0.4139 1.774 0.1046 0.9738 -0.7594 +-0.4068 1.743 0.08196 0.9738 -0.7259 +-0.4017 1.722 0.05446 0.9738 -0.6907 +-0.3986 1.709 0.02217 0.9738 -0.6536 +-0.3976 1.704 -0.01478 0.9738 -0.615 +-0.3986 1.709 -0.05621 0.9738 -0.5748 +-0.4016 1.721 -0.1019 0.9738 -0.5332 +-0.4064 1.742 -0.1515 0.9738 -0.4903 +-0.4131 1.771 -0.2047 0.9738 -0.4461 +-0.4215 1.807 -0.2611 0.9738 -0.4008 +-0.4316 1.85 -0.3203 0.9738 -0.3545 +-0.4431 1.899 -0.3818 0.9738 -0.3073 +-0.456 1.955 -0.4451 0.9738 -0.2594 +-0.4702 2.015 -0.5095 0.9738 -0.2108 +-0.4854 2.081 -0.5747 0.9738 -0.1617 +-0.5016 2.15 -0.6398 0.9738 -0.1122 +-0.5185 2.222 -0.7044 0.9738 -0.06235 +-0.536 2.297 -0.7679 0.9738 -0.01239 +-0.5538 2.374 -0.8295 0.9738 0.0376 +-0.5719 2.451 -0.8887 0.9738 0.0875 +-0.5901 2.529 -0.9449 0.9738 0.1372 +-0.6081 2.606 -0.9974 0.9738 0.1865 +-0.6258 2.682 -1.046 0.9738 0.2354 +-0.643 2.756 -1.089 0.9738 0.2837 +-0.6596 2.827 -1.128 0.9738 0.3312 +-0.6754 2.895 -1.16 0.9738 0.378 +-0.6903 2.959 -1.187 0.9738 0.4238 +-0.7042 3.018 -1.207 0.9738 0.4685 +-0.7169 3.073 -1.22 0.9738 0.5121 +-0.7283 3.122 -1.226 0.9738 0.5544 +-0.7384 3.165 -1.224 0.9738 0.5953 +-0.747 3.202 -1.215 0.9738 0.6347 +-0.7542 3.233 -1.198 0.9738 0.6725 +-0.7599 3.257 -1.174 0.9738 0.7087 +-0.7641 3.275 -1.142 0.9738 0.743 +-0.7667 3.286 -1.103 0.9738 0.7756 +-0.7678 3.291 -1.057 0.9738 0.8061 +-0.7674 3.289 -1.003 0.9738 0.8347 +-0.7656 3.282 -0.9423 0.9738 0.8612 +-0.7624 3.268 -0.8754 0.9738 0.8855 +-0.7579 3.249 -0.8025 0.9738 0.9076 +-0.7522 3.224 -0.724 0.9738 0.9275 +-0.7454 3.195 -0.6404 0.9738 0.945 +-0.7376 3.162 -0.5524 0.9738 0.9602 +-0.729 3.125 -0.4605 0.9738 0.9729 +-0.7196 3.085 -0.3654 0.9738 0.9833 +-0.7097 3.042 -0.2676 0.9738 0.9911 +-0.6993 2.998 -0.168 0.9738 0.9965 +-0.6887 2.952 -0.06722 0.9738 0.9994 +-0.8268 2.884 0 0.9613 1 +-0.8131 2.836 0.1 0.9613 0.9988 +-0.7996 2.789 0.1993 0.9613 0.995 +-0.7865 2.743 0.2972 0.9613 0.9888 +-0.774 2.7 0.393 0.9613 0.9801 +-0.7623 2.659 0.4861 0.9613 0.9689 +-0.7515 2.621 0.5758 0.9613 0.9553 +-0.7419 2.588 0.6616 0.9613 0.9394 +-0.7335 2.558 0.7427 0.9613 0.9211 +-0.7265 2.534 0.8188 0.9613 0.9004 +-0.7211 2.515 0.8893 0.9613 0.8776 +-0.7173 2.502 0.9538 0.9613 0.8525 +-0.7153 2.495 1.012 0.9613 0.8253 +-0.7151 2.494 1.063 0.9613 0.7961 +-0.7167 2.5 1.108 0.9613 0.7648 +-0.7203 2.512 1.145 0.9613 0.7317 +-0.7258 2.531 1.174 0.9613 0.6967 +-0.7331 2.557 1.197 0.9613 0.66 +-0.7424 2.589 1.212 0.9613 0.6216 +-0.7534 2.628 1.219 0.9613 0.5817 +-0.7662 2.673 1.219 0.9613 0.5403 +-0.7807 2.723 1.212 0.9613 0.4976 +-0.7966 2.779 1.198 0.9613 0.4536 +-0.814 2.839 1.178 0.9613 0.4085 +-0.8327 2.904 1.151 0.9613 0.3624 +-0.8525 2.973 1.118 0.9613 0.3153 +-0.8731 3.046 1.08 0.9613 0.2675 +-0.8945 3.12 1.036 0.9613 0.219 +-0.9165 3.197 0.9886 0.9613 0.17 +-0.9388 3.274 0.9368 0.9613 0.1205 +-0.9612 3.353 0.8816 0.9613 0.07074 +-0.9834 3.43 0.8235 0.9613 0.02079 +-1.005 3.507 0.7631 0.9613 -0.0292 +-1.027 3.582 0.7012 0.9613 -0.07912 +-1.047 3.654 0.6382 0.9613 -0.1288 +-1.067 3.722 0.5747 0.9613 -0.1782 +-1.086 3.787 0.5114 0.9613 -0.2272 +-1.103 3.847 0.4488 0.9613 -0.2756 +-1.118 3.901 0.3875 0.9613 -0.3233 +-1.132 3.949 0.328 0.9613 -0.3702 +-1.144 3.991 0.2707 0.9613 -0.4161 +-1.154 4.025 0.2162 0.9613 -0.4611 +-1.162 4.052 0.1648 0.9613 -0.5048 +-1.167 4.071 0.117 0.9613 -0.5474 +-1.17 4.082 0.07297 0.9613 -0.5885 +-1.171 4.084 0.03307 0.9613 -0.6282 +-1.169 4.078 -0.002502 0.9613 -0.6663 +-1.165 4.063 -0.03359 0.9613 -0.7027 +-1.158 4.039 -0.06009 0.9613 -0.7374 +-1.149 4.007 -0.08194 0.9613 -0.7702 +-1.137 3.966 -0.09916 0.9613 -0.8011 +-1.123 3.917 -0.1118 0.9613 -0.8301 +-1.107 3.86 -0.12 0.9613 -0.8569 +-1.088 3.796 -0.1239 0.9613 -0.8816 +-1.068 3.724 -0.1238 0.9613 -0.9041 +-1.045 3.646 -0.1198 0.9613 -0.9243 +-1.021 3.562 -0.1124 0.9613 -0.9422 +-0.9957 3.473 -0.1018 0.9613 -0.9578 +-0.9687 3.379 -0.08854 0.9613 -0.971 +-0.9406 3.281 -0.07294 0.9613 -0.9817 +-0.9117 3.18 -0.05546 0.9613 -0.99 +-0.882 3.077 -0.03659 0.9613 -0.9958 +-0.852 2.972 -0.0168 0.9613 -0.9991 +-0.8217 2.866 0.003405 0.9613 -1 +-0.7914 2.761 0.02352 0.9613 -0.9983 +-0.7615 2.656 0.04306 0.9613 -0.9941 +-0.732 2.553 0.06152 0.9613 -0.9875 +-0.7033 2.453 0.07842 0.9613 -0.9784 +-0.6756 2.357 0.09329 0.9613 -0.9668 +-0.6491 2.264 0.1057 0.9613 -0.9528 +-0.624 2.177 0.1153 0.9613 -0.9365 +-0.6005 2.094 0.1215 0.9613 -0.9178 +-0.5787 2.019 0.1243 0.9613 -0.8968 +-0.5589 1.949 0.1231 0.9613 -0.8735 +-0.5411 1.887 0.1177 0.9613 -0.8481 +-0.5255 1.833 0.1081 0.9613 -0.8206 +-0.5123 1.787 0.09389 0.9613 -0.791 +-0.5014 1.749 0.07511 0.9613 -0.7594 +-0.4929 1.719 0.05169 0.9613 -0.7259 +-0.487 1.699 0.02364 0.9613 -0.6907 +-0.4835 1.686 -0.008968 0.9613 -0.6536 +-0.4825 1.683 -0.04602 0.9613 -0.615 +-0.484 1.688 -0.08733 0.9613 -0.5748 +-0.4879 1.702 -0.1327 0.9613 -0.5332 +-0.4941 1.724 -0.1817 0.9613 -0.4903 +-0.5026 1.753 -0.2342 0.9613 -0.4461 +-0.5132 1.79 -0.2897 0.9613 -0.4008 +-0.5258 1.834 -0.3478 0.9613 -0.3545 +-0.5402 1.884 -0.4079 0.9613 -0.3073 +-0.5563 1.94 -0.4698 0.9613 -0.2594 +-0.5739 2.002 -0.5326 0.9613 -0.2108 +-0.5929 2.068 -0.5961 0.9613 -0.1617 +-0.6129 2.138 -0.6594 0.9613 -0.1122 +-0.6338 2.211 -0.7222 0.9613 -0.06235 +-0.6555 2.286 -0.7836 0.9613 -0.01239 +-0.6776 2.363 -0.8433 0.9613 0.0376 +-0.6999 2.441 -0.9005 0.9613 0.0875 +-0.7223 2.519 -0.9546 0.9613 0.1372 +-0.7445 2.597 -1.005 0.9613 0.1865 +-0.7663 2.673 -1.052 0.9613 0.2354 +-0.7875 2.747 -1.093 0.9613 0.2837 +-0.8078 2.818 -1.13 0.9613 0.3312 +-0.8273 2.886 -1.161 0.9613 0.378 +-0.8455 2.949 -1.185 0.9613 0.4238 +-0.8624 3.008 -1.204 0.9613 0.4685 +-0.8779 3.062 -1.215 0.9613 0.5121 +-0.8918 3.111 -1.22 0.9613 0.5544 +-0.904 3.153 -1.217 0.9613 0.5953 +-0.9145 3.19 -1.208 0.9613 0.6347 +-0.9231 3.22 -1.19 0.9613 0.6725 +-0.9298 3.243 -1.165 0.9613 0.7087 +-0.9347 3.26 -1.133 0.9613 0.743 +-0.9376 3.27 -1.093 0.9613 0.7756 +-0.9386 3.274 -1.047 0.9613 0.8061 +-0.9378 3.271 -0.9931 0.9613 0.8347 +-0.9351 3.262 -0.9328 0.9613 0.8612 +-0.9308 3.247 -0.8662 0.9613 0.8855 +-0.9249 3.226 -0.7938 0.9613 0.9076 +-0.9174 3.2 -0.716 0.9613 0.9275 +-0.9086 3.169 -0.6332 0.9613 0.945 +-0.8985 3.134 -0.5461 0.9613 0.9602 +-0.8874 3.095 -0.4552 0.9613 0.9729 +-0.8754 3.053 -0.3611 0.9613 0.9833 +-0.8627 3.009 -0.2645 0.9613 0.9911 +-0.8494 2.963 -0.166 0.9613 0.9965 +-0.8359 2.916 -0.06641 0.9613 0.9994 +-0.9699 2.839 0 0.9463 1 +-0.953 2.79 0.09873 0.9463 0.9988 +-0.9364 2.741 0.1968 0.9463 0.995 +-0.9203 2.694 0.2935 0.9463 0.9888 +-0.9048 2.649 0.3881 0.9463 0.9801 +-0.8903 2.606 0.4801 0.9463 0.9689 +-0.877 2.567 0.5688 0.9463 0.9553 +-0.8649 2.532 0.6536 0.9463 0.9394 +-0.8545 2.501 0.734 0.9463 0.9211 +-0.8457 2.475 0.8095 0.9463 0.9004 +-0.8387 2.455 0.8794 0.9463 0.8776 +-0.8338 2.441 0.9436 0.9463 0.8525 +-0.831 2.432 1.001 0.9463 0.8253 +-0.8303 2.43 1.053 0.9463 0.7961 +-0.8319 2.435 1.097 0.9463 0.7648 +-0.8357 2.446 1.135 0.9463 0.7317 +-0.8419 2.464 1.165 0.9463 0.6967 +-0.8504 2.489 1.188 0.9463 0.66 +-0.8611 2.52 1.204 0.9463 0.6216 +-0.874 2.558 1.212 0.9463 0.5817 +-0.889 2.602 1.213 0.9463 0.5403 +-0.906 2.652 1.208 0.9463 0.4976 +-0.9249 2.707 1.195 0.9463 0.4536 +-0.9454 2.767 1.176 0.9463 0.4085 +-0.9675 2.832 1.151 0.9463 0.3624 +-0.9909 2.901 1.12 0.9463 0.3153 +-1.016 2.972 1.084 0.9463 0.2675 +-1.041 3.047 1.042 0.9463 0.219 +-1.067 3.123 0.9964 0.9463 0.17 +-1.094 3.201 0.9467 0.9463 0.1205 +-1.12 3.279 0.8935 0.9463 0.07074 +-1.147 3.357 0.8374 0.9463 0.02079 +-1.173 3.434 0.7791 0.9463 -0.0292 +-1.199 3.509 0.7191 0.9463 -0.07912 +-1.224 3.581 0.658 0.9463 -0.1288 +-1.247 3.651 0.5963 0.9463 -0.1782 +-1.269 3.716 0.5347 0.9463 -0.2272 +-1.29 3.776 0.4737 0.9463 -0.2756 +-1.309 3.831 0.4138 0.9463 -0.3233 +-1.325 3.88 0.3556 0.9463 -0.3702 +-1.34 3.922 0.2994 0.9463 -0.4161 +-1.352 3.957 0.2458 0.9463 -0.4611 +-1.361 3.985 0.1952 0.9463 -0.5048 +-1.368 4.005 0.1478 0.9463 -0.5474 +-1.372 4.016 0.1041 0.9463 -0.5885 +-1.373 4.02 0.06428 0.9463 -0.6282 +-1.371 4.014 0.02855 0.9463 -0.6663 +-1.367 4 -0.002915 0.9463 -0.7027 +-1.359 3.977 -0.03002 0.9463 -0.7374 +-1.348 3.946 -0.05271 0.9463 -0.7702 +-1.335 3.906 -0.07098 0.9463 -0.8011 +-1.318 3.859 -0.0849 0.9463 -0.8301 +-1.299 3.803 -0.09457 0.9463 -0.8569 +-1.277 3.739 -0.1002 0.9463 -0.8816 +-1.253 3.669 -0.1019 0.9463 -0.9041 +-1.227 3.592 -0.09995 0.9463 -0.9243 +-1.199 3.509 -0.09471 0.9463 -0.9422 +-1.169 3.421 -0.08649 0.9463 -0.9578 +-1.137 3.328 -0.07564 0.9463 -0.971 +-1.104 3.232 -0.06258 0.9463 -0.9817 +-1.07 3.132 -0.04774 0.9463 -0.99 +-1.035 3.029 -0.03156 0.9463 -0.9958 +-0.9995 2.926 -0.01451 0.9463 -0.9991 +-0.9639 2.821 0.002942 0.9463 -1 +-0.9282 2.717 0.02031 0.9463 -0.9983 +-0.893 2.614 0.03712 0.9463 -0.9941 +-0.8583 2.512 0.05291 0.9463 -0.9875 +-0.8245 2.413 0.0672 0.9463 -0.9784 +-0.7919 2.318 0.07956 0.9463 -0.9668 +-0.7607 2.227 0.08956 0.9463 -0.9528 +-0.7311 2.14 0.09683 0.9463 -0.9365 +-0.7035 2.059 0.101 0.9463 -0.9178 +-0.6779 1.984 0.1017 0.9463 -0.8968 +-0.6547 1.916 0.09872 0.9463 -0.8735 +-0.6339 1.855 0.09179 0.9463 -0.8481 +-0.6157 1.802 0.0807 0.9463 -0.8206 +-0.6003 1.757 0.06533 0.9463 -0.791 +-0.5877 1.72 0.04557 0.9463 -0.7594 +-0.5779 1.692 0.0214 0.9463 -0.7259 +-0.5712 1.672 -0.007185 0.9463 -0.6907 +-0.5674 1.661 -0.0401 0.9463 -0.6536 +-0.5665 1.658 -0.07723 0.9463 -0.615 +-0.5686 1.664 -0.1184 0.9463 -0.5748 +-0.5735 1.679 -0.1634 0.9463 -0.5332 +-0.5812 1.701 -0.2118 0.9463 -0.4903 +-0.5916 1.732 -0.2635 0.9463 -0.4461 +-0.6045 1.769 -0.318 0.9463 -0.4008 +-0.6197 1.814 -0.3749 0.9463 -0.3545 +-0.6371 1.865 -0.4338 0.9463 -0.3073 +-0.6565 1.922 -0.4941 0.9463 -0.2594 +-0.6777 1.984 -0.5554 0.9463 -0.2108 +-0.7004 2.05 -0.6171 0.9463 -0.1617 +-0.7244 2.12 -0.6786 0.9463 -0.1122 +-0.7495 2.194 -0.7394 0.9463 -0.06235 +-0.7753 2.269 -0.7989 0.9463 -0.01239 +-0.8017 2.347 -0.8566 0.9463 0.0376 +-0.8284 2.425 -0.9117 0.9463 0.0875 +-0.8551 2.503 -0.9638 0.9463 0.1372 +-0.8815 2.58 -1.012 0.9463 0.1865 +-0.9074 2.656 -1.057 0.9463 0.2354 +-0.9326 2.73 -1.096 0.9463 0.2837 +-0.9568 2.801 -1.131 0.9463 0.3312 +-0.9798 2.868 -1.16 0.9463 0.378 +-1.001 2.931 -1.183 0.9463 0.4238 +-1.021 2.99 -1.2 0.9463 0.4685 +-1.04 3.043 -1.21 0.9463 0.5121 +-1.056 3.091 -1.214 0.9463 0.5544 +-1.07 3.133 -1.21 0.9463 0.5953 +-1.083 3.169 -1.199 0.9463 0.6347 +-1.092 3.198 -1.181 0.9463 0.6725 +-1.1 3.22 -1.156 0.9463 0.7087 +-1.106 3.236 -1.123 0.9463 0.743 +-1.109 3.245 -1.083 0.9463 0.7756 +-1.109 3.248 -1.036 0.9463 0.8061 +-1.108 3.243 -0.9827 0.9463 0.8347 +-1.105 3.233 -0.9227 0.9463 0.8612 +-1.099 3.217 -0.8565 0.9463 0.8855 +-1.091 3.194 -0.7847 0.9463 0.9076 +-1.082 3.167 -0.7075 0.9463 0.9275 +-1.071 3.135 -0.6256 0.9463 0.945 +-1.058 3.098 -0.5394 0.9463 0.9602 +-1.045 3.058 -0.4495 0.9463 0.9729 +-1.03 3.014 -0.3565 0.9463 0.9833 +-1.014 2.968 -0.2611 0.9463 0.9911 +-0.9978 2.921 -0.1639 0.9463 0.9965 +-0.9811 2.872 -0.06557 0.9463 0.9994 +-1.111 2.787 0 0.929 1 +-1.09 2.736 0.09739 0.929 0.9988 +-1.07 2.686 0.1941 0.929 0.995 +-1.051 2.638 0.2895 0.929 0.9888 +-1.032 2.591 0.383 0.929 0.9801 +-1.015 2.547 0.4738 0.929 0.9689 +-0.9989 2.507 0.5615 0.929 0.9553 +-0.9844 2.47 0.6453 0.929 0.9394 +-0.9716 2.438 0.7249 0.929 0.9211 +-0.9609 2.411 0.7996 0.929 0.9004 +-0.9523 2.39 0.869 0.929 0.8776 +-0.9461 2.374 0.9327 0.929 0.8525 +-0.9423 2.365 0.9904 0.929 0.8253 +-0.941 2.361 1.042 0.929 0.7961 +-0.9424 2.365 1.086 0.929 0.7648 +-0.9465 2.375 1.124 0.929 0.7317 +-0.9533 2.392 1.155 0.929 0.6967 +-0.9628 2.416 1.178 0.929 0.66 +-0.9749 2.446 1.195 0.929 0.6216 +-0.9896 2.483 1.204 0.929 0.5817 +-1.007 2.526 1.207 0.929 0.5403 +-1.026 2.575 1.202 0.929 0.4976 +-1.048 2.63 1.191 0.929 0.4536 +-1.072 2.689 1.174 0.929 0.4085 +-1.097 2.753 1.15 0.929 0.3624 +-1.124 2.821 1.121 0.929 0.3153 +-1.153 2.893 1.087 0.929 0.2675 +-1.182 2.967 1.047 0.929 0.219 +-1.213 3.043 1.004 0.929 0.17 +-1.243 3.12 0.9559 0.929 0.1205 +-1.275 3.198 0.9048 0.929 0.07074 +-1.305 3.276 0.8509 0.929 0.02079 +-1.336 3.353 0.7946 0.929 -0.0292 +-1.366 3.428 0.7366 0.929 -0.07912 +-1.395 3.5 0.6774 0.929 -0.1288 +-1.422 3.57 0.6176 0.929 -0.1782 +-1.448 3.635 0.5577 0.929 -0.2272 +-1.473 3.695 0.4983 0.929 -0.2756 +-1.495 3.751 0.4399 0.929 -0.3233 +-1.514 3.8 0.3829 0.929 -0.3702 +-1.531 3.843 0.3279 0.929 -0.4161 +-1.546 3.879 0.2753 0.929 -0.4611 +-1.557 3.907 0.2254 0.929 -0.5048 +-1.565 3.928 0.1786 0.929 -0.5474 +-1.57 3.94 0.1352 0.929 -0.5885 +-1.572 3.944 0.09545 0.929 -0.6282 +-1.57 3.94 0.05959 0.929 -0.6663 +-1.565 3.927 0.02776 0.929 -0.7027 +-1.556 3.905 6.64e-05 0.929 -0.7374 +-1.544 3.875 -0.02344 0.929 -0.7702 +-1.529 3.836 -0.04276 0.929 -0.8011 +-1.51 3.789 -0.05794 0.929 -0.8301 +-1.488 3.735 -0.06909 0.929 -0.8569 +-1.464 3.673 -0.07634 0.929 -0.8816 +-1.436 3.604 -0.07991 0.929 -0.9041 +-1.406 3.528 -0.08003 0.929 -0.9243 +-1.374 3.447 -0.07698 0.929 -0.9422 +-1.339 3.36 -0.07108 0.929 -0.9578 +-1.303 3.269 -0.06269 0.929 -0.971 +-1.265 3.174 -0.05219 0.929 -0.9817 +-1.225 3.075 -0.03999 0.929 -0.99 +-1.185 2.975 -0.02652 0.929 -0.9958 +-1.145 2.872 -0.01221 0.929 -0.9991 +-1.104 2.77 0.002477 0.929 -1 +-1.063 2.667 0.01709 0.929 -0.9983 +-1.022 2.565 0.03117 0.929 -0.9941 +-0.9823 2.465 0.04426 0.929 -0.9875 +-0.9435 2.368 0.05594 0.929 -0.9784 +-0.9061 2.274 0.06577 0.929 -0.9668 +-0.8703 2.184 0.07336 0.929 -0.9528 +-0.8364 2.099 0.07834 0.929 -0.9365 +-0.8047 2.019 0.08035 0.929 -0.9178 +-0.7754 1.946 0.07911 0.929 -0.8968 +-0.7488 1.879 0.07432 0.929 -0.8735 +-0.7251 1.82 0.06578 0.929 -0.8481 +-0.7044 1.768 0.05329 0.929 -0.8206 +-0.6869 1.724 0.03673 0.929 -0.791 +-0.6726 1.688 0.016 0.929 -0.7594 +-0.6617 1.661 -0.008915 0.929 -0.7259 +-0.6542 1.642 -0.03801 0.929 -0.6907 +-0.6502 1.632 -0.07121 0.929 -0.6536 +-0.6496 1.63 -0.1084 0.929 -0.615 +-0.6523 1.637 -0.1494 0.929 -0.5748 +-0.6584 1.652 -0.194 0.929 -0.5332 +-0.6676 1.675 -0.2418 0.929 -0.4903 +-0.68 1.706 -0.2927 0.929 -0.4461 +-0.6952 1.745 -0.3462 0.929 -0.4008 +-0.7132 1.79 -0.4019 0.929 -0.3545 +-0.7336 1.841 -0.4594 0.929 -0.3073 +-0.7564 1.898 -0.5182 0.929 -0.2594 +-0.7812 1.96 -0.5778 0.929 -0.2108 +-0.8078 2.027 -0.6377 0.929 -0.1617 +-0.8358 2.097 -0.6974 0.929 -0.1122 +-0.8651 2.171 -0.7563 0.929 -0.06235 +-0.8952 2.247 -0.8137 0.929 -0.01239 +-0.926 2.324 -0.8693 0.929 0.0376 +-0.957 2.402 -0.9224 0.929 0.0875 +-0.988 2.479 -0.9724 0.929 0.1372 +-1.019 2.557 -1.019 0.929 0.1865 +-1.049 2.632 -1.061 0.929 0.2354 +-1.078 2.705 -1.099 0.929 0.2837 +-1.106 2.776 -1.132 0.929 0.3312 +-1.133 2.842 -1.159 0.929 0.378 +-1.158 2.905 -1.181 0.929 0.4238 +-1.181 2.963 -1.196 0.929 0.4685 +-1.202 3.016 -1.205 0.929 0.5121 +-1.22 3.063 -1.207 0.929 0.5544 +-1.237 3.104 -1.202 0.929 0.5953 +-1.251 3.138 -1.19 0.929 0.6347 +-1.262 3.166 -1.171 0.929 0.6725 +-1.27 3.188 -1.145 0.929 0.7087 +-1.276 3.203 -1.112 0.929 0.743 +-1.279 3.211 -1.072 0.929 0.7756 +-1.28 3.212 -1.025 0.929 0.8061 +-1.278 3.207 -0.9717 0.929 0.8347 +-1.273 3.195 -0.912 0.929 0.8612 +-1.266 3.177 -0.8463 0.929 0.8855 +-1.257 3.154 -0.775 0.929 0.9076 +-1.245 3.125 -0.6986 0.929 0.9275 +-1.232 3.092 -0.6176 0.929 0.945 +-1.217 3.054 -0.5324 0.929 0.9602 +-1.2 3.012 -0.4436 0.929 0.9729 +-1.182 2.967 -0.3518 0.929 0.9833 +-1.164 2.92 -0.2576 0.929 0.9911 +-1.144 2.871 -0.1617 0.929 0.9965 +-1.124 2.821 -0.06468 0.929 0.9994 +-1.248 2.728 0 0.9093 1 +-1.225 2.676 0.096 0.9093 0.9988 +-1.201 2.625 0.1913 0.9093 0.995 +-1.179 2.575 0.2854 0.9093 0.9888 +-1.157 2.528 0.3776 0.9093 0.9801 +-1.136 2.483 0.4672 0.9093 0.9689 +-1.117 2.441 0.5537 0.9093 0.9553 +-1.1 2.403 0.6366 0.9093 0.9394 +-1.085 2.37 0.7153 0.9093 0.9211 +-1.072 2.342 0.7892 0.9093 0.9004 +-1.062 2.32 0.8581 0.9093 0.8776 +-1.054 2.303 0.9213 0.9093 0.8525 +-1.049 2.292 0.9787 0.9093 0.8253 +-1.047 2.288 1.03 0.9093 0.7961 +-1.048 2.29 1.075 0.9093 0.7648 +-1.052 2.3 1.113 0.9093 0.7317 +-1.06 2.316 1.144 0.9093 0.6967 +-1.07 2.338 1.168 0.9093 0.66 +-1.084 2.368 1.185 0.9093 0.6216 +-1.1 2.403 1.196 0.9093 0.5817 +-1.119 2.446 1.199 0.9093 0.5403 +-1.141 2.494 1.196 0.9093 0.4976 +-1.166 2.547 1.187 0.9093 0.4536 +-1.193 2.606 1.171 0.9093 0.4085 +-1.221 2.669 1.149 0.9093 0.3624 +-1.252 2.736 1.122 0.9093 0.3153 +-1.285 2.807 1.089 0.9093 0.2675 +-1.318 2.88 1.052 0.9093 0.219 +-1.353 2.956 1.01 0.9093 0.17 +-1.388 3.033 0.9646 0.9093 0.1205 +-1.423 3.11 0.9156 0.9093 0.07074 +-1.459 3.187 0.8638 0.9093 0.02079 +-1.494 3.264 0.8096 0.9093 -0.0292 +-1.528 3.338 0.7536 0.9093 -0.07912 +-1.561 3.411 0.6964 0.9093 -0.1288 +-1.593 3.48 0.6385 0.9093 -0.1782 +-1.622 3.545 0.5804 0.9093 -0.2272 +-1.65 3.606 0.5226 0.9093 -0.2756 +-1.675 3.661 0.4657 0.9093 -0.3233 +-1.698 3.711 0.4101 0.9093 -0.3702 +-1.718 3.754 0.3562 0.9093 -0.4161 +-1.735 3.79 0.3046 0.9093 -0.4611 +-1.748 3.819 0.2555 0.9093 -0.5048 +-1.757 3.84 0.2092 0.9093 -0.5474 +-1.763 3.853 0.1662 0.9093 -0.5885 +-1.766 3.858 0.1266 0.9093 -0.6282 +-1.764 3.855 0.0906 0.9093 -0.6663 +-1.759 3.843 0.05842 0.9093 -0.7027 +-1.749 3.822 0.03015 0.9093 -0.7374 +-1.736 3.793 0.005839 0.9093 -0.7702 +-1.719 3.756 -0.01451 0.9093 -0.8011 +-1.698 3.71 -0.03095 0.9093 -0.8301 +-1.674 3.657 -0.04355 0.9093 -0.8569 +-1.646 3.597 -0.05248 0.9093 -0.8816 +-1.615 3.529 -0.0579 0.9093 -0.9041 +-1.581 3.455 -0.06005 0.9093 -0.9243 +-1.545 3.375 -0.05919 0.9093 -0.9422 +-1.506 3.29 -0.05563 0.9093 -0.9578 +-1.465 3.201 -0.0497 0.9093 -0.971 +-1.422 3.108 -0.04177 0.9093 -0.9817 +-1.378 3.011 -0.03222 0.9093 -0.99 +-1.333 2.912 -0.02146 0.9093 -0.9958 +-1.287 2.812 -0.009904 0.9093 -0.9991 +-1.241 2.711 0.00201 0.9093 -1 +-1.195 2.61 0.01385 0.9093 -0.9983 +-1.149 2.51 0.02519 0.9093 -0.9941 +-1.104 2.412 0.03559 0.9093 -0.9875 +-1.06 2.316 0.04464 0.9093 -0.9784 +-1.018 2.224 0.05194 0.9093 -0.9668 +-0.9776 2.136 0.05711 0.9093 -0.9528 +-0.9395 2.053 0.0598 0.9093 -0.9365 +-0.9039 1.975 0.05967 0.9093 -0.9178 +-0.871 1.903 0.05645 0.9093 -0.8968 +-0.8412 1.838 0.04988 0.9093 -0.8735 +-0.8146 1.78 0.03973 0.9093 -0.8481 +-0.7915 1.729 0.02585 0.9093 -0.8206 +-0.7719 1.687 0.008109 0.9093 -0.791 +-0.7561 1.652 -0.01357 0.9093 -0.7594 +-0.7441 1.626 -0.03922 0.9093 -0.7259 +-0.736 1.608 -0.06881 0.9093 -0.6907 +-0.7318 1.599 -0.1023 0.9093 -0.6536 +-0.7315 1.598 -0.1395 0.9093 -0.615 +-0.735 1.606 -0.1803 0.9093 -0.5748 +-0.7423 1.622 -0.2244 0.9093 -0.5332 +-0.7532 1.646 -0.2717 0.9093 -0.4903 +-0.7676 1.677 -0.3217 0.9093 -0.4461 +-0.7853 1.716 -0.3741 0.9093 -0.4008 +-0.806 1.761 -0.4286 0.9093 -0.3545 +-0.8297 1.813 -0.4847 0.9093 -0.3073 +-0.8558 1.87 -0.542 0.9093 -0.2594 +-0.8843 1.932 -0.5999 0.9093 -0.2108 +-0.9148 1.999 -0.658 0.9093 -0.1617 +-0.947 2.069 -0.7157 0.9093 -0.1122 +-0.9805 2.142 -0.7726 0.9093 -0.06235 +-1.015 2.218 -0.828 0.9093 -0.01239 +-1.05 2.294 -0.8815 0.9093 0.0376 +-1.086 2.372 -0.9324 0.9093 0.0875 +-1.121 2.449 -0.9803 0.9093 0.1372 +-1.156 2.526 -1.025 0.9093 0.1865 +-1.19 2.6 -1.065 0.9093 0.2354 +-1.223 2.673 -1.101 0.9093 0.2837 +-1.255 2.743 -1.132 0.9093 0.3312 +-1.285 2.809 -1.157 0.9093 0.378 +-1.314 2.87 -1.177 0.9093 0.4238 +-1.34 2.927 -1.191 0.9093 0.4685 +-1.363 2.979 -1.198 0.9093 0.5121 +-1.384 3.025 -1.199 0.9093 0.5544 +-1.403 3.065 -1.193 0.9093 0.5953 +-1.418 3.099 -1.18 0.9093 0.6347 +-1.431 3.126 -1.161 0.9093 0.6725 +-1.44 3.146 -1.134 0.9093 0.7087 +-1.446 3.16 -1.101 0.9093 0.743 +-1.449 3.167 -1.06 0.9093 0.7756 +-1.449 3.167 -1.013 0.9093 0.8061 +-1.447 3.161 -0.9601 0.9093 0.8347 +-1.441 3.148 -0.9007 0.9093 0.8612 +-1.432 3.129 -0.8355 0.9093 0.8855 +-1.421 3.105 -0.7649 0.9093 0.9076 +-1.407 3.075 -0.6893 0.9093 0.9275 +-1.391 3.04 -0.6092 0.9093 0.945 +-1.374 3.001 -0.525 0.9093 0.9602 +-1.354 2.958 -0.4374 0.9093 0.9729 +-1.333 2.912 -0.3468 0.9093 0.9833 +-1.311 2.864 -0.254 0.9093 0.9911 +-1.288 2.814 -0.1594 0.9093 0.9965 +-1.264 2.762 -0.06375 0.9093 0.9994 +-1.383 2.662 0 0.8874 1 +-1.356 2.609 0.09454 0.8874 0.9988 +-1.329 2.557 0.1885 0.8874 0.995 +-1.303 2.507 0.2811 0.8874 0.9888 +-1.277 2.458 0.372 0.8874 0.9801 +-1.253 2.412 0.4603 0.8874 0.9689 +-1.231 2.37 0.5457 0.8874 0.9553 +-1.211 2.331 0.6275 0.8874 0.9394 +-1.194 2.297 0.7052 0.8874 0.9211 +-1.179 2.268 0.7784 0.8874 0.9004 +-1.166 2.245 0.8466 0.8874 0.8776 +-1.157 2.227 0.9094 0.8874 0.8525 +-1.151 2.215 0.9664 0.8874 0.8253 +-1.148 2.21 1.017 0.8874 0.7961 +-1.149 2.211 1.062 0.8874 0.7648 +-1.153 2.22 1.1 0.8874 0.7317 +-1.161 2.234 1.132 0.8874 0.6967 +-1.172 2.256 1.157 0.8874 0.66 +-1.187 2.284 1.175 0.8874 0.6216 +-1.205 2.319 1.186 0.8874 0.5817 +-1.226 2.36 1.191 0.8874 0.5403 +-1.251 2.407 1.189 0.8874 0.4976 +-1.278 2.459 1.181 0.8874 0.4536 +-1.308 2.517 1.167 0.8874 0.4085 +-1.34 2.579 1.147 0.8874 0.3624 +-1.375 2.645 1.122 0.8874 0.3153 +-1.411 2.715 1.091 0.8874 0.2675 +-1.448 2.787 1.056 0.8874 0.219 +-1.487 2.862 1.016 0.8874 0.17 +-1.527 2.938 0.9727 0.8874 0.1205 +-1.566 3.015 0.9258 0.8874 0.07074 +-1.606 3.091 0.8761 0.8874 0.02079 +-1.645 3.167 0.824 0.8874 -0.0292 +-1.684 3.241 0.7701 0.8874 -0.07912 +-1.721 3.313 0.7149 0.8874 -0.1288 +-1.757 3.381 0.6589 0.8874 -0.1782 +-1.791 3.446 0.6026 0.8874 -0.2272 +-1.822 3.507 0.5466 0.8874 -0.2756 +-1.851 3.562 0.4912 0.8874 -0.3233 +-1.877 3.612 0.437 0.8874 -0.3702 +-1.899 3.655 0.3843 0.8874 -0.4161 +-1.918 3.691 0.3337 0.8874 -0.4611 +-1.933 3.721 0.2854 0.8874 -0.5048 +-1.945 3.742 0.2397 0.8874 -0.5474 +-1.952 3.756 0.1971 0.8874 -0.5885 +-1.955 3.762 0.1576 0.8874 -0.6282 +-1.953 3.759 0.1215 0.8874 -0.6663 +-1.948 3.748 0.08905 0.8874 -0.7027 +-1.937 3.729 0.06022 0.8874 -0.7374 +-1.923 3.701 0.03512 0.8874 -0.7702 +-1.904 3.665 0.01375 0.8874 -0.8011 +-1.882 3.621 -0.003929 0.8874 -0.8301 +-1.855 3.57 -0.01799 0.8874 -0.8569 +-1.824 3.511 -0.02858 0.8874 -0.8816 +-1.79 3.445 -0.03585 0.8874 -0.9041 +-1.753 3.373 -0.04003 0.8874 -0.9243 +-1.712 3.295 -0.04137 0.8874 -0.9422 +-1.669 3.212 -0.04015 0.8874 -0.9578 +-1.624 3.125 -0.03668 0.8874 -0.971 +-1.576 3.033 -0.03132 0.8874 -0.9817 +-1.527 2.939 -0.02443 0.8874 -0.99 +-1.477 2.842 -0.01638 0.8874 -0.9958 +-1.426 2.744 -0.007592 0.8874 -0.9991 +-1.375 2.645 0.001542 0.8874 -1 +-1.323 2.547 0.01061 0.8874 -0.9983 +-1.273 2.449 0.01919 0.8874 -0.9941 +-1.223 2.353 0.02689 0.8874 -0.9875 +-1.174 2.26 0.03332 0.8874 -0.9784 +-1.127 2.17 0.03808 0.8874 -0.9668 +-1.083 2.084 0.04083 0.8874 -0.9528 +-1.04 2.002 0.04122 0.8874 -0.9365 +-1.001 1.926 0.03896 0.8874 -0.9178 +-0.9645 1.856 0.03376 0.8874 -0.8968 +-0.9316 1.793 0.0254 0.8874 -0.8735 +-0.9022 1.736 0.01366 0.8874 -0.8481 +-0.8768 1.687 -0.001607 0.8874 -0.8206 +-0.8553 1.646 -0.02052 0.8874 -0.791 +-0.8381 1.613 -0.04314 0.8874 -0.7594 +-0.8251 1.588 -0.0695 0.8874 -0.7259 +-0.8165 1.571 -0.09957 0.8874 -0.6907 +-0.8122 1.563 -0.1333 0.8874 -0.6536 +-0.8123 1.563 -0.1705 0.8874 -0.615 +-0.8166 1.572 -0.2111 0.8874 -0.5748 +-0.8252 1.588 -0.2548 0.8874 -0.5332 +-0.8378 1.612 -0.3013 0.8874 -0.4903 +-0.8543 1.644 -0.3505 0.8874 -0.4461 +-0.8745 1.683 -0.4018 0.8874 -0.4008 +-0.8982 1.729 -0.4551 0.8874 -0.3545 +-0.925 1.78 -0.5097 0.8874 -0.3073 +-0.9546 1.837 -0.5654 0.8874 -0.2594 +-0.9868 1.899 -0.6216 0.8874 -0.2108 +-1.021 1.966 -0.6778 0.8874 -0.1617 +-1.058 2.035 -0.7336 0.8874 -0.1122 +-1.095 2.108 -0.7884 0.8874 -0.06235 +-1.134 2.183 -0.8418 0.8874 -0.01239 +-1.174 2.259 -0.8931 0.8874 0.0376 +-1.213 2.335 -0.9419 0.8874 0.0875 +-1.253 2.412 -0.9877 0.8874 0.1372 +-1.292 2.487 -1.03 0.8874 0.1865 +-1.331 2.561 -1.068 0.8874 0.2354 +-1.368 2.633 -1.102 0.8874 0.2837 +-1.404 2.702 -1.131 0.8874 0.3312 +-1.437 2.766 -1.155 0.8874 0.378 +-1.469 2.827 -1.173 0.8874 0.4238 +-1.498 2.883 -1.185 0.8874 0.4685 +-1.524 2.934 -1.191 0.8874 0.5121 +-1.548 2.979 -1.19 0.8874 0.5544 +-1.568 3.018 -1.183 0.8874 0.5953 +-1.585 3.05 -1.17 0.8874 0.6347 +-1.598 3.076 -1.149 0.8874 0.6725 +-1.608 3.096 -1.122 0.8874 0.7087 +-1.615 3.108 -1.088 0.8874 0.743 +-1.618 3.114 -1.048 0.8874 0.7756 +-1.618 3.113 -1.001 0.8874 0.8061 +-1.614 3.106 -0.9479 0.8874 0.8347 +-1.607 3.092 -0.8889 0.8874 0.8612 +-1.596 3.072 -0.8242 0.8874 0.8855 +-1.583 3.047 -0.7543 0.8874 0.9076 +-1.567 3.016 -0.6796 0.8874 0.9275 +-1.549 2.98 -0.6004 0.8874 0.945 +-1.528 2.94 -0.5174 0.8874 0.9602 +-1.505 2.897 -0.4309 0.8874 0.9729 +-1.481 2.85 -0.3417 0.8874 0.9833 +-1.455 2.801 -0.2501 0.8874 0.9911 +-1.429 2.749 -0.157 0.8874 0.9965 +-1.401 2.697 -0.06279 0.8874 0.9994 +-1.515 2.59 0 0.8632 1 +-1.483 2.536 0.09303 0.8632 0.9988 +-1.453 2.484 0.1854 0.8632 0.995 +-1.423 2.433 0.2767 0.8632 0.9888 +-1.394 2.383 0.3661 0.8632 0.9801 +-1.367 2.337 0.4532 0.8632 0.9689 +-1.342 2.294 0.5373 0.8632 0.9553 +-1.319 2.255 0.618 0.8632 0.9394 +-1.298 2.22 0.6947 0.8632 0.9211 +-1.281 2.19 0.7671 0.8632 0.9004 +-1.266 2.165 0.8346 0.8632 0.8776 +-1.256 2.147 0.8968 0.8632 0.8525 +-1.248 2.134 0.9535 0.8632 0.8253 +-1.245 2.128 1.004 0.8632 0.7961 +-1.245 2.128 1.049 0.8632 0.7648 +-1.249 2.136 1.088 0.8632 0.7317 +-1.257 2.149 1.12 0.8632 0.6967 +-1.269 2.17 1.145 0.8632 0.66 +-1.285 2.197 1.164 0.8632 0.6216 +-1.304 2.23 1.176 0.8632 0.5817 +-1.328 2.27 1.182 0.8632 0.5403 +-1.354 2.316 1.182 0.8632 0.4976 +-1.384 2.367 1.175 0.8632 0.4536 +-1.417 2.423 1.163 0.8632 0.4085 +-1.453 2.484 1.145 0.8632 0.3624 +-1.491 2.549 1.121 0.8632 0.3153 +-1.531 2.617 1.092 0.8632 0.2675 +-1.572 2.689 1.059 0.8632 0.219 +-1.615 2.762 1.021 0.8632 0.17 +-1.659 2.837 0.9801 0.8632 0.1205 +-1.703 2.912 0.9355 0.8632 0.07074 +-1.747 2.988 0.8879 0.8632 0.02079 +-1.791 3.063 0.838 0.8632 -0.0292 +-1.834 3.136 0.7862 0.8632 -0.07912 +-1.876 3.207 0.733 0.8632 -0.1288 +-1.915 3.275 0.679 0.8632 -0.1782 +-1.953 3.339 0.6246 0.8632 -0.2272 +-1.988 3.399 0.5702 0.8632 -0.2756 +-2.02 3.454 0.5164 0.8632 -0.3233 +-2.049 3.504 0.4636 0.8632 -0.3702 +-2.074 3.547 0.4122 0.8632 -0.4161 +-2.096 3.583 0.3626 0.8632 -0.4611 +-2.113 3.613 0.3151 0.8632 -0.5048 +-2.126 3.635 0.2701 0.8632 -0.5474 +-2.134 3.649 0.2278 0.8632 -0.5885 +-2.138 3.656 0.1885 0.8632 -0.6282 +-2.137 3.654 0.1524 0.8632 -0.6663 +-2.131 3.644 0.1196 0.8632 -0.7027 +-2.12 3.626 0.09025 0.8632 -0.7374 +-2.105 3.599 0.06437 0.8632 -0.7702 +-2.085 3.565 0.042 0.8632 -0.8011 +-2.06 3.522 0.02309 0.8632 -0.8301 +-2.031 3.473 0.007576 0.8632 -0.8569 +-1.998 3.416 -0.004662 0.8632 -0.8816 +-1.96 3.352 -0.01379 0.8632 -0.9041 +-1.919 3.282 -0.01999 0.8632 -0.9243 +-1.875 3.206 -0.02352 0.8632 -0.9422 +-1.828 3.125 -0.02464 0.8632 -0.9578 +-1.778 3.04 -0.02364 0.8632 -0.971 +-1.726 2.951 -0.02085 0.8632 -0.9817 +-1.672 2.859 -0.01662 0.8632 -0.99 +-1.617 2.765 -0.0113 0.8632 -0.9958 +-1.561 2.67 -0.005275 0.8632 -0.9991 +-1.505 2.573 0.001073 0.8632 -1 +-1.449 2.477 0.007356 0.8632 -0.9983 +-1.393 2.382 0.01319 0.8632 -0.9941 +-1.338 2.289 0.01818 0.8632 -0.9875 +-1.285 2.198 0.02197 0.8632 -0.9784 +-1.234 2.11 0.02419 0.8632 -0.9668 +-1.185 2.026 0.02452 0.8632 -0.9528 +-1.139 1.947 0.02262 0.8632 -0.9365 +-1.096 1.873 0.01822 0.8632 -0.9178 +-1.056 1.805 0.01105 0.8632 -0.8968 +-1.02 1.744 0.0009026 0.8632 -0.8735 +-0.9879 1.689 -0.01242 0.8632 -0.8481 +-0.9602 1.642 -0.02906 0.8632 -0.8206 +-0.937 1.602 -0.04913 0.8632 -0.791 +-0.9184 1.57 -0.07268 0.8632 -0.7594 +-0.9045 1.547 -0.09974 0.8632 -0.7259 +-0.8954 1.531 -0.1303 0.8632 -0.6907 +-0.8912 1.524 -0.1642 0.8632 -0.6536 +-0.8917 1.525 -0.2014 0.8632 -0.615 +-0.897 1.534 -0.2417 0.8632 -0.5748 +-0.907 1.551 -0.2849 0.8632 -0.5332 +-0.9214 1.575 -0.3308 0.8632 -0.4903 +-0.9401 1.607 -0.379 0.8632 -0.4461 +-0.9628 1.646 -0.4293 0.8632 -0.4008 +-0.9893 1.692 -0.4812 0.8632 -0.3545 +-1.019 1.743 -0.5344 0.8632 -0.3073 +-1.053 1.8 -0.5884 0.8632 -0.2594 +-1.089 1.861 -0.6429 0.8632 -0.2108 +-1.127 1.927 -0.6972 0.8632 -0.1617 +-1.167 1.996 -0.751 0.8632 -0.1122 +-1.209 2.068 -0.8038 0.8632 -0.06235 +-1.253 2.142 -0.855 0.8632 -0.01239 +-1.296 2.217 -0.9042 0.8632 0.0376 +-1.341 2.292 -0.9508 0.8632 0.0875 +-1.385 2.368 -0.9944 0.8632 0.1372 +-1.428 2.442 -1.035 0.8632 0.1865 +-1.471 2.515 -1.071 0.8632 0.2354 +-1.512 2.585 -1.102 0.8632 0.2837 +-1.551 2.652 -1.129 0.8632 0.3312 +-1.588 2.716 -1.151 0.8632 0.378 +-1.623 2.775 -1.168 0.8632 0.4238 +-1.655 2.83 -1.178 0.8632 0.4685 +-1.684 2.879 -1.183 0.8632 0.5121 +-1.71 2.923 -1.181 0.8632 0.5544 +-1.732 2.961 -1.173 0.8632 0.5953 +-1.75 2.992 -1.158 0.8632 0.6347 +-1.765 3.017 -1.137 0.8632 0.6725 +-1.775 3.035 -1.11 0.8632 0.7087 +-1.782 3.047 -1.075 0.8632 0.743 +-1.785 3.052 -1.035 0.8632 0.7756 +-1.784 3.05 -0.988 0.8632 0.8061 +-1.779 3.041 -0.9351 0.8632 0.8347 +-1.77 3.027 -0.8765 0.8632 0.8612 +-1.758 3.006 -0.8124 0.8632 0.8855 +-1.743 2.98 -0.7433 0.8632 0.9076 +-1.724 2.948 -0.6694 0.8632 0.9275 +-1.703 2.912 -0.5913 0.8632 0.945 +-1.679 2.871 -0.5094 0.8632 0.9602 +-1.653 2.827 -0.4242 0.8632 0.9729 +-1.626 2.78 -0.3363 0.8632 0.9833 +-1.596 2.73 -0.2462 0.8632 0.9911 +-1.566 2.678 -0.1545 0.8632 0.9965 +-1.535 2.625 -0.06178 0.8632 0.9994 +-1.642 2.511 0 0.8369 1 +-1.607 2.457 0.09146 0.8369 0.9988 +-1.572 2.404 0.1823 0.8369 0.995 +-1.539 2.353 0.272 0.8369 0.9888 +-1.506 2.303 0.36 0.8369 0.9801 +-1.476 2.256 0.4457 0.8369 0.9689 +-1.447 2.213 0.5286 0.8369 0.9553 +-1.421 2.173 0.6081 0.8369 0.9394 +-1.398 2.138 0.6838 0.8369 0.9211 +-1.378 2.107 0.7552 0.8369 0.9004 +-1.362 2.082 0.822 0.8369 0.8776 +-1.349 2.063 0.8837 0.8369 0.8525 +-1.34 2.049 0.9401 0.8369 0.8253 +-1.336 2.042 0.9907 0.8369 0.7961 +-1.335 2.042 1.035 0.8369 0.7648 +-1.339 2.048 1.074 0.8369 0.7317 +-1.348 2.06 1.107 0.8369 0.6967 +-1.36 2.08 1.133 0.8369 0.66 +-1.377 2.106 1.152 0.8369 0.6216 +-1.398 2.138 1.166 0.8369 0.5817 +-1.423 2.176 1.173 0.8369 0.5403 +-1.452 2.221 1.174 0.8369 0.4976 +-1.485 2.27 1.169 0.8369 0.4536 +-1.521 2.325 1.158 0.8369 0.4085 +-1.56 2.385 1.141 0.8369 0.3624 +-1.601 2.448 1.119 0.8369 0.3153 +-1.645 2.515 1.093 0.8369 0.2675 +-1.69 2.585 1.062 0.8369 0.219 +-1.737 2.656 1.026 0.8369 0.17 +-1.785 2.73 0.987 0.8369 0.1205 +-1.834 2.804 0.9445 0.8369 0.07074 +-1.882 2.878 0.8992 0.8369 0.02079 +-1.93 2.952 0.8514 0.8369 -0.0292 +-1.978 3.024 0.8018 0.8369 -0.07912 +-2.023 3.094 0.7507 0.8369 -0.1288 +-2.067 3.161 0.6986 0.8369 -0.1782 +-2.109 3.224 0.6461 0.8369 -0.2272 +-2.147 3.283 0.5935 0.8369 -0.2756 +-2.183 3.338 0.5413 0.8369 -0.3233 +-2.215 3.387 0.4899 0.8369 -0.3702 +-2.243 3.43 0.4398 0.8369 -0.4161 +-2.267 3.466 0.3912 0.8369 -0.4611 +-2.286 3.496 0.3446 0.8369 -0.5048 +-2.301 3.518 0.3003 0.8369 -0.5474 +-2.311 3.533 0.2584 0.8369 -0.5885 +-2.315 3.54 0.2193 0.8369 -0.6282 +-2.315 3.539 0.1832 0.8369 -0.6663 +-2.309 3.53 0.1501 0.8369 -0.7027 +-2.298 3.513 0.1202 0.8369 -0.7374 +-2.281 3.488 0.09359 0.8369 -0.7702 +-2.26 3.455 0.07022 0.8369 -0.8011 +-2.233 3.414 0.05009 0.8369 -0.8301 +-2.202 3.366 0.03314 0.8369 -0.8569 +-2.166 3.311 0.01926 0.8369 -0.8816 +-2.125 3.25 0.00829 0.8369 -0.9041 +-2.081 3.182 5.697e-05 0.8369 -0.9243 +-2.033 3.109 -0.005662 0.8369 -0.9422 +-1.982 3.031 -0.009116 0.8369 -0.9578 +-1.928 2.948 -0.01058 0.8369 -0.971 +-1.872 2.862 -0.01037 0.8369 -0.9817 +-1.813 2.773 -0.008799 0.8369 -0.99 +-1.754 2.681 -0.006209 0.8369 -0.9958 +-1.693 2.588 -0.002954 0.8369 -0.9991 +-1.632 2.495 0.000604 0.8369 -1 +-1.571 2.402 0.004101 0.8369 -0.9983 +-1.51 2.309 0.007172 0.8369 -0.9941 +-1.451 2.219 0.009459 0.8369 -0.9875 +-1.393 2.13 0.01061 0.8369 -0.9784 +-1.338 2.045 0.01029 0.8369 -0.9668 +-1.285 1.964 0.00819 0.8369 -0.9528 +-1.234 1.887 0.004004 0.8369 -0.9365 +-1.188 1.816 -0.002534 0.8369 -0.9178 +-1.145 1.75 -0.01166 0.8369 -0.8968 +-1.106 1.691 -0.02359 0.8369 -0.8735 +-1.071 1.638 -0.03849 0.8369 -0.8481 +-1.042 1.593 -0.0565 0.8369 -0.8206 +-1.017 1.555 -0.07771 0.8369 -0.791 +-0.9969 1.524 -0.1022 0.8369 -0.7594 +-0.9822 1.502 -0.1299 0.8369 -0.7259 +-0.9728 1.487 -0.1609 0.8369 -0.6907 +-0.9687 1.481 -0.195 0.8369 -0.6536 +-0.9698 1.483 -0.2322 0.8369 -0.615 +-0.9761 1.492 -0.2722 0.8369 -0.5748 +-0.9874 1.51 -0.3149 0.8369 -0.5332 +-1.004 1.535 -0.3601 0.8369 -0.4903 +-1.025 1.567 -0.4074 0.8369 -0.4461 +-1.05 1.605 -0.4565 0.8369 -0.4008 +-1.079 1.65 -0.5071 0.8369 -0.3545 +-1.113 1.701 -0.5588 0.8369 -0.3073 +-1.149 1.757 -0.6111 0.8369 -0.2594 +-1.189 1.818 -0.6638 0.8369 -0.2108 +-1.231 1.883 -0.7162 0.8369 -0.1617 +-1.276 1.951 -0.768 0.8369 -0.1122 +-1.322 2.022 -0.8187 0.8369 -0.06235 +-1.37 2.094 -0.8677 0.8369 -0.01239 +-1.418 2.168 -0.9147 0.8369 0.0376 +-1.467 2.242 -0.9591 0.8369 0.0875 +-1.515 2.316 -1.001 0.8369 0.1372 +-1.563 2.389 -1.039 0.8369 0.1865 +-1.609 2.461 -1.073 0.8369 0.2354 +-1.654 2.529 -1.102 0.8369 0.2837 +-1.697 2.595 -1.127 0.8369 0.3312 +-1.738 2.657 -1.147 0.8369 0.378 +-1.776 2.715 -1.162 0.8369 0.4238 +-1.811 2.768 -1.171 0.8369 0.4685 +-1.842 2.816 -1.174 0.8369 0.5121 +-1.87 2.859 -1.171 0.8369 0.5544 +-1.893 2.895 -1.162 0.8369 0.5953 +-1.913 2.925 -1.146 0.8369 0.6347 +-1.929 2.949 -1.125 0.8369 0.6725 +-1.94 2.966 -1.096 0.8369 0.7087 +-1.947 2.976 -1.062 0.8369 0.743 +-1.949 2.98 -1.021 0.8369 0.7756 +-1.947 2.977 -0.9743 0.8369 0.8061 +-1.941 2.968 -0.9217 0.8369 0.8347 +-1.931 2.953 -0.8636 0.8369 0.8612 +-1.917 2.931 -0.8001 0.8369 0.8855 +-1.9 2.904 -0.7317 0.8369 0.9076 +-1.879 2.872 -0.6588 0.8369 0.9275 +-1.855 2.836 -0.5817 0.8369 0.945 +-1.828 2.794 -0.501 0.8369 0.9602 +-1.798 2.75 -0.4172 0.8369 0.9729 +-1.767 2.702 -0.3306 0.8369 0.9833 +-1.734 2.652 -0.242 0.8369 0.9911 +-1.7 2.6 -0.1519 0.8369 0.9965 +-1.665 2.546 -0.06074 0.8369 0.9994 +-1.766 2.425 0 0.8085 1 +-1.726 2.372 0.08983 0.8085 0.9988 +-1.688 2.319 0.1791 0.8085 0.995 +-1.65 2.267 0.2672 0.8085 0.9888 +-1.614 2.218 0.3537 0.8085 0.9801 +-1.58 2.171 0.438 0.8085 0.9689 +-1.548 2.127 0.5195 0.8085 0.9553 +-1.519 2.087 0.5978 0.8085 0.9394 +-1.493 2.051 0.6724 0.8085 0.9211 +-1.471 2.021 0.743 0.8085 0.9004 +-1.452 1.995 0.809 0.8085 0.8776 +-1.438 1.975 0.8701 0.8085 0.8525 +-1.427 1.961 0.926 0.8085 0.8253 +-1.422 1.953 0.9764 0.8085 0.7961 +-1.421 1.952 1.021 0.8085 0.7648 +-1.424 1.957 1.06 0.8085 0.7317 +-1.433 1.968 1.093 0.8085 0.6967 +-1.446 1.986 1.119 0.8085 0.66 +-1.464 2.011 1.14 0.8085 0.6216 +-1.486 2.042 1.154 0.8085 0.5817 +-1.513 2.079 1.162 0.8085 0.5403 +-1.544 2.122 1.165 0.8085 0.4976 +-1.579 2.17 1.161 0.8085 0.4536 +-1.618 2.223 1.152 0.8085 0.4085 +-1.66 2.281 1.137 0.8085 0.3624 +-1.705 2.342 1.117 0.8085 0.3153 +-1.752 2.407 1.093 0.8085 0.2675 +-1.802 2.475 1.063 0.8085 0.219 +-1.853 2.546 1.03 0.8085 0.17 +-1.905 2.617 0.9932 0.8085 0.1205 +-1.958 2.69 0.953 0.8085 0.07074 +-2.011 2.762 0.9099 0.8085 0.02079 +-2.063 2.834 0.8643 0.8085 -0.0292 +-2.114 2.905 0.8169 0.8085 -0.07912 +-2.164 2.973 0.7679 0.8085 -0.1288 +-2.212 3.039 0.7178 0.8085 -0.1782 +-2.258 3.101 0.6672 0.8085 -0.2272 +-2.3 3.16 0.6164 0.8085 -0.2756 +-2.339 3.213 0.5658 0.8085 -0.3233 +-2.374 3.262 0.5159 0.8085 -0.3702 +-2.405 3.304 0.4671 0.8085 -0.4161 +-2.432 3.341 0.4197 0.8085 -0.4611 +-2.453 3.37 0.374 0.8085 -0.5048 +-2.469 3.393 0.3303 0.8085 -0.5474 +-2.48 3.408 0.2889 0.8085 -0.5885 +-2.486 3.415 0.25 0.8085 -0.6282 +-2.486 3.415 0.2138 0.8085 -0.6663 +-2.48 3.407 0.1805 0.8085 -0.7027 +-2.468 3.391 0.1501 0.8085 -0.7374 +-2.451 3.367 0.1227 0.8085 -0.7702 +-2.428 3.336 0.0984 0.8085 -0.8011 +-2.4 3.297 0.07707 0.8085 -0.8301 +-2.366 3.251 0.05869 0.8085 -0.8569 +-2.328 3.198 0.04316 0.8085 -0.8816 +-2.285 3.139 0.03036 0.8085 -0.9041 +-2.237 3.074 0.02011 0.8085 -0.9243 +-2.186 3.003 0.0122 0.8085 -0.9422 +-2.131 2.928 0.006414 0.8085 -0.9578 +-2.073 2.848 0.002479 0.8085 -0.971 +-2.012 2.765 0.0001171 0.8085 -0.9817 +-1.95 2.679 -0.0009746 0.8085 -0.99 +-1.885 2.59 -0.001114 0.8085 -0.9958 +-1.82 2.501 -0.000632 0.8085 -0.9991 +-1.754 2.41 0.0001341 0.8085 -1 +-1.689 2.32 0.0008428 0.8085 -0.9983 +-1.624 2.231 0.001153 0.8085 -0.9941 +-1.56 2.143 0.0007298 0.8085 -0.9875 +-1.498 2.058 -0.0007542 0.8085 -0.9784 +-1.438 1.976 -0.003612 0.8085 -0.9668 +-1.381 1.897 -0.00814 0.8085 -0.9528 +-1.327 1.823 -0.01461 0.8085 -0.9365 +-1.277 1.755 -0.02328 0.8085 -0.9178 +-1.231 1.691 -0.03437 0.8085 -0.8968 +-1.19 1.634 -0.04807 0.8085 -0.8735 +-1.153 1.584 -0.06454 0.8085 -0.8481 +-1.121 1.54 -0.08391 0.8085 -0.8206 +-1.095 1.504 -0.1062 0.8085 -0.791 +-1.074 1.475 -0.1316 0.8085 -0.7594 +-1.058 1.454 -0.16 0.8085 -0.7259 +-1.049 1.44 -0.1914 0.8085 -0.6907 +-1.045 1.435 -0.2257 0.8085 -0.6536 +-1.046 1.437 -0.2628 0.8085 -0.615 +-1.054 1.448 -0.3025 0.8085 -0.5748 +-1.067 1.465 -0.3447 0.8085 -0.5332 +-1.085 1.49 -0.3891 0.8085 -0.4903 +-1.108 1.522 -0.4354 0.8085 -0.4461 +-1.136 1.56 -0.4834 0.8085 -0.4008 +-1.168 1.605 -0.5326 0.8085 -0.3545 +-1.205 1.655 -0.5828 0.8085 -0.3073 +-1.245 1.71 -0.6334 0.8085 -0.2594 +-1.288 1.77 -0.6842 0.8085 -0.2108 +-1.335 1.834 -0.7347 0.8085 -0.1617 +-1.383 1.9 -0.7845 0.8085 -0.1122 +-1.434 1.97 -0.833 0.8085 -0.06235 +-1.486 2.041 -0.8799 0.8085 -0.01239 +-1.538 2.113 -0.9247 0.8085 0.0376 +-1.591 2.186 -0.9669 0.8085 0.0875 +-1.644 2.258 -1.006 0.8085 0.1372 +-1.695 2.329 -1.042 0.8085 0.1865 +-1.746 2.399 -1.074 0.8085 0.2354 +-1.795 2.466 -1.101 0.8085 0.2837 +-1.841 2.53 -1.124 0.8085 0.3312 +-1.885 2.59 -1.143 0.8085 0.378 +-1.926 2.646 -1.155 0.8085 0.4238 +-1.964 2.698 -1.163 0.8085 0.4685 +-1.998 2.744 -1.165 0.8085 0.5121 +-2.027 2.785 -1.16 0.8085 0.5544 +-2.053 2.82 -1.15 0.8085 0.5953 +-2.074 2.849 -1.134 0.8085 0.6347 +-2.09 2.871 -1.111 0.8085 0.6725 +-2.102 2.887 -1.082 0.8085 0.7087 +-2.108 2.897 -1.048 0.8085 0.743 +-2.111 2.9 -1.007 0.8085 0.7756 +-2.108 2.896 -0.9601 0.8085 0.8061 +-2.101 2.886 -0.9078 0.8085 0.8347 +-2.089 2.87 -0.8501 0.8085 0.8612 +-2.073 2.848 -0.7873 0.8085 0.8855 +-2.053 2.821 -0.7197 0.8085 0.9076 +-2.029 2.788 -0.6478 0.8085 0.9275 +-2.002 2.751 -0.5719 0.8085 0.945 +-1.972 2.71 -0.4924 0.8085 0.9602 +-1.94 2.665 -0.4099 0.8085 0.9729 +-1.905 2.617 -0.3248 0.8085 0.9833 +-1.868 2.566 -0.2377 0.8085 0.9911 +-1.83 2.514 -0.1492 0.8085 0.9965 +-1.791 2.461 -0.05965 0.8085 0.9994 +-1.885 2.334 0 0.7781 1 +-1.841 2.281 0.08814 0.7781 0.9988 +-1.799 2.228 0.1757 0.7781 0.995 +-1.758 2.177 0.2623 0.7781 0.9888 +-1.718 2.127 0.3472 0.7781 0.9801 +-1.68 2.081 0.4299 0.7781 0.9689 +-1.645 2.037 0.5101 0.7781 0.9553 +-1.612 1.997 0.5872 0.7781 0.9394 +-1.583 1.961 0.6607 0.7781 0.9211 +-1.558 1.93 0.7302 0.7781 0.9004 +-1.537 1.904 0.7954 0.7781 0.8776 +-1.521 1.884 0.8559 0.7781 0.8525 +-1.509 1.869 0.9113 0.7781 0.8253 +-1.502 1.861 0.9615 0.7781 0.7961 +-1.5 1.859 1.006 0.7781 0.7648 +-1.504 1.863 1.045 0.7781 0.7317 +-1.512 1.873 1.078 0.7781 0.6967 +-1.526 1.89 1.105 0.7781 0.66 +-1.545 1.913 1.127 0.7781 0.6216 +-1.568 1.943 1.142 0.7781 0.5817 +-1.597 1.978 1.151 0.7781 0.5403 +-1.63 2.019 1.155 0.7781 0.4976 +-1.668 2.066 1.153 0.7781 0.4536 +-1.709 2.117 1.145 0.7781 0.4085 +-1.754 2.173 1.132 0.7781 0.3624 +-1.802 2.232 1.114 0.7781 0.3153 +-1.853 2.296 1.092 0.7781 0.2675 +-1.907 2.362 1.065 0.7781 0.219 +-1.962 2.43 1.034 0.7781 0.17 +-2.018 2.499 0.9989 0.7781 0.1205 +-2.075 2.57 0.9609 0.7781 0.07074 +-2.132 2.64 0.92 0.7781 0.02079 +-2.188 2.711 0.8767 0.7781 -0.0292 +-2.244 2.779 0.8314 0.7781 -0.07912 +-2.298 2.846 0.7846 0.7781 -0.1288 +-2.35 2.911 0.7366 0.7781 -0.1782 +-2.399 2.972 0.6879 0.7781 -0.2272 +-2.445 3.029 0.6389 0.7781 -0.2756 +-2.488 3.081 0.59 0.7781 -0.3233 +-2.526 3.129 0.5416 0.7781 -0.3702 +-2.56 3.171 0.4941 0.7781 -0.4161 +-2.589 3.206 0.4478 0.7781 -0.4611 +-2.612 3.236 0.403 0.7781 -0.5048 +-2.63 3.258 0.3601 0.7781 -0.5474 +-2.643 3.274 0.3192 0.7781 -0.5885 +-2.649 3.282 0.2805 0.7781 -0.6282 +-2.65 3.282 0.2444 0.7781 -0.6663 +-2.644 3.275 0.2108 0.7781 -0.7027 +-2.632 3.26 0.1799 0.7781 -0.7374 +-2.614 3.238 0.1518 0.7781 -0.7702 +-2.59 3.208 0.1265 0.7781 -0.8011 +-2.56 3.171 0.104 0.7781 -0.8301 +-2.525 3.127 0.0842 0.7781 -0.8569 +-2.484 3.077 0.06704 0.7781 -0.8816 +-2.438 3.02 0.05241 0.7781 -0.9041 +-2.388 2.958 0.04015 0.7781 -0.9243 +-2.333 2.89 0.03006 0.7781 -0.9422 +-2.275 2.817 0.02194 0.7781 -0.9578 +-2.213 2.741 0.01554 0.7781 -0.971 +-2.148 2.661 0.01061 0.7781 -0.9817 +-2.081 2.578 0.006851 0.7781 -0.99 +-2.013 2.493 0.003981 0.7781 -0.9958 +-1.943 2.407 0.001691 0.7781 -0.9991 +-1.873 2.32 -0.0003358 0.7781 -1 +-1.803 2.233 -0.002416 0.7781 -0.9983 +-1.733 2.147 -0.004866 0.7781 -0.9941 +-1.665 2.063 -0.008 0.7781 -0.9875 +-1.599 1.981 -0.01212 0.7781 -0.9784 +-1.535 1.902 -0.01752 0.7781 -0.9668 +-1.474 1.826 -0.02447 0.7781 -0.9528 +-1.417 1.755 -0.03322 0.7781 -0.9365 +-1.364 1.689 -0.04402 0.7781 -0.9178 +-1.315 1.629 -0.05706 0.7781 -0.8968 +-1.271 1.574 -0.07252 0.7781 -0.8735 +-1.232 1.526 -0.09055 0.7781 -0.8481 +-1.198 1.484 -0.1113 0.7781 -0.8206 +-1.17 1.449 -0.1347 0.7781 -0.791 +-1.148 1.422 -0.161 0.7781 -0.7594 +-1.132 1.402 -0.19 0.7781 -0.7259 +-1.122 1.39 -0.2218 0.7781 -0.6907 +-1.119 1.386 -0.2563 0.7781 -0.6536 +-1.121 1.389 -0.2933 0.7781 -0.615 +-1.13 1.399 -0.3327 0.7781 -0.5748 +-1.144 1.417 -0.3743 0.7781 -0.5332 +-1.164 1.442 -0.4179 0.7781 -0.4903 +-1.19 1.473 -0.4632 0.7781 -0.4461 +-1.22 1.511 -0.51 0.7781 -0.4008 +-1.256 1.555 -0.5578 0.7781 -0.3545 +-1.295 1.604 -0.6064 0.7781 -0.3073 +-1.339 1.658 -0.6554 0.7781 -0.2594 +-1.386 1.717 -0.7043 0.7781 -0.2108 +-1.436 1.779 -0.7528 0.7781 -0.1617 +-1.489 1.844 -0.8005 0.7781 -0.1122 +-1.544 1.912 -0.8469 0.7781 -0.06235 +-1.6 1.981 -0.8915 0.7781 -0.01239 +-1.656 2.052 -0.934 0.7781 0.0376 +-1.714 2.122 -0.974 0.7781 0.0875 +-1.77 2.193 -1.011 0.7781 0.1372 +-1.826 2.262 -1.044 0.7781 0.1865 +-1.881 2.329 -1.074 0.7781 0.2354 +-1.933 2.394 -1.1 0.7781 0.2837 +-1.983 2.456 -1.121 0.7781 0.3312 +-2.03 2.515 -1.137 0.7781 0.378 +-2.074 2.569 -1.148 0.7781 0.4238 +-2.114 2.619 -1.154 0.7781 0.4685 +-2.15 2.664 -1.154 0.7781 0.5121 +-2.182 2.703 -1.149 0.7781 0.5544 +-2.209 2.736 -1.137 0.7781 0.5953 +-2.231 2.764 -1.12 0.7781 0.6347 +-2.248 2.785 -1.097 0.7781 0.6725 +-2.26 2.8 -1.068 0.7781 0.7087 +-2.267 2.808 -1.033 0.7781 0.743 +-2.269 2.81 -0.9918 0.7781 0.7756 +-2.265 2.805 -0.9452 0.7781 0.8061 +-2.256 2.795 -0.8933 0.7781 0.8347 +-2.243 2.778 -0.8361 0.7781 0.8612 +-2.225 2.756 -0.774 0.7781 0.8855 +-2.203 2.728 -0.7073 0.7781 0.9076 +-2.176 2.696 -0.6364 0.7781 0.9275 +-2.146 2.658 -0.5616 0.7781 0.945 +-2.113 2.617 -0.4835 0.7781 0.9602 +-2.077 2.572 -0.4024 0.7781 0.9729 +-2.038 2.525 -0.3188 0.7781 0.9833 +-1.998 2.474 -0.2333 0.7781 0.9911 +-1.956 2.423 -0.1464 0.7781 0.9965 +-1.913 2.37 -0.05853 0.7781 0.9994 +-1.999 2.237 0 0.7457 1 +-1.952 2.184 0.0864 0.7457 0.9988 +-1.905 2.132 0.1723 0.7457 0.995 +-1.86 2.081 0.2571 0.7457 0.9888 +-1.816 2.033 0.3404 0.7457 0.9801 +-1.775 1.986 0.4217 0.7457 0.9689 +-1.736 1.943 0.5004 0.7457 0.9553 +-1.7 1.903 0.5761 0.7457 0.9394 +-1.669 1.867 0.6485 0.7457 0.9211 +-1.641 1.836 0.717 0.7457 0.9004 +-1.618 1.81 0.7813 0.7457 0.8776 +-1.599 1.79 0.8411 0.7457 0.8525 +-1.586 1.775 0.8961 0.7457 0.8253 +-1.578 1.766 0.946 0.7457 0.7961 +-1.575 1.763 0.9906 0.7457 0.7648 +-1.578 1.766 1.03 0.7457 0.7317 +-1.586 1.775 1.063 0.7457 0.6967 +-1.6 1.791 1.091 0.7457 0.66 +-1.62 1.813 1.113 0.7457 0.6216 +-1.645 1.841 1.129 0.7457 0.5817 +-1.675 1.875 1.14 0.7457 0.5403 +-1.71 1.914 1.144 0.7457 0.4976 +-1.75 1.958 1.144 0.7457 0.4536 +-1.794 2.008 1.138 0.7457 0.4085 +-1.842 2.061 1.127 0.7457 0.3624 +-1.893 2.119 1.111 0.7457 0.3153 +-1.948 2.18 1.09 0.7457 0.2675 +-2.004 2.243 1.065 0.7457 0.219 +-2.063 2.309 1.036 0.7457 0.17 +-2.124 2.377 1.004 0.7457 0.1205 +-2.184 2.445 0.9681 0.7457 0.07074 +-2.246 2.513 0.9296 0.7457 0.02079 +-2.306 2.581 0.8885 0.7457 -0.0292 +-2.366 2.648 0.8455 0.7457 -0.07912 +-2.424 2.713 0.8008 0.7457 -0.1288 +-2.48 2.776 0.7549 0.7457 -0.1782 +-2.533 2.835 0.7081 0.7457 -0.2272 +-2.583 2.891 0.661 0.7457 -0.2756 +-2.628 2.942 0.6138 0.7457 -0.3233 +-2.67 2.988 0.567 0.7457 -0.3702 +-2.707 3.029 0.5208 0.7457 -0.4161 +-2.738 3.064 0.4757 0.7457 -0.4611 +-2.764 3.093 0.4319 0.7457 -0.5048 +-2.784 3.116 0.3896 0.7457 -0.5474 +-2.798 3.131 0.3492 0.7457 -0.5885 +-2.805 3.139 0.3109 0.7457 -0.6282 +-2.806 3.141 0.2747 0.7457 -0.6663 +-2.801 3.134 0.241 0.7457 -0.7027 +-2.788 3.121 0.2096 0.7457 -0.7374 +-2.77 3.1 0.1808 0.7457 -0.7702 +-2.745 3.072 0.1546 0.7457 -0.8011 +-2.714 3.037 0.1308 0.7457 -0.8301 +-2.676 2.995 0.1097 0.7457 -0.8569 +-2.633 2.947 0.09088 0.7457 -0.8816 +-2.585 2.893 0.07443 0.7457 -0.9041 +-2.532 2.834 0.06016 0.7457 -0.9243 +-2.474 2.769 0.0479 0.7457 -0.9422 +-2.412 2.7 0.03745 0.7457 -0.9578 +-2.346 2.626 0.02859 0.7457 -0.971 +-2.278 2.55 0.02109 0.7457 -0.9817 +-2.207 2.47 0.01467 0.7457 -0.99 +-2.135 2.389 0.009075 0.7457 -0.9958 +-2.061 2.306 0.004012 0.7457 -0.9991 +-1.986 2.223 -0.0008056 0.7457 -1 +-1.912 2.14 -0.005673 0.7457 -0.9983 +-1.839 2.058 -0.01088 0.7457 -0.9941 +-1.766 1.977 -0.01672 0.7457 -0.9875 +-1.696 1.899 -0.02348 0.7457 -0.9784 +-1.629 1.823 -0.03141 0.7457 -0.9668 +-1.564 1.751 -0.04078 0.7457 -0.9528 +-1.504 1.683 -0.05181 0.7457 -0.9365 +-1.447 1.62 -0.06473 0.7457 -0.9178 +-1.396 1.562 -0.07971 0.7457 -0.8968 +-1.349 1.51 -0.09693 0.7457 -0.8735 +-1.308 1.464 -0.1165 0.7457 -0.8481 +-1.273 1.425 -0.1385 0.7457 -0.8206 +-1.244 1.392 -0.1631 0.7457 -0.791 +-1.221 1.366 -0.1902 0.7457 -0.7594 +-1.204 1.348 -0.2199 0.7457 -0.7259 +-1.194 1.337 -0.252 0.7457 -0.6907 +-1.191 1.333 -0.2866 0.7457 -0.6536 +-1.194 1.337 -0.3235 0.7457 -0.615 +-1.204 1.348 -0.3626 0.7457 -0.5748 +-1.22 1.365 -0.4037 0.7457 -0.5332 +-1.242 1.39 -0.4465 0.7457 -0.4903 +-1.27 1.421 -0.4907 0.7457 -0.4461 +-1.303 1.458 -0.5363 0.7457 -0.4008 +-1.341 1.501 -0.5827 0.7457 -0.3545 +-1.384 1.549 -0.6297 0.7457 -0.3073 +-1.431 1.602 -0.6769 0.7457 -0.2594 +-1.482 1.659 -0.7239 0.7457 -0.2108 +-1.536 1.719 -0.7704 0.7457 -0.1617 +-1.593 1.783 -0.816 0.7457 -0.1122 +-1.652 1.848 -0.8602 0.7457 -0.06235 +-1.712 1.916 -0.9026 0.7457 -0.01239 +-1.773 1.984 -0.9428 0.7457 0.0376 +-1.834 2.052 -0.9805 0.7457 0.0875 +-1.895 2.12 -1.015 0.7457 0.1372 +-1.954 2.187 -1.046 0.7457 0.1865 +-2.013 2.252 -1.074 0.7457 0.2354 +-2.069 2.315 -1.097 0.7457 0.2837 +-2.122 2.375 -1.117 0.7457 0.3312 +-2.172 2.431 -1.131 0.7457 0.378 +-2.219 2.484 -1.14 0.7457 0.4238 +-2.262 2.531 -1.145 0.7457 0.4685 +-2.3 2.574 -1.143 0.7457 0.5121 +-2.334 2.612 -1.137 0.7457 0.5544 +-2.362 2.643 -1.124 0.7457 0.5953 +-2.385 2.669 -1.106 0.7457 0.6347 +-2.403 2.689 -1.082 0.7457 0.6725 +-2.415 2.703 -1.052 0.7457 0.7087 +-2.422 2.71 -1.017 0.7457 0.743 +-2.423 2.711 -0.9762 0.7457 0.7756 +-2.418 2.706 -0.9298 0.7457 0.8061 +-2.408 2.695 -0.8782 0.7457 0.8347 +-2.393 2.678 -0.8216 0.7457 0.8612 +-2.373 2.656 -0.7602 0.7457 0.8855 +-2.348 2.628 -0.6944 0.7457 0.9076 +-2.319 2.595 -0.6246 0.7457 0.9275 +-2.286 2.558 -0.551 0.7457 0.945 +-2.249 2.517 -0.4742 0.7457 0.9602 +-2.209 2.473 -0.3946 0.7457 0.9729 +-2.167 2.425 -0.3126 0.7457 0.9833 +-2.123 2.376 -0.2287 0.7457 0.9911 +-2.077 2.325 -0.1435 0.7457 0.9965 +-2.03 2.272 -0.05738 0.7457 0.9994 +-2.108 2.134 0 0.7115 1 +-2.057 2.083 0.08461 0.7115 0.9988 +-2.006 2.031 0.1687 0.7115 0.995 +-1.957 1.981 0.2518 0.7115 0.9888 +-1.909 1.933 0.3334 0.7115 0.9801 +-1.864 1.888 0.4131 0.7115 0.9689 +-1.822 1.845 0.4904 0.7115 0.9553 +-1.783 1.806 0.5648 0.7115 0.9394 +-1.749 1.77 0.6359 0.7115 0.9211 +-1.718 1.74 0.7033 0.7115 0.9004 +-1.692 1.714 0.7668 0.7115 0.8776 +-1.672 1.693 0.8259 0.7115 0.8525 +-1.657 1.677 0.8803 0.7115 0.8253 +-1.647 1.668 0.9299 0.7115 0.7961 +-1.644 1.664 0.9743 0.7115 0.7648 +-1.646 1.667 1.014 0.7115 0.7317 +-1.654 1.675 1.047 0.7115 0.6967 +-1.669 1.69 1.076 0.7115 0.66 +-1.689 1.71 1.098 0.7115 0.6216 +-1.715 1.736 1.115 0.7115 0.5817 +-1.747 1.768 1.127 0.7115 0.5403 +-1.783 1.806 1.133 0.7115 0.4976 +-1.825 1.848 1.134 0.7115 0.4536 +-1.872 1.895 1.13 0.7115 0.4085 +-1.923 1.947 1.12 0.7115 0.3624 +-1.977 2.002 1.106 0.7115 0.3153 +-2.035 2.06 1.088 0.7115 0.2675 +-2.095 2.122 1.065 0.7115 0.219 +-2.158 2.185 1.038 0.7115 0.17 +-2.222 2.25 1.008 0.7115 0.1205 +-2.287 2.315 0.9748 0.7115 0.07074 +-2.352 2.381 0.9385 0.7115 0.02079 +-2.417 2.447 0.8998 0.7115 -0.0292 +-2.48 2.511 0.859 0.7115 -0.07912 +-2.542 2.574 0.8165 0.7115 -0.1288 +-2.602 2.635 0.7727 0.7115 -0.1782 +-2.659 2.692 0.7279 0.7115 -0.2272 +-2.712 2.746 0.6827 0.7115 -0.2756 +-2.761 2.796 0.6372 0.7115 -0.3233 +-2.806 2.841 0.592 0.7115 -0.3702 +-2.845 2.881 0.5472 0.7115 -0.4161 +-2.879 2.915 0.5033 0.7115 -0.4611 +-2.907 2.943 0.4604 0.7115 -0.5048 +-2.929 2.965 0.419 0.7115 -0.5474 +-2.944 2.981 0.3791 0.7115 -0.5885 +-2.953 2.99 0.341 0.7115 -0.6282 +-2.954 2.991 0.3049 0.7115 -0.6663 +-2.949 2.986 0.271 0.7115 -0.7027 +-2.937 2.974 0.2392 0.7115 -0.7374 +-2.918 2.954 0.2097 0.7115 -0.7702 +-2.892 2.928 0.1825 0.7115 -0.8011 +-2.86 2.895 0.1576 0.7115 -0.8301 +-2.821 2.856 0.135 0.7115 -0.8569 +-2.776 2.81 0.1147 0.7115 -0.8816 +-2.725 2.759 0.09641 0.7115 -0.9041 +-2.669 2.702 0.08014 0.7115 -0.9243 +-2.608 2.641 0.06571 0.7115 -0.9422 +-2.543 2.575 0.05294 0.7115 -0.9578 +-2.474 2.505 0.04163 0.7115 -0.971 +-2.402 2.432 0.03156 0.7115 -0.9817 +-2.328 2.357 0.02248 0.7115 -0.99 +-2.251 2.279 0.01416 0.7115 -0.9958 +-2.173 2.2 0.006332 0.7115 -0.9991 +-2.095 2.121 -0.001275 0.7115 -1 +-2.017 2.042 -0.008926 0.7115 -0.9983 +-1.939 1.964 -0.01689 0.7115 -0.9941 +-1.863 1.887 -0.02544 0.7115 -0.9875 +-1.79 1.812 -0.03482 0.7115 -0.9784 +-1.719 1.74 -0.04528 0.7115 -0.9668 +-1.651 1.671 -0.05706 0.7115 -0.9528 +-1.587 1.607 -0.07037 0.7115 -0.9365 +-1.528 1.547 -0.0854 0.7115 -0.9178 +-1.474 1.492 -0.1023 0.7115 -0.8968 +-1.425 1.443 -0.1213 0.7115 -0.8735 +-1.382 1.399 -0.1424 0.7115 -0.8481 +-1.345 1.362 -0.1657 0.7115 -0.8206 +-1.315 1.331 -0.1914 0.7115 -0.791 +-1.291 1.307 -0.2193 0.7115 -0.7594 +-1.274 1.29 -0.2496 0.7115 -0.7259 +-1.265 1.28 -0.2821 0.7115 -0.6907 +-1.262 1.277 -0.3169 0.7115 -0.6536 +-1.266 1.281 -0.3536 0.7115 -0.615 +-1.276 1.292 -0.3923 0.7115 -0.5748 +-1.294 1.31 -0.4328 0.7115 -0.5332 +-1.318 1.334 -0.4747 0.7115 -0.4903 +-1.348 1.365 -0.5179 0.7115 -0.4461 +-1.384 1.401 -0.5622 0.7115 -0.4008 +-1.425 1.443 -0.6072 0.7115 -0.3545 +-1.471 1.489 -0.6525 0.7115 -0.3073 +-1.522 1.541 -0.6979 0.7115 -0.2594 +-1.576 1.596 -0.7431 0.7115 -0.2108 +-1.634 1.654 -0.7875 0.7115 -0.1617 +-1.694 1.716 -0.8309 0.7115 -0.1122 +-1.757 1.779 -0.8729 0.7115 -0.06235 +-1.821 1.844 -0.9131 0.7115 -0.01239 +-1.886 1.91 -0.951 0.7115 0.0376 +-1.951 1.976 -0.9864 0.7115 0.0875 +-2.016 2.041 -1.019 0.7115 0.1372 +-2.08 2.106 -1.048 0.7115 0.1865 +-2.141 2.168 -1.073 0.7115 0.2354 +-2.201 2.229 -1.095 0.7115 0.2837 +-2.258 2.286 -1.112 0.7115 0.3312 +-2.311 2.34 -1.124 0.7115 0.378 +-2.361 2.39 -1.132 0.7115 0.4238 +-2.406 2.436 -1.134 0.7115 0.4685 +-2.446 2.476 -1.132 0.7115 0.5121 +-2.481 2.512 -1.124 0.7115 0.5544 +-2.511 2.542 -1.11 0.7115 0.5953 +-2.535 2.566 -1.091 0.7115 0.6347 +-2.553 2.585 -1.067 0.7115 0.6725 +-2.565 2.597 -1.037 0.7115 0.7087 +-2.572 2.604 -1.001 0.7115 0.743 +-2.572 2.604 -0.96 0.7115 0.7756 +-2.566 2.598 -0.9138 0.7115 0.8061 +-2.555 2.587 -0.8626 0.7115 0.8347 +-2.538 2.57 -0.8065 0.7115 0.8612 +-2.516 2.547 -0.7459 0.7115 0.8855 +-2.488 2.519 -0.6811 0.7115 0.9076 +-2.457 2.487 -0.6124 0.7115 0.9275 +-2.42 2.45 -0.5401 0.7115 0.945 +-2.38 2.41 -0.4647 0.7115 0.9602 +-2.337 2.366 -0.3866 0.7115 0.9729 +-2.291 2.32 -0.3062 0.7115 0.9833 +-2.243 2.271 -0.224 0.7115 0.9911 +-2.193 2.22 -0.1405 0.7115 0.9965 +-2.142 2.169 -0.05618 0.7115 0.9994 +-2.212 2.026 0 0.6755 1 +-2.157 1.976 0.08276 0.6755 0.9988 +-2.102 1.926 0.165 0.6755 0.995 +-2.049 1.877 0.2464 0.6755 0.9888 +-1.998 1.83 0.3263 0.6755 0.9801 +-1.949 1.785 0.4043 0.6755 0.9689 +-1.903 1.743 0.48 0.6755 0.9553 +-1.861 1.705 0.553 0.6755 0.9394 +-1.823 1.67 0.6229 0.6755 0.9211 +-1.79 1.64 0.6892 0.6755 0.9004 +-1.762 1.614 0.7518 0.6755 0.8776 +-1.739 1.593 0.8101 0.6755 0.8525 +-1.722 1.578 0.864 0.6755 0.8253 +-1.712 1.568 0.9132 0.6755 0.7961 +-1.707 1.564 0.9575 0.6755 0.7648 +-1.709 1.565 0.9968 0.6755 0.7317 +-1.717 1.573 1.031 0.6755 0.6967 +-1.731 1.586 1.06 0.6755 0.66 +-1.752 1.605 1.083 0.6755 0.6216 +-1.779 1.63 1.101 0.6755 0.5817 +-1.812 1.66 1.114 0.6755 0.5403 +-1.851 1.695 1.121 0.6755 0.4976 +-1.895 1.736 1.124 0.6755 0.4536 +-1.944 1.78 1.121 0.6755 0.4085 +-1.997 1.829 1.113 0.6755 0.3624 +-2.054 1.882 1.101 0.6755 0.3153 +-2.115 1.938 1.085 0.6755 0.2675 +-2.179 1.996 1.064 0.6755 0.219 +-2.245 2.057 1.04 0.6755 0.17 +-2.313 2.119 1.012 0.6755 0.1205 +-2.382 2.182 0.9808 0.6755 0.07074 +-2.451 2.245 0.9469 0.6755 0.02079 +-2.519 2.308 0.9105 0.6755 -0.0292 +-2.587 2.37 0.872 0.6755 -0.07912 +-2.653 2.43 0.8317 0.6755 -0.1288 +-2.716 2.488 0.79 0.6755 -0.1782 +-2.777 2.543 0.7473 0.6755 -0.2272 +-2.833 2.595 0.704 0.6755 -0.2756 +-2.886 2.643 0.6603 0.6755 -0.3233 +-2.933 2.687 0.6166 0.6755 -0.3702 +-2.975 2.725 0.5733 0.6755 -0.4161 +-3.012 2.759 0.5305 0.6755 -0.4611 +-3.042 2.786 0.4887 0.6755 -0.5048 +-3.065 2.808 0.448 0.6755 -0.5474 +-3.082 2.823 0.4087 0.6755 -0.5885 +-3.092 2.832 0.371 0.6755 -0.6282 +-3.094 2.834 0.335 0.6755 -0.6663 +-3.09 2.83 0.3008 0.6755 -0.7027 +-3.077 2.819 0.2686 0.6755 -0.7374 +-3.058 2.801 0.2384 0.6755 -0.7702 +-3.031 2.777 0.2103 0.6755 -0.8011 +-2.997 2.746 0.1843 0.6755 -0.8301 +-2.957 2.709 0.1603 0.6755 -0.8569 +-2.91 2.666 0.1384 0.6755 -0.8816 +-2.857 2.617 0.1183 0.6755 -0.9041 +-2.799 2.564 0.1001 0.6755 -0.9243 +-2.736 2.506 0.08348 0.6755 -0.9422 +-2.667 2.443 0.0684 0.6755 -0.9578 +-2.595 2.377 0.05464 0.6755 -0.971 +-2.52 2.308 0.042 0.6755 -0.9817 +-2.442 2.237 0.03028 0.6755 -0.99 +-2.362 2.163 0.01924 0.6755 -0.9958 +-2.28 2.089 0.008647 0.6755 -0.9991 +-2.198 2.014 -0.001743 0.6755 -1 +-2.116 1.939 -0.01217 0.6755 -0.9983 +-2.035 1.864 -0.02289 0.6755 -0.9941 +-1.956 1.792 -0.03414 0.6755 -0.9875 +-1.879 1.721 -0.04614 0.6755 -0.9784 +-1.804 1.653 -0.05913 0.6755 -0.9668 +-1.734 1.588 -0.07331 0.6755 -0.9528 +-1.667 1.527 -0.08888 0.6755 -0.9365 +-1.605 1.47 -0.106 0.6755 -0.9178 +-1.548 1.418 -0.1249 0.6755 -0.8968 +-1.498 1.372 -0.1455 0.6755 -0.8735 +-1.453 1.331 -0.1682 0.6755 -0.8481 +-1.415 1.296 -0.1928 0.6755 -0.8206 +-1.383 1.267 -0.2195 0.6755 -0.791 +-1.359 1.245 -0.2483 0.6755 -0.7594 +-1.342 1.229 -0.2792 0.6755 -0.7259 +-1.332 1.22 -0.3121 0.6755 -0.6907 +-1.33 1.218 -0.3469 0.6755 -0.6536 +-1.335 1.223 -0.3835 0.6755 -0.615 +-1.347 1.234 -0.4218 0.6755 -0.5748 +-1.366 1.251 -0.4616 0.6755 -0.5332 +-1.392 1.275 -0.5027 0.6755 -0.4903 +-1.424 1.305 -0.5448 0.6755 -0.4461 +-1.463 1.34 -0.5878 0.6755 -0.4008 +-1.507 1.38 -0.6313 0.6755 -0.3545 +-1.556 1.425 -0.675 0.6755 -0.3073 +-1.61 1.475 -0.7186 0.6755 -0.2594 +-1.668 1.528 -0.7618 0.6755 -0.2108 +-1.729 1.584 -0.8041 0.6755 -0.1617 +-1.793 1.643 -0.8454 0.6755 -0.1122 +-1.86 1.704 -0.8851 0.6755 -0.06235 +-1.928 1.766 -0.923 0.6755 -0.01239 +-1.997 1.829 -0.9586 0.6755 0.0376 +-2.066 1.892 -0.9916 0.6755 0.0875 +-2.134 1.955 -1.022 0.6755 0.1372 +-2.202 2.017 -1.048 0.6755 0.1865 +-2.267 2.077 -1.072 0.6755 0.2354 +-2.33 2.134 -1.091 0.6755 0.2837 +-2.39 2.189 -1.106 0.6755 0.3312 +-2.446 2.24 -1.117 0.6755 0.378 +-2.498 2.288 -1.122 0.6755 0.4238 +-2.545 2.331 -1.123 0.6755 0.4685 +-2.587 2.37 -1.119 0.6755 0.5121 +-2.624 2.404 -1.11 0.6755 0.5544 +-2.655 2.432 -1.096 0.6755 0.5953 +-2.68 2.455 -1.076 0.6755 0.6347 +-2.699 2.472 -1.05 0.6755 0.6725 +-2.711 2.483 -1.02 0.6755 0.7087 +-2.717 2.489 -0.9841 0.6755 0.743 +-2.716 2.488 -0.9432 0.6755 0.7756 +-2.71 2.482 -0.8972 0.6755 0.8061 +-2.697 2.47 -0.8464 0.6755 0.8347 +-2.678 2.453 -0.791 0.6755 0.8612 +-2.654 2.431 -0.7312 0.6755 0.8855 +-2.624 2.403 -0.6673 0.6755 0.9076 +-2.589 2.371 -0.5998 0.6755 0.9275 +-2.55 2.335 -0.5288 0.6755 0.945 +-2.506 2.296 -0.4549 0.6755 0.9602 +-2.459 2.253 -0.3783 0.6755 0.9729 +-2.41 2.207 -0.2996 0.6755 0.9833 +-2.358 2.16 -0.2192 0.6755 0.9911 +-2.304 2.11 -0.1375 0.6755 0.9965 +-2.249 2.06 -0.05496 0.6755 0.9994 +-2.311 1.913 0 0.6378 1 +-2.251 1.864 0.08086 0.6378 0.9988 +-2.193 1.816 0.1613 0.6378 0.995 +-2.136 1.768 0.2408 0.6378 0.9888 +-2.08 1.723 0.3189 0.6378 0.9801 +-2.028 1.679 0.3953 0.6378 0.9689 +-1.979 1.638 0.4694 0.6378 0.9553 +-1.933 1.601 0.541 0.6378 0.9394 +-1.893 1.567 0.6095 0.6378 0.9211 +-1.857 1.537 0.6747 0.6378 0.9004 +-1.826 1.512 0.7363 0.6378 0.8776 +-1.801 1.492 0.7938 0.6378 0.8525 +-1.783 1.476 0.8471 0.6378 0.8253 +-1.77 1.466 0.896 0.6378 0.7961 +-1.765 1.461 0.9401 0.6378 0.7648 +-1.766 1.462 0.9794 0.6378 0.7317 +-1.774 1.469 1.014 0.6378 0.6967 +-1.788 1.481 1.043 0.6378 0.66 +-1.81 1.498 1.067 0.6378 0.6216 +-1.837 1.521 1.086 0.6378 0.5817 +-1.871 1.55 1.1 0.6378 0.5403 +-1.912 1.583 1.109 0.6378 0.4976 +-1.957 1.621 1.112 0.6378 0.4536 +-2.009 1.663 1.111 0.6378 0.4085 +-2.065 1.709 1.106 0.6378 0.3624 +-2.125 1.759 1.096 0.6378 0.3153 +-2.189 1.812 1.081 0.6378 0.2675 +-2.256 1.868 1.063 0.6378 0.219 +-2.325 1.925 1.041 0.6378 0.17 +-2.396 1.984 1.015 0.6378 0.1205 +-2.469 2.044 0.9863 0.6378 0.07074 +-2.542 2.104 0.9547 0.6378 0.02079 +-2.614 2.164 0.9206 0.6378 -0.0292 +-2.685 2.223 0.8844 0.6378 -0.07912 +-2.755 2.281 0.8463 0.6378 -0.1288 +-2.822 2.336 0.8068 0.6378 -0.1782 +-2.886 2.389 0.7662 0.6378 -0.2272 +-2.946 2.439 0.7248 0.6378 -0.2756 +-3.001 2.485 0.6829 0.6378 -0.3233 +-3.052 2.527 0.6409 0.6378 -0.3702 +-3.096 2.564 0.599 0.6378 -0.4161 +-3.135 2.596 0.5575 0.6378 -0.4611 +-3.168 2.623 0.5167 0.6378 -0.5048 +-3.193 2.644 0.4768 0.6378 -0.5474 +-3.211 2.659 0.4381 0.6378 -0.5885 +-3.222 2.668 0.4007 0.6378 -0.6282 +-3.225 2.671 0.3648 0.6378 -0.6663 +-3.221 2.667 0.3304 0.6378 -0.7027 +-3.209 2.657 0.2978 0.6378 -0.7374 +-3.189 2.641 0.267 0.6378 -0.7702 +-3.162 2.618 0.238 0.6378 -0.8011 +-3.127 2.589 0.2109 0.6378 -0.8301 +-3.085 2.555 0.1855 0.6378 -0.8569 +-3.037 2.515 0.162 0.6378 -0.8816 +-2.982 2.469 0.1402 0.6378 -0.9041 +-2.922 2.419 0.1199 0.6378 -0.9243 +-2.856 2.364 0.1012 0.6378 -0.9422 +-2.785 2.306 0.08381 0.6378 -0.9578 +-2.71 2.244 0.06761 0.6378 -0.971 +-2.631 2.179 0.05243 0.6378 -0.9817 +-2.55 2.111 0.03806 0.6378 -0.99 +-2.467 2.042 0.02431 0.6378 -0.9958 +-2.382 1.972 0.01096 0.6378 -0.9991 +-2.296 1.901 -0.002211 0.6378 -1 +-2.211 1.831 -0.01541 0.6378 -0.9983 +-2.127 1.761 -0.02888 0.6378 -0.9941 +-2.044 1.692 -0.04281 0.6378 -0.9875 +-1.963 1.626 -0.05743 0.6378 -0.9784 +-1.886 1.562 -0.07294 0.6378 -0.9668 +-1.812 1.501 -0.08951 0.6378 -0.9528 +-1.743 1.443 -0.1073 0.6378 -0.9365 +-1.679 1.39 -0.1266 0.6378 -0.9178 +-1.62 1.341 -0.1473 0.6378 -0.8968 +-1.567 1.298 -0.1697 0.6378 -0.8735 +-1.521 1.26 -0.1939 0.6378 -0.8481 +-1.482 1.227 -0.2198 0.6378 -0.8206 +-1.45 1.2 -0.2476 0.6378 -0.791 +-1.425 1.18 -0.2772 0.6378 -0.7594 +-1.408 1.165 -0.3086 0.6378 -0.7259 +-1.398 1.158 -0.3418 0.6378 -0.6907 +-1.396 1.156 -0.3767 0.6378 -0.6536 +-1.402 1.161 -0.4131 0.6378 -0.615 +-1.415 1.172 -0.451 0.6378 -0.5748 +-1.436 1.189 -0.4901 0.6378 -0.5332 +-1.464 1.212 -0.5303 0.6378 -0.4903 +-1.498 1.241 -0.5714 0.6378 -0.4461 +-1.539 1.275 -0.613 0.6378 -0.4008 +-1.586 1.313 -0.655 0.6378 -0.3545 +-1.638 1.357 -0.697 0.6378 -0.3073 +-1.696 1.404 -0.7388 0.6378 -0.2594 +-1.757 1.455 -0.78 0.6378 -0.2108 +-1.822 1.509 -0.8203 0.6378 -0.1617 +-1.89 1.565 -0.8593 0.6378 -0.1122 +-1.96 1.623 -0.8968 0.6378 -0.06235 +-2.032 1.682 -0.9323 0.6378 -0.01239 +-2.104 1.742 -0.9656 0.6378 0.0376 +-2.177 1.803 -0.9963 0.6378 0.0875 +-2.249 1.862 -1.024 0.6378 0.1372 +-2.32 1.921 -1.049 0.6378 0.1865 +-2.389 1.978 -1.069 0.6378 0.2354 +-2.455 2.032 -1.087 0.6378 0.2837 +-2.517 2.084 -1.1 0.6378 0.3312 +-2.576 2.133 -1.108 0.6378 0.378 +-2.631 2.178 -1.112 0.6378 0.4238 +-2.68 2.219 -1.112 0.6378 0.4685 +-2.724 2.255 -1.106 0.6378 0.5121 +-2.762 2.287 -1.096 0.6378 0.5544 +-2.794 2.314 -1.08 0.6378 0.5953 +-2.82 2.335 -1.06 0.6378 0.6347 +-2.839 2.351 -1.034 0.6378 0.6725 +-2.851 2.361 -1.003 0.6378 0.7087 +-2.857 2.365 -0.9667 0.6378 0.743 +-2.855 2.364 -0.9258 0.6378 0.7756 +-2.848 2.358 -0.8801 0.6378 0.8061 +-2.833 2.346 -0.8297 0.6378 0.8347 +-2.812 2.329 -0.7749 0.6378 0.8612 +-2.786 2.307 -0.716 0.6378 0.8855 +-2.753 2.28 -0.6532 0.6378 0.9076 +-2.716 2.249 -0.5868 0.6378 0.9275 +-2.673 2.213 -0.5172 0.6378 0.945 +-2.627 2.175 -0.4447 0.6378 0.9602 +-2.576 2.133 -0.3698 0.6378 0.9729 +-2.523 2.089 -0.2928 0.6378 0.9833 +-2.467 2.043 -0.2142 0.6378 0.9911 +-2.409 1.995 -0.1343 0.6378 0.9965 +-2.35 1.946 -0.05369 0.6378 0.9994 +-2.403 1.795 0 0.5985 1 +-2.34 1.748 0.07891 0.5985 0.9988 +-2.278 1.701 0.1574 0.5985 0.995 +-2.217 1.656 0.235 0.5985 0.9888 +-2.158 1.612 0.3113 0.5985 0.9801 +-2.101 1.57 0.386 0.5985 0.9689 +-2.049 1.531 0.4585 0.5985 0.9553 +-2 1.494 0.5285 0.5985 0.9394 +-1.956 1.461 0.5958 0.5985 0.9211 +-1.918 1.433 0.6598 0.5985 0.9004 +-1.885 1.408 0.7203 0.5985 0.8776 +-1.858 1.388 0.777 0.5985 0.8525 +-1.837 1.373 0.8297 0.5985 0.8253 +-1.824 1.362 0.8781 0.5985 0.7961 +-1.817 1.357 0.9221 0.5985 0.7648 +-1.817 1.358 0.9614 0.5985 0.7317 +-1.825 1.363 0.9959 0.5985 0.6967 +-1.839 1.374 1.026 0.5985 0.66 +-1.861 1.39 1.05 0.5985 0.6216 +-1.889 1.411 1.07 0.5985 0.5817 +-1.925 1.438 1.085 0.5985 0.5403 +-1.966 1.469 1.095 0.5985 0.4976 +-2.014 1.504 1.101 0.5985 0.4536 +-2.067 1.544 1.101 0.5985 0.4085 +-2.125 1.588 1.097 0.5985 0.3624 +-2.188 1.635 1.089 0.5985 0.3153 +-2.255 1.684 1.077 0.5985 0.2675 +-2.325 1.737 1.061 0.5985 0.219 +-2.398 1.791 1.041 0.5985 0.17 +-2.472 1.847 1.018 0.5985 0.1205 +-2.548 1.904 0.9911 0.5985 0.07074 +-2.624 1.96 0.9619 0.5985 0.02079 +-2.7 2.017 0.9302 0.5985 -0.0292 +-2.775 2.073 0.8963 0.5985 -0.07912 +-2.848 2.128 0.8605 0.5985 -0.1288 +-2.919 2.18 0.8232 0.5985 -0.1782 +-2.986 2.231 0.7846 0.5985 -0.2272 +-3.049 2.278 0.7452 0.5985 -0.2756 +-3.108 2.321 0.7051 0.5985 -0.3233 +-3.161 2.361 0.6647 0.5985 -0.3702 +-3.209 2.397 0.6243 0.5985 -0.4161 +-3.25 2.428 0.5841 0.5985 -0.4611 +-3.284 2.453 0.5443 0.5985 -0.5048 +-3.311 2.474 0.5053 0.5985 -0.5474 +-3.331 2.488 0.4672 0.5985 -0.5885 +-3.343 2.497 0.4301 0.5985 -0.6282 +-3.347 2.5 0.3943 0.5985 -0.6663 +-3.343 2.498 0.3599 0.5985 -0.7027 +-3.331 2.489 0.3269 0.5985 -0.7374 +-3.311 2.474 0.2954 0.5985 -0.7702 +-3.284 2.453 0.2656 0.5985 -0.8011 +-3.248 2.426 0.2373 0.5985 -0.8301 +-3.205 2.394 0.2106 0.5985 -0.8569 +-3.155 2.357 0.1855 0.5985 -0.8816 +-3.099 2.315 0.1619 0.5985 -0.9041 +-3.036 2.268 0.1397 0.5985 -0.9243 +-2.968 2.217 0.1188 0.5985 -0.9422 +-2.895 2.162 0.09917 0.5985 -0.9578 +-2.817 2.104 0.08054 0.5985 -0.971 +-2.736 2.044 0.06282 0.5985 -0.9817 +-2.652 1.981 0.04581 0.5985 -0.99 +-2.565 1.916 0.02936 0.5985 -0.9958 +-2.477 1.85 0.01326 0.5985 -0.9991 +-2.389 1.784 -0.002677 0.5985 -1 +-2.3 1.718 -0.01865 0.5985 -0.9983 +-2.213 1.653 -0.03484 0.5985 -0.9941 +-2.127 1.589 -0.05146 0.5985 -0.9875 +-2.043 1.526 -0.06869 0.5985 -0.9784 +-1.963 1.467 -0.0867 0.5985 -0.9668 +-1.887 1.41 -0.1057 0.5985 -0.9528 +-1.815 1.356 -0.1257 0.5985 -0.9365 +-1.749 1.306 -0.147 0.5985 -0.9178 +-1.688 1.261 -0.1697 0.5985 -0.8968 +-1.634 1.221 -0.1938 0.5985 -0.8735 +-1.586 1.185 -0.2194 0.5985 -0.8481 +-1.546 1.155 -0.2466 0.5985 -0.8206 +-1.513 1.13 -0.2754 0.5985 -0.791 +-1.488 1.111 -0.3058 0.5985 -0.7594 +-1.471 1.099 -0.3378 0.5985 -0.7259 +-1.461 1.092 -0.3713 0.5985 -0.6907 +-1.46 1.091 -0.4062 0.5985 -0.6536 +-1.467 1.096 -0.4425 0.5985 -0.615 +-1.482 1.107 -0.4799 0.5985 -0.5748 +-1.504 1.123 -0.5184 0.5985 -0.5332 +-1.534 1.146 -0.5576 0.5985 -0.4903 +-1.57 1.173 -0.5976 0.5985 -0.4461 +-1.614 1.205 -0.6379 0.5985 -0.4008 +-1.663 1.242 -0.6783 0.5985 -0.3545 +-1.718 1.284 -0.7186 0.5985 -0.3073 +-1.779 1.329 -0.7585 0.5985 -0.2594 +-1.843 1.377 -0.7977 0.5985 -0.2108 +-1.912 1.428 -0.8359 0.5985 -0.1617 +-1.983 1.481 -0.8727 0.5985 -0.1122 +-2.057 1.536 -0.9079 0.5985 -0.06235 +-2.132 1.593 -0.9411 0.5985 -0.01239 +-2.208 1.65 -0.972 0.5985 0.0376 +-2.284 1.706 -1 0.5985 0.0875 +-2.36 1.763 -1.026 0.5985 0.1372 +-2.434 1.818 -1.048 0.5985 0.1865 +-2.506 1.872 -1.067 0.5985 0.2354 +-2.575 1.923 -1.082 0.5985 0.2837 +-2.64 1.972 -1.093 0.5985 0.3312 +-2.702 2.018 -1.099 0.5985 0.378 +-2.758 2.06 -1.102 0.5985 0.4238 +-2.81 2.099 -1.099 0.5985 0.4685 +-2.855 2.133 -1.093 0.5985 0.5121 +-2.895 2.162 -1.081 0.5985 0.5544 +-2.928 2.187 -1.064 0.5985 0.5953 +-2.954 2.207 -1.043 0.5985 0.6347 +-2.973 2.221 -1.016 0.5985 0.6725 +-2.985 2.23 -0.9849 0.5985 0.7087 +-2.99 2.234 -0.9487 0.5985 0.743 +-2.988 2.232 -0.9078 0.5985 0.7756 +-2.979 2.226 -0.8624 0.5985 0.8061 +-2.963 2.214 -0.8125 0.5985 0.8347 +-2.941 2.197 -0.7584 0.5985 0.8612 +-2.912 2.175 -0.7004 0.5985 0.8855 +-2.877 2.149 -0.6386 0.5985 0.9076 +-2.836 2.119 -0.5735 0.5985 0.9275 +-2.791 2.085 -0.5053 0.5985 0.945 +-2.741 2.047 -0.4344 0.5985 0.9602 +-2.687 2.007 -0.3611 0.5985 0.9729 +-2.63 1.964 -0.2858 0.5985 0.9833 +-2.57 1.92 -0.209 0.5985 0.9911 +-2.508 1.874 -0.1311 0.5985 0.9965 +-2.445 1.827 -0.0524 0.5985 0.9994 +-2.49 1.673 0 0.5577 1 +-2.423 1.628 0.07691 0.5577 0.9988 +-2.357 1.583 0.1534 0.5577 0.995 +-2.292 1.54 0.2291 0.5577 0.9888 +-2.229 1.498 0.3036 0.5577 0.9801 +-2.169 1.458 0.3764 0.5577 0.9689 +-2.113 1.42 0.4473 0.5577 0.9553 +-2.062 1.385 0.5158 0.5577 0.9394 +-2.015 1.354 0.5816 0.5577 0.9211 +-1.973 1.326 0.6444 0.5577 0.9004 +-1.938 1.302 0.7039 0.5577 0.8776 +-1.909 1.283 0.7598 0.5577 0.8525 +-1.887 1.268 0.8118 0.5577 0.8253 +-1.872 1.257 0.8598 0.5577 0.7961 +-1.864 1.252 0.9035 0.5577 0.7648 +-1.863 1.252 0.9428 0.5577 0.7317 +-1.87 1.256 0.9776 0.5577 0.6967 +-1.885 1.266 1.008 0.5577 0.66 +-1.906 1.281 1.033 0.5577 0.6216 +-1.936 1.3 1.054 0.5577 0.5817 +-1.972 1.325 1.07 0.5577 0.5403 +-2.015 1.354 1.081 0.5577 0.4976 +-2.064 1.387 1.088 0.5577 0.4536 +-2.119 1.424 1.09 0.5577 0.4085 +-2.179 1.464 1.088 0.5577 0.3624 +-2.245 1.508 1.082 0.5577 0.3153 +-2.314 1.555 1.072 0.5577 0.2675 +-2.387 1.604 1.058 0.5577 0.219 +-2.463 1.655 1.04 0.5577 0.17 +-2.54 1.707 1.019 0.5577 0.1205 +-2.619 1.76 0.9953 0.5577 0.07074 +-2.699 1.813 0.9685 0.5577 0.02079 +-2.778 1.867 0.9391 0.5577 -0.0292 +-2.857 1.919 0.9076 0.5577 -0.07912 +-2.933 1.971 0.8741 0.5577 -0.1288 +-3.007 2.02 0.839 0.5577 -0.1782 +-3.077 2.067 0.8026 0.5577 -0.2272 +-3.143 2.112 0.7651 0.5577 -0.2756 +-3.205 2.153 0.7268 0.5577 -0.3233 +-3.261 2.191 0.6881 0.5577 -0.3702 +-3.311 2.225 0.6492 0.5577 -0.4161 +-3.355 2.254 0.6103 0.5577 -0.4611 +-3.391 2.278 0.5717 0.5577 -0.5048 +-3.42 2.298 0.5335 0.5577 -0.5474 +-3.441 2.312 0.496 0.5577 -0.5885 +-3.455 2.321 0.4593 0.5577 -0.6282 +-3.46 2.324 0.4237 0.5577 -0.6663 +-3.456 2.322 0.3891 0.5577 -0.7027 +-3.445 2.314 0.3557 0.5577 -0.7374 +-3.425 2.301 0.3237 0.5577 -0.7702 +-3.396 2.282 0.293 0.5577 -0.8011 +-3.36 2.258 0.2636 0.5577 -0.8301 +-3.316 2.228 0.2356 0.5577 -0.8569 +-3.265 2.194 0.2089 0.5577 -0.8816 +-3.207 2.155 0.1836 0.5577 -0.9041 +-3.143 2.111 0.1594 0.5577 -0.9243 +-3.072 2.064 0.1364 0.5577 -0.9422 +-2.997 2.014 0.1145 0.5577 -0.9578 +-2.917 1.96 0.09343 0.5577 -0.971 +-2.833 1.903 0.07317 0.5577 -0.9817 +-2.746 1.845 0.05354 0.5577 -0.99 +-2.657 1.785 0.03439 0.5577 -0.9958 +-2.566 1.724 0.01555 0.5577 -0.9991 +-2.475 1.663 -0.003141 0.5577 -1 +-2.383 1.601 -0.02186 0.5577 -0.9983 +-2.293 1.541 -0.04079 0.5577 -0.9941 +-2.205 1.481 -0.06008 0.5577 -0.9875 +-2.119 1.423 -0.0799 0.5577 -0.9784 +-2.036 1.368 -0.1004 0.5577 -0.9668 +-1.957 1.315 -0.1217 0.5577 -0.9528 +-1.884 1.266 -0.144 0.5577 -0.9365 +-1.815 1.22 -0.1674 0.5577 -0.9178 +-1.753 1.178 -0.1919 0.5577 -0.8968 +-1.697 1.14 -0.2177 0.5577 -0.8735 +-1.648 1.107 -0.2449 0.5577 -0.8481 +-1.607 1.08 -0.2733 0.5577 -0.8206 +-1.574 1.057 -0.3031 0.5577 -0.791 +-1.548 1.04 -0.3343 0.5577 -0.7594 +-1.531 1.029 -0.3668 0.5577 -0.7259 +-1.522 1.023 -0.4006 0.5577 -0.6907 +-1.521 1.022 -0.4355 0.5577 -0.6536 +-1.529 1.027 -0.4716 0.5577 -0.615 +-1.545 1.038 -0.5085 0.5577 -0.5748 +-1.569 1.054 -0.5463 0.5577 -0.5332 +-1.601 1.075 -0.5846 0.5577 -0.4903 +-1.64 1.102 -0.6234 0.5577 -0.4461 +-1.685 1.132 -0.6623 0.5577 -0.4008 +-1.738 1.167 -0.7012 0.5577 -0.3545 +-1.795 1.206 -0.7398 0.5577 -0.3073 +-1.859 1.249 -0.7778 0.5577 -0.2594 +-1.926 1.294 -0.8149 0.5577 -0.2108 +-1.998 1.342 -0.851 0.5577 -0.1617 +-2.073 1.393 -0.8856 0.5577 -0.1122 +-2.15 1.444 -0.9184 0.5577 -0.06235 +-2.229 1.497 -0.9493 0.5577 -0.01239 +-2.308 1.551 -0.9778 0.5577 0.0376 +-2.388 1.604 -1.004 0.5577 0.0875 +-2.466 1.657 -1.027 0.5577 0.1372 +-2.543 1.709 -1.047 0.5577 0.1865 +-2.618 1.759 -1.063 0.5577 0.2354 +-2.69 1.807 -1.076 0.5577 0.2837 +-2.758 1.853 -1.085 0.5577 0.3312 +-2.822 1.896 -1.09 0.5577 0.378 +-2.881 1.935 -1.09 0.5577 0.4238 +-2.934 1.971 -1.086 0.5577 0.4685 +-2.981 2.003 -1.078 0.5577 0.5121 +-3.021 2.03 -1.065 0.5577 0.5544 +-3.055 2.053 -1.047 0.5577 0.5953 +-3.082 2.071 -1.025 0.5577 0.6347 +-3.101 2.084 -0.9981 0.5577 0.6725 +-3.113 2.092 -0.9664 0.5577 0.7087 +-3.118 2.095 -0.9301 0.5577 0.743 +-3.115 2.093 -0.8893 0.5577 0.7756 +-3.104 2.086 -0.8441 0.5577 0.8061 +-3.087 2.074 -0.7948 0.5577 0.8347 +-3.062 2.057 -0.7414 0.5577 0.8612 +-3.031 2.036 -0.6843 0.5577 0.8855 +-2.994 2.011 -0.6237 0.5577 0.9076 +-2.95 1.982 -0.5598 0.5577 0.9275 +-2.902 1.95 -0.493 0.5577 0.945 +-2.849 1.914 -0.4237 0.5577 0.9602 +-2.791 1.875 -0.3521 0.5577 0.9729 +-2.731 1.835 -0.2787 0.5577 0.9833 +-2.667 1.792 -0.2038 0.5577 0.9911 +-2.602 1.748 -0.1278 0.5577 0.9965 +-2.535 1.703 -0.05107 0.5577 0.9994 +-2.571 1.547 0 0.5155 1 +-2.5 1.504 0.07486 0.5155 0.9988 +-2.43 1.462 0.1493 0.5155 0.995 +-2.361 1.42 0.223 0.5155 0.9888 +-2.295 1.38 0.2956 0.5155 0.9801 +-2.232 1.342 0.3666 0.5155 0.9689 +-2.172 1.307 0.4358 0.5155 0.9553 +-2.117 1.274 0.5027 0.5155 0.9394 +-2.068 1.244 0.5671 0.5155 0.9211 +-2.024 1.217 0.6287 0.5155 0.9004 +-1.986 1.195 0.687 0.5155 0.8776 +-1.955 1.176 0.742 0.5155 0.8525 +-1.931 1.161 0.7934 0.5155 0.8253 +-1.914 1.151 0.8409 0.5155 0.7961 +-1.905 1.146 0.8843 0.5155 0.7648 +-1.903 1.145 0.9236 0.5155 0.7317 +-1.91 1.149 0.9586 0.5155 0.6967 +-1.924 1.158 0.9892 0.5155 0.66 +-1.946 1.171 1.015 0.5155 0.6216 +-1.976 1.189 1.037 0.5155 0.5817 +-2.013 1.211 1.054 0.5155 0.5403 +-2.057 1.237 1.067 0.5155 0.4976 +-2.107 1.268 1.075 0.5155 0.4536 +-2.164 1.302 1.079 0.5155 0.4085 +-2.227 1.34 1.079 0.5155 0.3624 +-2.294 1.38 1.074 0.5155 0.3153 +-2.366 1.423 1.066 0.5155 0.2675 +-2.441 1.469 1.054 0.5155 0.219 +-2.52 1.516 1.039 0.5155 0.17 +-2.601 1.565 1.021 0.5155 0.1205 +-2.683 1.614 0.9989 0.5155 0.07074 +-2.766 1.664 0.9745 0.5155 0.02079 +-2.848 1.713 0.9475 0.5155 -0.0292 +-2.929 1.762 0.9183 0.5155 -0.07912 +-3.009 1.81 0.8872 0.5155 -0.1288 +-3.086 1.856 0.8543 0.5155 -0.1782 +-3.159 1.901 0.82 0.5155 -0.2272 +-3.228 1.942 0.7845 0.5155 -0.2756 +-3.293 1.981 0.7481 0.5155 -0.3233 +-3.351 2.016 0.7111 0.5155 -0.3702 +-3.404 2.048 0.6737 0.5155 -0.4161 +-3.45 2.075 0.6361 0.5155 -0.4611 +-3.488 2.098 0.5986 0.5155 -0.5048 +-3.519 2.117 0.5613 0.5155 -0.5474 +-3.542 2.131 0.5245 0.5155 -0.5885 +-3.556 2.139 0.4882 0.5155 -0.6282 +-3.562 2.143 0.4527 0.5155 -0.6663 +-3.559 2.141 0.4181 0.5155 -0.7027 +-3.548 2.134 0.3844 0.5155 -0.7374 +-3.528 2.122 0.3517 0.5155 -0.7702 +-3.5 2.105 0.3202 0.5155 -0.8011 +-3.463 2.083 0.2897 0.5155 -0.8301 +-3.418 2.056 0.2604 0.5155 -0.8569 +-3.366 2.025 0.2322 0.5155 -0.8816 +-3.307 1.989 0.2051 0.5155 -0.9041 +-3.241 1.95 0.179 0.5155 -0.9243 +-3.169 1.906 0.1539 0.5155 -0.9422 +-3.091 1.86 0.1297 0.5155 -0.9578 +-3.009 1.81 0.1063 0.5155 -0.971 +-2.923 1.758 0.08347 0.5155 -0.9817 +-2.834 1.705 0.06123 0.5155 -0.99 +-2.742 1.65 0.0394 0.5155 -0.9958 +-2.649 1.594 0.01784 0.5155 -0.9991 +-2.555 1.537 -0.003603 0.5155 -1 +-2.461 1.481 -0.02507 0.5155 -0.9983 +-2.368 1.425 -0.04671 0.5155 -0.9941 +-2.277 1.37 -0.06866 0.5155 -0.9875 +-2.189 1.317 -0.09107 0.5155 -0.9784 +-2.104 1.266 -0.1141 0.5155 -0.9668 +-2.023 1.217 -0.1377 0.5155 -0.9528 +-1.948 1.172 -0.1623 0.5155 -0.9365 +-1.878 1.13 -0.1877 0.5155 -0.9178 +-1.814 1.091 -0.2141 0.5155 -0.8968 +-1.757 1.057 -0.2416 0.5155 -0.8735 +-1.707 1.027 -0.2701 0.5155 -0.8481 +-1.665 1.002 -0.2998 0.5155 -0.8206 +-1.631 0.9814 -0.3306 0.5155 -0.791 +-1.606 0.9659 -0.3626 0.5155 -0.7594 +-1.589 0.9557 -0.3956 0.5155 -0.7259 +-1.58 0.9506 -0.4296 0.5155 -0.6907 +-1.58 0.9507 -0.4646 0.5155 -0.6536 +-1.589 0.956 -0.5003 0.5155 -0.615 +-1.606 0.9664 -0.5368 0.5155 -0.5748 +-1.632 0.9817 -0.5738 0.5155 -0.5332 +-1.665 1.002 -0.6112 0.5155 -0.4903 +-1.706 1.026 -0.6488 0.5155 -0.4461 +-1.754 1.055 -0.6863 0.5155 -0.4008 +-1.809 1.088 -0.7236 0.5155 -0.3545 +-1.87 1.125 -0.7605 0.5155 -0.3073 +-1.936 1.164 -0.7966 0.5155 -0.2594 +-2.006 1.207 -0.8317 0.5155 -0.2108 +-2.081 1.252 -0.8655 0.5155 -0.1617 +-2.159 1.299 -0.8979 0.5155 -0.1122 +-2.239 1.347 -0.9284 0.5155 -0.06235 +-2.321 1.396 -0.9569 0.5155 -0.01239 +-2.404 1.446 -0.983 0.5155 0.0376 +-2.486 1.496 -1.006 0.5155 0.0875 +-2.568 1.545 -1.027 0.5155 0.1372 +-2.648 1.593 -1.045 0.5155 0.1865 +-2.726 1.64 -1.059 0.5155 0.2354 +-2.8 1.684 -1.07 0.5155 0.2837 +-2.87 1.727 -1.076 0.5155 0.3312 +-2.936 1.766 -1.079 0.5155 0.378 +-2.997 1.803 -1.078 0.5155 0.4238 +-3.052 1.836 -1.073 0.5155 0.4685 +-3.1 1.865 -1.063 0.5155 0.5121 +-3.142 1.89 -1.049 0.5155 0.5544 +-3.176 1.911 -1.03 0.5155 0.5953 +-3.203 1.927 -1.007 0.5155 0.6347 +-3.223 1.939 -0.9794 0.5155 0.6725 +-3.235 1.946 -0.9473 0.5155 0.7087 +-3.238 1.948 -0.9109 0.5155 0.743 +-3.234 1.946 -0.8702 0.5155 0.7756 +-3.223 1.939 -0.8254 0.5155 0.8061 +-3.203 1.927 -0.7765 0.5155 0.8347 +-3.177 1.911 -0.7239 0.5155 0.8612 +-3.144 1.891 -0.6678 0.5155 0.8855 +-3.104 1.867 -0.6083 0.5155 0.9076 +-3.058 1.839 -0.5458 0.5155 0.9275 +-3.006 1.808 -0.4805 0.5155 0.945 +-2.95 1.774 -0.4128 0.5155 0.9602 +-2.889 1.738 -0.3429 0.5155 0.9729 +-2.825 1.699 -0.2714 0.5155 0.9833 +-2.758 1.659 -0.1984 0.5155 0.9911 +-2.688 1.617 -0.1244 0.5155 0.9965 +-2.618 1.575 -0.04971 0.5155 0.9994 +-2.645 1.416 0 0.472 1 +-2.57 1.376 0.07277 0.472 0.9988 +-2.496 1.337 0.1452 0.472 0.995 +-2.424 1.298 0.2169 0.472 0.9888 +-2.354 1.261 0.2875 0.472 0.9801 +-2.288 1.225 0.3566 0.472 0.9689 +-2.225 1.192 0.424 0.472 0.9553 +-2.167 1.161 0.4893 0.472 0.9394 +-2.115 1.132 0.5523 0.472 0.9211 +-2.068 1.107 0.6125 0.472 0.9004 +-2.028 1.086 0.6698 0.472 0.8776 +-1.995 1.068 0.7238 0.472 0.8525 +-1.969 1.054 0.7745 0.472 0.8253 +-1.951 1.044 0.8215 0.472 0.7961 +-1.94 1.039 0.8646 0.472 0.7648 +-1.938 1.038 0.9039 0.472 0.7317 +-1.944 1.041 0.939 0.472 0.6967 +-1.958 1.048 0.97 0.472 0.66 +-1.98 1.06 0.9967 0.472 0.6216 +-2.01 1.076 1.019 0.472 0.5817 +-2.048 1.096 1.037 0.472 0.5403 +-2.093 1.121 1.051 0.472 0.4976 +-2.145 1.148 1.061 0.472 0.4536 +-2.203 1.18 1.067 0.472 0.4085 +-2.267 1.214 1.068 0.472 0.3624 +-2.337 1.251 1.066 0.472 0.3153 +-2.411 1.291 1.06 0.472 0.2675 +-2.489 1.332 1.05 0.472 0.219 +-2.57 1.376 1.037 0.472 0.17 +-2.653 1.421 1.021 0.472 0.1205 +-2.738 1.466 1.002 0.472 0.07074 +-2.824 1.512 0.9799 0.472 0.02079 +-2.909 1.558 0.9553 0.472 -0.0292 +-2.993 1.603 0.9285 0.472 -0.07912 +-3.076 1.647 0.8997 0.472 -0.1288 +-3.156 1.69 0.8691 0.472 -0.1782 +-3.232 1.731 0.8369 0.472 -0.2272 +-3.304 1.769 0.8035 0.472 -0.2756 +-3.371 1.805 0.769 0.472 -0.3233 +-3.432 1.838 0.7337 0.472 -0.3702 +-3.487 1.867 0.6978 0.472 -0.4161 +-3.535 1.893 0.6616 0.472 -0.4611 +-3.575 1.914 0.6252 0.472 -0.5048 +-3.608 1.932 0.5888 0.472 -0.5474 +-3.632 1.945 0.5526 0.472 -0.5885 +-3.648 1.953 0.5168 0.472 -0.6282 +-3.654 1.957 0.4815 0.472 -0.6663 +-3.652 1.956 0.4468 0.472 -0.7027 +-3.641 1.95 0.4128 0.472 -0.7374 +-3.622 1.939 0.3795 0.472 -0.7702 +-3.593 1.924 0.3472 0.472 -0.8011 +-3.556 1.904 0.3156 0.472 -0.8301 +-3.511 1.88 0.285 0.472 -0.8569 +-3.458 1.851 0.2553 0.472 -0.8816 +-3.397 1.819 0.2265 0.472 -0.9041 +-3.33 1.783 0.1985 0.472 -0.9243 +-3.256 1.744 0.1713 0.472 -0.9422 +-3.177 1.701 0.1448 0.472 -0.9578 +-3.093 1.656 0.119 0.472 -0.971 +-3.005 1.609 0.09372 0.472 -0.9817 +-2.914 1.56 0.06889 0.472 -0.99 +-2.82 1.51 0.04439 0.472 -0.9958 +-2.725 1.459 0.02011 0.472 -0.9991 +-2.629 1.407 -0.004063 0.472 -1 +-2.533 1.356 -0.02826 0.472 -0.9983 +-2.438 1.305 -0.0526 0.472 -0.9941 +-2.345 1.255 -0.0772 0.472 -0.9875 +-2.254 1.207 -0.1022 0.472 -0.9784 +-2.167 1.161 -0.1276 0.472 -0.9668 +-2.085 1.116 -0.1537 0.472 -0.9528 +-2.008 1.075 -0.1804 0.472 -0.9365 +-1.936 1.037 -0.2078 0.472 -0.9178 +-1.871 1.002 -0.2361 0.472 -0.8968 +-1.813 0.9708 -0.2652 0.472 -0.8735 +-1.763 0.9438 -0.2952 0.472 -0.8481 +-1.72 0.921 -0.3261 0.472 -0.8206 +-1.686 0.9027 -0.3579 0.472 -0.791 +-1.66 0.8889 -0.3906 0.472 -0.7594 +-1.643 0.8799 -0.4241 0.472 -0.7259 +-1.635 0.8757 -0.4584 0.472 -0.6907 +-1.636 0.8762 -0.4933 0.472 -0.6536 +-1.646 0.8815 -0.5288 0.472 -0.615 +-1.665 0.8914 -0.5648 0.472 -0.5748 +-1.692 0.9059 -0.601 0.472 -0.5332 +-1.727 0.9247 -0.6374 0.472 -0.4903 +-1.77 0.9477 -0.6738 0.472 -0.4461 +-1.82 0.9746 -0.7099 0.472 -0.4008 +-1.877 1.005 -0.7456 0.472 -0.3545 +-1.94 1.039 -0.7807 0.472 -0.3073 +-2.009 1.076 -0.8148 0.472 -0.2594 +-2.083 1.115 -0.8479 0.472 -0.2108 +-2.16 1.157 -0.8795 0.472 -0.1617 +-2.241 1.2 -0.9096 0.472 -0.1122 +-2.324 1.244 -0.9378 0.472 -0.06235 +-2.409 1.29 -0.9638 0.472 -0.01239 +-2.495 1.336 -0.9875 0.472 0.0376 +-2.58 1.381 -1.009 0.472 0.0875 +-2.665 1.427 -1.027 0.472 0.1372 +-2.747 1.471 -1.042 0.472 0.1865 +-2.827 1.514 -1.054 0.472 0.2354 +-2.904 1.555 -1.062 0.472 0.2837 +-2.977 1.594 -1.067 0.472 0.3312 +-3.045 1.63 -1.068 0.472 0.378 +-3.107 1.664 -1.065 0.472 0.4238 +-3.163 1.694 -1.058 0.472 0.4685 +-3.213 1.72 -1.047 0.472 0.5121 +-3.255 1.743 -1.032 0.472 0.5544 +-3.29 1.762 -1.012 0.472 0.5953 +-3.318 1.776 -0.9882 0.472 0.6347 +-3.337 1.787 -0.9601 0.472 0.6725 +-3.348 1.793 -0.9277 0.472 0.7087 +-3.352 1.795 -0.8911 0.472 0.743 +-3.347 1.792 -0.8506 0.472 0.7756 +-3.334 1.785 -0.8061 0.472 0.8061 +-3.313 1.774 -0.7578 0.472 0.8347 +-3.284 1.759 -0.706 0.472 0.8612 +-3.249 1.739 -0.6509 0.472 0.8855 +-3.206 1.717 -0.5926 0.472 0.9076 +-3.158 1.691 -0.5314 0.472 0.9275 +-3.103 1.662 -0.4676 0.472 0.945 +-3.044 1.63 -0.4016 0.472 0.9602 +-2.98 1.595 -0.3335 0.472 0.9729 +-2.912 1.559 -0.2639 0.472 0.9833 +-2.841 1.521 -0.1929 0.472 0.9911 +-2.769 1.482 -0.1209 0.472 0.9965 +-2.694 1.443 -0.04832 0.472 0.9994 +-2.712 1.282 0 0.4274 1 +-2.634 1.245 0.07063 0.4274 0.9988 +-2.557 1.209 0.1409 0.4274 0.995 +-2.481 1.173 0.2105 0.4274 0.9888 +-2.408 1.138 0.2791 0.4274 0.9801 +-2.338 1.105 0.3464 0.4274 0.9689 +-2.273 1.074 0.412 0.4274 0.9553 +-2.212 1.046 0.4757 0.4274 0.9394 +-2.157 1.019 0.5371 0.4274 0.9211 +-2.107 0.9962 0.596 0.4274 0.9004 +-2.065 0.9761 0.6521 0.4274 0.8776 +-2.03 0.9594 0.7052 0.4274 0.8525 +-2.002 0.9463 0.7551 0.4274 0.8253 +-1.982 0.937 0.8015 0.4274 0.7961 +-1.97 0.9315 0.8444 0.4274 0.7648 +-1.967 0.93 0.8835 0.4274 0.7317 +-1.973 0.9325 0.9189 0.4274 0.6967 +-1.986 0.9389 0.9502 0.4274 0.66 +-2.008 0.9494 0.9776 0.4274 0.6216 +-2.039 0.9637 1.001 0.4274 0.5817 +-2.077 0.9817 1.02 0.4274 0.5403 +-2.123 1.003 1.035 0.4274 0.4976 +-2.175 1.028 1.047 0.4274 0.4536 +-2.235 1.057 1.054 0.4274 0.4085 +-2.301 1.088 1.057 0.4274 0.3624 +-2.372 1.121 1.057 0.4274 0.3153 +-2.448 1.157 1.053 0.4274 0.2675 +-2.528 1.195 1.046 0.4274 0.219 +-2.612 1.235 1.035 0.4274 0.17 +-2.698 1.275 1.021 0.4274 0.1205 +-2.785 1.317 1.004 0.4274 0.07074 +-2.873 1.358 0.9846 0.4274 0.02079 +-2.962 1.4 0.9625 0.4274 -0.0292 +-3.049 1.441 0.9381 0.4274 -0.07912 +-3.134 1.482 0.9116 0.4274 -0.1288 +-3.216 1.521 0.8833 0.4274 -0.1782 +-3.295 1.558 0.8533 0.4274 -0.2272 +-3.37 1.593 0.8219 0.4274 -0.2756 +-3.439 1.626 0.7893 0.4274 -0.3233 +-3.503 1.656 0.7558 0.4274 -0.3702 +-3.56 1.683 0.7215 0.4274 -0.4161 +-3.61 1.706 0.6866 0.4274 -0.4611 +-3.652 1.726 0.6514 0.4274 -0.5048 +-3.686 1.743 0.6159 0.4274 -0.5474 +-3.712 1.755 0.5805 0.4274 -0.5885 +-3.729 1.763 0.5451 0.4274 -0.6282 +-3.736 1.766 0.51 0.4274 -0.6663 +-3.735 1.766 0.4752 0.4274 -0.7027 +-3.725 1.761 0.4409 0.4274 -0.7374 +-3.705 1.752 0.4071 0.4274 -0.7702 +-3.677 1.738 0.3739 0.4274 -0.8011 +-3.639 1.72 0.3414 0.4274 -0.8301 +-3.594 1.699 0.3095 0.4274 -0.8569 +-3.54 1.673 0.2783 0.4274 -0.8816 +-3.479 1.644 0.2478 0.4274 -0.9041 +-3.41 1.612 0.2179 0.4274 -0.9243 +-3.335 1.577 0.1886 0.4274 -0.9422 +-3.255 1.539 0.1599 0.4274 -0.9578 +-3.169 1.498 0.1317 0.4274 -0.971 +-3.08 1.456 0.1039 0.4274 -0.9817 +-2.987 1.412 0.0765 0.4274 -0.99 +-2.891 1.367 0.04935 0.4274 -0.9958 +-2.794 1.321 0.02237 0.4274 -0.9991 +-2.696 1.274 -0.004521 0.4274 -1 +-2.598 1.228 -0.03143 0.4274 -0.9983 +-2.501 1.182 -0.05846 0.4274 -0.9941 +-2.406 1.137 -0.08569 0.4274 -0.9875 +-2.314 1.094 -0.1132 0.4274 -0.9784 +-2.226 1.052 -0.1411 0.4274 -0.9668 +-2.142 1.013 -0.1695 0.4274 -0.9528 +-2.063 0.9753 -0.1984 0.4274 -0.9365 +-1.991 0.941 -0.2279 0.4274 -0.9178 +-1.924 0.9098 -0.258 0.4274 -0.8968 +-1.866 0.8819 -0.2887 0.4274 -0.8735 +-1.815 0.8578 -0.3202 0.4274 -0.8481 +-1.772 0.8375 -0.3523 0.4274 -0.8206 +-1.737 0.8212 -0.385 0.4274 -0.791 +-1.712 0.8092 -0.4184 0.4274 -0.7594 +-1.695 0.8014 -0.4524 0.4274 -0.7259 +-1.688 0.7979 -0.4869 0.4274 -0.6907 +-1.69 0.7987 -0.5218 0.4274 -0.6536 +-1.701 0.8039 -0.557 0.4274 -0.615 +-1.72 0.8133 -0.5924 0.4274 -0.5748 +-1.749 0.8267 -0.6279 0.4274 -0.5332 +-1.786 0.8442 -0.6633 0.4274 -0.4903 +-1.831 0.8654 -0.6984 0.4274 -0.4461 +-1.883 0.8901 -0.7331 0.4274 -0.4008 +-1.942 0.9182 -0.7672 0.4274 -0.3545 +-2.008 0.9492 -0.8004 0.4274 -0.3073 +-2.079 0.9828 -0.8326 0.4274 -0.2594 +-2.155 1.019 -0.8635 0.4274 -0.2108 +-2.235 1.057 -0.893 0.4274 -0.1617 +-2.319 1.096 -0.9208 0.4274 -0.1122 +-2.405 1.137 -0.9466 0.4274 -0.06235 +-2.492 1.178 -0.9702 0.4274 -0.01239 +-2.581 1.22 -0.9915 0.4274 0.0376 +-2.669 1.262 -1.01 0.4274 0.0875 +-2.756 1.303 -1.026 0.4274 0.1372 +-2.841 1.343 -1.039 0.4274 0.1865 +-2.923 1.382 -1.049 0.4274 0.2354 +-3.002 1.419 -1.055 0.4274 0.2837 +-3.077 1.454 -1.058 0.4274 0.3312 +-3.146 1.487 -1.057 0.4274 0.378 +-3.21 1.517 -1.052 0.4274 0.4238 +-3.268 1.545 -1.043 0.4274 0.4685 +-3.318 1.569 -1.031 0.4274 0.5121 +-3.361 1.589 -1.014 0.4274 0.5544 +-3.397 1.606 -0.9935 0.4274 0.5953 +-3.425 1.619 -0.9688 0.4274 0.6347 +-3.444 1.628 -0.9401 0.4274 0.6725 +-3.455 1.633 -0.9074 0.4274 0.7087 +-3.457 1.634 -0.8708 0.4274 0.743 +-3.451 1.631 -0.8304 0.4274 0.7756 +-3.437 1.625 -0.7863 0.4274 0.8061 +-3.414 1.614 -0.7387 0.4274 0.8347 +-3.384 1.6 -0.6877 0.4274 0.8612 +-3.346 1.582 -0.6335 0.4274 0.8855 +-3.301 1.561 -0.5765 0.4274 0.9076 +-3.25 1.536 -0.5167 0.4274 0.9275 +-3.193 1.509 -0.4545 0.4274 0.945 +-3.13 1.48 -0.3901 0.4274 0.9602 +-3.063 1.448 -0.3239 0.4274 0.9729 +-2.992 1.414 -0.2562 0.4274 0.9833 +-2.918 1.379 -0.1872 0.4274 0.9911 +-2.842 1.343 -0.1173 0.4274 0.9965 +-2.764 1.307 -0.0469 0.4274 0.9994 +-2.773 1.145 0 0.3817 1 +-2.691 1.111 0.06845 0.3817 0.9988 +-2.611 1.078 0.1366 0.3817 0.995 +-2.532 1.045 0.2041 0.3817 0.9888 +-2.456 1.014 0.2706 0.3817 0.9801 +-2.383 0.9839 0.3359 0.3817 0.9689 +-2.314 0.9555 0.3997 0.3817 0.9553 +-2.25 0.9293 0.4617 0.3817 0.9394 +-2.193 0.9053 0.5215 0.3817 0.9211 +-2.141 0.884 0.579 0.3817 0.9004 +-2.096 0.8656 0.634 0.3817 0.8776 +-2.059 0.8502 0.6861 0.3817 0.8525 +-2.029 0.838 0.7352 0.3817 0.8253 +-2.008 0.8292 0.7811 0.3817 0.7961 +-1.995 0.8239 0.8236 0.3817 0.7648 +-1.991 0.8222 0.8627 0.3817 0.7317 +-1.996 0.824 0.8981 0.3817 0.6967 +-2.009 0.8295 0.9299 0.3817 0.66 +-2.031 0.8386 0.9578 0.3817 0.6216 +-2.061 0.8511 0.982 0.3817 0.5817 +-2.1 0.8671 1.002 0.3817 0.5403 +-2.146 0.8862 1.019 0.3817 0.4976 +-2.2 0.9085 1.031 0.3817 0.4536 +-2.261 0.9336 1.04 0.3817 0.4085 +-2.328 0.9613 1.046 0.3817 0.3624 +-2.401 0.9914 1.047 0.3817 0.3153 +-2.479 1.024 1.045 0.3817 0.2675 +-2.561 1.057 1.04 0.3817 0.219 +-2.646 1.093 1.032 0.3817 0.17 +-2.735 1.129 1.02 0.3817 0.1205 +-2.824 1.166 1.006 0.3817 0.07074 +-2.915 1.204 0.9888 0.3817 0.02079 +-3.006 1.241 0.9691 0.3817 -0.0292 +-3.095 1.278 0.9471 0.3817 -0.07912 +-3.183 1.314 0.923 0.3817 -0.1288 +-3.268 1.349 0.8969 0.3817 -0.1782 +-3.349 1.383 0.8691 0.3817 -0.2272 +-3.426 1.415 0.8398 0.3817 -0.2756 +-3.498 1.444 0.8092 0.3817 -0.3233 +-3.564 1.471 0.7774 0.3817 -0.3702 +-3.623 1.496 0.7447 0.3817 -0.4161 +-3.674 1.517 0.7112 0.3817 -0.4611 +-3.718 1.535 0.6772 0.3817 -0.5048 +-3.754 1.55 0.6427 0.3817 -0.5474 +-3.781 1.561 0.6079 0.3817 -0.5885 +-3.799 1.569 0.573 0.3817 -0.6282 +-3.808 1.572 0.5381 0.3817 -0.6663 +-3.807 1.572 0.5033 0.3817 -0.7027 +-3.798 1.568 0.4688 0.3817 -0.7374 +-3.778 1.56 0.4344 0.3817 -0.7702 +-3.75 1.548 0.4005 0.3817 -0.8011 +-3.713 1.533 0.3669 0.3817 -0.8301 +-3.667 1.514 0.3338 0.3817 -0.8569 +-3.612 1.492 0.3011 0.3817 -0.8816 +-3.55 1.466 0.2689 0.3817 -0.9041 +-3.481 1.437 0.2371 0.3817 -0.9243 +-3.405 1.406 0.2058 0.3817 -0.9422 +-3.324 1.372 0.1749 0.3817 -0.9578 +-3.237 1.337 0.1443 0.3817 -0.971 +-3.146 1.299 0.114 0.3817 -0.9817 +-3.052 1.26 0.08406 0.3817 -0.99 +-2.955 1.22 0.05428 0.3817 -0.9958 +-2.856 1.179 0.02462 0.3817 -0.9991 +-2.756 1.138 -0.004976 0.3817 -1 +-2.657 1.097 -0.03458 0.3817 -0.9983 +-2.558 1.056 -0.06428 0.3817 -0.9941 +-2.462 1.017 -0.09412 0.3817 -0.9875 +-2.369 0.9781 -0.1242 0.3817 -0.9784 +-2.279 0.941 -0.1545 0.3817 -0.9668 +-2.194 0.9059 -0.1852 0.3817 -0.9528 +-2.114 0.873 -0.2163 0.3817 -0.9365 +-2.041 0.8426 -0.2477 0.3817 -0.9178 +-1.974 0.815 -0.2797 0.3817 -0.8968 +-1.914 0.7905 -0.312 0.3817 -0.8735 +-1.863 0.7692 -0.3449 0.3817 -0.8481 +-1.82 0.7514 -0.3782 0.3817 -0.8206 +-1.785 0.7372 -0.4119 0.3817 -0.791 +-1.76 0.7267 -0.4459 0.3817 -0.7594 +-1.744 0.7201 -0.4804 0.3817 -0.7259 +-1.737 0.7173 -0.515 0.3817 -0.6907 +-1.74 0.7184 -0.5499 0.3817 -0.6536 +-1.752 0.7233 -0.5848 0.3817 -0.615 +-1.773 0.732 -0.6196 0.3817 -0.5748 +-1.803 0.7444 -0.6543 0.3817 -0.5332 +-1.841 0.7603 -0.6887 0.3817 -0.4903 +-1.888 0.7796 -0.7225 0.3817 -0.4461 +-1.942 0.802 -0.7558 0.3817 -0.4008 +-2.004 0.8274 -0.7882 0.3817 -0.3545 +-2.071 0.8554 -0.8196 0.3817 -0.3073 +-2.145 0.8857 -0.8498 0.3817 -0.2594 +-2.223 0.9181 -0.8787 0.3817 -0.2108 +-2.306 0.9522 -0.9059 0.3817 -0.1617 +-2.392 0.9878 -0.9313 0.3817 -0.1122 +-2.481 1.024 -0.9548 0.3817 -0.06235 +-2.571 1.061 -0.976 0.3817 -0.01239 +-2.661 1.099 -0.9948 0.3817 0.0376 +-2.752 1.136 -1.011 0.3817 0.0875 +-2.841 1.173 -1.024 0.3817 0.1372 +-2.929 1.209 -1.035 0.3817 0.1865 +-3.013 1.244 -1.042 0.3817 0.2354 +-3.094 1.277 -1.046 0.3817 0.2837 +-3.17 1.309 -1.047 0.3817 0.3312 +-3.241 1.338 -1.044 0.3817 0.378 +-3.306 1.365 -1.038 0.3817 0.4238 +-3.365 1.389 -1.028 0.3817 0.4685 +-3.416 1.411 -1.014 0.3817 0.5121 +-3.46 1.429 -0.9959 0.3817 0.5544 +-3.496 1.443 -0.9743 0.3817 0.5953 +-3.523 1.455 -0.9488 0.3817 0.6347 +-3.542 1.463 -0.9196 0.3817 0.6725 +-3.553 1.467 -0.8866 0.3817 0.7087 +-3.554 1.468 -0.8499 0.3817 0.743 +-3.547 1.465 -0.8097 0.3817 0.7756 +-3.531 1.458 -0.766 0.3817 0.8061 +-3.507 1.448 -0.719 0.3817 0.8347 +-3.475 1.435 -0.6689 0.3817 0.8612 +-3.435 1.419 -0.6158 0.3817 0.8855 +-3.388 1.399 -0.56 0.3817 0.9076 +-3.334 1.377 -0.5017 0.3817 0.9275 +-3.275 1.352 -0.4411 0.3817 0.945 +-3.209 1.325 -0.3785 0.3817 0.9602 +-3.139 1.296 -0.3141 0.3817 0.9729 +-3.065 1.266 -0.2484 0.3817 0.9833 +-2.988 1.234 -0.1815 0.3817 0.9911 +-2.908 1.201 -0.1137 0.3817 0.9965 +-2.827 1.167 -0.04545 0.3817 0.9994 +-2.827 1.005 0 0.335 1 +-2.742 0.9749 0.06622 0.335 0.9988 +-2.658 0.9451 0.1321 0.335 0.995 +-2.576 0.9159 0.1975 0.335 0.9888 +-2.497 0.8877 0.262 0.335 0.9801 +-2.421 0.8608 0.3253 0.335 0.9689 +-2.35 0.8354 0.3872 0.335 0.9553 +-2.283 0.8118 0.4474 0.335 0.9394 +-2.223 0.7903 0.5057 0.335 0.9211 +-2.169 0.7711 0.5618 0.335 0.9004 +-2.122 0.7545 0.6155 0.335 0.8776 +-2.083 0.7405 0.6666 0.335 0.8525 +-2.052 0.7294 0.7148 0.335 0.8253 +-2.029 0.7213 0.7602 0.335 0.7961 +-2.015 0.7163 0.8023 0.335 0.7648 +-2.01 0.7145 0.8413 0.335 0.7317 +-2.013 0.7158 0.8768 0.335 0.6967 +-2.026 0.7204 0.9089 0.335 0.66 +-2.048 0.7281 0.9375 0.335 0.6216 +-2.078 0.7389 0.9624 0.335 0.5817 +-2.117 0.7527 0.9838 0.335 0.5403 +-2.164 0.7694 1.002 0.335 0.4976 +-2.219 0.7888 1.016 0.335 0.4536 +-2.28 0.8108 1.026 0.335 0.4085 +-2.349 0.8351 1.033 0.335 0.3624 +-2.423 0.8614 1.037 0.335 0.3153 +-2.502 0.8897 1.037 0.335 0.2675 +-2.586 0.9194 1.034 0.335 0.219 +-2.673 0.9505 1.028 0.335 0.17 +-2.764 0.9825 1.019 0.335 0.1205 +-2.855 1.015 1.007 0.335 0.07074 +-2.948 1.048 0.9923 0.335 0.02079 +-3.041 1.081 0.9751 0.335 -0.0292 +-3.133 1.114 0.9555 0.335 -0.07912 +-3.223 1.146 0.9338 0.335 -0.1288 +-3.31 1.177 0.91 0.335 -0.1782 +-3.394 1.206 0.8845 0.335 -0.2272 +-3.473 1.235 0.8572 0.335 -0.2756 +-3.546 1.261 0.8285 0.335 -0.3233 +-3.614 1.285 0.7985 0.335 -0.3702 +-3.675 1.307 0.7674 0.335 -0.4161 +-3.729 1.326 0.7354 0.335 -0.4611 +-3.774 1.342 0.7025 0.335 -0.5048 +-3.811 1.355 0.669 0.335 -0.5474 +-3.84 1.365 0.635 0.335 -0.5885 +-3.859 1.372 0.6006 0.335 -0.6282 +-3.869 1.375 0.566 0.335 -0.6663 +-3.869 1.376 0.5312 0.335 -0.7027 +-3.86 1.372 0.4963 0.335 -0.7374 +-3.841 1.366 0.4615 0.335 -0.7702 +-3.813 1.356 0.4268 0.335 -0.8011 +-3.776 1.342 0.3922 0.335 -0.8301 +-3.73 1.326 0.3578 0.335 -0.8569 +-3.675 1.307 0.3237 0.335 -0.8816 +-3.613 1.284 0.2898 0.335 -0.9041 +-3.543 1.26 0.2562 0.335 -0.9243 +-3.466 1.232 0.2228 0.335 -0.9422 +-3.384 1.203 0.1897 0.335 -0.9578 +-3.296 1.172 0.1568 0.335 -0.971 +-3.204 1.139 0.1241 0.335 -0.9817 +-3.109 1.105 0.09158 0.335 -0.99 +-3.01 1.07 0.05917 0.335 -0.9958 +-2.91 1.035 0.02685 0.335 -0.9991 +-2.81 0.9989 -0.005427 0.335 -1 +-2.709 0.9632 -0.03772 0.335 -0.9983 +-2.61 0.9278 -0.07006 0.335 -0.9941 +-2.512 0.8931 -0.1025 0.335 -0.9875 +-2.418 0.8595 -0.1351 0.335 -0.9784 +-2.327 0.8273 -0.1678 0.335 -0.9668 +-2.241 0.7967 -0.2008 0.335 -0.9528 +-2.16 0.7681 -0.234 0.335 -0.9365 +-2.086 0.7417 -0.2675 0.335 -0.9178 +-2.019 0.7178 -0.3012 0.335 -0.8968 +-1.959 0.6965 -0.3352 0.335 -0.8735 +-1.907 0.6781 -0.3694 0.335 -0.8481 +-1.864 0.6628 -0.4038 0.335 -0.8206 +-1.83 0.6506 -0.4384 0.335 -0.791 +-1.805 0.6417 -0.4732 0.335 -0.7594 +-1.789 0.6362 -0.508 0.335 -0.7259 +-1.783 0.634 -0.5429 0.335 -0.6907 +-1.787 0.6353 -0.5776 0.335 -0.6536 +-1.8 0.6399 -0.6122 0.335 -0.615 +-1.822 0.6478 -0.6465 0.335 -0.5748 +-1.854 0.659 -0.6803 0.335 -0.5332 +-1.894 0.6732 -0.7136 0.335 -0.4903 +-1.942 0.6904 -0.7463 0.335 -0.4461 +-1.998 0.7104 -0.778 0.335 -0.4008 +-2.061 0.7329 -0.8088 0.335 -0.3545 +-2.131 0.7577 -0.8383 0.335 -0.3073 +-2.207 0.7846 -0.8666 0.335 -0.2594 +-2.287 0.8133 -0.8933 0.335 -0.2108 +-2.372 0.8434 -0.9182 0.335 -0.1617 +-2.461 0.8748 -0.9413 0.335 -0.1122 +-2.551 0.9071 -0.9624 0.335 -0.06235 +-2.644 0.9399 -0.9812 0.335 -0.01239 +-2.736 0.9729 -0.9975 0.335 0.0376 +-2.829 1.006 -1.011 0.335 0.0875 +-2.92 1.038 -1.022 0.335 0.1372 +-3.01 1.07 -1.03 0.335 0.1865 +-3.096 1.101 -1.036 0.335 0.2354 +-3.178 1.13 -1.037 0.335 0.2837 +-3.256 1.158 -1.036 0.335 0.3312 +-3.328 1.183 -1.031 0.335 0.378 +-3.394 1.207 -1.023 0.335 0.4238 +-3.454 1.228 -1.011 0.335 0.4685 +-3.506 1.246 -0.996 0.335 0.5121 +-3.55 1.262 -0.977 0.335 0.5544 +-3.586 1.275 -0.9544 0.335 0.5953 +-3.614 1.285 -0.9282 0.335 0.6347 +-3.632 1.291 -0.8985 0.335 0.6725 +-3.642 1.295 -0.8652 0.335 0.7087 +-3.643 1.295 -0.8285 0.335 0.743 +-3.635 1.292 -0.7885 0.335 0.7756 +-3.618 1.286 -0.7453 0.335 0.8061 +-3.592 1.277 -0.6989 0.335 0.8347 +-3.558 1.265 -0.6497 0.335 0.8612 +-3.516 1.25 -0.5977 0.335 0.8855 +-3.467 1.233 -0.5432 0.335 0.9076 +-3.411 1.213 -0.4863 0.335 0.9275 +-3.348 1.19 -0.4274 0.335 0.945 +-3.28 1.166 -0.3665 0.335 0.9602 +-3.207 1.14 -0.3041 0.335 0.9729 +-3.13 1.113 -0.2404 0.335 0.9833 +-3.05 1.084 -0.1756 0.335 0.9911 +-2.967 1.055 -0.11 0.335 0.9965 +-2.883 1.025 -0.04397 0.335 0.9994 +-2.873 0.8624 0 0.2875 1 +-2.786 0.8361 0.06395 0.2875 0.9988 +-2.699 0.8101 0.1276 0.2875 0.995 +-2.614 0.7846 0.1908 0.2875 0.9888 +-2.532 0.76 0.2531 0.2875 0.9801 +-2.453 0.7364 0.3144 0.2875 0.9689 +-2.379 0.7142 0.3744 0.2875 0.9553 +-2.311 0.6935 0.4329 0.2875 0.9394 +-2.248 0.6747 0.4895 0.2875 0.9211 +-2.192 0.6578 0.5442 0.2875 0.9004 +-2.143 0.6431 0.5966 0.2875 0.8776 +-2.102 0.6308 0.6466 0.2875 0.8525 +-2.069 0.6209 0.6941 0.2875 0.8253 +-2.044 0.6136 0.7388 0.2875 0.7961 +-2.029 0.6091 0.7805 0.2875 0.7648 +-2.023 0.6072 0.8193 0.2875 0.7317 +-2.026 0.6081 0.855 0.2875 0.6967 +-2.038 0.6118 0.8874 0.2875 0.66 +-2.06 0.6182 0.9165 0.2875 0.6216 +-2.09 0.6273 0.9423 0.2875 0.5817 +-2.129 0.6389 0.9646 0.2875 0.5403 +-2.176 0.6531 0.9836 0.2875 0.4976 +-2.231 0.6697 0.9992 0.2875 0.4536 +-2.294 0.6885 1.011 0.2875 0.4085 +-2.363 0.7092 1.02 0.2875 0.3624 +-2.438 0.7318 1.026 0.2875 0.3153 +-2.519 0.7561 1.028 0.2875 0.2675 +-2.604 0.7816 1.027 0.2875 0.219 +-2.693 0.8083 1.024 0.2875 0.17 +-2.785 0.8358 1.017 0.2875 0.1205 +-2.878 0.864 1.007 0.2875 0.07074 +-2.973 0.8924 0.9952 0.2875 0.02079 +-3.068 0.9208 0.9805 0.2875 -0.0292 +-3.162 0.9489 0.9634 0.2875 -0.07912 +-3.254 0.9765 0.944 0.2875 -0.1288 +-3.343 1.003 0.9226 0.2875 -0.1782 +-3.428 1.029 0.8992 0.2875 -0.2272 +-3.509 1.053 0.8741 0.2875 -0.2756 +-3.585 1.076 0.8474 0.2875 -0.3233 +-3.654 1.097 0.8192 0.2875 -0.3702 +-3.717 1.116 0.7897 0.2875 -0.4161 +-3.772 1.132 0.7591 0.2875 -0.4611 +-3.819 1.146 0.7274 0.2875 -0.5048 +-3.858 1.158 0.6949 0.2875 -0.5474 +-3.888 1.167 0.6617 0.2875 -0.5885 +-3.908 1.173 0.6278 0.2875 -0.6282 +-3.919 1.176 0.5934 0.2875 -0.6663 +-3.92 1.177 0.5587 0.2875 -0.7027 +-3.911 1.174 0.5236 0.2875 -0.7374 +-3.893 1.169 0.4883 0.2875 -0.7702 +-3.865 1.16 0.4528 0.2875 -0.8011 +-3.828 1.149 0.4173 0.2875 -0.8301 +-3.782 1.135 0.3817 0.2875 -0.8569 +-3.728 1.119 0.3461 0.2875 -0.8816 +-3.665 1.1 0.3106 0.2875 -0.9041 +-3.595 1.079 0.2751 0.2875 -0.9243 +-3.518 1.056 0.2397 0.2875 -0.9422 +-3.435 1.031 0.2044 0.2875 -0.9578 +-3.347 1.005 0.1692 0.2875 -0.971 +-3.254 0.9767 0.1341 0.2875 -0.9817 +-3.158 0.9478 0.09903 0.2875 -0.99 +-3.059 0.9181 0.06403 0.2875 -0.9958 +-2.958 0.8878 0.02907 0.2875 -0.9991 +-2.856 0.8573 -0.005875 0.2875 -1 +-2.755 0.8268 -0.04082 0.2875 -0.9983 +-2.654 0.7967 -0.07579 0.2875 -0.9941 +-2.556 0.7672 -0.1108 0.2875 -0.9875 +-2.461 0.7386 -0.1459 0.2875 -0.9784 +-2.37 0.7112 -0.181 0.2875 -0.9668 +-2.283 0.6852 -0.2163 0.2875 -0.9528 +-2.202 0.6609 -0.2516 0.2875 -0.9365 +-2.127 0.6385 -0.287 0.2875 -0.9178 +-2.06 0.6182 -0.3225 0.2875 -0.8968 +-2 0.6002 -0.3581 0.2875 -0.8735 +-1.948 0.5847 -0.3937 0.2875 -0.8481 +-1.905 0.5718 -0.4292 0.2875 -0.8206 +-1.871 0.5616 -0.4647 0.2875 -0.791 +-1.846 0.5542 -0.5002 0.2875 -0.7594 +-1.831 0.5497 -0.5354 0.2875 -0.7259 +-1.826 0.5481 -0.5704 0.2875 -0.6907 +-1.831 0.5494 -0.605 0.2875 -0.6536 +-1.845 0.5536 -0.6393 0.2875 -0.615 +-1.868 0.5607 -0.6729 0.2875 -0.5748 +-1.901 0.5705 -0.7059 0.2875 -0.5332 +-1.942 0.583 -0.7382 0.2875 -0.4903 +-1.992 0.5979 -0.7695 0.2875 -0.4461 +-2.05 0.6153 -0.7998 0.2875 -0.4008 +-2.115 0.6348 -0.8288 0.2875 -0.3545 +-2.187 0.6563 -0.8565 0.2875 -0.3073 +-2.264 0.6796 -0.8827 0.2875 -0.2594 +-2.347 0.7044 -0.9073 0.2875 -0.2108 +-2.434 0.7305 -0.93 0.2875 -0.1617 +-2.524 0.7575 -0.9508 0.2875 -0.1122 +-2.617 0.7854 -0.9694 0.2875 -0.06235 +-2.711 0.8136 -0.9857 0.2875 -0.01239 +-2.806 0.8421 -0.9996 0.2875 0.0376 +-2.9 0.8704 -1.011 0.2875 0.0875 +-2.993 0.8984 -1.02 0.2875 0.1372 +-3.084 0.9256 -1.025 0.2875 0.1865 +-3.172 0.952 -1.028 0.2875 0.2354 +-3.255 0.9771 -1.028 0.2875 0.2837 +-3.334 1.001 -1.024 0.2875 0.3312 +-3.408 1.023 -1.018 0.2875 0.378 +-3.475 1.043 -1.008 0.2875 0.4238 +-3.535 1.061 -0.9943 0.2875 0.4685 +-3.587 1.077 -0.9776 0.2875 0.5121 +-3.632 1.09 -0.9575 0.2875 0.5544 +-3.668 1.101 -0.934 0.2875 0.5953 +-3.695 1.109 -0.9071 0.2875 0.6347 +-3.714 1.115 -0.8768 0.2875 0.6725 +-3.723 1.117 -0.8433 0.2875 0.7087 +-3.723 1.117 -0.8066 0.2875 0.743 +-3.713 1.115 -0.7668 0.2875 0.7756 +-3.695 1.109 -0.724 0.2875 0.8061 +-3.668 1.101 -0.6784 0.2875 0.8347 +-3.632 1.09 -0.6301 0.2875 0.8612 +-3.588 1.077 -0.5792 0.2875 0.8855 +-3.537 1.062 -0.526 0.2875 0.9076 +-3.479 1.044 -0.4707 0.2875 0.9275 +-3.414 1.025 -0.4134 0.2875 0.945 +-3.343 1.003 -0.3544 0.2875 0.9602 +-3.267 0.9807 -0.294 0.2875 0.9729 +-3.187 0.9567 -0.2323 0.2875 0.9833 +-3.104 0.9318 -0.1696 0.2875 0.9911 +-3.019 0.9061 -0.1063 0.2875 0.9965 +-2.932 0.8799 -0.04246 0.2875 0.9994 +-2.913 0.7177 0 0.2392 1 +-2.822 0.6955 0.06165 0.2392 0.9988 +-2.733 0.6734 0.123 0.2392 0.995 +-2.646 0.6519 0.184 0.2392 0.9888 +-2.561 0.631 0.2441 0.2392 0.9801 +-2.48 0.611 0.3034 0.2392 0.9689 +-2.403 0.5922 0.3614 0.2392 0.9553 +-2.332 0.5746 0.418 0.2392 0.9394 +-2.267 0.5586 0.473 0.2392 0.9211 +-2.209 0.5442 0.5262 0.2392 0.9004 +-2.158 0.5317 0.5773 0.2392 0.8776 +-2.115 0.5212 0.6263 0.2392 0.8525 +-2.081 0.5127 0.6728 0.2392 0.8253 +-2.055 0.5063 0.7169 0.2392 0.7961 +-2.038 0.5023 0.7583 0.2392 0.7648 +-2.031 0.5005 0.7969 0.2392 0.7317 +-2.033 0.501 0.8326 0.2392 0.6967 +-2.045 0.5039 0.8653 0.2392 0.66 +-2.066 0.509 0.895 0.2392 0.6216 +-2.096 0.5164 0.9215 0.2392 0.5817 +-2.135 0.526 0.9449 0.2392 0.5403 +-2.182 0.5377 0.9651 0.2392 0.4976 +-2.238 0.5514 0.9821 0.2392 0.4536 +-2.301 0.567 0.996 0.2392 0.4085 +-2.371 0.5842 1.007 0.2392 0.3624 +-2.447 0.603 1.014 0.2392 0.3153 +-2.529 0.6231 1.019 0.2392 0.2675 +-2.615 0.6444 1.02 0.2392 0.219 +-2.705 0.6666 1.019 0.2392 0.17 +-2.798 0.6895 1.014 0.2392 0.1205 +-2.894 0.713 1.007 0.2392 0.07074 +-2.99 0.7367 0.9975 0.2392 0.02079 +-3.086 0.7604 0.9853 0.2392 -0.0292 +-3.182 0.784 0.9706 0.2392 -0.07912 +-3.275 0.807 0.9536 0.2392 -0.1288 +-3.366 0.8294 0.9345 0.2392 -0.1782 +-3.453 0.8509 0.9134 0.2392 -0.2272 +-3.536 0.8713 0.8904 0.2392 -0.2756 +-3.613 0.8903 0.8657 0.2392 -0.3233 +-3.684 0.9079 0.8393 0.2392 -0.3702 +-3.749 0.9237 0.8115 0.2392 -0.4161 +-3.805 0.9377 0.7823 0.2392 -0.4611 +-3.854 0.9496 0.7519 0.2392 -0.5048 +-3.894 0.9595 0.7204 0.2392 -0.5474 +-3.925 0.9671 0.6879 0.2392 -0.5885 +-3.946 0.9723 0.6546 0.2392 -0.6282 +-3.958 0.9753 0.6205 0.2392 -0.6663 +-3.96 0.9757 0.5858 0.2392 -0.7027 +-3.952 0.9738 0.5505 0.2392 -0.7374 +-3.934 0.9695 0.5147 0.2392 -0.7702 +-3.907 0.9628 0.4786 0.2392 -0.8011 +-3.871 0.9537 0.4421 0.2392 -0.8301 +-3.825 0.9424 0.4053 0.2392 -0.8569 +-3.77 0.929 0.3683 0.2392 -0.8816 +-3.708 0.9136 0.3311 0.2392 -0.9041 +-3.638 0.8963 0.2939 0.2392 -0.9243 +-3.561 0.8773 0.2565 0.2392 -0.9422 +-3.477 0.8568 0.219 0.2392 -0.9578 +-3.389 0.835 0.1815 0.2392 -0.971 +-3.296 0.812 0.144 0.2392 -0.9817 +-3.199 0.7882 0.1064 0.2392 -0.99 +-3.099 0.7636 0.06885 0.2392 -0.9958 +-2.998 0.7387 0.03127 0.2392 -0.9991 +-2.896 0.7135 -0.00632 0.2392 -1 +-2.794 0.6884 -0.0439 0.2392 -0.9983 +-2.693 0.6635 -0.08148 0.2392 -0.9941 +-2.594 0.6392 -0.1191 0.2392 -0.9875 +-2.498 0.6156 -0.1566 0.2392 -0.9784 +-2.407 0.593 -0.1941 0.2392 -0.9668 +-2.32 0.5716 -0.2316 0.2392 -0.9528 +-2.239 0.5516 -0.2691 0.2392 -0.9365 +-2.164 0.5332 -0.3064 0.2392 -0.9178 +-2.096 0.5165 -0.3437 0.2392 -0.8968 +-2.036 0.5017 -0.3808 0.2392 -0.8735 +-1.985 0.489 -0.4177 0.2392 -0.8481 +-1.942 0.4785 -0.4544 0.2392 -0.8206 +-1.908 0.4702 -0.4908 0.2392 -0.791 +-1.884 0.4643 -0.5268 0.2392 -0.7594 +-1.87 0.4608 -0.5624 0.2392 -0.7259 +-1.865 0.4596 -0.5975 0.2392 -0.6907 +-1.871 0.461 -0.6321 0.2392 -0.6536 +-1.886 0.4647 -0.6659 0.2392 -0.615 +-1.91 0.4707 -0.699 0.2392 -0.5748 +-1.944 0.4791 -0.7311 0.2392 -0.5332 +-1.987 0.4896 -0.7622 0.2392 -0.4903 +-2.039 0.5023 -0.7922 0.2392 -0.4461 +-2.098 0.5169 -0.821 0.2392 -0.4008 +-2.164 0.5333 -0.8483 0.2392 -0.3545 +-2.238 0.5514 -0.8742 0.2392 -0.3073 +-2.317 0.5709 -0.8984 0.2392 -0.2594 +-2.401 0.5917 -0.9207 0.2392 -0.2108 +-2.49 0.6135 -0.9412 0.2392 -0.1617 +-2.582 0.6362 -0.9596 0.2392 -0.1122 +-2.676 0.6594 -0.9758 0.2392 -0.06235 +-2.772 0.683 -0.9897 0.2392 -0.01239 +-2.868 0.7068 -1.001 0.2392 0.0376 +-2.964 0.7304 -1.01 0.2392 0.0875 +-3.059 0.7537 -1.016 0.2392 0.1372 +-3.151 0.7765 -1.019 0.2392 0.1865 +-3.24 0.7984 -1.02 0.2392 0.2354 +-3.325 0.8193 -1.017 0.2392 0.2837 +-3.405 0.839 -1.012 0.2392 0.3312 +-3.479 0.8573 -1.003 0.2392 0.378 +-3.547 0.874 -0.9917 0.2392 0.4238 +-3.607 0.8889 -0.9768 0.2392 0.4685 +-3.66 0.9019 -0.9587 0.2392 0.5121 +-3.705 0.9129 -0.9374 0.2392 0.5544 +-3.741 0.9218 -0.9129 0.2392 0.5953 +-3.768 0.9284 -0.8853 0.2392 0.6347 +-3.786 0.9328 -0.8546 0.2392 0.6725 +-3.794 0.9349 -0.8209 0.2392 0.7087 +-3.793 0.9347 -0.7842 0.2392 0.743 +-3.783 0.9321 -0.7447 0.2392 0.7756 +-3.763 0.9273 -0.7024 0.2392 0.8061 +-3.735 0.9202 -0.6575 0.2392 0.8347 +-3.697 0.911 -0.6101 0.2392 0.8612 +-3.652 0.8998 -0.5604 0.2392 0.8855 +-3.598 0.8866 -0.5085 0.2392 0.9076 +-3.538 0.8717 -0.4547 0.2392 0.9275 +-3.47 0.8551 -0.3992 0.2392 0.945 +-3.397 0.8371 -0.342 0.2392 0.9602 +-3.319 0.8179 -0.2836 0.2392 0.9729 +-3.237 0.7976 -0.224 0.2392 0.9833 +-3.151 0.7764 -0.1635 0.2392 0.9911 +-3.063 0.7547 -0.1024 0.2392 0.9965 +-2.973 0.7325 -0.04093 0.2392 0.9994 +-2.945 0.5713 0 0.1904 1 +-2.852 0.5533 0.0593 0.1904 0.9988 +-2.76 0.5354 0.1184 0.1904 0.995 +-2.67 0.518 0.177 0.1904 0.9888 +-2.583 0.5011 0.235 0.1904 0.9801 +-2.5 0.4849 0.2921 0.1904 0.9689 +-2.421 0.4696 0.3482 0.1904 0.9553 +-2.348 0.4554 0.4029 0.1904 0.9394 +-2.281 0.4424 0.4562 0.1904 0.9211 +-2.22 0.4307 0.5079 0.1904 0.9004 +-2.168 0.4205 0.5577 0.1904 0.8776 +-2.123 0.4119 0.6055 0.1904 0.8525 +-2.087 0.4049 0.6512 0.1904 0.8253 +-2.06 0.3996 0.6946 0.1904 0.7961 +-2.043 0.3962 0.7355 0.1904 0.7648 +-2.034 0.3946 0.7739 0.1904 0.7317 +-2.036 0.3949 0.8097 0.1904 0.6967 +-2.047 0.397 0.8427 0.1904 0.66 +-2.067 0.4009 0.8729 0.1904 0.6216 +-2.097 0.4067 0.9002 0.1904 0.5817 +-2.136 0.4142 0.9246 0.1904 0.5403 +-2.183 0.4234 0.946 0.1904 0.4976 +-2.239 0.4343 0.9645 0.1904 0.4536 +-2.302 0.4465 0.9799 0.1904 0.4085 +-2.373 0.4602 0.9924 0.1904 0.3624 +-2.449 0.4751 1.002 0.1904 0.3153 +-2.532 0.4911 1.008 0.1904 0.2675 +-2.619 0.508 1.012 0.1904 0.219 +-2.71 0.5257 1.013 0.1904 0.17 +-2.805 0.544 1.011 0.1904 0.1205 +-2.901 0.5627 1.006 0.1904 0.07074 +-2.998 0.5816 0.9992 0.1904 0.02079 +-3.096 0.6005 0.9894 0.1904 -0.0292 +-3.193 0.6193 0.9772 0.1904 -0.07912 +-3.288 0.6378 0.9627 0.1904 -0.1288 +-3.38 0.6557 0.9459 0.1904 -0.1782 +-3.469 0.6729 0.9271 0.1904 -0.2272 +-3.553 0.6892 0.9062 0.1904 -0.2756 +-3.632 0.7045 0.8834 0.1904 -0.3233 +-3.704 0.7186 0.8589 0.1904 -0.3702 +-3.77 0.7313 0.8327 0.1904 -0.4161 +-3.828 0.7425 0.805 0.1904 -0.4611 +-3.878 0.7522 0.7759 0.1904 -0.5048 +-3.919 0.7602 0.7454 0.1904 -0.5474 +-3.951 0.7664 0.7138 0.1904 -0.5885 +-3.973 0.7707 0.681 0.1904 -0.6282 +-3.986 0.7732 0.6472 0.1904 -0.6663 +-3.989 0.7738 0.6126 0.1904 -0.7027 +-3.982 0.7724 0.5771 0.1904 -0.7374 +-3.965 0.7691 0.5409 0.1904 -0.7702 +-3.938 0.7639 0.504 0.1904 -0.8011 +-3.902 0.7569 0.4666 0.1904 -0.8301 +-3.857 0.7481 0.4286 0.1904 -0.8569 +-3.803 0.7376 0.3903 0.1904 -0.8816 +-3.74 0.7255 0.3515 0.1904 -0.9041 +-3.67 0.712 0.3124 0.1904 -0.9243 +-3.593 0.697 0.2731 0.1904 -0.9422 +-3.51 0.6809 0.2335 0.1904 -0.9578 +-3.422 0.6637 0.1937 0.1904 -0.971 +-3.328 0.6456 0.1538 0.1904 -0.9817 +-3.231 0.6268 0.1137 0.1904 -0.99 +-3.132 0.6075 0.07362 0.1904 -0.9958 +-3.03 0.5878 0.03344 0.1904 -0.9991 +-2.928 0.5679 -0.00676 0.1904 -1 +-2.826 0.5481 -0.04696 0.1904 -0.9983 +-2.725 0.5285 -0.08712 0.1904 -0.9941 +-2.626 0.5093 -0.1272 0.1904 -0.9875 +-2.53 0.4908 -0.1672 0.1904 -0.9784 +-2.438 0.473 -0.2071 0.1904 -0.9668 +-2.351 0.4561 -0.2468 0.1904 -0.9528 +-2.27 0.4403 -0.2863 0.1904 -0.9365 +-2.195 0.4259 -0.3256 0.1904 -0.9178 +-2.128 0.4128 -0.3646 0.1904 -0.8968 +-2.068 0.4012 -0.4032 0.1904 -0.8735 +-2.017 0.3913 -0.4414 0.1904 -0.8481 +-1.975 0.3831 -0.4792 0.1904 -0.8206 +-1.942 0.3767 -0.5165 0.1904 -0.791 +-1.918 0.3721 -0.5531 0.1904 -0.7594 +-1.905 0.3695 -0.5891 0.1904 -0.7259 +-1.901 0.3687 -0.6243 0.1904 -0.6907 +-1.907 0.37 -0.6587 0.1904 -0.6536 +-1.923 0.3731 -0.6921 0.1904 -0.615 +-1.949 0.378 -0.7245 0.1904 -0.5748 +-1.984 0.3849 -0.7558 0.1904 -0.5332 +-2.028 0.3934 -0.7858 0.1904 -0.4903 +-2.081 0.4036 -0.8145 0.1904 -0.4461 +-2.141 0.4154 -0.8417 0.1904 -0.4008 +-2.209 0.4286 -0.8674 0.1904 -0.3545 +-2.284 0.4431 -0.8913 0.1904 -0.3073 +-2.365 0.4587 -0.9134 0.1904 -0.2594 +-2.451 0.4753 -0.9336 0.1904 -0.2108 +-2.541 0.4928 -0.9518 0.1904 -0.1617 +-2.634 0.5109 -0.9678 0.1904 -0.1122 +-2.73 0.5295 -0.9816 0.1904 -0.06235 +-2.827 0.5484 -0.993 0.1904 -0.01239 +-2.925 0.5673 -1.002 0.1904 0.0376 +-3.022 0.5862 -1.008 0.1904 0.0875 +-3.118 0.6047 -1.012 0.1904 0.1372 +-3.211 0.6228 -1.013 0.1904 0.1865 +-3.301 0.6403 -1.011 0.1904 0.2354 +-3.387 0.6569 -1.007 0.1904 0.2837 +-3.467 0.6726 -0.999 0.1904 0.3312 +-3.542 0.6871 -0.9885 0.1904 0.378 +-3.61 0.7003 -0.975 0.1904 0.4238 +-3.671 0.7121 -0.9586 0.1904 0.4685 +-3.724 0.7224 -0.9391 0.1904 0.5121 +-3.769 0.731 -0.9167 0.1904 0.5544 +-3.804 0.738 -0.8913 0.1904 0.5953 +-3.831 0.7431 -0.863 0.1904 0.6347 +-3.848 0.7465 -0.8319 0.1904 0.6725 +-3.856 0.748 -0.798 0.1904 0.7087 +-3.854 0.7476 -0.7613 0.1904 0.743 +-3.843 0.7454 -0.722 0.1904 0.7756 +-3.822 0.7413 -0.6803 0.1904 0.8061 +-3.792 0.7355 -0.6361 0.1904 0.8347 +-3.753 0.728 -0.5897 0.1904 0.8612 +-3.706 0.7188 -0.5412 0.1904 0.8855 +-3.65 0.7081 -0.4907 0.1904 0.9076 +-3.588 0.6959 -0.4385 0.1904 0.9275 +-3.518 0.6825 -0.3847 0.1904 0.945 +-3.443 0.6679 -0.3295 0.1904 0.9602 +-3.363 0.6523 -0.273 0.1904 0.9729 +-3.278 0.6359 -0.2156 0.1904 0.9833 +-3.19 0.6187 -0.1574 0.1904 0.9911 +-3.099 0.6011 -0.09855 0.1904 0.9965 +-3.007 0.5832 -0.03937 0.1904 0.9994 +-2.97 0.4234 0 0.1411 1 +-2.875 0.4098 0.05692 0.1411 0.9988 +-2.781 0.3964 0.1136 0.1411 0.995 +-2.689 0.3833 0.17 0.1411 0.9888 +-2.599 0.3705 0.2257 0.1411 0.9801 +-2.514 0.3583 0.2807 0.1411 0.9689 +-2.433 0.3468 0.3347 0.1411 0.9553 +-2.358 0.3361 0.3876 0.1411 0.9394 +-2.289 0.3263 0.4392 0.1411 0.9211 +-2.227 0.3174 0.4893 0.1411 0.9004 +-2.173 0.3097 0.5377 0.1411 0.8776 +-2.127 0.3031 0.5844 0.1411 0.8525 +-2.089 0.2978 0.6292 0.1411 0.8253 +-2.061 0.2938 0.6718 0.1411 0.7961 +-2.042 0.2911 0.7123 0.1411 0.7648 +-2.033 0.2898 0.7505 0.1411 0.7317 +-2.033 0.2898 0.7863 0.1411 0.6967 +-2.043 0.2913 0.8195 0.1411 0.66 +-2.063 0.2941 0.8503 0.1411 0.6216 +-2.092 0.2983 0.8783 0.1411 0.5817 +-2.131 0.3038 0.9037 0.1411 0.5403 +-2.178 0.3105 0.9263 0.1411 0.4976 +-2.234 0.3184 0.9462 0.1411 0.4536 +-2.298 0.3275 0.9632 0.1411 0.4085 +-2.368 0.3376 0.9775 0.1411 0.3624 +-2.445 0.3486 0.9889 0.1411 0.3153 +-2.528 0.3604 0.9976 0.1411 0.2675 +-2.616 0.3729 1.004 0.1411 0.219 +-2.708 0.386 1.007 0.1411 0.17 +-2.803 0.3996 1.007 0.1411 0.1205 +-2.9 0.4135 1.005 0.1411 0.07074 +-2.999 0.4275 1 0.1411 0.02079 +-3.098 0.4416 0.9929 0.1411 -0.0292 +-3.196 0.4555 0.9832 0.1411 -0.07912 +-3.292 0.4692 0.9711 0.1411 -0.1288 +-3.385 0.4826 0.9567 0.1411 -0.1782 +-3.475 0.4954 0.9401 0.1411 -0.2272 +-3.561 0.5075 0.9214 0.1411 -0.2756 +-3.64 0.5189 0.9006 0.1411 -0.3233 +-3.714 0.5294 0.878 0.1411 -0.3702 +-3.781 0.539 0.8535 0.1411 -0.4161 +-3.84 0.5474 0.8273 0.1411 -0.4611 +-3.891 0.5547 0.7994 0.1411 -0.5048 +-3.933 0.5607 0.77 0.1411 -0.5474 +-3.966 0.5654 0.7392 0.1411 -0.5885 +-3.99 0.5687 0.707 0.1411 -0.6282 +-4.003 0.5707 0.6735 0.1411 -0.6663 +-4.007 0.5712 0.639 0.1411 -0.7027 +-4.001 0.5703 0.6033 0.1411 -0.7374 +-3.985 0.568 0.5667 0.1411 -0.7702 +-3.959 0.5643 0.5291 0.1411 -0.8011 +-3.923 0.5593 0.4908 0.1411 -0.8301 +-3.879 0.5529 0.4517 0.1411 -0.8569 +-3.825 0.5452 0.412 0.1411 -0.8816 +-3.763 0.5364 0.3716 0.1411 -0.9041 +-3.693 0.5265 0.3308 0.1411 -0.9243 +-3.617 0.5156 0.2895 0.1411 -0.9422 +-3.534 0.5037 0.2478 0.1411 -0.9578 +-3.446 0.4911 0.2058 0.1411 -0.971 +-3.353 0.4779 0.1635 0.1411 -0.9817 +-3.256 0.4641 0.121 0.1411 -0.99 +-3.156 0.4499 0.07835 0.1411 -0.9958 +-3.055 0.4355 0.0356 0.1411 -0.9991 +-2.953 0.4209 -0.007197 0.1411 -1 +-2.851 0.4064 -0.04998 0.1411 -0.9983 +-2.75 0.392 -0.09271 0.1411 -0.9941 +-2.651 0.3779 -0.1353 0.1411 -0.9875 +-2.556 0.3643 -0.1777 0.1411 -0.9784 +-2.464 0.3513 -0.2199 0.1411 -0.9668 +-2.378 0.3389 -0.2619 0.1411 -0.9528 +-2.297 0.3274 -0.3034 0.1411 -0.9365 +-2.222 0.3168 -0.3446 0.1411 -0.9178 +-2.155 0.3072 -0.3853 0.1411 -0.8968 +-2.096 0.2988 -0.4254 0.1411 -0.8735 +-2.045 0.2916 -0.4649 0.1411 -0.8481 +-2.004 0.2856 -0.5038 0.1411 -0.8206 +-1.971 0.281 -0.5419 0.1411 -0.791 +-1.949 0.2778 -0.5791 0.1411 -0.7594 +-1.936 0.2759 -0.6154 0.1411 -0.7259 +-1.933 0.2755 -0.6507 0.1411 -0.6907 +-1.94 0.2765 -0.6849 0.1411 -0.6536 +-1.957 0.279 -0.7179 0.1411 -0.615 +-1.984 0.2828 -0.7497 0.1411 -0.5748 +-2.02 0.2879 -0.78 0.1411 -0.5332 +-2.065 0.2944 -0.8089 0.1411 -0.4903 +-2.119 0.302 -0.8363 0.1411 -0.4461 +-2.181 0.3108 -0.8619 0.1411 -0.4008 +-2.25 0.3207 -0.8858 0.1411 -0.3545 +-2.326 0.3315 -0.9078 0.1411 -0.3073 +-2.408 0.3432 -0.9279 0.1411 -0.2594 +-2.495 0.3556 -0.9459 0.1411 -0.2108 +-2.586 0.3686 -0.9618 0.1411 -0.1617 +-2.68 0.3821 -0.9754 0.1411 -0.1122 +-2.777 0.3959 -0.9868 0.1411 -0.06235 +-2.875 0.4099 -0.9957 0.1411 -0.01239 +-2.974 0.424 -1.002 0.1411 0.0376 +-3.072 0.438 -1.006 0.1411 0.0875 +-3.169 0.4517 -1.007 0.1411 0.1372 +-3.263 0.4651 -1.006 0.1411 0.1865 +-3.354 0.4781 -1.002 0.1411 0.2354 +-3.44 0.4904 -0.995 0.1411 0.2837 +-3.521 0.5019 -0.9854 0.1411 0.3312 +-3.596 0.5126 -0.973 0.1411 0.378 +-3.665 0.5224 -0.9578 0.1411 0.4238 +-3.726 0.5311 -0.9398 0.1411 0.4685 +-3.779 0.5386 -0.919 0.1411 0.5121 +-3.823 0.5449 -0.8955 0.1411 0.5544 +-3.858 0.55 -0.8692 0.1411 0.5953 +-3.885 0.5537 -0.8402 0.1411 0.6347 +-3.901 0.5561 -0.8086 0.1411 0.6725 +-3.908 0.5571 -0.7745 0.1411 0.7087 +-3.905 0.5567 -0.7379 0.1411 0.743 +-3.893 0.5549 -0.6989 0.1411 0.7756 +-3.871 0.5517 -0.6577 0.1411 0.8061 +-3.839 0.5473 -0.6143 0.1411 0.8347 +-3.799 0.5415 -0.5689 0.1411 0.8612 +-3.75 0.5345 -0.5216 0.1411 0.8855 +-3.693 0.5264 -0.4726 0.1411 0.9076 +-3.629 0.5173 -0.422 0.1411 0.9275 +-3.557 0.5071 -0.37 0.1411 0.945 +-3.48 0.4961 -0.3167 0.1411 0.9602 +-3.398 0.4843 -0.2623 0.1411 0.9729 +-3.311 0.472 -0.207 0.1411 0.9833 +-3.221 0.4591 -0.1511 0.1411 0.9911 +-3.128 0.4458 -0.0946 0.1411 0.9965 +-3.033 0.4324 -0.03779 0.1411 0.9994 +-2.987 0.2744 0 0.09146 1 +-2.89 0.2655 0.0545 0.09146 0.9988 +-2.794 0.2567 0.1088 0.09146 0.995 +-2.7 0.248 0.1628 0.09146 0.9888 +-2.609 0.2396 0.2163 0.09146 0.9801 +-2.522 0.2316 0.2691 0.09146 0.9689 +-2.439 0.224 0.3211 0.09146 0.9553 +-2.362 0.217 0.372 0.09146 0.9394 +-2.292 0.2105 0.4219 0.09146 0.9211 +-2.228 0.2046 0.4704 0.09146 0.9004 +-2.172 0.1995 0.5174 0.09146 0.8776 +-2.125 0.1952 0.5629 0.09146 0.8525 +-2.086 0.1916 0.6067 0.09146 0.8253 +-2.057 0.1889 0.6487 0.09146 0.7961 +-2.037 0.1871 0.6887 0.09146 0.7648 +-2.026 0.1861 0.7266 0.09146 0.7317 +-2.026 0.1861 0.7624 0.09146 0.6967 +-2.035 0.1869 0.7959 0.09146 0.66 +-2.054 0.1887 0.8271 0.09146 0.6216 +-2.083 0.1913 0.8559 0.09146 0.5817 +-2.121 0.1948 0.8822 0.09146 0.5403 +-2.168 0.1992 0.906 0.09146 0.4976 +-2.224 0.2043 0.9273 0.09146 0.4536 +-2.287 0.2101 0.9459 0.09146 0.4085 +-2.358 0.2166 0.962 0.09146 0.3624 +-2.435 0.2237 0.9754 0.09146 0.3153 +-2.519 0.2313 0.9861 0.09146 0.2675 +-2.607 0.2394 0.9943 0.09146 0.219 +-2.699 0.2479 0.9998 0.09146 0.17 +-2.795 0.2567 1.003 0.09146 0.1205 +-2.893 0.2657 1.003 0.09146 0.07074 +-2.992 0.2748 1.001 0.09146 0.02079 +-3.091 0.2839 0.9959 0.09146 -0.0292 +-3.19 0.293 0.9886 0.09146 -0.07912 +-3.287 0.3019 0.9789 0.09146 -0.1288 +-3.381 0.3106 0.9669 0.09146 -0.1782 +-3.472 0.3189 0.9526 0.09146 -0.2272 +-3.558 0.3268 0.936 0.09146 -0.2756 +-3.639 0.3343 0.9173 0.09146 -0.3233 +-3.714 0.3411 0.8965 0.09146 -0.3702 +-3.782 0.3473 0.8737 0.09146 -0.4161 +-3.842 0.3529 0.849 0.09146 -0.4611 +-3.894 0.3576 0.8224 0.09146 -0.5048 +-3.937 0.3616 0.7941 0.09146 -0.5474 +-3.971 0.3647 0.7641 0.09146 -0.5885 +-3.995 0.367 0.7325 0.09146 -0.6282 +-4.01 0.3683 0.6994 0.09146 -0.6663 +-4.015 0.3687 0.665 0.09146 -0.7027 +-4.009 0.3682 0.6292 0.09146 -0.7374 +-3.994 0.3668 0.5921 0.09146 -0.7702 +-3.969 0.3645 0.5539 0.09146 -0.8011 +-3.934 0.3613 0.5147 0.09146 -0.8301 +-3.89 0.3573 0.4745 0.09146 -0.8569 +-3.837 0.3524 0.4334 0.09146 -0.8816 +-3.776 0.3468 0.3916 0.09146 -0.9041 +-3.707 0.3405 0.349 0.09146 -0.9243 +-3.631 0.3335 0.3057 0.09146 -0.9422 +-3.548 0.3259 0.262 0.09146 -0.9578 +-3.461 0.3178 0.2177 0.09146 -0.971 +-3.368 0.3094 0.1731 0.09146 -0.9817 +-3.272 0.3005 0.1282 0.09146 -0.99 +-3.173 0.2914 0.08303 0.09146 -0.9958 +-3.072 0.2822 0.03773 0.09146 -0.9991 +-2.97 0.2728 -0.007629 0.09146 -1 +-2.869 0.2635 -0.05298 0.09146 -0.9983 +-2.768 0.2543 -0.09823 0.09146 -0.9941 +-2.67 0.2453 -0.1433 0.09146 -0.9875 +-2.575 0.2365 -0.1882 0.09146 -0.9784 +-2.484 0.2282 -0.2327 0.09146 -0.9668 +-2.398 0.2203 -0.2767 0.09146 -0.9528 +-2.318 0.2129 -0.3203 0.09146 -0.9365 +-2.244 0.2061 -0.3634 0.09146 -0.9178 +-2.178 0.2 -0.4057 0.09146 -0.8968 +-2.119 0.1947 -0.4473 0.09146 -0.8735 +-2.069 0.1901 -0.4881 0.09146 -0.8481 +-2.028 0.1863 -0.528 0.09146 -0.8206 +-1.997 0.1834 -0.5669 0.09146 -0.791 +-1.975 0.1814 -0.6047 0.09146 -0.7594 +-1.963 0.1803 -0.6413 0.09146 -0.7259 +-1.961 0.1801 -0.6767 0.09146 -0.6907 +-1.969 0.1808 -0.7107 0.09146 -0.6536 +-1.987 0.1825 -0.7433 0.09146 -0.615 +-2.014 0.185 -0.7744 0.09146 -0.5748 +-2.051 0.1884 -0.8038 0.09146 -0.5332 +-2.098 0.1927 -0.8315 0.09146 -0.4903 +-2.152 0.1977 -0.8575 0.09146 -0.4461 +-2.215 0.2035 -0.8816 0.09146 -0.4008 +-2.285 0.2099 -0.9037 0.09146 -0.3545 +-2.362 0.217 -0.9238 0.09146 -0.3073 +-2.445 0.2246 -0.9418 0.09146 -0.2594 +-2.533 0.2326 -0.9576 0.09146 -0.2108 +-2.625 0.2411 -0.9712 0.09146 -0.1617 +-2.72 0.2499 -0.9824 0.09146 -0.1122 +-2.818 0.2588 -0.9913 0.09146 -0.06235 +-2.917 0.2679 -0.9977 0.09146 -0.01239 +-3.017 0.2771 -1.002 0.09146 0.0376 +-3.115 0.2862 -1.003 0.09146 0.0875 +-3.213 0.2951 -1.002 0.09146 0.1372 +-3.307 0.3038 -0.9982 0.09146 0.1865 +-3.398 0.3121 -0.9918 0.09146 0.2354 +-3.485 0.3201 -0.9828 0.09146 0.2837 +-3.566 0.3276 -0.9712 0.09146 0.3312 +-3.641 0.3345 -0.9569 0.09146 0.378 +-3.71 0.3407 -0.94 0.09146 0.4238 +-3.771 0.3463 -0.9204 0.09146 0.4685 +-3.823 0.3512 -0.8983 0.09146 0.5121 +-3.867 0.3552 -0.8736 0.09146 0.5544 +-3.902 0.3584 -0.8465 0.09146 0.5953 +-3.928 0.3608 -0.8169 0.09146 0.6347 +-3.944 0.3622 -0.7849 0.09146 0.6725 +-3.95 0.3628 -0.7506 0.09146 0.7087 +-3.946 0.3625 -0.7141 0.09146 0.743 +-3.933 0.3612 -0.6754 0.09146 0.7756 +-3.909 0.3591 -0.6348 0.09146 0.8061 +-3.877 0.3561 -0.5922 0.09146 0.8347 +-3.835 0.3523 -0.5478 0.09146 0.8612 +-3.785 0.3476 -0.5018 0.09146 0.8855 +-3.726 0.3423 -0.4542 0.09146 0.9076 +-3.66 0.3362 -0.4052 0.09146 0.9275 +-3.587 0.3295 -0.355 0.09146 0.945 +-3.508 0.3222 -0.3037 0.09146 0.9602 +-3.424 0.3145 -0.2514 0.09146 0.9729 +-3.335 0.3064 -0.1984 0.09146 0.9833 +-3.243 0.2979 -0.1447 0.09146 0.9911 +-3.148 0.2892 -0.09058 0.09146 0.9965 +-3.052 0.2803 -0.03618 0.09146 0.9994 +-2.997 0.1247 0 0.04158 1 +-2.899 0.1206 0.05204 0.04158 0.9988 +-2.801 0.1166 0.1039 0.04158 0.995 +-2.705 0.1126 0.1556 0.04158 0.9888 +-2.613 0.1087 0.2067 0.04158 0.9801 +-2.524 0.105 0.2573 0.04158 0.9689 +-2.44 0.1015 0.3072 0.04158 0.9553 +-2.361 0.09826 0.3562 0.04158 0.9394 +-2.289 0.09526 0.4043 0.04158 0.9211 +-2.224 0.09255 0.4512 0.04158 0.9004 +-2.167 0.09018 0.4968 0.04158 0.8776 +-2.118 0.08814 0.5411 0.04158 0.8525 +-2.078 0.08648 0.5839 0.04158 0.8253 +-2.047 0.08521 0.6251 0.04158 0.7961 +-2.026 0.08433 0.6646 0.04158 0.7648 +-2.015 0.08386 0.7022 0.04158 0.7317 +-2.014 0.08381 0.738 0.04158 0.6967 +-2.022 0.08417 0.7717 0.04158 0.66 +-2.041 0.08493 0.8034 0.04158 0.6216 +-2.069 0.08611 0.8329 0.04158 0.5817 +-2.107 0.08767 0.8602 0.04158 0.5403 +-2.153 0.08961 0.8852 0.04158 0.4976 +-2.208 0.0919 0.9078 0.04158 0.4536 +-2.271 0.09453 0.9281 0.04158 0.4085 +-2.342 0.09747 0.9459 0.04158 0.3624 +-2.419 0.1007 0.9612 0.04158 0.3153 +-2.502 0.1041 0.9741 0.04158 0.2675 +-2.591 0.1078 0.9844 0.04158 0.219 +-2.683 0.1117 0.9922 0.04158 0.17 +-2.779 0.1157 0.9975 0.04158 0.1205 +-2.877 0.1197 1 0.04158 0.07074 +-2.977 0.1239 1 0.04158 0.02079 +-3.076 0.128 0.9981 0.04158 -0.0292 +-3.176 0.1322 0.9934 0.04158 -0.07912 +-3.273 0.1362 0.9861 0.04158 -0.1288 +-3.368 0.1402 0.9765 0.04158 -0.1782 +-3.46 0.144 0.9644 0.04158 -0.2272 +-3.547 0.1476 0.95 0.04158 -0.2756 +-3.628 0.151 0.9334 0.04158 -0.3233 +-3.704 0.1541 0.9145 0.04158 -0.3702 +-3.772 0.157 0.8934 0.04158 -0.4161 +-3.833 0.1595 0.8702 0.04158 -0.4611 +-3.886 0.1617 0.8449 0.04158 -0.5048 +-3.93 0.1636 0.8177 0.04158 -0.5474 +-3.965 0.165 0.7885 0.04158 -0.5885 +-3.99 0.1661 0.7576 0.04158 -0.6282 +-4.006 0.1667 0.7249 0.04158 -0.6663 +-4.011 0.1669 0.6905 0.04158 -0.7027 +-4.007 0.1667 0.6546 0.04158 -0.7374 +-3.992 0.1661 0.6172 0.04158 -0.7702 +-3.968 0.1651 0.5784 0.04158 -0.8011 +-3.934 0.1637 0.5383 0.04158 -0.8301 +-3.891 0.1619 0.497 0.04158 -0.8569 +-3.839 0.1597 0.4546 0.04158 -0.8816 +-3.778 0.1572 0.4112 0.04158 -0.9041 +-3.71 0.1544 0.3669 0.04158 -0.9243 +-3.635 0.1513 0.3218 0.04158 -0.9422 +-3.553 0.1479 0.276 0.04158 -0.9578 +-3.466 0.1443 0.2295 0.04158 -0.971 +-3.375 0.1404 0.1826 0.04158 -0.9817 +-3.279 0.1365 0.1353 0.04158 -0.99 +-3.181 0.1324 0.08766 0.04158 -0.9958 +-3.081 0.1282 0.03984 0.04158 -0.9991 +-2.98 0.124 -0.008056 0.04158 -1 +-2.88 0.1198 -0.05594 0.04158 -0.9983 +-2.78 0.1157 -0.1037 0.04158 -0.9941 +-2.683 0.1117 -0.1512 0.04158 -0.9875 +-2.589 0.1077 -0.1984 0.04158 -0.9784 +-2.499 0.104 -0.2452 0.04158 -0.9668 +-2.413 0.1004 -0.2914 0.04158 -0.9528 +-2.334 0.09713 -0.337 0.04158 -0.9365 +-2.261 0.09409 -0.3819 0.04158 -0.9178 +-2.195 0.09137 -0.4259 0.04158 -0.8968 +-2.138 0.08897 -0.469 0.04158 -0.8735 +-2.089 0.08692 -0.511 0.04158 -0.8481 +-2.049 0.08525 -0.5519 0.04158 -0.8206 +-2.018 0.08397 -0.5916 0.04158 -0.791 +-1.997 0.0831 -0.6299 0.04158 -0.7594 +-1.986 0.08264 -0.6669 0.04158 -0.7259 +-1.985 0.08259 -0.7023 0.04158 -0.6907 +-1.993 0.08296 -0.7361 0.04158 -0.6536 +-2.012 0.08374 -0.7682 0.04158 -0.615 +-2.041 0.08493 -0.7985 0.04158 -0.5748 +-2.079 0.08651 -0.827 0.04158 -0.5332 +-2.126 0.08846 -0.8536 0.04158 -0.4903 +-2.181 0.09077 -0.8782 0.04158 -0.4461 +-2.245 0.09342 -0.9007 0.04158 -0.4008 +-2.316 0.09637 -0.9211 0.04158 -0.3545 +-2.393 0.0996 -0.9392 0.04158 -0.3073 +-2.477 0.1031 -0.9551 0.04158 -0.2594 +-2.565 0.1068 -0.9687 0.04158 -0.2108 +-2.658 0.1106 -0.98 0.04158 -0.1617 +-2.754 0.1146 -0.9888 0.04158 -0.1122 +-2.852 0.1187 -0.9953 0.04158 -0.06235 +-2.952 0.1228 -0.9992 0.04158 -0.01239 +-3.052 0.127 -1.001 0.04158 0.0376 +-3.151 0.1311 -0.9996 0.04158 0.0875 +-3.248 0.1352 -0.996 0.04158 0.1372 +-3.343 0.1391 -0.9899 0.04158 0.1865 +-3.434 0.1429 -0.9812 0.04158 0.2354 +-3.521 0.1465 -0.97 0.04158 0.2837 +-3.602 0.1499 -0.9563 0.04158 0.3312 +-3.677 0.153 -0.9402 0.04158 0.378 +-3.745 0.1559 -0.9215 0.04158 0.4238 +-3.806 0.1584 -0.9005 0.04158 0.4685 +-3.858 0.1606 -0.877 0.04158 0.5121 +-3.902 0.1624 -0.8513 0.04158 0.5544 +-3.936 0.1638 -0.8232 0.04158 0.5953 +-3.961 0.1649 -0.793 0.04158 0.6347 +-3.976 0.1655 -0.7606 0.04158 0.6725 +-3.982 0.1657 -0.7262 0.04158 0.7087 +-3.977 0.1655 -0.6898 0.04158 0.743 +-3.962 0.1649 -0.6515 0.04158 0.7756 +-3.938 0.1639 -0.6114 0.04158 0.8061 +-3.904 0.1625 -0.5697 0.04158 0.8347 +-3.861 0.1607 -0.5264 0.04158 0.8612 +-3.81 0.1585 -0.4816 0.04158 0.8855 +-3.75 0.1561 -0.4355 0.04158 0.9076 +-3.682 0.1532 -0.3882 0.04158 0.9275 +-3.608 0.1502 -0.3398 0.04158 0.945 +-3.528 0.1468 -0.2905 0.04158 0.9602 +-3.442 0.1432 -0.2404 0.04158 0.9729 +-3.351 0.1395 -0.1896 0.04158 0.9833 +-3.258 0.1356 -0.1382 0.04158 0.9911 +-3.161 0.1316 -0.08652 0.04158 0.9965 +-3.063 0.1275 -0.03455 0.04158 0.9994 +-3 -0.02522 0 -0.008407 1 +-2.9 -0.02438 0.04956 -0.008407 0.9988 +-2.801 -0.02355 0.099 -0.008407 0.995 +-2.704 -0.02273 0.1482 -0.008407 0.9888 +-2.61 -0.02194 0.197 -0.008407 0.9801 +-2.519 -0.02118 0.2454 -0.008407 0.9689 +-2.434 -0.02046 0.2931 -0.008407 0.9553 +-2.354 -0.01979 0.3402 -0.008407 0.9394 +-2.281 -0.01918 0.3864 -0.008407 0.9211 +-2.215 -0.01862 0.4317 -0.008407 0.9004 +-2.156 -0.01813 0.4759 -0.008407 0.8776 +-2.107 -0.01771 0.5189 -0.008407 0.8525 +-2.066 -0.01737 0.5607 -0.008407 0.8253 +-2.034 -0.0171 0.6011 -0.008407 0.7961 +-2.012 -0.01691 0.6401 -0.008407 0.7648 +-2 -0.01681 0.6774 -0.008407 0.7317 +-1.997 -0.01679 0.7131 -0.008407 0.6967 +-2.005 -0.01686 0.7471 -0.008407 0.66 +-2.023 -0.01701 0.7792 -0.008407 0.6216 +-2.05 -0.01724 0.8094 -0.008407 0.5817 +-2.087 -0.01755 0.8376 -0.008407 0.5403 +-2.133 -0.01793 0.8638 -0.008407 0.4976 +-2.188 -0.01839 0.8878 -0.008407 0.4536 +-2.25 -0.01892 0.9096 -0.008407 0.4085 +-2.321 -0.01951 0.9292 -0.008407 0.3624 +-2.397 -0.02016 0.9465 -0.008407 0.3153 +-2.48 -0.02085 0.9614 -0.008407 0.2675 +-2.568 -0.02159 0.9739 -0.008407 0.219 +-2.661 -0.02237 0.984 -0.008407 0.17 +-2.756 -0.02318 0.9917 -0.008407 0.1205 +-2.855 -0.024 0.9969 -0.008407 0.07074 +-2.954 -0.02484 0.9996 -0.008407 0.02079 +-3.054 -0.02568 0.9998 -0.008407 -0.0292 +-3.153 -0.02651 0.9975 -0.008407 -0.07912 +-3.251 -0.02734 0.9927 -0.008407 -0.1288 +-3.347 -0.02814 0.9855 -0.008407 -0.1782 +-3.438 -0.02891 0.9757 -0.008407 -0.2272 +-3.526 -0.02964 0.9635 -0.008407 -0.2756 +-3.608 -0.03033 0.9489 -0.008407 -0.3233 +-3.684 -0.03097 0.9318 -0.008407 -0.3702 +-3.753 -0.03155 0.9125 -0.008407 -0.4161 +-3.814 -0.03207 0.8908 -0.008407 -0.4611 +-3.868 -0.03252 0.8669 -0.008407 -0.5048 +-3.913 -0.03289 0.8407 -0.008407 -0.5474 +-3.948 -0.03319 0.8125 -0.008407 -0.5885 +-3.974 -0.03341 0.7822 -0.008407 -0.6282 +-3.99 -0.03355 0.7499 -0.008407 -0.6663 +-3.997 -0.0336 0.7157 -0.008407 -0.7027 +-3.993 -0.03357 0.6796 -0.008407 -0.7374 +-3.98 -0.03346 0.6419 -0.008407 -0.7702 +-3.956 -0.03326 0.6025 -0.008407 -0.8011 +-3.923 -0.03299 0.5616 -0.008407 -0.8301 +-3.881 -0.03263 0.5192 -0.008407 -0.8569 +-3.83 -0.0322 0.4755 -0.008407 -0.8816 +-3.771 -0.0317 0.4306 -0.008407 -0.9041 +-3.704 -0.03114 0.3846 -0.008407 -0.9243 +-3.63 -0.03052 0.3376 -0.008407 -0.9422 +-3.549 -0.02984 0.2898 -0.008407 -0.9578 +-3.463 -0.02912 0.2412 -0.008407 -0.971 +-3.373 -0.02836 0.192 -0.008407 -0.9817 +-3.279 -0.02757 0.1423 -0.008407 -0.99 +-3.182 -0.02675 0.09223 -0.008407 -0.9958 +-3.083 -0.02592 0.04193 -0.008407 -0.9991 +-2.983 -0.02508 -0.008478 -0.008407 -1 +-2.884 -0.02424 -0.05886 -0.008407 -0.9983 +-2.785 -0.02342 -0.1091 -0.008407 -0.9941 +-2.689 -0.02261 -0.1591 -0.008407 -0.9875 +-2.596 -0.02183 -0.2086 -0.008407 -0.9784 +-2.507 -0.02108 -0.2576 -0.008407 -0.9668 +-2.423 -0.02037 -0.306 -0.008407 -0.9528 +-2.344 -0.01971 -0.3535 -0.008407 -0.9365 +-2.273 -0.01911 -0.4002 -0.008407 -0.9178 +-2.208 -0.01856 -0.4459 -0.008407 -0.8968 +-2.152 -0.01809 -0.4904 -0.008407 -0.8735 +-2.103 -0.01768 -0.5336 -0.008407 -0.8481 +-2.064 -0.01736 -0.5755 -0.008407 -0.8206 +-2.035 -0.01711 -0.6159 -0.008407 -0.791 +-2.015 -0.01694 -0.6548 -0.008407 -0.7594 +-2.004 -0.01685 -0.692 -0.008407 -0.7259 +-2.004 -0.01685 -0.7274 -0.008407 -0.6907 +-2.014 -0.01693 -0.761 -0.008407 -0.6536 +-2.033 -0.0171 -0.7926 -0.008407 -0.615 +-2.063 -0.01734 -0.8222 -0.008407 -0.5748 +-2.101 -0.01767 -0.8498 -0.008407 -0.5332 +-2.149 -0.01807 -0.8752 -0.008407 -0.4903 +-2.205 -0.01854 -0.8983 -0.008407 -0.4461 +-2.269 -0.01908 -0.9192 -0.008407 -0.4008 +-2.341 -0.01968 -0.9378 -0.008407 -0.3545 +-2.419 -0.02034 -0.9541 -0.008407 -0.3073 +-2.503 -0.02104 -0.9679 -0.008407 -0.2594 +-2.592 -0.02179 -0.9793 -0.008407 -0.2108 +-2.685 -0.02257 -0.9882 -0.008407 -0.1617 +-2.781 -0.02338 -0.9946 -0.008407 -0.1122 +-2.88 -0.02421 -0.9986 -0.008407 -0.06235 +-2.979 -0.02505 -1 -0.008407 -0.01239 +-3.079 -0.02589 -0.999 -0.008407 0.0376 +-3.178 -0.02672 -0.9954 -0.008407 0.0875 +-3.276 -0.02754 -0.9894 -0.008407 0.1372 +-3.37 -0.02834 -0.9809 -0.008407 0.1865 +-3.461 -0.0291 -0.97 -0.008407 0.2354 +-3.548 -0.02983 -0.9566 -0.008407 0.2837 +-3.629 -0.03051 -0.9409 -0.008407 0.3312 +-3.704 -0.03114 -0.9229 -0.008407 0.378 +-3.771 -0.03171 -0.9025 -0.008407 0.4238 +-3.831 -0.03221 -0.88 -0.008407 0.4685 +-3.883 -0.03265 -0.8552 -0.008407 0.5121 +-3.926 -0.03301 -0.8284 -0.008407 0.5544 +-3.96 -0.03329 -0.7995 -0.008407 0.5953 +-3.984 -0.0335 -0.7686 -0.008407 0.6347 +-3.998 -0.03362 -0.7359 -0.008407 0.6725 +-4.003 -0.03365 -0.7013 -0.008407 0.7087 +-3.997 -0.03361 -0.6651 -0.008407 0.743 +-3.982 -0.03348 -0.6271 -0.008407 0.7756 +-3.956 -0.03326 -0.5877 -0.008407 0.8061 +-3.921 -0.03297 -0.5468 -0.008407 0.8347 +-3.877 -0.0326 -0.5046 -0.008407 0.8612 +-3.825 -0.03216 -0.4611 -0.008407 0.8855 +-3.764 -0.03164 -0.4166 -0.008407 0.9076 +-3.695 -0.03107 -0.371 -0.008407 0.9275 +-3.619 -0.03043 -0.3245 -0.008407 0.945 +-3.538 -0.02974 -0.2772 -0.008407 0.9602 +-3.45 -0.02901 -0.2292 -0.008407 0.9729 +-3.359 -0.02824 -0.1807 -0.008407 0.9833 +-3.264 -0.02744 -0.1317 -0.008407 0.9911 +-3.166 -0.02662 -0.08239 -0.008407 0.9965 +-3.066 -0.02578 -0.0329 -0.008407 0.9994 +-2.995 -0.1751 0 -0.05837 1 +-2.894 -0.1692 0.04704 -0.05837 0.9988 +-2.794 -0.1634 0.09399 -0.05837 0.995 +-2.696 -0.1576 0.1407 -0.05837 0.9888 +-2.601 -0.1521 0.1872 -0.05837 0.9801 +-2.509 -0.1467 0.2333 -0.05837 0.9689 +-2.423 -0.1417 0.2789 -0.05837 0.9553 +-2.342 -0.1369 0.3239 -0.05837 0.9394 +-2.268 -0.1326 0.3683 -0.05837 0.9211 +-2.201 -0.1287 0.4119 -0.05837 0.9004 +-2.141 -0.1252 0.4547 -0.05837 0.8776 +-2.09 -0.1222 0.4964 -0.05837 0.8525 +-2.048 -0.1198 0.5372 -0.05837 0.8253 +-2.016 -0.1179 0.5768 -0.05837 0.7961 +-1.993 -0.1165 0.6152 -0.05837 0.7648 +-1.98 -0.1158 0.6522 -0.05837 0.7317 +-1.977 -0.1156 0.6879 -0.05837 0.6967 +-1.983 -0.116 0.722 -0.05837 0.66 +-2 -0.117 0.7546 -0.05837 0.6216 +-2.027 -0.1185 0.7854 -0.05837 0.5817 +-2.063 -0.1206 0.8146 -0.05837 0.5403 +-2.108 -0.1233 0.8418 -0.05837 0.4976 +-2.162 -0.1264 0.8672 -0.05837 0.4536 +-2.224 -0.1301 0.8906 -0.05837 0.4085 +-2.294 -0.1341 0.9119 -0.05837 0.3624 +-2.37 -0.1386 0.9311 -0.05837 0.3153 +-2.452 -0.1434 0.9481 -0.05837 0.2675 +-2.54 -0.1485 0.9628 -0.05837 0.219 +-2.632 -0.1539 0.9752 -0.05837 0.17 +-2.727 -0.1595 0.9853 -0.05837 0.1205 +-2.825 -0.1652 0.9929 -0.05837 0.07074 +-2.924 -0.171 0.9981 -0.05837 0.02079 +-3.024 -0.1768 1.001 -0.05837 -0.0292 +-3.123 -0.1826 1.001 -0.05837 -0.07912 +-3.221 -0.1883 0.9987 -0.05837 -0.1288 +-3.316 -0.1939 0.9938 -0.05837 -0.1782 +-3.408 -0.1993 0.9864 -0.05837 -0.2272 +-3.496 -0.2044 0.9763 -0.05837 -0.2756 +-3.578 -0.2092 0.9638 -0.05837 -0.3233 +-3.654 -0.2137 0.9486 -0.05837 -0.3702 +-3.724 -0.2177 0.931 -0.05837 -0.4161 +-3.786 -0.2214 0.9109 -0.05837 -0.4611 +-3.839 -0.2245 0.8883 -0.05837 -0.5048 +-3.885 -0.2272 0.8633 -0.05837 -0.5474 +-3.921 -0.2293 0.8359 -0.05837 -0.5885 +-3.948 -0.2308 0.8063 -0.05837 -0.6282 +-3.965 -0.2318 0.7744 -0.05837 -0.6663 +-3.972 -0.2323 0.7404 -0.05837 -0.7027 +-3.969 -0.2321 0.7043 -0.05837 -0.7374 +-3.957 -0.2314 0.6662 -0.05837 -0.7702 +-3.934 -0.2301 0.6262 -0.05837 -0.8011 +-3.902 -0.2282 0.5845 -0.05837 -0.8301 +-3.861 -0.2258 0.5411 -0.05837 -0.8569 +-3.812 -0.2229 0.4961 -0.05837 -0.8816 +-3.754 -0.2195 0.4498 -0.05837 -0.9041 +-3.688 -0.2156 0.4021 -0.05837 -0.9243 +-3.615 -0.2114 0.3533 -0.05837 -0.9422 +-3.536 -0.2068 0.3034 -0.05837 -0.9578 +-3.452 -0.2018 0.2527 -0.05837 -0.971 +-3.362 -0.1966 0.2013 -0.05837 -0.9817 +-3.27 -0.1912 0.1492 -0.05837 -0.99 +-3.174 -0.1856 0.09674 -0.05837 -0.9958 +-3.077 -0.1799 0.04399 -0.05837 -0.9991 +-2.978 -0.1742 -0.008895 -0.05837 -1 +-2.88 -0.1684 -0.06175 -0.05837 -0.9983 +-2.783 -0.1628 -0.1144 -0.05837 -0.9941 +-2.689 -0.1572 -0.1668 -0.05837 -0.9875 +-2.597 -0.1519 -0.2186 -0.05837 -0.9784 +-2.509 -0.1467 -0.2699 -0.05837 -0.9668 +-2.427 -0.1419 -0.3203 -0.05837 -0.9528 +-2.35 -0.1374 -0.3698 -0.05837 -0.9365 +-2.279 -0.1333 -0.4183 -0.05837 -0.9178 +-2.216 -0.1296 -0.4655 -0.05837 -0.8968 +-2.16 -0.1263 -0.5114 -0.05837 -0.8735 +-2.114 -0.1236 -0.5559 -0.05837 -0.8481 +-2.076 -0.1214 -0.5987 -0.05837 -0.8206 +-2.047 -0.1197 -0.6399 -0.05837 -0.791 +-2.028 -0.1186 -0.6792 -0.05837 -0.7594 +-2.019 -0.118 -0.7166 -0.05837 -0.7259 +-2.019 -0.1181 -0.752 -0.05837 -0.6907 +-2.03 -0.1187 -0.7854 -0.05837 -0.6536 +-2.05 -0.1199 -0.8165 -0.05837 -0.615 +-2.08 -0.1216 -0.8454 -0.05837 -0.5748 +-2.119 -0.1239 -0.872 -0.05837 -0.5332 +-2.168 -0.1267 -0.8962 -0.05837 -0.4903 +-2.224 -0.1301 -0.9179 -0.05837 -0.4461 +-2.289 -0.1338 -0.9372 -0.05837 -0.4008 +-2.361 -0.138 -0.954 -0.05837 -0.3545 +-2.439 -0.1426 -0.9683 -0.05837 -0.3073 +-2.523 -0.1475 -0.98 -0.05837 -0.2594 +-2.612 -0.1527 -0.9891 -0.05837 -0.2108 +-2.705 -0.1582 -0.9957 -0.05837 -0.1617 +-2.801 -0.1638 -0.9998 -0.05837 -0.1122 +-2.9 -0.1696 -1.001 -0.05837 -0.06235 +-2.999 -0.1754 -1 -0.05837 -0.01239 +-3.099 -0.1812 -0.9967 -0.05837 0.0376 +-3.198 -0.187 -0.9906 -0.05837 0.0875 +-3.295 -0.1927 -0.9822 -0.05837 0.1372 +-3.389 -0.1982 -0.9713 -0.05837 0.1865 +-3.48 -0.2035 -0.9581 -0.05837 0.2354 +-3.566 -0.2085 -0.9426 -0.05837 0.2837 +-3.646 -0.2132 -0.9249 -0.05837 0.3312 +-3.72 -0.2175 -0.905 -0.05837 0.378 +-3.787 -0.2215 -0.883 -0.05837 0.4238 +-3.847 -0.2249 -0.8589 -0.05837 0.4685 +-3.898 -0.2279 -0.8329 -0.05837 0.5121 +-3.94 -0.2304 -0.805 -0.05837 0.5544 +-3.973 -0.2323 -0.7752 -0.05837 0.5953 +-3.996 -0.2337 -0.7438 -0.05837 0.6347 +-4.01 -0.2345 -0.7107 -0.05837 0.6725 +-4.013 -0.2347 -0.676 -0.05837 0.7087 +-4.007 -0.2343 -0.6399 -0.05837 0.743 +-3.99 -0.2333 -0.6024 -0.05837 0.7756 +-3.964 -0.2318 -0.5636 -0.05837 0.8061 +-3.928 -0.2297 -0.5236 -0.05837 0.8347 +-3.883 -0.2271 -0.4825 -0.05837 0.8612 +-3.83 -0.2239 -0.4404 -0.05837 0.8855 +-3.767 -0.2203 -0.3973 -0.05837 0.9076 +-3.698 -0.2162 -0.3535 -0.05837 0.9275 +-3.621 -0.2117 -0.3089 -0.05837 0.945 +-3.538 -0.2069 -0.2636 -0.05837 0.9602 +-3.45 -0.2018 -0.2178 -0.05837 0.9729 +-3.358 -0.1963 -0.1716 -0.05837 0.9833 +-3.261 -0.1907 -0.125 -0.05837 0.9911 +-3.163 -0.1849 -0.07822 -0.05837 0.9965 +-3.062 -0.179 -0.03123 -0.05837 0.9994 +-2.982 -0.3246 0 -0.1082 1 +-2.881 -0.3135 0.0445 -0.1082 0.9988 +-2.78 -0.3025 0.08892 -0.1082 0.995 +-2.681 -0.2918 0.1332 -0.1082 0.9888 +-2.585 -0.2813 0.1773 -0.1082 0.9801 +-2.493 -0.2713 0.2211 -0.1082 0.9689 +-2.406 -0.2619 0.2645 -0.1082 0.9553 +-2.324 -0.253 0.3075 -0.1082 0.9394 +-2.249 -0.2448 0.35 -0.1082 0.9211 +-2.181 -0.2374 0.3919 -0.1082 0.9004 +-2.121 -0.2309 0.4331 -0.1082 0.8776 +-2.07 -0.2252 0.4736 -0.1082 0.8525 +-2.027 -0.2206 0.5133 -0.1082 0.8253 +-1.993 -0.2169 0.5521 -0.1082 0.7961 +-1.969 -0.2143 0.5899 -0.1082 0.7648 +-1.955 -0.2128 0.6266 -0.1082 0.7317 +-1.952 -0.2124 0.6621 -0.1082 0.6967 +-1.958 -0.213 0.6965 -0.1082 0.66 +-1.973 -0.2148 0.7294 -0.1082 0.6216 +-1.999 -0.2176 0.761 -0.1082 0.5817 +-2.034 -0.2214 0.791 -0.1082 0.5403 +-2.079 -0.2262 0.8194 -0.1082 0.4976 +-2.132 -0.232 0.8461 -0.1082 0.4536 +-2.193 -0.2387 0.871 -0.1082 0.4085 +-2.262 -0.2461 0.8941 -0.1082 0.3624 +-2.337 -0.2544 0.9152 -0.1082 0.3153 +-2.419 -0.2632 0.9342 -0.1082 0.2675 +-2.506 -0.2727 0.9511 -0.1082 0.219 +-2.597 -0.2826 0.9659 -0.1082 0.17 +-2.691 -0.2929 0.9783 -0.1082 0.1205 +-2.789 -0.3035 0.9884 -0.1082 0.07074 +-2.887 -0.3142 0.9961 -0.1082 0.02079 +-2.986 -0.325 1.001 -0.1082 -0.0292 +-3.085 -0.3358 1.004 -0.1082 -0.07912 +-3.183 -0.3464 1.004 -0.1082 -0.1288 +-3.278 -0.3567 1.002 -0.1082 -0.1782 +-3.369 -0.3667 0.9964 -0.1082 -0.2272 +-3.457 -0.3762 0.9886 -0.1082 -0.2756 +-3.539 -0.3851 0.9781 -0.1082 -0.3233 +-3.615 -0.3934 0.9649 -0.1082 -0.3702 +-3.685 -0.401 0.949 -0.1082 -0.4161 +-3.747 -0.4078 0.9304 -0.1082 -0.4611 +-3.801 -0.4137 0.9092 -0.1082 -0.5048 +-3.847 -0.4187 0.8853 -0.1082 -0.5474 +-3.883 -0.4227 0.8589 -0.1082 -0.5885 +-3.911 -0.4256 0.8299 -0.1082 -0.6282 +-3.929 -0.4276 0.7984 -0.1082 -0.6663 +-3.937 -0.4284 0.7646 -0.1082 -0.7027 +-3.935 -0.4282 0.7284 -0.1082 -0.7374 +-3.923 -0.427 0.6901 -0.1082 -0.7702 +-3.902 -0.4247 0.6495 -0.1082 -0.8011 +-3.871 -0.4213 0.607 -0.1082 -0.8301 +-3.832 -0.417 0.5626 -0.1082 -0.8569 +-3.783 -0.4117 0.5164 -0.1082 -0.8816 +-3.726 -0.4056 0.4686 -0.1082 -0.9041 +-3.662 -0.3986 0.4193 -0.1082 -0.9243 +-3.591 -0.3908 0.3687 -0.1082 -0.9422 +-3.514 -0.3824 0.3169 -0.1082 -0.9578 +-3.431 -0.3734 0.2641 -0.1082 -0.971 +-3.343 -0.3639 0.2104 -0.1082 -0.9817 +-3.252 -0.3539 0.1561 -0.1082 -0.99 +-3.158 -0.3437 0.1012 -0.1082 -0.9958 +-3.063 -0.3333 0.04602 -0.1082 -0.9991 +-2.966 -0.3228 -0.009306 -0.1082 -1 +-2.87 -0.3123 -0.0646 -0.1082 -0.9983 +-2.775 -0.302 -0.1197 -0.1082 -0.9941 +-2.682 -0.2919 -0.1744 -0.1082 -0.9875 +-2.592 -0.2821 -0.2285 -0.1082 -0.9784 +-2.506 -0.2727 -0.2819 -0.1082 -0.9668 +-2.425 -0.2639 -0.3344 -0.1082 -0.9528 +-2.349 -0.2557 -0.3859 -0.1082 -0.9365 +-2.28 -0.2482 -0.4361 -0.1082 -0.9178 +-2.218 -0.2414 -0.4849 -0.1082 -0.8968 +-2.164 -0.2356 -0.5321 -0.1082 -0.8735 +-2.119 -0.2306 -0.5777 -0.1082 -0.8481 +-2.082 -0.2266 -0.6215 -0.1082 -0.8206 +-2.055 -0.2236 -0.6634 -0.1082 -0.791 +-2.037 -0.2216 -0.7032 -0.1082 -0.7594 +-2.028 -0.2207 -0.7409 -0.1082 -0.7259 +-2.03 -0.2209 -0.7762 -0.1082 -0.6907 +-2.041 -0.2221 -0.8093 -0.1082 -0.6536 +-2.062 -0.2244 -0.8399 -0.1082 -0.615 +-2.093 -0.2277 -0.868 -0.1082 -0.5748 +-2.132 -0.2321 -0.8936 -0.1082 -0.5332 +-2.181 -0.2374 -0.9166 -0.1082 -0.4903 +-2.238 -0.2436 -0.9369 -0.1082 -0.4461 +-2.303 -0.2506 -0.9546 -0.1082 -0.4008 +-2.375 -0.2584 -0.9696 -0.1082 -0.3545 +-2.453 -0.267 -0.9819 -0.1082 -0.3073 +-2.537 -0.2761 -0.9915 -0.1082 -0.2594 +-2.626 -0.2858 -0.9984 -0.1082 -0.2108 +-2.719 -0.2959 -1.003 -0.1082 -0.1617 +-2.815 -0.3063 -1.004 -0.1082 -0.1122 +-2.913 -0.317 -1.003 -0.1082 -0.06235 +-3.012 -0.3278 -0.9998 -0.1082 -0.01239 +-3.111 -0.3386 -0.9938 -0.1082 0.0376 +-3.209 -0.3493 -0.9853 -0.1082 0.0875 +-3.306 -0.3598 -0.9744 -0.1082 0.1372 +-3.399 -0.3699 -0.9612 -0.1082 0.1865 +-3.489 -0.3797 -0.9457 -0.1082 0.2354 +-3.574 -0.389 -0.928 -0.1082 0.2837 +-3.654 -0.3976 -0.9083 -0.1082 0.3312 +-3.727 -0.4056 -0.8865 -0.1082 0.378 +-3.793 -0.4128 -0.8628 -0.1082 0.4238 +-3.852 -0.4192 -0.8373 -0.1082 0.4685 +-3.902 -0.4247 -0.81 -0.1082 0.5121 +-3.943 -0.4292 -0.7811 -0.1082 0.5544 +-3.975 -0.4326 -0.7505 -0.1082 0.5953 +-3.998 -0.4351 -0.7185 -0.1082 0.6347 +-4.01 -0.4365 -0.6851 -0.1082 0.6725 +-4.013 -0.4368 -0.6503 -0.1082 0.7087 +-4.006 -0.436 -0.6144 -0.1082 0.743 +-3.988 -0.4341 -0.5773 -0.1082 0.7756 +-3.961 -0.4311 -0.5392 -0.1082 0.8061 +-3.925 -0.4271 -0.5001 -0.1082 0.8347 +-3.879 -0.4221 -0.4601 -0.1082 0.8612 +-3.824 -0.4162 -0.4193 -0.1082 0.8855 +-3.761 -0.4094 -0.3779 -0.1082 0.9076 +-3.691 -0.4017 -0.3358 -0.1082 0.9275 +-3.614 -0.3933 -0.2931 -0.1082 0.945 +-3.53 -0.3842 -0.2499 -0.1082 0.9602 +-3.441 -0.3745 -0.2064 -0.1082 0.9729 +-3.348 -0.3644 -0.1625 -0.1082 0.9833 +-3.251 -0.3538 -0.1183 -0.1082 0.9911 +-3.151 -0.343 -0.074 -0.1082 0.9965 +-3.05 -0.3319 -0.02954 -0.1082 0.9994 +-2.962 -0.4732 0 -0.1577 1 +-2.86 -0.4569 0.04192 -0.1577 0.9988 +-2.759 -0.4408 0.0838 -0.1577 0.995 +-2.66 -0.4249 0.1256 -0.1577 0.9888 +-2.564 -0.4095 0.1672 -0.1577 0.9801 +-2.471 -0.3948 0.2087 -0.1577 0.9689 +-2.384 -0.3808 0.2499 -0.1577 0.9553 +-2.301 -0.3677 0.2909 -0.1577 0.9394 +-2.226 -0.3556 0.3314 -0.1577 0.9211 +-2.157 -0.3446 0.3716 -0.1577 0.9004 +-2.097 -0.3349 0.4113 -0.1577 0.8776 +-2.044 -0.3266 0.4505 -0.1577 0.8525 +-2.001 -0.3196 0.4891 -0.1577 0.8253 +-1.967 -0.3142 0.5271 -0.1577 0.7961 +-1.942 -0.3102 0.5642 -0.1577 0.7648 +-1.927 -0.3079 0.6006 -0.1577 0.7317 +-1.922 -0.3071 0.636 -0.1577 0.6967 +-1.928 -0.3079 0.6705 -0.1577 0.66 +-1.943 -0.3103 0.7038 -0.1577 0.6216 +-1.967 -0.3143 0.736 -0.1577 0.5817 +-2.002 -0.3197 0.7669 -0.1577 0.5403 +-2.045 -0.3267 0.7964 -0.1577 0.4976 +-2.097 -0.335 0.8244 -0.1577 0.4536 +-2.157 -0.3446 0.8509 -0.1577 0.4085 +-2.225 -0.3554 0.8757 -0.1577 0.3624 +-2.299 -0.3673 0.8987 -0.1577 0.3153 +-2.38 -0.3801 0.9198 -0.1577 0.2675 +-2.465 -0.3939 0.9388 -0.1577 0.219 +-2.556 -0.4083 0.9559 -0.1577 0.17 +-2.649 -0.4232 0.9707 -0.1577 0.1205 +-2.746 -0.4386 0.9832 -0.1577 0.07074 +-2.843 -0.4542 0.9934 -0.1577 0.02079 +-2.942 -0.4699 1.001 -0.1577 -0.0292 +-3.04 -0.4856 1.006 -0.1577 -0.07912 +-3.137 -0.501 1.009 -0.1577 -0.1288 +-3.231 -0.5161 1.009 -0.1577 -0.1782 +-3.322 -0.5307 1.006 -0.1577 -0.2272 +-3.409 -0.5446 1 -0.1577 -0.2756 +-3.491 -0.5576 0.9917 -0.1577 -0.3233 +-3.567 -0.5698 0.9805 -0.1577 -0.3702 +-3.636 -0.5809 0.9663 -0.1577 -0.4161 +-3.699 -0.5908 0.9493 -0.1577 -0.4611 +-3.753 -0.5995 0.9295 -0.1577 -0.5048 +-3.799 -0.6069 0.9068 -0.1577 -0.5474 +-3.836 -0.6128 0.8813 -0.1577 -0.5885 +-3.864 -0.6172 0.853 -0.1577 -0.6282 +-3.882 -0.6202 0.822 -0.1577 -0.6663 +-3.891 -0.6216 0.7884 -0.1577 -0.7027 +-3.89 -0.6215 0.7522 -0.1577 -0.7374 +-3.88 -0.6198 0.7135 -0.1577 -0.7702 +-3.86 -0.6166 0.6725 -0.1577 -0.8011 +-3.83 -0.6119 0.6292 -0.1577 -0.8301 +-3.792 -0.6057 0.5838 -0.1577 -0.8569 +-3.745 -0.5982 0.5364 -0.1577 -0.8816 +-3.69 -0.5894 0.4872 -0.1577 -0.9041 +-3.627 -0.5794 0.4363 -0.1577 -0.9243 +-3.558 -0.5683 0.3839 -0.1577 -0.9422 +-3.482 -0.5562 0.3301 -0.1577 -0.9578 +-3.401 -0.5433 0.2753 -0.1577 -0.971 +-3.316 -0.5297 0.2194 -0.1577 -0.9817 +-3.226 -0.5154 0.1628 -0.1577 -0.99 +-3.135 -0.5007 0.1056 -0.1577 -0.9958 +-3.041 -0.4858 0.04802 -0.1577 -0.9991 +-2.947 -0.4707 -0.009711 -0.1577 -1 +-2.852 -0.4556 -0.06741 -0.1577 -0.9983 +-2.759 -0.4408 -0.1249 -0.1577 -0.9941 +-2.668 -0.4262 -0.1819 -0.1577 -0.9875 +-2.58 -0.4122 -0.2383 -0.1577 -0.9784 +-2.496 -0.3987 -0.2938 -0.1577 -0.9668 +-2.417 -0.3861 -0.3484 -0.1577 -0.9528 +-2.343 -0.3743 -0.4017 -0.1577 -0.9365 +-2.276 -0.3636 -0.4536 -0.1577 -0.9178 +-2.216 -0.354 -0.5039 -0.1577 -0.8968 +-2.163 -0.3456 -0.5525 -0.1577 -0.8735 +-2.119 -0.3385 -0.5993 -0.1577 -0.8481 +-2.084 -0.3329 -0.644 -0.1577 -0.8206 +-2.057 -0.3287 -0.6865 -0.1577 -0.791 +-2.041 -0.326 -0.7268 -0.1577 -0.7594 +-2.033 -0.3248 -0.7646 -0.1577 -0.7259 +-2.036 -0.3252 -0.8 -0.1577 -0.6907 +-2.048 -0.3271 -0.8327 -0.1577 -0.6536 +-2.069 -0.3306 -0.8628 -0.1577 -0.615 +-2.1 -0.3355 -0.8901 -0.1577 -0.5748 +-2.14 -0.3419 -0.9147 -0.1577 -0.5332 +-2.189 -0.3497 -0.9365 -0.1577 -0.4903 +-2.246 -0.3588 -0.9554 -0.1577 -0.4461 +-2.311 -0.3692 -0.9714 -0.1577 -0.4008 +-2.383 -0.3807 -0.9846 -0.1577 -0.3545 +-2.461 -0.3931 -0.9949 -0.1577 -0.3073 +-2.545 -0.4065 -1.002 -0.1577 -0.2594 +-2.633 -0.4206 -1.007 -0.1577 -0.2108 +-2.725 -0.4354 -1.009 -0.1577 -0.1617 +-2.821 -0.4506 -1.008 -0.1577 -0.1122 +-2.918 -0.4661 -1.005 -0.1577 -0.06235 +-3.016 -0.4818 -0.9987 -0.1577 -0.01239 +-3.114 -0.4975 -0.9902 -0.1577 0.0376 +-3.212 -0.5131 -0.9792 -0.1577 0.0875 +-3.307 -0.5283 -0.9659 -0.1577 0.1372 +-3.4 -0.5431 -0.9504 -0.1577 0.1865 +-3.489 -0.5573 -0.9327 -0.1577 0.2354 +-3.573 -0.5708 -0.9129 -0.1577 0.2837 +-3.651 -0.5833 -0.8911 -0.1577 0.3312 +-3.724 -0.5948 -0.8675 -0.1577 0.378 +-3.789 -0.6053 -0.8422 -0.1577 0.4238 +-3.846 -0.6144 -0.8152 -0.1577 0.4685 +-3.896 -0.6223 -0.7866 -0.1577 0.5121 +-3.936 -0.6287 -0.7566 -0.1577 0.5544 +-3.967 -0.6337 -0.7253 -0.1577 0.5953 +-3.988 -0.6371 -0.6927 -0.1577 0.6347 +-4 -0.639 -0.659 -0.1577 0.6725 +-4.002 -0.6393 -0.6242 -0.1577 0.7087 +-3.994 -0.638 -0.5885 -0.1577 0.743 +-3.976 -0.6351 -0.5518 -0.1577 0.7756 +-3.948 -0.6306 -0.5144 -0.1577 0.8061 +-3.91 -0.6247 -0.4762 -0.1577 0.8347 +-3.864 -0.6172 -0.4374 -0.1577 0.8612 +-3.809 -0.6084 -0.398 -0.1577 0.8855 +-3.745 -0.5983 -0.3582 -0.1577 0.9076 +-3.674 -0.587 -0.3178 -0.1577 0.9275 +-3.596 -0.5745 -0.2771 -0.1577 0.945 +-3.512 -0.5611 -0.2361 -0.1577 0.9602 +-3.423 -0.5468 -0.1948 -0.1577 0.9729 +-3.329 -0.5318 -0.1532 -0.1577 0.9833 +-3.232 -0.5163 -0.1115 -0.1577 0.9911 +-3.132 -0.5003 -0.06973 -0.1577 0.9965 +-3.03 -0.4841 -0.02783 -0.1577 0.9994 +-2.935 -0.6207 0 -0.2069 1 +-2.833 -0.5991 0.03932 -0.2069 0.9988 +-2.732 -0.5777 0.07863 -0.2069 0.995 +-2.632 -0.5567 0.1179 -0.2069 0.9888 +-2.536 -0.5363 0.1571 -0.2069 0.9801 +-2.443 -0.5167 0.1962 -0.2069 0.9689 +-2.356 -0.4982 0.2352 -0.2069 0.9553 +-2.273 -0.4808 0.274 -0.2069 0.9394 +-2.197 -0.4647 0.3127 -0.2069 0.9211 +-2.129 -0.4502 0.3511 -0.2069 0.9004 +-2.067 -0.4372 0.3893 -0.2069 0.8776 +-2.015 -0.4261 0.4272 -0.2069 0.8525 +-1.971 -0.4168 0.4646 -0.2069 0.8253 +-1.936 -0.4094 0.5017 -0.2069 0.7961 +-1.911 -0.4041 0.5382 -0.2069 0.7648 +-1.895 -0.4008 0.5742 -0.2069 0.7317 +-1.889 -0.3996 0.6095 -0.2069 0.6967 +-1.894 -0.4005 0.6441 -0.2069 0.66 +-1.908 -0.4034 0.6778 -0.2069 0.6216 +-1.932 -0.4085 0.7106 -0.2069 0.5817 +-1.965 -0.4155 0.7423 -0.2069 0.5403 +-2.007 -0.4244 0.7729 -0.2069 0.4976 +-2.058 -0.4352 0.8023 -0.2069 0.4536 +-2.117 -0.4476 0.8302 -0.2069 0.4085 +-2.183 -0.4617 0.8567 -0.2069 0.3624 +-2.256 -0.4771 0.8816 -0.2069 0.3153 +-2.335 -0.4939 0.9047 -0.2069 0.2675 +-2.42 -0.5118 0.926 -0.2069 0.219 +-2.509 -0.5306 0.9453 -0.2069 0.17 +-2.601 -0.5501 0.9624 -0.2069 0.1205 +-2.696 -0.5702 0.9774 -0.2069 0.07074 +-2.793 -0.5906 0.99 -0.2069 0.02079 +-2.89 -0.6112 1 -0.2069 -0.0292 +-2.987 -0.6317 1.008 -0.2069 -0.07912 +-3.083 -0.6519 1.013 -0.2069 -0.1288 +-3.176 -0.6717 1.015 -0.2069 -0.1782 +-3.267 -0.6908 1.015 -0.2069 -0.2272 +-3.353 -0.709 1.011 -0.2069 -0.2756 +-3.434 -0.7262 1.005 -0.2069 -0.3233 +-3.51 -0.7422 0.9955 -0.2069 -0.3702 +-3.579 -0.7569 0.9831 -0.2069 -0.4161 +-3.641 -0.77 0.9677 -0.2069 -0.4611 +-3.695 -0.7815 0.9492 -0.2069 -0.5048 +-3.741 -0.7912 0.9277 -0.2069 -0.5474 +-3.779 -0.7991 0.9031 -0.2069 -0.5885 +-3.807 -0.8051 0.8755 -0.2069 -0.6282 +-3.826 -0.8091 0.845 -0.2069 -0.6663 +-3.836 -0.8112 0.8116 -0.2069 -0.7027 +-3.836 -0.8112 0.7754 -0.2069 -0.7374 +-3.826 -0.8091 0.7365 -0.2069 -0.7702 +-3.807 -0.8052 0.695 -0.2069 -0.8011 +-3.779 -0.7992 0.651 -0.2069 -0.8301 +-3.742 -0.7914 0.6046 -0.2069 -0.8569 +-3.697 -0.7818 0.556 -0.2069 -0.8816 +-3.644 -0.7705 0.5054 -0.2069 -0.9041 +-3.583 -0.7577 0.453 -0.2069 -0.9243 +-3.515 -0.7434 0.3988 -0.2069 -0.9422 +-3.442 -0.7278 0.3432 -0.2069 -0.9578 +-3.363 -0.7112 0.2863 -0.2069 -0.971 +-3.28 -0.6935 0.2283 -0.2069 -0.9817 +-3.193 -0.6752 0.1694 -0.2069 -0.99 +-3.103 -0.6562 0.1099 -0.2069 -0.9958 +-3.012 -0.6369 0.05 -0.2069 -0.9991 +-2.92 -0.6174 -0.01011 -0.2069 -1 +-2.828 -0.598 -0.07018 -0.2069 -0.9983 +-2.737 -0.5788 -0.13 -0.2069 -0.9941 +-2.648 -0.56 -0.1893 -0.2069 -0.9875 +-2.562 -0.5418 -0.2479 -0.2069 -0.9784 +-2.48 -0.5245 -0.3056 -0.2069 -0.9668 +-2.403 -0.5082 -0.3621 -0.2069 -0.9528 +-2.331 -0.4931 -0.4172 -0.2069 -0.9365 +-2.266 -0.4792 -0.4708 -0.2069 -0.9178 +-2.208 -0.4669 -0.5227 -0.2069 -0.8968 +-2.157 -0.4562 -0.5726 -0.2069 -0.8735 +-2.115 -0.4472 -0.6204 -0.2069 -0.8481 +-2.081 -0.44 -0.666 -0.2069 -0.8206 +-2.056 -0.4347 -0.7092 -0.2069 -0.791 +-2.04 -0.4314 -0.7499 -0.2069 -0.7594 +-2.033 -0.43 -0.7879 -0.2069 -0.7259 +-2.037 -0.4307 -0.8232 -0.2069 -0.6907 +-2.049 -0.4334 -0.8556 -0.2069 -0.6536 +-2.072 -0.4381 -0.8851 -0.2069 -0.615 +-2.103 -0.4447 -0.9117 -0.2069 -0.5748 +-2.143 -0.4533 -0.9352 -0.2069 -0.5332 +-2.192 -0.4636 -0.9557 -0.2069 -0.4903 +-2.249 -0.4757 -0.9732 -0.2069 -0.4461 +-2.314 -0.4893 -0.9876 -0.2069 -0.4008 +-2.385 -0.5044 -0.9989 -0.2069 -0.3545 +-2.463 -0.5208 -1.007 -0.2069 -0.3073 +-2.546 -0.5384 -1.013 -0.2069 -0.2594 +-2.634 -0.5569 -1.015 -0.2069 -0.2108 +-2.725 -0.5763 -1.015 -0.2069 -0.1617 +-2.819 -0.5962 -1.011 -0.2069 -0.1122 +-2.916 -0.6166 -1.006 -0.2069 -0.06235 +-3.013 -0.6371 -0.9971 -0.2069 -0.01239 +-3.11 -0.6577 -0.9861 -0.2069 0.0376 +-3.206 -0.678 -0.9726 -0.2069 0.0875 +-3.3 -0.6979 -0.9569 -0.2069 0.1372 +-3.392 -0.7173 -0.939 -0.2069 0.1865 +-3.479 -0.7358 -0.919 -0.2069 0.2354 +-3.562 -0.7533 -0.8971 -0.2069 0.2837 +-3.639 -0.7696 -0.8734 -0.2069 0.3312 +-3.71 -0.7847 -0.848 -0.2069 0.378 +-3.774 -0.7982 -0.821 -0.2069 0.4238 +-3.831 -0.8101 -0.7926 -0.2069 0.4685 +-3.878 -0.8202 -0.7628 -0.2069 0.5121 +-3.918 -0.8285 -0.7318 -0.2069 0.5544 +-3.948 -0.8349 -0.6997 -0.2069 0.5953 +-3.968 -0.8392 -0.6665 -0.2069 0.6347 +-3.979 -0.8415 -0.6325 -0.2069 0.6725 +-3.98 -0.8417 -0.5977 -0.2069 0.7087 +-3.971 -0.8398 -0.5622 -0.2069 0.743 +-3.952 -0.8358 -0.526 -0.2069 0.7756 +-3.924 -0.8298 -0.4893 -0.2069 0.8061 +-3.886 -0.8217 -0.4521 -0.2069 0.8347 +-3.839 -0.8118 -0.4145 -0.2069 0.8612 +-3.783 -0.8 -0.3765 -0.2069 0.8855 +-3.719 -0.7865 -0.3382 -0.2069 0.9076 +-3.648 -0.7715 -0.2997 -0.2069 0.9275 +-3.57 -0.7549 -0.261 -0.2069 0.945 +-3.486 -0.7371 -0.2221 -0.2069 0.9602 +-3.396 -0.7182 -0.1831 -0.2069 0.9729 +-3.302 -0.6983 -0.1439 -0.2069 0.9833 +-3.205 -0.6777 -0.1047 -0.2069 0.9911 +-3.105 -0.6566 -0.06541 -0.2069 0.9965 +-3.003 -0.6351 -0.0261 -0.2069 0.9994 +-2.9 -0.7666 0 -0.2555 1 +-2.798 -0.7397 0.0367 -0.2555 0.9988 +-2.697 -0.713 0.0734 -0.2555 0.995 +-2.598 -0.6868 0.1101 -0.2555 0.9888 +-2.502 -0.6614 0.1468 -0.2555 0.9801 +-2.41 -0.637 0.1836 -0.2555 0.9689 +-2.322 -0.6138 0.2203 -0.2555 0.9553 +-2.24 -0.5921 0.257 -0.2555 0.9394 +-2.164 -0.572 0.2937 -0.2555 0.9211 +-2.095 -0.5538 0.3304 -0.2555 0.9004 +-2.034 -0.5376 0.367 -0.2555 0.8776 +-1.981 -0.5236 0.4035 -0.2555 0.8525 +-1.936 -0.5118 0.4398 -0.2555 0.8253 +-1.901 -0.5025 0.476 -0.2555 0.7961 +-1.875 -0.4957 0.5119 -0.2555 0.7648 +-1.859 -0.4914 0.5474 -0.2555 0.7317 +-1.853 -0.4897 0.5826 -0.2555 0.6967 +-1.856 -0.4906 0.6172 -0.2555 0.66 +-1.869 -0.494 0.6513 -0.2555 0.6216 +-1.892 -0.5 0.6847 -0.2555 0.5817 +-1.924 -0.5085 0.7173 -0.2555 0.5403 +-1.965 -0.5193 0.749 -0.2555 0.4976 +-2.014 -0.5324 0.7796 -0.2555 0.4536 +-2.072 -0.5476 0.8091 -0.2555 0.4085 +-2.137 -0.5648 0.8372 -0.2555 0.3624 +-2.208 -0.5837 0.864 -0.2555 0.3153 +-2.286 -0.6043 0.8891 -0.2555 0.2675 +-2.369 -0.6262 0.9125 -0.2555 0.219 +-2.456 -0.6493 0.9341 -0.2555 0.17 +-2.547 -0.6733 0.9536 -0.2555 0.1205 +-2.641 -0.698 0.971 -0.2555 0.07074 +-2.736 -0.7232 0.9861 -0.2555 0.02079 +-2.832 -0.7485 0.9988 -0.2555 -0.0292 +-2.927 -0.7738 1.009 -0.2555 -0.07912 +-3.022 -0.7987 1.016 -0.2555 -0.1288 +-3.114 -0.8231 1.021 -0.2555 -0.1782 +-3.203 -0.8467 1.023 -0.2555 -0.2272 +-3.289 -0.8692 1.022 -0.2555 -0.2756 +-3.369 -0.8905 1.017 -0.2555 -0.3233 +-3.444 -0.9103 1.01 -0.2555 -0.3702 +-3.513 -0.9285 0.9992 -0.2555 -0.4161 +-3.574 -0.9448 0.9854 -0.2555 -0.4611 +-3.628 -0.9591 0.9683 -0.2555 -0.5048 +-3.675 -0.9712 0.948 -0.2555 -0.5474 +-3.712 -0.9812 0.9244 -0.2555 -0.5885 +-3.741 -0.9887 0.8975 -0.2555 -0.6282 +-3.76 -0.9939 0.8675 -0.2555 -0.6663 +-3.77 -0.9966 0.8344 -0.2555 -0.7027 +-3.771 -0.9968 0.7982 -0.2555 -0.7374 +-3.763 -0.9946 0.759 -0.2555 -0.7702 +-3.745 -0.9899 0.717 -0.2555 -0.8011 +-3.719 -0.9829 0.6723 -0.2555 -0.8301 +-3.683 -0.9735 0.625 -0.2555 -0.8569 +-3.64 -0.962 0.5753 -0.2555 -0.8816 +-3.588 -0.9484 0.5234 -0.2555 -0.9041 +-3.529 -0.9328 0.4694 -0.2555 -0.9243 +-3.464 -0.9156 0.4135 -0.2555 -0.9422 +-3.393 -0.8967 0.356 -0.2555 -0.9578 +-3.316 -0.8765 0.2971 -0.2555 -0.971 +-3.235 -0.8551 0.237 -0.2555 -0.9817 +-3.151 -0.8328 0.1759 -0.2555 -0.99 +-3.064 -0.8098 0.1142 -0.2555 -0.9958 +-2.975 -0.7863 0.05194 -0.2555 -0.9991 +-2.885 -0.7626 -0.0105 -0.2555 -1 +-2.796 -0.739 -0.0729 -0.2555 -0.9983 +-2.708 -0.7157 -0.135 -0.2555 -0.9941 +-2.621 -0.6929 -0.1966 -0.2555 -0.9875 +-2.538 -0.6708 -0.2573 -0.2555 -0.9784 +-2.459 -0.6498 -0.3171 -0.2555 -0.9668 +-2.384 -0.63 -0.3755 -0.2555 -0.9528 +-2.314 -0.6117 -0.4325 -0.2555 -0.9365 +-2.251 -0.595 -0.4878 -0.2555 -0.9178 +-2.195 -0.5801 -0.5411 -0.2555 -0.8968 +-2.146 -0.5671 -0.5923 -0.2555 -0.8735 +-2.105 -0.5563 -0.6412 -0.2555 -0.8481 +-2.072 -0.5477 -0.6877 -0.2555 -0.8206 +-2.049 -0.5415 -0.7315 -0.2555 -0.791 +-2.034 -0.5376 -0.7725 -0.2555 -0.7594 +-2.029 -0.5362 -0.8107 -0.2555 -0.7259 +-2.033 -0.5373 -0.8459 -0.2555 -0.6907 +-2.046 -0.5408 -0.878 -0.2555 -0.6536 +-2.069 -0.5468 -0.9069 -0.2555 -0.615 +-2.1 -0.5552 -0.9327 -0.2555 -0.5748 +-2.141 -0.5659 -0.9552 -0.2555 -0.5332 +-2.19 -0.5788 -0.9744 -0.2555 -0.4903 +-2.246 -0.5937 -0.9904 -0.2555 -0.4461 +-2.31 -0.6107 -1.003 -0.2555 -0.4008 +-2.381 -0.6294 -1.013 -0.2555 -0.3545 +-2.458 -0.6497 -1.019 -0.2555 -0.3073 +-2.54 -0.6715 -1.022 -0.2555 -0.2594 +-2.627 -0.6944 -1.022 -0.2555 -0.2108 +-2.717 -0.7183 -1.02 -0.2555 -0.1617 +-2.81 -0.7429 -1.014 -0.2555 -0.1122 +-2.905 -0.7679 -1.006 -0.2555 -0.06235 +-3.001 -0.7933 -0.9948 -0.2555 -0.01239 +-3.097 -0.8186 -0.9813 -0.2555 0.0376 +-3.192 -0.8436 -0.9654 -0.2555 0.0875 +-3.284 -0.8681 -0.9473 -0.2555 0.1372 +-3.374 -0.8918 -0.927 -0.2555 0.1865 +-3.46 -0.9146 -0.9049 -0.2555 0.2354 +-3.541 -0.9361 -0.8808 -0.2555 0.2837 +-3.617 -0.9561 -0.8551 -0.2555 0.3312 +-3.687 -0.9745 -0.8279 -0.2555 0.378 +-3.749 -0.991 -0.7993 -0.2555 0.4238 +-3.804 -1.005 -0.7694 -0.2555 0.4685 +-3.851 -1.018 -0.7384 -0.2555 0.5121 +-3.889 -1.028 -0.7064 -0.2555 0.5544 +-3.918 -1.036 -0.6736 -0.2555 0.5953 +-3.937 -1.041 -0.6399 -0.2555 0.6347 +-3.947 -1.043 -0.6057 -0.2555 0.6725 +-3.947 -1.043 -0.5708 -0.2555 0.7087 +-3.937 -1.041 -0.5355 -0.2555 0.743 +-3.918 -1.036 -0.4998 -0.2555 0.7756 +-3.889 -1.028 -0.4639 -0.2555 0.8061 +-3.85 -1.018 -0.4276 -0.2555 0.8347 +-3.803 -1.005 -0.3912 -0.2555 0.8612 +-3.747 -0.9904 -0.3547 -0.2555 0.8855 +-3.683 -0.9735 -0.3181 -0.2555 0.9076 +-3.612 -0.9547 -0.2814 -0.2555 0.9275 +-3.534 -0.934 -0.2447 -0.2555 0.945 +-3.45 -0.9118 -0.208 -0.2555 0.9602 +-3.36 -0.8882 -0.1712 -0.2555 0.9729 +-3.267 -0.8634 -0.1345 -0.2555 0.9833 +-3.169 -0.8377 -0.09777 -0.2555 0.9911 +-3.07 -0.8113 -0.06106 -0.2555 0.9965 +-2.968 -0.7845 -0.02436 -0.2555 0.9994 +-2.858 -0.9106 0 -0.3035 1 +-2.757 -0.8784 0.03405 -0.3035 0.9988 +-2.657 -0.8464 0.06813 -0.3035 0.995 +-2.558 -0.815 0.1023 -0.3035 0.9888 +-2.463 -0.7846 0.1365 -0.3035 0.9801 +-2.371 -0.7553 0.1708 -0.3035 0.9689 +-2.284 -0.7275 0.2053 -0.3035 0.9553 +-2.202 -0.7014 0.2399 -0.3035 0.9394 +-2.126 -0.6773 0.2746 -0.3035 0.9211 +-2.057 -0.6554 0.3095 -0.3035 0.9004 +-1.996 -0.6359 0.3445 -0.3035 0.8776 +-1.943 -0.6189 0.3796 -0.3035 0.8525 +-1.898 -0.6047 0.4148 -0.3035 0.8253 +-1.863 -0.5934 0.45 -0.3035 0.7961 +-1.836 -0.585 0.4852 -0.3035 0.7648 +-1.82 -0.5797 0.5203 -0.3035 0.7317 +-1.812 -0.5774 0.5553 -0.3035 0.6967 +-1.815 -0.5782 0.5901 -0.3035 0.66 +-1.827 -0.582 0.6245 -0.3035 0.6216 +-1.848 -0.5889 0.6584 -0.3035 0.5817 +-1.879 -0.5987 0.6918 -0.3035 0.5403 +-1.919 -0.6113 0.7245 -0.3035 0.4976 +-1.967 -0.6266 0.7565 -0.3035 0.4536 +-2.023 -0.6444 0.7874 -0.3035 0.4085 +-2.086 -0.6646 0.8172 -0.3035 0.3624 +-2.156 -0.6869 0.8458 -0.3035 0.3153 +-2.232 -0.7111 0.8729 -0.3035 0.2675 +-2.313 -0.7369 0.8985 -0.3035 0.219 +-2.399 -0.7642 0.9223 -0.3035 0.17 +-2.488 -0.7926 0.9442 -0.3035 0.1205 +-2.58 -0.8218 0.964 -0.3035 0.07074 +-2.673 -0.8515 0.9815 -0.3035 0.02079 +-2.767 -0.8815 0.9967 -0.3035 -0.0292 +-2.861 -0.9115 1.009 -0.3035 -0.07912 +-2.954 -0.941 1.019 -0.3035 -0.1288 +-3.045 -0.97 1.026 -0.3035 -0.1782 +-3.133 -0.998 1.03 -0.3035 -0.2272 +-3.217 -1.025 1.031 -0.3035 -0.2756 +-3.296 -1.05 1.029 -0.3035 -0.3233 +-3.37 -1.074 1.024 -0.3035 -0.3702 +-3.438 -1.095 1.015 -0.3035 -0.4161 +-3.499 -1.115 1.003 -0.3035 -0.4611 +-3.553 -1.132 0.9868 -0.3035 -0.5048 +-3.599 -1.146 0.9677 -0.3035 -0.5474 +-3.636 -1.158 0.9451 -0.3035 -0.5885 +-3.665 -1.168 0.919 -0.3035 -0.6282 +-3.685 -1.174 0.8895 -0.3035 -0.6663 +-3.696 -1.177 0.8566 -0.3035 -0.7027 +-3.698 -1.178 0.8205 -0.3035 -0.7374 +-3.69 -1.176 0.7811 -0.3035 -0.7702 +-3.674 -1.17 0.7387 -0.3035 -0.8011 +-3.649 -1.162 0.6933 -0.3035 -0.8301 +-3.615 -1.152 0.6451 -0.3035 -0.8569 +-3.573 -1.138 0.5943 -0.3035 -0.8816 +-3.523 -1.122 0.541 -0.3035 -0.9041 +-3.467 -1.104 0.4855 -0.3035 -0.9243 +-3.404 -1.084 0.428 -0.3035 -0.9422 +-3.335 -1.062 0.3686 -0.3035 -0.9578 +-3.261 -1.039 0.3078 -0.3035 -0.971 +-3.183 -1.014 0.2456 -0.3035 -0.9817 +-3.101 -0.9879 0.1824 -0.3035 -0.99 +-3.017 -0.961 0.1184 -0.3035 -0.9958 +-2.931 -0.9336 0.05385 -0.3035 -0.9991 +-2.844 -0.906 -0.01089 -0.3035 -1 +-2.757 -0.8784 -0.07558 -0.3035 -0.9983 +-2.672 -0.8511 -0.14 -0.3035 -0.9941 +-2.588 -0.8245 -0.2037 -0.3035 -0.9875 +-2.508 -0.7988 -0.2666 -0.3035 -0.9784 +-2.431 -0.7743 -0.3284 -0.3035 -0.9668 +-2.358 -0.7513 -0.3888 -0.3035 -0.9528 +-2.291 -0.7299 -0.4475 -0.3035 -0.9365 +-2.23 -0.7105 -0.5044 -0.3035 -0.9178 +-2.176 -0.6932 -0.5592 -0.3035 -0.8968 +-2.129 -0.6782 -0.6116 -0.3035 -0.8735 +-2.09 -0.6658 -0.6616 -0.3035 -0.8481 +-2.059 -0.6559 -0.7088 -0.3035 -0.8206 +-2.037 -0.6488 -0.7533 -0.3035 -0.791 +-2.023 -0.6446 -0.7947 -0.3035 -0.7594 +-2.019 -0.6432 -0.833 -0.3035 -0.7259 +-2.024 -0.6447 -0.868 -0.3035 -0.6907 +-2.038 -0.6492 -0.8998 -0.3035 -0.6536 +-2.061 -0.6565 -0.9281 -0.3035 -0.615 +-2.092 -0.6666 -0.9531 -0.3035 -0.5748 +-2.133 -0.6795 -0.9745 -0.3035 -0.5332 +-2.181 -0.6949 -0.9925 -0.3035 -0.4903 +-2.238 -0.7129 -1.007 -0.3035 -0.4461 +-2.301 -0.7331 -1.018 -0.3035 -0.4008 +-2.371 -0.7554 -1.026 -0.3035 -0.3545 +-2.447 -0.7796 -1.03 -0.3035 -0.3073 +-2.528 -0.8054 -1.031 -0.3035 -0.2594 +-2.613 -0.8326 -1.029 -0.3035 -0.2108 +-2.702 -0.8609 -1.024 -0.3035 -0.1617 +-2.794 -0.8901 -1.016 -0.3035 -0.1122 +-2.887 -0.9198 -1.005 -0.3035 -0.06235 +-2.981 -0.9498 -0.9919 -0.3035 -0.01239 +-3.075 -0.9798 -0.9759 -0.3035 0.0376 +-3.168 -1.009 -0.9576 -0.3035 0.0875 +-3.259 -1.038 -0.9371 -0.3035 0.1372 +-3.347 -1.066 -0.9145 -0.3035 0.1865 +-3.431 -1.093 -0.8901 -0.3035 0.2354 +-3.511 -1.119 -0.864 -0.3035 0.2837 +-3.585 -1.142 -0.8363 -0.3035 0.3312 +-3.653 -1.164 -0.8073 -0.3035 0.378 +-3.714 -1.183 -0.7771 -0.3035 0.4238 +-3.767 -1.2 -0.7458 -0.3035 0.4685 +-3.812 -1.215 -0.7136 -0.3035 0.5121 +-3.849 -1.226 -0.6807 -0.3035 0.5544 +-3.877 -1.235 -0.6471 -0.3035 0.5953 +-3.895 -1.241 -0.6129 -0.3035 0.6347 +-3.904 -1.244 -0.5784 -0.3035 0.6725 +-3.903 -1.243 -0.5436 -0.3035 0.7087 +-3.893 -1.24 -0.5085 -0.3035 0.743 +-3.873 -1.234 -0.4734 -0.3035 0.7756 +-3.843 -1.224 -0.4382 -0.3035 0.8061 +-3.805 -1.212 -0.4029 -0.3035 0.8347 +-3.757 -1.197 -0.3678 -0.3035 0.8612 +-3.701 -1.179 -0.3327 -0.3035 0.8855 +-3.637 -1.159 -0.2977 -0.3035 0.9076 +-3.566 -1.136 -0.2629 -0.3035 0.9275 +-3.488 -1.111 -0.2282 -0.3035 0.945 +-3.405 -1.085 -0.1937 -0.3035 0.9602 +-3.316 -1.056 -0.1593 -0.3035 0.9729 +-3.222 -1.027 -0.125 -0.3035 0.9833 +-3.126 -0.9958 -0.09079 -0.3035 0.9911 +-3.027 -0.9642 -0.05667 -0.3035 0.9965 +-2.926 -0.9321 -0.0226 -0.3035 0.9994 +-2.809 -1.052 0 -0.3508 1 +-2.709 -1.015 0.03138 -0.3508 0.9988 +-2.61 -0.9775 0.06282 -0.3508 0.995 +-2.512 -0.941 0.09437 -0.3508 0.9888 +-2.417 -0.9055 0.1261 -0.3508 0.9801 +-2.326 -0.8714 0.158 -0.3508 0.9689 +-2.24 -0.839 0.1901 -0.3508 0.9553 +-2.159 -0.8085 0.2226 -0.3508 0.9394 +-2.083 -0.7804 0.2553 -0.3508 0.9211 +-2.015 -0.7548 0.2884 -0.3508 0.9004 +-1.954 -0.7319 0.3218 -0.3508 0.8776 +-1.901 -0.7121 0.3555 -0.3508 0.8525 +-1.856 -0.6953 0.3895 -0.3508 0.8253 +-1.82 -0.6819 0.4237 -0.3508 0.7961 +-1.794 -0.6719 0.4582 -0.3508 0.7648 +-1.776 -0.6654 0.4929 -0.3508 0.7317 +-1.769 -0.6625 0.5277 -0.3508 0.6967 +-1.77 -0.6631 0.5625 -0.3508 0.66 +-1.781 -0.6672 0.5972 -0.3508 0.6216 +-1.802 -0.6749 0.6317 -0.3508 0.5817 +-1.831 -0.6859 0.6659 -0.3508 0.5403 +-1.869 -0.7002 0.6997 -0.3508 0.4976 +-1.916 -0.7176 0.7328 -0.3508 0.4536 +-1.97 -0.7379 0.7652 -0.3508 0.4085 +-2.031 -0.7609 0.7967 -0.3508 0.3624 +-2.099 -0.7864 0.8271 -0.3508 0.3153 +-2.174 -0.8142 0.8562 -0.3508 0.2675 +-2.253 -0.8438 0.8839 -0.3508 0.219 +-2.336 -0.8751 0.91 -0.3508 0.17 +-2.423 -0.9077 0.9342 -0.3508 0.1205 +-2.513 -0.9413 0.9564 -0.3508 0.07074 +-2.604 -0.9755 0.9764 -0.3508 0.02079 +-2.696 -1.01 0.994 -0.3508 -0.0292 +-2.788 -1.044 1.009 -0.3508 -0.07912 +-2.879 -1.079 1.021 -0.3508 -0.1288 +-2.968 -1.112 1.031 -0.3508 -0.1782 +-3.055 -1.144 1.037 -0.3508 -0.2272 +-3.137 -1.175 1.04 -0.3508 -0.2756 +-3.215 -1.204 1.04 -0.3508 -0.3233 +-3.288 -1.232 1.037 -0.3508 -0.3702 +-3.355 -1.257 1.03 -0.3508 -0.4161 +-3.415 -1.279 1.019 -0.3508 -0.4611 +-3.468 -1.299 1.005 -0.3508 -0.5048 +-3.514 -1.316 0.9868 -0.3508 -0.5474 +-3.551 -1.33 0.9652 -0.3508 -0.5885 +-3.58 -1.341 0.9399 -0.3508 -0.6282 +-3.601 -1.349 0.9109 -0.3508 -0.6663 +-3.612 -1.353 0.8783 -0.3508 -0.7027 +-3.615 -1.354 0.8422 -0.3508 -0.7374 +-3.608 -1.352 0.8027 -0.3508 -0.7702 +-3.593 -1.346 0.7598 -0.3508 -0.8011 +-3.569 -1.337 0.7138 -0.3508 -0.8301 +-3.537 -1.325 0.6647 -0.3508 -0.8569 +-3.497 -1.31 0.6128 -0.3508 -0.8816 +-3.45 -1.292 0.5583 -0.3508 -0.9041 +-3.396 -1.272 0.5013 -0.3508 -0.9243 +-3.335 -1.249 0.4421 -0.3508 -0.9422 +-3.269 -1.224 0.381 -0.3508 -0.9578 +-3.198 -1.198 0.3182 -0.3508 -0.971 +-3.122 -1.169 0.254 -0.3508 -0.9817 +-3.043 -1.14 0.1887 -0.3508 -0.99 +-2.962 -1.11 0.1225 -0.3508 -0.9958 +-2.879 -1.078 0.05573 -0.3508 -0.9991 +-2.795 -1.047 -0.01127 -0.3508 -1 +-2.712 -1.016 -0.07821 -0.3508 -0.9983 +-2.629 -0.9849 -0.1448 -0.3508 -0.9941 +-2.549 -0.9547 -0.2108 -0.3508 -0.9875 +-2.471 -0.9255 -0.2758 -0.3508 -0.9784 +-2.397 -0.8978 -0.3395 -0.3508 -0.9668 +-2.327 -0.8717 -0.4018 -0.3508 -0.9528 +-2.263 -0.8475 -0.4623 -0.3508 -0.9365 +-2.204 -0.8256 -0.5207 -0.3508 -0.9178 +-2.152 -0.8061 -0.5769 -0.3508 -0.8968 +-2.107 -0.7892 -0.6306 -0.3508 -0.8735 +-2.07 -0.7753 -0.6815 -0.3508 -0.8481 +-2.04 -0.7643 -0.7296 -0.3508 -0.8206 +-2.02 -0.7565 -0.7746 -0.3508 -0.791 +-2.007 -0.7519 -0.8163 -0.3508 -0.7594 +-2.004 -0.7507 -0.8547 -0.3508 -0.7259 +-2.01 -0.7528 -0.8897 -0.3508 -0.6907 +-2.024 -0.7582 -0.921 -0.3508 -0.6536 +-2.047 -0.7669 -0.9488 -0.3508 -0.615 +-2.079 -0.7788 -0.9729 -0.3508 -0.5748 +-2.119 -0.7938 -0.9932 -0.3508 -0.5332 +-2.167 -0.8119 -1.01 -0.3508 -0.4903 +-2.223 -0.8327 -1.023 -0.3508 -0.4461 +-2.286 -0.8561 -1.032 -0.3508 -0.4008 +-2.355 -0.882 -1.038 -0.3508 -0.3545 +-2.429 -0.91 -1.041 -0.3508 -0.3073 +-2.509 -0.9398 -1.04 -0.3508 -0.2594 +-2.593 -0.9712 -1.035 -0.3508 -0.2108 +-2.68 -1.004 -1.028 -0.3508 -0.1617 +-2.77 -1.038 -1.018 -0.3508 -0.1122 +-2.861 -1.072 -1.004 -0.3508 -0.06235 +-2.953 -1.106 -0.9883 -0.3508 -0.01239 +-3.045 -1.141 -0.9699 -0.3508 0.0376 +-3.136 -1.175 -0.9491 -0.3508 0.0875 +-3.225 -1.208 -0.9262 -0.3508 0.1372 +-3.311 -1.24 -0.9014 -0.3508 0.1865 +-3.393 -1.271 -0.8748 -0.3508 0.2354 +-3.471 -1.3 -0.8466 -0.3508 0.2837 +-3.543 -1.327 -0.817 -0.3508 0.3312 +-3.609 -1.352 -0.7862 -0.3508 0.378 +-3.668 -1.374 -0.7544 -0.3508 0.4238 +-3.72 -1.393 -0.7218 -0.3508 0.4685 +-3.763 -1.41 -0.6884 -0.3508 0.5121 +-3.799 -1.423 -0.6545 -0.3508 0.5544 +-3.825 -1.433 -0.6201 -0.3508 0.5953 +-3.842 -1.439 -0.5855 -0.3508 0.6347 +-3.85 -1.442 -0.5508 -0.3508 0.6725 +-3.849 -1.442 -0.516 -0.3508 0.7087 +-3.838 -1.437 -0.4812 -0.3508 0.743 +-3.817 -1.43 -0.4466 -0.3508 0.7756 +-3.787 -1.419 -0.4122 -0.3508 0.8061 +-3.748 -1.404 -0.378 -0.3508 0.8347 +-3.701 -1.386 -0.3441 -0.3508 0.8612 +-3.645 -1.365 -0.3105 -0.3508 0.8855 +-3.582 -1.342 -0.2772 -0.3508 0.9076 +-3.511 -1.315 -0.2443 -0.3508 0.9275 +-3.434 -1.286 -0.2116 -0.3508 0.945 +-3.35 -1.255 -0.1793 -0.3508 0.9602 +-3.262 -1.222 -0.1472 -0.3508 0.9729 +-3.17 -1.187 -0.1154 -0.3508 0.9833 +-3.074 -1.152 -0.08375 -0.3508 0.9911 +-2.976 -1.115 -0.05224 -0.3508 0.9965 +-2.876 -1.077 -0.02083 -0.3508 0.9994 +-2.753 -1.191 0 -0.3971 1 +-2.654 -1.149 0.0287 -0.3971 0.9988 +-2.556 -1.106 0.05747 -0.3971 0.995 +-2.46 -1.064 0.08641 -0.3971 0.9888 +-2.366 -1.024 0.1156 -0.3971 0.9801 +-2.276 -0.9851 0.145 -0.3971 0.9689 +-2.191 -0.9481 0.1749 -0.3971 0.9553 +-2.11 -0.9133 0.2051 -0.3971 0.9394 +-2.036 -0.8811 0.2359 -0.3971 0.9211 +-1.968 -0.8518 0.2671 -0.3971 0.9004 +-1.908 -0.8256 0.2988 -0.3971 0.8776 +-1.855 -0.8028 0.3311 -0.3971 0.8525 +-1.811 -0.7835 0.3639 -0.3971 0.8253 +-1.775 -0.768 0.3972 -0.3971 0.7961 +-1.748 -0.7563 0.431 -0.3971 0.7648 +-1.73 -0.7486 0.4652 -0.3971 0.7317 +-1.721 -0.7449 0.4998 -0.3971 0.6967 +-1.722 -0.7453 0.5346 -0.3971 0.66 +-1.732 -0.7496 0.5696 -0.3971 0.6216 +-1.751 -0.7579 0.6046 -0.3971 0.5817 +-1.779 -0.7701 0.6396 -0.3971 0.5403 +-1.816 -0.7859 0.6744 -0.3971 0.4976 +-1.861 -0.8052 0.7087 -0.3971 0.4536 +-1.913 -0.8279 0.7426 -0.3971 0.4085 +-1.973 -0.8537 0.7757 -0.3971 0.3624 +-2.039 -0.8823 0.8079 -0.3971 0.3153 +-2.111 -0.9134 0.839 -0.3971 0.2675 +-2.188 -0.9467 0.8688 -0.3971 0.219 +-2.269 -0.9818 0.897 -0.3971 0.17 +-2.354 -1.018 0.9236 -0.3971 0.1205 +-2.441 -1.056 0.9482 -0.3971 0.07074 +-2.53 -1.095 0.9706 -0.3971 0.02079 +-2.62 -1.134 0.9906 -0.3971 -0.0292 +-2.71 -1.173 1.008 -0.3971 -0.07912 +-2.798 -1.211 1.023 -0.3971 -0.1288 +-2.885 -1.249 1.035 -0.3971 -0.1782 +-2.97 -1.285 1.043 -0.3971 -0.2272 +-3.051 -1.32 1.049 -0.3971 -0.2756 +-3.127 -1.353 1.051 -0.3971 -0.3233 +-3.198 -1.384 1.049 -0.3971 -0.3702 +-3.264 -1.413 1.044 -0.3971 -0.4161 +-3.323 -1.438 1.035 -0.3971 -0.4611 +-3.376 -1.461 1.022 -0.3971 -0.5048 +-3.421 -1.48 1.005 -0.3971 -0.5474 +-3.458 -1.496 0.9847 -0.3971 -0.5885 +-3.487 -1.509 0.9601 -0.3971 -0.6282 +-3.507 -1.518 0.9317 -0.3971 -0.6663 +-3.519 -1.523 0.8995 -0.3971 -0.7027 +-3.523 -1.524 0.8634 -0.3971 -0.7374 +-3.517 -1.522 0.8237 -0.3971 -0.7702 +-3.504 -1.516 0.7805 -0.3971 -0.8011 +-3.481 -1.507 0.7338 -0.3971 -0.8301 +-3.451 -1.494 0.6839 -0.3971 -0.8569 +-3.413 -1.477 0.631 -0.3971 -0.8816 +-3.368 -1.458 0.5752 -0.3971 -0.9041 +-3.316 -1.435 0.5168 -0.3971 -0.9243 +-3.258 -1.41 0.456 -0.3971 -0.9422 +-3.195 -1.382 0.3932 -0.3971 -0.9578 +-3.126 -1.353 0.3285 -0.3971 -0.971 +-3.054 -1.322 0.2623 -0.3971 -0.9817 +-2.978 -1.289 0.1948 -0.3971 -0.99 +-2.9 -1.255 0.1265 -0.3971 -0.9958 +-2.82 -1.22 0.05757 -0.3971 -0.9991 +-2.74 -1.186 -0.01164 -0.3971 -1 +-2.659 -1.151 -0.0808 -0.3971 -0.9983 +-2.58 -1.116 -0.1496 -0.3971 -0.9941 +-2.503 -1.083 -0.2176 -0.3971 -0.9875 +-2.428 -1.051 -0.2847 -0.3971 -0.9784 +-2.357 -1.02 -0.3504 -0.3971 -0.9668 +-2.29 -0.9909 -0.4145 -0.3971 -0.9528 +-2.228 -0.9642 -0.4767 -0.3971 -0.9365 +-2.172 -0.9399 -0.5367 -0.3971 -0.9178 +-2.122 -0.9184 -0.5943 -0.3971 -0.8968 +-2.08 -0.8999 -0.6491 -0.3971 -0.8735 +-2.044 -0.8846 -0.7011 -0.3971 -0.8481 +-2.017 -0.8727 -0.7499 -0.3971 -0.8206 +-1.997 -0.8643 -0.7954 -0.3971 -0.791 +-1.986 -0.8595 -0.8375 -0.3971 -0.7594 +-1.984 -0.8585 -0.876 -0.3971 -0.7259 +-1.99 -0.8612 -0.9107 -0.3971 -0.6907 +-2.005 -0.8676 -0.9417 -0.3971 -0.6536 +-2.028 -0.8778 -0.9688 -0.3971 -0.615 +-2.06 -0.8915 -0.992 -0.3971 -0.5748 +-2.1 -0.9087 -1.011 -0.3971 -0.5332 +-2.147 -0.9293 -1.027 -0.3971 -0.4903 +-2.202 -0.953 -1.038 -0.3971 -0.4461 +-2.264 -0.9796 -1.046 -0.3971 -0.4008 +-2.331 -1.009 -1.05 -0.3971 -0.3545 +-2.405 -1.041 -1.05 -0.3971 -0.3073 +-2.483 -1.074 -1.047 -0.3971 -0.2594 +-2.565 -1.11 -1.041 -0.3971 -0.2108 +-2.65 -1.147 -1.031 -0.3971 -0.1617 +-2.738 -1.185 -1.018 -0.3971 -0.1122 +-2.827 -1.223 -1.003 -0.3971 -0.06235 +-2.917 -1.262 -0.9842 -0.3971 -0.01239 +-3.007 -1.301 -0.9633 -0.3971 0.0376 +-3.095 -1.339 -0.9401 -0.3971 0.0875 +-3.182 -1.377 -0.9149 -0.3971 0.1372 +-3.265 -1.413 -0.8877 -0.3971 0.1865 +-3.345 -1.448 -0.8589 -0.3971 0.2354 +-3.421 -1.48 -0.8287 -0.3971 0.2837 +-3.491 -1.511 -0.7972 -0.3971 0.3312 +-3.555 -1.538 -0.7647 -0.3971 0.378 +-3.612 -1.563 -0.7313 -0.3971 0.4238 +-3.662 -1.585 -0.6972 -0.3971 0.4685 +-3.704 -1.603 -0.6627 -0.3971 0.5121 +-3.737 -1.617 -0.6278 -0.3971 0.5544 +-3.763 -1.628 -0.5928 -0.3971 0.5953 +-3.779 -1.635 -0.5578 -0.3971 0.6347 +-3.786 -1.638 -0.5228 -0.3971 0.6725 +-3.783 -1.637 -0.4881 -0.3971 0.7087 +-3.772 -1.632 -0.4537 -0.3971 0.743 +-3.751 -1.623 -0.4196 -0.3971 0.7756 +-3.721 -1.61 -0.386 -0.3971 0.8061 +-3.682 -1.593 -0.3528 -0.3971 0.8347 +-3.635 -1.573 -0.3202 -0.3971 0.8612 +-3.579 -1.549 -0.2881 -0.3971 0.8855 +-3.516 -1.522 -0.2565 -0.3971 0.9076 +-3.446 -1.491 -0.2255 -0.3971 0.9275 +-3.37 -1.458 -0.1949 -0.3971 0.945 +-3.287 -1.423 -0.1648 -0.3971 0.9602 +-3.2 -1.385 -0.1351 -0.3971 0.9729 +-3.109 -1.345 -0.1057 -0.3971 0.9833 +-3.015 -1.305 -0.07665 -0.3971 0.9911 +-2.918 -1.263 -0.04778 -0.3971 0.9965 +-2.819 -1.22 -0.01904 -0.3971 0.9994 +-2.69 -1.328 0 -0.4425 1 +-2.593 -1.28 0.02599 -0.4425 0.9988 +-2.496 -1.232 0.05208 -0.4425 0.995 +-2.402 -1.185 0.07839 -0.4425 0.9888 +-2.31 -1.14 0.105 -0.4425 0.9801 +-2.221 -1.096 0.132 -0.4425 0.9689 +-2.137 -1.055 0.1595 -0.4425 0.9553 +-2.058 -1.015 0.1876 -0.4425 0.9394 +-1.984 -0.9793 0.2162 -0.4425 0.9211 +-1.918 -0.9463 0.2456 -0.4425 0.9004 +-1.858 -0.9167 0.2757 -0.4425 0.8776 +-1.805 -0.8909 0.3065 -0.4425 0.8525 +-1.761 -0.8691 0.3381 -0.4425 0.8253 +-1.725 -0.8515 0.3704 -0.4425 0.7961 +-1.698 -0.8381 0.4035 -0.4425 0.7648 +-1.68 -0.8292 0.4372 -0.4425 0.7317 +-1.671 -0.8247 0.4715 -0.4425 0.6967 +-1.671 -0.8247 0.5063 -0.4425 0.66 +-1.68 -0.8291 0.5416 -0.4425 0.6216 +-1.698 -0.838 0.5771 -0.4425 0.5817 +-1.725 -0.8511 0.6129 -0.4425 0.5403 +-1.76 -0.8684 0.6486 -0.4425 0.4976 +-1.803 -0.8895 0.6842 -0.4425 0.4536 +-1.853 -0.9144 0.7195 -0.4425 0.4085 +-1.91 -0.9428 0.7542 -0.4425 0.3624 +-1.974 -0.9742 0.7882 -0.4425 0.3153 +-2.044 -1.009 0.8212 -0.4425 0.2675 +-2.118 -1.045 0.8531 -0.4425 0.219 +-2.197 -1.084 0.8836 -0.4425 0.17 +-2.279 -1.125 0.9124 -0.4425 0.1205 +-2.364 -1.166 0.9393 -0.4425 0.07074 +-2.45 -1.209 0.9642 -0.4425 0.02079 +-2.538 -1.252 0.9867 -0.4425 -0.0292 +-2.625 -1.295 1.007 -0.4425 -0.07912 +-2.711 -1.338 1.024 -0.4425 -0.1288 +-2.796 -1.38 1.038 -0.4425 -0.1782 +-2.878 -1.42 1.049 -0.4425 -0.2272 +-2.957 -1.459 1.057 -0.4425 -0.2756 +-3.032 -1.496 1.061 -0.4425 -0.3233 +-3.102 -1.531 1.061 -0.4425 -0.3702 +-3.166 -1.562 1.057 -0.4425 -0.4161 +-3.224 -1.591 1.05 -0.4425 -0.4611 +-3.276 -1.616 1.039 -0.4425 -0.5048 +-3.32 -1.638 1.023 -0.4425 -0.5474 +-3.357 -1.656 1.004 -0.4425 -0.5885 +-3.385 -1.671 0.9798 -0.4425 -0.6282 +-3.406 -1.681 0.952 -0.4425 -0.6663 +-3.419 -1.687 0.9201 -0.4425 -0.7027 +-3.423 -1.689 0.8841 -0.4425 -0.7374 +-3.418 -1.687 0.8443 -0.4425 -0.7702 +-3.406 -1.681 0.8007 -0.4425 -0.8011 +-3.385 -1.67 0.7534 -0.4425 -0.8301 +-3.357 -1.656 0.7027 -0.4425 -0.8569 +-3.321 -1.639 0.6488 -0.4425 -0.8816 +-3.278 -1.618 0.5918 -0.4425 -0.9041 +-3.229 -1.593 0.532 -0.4425 -0.9243 +-3.173 -1.566 0.4697 -0.4425 -0.9422 +-3.113 -1.536 0.4051 -0.4425 -0.9578 +-3.047 -1.504 0.3386 -0.4425 -0.971 +-2.978 -1.47 0.2704 -0.4425 -0.9817 +-2.906 -1.434 0.2009 -0.4425 -0.99 +-2.831 -1.397 0.1305 -0.4425 -0.9958 +-2.754 -1.359 0.05937 -0.4425 -0.9991 +-2.677 -1.321 -0.01201 -0.4425 -1 +-2.6 -1.283 -0.08333 -0.4425 -0.9983 +-2.524 -1.246 -0.1542 -0.4425 -0.9941 +-2.45 -1.209 -0.2244 -0.4425 -0.9875 +-2.379 -1.174 -0.2935 -0.4425 -0.9784 +-2.311 -1.14 -0.3611 -0.4425 -0.9668 +-2.247 -1.109 -0.427 -0.4425 -0.9528 +-2.188 -1.08 -0.4909 -0.4425 -0.9365 +-2.135 -1.053 -0.5524 -0.4425 -0.9178 +-2.087 -1.03 -0.6113 -0.4425 -0.8968 +-2.047 -1.01 -0.6673 -0.4425 -0.8735 +-2.013 -0.9935 -0.7202 -0.4425 -0.8481 +-1.988 -0.9808 -0.7697 -0.4425 -0.8206 +-1.97 -0.972 -0.8158 -0.4425 -0.791 +-1.96 -0.9671 -0.8581 -0.4425 -0.7594 +-1.958 -0.9664 -0.8967 -0.4425 -0.7259 +-1.965 -0.9698 -0.9312 -0.4425 -0.6907 +-1.98 -0.9773 -0.9618 -0.4425 -0.6536 +-2.004 -0.9889 -0.9883 -0.4425 -0.615 +-2.035 -1.004 -1.011 -0.4425 -0.5748 +-2.075 -1.024 -1.029 -0.4425 -0.5332 +-2.122 -1.047 -1.043 -0.4425 -0.4903 +-2.175 -1.073 -1.053 -0.4425 -0.4461 +-2.236 -1.103 -1.059 -0.4425 -0.4008 +-2.302 -1.136 -1.061 -0.4425 -0.3545 +-2.373 -1.171 -1.06 -0.4425 -0.3073 +-2.45 -1.209 -1.054 -0.4425 -0.2594 +-2.53 -1.248 -1.046 -0.4425 -0.2108 +-2.613 -1.289 -1.034 -0.4425 -0.1617 +-2.698 -1.331 -1.018 -0.4425 -0.1122 +-2.785 -1.374 -1 -0.4425 -0.06235 +-2.872 -1.417 -0.9794 -0.4425 -0.01239 +-2.96 -1.46 -0.9561 -0.4425 0.0376 +-3.045 -1.503 -0.9305 -0.4425 0.0875 +-3.129 -1.544 -0.9029 -0.4425 0.1372 +-3.21 -1.584 -0.8735 -0.4425 0.1865 +-3.288 -1.622 -0.8425 -0.4425 0.2354 +-3.361 -1.658 -0.8102 -0.4425 0.2837 +-3.428 -1.692 -0.7769 -0.4425 0.3312 +-3.49 -1.722 -0.7426 -0.4425 0.378 +-3.545 -1.749 -0.7077 -0.4425 0.4238 +-3.593 -1.773 -0.6723 -0.4425 0.4685 +-3.634 -1.793 -0.6366 -0.4425 0.5121 +-3.666 -1.809 -0.6008 -0.4425 0.5544 +-3.689 -1.821 -0.5652 -0.4425 0.5953 +-3.704 -1.828 -0.5297 -0.4425 0.6347 +-3.71 -1.831 -0.4946 -0.4425 0.6725 +-3.707 -1.829 -0.4599 -0.4425 0.7087 +-3.695 -1.823 -0.4258 -0.4425 0.743 +-3.674 -1.813 -0.3923 -0.4425 0.7756 +-3.644 -1.798 -0.3595 -0.4425 0.8061 +-3.605 -1.779 -0.3274 -0.4425 0.8347 +-3.558 -1.756 -0.2961 -0.4425 0.8612 +-3.504 -1.729 -0.2655 -0.4425 0.8855 +-3.441 -1.698 -0.2357 -0.4425 0.9076 +-3.372 -1.664 -0.2065 -0.4425 0.9275 +-3.297 -1.627 -0.1781 -0.4425 0.945 +-3.216 -1.587 -0.1502 -0.4425 0.9602 +-3.13 -1.545 -0.1229 -0.4425 0.9729 +-3.04 -1.5 -0.09601 -0.4425 0.9833 +-2.947 -1.454 -0.06951 -0.4425 0.9911 +-2.852 -1.407 -0.04329 -0.4425 0.9965 +-2.755 -1.359 -0.01724 -0.4425 0.9994 +-2.621 -1.46 0 -0.4868 1 +-2.525 -1.407 0.02327 -0.4868 0.9988 +-2.431 -1.355 0.04666 -0.4868 0.995 +-2.338 -1.303 0.07032 -0.4868 0.9888 +-2.248 -1.253 0.09436 -0.4868 0.9801 +-2.161 -1.204 0.1189 -0.4868 0.9689 +-2.078 -1.158 0.144 -0.4868 0.9553 +-2.001 -1.115 0.1699 -0.4868 0.9394 +-1.929 -1.075 0.1965 -0.4868 0.9211 +-1.863 -1.038 0.224 -0.4868 0.9004 +-1.804 -1.005 0.2524 -0.4868 0.8776 +-1.752 -0.9765 0.2818 -0.4868 0.8525 +-1.709 -0.9521 0.3121 -0.4868 0.8253 +-1.673 -0.9323 0.3434 -0.4868 0.7961 +-1.646 -0.9172 0.3757 -0.4868 0.7648 +-1.627 -0.907 0.4089 -0.4868 0.7317 +-1.618 -0.9016 0.4429 -0.4868 0.6967 +-1.617 -0.9012 0.4778 -0.4868 0.66 +-1.625 -0.9056 0.5133 -0.4868 0.6216 +-1.642 -0.9149 0.5493 -0.4868 0.5817 +-1.667 -0.9289 0.5858 -0.4868 0.5403 +-1.7 -0.9475 0.6225 -0.4868 0.4976 +-1.741 -0.9703 0.6593 -0.4868 0.4536 +-1.79 -0.9973 0.6959 -0.4868 0.4085 +-1.845 -1.028 0.7322 -0.4868 0.3624 +-1.906 -1.062 0.768 -0.4868 0.3153 +-1.973 -1.1 0.803 -0.4868 0.2675 +-2.045 -1.14 0.8369 -0.4868 0.219 +-2.121 -1.182 0.8695 -0.4868 0.17 +-2.2 -1.226 0.9006 -0.4868 0.1205 +-2.282 -1.272 0.93 -0.4868 0.07074 +-2.366 -1.318 0.9572 -0.4868 0.02079 +-2.45 -1.366 0.9821 -0.4868 -0.0292 +-2.535 -1.413 1.004 -0.4868 -0.07912 +-2.619 -1.459 1.024 -0.4868 -0.1288 +-2.701 -1.505 1.041 -0.4868 -0.1782 +-2.781 -1.55 1.054 -0.4868 -0.2272 +-2.857 -1.592 1.064 -0.4868 -0.2756 +-2.93 -1.633 1.07 -0.4868 -0.3233 +-2.998 -1.671 1.072 -0.4868 -0.3702 +-3.061 -1.706 1.07 -0.4868 -0.4161 +-3.117 -1.737 1.065 -0.4868 -0.4611 +-3.168 -1.765 1.055 -0.4868 -0.5048 +-3.211 -1.79 1.04 -0.4868 -0.5474 +-3.247 -1.81 1.022 -0.4868 -0.5885 +-3.276 -1.826 0.9989 -0.4868 -0.6282 +-3.297 -1.837 0.9716 -0.4868 -0.6663 +-3.31 -1.844 0.9401 -0.4868 -0.7027 +-3.314 -1.847 0.9043 -0.4868 -0.7374 +-3.311 -1.845 0.8643 -0.4868 -0.7702 +-3.3 -1.839 0.8204 -0.4868 -0.8011 +-3.281 -1.828 0.7726 -0.4868 -0.8301 +-3.254 -1.813 0.7211 -0.4868 -0.8569 +-3.221 -1.795 0.6662 -0.4868 -0.8816 +-3.18 -1.772 0.608 -0.4868 -0.9041 +-3.133 -1.746 0.5468 -0.4868 -0.9243 +-3.081 -1.717 0.483 -0.4868 -0.9422 +-3.023 -1.685 0.4167 -0.4868 -0.9578 +-2.961 -1.65 0.3484 -0.4868 -0.971 +-2.895 -1.613 0.2783 -0.4868 -0.9817 +-2.826 -1.575 0.2069 -0.4868 -0.99 +-2.754 -1.535 0.1343 -0.4868 -0.9958 +-2.682 -1.494 0.06114 -0.4868 -0.9991 +-2.608 -1.453 -0.01237 -0.4868 -1 +-2.535 -1.413 -0.08581 -0.4868 -0.9983 +-2.462 -1.372 -0.1588 -0.4868 -0.9941 +-2.392 -1.333 -0.231 -0.4868 -0.9875 +-2.324 -1.295 -0.3021 -0.4868 -0.9784 +-2.259 -1.259 -0.3716 -0.4868 -0.9668 +-2.198 -1.225 -0.4392 -0.4868 -0.9528 +-2.142 -1.194 -0.5047 -0.4868 -0.9365 +-2.091 -1.166 -0.5677 -0.4868 -0.9178 +-2.047 -1.141 -0.6279 -0.4868 -0.8968 +-2.008 -1.119 -0.685 -0.4868 -0.8735 +-1.977 -1.102 -0.7388 -0.4868 -0.8481 +-1.953 -1.088 -0.7891 -0.4868 -0.8206 +-1.937 -1.079 -0.8356 -0.4868 -0.791 +-1.928 -1.074 -0.8782 -0.4868 -0.7594 +-1.927 -1.074 -0.9168 -0.4868 -0.7259 +-1.935 -1.078 -0.9512 -0.4868 -0.6907 +-1.95 -1.087 -0.9813 -0.4868 -0.6536 +-1.974 -1.1 -1.007 -0.4868 -0.615 +-2.005 -1.117 -1.029 -0.4868 -0.5748 +-2.044 -1.139 -1.046 -0.4868 -0.5332 +-2.09 -1.164 -1.058 -0.4868 -0.4903 +-2.142 -1.194 -1.067 -0.4868 -0.4461 +-2.201 -1.227 -1.071 -0.4868 -0.4008 +-2.265 -1.262 -1.072 -0.4868 -0.3545 +-2.335 -1.301 -1.068 -0.4868 -0.3073 +-2.409 -1.343 -1.061 -0.4868 -0.2594 +-2.487 -1.386 -1.05 -0.4868 -0.2108 +-2.568 -1.431 -1.035 -0.4868 -0.1617 +-2.65 -1.477 -1.018 -0.4868 -0.1122 +-2.735 -1.524 -0.9973 -0.4868 -0.06235 +-2.819 -1.571 -0.974 -0.4868 -0.01239 +-2.904 -1.618 -0.9483 -0.4868 0.0376 +-2.987 -1.664 -0.9203 -0.4868 0.0875 +-3.068 -1.71 -0.8904 -0.4868 0.1372 +-3.146 -1.753 -0.8587 -0.4868 0.1865 +-3.221 -1.795 -0.8256 -0.4868 0.2354 +-3.291 -1.834 -0.7913 -0.4868 0.2837 +-3.356 -1.87 -0.756 -0.4868 0.3312 +-3.416 -1.903 -0.7201 -0.4868 0.378 +-3.469 -1.933 -0.6836 -0.4868 0.4238 +-3.515 -1.959 -0.6469 -0.4868 0.4685 +-3.553 -1.98 -0.6101 -0.4868 0.5121 +-3.584 -1.997 -0.5735 -0.4868 0.5544 +-3.606 -2.009 -0.5371 -0.4868 0.5953 +-3.62 -2.017 -0.5013 -0.4868 0.6347 +-3.625 -2.02 -0.466 -0.4868 0.6725 +-3.621 -2.018 -0.4314 -0.4868 0.7087 +-3.608 -2.011 -0.3976 -0.4868 0.743 +-3.587 -1.999 -0.3647 -0.4868 0.7756 +-3.557 -1.982 -0.3328 -0.4868 0.8061 +-3.519 -1.961 -0.3018 -0.4868 0.8347 +-3.472 -1.935 -0.2718 -0.4868 0.8612 +-3.418 -1.905 -0.2428 -0.4868 0.8855 +-3.357 -1.871 -0.2147 -0.4868 0.9076 +-3.289 -1.833 -0.1875 -0.4868 0.9275 +-3.215 -1.792 -0.1611 -0.4868 0.945 +-3.136 -1.747 -0.1355 -0.4868 0.9602 +-3.051 -1.7 -0.1106 -0.4868 0.9729 +-2.963 -1.651 -0.08622 -0.4868 0.9833 +-2.872 -1.601 -0.06233 -0.4868 0.9911 +-2.779 -1.549 -0.03877 -0.4868 0.9965 +-2.684 -1.496 -0.01543 -0.4868 0.9994 +-2.544 -1.59 0 -0.5298 1 +-2.451 -1.531 0.02053 -0.5298 0.9988 +-2.359 -1.474 0.04122 -0.5298 0.995 +-2.268 -1.417 0.06221 -0.5298 0.9888 +-2.18 -1.362 0.08366 -0.5298 0.9801 +-2.096 -1.309 0.1057 -0.5298 0.9689 +-2.015 -1.259 0.1285 -0.5298 0.9553 +-1.939 -1.211 0.1521 -0.5298 0.9394 +-1.868 -1.167 0.1766 -0.5298 0.9211 +-1.804 -1.127 0.2022 -0.5298 0.9004 +-1.746 -1.091 0.229 -0.5298 0.8776 +-1.696 -1.059 0.2568 -0.5298 0.8525 +-1.652 -1.032 0.2859 -0.5298 0.8253 +-1.617 -1.01 0.3162 -0.5298 0.7961 +-1.59 -0.9935 0.3477 -0.5298 0.7648 +-1.572 -0.9819 0.3803 -0.5298 0.7317 +-1.562 -0.9757 0.4141 -0.5298 0.6967 +-1.56 -0.9747 0.4489 -0.5298 0.66 +-1.567 -0.9791 0.4846 -0.5298 0.6216 +-1.583 -0.9888 0.5211 -0.5298 0.5817 +-1.606 -1.004 0.5583 -0.5298 0.5403 +-1.638 -1.023 0.5959 -0.5298 0.4976 +-1.677 -1.048 0.6339 -0.5298 0.4536 +-1.723 -1.076 0.6719 -0.5298 0.4085 +-1.776 -1.109 0.7098 -0.5298 0.3624 +-1.835 -1.146 0.7473 -0.5298 0.3153 +-1.899 -1.186 0.7842 -0.5298 0.2675 +-1.968 -1.229 0.8202 -0.5298 0.219 +-2.041 -1.275 0.855 -0.5298 0.17 +-2.117 -1.323 0.8883 -0.5298 0.1205 +-2.196 -1.372 0.92 -0.5298 0.07074 +-2.277 -1.422 0.9496 -0.5298 0.02079 +-2.358 -1.473 0.977 -0.5298 -0.0292 +-2.44 -1.524 1.002 -0.5298 -0.07912 +-2.521 -1.575 1.024 -0.5298 -0.1288 +-2.6 -1.624 1.043 -0.5298 -0.1782 +-2.677 -1.673 1.058 -0.5298 -0.2272 +-2.752 -1.719 1.07 -0.5298 -0.2756 +-2.822 -1.763 1.078 -0.5298 -0.3233 +-2.888 -1.804 1.083 -0.5298 -0.3702 +-2.949 -1.842 1.083 -0.5298 -0.4161 +-3.004 -1.877 1.079 -0.5298 -0.4611 +-3.053 -1.907 1.07 -0.5298 -0.5048 +-3.096 -1.934 1.057 -0.5298 -0.5474 +-3.131 -1.956 1.039 -0.5298 -0.5885 +-3.159 -1.974 1.017 -0.5298 -0.6282 +-3.18 -1.987 0.9907 -0.5298 -0.6663 +-3.193 -1.995 0.9595 -0.5298 -0.7027 +-3.199 -1.998 0.9238 -0.5298 -0.7374 +-3.196 -1.997 0.8838 -0.5298 -0.7702 +-3.186 -1.991 0.8396 -0.5298 -0.8011 +-3.169 -1.98 0.7912 -0.5298 -0.8301 +-3.144 -1.964 0.739 -0.5298 -0.8569 +-3.112 -1.944 0.6831 -0.5298 -0.8816 +-3.074 -1.921 0.6238 -0.5298 -0.9041 +-3.03 -1.893 0.5613 -0.5298 -0.9243 +-2.981 -1.862 0.496 -0.5298 -0.9422 +-2.926 -1.828 0.4281 -0.5298 -0.9578 +-2.867 -1.791 0.358 -0.5298 -0.971 +-2.805 -1.752 0.2861 -0.5298 -0.9817 +-2.739 -1.711 0.2127 -0.5298 -0.99 +-2.671 -1.669 0.1381 -0.5298 -0.9958 +-2.602 -1.626 0.06287 -0.5298 -0.9991 +-2.533 -1.582 -0.01272 -0.5298 -1 +-2.463 -1.539 -0.08823 -0.5298 -0.9983 +-2.394 -1.496 -0.1633 -0.5298 -0.9941 +-2.327 -1.454 -0.2375 -0.5298 -0.9875 +-2.263 -1.414 -0.3105 -0.5298 -0.9784 +-2.201 -1.375 -0.3818 -0.5298 -0.9668 +-2.144 -1.339 -0.4512 -0.5298 -0.9528 +-2.091 -1.306 -0.5183 -0.5298 -0.9365 +-2.043 -1.276 -0.5827 -0.5298 -0.9178 +-2.001 -1.25 -0.6441 -0.5298 -0.8968 +-1.965 -1.227 -0.7023 -0.5298 -0.8735 +-1.935 -1.209 -0.757 -0.5298 -0.8481 +-1.913 -1.195 -0.8079 -0.5298 -0.8206 +-1.898 -1.186 -0.8549 -0.5298 -0.791 +-1.891 -1.181 -0.8978 -0.5298 -0.7594 +-1.891 -1.181 -0.9363 -0.5298 -0.7259 +-1.899 -1.186 -0.9705 -0.5298 -0.6907 +-1.915 -1.196 -1 -0.5298 -0.6536 +-1.938 -1.211 -1.025 -0.5298 -0.615 +-1.969 -1.23 -1.046 -0.5298 -0.5748 +-2.007 -1.254 -1.062 -0.5298 -0.5332 +-2.051 -1.282 -1.073 -0.5298 -0.4903 +-2.103 -1.314 -1.08 -0.5298 -0.4461 +-2.16 -1.349 -1.083 -0.5298 -0.4008 +-2.222 -1.388 -1.082 -0.5298 -0.3545 +-2.29 -1.431 -1.076 -0.5298 -0.3073 +-2.362 -1.475 -1.066 -0.5298 -0.2594 +-2.437 -1.522 -1.053 -0.5298 -0.2108 +-2.515 -1.571 -1.037 -0.5298 -0.1617 +-2.595 -1.621 -1.017 -0.5298 -0.1122 +-2.676 -1.672 -0.9937 -0.5298 -0.06235 +-2.758 -1.723 -0.968 -0.5298 -0.01239 +-2.839 -1.774 -0.9399 -0.5298 0.0376 +-2.919 -1.824 -0.9095 -0.5298 0.0875 +-2.997 -1.873 -0.8773 -0.5298 0.1372 +-3.073 -1.92 -0.8434 -0.5298 0.1865 +-3.144 -1.964 -0.8082 -0.5298 0.2354 +-3.212 -2.007 -0.7719 -0.5298 0.2837 +-3.274 -2.046 -0.7347 -0.5298 0.3312 +-3.331 -2.081 -0.6971 -0.5298 0.378 +-3.382 -2.113 -0.6591 -0.5298 0.4238 +-3.426 -2.14 -0.6211 -0.5298 0.4685 +-3.462 -2.163 -0.5832 -0.5298 0.5121 +-3.491 -2.181 -0.5457 -0.5298 0.5544 +-3.512 -2.194 -0.5088 -0.5298 0.5953 +-3.525 -2.202 -0.4725 -0.5298 0.6347 +-3.529 -2.205 -0.4371 -0.5298 0.6725 +-3.524 -2.202 -0.4026 -0.5298 0.7087 +-3.512 -2.194 -0.3692 -0.5298 0.743 +-3.49 -2.18 -0.337 -0.5298 0.7756 +-3.46 -2.162 -0.3059 -0.5298 0.8061 +-3.423 -2.138 -0.276 -0.5298 0.8347 +-3.377 -2.11 -0.2473 -0.5298 0.8612 +-3.324 -2.076 -0.2198 -0.5298 0.8855 +-3.264 -2.039 -0.1935 -0.5298 0.9076 +-3.197 -1.997 -0.1683 -0.5298 0.9275 +-3.125 -1.952 -0.144 -0.5298 0.945 +-3.047 -1.904 -0.1207 -0.5298 0.9602 +-2.965 -1.852 -0.09821 -0.5298 0.9729 +-2.879 -1.799 -0.07638 -0.5298 0.9833 +-2.79 -1.743 -0.05511 -0.5298 0.9911 +-2.699 -1.686 -0.03423 -0.5298 0.9965 +-2.606 -1.628 -0.01362 -0.5298 0.9994 +-2.462 -1.715 0 -0.5716 1 +-2.371 -1.652 0.01778 -0.5716 0.9988 +-2.282 -1.589 0.03574 -0.5716 0.995 +-2.194 -1.528 0.05406 -0.5716 0.9888 +-2.108 -1.468 0.0729 -0.5716 0.9801 +-2.026 -1.411 0.09244 -0.5716 0.9689 +-1.947 -1.356 0.1128 -0.5716 0.9553 +-1.873 -1.305 0.1342 -0.5716 0.9394 +-1.804 -1.257 0.1567 -0.5716 0.9211 +-1.742 -1.213 0.1804 -0.5716 0.9004 +-1.685 -1.174 0.2054 -0.5716 0.8776 +-1.635 -1.139 0.2317 -0.5716 0.8525 +-1.593 -1.11 0.2595 -0.5716 0.8253 +-1.559 -1.086 0.2888 -0.5716 0.7961 +-1.532 -1.067 0.3195 -0.5716 0.7648 +-1.513 -1.054 0.3516 -0.5716 0.7317 +-1.503 -1.047 0.385 -0.5716 0.6967 +-1.501 -1.045 0.4197 -0.5716 0.66 +-1.507 -1.05 0.4557 -0.5716 0.6216 +-1.521 -1.059 0.4926 -0.5716 0.5817 +-1.543 -1.075 0.5305 -0.5716 0.5403 +-1.573 -1.095 0.569 -0.5716 0.4976 +-1.61 -1.121 0.6081 -0.5716 0.4536 +-1.654 -1.152 0.6475 -0.5716 0.4085 +-1.704 -1.187 0.6869 -0.5716 0.3624 +-1.76 -1.226 0.7262 -0.5716 0.3153 +-1.821 -1.269 0.7649 -0.5716 0.2675 +-1.887 -1.315 0.8029 -0.5716 0.219 +-1.957 -1.363 0.8399 -0.5716 0.17 +-2.03 -1.414 0.8755 -0.5716 0.1205 +-2.106 -1.467 0.9094 -0.5716 0.07074 +-2.183 -1.521 0.9414 -0.5716 0.02079 +-2.262 -1.575 0.9712 -0.5716 -0.0292 +-2.34 -1.63 0.9983 -0.5716 -0.07912 +-2.418 -1.684 1.023 -0.5716 -0.1288 +-2.494 -1.738 1.044 -0.5716 -0.1782 +-2.569 -1.789 1.062 -0.5716 -0.2272 +-2.64 -1.839 1.076 -0.5716 -0.2756 +-2.708 -1.886 1.086 -0.5716 -0.3233 +-2.772 -1.931 1.092 -0.5716 -0.3702 +-2.831 -1.972 1.094 -0.5716 -0.4161 +-2.884 -2.009 1.092 -0.5716 -0.4611 +-2.932 -2.042 1.085 -0.5716 -0.5048 +-2.973 -2.071 1.073 -0.5716 -0.5474 +-3.008 -2.095 1.056 -0.5716 -0.5885 +-3.036 -2.115 1.035 -0.5716 -0.6282 +-3.056 -2.129 1.009 -0.5716 -0.6663 +-3.07 -2.138 0.9783 -0.5716 -0.7027 +-3.076 -2.142 0.9428 -0.5716 -0.7374 +-3.074 -2.141 0.9028 -0.5716 -0.7702 +-3.065 -2.135 0.8582 -0.5716 -0.8011 +-3.049 -2.124 0.8094 -0.5716 -0.8301 +-3.027 -2.108 0.7565 -0.5716 -0.8569 +-2.997 -2.088 0.6996 -0.5716 -0.8816 +-2.962 -2.063 0.6392 -0.5716 -0.9041 +-2.92 -2.034 0.5755 -0.5716 -0.9243 +-2.874 -2.002 0.5087 -0.5716 -0.9422 +-2.822 -1.966 0.4392 -0.5716 -0.9578 +-2.767 -1.927 0.3674 -0.5716 -0.971 +-2.708 -1.886 0.2937 -0.5716 -0.9817 +-2.646 -1.843 0.2183 -0.5716 -0.99 +-2.582 -1.798 0.1418 -0.5716 -0.9958 +-2.517 -1.753 0.06456 -0.5716 -0.9991 +-2.451 -1.707 -0.01306 -0.5716 -1 +-2.385 -1.661 -0.0906 -0.5716 -0.9983 +-2.32 -1.616 -0.1677 -0.5716 -0.9941 +-2.257 -1.572 -0.2438 -0.5716 -0.9875 +-2.196 -1.529 -0.3187 -0.5716 -0.9784 +-2.138 -1.489 -0.3918 -0.5716 -0.9668 +-2.083 -1.451 -0.4629 -0.5716 -0.9528 +-2.034 -1.416 -0.5315 -0.5716 -0.9365 +-1.989 -1.385 -0.5973 -0.5716 -0.9178 +-1.949 -1.358 -0.6599 -0.5716 -0.8968 +-1.916 -1.334 -0.7192 -0.5716 -0.8735 +-1.888 -1.315 -0.7747 -0.5716 -0.8481 +-1.868 -1.301 -0.8263 -0.5716 -0.8206 +-1.854 -1.292 -0.8737 -0.5716 -0.791 +-1.848 -1.287 -0.9167 -0.5716 -0.7594 +-1.849 -1.288 -0.9553 -0.5716 -0.7259 +-1.857 -1.294 -0.9892 -0.5716 -0.6907 +-1.873 -1.305 -1.018 -0.5716 -0.6536 +-1.896 -1.321 -1.043 -0.5716 -0.615 +-1.926 -1.342 -1.062 -0.5716 -0.5748 +-1.963 -1.368 -1.077 -0.5716 -0.5332 +-2.007 -1.398 -1.088 -0.5716 -0.4903 +-2.057 -1.432 -1.093 -0.5716 -0.4461 +-2.112 -1.471 -1.094 -0.5716 -0.4008 +-2.172 -1.513 -1.091 -0.5716 -0.3545 +-2.238 -1.559 -1.083 -0.5716 -0.3073 +-2.307 -1.607 -1.072 -0.5716 -0.2594 +-2.379 -1.657 -1.056 -0.5716 -0.2108 +-2.454 -1.71 -1.037 -0.5716 -0.1617 +-2.531 -1.763 -1.015 -0.5716 -0.1122 +-2.61 -1.818 -0.9895 -0.5716 -0.06235 +-2.688 -1.872 -0.9614 -0.5716 -0.01239 +-2.766 -1.927 -0.9309 -0.5716 0.0376 +-2.843 -1.98 -0.8982 -0.5716 0.0875 +-2.918 -2.032 -0.8637 -0.5716 0.1372 +-2.99 -2.083 -0.8276 -0.5716 0.1865 +-3.059 -2.131 -0.7902 -0.5716 0.2354 +-3.123 -2.176 -0.7519 -0.5716 0.2837 +-3.183 -2.217 -0.713 -0.5716 0.3312 +-3.237 -2.255 -0.6737 -0.5716 0.378 +-3.285 -2.288 -0.6342 -0.5716 0.4238 +-3.327 -2.317 -0.5949 -0.5716 0.4685 +-3.361 -2.341 -0.556 -0.5716 0.5121 +-3.389 -2.36 -0.5177 -0.5716 0.5544 +-3.408 -2.374 -0.4801 -0.5716 0.5953 +-3.42 -2.382 -0.4435 -0.5716 0.6347 +-3.423 -2.384 -0.4079 -0.5716 0.6725 +-3.418 -2.381 -0.3736 -0.5716 0.7087 +-3.405 -2.372 -0.3406 -0.5716 0.743 +-3.383 -2.357 -0.309 -0.5716 0.7756 +-3.354 -2.336 -0.2788 -0.5716 0.8061 +-3.317 -2.31 -0.25 -0.5716 0.8347 +-3.272 -2.279 -0.2227 -0.5716 0.8612 +-3.22 -2.243 -0.1968 -0.5716 0.8855 +-3.161 -2.202 -0.1723 -0.5716 0.9076 +-3.097 -2.157 -0.149 -0.5716 0.9275 +-3.026 -2.108 -0.1269 -0.5716 0.945 +-2.95 -2.055 -0.1059 -0.5716 0.9602 +-2.87 -1.999 -0.08578 -0.5716 0.9729 +-2.787 -1.941 -0.0665 -0.5716 0.9833 +-2.7 -1.881 -0.04785 -0.5716 0.9911 +-2.612 -1.819 -0.02967 -0.5716 0.9965 +-2.522 -1.757 -0.01179 -0.5716 0.9994 +-2.373 -1.836 0 -0.6119 1 +-2.285 -1.768 0.01502 -0.6119 0.9988 +-2.199 -1.701 0.03024 -0.6119 0.995 +-2.113 -1.635 0.04587 -0.6119 0.9888 +-2.031 -1.571 0.06211 -0.6119 0.9801 +-1.951 -1.509 0.07913 -0.6119 0.9689 +-1.875 -1.45 0.09711 -0.6119 0.9553 +-1.803 -1.395 0.1162 -0.6119 0.9394 +-1.736 -1.343 0.1366 -0.6119 0.9211 +-1.675 -1.296 0.1584 -0.6119 0.9004 +-1.62 -1.254 0.1816 -0.6119 0.8776 +-1.572 -1.216 0.2065 -0.6119 0.8525 +-1.531 -1.184 0.233 -0.6119 0.8253 +-1.497 -1.158 0.2612 -0.6119 0.7961 +-1.471 -1.138 0.291 -0.6119 0.7648 +-1.452 -1.123 0.3226 -0.6119 0.7317 +-1.441 -1.115 0.3557 -0.6119 0.6967 +-1.439 -1.113 0.3903 -0.6119 0.66 +-1.444 -1.117 0.4264 -0.6119 0.6216 +-1.457 -1.127 0.4638 -0.6119 0.5817 +-1.477 -1.143 0.5023 -0.6119 0.5403 +-1.505 -1.164 0.5418 -0.6119 0.4976 +-1.54 -1.191 0.582 -0.6119 0.4536 +-1.581 -1.223 0.6227 -0.6119 0.4085 +-1.629 -1.26 0.6636 -0.6119 0.3624 +-1.682 -1.301 0.7045 -0.6119 0.3153 +-1.741 -1.346 0.7452 -0.6119 0.2675 +-1.804 -1.395 0.7852 -0.6119 0.219 +-1.87 -1.447 0.8242 -0.6119 0.17 +-1.94 -1.501 0.8621 -0.6119 0.1205 +-2.012 -1.557 0.8983 -0.6119 0.07074 +-2.086 -1.614 0.9327 -0.6119 0.02079 +-2.161 -1.672 0.9648 -0.6119 -0.0292 +-2.236 -1.73 0.9943 -0.6119 -0.07912 +-2.311 -1.787 1.021 -0.6119 -0.1288 +-2.384 -1.844 1.045 -0.6119 -0.1782 +-2.455 -1.899 1.065 -0.6119 -0.2272 +-2.524 -1.952 1.081 -0.6119 -0.2756 +-2.589 -2.003 1.093 -0.6119 -0.3233 +-2.65 -2.05 1.101 -0.6119 -0.3702 +-2.707 -2.094 1.105 -0.6119 -0.4161 +-2.758 -2.134 1.104 -0.6119 -0.4611 +-2.805 -2.169 1.099 -0.6119 -0.5048 +-2.845 -2.2 1.088 -0.6119 -0.5474 +-2.878 -2.227 1.073 -0.6119 -0.5885 +-2.906 -2.248 1.052 -0.6119 -0.6282 +-2.926 -2.263 1.027 -0.6119 -0.6663 +-2.939 -2.274 0.9965 -0.6119 -0.7027 +-2.946 -2.279 0.9612 -0.6119 -0.7374 +-2.945 -2.278 0.9211 -0.6119 -0.7702 +-2.938 -2.272 0.8763 -0.6119 -0.8011 +-2.923 -2.261 0.827 -0.6119 -0.8301 +-2.902 -2.245 0.7734 -0.6119 -0.8569 +-2.875 -2.224 0.7157 -0.6119 -0.8816 +-2.842 -2.198 0.6543 -0.6119 -0.9041 +-2.803 -2.169 0.5893 -0.6119 -0.9243 +-2.76 -2.135 0.5211 -0.6119 -0.9422 +-2.712 -2.098 0.4501 -0.6119 -0.9578 +-2.659 -2.057 0.3766 -0.6119 -0.971 +-2.604 -2.014 0.3011 -0.6119 -0.9817 +-2.546 -1.969 0.2239 -0.6119 -0.99 +-2.486 -1.923 0.1454 -0.6119 -0.9958 +-2.424 -1.875 0.06621 -0.6119 -0.9991 +-2.362 -1.828 -0.01339 -0.6119 -1 +-2.301 -1.78 -0.09292 -0.6119 -0.9983 +-2.24 -1.732 -0.1719 -0.6119 -0.9941 +-2.18 -1.686 -0.25 -0.6119 -0.9875 +-2.123 -1.642 -0.3267 -0.6119 -0.9784 +-2.068 -1.6 -0.4016 -0.6119 -0.9668 +-2.018 -1.561 -0.4742 -0.6119 -0.9528 +-1.971 -1.525 -0.5443 -0.6119 -0.9365 +-1.929 -1.492 -0.6115 -0.6119 -0.9178 +-1.892 -1.464 -0.6753 -0.6119 -0.8968 +-1.861 -1.439 -0.7356 -0.6119 -0.8735 +-1.836 -1.42 -0.7919 -0.6119 -0.8481 +-1.817 -1.406 -0.8441 -0.6119 -0.8206 +-1.805 -1.396 -0.8919 -0.6119 -0.791 +-1.8 -1.392 -0.9352 -0.6119 -0.7594 +-1.801 -1.393 -0.9737 -0.6119 -0.7259 +-1.81 -1.4 -1.007 -0.6119 -0.6907 +-1.826 -1.412 -1.036 -0.6119 -0.6536 +-1.849 -1.43 -1.06 -0.6119 -0.615 +-1.878 -1.453 -1.078 -0.6119 -0.5748 +-1.914 -1.481 -1.092 -0.6119 -0.5332 +-1.956 -1.513 -1.101 -0.6119 -0.4903 +-2.004 -1.55 -1.105 -0.6119 -0.4461 +-2.057 -1.592 -1.104 -0.6119 -0.4008 +-2.116 -1.637 -1.099 -0.6119 -0.3545 +-2.178 -1.685 -1.09 -0.6119 -0.3073 +-2.245 -1.737 -1.076 -0.6119 -0.2594 +-2.314 -1.79 -1.058 -0.6119 -0.2108 +-2.386 -1.846 -1.037 -0.6119 -0.1617 +-2.46 -1.903 -1.012 -0.6119 -0.1122 +-2.535 -1.961 -0.9847 -0.6119 -0.06235 +-2.61 -2.019 -0.9542 -0.6119 -0.01239 +-2.685 -2.077 -0.9213 -0.6119 0.0376 +-2.758 -2.134 -0.8863 -0.6119 0.0875 +-2.83 -2.189 -0.8495 -0.6119 0.1372 +-2.898 -2.242 -0.8112 -0.6119 0.1865 +-2.964 -2.293 -0.7718 -0.6119 0.2354 +-3.025 -2.34 -0.7316 -0.6119 0.2837 +-3.082 -2.384 -0.6908 -0.6119 0.3312 +-3.133 -2.424 -0.6498 -0.6119 0.378 +-3.179 -2.459 -0.6089 -0.6119 0.4238 +-3.218 -2.49 -0.5684 -0.6119 0.4685 +-3.251 -2.515 -0.5284 -0.6119 0.5121 +-3.276 -2.534 -0.4893 -0.6119 0.5544 +-3.294 -2.548 -0.4511 -0.6119 0.5953 +-3.305 -2.556 -0.4141 -0.6119 0.6347 +-3.307 -2.558 -0.3785 -0.6119 0.6725 +-3.302 -2.554 -0.3444 -0.6119 0.7087 +-3.288 -2.544 -0.3118 -0.6119 0.743 +-3.267 -2.527 -0.2808 -0.6119 0.7756 +-3.238 -2.505 -0.2515 -0.6119 0.8061 +-3.202 -2.477 -0.2239 -0.6119 0.8347 +-3.158 -2.443 -0.198 -0.6119 0.8612 +-3.108 -2.404 -0.1736 -0.6119 0.8855 +-3.051 -2.36 -0.1509 -0.6119 0.9076 +-2.988 -2.311 -0.1296 -0.6119 0.9275 +-2.919 -2.258 -0.1097 -0.6119 0.945 +-2.846 -2.202 -0.09094 -0.6119 0.9602 +-2.769 -2.142 -0.0733 -0.6119 0.9729 +-2.688 -2.079 -0.05657 -0.6119 0.9833 +-2.604 -2.014 -0.04056 -0.6119 0.9911 +-2.518 -1.948 -0.02509 -0.6119 0.9965 +-2.431 -1.881 -0.009956 -0.6119 0.9994 +-2.278 -1.952 0 -0.6506 1 +-2.194 -1.88 0.01225 -0.6506 0.9988 +-2.11 -1.808 0.02473 -0.6506 0.995 +-2.028 -1.738 0.03766 -0.6506 0.9888 +-1.949 -1.669 0.05127 -0.6506 0.9801 +-1.872 -1.603 0.06576 -0.6506 0.9689 +-1.798 -1.541 0.08133 -0.6506 0.9553 +-1.729 -1.481 0.09817 -0.6506 0.9394 +-1.665 -1.426 0.1164 -0.6506 0.9211 +-1.606 -1.376 0.1363 -0.6506 0.9004 +-1.553 -1.33 0.1578 -0.6506 0.8776 +-1.506 -1.29 0.1811 -0.6506 0.8525 +-1.466 -1.256 0.2063 -0.6506 0.8253 +-1.432 -1.227 0.2334 -0.6506 0.7961 +-1.407 -1.205 0.2624 -0.6506 0.7648 +-1.388 -1.189 0.2933 -0.6506 0.7317 +-1.377 -1.18 0.3261 -0.6506 0.6967 +-1.374 -1.177 0.3607 -0.6506 0.66 +-1.378 -1.181 0.3969 -0.6506 0.6216 +-1.39 -1.191 0.4347 -0.6506 0.5817 +-1.409 -1.207 0.4739 -0.6506 0.5403 +-1.435 -1.229 0.5142 -0.6506 0.4976 +-1.468 -1.257 0.5555 -0.6506 0.4536 +-1.507 -1.291 0.5975 -0.6506 0.4085 +-1.552 -1.329 0.6399 -0.6506 0.3624 +-1.602 -1.373 0.6825 -0.6506 0.3153 +-1.657 -1.42 0.7249 -0.6506 0.2675 +-1.717 -1.471 0.7669 -0.6506 0.219 +-1.78 -1.525 0.8081 -0.6506 0.17 +-1.846 -1.582 0.8481 -0.6506 0.1205 +-1.915 -1.641 0.8866 -0.6506 0.07074 +-1.985 -1.701 0.9233 -0.6506 0.02079 +-2.056 -1.762 0.9578 -0.6506 -0.0292 +-2.128 -1.823 0.9897 -0.6506 -0.07912 +-2.199 -1.884 1.019 -0.6506 -0.1288 +-2.269 -1.944 1.045 -0.6506 -0.1782 +-2.337 -2.002 1.067 -0.6506 -0.2272 +-2.402 -2.058 1.085 -0.6506 -0.2756 +-2.465 -2.112 1.1 -0.6506 -0.3233 +-2.523 -2.162 1.11 -0.6506 -0.3702 +-2.578 -2.209 1.115 -0.6506 -0.4161 +-2.627 -2.251 1.116 -0.6506 -0.4611 +-2.672 -2.289 1.112 -0.6506 -0.5048 +-2.71 -2.322 1.103 -0.6506 -0.5474 +-2.743 -2.35 1.088 -0.6506 -0.5885 +-2.77 -2.373 1.069 -0.6506 -0.6282 +-2.79 -2.39 1.044 -0.6506 -0.6663 +-2.803 -2.402 1.014 -0.6506 -0.7027 +-2.81 -2.407 0.979 -0.6506 -0.7374 +-2.81 -2.407 0.9389 -0.6506 -0.7702 +-2.804 -2.402 0.8939 -0.6506 -0.8011 +-2.791 -2.391 0.8442 -0.6506 -0.8301 +-2.772 -2.375 0.7899 -0.6506 -0.8569 +-2.747 -2.353 0.7314 -0.6506 -0.8816 +-2.716 -2.327 0.6689 -0.6506 -0.9041 +-2.68 -2.296 0.6027 -0.6506 -0.9243 +-2.64 -2.262 0.5331 -0.6506 -0.9422 +-2.595 -2.223 0.4606 -0.6506 -0.9578 +-2.546 -2.181 0.3855 -0.6506 -0.971 +-2.494 -2.137 0.3083 -0.6506 -0.9817 +-2.44 -2.091 0.2293 -0.6506 -0.99 +-2.384 -2.042 0.149 -0.6506 -0.9958 +-2.326 -1.993 0.06782 -0.6506 -0.9991 +-2.268 -1.944 -0.01372 -0.6506 -1 +-2.211 -1.894 -0.09517 -0.6506 -0.9983 +-2.153 -1.845 -0.1761 -0.6506 -0.9941 +-2.098 -1.797 -0.256 -0.6506 -0.9875 +-2.044 -1.752 -0.3345 -0.6506 -0.9784 +-1.994 -1.708 -0.4111 -0.6506 -0.9668 +-1.946 -1.667 -0.4853 -0.6506 -0.9528 +-1.903 -1.63 -0.5569 -0.6506 -0.9365 +-1.864 -1.597 -0.6253 -0.6506 -0.9178 +-1.829 -1.567 -0.6903 -0.6506 -0.8968 +-1.801 -1.543 -0.7515 -0.6506 -0.8735 +-1.778 -1.523 -0.8087 -0.6506 -0.8481 +-1.761 -1.508 -0.8614 -0.6506 -0.8206 +-1.75 -1.499 -0.9096 -0.6506 -0.791 +-1.746 -1.496 -0.953 -0.6506 -0.7594 +-1.748 -1.498 -0.9914 -0.6506 -0.7259 +-1.757 -1.505 -1.025 -0.6506 -0.6907 +-1.773 -1.519 -1.053 -0.6506 -0.6536 +-1.795 -1.538 -1.076 -0.6506 -0.615 +-1.824 -1.562 -1.094 -0.6506 -0.5748 +-1.858 -1.592 -1.106 -0.6506 -0.5332 +-1.899 -1.627 -1.114 -0.6506 -0.4903 +-1.945 -1.667 -1.116 -0.6506 -0.4461 +-1.996 -1.71 -1.114 -0.6506 -0.4008 +-2.052 -1.758 -1.107 -0.6506 -0.3545 +-2.112 -1.81 -1.095 -0.6506 -0.3073 +-2.176 -1.864 -1.08 -0.6506 -0.2594 +-2.242 -1.921 -1.06 -0.6506 -0.2108 +-2.311 -1.98 -1.036 -0.6506 -0.1617 +-2.381 -2.04 -1.009 -0.6506 -0.1122 +-2.452 -2.101 -0.9793 -0.6506 -0.06235 +-2.524 -2.162 -0.9464 -0.6506 -0.01239 +-2.595 -2.223 -0.9112 -0.6506 0.0376 +-2.665 -2.283 -0.8739 -0.6506 0.0875 +-2.733 -2.341 -0.8348 -0.6506 0.1372 +-2.798 -2.397 -0.7944 -0.6506 0.1865 +-2.86 -2.45 -0.7529 -0.6506 0.2354 +-2.918 -2.5 -0.7107 -0.6506 0.2837 +-2.972 -2.546 -0.6682 -0.6506 0.3312 +-3.021 -2.588 -0.6256 -0.6506 0.378 +-3.064 -2.625 -0.5833 -0.6506 0.4238 +-3.101 -2.656 -0.5415 -0.6506 0.4685 +-3.131 -2.683 -0.5005 -0.6506 0.5121 +-3.155 -2.703 -0.4605 -0.6506 0.5544 +-3.171 -2.717 -0.4218 -0.6506 0.5953 +-3.18 -2.725 -0.3846 -0.6506 0.6347 +-3.182 -2.726 -0.3489 -0.6506 0.6725 +-3.176 -2.721 -0.3149 -0.6506 0.7087 +-3.163 -2.71 -0.2827 -0.6506 0.743 +-3.142 -2.692 -0.2525 -0.6506 0.7756 +-3.114 -2.668 -0.2241 -0.6506 0.8061 +-3.078 -2.637 -0.1976 -0.6506 0.8347 +-3.036 -2.601 -0.1731 -0.6506 0.8612 +-2.987 -2.559 -0.1504 -0.6506 0.8855 +-2.931 -2.512 -0.1294 -0.6506 0.9076 +-2.871 -2.459 -0.1101 -0.6506 0.9275 +-2.805 -2.403 -0.09236 -0.6506 0.945 +-2.734 -2.342 -0.07596 -0.6506 0.9602 +-2.659 -2.278 -0.06078 -0.6506 0.9729 +-2.581 -2.212 -0.0466 -0.6506 0.9833 +-2.501 -2.142 -0.03325 -0.6506 0.9911 +-2.418 -2.072 -0.02049 -0.6506 0.9965 +-2.334 -2 -0.008116 -0.6506 0.9994 +-2.178 -2.063 0 -0.6878 1 +-2.097 -1.987 0.009472 -0.6878 0.9988 +-2.017 -1.911 0.0192 -0.6878 0.995 +-1.938 -1.836 0.02943 -0.6878 0.9888 +-1.862 -1.764 0.0404 -0.6878 0.9801 +-1.788 -1.694 0.05235 -0.6878 0.9689 +-1.718 -1.627 0.06551 -0.6878 0.9553 +-1.651 -1.564 0.08006 -0.6878 0.9394 +-1.589 -1.506 0.0962 -0.6878 0.9211 +-1.533 -1.452 0.1141 -0.6878 0.9004 +-1.482 -1.404 0.1339 -0.6878 0.8776 +-1.436 -1.361 0.1556 -0.6878 0.8525 +-1.398 -1.324 0.1795 -0.6878 0.8253 +-1.365 -1.294 0.2055 -0.6878 0.7961 +-1.34 -1.27 0.2337 -0.6878 0.7648 +-1.322 -1.252 0.264 -0.6878 0.7317 +-1.311 -1.242 0.2964 -0.6878 0.6967 +-1.307 -1.238 0.3308 -0.6878 0.66 +-1.311 -1.242 0.3672 -0.6878 0.6216 +-1.321 -1.252 0.4053 -0.6878 0.5817 +-1.338 -1.268 0.4451 -0.6878 0.5403 +-1.363 -1.291 0.4863 -0.6878 0.4976 +-1.393 -1.32 0.5286 -0.6878 0.4536 +-1.43 -1.354 0.5719 -0.6878 0.4085 +-1.472 -1.394 0.6158 -0.6878 0.3624 +-1.519 -1.439 0.66 -0.6878 0.3153 +-1.571 -1.489 0.7043 -0.6878 0.2675 +-1.627 -1.542 0.7482 -0.6878 0.219 +-1.687 -1.598 0.7914 -0.6878 0.17 +-1.75 -1.658 0.8336 -0.6878 0.1205 +-1.815 -1.719 0.8744 -0.6878 0.07074 +-1.881 -1.782 0.9134 -0.6878 0.02079 +-1.949 -1.846 0.9502 -0.6878 -0.0292 +-2.016 -1.91 0.9844 -0.6878 -0.07912 +-2.084 -1.974 1.016 -0.6878 -0.1288 +-2.15 -2.037 1.044 -0.6878 -0.1782 +-2.215 -2.098 1.068 -0.6878 -0.2272 +-2.277 -2.157 1.089 -0.6878 -0.2756 +-2.336 -2.213 1.106 -0.6878 -0.3233 +-2.392 -2.266 1.118 -0.6878 -0.3702 +-2.444 -2.315 1.125 -0.6878 -0.4161 +-2.491 -2.36 1.127 -0.6878 -0.4611 +-2.534 -2.4 1.125 -0.6878 -0.5048 +-2.571 -2.436 1.117 -0.6878 -0.5474 +-2.602 -2.465 1.103 -0.6878 -0.5885 +-2.628 -2.49 1.085 -0.6878 -0.6282 +-2.648 -2.508 1.061 -0.6878 -0.6663 +-2.661 -2.521 1.031 -0.6878 -0.7027 +-2.668 -2.528 0.9962 -0.6878 -0.7374 +-2.669 -2.529 0.9561 -0.6878 -0.7702 +-2.664 -2.524 0.9109 -0.6878 -0.8011 +-2.652 -2.513 0.8608 -0.6878 -0.8301 +-2.635 -2.496 0.8059 -0.6878 -0.8569 +-2.612 -2.475 0.7466 -0.6878 -0.8816 +-2.584 -2.448 0.6831 -0.6878 -0.9041 +-2.551 -2.417 0.6157 -0.6878 -0.9243 +-2.513 -2.381 0.5449 -0.6878 -0.9422 +-2.472 -2.342 0.4709 -0.6878 -0.9578 +-2.427 -2.299 0.3942 -0.6878 -0.971 +-2.379 -2.254 0.3153 -0.6878 -0.9817 +-2.328 -2.206 0.2345 -0.6878 -0.99 +-2.276 -2.156 0.1524 -0.6878 -0.9958 +-2.223 -2.106 0.06938 -0.6878 -0.9991 +-2.169 -2.055 -0.01403 -0.6878 -1 +-2.115 -2.004 -0.09737 -0.6878 -0.9983 +-2.062 -1.953 -0.1801 -0.6878 -0.9941 +-2.01 -1.904 -0.2619 -0.6878 -0.9875 +-1.96 -1.857 -0.3421 -0.6878 -0.9784 +-1.913 -1.813 -0.4203 -0.6878 -0.9668 +-1.869 -1.771 -0.4961 -0.6878 -0.9528 +-1.829 -1.733 -0.5691 -0.6878 -0.9365 +-1.793 -1.699 -0.6388 -0.6878 -0.9178 +-1.761 -1.669 -0.7049 -0.6878 -0.8968 +-1.735 -1.644 -0.767 -0.6878 -0.8735 +-1.714 -1.624 -0.8249 -0.6878 -0.8481 +-1.699 -1.61 -0.8782 -0.6878 -0.8206 +-1.689 -1.601 -0.9267 -0.6878 -0.791 +-1.686 -1.598 -0.9702 -0.6878 -0.7594 +-1.689 -1.6 -1.009 -0.6878 -0.7259 +-1.698 -1.609 -1.042 -0.6878 -0.6907 +-1.714 -1.624 -1.069 -0.6878 -0.6536 +-1.736 -1.644 -1.092 -0.6878 -0.615 +-1.763 -1.671 -1.108 -0.6878 -0.5748 +-1.797 -1.702 -1.12 -0.6878 -0.5332 +-1.836 -1.739 -1.126 -0.6878 -0.4903 +-1.88 -1.781 -1.127 -0.6878 -0.4461 +-1.929 -1.827 -1.123 -0.6878 -0.4008 +-1.982 -1.878 -1.114 -0.6878 -0.3545 +-2.039 -1.932 -1.101 -0.6878 -0.3073 +-2.099 -1.989 -1.083 -0.6878 -0.2594 +-2.163 -2.049 -1.061 -0.6878 -0.2108 +-2.228 -2.111 -1.035 -0.6878 -0.1617 +-2.295 -2.174 -1.006 -0.6878 -0.1122 +-2.362 -2.238 -0.9732 -0.6878 -0.06235 +-2.43 -2.302 -0.9381 -0.6878 -0.01239 +-2.497 -2.366 -0.9005 -0.6878 0.0376 +-2.563 -2.428 -0.8609 -0.6878 0.0875 +-2.627 -2.489 -0.8196 -0.6878 0.1372 +-2.689 -2.548 -0.777 -0.6878 0.1865 +-2.748 -2.603 -0.7335 -0.6878 0.2354 +-2.802 -2.655 -0.6894 -0.6878 0.2837 +-2.853 -2.703 -0.6451 -0.6878 0.3312 +-2.899 -2.746 -0.601 -0.6878 0.378 +-2.939 -2.784 -0.5572 -0.6878 0.4238 +-2.973 -2.817 -0.5142 -0.6878 0.4685 +-3.002 -2.844 -0.4723 -0.6878 0.5121 +-3.024 -2.865 -0.4315 -0.6878 0.5544 +-3.039 -2.879 -0.3923 -0.6878 0.5953 +-3.047 -2.887 -0.3547 -0.6878 0.6347 +-3.048 -2.888 -0.319 -0.6878 0.6725 +-3.042 -2.882 -0.2852 -0.6878 0.7087 +-3.028 -2.869 -0.2535 -0.6878 0.743 +-3.008 -2.85 -0.2239 -0.6878 0.7756 +-2.98 -2.823 -0.1965 -0.6878 0.8061 +-2.946 -2.791 -0.1712 -0.6878 0.8347 +-2.905 -2.752 -0.1481 -0.6878 0.8612 +-2.858 -2.707 -0.127 -0.6878 0.8855 +-2.804 -2.657 -0.1079 -0.6878 0.9076 +-2.746 -2.602 -0.09059 -0.6878 0.9275 +-2.683 -2.541 -0.075 -0.6878 0.945 +-2.615 -2.477 -0.06094 -0.6878 0.9602 +-2.543 -2.409 -0.04821 -0.6878 0.9729 +-2.468 -2.339 -0.03661 -0.6878 0.9833 +-2.391 -2.265 -0.02591 -0.6878 0.9911 +-2.312 -2.19 -0.01588 -0.6878 0.9965 +-2.231 -2.114 -0.006271 -0.6878 0.9994 +-2.072 -2.17 0 -0.7232 1 +-1.995 -2.089 0.006688 -0.7232 0.9988 +-1.919 -2.009 0.01365 -0.7232 0.995 +-1.844 -1.931 0.02117 -0.7232 0.9888 +-1.771 -1.854 0.02951 -0.7232 0.9801 +-1.7 -1.78 0.03892 -0.7232 0.9689 +-1.633 -1.71 0.04964 -0.7232 0.9553 +-1.57 -1.644 0.0619 -0.7232 0.9394 +-1.511 -1.582 0.07591 -0.7232 0.9211 +-1.456 -1.525 0.09184 -0.7232 0.9004 +-1.407 -1.474 0.1099 -0.7232 0.8776 +-1.364 -1.428 0.1301 -0.7232 0.8525 +-1.327 -1.389 0.1526 -0.7232 0.8253 +-1.296 -1.357 0.1775 -0.7232 0.7961 +-1.271 -1.331 0.2047 -0.7232 0.7648 +-1.253 -1.312 0.2344 -0.7232 0.7317 +-1.242 -1.301 0.2664 -0.7232 0.6967 +-1.238 -1.297 0.3007 -0.7232 0.66 +-1.241 -1.299 0.3372 -0.7232 0.6216 +-1.25 -1.309 0.3757 -0.7232 0.5817 +-1.266 -1.326 0.416 -0.7232 0.5403 +-1.288 -1.349 0.458 -0.7232 0.4976 +-1.316 -1.379 0.5014 -0.7232 0.4536 +-1.351 -1.414 0.5459 -0.7232 0.4085 +-1.39 -1.455 0.5913 -0.7232 0.3624 +-1.434 -1.502 0.6371 -0.7232 0.3153 +-1.483 -1.553 0.6832 -0.7232 0.2675 +-1.536 -1.608 0.729 -0.7232 0.219 +-1.592 -1.667 0.7743 -0.7232 0.17 +-1.65 -1.728 0.8186 -0.7232 0.1205 +-1.711 -1.792 0.8616 -0.7232 0.07074 +-1.774 -1.858 0.9029 -0.7232 0.02079 +-1.838 -1.924 0.942 -0.7232 -0.0292 +-1.901 -1.991 0.9786 -0.7232 -0.07912 +-1.965 -2.057 1.012 -0.7232 -0.1288 +-2.027 -2.123 1.043 -0.7232 -0.1782 +-2.088 -2.187 1.069 -0.7232 -0.2272 +-2.147 -2.248 1.092 -0.7232 -0.2756 +-2.203 -2.307 1.111 -0.7232 -0.3233 +-2.256 -2.363 1.125 -0.7232 -0.3702 +-2.306 -2.414 1.134 -0.7232 -0.4161 +-2.351 -2.461 1.138 -0.7232 -0.4611 +-2.391 -2.504 1.136 -0.7232 -0.5048 +-2.426 -2.541 1.13 -0.7232 -0.5474 +-2.457 -2.572 1.118 -0.7232 -0.5885 +-2.481 -2.598 1.1 -0.7232 -0.6282 +-2.5 -2.618 1.076 -0.7232 -0.6663 +-2.514 -2.632 1.047 -0.7232 -0.7027 +-2.521 -2.64 1.013 -0.7232 -0.7374 +-2.523 -2.641 0.9728 -0.7232 -0.7702 +-2.518 -2.637 0.9274 -0.7232 -0.8011 +-2.508 -2.627 0.8769 -0.7232 -0.8301 +-2.493 -2.61 0.8214 -0.7232 -0.8569 +-2.472 -2.589 0.7613 -0.7232 -0.8816 +-2.447 -2.562 0.6969 -0.7232 -0.9041 +-2.416 -2.53 0.6284 -0.7232 -0.9243 +-2.382 -2.494 0.5563 -0.7232 -0.9422 +-2.344 -2.454 0.4809 -0.7232 -0.9578 +-2.302 -2.41 0.4027 -0.7232 -0.971 +-2.258 -2.364 0.3221 -0.7232 -0.9817 +-2.211 -2.315 0.2396 -0.7232 -0.99 +-2.163 -2.265 0.1557 -0.7232 -0.9958 +-2.113 -2.213 0.07091 -0.7232 -0.9991 +-2.064 -2.161 -0.01434 -0.7232 -1 +-2.014 -2.109 -0.09951 -0.7232 -0.9983 +-1.965 -2.057 -0.1841 -0.7232 -0.9941 +-1.917 -2.007 -0.2676 -0.7232 -0.9875 +-1.871 -1.959 -0.3495 -0.7232 -0.9784 +-1.828 -1.914 -0.4293 -0.7232 -0.9668 +-1.787 -1.871 -0.5066 -0.7232 -0.9528 +-1.75 -1.832 -0.5809 -0.7232 -0.9365 +-1.717 -1.798 -0.6518 -0.7232 -0.9178 +-1.688 -1.768 -0.719 -0.7232 -0.8968 +-1.664 -1.743 -0.782 -0.7232 -0.8735 +-1.645 -1.723 -0.8406 -0.7232 -0.8481 +-1.632 -1.708 -0.8944 -0.7232 -0.8206 +-1.624 -1.7 -0.9432 -0.7232 -0.791 +-1.621 -1.698 -0.9868 -0.7232 -0.7594 +-1.625 -1.701 -1.025 -0.7232 -0.7259 +-1.634 -1.711 -1.058 -0.7232 -0.6907 +-1.649 -1.727 -1.085 -0.7232 -0.6536 +-1.67 -1.749 -1.106 -0.7232 -0.615 +-1.697 -1.777 -1.122 -0.7232 -0.5748 +-1.729 -1.81 -1.133 -0.7232 -0.5332 +-1.766 -1.849 -1.137 -0.7232 -0.4903 +-1.808 -1.893 -1.137 -0.7232 -0.4461 +-1.854 -1.942 -1.131 -0.7232 -0.4008 +-1.905 -1.995 -1.12 -0.7232 -0.3545 +-1.959 -2.051 -1.105 -0.7232 -0.3073 +-2.016 -2.111 -1.085 -0.7232 -0.2594 +-2.076 -2.174 -1.061 -0.7232 -0.2108 +-2.137 -2.238 -1.033 -0.7232 -0.1617 +-2.2 -2.304 -1.001 -0.7232 -0.1122 +-2.264 -2.371 -0.9666 -0.7232 -0.06235 +-2.328 -2.437 -0.9291 -0.7232 -0.01239 +-2.391 -2.504 -0.8892 -0.7232 0.0376 +-2.453 -2.569 -0.8473 -0.7232 0.0875 +-2.514 -2.632 -0.8038 -0.7232 0.1372 +-2.572 -2.693 -0.7592 -0.7232 0.1865 +-2.626 -2.75 -0.7136 -0.7232 0.2354 +-2.678 -2.804 -0.6677 -0.7232 0.2837 +-2.725 -2.854 -0.6217 -0.7232 0.3312 +-2.768 -2.898 -0.576 -0.7232 0.378 +-2.805 -2.938 -0.5309 -0.7232 0.4238 +-2.838 -2.971 -0.4867 -0.7232 0.4685 +-2.864 -2.999 -0.4437 -0.7232 0.5121 +-2.884 -3.02 -0.4023 -0.7232 0.5544 +-2.898 -3.034 -0.3625 -0.7232 0.5953 +-2.905 -3.042 -0.3247 -0.7232 0.6347 +-2.905 -3.042 -0.2889 -0.7232 0.6725 +-2.899 -3.035 -0.2554 -0.7232 0.7087 +-2.885 -3.021 -0.2242 -0.7232 0.743 +-2.865 -3 -0.1953 -0.7232 0.7756 +-2.838 -2.972 -0.1688 -0.7232 0.8061 +-2.805 -2.937 -0.1447 -0.7232 0.8347 +-2.766 -2.896 -0.123 -0.7232 0.8612 +-2.721 -2.849 -0.1036 -0.7232 0.8855 +-2.67 -2.796 -0.08626 -0.7232 0.9076 +-2.614 -2.737 -0.07099 -0.7232 0.9275 +-2.553 -2.674 -0.05759 -0.7232 0.945 +-2.489 -2.606 -0.04587 -0.7232 0.9602 +-2.42 -2.534 -0.03562 -0.7232 0.9729 +-2.349 -2.46 -0.0266 -0.7232 0.9833 +-2.275 -2.382 -0.01857 -0.7232 0.9911 +-2.2 -2.303 -0.01126 -0.7232 0.9965 +-2.123 -2.223 -0.004422 -0.7232 0.9994 +-1.961 -2.27 0 -0.7568 1 +-1.888 -2.186 0.003901 -0.7568 0.9988 +-1.816 -2.102 0.008103 -0.7568 0.995 +-1.745 -2.02 0.0129 -0.7568 0.9888 +-1.675 -1.94 0.01859 -0.7568 0.9801 +-1.609 -1.863 0.02545 -0.7568 0.9689 +-1.545 -1.789 0.03374 -0.7568 0.9553 +-1.485 -1.719 0.04371 -0.7568 0.9394 +-1.429 -1.654 0.05557 -0.7568 0.9211 +-1.377 -1.594 0.06953 -0.7568 0.9004 +-1.33 -1.54 0.08576 -0.7568 0.8776 +-1.289 -1.492 0.1044 -0.7568 0.8525 +-1.253 -1.451 0.1256 -0.7568 0.8253 +-1.224 -1.417 0.1493 -0.7568 0.7961 +-1.2 -1.389 0.1757 -0.7568 0.7648 +-1.183 -1.369 0.2047 -0.7568 0.7317 +-1.172 -1.357 0.2363 -0.7568 0.6967 +-1.167 -1.351 0.2705 -0.7568 0.66 +-1.169 -1.354 0.307 -0.7568 0.6216 +-1.177 -1.363 0.3458 -0.7568 0.5817 +-1.192 -1.38 0.3867 -0.7568 0.5403 +-1.212 -1.403 0.4295 -0.7568 0.4976 +-1.238 -1.433 0.4739 -0.7568 0.4536 +-1.269 -1.47 0.5197 -0.7568 0.4085 +-1.306 -1.512 0.5664 -0.7568 0.3624 +-1.347 -1.56 0.6139 -0.7568 0.3153 +-1.392 -1.612 0.6616 -0.7568 0.2675 +-1.442 -1.669 0.7094 -0.7568 0.219 +-1.494 -1.73 0.7567 -0.7568 0.17 +-1.549 -1.793 0.8031 -0.7568 0.1205 +-1.606 -1.859 0.8483 -0.7568 0.07074 +-1.664 -1.927 0.8918 -0.7568 0.02079 +-1.724 -1.996 0.9332 -0.7568 -0.0292 +-1.784 -2.065 0.9721 -0.7568 -0.07912 +-1.843 -2.134 1.008 -0.7568 -0.1288 +-1.902 -2.202 1.041 -0.7568 -0.1782 +-1.959 -2.268 1.07 -0.7568 -0.2272 +-2.014 -2.332 1.095 -0.7568 -0.2756 +-2.067 -2.393 1.115 -0.7568 -0.3233 +-2.117 -2.451 1.131 -0.7568 -0.3702 +-2.163 -2.505 1.142 -0.7568 -0.4161 +-2.206 -2.554 1.147 -0.7568 -0.4611 +-2.244 -2.598 1.148 -0.7568 -0.5048 +-2.278 -2.637 1.142 -0.7568 -0.5474 +-2.307 -2.671 1.131 -0.7568 -0.5885 +-2.33 -2.698 1.114 -0.7568 -0.6282 +-2.349 -2.719 1.092 -0.7568 -0.6663 +-2.362 -2.734 1.063 -0.7568 -0.7027 +-2.369 -2.743 1.029 -0.7568 -0.7374 +-2.371 -2.746 0.9888 -0.7568 -0.7702 +-2.368 -2.742 0.9432 -0.7568 -0.8011 +-2.359 -2.732 0.8924 -0.7568 -0.8301 +-2.346 -2.716 0.8364 -0.7568 -0.8569 +-2.327 -2.694 0.7756 -0.7568 -0.8816 +-2.304 -2.668 0.7102 -0.7568 -0.9041 +-2.276 -2.636 0.6407 -0.7568 -0.9243 +-2.245 -2.599 0.5673 -0.7568 -0.9422 +-2.21 -2.559 0.4906 -0.7568 -0.9578 +-2.172 -2.515 0.4109 -0.7568 -0.971 +-2.131 -2.468 0.3287 -0.7568 -0.9817 +-2.089 -2.418 0.2446 -0.7568 -0.99 +-2.044 -2.367 0.159 -0.7568 -0.9958 +-1.999 -2.314 0.07239 -0.7568 -0.9991 +-1.953 -2.261 -0.01464 -0.7568 -1 +-1.908 -2.209 -0.1016 -0.7568 -0.9983 +-1.863 -2.156 -0.1879 -0.7568 -0.9941 +-1.819 -2.106 -0.2731 -0.7568 -0.9875 +-1.777 -2.057 -0.3566 -0.7568 -0.9784 +-1.737 -2.011 -0.438 -0.7568 -0.9668 +-1.7 -1.968 -0.5167 -0.7568 -0.9528 +-1.666 -1.929 -0.5924 -0.7568 -0.9365 +-1.636 -1.894 -0.6645 -0.7568 -0.9178 +-1.61 -1.864 -0.7327 -0.7568 -0.8968 +-1.588 -1.838 -0.7965 -0.7568 -0.8735 +-1.571 -1.819 -0.8558 -0.7568 -0.8481 +-1.559 -1.805 -0.9101 -0.7568 -0.8206 +-1.552 -1.797 -0.9592 -0.7568 -0.791 +-1.551 -1.795 -1.003 -0.7568 -0.7594 +-1.555 -1.8 -1.041 -0.7568 -0.7259 +-1.564 -1.811 -1.073 -0.7568 -0.6907 +-1.579 -1.828 -1.1 -0.7568 -0.6536 +-1.599 -1.851 -1.121 -0.7568 -0.615 +-1.624 -1.881 -1.136 -0.7568 -0.5748 +-1.655 -1.916 -1.145 -0.7568 -0.5332 +-1.69 -1.957 -1.148 -0.7568 -0.4903 +-1.73 -2.003 -1.146 -0.7568 -0.4461 +-1.774 -2.054 -1.139 -0.7568 -0.4008 +-1.821 -2.109 -1.126 -0.7568 -0.3545 +-1.872 -2.168 -1.109 -0.7568 -0.3073 +-1.926 -2.23 -1.087 -0.7568 -0.2594 +-1.982 -2.295 -1.06 -0.7568 -0.2108 +-2.04 -2.362 -1.03 -0.7568 -0.1617 +-2.099 -2.43 -0.9963 -0.7568 -0.1122 +-2.158 -2.499 -0.9593 -0.7568 -0.06235 +-2.218 -2.568 -0.9195 -0.7568 -0.01239 +-2.277 -2.637 -0.8774 -0.7568 0.0376 +-2.336 -2.704 -0.8333 -0.7568 0.0875 +-2.392 -2.769 -0.7876 -0.7568 0.1372 +-2.446 -2.832 -0.7408 -0.7568 0.1865 +-2.497 -2.891 -0.6933 -0.7568 0.2354 +-2.545 -2.947 -0.6456 -0.7568 0.2837 +-2.589 -2.998 -0.5978 -0.7568 0.3312 +-2.629 -3.044 -0.5506 -0.7568 0.378 +-2.664 -3.084 -0.5041 -0.7568 0.4238 +-2.693 -3.118 -0.4588 -0.7568 0.4685 +-2.717 -3.146 -0.4149 -0.7568 0.5121 +-2.736 -3.168 -0.3728 -0.7568 0.5544 +-2.748 -3.182 -0.3325 -0.7568 0.5953 +-2.754 -3.189 -0.2945 -0.7568 0.6347 +-2.754 -3.189 -0.2587 -0.7568 0.6725 +-2.747 -3.181 -0.2254 -0.7568 0.7087 +-2.734 -3.166 -0.1947 -0.7568 0.743 +-2.715 -3.143 -0.1665 -0.7568 0.7756 +-2.689 -3.113 -0.141 -0.7568 0.8061 +-2.657 -3.076 -0.1182 -0.7568 0.8347 +-2.62 -3.033 -0.09786 -0.7568 0.8612 +-2.576 -2.983 -0.08004 -0.7568 0.8855 +-2.528 -2.927 -0.06459 -0.7568 0.9076 +-2.475 -2.865 -0.05136 -0.7568 0.9275 +-2.417 -2.799 -0.04015 -0.7568 0.945 +-2.356 -2.728 -0.03078 -0.7568 0.9602 +-2.291 -2.653 -0.023 -0.7568 0.9729 +-2.223 -2.574 -0.01656 -0.7568 0.9833 +-2.154 -2.493 -0.0112 -0.7568 0.9911 +-2.082 -2.411 -0.006637 -0.7568 0.9965 +-2.009 -2.326 -0.00257 -0.7568 0.9994 +-1.845 -2.366 0 -0.7885 1 +-1.776 -2.278 0.00111 -0.7885 0.9988 +-1.708 -2.19 0.002546 -0.7885 0.995 +-1.641 -2.104 0.004628 -0.7885 0.9888 +-1.576 -2.021 0.00767 -0.7885 0.9801 +-1.513 -1.94 0.01197 -0.7885 0.9689 +-1.453 -1.863 0.01782 -0.7885 0.9553 +-1.396 -1.79 0.02548 -0.7885 0.9394 +-1.343 -1.723 0.0352 -0.7885 0.9211 +-1.295 -1.66 0.04718 -0.7885 0.9004 +-1.251 -1.603 0.06162 -0.7885 0.8776 +-1.211 -1.553 0.07868 -0.7885 0.8525 +-1.178 -1.51 0.09846 -0.7885 0.8253 +-1.149 -1.473 0.1211 -0.7885 0.7961 +-1.127 -1.444 0.1465 -0.7885 0.7648 +-1.11 -1.423 0.1749 -0.7885 0.7317 +-1.099 -1.409 0.2061 -0.7885 0.6967 +-1.094 -1.403 0.24 -0.7885 0.66 +-1.095 -1.405 0.2766 -0.7885 0.6216 +-1.103 -1.414 0.3158 -0.7885 0.5817 +-1.115 -1.43 0.3572 -0.7885 0.5403 +-1.134 -1.454 0.4007 -0.7885 0.4976 +-1.158 -1.484 0.4461 -0.7885 0.4536 +-1.187 -1.521 0.493 -0.7885 0.4085 +-1.22 -1.565 0.5412 -0.7885 0.3624 +-1.258 -1.613 0.5902 -0.7885 0.3153 +-1.3 -1.667 0.6397 -0.7885 0.2675 +-1.346 -1.725 0.6893 -0.7885 0.219 +-1.394 -1.787 0.7386 -0.7885 0.17 +-1.445 -1.853 0.7871 -0.7885 0.1205 +-1.498 -1.92 0.8344 -0.7885 0.07074 +-1.552 -1.99 0.8802 -0.7885 0.02079 +-1.608 -2.061 0.9238 -0.7885 -0.0292 +-1.663 -2.132 0.965 -0.7885 -0.07912 +-1.719 -2.204 1.003 -0.7885 -0.1288 +-1.773 -2.274 1.038 -0.7885 -0.1782 +-1.827 -2.342 1.069 -0.7885 -0.2272 +-1.878 -2.408 1.096 -0.7885 -0.2756 +-1.928 -2.472 1.119 -0.7885 -0.3233 +-1.974 -2.532 1.137 -0.7885 -0.3702 +-2.018 -2.587 1.149 -0.7885 -0.4161 +-2.058 -2.638 1.156 -0.7885 -0.4611 +-2.094 -2.685 1.158 -0.7885 -0.5048 +-2.126 -2.725 1.154 -0.7885 -0.5474 +-2.153 -2.76 1.144 -0.7885 -0.5885 +-2.175 -2.789 1.128 -0.7885 -0.6282 +-2.193 -2.812 1.106 -0.7885 -0.6663 +-2.206 -2.828 1.078 -0.7885 -0.7027 +-2.213 -2.838 1.044 -0.7885 -0.7374 +-2.216 -2.841 1.004 -0.7885 -0.7702 +-2.213 -2.838 0.9585 -0.7885 -0.8011 +-2.206 -2.829 0.9073 -0.7885 -0.8301 +-2.194 -2.813 0.8508 -0.7885 -0.8569 +-2.178 -2.792 0.7893 -0.7885 -0.8816 +-2.157 -2.765 0.7231 -0.7885 -0.9041 +-2.132 -2.733 0.6525 -0.7885 -0.9243 +-2.103 -2.697 0.578 -0.7885 -0.9422 +-2.072 -2.656 0.4999 -0.7885 -0.9578 +-2.037 -2.612 0.4188 -0.7885 -0.971 +-2 -2.565 0.3352 -0.7885 -0.9817 +-1.961 -2.515 0.2494 -0.7885 -0.99 +-1.921 -2.463 0.1621 -0.7885 -0.9958 +-1.88 -2.41 0.07382 -0.7885 -0.9991 +-1.838 -2.357 -0.01493 -0.7885 -1 +-1.796 -2.303 -0.1036 -0.7885 -0.9983 +-1.755 -2.251 -0.1916 -0.7885 -0.9941 +-1.715 -2.199 -0.2784 -0.7885 -0.9875 +-1.677 -2.15 -0.3636 -0.7885 -0.9784 +-1.641 -2.104 -0.4464 -0.7885 -0.9668 +-1.607 -2.061 -0.5266 -0.7885 -0.9528 +-1.577 -2.021 -0.6035 -0.7885 -0.9365 +-1.549 -1.986 -0.6767 -0.7885 -0.9178 +-1.526 -1.956 -0.7459 -0.7885 -0.8968 +-1.506 -1.931 -0.8106 -0.7885 -0.8735 +-1.491 -1.912 -0.8704 -0.7885 -0.8481 +-1.481 -1.899 -0.9252 -0.7885 -0.8206 +-1.475 -1.891 -0.9745 -0.7885 -0.791 +-1.474 -1.89 -1.018 -0.7885 -0.7594 +-1.479 -1.896 -1.056 -0.7885 -0.7259 +-1.488 -1.908 -1.088 -0.7885 -0.6907 +-1.502 -1.926 -1.114 -0.7885 -0.6536 +-1.522 -1.951 -1.134 -0.7885 -0.615 +-1.546 -1.982 -1.148 -0.7885 -0.5748 +-1.575 -2.019 -1.156 -0.7885 -0.5332 +-1.608 -2.062 -1.158 -0.7885 -0.4903 +-1.645 -2.109 -1.155 -0.7885 -0.4461 +-1.686 -2.162 -1.145 -0.7885 -0.4008 +-1.731 -2.219 -1.131 -0.7885 -0.3545 +-1.779 -2.28 -1.112 -0.7885 -0.3073 +-1.829 -2.345 -1.088 -0.7885 -0.2594 +-1.881 -2.412 -1.059 -0.7885 -0.2108 +-1.935 -2.481 -1.027 -0.7885 -0.1617 +-1.99 -2.551 -0.9907 -0.7885 -0.1122 +-2.046 -2.623 -0.9515 -0.7885 -0.06235 +-2.101 -2.694 -0.9094 -0.7885 -0.01239 +-2.156 -2.765 -0.865 -0.7885 0.0376 +-2.21 -2.834 -0.8187 -0.7885 0.0875 +-2.262 -2.901 -0.7709 -0.7885 0.1372 +-2.313 -2.965 -0.7221 -0.7885 0.1865 +-2.36 -3.026 -0.6726 -0.7885 0.2354 +-2.404 -3.083 -0.623 -0.7885 0.2837 +-2.445 -3.135 -0.5736 -0.7885 0.3312 +-2.482 -3.182 -0.5249 -0.7885 0.378 +-2.514 -3.223 -0.4771 -0.7885 0.4238 +-2.541 -3.258 -0.4307 -0.7885 0.4685 +-2.563 -3.286 -0.3859 -0.7885 0.5121 +-2.58 -3.307 -0.343 -0.7885 0.5544 +-2.591 -3.321 -0.3023 -0.7885 0.5953 +-2.596 -3.328 -0.264 -0.7885 0.6347 +-2.595 -3.327 -0.2283 -0.7885 0.6725 +-2.588 -3.318 -0.1953 -0.7885 0.7087 +-2.575 -3.302 -0.165 -0.7885 0.743 +-2.556 -3.278 -0.1377 -0.7885 0.7756 +-2.532 -3.246 -0.1131 -0.7885 0.8061 +-2.502 -3.208 -0.0915 -0.7885 0.8347 +-2.466 -3.162 -0.07264 -0.7885 0.8612 +-2.425 -3.109 -0.05648 -0.7885 0.8855 +-2.379 -3.051 -0.04289 -0.7885 0.9076 +-2.329 -2.986 -0.03169 -0.7885 0.9275 +-2.275 -2.917 -0.02269 -0.7885 0.945 +-2.217 -2.842 -0.01567 -0.7885 0.9602 +-2.156 -2.764 -0.01037 -0.7885 0.9729 +-2.092 -2.682 -0.006521 -0.7885 0.9833 +-2.026 -2.598 -0.003836 -0.7885 0.9911 +-1.959 -2.512 -0.002007 -0.7885 0.9965 +-1.891 -2.424 -0.0007167 -0.7885 0.9994 +-1.724 -2.455 0 -0.8183 1 +-1.66 -2.363 -0.001681 -0.8183 0.9988 +-1.597 -2.273 -0.003013 -0.8183 0.995 +-1.534 -2.184 -0.003651 -0.8183 0.9888 +-1.473 -2.097 -0.003258 -0.8183 0.9801 +-1.414 -2.013 -0.001513 -0.8183 0.9689 +-1.358 -1.933 0.001892 -0.8183 0.9553 +-1.305 -1.858 0.007243 -0.8183 0.9394 +-1.255 -1.787 0.0148 -0.8183 0.9211 +-1.21 -1.722 0.0248 -0.8183 0.9004 +-1.168 -1.663 0.03744 -0.8183 0.8776 +-1.131 -1.611 0.0529 -0.8183 0.8525 +-1.099 -1.565 0.0713 -0.8183 0.8253 +-1.073 -1.527 0.09275 -0.8183 0.7961 +-1.051 -1.496 0.1173 -0.8183 0.7648 +-1.035 -1.473 0.1449 -0.8183 0.7317 +-1.024 -1.458 0.1757 -0.8183 0.6967 +-1.02 -1.451 0.2094 -0.8183 0.66 +-1.02 -1.452 0.2461 -0.8183 0.6216 +-1.026 -1.461 0.2855 -0.8183 0.5817 +-1.038 -1.477 0.3274 -0.8183 0.5403 +-1.054 -1.501 0.3717 -0.8183 0.4976 +-1.076 -1.532 0.418 -0.8183 0.4536 +-1.102 -1.569 0.4661 -0.8183 0.4085 +-1.133 -1.613 0.5156 -0.8183 0.3624 +-1.168 -1.662 0.5662 -0.8183 0.3153 +-1.206 -1.717 0.6173 -0.8183 0.2675 +-1.248 -1.776 0.6688 -0.8183 0.219 +-1.292 -1.84 0.72 -0.8183 0.17 +-1.339 -1.907 0.7706 -0.8183 0.1205 +-1.388 -1.976 0.8201 -0.8183 0.07074 +-1.438 -2.047 0.868 -0.8183 0.02079 +-1.489 -2.12 0.9139 -0.8183 -0.0292 +-1.541 -2.193 0.9573 -0.8183 -0.07912 +-1.592 -2.266 0.9978 -0.8183 -0.1288 +-1.643 -2.338 1.035 -0.8183 -0.1782 +-1.692 -2.409 1.068 -0.8183 -0.2272 +-1.74 -2.477 1.097 -0.8183 -0.2756 +-1.786 -2.542 1.122 -0.8183 -0.3233 +-1.829 -2.604 1.141 -0.8183 -0.3702 +-1.87 -2.661 1.156 -0.8183 -0.4161 +-1.907 -2.714 1.165 -0.8183 -0.4611 +-1.94 -2.762 1.168 -0.8183 -0.5048 +-1.97 -2.804 1.165 -0.8183 -0.5474 +-1.996 -2.841 1.156 -0.8183 -0.5885 +-2.017 -2.871 1.141 -0.8183 -0.6282 +-2.034 -2.895 1.12 -0.8183 -0.6663 +-2.046 -2.912 1.092 -0.8183 -0.7027 +-2.054 -2.923 1.059 -0.8183 -0.7374 +-2.057 -2.928 1.019 -0.8183 -0.7702 +-2.055 -2.925 0.9732 -0.8183 -0.8011 +-2.049 -2.917 0.9217 -0.8183 -0.8301 +-2.038 -2.902 0.8648 -0.8183 -0.8569 +-2.024 -2.881 0.8026 -0.8183 -0.8816 +-2.005 -2.855 0.7355 -0.8183 -0.9041 +-1.983 -2.823 0.664 -0.8183 -0.9243 +-1.958 -2.787 0.5883 -0.8183 -0.9422 +-1.929 -2.746 0.509 -0.8183 -0.9578 +-1.898 -2.702 0.4265 -0.8183 -0.971 +-1.865 -2.654 0.3414 -0.8183 -0.9817 +-1.83 -2.604 0.2541 -0.8183 -0.99 +-1.793 -2.553 0.1652 -0.8183 -0.9958 +-1.756 -2.499 0.07521 -0.8183 -0.9991 +-1.718 -2.446 -0.01521 -0.8183 -1 +-1.68 -2.392 -0.1055 -0.8183 -0.9983 +-1.643 -2.339 -0.1952 -0.8183 -0.9941 +-1.607 -2.288 -0.2836 -0.8183 -0.9875 +-1.573 -2.239 -0.3703 -0.8183 -0.9784 +-1.54 -2.192 -0.4546 -0.8183 -0.9668 +-1.51 -2.149 -0.5361 -0.8183 -0.9528 +-1.482 -2.11 -0.6142 -0.8183 -0.9365 +-1.458 -2.075 -0.6885 -0.8183 -0.9178 +-1.437 -2.045 -0.7586 -0.8183 -0.8968 +-1.42 -2.021 -0.8241 -0.8183 -0.8735 +-1.406 -2.002 -0.8845 -0.8183 -0.8481 +-1.398 -1.989 -0.9397 -0.8183 -0.8206 +-1.393 -1.983 -0.9892 -0.8183 -0.791 +-1.393 -1.983 -1.033 -0.8183 -0.7594 +-1.397 -1.989 -1.071 -0.8183 -0.7259 +-1.407 -2.002 -1.102 -0.8183 -0.6907 +-1.42 -2.022 -1.128 -0.8183 -0.6536 +-1.439 -2.048 -1.147 -0.8183 -0.615 +-1.461 -2.08 -1.16 -0.8183 -0.5748 +-1.489 -2.119 -1.167 -0.8183 -0.5332 +-1.52 -2.163 -1.167 -0.8183 -0.4903 +-1.554 -2.213 -1.162 -0.8183 -0.4461 +-1.593 -2.267 -1.152 -0.8183 -0.4008 +-1.634 -2.326 -1.135 -0.8183 -0.3545 +-1.678 -2.389 -1.114 -0.8183 -0.3073 +-1.725 -2.455 -1.088 -0.8183 -0.2594 +-1.773 -2.524 -1.057 -0.8183 -0.2108 +-1.823 -2.595 -1.023 -0.8183 -0.1617 +-1.874 -2.668 -0.9845 -0.8183 -0.1122 +-1.926 -2.741 -0.943 -0.8183 -0.06235 +-1.977 -2.814 -0.8987 -0.8183 -0.01239 +-2.028 -2.886 -0.8521 -0.8183 0.0376 +-2.077 -2.957 -0.8036 -0.8183 0.0875 +-2.126 -3.026 -0.7537 -0.8183 0.1372 +-2.172 -3.092 -0.7028 -0.8183 0.1865 +-2.215 -3.154 -0.6515 -0.8183 0.2354 +-2.256 -3.212 -0.6001 -0.8183 0.2837 +-2.293 -3.265 -0.5491 -0.8183 0.3312 +-2.327 -3.312 -0.4988 -0.8183 0.378 +-2.356 -3.354 -0.4498 -0.8183 0.4238 +-2.381 -3.389 -0.4023 -0.8183 0.4685 +-2.401 -3.418 -0.3566 -0.8183 0.5121 +-2.416 -3.439 -0.3131 -0.8183 0.5544 +-2.425 -3.453 -0.2719 -0.8183 0.5953 +-2.43 -3.459 -0.2334 -0.8183 0.6347 +-2.428 -3.457 -0.1977 -0.8183 0.6725 +-2.422 -3.447 -0.165 -0.8183 0.7087 +-2.409 -3.429 -0.1353 -0.8183 0.743 +-2.391 -3.404 -0.1087 -0.8183 0.7756 +-2.368 -3.371 -0.08519 -0.8183 0.8061 +-2.339 -3.33 -0.06478 -0.8183 0.8347 +-2.306 -3.282 -0.04738 -0.8183 0.8612 +-2.267 -3.228 -0.03289 -0.8183 0.8855 +-2.224 -3.166 -0.02115 -0.8183 0.9076 +-2.177 -3.099 -0.012 -0.8183 0.9275 +-2.126 -3.027 -0.00521 -0.8183 0.945 +-2.072 -2.95 -0.0005437 -0.8183 0.9602 +-2.015 -2.869 0.00227 -0.8183 0.9729 +-1.955 -2.784 0.003526 -0.8183 0.9833 +-1.894 -2.696 0.003534 -0.8183 0.9911 +-1.831 -2.606 0.002625 -0.8183 0.9965 +-1.767 -2.516 0.001137 -0.8183 0.9994 +-1.6 -2.538 0 -0.846 1 +-1.54 -2.444 -0.004471 -0.846 0.9988 +-1.481 -2.35 -0.008569 -0.846 0.995 +-1.423 -2.258 -0.01193 -0.846 0.9888 +-1.367 -2.168 -0.01419 -0.846 0.9801 +-1.312 -2.082 -0.015 -0.846 0.9689 +-1.26 -1.999 -0.01404 -0.846 0.9553 +-1.211 -1.921 -0.011 -0.846 0.9394 +-1.164 -1.847 -0.005603 -0.846 0.9211 +-1.122 -1.78 0.002405 -0.846 0.9004 +-1.083 -1.719 0.01324 -0.846 0.8776 +-1.049 -1.664 0.02709 -0.846 0.8525 +-1.019 -1.617 0.0441 -0.846 0.8253 +-0.9939 -1.577 0.06437 -0.846 0.7961 +-0.9736 -1.545 0.08797 -0.846 0.7648 +-0.9584 -1.521 0.1149 -0.846 0.7317 +-0.9482 -1.504 0.1452 -0.846 0.6967 +-0.9431 -1.496 0.1787 -0.846 0.66 +-0.9432 -1.496 0.2154 -0.846 0.6216 +-0.9483 -1.505 0.255 -0.846 0.5817 +-0.9584 -1.521 0.2975 -0.846 0.5403 +-0.9732 -1.544 0.3425 -0.846 0.4976 +-0.9926 -1.575 0.3897 -0.846 0.4536 +-1.016 -1.613 0.4389 -0.846 0.4085 +-1.044 -1.657 0.4897 -0.846 0.3624 +-1.076 -1.707 0.5418 -0.846 0.3153 +-1.111 -1.762 0.5946 -0.846 0.2675 +-1.149 -1.823 0.6478 -0.846 0.219 +-1.189 -1.887 0.701 -0.846 0.17 +-1.232 -1.955 0.7536 -0.846 0.1205 +-1.277 -2.026 0.8052 -0.846 0.07074 +-1.323 -2.099 0.8553 -0.846 0.02079 +-1.369 -2.173 0.9034 -0.846 -0.0292 +-1.416 -2.247 0.949 -0.846 -0.07912 +-1.463 -2.322 0.9917 -0.846 -0.1288 +-1.51 -2.396 1.031 -0.846 -0.1782 +-1.555 -2.468 1.066 -0.846 -0.2272 +-1.599 -2.538 1.098 -0.846 -0.2756 +-1.642 -2.604 1.124 -0.846 -0.3233 +-1.681 -2.668 1.146 -0.846 -0.3702 +-1.719 -2.727 1.162 -0.846 -0.4161 +-1.753 -2.781 1.172 -0.846 -0.4611 +-1.784 -2.831 1.177 -0.846 -0.5048 +-1.812 -2.875 1.175 -0.846 -0.5474 +-1.836 -2.912 1.168 -0.846 -0.5885 +-1.856 -2.944 1.154 -0.846 -0.6282 +-1.871 -2.969 1.133 -0.846 -0.6663 +-1.883 -2.988 1.106 -0.846 -0.7027 +-1.891 -3 1.073 -0.846 -0.7374 +-1.894 -3.005 1.033 -0.846 -0.7702 +-1.893 -3.004 0.9873 -0.846 -0.8011 +-1.888 -2.996 0.9356 -0.846 -0.8301 +-1.879 -2.982 0.8782 -0.846 -0.8569 +-1.867 -2.961 0.8154 -0.846 -0.8816 +-1.85 -2.936 0.7475 -0.846 -0.9041 +-1.831 -2.905 0.675 -0.846 -0.9243 +-1.808 -2.869 0.5983 -0.846 -0.9422 +-1.783 -2.828 0.5177 -0.846 -0.9578 +-1.755 -2.784 0.4339 -0.846 -0.971 +-1.725 -2.737 0.3474 -0.846 -0.9817 +-1.694 -2.687 0.2585 -0.846 -0.99 +-1.661 -2.635 0.1681 -0.846 -0.9958 +-1.628 -2.583 0.07655 -0.846 -0.9991 +-1.594 -2.529 -0.01548 -0.846 -1 +-1.56 -2.475 -0.1074 -0.846 -0.9983 +-1.527 -2.423 -0.1987 -0.846 -0.9941 +-1.495 -2.372 -0.2886 -0.846 -0.9875 +-1.464 -2.323 -0.3767 -0.846 -0.9784 +-1.435 -2.276 -0.4625 -0.846 -0.9668 +-1.408 -2.234 -0.5452 -0.846 -0.9528 +-1.383 -2.195 -0.6245 -0.846 -0.9365 +-1.362 -2.16 -0.6999 -0.846 -0.9178 +-1.343 -2.131 -0.7709 -0.846 -0.8968 +-1.328 -2.107 -0.8371 -0.846 -0.8735 +-1.317 -2.089 -0.8981 -0.846 -0.8481 +-1.309 -2.077 -0.9536 -0.846 -0.8206 +-1.305 -2.071 -1.003 -0.846 -0.791 +-1.306 -2.072 -1.047 -0.846 -0.7594 +-1.311 -2.079 -1.085 -0.846 -0.7259 +-1.32 -2.094 -1.116 -0.846 -0.6907 +-1.333 -2.114 -1.141 -0.846 -0.6536 +-1.35 -2.142 -1.159 -0.846 -0.615 +-1.371 -2.176 -1.171 -0.846 -0.5748 +-1.396 -2.215 -1.177 -0.846 -0.5332 +-1.425 -2.261 -1.176 -0.846 -0.4903 +-1.457 -2.312 -1.169 -0.846 -0.4461 +-1.493 -2.368 -1.157 -0.846 -0.4008 +-1.531 -2.429 -1.139 -0.846 -0.3545 +-1.572 -2.494 -1.116 -0.846 -0.3073 +-1.615 -2.562 -1.088 -0.846 -0.2594 +-1.659 -2.632 -1.055 -0.846 -0.2108 +-1.705 -2.705 -1.018 -0.846 -0.1617 +-1.752 -2.779 -0.9777 -0.846 -0.1122 +-1.799 -2.854 -0.934 -0.846 -0.06235 +-1.846 -2.928 -0.8875 -0.846 -0.01239 +-1.892 -3.002 -0.8386 -0.846 0.0376 +-1.938 -3.074 -0.788 -0.846 0.0875 +-1.982 -3.144 -0.736 -0.846 0.1372 +-2.024 -3.211 -0.6831 -0.846 0.1865 +-2.064 -3.274 -0.6299 -0.846 0.2354 +-2.101 -3.333 -0.5768 -0.846 0.2837 +-2.135 -3.387 -0.5242 -0.846 0.3312 +-2.165 -3.435 -0.4725 -0.846 0.378 +-2.191 -3.477 -0.4222 -0.846 0.4238 +-2.214 -3.512 -0.3736 -0.846 0.4685 +-2.232 -3.541 -0.3271 -0.846 0.5121 +-2.245 -3.562 -0.2829 -0.846 0.5544 +-2.253 -3.575 -0.2414 -0.846 0.5953 +-2.257 -3.58 -0.2027 -0.846 0.6347 +-2.255 -3.578 -0.1671 -0.846 0.6725 +-2.248 -3.567 -0.1346 -0.846 0.7087 +-2.236 -3.548 -0.1055 -0.846 0.743 +-2.219 -3.521 -0.07966 -0.846 0.7756 +-2.197 -3.486 -0.05719 -0.846 0.8061 +-2.171 -3.444 -0.03802 -0.846 0.8347 +-2.139 -3.394 -0.02209 -0.846 0.8612 +-2.103 -3.337 -0.00927 -0.846 0.8855 +-2.063 -3.274 0.0005938 -0.846 0.9076 +-2.02 -3.204 0.007698 -0.846 0.9275 +-1.972 -3.129 0.01227 -0.846 0.945 +-1.922 -3.05 0.01458 -0.846 0.9602 +-1.869 -2.965 0.01491 -0.846 0.9729 +-1.814 -2.878 0.01357 -0.846 0.9833 +-1.757 -2.787 0.0109 -0.846 0.9911 +-1.698 -2.695 0.007255 -0.846 0.9965 +-1.639 -2.601 0.00299 -0.846 0.9994 +-1.471 -2.615 0 -0.8716 1 +-1.416 -2.518 -0.007258 -0.8716 0.9988 +-1.362 -2.421 -0.01412 -0.8716 0.995 +-1.309 -2.327 -0.0202 -0.8716 0.9888 +-1.257 -2.234 -0.0251 -0.8716 0.9801 +-1.207 -2.145 -0.02847 -0.8716 0.9689 +-1.159 -2.06 -0.02996 -0.8716 0.9553 +-1.113 -1.979 -0.02924 -0.8716 0.9394 +-1.071 -1.904 -0.026 -0.8716 0.9211 +-1.032 -1.834 -0.01999 -0.8716 0.9004 +-0.996 -1.771 -0.01097 -0.8716 0.8776 +-0.9643 -1.714 0.001266 -0.8716 0.8525 +-0.9366 -1.665 0.01687 -0.8716 0.8253 +-0.9132 -1.624 0.03595 -0.8716 0.7961 +-0.8943 -1.59 0.05859 -0.8716 0.7648 +-0.8799 -1.564 0.08482 -0.8716 0.7317 +-0.8702 -1.547 0.1146 -0.8716 0.6967 +-0.8652 -1.538 0.1479 -0.8716 0.66 +-0.8648 -1.537 0.1845 -0.8716 0.6216 +-0.869 -1.545 0.2244 -0.8716 0.5817 +-0.8777 -1.56 0.2673 -0.8716 0.5403 +-0.8908 -1.584 0.313 -0.8716 0.4976 +-0.908 -1.614 0.3611 -0.8716 0.4536 +-0.9293 -1.652 0.4114 -0.8716 0.4085 +-0.9542 -1.696 0.4635 -0.8716 0.3624 +-0.9826 -1.747 0.517 -0.8716 0.3153 +-1.014 -1.803 0.5715 -0.8716 0.2675 +-1.048 -1.864 0.6265 -0.8716 0.219 +-1.085 -1.929 0.6815 -0.8716 0.17 +-1.124 -1.998 0.7361 -0.8716 0.1205 +-1.164 -2.07 0.7898 -0.8716 0.07074 +-1.206 -2.144 0.842 -0.8716 0.02079 +-1.248 -2.219 0.8923 -0.8716 -0.0292 +-1.291 -2.295 0.9401 -0.8716 -0.07912 +-1.333 -2.371 0.985 -0.8716 -0.1288 +-1.376 -2.446 1.026 -0.8716 -0.1782 +-1.417 -2.519 1.064 -0.8716 -0.2272 +-1.457 -2.59 1.097 -0.8716 -0.2756 +-1.496 -2.659 1.126 -0.8716 -0.3233 +-1.532 -2.723 1.149 -0.8716 -0.3702 +-1.566 -2.784 1.167 -0.8716 -0.4161 +-1.597 -2.84 1.179 -0.8716 -0.4611 +-1.626 -2.891 1.185 -0.8716 -0.5048 +-1.651 -2.936 1.185 -0.8716 -0.5474 +-1.673 -2.975 1.178 -0.8716 -0.5885 +-1.692 -3.008 1.165 -0.8716 -0.6282 +-1.707 -3.034 1.145 -0.8716 -0.6663 +-1.718 -3.054 1.119 -0.8716 -0.7027 +-1.725 -3.067 1.086 -0.8716 -0.7374 +-1.729 -3.073 1.047 -0.8716 -0.7702 +-1.728 -3.073 1.001 -0.8716 -0.8011 +-1.725 -3.066 0.9488 -0.8716 -0.8301 +-1.717 -3.053 0.891 -0.8716 -0.8569 +-1.706 -3.033 0.8276 -0.8716 -0.8816 +-1.692 -3.008 0.759 -0.8716 -0.9041 +-1.675 -2.978 0.6856 -0.8716 -0.9243 +-1.655 -2.942 0.6079 -0.8716 -0.9422 +-1.633 -2.903 0.5262 -0.8716 -0.9578 +-1.608 -2.859 0.4411 -0.8716 -0.971 +-1.582 -2.812 0.3531 -0.8716 -0.9817 +-1.554 -2.763 0.2629 -0.8716 -0.99 +-1.525 -2.712 0.1709 -0.8716 -0.9958 +-1.496 -2.659 0.07784 -0.8716 -0.9991 +-1.466 -2.606 -0.01575 -0.8716 -1 +-1.436 -2.553 -0.1092 -0.8716 -0.9983 +-1.407 -2.5 -0.202 -0.8716 -0.9941 +-1.378 -2.45 -0.2934 -0.8716 -0.9875 +-1.351 -2.401 -0.383 -0.8716 -0.9784 +-1.325 -2.355 -0.47 -0.8716 -0.9668 +-1.301 -2.313 -0.554 -0.8716 -0.9528 +-1.28 -2.275 -0.6345 -0.8716 -0.9365 +-1.261 -2.241 -0.7108 -0.8716 -0.9178 +-1.244 -2.212 -0.7827 -0.8716 -0.8968 +-1.231 -2.189 -0.8495 -0.8716 -0.8735 +-1.222 -2.172 -0.9111 -0.8716 -0.8481 +-1.215 -2.161 -0.9669 -0.8716 -0.8206 +-1.213 -2.156 -1.017 -0.8716 -0.791 +-1.214 -2.158 -1.06 -0.8716 -0.7594 +-1.218 -2.166 -1.098 -0.8716 -0.7259 +-1.227 -2.181 -1.129 -0.8716 -0.6907 +-1.239 -2.203 -1.153 -0.8716 -0.6536 +-1.255 -2.232 -1.17 -0.8716 -0.615 +-1.275 -2.267 -1.181 -0.8716 -0.5748 +-1.298 -2.308 -1.186 -0.8716 -0.5332 +-1.325 -2.355 -1.184 -0.8716 -0.4903 +-1.354 -2.408 -1.176 -0.8716 -0.4461 +-1.387 -2.465 -1.162 -0.8716 -0.4008 +-1.422 -2.527 -1.142 -0.8716 -0.3545 +-1.459 -2.593 -1.117 -0.8716 -0.3073 +-1.498 -2.663 -1.087 -0.8716 -0.2594 +-1.538 -2.735 -1.052 -0.8716 -0.2108 +-1.58 -2.809 -1.013 -0.8716 -0.1617 +-1.622 -2.884 -0.9703 -0.8716 -0.1122 +-1.665 -2.96 -0.9244 -0.8716 -0.06235 +-1.708 -3.036 -0.8757 -0.8716 -0.01239 +-1.75 -3.111 -0.8247 -0.8716 0.0376 +-1.791 -3.184 -0.7719 -0.8716 0.0875 +-1.831 -3.255 -0.7179 -0.8716 0.1372 +-1.869 -3.323 -0.663 -0.8716 0.1865 +-1.905 -3.387 -0.608 -0.8716 0.2354 +-1.938 -3.446 -0.5531 -0.8716 0.2837 +-1.969 -3.5 -0.4989 -0.8716 0.3312 +-1.996 -3.549 -0.4458 -0.8716 0.378 +-2.02 -3.591 -0.3943 -0.8716 0.4238 +-2.04 -3.626 -0.3447 -0.8716 0.4685 +-2.056 -3.655 -0.2973 -0.8716 0.5121 +-2.067 -3.675 -0.2526 -0.8716 0.5544 +-2.075 -3.688 -0.2107 -0.8716 0.5953 +-2.077 -3.693 -0.1718 -0.8716 0.6347 +-2.075 -3.689 -0.1363 -0.8716 0.6725 +-2.069 -3.678 -0.1042 -0.8716 0.7087 +-2.057 -3.657 -0.0756 -0.8716 0.743 +-2.041 -3.629 -0.05058 -0.8716 0.7756 +-2.021 -3.593 -0.02914 -0.8716 0.8061 +-1.996 -3.549 -0.01124 -0.8716 0.8347 +-1.967 -3.497 0.003217 -0.8716 0.8612 +-1.934 -3.438 0.01435 -0.8716 0.8855 +-1.897 -3.373 0.02234 -0.8716 0.9076 +-1.857 -3.301 0.02739 -0.8716 0.9275 +-1.813 -3.224 0.02975 -0.8716 0.945 +-1.767 -3.141 0.02969 -0.8716 0.9602 +-1.718 -3.055 0.02753 -0.8716 0.9729 +-1.667 -2.964 0.02361 -0.8716 0.9833 +-1.615 -2.871 0.01826 -0.8716 0.9911 +-1.561 -2.776 0.01188 -0.8716 0.9965 +-1.507 -2.679 0.004842 -0.8716 0.9994 +-1.338 -2.685 0 -0.895 1 +-1.289 -2.585 -0.01004 -0.895 0.9988 +-1.239 -2.487 -0.01966 -0.895 0.995 +-1.191 -2.39 -0.02845 -0.895 0.9888 +-1.144 -2.295 -0.03601 -0.895 0.9801 +-1.098 -2.204 -0.04193 -0.895 0.9689 +-1.055 -2.116 -0.04587 -0.895 0.9553 +-1.013 -2.033 -0.04746 -0.895 0.9394 +-0.9747 -1.956 -0.04639 -0.895 0.9211 +-0.939 -1.884 -0.04238 -0.895 0.9004 +-0.9065 -1.819 -0.03517 -0.895 0.8776 +-0.8775 -1.761 -0.02456 -0.895 0.8525 +-0.8522 -1.71 -0.01037 -0.895 0.8253 +-0.8307 -1.667 0.007514 -0.895 0.7961 +-0.8132 -1.632 0.02918 -0.895 0.7648 +-0.7999 -1.605 0.05466 -0.895 0.7317 +-0.7907 -1.586 0.08394 -0.895 0.6967 +-0.7857 -1.576 0.1169 -0.895 0.66 +-0.785 -1.575 0.1536 -0.895 0.6216 +-0.7884 -1.582 0.1937 -0.895 0.5817 +-0.7958 -1.597 0.237 -0.895 0.5403 +-0.8072 -1.619 0.2833 -0.895 0.4976 +-0.8224 -1.65 0.3323 -0.895 0.4536 +-0.8411 -1.688 0.3837 -0.895 0.4085 +-0.8632 -1.732 0.4371 -0.895 0.3624 +-0.8885 -1.783 0.492 -0.895 0.3153 +-0.9165 -1.839 0.548 -0.895 0.2675 +-0.9471 -1.9 0.6048 -0.895 0.219 +-0.9799 -1.966 0.6617 -0.895 0.17 +-1.014 -2.035 0.7182 -0.895 0.1205 +-1.051 -2.108 0.7739 -0.895 0.07074 +-1.088 -2.182 0.8283 -0.895 0.02079 +-1.126 -2.259 0.8807 -0.895 -0.0292 +-1.164 -2.335 0.9307 -0.895 -0.07912 +-1.202 -2.412 0.9777 -0.895 -0.1288 +-1.24 -2.488 1.021 -0.895 -0.1782 +-1.277 -2.563 1.061 -0.895 -0.2272 +-1.314 -2.635 1.096 -0.895 -0.2756 +-1.348 -2.705 1.127 -0.895 -0.3233 +-1.381 -2.771 1.152 -0.895 -0.3702 +-1.412 -2.833 1.171 -0.895 -0.4161 +-1.44 -2.89 1.185 -0.895 -0.4611 +-1.466 -2.942 1.193 -0.895 -0.5048 +-1.489 -2.988 1.194 -0.895 -0.5474 +-1.509 -3.028 1.188 -0.895 -0.5885 +-1.526 -3.062 1.176 -0.895 -0.6282 +-1.54 -3.09 1.157 -0.895 -0.6663 +-1.551 -3.111 1.131 -0.895 -0.7027 +-1.558 -3.125 1.099 -0.895 -0.7374 +-1.561 -3.132 1.059 -0.895 -0.7702 +-1.562 -3.133 1.014 -0.895 -0.8011 +-1.559 -3.127 0.9614 -0.895 -0.8301 +-1.552 -3.114 0.9033 -0.895 -0.8569 +-1.543 -3.096 0.8394 -0.895 -0.8816 +-1.531 -3.072 0.7701 -0.895 -0.9041 +-1.516 -3.042 0.6958 -0.895 -0.9243 +-1.499 -3.008 0.6171 -0.895 -0.9422 +-1.48 -2.969 0.5343 -0.895 -0.9578 +-1.458 -2.926 0.4479 -0.895 -0.971 +-1.435 -2.88 0.3587 -0.895 -0.9817 +-1.411 -2.831 0.267 -0.895 -0.99 +-1.386 -2.781 0.1736 -0.895 -0.9958 +-1.36 -2.729 0.07908 -0.895 -0.9991 +-1.334 -2.676 -0.016 -0.895 -1 +-1.308 -2.624 -0.111 -0.895 -0.9983 +-1.282 -2.572 -0.2052 -0.895 -0.9941 +-1.257 -2.522 -0.2981 -0.895 -0.9875 +-1.233 -2.474 -0.389 -0.895 -0.9784 +-1.211 -2.429 -0.4773 -0.895 -0.9668 +-1.19 -2.388 -0.5625 -0.895 -0.9528 +-1.171 -2.35 -0.644 -0.895 -0.9365 +-1.155 -2.317 -0.7213 -0.895 -0.9178 +-1.141 -2.289 -0.794 -0.895 -0.8968 +-1.13 -2.267 -0.8615 -0.895 -0.8735 +-1.122 -2.251 -0.9235 -0.895 -0.8481 +-1.117 -2.24 -0.9796 -0.895 -0.8206 +-1.115 -2.237 -1.03 -0.895 -0.791 +-1.116 -2.239 -1.073 -0.895 -0.7594 +-1.121 -2.249 -1.11 -0.895 -0.7259 +-1.129 -2.265 -1.141 -0.895 -0.6907 +-1.141 -2.288 -1.164 -0.895 -0.6536 +-1.155 -2.318 -1.181 -0.895 -0.615 +-1.174 -2.354 -1.191 -0.895 -0.5748 +-1.195 -2.397 -1.194 -0.895 -0.5332 +-1.219 -2.445 -1.191 -0.895 -0.4903 +-1.245 -2.499 -1.181 -0.895 -0.4461 +-1.275 -2.558 -1.166 -0.895 -0.4008 +-1.306 -2.621 -1.144 -0.895 -0.3545 +-1.34 -2.688 -1.117 -0.895 -0.3073 +-1.375 -2.759 -1.085 -0.895 -0.2594 +-1.411 -2.832 -1.048 -0.895 -0.2108 +-1.449 -2.907 -1.007 -0.895 -0.1617 +-1.487 -2.983 -0.9623 -0.895 -0.1122 +-1.525 -3.06 -0.9142 -0.895 -0.06235 +-1.564 -3.137 -0.8633 -0.895 -0.01239 +-1.601 -3.213 -0.8102 -0.895 0.0376 +-1.638 -3.287 -0.7553 -0.895 0.0875 +-1.674 -3.358 -0.6993 -0.895 0.1372 +-1.708 -3.427 -0.6425 -0.895 0.1865 +-1.74 -3.491 -0.5856 -0.895 0.2354 +-1.77 -3.551 -0.5291 -0.895 0.2837 +-1.797 -3.605 -0.4734 -0.895 0.3312 +-1.821 -3.654 -0.4189 -0.895 0.378 +-1.842 -3.696 -0.3662 -0.895 0.4238 +-1.86 -3.731 -0.3156 -0.895 0.4685 +-1.874 -3.759 -0.2674 -0.895 0.5121 +-1.884 -3.779 -0.2221 -0.895 0.5544 +-1.89 -3.791 -0.1798 -0.895 0.5953 +-1.892 -3.795 -0.1409 -0.895 0.6347 +-1.89 -3.791 -0.1054 -0.895 0.6725 +-1.883 -3.778 -0.07367 -0.895 0.7087 +-1.873 -3.757 -0.04567 -0.895 0.743 +-1.858 -3.727 -0.02147 -0.895 0.7756 +-1.839 -3.69 -0.001079 -0.895 0.8061 +-1.816 -3.644 0.01555 -0.895 0.8347 +-1.79 -3.591 0.02852 -0.895 0.8612 +-1.759 -3.53 0.03797 -0.895 0.8855 +-1.726 -3.463 0.04407 -0.895 0.9076 +-1.689 -3.389 0.04706 -0.895 0.9275 +-1.65 -3.309 0.0472 -0.895 0.945 +-1.607 -3.225 0.04479 -0.895 0.9602 +-1.563 -3.136 0.04014 -0.895 0.9729 +-1.517 -3.043 0.03363 -0.895 0.9833 +-1.469 -2.948 0.02561 -0.895 0.9911 +-1.421 -2.85 0.0165 -0.895 0.9965 +-1.371 -2.751 0.00669 -0.895 0.9994 +-1.202 -2.748 0 -0.9162 1 +-1.158 -2.647 -0.01282 -0.9162 0.9988 +-1.114 -2.546 -0.02519 -0.9162 0.995 +-1.07 -2.447 -0.03669 -0.9162 0.9888 +-1.028 -2.35 -0.04688 -0.9162 0.9801 +-0.9873 -2.257 -0.05537 -0.9162 0.9689 +-0.9482 -2.167 -0.06174 -0.9162 0.9553 +-0.9111 -2.083 -0.06565 -0.9162 0.9394 +-0.8763 -2.003 -0.06675 -0.9162 0.9211 +-0.8442 -1.93 -0.06474 -0.9162 0.9004 +-0.815 -1.863 -0.05935 -0.9162 0.8776 +-0.7888 -1.803 -0.05037 -0.9162 0.8525 +-0.7659 -1.751 -0.03761 -0.9162 0.8253 +-0.7464 -1.706 -0.02093 -0.9162 0.7961 +-0.7305 -1.67 -0.0002485 -0.9162 0.7648 +-0.7183 -1.642 0.02448 -0.9162 0.7317 +-0.7097 -1.622 0.05323 -0.9162 0.6967 +-0.7049 -1.611 0.08595 -0.9162 0.66 +-0.7039 -1.609 0.1225 -0.9162 0.6216 +-0.7065 -1.615 0.1628 -0.9162 0.5817 +-0.7128 -1.629 0.2065 -0.9162 0.5403 +-0.7226 -1.652 0.2535 -0.9162 0.4976 +-0.7357 -1.682 0.3033 -0.9162 0.4536 +-0.752 -1.719 0.3557 -0.9162 0.4085 +-0.7714 -1.763 0.4103 -0.9162 0.3624 +-0.7935 -1.814 0.4666 -0.9162 0.3153 +-0.8181 -1.87 0.5242 -0.9162 0.2675 +-0.845 -1.932 0.5827 -0.9162 0.219 +-0.8738 -1.997 0.6414 -0.9162 0.17 +-0.9044 -2.067 0.6998 -0.9162 0.1205 +-0.9362 -2.14 0.7576 -0.9162 0.07074 +-0.9691 -2.215 0.814 -0.9162 0.02079 +-1.003 -2.292 0.8685 -0.9162 -0.0292 +-1.037 -2.37 0.9206 -0.9162 -0.07912 +-1.071 -2.447 0.9698 -0.9162 -0.1288 +-1.104 -2.524 1.016 -0.9162 -0.1782 +-1.137 -2.599 1.057 -0.9162 -0.2272 +-1.169 -2.673 1.094 -0.9162 -0.2756 +-1.2 -2.743 1.127 -0.9162 -0.3233 +-1.229 -2.81 1.154 -0.9162 -0.3702 +-1.257 -2.873 1.175 -0.9162 -0.4161 +-1.282 -2.931 1.191 -0.9162 -0.4611 +-1.305 -2.984 1.199 -0.9162 -0.5048 +-1.326 -3.031 1.202 -0.9162 -0.5474 +-1.344 -3.073 1.197 -0.9162 -0.5885 +-1.36 -3.108 1.186 -0.9162 -0.6282 +-1.372 -3.136 1.168 -0.9162 -0.6663 +-1.382 -3.158 1.143 -0.9162 -0.7027 +-1.388 -3.174 1.111 -0.9162 -0.7374 +-1.392 -3.182 1.071 -0.9162 -0.7702 +-1.393 -3.184 1.026 -0.9162 -0.8011 +-1.391 -3.179 0.9735 -0.9162 -0.8301 +-1.386 -3.167 0.915 -0.9162 -0.8569 +-1.378 -3.15 0.8506 -0.9162 -0.8816 +-1.368 -3.127 0.7807 -0.9162 -0.9041 +-1.355 -3.098 0.7056 -0.9162 -0.9243 +-1.341 -3.065 0.6259 -0.9162 -0.9422 +-1.324 -3.027 0.542 -0.9162 -0.9578 +-1.306 -2.985 0.4545 -0.9162 -0.971 +-1.286 -2.94 0.364 -0.9162 -0.9817 +-1.265 -2.892 0.271 -0.9162 -0.99 +-1.243 -2.842 0.1763 -0.9162 -0.9958 +-1.221 -2.791 0.08028 -0.9162 -0.9991 +-1.199 -2.74 -0.01624 -0.9162 -1 +-1.176 -2.688 -0.1126 -0.9162 -0.9983 +-1.154 -2.638 -0.2083 -0.9162 -0.9941 +-1.133 -2.589 -0.3025 -0.9162 -0.9875 +-1.112 -2.542 -0.3948 -0.9162 -0.9784 +-1.093 -2.498 -0.4843 -0.9162 -0.9668 +-1.075 -2.457 -0.5706 -0.9162 -0.9528 +-1.059 -2.421 -0.6532 -0.9162 -0.9365 +-1.045 -2.389 -0.7314 -0.9162 -0.9178 +-1.033 -2.362 -0.8048 -0.9162 -0.8968 +-1.024 -2.341 -0.8729 -0.9162 -0.8735 +-1.017 -2.325 -0.9353 -0.9162 -0.8481 +-1.013 -2.316 -0.9918 -0.9162 -0.8206 +-1.012 -2.313 -1.042 -0.9162 -0.791 +-1.014 -2.317 -1.085 -0.9162 -0.7594 +-1.018 -2.328 -1.122 -0.9162 -0.7259 +-1.026 -2.345 -1.152 -0.9162 -0.6907 +-1.037 -2.369 -1.175 -0.9162 -0.6536 +-1.05 -2.4 -1.191 -0.9162 -0.615 +-1.066 -2.438 -1.2 -0.9162 -0.5748 +-1.085 -2.481 -1.202 -0.9162 -0.5332 +-1.107 -2.53 -1.197 -0.9162 -0.4903 +-1.131 -2.585 -1.186 -0.9162 -0.4461 +-1.157 -2.645 -1.169 -0.9162 -0.4008 +-1.185 -2.709 -1.145 -0.9162 -0.3545 +-1.215 -2.777 -1.117 -0.9162 -0.3073 +-1.246 -2.849 -1.082 -0.9162 -0.2594 +-1.279 -2.923 -1.044 -0.9162 -0.2108 +-1.312 -2.999 -1.001 -0.9162 -0.1617 +-1.346 -3.076 -0.9536 -0.9162 -0.1122 +-1.38 -3.154 -0.9034 -0.9162 -0.06235 +-1.413 -3.231 -0.8504 -0.9162 -0.01239 +-1.447 -3.307 -0.7952 -0.9162 0.0376 +-1.479 -3.382 -0.7383 -0.9162 0.0875 +-1.511 -3.454 -0.6802 -0.9162 0.1372 +-1.541 -3.522 -0.6216 -0.9162 0.1865 +-1.569 -3.587 -0.5629 -0.9162 0.2354 +-1.595 -3.646 -0.5047 -0.9162 0.2837 +-1.619 -3.701 -0.4475 -0.9162 0.3312 +-1.64 -3.749 -0.3917 -0.9162 0.378 +-1.659 -3.791 -0.3378 -0.9162 0.4238 +-1.674 -3.826 -0.2862 -0.9162 0.4685 +-1.686 -3.854 -0.2373 -0.9162 0.5121 +-1.695 -3.873 -0.1914 -0.9162 0.5544 +-1.7 -3.885 -0.1488 -0.9162 0.5953 +-1.701 -3.888 -0.1098 -0.9162 0.6347 +-1.699 -3.883 -0.07451 -0.9162 0.6725 +-1.693 -3.869 -0.04311 -0.9162 0.7087 +-1.683 -3.847 -0.01571 -0.9162 0.743 +-1.669 -3.816 0.007654 -0.9162 0.7756 +-1.652 -3.777 0.02698 -0.9162 0.8061 +-1.632 -3.73 0.04233 -0.9162 0.8347 +-1.608 -3.675 0.05381 -0.9162 0.8612 +-1.58 -3.612 0.06156 -0.9162 0.8855 +-1.55 -3.543 0.06578 -0.9162 0.9076 +-1.517 -3.468 0.06671 -0.9162 0.9275 +-1.481 -3.386 0.06463 -0.9162 0.945 +-1.444 -3.3 0.05985 -0.9162 0.9602 +-1.404 -3.209 0.05273 -0.9162 0.9729 +-1.363 -3.115 0.04363 -0.9162 0.9833 +-1.32 -3.017 0.03295 -0.9162 0.9911 +-1.276 -2.917 0.02111 -0.9162 0.9965 +-1.232 -2.816 0.008534 -0.9162 0.9994 +-1.064 -2.805 0 -0.9351 1 +-1.024 -2.702 -0.01559 -0.9351 0.9988 +-0.9855 -2.599 -0.03071 -0.9351 0.995 +-0.9472 -2.498 -0.04491 -0.9351 0.9888 +-0.9099 -2.4 -0.05774 -0.9351 0.9801 +-0.8738 -2.305 -0.06876 -0.9351 0.9689 +-0.8393 -2.214 -0.07758 -0.9351 0.9553 +-0.8065 -2.127 -0.0838 -0.9351 0.9394 +-0.7758 -2.046 -0.08706 -0.9351 0.9211 +-0.7474 -1.971 -0.08706 -0.9351 0.9004 +-0.7215 -1.903 -0.0835 -0.9351 0.8776 +-0.6983 -1.842 -0.07615 -0.9351 0.8525 +-0.6779 -1.788 -0.06482 -0.9351 0.8253 +-0.6605 -1.742 -0.04936 -0.9351 0.7961 +-0.6463 -1.705 -0.02968 -0.9351 0.7648 +-0.6352 -1.675 -0.005726 -0.9351 0.7317 +-0.6274 -1.655 0.02249 -0.9351 0.6967 +-0.6229 -1.643 0.0549 -0.9351 0.66 +-0.6217 -1.64 0.09139 -0.9351 0.6216 +-0.6236 -1.645 0.1318 -0.9351 0.5817 +-0.6288 -1.658 0.1759 -0.9351 0.5403 +-0.637 -1.68 0.2235 -0.9351 0.4976 +-0.6482 -1.71 0.2741 -0.9351 0.4536 +-0.6621 -1.746 0.3275 -0.9351 0.4085 +-0.6788 -1.79 0.3833 -0.9351 0.3624 +-0.6978 -1.841 0.441 -0.9351 0.3153 +-0.7191 -1.897 0.5001 -0.9351 0.2675 +-0.7423 -1.958 0.5602 -0.9351 0.219 +-0.7673 -2.024 0.6207 -0.9351 0.17 +-0.7938 -2.094 0.681 -0.9351 0.1205 +-0.8215 -2.167 0.7407 -0.9351 0.07074 +-0.85 -2.242 0.7992 -0.9351 0.02079 +-0.8792 -2.319 0.8558 -0.9351 -0.0292 +-0.9088 -2.397 0.91 -0.9351 -0.07912 +-0.9384 -2.475 0.9613 -0.9351 -0.1288 +-0.9677 -2.552 1.009 -0.9351 -0.1782 +-0.9965 -2.628 1.053 -0.9351 -0.2272 +-1.025 -2.702 1.092 -0.9351 -0.2756 +-1.051 -2.773 1.126 -0.9351 -0.3233 +-1.077 -2.841 1.155 -0.9351 -0.3702 +-1.101 -2.904 1.178 -0.9351 -0.4161 +-1.124 -2.963 1.195 -0.9351 -0.4611 +-1.144 -3.017 1.206 -0.9351 -0.5048 +-1.162 -3.066 1.209 -0.9351 -0.5474 +-1.178 -3.108 1.206 -0.9351 -0.5885 +-1.192 -3.144 1.196 -0.9351 -0.6282 +-1.203 -3.174 1.178 -0.9351 -0.6663 +-1.212 -3.197 1.154 -0.9351 -0.7027 +-1.218 -3.213 1.122 -0.9351 -0.7374 +-1.222 -3.222 1.083 -0.9351 -0.7702 +-1.223 -3.225 1.037 -0.9351 -0.8011 +-1.221 -3.221 0.9849 -0.9351 -0.8301 +-1.217 -3.211 0.9261 -0.9351 -0.8569 +-1.211 -3.195 0.8613 -0.9351 -0.8816 +-1.203 -3.173 0.7907 -0.9351 -0.9041 +-1.192 -3.145 0.7149 -0.9351 -0.9243 +-1.18 -3.113 0.6343 -0.9351 -0.9422 +-1.166 -3.076 0.5494 -0.9351 -0.9578 +-1.151 -3.036 0.4608 -0.9351 -0.971 +-1.134 -2.992 0.3691 -0.9351 -0.9817 +-1.117 -2.945 0.2749 -0.9351 -0.99 +-1.098 -2.897 0.1788 -0.9351 -0.9958 +-1.079 -2.847 0.08142 -0.9351 -0.9991 +-1.06 -2.797 -0.01647 -0.9351 -1 +-1.041 -2.746 -0.1143 -0.9351 -0.9983 +-1.023 -2.697 -0.2113 -0.9351 -0.9941 +-1.004 -2.649 -0.3068 -0.9351 -0.9875 +-0.9871 -2.604 -0.4003 -0.9351 -0.9784 +-0.9708 -2.561 -0.491 -0.9351 -0.9668 +-0.9559 -2.521 -0.5784 -0.9351 -0.9528 +-0.9425 -2.486 -0.6619 -0.9351 -0.9365 +-0.9308 -2.455 -0.741 -0.9351 -0.9178 +-0.9211 -2.429 -0.8151 -0.9351 -0.8968 +-0.9135 -2.409 -0.8837 -0.9351 -0.8735 +-0.908 -2.395 -0.9466 -0.9351 -0.8481 +-0.905 -2.387 -1.003 -0.9351 -0.8206 +-0.9044 -2.385 -1.053 -0.9351 -0.791 +-0.9063 -2.39 -1.097 -0.9351 -0.7594 +-0.9107 -2.402 -1.133 -0.9351 -0.7259 +-0.9177 -2.421 -1.163 -0.9351 -0.6907 +-0.9273 -2.446 -1.185 -0.9351 -0.6536 +-0.9394 -2.478 -1.2 -0.9351 -0.615 +-0.9539 -2.516 -1.208 -0.9351 -0.5748 +-0.9707 -2.56 -1.209 -0.9351 -0.5332 +-0.9897 -2.611 -1.203 -0.9351 -0.4903 +-1.011 -2.666 -1.19 -0.9351 -0.4461 +-1.034 -2.727 -1.171 -0.9351 -0.4008 +-1.058 -2.792 -1.146 -0.9351 -0.3545 +-1.085 -2.861 -1.115 -0.9351 -0.3073 +-1.112 -2.933 -1.079 -0.9351 -0.2594 +-1.14 -3.007 -1.039 -0.9351 -0.2108 +-1.169 -3.084 -0.9934 -0.9351 -0.1617 +-1.199 -3.162 -0.9444 -0.9351 -0.1122 +-1.228 -3.24 -0.8921 -0.9351 -0.06235 +-1.258 -3.317 -0.837 -0.9351 -0.01239 +-1.287 -3.394 -0.7797 -0.9351 0.0376 +-1.315 -3.468 -0.7208 -0.9351 0.0875 +-1.342 -3.54 -0.6608 -0.9351 0.1372 +-1.368 -3.609 -0.6003 -0.9351 0.1865 +-1.393 -3.674 -0.5399 -0.9351 0.2354 +-1.415 -3.733 -0.4801 -0.9351 0.2837 +-1.436 -3.787 -0.4214 -0.9351 0.3312 +-1.454 -3.836 -0.3643 -0.9351 0.378 +-1.47 -3.877 -0.3093 -0.9351 0.4238 +-1.483 -3.911 -0.2567 -0.9351 0.4685 +-1.493 -3.938 -0.2071 -0.9351 0.5121 +-1.5 -3.957 -0.1607 -0.9351 0.5544 +-1.504 -3.968 -0.1178 -0.9351 0.5953 +-1.505 -3.97 -0.07867 -0.9351 0.6347 +-1.503 -3.964 -0.04354 -0.9351 0.6725 +-1.497 -3.949 -0.01253 -0.9351 0.7087 +-1.488 -3.926 0.01426 -0.9351 0.743 +-1.476 -3.894 0.03677 -0.9351 0.7756 +-1.461 -3.854 0.05503 -0.9351 0.8061 +-1.443 -3.805 0.06909 -0.9351 0.8347 +-1.421 -3.749 0.07906 -0.9351 0.8612 +-1.397 -3.685 0.08511 -0.9351 0.8855 +-1.37 -3.614 0.08744 -0.9351 0.9076 +-1.341 -3.537 0.08631 -0.9351 0.9275 +-1.31 -3.455 0.08202 -0.9351 0.945 +-1.276 -3.366 0.07488 -0.9351 0.9602 +-1.241 -3.274 0.06528 -0.9351 0.9729 +-1.205 -3.178 0.0536 -0.9351 0.9833 +-1.167 -3.078 0.04026 -0.9351 0.9911 +-1.129 -2.977 0.0257 -0.9351 0.9965 +-1.09 -2.874 0.01037 -0.9351 0.9994 +-0.922 -2.855 0 -0.9516 1 +-0.8882 -2.75 -0.01834 -0.9516 0.9988 +-0.8546 -2.646 -0.0362 -0.9516 0.995 +-0.8215 -2.544 -0.05309 -0.9516 0.9888 +-0.7893 -2.444 -0.06855 -0.9516 0.9801 +-0.7581 -2.347 -0.08212 -0.9516 0.9689 +-0.7282 -2.255 -0.09337 -0.9516 0.9553 +-0.6999 -2.167 -0.1019 -0.9516 0.9394 +-0.6733 -2.085 -0.1073 -0.9516 0.9211 +-0.6487 -2.009 -0.1093 -0.9516 0.9004 +-0.6262 -1.939 -0.1076 -0.9516 0.8776 +-0.606 -1.876 -0.1019 -0.9516 0.8525 +-0.5883 -1.822 -0.09199 -0.9516 0.8253 +-0.5731 -1.775 -0.07776 -0.9516 0.7961 +-0.5606 -1.736 -0.05909 -0.9516 0.7648 +-0.5509 -1.706 -0.03592 -0.9516 0.7317 +-0.5439 -1.684 -0.00827 -0.9516 0.6967 +-0.5397 -1.671 0.02381 -0.9516 0.66 +-0.5383 -1.667 0.06021 -0.9516 0.6216 +-0.5397 -1.671 0.1007 -0.9516 0.5817 +-0.5439 -1.684 0.1452 -0.9516 0.5403 +-0.5506 -1.705 0.1933 -0.9516 0.4976 +-0.5599 -1.734 0.2447 -0.9516 0.4536 +-0.5716 -1.77 0.2991 -0.9516 0.4085 +-0.5856 -1.813 0.356 -0.9516 0.3624 +-0.6017 -1.863 0.415 -0.9516 0.3153 +-0.6196 -1.919 0.4757 -0.9516 0.2675 +-0.6393 -1.98 0.5374 -0.9516 0.219 +-0.6605 -2.045 0.5996 -0.9516 0.17 +-0.683 -2.115 0.6618 -0.9516 0.1205 +-0.7065 -2.188 0.7234 -0.9516 0.07074 +-0.7308 -2.263 0.7839 -0.9516 0.02079 +-0.7557 -2.34 0.8425 -0.9516 -0.0292 +-0.7809 -2.418 0.8988 -0.9516 -0.07912 +-0.8061 -2.496 0.9521 -0.9516 -0.1288 +-0.8312 -2.574 1.002 -0.9516 -0.1782 +-0.8558 -2.65 1.048 -0.9516 -0.2272 +-0.8798 -2.724 1.089 -0.9516 -0.2756 +-0.9029 -2.796 1.125 -0.9516 -0.3233 +-0.9249 -2.864 1.156 -0.9516 -0.3702 +-0.9456 -2.928 1.181 -0.9516 -0.4161 +-0.9648 -2.987 1.199 -0.9516 -0.4611 +-0.9824 -3.042 1.211 -0.9516 -0.5048 +-0.9983 -3.091 1.216 -0.9516 -0.5474 +-1.012 -3.134 1.214 -0.9516 -0.5885 +-1.024 -3.171 1.204 -0.9516 -0.6282 +-1.034 -3.202 1.188 -0.9516 -0.6663 +-1.042 -3.226 1.164 -0.9516 -0.7027 +-1.047 -3.243 1.132 -0.9516 -0.7374 +-1.051 -3.254 1.094 -0.9516 -0.7702 +-1.052 -3.257 1.048 -0.9516 -0.8011 +-1.051 -3.255 0.9957 -0.9516 -0.8301 +-1.048 -3.246 0.9367 -0.9516 -0.8569 +-1.043 -3.231 0.8714 -0.9516 -0.8816 +-1.037 -3.21 0.8003 -0.9516 -0.9041 +-1.028 -3.184 0.7238 -0.9516 -0.9243 +-1.018 -3.153 0.6423 -0.9516 -0.9422 +-1.007 -3.117 0.5565 -0.9516 -0.9578 +-0.9942 -3.078 0.4669 -0.9516 -0.971 +-0.9805 -3.036 0.374 -0.9516 -0.9817 +-0.9659 -2.991 0.2785 -0.9516 -0.99 +-0.9507 -2.944 0.1812 -0.9516 -0.9958 +-0.9351 -2.895 0.08252 -0.9516 -0.9991 +-0.9193 -2.847 -0.01669 -0.9516 -1 +-0.9036 -2.798 -0.1158 -0.9516 -0.9983 +-0.8881 -2.75 -0.2141 -0.9516 -0.9941 +-0.8731 -2.703 -0.3109 -0.9516 -0.9875 +-0.8588 -2.659 -0.4055 -0.9516 -0.9784 +-0.8454 -2.618 -0.4974 -0.9516 -0.9668 +-0.8332 -2.58 -0.5858 -0.9516 -0.9528 +-0.8222 -2.546 -0.6702 -0.9516 -0.9365 +-0.8127 -2.516 -0.7501 -0.9516 -0.9178 +-0.8048 -2.492 -0.8249 -0.9516 -0.8968 +-0.7987 -2.473 -0.894 -0.9516 -0.8735 +-0.7945 -2.46 -0.9573 -0.9516 -0.8481 +-0.7923 -2.453 -1.014 -0.9516 -0.8206 +-0.7922 -2.453 -1.064 -0.9516 -0.791 +-0.7941 -2.459 -1.108 -0.9516 -0.7594 +-0.7983 -2.472 -1.144 -0.9516 -0.7259 +-0.8046 -2.491 -1.173 -0.9516 -0.6907 +-0.813 -2.517 -1.194 -0.9516 -0.6536 +-0.8236 -2.55 -1.208 -0.9516 -0.615 +-0.8362 -2.589 -1.215 -0.9516 -0.5748 +-0.8508 -2.634 -1.215 -0.9516 -0.5332 +-0.8673 -2.685 -1.208 -0.9516 -0.4903 +-0.8855 -2.742 -1.194 -0.9516 -0.4461 +-0.9052 -2.803 -1.173 -0.9516 -0.4008 +-0.9264 -2.868 -1.146 -0.9516 -0.3545 +-0.9488 -2.938 -1.114 -0.9516 -0.3073 +-0.9722 -3.01 -1.076 -0.9516 -0.2594 +-0.9964 -3.085 -1.033 -0.9516 -0.2108 +-1.021 -3.162 -0.9856 -0.9516 -0.1617 +-1.046 -3.24 -0.9346 -0.9516 -0.1122 +-1.072 -3.318 -0.8802 -0.9516 -0.06235 +-1.097 -3.396 -0.823 -0.9516 -0.01239 +-1.121 -3.472 -0.7637 -0.9516 0.0376 +-1.145 -3.547 -0.7028 -0.9516 0.0875 +-1.169 -3.619 -0.6409 -0.9516 0.1372 +-1.191 -3.687 -0.5786 -0.9516 0.1865 +-1.211 -3.751 -0.5165 -0.9516 0.2354 +-1.231 -3.81 -0.4551 -0.9516 0.2837 +-1.248 -3.864 -0.395 -0.9516 0.3312 +-1.263 -3.912 -0.3366 -0.9516 0.378 +-1.277 -3.953 -0.2805 -0.9516 0.4238 +-1.287 -3.986 -0.2271 -0.9516 0.4685 +-1.296 -4.013 -0.1767 -0.9516 0.5121 +-1.302 -4.031 -0.1298 -0.9516 0.5544 +-1.305 -4.041 -0.08666 -0.9516 0.5953 +-1.306 -4.042 -0.0475 -0.9516 0.6347 +-1.303 -4.035 -0.01253 -0.9516 0.6725 +-1.298 -4.019 0.01807 -0.9516 0.7087 +-1.29 -3.995 0.04422 -0.9516 0.743 +-1.279 -3.962 0.06587 -0.9516 0.7756 +-1.266 -3.92 0.08304 -0.9516 0.8061 +-1.25 -3.871 0.0958 -0.9516 0.8347 +-1.231 -3.813 0.1043 -0.9516 0.8612 +-1.21 -3.748 0.1086 -0.9516 0.8855 +-1.187 -3.676 0.1091 -0.9516 0.9076 +-1.162 -3.598 0.1059 -0.9516 0.9275 +-1.135 -3.514 0.09935 -0.9516 0.945 +-1.106 -3.424 0.08987 -0.9516 0.9602 +-1.076 -3.33 0.07779 -0.9516 0.9729 +-1.044 -3.232 0.06354 -0.9516 0.9833 +-1.011 -3.132 0.04755 -0.9516 0.9911 +-0.9782 -3.029 0.03028 -0.9516 0.9965 +-0.9445 -2.924 0.01221 -0.9516 0.9994 +-0.7782 -2.897 0 -0.9658 1 +-0.7497 -2.791 -0.02109 -0.9658 0.9988 +-0.7215 -2.686 -0.04167 -0.9658 0.995 +-0.6937 -2.583 -0.06125 -0.9658 0.9888 +-0.6667 -2.482 -0.07932 -0.9658 0.9801 +-0.6404 -2.385 -0.09542 -0.9658 0.9689 +-0.6153 -2.291 -0.1091 -0.9658 0.9553 +-0.5914 -2.202 -0.1199 -0.9658 0.9394 +-0.569 -2.119 -0.1275 -0.9658 0.9211 +-0.5483 -2.041 -0.1315 -0.9658 0.9004 +-0.5293 -1.971 -0.1316 -0.9658 0.8776 +-0.5122 -1.907 -0.1276 -0.9658 0.8525 +-0.4972 -1.851 -0.1191 -0.9658 0.8253 +-0.4843 -1.803 -0.1061 -0.9658 0.7961 +-0.4736 -1.763 -0.08847 -0.9658 0.7648 +-0.4653 -1.732 -0.0661 -0.9658 0.7317 +-0.4592 -1.71 -0.03902 -0.9658 0.6967 +-0.4555 -1.696 -0.00729 -0.9658 0.66 +-0.4541 -1.691 0.02898 -0.9658 0.6216 +-0.455 -1.694 0.06962 -0.9658 0.5817 +-0.4582 -1.706 0.1144 -0.9658 0.5403 +-0.4636 -1.726 0.163 -0.9658 0.4976 +-0.4711 -1.754 0.2152 -0.9658 0.4536 +-0.4806 -1.789 0.2705 -0.9658 0.4085 +-0.492 -1.832 0.3286 -0.9658 0.3624 +-0.5052 -1.881 0.3889 -0.9658 0.3153 +-0.52 -1.936 0.4509 -0.9658 0.2675 +-0.5362 -1.996 0.5142 -0.9658 0.219 +-0.5537 -2.061 0.5781 -0.9658 0.17 +-0.5722 -2.131 0.6422 -0.9658 0.1205 +-0.5917 -2.203 0.7057 -0.9658 0.07074 +-0.6118 -2.278 0.7681 -0.9658 0.02079 +-0.6324 -2.355 0.8287 -0.9658 -0.0292 +-0.6533 -2.432 0.887 -0.9658 -0.07912 +-0.6742 -2.51 0.9424 -0.9658 -0.1288 +-0.6951 -2.588 0.9943 -0.9658 -0.1782 +-0.7155 -2.664 1.042 -0.9658 -0.2272 +-0.7355 -2.738 1.085 -0.9658 -0.2756 +-0.7547 -2.81 1.123 -0.9658 -0.3233 +-0.7731 -2.878 1.156 -0.9658 -0.3702 +-0.7904 -2.943 1.182 -0.9658 -0.4161 +-0.8065 -3.003 1.202 -0.9658 -0.4611 +-0.8213 -3.058 1.215 -0.9658 -0.5048 +-0.8346 -3.108 1.222 -0.9658 -0.5474 +-0.8464 -3.151 1.221 -0.9658 -0.5885 +-0.8566 -3.189 1.212 -0.9658 -0.6282 +-0.865 -3.221 1.196 -0.9658 -0.6663 +-0.8717 -3.246 1.173 -0.9658 -0.7027 +-0.8766 -3.264 1.142 -0.9658 -0.7374 +-0.8797 -3.275 1.104 -0.9658 -0.7702 +-0.8811 -3.28 1.058 -0.9658 -0.8011 +-0.8807 -3.279 1.006 -0.9658 -0.8301 +-0.8786 -3.271 0.9467 -0.9658 -0.8569 +-0.875 -3.258 0.881 -0.9658 -0.8816 +-0.8698 -3.238 0.8094 -0.9658 -0.9041 +-0.8631 -3.214 0.7322 -0.9658 -0.9243 +-0.8552 -3.184 0.65 -0.9658 -0.9422 +-0.8461 -3.15 0.5632 -0.9658 -0.9578 +-0.836 -3.113 0.4726 -0.9658 -0.971 +-0.8251 -3.072 0.3786 -0.9658 -0.9817 +-0.8134 -3.029 0.282 -0.9658 -0.99 +-0.8012 -2.983 0.1834 -0.9658 -0.9958 +-0.7887 -2.937 0.08356 -0.9658 -0.9991 +-0.776 -2.889 -0.0169 -0.9658 -1 +-0.7634 -2.842 -0.1172 -0.9658 -0.9983 +-0.751 -2.796 -0.2168 -0.9658 -0.9941 +-0.7389 -2.751 -0.3148 -0.9658 -0.9875 +-0.7275 -2.709 -0.4105 -0.9658 -0.9784 +-0.7168 -2.669 -0.5035 -0.9658 -0.9668 +-0.707 -2.632 -0.5929 -0.9658 -0.9528 +-0.6983 -2.6 -0.6782 -0.9658 -0.9365 +-0.6908 -2.572 -0.7587 -0.9658 -0.9178 +-0.6847 -2.549 -0.8341 -0.9658 -0.8968 +-0.68 -2.532 -0.9038 -0.9658 -0.8735 +-0.6768 -2.52 -0.9673 -0.9658 -0.8481 +-0.6753 -2.514 -1.024 -0.9658 -0.8206 +-0.6755 -2.515 -1.075 -0.9658 -0.791 +-0.6775 -2.522 -1.118 -0.9658 -0.7594 +-0.6812 -2.536 -1.153 -0.9658 -0.7259 +-0.6867 -2.557 -1.182 -0.9658 -0.6907 +-0.694 -2.584 -1.203 -0.9658 -0.6536 +-0.703 -2.617 -1.216 -0.9658 -0.615 +-0.7137 -2.657 -1.222 -0.9658 -0.5748 +-0.726 -2.703 -1.22 -0.9658 -0.5332 +-0.7398 -2.755 -1.212 -0.9658 -0.4903 +-0.7551 -2.811 -1.196 -0.9658 -0.4461 +-0.7716 -2.873 -1.174 -0.9658 -0.4008 +-0.7893 -2.939 -1.145 -0.9658 -0.3545 +-0.808 -3.008 -1.111 -0.9658 -0.3073 +-0.8275 -3.081 -1.071 -0.9658 -0.2594 +-0.8476 -3.156 -1.026 -0.9658 -0.2108 +-0.8683 -3.233 -0.9773 -0.9658 -0.1617 +-0.8891 -3.31 -0.9242 -0.9658 -0.1122 +-0.9101 -3.388 -0.8677 -0.9658 -0.06235 +-0.9309 -3.466 -0.8085 -0.9658 -0.01239 +-0.9514 -3.542 -0.7472 -0.9658 0.0376 +-0.9713 -3.616 -0.6844 -0.9658 0.0875 +-0.9905 -3.688 -0.6207 -0.9658 0.1372 +-1.009 -3.756 -0.5566 -0.9658 0.1865 +-1.026 -3.819 -0.4928 -0.9658 0.2354 +-1.042 -3.878 -0.4299 -0.9658 0.2837 +-1.056 -3.931 -0.3684 -0.9658 0.3312 +-1.068 -3.978 -0.3088 -0.9658 0.378 +-1.079 -4.018 -0.2516 -0.9658 0.4238 +-1.088 -4.051 -0.1973 -0.9658 0.4685 +-1.095 -4.076 -0.1463 -0.9658 0.5121 +-1.099 -4.094 -0.0989 -0.9658 0.5544 +-1.102 -4.103 -0.05548 -0.9658 0.5953 +-1.102 -4.103 -0.01629 -0.9658 0.6347 +-1.1 -4.095 0.01847 -0.9658 0.6725 +-1.095 -4.078 0.04865 -0.9658 0.7087 +-1.089 -4.053 0.07415 -0.9658 0.743 +-1.079 -4.019 0.09493 -0.9658 0.7756 +-1.068 -3.976 0.111 -0.9658 0.8061 +-1.054 -3.926 0.1224 -0.9658 0.8347 +-1.039 -3.867 0.1294 -0.9658 0.8612 +-1.021 -3.801 0.132 -0.9658 0.8855 +-1.001 -3.728 0.1306 -0.9658 0.9076 +-0.9799 -3.649 0.1253 -0.9658 0.9275 +-0.957 -3.563 0.1166 -0.9658 0.945 +-0.9327 -3.473 0.1048 -0.9658 0.9602 +-0.9072 -3.378 0.09026 -0.9658 0.9729 +-0.8807 -3.279 0.07344 -0.9658 0.9833 +-0.8533 -3.177 0.05481 -0.9658 0.9911 +-0.8254 -3.073 0.03484 -0.9658 0.9965 +-0.7971 -2.968 0.01403 -0.9658 0.9994 +-0.6324 -2.933 0 -0.9775 1 +-0.6094 -2.826 -0.02383 -0.9775 0.9988 +-0.5866 -2.72 -0.04712 -0.9775 0.995 +-0.5641 -2.616 -0.06936 -0.9775 0.9888 +-0.5422 -2.514 -0.09004 -0.9775 0.9801 +-0.521 -2.416 -0.1087 -0.9775 0.9689 +-0.5006 -2.322 -0.1248 -0.9775 0.9553 +-0.4813 -2.232 -0.1379 -0.9775 0.9394 +-0.4632 -2.148 -0.1476 -0.9775 0.9211 +-0.4463 -2.07 -0.1536 -0.9775 0.9004 +-0.4309 -1.998 -0.1556 -0.9775 0.8776 +-0.417 -1.934 -0.1531 -0.9775 0.8525 +-0.4048 -1.877 -0.1461 -0.9775 0.8253 +-0.3942 -1.828 -0.1344 -0.9775 0.7961 +-0.3855 -1.787 -0.1178 -0.9775 0.7648 +-0.3785 -1.755 -0.09624 -0.9775 0.7317 +-0.3735 -1.732 -0.06975 -0.9775 0.6967 +-0.3703 -1.717 -0.03839 -0.9775 0.66 +-0.3689 -1.711 -0.00226 -0.9775 0.6216 +-0.3695 -1.713 0.03846 -0.9775 0.5817 +-0.3718 -1.724 0.08353 -0.9775 0.5403 +-0.3759 -1.743 0.1327 -0.9775 0.4976 +-0.3818 -1.77 0.1855 -0.9775 0.4536 +-0.3892 -1.805 0.2418 -0.9775 0.4085 +-0.3982 -1.847 0.3009 -0.9775 0.3624 +-0.4086 -1.895 0.3624 -0.9775 0.3153 +-0.4202 -1.949 0.4259 -0.9775 0.2675 +-0.4331 -2.008 0.4907 -0.9775 0.219 +-0.447 -2.073 0.5563 -0.9775 0.17 +-0.4617 -2.141 0.6221 -0.9775 0.1205 +-0.4772 -2.213 0.6875 -0.9775 0.07074 +-0.4932 -2.287 0.7518 -0.9775 0.02079 +-0.5096 -2.363 0.8144 -0.9775 -0.0292 +-0.5263 -2.44 0.8747 -0.9775 -0.07912 +-0.543 -2.518 0.9321 -0.9775 -0.1288 +-0.5596 -2.595 0.986 -0.9775 -0.1782 +-0.576 -2.671 1.036 -0.9775 -0.2272 +-0.592 -2.745 1.081 -0.9775 -0.2756 +-0.6074 -2.817 1.121 -0.9775 -0.3233 +-0.6222 -2.885 1.155 -0.9775 -0.3702 +-0.6361 -2.95 1.183 -0.9775 -0.4161 +-0.6491 -3.01 1.204 -0.9775 -0.4611 +-0.661 -3.065 1.219 -0.9775 -0.5048 +-0.6718 -3.116 1.227 -0.9775 -0.5474 +-0.6814 -3.16 1.227 -0.9775 -0.5885 +-0.6897 -3.198 1.219 -0.9775 -0.6282 +-0.6966 -3.23 1.204 -0.9775 -0.6663 +-0.7022 -3.256 1.182 -0.9775 -0.7027 +-0.7063 -3.275 1.151 -0.9775 -0.7374 +-0.7091 -3.288 1.113 -0.9775 -0.7702 +-0.7104 -3.294 1.068 -0.9775 -0.8011 +-0.7104 -3.294 1.015 -0.9775 -0.8301 +-0.709 -3.288 0.9561 -0.9775 -0.8569 +-0.7064 -3.276 0.8901 -0.9775 -0.8816 +-0.7025 -3.258 0.818 -0.9775 -0.9041 +-0.6976 -3.235 0.7402 -0.9775 -0.9243 +-0.6916 -3.207 0.6572 -0.9775 -0.9422 +-0.6846 -3.175 0.5696 -0.9775 -0.9578 +-0.6769 -3.139 0.478 -0.9775 -0.971 +-0.6685 -3.1 0.383 -0.9775 -0.9817 +-0.6595 -3.058 0.2853 -0.9775 -0.99 +-0.6502 -3.015 0.1856 -0.9775 -0.9958 +-0.6405 -2.97 0.08455 -0.9775 -0.9991 +-0.6307 -2.925 -0.0171 -0.9775 -1 +-0.621 -2.88 -0.1186 -0.9775 -0.9983 +-0.6114 -2.835 -0.2193 -0.9775 -0.9941 +-0.6022 -2.793 -0.3184 -0.9775 -0.9875 +-0.5934 -2.752 -0.4153 -0.9775 -0.9784 +-0.5852 -2.714 -0.5092 -0.9775 -0.9668 +-0.5777 -2.679 -0.5995 -0.9775 -0.9528 +-0.5711 -2.648 -0.6856 -0.9775 -0.9365 +-0.5654 -2.622 -0.7669 -0.9775 -0.9178 +-0.5608 -2.601 -0.8429 -0.9775 -0.8968 +-0.5574 -2.585 -0.913 -0.9775 -0.8735 +-0.5551 -2.574 -0.9768 -0.9775 -0.8481 +-0.5542 -2.57 -1.034 -0.9775 -0.8206 +-0.5547 -2.572 -1.084 -0.9775 -0.791 +-0.5565 -2.581 -1.127 -0.9775 -0.7594 +-0.5597 -2.595 -1.162 -0.9775 -0.7259 +-0.5643 -2.617 -1.19 -0.9775 -0.6907 +-0.5703 -2.645 -1.21 -0.9775 -0.6536 +-0.5777 -2.679 -1.223 -0.9775 -0.615 +-0.5864 -2.72 -1.228 -0.9775 -0.5748 +-0.5964 -2.766 -1.225 -0.9775 -0.5332 +-0.6076 -2.818 -1.215 -0.9775 -0.4903 +-0.6199 -2.875 -1.198 -0.9775 -0.4461 +-0.6333 -2.937 -1.174 -0.9775 -0.4008 +-0.6475 -3.003 -1.144 -0.9775 -0.3545 +-0.6625 -3.072 -1.108 -0.9775 -0.3073 +-0.6781 -3.145 -1.066 -0.9775 -0.2594 +-0.6942 -3.219 -1.019 -0.9775 -0.2108 +-0.7107 -3.296 -0.9683 -0.9775 -0.1617 +-0.7274 -3.373 -0.9132 -0.9775 -0.1122 +-0.7441 -3.451 -0.8547 -0.9775 -0.06235 +-0.7607 -3.528 -0.7936 -0.9775 -0.01239 +-0.777 -3.603 -0.7303 -0.9775 0.0376 +-0.7929 -3.677 -0.6656 -0.9775 0.0875 +-0.8081 -3.748 -0.6 -0.9775 0.1372 +-0.8226 -3.815 -0.5342 -0.9775 0.1865 +-0.8361 -3.877 -0.4688 -0.9775 0.2354 +-0.8486 -3.935 -0.4044 -0.9775 0.2837 +-0.8598 -3.987 -0.3415 -0.9775 0.3312 +-0.8698 -4.033 -0.2807 -0.9775 0.378 +-0.8782 -4.073 -0.2225 -0.9775 0.4238 +-0.8851 -4.105 -0.1674 -0.9775 0.4685 +-0.8904 -4.129 -0.1157 -0.9775 0.5121 +-0.8939 -4.146 -0.0679 -0.9775 0.5544 +-0.8957 -4.154 -0.02426 -0.9775 0.5953 +-0.8956 -4.153 0.01493 -0.9775 0.6347 +-0.8937 -4.144 0.04947 -0.9775 0.6725 +-0.8898 -4.126 0.07921 -0.9775 0.7087 +-0.8841 -4.1 0.104 -0.9775 0.743 +-0.8766 -4.065 0.1239 -0.9775 0.7756 +-0.8672 -4.022 0.1389 -0.9775 0.8061 +-0.8561 -3.97 0.149 -0.9775 0.8347 +-0.8433 -3.911 0.1545 -0.9775 0.8612 +-0.8289 -3.844 0.1554 -0.9775 0.8855 +-0.8129 -3.77 0.1521 -0.9775 0.9076 +-0.7956 -3.69 0.1448 -0.9775 0.9275 +-0.7771 -3.604 0.1338 -0.9775 0.945 +-0.7574 -3.512 0.1197 -0.9775 0.9602 +-0.7367 -3.416 0.1027 -0.9775 0.9729 +-0.7153 -3.317 0.08329 -0.9775 0.9833 +-0.6931 -3.214 0.06203 -0.9775 0.9911 +-0.6706 -3.11 0.03938 -0.9775 0.9965 +-0.6477 -3.003 0.01585 -0.9775 0.9994 +-0.485 -2.961 0 -0.9868 1 +-0.4675 -2.854 -0.02654 -0.9868 0.9988 +-0.4501 -2.747 -0.05254 -0.9868 0.995 +-0.433 -2.643 -0.07744 -0.9868 0.9888 +-0.4162 -2.541 -0.1007 -0.9868 0.9801 +-0.4001 -2.442 -0.1218 -0.9868 0.9689 +-0.3845 -2.347 -0.1403 -0.9868 0.9553 +-0.3698 -2.257 -0.1558 -0.9868 0.9394 +-0.3559 -2.172 -0.1676 -0.9868 0.9211 +-0.343 -2.093 -0.1756 -0.9868 0.9004 +-0.3312 -2.021 -0.1794 -0.9868 0.8776 +-0.3205 -1.956 -0.1786 -0.9868 0.8525 +-0.3111 -1.899 -0.1731 -0.9868 0.8253 +-0.303 -1.849 -0.1626 -0.9868 0.7961 +-0.2962 -1.808 -0.147 -0.9868 0.7648 +-0.2908 -1.775 -0.1263 -0.9868 0.7317 +-0.2868 -1.75 -0.1004 -0.9868 0.6967 +-0.2842 -1.735 -0.06946 -0.9868 0.66 +-0.283 -1.728 -0.0335 -0.9868 0.6216 +-0.2833 -1.729 0.007266 -0.9868 0.5817 +-0.2849 -1.739 0.0526 -0.9868 0.5403 +-0.2879 -1.757 0.1022 -0.9868 0.4976 +-0.2921 -1.783 0.1558 -0.9868 0.4536 +-0.2976 -1.817 0.2129 -0.9868 0.4085 +-0.3042 -1.857 0.273 -0.9868 0.3624 +-0.312 -1.904 0.3358 -0.9868 0.3153 +-0.3207 -1.957 0.4006 -0.9868 0.2675 +-0.3302 -2.016 0.4669 -0.9868 0.219 +-0.3406 -2.079 0.5342 -0.9868 0.17 +-0.3516 -2.146 0.6017 -0.9868 0.1205 +-0.3632 -2.217 0.6689 -0.9868 0.07074 +-0.3753 -2.29 0.735 -0.9868 0.02079 +-0.3876 -2.366 0.7996 -0.9868 -0.0292 +-0.4001 -2.442 0.8619 -0.9868 -0.07912 +-0.4127 -2.519 0.9212 -0.9868 -0.1288 +-0.4253 -2.596 0.977 -0.9868 -0.1782 +-0.4376 -2.671 1.029 -0.9868 -0.2272 +-0.4497 -2.745 1.076 -0.9868 -0.2756 +-0.4614 -2.816 1.117 -0.9868 -0.3233 +-0.4725 -2.884 1.153 -0.9868 -0.3702 +-0.4831 -2.949 1.183 -0.9868 -0.4161 +-0.493 -3.009 1.206 -0.9868 -0.4611 +-0.5021 -3.065 1.222 -0.9868 -0.5048 +-0.5103 -3.115 1.231 -0.9868 -0.5474 +-0.5177 -3.16 1.232 -0.9868 -0.5885 +-0.524 -3.199 1.226 -0.9868 -0.6282 +-0.5294 -3.231 1.212 -0.9868 -0.6663 +-0.5338 -3.258 1.19 -0.9868 -0.7027 +-0.5371 -3.278 1.16 -0.9868 -0.7374 +-0.5393 -3.292 1.122 -0.9868 -0.7702 +-0.5405 -3.299 1.077 -0.9868 -0.8011 +-0.5407 -3.301 1.024 -0.9868 -0.8301 +-0.5399 -3.296 0.9649 -0.9868 -0.8569 +-0.5382 -3.285 0.8986 -0.9868 -0.8816 +-0.5355 -3.269 0.826 -0.9868 -0.9041 +-0.532 -3.247 0.7477 -0.9868 -0.9243 +-0.5277 -3.221 0.664 -0.9868 -0.9422 +-0.5228 -3.191 0.5756 -0.9868 -0.9578 +-0.5172 -3.157 0.4831 -0.9868 -0.971 +-0.5112 -3.12 0.3872 -0.9868 -0.9817 +-0.5047 -3.081 0.2885 -0.9868 -0.99 +-0.4979 -3.039 0.1876 -0.9868 -0.9958 +-0.4909 -2.996 0.08548 -0.9868 -0.9991 +-0.4838 -2.953 -0.01729 -0.9868 -1 +-0.4768 -2.91 -0.1199 -0.9868 -0.9983 +-0.4698 -2.868 -0.2217 -0.9868 -0.9941 +-0.4632 -2.827 -0.3219 -0.9868 -0.9875 +-0.4568 -2.788 -0.4198 -0.9868 -0.9784 +-0.4509 -2.752 -0.5147 -0.9868 -0.9668 +-0.4455 -2.719 -0.6058 -0.9868 -0.9528 +-0.4408 -2.691 -0.6927 -0.9868 -0.9365 +-0.4368 -2.666 -0.7746 -0.9868 -0.9178 +-0.4336 -2.646 -0.8511 -0.9868 -0.8968 +-0.4312 -2.632 -0.9216 -0.9868 -0.8735 +-0.4298 -2.623 -0.9857 -0.9868 -0.8481 +-0.4293 -2.62 -1.043 -0.9868 -0.8206 +-0.4298 -2.623 -1.093 -0.9868 -0.791 +-0.4314 -2.633 -1.136 -0.9868 -0.7594 +-0.434 -2.649 -1.171 -0.9868 -0.7259 +-0.4376 -2.671 -1.198 -0.9868 -0.6907 +-0.4423 -2.7 -1.217 -0.9868 -0.6536 +-0.4481 -2.735 -1.229 -0.9868 -0.615 +-0.4548 -2.776 -1.233 -0.9868 -0.5748 +-0.4624 -2.823 -1.229 -0.9868 -0.5332 +-0.471 -2.875 -1.218 -0.9868 -0.4903 +-0.4803 -2.932 -1.199 -0.9868 -0.4461 +-0.4904 -2.994 -1.174 -0.9868 -0.4008 +-0.5012 -3.059 -1.142 -0.9868 -0.3545 +-0.5126 -3.129 -1.104 -0.9868 -0.3073 +-0.5244 -3.201 -1.06 -0.9868 -0.2594 +-0.5366 -3.275 -1.012 -0.9868 -0.2108 +-0.549 -3.351 -0.9587 -0.9868 -0.1617 +-0.5616 -3.428 -0.9016 -0.9868 -0.1122 +-0.5742 -3.505 -0.8412 -0.9868 -0.06235 +-0.5866 -3.581 -0.7781 -0.9868 -0.01239 +-0.5989 -3.656 -0.7129 -0.9868 0.0376 +-0.6108 -3.728 -0.6463 -0.9868 0.0875 +-0.6222 -3.798 -0.579 -0.9868 0.1372 +-0.633 -3.864 -0.5115 -0.9868 0.1865 +-0.6431 -3.926 -0.4445 -0.9868 0.2354 +-0.6524 -3.982 -0.3786 -0.9868 0.2837 +-0.6608 -4.033 -0.3144 -0.9868 0.3312 +-0.6682 -4.078 -0.2525 -0.9868 0.378 +-0.6744 -4.117 -0.1933 -0.9868 0.4238 +-0.6795 -4.148 -0.1373 -0.9868 0.4685 +-0.6833 -4.171 -0.08508 -0.9868 0.5121 +-0.6858 -4.186 -0.03686 -0.9868 0.5544 +-0.687 -4.193 0.006967 -0.9868 0.5953 +-0.6868 -4.192 0.04614 -0.9868 0.6347 +-0.6852 -4.182 0.08044 -0.9868 0.6725 +-0.6821 -4.163 0.1097 -0.9868 0.7087 +-0.6776 -4.136 0.1339 -0.9868 0.743 +-0.6718 -4.1 0.1528 -0.9868 0.7756 +-0.6645 -4.056 0.1667 -0.9868 0.8061 +-0.6559 -4.004 0.1755 -0.9868 0.8347 +-0.6461 -3.944 0.1794 -0.9868 0.8612 +-0.635 -3.876 0.1786 -0.9868 0.8855 +-0.6229 -3.802 0.1734 -0.9868 0.9076 +-0.6096 -3.721 0.1641 -0.9868 0.9275 +-0.5954 -3.634 0.1509 -0.9868 0.945 +-0.5804 -3.543 0.1344 -0.9868 0.9602 +-0.5646 -3.446 0.115 -0.9868 0.9729 +-0.5482 -3.346 0.0931 -0.9868 0.9833 +-0.5314 -3.243 0.06922 -0.9868 0.9911 +-0.5141 -3.138 0.04389 -0.9868 0.9965 +-0.4967 -3.032 0.01765 -0.9868 0.9994 +-0.3365 -2.981 0 -0.9937 1 +-0.3244 -2.874 -0.02925 -0.9937 0.9988 +-0.3124 -2.768 -0.05792 -0.9937 0.995 +-0.3006 -2.663 -0.08546 -0.9937 0.9888 +-0.289 -2.561 -0.1113 -0.9937 0.9801 +-0.2779 -2.462 -0.1349 -0.9937 0.9689 +-0.2672 -2.367 -0.1558 -0.9937 0.9553 +-0.257 -2.277 -0.1735 -0.9937 0.9394 +-0.2474 -2.192 -0.1876 -0.9937 0.9211 +-0.2384 -2.113 -0.1976 -0.9937 0.9004 +-0.2303 -2.04 -0.2031 -0.9937 0.8776 +-0.2229 -1.975 -0.204 -0.9937 0.8525 +-0.2163 -1.917 -0.1999 -0.9937 0.8253 +-0.2107 -1.866 -0.1907 -0.9937 0.7961 +-0.2059 -1.824 -0.1762 -0.9937 0.7648 +-0.2021 -1.791 -0.1563 -0.9937 0.7317 +-0.1993 -1.765 -0.1311 -0.9937 0.6967 +-0.1974 -1.749 -0.1005 -0.9937 0.66 +-0.1965 -1.741 -0.06472 -0.9937 0.6216 +-0.1965 -1.741 -0.02393 -0.9937 0.5817 +-0.1975 -1.75 0.02165 -0.9937 0.5403 +-0.1994 -1.767 0.07171 -0.9937 0.4976 +-0.2022 -1.792 0.1259 -0.9937 0.4536 +-0.2059 -1.824 0.1838 -0.9937 0.4085 +-0.2103 -1.863 0.245 -0.9937 0.3624 +-0.2155 -1.909 0.3089 -0.9937 0.3153 +-0.2213 -1.961 0.3751 -0.9937 0.2675 +-0.2278 -2.018 0.4428 -0.9937 0.219 +-0.2348 -2.08 0.5117 -0.9937 0.17 +-0.2423 -2.147 0.5809 -0.9937 0.1205 +-0.2501 -2.216 0.6498 -0.9937 0.07074 +-0.2583 -2.288 0.7178 -0.9937 0.02079 +-0.2666 -2.363 0.7843 -0.9937 -0.0292 +-0.2752 -2.438 0.8485 -0.9937 -0.07912 +-0.2837 -2.514 0.9098 -0.9937 -0.1288 +-0.2923 -2.59 0.9675 -0.9937 -0.1782 +-0.3007 -2.664 1.021 -0.9937 -0.2272 +-0.3089 -2.737 1.07 -0.9937 -0.2756 +-0.3169 -2.808 1.113 -0.9937 -0.3233 +-0.3246 -2.876 1.151 -0.9937 -0.3702 +-0.3318 -2.94 1.182 -0.9937 -0.4161 +-0.3386 -3 1.207 -0.9937 -0.4611 +-0.3448 -3.055 1.224 -0.9937 -0.5048 +-0.3505 -3.106 1.234 -0.9937 -0.5474 +-0.3556 -3.151 1.237 -0.9937 -0.5885 +-0.3601 -3.19 1.232 -0.9937 -0.6282 +-0.3638 -3.224 1.218 -0.9937 -0.6663 +-0.3669 -3.251 1.197 -0.9937 -0.7027 +-0.3693 -3.272 1.167 -0.9937 -0.7374 +-0.371 -3.287 1.13 -0.9937 -0.7702 +-0.3719 -3.295 1.085 -0.9937 -0.8011 +-0.3722 -3.298 1.033 -0.9937 -0.8301 +-0.3718 -3.294 0.973 -0.9937 -0.8569 +-0.3708 -3.285 0.9065 -0.9937 -0.8816 +-0.3692 -3.271 0.8336 -0.9937 -0.9041 +-0.3669 -3.251 0.7547 -0.9937 -0.9243 +-0.3642 -3.227 0.6704 -0.9937 -0.9422 +-0.361 -3.199 0.5813 -0.9937 -0.9578 +-0.3574 -3.167 0.488 -0.9937 -0.971 +-0.3535 -3.132 0.3911 -0.9937 -0.9817 +-0.3493 -3.095 0.2914 -0.9937 -0.99 +-0.3449 -3.055 0.1896 -0.9937 -0.9958 +-0.3403 -3.015 0.08637 -0.9937 -0.9991 +-0.3357 -2.974 -0.01747 -0.9937 -1 +-0.3311 -2.933 -0.1212 -0.9937 -0.9983 +-0.3266 -2.893 -0.224 -0.9937 -0.9941 +-0.3222 -2.855 -0.3252 -0.9937 -0.9875 +-0.3181 -2.818 -0.424 -0.9937 -0.9784 +-0.3142 -2.784 -0.5198 -0.9937 -0.9668 +-0.3108 -2.753 -0.6118 -0.9937 -0.9528 +-0.3077 -2.726 -0.6993 -0.9937 -0.9365 +-0.3052 -2.704 -0.7819 -0.9937 -0.9178 +-0.3031 -2.686 -0.8588 -0.9937 -0.8968 +-0.3017 -2.673 -0.9296 -0.9937 -0.8735 +-0.3009 -2.666 -0.9939 -0.9937 -0.8481 +-0.3007 -2.664 -1.051 -0.9937 -0.8206 +-0.3012 -2.669 -1.101 -0.9937 -0.791 +-0.3024 -2.68 -1.144 -0.9937 -0.7594 +-0.3043 -2.697 -1.178 -0.9937 -0.7259 +-0.307 -2.72 -1.205 -0.9937 -0.6907 +-0.3103 -2.749 -1.224 -0.9937 -0.6536 +-0.3143 -2.784 -1.234 -0.9937 -0.615 +-0.3189 -2.826 -1.237 -0.9937 -0.5748 +-0.3242 -2.873 -1.232 -0.9937 -0.5332 +-0.3301 -2.925 -1.219 -0.9937 -0.4903 +-0.3366 -2.982 -1.199 -0.9937 -0.4461 +-0.3435 -3.043 -1.173 -0.9937 -0.4008 +-0.3509 -3.109 -1.139 -0.9937 -0.3545 +-0.3586 -3.178 -1.099 -0.9937 -0.3073 +-0.3667 -3.249 -1.054 -0.9937 -0.2594 +-0.375 -3.323 -1.004 -0.9937 -0.2108 +-0.3835 -3.398 -0.9485 -0.9937 -0.1617 +-0.3921 -3.474 -0.8895 -0.9937 -0.1122 +-0.4006 -3.55 -0.8272 -0.9937 -0.06235 +-0.4091 -3.625 -0.7622 -0.9937 -0.01239 +-0.4174 -3.698 -0.6951 -0.9937 0.0376 +-0.4255 -3.77 -0.6267 -0.9937 0.0875 +-0.4332 -3.838 -0.5576 -0.9937 0.1372 +-0.4405 -3.903 -0.4884 -0.9937 0.1865 +-0.4473 -3.964 -0.4199 -0.9937 0.2354 +-0.4536 -4.019 -0.3526 -0.9937 0.2837 +-0.4592 -4.069 -0.2871 -0.9937 0.3312 +-0.4642 -4.113 -0.2241 -0.9937 0.378 +-0.4683 -4.15 -0.1639 -0.9937 0.4238 +-0.4717 -4.179 -0.1072 -0.9937 0.4685 +-0.4742 -4.202 -0.05439 -0.9937 0.5121 +-0.4758 -4.216 -0.005803 -0.9937 0.5544 +-0.4765 -4.222 0.03819 -0.9937 0.5953 +-0.4762 -4.22 0.07732 -0.9937 0.6347 +-0.475 -4.209 0.1114 -0.9937 0.6725 +-0.4728 -4.189 0.1401 -0.9937 0.7087 +-0.4696 -4.161 0.1636 -0.9937 0.743 +-0.4655 -4.125 0.1817 -0.9937 0.7756 +-0.4605 -4.08 0.1944 -0.9937 0.8061 +-0.4545 -4.027 0.2019 -0.9937 0.8347 +-0.4477 -3.966 0.2043 -0.9937 0.8612 +-0.44 -3.898 0.2018 -0.9937 0.8855 +-0.4316 -3.824 0.1947 -0.9937 0.9076 +-0.4224 -3.743 0.1833 -0.9937 0.9275 +-0.4126 -3.656 0.168 -0.9937 0.945 +-0.4022 -3.564 0.1491 -0.9937 0.9602 +-0.3913 -3.467 0.1273 -0.9937 0.9729 +-0.38 -3.367 0.1028 -0.9937 0.9833 +-0.3684 -3.264 0.07636 -0.9937 0.9911 +-0.3565 -3.159 0.04838 -0.9937 0.9965 +-0.3445 -3.052 0.01945 -0.9937 0.9994 +-0.187 -2.994 0 -0.9981 1 +-0.1804 -2.887 -0.03193 -0.9981 0.9988 +-0.1738 -2.781 -0.06327 -0.9981 0.995 +-0.1672 -2.677 -0.09343 -0.9981 0.9888 +-0.1609 -2.575 -0.1218 -0.9981 0.9801 +-0.1547 -2.476 -0.148 -0.9981 0.9689 +-0.1488 -2.381 -0.1712 -0.9981 0.9553 +-0.1431 -2.291 -0.1912 -0.9981 0.9394 +-0.1378 -2.206 -0.2074 -0.9981 0.9211 +-0.1329 -2.127 -0.2193 -0.9981 0.9004 +-0.1283 -2.054 -0.2267 -0.9981 0.8776 +-0.1242 -1.989 -0.2293 -0.9981 0.8525 +-0.1206 -1.93 -0.2267 -0.9981 0.8253 +-0.1174 -1.88 -0.2187 -0.9981 0.7961 +-0.1148 -1.837 -0.2052 -0.9981 0.7648 +-0.1126 -1.803 -0.1862 -0.9981 0.7317 +-0.111 -1.777 -0.1616 -0.9981 0.6967 +-0.1099 -1.759 -0.1315 -0.9981 0.66 +-0.1094 -1.75 -0.0959 -0.9981 0.6216 +-0.1093 -1.75 -0.05511 -0.9981 0.5817 +-0.1098 -1.758 -0.009325 -0.9981 0.5403 +-0.1108 -1.773 0.04115 -0.9981 0.4976 +-0.1123 -1.797 0.09594 -0.9981 0.4536 +-0.1142 -1.828 0.1546 -0.9981 0.4085 +-0.1166 -1.866 0.2168 -0.9981 0.3624 +-0.1193 -1.91 0.2819 -0.9981 0.3153 +-0.1225 -1.961 0.3493 -0.9981 0.2675 +-0.126 -2.017 0.4185 -0.9981 0.219 +-0.1298 -2.077 0.4888 -0.9981 0.17 +-0.1338 -2.142 0.5597 -0.9981 0.1205 +-0.138 -2.21 0.6304 -0.9981 0.07074 +-0.1425 -2.281 0.7002 -0.9981 0.02079 +-0.147 -2.354 0.7685 -0.9981 -0.0292 +-0.1517 -2.428 0.8345 -0.9981 -0.07912 +-0.1563 -2.502 0.8977 -0.9981 -0.1288 +-0.161 -2.577 0.9573 -0.9981 -0.1782 +-0.1656 -2.651 1.013 -0.9981 -0.2272 +-0.1701 -2.723 1.063 -0.9981 -0.2756 +-0.1745 -2.793 1.109 -0.9981 -0.3233 +-0.1786 -2.86 1.148 -0.9981 -0.3702 +-0.1826 -2.923 1.181 -0.9981 -0.4161 +-0.1863 -2.983 1.207 -0.9981 -0.4611 +-0.1898 -3.038 1.226 -0.9981 -0.5048 +-0.1929 -3.089 1.237 -0.9981 -0.5474 +-0.1958 -3.134 1.241 -0.9981 -0.5885 +-0.1982 -3.174 1.236 -0.9981 -0.6282 +-0.2004 -3.207 1.224 -0.9981 -0.6663 +-0.2021 -3.235 1.203 -0.9981 -0.7027 +-0.2035 -3.257 1.174 -0.9981 -0.7374 +-0.2045 -3.273 1.138 -0.9981 -0.7702 +-0.2051 -3.283 1.093 -0.9981 -0.8011 +-0.2053 -3.286 1.04 -0.9981 -0.8301 +-0.2052 -3.285 0.9806 -0.9981 -0.8569 +-0.2047 -3.277 0.9139 -0.9981 -0.8816 +-0.2039 -3.264 0.8406 -0.9981 -0.9041 +-0.2028 -3.247 0.7613 -0.9981 -0.9243 +-0.2014 -3.224 0.6764 -0.9981 -0.9422 +-0.1998 -3.198 0.5866 -0.9981 -0.9578 +-0.1979 -3.169 0.4925 -0.9981 -0.971 +-0.1959 -3.136 0.3948 -0.9981 -0.9817 +-0.1937 -3.101 0.2942 -0.9981 -0.99 +-0.1914 -3.064 0.1914 -0.9981 -0.9958 +-0.189 -3.026 0.0872 -0.9981 -0.9991 +-0.1866 -2.988 -0.01764 -0.9981 -1 +-0.1842 -2.949 -0.1223 -0.9981 -0.9983 +-0.1819 -2.912 -0.2261 -0.9981 -0.9941 +-0.1796 -2.875 -0.3283 -0.9981 -0.9875 +-0.1775 -2.841 -0.428 -0.9981 -0.9784 +-0.1755 -2.809 -0.5246 -0.9981 -0.9668 +-0.1737 -2.781 -0.6173 -0.9981 -0.9528 +-0.1722 -2.756 -0.7055 -0.9981 -0.9365 +-0.1709 -2.735 -0.7886 -0.9981 -0.9178 +-0.1699 -2.719 -0.8659 -0.9981 -0.8968 +-0.1692 -2.708 -0.9371 -0.9981 -0.8735 +-0.1688 -2.703 -1.002 -0.9981 -0.8481 +-0.1688 -2.702 -1.059 -0.9981 -0.8206 +-0.1692 -2.708 -1.109 -0.9981 -0.791 +-0.1699 -2.72 -1.151 -0.9981 -0.7594 +-0.171 -2.738 -1.185 -0.9981 -0.7259 +-0.1725 -2.762 -1.211 -0.9981 -0.6907 +-0.1744 -2.792 -1.229 -0.9981 -0.6536 +-0.1766 -2.828 -1.239 -0.9981 -0.615 +-0.1792 -2.869 -1.241 -0.9981 -0.5748 +-0.1822 -2.916 -1.234 -0.9981 -0.5332 +-0.1854 -2.968 -1.22 -0.9981 -0.4903 +-0.189 -3.025 -1.199 -0.9981 -0.4461 +-0.1928 -3.086 -1.171 -0.9981 -0.4008 +-0.1968 -3.151 -1.135 -0.9981 -0.3545 +-0.2011 -3.219 -1.094 -0.9981 -0.3073 +-0.2055 -3.29 -1.047 -0.9981 -0.2594 +-0.21 -3.362 -0.9946 -0.9981 -0.2108 +-0.2147 -3.436 -0.9377 -0.9981 -0.1617 +-0.2193 -3.511 -0.8768 -0.9981 -0.1122 +-0.224 -3.586 -0.8126 -0.9981 -0.06235 +-0.2286 -3.659 -0.7457 -0.9981 -0.01239 +-0.2331 -3.732 -0.6768 -0.9981 0.0376 +-0.2375 -3.802 -0.6067 -0.9981 0.0875 +-0.2417 -3.869 -0.5359 -0.9981 0.1372 +-0.2456 -3.932 -0.4651 -0.9981 0.1865 +-0.2493 -3.991 -0.3951 -0.9981 0.2354 +-0.2527 -4.045 -0.3264 -0.9981 0.2837 +-0.2557 -4.094 -0.2597 -0.9981 0.3312 +-0.2584 -4.136 -0.1955 -0.9981 0.378 +-0.2606 -4.172 -0.1345 -0.9981 0.4238 +-0.2624 -4.2 -0.07706 -0.9981 0.4685 +-0.2637 -4.221 -0.02367 -0.9981 0.5121 +-0.2645 -4.234 0.02526 -0.9981 0.5544 +-0.2648 -4.239 0.0694 -0.9981 0.5953 +-0.2646 -4.236 0.1085 -0.9981 0.6347 +-0.2639 -4.224 0.1422 -0.9981 0.6725 +-0.2626 -4.204 0.1705 -0.9981 0.7087 +-0.2608 -4.175 0.1932 -0.9981 0.743 +-0.2585 -4.138 0.2104 -0.9981 0.7756 +-0.2557 -4.092 0.222 -0.9981 0.8061 +-0.2523 -4.039 0.2281 -0.9981 0.8347 +-0.2485 -3.978 0.229 -0.9981 0.8612 +-0.2443 -3.91 0.2248 -0.9981 0.8855 +-0.2396 -3.835 0.2158 -0.9981 0.9076 +-0.2345 -3.754 0.2024 -0.9981 0.9275 +-0.2291 -3.667 0.1849 -0.9981 0.945 +-0.2234 -3.575 0.1638 -0.9981 0.9602 +-0.2173 -3.479 0.1395 -0.9981 0.9729 +-0.2111 -3.379 0.1125 -0.9981 0.9833 +-0.2047 -3.276 0.08346 -0.9981 0.9911 +-0.1981 -3.171 0.05283 -0.9981 0.9965 +-0.1915 -3.065 0.02123 -0.9981 0.9994 +-0.03717 -3 0 -0.9999 1 +-0.03585 -2.894 -0.0346 -0.9999 0.9988 +-0.03455 -2.788 -0.06858 -0.9999 0.995 +-0.03326 -2.685 -0.1013 -0.9999 0.9888 +-0.032 -2.583 -0.1323 -0.9999 0.9801 +-0.03079 -2.485 -0.1609 -0.9999 0.9689 +-0.02962 -2.39 -0.1865 -0.9999 0.9553 +-0.0285 -2.301 -0.2087 -0.9999 0.9394 +-0.02745 -2.216 -0.227 -0.9999 0.9211 +-0.02647 -2.137 -0.241 -0.9999 0.9004 +-0.02558 -2.064 -0.2502 -0.9999 0.8776 +-0.02476 -1.998 -0.2544 -0.9999 0.8525 +-0.02404 -1.94 -0.2532 -0.9999 0.8253 +-0.0234 -1.889 -0.2465 -0.9999 0.7961 +-0.02287 -1.846 -0.2341 -0.9999 0.7648 +-0.02244 -1.811 -0.216 -0.9999 0.7317 +-0.02211 -1.785 -0.192 -0.9999 0.6967 +-0.02188 -1.766 -0.1623 -0.9999 0.66 +-0.02176 -1.757 -0.127 -0.9999 0.6216 +-0.02174 -1.755 -0.08625 -0.9999 0.5817 +-0.02183 -1.762 -0.04029 -0.9999 0.5403 +-0.02201 -1.776 0.01056 -0.9999 0.4976 +-0.02228 -1.798 0.06593 -0.9999 0.4536 +-0.02265 -1.828 0.1254 -0.9999 0.4085 +-0.0231 -1.864 0.1885 -0.9999 0.3624 +-0.02363 -1.907 0.2546 -0.9999 0.3153 +-0.02423 -1.956 0.3233 -0.9999 0.2675 +-0.0249 -2.01 0.3939 -0.9999 0.219 +-0.02563 -2.069 0.4657 -0.9999 0.17 +-0.02641 -2.132 0.5382 -0.9999 0.1205 +-0.02724 -2.198 0.6105 -0.9999 0.07074 +-0.0281 -2.268 0.6821 -0.9999 0.02079 +-0.02898 -2.339 0.7522 -0.9999 -0.0292 +-0.02988 -2.412 0.8201 -0.9999 -0.07912 +-0.03079 -2.485 0.8851 -0.9999 -0.1288 +-0.03169 -2.558 0.9466 -0.9999 -0.1782 +-0.03259 -2.63 1.004 -0.9999 -0.2272 +-0.03347 -2.701 1.056 -0.9999 -0.2756 +-0.03432 -2.77 1.103 -0.9999 -0.3233 +-0.03514 -2.836 1.144 -0.9999 -0.3702 +-0.03592 -2.899 1.179 -0.9999 -0.4161 +-0.03665 -2.958 1.206 -0.9999 -0.4611 +-0.03733 -3.013 1.227 -0.9999 -0.5048 +-0.03796 -3.063 1.239 -0.9999 -0.5474 +-0.03852 -3.109 1.244 -0.9999 -0.5885 +-0.03901 -3.148 1.241 -0.9999 -0.6282 +-0.03943 -3.183 1.229 -0.9999 -0.6663 +-0.03979 -3.211 1.209 -0.9999 -0.7027 +-0.04007 -3.234 1.181 -0.9999 -0.7374 +-0.04027 -3.251 1.144 -0.9999 -0.7702 +-0.04041 -3.261 1.1 -0.9999 -0.8011 +-0.04047 -3.267 1.047 -0.9999 -0.8301 +-0.04047 -3.266 0.9876 -0.9999 -0.8569 +-0.04039 -3.26 0.9207 -0.9999 -0.8816 +-0.04026 -3.249 0.8471 -0.9999 -0.9041 +-0.04006 -3.234 0.7673 -0.9999 -0.9243 +-0.03981 -3.213 0.6819 -0.9999 -0.9422 +-0.03952 -3.19 0.5915 -0.9999 -0.9578 +-0.03918 -3.162 0.4967 -0.9999 -0.971 +-0.0388 -3.132 0.3982 -0.9999 -0.9817 +-0.0384 -3.099 0.2968 -0.9999 -0.99 +-0.03798 -3.065 0.1931 -0.9999 -0.9958 +-0.03754 -3.03 0.08797 -0.9999 -0.9991 +-0.03709 -2.994 -0.0178 -0.9999 -1 +-0.03665 -2.958 -0.1234 -0.9999 -0.9983 +-0.03621 -2.923 -0.2281 -0.9999 -0.9941 +-0.03579 -2.889 -0.3312 -0.9999 -0.9875 +-0.0354 -2.857 -0.4317 -0.9999 -0.9784 +-0.03504 -2.828 -0.529 -0.9999 -0.9668 +-0.03471 -2.802 -0.6224 -0.9999 -0.9528 +-0.03443 -2.779 -0.7112 -0.9999 -0.9365 +-0.0342 -2.76 -0.7948 -0.9999 -0.9178 +-0.03402 -2.746 -0.8726 -0.9999 -0.8968 +-0.03391 -2.737 -0.9439 -0.9999 -0.8735 +-0.03386 -2.733 -1.008 -0.9999 -0.8481 +-0.03387 -2.734 -1.066 -0.9999 -0.8206 +-0.03396 -2.741 -1.115 -0.9999 -0.791 +-0.03412 -2.754 -1.157 -0.9999 -0.7594 +-0.03435 -2.773 -1.191 -0.9999 -0.7259 +-0.03466 -2.797 -1.216 -0.9999 -0.6907 +-0.03503 -2.828 -1.234 -0.9999 -0.6536 +-0.03548 -2.864 -1.243 -0.9999 -0.615 +-0.036 -2.905 -1.243 -0.9999 -0.5748 +-0.03658 -2.952 -1.236 -0.9999 -0.5332 +-0.03722 -3.004 -1.221 -0.9999 -0.4903 +-0.03792 -3.061 -1.198 -0.9999 -0.4461 +-0.03867 -3.121 -1.168 -0.9999 -0.4008 +-0.03946 -3.185 -1.131 -0.9999 -0.3545 +-0.04029 -3.252 -1.088 -0.9999 -0.3073 +-0.04116 -3.322 -1.039 -0.9999 -0.2594 +-0.04204 -3.393 -0.9851 -0.9999 -0.2108 +-0.04294 -3.466 -0.9263 -0.9999 -0.1617 +-0.04385 -3.539 -0.8636 -0.9999 -0.1122 +-0.04476 -3.613 -0.7975 -0.9999 -0.06235 +-0.04565 -3.685 -0.7288 -0.9999 -0.01239 +-0.04653 -3.755 -0.6582 -0.9999 0.0376 +-0.04737 -3.824 -0.5862 -0.9999 0.0875 +-0.04818 -3.889 -0.5138 -0.9999 0.1372 +-0.04895 -3.951 -0.4415 -0.9999 0.1865 +-0.04966 -4.008 -0.37 -0.9999 0.2354 +-0.05031 -4.061 -0.3 -0.9999 0.2837 +-0.05089 -4.107 -0.2321 -0.9999 0.3312 +-0.05139 -4.148 -0.1669 -0.9999 0.378 +-0.05182 -4.182 -0.105 -0.9999 0.4238 +-0.05215 -4.209 -0.04683 -0.9999 0.4685 +-0.0524 -4.229 0.007065 -0.9999 0.5121 +-0.05254 -4.241 0.05631 -0.9999 0.5544 +-0.05259 -4.245 0.1006 -0.9999 0.5953 +-0.05254 -4.241 0.1395 -0.9999 0.6347 +-0.05238 -4.228 0.173 -0.9999 0.6725 +-0.05212 -4.207 0.2007 -0.9999 0.7087 +-0.05176 -4.178 0.2227 -0.9999 0.743 +-0.05129 -4.14 0.239 -0.9999 0.7756 +-0.05073 -4.094 0.2494 -0.9999 0.8061 +-0.05006 -4.041 0.2542 -0.9999 0.8347 +-0.04931 -3.98 0.2536 -0.9999 0.8612 +-0.04846 -3.912 0.2477 -0.9999 0.8855 +-0.04754 -3.837 0.2368 -0.9999 0.9076 +-0.04653 -3.756 0.2213 -0.9999 0.9275 +-0.04546 -3.669 0.2017 -0.9999 0.945 +-0.04433 -3.578 0.1783 -0.9999 0.9602 +-0.04314 -3.482 0.1516 -0.9999 0.9729 +-0.04191 -3.383 0.1221 -0.9999 0.9833 +-0.04064 -3.28 0.0905 -0.9999 0.9911 +-0.03935 -3.176 0.05726 -0.9999 0.9965 +-0.03804 -3.07 0.023 -0.9999 0.9994 +0.1128 -2.998 0 -0.9993 1 +0.1088 -2.893 -0.03724 -0.9993 0.9988 +0.1049 -2.788 -0.07384 -0.9993 0.995 +0.1011 -2.685 -0.1092 -0.9993 0.9888 +0.09727 -2.585 -0.1427 -0.9993 0.9801 +0.0936 -2.487 -0.1737 -0.9993 0.9689 +0.09007 -2.394 -0.2017 -0.9993 0.9553 +0.08672 -2.305 -0.2262 -0.9993 0.9394 +0.08355 -2.22 -0.2466 -0.9993 0.9211 +0.08059 -2.142 -0.2625 -0.9993 0.9004 +0.07787 -2.069 -0.2735 -0.9993 0.8776 +0.0754 -2.004 -0.2793 -0.9993 0.8525 +0.0732 -1.945 -0.2796 -0.9993 0.8253 +0.07128 -1.894 -0.2742 -0.9993 0.7961 +0.06965 -1.851 -0.2629 -0.9993 0.7648 +0.06833 -1.816 -0.2456 -0.9993 0.7317 +0.0673 -1.789 -0.2224 -0.9993 0.6967 +0.06659 -1.77 -0.1931 -0.9993 0.66 +0.06619 -1.759 -0.1581 -0.9993 0.6216 +0.06609 -1.756 -0.1173 -0.9993 0.5817 +0.0663 -1.762 -0.07123 -0.9993 0.5403 +0.0668 -1.775 -0.02003 -0.9993 0.4976 +0.06758 -1.796 0.03587 -0.9993 0.4536 +0.06863 -1.824 0.09606 -0.9993 0.4085 +0.06994 -1.859 0.16 -0.9993 0.3624 +0.07149 -1.9 0.2272 -0.9993 0.3153 +0.07326 -1.947 0.2971 -0.9993 0.2675 +0.07523 -1.999 0.369 -0.9993 0.219 +0.07738 -2.056 0.4423 -0.9993 0.17 +0.07968 -2.118 0.5163 -0.9993 0.1205 +0.08211 -2.182 0.5903 -0.9993 0.07074 +0.08464 -2.249 0.6636 -0.9993 0.02079 +0.08726 -2.319 0.7354 -0.9993 -0.0292 +0.08992 -2.39 0.8051 -0.9993 -0.07912 +0.09261 -2.461 0.872 -0.9993 -0.1288 +0.09531 -2.533 0.9352 -0.9993 -0.1782 +0.09797 -2.604 0.9943 -0.9993 -0.2272 +0.1006 -2.673 1.048 -0.9993 -0.2756 +0.1031 -2.741 1.097 -0.9993 -0.3233 +0.1056 -2.806 1.14 -0.9993 -0.3702 +0.1079 -2.868 1.176 -0.9993 -0.4161 +0.1101 -2.926 1.205 -0.9993 -0.4611 +0.1122 -2.981 1.227 -0.9993 -0.5048 +0.114 -3.031 1.24 -0.9993 -0.5474 +0.1157 -3.076 1.246 -0.9993 -0.5885 +0.1172 -3.115 1.244 -0.9993 -0.6282 +0.1185 -3.15 1.233 -0.9993 -0.6663 +0.1196 -3.179 1.214 -0.9993 -0.7027 +0.1205 -3.202 1.186 -0.9993 -0.7374 +0.1212 -3.22 1.15 -0.9993 -0.7702 +0.1216 -3.232 1.106 -0.9993 -0.8011 +0.1219 -3.238 1.054 -0.9993 -0.8301 +0.1219 -3.239 0.9939 -0.9993 -0.8569 +0.1217 -3.235 0.9269 -0.9993 -0.8816 +0.1214 -3.226 0.8531 -0.9993 -0.9041 +0.1209 -3.212 0.7729 -0.9993 -0.9243 +0.1202 -3.194 0.6871 -0.9993 -0.9422 +0.1194 -3.173 0.5961 -0.9993 -0.9578 +0.1184 -3.148 0.5006 -0.9993 -0.971 +0.1174 -3.12 0.4014 -0.9993 -0.9817 +0.1163 -3.09 0.2991 -0.9993 -0.99 +0.1151 -3.058 0.1947 -0.9993 -0.9958 +0.1138 -3.026 0.08869 -0.9993 -0.9991 +0.1126 -2.992 -0.01794 -0.9993 -1 +0.1113 -2.959 -0.1244 -0.9993 -0.9983 +0.1101 -2.927 -0.23 -0.9993 -0.9941 +0.109 -2.895 -0.3338 -0.9993 -0.9875 +0.1079 -2.866 -0.4351 -0.9993 -0.9784 +0.1068 -2.839 -0.5332 -0.9993 -0.9668 +0.1059 -2.815 -0.6272 -0.9993 -0.9528 +0.1052 -2.795 -0.7165 -0.9993 -0.9365 +0.1045 -2.778 -0.8006 -0.9993 -0.9178 +0.1041 -2.766 -0.8786 -0.9993 -0.8968 +0.1038 -2.759 -0.9502 -0.9993 -0.8735 +0.1037 -2.756 -1.015 -0.9993 -0.8481 +0.1038 -2.759 -1.072 -0.9993 -0.8206 +0.1041 -2.767 -1.122 -0.9993 -0.791 +0.1047 -2.781 -1.163 -0.9993 -0.7594 +0.1054 -2.801 -1.196 -0.9993 -0.7259 +0.1063 -2.826 -1.221 -0.9993 -0.6907 +0.1075 -2.857 -1.238 -0.9993 -0.6536 +0.1089 -2.893 -1.246 -0.9993 -0.615 +0.1104 -2.935 -1.245 -0.9993 -0.5748 +0.1122 -2.981 -1.237 -0.9993 -0.5332 +0.1141 -3.033 -1.22 -0.9993 -0.4903 +0.1162 -3.089 -1.196 -0.9993 -0.4461 +0.1185 -3.148 -1.165 -0.9993 -0.4008 +0.1208 -3.211 -1.126 -0.9993 -0.3545 +0.1233 -3.277 -1.081 -0.9993 -0.3073 +0.1259 -3.346 -1.031 -0.9993 -0.2594 +0.1285 -3.416 -0.9749 -0.9993 -0.2108 +0.1312 -3.487 -0.9144 -0.9993 -0.1617 +0.1339 -3.559 -0.8499 -0.9993 -0.1122 +0.1366 -3.63 -0.782 -0.9993 -0.06235 +0.1392 -3.7 -0.7115 -0.9993 -0.01239 +0.1418 -3.769 -0.6391 -0.9993 0.0376 +0.1443 -3.836 -0.5655 -0.9993 0.0875 +0.1467 -3.899 -0.4914 -0.9993 0.1372 +0.149 -3.959 -0.4175 -0.9993 0.1865 +0.1511 -4.015 -0.3446 -0.9993 0.2354 +0.153 -4.065 -0.2733 -0.9993 0.2837 +0.1547 -4.11 -0.2043 -0.9993 0.3312 +0.1561 -4.149 -0.1381 -0.9993 0.378 +0.1574 -4.182 -0.07537 -0.9993 0.4238 +0.1583 -4.208 -0.01657 -0.9993 0.4685 +0.159 -4.226 0.0378 -0.9993 0.5121 +0.1594 -4.237 0.08732 -0.9993 0.5544 +0.1595 -4.239 0.1317 -0.9993 0.5953 +0.1593 -4.234 0.1705 -0.9993 0.6347 +0.1588 -4.221 0.2036 -0.9993 0.6725 +0.158 -4.199 0.2308 -0.9993 0.7087 +0.1569 -4.169 0.2521 -0.9993 0.743 +0.1554 -4.131 0.2674 -0.9993 0.7756 +0.1537 -4.085 0.2767 -0.9993 0.8061 +0.1517 -4.032 0.2802 -0.9993 0.8347 +0.1494 -3.971 0.278 -0.9993 0.8612 +0.1469 -3.903 0.2704 -0.9993 0.8855 +0.1441 -3.828 0.2577 -0.9993 0.9076 +0.141 -3.748 0.2402 -0.9993 0.9275 +0.1378 -3.662 0.2184 -0.9993 0.945 +0.1344 -3.571 0.1927 -0.9993 0.9602 +0.1308 -3.476 0.1636 -0.9993 0.9729 +0.1271 -3.377 0.1317 -0.9993 0.9833 +0.1233 -3.276 0.09748 -0.9993 0.9911 +0.1194 -3.172 0.06164 -0.9993 0.9965 +0.1154 -3.068 0.02475 -0.9993 0.9994 +0.2625 -2.988 0 -0.9962 1 +0.2534 -2.885 -0.03986 -0.9962 0.9988 +0.2443 -2.781 -0.07906 -0.9962 0.995 +0.2354 -2.68 -0.117 -0.9962 0.9888 +0.2267 -2.581 -0.153 -0.9962 0.9801 +0.2182 -2.484 -0.1864 -0.9962 0.9689 +0.2101 -2.391 -0.2168 -0.9962 0.9553 +0.2023 -2.303 -0.2434 -0.9962 0.9394 +0.195 -2.22 -0.2659 -0.9962 0.9211 +0.1881 -2.142 -0.2838 -0.9962 0.9004 +0.1818 -2.07 -0.2967 -0.9962 0.8776 +0.1761 -2.005 -0.3041 -0.9962 0.8525 +0.171 -1.947 -0.3059 -0.9962 0.8253 +0.1665 -1.896 -0.3017 -0.9962 0.7961 +0.1627 -1.852 -0.2915 -0.9962 0.7648 +0.1596 -1.817 -0.2751 -0.9962 0.7317 +0.1571 -1.789 -0.2525 -0.9962 0.6967 +0.1554 -1.769 -0.2238 -0.9962 0.66 +0.1544 -1.758 -0.189 -0.9962 0.6216 +0.1541 -1.754 -0.1484 -0.9962 0.5817 +0.1545 -1.759 -0.1021 -0.9962 0.5403 +0.1555 -1.77 -0.05061 -0.9962 0.4976 +0.1572 -1.79 0.005798 -0.9962 0.4536 +0.1595 -1.816 0.06666 -0.9962 0.4085 +0.1624 -1.849 0.1315 -0.9962 0.3624 +0.1659 -1.889 0.1997 -0.9962 0.3153 +0.1699 -1.934 0.2707 -0.9962 0.2675 +0.1743 -1.984 0.3439 -0.9962 0.219 +0.1791 -2.039 0.4186 -0.9962 0.17 +0.1843 -2.098 0.4941 -0.9962 0.1205 +0.1898 -2.161 0.5697 -0.9962 0.07074 +0.1955 -2.226 0.6447 -0.9962 0.02079 +0.2015 -2.294 0.7182 -0.9962 -0.0292 +0.2075 -2.362 0.7897 -0.9962 -0.07912 +0.2136 -2.432 0.8583 -0.9962 -0.1288 +0.2197 -2.502 0.9233 -0.9962 -0.1782 +0.2258 -2.571 0.9841 -0.9962 -0.2272 +0.2318 -2.639 1.04 -0.9962 -0.2756 +0.2376 -2.705 1.09 -0.9962 -0.3233 +0.2432 -2.769 1.135 -0.9962 -0.3702 +0.2486 -2.83 1.172 -0.9962 -0.4161 +0.2536 -2.887 1.203 -0.9962 -0.4611 +0.2583 -2.941 1.226 -0.9962 -0.5048 +0.2626 -2.99 1.241 -0.9962 -0.5474 +0.2666 -3.035 1.248 -0.9962 -0.5885 +0.2701 -3.075 1.246 -0.9962 -0.6282 +0.2731 -3.109 1.236 -0.9962 -0.6663 +0.2757 -3.139 1.218 -0.9962 -0.7027 +0.2778 -3.163 1.191 -0.9962 -0.7374 +0.2794 -3.181 1.155 -0.9962 -0.7702 +0.2806 -3.194 1.111 -0.9962 -0.8011 +0.2812 -3.202 1.059 -0.9962 -0.8301 +0.2815 -3.204 0.9997 -0.9962 -0.8569 +0.2812 -3.202 0.9325 -0.9962 -0.8816 +0.2806 -3.195 0.8585 -0.9962 -0.9041 +0.2796 -3.183 0.7781 -0.9962 -0.9243 +0.2782 -3.167 0.6918 -0.9962 -0.9422 +0.2765 -3.148 0.6003 -0.9962 -0.9578 +0.2745 -3.125 0.5042 -0.9962 -0.971 +0.2723 -3.1 0.4043 -0.9962 -0.9817 +0.2699 -3.073 0.3014 -0.9962 -0.99 +0.2674 -3.044 0.1961 -0.9962 -0.9958 +0.2647 -3.014 0.08936 -0.9962 -0.9991 +0.262 -2.983 -0.01808 -0.9962 -1 +0.2594 -2.953 -0.1254 -0.9962 -0.9983 +0.2568 -2.923 -0.2317 -0.9962 -0.9941 +0.2543 -2.895 -0.3363 -0.9962 -0.9875 +0.2519 -2.868 -0.4383 -0.9962 -0.9784 +0.2498 -2.844 -0.537 -0.9962 -0.9668 +0.2479 -2.822 -0.6316 -0.9962 -0.9528 +0.2463 -2.804 -0.7214 -0.9962 -0.9365 +0.245 -2.79 -0.8058 -0.9962 -0.9178 +0.2441 -2.78 -0.8842 -0.9962 -0.8968 +0.2436 -2.774 -0.9559 -0.9962 -0.8735 +0.2436 -2.773 -1.021 -0.9962 -0.8481 +0.2439 -2.777 -1.078 -0.9962 -0.8206 +0.2448 -2.787 -1.127 -0.9962 -0.791 +0.2461 -2.802 -1.168 -0.9962 -0.7594 +0.2479 -2.822 -1.201 -0.9962 -0.7259 +0.2501 -2.848 -1.225 -0.9962 -0.6907 +0.2529 -2.879 -1.241 -0.9962 -0.6536 +0.2561 -2.915 -1.248 -0.9962 -0.615 +0.2597 -2.957 -1.246 -0.9962 -0.5748 +0.2638 -3.003 -1.237 -0.9962 -0.5332 +0.2682 -3.054 -1.219 -0.9962 -0.4903 +0.2731 -3.109 -1.193 -0.9962 -0.4461 +0.2782 -3.167 -1.16 -0.9962 -0.4008 +0.2836 -3.229 -1.12 -0.9962 -0.3545 +0.2893 -3.294 -1.074 -0.9962 -0.3073 +0.2952 -3.361 -1.022 -0.9962 -0.2594 +0.3012 -3.429 -0.9642 -0.9962 -0.2108 +0.3073 -3.499 -0.9019 -0.9962 -0.1617 +0.3134 -3.568 -0.8356 -0.9962 -0.1122 +0.3195 -3.638 -0.7659 -0.9962 -0.06235 +0.3255 -3.706 -0.6937 -0.9962 -0.01239 +0.3314 -3.773 -0.6196 -0.9962 0.0376 +0.3371 -3.838 -0.5443 -0.9962 0.0875 +0.3425 -3.899 -0.4687 -0.9962 0.1372 +0.3475 -3.957 -0.3934 -0.9962 0.1865 +0.3522 -4.01 -0.3191 -0.9962 0.2354 +0.3565 -4.059 -0.2466 -0.9962 0.2837 +0.3603 -4.102 -0.1764 -0.9962 0.3312 +0.3636 -4.139 -0.1093 -0.9962 0.378 +0.3663 -4.17 -0.04573 -0.9962 0.4238 +0.3684 -4.194 0.01369 -0.9962 0.4685 +0.3699 -4.211 0.0685 -0.9962 0.5121 +0.3707 -4.221 0.1183 -0.9962 0.5544 +0.3709 -4.222 0.1627 -0.9962 0.5953 +0.3703 -4.216 0.2014 -0.9962 0.6347 +0.3691 -4.202 0.2341 -0.9962 0.6725 +0.3671 -4.18 0.2608 -0.9962 0.7087 +0.3645 -4.149 0.2813 -0.9962 0.743 +0.3611 -4.111 0.2956 -0.9962 0.7756 +0.3571 -4.065 0.3038 -0.9962 0.8061 +0.3524 -4.012 0.3059 -0.9962 0.8347 +0.347 -3.951 0.3022 -0.9962 0.8612 +0.3411 -3.883 0.2929 -0.9962 0.8855 +0.3346 -3.81 0.2783 -0.9962 0.9076 +0.3276 -3.73 0.2589 -0.9962 0.9275 +0.3201 -3.645 0.2349 -0.9962 0.945 +0.3122 -3.555 0.2069 -0.9962 0.9602 +0.304 -3.461 0.1755 -0.9962 0.9729 +0.2954 -3.363 0.1411 -0.9962 0.9833 +0.2866 -3.263 0.1044 -0.9962 0.9911 +0.2776 -3.161 0.06599 -0.9962 0.9965 +0.2686 -3.057 0.02649 -0.9962 0.9994 +0.4115 -2.972 0 -0.9905 1 +0.3974 -2.869 -0.04245 -0.9905 0.9988 +0.3833 -2.768 -0.08423 -0.9905 0.995 +0.3694 -2.668 -0.1247 -0.9905 0.9888 +0.3559 -2.57 -0.1632 -0.9905 0.9801 +0.3427 -2.475 -0.199 -0.9905 0.9689 +0.3301 -2.384 -0.2317 -0.9905 0.9553 +0.318 -2.296 -0.2605 -0.9905 0.9394 +0.3066 -2.214 -0.2851 -0.9905 0.9211 +0.296 -2.137 -0.305 -0.9905 0.9004 +0.2861 -2.066 -0.3196 -0.9905 0.8776 +0.2772 -2.001 -0.3287 -0.9905 0.8525 +0.2691 -1.944 -0.3319 -0.9905 0.8253 +0.2621 -1.893 -0.3291 -0.9905 0.7961 +0.2561 -1.849 -0.3199 -0.9905 0.7648 +0.2511 -1.814 -0.3044 -0.9905 0.7317 +0.2473 -1.785 -0.2826 -0.9905 0.6967 +0.2445 -1.765 -0.2543 -0.9905 0.66 +0.2428 -1.753 -0.2198 -0.9905 0.6216 +0.2421 -1.748 -0.1793 -0.9905 0.5817 +0.2426 -1.752 -0.133 -0.9905 0.5403 +0.244 -1.762 -0.08116 -0.9905 0.4976 +0.2465 -1.78 -0.02428 -0.9905 0.4536 +0.2499 -1.805 0.03722 -0.9905 0.4085 +0.2543 -1.836 0.1028 -0.9905 0.3624 +0.2594 -1.873 0.172 -0.9905 0.3153 +0.2654 -1.917 0.2442 -0.9905 0.2675 +0.2721 -1.965 0.3186 -0.9905 0.219 +0.2794 -2.018 0.3947 -0.9905 0.17 +0.2873 -2.075 0.4716 -0.9905 0.1205 +0.2956 -2.135 0.5488 -0.9905 0.07074 +0.3044 -2.198 0.6253 -0.9905 0.02079 +0.3134 -2.263 0.7006 -0.9905 -0.0292 +0.3226 -2.33 0.7737 -0.9905 -0.07912 +0.332 -2.397 0.844 -0.9905 -0.1288 +0.3414 -2.465 0.9108 -0.9905 -0.1782 +0.3507 -2.532 0.9733 -0.9905 -0.2272 +0.3598 -2.598 1.031 -0.9905 -0.2756 +0.3688 -2.663 1.083 -0.9905 -0.3233 +0.3774 -2.725 1.129 -0.9905 -0.3702 +0.3857 -2.785 1.168 -0.9905 -0.4161 +0.3935 -2.841 1.2 -0.9905 -0.4611 +0.4008 -2.894 1.224 -0.9905 -0.5048 +0.4075 -2.943 1.241 -0.9905 -0.5474 +0.4136 -2.987 1.249 -0.9905 -0.5885 +0.4191 -3.026 1.248 -0.9905 -0.6282 +0.4239 -3.061 1.239 -0.9905 -0.6663 +0.428 -3.091 1.221 -0.9905 -0.7027 +0.4314 -3.115 1.195 -0.9905 -0.7374 +0.4341 -3.134 1.16 -0.9905 -0.7702 +0.436 -3.149 1.116 -0.9905 -0.8011 +0.4373 -3.157 1.064 -0.9905 -0.8301 +0.4378 -3.161 1.005 -0.9905 -0.8569 +0.4377 -3.161 0.9376 -0.9905 -0.8816 +0.437 -3.155 0.8634 -0.9905 -0.9041 +0.4356 -3.146 0.7827 -0.9905 -0.9243 +0.4338 -3.132 0.696 -0.9905 -0.9422 +0.4314 -3.115 0.6041 -0.9905 -0.9578 +0.4286 -3.095 0.5075 -0.9905 -0.971 +0.4255 -3.073 0.407 -0.9905 -0.9817 +0.4221 -3.048 0.3034 -0.9905 -0.99 +0.4185 -3.022 0.1974 -0.9905 -0.9958 +0.4147 -2.995 0.08996 -0.9905 -0.9991 +0.4109 -2.967 -0.0182 -0.9905 -1 +0.4071 -2.939 -0.1262 -0.9905 -0.9983 +0.4033 -2.912 -0.2333 -0.9905 -0.9941 +0.3998 -2.887 -0.3385 -0.9905 -0.9875 +0.3965 -2.863 -0.4412 -0.9905 -0.9784 +0.3934 -2.841 -0.5404 -0.9905 -0.9668 +0.3908 -2.822 -0.6355 -0.9905 -0.9528 +0.3886 -2.806 -0.7258 -0.9905 -0.9365 +0.3869 -2.794 -0.8105 -0.9905 -0.9178 +0.3858 -2.786 -0.8891 -0.9905 -0.8968 +0.3853 -2.782 -0.961 -0.9905 -0.8735 +0.3854 -2.783 -1.026 -0.9905 -0.8481 +0.3861 -2.788 -1.083 -0.9905 -0.8206 +0.3876 -2.799 -1.132 -0.9905 -0.791 +0.3898 -2.815 -1.172 -0.9905 -0.7594 +0.3927 -2.836 -1.205 -0.9905 -0.7259 +0.3963 -2.862 -1.228 -0.9905 -0.6907 +0.4007 -2.893 -1.243 -0.9905 -0.6536 +0.4057 -2.93 -1.249 -0.9905 -0.615 +0.4114 -2.971 -1.247 -0.9905 -0.5748 +0.4178 -3.017 -1.236 -0.9905 -0.5332 +0.4247 -3.067 -1.217 -0.9905 -0.4903 +0.4322 -3.121 -1.19 -0.9905 -0.4461 +0.4401 -3.178 -1.156 -0.9905 -0.4008 +0.4485 -3.239 -1.114 -0.9905 -0.3545 +0.4573 -3.302 -1.066 -0.9905 -0.3073 +0.4663 -3.367 -1.012 -0.9905 -0.2594 +0.4755 -3.434 -0.9528 -0.9905 -0.2108 +0.4849 -3.501 -0.8888 -0.9905 -0.1617 +0.4942 -3.569 -0.8207 -0.9905 -0.1122 +0.5036 -3.636 -0.7494 -0.9905 -0.06235 +0.5127 -3.702 -0.6755 -0.9905 -0.01239 +0.5217 -3.767 -0.5997 -0.9905 0.0376 +0.5303 -3.829 -0.5228 -0.9905 0.0875 +0.5385 -3.888 -0.4457 -0.9905 0.1372 +0.5462 -3.944 -0.369 -0.9905 0.1865 +0.5533 -3.995 -0.2934 -0.9905 0.2354 +0.5597 -4.042 -0.2196 -0.9905 0.2837 +0.5654 -4.083 -0.1484 -0.9905 0.3312 +0.5704 -4.118 -0.08035 -0.9905 0.378 +0.5744 -4.148 -0.01605 -0.9905 0.4238 +0.5775 -4.17 0.04395 -0.9905 0.4685 +0.5796 -4.186 0.09917 -0.9905 0.5121 +0.5808 -4.194 0.1492 -0.9905 0.5544 +0.5808 -4.194 0.1936 -0.9905 0.5953 +0.5798 -4.187 0.2321 -0.9905 0.6347 +0.5778 -4.172 0.2645 -0.9905 0.6725 +0.5746 -4.149 0.2906 -0.9905 0.7087 +0.5704 -4.119 0.3104 -0.9905 0.743 +0.5651 -4.08 0.3237 -0.9905 0.7756 +0.5587 -4.034 0.3307 -0.9905 0.8061 +0.5513 -3.981 0.3315 -0.9905 0.8347 +0.543 -3.921 0.3263 -0.9905 0.8612 +0.5337 -3.854 0.3153 -0.9905 0.8855 +0.5236 -3.781 0.2989 -0.9905 0.9076 +0.5127 -3.702 0.2774 -0.9905 0.9275 +0.5011 -3.618 0.2513 -0.9905 0.945 +0.4888 -3.529 0.2211 -0.9905 0.9602 +0.4759 -3.437 0.1873 -0.9905 0.9729 +0.4627 -3.341 0.1505 -0.9905 0.9833 +0.449 -3.242 0.1113 -0.9905 0.9911 +0.435 -3.141 0.0703 -0.9905 0.9965 +0.4209 -3.04 0.02822 -0.9905 0.9994 +0.5595 -2.947 0 -0.9825 1 +0.5405 -2.847 -0.04502 -0.9825 0.9988 +0.5216 -2.747 -0.08935 -0.9825 0.995 +0.5029 -2.649 -0.1323 -0.9825 0.9888 +0.4847 -2.553 -0.1732 -0.9825 0.9801 +0.467 -2.46 -0.2115 -0.9825 0.9689 +0.4499 -2.37 -0.2464 -0.9825 0.9553 +0.4336 -2.284 -0.2775 -0.9825 0.9394 +0.4183 -2.203 -0.3042 -0.9825 0.9211 +0.4039 -2.127 -0.3259 -0.9825 0.9004 +0.3906 -2.057 -0.3424 -0.9825 0.8776 +0.3784 -1.993 -0.3531 -0.9825 0.8525 +0.3676 -1.936 -0.3578 -0.9825 0.8253 +0.358 -1.886 -0.3562 -0.9825 0.7961 +0.3498 -1.842 -0.3482 -0.9825 0.7648 +0.343 -1.807 -0.3336 -0.9825 0.7317 +0.3376 -1.778 -0.3124 -0.9825 0.6967 +0.3337 -1.758 -0.2847 -0.9825 0.66 +0.3312 -1.744 -0.2505 -0.9825 0.6216 +0.3301 -1.739 -0.2101 -0.9825 0.5817 +0.3305 -1.741 -0.1637 -0.9825 0.5403 +0.3322 -1.75 -0.1117 -0.9825 0.4976 +0.3353 -1.766 -0.05435 -0.9825 0.4536 +0.3397 -1.789 0.007763 -0.9825 0.4085 +0.3453 -1.819 0.07416 -0.9825 0.3624 +0.352 -1.854 0.1443 -0.9825 0.3153 +0.3598 -1.895 0.2175 -0.9825 0.2675 +0.3685 -1.941 0.2931 -0.9825 0.219 +0.3781 -1.992 0.3705 -0.9825 0.17 +0.3885 -2.046 0.4488 -0.9825 0.1205 +0.3995 -2.104 0.5275 -0.9825 0.07074 +0.411 -2.165 0.6056 -0.9825 0.02079 +0.4229 -2.228 0.6825 -0.9825 -0.0292 +0.4351 -2.292 0.7573 -0.9825 -0.07912 +0.4475 -2.357 0.8293 -0.9825 -0.1288 +0.4599 -2.423 0.8977 -0.9825 -0.1782 +0.4723 -2.488 0.9619 -0.9825 -0.2272 +0.4845 -2.552 1.021 -0.9825 -0.2756 +0.4964 -2.615 1.075 -0.9825 -0.3233 +0.5079 -2.675 1.122 -0.9825 -0.3702 +0.5189 -2.733 1.163 -0.9825 -0.4161 +0.5294 -2.789 1.196 -0.9825 -0.4611 +0.5392 -2.84 1.222 -0.9825 -0.5048 +0.5483 -2.888 1.239 -0.9825 -0.5474 +0.5566 -2.932 1.249 -0.9825 -0.5885 +0.564 -2.971 1.249 -0.9825 -0.6282 +0.5706 -3.006 1.241 -0.9825 -0.6663 +0.5763 -3.036 1.224 -0.9825 -0.7027 +0.581 -3.06 1.198 -0.9825 -0.7374 +0.5848 -3.08 1.163 -0.9825 -0.7702 +0.5876 -3.095 1.12 -0.9825 -0.8011 +0.5895 -3.105 1.069 -0.9825 -0.8301 +0.5906 -3.111 1.009 -0.9825 -0.8569 +0.5907 -3.112 0.9421 -0.9825 -0.8816 +0.5901 -3.108 0.8678 -0.9825 -0.9041 +0.5886 -3.101 0.7868 -0.9825 -0.9243 +0.5865 -3.089 0.6999 -0.9825 -0.9422 +0.5837 -3.075 0.6075 -0.9825 -0.9578 +0.5804 -3.057 0.5104 -0.9825 -0.971 +0.5767 -3.038 0.4094 -0.9825 -0.9817 +0.5725 -3.016 0.3052 -0.9825 -0.99 +0.5681 -2.992 0.1986 -0.9825 -0.9958 +0.5634 -2.968 0.09052 -0.9825 -0.9991 +0.5587 -2.943 -0.01831 -0.9825 -1 +0.5541 -2.919 -0.127 -0.9825 -0.9983 +0.5495 -2.894 -0.2347 -0.9825 -0.9941 +0.5451 -2.872 -0.3406 -0.9825 -0.9875 +0.5411 -2.85 -0.4438 -0.9825 -0.9784 +0.5375 -2.831 -0.5436 -0.9825 -0.9668 +0.5343 -2.815 -0.6391 -0.9825 -0.9528 +0.5318 -2.801 -0.7297 -0.9825 -0.9365 +0.5299 -2.791 -0.8148 -0.9825 -0.9178 +0.5287 -2.785 -0.8935 -0.9825 -0.8968 +0.5283 -2.783 -0.9655 -0.9825 -0.8735 +0.5287 -2.785 -1.03 -0.9825 -0.8481 +0.5301 -2.792 -1.087 -0.9825 -0.8206 +0.5323 -2.804 -1.136 -0.9825 -0.791 +0.5355 -2.821 -1.176 -0.9825 -0.7594 +0.5396 -2.842 -1.208 -0.9825 -0.7259 +0.5446 -2.869 -1.231 -0.9825 -0.6907 +0.5506 -2.9 -1.245 -0.9825 -0.6536 +0.5574 -2.936 -1.25 -0.9825 -0.615 +0.5652 -2.977 -1.246 -0.9825 -0.5748 +0.5738 -3.022 -1.234 -0.9825 -0.5332 +0.5831 -3.071 -1.214 -0.9825 -0.4903 +0.5931 -3.124 -1.186 -0.9825 -0.4461 +0.6038 -3.18 -1.15 -0.9825 -0.4008 +0.615 -3.24 -1.107 -0.9825 -0.3545 +0.6267 -3.301 -1.057 -0.9825 -0.3073 +0.6387 -3.364 -1.002 -0.9825 -0.2594 +0.6509 -3.429 -0.9409 -0.9825 -0.2108 +0.6633 -3.494 -0.8752 -0.9825 -0.1617 +0.6758 -3.56 -0.8054 -0.9825 -0.1122 +0.6881 -3.625 -0.7324 -0.9825 -0.06235 +0.7002 -3.688 -0.6568 -0.9825 -0.01239 +0.712 -3.751 -0.5794 -0.9825 0.0376 +0.7234 -3.81 -0.501 -0.9825 0.0875 +0.7342 -3.867 -0.4224 -0.9825 0.1372 +0.7443 -3.92 -0.3443 -0.9825 0.1865 +0.7536 -3.969 -0.2674 -0.9825 0.2354 +0.762 -4.014 -0.1925 -0.9825 0.2837 +0.7694 -4.053 -0.1203 -0.9825 0.3312 +0.7758 -4.086 -0.05139 -0.9825 0.378 +0.781 -4.114 0.01363 -0.9825 0.4238 +0.7849 -4.135 0.07418 -0.9825 0.4685 +0.7876 -4.149 0.1298 -0.9825 0.5121 +0.7889 -4.155 0.18 -0.9825 0.5544 +0.7888 -4.155 0.2244 -0.9825 0.5953 +0.7872 -4.147 0.2627 -0.9825 0.6347 +0.7843 -4.131 0.2947 -0.9825 0.6725 +0.7798 -4.108 0.3203 -0.9825 0.7087 +0.774 -4.077 0.3392 -0.9825 0.743 +0.7667 -4.039 0.3516 -0.9825 0.7756 +0.758 -3.993 0.3574 -0.9825 0.8061 +0.748 -3.94 0.3569 -0.9825 0.8347 +0.7367 -3.881 0.3501 -0.9825 0.8612 +0.7242 -3.814 0.3375 -0.9825 0.8855 +0.7105 -3.742 0.3192 -0.9825 0.9076 +0.6957 -3.665 0.2957 -0.9825 0.9275 +0.68 -3.582 0.2675 -0.9825 0.945 +0.6635 -3.495 0.2351 -0.9825 0.9602 +0.6462 -3.404 0.199 -0.9825 0.9729 +0.6283 -3.31 0.1597 -0.9825 0.9833 +0.6099 -3.213 0.1181 -0.9825 0.9911 +0.5912 -3.114 0.07456 -0.9825 0.9965 +0.5722 -3.014 0.02992 -0.9825 0.9994 +0.7061 -2.916 0 -0.9719 1 +0.6824 -2.818 -0.04756 -0.9719 0.9988 +0.6588 -2.72 -0.09441 -0.9719 0.995 +0.6355 -2.624 -0.1399 -0.9719 0.9888 +0.6127 -2.53 -0.1832 -0.9719 0.9801 +0.5906 -2.439 -0.2238 -0.9719 0.9689 +0.5693 -2.351 -0.261 -0.9719 0.9553 +0.549 -2.267 -0.2943 -0.9719 0.9394 +0.5297 -2.187 -0.323 -0.9719 0.9211 +0.5117 -2.113 -0.3467 -0.9719 0.9004 +0.495 -2.044 -0.3649 -0.9719 0.8776 +0.4797 -1.981 -0.3772 -0.9719 0.8525 +0.466 -1.924 -0.3834 -0.9719 0.8253 +0.454 -1.874 -0.3831 -0.9719 0.7961 +0.4435 -1.831 -0.3762 -0.9719 0.7648 +0.4349 -1.796 -0.3625 -0.9719 0.7317 +0.428 -1.767 -0.342 -0.9719 0.6967 +0.4228 -1.746 -0.3149 -0.9719 0.66 +0.4195 -1.732 -0.281 -0.9719 0.6216 +0.4179 -1.726 -0.2408 -0.9719 0.5817 +0.4181 -1.727 -0.1944 -0.9719 0.5403 +0.42 -1.734 -0.1421 -0.9719 0.4976 +0.4236 -1.749 -0.08438 -0.9719 0.4536 +0.4288 -1.77 -0.0217 -0.9719 0.4085 +0.4354 -1.798 0.04542 -0.9719 0.3624 +0.4435 -1.831 0.1164 -0.9719 0.3153 +0.4529 -1.87 0.1906 -0.9719 0.2675 +0.4634 -1.914 0.2674 -0.9719 0.219 +0.4751 -1.962 0.346 -0.9719 0.17 +0.4877 -2.014 0.4258 -0.9719 0.1205 +0.5011 -2.069 0.5059 -0.9719 0.07074 +0.5151 -2.127 0.5855 -0.9719 0.02079 +0.5297 -2.187 0.6639 -0.9719 -0.0292 +0.5447 -2.249 0.7404 -0.9719 -0.07912 +0.5599 -2.312 0.814 -0.9719 -0.1288 +0.5752 -2.375 0.8841 -0.9719 -0.1782 +0.5904 -2.438 0.9499 -0.9719 -0.2272 +0.6054 -2.5 1.011 -0.9719 -0.2756 +0.6201 -2.561 1.066 -0.9719 -0.3233 +0.6344 -2.619 1.115 -0.9719 -0.3702 +0.6481 -2.676 1.157 -0.9719 -0.4161 +0.6611 -2.73 1.192 -0.9719 -0.4611 +0.6733 -2.78 1.219 -0.9719 -0.5048 +0.6847 -2.827 1.238 -0.9719 -0.5474 +0.6951 -2.87 1.248 -0.9719 -0.5885 +0.7045 -2.909 1.249 -0.9719 -0.6282 +0.7128 -2.943 1.242 -0.9719 -0.6663 +0.7201 -2.973 1.226 -0.9719 -0.7027 +0.7262 -2.998 1.201 -0.9719 -0.7374 +0.7311 -3.019 1.166 -0.9719 -0.7702 +0.735 -3.035 1.124 -0.9719 -0.8011 +0.7377 -3.046 1.072 -0.9719 -0.8301 +0.7394 -3.053 1.013 -0.9719 -0.8569 +0.7399 -3.055 0.946 -0.9719 -0.8816 +0.7395 -3.054 0.8716 -0.9719 -0.9041 +0.7382 -3.048 0.7905 -0.9719 -0.9243 +0.736 -3.039 0.7033 -0.9719 -0.9422 +0.7331 -3.027 0.6106 -0.9719 -0.9578 +0.7295 -3.012 0.5131 -0.9719 -0.971 +0.7253 -2.995 0.4116 -0.9719 -0.9817 +0.7207 -2.976 0.3069 -0.9719 -0.99 +0.7157 -2.955 0.1997 -0.9719 -0.9958 +0.7105 -2.934 0.09101 -0.9719 -0.9991 +0.7053 -2.912 -0.01841 -0.9719 -1 +0.7 -2.89 -0.1277 -0.9719 -0.9983 +0.6949 -2.869 -0.236 -0.9719 -0.9941 +0.69 -2.849 -0.3424 -0.9719 -0.9875 +0.6855 -2.83 -0.4461 -0.9719 -0.9784 +0.6815 -2.814 -0.5463 -0.9719 -0.9668 +0.6781 -2.8 -0.6423 -0.9719 -0.9528 +0.6754 -2.789 -0.7332 -0.9719 -0.9365 +0.6735 -2.781 -0.8185 -0.9719 -0.9178 +0.6725 -2.777 -0.8974 -0.9719 -0.8968 +0.6724 -2.776 -0.9694 -0.9719 -0.8735 +0.6734 -2.78 -1.034 -0.9719 -0.8481 +0.6754 -2.789 -1.091 -0.9719 -0.8206 +0.6785 -2.801 -1.139 -0.9719 -0.791 +0.6827 -2.819 -1.179 -0.9719 -0.7594 +0.688 -2.841 -1.21 -0.9719 -0.7259 +0.6945 -2.868 -1.232 -0.9719 -0.6907 +0.7022 -2.899 -1.246 -0.9719 -0.6536 +0.7109 -2.935 -1.25 -0.9719 -0.615 +0.7206 -2.975 -1.245 -0.9719 -0.5748 +0.7313 -3.02 -1.232 -0.9719 -0.5332 +0.743 -3.068 -1.211 -0.9719 -0.4903 +0.7555 -3.12 -1.181 -0.9719 -0.4461 +0.7687 -3.174 -1.144 -0.9719 -0.4008 +0.7826 -3.232 -1.099 -0.9719 -0.3545 +0.7971 -3.291 -1.048 -0.9719 -0.3073 +0.8119 -3.352 -0.9909 -0.9719 -0.2594 +0.827 -3.415 -0.9283 -0.9719 -0.2108 +0.8423 -3.478 -0.861 -0.9719 -0.1617 +0.8575 -3.541 -0.7896 -0.9719 -0.1122 +0.8727 -3.603 -0.7149 -0.9719 -0.06235 +0.8875 -3.665 -0.6377 -0.9719 -0.01239 +0.9019 -3.724 -0.5588 -0.9719 0.0376 +0.9158 -3.781 -0.4789 -0.9719 0.0875 +0.9289 -3.836 -0.3989 -0.9719 0.1372 +0.9412 -3.886 -0.3194 -0.9719 0.1865 +0.9525 -3.933 -0.2413 -0.9719 0.2354 +0.9627 -3.975 -0.1653 -0.9719 0.2837 +0.9717 -4.012 -0.09214 -0.9719 0.3312 +0.9793 -4.043 -0.02239 -0.9719 0.378 +0.9854 -4.069 0.0433 -0.9719 0.4238 +0.9901 -4.088 0.1044 -0.9719 0.4685 +0.9931 -4.1 0.1603 -0.9719 0.5121 +0.9944 -4.106 0.2106 -0.9719 0.5544 +0.994 -4.104 0.255 -0.9719 0.5953 +0.9919 -4.095 0.2931 -0.9719 0.6347 +0.9879 -4.079 0.3247 -0.9719 0.6725 +0.9822 -4.056 0.3497 -0.9719 0.7087 +0.9747 -4.025 0.3679 -0.9719 0.743 +0.9654 -3.986 0.3792 -0.9719 0.7756 +0.9545 -3.941 0.3839 -0.9719 0.8061 +0.9418 -3.889 0.382 -0.9719 0.8347 +0.9276 -3.83 0.3738 -0.9719 0.8612 +0.9118 -3.765 0.3594 -0.9719 0.8855 +0.8947 -3.694 0.3393 -0.9719 0.9076 +0.8762 -3.618 0.3139 -0.9719 0.9275 +0.8566 -3.537 0.2836 -0.9719 0.945 +0.8359 -3.452 0.2489 -0.9719 0.9602 +0.8143 -3.362 0.2105 -0.9719 0.9729 +0.792 -3.27 0.1689 -0.9719 0.9833 +0.769 -3.175 0.1248 -0.9719 0.9911 +0.7456 -3.079 0.07878 -0.9719 0.9965 +0.7219 -2.981 0.03161 -0.9719 0.9994 +0.851 -2.877 0 -0.9589 1 +0.8227 -2.781 -0.05007 -0.9589 0.9988 +0.7946 -2.686 -0.09942 -0.9589 0.995 +0.7669 -2.592 -0.1473 -0.9589 0.9888 +0.7397 -2.501 -0.1931 -0.9589 0.9801 +0.7134 -2.412 -0.236 -0.9589 0.9689 +0.688 -2.326 -0.2755 -0.9589 0.9553 +0.6637 -2.244 -0.3109 -0.9589 0.9394 +0.6407 -2.166 -0.3416 -0.9589 0.9211 +0.6192 -2.093 -0.3672 -0.9589 0.9004 +0.5992 -2.026 -0.3872 -0.9589 0.8776 +0.5809 -1.964 -0.4012 -0.9589 0.8525 +0.5644 -1.908 -0.4088 -0.9589 0.8253 +0.5499 -1.859 -0.4098 -0.9589 0.7961 +0.5373 -1.816 -0.4039 -0.9589 0.7648 +0.5267 -1.781 -0.3912 -0.9589 0.7317 +0.5183 -1.752 -0.3715 -0.9589 0.6967 +0.5119 -1.731 -0.3448 -0.9589 0.66 +0.5076 -1.716 -0.3114 -0.9589 0.6216 +0.5055 -1.709 -0.2713 -0.9589 0.5817 +0.5054 -1.708 -0.2249 -0.9589 0.5403 +0.5073 -1.715 -0.1724 -0.9589 0.4976 +0.5112 -1.728 -0.1144 -0.9589 0.4536 +0.517 -1.748 -0.05115 -0.9589 0.4085 +0.5245 -1.773 0.01666 -0.9589 0.3624 +0.5337 -1.804 0.08848 -0.9589 0.3153 +0.5445 -1.841 0.1637 -0.9589 0.2675 +0.5567 -1.882 0.2416 -0.9589 0.219 +0.5702 -1.927 0.3214 -0.9589 0.17 +0.5848 -1.977 0.4024 -0.9589 0.1205 +0.6003 -2.029 0.4839 -0.9589 0.07074 +0.6167 -2.085 0.565 -0.9589 0.02079 +0.6337 -2.142 0.645 -0.9589 -0.0292 +0.6512 -2.201 0.723 -0.9589 -0.07912 +0.669 -2.262 0.7982 -0.9589 -0.1288 +0.6869 -2.322 0.8699 -0.9589 -0.1782 +0.7048 -2.383 0.9373 -0.9589 -0.2272 +0.7225 -2.442 0.9998 -0.9589 -0.2756 +0.7398 -2.501 1.057 -0.9589 -0.3233 +0.7566 -2.558 1.107 -0.9589 -0.3702 +0.7728 -2.613 1.15 -0.9589 -0.4161 +0.7882 -2.665 1.187 -0.9589 -0.4611 +0.8028 -2.714 1.215 -0.9589 -0.5048 +0.8163 -2.76 1.235 -0.9589 -0.5474 +0.8288 -2.802 1.246 -0.9589 -0.5885 +0.8401 -2.84 1.249 -0.9589 -0.6282 +0.8502 -2.874 1.242 -0.9589 -0.6663 +0.8591 -2.904 1.227 -0.9589 -0.7027 +0.8666 -2.93 1.202 -0.9589 -0.7374 +0.8728 -2.951 1.169 -0.9589 -0.7702 +0.8778 -2.967 1.126 -0.9589 -0.8011 +0.8814 -2.98 1.075 -0.9589 -0.8301 +0.8838 -2.988 1.016 -0.9589 -0.8569 +0.885 -2.992 0.9493 -0.9589 -0.8816 +0.8851 -2.992 0.8749 -0.9589 -0.9041 +0.884 -2.988 0.7937 -0.9589 -0.9243 +0.882 -2.982 0.7062 -0.9589 -0.9422 +0.8791 -2.972 0.6132 -0.9589 -0.9578 +0.8755 -2.96 0.5154 -0.9589 -0.971 +0.8712 -2.945 0.4135 -0.9589 -0.9817 +0.8664 -2.929 0.3083 -0.9589 -0.99 +0.8611 -2.911 0.2007 -0.9589 -0.9958 +0.8556 -2.893 0.09145 -0.9589 -0.9991 +0.85 -2.874 -0.0185 -0.9589 -1 +0.8445 -2.855 -0.1283 -0.9589 -0.9983 +0.8391 -2.836 -0.2371 -0.9589 -0.9941 +0.8339 -2.819 -0.344 -0.9589 -0.9875 +0.8293 -2.803 -0.4482 -0.9589 -0.9784 +0.8252 -2.79 -0.5488 -0.9589 -0.9668 +0.8218 -2.778 -0.6451 -0.9589 -0.9528 +0.8192 -2.769 -0.7363 -0.9589 -0.9365 +0.8175 -2.764 -0.8217 -0.9589 -0.9178 +0.8168 -2.761 -0.9007 -0.9589 -0.8968 +0.8172 -2.763 -0.9727 -0.9589 -0.8735 +0.8188 -2.768 -1.037 -0.9589 -0.8481 +0.8216 -2.778 -1.094 -0.9589 -0.8206 +0.8257 -2.791 -1.142 -0.9589 -0.791 +0.8311 -2.81 -1.181 -0.9589 -0.7594 +0.8378 -2.832 -1.212 -0.9589 -0.7259 +0.8457 -2.859 -1.233 -0.9589 -0.6907 +0.855 -2.89 -1.246 -0.9589 -0.6536 +0.8655 -2.926 -1.249 -0.9589 -0.615 +0.8772 -2.966 -1.243 -0.9589 -0.5748 +0.8901 -3.009 -1.229 -0.9589 -0.5332 +0.904 -3.056 -1.206 -0.9589 -0.4903 +0.9188 -3.106 -1.175 -0.9589 -0.4461 +0.9345 -3.159 -1.137 -0.9589 -0.4008 +0.9509 -3.215 -1.091 -0.9589 -0.3545 +0.9679 -3.272 -1.038 -0.9589 -0.3073 +0.9854 -3.331 -0.9794 -0.9589 -0.2594 +1.003 -3.391 -0.9152 -0.9589 -0.2108 +1.021 -3.452 -0.8462 -0.9589 -0.1617 +1.039 -3.512 -0.7733 -0.9589 -0.1122 +1.057 -3.572 -0.697 -0.9589 -0.06235 +1.074 -3.631 -0.6183 -0.9589 -0.01239 +1.091 -3.688 -0.5378 -0.9589 0.0376 +1.107 -3.742 -0.4565 -0.9589 0.0875 +1.122 -3.794 -0.3751 -0.9589 0.1372 +1.136 -3.842 -0.2944 -0.9589 0.1865 +1.15 -3.886 -0.2151 -0.9589 0.2354 +1.161 -3.926 -0.1381 -0.9589 0.2837 +1.172 -3.96 -0.06392 -0.9589 0.3312 +1.18 -3.99 0.006626 -0.9589 0.378 +1.187 -4.013 0.07295 -0.9589 0.4238 +1.192 -4.031 0.1345 -0.9589 0.4685 +1.196 -4.041 0.1907 -0.9589 0.5121 +1.197 -4.046 0.2412 -0.9589 0.5544 +1.196 -4.043 0.2855 -0.9589 0.5953 +1.193 -4.033 0.3234 -0.9589 0.6347 +1.188 -4.017 0.3546 -0.9589 0.6725 +1.181 -3.993 0.3789 -0.9589 0.7087 +1.172 -3.962 0.3963 -0.9589 0.743 +1.161 -3.924 0.4067 -0.9589 0.7756 +1.147 -3.879 0.4102 -0.9589 0.8061 +1.132 -3.827 0.4069 -0.9589 0.8347 +1.115 -3.77 0.3972 -0.9589 0.8612 +1.096 -3.706 0.3812 -0.9589 0.8855 +1.076 -3.637 0.3592 -0.9589 0.9076 +1.054 -3.562 0.3319 -0.9589 0.9275 +1.03 -3.483 0.2995 -0.9589 0.945 +1.006 -3.399 0.2626 -0.9589 0.9602 +0.9798 -3.312 0.2219 -0.9589 0.9729 +0.9532 -3.222 0.178 -0.9589 0.9833 +0.9259 -3.13 0.1314 -0.9589 0.9911 +0.898 -3.036 0.08295 -0.9589 0.9965 +0.8698 -2.94 0.03328 -0.9589 0.9994 +0.9937 -2.831 0 -0.9435 1 +0.9611 -2.738 -0.05255 -0.9435 0.9988 +0.9287 -2.645 -0.1044 -0.9435 0.995 +0.8967 -2.554 -0.1547 -0.9435 0.9888 +0.8654 -2.465 -0.2028 -0.9435 0.9801 +0.835 -2.379 -0.2481 -0.9435 0.9689 +0.8057 -2.295 -0.2898 -0.9435 0.9553 +0.7776 -2.215 -0.3273 -0.9435 0.9394 +0.7511 -2.139 -0.3601 -0.9435 0.9211 +0.7261 -2.068 -0.3876 -0.9435 0.9004 +0.703 -2.002 -0.4093 -0.9435 0.8776 +0.6818 -1.942 -0.4248 -0.9435 0.8525 +0.6626 -1.887 -0.4339 -0.9435 0.8253 +0.6456 -1.839 -0.4362 -0.9435 0.7961 +0.6309 -1.797 -0.4315 -0.9435 0.7648 +0.6184 -1.762 -0.4196 -0.9435 0.7317 +0.6084 -1.733 -0.4007 -0.9435 0.6967 +0.6007 -1.711 -0.3746 -0.9435 0.66 +0.5955 -1.696 -0.3416 -0.9435 0.6216 +0.5926 -1.688 -0.3017 -0.9435 0.5817 +0.5921 -1.687 -0.2553 -0.9435 0.5403 +0.594 -1.692 -0.2027 -0.9435 0.4976 +0.598 -1.703 -0.1443 -0.9435 0.4536 +0.6042 -1.721 -0.08057 -0.9435 0.4085 +0.6125 -1.745 -0.01212 -0.9435 0.3624 +0.6226 -1.774 0.06049 -0.9435 0.3153 +0.6346 -1.808 0.1366 -0.9435 0.2675 +0.6482 -1.846 0.2155 -0.9435 0.219 +0.6632 -1.889 0.2965 -0.9435 0.17 +0.6796 -1.936 0.3789 -0.9435 0.1205 +0.6971 -1.986 0.4617 -0.9435 0.07074 +0.7156 -2.038 0.5442 -0.9435 0.02079 +0.7348 -2.093 0.6256 -0.9435 -0.0292 +0.7545 -2.149 0.7051 -0.9435 -0.07912 +0.7747 -2.207 0.7819 -0.9435 -0.1288 +0.795 -2.265 0.8552 -0.9435 -0.1782 +0.8153 -2.322 0.9242 -0.9435 -0.2272 +0.8354 -2.38 0.9881 -0.9435 -0.2756 +0.8552 -2.436 1.046 -0.9435 -0.3233 +0.8744 -2.491 1.098 -0.9435 -0.3702 +0.8929 -2.544 1.143 -0.9435 -0.4161 +0.9106 -2.594 1.181 -0.9435 -0.4611 +0.9274 -2.642 1.21 -0.9435 -0.5048 +0.943 -2.686 1.231 -0.9435 -0.5474 +0.9575 -2.727 1.244 -0.9435 -0.5885 +0.9707 -2.765 1.247 -0.9435 -0.6282 +0.9825 -2.799 1.242 -0.9435 -0.6663 +0.993 -2.829 1.227 -0.9435 -0.7027 +1.002 -2.854 1.203 -0.9435 -0.7374 +1.01 -2.876 1.17 -0.9435 -0.7702 +1.016 -2.893 1.128 -0.9435 -0.8011 +1.02 -2.906 1.078 -0.9435 -0.8301 +1.024 -2.916 1.019 -0.9435 -0.8569 +1.026 -2.921 0.952 -0.9435 -0.8816 +1.026 -2.923 0.8776 -0.9435 -0.9041 +1.026 -2.922 0.7963 -0.9435 -0.9243 +1.024 -2.917 0.7087 -0.9435 -0.9422 +1.021 -2.91 0.6155 -0.9435 -0.9578 +1.018 -2.9 0.5174 -0.9435 -0.971 +1.014 -2.888 0.4151 -0.9435 -0.9817 +1.009 -2.874 0.3096 -0.9435 -0.99 +1.004 -2.86 0.2015 -0.9435 -0.9958 +0.9984 -2.844 0.09183 -0.9435 -0.9991 +0.9928 -2.828 -0.01858 -0.9435 -1 +0.9872 -2.812 -0.1288 -0.9435 -0.9983 +0.9817 -2.797 -0.2381 -0.9435 -0.9941 +0.9767 -2.782 -0.3454 -0.9435 -0.9875 +0.9721 -2.769 -0.4499 -0.9435 -0.9784 +0.9681 -2.758 -0.5509 -0.9435 -0.9668 +0.9649 -2.749 -0.6474 -0.9435 -0.9528 +0.9627 -2.742 -0.7388 -0.9435 -0.9365 +0.9614 -2.739 -0.8244 -0.9435 -0.9178 +0.9613 -2.738 -0.9034 -0.9435 -0.8968 +0.9624 -2.741 -0.9753 -0.9435 -0.8735 +0.9647 -2.748 -1.04 -0.9435 -0.8481 +0.9685 -2.759 -1.096 -0.9435 -0.8206 +0.9737 -2.774 -1.143 -0.9435 -0.791 +0.9803 -2.792 -1.182 -0.9435 -0.7594 +0.9883 -2.815 -1.212 -0.9435 -0.7259 +0.9978 -2.842 -1.233 -0.9435 -0.6907 +1.009 -2.873 -1.245 -0.9435 -0.6536 +1.021 -2.908 -1.247 -0.9435 -0.615 +1.035 -2.947 -1.241 -0.9435 -0.5748 +1.05 -2.99 -1.225 -0.9435 -0.5332 +1.066 -3.035 -1.201 -0.9435 -0.4903 +1.083 -3.084 -1.169 -0.9435 -0.4461 +1.101 -3.135 -1.129 -0.9435 -0.4008 +1.119 -3.189 -1.082 -0.9435 -0.3545 +1.139 -3.244 -1.027 -0.9435 -0.3073 +1.159 -3.301 -0.9672 -0.9435 -0.2594 +1.179 -3.358 -0.9015 -0.9435 -0.2108 +1.199 -3.416 -0.831 -0.9435 -0.1617 +1.22 -3.474 -0.7565 -0.9435 -0.1122 +1.24 -3.531 -0.6787 -0.9435 -0.06235 +1.259 -3.587 -0.5984 -0.9435 -0.01239 +1.278 -3.641 -0.5165 -0.9435 0.0376 +1.296 -3.693 -0.4338 -0.9435 0.0875 +1.313 -3.741 -0.3511 -0.9435 0.1372 +1.329 -3.787 -0.2691 -0.9435 0.1865 +1.344 -3.828 -0.1887 -0.9435 0.2354 +1.357 -3.866 -0.1107 -0.9435 0.2837 +1.368 -3.898 -0.03565 -0.9435 0.3312 +1.378 -3.925 0.03563 -0.9435 0.378 +1.386 -3.947 0.1026 -0.9435 0.4238 +1.391 -3.962 0.1645 -0.9435 0.4685 +1.394 -3.972 0.221 -0.9435 0.5121 +1.395 -3.975 0.2716 -0.9435 0.5544 +1.394 -3.971 0.3158 -0.9435 0.5953 +1.39 -3.961 0.3534 -0.9435 0.6347 +1.384 -3.943 0.3842 -0.9435 0.6725 +1.376 -3.919 0.4079 -0.9435 0.7087 +1.365 -3.888 0.4244 -0.9435 0.743 +1.352 -3.851 0.4338 -0.9435 0.7756 +1.336 -3.807 0.4362 -0.9435 0.8061 +1.319 -3.756 0.4316 -0.9435 0.8347 +1.299 -3.7 0.4203 -0.9435 0.8612 +1.277 -3.637 0.4026 -0.9435 0.8855 +1.253 -3.57 0.3789 -0.9435 0.9076 +1.228 -3.497 0.3496 -0.9435 0.9275 +1.2 -3.42 0.3152 -0.9435 0.945 +1.172 -3.339 0.2762 -0.9435 0.9602 +1.142 -3.254 0.2332 -0.9435 0.9729 +1.112 -3.166 0.1869 -0.9435 0.9833 +1.08 -3.076 0.138 -0.9435 0.9911 +1.048 -2.985 0.08706 -0.9435 0.9965 +1.015 -2.892 0.03492 -0.9435 0.9994 +1.134 -2.777 0 -0.9258 1 +1.097 -2.687 -0.05499 -0.9258 0.9988 +1.061 -2.598 -0.1092 -0.9258 0.995 +1.025 -2.51 -0.162 -0.9258 0.9888 +0.9895 -2.424 -0.2124 -0.9258 0.9801 +0.9553 -2.34 -0.26 -0.9258 0.9689 +0.9222 -2.259 -0.3039 -0.9258 0.9553 +0.8906 -2.181 -0.3435 -0.9258 0.9394 +0.8605 -2.108 -0.3783 -0.9258 0.9211 +0.8323 -2.039 -0.4076 -0.9258 0.9004 +0.8061 -1.975 -0.4311 -0.9258 0.8776 +0.7821 -1.916 -0.4483 -0.9258 0.8525 +0.7603 -1.862 -0.4588 -0.9258 0.8253 +0.741 -1.815 -0.4623 -0.9258 0.7961 +0.7241 -1.774 -0.4587 -0.9258 0.7648 +0.7098 -1.739 -0.4478 -0.9258 0.7317 +0.6982 -1.71 -0.4296 -0.9258 0.6967 +0.6892 -1.688 -0.4042 -0.9258 0.66 +0.6829 -1.673 -0.3715 -0.9258 0.6216 +0.6793 -1.664 -0.3319 -0.9258 0.5817 +0.6783 -1.661 -0.2855 -0.9258 0.5403 +0.6798 -1.665 -0.2328 -0.9258 0.4976 +0.6839 -1.675 -0.1741 -0.9258 0.4536 +0.6904 -1.691 -0.1099 -0.9258 0.4085 +0.6991 -1.712 -0.04089 -0.9258 0.3624 +0.71 -1.739 0.03247 -0.9258 0.3153 +0.723 -1.771 0.1095 -0.9258 0.2675 +0.7377 -1.807 0.1894 -0.9258 0.219 +0.7541 -1.847 0.2715 -0.9258 0.17 +0.772 -1.891 0.355 -0.9258 0.1205 +0.7912 -1.938 0.4391 -0.9258 0.07074 +0.8115 -1.988 0.523 -0.9258 0.02079 +0.8326 -2.039 0.6059 -0.9258 -0.0292 +0.8544 -2.093 0.6869 -0.9258 -0.07912 +0.8767 -2.147 0.7651 -0.9258 -0.1288 +0.8992 -2.202 0.8399 -0.9258 -0.1782 +0.9217 -2.258 0.9104 -0.9258 -0.2272 +0.944 -2.312 0.9759 -0.9258 -0.2756 +0.966 -2.366 1.036 -0.9258 -0.3233 +0.9875 -2.419 1.089 -0.9258 -0.3702 +1.008 -2.469 1.135 -0.9258 -0.4161 +1.028 -2.518 1.174 -0.9258 -0.4611 +1.047 -2.564 1.205 -0.9258 -0.5048 +1.064 -2.607 1.227 -0.9258 -0.5474 +1.081 -2.647 1.241 -0.9258 -0.5885 +1.096 -2.684 1.245 -0.9258 -0.6282 +1.109 -2.717 1.241 -0.9258 -0.6663 +1.121 -2.747 1.227 -0.9258 -0.7027 +1.132 -2.773 1.204 -0.9258 -0.7374 +1.141 -2.795 1.171 -0.9258 -0.7702 +1.148 -2.813 1.13 -0.9258 -0.8011 +1.154 -2.827 1.079 -0.9258 -0.8301 +1.158 -2.837 1.021 -0.9258 -0.8569 +1.161 -2.844 0.9541 -0.9258 -0.8816 +1.163 -2.848 0.8798 -0.9258 -0.9041 +1.163 -2.848 0.7985 -0.9258 -0.9243 +1.162 -2.846 0.7108 -0.9258 -0.9422 +1.16 -2.841 0.6174 -0.9258 -0.9578 +1.157 -2.833 0.5191 -0.9258 -0.971 +1.153 -2.824 0.4165 -0.9258 -0.9817 +1.149 -2.813 0.3106 -0.9258 -0.99 +1.144 -2.801 0.2022 -0.9258 -0.9958 +1.138 -2.788 0.09216 -0.9258 -0.9991 +1.133 -2.775 -0.01865 -0.9258 -1 +1.128 -2.762 -0.1293 -0.9258 -0.9983 +1.123 -2.75 -0.2389 -0.9258 -0.9941 +1.118 -2.738 -0.3466 -0.9258 -0.9875 +1.114 -2.727 -0.4514 -0.9258 -0.9784 +1.11 -2.719 -0.5527 -0.9258 -0.9668 +1.107 -2.712 -0.6494 -0.9258 -0.9528 +1.106 -2.708 -0.741 -0.9258 -0.9365 +1.105 -2.706 -0.8266 -0.9258 -0.9178 +1.105 -2.708 -0.9056 -0.9258 -0.8968 +1.107 -2.712 -0.9774 -0.9258 -0.8735 +1.111 -2.721 -1.041 -0.9258 -0.8481 +1.116 -2.732 -1.097 -0.9258 -0.8206 +1.122 -2.748 -1.145 -0.9258 -0.791 +1.13 -2.767 -1.183 -0.9258 -0.7594 +1.139 -2.79 -1.212 -0.9258 -0.7259 +1.15 -2.817 -1.232 -0.9258 -0.6907 +1.163 -2.848 -1.243 -0.9258 -0.6536 +1.177 -2.883 -1.245 -0.9258 -0.615 +1.192 -2.921 -1.237 -0.9258 -0.5748 +1.209 -2.962 -1.221 -0.9258 -0.5332 +1.227 -3.006 -1.195 -0.9258 -0.4903 +1.246 -3.053 -1.162 -0.9258 -0.4461 +1.267 -3.102 -1.121 -0.9258 -0.4008 +1.288 -3.154 -1.072 -0.9258 -0.3545 +1.309 -3.207 -1.016 -0.9258 -0.3073 +1.331 -3.261 -0.9545 -0.9258 -0.2594 +1.354 -3.316 -0.8872 -0.9258 -0.2108 +1.376 -3.371 -0.8152 -0.9258 -0.1617 +1.399 -3.426 -0.7392 -0.9258 -0.1122 +1.421 -3.48 -0.6599 -0.9258 -0.06235 +1.442 -3.533 -0.5782 -0.9258 -0.01239 +1.463 -3.584 -0.4949 -0.9258 0.0376 +1.483 -3.633 -0.4108 -0.9258 0.0875 +1.502 -3.679 -0.3268 -0.9258 0.1372 +1.519 -3.722 -0.2437 -0.9258 0.1865 +1.535 -3.761 -0.1622 -0.9258 0.2354 +1.549 -3.795 -0.08321 -0.9258 0.2837 +1.562 -3.825 -0.00736 -0.9258 0.3312 +1.572 -3.85 0.06462 -0.9258 0.378 +1.58 -3.87 0.1321 -0.9258 0.4238 +1.586 -3.884 0.1945 -0.9258 0.4685 +1.589 -3.892 0.2512 -0.9258 0.5121 +1.59 -3.893 0.3018 -0.9258 0.5544 +1.588 -3.889 0.3459 -0.9258 0.5953 +1.583 -3.878 0.3833 -0.9258 0.6347 +1.576 -3.86 0.4135 -0.9258 0.6725 +1.566 -3.836 0.4366 -0.9258 0.7087 +1.554 -3.805 0.4523 -0.9258 0.743 +1.538 -3.768 0.4607 -0.9258 0.7756 +1.521 -3.725 0.4619 -0.9258 0.8061 +1.5 -3.675 0.456 -0.9258 0.8347 +1.478 -3.62 0.4432 -0.9258 0.8612 +1.453 -3.559 0.4239 -0.9258 0.8855 +1.426 -3.493 0.3984 -0.9258 0.9076 +1.397 -3.423 0.3672 -0.9258 0.9275 +1.367 -3.348 0.3307 -0.9258 0.945 +1.335 -3.269 0.2896 -0.9258 0.9602 +1.301 -3.187 0.2444 -0.9258 0.9729 +1.267 -3.102 0.1958 -0.9258 0.9833 +1.231 -3.015 0.1444 -0.9258 0.9911 +1.195 -2.927 0.09112 -0.9258 0.9965 +1.158 -2.837 0.03655 -0.9258 0.9994 +1.271 -2.717 0 -0.9058 1 +1.231 -2.631 -0.05741 -0.9058 0.9988 +1.19 -2.544 -0.114 -0.9058 0.995 +1.151 -2.459 -0.1691 -0.9058 0.9888 +1.112 -2.376 -0.2219 -0.9058 0.9801 +1.074 -2.295 -0.2717 -0.9058 0.9689 +1.037 -2.217 -0.3178 -0.9058 0.9553 +1.002 -2.142 -0.3595 -0.9058 0.9394 +0.9689 -2.071 -0.3962 -0.9058 0.9211 +0.9376 -2.004 -0.4274 -0.9058 0.9004 +0.9085 -1.942 -0.4526 -0.9058 0.8776 +0.8817 -1.885 -0.4714 -0.9058 0.8525 +0.8574 -1.833 -0.4833 -0.9058 0.8253 +0.8358 -1.786 -0.4881 -0.9058 0.7961 +0.8168 -1.746 -0.4857 -0.9058 0.7648 +0.8007 -1.711 -0.4757 -0.9058 0.7317 +0.7875 -1.683 -0.4583 -0.9058 0.6967 +0.7771 -1.661 -0.4334 -0.9058 0.66 +0.7697 -1.645 -0.4012 -0.9058 0.6216 +0.7652 -1.636 -0.3618 -0.9058 0.5817 +0.7636 -1.632 -0.3155 -0.9058 0.5403 +0.7648 -1.635 -0.2627 -0.9058 0.4976 +0.7688 -1.643 -0.2038 -0.9058 0.4536 +0.7753 -1.657 -0.1392 -0.9058 0.4085 +0.7844 -1.677 -0.06963 -0.9058 0.3624 +0.7959 -1.701 0.004425 -0.9058 0.3153 +0.8095 -1.73 0.08225 -0.9058 0.2675 +0.8252 -1.764 0.1631 -0.9058 0.219 +0.8428 -1.801 0.2463 -0.9058 0.17 +0.862 -1.842 0.331 -0.9058 0.1205 +0.8826 -1.886 0.4163 -0.9058 0.07074 +0.9044 -1.933 0.5016 -0.9058 0.02079 +0.9272 -1.982 0.5858 -0.9058 -0.0292 +0.9508 -2.032 0.6682 -0.9058 -0.07912 +0.9749 -2.084 0.7479 -0.9058 -0.1288 +0.9993 -2.136 0.8241 -0.9058 -0.1782 +1.024 -2.188 0.8961 -0.9058 -0.2272 +1.048 -2.24 0.963 -0.9058 -0.2756 +1.072 -2.292 1.024 -0.9058 -0.3233 +1.096 -2.342 1.079 -0.9058 -0.3702 +1.118 -2.39 1.127 -0.9058 -0.4161 +1.14 -2.437 1.167 -0.9058 -0.4611 +1.161 -2.481 1.199 -0.9058 -0.5048 +1.18 -2.523 1.222 -0.9058 -0.5474 +1.199 -2.562 1.237 -0.9058 -0.5885 +1.215 -2.598 1.242 -0.9058 -0.6282 +1.231 -2.631 1.239 -0.9058 -0.6663 +1.244 -2.66 1.226 -0.9058 -0.7027 +1.256 -2.685 1.203 -0.9058 -0.7374 +1.267 -2.708 1.171 -0.9058 -0.7702 +1.275 -2.726 1.13 -0.9058 -0.8011 +1.283 -2.741 1.08 -0.9058 -0.8301 +1.288 -2.753 1.022 -0.9058 -0.8569 +1.292 -2.761 0.9556 -0.9058 -0.8816 +1.294 -2.766 0.8814 -0.9058 -0.9041 +1.295 -2.769 0.8001 -0.9058 -0.9243 +1.295 -2.768 0.7124 -0.9058 -0.9422 +1.294 -2.765 0.6189 -0.9058 -0.9578 +1.291 -2.76 0.5204 -0.9058 -0.971 +1.288 -2.754 0.4177 -0.9058 -0.9817 +1.284 -2.745 0.3115 -0.9058 -0.99 +1.28 -2.736 0.2028 -0.9058 -0.9958 +1.275 -2.726 0.09242 -0.9058 -0.9991 +1.271 -2.716 -0.0187 -0.9058 -1 +1.266 -2.705 -0.1297 -0.9058 -0.9983 +1.261 -2.695 -0.2396 -0.9058 -0.9941 +1.257 -2.686 -0.3475 -0.9058 -0.9875 +1.253 -2.679 -0.4526 -0.9058 -0.9784 +1.25 -2.672 -0.5541 -0.9058 -0.9668 +1.248 -2.668 -0.651 -0.9058 -0.9528 +1.247 -2.666 -0.7426 -0.9058 -0.9365 +1.248 -2.666 -0.8282 -0.9058 -0.9178 +1.249 -2.67 -0.9072 -0.9058 -0.8968 +1.252 -2.676 -0.9788 -0.9058 -0.8735 +1.256 -2.685 -1.043 -0.9058 -0.8481 +1.262 -2.698 -1.098 -0.9058 -0.8206 +1.27 -2.714 -1.145 -0.9058 -0.791 +1.279 -2.734 -1.183 -0.9058 -0.7594 +1.29 -2.757 -1.212 -0.9058 -0.7259 +1.303 -2.784 -1.231 -0.9058 -0.6907 +1.317 -2.815 -1.241 -0.9058 -0.6536 +1.333 -2.848 -1.242 -0.9058 -0.615 +1.35 -2.885 -1.233 -0.9058 -0.5748 +1.369 -2.925 -1.215 -0.9058 -0.5332 +1.389 -2.968 -1.189 -0.9058 -0.4903 +1.41 -3.013 -1.154 -0.9058 -0.4461 +1.432 -3.06 -1.111 -0.9058 -0.4008 +1.455 -3.11 -1.061 -0.9058 -0.3545 +1.479 -3.16 -1.004 -0.9058 -0.3073 +1.503 -3.212 -0.9411 -0.9058 -0.2594 +1.527 -3.264 -0.8724 -0.9058 -0.2108 +1.552 -3.316 -0.7989 -0.9058 -0.1617 +1.576 -3.368 -0.7214 -0.9058 -0.1122 +1.6 -3.42 -0.6407 -0.9058 -0.06235 +1.623 -3.469 -0.5576 -0.9058 -0.01239 +1.646 -3.518 -0.473 -0.9058 0.0376 +1.667 -3.563 -0.3876 -0.9058 0.0875 +1.687 -3.606 -0.3024 -0.9058 0.1372 +1.706 -3.646 -0.2181 -0.9058 0.1865 +1.723 -3.682 -0.1356 -0.9058 0.2354 +1.738 -3.715 -0.0557 -0.9058 0.2837 +1.751 -3.742 0.02093 -0.9058 0.3312 +1.762 -3.765 0.09357 -0.9058 0.378 +1.77 -3.783 0.1615 -0.9058 0.4238 +1.776 -3.795 0.2243 -0.9058 0.4685 +1.779 -3.801 0.2812 -0.9058 0.5121 +1.779 -3.802 0.3318 -0.9058 0.5544 +1.776 -3.796 0.3758 -0.9058 0.5953 +1.771 -3.785 0.4129 -0.9058 0.6347 +1.762 -3.767 0.4426 -0.9058 0.6725 +1.751 -3.743 0.465 -0.9058 0.7087 +1.737 -3.712 0.4799 -0.9058 0.743 +1.72 -3.676 0.4873 -0.9058 0.7756 +1.7 -3.633 0.4873 -0.9058 0.8061 +1.677 -3.585 0.4801 -0.9058 0.8347 +1.652 -3.531 0.4658 -0.9058 0.8612 +1.625 -3.472 0.4449 -0.9058 0.8855 +1.595 -3.409 0.4176 -0.9058 0.9076 +1.563 -3.34 0.3845 -0.9058 0.9275 +1.529 -3.268 0.346 -0.9058 0.945 +1.493 -3.192 0.3027 -0.9058 0.9602 +1.456 -3.113 0.2553 -0.9058 0.9729 +1.418 -3.031 0.2045 -0.9058 0.9833 +1.379 -2.947 0.1508 -0.9058 0.9911 +1.339 -2.861 0.09513 -0.9058 0.9965 +1.298 -2.775 0.03815 -0.9058 0.9994 +1.406 -2.65 0 -0.8835 1 +1.361 -2.567 -0.05978 -0.8835 0.9988 +1.317 -2.484 -0.1188 -0.8835 0.995 +1.274 -2.403 -0.1762 -0.8835 0.9888 +1.232 -2.323 -0.2313 -0.8835 0.9801 +1.19 -2.245 -0.2833 -0.8835 0.9689 +1.151 -2.169 -0.3315 -0.8835 0.9553 +1.112 -2.097 -0.3753 -0.8835 0.9394 +1.076 -2.029 -0.4139 -0.8835 0.9211 +1.042 -1.964 -0.447 -0.8835 0.9004 +1.01 -1.904 -0.4739 -0.8835 0.8776 +0.9805 -1.849 -0.4942 -0.8835 0.8525 +0.9538 -1.798 -0.5076 -0.8835 0.8253 +0.9299 -1.753 -0.5137 -0.8835 0.7961 +0.9089 -1.714 -0.5123 -0.8835 0.7648 +0.891 -1.68 -0.5034 -0.8835 0.7317 +0.8761 -1.652 -0.4867 -0.8835 0.6967 +0.8644 -1.63 -0.4625 -0.8835 0.66 +0.8559 -1.614 -0.4307 -0.8835 0.6216 +0.8504 -1.604 -0.3916 -0.8835 0.5817 +0.8481 -1.599 -0.3454 -0.8835 0.5403 +0.8488 -1.601 -0.2925 -0.8835 0.4976 +0.8525 -1.607 -0.2334 -0.8835 0.4536 +0.859 -1.62 -0.1685 -0.8835 0.4085 +0.8682 -1.637 -0.09833 -0.8835 0.3624 +0.88 -1.659 -0.02362 -0.8835 0.3153 +0.8942 -1.686 0.05499 -0.8835 0.2675 +0.9106 -1.717 0.1368 -0.8835 0.219 +0.929 -1.752 0.221 -0.8835 0.17 +0.9492 -1.79 0.3067 -0.8835 0.1205 +0.971 -1.831 0.3933 -0.8835 0.07074 +0.9941 -1.875 0.4798 -0.8835 0.02079 +1.018 -1.92 0.5653 -0.8835 -0.0292 +1.043 -1.968 0.6491 -0.8835 -0.07912 +1.069 -2.016 0.7302 -0.8835 -0.1288 +1.095 -2.065 0.8078 -0.8835 -0.1782 +1.121 -2.115 0.8812 -0.8835 -0.2272 +1.148 -2.164 0.9495 -0.8835 -0.2756 +1.173 -2.213 1.012 -0.8835 -0.3233 +1.199 -2.26 1.068 -0.8835 -0.3702 +1.223 -2.307 1.117 -0.8835 -0.4161 +1.247 -2.351 1.159 -0.8835 -0.4611 +1.27 -2.394 1.192 -0.8835 -0.5048 +1.291 -2.434 1.216 -0.8835 -0.5474 +1.311 -2.472 1.232 -0.8835 -0.5885 +1.329 -2.507 1.239 -0.8835 -0.6282 +1.346 -2.538 1.236 -0.8835 -0.6663 +1.361 -2.567 1.224 -0.8835 -0.7027 +1.375 -2.593 1.202 -0.8835 -0.7374 +1.387 -2.615 1.171 -0.8835 -0.7702 +1.397 -2.634 1.13 -0.8835 -0.8011 +1.405 -2.65 1.081 -0.8835 -0.8301 +1.412 -2.662 1.023 -0.8835 -0.8569 +1.417 -2.672 0.9565 -0.8835 -0.8816 +1.421 -2.679 0.8825 -0.8835 -0.9041 +1.423 -2.683 0.8013 -0.8835 -0.9243 +1.424 -2.684 0.7136 -0.8835 -0.9422 +1.423 -2.684 0.6201 -0.8835 -0.9578 +1.422 -2.681 0.5214 -0.8835 -0.971 +1.419 -2.676 0.4185 -0.8835 -0.9817 +1.416 -2.671 0.3122 -0.8835 -0.99 +1.413 -2.664 0.2032 -0.8835 -0.9958 +1.409 -2.657 0.09263 -0.8835 -0.9991 +1.405 -2.649 -0.01874 -0.8835 -1 +1.401 -2.641 -0.13 -0.8835 -0.9983 +1.397 -2.634 -0.2401 -0.8835 -0.9941 +1.394 -2.628 -0.3483 -0.8835 -0.9875 +1.391 -2.623 -0.4536 -0.8835 -0.9784 +1.389 -2.619 -0.5551 -0.8835 -0.9668 +1.388 -2.617 -0.6521 -0.8835 -0.9528 +1.388 -2.617 -0.7438 -0.8835 -0.9365 +1.389 -2.619 -0.8294 -0.8835 -0.9178 +1.392 -2.624 -0.9082 -0.8835 -0.8968 +1.396 -2.632 -0.9797 -0.8835 -0.8735 +1.401 -2.642 -1.043 -0.8835 -0.8481 +1.408 -2.656 -1.098 -0.8835 -0.8206 +1.417 -2.673 -1.145 -0.8835 -0.791 +1.428 -2.693 -1.182 -0.8835 -0.7594 +1.44 -2.716 -1.21 -0.8835 -0.7259 +1.455 -2.743 -1.229 -0.8835 -0.6907 +1.47 -2.773 -1.238 -0.8835 -0.6536 +1.488 -2.806 -1.238 -0.8835 -0.615 +1.507 -2.841 -1.228 -0.8835 -0.5748 +1.527 -2.88 -1.209 -0.8835 -0.5332 +1.549 -2.921 -1.182 -0.8835 -0.4903 +1.572 -2.964 -1.146 -0.8835 -0.4461 +1.596 -3.009 -1.102 -0.8835 -0.4008 +1.621 -3.056 -1.05 -0.8835 -0.3545 +1.646 -3.104 -0.9918 -0.8835 -0.3073 +1.672 -3.153 -0.9272 -0.8835 -0.2594 +1.698 -3.203 -0.8571 -0.8835 -0.2108 +1.725 -3.252 -0.7822 -0.8835 -0.1617 +1.751 -3.301 -0.7032 -0.8835 -0.1122 +1.776 -3.349 -0.6211 -0.8835 -0.06235 +1.801 -3.396 -0.5367 -0.8835 -0.01239 +1.825 -3.441 -0.4507 -0.8835 0.0376 +1.848 -3.484 -0.3641 -0.8835 0.0875 +1.869 -3.524 -0.2778 -0.8835 0.1372 +1.888 -3.561 -0.1924 -0.8835 0.1865 +1.906 -3.594 -0.109 -0.8835 0.2354 +1.922 -3.624 -0.02816 -0.8835 0.2837 +1.935 -3.649 0.04922 -0.8835 0.3312 +1.946 -3.67 0.1225 -0.8835 0.378 +1.955 -3.686 0.1909 -0.8835 0.4238 +1.96 -3.696 0.2539 -0.8835 0.4685 +1.963 -3.701 0.311 -0.8835 0.5121 +1.963 -3.701 0.3617 -0.8835 0.5544 +1.959 -3.694 0.4055 -0.8835 0.5953 +1.953 -3.682 0.4422 -0.8835 0.6347 +1.943 -3.664 0.4715 -0.8835 0.6725 +1.93 -3.64 0.4932 -0.8835 0.7087 +1.914 -3.61 0.5072 -0.8835 0.743 +1.895 -3.574 0.5136 -0.8835 0.7756 +1.874 -3.533 0.5125 -0.8835 0.8061 +1.849 -3.486 0.5039 -0.8835 0.8347 +1.821 -3.434 0.4881 -0.8835 0.8612 +1.791 -3.377 0.4656 -0.8835 0.8855 +1.758 -3.315 0.4365 -0.8835 0.9076 +1.723 -3.249 0.4015 -0.8835 0.9275 +1.686 -3.179 0.3611 -0.8835 0.945 +1.647 -3.106 0.3157 -0.8835 0.9602 +1.607 -3.03 0.2662 -0.8835 0.9729 +1.565 -2.951 0.2131 -0.8835 0.9833 +1.522 -2.871 0.1571 -0.8835 0.9911 +1.479 -2.789 0.09907 -0.8835 0.9965 +1.435 -2.706 0.03973 -0.8835 0.9994 +1.536 -2.577 0 -0.8589 1 +1.489 -2.497 -0.06212 -0.8589 0.9988 +1.442 -2.418 -0.1234 -0.8589 0.995 +1.395 -2.34 -0.1831 -0.8589 0.9888 +1.349 -2.263 -0.2405 -0.8589 0.9801 +1.305 -2.189 -0.2947 -0.8589 0.9689 +1.262 -2.117 -0.345 -0.8589 0.9553 +1.221 -2.047 -0.3908 -0.8589 0.9394 +1.181 -1.982 -0.4314 -0.8589 0.9211 +1.144 -1.92 -0.4663 -0.8589 0.9004 +1.11 -1.862 -0.4949 -0.8589 0.8776 +1.078 -1.808 -0.5167 -0.8589 0.8525 +1.049 -1.76 -0.5315 -0.8589 0.8253 +1.023 -1.716 -0.5389 -0.8589 0.7961 +1 -1.678 -0.5387 -0.8589 0.7648 +0.9805 -1.645 -0.5307 -0.8589 0.7317 +0.964 -1.617 -0.5148 -0.8589 0.6967 +0.9509 -1.595 -0.4912 -0.8589 0.66 +0.9412 -1.579 -0.4599 -0.8589 0.6216 +0.9347 -1.568 -0.4211 -0.8589 0.5817 +0.9316 -1.563 -0.375 -0.8589 0.5403 +0.9317 -1.563 -0.3221 -0.8589 0.4976 +0.9349 -1.568 -0.2628 -0.8589 0.4536 +0.9412 -1.579 -0.1976 -0.8589 0.4085 +0.9504 -1.594 -0.127 -0.8589 0.3624 +0.9623 -1.614 -0.05165 -0.8589 0.3153 +0.9768 -1.638 0.02769 -0.8589 0.2675 +0.9937 -1.667 0.1103 -0.8589 0.219 +1.013 -1.699 0.1955 -0.8589 0.17 +1.034 -1.734 0.2823 -0.8589 0.1205 +1.056 -1.772 0.37 -0.8589 0.07074 +1.081 -1.812 0.4577 -0.8589 0.02079 +1.106 -1.855 0.5445 -0.8589 -0.0292 +1.132 -1.899 0.6295 -0.8589 -0.07912 +1.159 -1.945 0.712 -0.8589 -0.1288 +1.187 -1.991 0.791 -0.8589 -0.1782 +1.215 -2.037 0.8658 -0.8589 -0.2272 +1.242 -2.084 0.9355 -0.8589 -0.2756 +1.27 -2.13 0.9994 -0.8589 -0.3233 +1.297 -2.175 1.057 -0.8589 -0.3702 +1.323 -2.219 1.107 -0.8589 -0.4161 +1.348 -2.261 1.15 -0.8589 -0.4611 +1.372 -2.302 1.184 -0.8589 -0.5048 +1.395 -2.34 1.21 -0.8589 -0.5474 +1.417 -2.377 1.227 -0.8589 -0.5885 +1.437 -2.41 1.234 -0.8589 -0.6282 +1.456 -2.441 1.232 -0.8589 -0.6663 +1.472 -2.47 1.221 -0.8589 -0.7027 +1.487 -2.495 1.2 -0.8589 -0.7374 +1.501 -2.517 1.169 -0.8589 -0.7702 +1.512 -2.537 1.129 -0.8589 -0.8011 +1.522 -2.553 1.08 -0.8589 -0.8301 +1.53 -2.567 1.023 -0.8589 -0.8569 +1.537 -2.577 0.9568 -0.8589 -0.8816 +1.541 -2.585 0.883 -0.8589 -0.9041 +1.545 -2.591 0.802 -0.8589 -0.9243 +1.547 -2.594 0.7143 -0.8589 -0.9422 +1.548 -2.596 0.6208 -0.8589 -0.9578 +1.547 -2.595 0.5221 -0.8589 -0.971 +1.546 -2.593 0.4191 -0.8589 -0.9817 +1.544 -2.59 0.3127 -0.8589 -0.99 +1.542 -2.586 0.2036 -0.8589 -0.9958 +1.539 -2.581 0.09278 -0.8589 -0.9991 +1.536 -2.576 -0.01877 -0.8589 -1 +1.533 -2.571 -0.1302 -0.8589 -0.9983 +1.53 -2.566 -0.2405 -0.8589 -0.9941 +1.528 -2.562 -0.3488 -0.8589 -0.9875 +1.526 -2.56 -0.4542 -0.8589 -0.9784 +1.525 -2.558 -0.5559 -0.8589 -0.9668 +1.525 -2.558 -0.6529 -0.8589 -0.9528 +1.526 -2.56 -0.7445 -0.8589 -0.9365 +1.529 -2.564 -0.83 -0.8589 -0.9178 +1.533 -2.571 -0.9087 -0.8589 -0.8968 +1.538 -2.58 -0.9799 -0.8589 -0.8735 +1.545 -2.591 -1.043 -0.8589 -0.8481 +1.554 -2.606 -1.098 -0.8589 -0.8206 +1.564 -2.623 -1.144 -0.8589 -0.791 +1.576 -2.643 -1.181 -0.8589 -0.7594 +1.59 -2.667 -1.208 -0.8589 -0.7259 +1.606 -2.693 -1.226 -0.8589 -0.6907 +1.623 -2.722 -1.234 -0.8589 -0.6536 +1.642 -2.754 -1.233 -0.8589 -0.615 +1.663 -2.789 -1.222 -0.8589 -0.5748 +1.685 -2.826 -1.202 -0.8589 -0.5332 +1.708 -2.865 -1.174 -0.8589 -0.4903 +1.733 -2.906 -1.136 -0.8589 -0.4461 +1.758 -2.949 -1.091 -0.8589 -0.4008 +1.785 -2.994 -1.038 -0.8589 -0.3545 +1.812 -3.039 -0.9786 -0.8589 -0.3073 +1.84 -3.086 -0.9127 -0.8589 -0.2594 +1.867 -3.132 -0.8412 -0.8589 -0.2108 +1.895 -3.178 -0.7649 -0.8589 -0.1617 +1.922 -3.224 -0.6846 -0.8589 -0.1122 +1.949 -3.269 -0.6012 -0.8589 -0.06235 +1.975 -3.313 -0.5154 -0.8589 -0.01239 +2 -3.355 -0.4282 -0.8589 0.0376 +2.024 -3.395 -0.3404 -0.8589 0.0875 +2.046 -3.432 -0.253 -0.8589 0.1372 +2.066 -3.466 -0.1666 -0.8589 0.1865 +2.085 -3.497 -0.08221 -0.8589 0.2354 +2.101 -3.524 -0.0006019 -0.8589 0.2837 +2.114 -3.547 0.07747 -0.8589 0.3312 +2.126 -3.565 0.1513 -0.8589 0.378 +2.134 -3.579 0.2201 -0.8589 0.4238 +2.139 -3.588 0.2834 -0.8589 0.4685 +2.141 -3.592 0.3407 -0.8589 0.5121 +2.14 -3.59 0.3913 -0.8589 0.5544 +2.136 -3.583 0.4349 -0.8589 0.5953 +2.128 -3.57 0.4712 -0.8589 0.6347 +2.118 -3.552 0.5 -0.8589 0.6725 +2.103 -3.528 0.521 -0.8589 0.7087 +2.086 -3.499 0.5342 -0.8589 0.743 +2.065 -3.464 0.5396 -0.8589 0.7756 +2.041 -3.423 0.5373 -0.8589 0.8061 +2.014 -3.378 0.5274 -0.8589 0.8347 +1.984 -3.328 0.5102 -0.8589 0.8612 +1.951 -3.273 0.486 -0.8589 0.8855 +1.916 -3.214 0.4552 -0.8589 0.9076 +1.878 -3.15 0.4184 -0.8589 0.9275 +1.838 -3.083 0.3759 -0.8589 0.945 +1.796 -3.013 0.3285 -0.8589 0.9602 +1.753 -2.94 0.2768 -0.8589 0.9729 +1.708 -2.865 0.2215 -0.8589 0.9833 +1.662 -2.788 0.1633 -0.8589 0.9911 +1.615 -2.709 0.103 -0.8589 0.9965 +1.568 -2.63 0.04128 -0.8589 0.9994 +1.663 -2.497 0 -0.8323 1 +1.613 -2.421 -0.06442 -0.8323 0.9988 +1.562 -2.346 -0.128 -0.8323 0.995 +1.513 -2.271 -0.19 -0.8323 0.9888 +1.464 -2.198 -0.2495 -0.8323 0.9801 +1.417 -2.127 -0.3059 -0.8323 0.9689 +1.371 -2.058 -0.3583 -0.8323 0.9553 +1.327 -1.992 -0.4061 -0.8323 0.9394 +1.285 -1.929 -0.4486 -0.8323 0.9211 +1.246 -1.87 -0.4853 -0.8323 0.9004 +1.209 -1.814 -0.5155 -0.8323 0.8776 +1.174 -1.763 -0.5389 -0.8323 0.8525 +1.143 -1.716 -0.5551 -0.8323 0.8253 +1.115 -1.674 -0.5638 -0.8323 0.7961 +1.09 -1.637 -0.5647 -0.8323 0.7648 +1.069 -1.605 -0.5576 -0.8323 0.7317 +1.051 -1.578 -0.5426 -0.8323 0.6967 +1.036 -1.556 -0.5196 -0.8323 0.66 +1.025 -1.539 -0.4888 -0.8323 0.6216 +1.018 -1.528 -0.4503 -0.8323 0.5817 +1.014 -1.522 -0.4044 -0.8323 0.5403 +1.013 -1.521 -0.3515 -0.8323 0.4976 +1.016 -1.525 -0.2921 -0.8323 0.4536 +1.022 -1.534 -0.2265 -0.8323 0.4085 +1.031 -1.548 -0.1555 -0.8323 0.3624 +1.043 -1.565 -0.07965 -0.8323 0.3153 +1.057 -1.587 0.0003721 -0.8323 0.2675 +1.074 -1.613 0.0838 -0.8323 0.219 +1.094 -1.642 0.1698 -0.8323 0.17 +1.115 -1.674 0.2577 -0.8323 0.1205 +1.139 -1.709 0.3464 -0.8323 0.07074 +1.164 -1.747 0.4353 -0.8323 0.02079 +1.19 -1.786 0.5233 -0.8323 -0.0292 +1.217 -1.827 0.6096 -0.8323 -0.07912 +1.245 -1.87 0.6934 -0.8323 -0.1288 +1.274 -1.913 0.7737 -0.8323 -0.1782 +1.303 -1.956 0.8498 -0.8323 -0.2272 +1.332 -2 0.9208 -0.8323 -0.2756 +1.361 -2.043 0.9861 -0.8323 -0.3233 +1.389 -2.085 1.045 -0.8323 -0.3702 +1.417 -2.127 1.096 -0.8323 -0.4161 +1.444 -2.167 1.14 -0.8323 -0.4611 +1.469 -2.206 1.176 -0.8323 -0.5048 +1.494 -2.243 1.203 -0.8323 -0.5474 +1.517 -2.277 1.221 -0.8323 -0.5885 +1.539 -2.31 1.229 -0.8323 -0.6282 +1.559 -2.34 1.228 -0.8323 -0.6663 +1.577 -2.368 1.217 -0.8323 -0.7027 +1.594 -2.393 1.197 -0.8323 -0.7374 +1.609 -2.415 1.167 -0.8323 -0.7702 +1.622 -2.434 1.128 -0.8323 -0.8011 +1.633 -2.451 1.079 -0.8323 -0.8301 +1.642 -2.466 1.022 -0.8323 -0.8569 +1.65 -2.477 0.9565 -0.8323 -0.8816 +1.656 -2.487 0.883 -0.8323 -0.9041 +1.661 -2.494 0.8021 -0.8323 -0.9243 +1.665 -2.499 0.7146 -0.8323 -0.9422 +1.667 -2.502 0.6212 -0.8323 -0.9578 +1.668 -2.504 0.5225 -0.8323 -0.971 +1.668 -2.504 0.4195 -0.8323 -0.9817 +1.667 -2.503 0.3129 -0.8323 -0.99 +1.666 -2.501 0.2038 -0.8323 -0.9958 +1.665 -2.499 0.09288 -0.8323 -0.9991 +1.663 -2.496 -0.01879 -0.8323 -1 +1.661 -2.494 -0.1303 -0.8323 -0.9983 +1.66 -2.492 -0.2407 -0.8323 -0.9941 +1.659 -2.49 -0.3491 -0.8323 -0.9875 +1.658 -2.49 -0.4546 -0.8323 -0.9784 +1.659 -2.49 -0.5562 -0.8323 -0.9668 +1.66 -2.492 -0.6532 -0.8323 -0.9528 +1.663 -2.496 -0.7448 -0.8323 -0.9365 +1.666 -2.502 -0.8301 -0.8323 -0.9178 +1.672 -2.51 -0.9086 -0.8323 -0.8968 +1.678 -2.52 -0.9795 -0.8323 -0.8735 +1.687 -2.532 -1.042 -0.8323 -0.8481 +1.697 -2.548 -1.097 -0.8323 -0.8206 +1.709 -2.565 -1.142 -0.8323 -0.791 +1.723 -2.586 -1.178 -0.8323 -0.7594 +1.738 -2.609 -1.205 -0.8323 -0.7259 +1.755 -2.635 -1.222 -0.8323 -0.6907 +1.774 -2.663 -1.229 -0.8323 -0.6536 +1.795 -2.694 -1.227 -0.8323 -0.615 +1.817 -2.728 -1.216 -0.8323 -0.5748 +1.84 -2.763 -1.195 -0.8323 -0.5332 +1.865 -2.801 -1.165 -0.8323 -0.4903 +1.892 -2.84 -1.126 -0.8323 -0.4461 +1.919 -2.88 -1.08 -0.8323 -0.4008 +1.947 -2.922 -1.026 -0.8323 -0.3545 +1.975 -2.965 -0.9648 -0.8323 -0.3073 +2.004 -3.009 -0.8976 -0.8323 -0.2594 +2.033 -3.052 -0.8247 -0.8323 -0.2108 +2.062 -3.096 -0.7471 -0.8323 -0.1617 +2.09 -3.138 -0.6655 -0.8323 -0.1122 +2.118 -3.18 -0.5808 -0.8323 -0.06235 +2.145 -3.221 -0.4938 -0.8323 -0.01239 +2.171 -3.26 -0.4054 -0.8323 0.0376 +2.196 -3.296 -0.3165 -0.8323 0.0875 +2.218 -3.33 -0.228 -0.8323 0.1372 +2.239 -3.362 -0.1407 -0.8323 0.1865 +2.258 -3.39 -0.05541 -0.8323 0.2354 +2.274 -3.414 0.02696 -0.8323 0.2837 +2.288 -3.435 0.1057 -0.8323 0.3312 +2.299 -3.451 0.18 -0.8323 0.378 +2.307 -3.463 0.2492 -0.8323 0.4238 +2.312 -3.47 0.3128 -0.8323 0.4685 +2.313 -3.473 0.3701 -0.8323 0.5121 +2.311 -3.47 0.4206 -0.8323 0.5544 +2.306 -3.462 0.4641 -0.8323 0.5953 +2.297 -3.449 0.5 -0.8323 0.6347 +2.285 -3.431 0.5282 -0.8323 0.6725 +2.27 -3.407 0.5485 -0.8323 0.7087 +2.25 -3.379 0.5609 -0.8323 0.743 +2.228 -3.345 0.5652 -0.8323 0.7756 +2.202 -3.306 0.5617 -0.8323 0.8061 +2.173 -3.262 0.5505 -0.8323 0.8347 +2.141 -3.214 0.5319 -0.8323 0.8612 +2.106 -3.161 0.5061 -0.8323 0.8855 +2.068 -3.104 0.4736 -0.8323 0.9076 +2.027 -3.044 0.4349 -0.8323 0.9275 +1.985 -2.98 0.3906 -0.8323 0.945 +1.94 -2.913 0.3411 -0.8323 0.9602 +1.894 -2.843 0.2873 -0.8323 0.9729 +1.846 -2.771 0.2298 -0.8323 0.9833 +1.797 -2.698 0.1694 -0.8323 0.9911 +1.747 -2.623 0.1068 -0.8323 0.9965 +1.697 -2.547 0.04281 -0.8323 0.9994 +1.786 -2.411 0 -0.8035 1 +1.733 -2.339 -0.06668 -0.8035 0.9988 +1.68 -2.267 -0.1325 -0.8035 0.995 +1.627 -2.197 -0.1967 -0.8035 0.9888 +1.576 -2.127 -0.2584 -0.8035 0.9801 +1.526 -2.06 -0.3169 -0.8035 0.9689 +1.478 -1.994 -0.3713 -0.8035 0.9553 +1.431 -1.932 -0.4211 -0.8035 0.9394 +1.387 -1.872 -0.4655 -0.8035 0.9211 +1.345 -1.815 -0.5039 -0.8035 0.9004 +1.306 -1.762 -0.5359 -0.8035 0.8776 +1.269 -1.713 -0.5608 -0.8035 0.8525 +1.236 -1.668 -0.5784 -0.8035 0.8253 +1.206 -1.628 -0.5883 -0.8035 0.7961 +1.179 -1.592 -0.5903 -0.8035 0.7648 +1.156 -1.561 -0.5842 -0.8035 0.7317 +1.137 -1.534 -0.57 -0.8035 0.6967 +1.121 -1.513 -0.5477 -0.8035 0.66 +1.109 -1.496 -0.5174 -0.8035 0.6216 +1.1 -1.485 -0.4792 -0.8035 0.5817 +1.095 -1.478 -0.4336 -0.8035 0.5403 +1.094 -1.476 -0.3807 -0.8035 0.4976 +1.096 -1.479 -0.3212 -0.8035 0.4536 +1.101 -1.486 -0.2554 -0.8035 0.4085 +1.109 -1.498 -0.184 -0.8035 0.3624 +1.121 -1.513 -0.1076 -0.8035 0.3153 +1.136 -1.533 -0.02694 -0.8035 0.2675 +1.153 -1.556 0.05723 -0.8035 0.219 +1.172 -1.582 0.1441 -0.8035 0.17 +1.194 -1.612 0.2329 -0.8035 0.1205 +1.218 -1.644 0.3227 -0.8035 0.07074 +1.243 -1.678 0.4126 -0.8035 0.02079 +1.27 -1.714 0.5018 -0.8035 -0.0292 +1.298 -1.752 0.5893 -0.8035 -0.07912 +1.327 -1.791 0.6743 -0.8035 -0.1288 +1.357 -1.831 0.7559 -0.8035 -0.1782 +1.387 -1.872 0.8333 -0.8035 -0.2272 +1.417 -1.912 0.9056 -0.8035 -0.2756 +1.447 -1.953 0.9721 -0.8035 -0.3233 +1.476 -1.993 1.032 -0.8035 -0.3702 +1.505 -2.032 1.085 -0.8035 -0.4161 +1.533 -2.07 1.13 -0.8035 -0.4611 +1.56 -2.106 1.167 -0.8035 -0.5048 +1.586 -2.141 1.195 -0.8035 -0.5474 +1.611 -2.174 1.214 -0.8035 -0.5885 +1.634 -2.206 1.223 -0.8035 -0.6282 +1.655 -2.235 1.223 -0.8035 -0.6663 +1.675 -2.261 1.213 -0.8035 -0.7027 +1.693 -2.286 1.194 -0.8035 -0.7374 +1.71 -2.308 1.164 -0.8035 -0.7702 +1.724 -2.328 1.126 -0.8035 -0.8011 +1.737 -2.345 1.078 -0.8035 -0.8301 +1.748 -2.36 1.021 -0.8035 -0.8569 +1.758 -2.373 0.9556 -0.8035 -0.8816 +1.766 -2.383 0.8824 -0.8035 -0.9041 +1.772 -2.392 0.8018 -0.8035 -0.9243 +1.777 -2.398 0.7145 -0.8035 -0.9422 +1.78 -2.403 0.6211 -0.8035 -0.9578 +1.783 -2.407 0.5226 -0.8035 -0.971 +1.785 -2.409 0.4196 -0.8035 -0.9817 +1.786 -2.41 0.313 -0.8035 -0.99 +1.786 -2.411 0.2038 -0.8035 -0.9958 +1.786 -2.411 0.09291 -0.8035 -0.9991 +1.786 -2.411 -0.0188 -0.8035 -1 +1.786 -2.41 -0.1304 -0.8035 -0.9983 +1.786 -2.41 -0.2408 -0.8035 -0.9941 +1.786 -2.411 -0.3492 -0.8035 -0.9875 +1.787 -2.413 -0.4546 -0.8035 -0.9784 +1.789 -2.415 -0.5562 -0.8035 -0.9668 +1.792 -2.419 -0.6532 -0.8035 -0.9528 +1.796 -2.425 -0.7446 -0.8035 -0.9365 +1.802 -2.432 -0.8297 -0.8035 -0.9178 +1.809 -2.441 -0.9079 -0.8035 -0.8968 +1.817 -2.452 -0.9785 -0.8035 -0.8735 +1.827 -2.466 -1.041 -0.8035 -0.8481 +1.839 -2.482 -1.095 -0.8035 -0.8206 +1.852 -2.5 -1.14 -0.8035 -0.791 +1.867 -2.52 -1.175 -0.8035 -0.7594 +1.884 -2.543 -1.201 -0.8035 -0.7259 +1.903 -2.568 -1.217 -0.8035 -0.6907 +1.923 -2.596 -1.224 -0.8035 -0.6536 +1.945 -2.626 -1.221 -0.8035 -0.615 +1.969 -2.658 -1.208 -0.8035 -0.5748 +1.994 -2.692 -1.186 -0.8035 -0.5332 +2.02 -2.727 -1.155 -0.8035 -0.4903 +2.048 -2.764 -1.116 -0.8035 -0.4461 +2.076 -2.803 -1.068 -0.8035 -0.4008 +2.105 -2.842 -1.013 -0.8035 -0.3545 +2.135 -2.882 -0.9505 -0.8035 -0.3073 +2.165 -2.923 -0.8819 -0.8035 -0.2594 +2.195 -2.963 -0.8078 -0.8035 -0.2108 +2.225 -3.003 -0.7289 -0.8035 -0.1617 +2.254 -3.043 -0.6461 -0.8035 -0.1122 +2.283 -3.082 -0.5601 -0.8035 -0.06235 +2.311 -3.119 -0.4719 -0.8035 -0.01239 +2.337 -3.155 -0.3824 -0.8035 0.0376 +2.362 -3.188 -0.2924 -0.8035 0.0875 +2.385 -3.22 -0.2029 -0.8035 0.1372 +2.406 -3.248 -0.1146 -0.8035 0.1865 +2.425 -3.273 -0.02858 -0.8035 0.2354 +2.441 -3.295 0.0545 -0.8035 0.2837 +2.455 -3.314 0.1338 -0.8035 0.3312 +2.465 -3.328 0.2086 -0.8035 0.378 +2.473 -3.338 0.2782 -0.8035 0.4238 +2.477 -3.344 0.3419 -0.8035 0.4685 +2.478 -3.345 0.3993 -0.8035 0.5121 +2.475 -3.341 0.4497 -0.8035 0.5544 +2.469 -3.333 0.4929 -0.8035 0.5953 +2.459 -3.32 0.5285 -0.8035 0.6347 +2.446 -3.301 0.5561 -0.8035 0.6725 +2.429 -3.278 0.5757 -0.8035 0.7087 +2.408 -3.25 0.5872 -0.8035 0.743 +2.384 -3.218 0.5905 -0.8035 0.7756 +2.356 -3.18 0.5859 -0.8035 0.8061 +2.325 -3.138 0.5733 -0.8035 0.8347 +2.29 -3.092 0.5532 -0.8035 0.8612 +2.253 -3.041 0.5259 -0.8035 0.8855 +2.213 -2.987 0.4917 -0.8035 0.9076 +2.17 -2.93 0.4512 -0.8035 0.9275 +2.125 -2.869 0.4049 -0.8035 0.945 +2.078 -2.805 0.3535 -0.8035 0.9602 +2.029 -2.739 0.2976 -0.8035 0.9729 +1.979 -2.671 0.238 -0.8035 0.9833 +1.927 -2.601 0.1754 -0.8035 0.9911 +1.874 -2.53 0.1105 -0.8035 0.9965 +1.821 -2.458 0.04431 -0.8035 0.9994 +1.904 -2.318 0 -0.7728 1 +1.848 -2.25 -0.0689 -0.7728 0.9988 +1.793 -2.183 -0.1369 -0.7728 0.995 +1.738 -2.116 -0.2033 -0.7728 0.9888 +1.684 -2.051 -0.2672 -0.7728 0.9801 +1.632 -1.987 -0.3277 -0.7728 0.9689 +1.581 -1.925 -0.3842 -0.7728 0.9553 +1.533 -1.866 -0.4359 -0.7728 0.9394 +1.486 -1.809 -0.4821 -0.7728 0.9211 +1.442 -1.756 -0.5223 -0.7728 0.9004 +1.401 -1.705 -0.5559 -0.7728 0.8776 +1.362 -1.659 -0.5823 -0.7728 0.8525 +1.327 -1.616 -0.6013 -0.7728 0.8253 +1.295 -1.577 -0.6125 -0.7728 0.7961 +1.267 -1.543 -0.6156 -0.7728 0.7648 +1.242 -1.513 -0.6105 -0.7728 0.7317 +1.221 -1.487 -0.5971 -0.7728 0.6967 +1.204 -1.466 -0.5755 -0.7728 0.66 +1.19 -1.449 -0.5457 -0.7728 0.6216 +1.181 -1.437 -0.5079 -0.7728 0.5817 +1.175 -1.43 -0.4624 -0.7728 0.5403 +1.172 -1.427 -0.4097 -0.7728 0.4976 +1.173 -1.429 -0.3501 -0.7728 0.4536 +1.178 -1.434 -0.2841 -0.7728 0.4085 +1.186 -1.444 -0.2123 -0.7728 0.3624 +1.197 -1.458 -0.1355 -0.7728 0.3153 +1.211 -1.475 -0.05425 -0.7728 0.2675 +1.228 -1.495 0.03062 -0.7728 0.219 +1.248 -1.519 0.1183 -0.7728 0.17 +1.27 -1.546 0.208 -0.7728 0.1205 +1.293 -1.575 0.2987 -0.7728 0.07074 +1.319 -1.606 0.3897 -0.7728 0.02079 +1.346 -1.639 0.48 -0.7728 -0.0292 +1.375 -1.674 0.5687 -0.7728 -0.07912 +1.404 -1.71 0.6548 -0.7728 -0.1288 +1.435 -1.747 0.7377 -0.7728 -0.1782 +1.465 -1.784 0.8163 -0.7728 -0.2272 +1.496 -1.822 0.8898 -0.7728 -0.2756 +1.527 -1.859 0.9576 -0.7728 -0.3233 +1.558 -1.896 1.019 -0.7728 -0.3702 +1.588 -1.933 1.073 -0.7728 -0.4161 +1.617 -1.969 1.119 -0.7728 -0.4611 +1.645 -2.003 1.157 -0.7728 -0.5048 +1.672 -2.036 1.186 -0.7728 -0.5474 +1.698 -2.068 1.206 -0.7728 -0.5885 +1.723 -2.098 1.216 -0.7728 -0.6282 +1.746 -2.125 1.217 -0.7728 -0.6663 +1.767 -2.151 1.208 -0.7728 -0.7027 +1.787 -2.175 1.189 -0.7728 -0.7374 +1.805 -2.197 1.161 -0.7728 -0.7702 +1.821 -2.217 1.123 -0.7728 -0.8011 +1.835 -2.234 1.075 -0.7728 -0.8301 +1.848 -2.25 1.019 -0.7728 -0.8569 +1.859 -2.263 0.9542 -0.7728 -0.8816 +1.868 -2.275 0.8813 -0.7728 -0.9041 +1.876 -2.285 0.801 -0.7728 -0.9243 +1.883 -2.293 0.7139 -0.7728 -0.9422 +1.888 -2.299 0.6207 -0.7728 -0.9578 +1.893 -2.305 0.5223 -0.7728 -0.971 +1.896 -2.309 0.4194 -0.7728 -0.9817 +1.899 -2.312 0.3129 -0.7728 -0.99 +1.901 -2.315 0.2038 -0.7728 -0.9958 +1.903 -2.317 0.09289 -0.7728 -0.9991 +1.904 -2.319 -0.01879 -0.7728 -1 +1.906 -2.321 -0.1303 -0.7728 -0.9983 +1.908 -2.323 -0.2407 -0.7728 -0.9941 +1.91 -2.326 -0.3491 -0.7728 -0.9875 +1.913 -2.329 -0.4544 -0.7728 -0.9784 +1.917 -2.334 -0.5559 -0.7728 -0.9668 +1.921 -2.339 -0.6527 -0.7728 -0.9528 +1.927 -2.346 -0.7439 -0.7728 -0.9365 +1.934 -2.355 -0.8288 -0.7728 -0.9178 +1.943 -2.365 -0.9067 -0.7728 -0.8968 +1.953 -2.378 -0.9769 -0.7728 -0.8735 +1.964 -2.392 -1.039 -0.7728 -0.8481 +1.978 -2.408 -1.092 -0.7728 -0.8206 +1.993 -2.426 -1.137 -0.7728 -0.791 +2.009 -2.446 -1.171 -0.7728 -0.7594 +2.028 -2.469 -1.197 -0.7728 -0.7259 +2.048 -2.494 -1.212 -0.7728 -0.6907 +2.07 -2.52 -1.218 -0.7728 -0.6536 +2.093 -2.549 -1.214 -0.7728 -0.615 +2.118 -2.579 -1.2 -0.7728 -0.5748 +2.145 -2.611 -1.177 -0.7728 -0.5332 +2.172 -2.645 -1.145 -0.7728 -0.4903 +2.201 -2.68 -1.104 -0.7728 -0.4461 +2.231 -2.716 -1.055 -0.7728 -0.4008 +2.261 -2.753 -0.999 -0.7728 -0.3545 +2.291 -2.79 -0.9355 -0.7728 -0.3073 +2.322 -2.828 -0.8657 -0.7728 -0.2594 +2.353 -2.865 -0.7904 -0.7728 -0.2108 +2.384 -2.902 -0.7102 -0.7728 -0.1617 +2.414 -2.939 -0.6262 -0.7728 -0.1122 +2.443 -2.974 -0.5391 -0.7728 -0.06235 +2.471 -3.009 -0.4497 -0.7728 -0.01239 +2.498 -3.041 -0.3591 -0.7728 0.0376 +2.523 -3.072 -0.2681 -0.7728 0.0875 +2.546 -3.1 -0.1776 -0.7728 0.1372 +2.567 -3.126 -0.08856 -0.7728 0.1865 +2.586 -3.148 -0.001726 -0.7728 0.2354 +2.602 -3.168 0.08201 -0.7728 0.2837 +2.615 -3.184 0.1619 -0.7728 0.3312 +2.625 -3.196 0.2371 -0.7728 0.378 +2.632 -3.205 0.3069 -0.7728 0.4238 +2.636 -3.209 0.3708 -0.7728 0.4685 +2.636 -3.209 0.4282 -0.7728 0.5121 +2.632 -3.205 0.4786 -0.7728 0.5544 +2.625 -3.196 0.5215 -0.7728 0.5953 +2.614 -3.182 0.5566 -0.7728 0.6347 +2.599 -3.164 0.5837 -0.7728 0.6725 +2.58 -3.141 0.6025 -0.7728 0.7087 +2.558 -3.114 0.6131 -0.7728 0.743 +2.532 -3.083 0.6155 -0.7728 0.7756 +2.502 -3.047 0.6096 -0.7728 0.8061 +2.469 -3.007 0.5958 -0.7728 0.8347 +2.433 -2.963 0.5742 -0.7728 0.8612 +2.394 -2.915 0.5453 -0.7728 0.8855 +2.352 -2.863 0.5095 -0.7728 0.9076 +2.307 -2.809 0.4672 -0.7728 0.9275 +2.259 -2.751 0.4191 -0.7728 0.945 +2.21 -2.691 0.3657 -0.7728 0.9602 +2.159 -2.628 0.3078 -0.7728 0.9729 +2.106 -2.564 0.246 -0.7728 0.9833 +2.052 -2.498 0.1812 -0.7728 0.9911 +1.997 -2.431 0.1142 -0.7728 0.9965 +1.941 -2.363 0.04578 -0.7728 0.9994 +2.018 -2.22 0 -0.7401 1 +1.96 -2.157 -0.07107 -0.7401 0.9988 +1.902 -2.093 -0.1413 -0.7401 0.995 +1.845 -2.031 -0.2098 -0.7401 0.9888 +1.789 -1.969 -0.2757 -0.7401 0.9801 +1.735 -1.909 -0.3383 -0.7401 0.9689 +1.682 -1.851 -0.3968 -0.7401 0.9553 +1.631 -1.795 -0.4504 -0.7401 0.9394 +1.583 -1.742 -0.4984 -0.7401 0.9211 +1.537 -1.691 -0.5403 -0.7401 0.9004 +1.494 -1.644 -0.5755 -0.7401 0.8776 +1.454 -1.6 -0.6035 -0.7401 0.8525 +1.417 -1.559 -0.6238 -0.7401 0.8253 +1.383 -1.522 -0.6363 -0.7401 0.7961 +1.353 -1.489 -0.6405 -0.7401 0.7648 +1.327 -1.46 -0.6364 -0.7401 0.7317 +1.304 -1.435 -0.6238 -0.7401 0.6967 +1.286 -1.415 -0.6028 -0.7401 0.66 +1.271 -1.398 -0.5736 -0.7401 0.6216 +1.26 -1.386 -0.5362 -0.7401 0.5817 +1.253 -1.378 -0.491 -0.7401 0.5403 +1.249 -1.375 -0.4384 -0.7401 0.4976 +1.249 -1.375 -0.3787 -0.7401 0.4536 +1.253 -1.379 -0.3126 -0.7401 0.4085 +1.261 -1.387 -0.2405 -0.7401 0.3624 +1.271 -1.399 -0.1633 -0.7401 0.3153 +1.285 -1.414 -0.08151 -0.7401 0.2675 +1.301 -1.432 0.003996 -0.7401 0.219 +1.32 -1.453 0.09242 -0.7401 0.17 +1.342 -1.477 0.1829 -0.7401 0.1205 +1.366 -1.503 0.2746 -0.7401 0.07074 +1.391 -1.531 0.3665 -0.7401 0.02079 +1.419 -1.561 0.4579 -0.7401 -0.0292 +1.447 -1.593 0.5476 -0.7401 -0.07912 +1.477 -1.626 0.635 -0.7401 -0.1288 +1.508 -1.659 0.7189 -0.7401 -0.1782 +1.539 -1.694 0.7987 -0.7401 -0.2272 +1.571 -1.728 0.8735 -0.7401 -0.2756 +1.602 -1.763 0.9424 -0.7401 -0.3233 +1.633 -1.797 1.005 -0.7401 -0.3702 +1.664 -1.831 1.06 -0.7401 -0.4161 +1.695 -1.865 1.107 -0.7401 -0.4611 +1.724 -1.897 1.146 -0.7401 -0.5048 +1.752 -1.928 1.176 -0.7401 -0.5474 +1.779 -1.958 1.197 -0.7401 -0.5885 +1.805 -1.986 1.209 -0.7401 -0.6282 +1.829 -2.013 1.21 -0.7401 -0.6663 +1.852 -2.038 1.202 -0.7401 -0.7027 +1.873 -2.061 1.184 -0.7401 -0.7374 +1.893 -2.083 1.156 -0.7401 -0.7702 +1.91 -2.102 1.119 -0.7401 -0.8011 +1.927 -2.12 1.072 -0.7401 -0.8301 +1.941 -2.136 1.016 -0.7401 -0.8569 +1.954 -2.15 0.9521 -0.7401 -0.8816 +1.965 -2.162 0.8796 -0.7401 -0.9041 +1.975 -2.173 0.7996 -0.7401 -0.9243 +1.983 -2.183 0.7128 -0.7401 -0.9422 +1.991 -2.191 0.6199 -0.7401 -0.9578 +1.997 -2.197 0.5217 -0.7401 -0.971 +2.002 -2.203 0.419 -0.7401 -0.9817 +2.007 -2.208 0.3126 -0.7401 -0.99 +2.011 -2.213 0.2036 -0.7401 -0.9958 +2.015 -2.217 0.09281 -0.7401 -0.9991 +2.018 -2.221 -0.01878 -0.7401 -1 +2.022 -2.225 -0.1302 -0.7401 -0.9983 +2.026 -2.229 -0.2405 -0.7401 -0.9941 +2.03 -2.234 -0.3487 -0.7401 -0.9875 +2.035 -2.239 -0.4539 -0.7401 -0.9784 +2.04 -2.245 -0.5553 -0.7401 -0.9668 +2.047 -2.252 -0.6518 -0.7401 -0.9528 +2.055 -2.261 -0.7427 -0.7401 -0.9365 +2.063 -2.271 -0.8273 -0.7401 -0.9178 +2.074 -2.282 -0.9049 -0.7401 -0.8968 +2.086 -2.295 -0.9747 -0.7401 -0.8735 +2.099 -2.31 -1.036 -0.7401 -0.8481 +2.114 -2.326 -1.089 -0.7401 -0.8206 +2.13 -2.344 -1.133 -0.7401 -0.791 +2.149 -2.365 -1.167 -0.7401 -0.7594 +2.169 -2.387 -1.191 -0.7401 -0.7259 +2.19 -2.411 -1.206 -0.7401 -0.6907 +2.214 -2.436 -1.211 -0.7401 -0.6536 +2.239 -2.463 -1.206 -0.7401 -0.615 +2.265 -2.492 -1.191 -0.7401 -0.5748 +2.292 -2.523 -1.167 -0.7401 -0.5332 +2.321 -2.554 -1.134 -0.7401 -0.4903 +2.351 -2.587 -1.092 -0.7401 -0.4461 +2.381 -2.62 -1.042 -0.7401 -0.4008 +2.412 -2.655 -0.9846 -0.7401 -0.3545 +2.444 -2.689 -0.92 -0.7401 -0.3073 +2.475 -2.724 -0.849 -0.7401 -0.2594 +2.507 -2.758 -0.7724 -0.7401 -0.2108 +2.538 -2.793 -0.6911 -0.7401 -0.1617 +2.568 -2.826 -0.6059 -0.7401 -0.1122 +2.598 -2.858 -0.5177 -0.7401 -0.06235 +2.626 -2.89 -0.4273 -0.7401 -0.01239 +2.653 -2.919 -0.3356 -0.7401 0.0376 +2.678 -2.947 -0.2437 -0.7401 0.0875 +2.701 -2.972 -0.1523 -0.7401 0.1372 +2.722 -2.995 -0.06241 -0.7401 0.1865 +2.74 -3.015 0.02513 -0.7401 0.2354 +2.755 -3.032 0.1095 -0.7401 0.2837 +2.768 -3.046 0.1898 -0.7401 0.3312 +2.777 -3.056 0.2654 -0.7401 0.378 +2.784 -3.063 0.3355 -0.7401 0.4238 +2.786 -3.066 0.3995 -0.7401 0.4685 +2.785 -3.065 0.4569 -0.7401 0.5121 +2.781 -3.06 0.5071 -0.7401 0.5544 +2.772 -3.051 0.5497 -0.7401 0.5953 +2.76 -3.037 0.5843 -0.7401 0.6347 +2.744 -3.019 0.6108 -0.7401 0.6725 +2.724 -2.997 0.629 -0.7401 0.7087 +2.7 -2.971 0.6387 -0.7401 0.743 +2.672 -2.941 0.64 -0.7401 0.7756 +2.641 -2.906 0.633 -0.7401 0.8061 +2.606 -2.868 0.6179 -0.7401 0.8347 +2.568 -2.826 0.5949 -0.7401 0.8612 +2.527 -2.781 0.5645 -0.7401 0.8855 +2.483 -2.733 0.527 -0.7401 0.9076 +2.436 -2.681 0.4829 -0.7401 0.9275 +2.387 -2.627 0.4329 -0.7401 0.945 +2.335 -2.57 0.3776 -0.7401 0.9602 +2.282 -2.511 0.3177 -0.7401 0.9729 +2.227 -2.451 0.2539 -0.7401 0.9833 +2.171 -2.389 0.187 -0.7401 0.9911 +2.114 -2.326 0.1178 -0.7401 0.9965 +2.056 -2.263 0.04722 -0.7401 0.9994 +2.126 -2.117 0 -0.7055 1 +2.066 -2.057 -0.0732 -0.7055 0.9988 +2.007 -1.998 -0.1455 -0.7055 0.995 +1.948 -1.94 -0.2161 -0.7055 0.9888 +1.891 -1.882 -0.2841 -0.7055 0.9801 +1.834 -1.826 -0.3487 -0.7055 0.9689 +1.78 -1.772 -0.4091 -0.7055 0.9553 +1.727 -1.72 -0.4646 -0.7055 0.9394 +1.677 -1.67 -0.5144 -0.7055 0.9211 +1.629 -1.622 -0.558 -0.7055 0.9004 +1.584 -1.577 -0.5948 -0.7055 0.8776 +1.543 -1.536 -0.6243 -0.7055 0.8525 +1.504 -1.497 -0.646 -0.7055 0.8253 +1.469 -1.462 -0.6596 -0.7055 0.7961 +1.437 -1.431 -0.665 -0.7055 0.7648 +1.41 -1.403 -0.6618 -0.7055 0.7317 +1.386 -1.38 -0.6501 -0.7055 0.6967 +1.366 -1.36 -0.6299 -0.7055 0.66 +1.35 -1.344 -0.6012 -0.7055 0.6216 +1.337 -1.331 -0.5642 -0.7055 0.5817 +1.329 -1.323 -0.5193 -0.7055 0.5403 +1.324 -1.319 -0.4668 -0.7055 0.4976 +1.324 -1.318 -0.4072 -0.7055 0.4536 +1.326 -1.321 -0.3409 -0.7055 0.4085 +1.333 -1.327 -0.2686 -0.7055 0.3624 +1.343 -1.337 -0.191 -0.7055 0.3153 +1.355 -1.349 -0.1087 -0.7055 0.2675 +1.371 -1.365 -0.02263 -0.7055 0.219 +1.39 -1.384 0.06648 -0.7055 0.17 +1.411 -1.405 0.1577 -0.7055 0.1205 +1.434 -1.428 0.2503 -0.7055 0.07074 +1.46 -1.453 0.3431 -0.7055 0.02079 +1.487 -1.48 0.4355 -0.7055 -0.0292 +1.516 -1.509 0.5263 -0.7055 -0.07912 +1.546 -1.539 0.6147 -0.7055 -0.1288 +1.576 -1.569 0.6998 -0.7055 -0.1782 +1.608 -1.601 0.7807 -0.7055 -0.2272 +1.64 -1.632 0.8566 -0.7055 -0.2756 +1.672 -1.664 0.9267 -0.7055 -0.3233 +1.704 -1.696 0.9903 -0.7055 -0.3702 +1.735 -1.727 1.047 -0.7055 -0.4161 +1.766 -1.758 1.095 -0.7055 -0.4611 +1.796 -1.788 1.135 -0.7055 -0.5048 +1.826 -1.818 1.166 -0.7055 -0.5474 +1.854 -1.846 1.188 -0.7055 -0.5885 +1.881 -1.872 1.2 -0.7055 -0.6282 +1.906 -1.898 1.203 -0.7055 -0.6663 +1.93 -1.922 1.196 -0.7055 -0.7027 +1.953 -1.944 1.179 -0.7055 -0.7374 +1.974 -1.965 1.151 -0.7055 -0.7702 +1.993 -1.985 1.115 -0.7055 -0.8011 +2.011 -2.002 1.069 -0.7055 -0.8301 +2.027 -2.018 1.013 -0.7055 -0.8569 +2.042 -2.033 0.9494 -0.7055 -0.8816 +2.055 -2.046 0.8774 -0.7055 -0.9041 +2.067 -2.058 0.7978 -0.7055 -0.9243 +2.077 -2.068 0.7113 -0.7055 -0.9422 +2.087 -2.077 0.6187 -0.7055 -0.9578 +2.095 -2.086 0.5207 -0.7055 -0.971 +2.102 -2.093 0.4183 -0.7055 -0.9817 +2.109 -2.1 0.3121 -0.7055 -0.99 +2.115 -2.106 0.2033 -0.7055 -0.9958 +2.121 -2.112 0.09267 -0.7055 -0.9991 +2.127 -2.118 -0.01875 -0.7055 -1 +2.133 -2.123 -0.13 -0.7055 -0.9983 +2.139 -2.129 -0.2401 -0.7055 -0.9941 +2.145 -2.136 -0.3482 -0.7055 -0.9875 +2.152 -2.143 -0.4532 -0.7055 -0.9784 +2.16 -2.15 -0.5542 -0.7055 -0.9668 +2.168 -2.159 -0.6505 -0.7055 -0.9528 +2.178 -2.168 -0.7411 -0.7055 -0.9365 +2.189 -2.179 -0.8254 -0.7055 -0.9178 +2.201 -2.191 -0.9025 -0.7055 -0.8968 +2.215 -2.205 -0.9718 -0.7055 -0.8735 +2.23 -2.22 -1.033 -0.7055 -0.8481 +2.247 -2.237 -1.085 -0.7055 -0.8206 +2.265 -2.255 -1.128 -0.7055 -0.791 +2.285 -2.275 -1.162 -0.7055 -0.7594 +2.306 -2.296 -1.185 -0.7055 -0.7259 +2.33 -2.319 -1.199 -0.7055 -0.6907 +2.354 -2.344 -1.203 -0.7055 -0.6536 +2.38 -2.37 -1.197 -0.7055 -0.615 +2.408 -2.397 -1.182 -0.7055 -0.5748 +2.436 -2.425 -1.157 -0.7055 -0.5332 +2.466 -2.455 -1.123 -0.7055 -0.4903 +2.496 -2.485 -1.08 -0.7055 -0.4461 +2.527 -2.516 -1.028 -0.7055 -0.4008 +2.559 -2.548 -0.9697 -0.7055 -0.3545 +2.591 -2.58 -0.9038 -0.7055 -0.3073 +2.623 -2.612 -0.8317 -0.7055 -0.2594 +2.655 -2.643 -0.754 -0.7055 -0.2108 +2.686 -2.674 -0.6716 -0.7055 -0.1617 +2.717 -2.705 -0.5853 -0.7055 -0.1122 +2.746 -2.734 -0.496 -0.7055 -0.06235 +2.774 -2.762 -0.4045 -0.7055 -0.01239 +2.801 -2.789 -0.3119 -0.7055 0.0376 +2.826 -2.813 -0.2191 -0.7055 0.0875 +2.848 -2.836 -0.1269 -0.7055 0.1372 +2.869 -2.856 -0.03623 -0.7055 0.1865 +2.886 -2.874 0.05196 -0.7055 0.2354 +2.901 -2.888 0.1369 -0.7055 0.2837 +2.913 -2.9 0.2176 -0.7055 0.3312 +2.922 -2.909 0.2935 -0.7055 0.378 +2.927 -2.914 0.3639 -0.7055 0.4238 +2.929 -2.916 0.428 -0.7055 0.4685 +2.927 -2.914 0.4853 -0.7055 0.5121 +2.921 -2.908 0.5353 -0.7055 0.5544 +2.911 -2.898 0.5775 -0.7055 0.5953 +2.898 -2.885 0.6117 -0.7055 0.6347 +2.88 -2.867 0.6376 -0.7055 0.6725 +2.859 -2.846 0.655 -0.7055 0.7087 +2.833 -2.821 0.6638 -0.7055 0.743 +2.804 -2.792 0.6641 -0.7055 0.7756 +2.772 -2.759 0.656 -0.7055 0.8061 +2.735 -2.723 0.6396 -0.7055 0.8347 +2.696 -2.684 0.6152 -0.7055 0.8612 +2.653 -2.641 0.5832 -0.7055 0.8855 +2.607 -2.596 0.5441 -0.7055 0.9076 +2.558 -2.547 0.4983 -0.7055 0.9275 +2.507 -2.496 0.4465 -0.7055 0.945 +2.454 -2.443 0.3893 -0.7055 0.9602 +2.399 -2.388 0.3274 -0.7055 0.9729 +2.342 -2.332 0.2616 -0.7055 0.9833 +2.284 -2.274 0.1926 -0.7055 0.9911 +2.225 -2.215 0.1214 -0.7055 0.9965 +2.166 -2.156 0.04864 -0.7055 0.9994 +2.229 -2.008 0 -0.6692 1 +2.168 -1.953 -0.07529 -0.6692 0.9988 +2.107 -1.898 -0.1497 -0.6692 0.995 +2.047 -1.843 -0.2223 -0.6692 0.9888 +1.988 -1.79 -0.2923 -0.6692 0.9801 +1.93 -1.738 -0.3589 -0.6692 0.9689 +1.874 -1.688 -0.4212 -0.6692 0.9553 +1.82 -1.639 -0.4785 -0.6692 0.9394 +1.768 -1.592 -0.5301 -0.6692 0.9211 +1.719 -1.548 -0.5754 -0.6692 0.9004 +1.672 -1.506 -0.6137 -0.6692 0.8776 +1.629 -1.467 -0.6446 -0.6692 0.8525 +1.589 -1.431 -0.6677 -0.6692 0.8253 +1.553 -1.398 -0.6826 -0.6692 0.7961 +1.52 -1.369 -0.6891 -0.6692 0.7648 +1.491 -1.343 -0.6869 -0.6692 0.7317 +1.465 -1.32 -0.676 -0.6692 0.6967 +1.444 -1.3 -0.6565 -0.6692 0.66 +1.426 -1.285 -0.6284 -0.6692 0.6216 +1.413 -1.273 -0.5919 -0.6692 0.5817 +1.403 -1.264 -0.5473 -0.6692 0.5403 +1.398 -1.259 -0.4949 -0.6692 0.4976 +1.396 -1.257 -0.4353 -0.6692 0.4536 +1.397 -1.259 -0.369 -0.6692 0.4085 +1.403 -1.263 -0.2965 -0.6692 0.3624 +1.411 -1.271 -0.2186 -0.6692 0.3153 +1.423 -1.282 -0.1359 -0.6692 0.2675 +1.438 -1.296 -0.04925 -0.6692 0.219 +1.456 -1.312 0.04049 -0.6692 0.17 +1.477 -1.33 0.1325 -0.6692 0.1205 +1.5 -1.351 0.2258 -0.6692 0.07074 +1.525 -1.373 0.3195 -0.6692 0.02079 +1.551 -1.397 0.4128 -0.6692 -0.0292 +1.58 -1.423 0.5046 -0.6692 -0.07912 +1.609 -1.449 0.594 -0.6692 -0.1288 +1.64 -1.477 0.6802 -0.6692 -0.1782 +1.671 -1.505 0.7622 -0.6692 -0.2272 +1.703 -1.534 0.8392 -0.6692 -0.2756 +1.736 -1.563 0.9104 -0.6692 -0.3233 +1.768 -1.592 0.975 -0.6692 -0.3702 +1.8 -1.621 1.032 -0.6692 -0.4161 +1.832 -1.65 1.082 -0.6692 -0.4611 +1.862 -1.677 1.123 -0.6692 -0.5048 +1.893 -1.705 1.155 -0.6692 -0.5474 +1.922 -1.731 1.178 -0.6692 -0.5885 +1.95 -1.756 1.191 -0.6692 -0.6282 +1.977 -1.78 1.195 -0.6692 -0.6663 +2.002 -1.803 1.189 -0.6692 -0.7027 +2.026 -1.825 1.172 -0.6692 -0.7374 +2.048 -1.845 1.146 -0.6692 -0.7702 +2.069 -1.864 1.11 -0.6692 -0.8011 +2.089 -1.881 1.064 -0.6692 -0.8301 +2.107 -1.898 1.01 -0.6692 -0.8569 +2.123 -1.912 0.9462 -0.6692 -0.8816 +2.138 -1.926 0.8746 -0.6692 -0.9041 +2.152 -1.939 0.7955 -0.6692 -0.9243 +2.165 -1.95 0.7094 -0.6692 -0.9422 +2.176 -1.96 0.6171 -0.6692 -0.9578 +2.187 -1.97 0.5195 -0.6692 -0.971 +2.197 -1.978 0.4173 -0.6692 -0.9817 +2.206 -1.987 0.3114 -0.6692 -0.99 +2.214 -1.994 0.2028 -0.6692 -0.9958 +2.222 -2.002 0.09247 -0.6692 -0.9991 +2.23 -2.009 -0.01871 -0.6692 -1 +2.239 -2.016 -0.1297 -0.6692 -0.9983 +2.247 -2.024 -0.2396 -0.6692 -0.9941 +2.256 -2.032 -0.3474 -0.6692 -0.9875 +2.265 -2.04 -0.4521 -0.6692 -0.9784 +2.275 -2.049 -0.5529 -0.6692 -0.9668 +2.286 -2.059 -0.6488 -0.6692 -0.9528 +2.297 -2.069 -0.7391 -0.6692 -0.9365 +2.31 -2.081 -0.8229 -0.6692 -0.9178 +2.325 -2.094 -0.8995 -0.6692 -0.8968 +2.34 -2.108 -0.9684 -0.6692 -0.8735 +2.357 -2.123 -1.029 -0.6692 -0.8481 +2.376 -2.14 -1.081 -0.6692 -0.8206 +2.396 -2.158 -1.123 -0.6692 -0.791 +2.417 -2.177 -1.156 -0.6692 -0.7594 +2.44 -2.198 -1.179 -0.6692 -0.7259 +2.465 -2.22 -1.192 -0.6692 -0.6907 +2.491 -2.243 -1.195 -0.6692 -0.6536 +2.518 -2.268 -1.188 -0.6692 -0.615 +2.546 -2.293 -1.172 -0.6692 -0.5748 +2.576 -2.32 -1.145 -0.6692 -0.5332 +2.606 -2.347 -1.11 -0.6692 -0.4903 +2.637 -2.375 -1.066 -0.6692 -0.4461 +2.669 -2.404 -1.014 -0.6692 -0.4008 +2.701 -2.433 -0.9541 -0.6692 -0.3545 +2.733 -2.462 -0.8871 -0.6692 -0.3073 +2.766 -2.491 -0.8139 -0.6692 -0.2594 +2.797 -2.52 -0.7351 -0.6692 -0.2108 +2.829 -2.548 -0.6516 -0.6692 -0.1617 +2.859 -2.575 -0.5643 -0.6692 -0.1122 +2.888 -2.601 -0.4739 -0.6692 -0.06235 +2.916 -2.627 -0.3815 -0.6692 -0.01239 +2.942 -2.65 -0.288 -0.6692 0.0376 +2.967 -2.672 -0.1943 -0.6692 0.0875 +2.989 -2.692 -0.1013 -0.6692 0.1372 +3.008 -2.709 -0.01002 -0.6692 0.1865 +3.025 -2.725 0.07877 -0.6692 0.2354 +3.039 -2.737 0.1642 -0.6692 0.2837 +3.05 -2.747 0.2453 -0.6692 0.3312 +3.058 -2.754 0.3215 -0.6692 0.378 +3.062 -2.758 0.392 -0.6692 0.4238 +3.062 -2.758 0.4562 -0.6692 0.4685 +3.059 -2.755 0.5134 -0.6692 0.5121 +3.052 -2.749 0.5631 -0.6692 0.5544 +3.041 -2.739 0.6051 -0.6692 0.5953 +3.026 -2.726 0.6388 -0.6692 0.6347 +3.008 -2.709 0.664 -0.6692 0.6725 +2.985 -2.688 0.6807 -0.6692 0.7087 +2.958 -2.664 0.6886 -0.6692 0.743 +2.928 -2.637 0.6878 -0.6692 0.7756 +2.894 -2.606 0.6785 -0.6692 0.8061 +2.856 -2.572 0.6609 -0.6692 0.8347 +2.815 -2.535 0.6351 -0.6692 0.8612 +2.771 -2.495 0.6016 -0.6692 0.8855 +2.723 -2.453 0.5609 -0.6692 0.9076 +2.673 -2.408 0.5134 -0.6692 0.9275 +2.621 -2.36 0.4598 -0.6692 0.945 +2.566 -2.311 0.4008 -0.6692 0.9602 +2.509 -2.26 0.3369 -0.6692 0.9729 +2.451 -2.207 0.2691 -0.6692 0.9833 +2.391 -2.154 0.1981 -0.6692 0.9911 +2.331 -2.099 0.1248 -0.6692 0.9965 +2.27 -2.044 0.05002 -0.6692 0.9994 +2.327 -1.894 0 -0.6313 1 +2.264 -1.843 -0.07732 -0.6313 0.9988 +2.202 -1.792 -0.1537 -0.6313 0.995 +2.141 -1.742 -0.2284 -0.6313 0.9888 +2.08 -1.693 -0.3004 -0.6313 0.9801 +2.021 -1.645 -0.3688 -0.6313 0.9689 +1.964 -1.599 -0.433 -0.6313 0.9553 +1.909 -1.554 -0.4921 -0.6313 0.9394 +1.856 -1.51 -0.5455 -0.6313 0.9211 +1.805 -1.469 -0.5924 -0.6313 0.9004 +1.758 -1.431 -0.6323 -0.6313 0.8776 +1.713 -1.394 -0.6646 -0.6313 0.8525 +1.672 -1.361 -0.689 -0.6313 0.8253 +1.634 -1.33 -0.7052 -0.6313 0.7961 +1.6 -1.302 -0.7127 -0.6313 0.7648 +1.569 -1.277 -0.7115 -0.6313 0.7317 +1.543 -1.256 -0.7015 -0.6313 0.6967 +1.52 -1.237 -0.6827 -0.6313 0.66 +1.501 -1.222 -0.6552 -0.6313 0.6216 +1.486 -1.21 -0.6191 -0.6313 0.5817 +1.476 -1.201 -0.5749 -0.6313 0.5403 +1.469 -1.195 -0.5228 -0.6313 0.4976 +1.465 -1.193 -0.4632 -0.6313 0.4536 +1.466 -1.193 -0.3969 -0.6313 0.4085 +1.47 -1.197 -0.3242 -0.6313 0.3624 +1.478 -1.203 -0.246 -0.6313 0.3153 +1.489 -1.212 -0.1629 -0.6313 0.2675 +1.503 -1.223 -0.07583 -0.6313 0.219 +1.52 -1.237 0.01448 -0.6313 0.17 +1.539 -1.253 0.1071 -0.6313 0.1205 +1.561 -1.271 0.2012 -0.6313 0.07074 +1.585 -1.29 0.2957 -0.6313 0.02079 +1.611 -1.312 0.3898 -0.6313 -0.0292 +1.639 -1.334 0.4826 -0.6313 -0.07912 +1.668 -1.358 0.573 -0.6313 -0.1288 +1.699 -1.383 0.6601 -0.6313 -0.1782 +1.73 -1.408 0.7432 -0.6313 -0.2272 +1.762 -1.434 0.8212 -0.6313 -0.2756 +1.794 -1.46 0.8935 -0.6313 -0.3233 +1.827 -1.487 0.9592 -0.6313 -0.3702 +1.859 -1.513 1.018 -0.6313 -0.4161 +1.891 -1.539 1.068 -0.6313 -0.4611 +1.922 -1.565 1.11 -0.6313 -0.5048 +1.953 -1.59 1.144 -0.6313 -0.5474 +1.983 -1.614 1.167 -0.6313 -0.5885 +2.012 -1.638 1.182 -0.6313 -0.6282 +2.04 -1.66 1.186 -0.6313 -0.6663 +2.067 -1.682 1.18 -0.6313 -0.7027 +2.092 -1.703 1.165 -0.6313 -0.7374 +2.116 -1.722 1.139 -0.6313 -0.7702 +2.138 -1.741 1.104 -0.6313 -0.8011 +2.16 -1.758 1.059 -0.6313 -0.8301 +2.18 -1.774 1.005 -0.6313 -0.8569 +2.198 -1.789 0.9423 -0.6313 -0.8816 +2.215 -1.803 0.8713 -0.6313 -0.9041 +2.231 -1.816 0.7926 -0.6313 -0.9243 +2.246 -1.828 0.707 -0.6313 -0.9422 +2.26 -1.839 0.6152 -0.6313 -0.9578 +2.273 -1.85 0.5179 -0.6313 -0.971 +2.285 -1.86 0.4161 -0.6313 -0.9817 +2.296 -1.869 0.3105 -0.6313 -0.99 +2.307 -1.878 0.2023 -0.6313 -0.9958 +2.318 -1.887 0.09222 -0.6313 -0.9991 +2.328 -1.895 -0.01866 -0.6313 -1 +2.339 -1.904 -0.1294 -0.6313 -0.9983 +2.35 -1.913 -0.2389 -0.6313 -0.9941 +2.361 -1.922 -0.3464 -0.6313 -0.9875 +2.373 -1.931 -0.4508 -0.6313 -0.9784 +2.385 -1.941 -0.5512 -0.6313 -0.9668 +2.398 -1.952 -0.6467 -0.6313 -0.9528 +2.412 -1.964 -0.7365 -0.6313 -0.9365 +2.428 -1.976 -0.8199 -0.6313 -0.9178 +2.444 -1.989 -0.8961 -0.6313 -0.8968 +2.461 -2.003 -0.9644 -0.6313 -0.8735 +2.48 -2.019 -1.024 -0.6313 -0.8481 +2.501 -2.035 -1.075 -0.6313 -0.8206 +2.522 -2.053 -1.117 -0.6313 -0.791 +2.545 -2.072 -1.149 -0.6313 -0.7594 +2.57 -2.092 -1.171 -0.6313 -0.7259 +2.596 -2.113 -1.183 -0.6313 -0.6907 +2.623 -2.135 -1.186 -0.6313 -0.6536 +2.651 -2.158 -1.178 -0.6313 -0.615 +2.68 -2.182 -1.16 -0.6313 -0.5748 +2.711 -2.206 -1.133 -0.6313 -0.5332 +2.742 -2.231 -1.097 -0.6313 -0.4903 +2.773 -2.257 -1.052 -0.6313 -0.4461 +2.805 -2.283 -0.9989 -0.6313 -0.4008 +2.838 -2.31 -0.9379 -0.6313 -0.3545 +2.87 -2.336 -0.8699 -0.6313 -0.3073 +2.902 -2.362 -0.7956 -0.6313 -0.2594 +2.934 -2.388 -0.7158 -0.6313 -0.2108 +2.965 -2.413 -0.6312 -0.6313 -0.1617 +2.995 -2.438 -0.5429 -0.6313 -0.1122 +3.024 -2.461 -0.4516 -0.6313 -0.06235 +3.051 -2.483 -0.3583 -0.6313 -0.01239 +3.076 -2.504 -0.2639 -0.6313 0.0376 +3.1 -2.523 -0.1694 -0.6313 0.0875 +3.121 -2.54 -0.07576 -0.6313 0.1372 +3.14 -2.556 0.01619 -0.6313 0.1865 +3.156 -2.569 0.1055 -0.6313 0.2354 +3.169 -2.579 0.1914 -0.6313 0.2837 +3.179 -2.587 0.2729 -0.6313 0.3312 +3.185 -2.592 0.3493 -0.6313 0.378 +3.188 -2.595 0.4199 -0.6313 0.4238 +3.187 -2.594 0.484 -0.6313 0.4685 +3.183 -2.591 0.5411 -0.6313 0.5121 +3.175 -2.584 0.5907 -0.6313 0.5544 +3.162 -2.574 0.6322 -0.6313 0.5953 +3.146 -2.561 0.6654 -0.6313 0.6347 +3.126 -2.544 0.69 -0.6313 0.6725 +3.102 -2.525 0.7059 -0.6313 0.7087 +3.074 -2.502 0.7129 -0.6313 0.743 +3.042 -2.476 0.7111 -0.6313 0.7756 +3.007 -2.447 0.7007 -0.6313 0.8061 +2.968 -2.416 0.6817 -0.6313 0.8347 +2.926 -2.381 0.6546 -0.6313 0.8612 +2.88 -2.344 0.6197 -0.6313 0.8855 +2.831 -2.305 0.5773 -0.6313 0.9076 +2.78 -2.263 0.5282 -0.6313 0.9275 +2.726 -2.219 0.4729 -0.6313 0.945 +2.67 -2.173 0.412 -0.6313 0.9602 +2.612 -2.126 0.3463 -0.6313 0.9729 +2.553 -2.078 0.2765 -0.6313 0.9833 +2.492 -2.028 0.2035 -0.6313 0.9911 +2.43 -1.978 0.1282 -0.6313 0.9965 +2.368 -1.928 0.05138 -0.6313 0.9994 +2.418 -1.775 0 -0.5917 1 +2.355 -1.729 -0.07931 -0.5917 0.9988 +2.292 -1.682 -0.1577 -0.5917 0.995 +2.23 -1.637 -0.2343 -0.5917 0.9888 +2.169 -1.592 -0.3082 -0.5917 0.9801 +2.109 -1.548 -0.3786 -0.5917 0.9689 +2.05 -1.505 -0.4446 -0.5917 0.9553 +1.994 -1.464 -0.5054 -0.5917 0.9394 +1.94 -1.424 -0.5605 -0.5917 0.9211 +1.889 -1.386 -0.609 -0.5917 0.9004 +1.84 -1.351 -0.6504 -0.5917 0.8776 +1.794 -1.317 -0.6842 -0.5917 0.8525 +1.752 -1.286 -0.7099 -0.5917 0.8253 +1.713 -1.257 -0.7273 -0.5917 0.7961 +1.678 -1.231 -0.7359 -0.5917 0.7648 +1.646 -1.208 -0.7357 -0.5917 0.7317 +1.618 -1.188 -0.7266 -0.5917 0.6967 +1.594 -1.17 -0.7085 -0.5917 0.66 +1.574 -1.155 -0.6816 -0.5917 0.6216 +1.558 -1.143 -0.646 -0.5917 0.5817 +1.546 -1.134 -0.6021 -0.5917 0.5403 +1.537 -1.128 -0.5503 -0.5917 0.4976 +1.533 -1.125 -0.4909 -0.5917 0.4536 +1.532 -1.125 -0.4245 -0.5917 0.4085 +1.535 -1.127 -0.3517 -0.5917 0.3624 +1.541 -1.131 -0.2733 -0.5917 0.3153 +1.551 -1.138 -0.1899 -0.5917 0.2675 +1.564 -1.148 -0.1024 -0.5917 0.219 +1.579 -1.159 -0.01154 -0.5917 0.17 +1.598 -1.173 0.0817 -0.5917 0.1205 +1.619 -1.188 0.1764 -0.5917 0.07074 +1.642 -1.205 0.2717 -0.5917 0.02079 +1.667 -1.224 0.3667 -0.5917 -0.0292 +1.694 -1.244 0.4603 -0.5917 -0.07912 +1.723 -1.265 0.5516 -0.5917 -0.1288 +1.753 -1.286 0.6397 -0.5917 -0.1782 +1.783 -1.309 0.7237 -0.5917 -0.2272 +1.815 -1.332 0.8028 -0.5917 -0.2756 +1.847 -1.356 0.8761 -0.5917 -0.3233 +1.879 -1.379 0.9428 -0.5917 -0.3702 +1.912 -1.403 1.002 -0.5917 -0.4161 +1.944 -1.427 1.054 -0.5917 -0.4611 +1.976 -1.45 1.097 -0.5917 -0.5048 +2.007 -1.473 1.131 -0.5917 -0.5474 +2.038 -1.496 1.156 -0.5917 -0.5885 +2.068 -1.518 1.171 -0.5917 -0.6282 +2.097 -1.539 1.176 -0.5917 -0.6663 +2.124 -1.559 1.172 -0.5917 -0.7027 +2.151 -1.579 1.157 -0.5917 -0.7374 +2.176 -1.598 1.132 -0.5917 -0.7702 +2.201 -1.615 1.098 -0.5917 -0.8011 +2.224 -1.632 1.053 -0.5917 -0.8301 +2.245 -1.648 1 -0.5917 -0.8569 +2.266 -1.663 0.9379 -0.5917 -0.8816 +2.285 -1.677 0.8674 -0.5917 -0.9041 +2.303 -1.691 0.7893 -0.5917 -0.9243 +2.32 -1.703 0.7042 -0.5917 -0.9422 +2.336 -1.715 0.6128 -0.5917 -0.9578 +2.352 -1.726 0.516 -0.5917 -0.971 +2.366 -1.737 0.4146 -0.5917 -0.9817 +2.38 -1.747 0.3095 -0.5917 -0.99 +2.394 -1.757 0.2016 -0.5917 -0.9958 +2.407 -1.767 0.09191 -0.5917 -0.9991 +2.421 -1.777 -0.0186 -0.5917 -1 +2.434 -1.787 -0.1289 -0.5917 -0.9983 +2.447 -1.796 -0.2381 -0.5917 -0.9941 +2.461 -1.806 -0.3452 -0.5917 -0.9875 +2.475 -1.817 -0.4491 -0.5917 -0.9784 +2.49 -1.828 -0.5491 -0.5917 -0.9668 +2.506 -1.839 -0.6442 -0.5917 -0.9528 +2.522 -1.851 -0.7335 -0.5917 -0.9365 +2.54 -1.864 -0.8164 -0.5917 -0.9178 +2.558 -1.878 -0.892 -0.5917 -0.8968 +2.578 -1.892 -0.9597 -0.5917 -0.8735 +2.599 -1.908 -1.019 -0.5917 -0.8481 +2.621 -1.924 -1.069 -0.5917 -0.8206 +2.644 -1.941 -1.11 -0.5917 -0.791 +2.669 -1.959 -1.142 -0.5917 -0.7594 +2.695 -1.978 -1.163 -0.5917 -0.7259 +2.722 -1.998 -1.174 -0.5917 -0.6907 +2.75 -2.018 -1.176 -0.5917 -0.6536 +2.779 -2.04 -1.167 -0.5917 -0.615 +2.809 -2.062 -1.149 -0.5917 -0.5748 +2.84 -2.085 -1.121 -0.5917 -0.5332 +2.872 -2.108 -1.083 -0.5917 -0.4903 +2.904 -2.131 -1.037 -0.5917 -0.4461 +2.936 -2.155 -0.9831 -0.5917 -0.4008 +2.968 -2.179 -0.9211 -0.5917 -0.3545 +3.001 -2.202 -0.8521 -0.5917 -0.3073 +3.033 -2.226 -0.7768 -0.5917 -0.2594 +3.064 -2.249 -0.696 -0.5917 -0.2108 +3.094 -2.271 -0.6105 -0.5917 -0.1617 +3.124 -2.293 -0.5212 -0.5917 -0.1122 +3.152 -2.313 -0.429 -0.5917 -0.06235 +3.178 -2.333 -0.3349 -0.5917 -0.01239 +3.203 -2.351 -0.2397 -0.5917 0.0376 +3.225 -2.367 -0.1445 -0.5917 0.0875 +3.245 -2.382 -0.05013 -0.5917 0.1372 +3.263 -2.395 0.0424 -0.5917 0.1865 +3.278 -2.406 0.1322 -0.5917 0.2354 +3.29 -2.415 0.2184 -0.5917 0.2837 +3.298 -2.421 0.3003 -0.5917 0.3312 +3.303 -2.425 0.3769 -0.5917 0.378 +3.305 -2.426 0.4475 -0.5917 0.4238 +3.303 -2.424 0.5116 -0.5917 0.4685 +3.297 -2.42 0.5686 -0.5917 0.5121 +3.288 -2.413 0.6178 -0.5917 0.5544 +3.274 -2.403 0.6589 -0.5917 0.5953 +3.257 -2.39 0.6916 -0.5917 0.6347 +3.235 -2.375 0.7156 -0.5917 0.6725 +3.21 -2.356 0.7306 -0.5917 0.7087 +3.181 -2.335 0.7368 -0.5917 0.743 +3.148 -2.31 0.734 -0.5917 0.7756 +3.111 -2.284 0.7224 -0.5917 0.8061 +3.071 -2.254 0.7022 -0.5917 0.8347 +3.028 -2.222 0.6737 -0.5917 0.8612 +2.981 -2.188 0.6373 -0.5917 0.8855 +2.931 -2.152 0.5934 -0.5917 0.9076 +2.879 -2.113 0.5427 -0.5917 0.9275 +2.824 -2.073 0.4856 -0.5917 0.945 +2.767 -2.031 0.4229 -0.5917 0.9602 +2.708 -1.988 0.3554 -0.5917 0.9729 +2.648 -1.944 0.2837 -0.5917 0.9833 +2.586 -1.898 0.2088 -0.5917 0.9911 +2.524 -1.852 0.1315 -0.5917 0.9965 +2.461 -1.806 0.0527 -0.5917 0.9994 +2.504 -1.652 0 -0.5507 1 +2.44 -1.61 -0.08125 -0.5507 0.9988 +2.377 -1.568 -0.1616 -0.5507 0.995 +2.314 -1.526 -0.2401 -0.5507 0.9888 +2.252 -1.486 -0.3159 -0.5507 0.9801 +2.191 -1.446 -0.3881 -0.5507 0.9689 +2.132 -1.407 -0.4559 -0.5507 0.9553 +2.075 -1.369 -0.5184 -0.5507 0.9394 +2.021 -1.333 -0.5751 -0.5507 0.9211 +1.968 -1.299 -0.6252 -0.5507 0.9004 +1.919 -1.266 -0.6681 -0.5507 0.8776 +1.872 -1.235 -0.7033 -0.5507 0.8525 +1.829 -1.207 -0.7304 -0.5507 0.8253 +1.789 -1.18 -0.7489 -0.5507 0.7961 +1.753 -1.156 -0.7587 -0.5507 0.7648 +1.72 -1.135 -0.7594 -0.5507 0.7317 +1.691 -1.115 -0.7512 -0.5507 0.6967 +1.666 -1.099 -0.7338 -0.5507 0.66 +1.644 -1.085 -0.7075 -0.5507 0.6216 +1.627 -1.073 -0.6725 -0.5507 0.5817 +1.613 -1.064 -0.629 -0.5507 0.5403 +1.604 -1.058 -0.5774 -0.5507 0.4976 +1.598 -1.054 -0.5182 -0.5507 0.4536 +1.595 -1.053 -0.4518 -0.5507 0.4085 +1.597 -1.054 -0.379 -0.5507 0.3624 +1.602 -1.057 -0.3004 -0.5507 0.3153 +1.61 -1.062 -0.2167 -0.5507 0.2675 +1.622 -1.07 -0.1288 -0.5507 0.219 +1.636 -1.079 -0.03755 -0.5507 0.17 +1.653 -1.091 0.05623 -0.5507 0.1205 +1.673 -1.104 0.1516 -0.5507 0.07074 +1.695 -1.118 0.2476 -0.5507 0.02079 +1.719 -1.134 0.3433 -0.5507 -0.0292 +1.745 -1.151 0.4377 -0.5507 -0.07912 +1.773 -1.169 0.5298 -0.5507 -0.1288 +1.802 -1.189 0.6189 -0.5507 -0.1782 +1.832 -1.208 0.7038 -0.5507 -0.2272 +1.863 -1.229 0.7838 -0.5507 -0.2756 +1.894 -1.25 0.8581 -0.5507 -0.3233 +1.926 -1.271 0.9258 -0.5507 -0.3702 +1.959 -1.292 0.9863 -0.5507 -0.4161 +1.991 -1.314 1.039 -0.5507 -0.4611 +2.023 -1.335 1.083 -0.5507 -0.5048 +2.055 -1.356 1.118 -0.5507 -0.5474 +2.086 -1.376 1.144 -0.5507 -0.5885 +2.117 -1.396 1.16 -0.5507 -0.6282 +2.146 -1.416 1.166 -0.5507 -0.6663 +2.175 -1.435 1.162 -0.5507 -0.7027 +2.203 -1.453 1.148 -0.5507 -0.7374 +2.23 -1.471 1.124 -0.5507 -0.7702 +2.256 -1.488 1.09 -0.5507 -0.8011 +2.28 -1.504 1.047 -0.5507 -0.8301 +2.304 -1.52 0.9944 -0.5507 -0.8569 +2.326 -1.535 0.9328 -0.5507 -0.8816 +2.348 -1.549 0.863 -0.5507 -0.9041 +2.368 -1.562 0.7855 -0.5507 -0.9243 +2.388 -1.575 0.7009 -0.5507 -0.9422 +2.406 -1.588 0.6101 -0.5507 -0.9578 +2.424 -1.599 0.5138 -0.5507 -0.971 +2.442 -1.611 0.4128 -0.5507 -0.9817 +2.458 -1.622 0.3082 -0.5507 -0.99 +2.475 -1.633 0.2008 -0.5507 -0.9958 +2.491 -1.643 0.09154 -0.5507 -0.9991 +2.507 -1.654 -0.01852 -0.5507 -1 +2.523 -1.664 -0.1284 -0.5507 -0.9983 +2.539 -1.675 -0.2371 -0.5507 -0.9941 +2.555 -1.686 -0.3437 -0.5507 -0.9875 +2.572 -1.697 -0.4472 -0.5507 -0.9784 +2.59 -1.709 -0.5467 -0.5507 -0.9668 +2.608 -1.721 -0.6413 -0.5507 -0.9528 +2.627 -1.733 -0.7301 -0.5507 -0.9365 +2.647 -1.746 -0.8124 -0.5507 -0.9178 +2.667 -1.76 -0.8874 -0.5507 -0.8968 +2.689 -1.774 -0.9545 -0.5507 -0.8735 +2.712 -1.789 -1.013 -0.5507 -0.8481 +2.736 -1.805 -1.063 -0.5507 -0.8206 +2.761 -1.822 -1.103 -0.5507 -0.791 +2.787 -1.839 -1.133 -0.5507 -0.7594 +2.814 -1.857 -1.154 -0.5507 -0.7259 +2.843 -1.875 -1.165 -0.5507 -0.6907 +2.872 -1.895 -1.165 -0.5507 -0.6536 +2.902 -1.914 -1.156 -0.5507 -0.615 +2.933 -1.935 -1.136 -0.5507 -0.5748 +2.964 -1.955 -1.107 -0.5507 -0.5332 +2.996 -1.976 -1.069 -0.5507 -0.4903 +3.028 -1.998 -1.022 -0.5507 -0.4461 +3.06 -2.019 -0.9668 -0.5507 -0.4008 +3.093 -2.04 -0.9038 -0.5507 -0.3545 +3.125 -2.061 -0.8338 -0.5507 -0.3073 +3.156 -2.082 -0.7575 -0.5507 -0.2594 +3.187 -2.102 -0.6757 -0.5507 -0.2108 +3.217 -2.122 -0.5893 -0.5507 -0.1617 +3.245 -2.141 -0.4991 -0.5507 -0.1122 +3.272 -2.159 -0.4061 -0.5507 -0.06235 +3.298 -2.176 -0.3112 -0.5507 -0.01239 +3.321 -2.191 -0.2153 -0.5507 0.0376 +3.342 -2.205 -0.1194 -0.5507 0.0875 +3.361 -2.218 -0.02447 -0.5507 0.1372 +3.378 -2.228 0.06858 -0.5507 0.1865 +3.391 -2.237 0.1588 -0.5507 0.2354 +3.401 -2.244 0.2454 -0.5507 0.2837 +3.408 -2.249 0.3274 -0.5507 0.3312 +3.412 -2.251 0.4042 -0.5507 0.378 +3.412 -2.251 0.4749 -0.5507 0.4238 +3.409 -2.249 0.5389 -0.5507 0.4685 +3.402 -2.244 0.5956 -0.5507 0.5121 +3.391 -2.237 0.6446 -0.5507 0.5544 +3.376 -2.227 0.6853 -0.5507 0.5953 +3.357 -2.215 0.7174 -0.5507 0.6347 +3.335 -2.2 0.7407 -0.5507 0.6725 +3.308 -2.182 0.755 -0.5507 0.7087 +3.278 -2.162 0.7602 -0.5507 0.743 +3.244 -2.14 0.7564 -0.5507 0.7756 +3.206 -2.115 0.7436 -0.5507 0.8061 +3.165 -2.088 0.7222 -0.5507 0.8347 +3.121 -2.059 0.6924 -0.5507 0.8612 +3.073 -2.027 0.6545 -0.5507 0.8855 +3.023 -1.994 0.6091 -0.5507 0.9076 +2.969 -1.959 0.5568 -0.5507 0.9275 +2.914 -1.922 0.498 -0.5507 0.945 +2.856 -1.884 0.4336 -0.5507 0.9602 +2.797 -1.845 0.3642 -0.5507 0.9729 +2.736 -1.805 0.2907 -0.5507 0.9833 +2.673 -1.764 0.2139 -0.5507 0.9911 +2.61 -1.722 0.1347 -0.5507 0.9965 +2.547 -1.68 0.05398 -0.5507 0.9994 +2.584 -1.525 0 -0.5083 1 +2.519 -1.487 -0.08314 -0.5083 0.9988 +2.456 -1.449 -0.1654 -0.5083 0.995 +2.392 -1.412 -0.2457 -0.5083 0.9888 +2.33 -1.375 -0.3233 -0.5083 0.9801 +2.269 -1.339 -0.3973 -0.5083 0.9689 +2.21 -1.304 -0.4668 -0.5083 0.9553 +2.153 -1.27 -0.5311 -0.5083 0.9394 +2.097 -1.238 -0.5894 -0.5083 0.9211 +2.045 -1.207 -0.6411 -0.5083 0.9004 +1.994 -1.177 -0.6854 -0.5083 0.8776 +1.947 -1.149 -0.722 -0.5083 0.8525 +1.903 -1.123 -0.7504 -0.5083 0.8253 +1.862 -1.099 -0.7701 -0.5083 0.7961 +1.825 -1.077 -0.7809 -0.5083 0.7648 +1.791 -1.057 -0.7827 -0.5083 0.7317 +1.761 -1.039 -0.7753 -0.5083 0.6967 +1.734 -1.024 -0.7587 -0.5083 0.66 +1.712 -1.01 -0.7331 -0.5083 0.6216 +1.693 -0.9993 -0.6986 -0.5083 0.5817 +1.678 -0.9905 -0.6555 -0.5083 0.5403 +1.667 -0.9839 -0.6042 -0.5083 0.4976 +1.66 -0.9796 -0.5452 -0.5083 0.4536 +1.656 -0.9774 -0.4789 -0.5083 0.4085 +1.656 -0.9774 -0.4061 -0.5083 0.3624 +1.659 -0.9794 -0.3273 -0.5083 0.3153 +1.666 -0.9834 -0.2434 -0.5083 0.2675 +1.676 -0.9892 -0.1552 -0.5083 0.219 +1.689 -0.9968 -0.06354 -0.5083 0.17 +1.705 -1.006 0.03073 -0.5083 0.1205 +1.723 -1.017 0.1267 -0.5083 0.07074 +1.744 -1.029 0.2233 -0.5083 0.02079 +1.766 -1.043 0.3196 -0.5083 -0.0292 +1.791 -1.057 0.4148 -0.5083 -0.07912 +1.818 -1.073 0.5078 -0.5083 -0.1288 +1.846 -1.089 0.5976 -0.5083 -0.1782 +1.875 -1.107 0.6834 -0.5083 -0.2272 +1.905 -1.124 0.7644 -0.5083 -0.2756 +1.936 -1.143 0.8395 -0.5083 -0.3233 +1.968 -1.161 0.9082 -0.5083 -0.3702 +2 -1.18 0.9696 -0.5083 -0.4161 +2.032 -1.199 1.023 -0.5083 -0.4611 +2.064 -1.218 1.068 -0.5083 -0.5048 +2.096 -1.237 1.104 -0.5083 -0.5474 +2.128 -1.256 1.131 -0.5083 -0.5885 +2.159 -1.274 1.148 -0.5083 -0.6282 +2.19 -1.292 1.155 -0.5083 -0.6663 +2.219 -1.31 1.152 -0.5083 -0.7027 +2.248 -1.327 1.139 -0.5083 -0.7374 +2.277 -1.344 1.116 -0.5083 -0.7702 +2.304 -1.36 1.083 -0.5083 -0.8011 +2.33 -1.375 1.04 -0.5083 -0.8301 +2.356 -1.39 0.9881 -0.5083 -0.8569 +2.38 -1.405 0.9272 -0.5083 -0.8816 +2.404 -1.419 0.8581 -0.5083 -0.9041 +2.427 -1.432 0.7812 -0.5083 -0.9243 +2.448 -1.445 0.6972 -0.5083 -0.9422 +2.47 -1.458 0.607 -0.5083 -0.9578 +2.49 -1.47 0.5112 -0.5083 -0.971 +2.51 -1.482 0.4108 -0.5083 -0.9817 +2.53 -1.493 0.3067 -0.5083 -0.99 +2.549 -1.504 0.1998 -0.5083 -0.9958 +2.568 -1.516 0.09111 -0.5083 -0.9991 +2.587 -1.527 -0.01843 -0.5083 -1 +2.606 -1.538 -0.1278 -0.5083 -0.9983 +2.625 -1.549 -0.236 -0.5083 -0.9941 +2.644 -1.56 -0.3421 -0.5083 -0.9875 +2.664 -1.572 -0.4451 -0.5083 -0.9784 +2.684 -1.584 -0.544 -0.5083 -0.9668 +2.705 -1.596 -0.638 -0.5083 -0.9528 +2.726 -1.609 -0.7262 -0.5083 -0.9365 +2.748 -1.622 -0.8078 -0.5083 -0.9178 +2.771 -1.636 -0.8822 -0.5083 -0.8968 +2.795 -1.65 -0.9486 -0.5083 -0.8735 +2.82 -1.664 -1.007 -0.5083 -0.8481 +2.846 -1.679 -1.055 -0.5083 -0.8206 +2.872 -1.695 -1.095 -0.5083 -0.791 +2.9 -1.712 -1.125 -0.5083 -0.7594 +2.928 -1.728 -1.144 -0.5083 -0.7259 +2.958 -1.746 -1.154 -0.5083 -0.6907 +2.988 -1.763 -1.154 -0.5083 -0.6536 +3.019 -1.782 -1.143 -0.5083 -0.615 +3.05 -1.8 -1.123 -0.5083 -0.5748 +3.082 -1.819 -1.093 -0.5083 -0.5332 +3.114 -1.838 -1.054 -0.5083 -0.4903 +3.146 -1.857 -1.006 -0.5083 -0.4461 +3.178 -1.876 -0.9498 -0.5083 -0.4008 +3.21 -1.895 -0.8859 -0.5083 -0.3545 +3.241 -1.913 -0.815 -0.5083 -0.3073 +3.272 -1.931 -0.7378 -0.5083 -0.2594 +3.302 -1.949 -0.6551 -0.5083 -0.2108 +3.331 -1.966 -0.5678 -0.5083 -0.1617 +3.359 -1.982 -0.4768 -0.5083 -0.1122 +3.384 -1.998 -0.383 -0.5083 -0.06235 +3.409 -2.012 -0.2873 -0.5083 -0.01239 +3.431 -2.025 -0.1908 -0.5083 0.0376 +3.451 -2.037 -0.09427 -0.5083 0.0875 +3.468 -2.047 0.001205 -0.5083 0.1372 +3.483 -2.056 0.09471 -0.5083 0.1865 +3.495 -2.063 0.1853 -0.5083 0.2354 +3.504 -2.068 0.2722 -0.5083 0.2837 +3.509 -2.071 0.3544 -0.5083 0.3312 +3.512 -2.073 0.4312 -0.5083 0.378 +3.51 -2.072 0.5019 -0.5083 0.4238 +3.505 -2.069 0.5658 -0.5083 0.4685 +3.497 -2.064 0.6223 -0.5083 0.5121 +3.484 -2.056 0.6709 -0.5083 0.5544 +3.468 -2.047 0.7112 -0.5083 0.5953 +3.448 -2.035 0.7427 -0.5083 0.6347 +3.424 -2.021 0.7653 -0.5083 0.6725 +3.397 -2.005 0.7788 -0.5083 0.7087 +3.365 -1.986 0.7831 -0.5083 0.743 +3.33 -1.965 0.7783 -0.5083 0.7756 +3.292 -1.943 0.7644 -0.5083 0.8061 +3.25 -1.918 0.7418 -0.5083 0.8347 +3.204 -1.891 0.7106 -0.5083 0.8612 +3.156 -1.863 0.6714 -0.5083 0.8855 +3.105 -1.833 0.6245 -0.5083 0.9076 +3.052 -1.801 0.5705 -0.5083 0.9275 +2.996 -1.768 0.5101 -0.5083 0.945 +2.937 -1.734 0.444 -0.5083 0.9602 +2.878 -1.698 0.3729 -0.5083 0.9729 +2.816 -1.662 0.2976 -0.5083 0.9833 +2.754 -1.625 0.2189 -0.5083 0.9911 +2.69 -1.588 0.1379 -0.5083 0.9965 +2.626 -1.55 0.05524 -0.5083 0.9994 +2.657 -1.394 0 -0.4646 1 +2.592 -1.36 -0.08498 -0.4646 0.9988 +2.529 -1.327 -0.169 -0.4646 0.995 +2.465 -1.294 -0.2512 -0.4646 0.9888 +2.403 -1.261 -0.3306 -0.4646 0.9801 +2.342 -1.229 -0.4063 -0.4646 0.9689 +2.283 -1.198 -0.4775 -0.4646 0.9553 +2.225 -1.168 -0.5435 -0.4646 0.9394 +2.17 -1.138 -0.6034 -0.4646 0.9211 +2.117 -1.111 -0.6565 -0.4646 0.9004 +2.066 -1.084 -0.7023 -0.4646 0.8776 +2.018 -1.059 -0.7403 -0.4646 0.8525 +1.974 -1.035 -0.7699 -0.4646 0.8253 +1.932 -1.014 -0.7908 -0.4646 0.7961 +1.894 -0.9937 -0.8027 -0.4646 0.7648 +1.859 -0.9754 -0.8054 -0.4646 0.7317 +1.828 -0.9591 -0.7989 -0.4646 0.6967 +1.801 -0.9447 -0.7831 -0.4646 0.66 +1.777 -0.9322 -0.7582 -0.4646 0.6216 +1.757 -0.9217 -0.7242 -0.4646 0.5817 +1.74 -0.9131 -0.6816 -0.4646 0.5403 +1.728 -0.9066 -0.6306 -0.4646 0.4976 +1.719 -0.9019 -0.5718 -0.4646 0.4536 +1.714 -0.8992 -0.5057 -0.4646 0.4085 +1.712 -0.8983 -0.4329 -0.4646 0.3624 +1.714 -0.8992 -0.354 -0.4646 0.3153 +1.719 -0.9018 -0.27 -0.4646 0.2675 +1.727 -0.9061 -0.1815 -0.4646 0.219 +1.738 -0.912 -0.08949 -0.4646 0.17 +1.752 -0.9194 0.005205 -0.4646 0.1205 +1.769 -0.9281 0.1016 -0.4646 0.07074 +1.788 -0.9382 0.1988 -0.4646 0.02079 +1.809 -0.9494 0.2958 -0.4646 -0.0292 +1.833 -0.9616 0.3917 -0.4646 -0.07912 +1.858 -0.9749 0.4854 -0.4646 -0.1288 +1.885 -0.9889 0.576 -0.4646 -0.1782 +1.913 -1.004 0.6627 -0.4646 -0.2272 +1.942 -1.019 0.7444 -0.4646 -0.2756 +1.973 -1.035 0.8205 -0.4646 -0.3233 +2.004 -1.051 0.89 -0.4646 -0.3702 +2.035 -1.068 0.9524 -0.4646 -0.4161 +2.067 -1.084 1.007 -0.4646 -0.4611 +2.099 -1.101 1.053 -0.4646 -0.5048 +2.131 -1.118 1.09 -0.4646 -0.5474 +2.163 -1.135 1.117 -0.4646 -0.5885 +2.195 -1.151 1.135 -0.4646 -0.6282 +2.226 -1.168 1.143 -0.4646 -0.6663 +2.257 -1.184 1.141 -0.4646 -0.7027 +2.287 -1.2 1.129 -0.4646 -0.7374 +2.316 -1.215 1.107 -0.4646 -0.7702 +2.345 -1.23 1.074 -0.4646 -0.8011 +2.373 -1.245 1.032 -0.4646 -0.8301 +2.4 -1.259 0.9811 -0.4646 -0.8569 +2.427 -1.273 0.921 -0.4646 -0.8816 +2.453 -1.287 0.8526 -0.4646 -0.9041 +2.478 -1.3 0.7764 -0.4646 -0.9243 +2.502 -1.313 0.6931 -0.4646 -0.9422 +2.526 -1.325 0.6035 -0.4646 -0.9578 +2.549 -1.338 0.5083 -0.4646 -0.971 +2.572 -1.349 0.4086 -0.4646 -0.9817 +2.594 -1.361 0.3051 -0.4646 -0.99 +2.617 -1.373 0.1988 -0.4646 -0.9958 +2.638 -1.384 0.09062 -0.4646 -0.9991 +2.66 -1.396 -0.01834 -0.4646 -1 +2.682 -1.407 -0.1271 -0.4646 -0.9983 +2.704 -1.419 -0.2348 -0.4646 -0.9941 +2.726 -1.43 -0.3402 -0.4646 -0.9875 +2.749 -1.442 -0.4426 -0.4646 -0.9784 +2.772 -1.454 -0.5409 -0.4646 -0.9668 +2.795 -1.466 -0.6343 -0.4646 -0.9528 +2.819 -1.479 -0.7218 -0.4646 -0.9365 +2.844 -1.492 -0.8028 -0.4646 -0.9178 +2.869 -1.505 -0.8765 -0.4646 -0.8968 +2.895 -1.519 -0.9422 -0.4646 -0.8735 +2.922 -1.533 -0.9994 -0.4646 -0.8481 +2.949 -1.547 -1.048 -0.4646 -0.8206 +2.978 -1.562 -1.086 -0.4646 -0.791 +3.007 -1.577 -1.115 -0.4646 -0.7594 +3.036 -1.593 -1.134 -0.4646 -0.7259 +3.067 -1.609 -1.143 -0.4646 -0.6907 +3.098 -1.625 -1.142 -0.4646 -0.6536 +3.129 -1.642 -1.13 -0.4646 -0.615 +3.161 -1.658 -1.109 -0.4646 -0.5748 +3.193 -1.675 -1.078 -0.4646 -0.5332 +3.225 -1.692 -1.038 -0.4646 -0.4903 +3.257 -1.709 -0.9894 -0.4646 -0.4461 +3.289 -1.725 -0.9323 -0.4646 -0.4008 +3.32 -1.742 -0.8674 -0.4646 -0.3545 +3.351 -1.758 -0.7956 -0.4646 -0.3073 +3.381 -1.774 -0.7175 -0.4646 -0.2594 +3.41 -1.789 -0.634 -0.4646 -0.2108 +3.437 -1.804 -0.5459 -0.4646 -0.1617 +3.464 -1.817 -0.4542 -0.4646 -0.1122 +3.488 -1.83 -0.3596 -0.4646 -0.06235 +3.511 -1.842 -0.2633 -0.4646 -0.01239 +3.532 -1.853 -0.1661 -0.4646 0.0376 +3.55 -1.863 -0.06907 -0.4646 0.0875 +3.566 -1.871 0.02688 -0.4646 0.1372 +3.579 -1.878 0.1208 -0.4646 0.1865 +3.589 -1.883 0.2117 -0.4646 0.2354 +3.596 -1.887 0.2988 -0.4646 0.2837 +3.6 -1.889 0.3812 -0.4646 0.3312 +3.601 -1.889 0.458 -0.4646 0.378 +3.598 -1.888 0.5287 -0.4646 0.4238 +3.592 -1.884 0.5924 -0.4646 0.4685 +3.581 -1.879 0.6486 -0.4646 0.5121 +3.568 -1.872 0.6969 -0.4646 0.5544 +3.55 -1.863 0.7366 -0.4646 0.5953 +3.529 -1.851 0.7676 -0.4646 0.6347 +3.504 -1.838 0.7895 -0.4646 0.6725 +3.475 -1.823 0.8021 -0.4646 0.7087 +3.443 -1.806 0.8056 -0.4646 0.743 +3.407 -1.787 0.7997 -0.4646 0.7756 +3.367 -1.767 0.7847 -0.4646 0.8061 +3.325 -1.744 0.7609 -0.4646 0.8347 +3.279 -1.72 0.7284 -0.4646 0.8612 +3.23 -1.695 0.6878 -0.4646 0.8855 +3.179 -1.668 0.6394 -0.4646 0.9076 +3.125 -1.64 0.5839 -0.4646 0.9275 +3.069 -1.61 0.5219 -0.4646 0.945 +3.01 -1.579 0.4541 -0.4646 0.9602 +2.951 -1.548 0.3813 -0.4646 0.9729 +2.889 -1.516 0.3042 -0.4646 0.9833 +2.827 -1.483 0.2238 -0.4646 0.9911 +2.763 -1.45 0.1409 -0.4646 0.9965 +2.699 -1.416 0.05646 -0.4646 0.9994 +2.723 -1.259 0 -0.4198 1 +2.659 -1.23 -0.08676 -0.4198 0.9988 +2.596 -1.2 -0.1726 -0.4198 0.995 +2.533 -1.171 -0.2565 -0.4198 0.9888 +2.471 -1.143 -0.3376 -0.4198 0.9801 +2.41 -1.115 -0.4151 -0.4198 0.9689 +2.351 -1.087 -0.4879 -0.4198 0.9553 +2.293 -1.061 -0.5555 -0.4198 0.9394 +2.238 -1.035 -0.6169 -0.4198 0.9211 +2.185 -1.01 -0.6715 -0.4198 0.9004 +2.134 -0.9868 -0.7188 -0.4198 0.8776 +2.086 -0.9646 -0.7581 -0.4198 0.8525 +2.041 -0.9437 -0.7889 -0.4198 0.8253 +1.999 -0.9243 -0.811 -0.4198 0.7961 +1.96 -0.9063 -0.824 -0.4198 0.7648 +1.924 -0.8899 -0.8277 -0.4198 0.7317 +1.892 -0.875 -0.8221 -0.4198 0.6967 +1.864 -0.8618 -0.807 -0.4198 0.66 +1.839 -0.8503 -0.7828 -0.4198 0.6216 +1.817 -0.8405 -0.7494 -0.4198 0.5817 +1.8 -0.8323 -0.7072 -0.4198 0.5403 +1.786 -0.8258 -0.6566 -0.4198 0.4976 +1.775 -0.821 -0.5981 -0.4198 0.4536 +1.768 -0.8178 -0.5321 -0.4198 0.4085 +1.765 -0.8163 -0.4594 -0.4198 0.3624 +1.765 -0.8163 -0.3805 -0.4198 0.3153 +1.768 -0.8178 -0.2964 -0.4198 0.2675 +1.775 -0.8207 -0.2077 -0.4198 0.219 +1.784 -0.8251 -0.1154 -0.4198 0.17 +1.796 -0.8307 -0.02032 -0.4198 0.1205 +1.811 -0.8376 0.07654 -0.4198 0.07074 +1.829 -0.8457 0.1742 -0.4198 0.02079 +1.848 -0.8548 0.2718 -0.4198 -0.0292 +1.87 -0.8649 0.3683 -0.4198 -0.07912 +1.894 -0.8758 0.4627 -0.4198 -0.1288 +1.919 -0.8875 0.554 -0.4198 -0.1782 +1.946 -0.9 0.6415 -0.4198 -0.2272 +1.974 -0.913 0.724 -0.4198 -0.2756 +2.003 -0.9265 0.8009 -0.4198 -0.3233 +2.034 -0.9405 0.8713 -0.4198 -0.3702 +2.064 -0.9548 0.9345 -0.4198 -0.4161 +2.096 -0.9693 0.9899 -0.4198 -0.4611 +2.128 -0.984 1.037 -0.4198 -0.5048 +2.16 -0.9988 1.075 -0.4198 -0.5474 +2.192 -1.014 1.103 -0.4198 -0.5885 +2.224 -1.028 1.122 -0.4198 -0.6282 +2.256 -1.043 1.131 -0.4198 -0.6663 +2.287 -1.058 1.129 -0.4198 -0.7027 +2.318 -1.072 1.118 -0.4198 -0.7374 +2.349 -1.086 1.097 -0.4198 -0.7702 +2.379 -1.1 1.065 -0.4198 -0.8011 +2.409 -1.114 1.024 -0.4198 -0.8301 +2.438 -1.128 0.9736 -0.4198 -0.8569 +2.467 -1.141 0.9143 -0.4198 -0.8816 +2.495 -1.154 0.8466 -0.4198 -0.9041 +2.522 -1.166 0.7711 -0.4198 -0.9243 +2.549 -1.179 0.6885 -0.4198 -0.9422 +2.575 -1.191 0.5996 -0.4198 -0.9578 +2.601 -1.203 0.5052 -0.4198 -0.971 +2.627 -1.215 0.4061 -0.4198 -0.9817 +2.652 -1.227 0.3032 -0.4198 -0.99 +2.677 -1.238 0.1976 -0.4198 -0.9958 +2.702 -1.25 0.09008 -0.4198 -0.9991 +2.727 -1.261 -0.01823 -0.4198 -1 +2.752 -1.273 -0.1264 -0.4198 -0.9983 +2.777 -1.284 -0.2333 -0.4198 -0.9941 +2.802 -1.296 -0.3382 -0.4198 -0.9875 +2.827 -1.308 -0.4399 -0.4198 -0.9784 +2.853 -1.319 -0.5375 -0.4198 -0.9668 +2.879 -1.332 -0.6302 -0.4198 -0.9528 +2.906 -1.344 -0.717 -0.4198 -0.9365 +2.933 -1.356 -0.7973 -0.4198 -0.9178 +2.96 -1.369 -0.8702 -0.4198 -0.8968 +2.989 -1.382 -0.9352 -0.4198 -0.8735 +3.017 -1.395 -0.9916 -0.4198 -0.8481 +3.047 -1.409 -1.039 -0.4198 -0.8206 +3.076 -1.423 -1.077 -0.4198 -0.791 +3.107 -1.437 -1.105 -0.4198 -0.7594 +3.138 -1.451 -1.123 -0.4198 -0.7259 +3.169 -1.466 -1.131 -0.4198 -0.6907 +3.201 -1.48 -1.129 -0.4198 -0.6536 +3.233 -1.495 -1.117 -0.4198 -0.615 +3.265 -1.51 -1.095 -0.4198 -0.5748 +3.297 -1.525 -1.063 -0.4198 -0.5332 +3.329 -1.54 -1.022 -0.4198 -0.4903 +3.36 -1.554 -0.9722 -0.4198 -0.4461 +3.392 -1.569 -0.9141 -0.4198 -0.4008 +3.422 -1.583 -0.8484 -0.4198 -0.3545 +3.452 -1.597 -0.7758 -0.4198 -0.3073 +3.481 -1.61 -0.6969 -0.4198 -0.2594 +3.509 -1.623 -0.6126 -0.4198 -0.2108 +3.535 -1.635 -0.5237 -0.4198 -0.1617 +3.56 -1.647 -0.4312 -0.4198 -0.1122 +3.583 -1.657 -0.336 -0.4198 -0.06235 +3.604 -1.667 -0.2391 -0.4198 -0.01239 +3.623 -1.676 -0.1414 -0.4198 0.0376 +3.64 -1.683 -0.04383 -0.4198 0.0875 +3.654 -1.69 0.05254 -0.4198 0.1372 +3.665 -1.695 0.1468 -0.4198 0.1865 +3.674 -1.699 0.238 -0.4198 0.2354 +3.679 -1.701 0.3252 -0.4198 0.2837 +3.681 -1.702 0.4077 -0.4198 0.3312 +3.68 -1.702 0.4846 -0.4198 0.378 +3.676 -1.7 0.5551 -0.4198 0.4238 +3.667 -1.696 0.6186 -0.4198 0.4685 +3.656 -1.691 0.6746 -0.4198 0.5121 +3.641 -1.684 0.7224 -0.4198 0.5544 +3.622 -1.675 0.7616 -0.4198 0.5953 +3.599 -1.665 0.7919 -0.4198 0.6347 +3.573 -1.652 0.8131 -0.4198 0.6725 +3.543 -1.639 0.825 -0.4198 0.7087 +3.51 -1.623 0.8275 -0.4198 0.743 +3.473 -1.606 0.8206 -0.4198 0.7756 +3.433 -1.588 0.8046 -0.4198 0.8061 +3.39 -1.568 0.7795 -0.4198 0.8347 +3.344 -1.547 0.7458 -0.4198 0.8612 +3.295 -1.524 0.7038 -0.4198 0.8855 +3.244 -1.5 0.654 -0.4198 0.9076 +3.19 -1.475 0.597 -0.4198 0.9275 +3.133 -1.449 0.5334 -0.4198 0.945 +3.075 -1.422 0.464 -0.4198 0.9602 +3.015 -1.395 0.3895 -0.4198 0.9729 +2.954 -1.366 0.3107 -0.4198 0.9833 +2.892 -1.337 0.2285 -0.4198 0.9911 +2.829 -1.308 0.1439 -0.4198 0.9965 +2.765 -1.279 0.05764 -0.4198 0.9994 +2.782 -1.122 0 -0.3739 1 +2.719 -1.096 -0.08849 -0.3739 0.9988 +2.656 -1.071 -0.176 -0.3739 0.995 +2.594 -1.046 -0.2617 -0.3739 0.9888 +2.533 -1.021 -0.3445 -0.3739 0.9801 +2.472 -0.9967 -0.4235 -0.3739 0.9689 +2.414 -0.973 -0.498 -0.3739 0.9553 +2.356 -0.9499 -0.5671 -0.3739 0.9394 +2.301 -0.9276 -0.6301 -0.3739 0.9211 +2.248 -0.9062 -0.6862 -0.3739 0.9004 +2.197 -0.8858 -0.7348 -0.3739 0.8776 +2.149 -0.8663 -0.7754 -0.3739 0.8525 +2.104 -0.848 -0.8075 -0.3739 0.8253 +2.061 -0.8309 -0.8307 -0.3739 0.7961 +2.022 -0.815 -0.8447 -0.3739 0.7648 +1.986 -0.8004 -0.8494 -0.3739 0.7317 +1.953 -0.7872 -0.8447 -0.3739 0.6967 +1.923 -0.7753 -0.8305 -0.3739 0.66 +1.897 -0.7648 -0.8069 -0.3739 0.6216 +1.875 -0.7557 -0.7741 -0.3739 0.5817 +1.856 -0.748 -0.7324 -0.3739 0.5403 +1.84 -0.7418 -0.6822 -0.3739 0.4976 +1.828 -0.737 -0.624 -0.3739 0.4536 +1.82 -0.7335 -0.5582 -0.3739 0.4085 +1.815 -0.7314 -0.4856 -0.3739 0.3624 +1.813 -0.7307 -0.4068 -0.3739 0.3153 +1.814 -0.7313 -0.3226 -0.3739 0.2675 +1.819 -0.7331 -0.2338 -0.3739 0.219 +1.826 -0.7361 -0.1412 -0.3739 0.17 +1.836 -0.7402 -0.04584 -0.3739 0.1205 +1.849 -0.7455 0.05141 -0.3739 0.07074 +1.865 -0.7517 0.1496 -0.3739 0.02079 +1.883 -0.7589 0.2476 -0.3739 -0.0292 +1.903 -0.767 0.3447 -0.3739 -0.07912 +1.925 -0.7758 0.4397 -0.3739 -0.1288 +1.948 -0.7854 0.5317 -0.3739 -0.1782 +1.974 -0.7957 0.6199 -0.3739 -0.2272 +2.001 -0.8065 0.7032 -0.3739 -0.2756 +2.029 -0.8179 0.7809 -0.3739 -0.3233 +2.058 -0.8296 0.8521 -0.3739 -0.3702 +2.088 -0.8418 0.9161 -0.3739 -0.4161 +2.119 -0.8542 0.9723 -0.3739 -0.4611 +2.15 -0.8669 1.02 -0.3739 -0.5048 +2.182 -0.8797 1.059 -0.3739 -0.5474 +2.214 -0.8926 1.088 -0.3739 -0.5885 +2.247 -0.9056 1.108 -0.3739 -0.6282 +2.279 -0.9187 1.118 -0.3739 -0.6663 +2.311 -0.9317 1.117 -0.3739 -0.7027 +2.343 -0.9446 1.107 -0.3739 -0.7374 +2.375 -0.9575 1.086 -0.3739 -0.7702 +2.407 -0.9702 1.055 -0.3739 -0.8011 +2.438 -0.9829 1.015 -0.3739 -0.8301 +2.469 -0.9953 0.9655 -0.3739 -0.8569 +2.5 -1.008 0.9069 -0.3739 -0.8816 +2.53 -1.02 0.84 -0.3739 -0.9041 +2.56 -1.032 0.7653 -0.3739 -0.9243 +2.589 -1.044 0.6835 -0.3739 -0.9422 +2.618 -1.055 0.5954 -0.3739 -0.9578 +2.647 -1.067 0.5017 -0.3739 -0.971 +2.675 -1.078 0.4033 -0.3739 -0.9817 +2.703 -1.09 0.3012 -0.3739 -0.99 +2.731 -1.101 0.1962 -0.3739 -0.9958 +2.759 -1.112 0.08949 -0.3739 -0.9991 +2.787 -1.124 -0.01811 -0.3739 -1 +2.815 -1.135 -0.1255 -0.3739 -0.9983 +2.843 -1.146 -0.2318 -0.3739 -0.9941 +2.871 -1.157 -0.3359 -0.3739 -0.9875 +2.899 -1.169 -0.4368 -0.3739 -0.9784 +2.928 -1.18 -0.5337 -0.3739 -0.9668 +2.957 -1.192 -0.6257 -0.3739 -0.9528 +2.986 -1.204 -0.7118 -0.3739 -0.9365 +3.015 -1.215 -0.7913 -0.3739 -0.9178 +3.045 -1.228 -0.8634 -0.3739 -0.8968 +3.075 -1.24 -0.9276 -0.3739 -0.8735 +3.106 -1.252 -0.9832 -0.3739 -0.8481 +3.137 -1.265 -1.03 -0.3739 -0.8206 +3.169 -1.277 -1.067 -0.3739 -0.791 +3.2 -1.29 -1.094 -0.3739 -0.7594 +3.232 -1.303 -1.111 -0.3739 -0.7259 +3.264 -1.316 -1.118 -0.3739 -0.6907 +3.297 -1.329 -1.115 -0.3739 -0.6536 +3.329 -1.342 -1.102 -0.3739 -0.615 +3.361 -1.355 -1.079 -0.3739 -0.5748 +3.393 -1.368 -1.047 -0.3739 -0.5332 +3.425 -1.381 -1.005 -0.3739 -0.4903 +3.456 -1.393 -0.9543 -0.3739 -0.4461 +3.487 -1.406 -0.8954 -0.3739 -0.4008 +3.517 -1.418 -0.8289 -0.3739 -0.3545 +3.546 -1.429 -0.7554 -0.3739 -0.3073 +3.573 -1.44 -0.6758 -0.3739 -0.2594 +3.6 -1.451 -0.5907 -0.3739 -0.2108 +3.625 -1.461 -0.5012 -0.3739 -0.1617 +3.648 -1.47 -0.408 -0.3739 -0.1122 +3.669 -1.479 -0.3122 -0.3739 -0.06235 +3.688 -1.487 -0.2147 -0.3739 -0.01239 +3.706 -1.494 -0.1165 -0.3739 0.0376 +3.72 -1.5 -0.01856 -0.3739 0.0875 +3.732 -1.505 0.07817 -0.3739 0.1372 +3.742 -1.508 0.1727 -0.3739 0.1865 +3.748 -1.511 0.2641 -0.3739 0.2354 +3.752 -1.512 0.3515 -0.3739 0.2837 +3.752 -1.512 0.434 -0.3739 0.3312 +3.749 -1.511 0.5108 -0.3739 0.378 +3.743 -1.509 0.5812 -0.3739 0.4238 +3.733 -1.505 0.6444 -0.3739 0.4685 +3.72 -1.5 0.7 -0.3739 0.5121 +3.703 -1.493 0.7474 -0.3739 0.5544 +3.683 -1.485 0.7861 -0.3739 0.5953 +3.659 -1.475 0.8158 -0.3739 0.6347 +3.632 -1.464 0.8363 -0.3739 0.6725 +3.601 -1.452 0.8473 -0.3739 0.7087 +3.567 -1.438 0.8489 -0.3739 0.743 +3.53 -1.423 0.8411 -0.3739 0.7756 +3.49 -1.407 0.8239 -0.3739 0.8061 +3.446 -1.389 0.7976 -0.3739 0.8347 +3.4 -1.371 0.7626 -0.3739 0.8612 +3.351 -1.351 0.7193 -0.3739 0.8855 +3.299 -1.33 0.6681 -0.3739 0.9076 +3.245 -1.308 0.6096 -0.3739 0.9275 +3.189 -1.286 0.5445 -0.3739 0.945 +3.132 -1.262 0.4735 -0.3739 0.9602 +3.072 -1.238 0.3974 -0.3739 0.9729 +3.012 -1.214 0.317 -0.3739 0.9833 +2.95 -1.189 0.2331 -0.3739 0.9911 +2.887 -1.164 0.1468 -0.3739 0.9965 +2.824 -1.139 0.05879 -0.3739 0.9994 +2.835 -0.9812 0 -0.3271 1 +2.773 -0.9596 -0.09016 -0.3271 0.9988 +2.711 -0.9382 -0.1794 -0.3271 0.995 +2.649 -0.9169 -0.2666 -0.3271 0.9888 +2.589 -0.896 -0.3511 -0.3271 0.9801 +2.529 -0.8754 -0.4318 -0.3271 0.9689 +2.471 -0.8552 -0.5078 -0.3271 0.9553 +2.415 -0.8356 -0.5784 -0.3271 0.9394 +2.36 -0.8167 -0.6429 -0.3271 0.9211 +2.307 -0.7984 -0.7004 -0.3271 0.9004 +2.256 -0.7809 -0.7503 -0.3271 0.8776 +2.208 -0.7643 -0.7922 -0.3271 0.8525 +2.163 -0.7485 -0.8255 -0.3271 0.8253 +2.12 -0.7337 -0.8499 -0.3271 0.7961 +2.08 -0.7199 -0.865 -0.3271 0.7648 +2.043 -0.7072 -0.8707 -0.3271 0.7317 +2.01 -0.6956 -0.8668 -0.3271 0.6967 +1.979 -0.6851 -0.8534 -0.3271 0.66 +1.952 -0.6757 -0.8305 -0.3271 0.6216 +1.929 -0.6675 -0.7983 -0.3271 0.5817 +1.908 -0.6605 -0.7572 -0.3271 0.5403 +1.891 -0.6546 -0.7074 -0.3271 0.4976 +1.878 -0.6499 -0.6495 -0.3271 0.4536 +1.868 -0.6463 -0.584 -0.3271 0.4085 +1.861 -0.6439 -0.5116 -0.3271 0.3624 +1.857 -0.6426 -0.4328 -0.3271 0.3153 +1.856 -0.6424 -0.3486 -0.3271 0.2675 +1.859 -0.6433 -0.2597 -0.3271 0.219 +1.864 -0.6452 -0.1669 -0.3271 0.17 +1.872 -0.648 -0.07132 -0.3271 0.1205 +1.883 -0.6518 0.02624 -0.3271 0.07074 +1.897 -0.6565 0.1248 -0.3271 0.02079 +1.913 -0.6619 0.2233 -0.3271 -0.0292 +1.931 -0.6682 0.3209 -0.3271 -0.07912 +1.951 -0.6752 0.4164 -0.3271 -0.1288 +1.973 -0.6828 0.5091 -0.3271 -0.1782 +1.997 -0.6911 0.5979 -0.3271 -0.2272 +2.022 -0.6999 0.6819 -0.3271 -0.2756 +2.049 -0.7091 0.7603 -0.3271 -0.3233 +2.077 -0.7188 0.8323 -0.3271 -0.3702 +2.106 -0.7289 0.8971 -0.3271 -0.4161 +2.136 -0.7393 0.9541 -0.3271 -0.4611 +2.167 -0.75 1.003 -0.3271 -0.5048 +2.199 -0.7609 1.042 -0.3271 -0.5474 +2.231 -0.772 1.072 -0.3271 -0.5885 +2.263 -0.7832 1.093 -0.3271 -0.6282 +2.296 -0.7945 1.104 -0.3271 -0.6663 +2.329 -0.8059 1.104 -0.3271 -0.7027 +2.362 -0.8173 1.094 -0.3271 -0.7374 +2.395 -0.8287 1.075 -0.3271 -0.7702 +2.428 -0.8401 1.045 -0.3271 -0.8011 +2.46 -0.8515 1.005 -0.3271 -0.8301 +2.493 -0.8628 0.9567 -0.3271 -0.8569 +2.526 -0.8741 0.899 -0.3271 -0.8816 +2.558 -0.8852 0.8329 -0.3271 -0.9041 +2.59 -0.8963 0.7591 -0.3271 -0.9243 +2.622 -0.9074 0.6781 -0.3271 -0.9422 +2.653 -0.9183 0.5907 -0.3271 -0.9578 +2.685 -0.9292 0.4978 -0.3271 -0.971 +2.716 -0.94 0.4003 -0.3271 -0.9817 +2.747 -0.9508 0.2989 -0.3271 -0.99 +2.778 -0.9615 0.1948 -0.3271 -0.9958 +2.809 -0.9723 0.08883 -0.3271 -0.9991 +2.84 -0.983 -0.01798 -0.3271 -1 +2.871 -0.9937 -0.1246 -0.3271 -0.9983 +2.902 -1.004 -0.2301 -0.3271 -0.9941 +2.933 -1.015 -0.3334 -0.3271 -0.9875 +2.964 -1.026 -0.4336 -0.3271 -0.9784 +2.996 -1.037 -0.5296 -0.3271 -0.9668 +3.027 -1.048 -0.6208 -0.3271 -0.9528 +3.059 -1.059 -0.7061 -0.3271 -0.9365 +3.091 -1.07 -0.7847 -0.3271 -0.9178 +3.123 -1.081 -0.8561 -0.3271 -0.8968 +3.155 -1.092 -0.9194 -0.3271 -0.8735 +3.188 -1.103 -0.9741 -0.3271 -0.8481 +3.221 -1.115 -1.02 -0.3271 -0.8206 +3.254 -1.126 -1.056 -0.3271 -0.791 +3.286 -1.137 -1.082 -0.3271 -0.7594 +3.319 -1.149 -1.099 -0.3271 -0.7259 +3.352 -1.16 -1.105 -0.3271 -0.6907 +3.385 -1.172 -1.101 -0.3271 -0.6536 +3.418 -1.183 -1.087 -0.3271 -0.615 +3.45 -1.194 -1.063 -0.3271 -0.5748 +3.482 -1.205 -1.03 -0.3271 -0.5332 +3.513 -1.216 -0.9873 -0.3271 -0.4903 +3.544 -1.227 -0.9358 -0.3271 -0.4461 +3.574 -1.237 -0.8762 -0.3271 -0.4008 +3.603 -1.247 -0.8088 -0.3271 -0.3545 +3.63 -1.256 -0.7346 -0.3271 -0.3073 +3.657 -1.265 -0.6542 -0.3271 -0.2594 +3.681 -1.274 -0.5685 -0.3271 -0.2108 +3.705 -1.282 -0.4783 -0.3271 -0.1617 +3.726 -1.29 -0.3846 -0.3271 -0.1122 +3.746 -1.296 -0.2882 -0.3271 -0.06235 +3.763 -1.302 -0.1902 -0.3271 -0.01239 +3.778 -1.308 -0.0916 -0.3271 0.0376 +3.791 -1.312 0.006726 -0.3271 0.0875 +3.801 -1.315 0.1037 -0.3271 0.1372 +3.808 -1.318 0.1985 -0.3271 0.1865 +3.812 -1.319 0.29 -0.3271 0.2354 +3.814 -1.32 0.3775 -0.3271 0.2837 +3.812 -1.319 0.46 -0.3271 0.3312 +3.807 -1.318 0.5367 -0.3271 0.378 +3.799 -1.315 0.6069 -0.3271 0.4238 +3.788 -1.311 0.6699 -0.3271 0.4685 +3.773 -1.306 0.7251 -0.3271 0.5121 +3.755 -1.3 0.772 -0.3271 0.5544 +3.734 -1.292 0.8101 -0.3271 0.5953 +3.709 -1.284 0.8392 -0.3271 0.6347 +3.681 -1.274 0.8589 -0.3271 0.6725 +3.649 -1.263 0.8692 -0.3271 0.7087 +3.615 -1.251 0.8698 -0.3271 0.743 +3.577 -1.238 0.8609 -0.3271 0.7756 +3.536 -1.224 0.8427 -0.3271 0.8061 +3.492 -1.209 0.8153 -0.3271 0.8347 +3.446 -1.193 0.779 -0.3271 0.8612 +3.397 -1.176 0.7344 -0.3271 0.8855 +3.346 -1.158 0.6818 -0.3271 0.9076 +3.292 -1.139 0.6219 -0.3271 0.9275 +3.237 -1.12 0.5553 -0.3271 0.945 +3.179 -1.1 0.4828 -0.3271 0.9602 +3.121 -1.08 0.4051 -0.3271 0.9729 +3.061 -1.059 0.3231 -0.3271 0.9833 +3 -1.038 0.2376 -0.3271 0.9911 +2.938 -1.017 0.1495 -0.3271 0.9965 +2.876 -0.9955 0.0599 -0.3271 0.9994 +2.881 -0.8382 0 -0.2794 1 +2.819 -0.8205 -0.09178 -0.2794 0.9988 +2.759 -0.8028 -0.1826 -0.2794 0.995 +2.698 -0.7853 -0.2715 -0.2794 0.9888 +2.639 -0.7679 -0.3575 -0.2794 0.9801 +2.58 -0.7509 -0.4397 -0.2794 0.9689 +2.523 -0.7342 -0.5173 -0.2794 0.9553 +2.467 -0.718 -0.5894 -0.2794 0.9394 +2.413 -0.7022 -0.6552 -0.2794 0.9211 +2.361 -0.687 -0.7141 -0.2794 0.9004 +2.311 -0.6724 -0.7654 -0.2794 0.8776 +2.263 -0.6585 -0.8085 -0.2794 0.8525 +2.217 -0.6453 -0.843 -0.2794 0.8253 +2.175 -0.6328 -0.8685 -0.2794 0.7961 +2.135 -0.6212 -0.8847 -0.2794 0.7648 +2.097 -0.6104 -0.8913 -0.2794 0.7317 +2.063 -0.6004 -0.8883 -0.2794 0.6967 +2.032 -0.5913 -0.8757 -0.2794 0.66 +2.004 -0.5832 -0.8536 -0.2794 0.6216 +1.979 -0.5759 -0.822 -0.2794 0.5817 +1.957 -0.5696 -0.7814 -0.2794 0.5403 +1.939 -0.5643 -0.7322 -0.2794 0.4976 +1.924 -0.5598 -0.6746 -0.2794 0.4536 +1.912 -0.5564 -0.6094 -0.2794 0.4085 +1.903 -0.5538 -0.5372 -0.2794 0.3624 +1.897 -0.5521 -0.4586 -0.2794 0.3153 +1.895 -0.5514 -0.3744 -0.2794 0.2675 +1.895 -0.5515 -0.2854 -0.2794 0.219 +1.898 -0.5524 -0.1926 -0.2794 0.17 +1.904 -0.5542 -0.09676 -0.2794 0.1205 +1.913 -0.5568 0.001059 -0.2794 0.07074 +1.925 -0.56 0.09992 -0.2794 0.02079 +1.938 -0.564 0.1988 -0.2794 -0.0292 +1.954 -0.5687 0.2968 -0.2794 -0.07912 +1.972 -0.574 0.3929 -0.2794 -0.1288 +1.993 -0.5799 0.4861 -0.2794 -0.1782 +2.015 -0.5863 0.5755 -0.2794 -0.2272 +2.039 -0.5932 0.6602 -0.2794 -0.2756 +2.064 -0.6006 0.7393 -0.2794 -0.3233 +2.091 -0.6084 0.812 -0.2794 -0.3702 +2.119 -0.6166 0.8775 -0.2794 -0.4161 +2.148 -0.6251 0.9353 -0.2794 -0.4611 +2.178 -0.6338 0.9847 -0.2794 -0.5048 +2.209 -0.6429 1.025 -0.2794 -0.5474 +2.241 -0.6521 1.056 -0.2794 -0.5885 +2.273 -0.6616 1.078 -0.2794 -0.6282 +2.306 -0.6712 1.089 -0.2794 -0.6663 +2.34 -0.6809 1.09 -0.2794 -0.7027 +2.373 -0.6907 1.082 -0.2794 -0.7374 +2.407 -0.7006 1.063 -0.2794 -0.7702 +2.442 -0.7105 1.034 -0.2794 -0.8011 +2.476 -0.7205 0.9952 -0.2794 -0.8301 +2.51 -0.7305 0.9474 -0.2794 -0.8569 +2.545 -0.7405 0.8906 -0.2794 -0.8816 +2.579 -0.7505 0.8253 -0.2794 -0.9041 +2.613 -0.7605 0.7523 -0.2794 -0.9243 +2.648 -0.7705 0.6722 -0.2794 -0.9422 +2.682 -0.7804 0.5857 -0.2794 -0.9578 +2.716 -0.7904 0.4937 -0.2794 -0.971 +2.75 -0.8003 0.397 -0.2794 -0.9817 +2.784 -0.8102 0.2965 -0.2794 -0.99 +2.818 -0.8201 0.1932 -0.2794 -0.9958 +2.852 -0.83 0.08813 -0.2794 -0.9991 +2.886 -0.8399 -0.01783 -0.2794 -1 +2.92 -0.8498 -0.1236 -0.2794 -0.9983 +2.954 -0.8597 -0.2282 -0.2794 -0.9941 +2.988 -0.8696 -0.3307 -0.2794 -0.9875 +3.022 -0.8795 -0.43 -0.2794 -0.9784 +3.056 -0.8895 -0.5252 -0.2794 -0.9668 +3.091 -0.8994 -0.6155 -0.2794 -0.9528 +3.125 -0.9094 -0.6999 -0.2794 -0.9365 +3.159 -0.9194 -0.7777 -0.2794 -0.9178 +3.194 -0.9294 -0.8482 -0.2794 -0.8968 +3.228 -0.9394 -0.9106 -0.2794 -0.8735 +3.262 -0.9494 -0.9645 -0.2794 -0.8481 +3.297 -0.9594 -1.009 -0.2794 -0.8206 +3.331 -0.9693 -1.045 -0.2794 -0.791 +3.365 -0.9793 -1.07 -0.2794 -0.7594 +3.399 -0.9891 -1.086 -0.2794 -0.7259 +3.433 -0.9989 -1.091 -0.2794 -0.6907 +3.466 -1.009 -1.086 -0.2794 -0.6536 +3.499 -1.018 -1.071 -0.2794 -0.615 +3.531 -1.028 -1.047 -0.2794 -0.5748 +3.562 -1.037 -1.013 -0.2794 -0.5332 +3.593 -1.046 -0.969 -0.2794 -0.4903 +3.623 -1.054 -0.9168 -0.2794 -0.4461 +3.652 -1.063 -0.8563 -0.2794 -0.4008 +3.68 -1.071 -0.7883 -0.2794 -0.3545 +3.706 -1.078 -0.7134 -0.2794 -0.3073 +3.731 -1.086 -0.6323 -0.2794 -0.2594 +3.754 -1.092 -0.5459 -0.2794 -0.2108 +3.775 -1.099 -0.4552 -0.2794 -0.1617 +3.795 -1.104 -0.3609 -0.2794 -0.1122 +3.812 -1.109 -0.2641 -0.2794 -0.06235 +3.828 -1.114 -0.1656 -0.2794 -0.01239 +3.841 -1.118 -0.06662 -0.2794 0.0376 +3.851 -1.121 0.032 -0.2794 0.0875 +3.859 -1.123 0.1293 -0.2794 0.1372 +3.864 -1.124 0.2242 -0.2794 0.1865 +3.866 -1.125 0.3158 -0.2794 0.2354 +3.866 -1.125 0.4033 -0.2794 0.2837 +3.862 -1.124 0.4857 -0.2794 0.3312 +3.855 -1.122 0.5622 -0.2794 0.378 +3.846 -1.119 0.6322 -0.2794 0.4238 +3.832 -1.115 0.6949 -0.2794 0.4685 +3.816 -1.111 0.7497 -0.2794 0.5121 +3.797 -1.105 0.7961 -0.2794 0.5544 +3.774 -1.098 0.8337 -0.2794 0.5953 +3.748 -1.091 0.8621 -0.2794 0.6347 +3.719 -1.082 0.881 -0.2794 0.6725 +3.687 -1.073 0.8904 -0.2794 0.7087 +3.651 -1.063 0.8902 -0.2794 0.743 +3.613 -1.051 0.8803 -0.2794 0.7756 +3.572 -1.04 0.861 -0.2794 0.8061 +3.529 -1.027 0.8324 -0.2794 0.8347 +3.482 -1.013 0.795 -0.2794 0.8612 +3.434 -0.9992 0.749 -0.2794 0.8855 +3.383 -0.9844 0.6951 -0.2794 0.9076 +3.33 -0.969 0.6338 -0.2794 0.9275 +3.275 -0.9531 0.5658 -0.2794 0.945 +3.219 -0.9367 0.4918 -0.2794 0.9602 +3.161 -0.9199 0.4125 -0.2794 0.9729 +3.102 -0.9028 0.3289 -0.2794 0.9833 +3.042 -0.8854 0.2419 -0.2794 0.9911 +2.982 -0.8678 0.1522 -0.2794 0.9965 +2.921 -0.85 0.06098 -0.2794 0.9994 +2.919 -0.6932 0 -0.2311 1 +2.859 -0.6791 -0.09334 -0.2311 0.9988 +2.8 -0.665 -0.1857 -0.2311 0.995 +2.741 -0.651 -0.2761 -0.2311 0.9888 +2.683 -0.6372 -0.3637 -0.2311 0.9801 +2.625 -0.6236 -0.4474 -0.2311 0.9689 +2.569 -0.6102 -0.5264 -0.2311 0.9553 +2.515 -0.5972 -0.6 -0.2311 0.9394 +2.461 -0.5846 -0.6672 -0.2311 0.9211 +2.41 -0.5723 -0.7274 -0.2311 0.9004 +2.36 -0.5606 -0.78 -0.2311 0.8776 +2.313 -0.5493 -0.8244 -0.2311 0.8525 +2.268 -0.5386 -0.86 -0.2311 0.8253 +2.225 -0.5284 -0.8866 -0.2311 0.7961 +2.185 -0.5189 -0.9038 -0.2311 0.7648 +2.147 -0.51 -0.9114 -0.2311 0.7317 +2.112 -0.5017 -0.9093 -0.2311 0.6967 +2.081 -0.4942 -0.8975 -0.2311 0.66 +2.052 -0.4873 -0.8761 -0.2311 0.6216 +2.026 -0.4811 -0.8453 -0.2311 0.5817 +2.003 -0.4757 -0.8052 -0.2311 0.5403 +1.983 -0.4709 -0.7564 -0.2311 0.4976 +1.966 -0.467 -0.6993 -0.2311 0.4536 +1.952 -0.4637 -0.6345 -0.2311 0.4085 +1.942 -0.4612 -0.5625 -0.2311 0.3624 +1.934 -0.4593 -0.484 -0.2311 0.3153 +1.929 -0.4582 -0.3999 -0.2311 0.2675 +1.928 -0.4578 -0.311 -0.2311 0.219 +1.929 -0.4581 -0.2181 -0.2311 0.17 +1.932 -0.459 -0.1221 -0.2311 0.1205 +1.939 -0.4605 -0.02412 -0.2311 0.07074 +1.948 -0.4627 0.07501 -0.2311 0.02079 +1.959 -0.4654 0.1743 -0.2311 -0.0292 +1.973 -0.4687 0.2726 -0.2311 -0.07912 +1.989 -0.4725 0.3692 -0.2311 -0.1288 +2.008 -0.4768 0.4629 -0.2311 -0.1782 +2.028 -0.4816 0.5528 -0.2311 -0.2272 +2.05 -0.4869 0.6381 -0.2311 -0.2756 +2.074 -0.4925 0.7178 -0.2311 -0.3233 +2.099 -0.4985 0.7912 -0.2311 -0.3702 +2.126 -0.5049 0.8574 -0.2311 -0.4161 +2.154 -0.5116 0.9159 -0.2311 -0.4611 +2.183 -0.5185 0.9661 -0.2311 -0.5048 +2.214 -0.5258 1.007 -0.2311 -0.5474 +2.245 -0.5333 1.039 -0.2311 -0.5885 +2.278 -0.5409 1.061 -0.2311 -0.6282 +2.311 -0.5488 1.074 -0.2311 -0.6663 +2.344 -0.5568 1.076 -0.2311 -0.7027 +2.379 -0.565 1.068 -0.2311 -0.7374 +2.414 -0.5733 1.05 -0.2311 -0.7702 +2.449 -0.5817 1.022 -0.2311 -0.8011 +2.485 -0.5901 0.9844 -0.2311 -0.8301 +2.521 -0.5987 0.9374 -0.2311 -0.8569 +2.557 -0.6073 0.8815 -0.2311 -0.8816 +2.593 -0.6159 0.8172 -0.2311 -0.9041 +2.63 -0.6246 0.7451 -0.2311 -0.9243 +2.667 -0.6333 0.6659 -0.2311 -0.9422 +2.703 -0.6421 0.5804 -0.2311 -0.9578 +2.74 -0.6508 0.4893 -0.2311 -0.971 +2.777 -0.6596 0.3935 -0.2311 -0.9817 +2.814 -0.6684 0.2939 -0.2311 -0.99 +2.851 -0.6771 0.1916 -0.2311 -0.9958 +2.888 -0.6859 0.08736 -0.2311 -0.9991 +2.925 -0.6947 -0.01768 -0.2311 -1 +2.962 -0.7035 -0.1225 -0.2311 -0.9983 +2.999 -0.7123 -0.2262 -0.2311 -0.9941 +3.036 -0.7211 -0.3278 -0.2311 -0.9875 +3.073 -0.7298 -0.4262 -0.2311 -0.9784 +3.11 -0.7386 -0.5205 -0.2311 -0.9668 +3.147 -0.7473 -0.6098 -0.2311 -0.9528 +3.183 -0.7561 -0.6933 -0.2311 -0.9365 +3.22 -0.7648 -0.7702 -0.2311 -0.9178 +3.257 -0.7735 -0.8398 -0.2311 -0.8968 +3.293 -0.7821 -0.9013 -0.2311 -0.8735 +3.329 -0.7907 -0.9542 -0.2311 -0.8481 +3.365 -0.7992 -0.9981 -0.2311 -0.8206 +3.401 -0.8076 -1.033 -0.2311 -0.791 +3.436 -0.816 -1.057 -0.2311 -0.7594 +3.47 -0.8242 -1.072 -0.2311 -0.7259 +3.505 -0.8324 -1.076 -0.2311 -0.6907 +3.538 -0.8403 -1.071 -0.2311 -0.6536 +3.571 -0.8481 -1.055 -0.2311 -0.615 +3.603 -0.8557 -1.03 -0.2311 -0.5748 +3.634 -0.8631 -0.9945 -0.2311 -0.5332 +3.664 -0.8703 -0.9502 -0.2311 -0.4903 +3.693 -0.8772 -0.8972 -0.2311 -0.4461 +3.721 -0.8838 -0.836 -0.2311 -0.4008 +3.747 -0.89 -0.7672 -0.2311 -0.3545 +3.772 -0.8959 -0.6916 -0.2311 -0.3073 +3.795 -0.9014 -0.61 -0.2311 -0.2594 +3.817 -0.9065 -0.523 -0.2311 -0.2108 +3.836 -0.9111 -0.4317 -0.2311 -0.1617 +3.854 -0.9153 -0.337 -0.2311 -0.1122 +3.869 -0.919 -0.2397 -0.2311 -0.06235 +3.882 -0.9221 -0.1409 -0.2311 -0.01239 +3.893 -0.9246 -0.04161 -0.2311 0.0376 +3.901 -0.9265 0.05726 -0.2311 0.0875 +3.907 -0.9279 0.1547 -0.2311 0.1372 +3.91 -0.9286 0.2497 -0.2311 0.1865 +3.91 -0.9286 0.3414 -0.2311 0.2354 +3.907 -0.9279 0.4288 -0.2311 0.2837 +3.901 -0.9266 0.5111 -0.2311 0.3312 +3.893 -0.9245 0.5874 -0.2311 0.378 +3.881 -0.9218 0.6571 -0.2311 0.4238 +3.866 -0.9182 0.7194 -0.2311 0.4685 +3.848 -0.914 0.7738 -0.2311 0.5121 +3.827 -0.9091 0.8197 -0.2311 0.5544 +3.804 -0.9034 0.8567 -0.2311 0.5953 +3.777 -0.897 0.8844 -0.2311 0.6347 +3.747 -0.8898 0.9026 -0.2311 0.6725 +3.714 -0.882 0.9111 -0.2311 0.7087 +3.678 -0.8736 0.9099 -0.2311 0.743 +3.64 -0.8644 0.8991 -0.2311 0.7756 +3.599 -0.8547 0.8787 -0.2311 0.8061 +3.555 -0.8443 0.849 -0.2311 0.8347 +3.509 -0.8334 0.8104 -0.2311 0.8612 +3.461 -0.822 0.7632 -0.2311 0.8855 +3.411 -0.8101 0.708 -0.2311 0.9076 +3.359 -0.7977 0.6453 -0.2311 0.9275 +3.305 -0.7849 0.5759 -0.2311 0.945 +3.25 -0.7718 0.5004 -0.2311 0.9602 +3.193 -0.7584 0.4197 -0.2311 0.9729 +3.135 -0.7447 0.3346 -0.2311 0.9833 +3.077 -0.7308 0.246 -0.2311 0.9911 +3.018 -0.7168 0.1548 -0.2311 0.9965 +2.958 -0.7026 0.06201 -0.2311 0.9994 +2.95 -0.5465 0 -0.1822 1 +2.892 -0.5358 -0.09484 -0.1822 0.9988 +2.834 -0.5251 -0.1887 -0.1822 0.995 +2.777 -0.5145 -0.2806 -0.1822 0.9888 +2.72 -0.504 -0.3696 -0.1822 0.9801 +2.664 -0.4936 -0.4548 -0.1822 0.9689 +2.61 -0.4835 -0.5352 -0.1822 0.9553 +2.556 -0.4736 -0.6102 -0.1822 0.9394 +2.504 -0.4639 -0.6787 -0.1822 0.9211 +2.453 -0.4545 -0.7403 -0.1822 0.9004 +2.405 -0.4455 -0.7941 -0.1822 0.8776 +2.358 -0.4368 -0.8397 -0.1822 0.8525 +2.313 -0.4285 -0.8765 -0.1822 0.8253 +2.271 -0.4207 -0.9042 -0.1822 0.7961 +2.23 -0.4132 -0.9224 -0.1822 0.7648 +2.193 -0.4062 -0.931 -0.1822 0.7317 +2.158 -0.3997 -0.9298 -0.1822 0.6967 +2.125 -0.3937 -0.9188 -0.1822 0.66 +2.095 -0.3882 -0.8981 -0.1822 0.6216 +2.068 -0.3832 -0.8679 -0.1822 0.5817 +2.044 -0.3787 -0.8285 -0.1822 0.5403 +2.023 -0.3748 -0.7803 -0.1822 0.4976 +2.004 -0.3714 -0.7236 -0.1822 0.4536 +1.989 -0.3685 -0.6591 -0.1822 0.4085 +1.976 -0.3662 -0.5874 -0.1822 0.3624 +1.967 -0.3644 -0.5092 -0.1822 0.3153 +1.96 -0.3631 -0.4252 -0.1822 0.2675 +1.956 -0.3624 -0.3363 -0.1822 0.219 +1.955 -0.3621 -0.2435 -0.1822 0.17 +1.956 -0.3624 -0.1474 -0.1822 0.1205 +1.96 -0.3632 -0.04929 -0.1822 0.07074 +1.967 -0.3644 0.05004 -0.1822 0.02079 +1.976 -0.3661 0.1496 -0.1822 -0.0292 +1.988 -0.3683 0.2483 -0.1822 -0.07912 +2.002 -0.3709 0.3452 -0.1822 -0.1288 +2.018 -0.3738 0.4393 -0.1822 -0.1782 +2.036 -0.3772 0.5297 -0.1822 -0.2272 +2.056 -0.3809 0.6155 -0.1822 -0.2756 +2.078 -0.385 0.6958 -0.1822 -0.3233 +2.102 -0.3894 0.7699 -0.1822 -0.3702 +2.128 -0.3942 0.8368 -0.1822 -0.4161 +2.155 -0.3992 0.896 -0.1822 -0.4611 +2.183 -0.4044 0.9469 -0.1822 -0.5048 +2.213 -0.4099 0.9889 -0.1822 -0.5474 +2.244 -0.4157 1.022 -0.1822 -0.5885 +2.276 -0.4216 1.045 -0.1822 -0.6282 +2.309 -0.4278 1.058 -0.1822 -0.6663 +2.343 -0.4341 1.061 -0.1822 -0.7027 +2.378 -0.4406 1.054 -0.1822 -0.7374 +2.414 -0.4472 1.037 -0.1822 -0.7702 +2.45 -0.4539 1.01 -0.1822 -0.8011 +2.487 -0.4607 0.9729 -0.1822 -0.8301 +2.525 -0.4677 0.9269 -0.1822 -0.8569 +2.562 -0.4747 0.872 -0.1822 -0.8816 +2.601 -0.4818 0.8086 -0.1822 -0.9041 +2.64 -0.489 0.7375 -0.1822 -0.9243 +2.679 -0.4962 0.6593 -0.1822 -0.9422 +2.718 -0.5035 0.5747 -0.1822 -0.9578 +2.757 -0.5108 0.4845 -0.1822 -0.971 +2.797 -0.5182 0.3897 -0.1822 -0.9817 +2.837 -0.5255 0.2912 -0.1822 -0.99 +2.877 -0.5329 0.1898 -0.1822 -0.9958 +2.917 -0.5403 0.08654 -0.1822 -0.9991 +2.957 -0.5477 -0.01751 -0.1822 -1 +2.996 -0.5551 -0.1214 -0.1822 -0.9983 +3.036 -0.5625 -0.2241 -0.1822 -0.9941 +3.076 -0.5699 -0.3247 -0.1822 -0.9875 +3.116 -0.5773 -0.4221 -0.1822 -0.9784 +3.156 -0.5846 -0.5154 -0.1822 -0.9668 +3.195 -0.5919 -0.6038 -0.1822 -0.9528 +3.234 -0.5992 -0.6863 -0.1822 -0.9365 +3.273 -0.6064 -0.7622 -0.1822 -0.9178 +3.312 -0.6135 -0.8308 -0.1822 -0.8968 +3.35 -0.6206 -0.8914 -0.1822 -0.8735 +3.388 -0.6276 -0.9434 -0.1822 -0.8481 +3.425 -0.6345 -0.9863 -0.1822 -0.8206 +3.462 -0.6414 -1.02 -0.1822 -0.791 +3.498 -0.648 -1.044 -0.1822 -0.7594 +3.533 -0.6546 -1.057 -0.1822 -0.7259 +3.568 -0.661 -1.061 -0.1822 -0.6907 +3.602 -0.6673 -1.054 -0.1822 -0.6536 +3.635 -0.6734 -1.038 -0.1822 -0.615 +3.666 -0.6792 -1.012 -0.1822 -0.5748 +3.697 -0.6849 -0.9758 -0.1822 -0.5332 +3.726 -0.6904 -0.9307 -0.1822 -0.4903 +3.754 -0.6955 -0.877 -0.1822 -0.4461 +3.781 -0.7004 -0.8151 -0.1822 -0.4008 +3.806 -0.7051 -0.7457 -0.1822 -0.3545 +3.829 -0.7094 -0.6695 -0.1822 -0.3073 +3.85 -0.7133 -0.5873 -0.1822 -0.2594 +3.87 -0.7169 -0.4998 -0.1822 -0.2108 +3.887 -0.7202 -0.408 -0.1822 -0.1617 +3.903 -0.723 -0.3128 -0.1822 -0.1122 +3.916 -0.7255 -0.2152 -0.1822 -0.06235 +3.927 -0.7275 -0.1161 -0.1822 -0.01239 +3.935 -0.729 -0.01656 -0.1822 0.0376 +3.941 -0.7301 0.08248 -0.1822 0.0875 +3.944 -0.7307 0.18 -0.1822 0.1372 +3.945 -0.7308 0.2751 -0.1822 0.1865 +3.943 -0.7304 0.3667 -0.1822 0.2354 +3.938 -0.7295 0.454 -0.1822 0.2837 +3.93 -0.7281 0.5361 -0.1822 0.3312 +3.919 -0.7261 0.6123 -0.1822 0.378 +3.906 -0.7236 0.6816 -0.1822 0.4238 +3.889 -0.7205 0.7436 -0.1822 0.4685 +3.87 -0.717 0.7974 -0.1822 0.5121 +3.848 -0.7128 0.8428 -0.1822 0.5544 +3.823 -0.7082 0.8791 -0.1822 0.5953 +3.795 -0.703 0.9061 -0.1822 0.6347 +3.764 -0.6973 0.9236 -0.1822 0.6725 +3.731 -0.6911 0.9313 -0.1822 0.7087 +3.695 -0.6845 0.9292 -0.1822 0.743 +3.656 -0.6773 0.9173 -0.1822 0.7756 +3.615 -0.6697 0.8959 -0.1822 0.8061 +3.572 -0.6617 0.8651 -0.1822 0.8347 +3.526 -0.6533 0.8253 -0.1822 0.8612 +3.479 -0.6445 0.7769 -0.1822 0.8855 +3.429 -0.6353 0.7204 -0.1822 0.9076 +3.378 -0.6259 0.6564 -0.1822 0.9275 +3.326 -0.6161 0.5856 -0.1822 0.945 +3.272 -0.6061 0.5088 -0.1822 0.9602 +3.217 -0.5959 0.4266 -0.1822 0.9729 +3.16 -0.5855 0.3401 -0.1822 0.9833 +3.104 -0.575 0.25 -0.1822 0.9911 +3.046 -0.5643 0.1573 -0.1822 0.9965 +2.988 -0.5536 0.06301 -0.1822 0.9994 +2.973 -0.3984 0 -0.1328 1 +2.917 -0.3909 -0.09629 -0.1328 0.9988 +2.862 -0.3834 -0.1916 -0.1328 0.995 +2.806 -0.376 -0.2849 -0.1328 0.9888 +2.751 -0.3686 -0.3753 -0.1328 0.9801 +2.697 -0.3614 -0.4619 -0.1328 0.9689 +2.644 -0.3542 -0.5437 -0.1328 0.9553 +2.592 -0.3473 -0.62 -0.1328 0.9394 +2.541 -0.3404 -0.6899 -0.1328 0.9211 +2.492 -0.3338 -0.7526 -0.1328 0.9004 +2.444 -0.3274 -0.8077 -0.1328 0.8776 +2.398 -0.3212 -0.8545 -0.1328 0.8525 +2.354 -0.3153 -0.8924 -0.1328 0.8253 +2.311 -0.3097 -0.9212 -0.1328 0.7961 +2.271 -0.3043 -0.9404 -0.1328 0.7648 +2.234 -0.2992 -0.9499 -0.1328 0.7317 +2.198 -0.2945 -0.9496 -0.1328 0.6967 +2.165 -0.2901 -0.9395 -0.1328 0.66 +2.135 -0.286 -0.9196 -0.1328 0.6216 +2.107 -0.2822 -0.8901 -0.1328 0.5817 +2.081 -0.2788 -0.8513 -0.1328 0.5403 +2.059 -0.2758 -0.8036 -0.1328 0.4976 +2.039 -0.2731 -0.7474 -0.1328 0.4536 +2.022 -0.2708 -0.6833 -0.1328 0.4085 +2.007 -0.2689 -0.6119 -0.1328 0.3624 +1.995 -0.2673 -0.534 -0.1328 0.3153 +1.987 -0.2662 -0.4502 -0.1328 0.2675 +1.98 -0.2653 -0.3615 -0.1328 0.219 +1.977 -0.2648 -0.2687 -0.1328 0.17 +1.976 -0.2647 -0.1727 -0.1328 0.1205 +1.978 -0.265 -0.07443 -0.1328 0.07074 +1.982 -0.2655 0.02504 -0.1328 0.02079 +1.989 -0.2665 0.1248 -0.1328 -0.0292 +1.998 -0.2677 0.2237 -0.1328 -0.07912 +2.01 -0.2692 0.321 -0.1328 -0.1288 +2.023 -0.2711 0.4155 -0.1328 -0.1782 +2.04 -0.2733 0.5063 -0.1328 -0.2272 +2.058 -0.2757 0.5926 -0.1328 -0.2756 +2.078 -0.2784 0.6735 -0.1328 -0.3233 +2.1 -0.2814 0.7481 -0.1328 -0.3702 +2.124 -0.2846 0.8156 -0.1328 -0.4161 +2.15 -0.288 0.8755 -0.1328 -0.4611 +2.177 -0.2917 0.9271 -0.1328 -0.5048 +2.206 -0.2956 0.9698 -0.1328 -0.5474 +2.237 -0.2997 1.003 -0.1328 -0.5885 +2.268 -0.3039 1.027 -0.1328 -0.6282 +2.302 -0.3084 1.041 -0.1328 -0.6663 +2.336 -0.3129 1.045 -0.1328 -0.7027 +2.371 -0.3177 1.039 -0.1328 -0.7374 +2.408 -0.3226 1.023 -0.1328 -0.7702 +2.445 -0.3276 0.9966 -0.1328 -0.8011 +2.483 -0.3327 0.9609 -0.1328 -0.8301 +2.522 -0.3379 0.9158 -0.1328 -0.8569 +2.562 -0.3432 0.8618 -0.1328 -0.8816 +2.602 -0.3486 0.7995 -0.1328 -0.9041 +2.643 -0.354 0.7294 -0.1328 -0.9243 +2.684 -0.3596 0.6522 -0.1328 -0.9422 +2.725 -0.3652 0.5686 -0.1328 -0.9578 +2.767 -0.3708 0.4795 -0.1328 -0.971 +2.81 -0.3764 0.3857 -0.1328 -0.9817 +2.852 -0.3821 0.2882 -0.1328 -0.99 +2.895 -0.3879 0.1878 -0.1328 -0.9958 +2.938 -0.3936 0.08567 -0.1328 -0.9991 +2.981 -0.3993 -0.01734 -0.1328 -1 +3.023 -0.4051 -0.1202 -0.1328 -0.9983 +3.066 -0.4108 -0.2218 -0.1328 -0.9941 +3.109 -0.4165 -0.3213 -0.1328 -0.9875 +3.151 -0.4222 -0.4177 -0.1328 -0.9784 +3.194 -0.4279 -0.51 -0.1328 -0.9668 +3.235 -0.4335 -0.5974 -0.1328 -0.9528 +3.277 -0.439 -0.6789 -0.1328 -0.9365 +3.318 -0.4446 -0.7538 -0.1328 -0.9178 +3.359 -0.45 -0.8214 -0.1328 -0.8968 +3.399 -0.4554 -0.8809 -0.1328 -0.8735 +3.438 -0.4606 -0.932 -0.1328 -0.8481 +3.477 -0.4658 -0.974 -0.1328 -0.8206 +3.515 -0.4709 -1.006 -0.1328 -0.791 +3.552 -0.4759 -1.029 -0.1328 -0.7594 +3.588 -0.4807 -1.042 -0.1328 -0.7259 +3.623 -0.4854 -1.045 -0.1328 -0.6907 +3.657 -0.4899 -1.038 -0.1328 -0.6536 +3.689 -0.4943 -1.02 -0.1328 -0.615 +3.721 -0.4985 -0.9931 -0.1328 -0.5748 +3.751 -0.5025 -0.9565 -0.1328 -0.5332 +3.779 -0.5063 -0.9107 -0.1328 -0.4903 +3.806 -0.5099 -0.8563 -0.1328 -0.4461 +3.831 -0.5133 -0.7937 -0.1328 -0.4008 +3.854 -0.5164 -0.7237 -0.1328 -0.3545 +3.876 -0.5193 -0.6469 -0.1328 -0.3073 +3.895 -0.5219 -0.5642 -0.1328 -0.2594 +3.913 -0.5243 -0.4763 -0.1328 -0.2108 +3.928 -0.5263 -0.3841 -0.1328 -0.1617 +3.941 -0.5281 -0.2885 -0.1328 -0.1122 +3.952 -0.5295 -0.1906 -0.1328 -0.06235 +3.961 -0.5306 -0.09126 -0.1328 -0.01239 +3.967 -0.5314 0.008488 -0.1328 0.0376 +3.97 -0.5319 0.1077 -0.1328 0.0875 +3.971 -0.532 0.2052 -0.1328 0.1372 +3.969 -0.5318 0.3003 -0.1328 0.1865 +3.965 -0.5312 0.3918 -0.1328 0.2354 +3.958 -0.5302 0.479 -0.1328 0.2837 +3.948 -0.5289 0.5609 -0.1328 0.3312 +3.935 -0.5272 0.6367 -0.1328 0.378 +3.92 -0.5252 0.7057 -0.1328 0.4238 +3.902 -0.5227 0.7672 -0.1328 0.4685 +3.881 -0.52 0.8206 -0.1328 0.5121 +3.857 -0.5168 0.8653 -0.1328 0.5544 +3.831 -0.5133 0.901 -0.1328 0.5953 +3.802 -0.5094 0.9273 -0.1328 0.6347 +3.771 -0.5052 0.944 -0.1328 0.6725 +3.737 -0.5007 0.9508 -0.1328 0.7087 +3.701 -0.4958 0.9478 -0.1328 0.743 +3.662 -0.4907 0.935 -0.1328 0.7756 +3.622 -0.4852 0.9125 -0.1328 0.8061 +3.579 -0.4795 0.8806 -0.1328 0.8347 +3.534 -0.4735 0.8397 -0.1328 0.8612 +3.487 -0.4672 0.7901 -0.1328 0.8855 +3.439 -0.4607 0.7324 -0.1328 0.9076 +3.389 -0.454 0.6671 -0.1328 0.9275 +3.338 -0.4472 0.595 -0.1328 0.945 +3.285 -0.4401 0.5168 -0.1328 0.9602 +3.232 -0.433 0.4333 -0.1328 0.9729 +3.177 -0.4257 0.3453 -0.1328 0.9833 +3.122 -0.4183 0.2538 -0.1328 0.9911 +3.067 -0.4108 0.1597 -0.1328 0.9965 +3.011 -0.4034 0.06397 -0.1328 0.9994 +2.99 -0.2493 0 -0.08309 1 +2.936 -0.2448 -0.09767 -0.08309 0.9988 +2.882 -0.2403 -0.1943 -0.08309 0.995 +2.829 -0.2358 -0.2891 -0.08309 0.9888 +2.776 -0.2314 -0.3808 -0.08309 0.9801 +2.723 -0.2271 -0.4687 -0.08309 0.9689 +2.672 -0.2228 -0.5519 -0.08309 0.9553 +2.622 -0.2186 -0.6294 -0.08309 0.9394 +2.572 -0.2145 -0.7005 -0.08309 0.9211 +2.524 -0.2105 -0.7646 -0.08309 0.9004 +2.477 -0.2066 -0.8208 -0.08309 0.8776 +2.432 -0.2028 -0.8687 -0.08309 0.8525 +2.389 -0.1992 -0.9078 -0.08309 0.8253 +2.347 -0.1957 -0.9376 -0.08309 0.7961 +2.307 -0.1924 -0.9578 -0.08309 0.7648 +2.27 -0.1892 -0.9683 -0.08309 0.7317 +2.234 -0.1863 -0.9689 -0.08309 0.6967 +2.2 -0.1835 -0.9596 -0.08309 0.66 +2.169 -0.1809 -0.9404 -0.08309 0.6216 +2.141 -0.1785 -0.9117 -0.08309 0.5817 +2.114 -0.1763 -0.8735 -0.08309 0.5403 +2.09 -0.1743 -0.8264 -0.08309 0.4976 +2.069 -0.1725 -0.7707 -0.08309 0.4536 +2.05 -0.1709 -0.7071 -0.08309 0.4085 +2.034 -0.1696 -0.6361 -0.08309 0.3624 +2.02 -0.1684 -0.5585 -0.08309 0.3153 +2.009 -0.1675 -0.475 -0.08309 0.2675 +2 -0.1668 -0.3864 -0.08309 0.219 +1.995 -0.1663 -0.2937 -0.08309 0.17 +1.991 -0.166 -0.1978 -0.08309 0.1205 +1.991 -0.166 -0.09952 -0.08309 0.07074 +1.992 -0.1661 2.697e-05 -0.08309 0.02079 +1.997 -0.1665 0.09989 -0.08309 -0.0292 +2.004 -0.1671 0.1991 -0.08309 -0.07912 +2.013 -0.1678 0.2966 -0.08309 -0.1288 +2.024 -0.1688 0.3914 -0.08309 -0.1782 +2.038 -0.17 0.4826 -0.08309 -0.2272 +2.054 -0.1713 0.5693 -0.08309 -0.2756 +2.073 -0.1728 0.6507 -0.08309 -0.3233 +2.093 -0.1745 0.7258 -0.08309 -0.3702 +2.116 -0.1764 0.794 -0.08309 -0.4161 +2.14 -0.1784 0.8545 -0.08309 -0.4611 +2.166 -0.1806 0.9067 -0.08309 -0.5048 +2.194 -0.183 0.9502 -0.08309 -0.5474 +2.224 -0.1854 0.9844 -0.08309 -0.5885 +2.255 -0.1881 1.009 -0.08309 -0.6282 +2.288 -0.1908 1.024 -0.08309 -0.6663 +2.323 -0.1937 1.029 -0.08309 -0.7027 +2.358 -0.1966 1.023 -0.08309 -0.7374 +2.395 -0.1997 1.008 -0.08309 -0.7702 +2.433 -0.2029 0.983 -0.08309 -0.8011 +2.473 -0.2062 0.9482 -0.08309 -0.8301 +2.513 -0.2095 0.9041 -0.08309 -0.8569 +2.554 -0.213 0.8512 -0.08309 -0.8816 +2.596 -0.2165 0.7899 -0.08309 -0.9041 +2.639 -0.22 0.7208 -0.08309 -0.9243 +2.682 -0.2236 0.6446 -0.08309 -0.9422 +2.726 -0.2273 0.5622 -0.08309 -0.9578 +2.771 -0.231 0.4741 -0.08309 -0.971 +2.816 -0.2348 0.3815 -0.08309 -0.9817 +2.861 -0.2385 0.285 -0.08309 -0.99 +2.906 -0.2423 0.1858 -0.08309 -0.9958 +2.952 -0.2461 0.08475 -0.08309 -0.9991 +2.997 -0.2499 -0.01715 -0.08309 -1 +3.043 -0.2537 -0.1189 -0.08309 -0.9983 +3.088 -0.2575 -0.2194 -0.08309 -0.9941 +3.134 -0.2613 -0.3178 -0.08309 -0.9875 +3.179 -0.265 -0.4131 -0.08309 -0.9784 +3.224 -0.2688 -0.5043 -0.08309 -0.9668 +3.268 -0.2725 -0.5906 -0.08309 -0.9528 +3.312 -0.2761 -0.671 -0.08309 -0.9365 +3.355 -0.2797 -0.7449 -0.08309 -0.9178 +3.397 -0.2833 -0.8114 -0.08309 -0.8968 +3.439 -0.2867 -0.8699 -0.08309 -0.8735 +3.48 -0.2901 -0.92 -0.08309 -0.8481 +3.52 -0.2935 -0.961 -0.08309 -0.8206 +3.559 -0.2967 -0.9925 -0.08309 -0.791 +3.596 -0.2999 -1.014 -0.08309 -0.7594 +3.633 -0.3029 -1.026 -0.08309 -0.7259 +3.668 -0.3059 -1.028 -0.08309 -0.6907 +3.702 -0.3087 -1.02 -0.08309 -0.6536 +3.735 -0.3114 -1.002 -0.08309 -0.615 +3.765 -0.3139 -0.9739 -0.08309 -0.5748 +3.795 -0.3164 -0.9366 -0.08309 -0.5332 +3.822 -0.3187 -0.8901 -0.08309 -0.4903 +3.848 -0.3208 -0.835 -0.08309 -0.4461 +3.871 -0.3228 -0.7719 -0.08309 -0.4008 +3.893 -0.3246 -0.7013 -0.08309 -0.3545 +3.913 -0.3262 -0.624 -0.08309 -0.3073 +3.93 -0.3277 -0.5407 -0.08309 -0.2594 +3.946 -0.329 -0.4524 -0.08309 -0.2108 +3.959 -0.3301 -0.3599 -0.08309 -0.1617 +3.97 -0.331 -0.264 -0.08309 -0.1122 +3.978 -0.3317 -0.1658 -0.08309 -0.06235 +3.984 -0.3322 -0.06633 -0.08309 -0.01239 +3.988 -0.3325 0.03353 -0.08309 0.0376 +3.989 -0.3326 0.1328 -0.08309 0.0875 +3.987 -0.3324 0.2303 -0.08309 0.1372 +3.983 -0.3321 0.3253 -0.08309 0.1865 +3.976 -0.3315 0.4167 -0.08309 0.2354 +3.967 -0.3308 0.5037 -0.08309 0.2837 +3.955 -0.3298 0.5853 -0.08309 0.3312 +3.94 -0.3285 0.6608 -0.08309 0.378 +3.923 -0.3271 0.7294 -0.08309 0.4238 +3.904 -0.3255 0.7904 -0.08309 0.4685 +3.881 -0.3236 0.8432 -0.08309 0.5121 +3.857 -0.3215 0.8874 -0.08309 0.5544 +3.829 -0.3193 0.9224 -0.08309 0.5953 +3.8 -0.3168 0.948 -0.08309 0.6347 +3.768 -0.3141 0.9638 -0.08309 0.6725 +3.734 -0.3113 0.9698 -0.08309 0.7087 +3.697 -0.3083 0.9659 -0.08309 0.743 +3.659 -0.3051 0.9521 -0.08309 0.7756 +3.618 -0.3017 0.9286 -0.08309 0.8061 +3.576 -0.2982 0.8956 -0.08309 0.8347 +3.532 -0.2945 0.8536 -0.08309 0.8612 +3.486 -0.2907 0.8028 -0.08309 0.8855 +3.439 -0.2867 0.7439 -0.08309 0.9076 +3.391 -0.2827 0.6774 -0.08309 0.9275 +3.341 -0.2786 0.604 -0.08309 0.945 +3.29 -0.2743 0.5245 -0.08309 0.9602 +3.238 -0.27 0.4397 -0.08309 0.9729 +3.186 -0.2656 0.3503 -0.08309 0.9833 +3.133 -0.2612 0.2575 -0.08309 0.9911 +3.079 -0.2567 0.162 -0.08309 0.9965 +3.025 -0.2523 0.06488 -0.08309 0.9994 +2.998 -0.09954 0 -0.03318 1 +2.947 -0.09782 -0.09899 -0.03318 0.9988 +2.895 -0.09612 -0.197 -0.03318 0.995 +2.844 -0.09442 -0.293 -0.03318 0.9888 +2.793 -0.09273 -0.3861 -0.03318 0.9801 +2.743 -0.09107 -0.4753 -0.03318 0.9689 +2.694 -0.08942 -0.5597 -0.03318 0.9553 +2.645 -0.08781 -0.6384 -0.03318 0.9394 +2.597 -0.08622 -0.7108 -0.03318 0.9211 +2.551 -0.08468 -0.776 -0.03318 0.9004 +2.505 -0.08317 -0.8334 -0.03318 0.8776 +2.461 -0.08171 -0.8824 -0.03318 0.8525 +2.419 -0.08029 -0.9225 -0.03318 0.8253 +2.378 -0.07893 -0.9534 -0.03318 0.7961 +2.338 -0.07762 -0.9746 -0.03318 0.7648 +2.301 -0.07638 -0.986 -0.03318 0.7317 +2.265 -0.07519 -0.9875 -0.03318 0.6967 +2.231 -0.07407 -0.9791 -0.03318 0.66 +2.199 -0.07301 -0.9607 -0.03318 0.6216 +2.17 -0.07203 -0.9327 -0.03318 0.5817 +2.142 -0.07112 -0.8952 -0.03318 0.5403 +2.117 -0.07029 -0.8487 -0.03318 0.4976 +2.094 -0.06953 -0.7936 -0.03318 0.4536 +2.074 -0.06885 -0.7305 -0.03318 0.4085 +2.056 -0.06825 -0.6599 -0.03318 0.3624 +2.04 -0.06773 -0.5826 -0.03318 0.3153 +2.027 -0.06729 -0.4994 -0.03318 0.2675 +2.016 -0.06693 -0.4111 -0.03318 0.219 +2.008 -0.06666 -0.3186 -0.03318 0.17 +2.002 -0.06647 -0.2227 -0.03318 0.1205 +1.999 -0.06637 -0.1246 -0.03318 0.07074 +1.999 -0.06635 -0.02499 -0.03318 0.02079 +2 -0.06641 0.07495 -0.03318 -0.0292 +2.005 -0.06655 0.1743 -0.03318 -0.07912 +2.012 -0.06678 0.272 -0.03318 -0.1288 +2.021 -0.06709 0.3671 -0.03318 -0.1782 +2.033 -0.06747 0.4586 -0.03318 -0.2272 +2.047 -0.06794 0.5457 -0.03318 -0.2756 +2.063 -0.06848 0.6275 -0.03318 -0.3233 +2.081 -0.0691 0.7031 -0.03318 -0.3702 +2.102 -0.06979 0.7718 -0.03318 -0.4161 +2.125 -0.07055 0.8329 -0.03318 -0.4611 +2.15 -0.07138 0.8858 -0.03318 -0.5048 +2.177 -0.07228 0.9299 -0.03318 -0.5474 +2.206 -0.07324 0.9649 -0.03318 -0.5885 +2.237 -0.07426 0.9903 -0.03318 -0.6282 +2.27 -0.07535 1.006 -0.03318 -0.6663 +2.304 -0.07649 1.012 -0.03318 -0.7027 +2.34 -0.07768 1.007 -0.03318 -0.7374 +2.377 -0.07892 0.9929 -0.03318 -0.7702 +2.416 -0.08021 0.9687 -0.03318 -0.8011 +2.456 -0.08155 0.9349 -0.03318 -0.8301 +2.498 -0.08292 0.8919 -0.03318 -0.8569 +2.54 -0.08434 0.84 -0.03318 -0.8816 +2.584 -0.08578 0.7797 -0.03318 -0.9041 +2.629 -0.08726 0.7118 -0.03318 -0.9243 +2.674 -0.08877 0.6367 -0.03318 -0.9422 +2.72 -0.0903 0.5554 -0.03318 -0.9578 +2.767 -0.09186 0.4685 -0.03318 -0.971 +2.814 -0.09343 0.377 -0.03318 -0.9817 +2.862 -0.09501 0.2817 -0.03318 -0.99 +2.91 -0.0966 0.1837 -0.03318 -0.9958 +2.958 -0.0982 0.08377 -0.03318 -0.9991 +3.006 -0.09981 -0.01695 -0.03318 -1 +3.055 -0.1014 -0.1175 -0.03318 -0.9983 +3.103 -0.103 -0.2169 -0.03318 -0.9941 +3.151 -0.1046 -0.3141 -0.03318 -0.9875 +3.198 -0.1062 -0.4082 -0.03318 -0.9784 +3.246 -0.1077 -0.4983 -0.03318 -0.9668 +3.292 -0.1093 -0.5834 -0.03318 -0.9528 +3.338 -0.1108 -0.6627 -0.03318 -0.9365 +3.383 -0.1123 -0.7355 -0.03318 -0.9178 +3.427 -0.1138 -0.8009 -0.03318 -0.8968 +3.471 -0.1152 -0.8584 -0.03318 -0.8735 +3.513 -0.1166 -0.9074 -0.03318 -0.8481 +3.554 -0.118 -0.9474 -0.03318 -0.8206 +3.594 -0.1193 -0.9779 -0.03318 -0.791 +3.632 -0.1206 -0.9988 -0.03318 -0.7594 +3.669 -0.1218 -1.01 -0.03318 -0.7259 +3.704 -0.123 -1.011 -0.03318 -0.6907 +3.738 -0.1241 -1.002 -0.03318 -0.6536 +3.77 -0.1252 -0.9828 -0.03318 -0.615 +3.8 -0.1262 -0.9542 -0.03318 -0.5748 +3.829 -0.1271 -0.9161 -0.03318 -0.5332 +3.855 -0.128 -0.8689 -0.03318 -0.4903 +3.879 -0.1288 -0.8132 -0.03318 -0.4461 +3.902 -0.1295 -0.7495 -0.03318 -0.4008 +3.922 -0.1302 -0.6784 -0.03318 -0.3545 +3.94 -0.1308 -0.6006 -0.03318 -0.3073 +3.955 -0.1313 -0.517 -0.03318 -0.2594 +3.968 -0.1317 -0.4283 -0.03318 -0.2108 +3.979 -0.1321 -0.3354 -0.03318 -0.1617 +3.988 -0.1324 -0.2393 -0.03318 -0.1122 +3.994 -0.1326 -0.141 -0.03318 -0.06235 +3.997 -0.1327 -0.04136 -0.03318 -0.01239 +3.998 -0.1327 0.05856 -0.03318 0.0376 +3.997 -0.1327 0.1578 -0.03318 0.0875 +3.993 -0.1325 0.2553 -0.03318 0.1372 +3.986 -0.1323 0.3501 -0.03318 0.1865 +3.977 -0.132 0.4413 -0.03318 0.2354 +3.966 -0.1316 0.528 -0.03318 0.2837 +3.952 -0.1312 0.6093 -0.03318 0.3312 +3.935 -0.1306 0.6844 -0.03318 0.378 +3.916 -0.13 0.7526 -0.03318 0.4238 +3.895 -0.1293 0.8131 -0.03318 0.4685 +3.871 -0.1285 0.8653 -0.03318 0.5121 +3.845 -0.1277 0.9088 -0.03318 0.5544 +3.817 -0.1267 0.9432 -0.03318 0.5953 +3.787 -0.1257 0.968 -0.03318 0.6347 +3.754 -0.1246 0.983 -0.03318 0.6725 +3.72 -0.1235 0.9881 -0.03318 0.7087 +3.684 -0.1223 0.9833 -0.03318 0.743 +3.645 -0.121 0.9686 -0.03318 0.7756 +3.605 -0.1197 0.9441 -0.03318 0.8061 +3.564 -0.1183 0.9101 -0.03318 0.8347 +3.521 -0.1169 0.8669 -0.03318 0.8612 +3.476 -0.1154 0.815 -0.03318 0.8855 +3.43 -0.1139 0.7549 -0.03318 0.9076 +3.383 -0.1123 0.6872 -0.03318 0.9275 +3.335 -0.1107 0.6126 -0.03318 0.945 +3.286 -0.1091 0.5319 -0.03318 0.9602 +3.237 -0.1075 0.4458 -0.03318 0.9729 +3.186 -0.1058 0.3552 -0.03318 0.9833 +3.135 -0.1041 0.261 -0.03318 0.9911 +3.084 -0.1024 0.1642 -0.03318 0.9965 +3.033 -0.1007 0.06576 -0.03318 0.9994 diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 95c0ca40..c03d37d8 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -33,7 +33,10 @@ namespace graph_induced_complex { * * @{ * - * Visualizations of the simplicial complexes require neato, python and firefox!! + * Visualizations of the simplicial complexes can be done with either + * neato , + * geomview , or + * python + firefox . * * \section covers Covers * @@ -65,19 +68,27 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./Nerve ../../../data/points/human.off 2 10 0.3 --v + * \code $> ./Nerve ../../../../data/points/human.off 2 10 0.3 --v * \endcode * * the program output is: * * \include Nerve_GIC/Nerve.txt * - * The first three lines are requirements for visualization with Kepler-Mapper. + * The program also writes a file SC.txt. + * The first three lines in this file are requirements for visualization with Kepler-Mapper. * The fourth line contains the number of vertices nv and edges ne of the Nerve. * The next nv lines represent the vertices. Each line contains the vertex ID, * the number of data points it contains, and their average color function value. * Finally, the next ne lines represent the edges, characterized by the ID of their vertices. + * Using e.g. * + * \code $> python visu.py && firefox SC.html + * \endcode + * + * one can obtain the following visualization: + * + * \image html "nervevisu.png" "Visualization with Kepler Mapper" * * \section gic Graph Induced Complexes (GIC) * @@ -90,7 +101,8 @@ namespace graph_induced_complex { * See this article * for more details. * - * \image html "gic_complex.png" "GIC of a point cloud." + * \image html "gic_complex.png" "GIC of a point cloud. Image taken from + * this article " * * \subsection gicexample Example with cover from function * @@ -105,12 +117,12 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./GIC ../../../data/points/human.off 0.075 2 0.075 0 --v + * \code $> ./GIC ../../../../data/points/human.off 0.075 2 0.075 0 --v * \endcode * - * the program output is: + * the program outputs SC.txt, which can be visualized with python and firefox as before: * - * \include Nerve_GIC/GIC.txt + * \image html "gicvisu.png" "Visualization with Kepler Mapper" * * \subsection gicexamplevor Example with cover from Voronoï * @@ -124,12 +136,17 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./GICvoronoi ../../../data/points/human.off 100 --v + * \code $> ./GICvoronoi ../../../../data/points/human.off 100 --v * \endcode * - * the program output is: + * the program outputs SC.off. Using e.g. + * + * \code $> geomview SC.off + * \endcode * - * \include Nerve_GIC/GICvoronoi.txt + * one can obtain the following visualization: + * + * \image html "gicvoronoivisu.png" "Visualization with Geomview" * * \subsection mapperdeltadefinition Mapper Delta * @@ -143,9 +160,9 @@ namespace graph_induced_complex { * * Mapper Delta comes with optimal selection for the Rips threshold, * the resolution and the gain of the function cover. In this example, - * we compute the Mapper Delta of a point cloud sampled on a 3D human shape (human.off), + * we compute the Mapper Delta of a Klein bottle embedded in R^5, * where the graph G comes from a Rips complex with optimal threshold, - * and the cover C comes from the preimages of intervals covering the height function (coordinate 2), + * and the cover C comes from the preimages of intervals covering the first coordinate, * with optimal resolution and gain. Note that optimal threshold, resolution and gain * also exist for the Nerve of this cover. * @@ -153,12 +170,17 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./MapperDeltaCoord ../../../data/points/human.off 2 --v + * \code $> ./MapperDeltaCoord ../../../../data/points/KleinBottle5D.off 0 --v * \endcode * - * the program output is: + * the program outputs SC.dot. Using e.g. + * + * \code $> neato SC.dot -Tpdf -o SC.pdf + * \endcode + * + * one can obtain the following visualization: * - * \include MapperDeltaCoord.txt + * \image html "mapperdeltacoordvisu2.pdf" "Visualization with Neato" * * We also provide an example on a set of 72 pictures taken around the same object (lucky_cat.off). * The function is now the first eigenfunction given by PCA, whose values @@ -168,12 +190,12 @@ namespace graph_induced_complex { * * When launching: * - * \code $> ./MapperDeltaFunc ../../../data/points/COIL_database/lucky_cat.off ../../../data/points/COIL_database/lucky_cat_PCA1 --v + * \code $> ./MapperDeltaFunc ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v * \endcode * - * the program output is: + * the program outputs again SC.dot which gives the following visualization after using neato: * - * \include MapperDeltaFunc.dot + * \image html "mapperdeltafuncvisu.pdf" "Visualization with Neato" * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim diff --git a/src/Nerve_GIC/doc/gicvisu.png b/src/Nerve_GIC/doc/gicvisu.png new file mode 100644 index 00000000..d04b94e4 Binary files /dev/null and b/src/Nerve_GIC/doc/gicvisu.png differ diff --git a/src/Nerve_GIC/doc/gicvoronoivisu b/src/Nerve_GIC/doc/gicvoronoivisu new file mode 100644 index 00000000..ccc756ae --- /dev/null +++ b/src/Nerve_GIC/doc/gicvoronoivisu @@ -0,0 +1,5 @@ +P6 +# Geomview Snapshot of Camera +450 450 +255 +UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]eeeeeeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^eeejjjjjjjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^eeeooooooooopppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___ffflllttttttuuuuuuuuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```fffmmmtttyyyzzzzzzzzzzzz{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```gggnnnttt~~~~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaagggnnnuuu|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhooouuu|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooovvv}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiiUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUɲUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddͶUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhrrrһUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```lllvvvֿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___cccpppzzzĬUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccgggttt~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbfffkkkyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaafffjjjnnn}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaeeeiiinnnrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddiiimmmqqqvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddhhhlllqqquuuyyyüUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccggglllppptttyyy}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffkkkoootttxxx|||ĽUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjooossswww|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeiiinnnrrrwww{{{žUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddiiimmmrrrvvvzzz»UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhlllqqquuuzzz~~~ƿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggglllpppuuuyyy}}}üUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggkkkoootttxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjooosssxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjnnnrrrwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiimmmrrrvvv{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhmmmqqquuuzzz~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllpppuuuyyy~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkppptttxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjooosssxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjnnnssswww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmrrrvvv{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmqqqvvvzzz~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllpppuuuyyy~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppptttyyy}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUoootttxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnssswww|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooozzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrfffDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrddd|||ZZZ888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrTTTuuupppOOO---UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrMMMBBBeeeCCC!!!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrzzznnncccXXXMMM{{{YYY888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrzzznnncccXXXpppNNN,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrryyynnncccdddBBB'''UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrryyynnnzzzYYY888,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWdddUUUUUUyyyoooMMM<<<222'''UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWddd|||UUUUUUcccKKKBBB777,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUyyyXXXVVVGGG===222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUnnn___WWWMMMBBB777UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWqqqUUUUUUUUUUUUhhhiii\\\RRRGGG===222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyUUUUUUUUUUUUyyyrrrlllbbbWWWMMMBBB888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU||||||rrrggg]]]RRRHHH===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggUUUUUUUUUUUUwwwmmmbbbXXXMMMCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnUUUUUUUUUUUUUUUUUU|||rrrhhh]]]SSSHHH>>>UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvUUUUUUUUUUUUUUUUUUxxxmmmcccXXXNNNCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]UUUUUUUUUUUUUUUUUU}}}ssshhh^^^SSSIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddUUUUUUUUUUUUUUUUUUxxxnnncccYYYNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllUUUUUUUUUUUUUUUUUUUUU}}}sssiii^^^TTTIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssUUUUUUUUUUUUUUUUUUUUUUUUxxxnnndddYYYOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZUUUUUUUUUUUUUUUUUUUUUUUU~~~sssiii___TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaUUUUUUUUUUUUUUUUUUUUUUUUooodddZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiiUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzz___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyrrrjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwpppiiiaaaZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}vvvoooggg```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||tttmmmfff^^^WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzssslllddd]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyqqqjjjccc[[[TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~wwwpppiiiaaaZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}vvvnnnggg```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{tttmmmfff^^^WWWHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||ssskkkddd]]]UUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxqqqjjjccc[[[TTTEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppphhhaaaZZZRRRCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppggg```XXXQQQBBBUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeee^^^WWWPPP@@@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUddd]]]UUUNNN>>>UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUúUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[TTTEEE===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZRRRCCC;;;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQBBB:::UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPP@@@888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUNNN???777UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU===555UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU<<<444UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¹UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU:::222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU999111UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUŽUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU777///UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUú~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU...UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU***UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUûvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||sssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǾyyyqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUļwwwnnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¹}}}tttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿzzzrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżxxxoooUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUº~~~uuulllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{rrrjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƽxxxpppgggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"""EEEGGGUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUûvvvmmmdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||ssskkkbbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTVVVYYY[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyqqqhhh___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUWWWYYY[[[]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻwwwnnneee\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUXXXZZZ\\\^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}tttkkkcccZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU DDDGGGIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURRRTTTVVVXXXZZZ\\\___aaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿzzzqqqiii```WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPRRRTTTWWWYYY[[[]]]___aaacccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżxxxooofff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQSSSUUUWWWYYY\\\^^^```bbbdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUº~~~uuulllccc[[[RRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTVVVXXXZZZ\\\^^^```bbbeeegggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿ{{{rrrjjjaaaXXXOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGJJJLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVXXX[[[]]]___aaaccceeegggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUŽxxxpppggg^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDFFFIIILLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY[[[]]]___bbbdddfffhhhjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUú~~~vvvmmmddd\\\SSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\^^^```bbbdddfffiiikkkmmmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||sssjjjbbbYYYPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHJJJMMMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___aaaccceeegggiiikkkmmmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyqqqhhhUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___aaaccceeehhhjjjlllnnnpppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻ^^^UUULLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGIIILLLNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbdddfffhhhjjjllloooqqqsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvnnneee]]]TTTLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeegggiiikkkmmmoooqqqsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~uuummmeee\\\TTTKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHKKKMMMPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggiiilllnnnppprrrtttvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿ}}}uuulllddd[[[SSSJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJMMMOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjlllnnnppprrruuuwwwwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿ|||tttkkkccc[[[RRRJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGIIILLLOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmoooqqqsssuuuwwwyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾ|||ssskkkbbbZZZQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKNNNQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooorrrtttvvvxxxzzz|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~Ž{{{rrrjjjbbbYYYQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKMMMPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrtttvvvxxx{{{}}}|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwļzzzrrriiiaaaXXXPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHHHJJJMMMOOORRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuwwwyyy{{{}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻyyyqqqhhh```XXXOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGJJJLLLOOOQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxzzz|||~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyy~~~ûyyyppphhh___WWWNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUIIILLLNNNQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzz|||~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrwww}}}xxxoooggg___VVVNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKKKNNNPPPSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkqqqvvv|||wwwooofff^^^UUUMMMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKKKMMMPPPRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjpppuuu{{{vvvnnnfff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMMMOOORRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccciiinnntttzzz~~~vvvmmmeee\\\TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULLLOOOQQQTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\bbbhhhmmmsssyyy~~~}}}uuulllddd\\\SSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUNNNQQQSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[aaaggglllrrrxxx}}}|||tttlllccc[[[RRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTZZZ```eeekkkqqqvvv||||||ssskkkcccZZZRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOOORRRTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY___dddjjjpppuuu{{{{{{sssjjjbbbYYYQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOOOSSS]]]ccciiioootttzzzzzzrrriiiaaaYYYPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQSSSVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPTTTXXXbbbhhhmmmsssyyy~~~yyyqqqiii```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPTTTXXXaaaggglllrrrxxx}}}yyyppphhh```WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQUUUYYY\\\eeekkkqqqwww|||xxxpppggg___WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY]]]aaajjjpppuuu{{{wwwooofff^^^VVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY]]]aaaeeeoootttzzzvvvnnnfff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^bbbeeeiiisssyyy~~~~~~}}}|||vvvmmmeee]]]TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbfffjjjmmmrrrxxx}}}~~~}}}||||||{{{zzzyyyyyyxxxwwwvvvmmmddd\\\TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjnnnwww|||zzzyyyxxxxxxwwwvvvuuuuuutttsssrrrrrrlllddd[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXkkknnnrrr{{{UUUUUUUUUUUUUUUsssrrrqqqppppppooonnnmmmmmmlllcccZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\ooosssvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkkkkjjjiiihhhhhhgggfffZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```ssswww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUddddddcccbbbaaaYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]\\\\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggg|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\kkkUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___nnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggguuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhhUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttbbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr```]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmsssyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppXXX^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppuuu{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnYYY___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllZZZ```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjj[[[aaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhh\\\bbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfff]]]cccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvddd^^^ddd[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttbbb___eeekkkUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaavvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr[[[```ffflllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppp\\\bbbgggmmmNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeezzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn]]]ccchhhnnnTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggg|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lll^^^dddiiioooZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiii~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjj___eeekkkppp```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaajjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhh```ffflllqqqfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccclllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfffaaagggmmmrrrlllLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddnnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwdddbbbhhhnnntttyyyRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffpppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuu]]]ccciiiooouuuzzzXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsss^^^dddjjjpppvvv|||^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```jjjsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqq___eeekkkqqqwww}}}dddEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbkkkuuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnaaaffflllrrrxxx~~~jjjKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddmmmwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllbbbgggmmmsssyyypppQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeoooxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjjccchhhnnntttzzzvvvWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggqqqzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhhdddjjjooouuu{{{]]]===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___iiirrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfffeeekkkpppvvv|||cccCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaakkktttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww```ffflllrrrwww}}}iiiIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccclllvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuaaagggmmmsssxxx~~~oooOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeennnxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssbbbhhhnnntttzzzuuuUUU666UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggpppyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqccciiiooouuu{{{{{{[[[<<; + std::string off_file_name(argv[1]); double threshold = atof(argv[2]); int coord = atoi(argv[3]); @@ -43,8 +45,8 @@ int main(int argc, char **argv) { // Init of a graph induced complex from an OFF file // ---------------------------------------------------------------------------- - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); GIC.set_mask(); bool check = GIC.read_point_cloud(off_file_name); @@ -54,7 +56,7 @@ int main(int argc, char **argv) { GIC.set_color_from_coordinate(coord); GIC.set_function_from_coordinate(coord); - GIC.set_graph_from_rips(threshold); + GIC.set_graph_from_rips(threshold, Gudhi::Euclidean_distance()); GIC.set_resolution_double(resolution); GIC.set_gain(gain); GIC.set_cover_from_function(1); @@ -63,7 +65,7 @@ int main(int argc, char **argv) { GIC.plot_txt(); - Simplex_tree stree; GIC.create_complex(stree); + Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); std::streambuf* streambufffer = std::cout.rdbuf(); std::ostream output_stream(streambufffer); diff --git a/src/Nerve_GIC/example/GIC.txt b/src/Nerve_GIC/example/GIC.txt deleted file mode 100644 index 79f61e92..00000000 --- a/src/Nerve_GIC/example/GIC.txt +++ /dev/null @@ -1,89 +0,0 @@ -Graph induced complex is of dimension 1 - 87 simplices - 44 vertices. -Iterator on graph induced complex simplices -0 -1 -2 -2 1 -3 -3 0 -4 -4 2 -5 -5 3 -6 -6 5 -7 -7 4 -8 -8 7 -9 -9 6 -10 -10 8 -11 -11 9 -12 -12 11 -13 -13 10 -14 -14 12 -15 -15 13 -16 -16 14 -17 -17 15 -18 -18 16 -18 17 -19 -19 18 -20 -21 -22 -22 20 -23 -23 19 -24 -24 21 -25 -25 23 -26 -26 24 -27 -27 22 -28 -28 25 -29 -29 26 -30 -30 27 -31 -31 28 -32 -32 30 -33 -33 29 -34 -34 32 -35 -35 31 -36 -36 33 -37 -37 34 -37 35 -37 36 -38 -38 37 -39 -39 38 -40 -40 39 -41 -41 40 -42 -42 41 -43 -43 42 diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp index 8061c42d..013d6290 100644 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -32,6 +32,8 @@ void usage(int nbArgs, char * const progName) { int main(int argc, char **argv) { if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + using Point = std::vector; + std::string off_file_name(argv[1]); int m = atoi(argv[2]); bool verb = 0; if(argc == 4) verb = 1; @@ -40,8 +42,8 @@ int main(int argc, char **argv) { // Init of a graph induced complex from an OFF file // ---------------------------------------------------------------------------- - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); GIC.set_mask(); bool check = GIC.read_point_cloud(off_file_name); @@ -52,13 +54,13 @@ int main(int argc, char **argv) { GIC.set_graph_from_OFF(off_file_name); - GIC.set_cover_from_Voronoi(m); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),m); GIC.find_GIC_simplices(); GIC.plot_OFF(); - Simplex_tree stree; GIC.create_complex(stree); + Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); std::streambuf* streambufffer = std::cout.rdbuf(); std::ostream output_stream(streambufffer); diff --git a/src/Nerve_GIC/example/GICvoronoi.txt b/src/Nerve_GIC/example/GICvoronoi.txt deleted file mode 100644 index 34517933..00000000 --- a/src/Nerve_GIC/example/GICvoronoi.txt +++ /dev/null @@ -1,563 +0,0 @@ -Graph induced complex is of dimension 2 - 561 simplices - 100 vertices. -Iterator on graph induced complex simplices -0 -1 -2 -3 -3 0 -4 -4 1 -5 -6 -7 -8 -9 -9 1 -10 -11 -11 1 -11 9 -11 9 1 -12 -12 1 -12 11 -12 11 1 -13 -13 2 -14 -14 11 -15 -15 4 -16 -16 2 -16 15 -17 -17 3 -18 -19 -19 8 -20 -20 11 -20 12 -20 12 11 -21 -22 -22 12 -23 -23 22 -24 -24 19 -25 -25 0 -25 3 -25 18 -26 -26 1 -26 4 -26 4 1 -27 -27 26 -28 -28 27 -29 -30 -31 -31 30 -32 -32 30 -32 31 -32 31 30 -33 -33 1 -33 4 -33 4 1 -33 24 -33 29 -34 -34 5 -34 21 -35 -35 2 -35 16 -35 16 2 -36 -36 17 -37 -37 24 -37 29 -38 -38 3 -38 25 -38 25 3 -39 -39 8 -39 25 -39 38 -39 38 25 -40 -40 7 -40 19 -40 24 -40 24 19 -40 37 -40 37 24 -40 39 -41 -41 5 -41 34 -41 34 5 -42 -42 21 -42 41 -43 -43 5 -43 41 -43 41 5 -43 42 -43 42 41 -44 -44 14 -44 27 -45 -45 21 -46 -46 8 -46 19 -46 19 8 -46 39 -46 39 8 -47 -47 0 -47 3 -47 3 0 -47 19 -47 38 -47 38 3 -47 39 -47 39 38 -47 40 -47 40 19 -47 40 39 -47 46 -47 46 19 -47 46 39 -48 -48 37 -48 45 -49 -49 10 -49 37 -49 48 -49 48 37 -50 -50 10 -50 37 -50 45 -50 49 -50 49 10 -50 49 37 -51 -51 45 -51 48 -51 48 45 -51 50 -51 50 45 -52 -52 27 -52 30 -52 31 -52 31 30 -53 -53 10 -53 45 -53 48 -53 48 45 -53 50 -53 50 10 -54 -54 6 -55 -55 54 -56 -56 44 -57 -57 13 -58 -58 24 -58 29 -58 33 -58 33 24 -58 33 29 -58 37 -58 37 24 -58 37 29 -59 -59 7 -59 29 -60 -60 1 -60 12 -60 12 1 -60 22 -60 22 12 -60 26 -60 26 1 -60 27 -60 27 26 -60 44 -60 44 27 -60 56 -60 56 44 -61 -61 5 -61 21 -61 34 -61 34 5 -61 34 21 -61 42 -61 42 21 -61 43 -61 43 5 -61 43 42 -62 -62 6 -62 54 -62 54 6 -62 55 -62 55 54 -63 -63 6 -63 62 -63 62 6 -64 -64 10 -64 48 -64 49 -64 49 10 -64 49 48 -64 53 -64 53 10 -64 53 48 -65 -65 21 -65 45 -65 45 21 -65 50 -65 50 45 -65 53 -65 53 50 -66 -66 14 -66 44 -66 44 14 -66 56 -66 56 44 -67 -67 13 -67 57 -67 57 13 -68 -68 2 -68 13 -68 13 2 -68 35 -68 35 2 -69 -69 21 -69 34 -69 34 21 -69 41 -69 41 34 -69 42 -69 42 21 -69 42 41 -69 65 -69 65 21 -70 -70 11 -70 14 -70 14 11 -70 20 -70 20 11 -70 56 -70 66 -70 66 14 -70 66 56 -71 -71 6 -71 54 -71 54 6 -71 55 -71 55 54 -71 62 -71 62 55 -71 63 -71 63 6 -71 63 62 -72 -72 37 -72 48 -72 48 37 -72 51 -72 51 48 -73 -73 3 -73 17 -73 17 3 -73 36 -73 36 17 -74 -74 7 -74 8 -74 39 -74 39 8 -74 40 -74 40 7 -74 40 39 -74 52 -74 59 -74 59 7 -75 -75 4 -75 15 -75 15 4 -76 -76 15 -76 75 -76 75 15 -77 -77 4 -77 75 -77 75 4 -78 -78 4 -78 26 -78 26 4 -78 27 -78 27 26 -78 28 -78 28 27 -78 75 -78 77 -78 77 4 -78 77 75 -79 -79 9 -79 11 -79 11 9 -79 14 -79 14 11 -79 27 -79 30 -79 32 -79 32 30 -79 44 -79 44 14 -79 44 27 -79 52 -79 52 27 -79 52 30 -80 -80 0 -80 25 -80 25 0 -80 39 -80 39 25 -80 47 -80 47 0 -80 47 39 -81 -81 2 -81 4 -81 15 -81 15 4 -81 16 -81 16 2 -81 16 15 -81 27 -81 29 -81 33 -81 33 4 -81 33 29 -81 52 -81 52 27 -81 59 -81 59 29 -81 74 -81 74 52 -81 74 59 -81 75 -81 78 -81 78 27 -81 78 75 -82 -82 2 -82 75 -82 81 -82 81 2 -82 81 75 -83 -83 0 -83 3 -83 3 0 -83 25 -83 25 0 -83 73 -83 73 3 -84 -84 1 -84 8 -84 19 -84 19 8 -84 24 -84 24 19 -84 33 -84 33 1 -84 33 24 -84 74 -84 74 8 -85 -85 17 -85 36 -85 36 17 -85 73 -85 73 36 -86 -86 6 -86 63 -86 63 6 -87 -87 3 -87 17 -87 17 3 -87 18 -87 25 -87 25 3 -87 25 18 -88 -88 17 -88 18 -88 85 -88 85 17 -88 87 -88 87 17 -88 87 18 -89 -89 63 -89 86 -89 86 63 -90 -90 7 -90 37 -90 40 -90 40 7 -90 40 37 -90 59 -90 59 7 -91 -91 21 -91 45 -91 45 21 -91 53 -91 53 45 -91 65 -91 65 21 -91 65 53 -92 -92 9 -92 55 -92 71 -92 71 55 -93 -93 2 -93 15 -93 16 -93 16 15 -93 35 -93 35 2 -93 35 16 -93 75 -93 76 -93 76 15 -93 76 75 -93 82 -93 82 2 -93 82 75 -94 -94 1 -94 9 -94 9 1 -94 31 -94 32 -94 32 31 -94 52 -94 52 31 -94 55 -94 74 -94 74 52 -94 79 -94 79 9 -94 79 32 -94 84 -94 84 1 -94 84 74 -94 92 -94 92 9 -94 92 55 -95 -95 18 -95 25 -95 25 18 -95 83 -95 83 25 -95 85 -95 88 -95 88 18 -95 88 85 -96 -96 63 -96 86 -96 86 63 -96 89 -96 89 63 -96 89 86 -97 -97 73 -97 83 -97 83 73 -97 85 -97 85 73 -97 95 -97 95 83 -97 95 85 -98 -98 12 -98 20 -98 20 12 -98 22 -98 22 12 -98 23 -98 23 22 -98 56 -98 60 -98 60 22 -98 60 56 -98 70 -98 70 20 -98 70 56 -99 -99 29 -99 37 -99 37 29 -99 50 -99 50 37 -99 51 -99 51 50 -99 59 -99 59 29 -99 72 -99 72 37 -99 72 51 -99 90 -99 90 37 -99 90 59 diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index 84a25bad..9927f762 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -32,6 +32,8 @@ void usage(int nbArgs, char * const progName) { int main(int argc, char **argv) { if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + using Point = std::vector; + std::string off_file_name(argv[1]); int coord = atoi(argv[2]); bool verb = 0; if(argc == 4) verb = 1; @@ -40,8 +42,8 @@ int main(int argc, char **argv) { // Init of a Mapper Delta from an OFF file // --------------------------------------- - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); GIC.set_mask(); GIC.set_subsampling(); bool check = GIC.read_point_cloud(off_file_name); @@ -51,16 +53,16 @@ int main(int argc, char **argv) { GIC.set_color_from_coordinate(coord); GIC.set_function_from_coordinate(coord); - GIC.set_graph_from_automatic_rips(); + GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_txt(); + GIC.plot_pdf(); - Simplex_tree stree; GIC.create_complex(stree); + Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); std::streambuf* streambufffer = std::cout.rdbuf(); std::ostream output_stream(streambufffer); diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.txt b/src/Nerve_GIC/example/MapperDeltaCoord.txt deleted file mode 100644 index faf832c7..00000000 --- a/src/Nerve_GIC/example/MapperDeltaCoord.txt +++ /dev/null @@ -1,143 +0,0 @@ -Mapper Delta is of dimension 1 - 141 simplices - 71 vertices. -Iterator on Mapper Delta simplices -0 -1 -2 -2 1 -3 -3 0 -4 -4 2 -5 -5 3 -6 -6 4 -7 -7 5 -8 -8 6 -9 -9 7 -10 -10 9 -11 -11 8 -12 -12 11 -13 -13 10 -14 -14 12 -15 -15 13 -16 -16 14 -17 -17 15 -18 -18 17 -19 -19 16 -20 -20 18 -21 -21 19 -22 -22 20 -23 -23 21 -24 -24 22 -25 -25 23 -26 -26 24 -27 -27 25 -28 -28 26 -28 27 -29 -29 28 -30 -30 29 -31 -32 -33 -33 30 -34 -34 31 -35 -35 32 -36 -36 34 -37 -37 33 -38 -38 35 -39 -39 37 -40 -40 38 -41 -41 36 -42 -42 39 -43 -43 40 -44 -44 41 -45 -45 42 -46 -46 44 -47 -47 43 -48 -48 45 -49 -49 46 -50 -50 47 -51 -51 48 -52 -52 49 -53 -53 50 -54 -54 51 -55 -55 52 -56 -56 53 -57 -57 54 -58 -58 55 -59 -59 56 -60 -60 57 -60 58 -60 59 -61 -61 60 -62 -62 61 -63 -63 62 -64 -64 63 -65 -65 64 -66 -66 65 -67 -67 66 -68 -68 67 -69 -69 68 -70 -70 69 diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index fa95ca58..f3d57d2f 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -32,6 +32,8 @@ void usage(int nbArgs, char * const progName) { int main(int argc, char **argv) { if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + using Point = std::vector; + std::string off_file_name(argv[1]); std::string func_file_name = argv[2]; bool verb = 0; if(argc == 4) verb = 1; @@ -40,8 +42,8 @@ int main(int argc, char **argv) { // Init of a Mapper Delta from an OFF file // --------------------------------------- - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); GIC.set_mask(); GIC.set_subsampling(); bool check = GIC.read_point_cloud(off_file_name); @@ -51,7 +53,7 @@ int main(int argc, char **argv) { GIC.set_color_from_file(func_file_name); GIC.set_function_from_file(func_file_name); - GIC.set_graph_from_automatic_rips(); + GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); @@ -60,7 +62,7 @@ int main(int argc, char **argv) { GIC.plot_pdf(); - Simplex_tree stree; GIC.create_complex(stree); + Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); std::streambuf* streambufffer = std::cout.rdbuf(); std::ostream output_stream(streambufffer); diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.dot b/src/Nerve_GIC/example/MapperDeltaFunc.dot deleted file mode 100644 index beafa7f1..00000000 --- a/src/Nerve_GIC/example/MapperDeltaFunc.dot +++ /dev/null @@ -1,10 +0,0 @@ -graph Mapper { -0[shape=circle fontcolor=black color=black label="0:26" style=filled fillcolor="0, 1, 1"] -1[shape=circle fontcolor=black color=black label="1:4" style=filled fillcolor="0.240095, 1, 1"] -2[shape=circle fontcolor=black color=black label="2:11" style=filled fillcolor="0.209621, 1, 1"] -3[shape=circle fontcolor=black color=black label="3:42" style=filled fillcolor="0.6, 1, 1"] - 0 -- 1 [weight=15]; - 0 -- 2 [weight=15]; - 1 -- 3 [weight=15]; - 2 -- 3 [weight=15]; -} \ No newline at end of file diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index 8f8037d4..10c5ba3b 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -32,6 +32,8 @@ void usage(int nbArgs, char * const progName) { int main(int argc, char **argv) { if ((argc != 5) && (argc != 6)) usage(argc, (argv[0] - 1)); + using Point = std::vector; + std::string off_file_name(argv[1]); int coord = atoi(argv[2]); int resolution = atoi(argv[3]); @@ -42,8 +44,8 @@ int main(int argc, char **argv) { // Init of a Nerve from an OFF file // -------------------------------- - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); GIC.set_mask(); bool check = GIC.read_point_cloud(off_file_name); @@ -62,7 +64,7 @@ int main(int argc, char **argv) { GIC.plot_txt(); - Simplex_tree stree; GIC.create_complex(stree); + Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); std::streambuf* streambufffer = std::cout.rdbuf(); std::ostream output_stream(streambufffer); diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index d670cef6..42225c47 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -41,21 +41,13 @@ #include #include -#define CONSTANT 10 -#define ETA 0.001 -#define MASK 0 +namespace Gudhi { + +namespace graph_induced_complex { using Simplex_tree = Gudhi::Simplex_tree<>; using Filtration_value = Simplex_tree::Filtration_value; using Rips_complex = Gudhi::rips_complex::Rips_complex; -using Point = std::vector; - -std::map func; -std::map func_color; - -namespace Gudhi { - -namespace graph_induced_complex { /** @@ -78,10 +70,11 @@ namespace graph_induced_complex { * correspond to the simplices of the GIC. * */ - +template class Graph_induced_complex { private: + //Graph_induced_complex(std::map fun){func = fun;} bool verbose; // whether to display information. std::vector point_cloud; typedef int Cover_t; // elements of cover C are indexed by integers. @@ -92,23 +85,28 @@ class Graph_induced_complex { int n; // number of points. std::map cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. std::map > cover_color; // size and coloring of the vertices of the output simplicial complex. - Simplex_tree<> st; + Simplex_tree st; std::map > adjacency_matrix; std::vector > distances; int resolution_int; double resolution_double; double gain; + double rate_constant; // Constant in the subsampling. + double rate_power; // Power in the subsampling. + int mask; // Ignore nodes containing less than mask points. + std::map func; + std::map func_color; std::vector voronoi_subsamples; std::string cover_name; std::string point_cloud_name; std::string color_name; - // Point comparator - private: - static bool functional_comp(int a, int b){ - if(func[a] == func[b]) return a < b; - else return func[a] < func[b]; - } + // Point comparator + struct Less{ + Less(std::map func){Fct = func;} + std::map Fct; + bool operator()(int a, int b){if(Fct[a] == Fct[b]) return a < b; else return Fct[a] < Fct[b];} + }; // DFS private: @@ -140,8 +138,25 @@ class Graph_induced_complex { } } + private: + void fill_adjacency_matrix_from_st(){ + std::vector empty; + for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for (auto simplex : st.complex_simplex_range()) { + if(st.dimension(simplex) == 1){ + std::vector vertices; + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } + } + public: void set_verbose(bool verb = 0){verbose = verb;} + public: + void set_subsampling(double constant = 10, double power = 0.001){rate_constant = constant; rate_power = power;} + public: + void set_mask(int nodemask = 0){mask = nodemask;} public: bool read_point_cloud(std::string off_file_name){ @@ -164,25 +179,21 @@ class Graph_induced_complex { /** \brief Creates the graph G from a file containing the edges. * * @param[in] graph_file_name name of the input graph file. + * The graph file contains one edge per line, + * each edge being represented by the IDs of its two nodes. * */ void set_graph_from_file(std::string graph_file_name){ - int neighb; int vid; std::ifstream input(graph_file_name); std::string line; std::vector edge(2); int n = 0; + int neighb; std::ifstream input(graph_file_name); + std::string line; int edge[2]; int n = 0; while(std::getline(input,line)){ - std::stringstream stream(line); stream >> vid; edge[0] = vid; + std::stringstream stream(line); stream >> edge[0]; while(stream >> neighb){edge[1] = neighb; st.insert_simplex_and_subfaces(edge);} n++; } - std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } + fill_adjacency_matrix_from_st(); + } public: // Set graph from OFF file. @@ -208,15 +219,8 @@ class Graph_induced_complex { i++; } - std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } + fill_adjacency_matrix_from_st(); + } public: // Set graph from Rips complex. @@ -225,26 +229,18 @@ class Graph_induced_complex { * @param[in] threshold threshold value for the Rips complex. * */ - void set_graph_from_rips(double threshold){ - Rips_complex rips_complex_from_points(point_cloud, threshold, Euclidean_distance()); - rips_complex_from_points.create_complex(st, 1); + template void set_graph_from_rips(double threshold, Distance distance){ - std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } + Rips_complex rips_complex_from_points(point_cloud, threshold, distance); + rips_complex_from_points.create_complex(st, 1); + fill_adjacency_matrix_from_st(); } public: // Pairwise distances. - /** \brief Computes all pairwise distances (Euclidean norm). + /** \private \brief Computes all pairwise distances. */ - void compute_pairwise_distances(){ + template void compute_pairwise_distances(Distance ref_distance){ double d; std::vector zeros(n); for(int i = 0; i < n; i++) distances.push_back(zeros); std::string distance = point_cloud_name; distance.append("_dist"); @@ -267,9 +263,8 @@ class Graph_induced_complex { int state = (int) floor( 100*(i*1.0+1)/n ) %10; if( state == 0 && verbose) std::cout << "\r" << state << "%" << std::flush; for (int j = i; j < n; j++){ - double dis = 0; for(int k = 0; k < data_dimension; k++) - dis += pow(point_cloud[i][k]-point_cloud[j][k],2); - dis = std::sqrt(dis); distances[i][j] = dis; distances[j][i] = dis; + double dis = ref_distance(point_cloud[i],point_cloud[j]); + distances[i][j] = dis; distances[j][i] = dis; output.write((char*) &dis,8); } } @@ -284,15 +279,16 @@ class Graph_induced_complex { * @param[in] N number of subsampling iteration (default value 100). * */ - void set_graph_from_automatic_rips(int N = 100){ + template void set_graph_from_automatic_rips(Distance distance, int N = 100){ - int m = floor(n/pow(log(n)/log(CONSTANT),1+ETA)); m = std::min(m,n-1); + int m = floor(n/ std::exp((1+rate_power)*std::log(std::log(n)/std::log(rate_constant))) ); + m = std::min(m,n-1); std::vector samples(m); double delta = 0; if(verbose) std::cout << n << " points in R^" << data_dimension << std::endl; if(verbose) std::cout << "Subsampling " << m << " points" << std::endl; - if(distances.size() == 0) compute_pairwise_distances(); + if(distances.size() == 0) compute_pairwise_distances(distance); //#pragma omp parallel for for (int i = 0; i < N; i++){ @@ -308,18 +304,9 @@ class Graph_induced_complex { } if(verbose) std::cout << "delta = " << delta << std::endl; - Rips_complex rips_complex_from_points(point_cloud, delta, Euclidean_distance()); + Rips_complex rips_complex_from_points(point_cloud, delta, distance); rips_complex_from_points.create_complex(st, 1); - - std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } + fill_adjacency_matrix_from_st(); } @@ -338,7 +325,7 @@ class Graph_induced_complex { int vertex_id = 0; std::ifstream input(func_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; - func.insert(std::pair(vertex_id, f)); vertex_id++; + func.emplace(vertex_id, f); vertex_id++; } cover_name = func_file_name; } @@ -350,7 +337,7 @@ class Graph_induced_complex { * */ void set_function_from_coordinate(int k){ - for(int i = 0; i < n; i++) func.insert(std::pair(i,point_cloud[i][k])); + for(int i = 0; i < n; i++) func.emplace(i,point_cloud[i][k]); char coordinate[100]; sprintf(coordinate, "coordinate %d", k); cover_name = coordinate; } @@ -362,89 +349,13 @@ class Graph_induced_complex { * */ void set_function_from_vector(std::vector function){ - for(int i = 0; i < n; i++) func.insert(std::pair(i, function[i])); + for(int i = 0; i < n; i++) func.emplace(i, function[i]); } // ******************************************************************************************************************* // Covers. // ******************************************************************************************************************* - public: // Set cover from file. - /** \brief Creates the cover C from a file containing the cover elements of each point (the order has to be the same - * as in the input file!). - * - * @param[in] cover_file_name name of the input cover file. - * - */ - void set_cover_from_file(std::string cover_file_name){ - int vertex_id = 0; Cover_t cov; std::vector cov_elts, cov_number; - std::ifstream input(cover_file_name); std::string line; - while(std::getline(input,line)){ - cov_elts.clear(); std::stringstream stream(line); - while(stream >> cov){ - cov_elts.push_back(cov); cov_number.push_back(cov); - cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; - } - cover[vertex_id] = cov_elts; vertex_id++; - } - std::vector::iterator it; - std::sort(cov_number.begin(),cov_number.end()); it = std::unique(cov_number.begin(),cov_number.end()); - cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size()-1; - for(int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; - cover_name = cover_file_name; - } - - public: // Set cover from Voronoi - /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. - * - * @param[in] m number of points in the subsample. - * - */ - void set_cover_from_Voronoi(int m = 100){ - - voronoi_subsamples.resize(m); SampleWithoutReplacement(n,m,voronoi_subsamples); - if(distances.size() == 0) compute_pairwise_distances(); - std::vector mindist(n); for(int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); - - // Compute the geodesic distances to subsamples with Dijkstra - for(int i = 0; i < m; i++){ - if(verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; - int seed = voronoi_subsamples[i]; - std::vector dist(n); std::vector process(n); - for(int j = 0; j < n; j++){ dist[j] = std::numeric_limits::max(); process[j] = j; } - dist[seed] = 0; int curr_size = process.size(); int min_point, min_index; double min_dist; - std::vector neighbors; int num_neighbors; - - while(curr_size > 0){ - min_dist = std::numeric_limits::max(); min_index = -1; min_point = -1; - for(int j = 0; j < curr_size; j++){ - if(dist[process[j]] < min_dist){ - min_point = process[j]; min_dist = dist[process[j]]; min_index = j; - } - } - assert(min_index != -1); process.erase(process.begin() + min_index); - assert(min_point != -1); neighbors = adjacency_matrix[min_point]; num_neighbors = neighbors.size(); - for(int j = 0; j < num_neighbors; j++){ - double d = dist[min_point] + distances[min_point][neighbors[j]]; - dist[neighbors[j]] = std::min(dist[neighbors[j]], d); - } - curr_size = process.size(); - } - - for(int j = 0; j < n; j++) - if(mindist[j] > dist[j]){ - mindist[j] = dist[j]; - if(cover[j].size() == 0) cover[j].push_back(i); - else cover[j][0] = i; - } - } - - for(int i = 0; i < n; i++){ cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } - for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; - maximal_dim = m-1; cover_name = "Voronoi"; - - } - public: // Automatic tuning of resolution for Mapper Delta. /** \brief Computes the optimal length of intervals for a Mapper Delta. */ @@ -542,8 +453,7 @@ class Graph_induced_complex { // Sort points according to function values std::vector points(n); for(int i = 0; i < n; i++) points[i] = i; - std::sort(points.begin(),points.end(),functional_comp); - + std::sort(points.begin(),points.end(),Less(this->func)); int id = 0; int pos = 0; for(int i = 0; i < res; i++){ @@ -615,6 +525,82 @@ class Graph_induced_complex { } + public: // Set cover from file. + /** \brief Creates the cover C from a file containing the cover elements of each point (the order has to be the same + * as in the input file!). + * + * @param[in] cover_file_name name of the input cover file. + * + */ + void set_cover_from_file(std::string cover_file_name){ + int vertex_id = 0; Cover_t cov; std::vector cov_elts, cov_number; + std::ifstream input(cover_file_name); std::string line; + while(std::getline(input,line)){ + cov_elts.clear(); std::stringstream stream(line); + while(stream >> cov){ + cov_elts.push_back(cov); cov_number.push_back(cov); + cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; + } + cover[vertex_id] = cov_elts; vertex_id++; + } + std::vector::iterator it; + std::sort(cov_number.begin(),cov_number.end()); it = std::unique(cov_number.begin(),cov_number.end()); + cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size()-1; + for(int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; + cover_name = cover_file_name; + } + + public: // Set cover from Voronoi + /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. + * + * @param[in] m number of points in the subsample. + * + */ + template void set_cover_from_Voronoi(Distance distance, int m = 100){ + + voronoi_subsamples.resize(m); SampleWithoutReplacement(n,m,voronoi_subsamples); + if(distances.size() == 0) compute_pairwise_distances(distance); + std::vector mindist(n); for(int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); + + // Compute the geodesic distances to subsamples with Dijkstra + for(int i = 0; i < m; i++){ + if(verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; + int seed = voronoi_subsamples[i]; + std::vector dist(n); std::vector process(n); + for(int j = 0; j < n; j++){ dist[j] = std::numeric_limits::max(); process[j] = j; } + dist[seed] = 0; int curr_size = process.size(); int min_point, min_index; double min_dist; + std::vector neighbors; int num_neighbors; + + while(curr_size > 0){ + min_dist = std::numeric_limits::max(); min_index = -1; min_point = -1; + for(int j = 0; j < curr_size; j++){ + if(dist[process[j]] < min_dist){ + min_point = process[j]; min_dist = dist[process[j]]; min_index = j; + } + } + assert(min_index != -1); process.erase(process.begin() + min_index); + assert(min_point != -1); neighbors = adjacency_matrix[min_point]; num_neighbors = neighbors.size(); + for(int j = 0; j < num_neighbors; j++){ + double d = dist[min_point] + distances[min_point][neighbors[j]]; + dist[neighbors[j]] = std::min(dist[neighbors[j]], d); + } + curr_size = process.size(); + } + + for(int j = 0; j < n; j++) + if(mindist[j] > dist[j]){ + mindist[j] = dist[j]; + if(cover[j].size() == 0) cover[j].push_back(i); + else cover[j][0] = i; + } + } + + for(int i = 0; i < n; i++){ cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } + for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; + maximal_dim = m-1; cover_name = "Voronoi"; + + } + // ******************************************************************************************************************* // Visualization. // ******************************************************************************************************************* @@ -629,7 +615,7 @@ class Graph_induced_complex { int vertex_id = 0; std::ifstream input(color_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; - func_color.insert(std::pair(vertex_id, f)); vertex_id++; + func_color.emplace(vertex_id, f); vertex_id++; } color_name = color_file_name; } @@ -642,7 +628,7 @@ class Graph_induced_complex { * */ void set_color_from_coordinate(int k = 0){ - for(int i = 0; i < n; i++) func_color.insert(std::pair(i, point_cloud[i][k])); + for(int i = 0; i < n; i++) func_color.emplace(i, point_cloud[i][k]); color_name = "coordinate "; color_name.append(std::to_string(k)); } @@ -653,7 +639,7 @@ class Graph_induced_complex { * */ void set_color_from_vector(std::vector color){ - for(unsigned int i = 0; i < color.size(); i++) func_color.insert(std::pair(i, color[i])); + for(unsigned int i = 0; i < color.size(); i++) func_color.emplace(i, color[i]); } public: // Create a .dot file that can be compiled with neato to produce a .pdf file. @@ -668,7 +654,7 @@ class Graph_induced_complex { } int k = 0; std::vector nodes; nodes.clear(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ - if(iit->second.first > MASK){ + if(iit->second.first > mask){ nodes.push_back(iit->first); graphic << iit->first << "[shape=circle fontcolor=black color=black label=\"" \ << iit->first << ":" << iit->second.first << "\" style=filled fillcolor=\"" \ @@ -679,7 +665,7 @@ class Graph_induced_complex { int ke = 0; int num_simplices = simplices.size(); for (int i = 0; i < num_simplices; i++) if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK){ + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask){ graphic << " " << simplices[i][0] << " -- " << simplices[i][1] << " [weight=15];" << std::endl; ke++;} graphic << "}"; graphic.close(); std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; @@ -695,7 +681,7 @@ class Graph_induced_complex { char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); for (int i = 0; i < num_simplices; i++) if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) num_edges++; graphic << point_cloud_name << std::endl; @@ -709,7 +695,7 @@ class Graph_induced_complex { for (int i = 0; i < num_simplices; i++) if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; graphic.close(); std::cout << "SC.txt generated. It can be visualized with e.g. python visu.py and firefox." << std::endl; @@ -771,7 +757,7 @@ class Graph_induced_complex { * @param[in] cover_elts vector of points represented by vectors of cover elements (the ones to which they belong). * */ - void find_all_simplices(std::vector > cover_elts){ + void find_maximal_clique(std::vector > cover_elts){ int num_nodes = cover_elts.size(); std::vector simplex; for(int i = 0; i < num_nodes; i++) @@ -829,7 +815,7 @@ class Graph_induced_complex { if(!st.has_children(simplex)){ std::vector > cover_elts; for (auto vertex : st.simplex_vertex_range(simplex)) cover_elts.push_back(cover[vertex]); - find_all_simplices(cover_elts); + find_maximal_clique(cover_elts); } } std::vector >::iterator it; diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index 6b6621fd..cff49372 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -35,12 +35,13 @@ BOOST_AUTO_TEST_CASE(check_nerve) { - Gudhi::graph_induced_complex::Graph_induced_complex GIC; + using Point = std::vector; + Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); GIC.set_color_from_coordinate(); - GIC.find_Nerve_simplices(); Simplex_tree stree; GIC.create_complex(stree); + GIC.find_Nerve_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 0); @@ -49,11 +50,12 @@ BOOST_AUTO_TEST_CASE(check_nerve) { BOOST_AUTO_TEST_CASE(check_GICMAP) { - Gudhi::graph_induced_complex::Graph_induced_complex GIC; + using Point = std::vector; + Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Simplex_tree stree; GIC.create_complex(stree); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 2); @@ -62,11 +64,12 @@ BOOST_AUTO_TEST_CASE(check_GICMAP) { BOOST_AUTO_TEST_CASE(check_GICcover) { - Gudhi::graph_induced_complex::Graph_induced_complex GIC; + using Point = std::vector; + Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); + GIC.find_GIC_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 4); @@ -76,11 +79,12 @@ BOOST_AUTO_TEST_CASE(check_GICcover) { BOOST_AUTO_TEST_CASE(check_GICvoronoi) { - Gudhi::graph_induced_complex::Graph_induced_complex GIC; + using Point = std::vector; + Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); - GIC.set_cover_from_Voronoi(2); - GIC.find_GIC_simplices(); Simplex_tree stree; GIC.create_complex(stree); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),2); + GIC.find_GIC_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 2); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 1); -- cgit v1.2.3 From d1fd9723fc49ee430203166fca71ea20b96f6b7b Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 4 Jul 2017 10:07:48 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2581 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 3483c0a74ae9059c9511fe539e04ed5a2dfba3af --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 27 +++++++++++++----------- src/Nerve_GIC/doc/gicvisu.jpg | Bin 0 -> 167192 bytes src/Nerve_GIC/doc/gicvisu.png | Bin 110995 -> 0 bytes src/Nerve_GIC/doc/gicvoronoivisu | 5 ----- src/Nerve_GIC/doc/gicvoronoivisu.jpg | Bin 0 -> 37785 bytes src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg | Bin 0 -> 1259868 bytes src/Nerve_GIC/doc/mapperdeltacoordvisu2.pdf | Bin 16912 -> 0 bytes src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg | Bin 0 -> 71647 bytes src/Nerve_GIC/doc/mapperdeltafuncvisu.pdf | Bin 10904 -> 0 bytes src/Nerve_GIC/doc/nervevisu.jpg | Bin 0 -> 127619 bytes src/Nerve_GIC/doc/nervevisu.png | Bin 76988 -> 0 bytes 11 files changed, 15 insertions(+), 17 deletions(-) create mode 100644 src/Nerve_GIC/doc/gicvisu.jpg delete mode 100644 src/Nerve_GIC/doc/gicvisu.png delete mode 100644 src/Nerve_GIC/doc/gicvoronoivisu create mode 100644 src/Nerve_GIC/doc/gicvoronoivisu.jpg create mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg delete mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu2.pdf create mode 100644 src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg delete mode 100644 src/Nerve_GIC/doc/mapperdeltafuncvisu.pdf create mode 100644 src/Nerve_GIC/doc/nervevisu.jpg delete mode 100644 src/Nerve_GIC/doc/nervevisu.png (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index c03d37d8..7120ada3 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -34,9 +34,9 @@ namespace graph_induced_complex { * @{ * * Visualizations of the simplicial complexes can be done with either - * neato , - * geomview , or - * python + firefox . + * neato (from graphviz ), + * geomview , or + * python + firefox . * * \section covers Covers * @@ -88,7 +88,7 @@ namespace graph_induced_complex { * * one can obtain the following visualization: * - * \image html "nervevisu.png" "Visualization with Kepler Mapper" + * \image html "nervevisu.jpg" "Visualization with Kepler Mapper" * * \section gic Graph Induced Complexes (GIC) * @@ -101,8 +101,7 @@ namespace graph_induced_complex { * See this article * for more details. * - * \image html "gic_complex.png" "GIC of a point cloud. Image taken from - * this article " + * \image html "gic_complex.png" "GIC of a point cloud. Courtesy of Tamal Dey." * * \subsection gicexample Example with cover from function * @@ -122,7 +121,7 @@ namespace graph_induced_complex { * * the program outputs SC.txt, which can be visualized with python and firefox as before: * - * \image html "gicvisu.png" "Visualization with Kepler Mapper" + * \image html "gicvisu.jpg" "Visualization with Kepler Mapper" * * \subsection gicexamplevor Example with cover from Voronoï * @@ -130,13 +129,14 @@ namespace graph_induced_complex { * We randomly subsampled 100 points in the point cloud, which act as seeds of * a geodesic Voronoï diagram. Each cell of the diagram is then an element of C. * The graph G (used to compute both the geodesics for Voronoï and the GIC) - * comes from the triangulation of the human shape. + * comes from the triangulation of the human shape. Note that the resulting simplicial complex is in dimension 3 + * in this example. * * \include Nerve_GIC/GICvoronoi.cpp * * When launching: * - * \code $> ./GICvoronoi ../../../../data/points/human.off 100 --v + * \code $> ./GICvoronoi ../../../../data/points/human.off 700 --v * \endcode * * the program outputs SC.off. Using e.g. @@ -146,7 +146,7 @@ namespace graph_induced_complex { * * one can obtain the following visualization: * - * \image html "gicvoronoivisu.png" "Visualization with Geomview" + * \image html "gicvoronoivisu.jpg" "Visualization with Geomview" * * \subsection mapperdeltadefinition Mapper Delta * @@ -180,7 +180,10 @@ namespace graph_induced_complex { * * one can obtain the following visualization: * - * \image html "mapperdeltacoordvisu2.pdf" "Visualization with Neato" + * \image html "mapperdeltacoordvisu2.jpg" "Visualization with Neato" + * + * where nodes are colored by the filter function values and, for each node, the first number is its ID + * and the second is the number of data points that its contain. * * We also provide an example on a set of 72 pictures taken around the same object (lucky_cat.off). * The function is now the first eigenfunction given by PCA, whose values @@ -195,7 +198,7 @@ namespace graph_induced_complex { * * the program outputs again SC.dot which gives the following visualization after using neato: * - * \image html "mapperdeltafuncvisu.pdf" "Visualization with Neato" + * \image html "mapperdeltafuncvisu.jpg" "Visualization with Neato" * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim diff --git a/src/Nerve_GIC/doc/gicvisu.jpg b/src/Nerve_GIC/doc/gicvisu.jpg new file mode 100644 index 00000000..576dae47 Binary files /dev/null and b/src/Nerve_GIC/doc/gicvisu.jpg differ diff --git a/src/Nerve_GIC/doc/gicvisu.png b/src/Nerve_GIC/doc/gicvisu.png deleted file mode 100644 index d04b94e4..00000000 Binary files a/src/Nerve_GIC/doc/gicvisu.png and /dev/null differ diff --git a/src/Nerve_GIC/doc/gicvoronoivisu b/src/Nerve_GIC/doc/gicvoronoivisu deleted file mode 100644 index ccc756ae..00000000 --- a/src/Nerve_GIC/doc/gicvoronoivisu +++ /dev/null @@ -1,5 +0,0 @@ -P6 -# Geomview Snapshot of Camera -450 450 -255 -UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]eeeeeeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^eeejjjjjjjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^eeeooooooooopppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___ffflllttttttuuuuuuuuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```fffmmmtttyyyzzzzzzzzzzzz{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```gggnnnttt~~~~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaagggnnnuuu|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhooouuu|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooovvv}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiiUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUɲUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddͶUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhrrrһUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```lllvvvֿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___cccpppzzzĬUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccgggttt~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbfffkkkyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaafffjjjnnn}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaeeeiiinnnrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddiiimmmqqqvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddhhhlllqqquuuyyyüUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccggglllppptttyyy}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffkkkoootttxxx|||ĽUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjooossswww|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeiiinnnrrrwww{{{žUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddiiimmmrrrvvvzzz»UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhlllqqquuuzzz~~~ƿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggglllpppuuuyyy}}}üUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggkkkoootttxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjooosssxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjnnnrrrwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiimmmrrrvvv{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhmmmqqquuuzzz~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllpppuuuyyy~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkppptttxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjooosssxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjnnnssswww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmrrrvvv{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmqqqvvvzzz~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllpppuuuyyy~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppptttyyy}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUoootttxxx|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnssswww|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooozzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrr}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrfffDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrddd|||ZZZ888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrTTTuuupppOOO---UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrMMMBBBeeeCCC!!!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrzzznnncccXXXMMM{{{YYY888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrrzzznnncccXXXpppNNN,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrryyynnncccdddBBB'''UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddrrryyynnnzzzYYY888,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWdddUUUUUUyyyoooMMM<<<222'''UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWddd|||UUUUUUcccKKKBBB777,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUyyyXXXVVVGGG===222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUnnn___WWWMMMBBB777UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWqqqUUUUUUUUUUUUhhhiii\\\RRRGGG===222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyUUUUUUUUUUUUyyyrrrlllbbbWWWMMMBBB888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU||||||rrrggg]]]RRRHHH===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggUUUUUUUUUUUUwwwmmmbbbXXXMMMCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnUUUUUUUUUUUUUUUUUU|||rrrhhh]]]SSSHHH>>>UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvUUUUUUUUUUUUUUUUUUxxxmmmcccXXXNNNCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]UUUUUUUUUUUUUUUUUU}}}ssshhh^^^SSSIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddUUUUUUUUUUUUUUUUUUxxxnnncccYYYNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlllUUUUUUUUUUUUUUUUUUUUU}}}sssiii^^^TTTIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssUUUUUUUUUUUUUUUUUUUUUUUUxxxnnndddYYYOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZUUUUUUUUUUUUUUUUUUUUUUUU~~~sssiii___TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaaUUUUUUUUUUUUUUUUUUUUUUUUooodddZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiiiUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzz___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyrrrjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwpppiiiaaaZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}vvvoooggg```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||tttmmmfff^^^WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzssslllddd]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyqqqjjjccc[[[TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~wwwpppiiiaaaZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}vvvnnnggg```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{tttmmmfff^^^WWWHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||ssskkkddd]]]UUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxqqqjjjccc[[[TTTEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppphhhaaaZZZRRRCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppggg```XXXQQQBBBUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeee^^^WWWPPP@@@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUddd]]]UUUNNN>>>UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUúUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[TTTEEE===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZRRRCCC;;;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQBBB:::UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPP@@@888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUNNN???777UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU===555UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU<<<444UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¹UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU:::222UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU999111UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUŽUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU777///UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUú~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU...UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,,,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU***UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUûvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||sssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǾyyyqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUļwwwnnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¹}}}tttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿzzzrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżxxxoooUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUº~~~uuulllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{{{rrrjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƽxxxpppgggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"""EEEGGGUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUûvvvmmmdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||ssskkkbbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTVVVYYY[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyqqqhhh___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUWWWYYY[[[]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻwwwnnneee\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUXXXZZZ\\\^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}tttkkkcccZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU DDDGGGIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURRRTTTVVVXXXZZZ\\\___aaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿzzzqqqiii```WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPRRRTTTWWWYYY[[[]]]___aaacccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUżxxxooofff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQSSSUUUWWWYYY\\\^^^```bbbdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUº~~~uuulllccc[[[RRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTVVVXXXZZZ\\\^^^```bbbeeegggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿ{{{rrrjjjaaaXXXOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGJJJLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVXXX[[[]]]___aaaccceeegggUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUŽxxxpppggg^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDFFFIIILLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY[[[]]]___bbbdddfffhhhjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUú~~~vvvmmmddd\\\SSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\^^^```bbbdddfffiiikkkmmmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||sssjjjbbbYYYPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHJJJMMMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___aaaccceeegggiiikkkmmmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾyyyqqqhhhUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___aaaccceeehhhjjjlllnnnpppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻ^^^UUULLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGIIILLLNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbdddfffhhhjjjllloooqqqsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvnnneee]]]TTTLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeegggiiikkkmmmoooqqqsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~uuummmeee\\\TTTKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEHHHKKKMMMPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggiiilllnnnppprrrtttvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȿ}}}uuulllddd[[[SSSJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEEEGGGJJJMMMOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjlllnnnppprrruuuwwwwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUǿ|||tttkkkccc[[[RRRJJJUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDGGGIIILLLOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmoooqqqsssuuuwwwyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUƾ|||ssskkkbbbZZZQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFIIIKKKNNNQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUooorrrtttvvvxxxzzz|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~Ž{{{rrrjjjbbbYYYQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFHHHKKKMMMPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrtttvvvxxx{{{}}}|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwļzzzrrriiiaaaXXXPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHHHJJJMMMOOORRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuwwwyyy{{{}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUĻyyyqqqhhh```XXXOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGJJJLLLOOOQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxzzz|||~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyy~~~ûyyyppphhh___WWWNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUIIILLLNNNQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzz|||~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrwww}}}xxxoooggg___VVVNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKKKNNNPPPSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkqqqvvv|||wwwooofff^^^UUUMMMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKKKMMMPPPRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjpppuuu{{{vvvnnnfff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMMMOOORRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccciiinnntttzzz~~~vvvmmmeee\\\TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULLLOOOQQQTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\bbbhhhmmmsssyyy~~~}}}uuulllddd\\\SSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUNNNQQQSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[aaaggglllrrrxxx}}}|||tttlllccc[[[RRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTZZZ```eeekkkqqqvvv||||||ssskkkcccZZZRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOOORRRTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY___dddjjjpppuuu{{{{{{sssjjjbbbYYYQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOOOSSS]]]ccciiioootttzzzzzzrrriiiaaaYYYPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQSSSVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPTTTXXXbbbhhhmmmsssyyy~~~yyyqqqiii```XXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPTTTXXXaaaggglllrrrxxx}}}yyyppphhh```WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQQQUUUYYY\\\eeekkkqqqwww|||xxxpppggg___WWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY]]]aaajjjpppuuu{{{wwwooofff^^^VVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYY]]]aaaeeeoootttzzzvvvnnnfff]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU^^^bbbeeeiiisssyyy~~~~~~}}}|||vvvmmmeee]]]TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbfffjjjmmmrrrxxx}}}~~~}}}||||||{{{zzzyyyyyyxxxwwwvvvmmmddd\\\TTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffjjjnnnwww|||zzzyyyxxxxxxwwwvvvuuuuuutttsssrrrrrrlllddd[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXkkknnnrrr{{{UUUUUUUUUUUUUUUsssrrrqqqppppppooonnnmmmmmmlllcccZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\ooosssvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkkkkjjjiiihhhhhhgggfffZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```ssswww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUddddddcccbbbaaaYYYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccwww{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]]]\\\\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggg|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\\\kkkUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn\\\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___nnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggguuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhhUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUjjjyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvdddUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttbbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkkqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr```]]]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmmmsssyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppXXX^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUpppuuu{{{UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnYYY___UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrxxx}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllZZZ```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjj[[[aaaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww}}}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhh\\\bbbUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfff]]]cccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvvvddd^^^ddd[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtttbbb___eeekkkUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaavvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrrr[[[```ffflllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUcccxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUppp\\\bbbgggmmmNNNUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeezzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnn]]]ccchhhnnnTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUggg|||UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lll^^^dddiiioooZZZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUiii~~~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjj___eeekkkppp```UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaajjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhh```ffflllqqqfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccclllUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfffaaagggmmmrrrlllLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddnnnUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwdddbbbhhhnnntttyyyRRRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffpppUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuu]]]ccciiiooouuuzzzXXXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhhhqqqUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsss^^^dddjjjpppvvv|||^^^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU```jjjsssUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqq___eeekkkqqqwww}}}dddEEEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUbbbkkkuuuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnnnaaaffflllrrrxxx~~~jjjKKKUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdddmmmwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~~~lllbbbgggmmmsssyyypppQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeoooxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|||jjjccchhhnnntttzzzvvvWWWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggqqqzzzUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzzhhhdddjjjooouuu{{{]]]===UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU___iiirrrUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUyyyfffeeekkkpppvvv|||cccCCCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaaakkktttUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwww```ffflllrrrwww}}}iiiIIIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccclllvvvUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuaaagggmmmsssxxx~~~oooOOOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeennnxxxUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssbbbhhhnnntttzzzuuuUUU666UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgggpppyyyUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqqccciiiooouuu{{{{{{[[[<< Date: Fri, 28 Jul 2017 14:33:44 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2598 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1624f24a6f87ac092e1761c9778741102fb37a3c --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/example/GIC.cpp | 19 ++- src/Nerve_GIC/example/GICvoronoi.cpp | 15 +-- src/Nerve_GIC/example/MapperDeltaCoord.cpp | 17 ++- src/Nerve_GIC/example/MapperDeltaFunc.cpp | 17 ++- src/Nerve_GIC/example/Nerve.cpp | 21 ++-- src/Nerve_GIC/include/gudhi/GIC.h | 146 +++++++++++++++--------- 7 files changed, 132 insertions(+), 105 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 7120ada3..8d807f4b 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -164,7 +164,7 @@ namespace graph_induced_complex { * where the graph G comes from a Rips complex with optimal threshold, * and the cover C comes from the preimages of intervals covering the first coordinate, * with optimal resolution and gain. Note that optimal threshold, resolution and gain - * also exist for the Nerve of this cover. + * can be computed as well for the Nerve. * * \include Nerve_GIC/MapperDeltaCoord.cpp * diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index aba0927d..6e5c5ca7 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -30,7 +30,7 @@ void usage(int nbArgs, char * const progName) { } int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, (argv[0] - 1)); + if ((argc != 6) && (argc != 7)) usage(argc, argv[0]); using Point = std::vector; @@ -58,33 +58,30 @@ int main(int argc, char **argv) { GIC.set_graph_from_rips(threshold, Gudhi::Euclidean_distance()); - GIC.set_resolution_double(resolution); GIC.set_gain(gain); - GIC.set_cover_from_function(1); + GIC.set_resolution_with_interval_length(resolution); GIC.set_gain(gain); + GIC.set_cover_from_function(); GIC.find_GIC_simplices(); - GIC.plot_txt(); + GIC.plot_TXT_for_KeplerMapper(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- if(verb){ - output_stream << "Graph induced complex is of dimension " << stree.dimension() << + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on graph induced complex simplices" << std::endl; + std::cout << "Iterator on graph induced complex simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + std::cout << vertex << " "; } - output_stream << std::endl; + std::cout << std::endl; } } } diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp index 013d6290..2c4f5acf 100644 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -30,7 +30,7 @@ void usage(int nbArgs, char * const progName) { } int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); using Point = std::vector; @@ -52,7 +52,7 @@ int main(int argc, char **argv) { GIC.set_color_from_coordinate(); - GIC.set_graph_from_OFF(off_file_name); + GIC.set_graph_from_OFF(); GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),m); @@ -62,24 +62,21 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- if(verb){ - output_stream << "Graph induced complex is of dimension " << stree.dimension() << + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on graph induced complex simplices" << std::endl; + std::cout << "Iterator on graph induced complex simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + std::cout << vertex << " "; } - output_stream << std::endl; + std::cout << std::endl; } } } diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index 9927f762..382649e8 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -30,7 +30,7 @@ void usage(int nbArgs, char * const progName) { } int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); using Point = std::vector; @@ -56,32 +56,29 @@ int main(int argc, char **argv) { GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(1); + GIC.set_cover_from_function(); GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_pdf(); + GIC.plot_DOT_for_neato(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - // ------------------------------------------ // Display information about the Mapper Delta // ------------------------------------------ if(verb){ - output_stream << "Mapper Delta is of dimension " << stree.dimension() << + std::cout << "Mapper Delta is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Mapper Delta simplices" << std::endl; + std::cout << "Iterator on Mapper Delta simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + std::cout << vertex << " "; } - output_stream << std::endl; + std::cout << std::endl; } } } diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index f3d57d2f..586b733c 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -30,7 +30,7 @@ void usage(int nbArgs, char * const progName) { } int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, (argv[0] - 1)); + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); using Point = std::vector; @@ -56,32 +56,29 @@ int main(int argc, char **argv) { GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(1); + GIC.set_cover_from_function(); GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - GIC.plot_pdf(); + GIC.plot_DOT_for_neato(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - // ------------------------------------------ // Display information about the Mapper Delta // ------------------------------------------ if(verb){ - output_stream << "Mapper Delta is of dimension " << stree.dimension() << + std::cout << "Mapper Delta is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Mapper Delta simplices" << std::endl; + std::cout << "Iterator on Mapper Delta simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + std::cout << vertex << " "; } - output_stream << std::endl; + std::cout << std::endl; } } } diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index 10c5ba3b..e47982c4 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -30,7 +30,7 @@ void usage(int nbArgs, char * const progName) { } int main(int argc, char **argv) { - if ((argc != 5) && (argc != 6)) usage(argc, (argv[0] - 1)); + if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); using Point = std::vector; @@ -55,35 +55,32 @@ int main(int argc, char **argv) { GIC.set_color_from_coordinate(coord); GIC.set_function_from_coordinate(coord); - GIC.set_graph_from_OFF(off_file_name); + GIC.set_graph_from_OFF(); - GIC.set_resolution_int(resolution); GIC.set_gain(gain); - GIC.set_cover_from_function(0); + GIC.set_resolution_with_interval_number(resolution); GIC.set_gain(gain); + GIC.set_cover_from_function(); GIC.find_Nerve_simplices(); - GIC.plot_txt(); + GIC.plot_TXT_for_KeplerMapper(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - std::streambuf* streambufffer = std::cout.rdbuf(); - std::ostream output_stream(streambufffer); - // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- if(verb){ - output_stream << "Nerve is of dimension " << stree.dimension() << + std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - output_stream << "Iterator on Nerve simplices" << std::endl; + std::cout << "Iterator on Nerve simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - output_stream << vertex << " "; + std::cout << vertex << " "; } - output_stream << std::endl; + std::cout << std::endl; } } } diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 42225c47..f00856ed 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -77,6 +77,7 @@ class Graph_induced_complex { //Graph_induced_complex(std::map fun){func = fun;} bool verbose; // whether to display information. std::vector point_cloud; + std::vector > one_skeleton; typedef int Cover_t; // elements of cover C are indexed by integers. std::vector > simplices; std::map > cover; @@ -88,9 +89,9 @@ class Graph_induced_complex { Simplex_tree st; std::map > adjacency_matrix; std::vector > distances; - int resolution_int; - double resolution_double; - double gain; + int resolution_int = -1; + double resolution_double = -1; + double gain = -1; double rate_constant; // Constant in the subsampling. double rate_power; // Power in the subsampling. int mask; // Ignore nodes containing less than mask points. @@ -152,23 +153,62 @@ class Graph_induced_complex { } public: + /** \brief Specifies whether the program should display information or not. + * + * @param[in] verb boolean (true = display info, false = do not display info). + * + */ void set_verbose(bool verb = 0){verbose = verb;} public: + /** \brief Sets the constants used to subsample the data set. These constants are + * explained in "Statistical Analysis and Parameter Selection for the Mapper". + * + * @param[in] constant double. + * @param[in] power double. + * + */ void set_subsampling(double constant = 10, double power = 0.001){rate_constant = constant; rate_power = power;} public: + /** \brief Sets the mask, which is a threshold integer such that nodes in the complex that contain less data points + * than this threshold are not displayed. + * + * @param[in] nodemask integer. + * + */ void set_mask(int nodemask = 0){mask = nodemask;} public: + /** \brief Reads and stores the input point cloud. + * + * @param[in] off_file_name name of the input .OFF file. + * + */ bool read_point_cloud(std::string off_file_name){ - Gudhi::Points_off_reader off_reader = Points_off_reader(off_file_name); - bool check = off_reader.is_valid(); - if(check){ - point_cloud = off_reader.get_point_cloud(); - point_cloud_name = off_file_name; - n = point_cloud.size(); - data_dimension = point_cloud[0].size(); - return check; - } else return check; + point_cloud_name = off_file_name; + int numedges, numfaces, i, num; std::vector edge(2); + std::vector simplex; + std::ifstream input(off_file_name); std::string line; getline(input, line); + input >> n; input >> numfaces; input >> numedges; getline(input, line); + + i = 0; while(i < n){ + getline(input, line); + std::vector point; std::istringstream iss(line); + point.assign(std::istream_iterator(iss), std::istream_iterator()); + point_cloud.push_back(Point(point.begin(),point.end())); i++; + } data_dimension = point_cloud[0].size(); + + i = 0; while(i < numfaces){ + simplex.clear(); input >> num; + for(int j = 0; j < num; j++){int k; input >> k; simplex.push_back(k);} + for(int j = 0; j < num; j++){ + for(int k = j+1; k < num; k++){ + edge[0] = simplex[j]; edge[1] = simplex[k]; one_skeleton.push_back(edge); + } + } + i++; + } + + return input.is_open(); } // ******************************************************************************************************************* @@ -197,29 +237,17 @@ class Graph_induced_complex { } public: // Set graph from OFF file. - /** \brief Creates the graph G from the triangulation given by an .OFF file. - * - * @param[in] off_file_name name of the input .OFF file. + /** \brief Creates the graph G from the triangulation given by the input .OFF file. * */ - void set_graph_from_OFF(std::string off_file_name){ - int numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; - std::ifstream input(off_file_name); std::string line; getline(input, line); - input >> n; input >> numfaces; input >> numedges; - i = 0; while(i < n){input >> x; input >> x; input >> x; i++;} - i = 0; while(i < numfaces){ - simplex.clear(); input >> num; - for(int j = 0; j < num; j++){int k; input >> k; simplex.push_back(k);} - for(int j = 0; j < num; j++){ - for(int k = j+1; k < num; k++){ - edge[0] = simplex[j]; edge[1] = simplex[k]; - st.insert_simplex_and_subfaces(edge); - } - } - i++; - } + void set_graph_from_OFF(){ - fill_adjacency_matrix_from_st(); + int num_edges = one_skeleton.size(); + if(num_edges > 0){ + for(int i = 0; i < num_edges; i++) st.insert_simplex_and_subfaces(one_skeleton[i]); + fill_adjacency_matrix_from_st(); + } + else std::cout << "No triangulation read in OFF file!" << std::endl; } @@ -378,13 +406,13 @@ class Graph_induced_complex { * @param[in] reso length of intervals. * */ - void set_resolution_double(double reso){resolution_double = reso;} + void set_resolution_with_interval_length(double reso){resolution_double = reso;} /** \brief Sets a number of intervals from a value stored in memory. * * @param[in] reso number of intervals. * */ - void set_resolution_int(int reso){resolution_int = reso;} + void set_resolution_with_interval_number(int reso){resolution_int = reso;} /** \brief Sets a gain from a value stored in memory (default value 0.3). * * @param[in] g gain. @@ -410,11 +438,12 @@ class Graph_induced_complex { public: // Set cover with preimages of function. /** \brief Creates a cover C from the preimages of the function f. - * - * @param[in] token boolean specifying whether we use the length or the number of intervals for the cover of im(f). * */ - void set_cover_from_function(bool token){ + void set_cover_from_function(){ + + if(resolution_double == -1 && resolution_int == -1){ std::cout << "Number and/or length of intervals not specified" << std::endl; return; } + if(gain == -1){ std::cout << "Gain not specified" << std::endl; return; } // Read function values and compute min and max std::map::iterator it; @@ -425,7 +454,7 @@ class Graph_induced_complex { // Compute cover of im(f) std::vector > intervals; int res; - if(!token){ // Case we use an integer for the number of intervals. + if(resolution_double == -1){ // Case we use an integer for the number of intervals. double incr = (maxf-minf)/resolution_int; double x = minf; double alpha = (incr*gain)/(2-2*gain); double y = minf + incr + alpha; std::pair interm(x,y); intervals.push_back(interm); for(int i = 1; i < resolution_int-1; i++){ @@ -439,16 +468,30 @@ class Graph_induced_complex { for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } - else{ // Case we use a double for the length of the intervals. - double x = minf; double y = x + resolution_double; - while(y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ - std::pair inter(x,y); intervals.push_back(inter); - x = y - gain*resolution_double; - y = x + resolution_double; + else{ + if(resolution_int == -1){ // Case we use a double for the length of the intervals. + double x = minf; double y = x + resolution_double; + while(y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ + std::pair inter(x,y); intervals.push_back(inter); + x = y - gain*resolution_double; + y = x + resolution_double; + } + std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); + if(verbose) + for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; + } + + else{ // Case we use an integer and a double for the length of the intervals. + double x = minf; double y = x + resolution_double; int count = 0; + while(count < resolution_int && y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ + std::pair inter(x,y); intervals.push_back(inter); count++; + x = y - gain*resolution_double; + y = x + resolution_double; + } + res = intervals.size(); + if(verbose) + for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } - std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); - if(verbose) - for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } // Sort points according to function values @@ -624,7 +667,6 @@ class Graph_induced_complex { /** \brief Computes the function used to color the nodes of the simplicial complex from the k-th coordinate. * * @param[in] k coordinate to use (start at 0). - * @param[in] off_file_name name of the input .OFF file. * */ void set_color_from_coordinate(int k = 0){ @@ -643,10 +685,10 @@ class Graph_induced_complex { } public: // Create a .dot file that can be compiled with neato to produce a .pdf file. - /** \brief Creates a .dot file for neato once the simplicial complex is computed to get a nice visualization + /** \brief Creates a .dot file for neato (part of the graphviz package) once the simplicial complex is computed to get a visualization * of its 1-skeleton in a .pdf file. */ - void plot_pdf(){ + void plot_DOT_for_neato(){ char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ @@ -672,10 +714,10 @@ class Graph_induced_complex { } public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file. - /** \brief Creates a .txt file for KeplerMapper once the simplicial complex is computed to get a nice visualization + /** \brief Creates a .txt file for KeplerMapper once the simplicial complex is computed to get a visualization * of its 1-skeleton in browser. */ - void plot_txt(){ + void plot_TXT_for_KeplerMapper(){ int num_simplices = simplices.size(); int num_edges = 0; char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); -- cgit v1.2.3 From be30f17d2ea337995215eedbcc831de0236c5e35 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 18 Sep 2017 15:46:22 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2683 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cacaa8d543cb35bfd709092262809deb102230d5 --- data/points/KleinBottle5D.off | 3 ++- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/include/gudhi/GIC.h | 31 ++++++++++++++----------- 3 files changed, 20 insertions(+), 16 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/data/points/KleinBottle5D.off b/data/points/KleinBottle5D.off index ea5c3fa3..b578593c 100755 --- a/data/points/KleinBottle5D.off +++ b/data/points/KleinBottle5D.off @@ -1,4 +1,5 @@ -OFF +nOFF +5 15876 0 0 3 0 0 0 1 3.05 0 0.09983 0 0.9988 diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 8d807f4b..c3930d1e 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -83,7 +83,7 @@ namespace graph_induced_complex { * Finally, the next ne lines represent the edges, characterized by the ID of their vertices. * Using e.g. * - * \code $> python visu.py && firefox SC.html + * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html * \endcode * * one can obtain the following visualization: diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index f00856ed..384bbc8c 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -142,7 +142,7 @@ class Graph_induced_complex { private: void fill_adjacency_matrix_from_st(){ std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for(int i = 0; i < n; i++) adjacency_matrix[i] = empty; for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; @@ -188,6 +188,7 @@ class Graph_induced_complex { int numedges, numfaces, i, num; std::vector edge(2); std::vector simplex; std::ifstream input(off_file_name); std::string line; getline(input, line); + if(std::strcmp((char*) line.c_str(),"nOFF")==0) input >> data_dimension; else data_dimension = 3; input >> n; input >> numfaces; input >> numedges; getline(input, line); i = 0; while(i < n){ @@ -195,7 +196,7 @@ class Graph_induced_complex { std::vector point; std::istringstream iss(line); point.assign(std::istream_iterator(iss), std::istream_iterator()); point_cloud.push_back(Point(point.begin(),point.end())); i++; - } data_dimension = point_cloud[0].size(); + } i = 0; while(i < numfaces){ simplex.clear(); input >> num; @@ -304,10 +305,10 @@ class Graph_induced_complex { public: // Automatic tuning of Rips complex. /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling. * - * @param[in] N number of subsampling iteration (default value 100). + * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). * */ - template void set_graph_from_automatic_rips(Distance distance, int N = 100){ + template double set_graph_from_automatic_rips(Distance distance, int N = 100){ int m = floor(n/ std::exp((1+rate_power)*std::log(std::log(n)/std::log(rate_constant))) ); m = std::min(m,n-1); @@ -336,6 +337,8 @@ class Graph_induced_complex { rips_complex_from_points.create_complex(st, 1); fill_adjacency_matrix_from_st(); + return delta; + } @@ -511,20 +514,20 @@ class Graph_induced_complex { if(i != 0){ std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } } std::pair inter2 = intervals[i+1]; while(func[points[tmp]] < inter2.first && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } pos = tmp; while(func[points[tmp]] < inter1.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } @@ -534,12 +537,12 @@ class Graph_induced_complex { std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } while(tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } @@ -548,7 +551,7 @@ class Graph_induced_complex { // Compute the connected components with DFS std::map visit; if(verbose) std::cout << "Preimage of interval " << i << std::endl; for(std::map >::iterator it = prop.begin(); it != prop.end(); it++) - visit.insert(std::pair(it->first, false)); + visit[it->first] = false; if (!(prop.empty())){ for(std::map >::iterator it = prop.begin(); it != prop.end(); it++){ if ( !(visit[it->first]) ){ @@ -785,10 +788,10 @@ class Graph_induced_complex { */ template void create_complex(SimplicialComplexForGIC & complex) { - size_t sz = simplices.size(); unsigned int dimension = 0; - for(unsigned int i = 0; i < sz; i++){ - complex.insert_simplex_and_subfaces(simplices[i]); - if(dimension < simplices[i].size()-1) dimension = simplices[i].size()-1; + unsigned int dimension = 0; + for(auto const& simplex : simplices){ + complex.insert_simplex_and_subfaces(simplex); + if(dimension < simplex.size()-1) dimension = simplex.size()-1; } complex.set_dimension(dimension); } -- cgit v1.2.3 From 304012f82e02a5727f604b2907070b4661a9ed18 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 19 Sep 2017 11:28:26 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2685 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 67dbe745f209891bd76978382bf114f63e3a1c83 --- src/Nerve_GIC/doc/GIC.jpg | Bin 0 -> 457905 bytes src/Nerve_GIC/doc/GIC.pdf | Bin 0 -> 26073 bytes src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/doc/gic_complex.png | Bin 56761 -> 0 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/Nerve_GIC/doc/GIC.jpg create mode 100644 src/Nerve_GIC/doc/GIC.pdf delete mode 100644 src/Nerve_GIC/doc/gic_complex.png (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/GIC.jpg b/src/Nerve_GIC/doc/GIC.jpg new file mode 100644 index 00000000..cb1b9b7f Binary files /dev/null and b/src/Nerve_GIC/doc/GIC.jpg differ diff --git a/src/Nerve_GIC/doc/GIC.pdf b/src/Nerve_GIC/doc/GIC.pdf new file mode 100644 index 00000000..30525745 Binary files /dev/null and b/src/Nerve_GIC/doc/GIC.pdf differ diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index c3930d1e..89b7a1b4 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -101,7 +101,7 @@ namespace graph_induced_complex { * See this article * for more details. * - * \image html "gic_complex.png" "GIC of a point cloud. Courtesy of Tamal Dey." + * \image html "GIC.jpg" "GIC of a point cloud." * * \subsection gicexample Example with cover from function * diff --git a/src/Nerve_GIC/doc/gic_complex.png b/src/Nerve_GIC/doc/gic_complex.png deleted file mode 100644 index fb4b20ad..00000000 Binary files a/src/Nerve_GIC/doc/gic_complex.png and /dev/null differ -- cgit v1.2.3 From fe381d1ffe037028a9704966ec26d19894f4f5b1 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 9 Oct 2017 16:48:40 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2771 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cd87a5b72b67d27b21f765fac822ea69f9496019 --- biblio/bibliography.bib | 24 +++ data/points/human.off | 2 +- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 96 +++++------ src/Nerve_GIC/doc/coordGICvisu.pdf | Bin 0 -> 20745 bytes src/Nerve_GIC/doc/coordGICvisu2.jpg | Bin 0 -> 1259868 bytes src/Nerve_GIC/doc/funcGICvisu.jpg | Bin 0 -> 71647 bytes src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf | Bin 20745 -> 0 bytes src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg | Bin 1259868 -> 0 bytes src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg | Bin 71647 -> 0 bytes src/Nerve_GIC/example/CMakeLists.txt | 24 ++- src/Nerve_GIC/example/CoordGIC.cpp | 87 ++++++++++ src/Nerve_GIC/example/FuncGIC.cpp | 87 ++++++++++ src/Nerve_GIC/example/GIC.cpp | 4 +- src/Nerve_GIC/example/GICvoronoi.cpp | 85 ---------- src/Nerve_GIC/example/MapperDeltaCoord.cpp | 87 ---------- src/Nerve_GIC/example/MapperDeltaFunc.cpp | 87 ---------- src/Nerve_GIC/example/Nerve.cpp | 7 +- src/Nerve_GIC/example/VoronoiGIC.cpp | 86 ++++++++++ src/Nerve_GIC/include/gudhi/GIC.h | 209 +++++++++++++----------- src/Nerve_GIC/test/test_GIC.cpp | 14 +- 20 files changed, 474 insertions(+), 425 deletions(-) create mode 100644 src/Nerve_GIC/doc/coordGICvisu.pdf create mode 100644 src/Nerve_GIC/doc/coordGICvisu2.jpg create mode 100644 src/Nerve_GIC/doc/funcGICvisu.jpg delete mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf delete mode 100644 src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg delete mode 100644 src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg create mode 100644 src/Nerve_GIC/example/CoordGIC.cpp create mode 100644 src/Nerve_GIC/example/FuncGIC.cpp delete mode 100644 src/Nerve_GIC/example/GICvoronoi.cpp delete mode 100644 src/Nerve_GIC/example/MapperDeltaCoord.cpp delete mode 100644 src/Nerve_GIC/example/MapperDeltaFunc.cpp create mode 100644 src/Nerve_GIC/example/VoronoiGIC.cpp (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/biblio/bibliography.bib b/biblio/bibliography.bib index 29fc5650..1bf5d19d 100644 --- a/biblio/bibliography.bib +++ b/biblio/bibliography.bib @@ -6,6 +6,30 @@ year = {2014}, } +@article{Carriere17c, + author = {Carri\`ere, Mathieu and Michel, Bertrand and Oudot, Steve}, + title = {{Statistical Analysis and Parameter Selection for Mapper}}, + journal = {CoRR}, + volume = {abs/1706.00204}, + year = {2017} +} + +@inproceedings{Dey13, + author = {Dey, Tamal and Fan, Fengtao and Wang, Yusu}, + title = {Graph Induced Complex on Point Data}, + booktitle = {Proceedings of the Twenty-ninth Annual Symposium on Computational Geometry}, + year = {2013}, + pages = {107--116}, +} + +@article{Carriere16, + title={{Structure and Stability of the 1-Dimensional Mapper}}, + author={Carri\`ere, Mathieu and Oudot, Steve}, + journal={CoRR}, + volume= {abs/1511.05823}, + year={2015} +} + @inproceedings{zigzag_reflection, author = {Jean-Daniel Boissonnat and Cl\'ement Maria and Steve Oudot}, title = {Zigzag Persistent Homology Algorithm via Reflections}, diff --git a/data/points/human.off b/data/points/human.off index de6c925f..f9f79a3f 100755 --- a/data/points/human.off +++ b/data/points/human.off @@ -8,7 +8,7 @@ OFF 0.128166 -0.068572 0.432762 0.089198 0.014048 -0.447694 0.075569 0.021145 -0.417112 -0.098403 0.03188 -0.416332 + 0.098403 0.03188 -0.416332 -0.135518 -0.031058 -0.793657 -0.155207 -0.043962 -0.867084 -0.155561 -0.039537 -0.782486 diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 89b7a1b4..339c1284 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -34,9 +34,10 @@ namespace graph_induced_complex { * @{ * * Visualizations of the simplicial complexes can be done with either - * neato (from graphviz ), - * geomview , or - * python + firefox . + * neato (from graphviz), + * geomview, + * KeplerMapper. + * Input point clouds are assumed to be OFF files. * * \section covers Covers * @@ -75,20 +76,15 @@ namespace graph_induced_complex { * * \include Nerve_GIC/Nerve.txt * - * The program also writes a file SC.txt. - * The first three lines in this file are requirements for visualization with Kepler-Mapper. + * The program also writes a file SC.txt. The first three lines in this file are the location of the input point cloud and the function used to compute the cover. * The fourth line contains the number of vertices nv and edges ne of the Nerve. * The next nv lines represent the vertices. Each line contains the vertex ID, * the number of data points it contains, and their average color function value. * Finally, the next ne lines represent the edges, characterized by the ID of their vertices. - * Using e.g. * - * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html - * \endcode - * - * one can obtain the following visualization: + * Using KeplerMapper, one can obtain the following visualization: * - * \image html "nervevisu.jpg" "Visualization with Kepler Mapper" + * \image html "nervevisu.jpg" "Visualization with KeplerMapper" * * \section gic Graph Induced Complexes (GIC) * @@ -98,31 +94,10 @@ namespace graph_induced_complex { * you are also given a graph G built on top of P. Then, for any clique in G * whose nodes all belong to different elements of C, the GIC includes a corresponding * simplex, whose dimension is the number of nodes in the clique minus one. - * See this article - * for more details. + * See \cite Dey13 for more details. * * \image html "GIC.jpg" "GIC of a point cloud." * - * \subsection gicexample Example with cover from function - * - * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). - * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) - * covering the height function (coordinate 2), - * and the graph G comes from a Rips complex built with threshold 0.075. - * Note that if the gain is too big, the number of cliques increases a lot, - * which make the computation time much larger. - * - * \include Nerve_GIC/GIC.cpp - * - * When launching: - * - * \code $> ./GIC ../../../../data/points/human.off 0.075 2 0.075 0 --v - * \endcode - * - * the program outputs SC.txt, which can be visualized with python and firefox as before: - * - * \image html "gicvisu.jpg" "Visualization with Kepler Mapper" - * * \subsection gicexamplevor Example with cover from Voronoï * * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). @@ -132,11 +107,11 @@ namespace graph_induced_complex { * comes from the triangulation of the human shape. Note that the resulting simplicial complex is in dimension 3 * in this example. * - * \include Nerve_GIC/GICvoronoi.cpp + * \include Nerve_GIC/VoronoiGIC.cpp * * When launching: * - * \code $> ./GICvoronoi ../../../../data/points/human.off 700 --v + * \code $> ./VoronoiGIC ../../../../data/points/human.off 700 --v * \endcode * * the program outputs SC.off. Using e.g. @@ -148,29 +123,28 @@ namespace graph_induced_complex { * * \image html "gicvoronoivisu.jpg" "Visualization with Geomview" * - * \subsection mapperdeltadefinition Mapper Delta + * \subsection functionalGICdefinition Functional GIC * * If one restricts to the cliques in G whose nodes all belong to preimages of consecutive * intervals (assuming the cover of the height function is minimal, i.e. no more than * two intervals can intersect at a time), the GIC is of dimension one, i.e. a graph. - * We call this graph the Mapper Delta, since it is related to the usual Mapper. See - * this article for more details. + * We call this graph the functional GIC. See \cite Carriere16 for more details. * - * \subsection mapperdeltaexample Example + * \subsection functionalGICexample Example * - * Mapper Delta comes with optimal selection for the Rips threshold, + * Functional GIC comes with optimal selection for the Rips threshold, * the resolution and the gain of the function cover. In this example, - * we compute the Mapper Delta of a Klein bottle embedded in R^5, + * we compute the functional GIC of a Klein bottle embedded in R^5, * where the graph G comes from a Rips complex with optimal threshold, * and the cover C comes from the preimages of intervals covering the first coordinate, * with optimal resolution and gain. Note that optimal threshold, resolution and gain * can be computed as well for the Nerve. * - * \include Nerve_GIC/MapperDeltaCoord.cpp + * \include Nerve_GIC/CoordGIC.cpp * * When launching: * - * \code $> ./MapperDeltaCoord ../../../../data/points/KleinBottle5D.off 0 --v + * \code $> ./CoordGIC ../../../../data/points/KleinBottle5D.off 0 --v * \endcode * * the program outputs SC.dot. Using e.g. @@ -180,7 +154,7 @@ namespace graph_induced_complex { * * one can obtain the following visualization: * - * \image html "mapperdeltacoordvisu2.jpg" "Visualization with Neato" + * \image html "coordGICvisu2.jpg" "Visualization with Neato" * * where nodes are colored by the filter function values and, for each node, the first number is its ID * and the second is the number of data points that its contain. @@ -189,16 +163,16 @@ namespace graph_induced_complex { * The function is now the first eigenfunction given by PCA, whose values * are written in a file (lucky_cat_PCA1). Threshold, resolution and gain are automatically selected as before. * - * \include Nerve_GIC/MapperDeltaFunc.cpp + * \include Nerve_GIC/FuncGIC.cpp * * When launching: * - * \code $> ./MapperDeltaFunc ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v + * \code $> ./FuncGIC ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v * \endcode * * the program outputs again SC.dot which gives the following visualization after using neato: * - * \image html "mapperdeltafuncvisu.jpg" "Visualization with Neato" + * \image html "funcGICvisu.jpg" "Visualization with neato" * * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim @@ -210,3 +184,31 @@ namespace graph_induced_complex { } // namespace Gudhi #endif // DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ + + +/* * \subsection gicexample Example with cover from function + * + * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). + * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) + * covering the height function (coordinate 2), + * and the graph G comes from a Rips complex built with threshold 0.075. + * Note that if the gain is too big, the number of cliques increases a lot, + * which make the computation time much larger. + * + * \include Nerve_GIC/GIC.cpp + * + * When launching: + * + * \code $> ./GIC ../../../../data/points/human.off 0.075 2 0.075 0 --v + * \endcode + * + * the program outputs SC.txt, which can be visualized with python and firefox as before: + * + * \image html "gicvisu.jpg" "Visualization with KeplerMapper" + * */ + + +/* * Using e.g. + * + * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html + * \endcode */ diff --git a/src/Nerve_GIC/doc/coordGICvisu.pdf b/src/Nerve_GIC/doc/coordGICvisu.pdf new file mode 100644 index 00000000..313aa1b5 Binary files /dev/null and b/src/Nerve_GIC/doc/coordGICvisu.pdf differ diff --git a/src/Nerve_GIC/doc/coordGICvisu2.jpg b/src/Nerve_GIC/doc/coordGICvisu2.jpg new file mode 100644 index 00000000..046feb2a Binary files /dev/null and b/src/Nerve_GIC/doc/coordGICvisu2.jpg differ diff --git a/src/Nerve_GIC/doc/funcGICvisu.jpg b/src/Nerve_GIC/doc/funcGICvisu.jpg new file mode 100644 index 00000000..f3da45ac Binary files /dev/null and b/src/Nerve_GIC/doc/funcGICvisu.jpg differ diff --git a/src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf b/src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf deleted file mode 100644 index 313aa1b5..00000000 Binary files a/src/Nerve_GIC/doc/mapperdeltacoordvisu.pdf and /dev/null differ diff --git a/src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg b/src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg deleted file mode 100644 index 046feb2a..00000000 Binary files a/src/Nerve_GIC/doc/mapperdeltacoordvisu2.jpg and /dev/null differ diff --git a/src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg b/src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg deleted file mode 100644 index f3da45ac..00000000 Binary files a/src/Nerve_GIC/doc/mapperdeltafuncvisu.jpg and /dev/null differ diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index ea504c11..871e46a6 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -4,24 +4,20 @@ project(Nerve_GIC_examples) add_executable ( Nerve Nerve.cpp ) target_link_libraries(Nerve ${Boost_SYSTEM_LIBRARY}) -add_executable ( GIC GIC.cpp ) -target_link_libraries(GIC ${Boost_SYSTEM_LIBRARY}) +add_executable ( CoordGIC CoordGIC.cpp ) +target_link_libraries(CoordGIC ${Boost_SYSTEM_LIBRARY}) -add_executable ( MapperDeltaCoord MapperDeltaCoord.cpp ) -target_link_libraries(MapperDeltaCoord ${Boost_SYSTEM_LIBRARY}) +add_executable ( FuncGIC FuncGIC.cpp ) +target_link_libraries(FuncGIC ${Boost_SYSTEM_LIBRARY}) -add_executable ( MapperDeltaFunc MapperDeltaFunc.cpp ) -target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) +add_executable ( VoronoiGIC VoronoiGIC.cpp ) +target_link_libraries(VoronoiGIC ${Boost_SYSTEM_LIBRARY}) -add_executable ( GICvoronoi GICvoronoi.cpp ) -target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) - -file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) +#[[file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/)]] if (TBB_FOUND) target_link_libraries(Nerve ${TBB_LIBRARIES}) - target_link_libraries(GIC ${TBB_LIBRARIES}) - target_link_libraries(MapperDeltaCoord ${TBB_LIBRARIES}) - target_link_libraries(MapperDeltaFunc ${TBB_LIBRARIES}) - target_link_libraries(GICvoronoi ${TBB_LIBRARIES}) + target_link_libraries(CoordGIC ${TBB_LIBRARIES}) + target_link_libraries(FuncGIC ${TBB_LIBRARIES}) + target_link_libraries(VoronoiGIC ${TBB_LIBRARIES}) endif() \ No newline at end of file diff --git a/src/Nerve_GIC/example/CoordGIC.cpp b/src/Nerve_GIC/example/CoordGIC.cpp new file mode 100644 index 00000000..89b0f9a4 --- /dev/null +++ b/src/Nerve_GIC/example/CoordGIC.cpp @@ -0,0 +1,87 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off coordinate [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int coord = atoi(argv[2]); + bool verb = 0; if(argc == 4) verb = 1; + + // ----------------------------------------- + // Init of a functional GIC from an OFF file + // ----------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ + + GIC.set_color_from_coordinate(coord); + GIC.set_function_from_coordinate(coord); + + GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); + + GIC.set_automatic_resolution_for_GIC(); GIC.set_gain(); + GIC.set_cover_from_function(); + + GIC.find_GIC_simplices_with_functional_minimal_cover(); + + GIC.plot_DOT(); + + Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + + // -------------------------------------------- + // Display information about the functional GIC + // -------------------------------------------- + + if(verb){ + std::cout << "Functional GIC is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on functional GIC simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/example/FuncGIC.cpp b/src/Nerve_GIC/example/FuncGIC.cpp new file mode 100644 index 00000000..56c97b7f --- /dev/null +++ b/src/Nerve_GIC/example/FuncGIC.cpp @@ -0,0 +1,87 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off function [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + std::string func_file_name = argv[2]; + bool verb = 0; if(argc == 4) verb = 1; + + // ----------------------------------------- + // Init of a functional GIC from an OFF file + // ----------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ + + GIC.set_color_from_file(func_file_name); + GIC.set_function_from_file(func_file_name); + + GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); + + GIC.set_automatic_resolution_for_GIC(); GIC.set_gain(); + GIC.set_cover_from_function(); + + GIC.find_GIC_simplices_with_functional_minimal_cover(); + + GIC.plot_DOT(); + + Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + + // -------------------------------------------- + // Display information about the functional GIC + // -------------------------------------------- + + if(verb){ + std::cout << "Functional GIC is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on functional GIC simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index 6e5c5ca7..b8b5cd05 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -46,7 +46,7 @@ int main(int argc, char **argv) { // ---------------------------------------------------------------------------- Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); GIC.set_mask(); + GIC.set_verbose(verb); bool check = GIC.read_point_cloud(off_file_name); @@ -65,7 +65,7 @@ int main(int argc, char **argv) { GIC.plot_TXT_for_KeplerMapper(); - Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); // ---------------------------------------------------------------------------- // Display information about the graph induced complex diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp deleted file mode 100644 index 2c4f5acf..00000000 --- a/src/Nerve_GIC/example/GICvoronoi.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA Saclay (France) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -void usage(int nbArgs, char * const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 100 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int m = atoi(argv[2]); - bool verb = 0; if(argc == 4) verb = 1; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); GIC.set_mask(); - - bool check = GIC.read_point_cloud(off_file_name); - - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - - GIC.set_color_from_coordinate(); - - GIC.set_graph_from_OFF(); - - GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),m); - - GIC.find_GIC_simplices(); - - GIC.plot_OFF(); - - Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if(verb){ - std::cout << "Graph induced complex is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp deleted file mode 100644 index 382649e8..00000000 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA Saclay (France) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -void usage(int nbArgs, char * const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int coord = atoi(argv[2]); - bool verb = 0; if(argc == 4) verb = 1; - - // --------------------------------------- - // Init of a Mapper Delta from an OFF file - // --------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); GIC.set_mask(); GIC.set_subsampling(); - - bool check = GIC.read_point_cloud(off_file_name); - - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); - - GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); - - GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(); - - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - - GIC.plot_DOT_for_neato(); - - Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - - // ------------------------------------------ - // Display information about the Mapper Delta - // ------------------------------------------ - - if(verb){ - std::cout << "Mapper Delta is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on Mapper Delta simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp deleted file mode 100644 index 586b733c..00000000 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA Saclay (France) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -void usage(int nbArgs, char * const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off function [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - std::string func_file_name = argv[2]; - bool verb = 0; if(argc == 4) verb = 1; - - // --------------------------------------- - // Init of a Mapper Delta from an OFF file - // --------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); GIC.set_mask(); GIC.set_subsampling(); - - bool check = GIC.read_point_cloud(off_file_name); - - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - - GIC.set_color_from_file(func_file_name); - GIC.set_function_from_file(func_file_name); - - GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); - - GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); - GIC.set_cover_from_function(); - - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); - - GIC.plot_DOT_for_neato(); - - Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); - - // ------------------------------------------ - // Display information about the Mapper Delta - // ------------------------------------------ - - if(verb){ - std::cout << "Mapper Delta is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on Mapper Delta simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index e47982c4..e863b48b 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -39,13 +39,14 @@ int main(int argc, char **argv) { int resolution = atoi(argv[3]); double gain = atof(argv[4]); bool verb = 0; if(argc == 6) verb = 1; + //int mask = 0; // -------------------------------- // Init of a Nerve from an OFF file // -------------------------------- Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); GIC.set_mask(); + GIC.set_verbose(verb); bool check = GIC.read_point_cloud(off_file_name); @@ -62,9 +63,9 @@ int main(int argc, char **argv) { GIC.find_Nerve_simplices(); - GIC.plot_TXT_for_KeplerMapper(); + GIC.plot_TXT(); - Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); // ---------------------------------------------------------------------------- // Display information about the graph induced complex diff --git a/src/Nerve_GIC/example/VoronoiGIC.cpp b/src/Nerve_GIC/example/VoronoiGIC.cpp new file mode 100644 index 00000000..f000c263 --- /dev/null +++ b/src/Nerve_GIC/example/VoronoiGIC.cpp @@ -0,0 +1,86 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 100 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int m = atoi(argv[2]); + bool verb = 0; if(argc == 4) verb = 1; + //int mask = 0; + + // ---------------------------------------------------------------------------- + // Init of a graph induced complex from an OFF file + // ---------------------------------------------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + bool check = GIC.read_point_cloud(off_file_name); + + if(!check) std::cout << "Incorrect OFF file." << std::endl; + else{ + + GIC.set_color_from_coordinate(); + + GIC.set_graph_from_OFF(); + + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),m); + + GIC.find_GIC_simplices(); + + GIC.plot_OFF(); + + Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if(verb){ + std::cout << "Graph induced complex is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 384bbc8c..bacaf0b9 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -92,9 +92,9 @@ class Graph_induced_complex { int resolution_int = -1; double resolution_double = -1; double gain = -1; - double rate_constant; // Constant in the subsampling. - double rate_power; // Power in the subsampling. - int mask; // Ignore nodes containing less than mask points. + double rate_constant = 10; // Constant in the subsampling. + double rate_power = 0.001; // Power in the subsampling. + int mask = 0; // Ignore nodes containing less than mask points. std::map func; std::map func_color; std::vector voronoi_subsamples; @@ -112,7 +112,7 @@ class Graph_induced_complex { // DFS private: void dfs(std::map >& G, int p, std::vector& cc, std::map& visit){ - cc.push_back(p); + cc.emplace_back(p); visit[p] = true; int neighb = G[p].size(); for (int i = 0; i < neighb; i++) if ( visit.find(G[p][i]) != visit.end() ) @@ -129,11 +129,10 @@ class Graph_induced_complex { // Subsample points. void SampleWithoutReplacement(int populationSize, int sampleSize, std::vector & samples){ - int& n = sampleSize; int& N = populationSize; int t = 0; int m = 0; double u; - while (m < n){ + while (m < sampleSize){ u = GetUniform(); - if ( (N - t)*u >= n - m ) + if ( (populationSize - t)*u >= sampleSize - m ) t++; else{samples[m] = t; t++; m++;} } @@ -146,8 +145,8 @@ class Graph_induced_complex { for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.emplace_back(vertex); + adjacency_matrix[vertices[0]].emplace_back(vertices[1]); adjacency_matrix[vertices[1]].emplace_back(vertices[0]); } } } @@ -158,55 +157,67 @@ class Graph_induced_complex { * @param[in] verb boolean (true = display info, false = do not display info). * */ - void set_verbose(bool verb = 0){verbose = verb;} + void set_verbose(bool verb = false){verbose = verb;} + public: /** \brief Sets the constants used to subsample the data set. These constants are - * explained in "Statistical Analysis and Parameter Selection for the Mapper". + * explained in \cite Carriere17c. * * @param[in] constant double. * @param[in] power double. * */ - void set_subsampling(double constant = 10, double power = 0.001){rate_constant = constant; rate_power = power;} + void set_subsampling(double constant, double power){rate_constant = constant; rate_power = power;} + public: - /** \brief Sets the mask, which is a threshold integer such that nodes in the complex that contain less data points - * than this threshold are not displayed. + /** \brief Sets the mask, which is a threshold integer such that nodes in the complex that contain a number of data points which is less than or equal to + * this threshold are not displayed. * * @param[in] nodemask integer. * */ - void set_mask(int nodemask = 0){mask = nodemask;} + void set_mask(int nodemask){mask = nodemask;} public: /** \brief Reads and stores the input point cloud. * - * @param[in] off_file_name name of the input .OFF file. + * @param[in] off_file_name name of the input .OFF or .nOFF file. * */ bool read_point_cloud(std::string off_file_name){ - point_cloud_name = off_file_name; - int numedges, numfaces, i, num; std::vector edge(2); - std::vector simplex; - std::ifstream input(off_file_name); std::string line; getline(input, line); - if(std::strcmp((char*) line.c_str(),"nOFF")==0) input >> data_dimension; else data_dimension = 3; - input >> n; input >> numfaces; input >> numedges; getline(input, line); + + point_cloud_name = off_file_name; std::ifstream input(off_file_name); std::string line; + + char comment = '#'; + while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} + if(std::strcmp((char*) line.c_str(),"nOFF")==0){ + comment = '#'; while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} + std::stringstream stream(line); stream >> data_dimension; + } + else data_dimension = 3; + + comment = '#'; int numedges, numfaces, i, num; + while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} + std::stringstream stream(line); stream >> n; stream >> numfaces; stream >> numedges; i = 0; while(i < n){ getline(input, line); - std::vector point; std::istringstream iss(line); - point.assign(std::istream_iterator(iss), std::istream_iterator()); - point_cloud.push_back(Point(point.begin(),point.end())); i++; + if(!line.empty() && line[line.find_first_not_of(' ')] != '#' && !std::all_of(line.begin(),line.end(),isspace)){ + std::vector point; std::istringstream iss(line); + point.assign(std::istream_iterator(iss), std::istream_iterator()); + point_cloud.emplace_back(Point(point.begin(),point.begin()+data_dimension)); i++; + } } i = 0; while(i < numfaces){ - simplex.clear(); input >> num; - for(int j = 0; j < num; j++){int k; input >> k; simplex.push_back(k);} - for(int j = 0; j < num; j++){ - for(int k = j+1; k < num; k++){ - edge[0] = simplex[j]; edge[1] = simplex[k]; one_skeleton.push_back(edge); - } + getline(input, line); + if(!line.empty() && line[line.find_first_not_of(' ')] != '#' && !std::all_of(line.begin(),line.end(),isspace)){ + std::vector simplex; std::istringstream iss(line); + simplex.assign(std::istream_iterator(iss), std::istream_iterator()); + num = simplex[0]; std::vector edge(2); + for(int j = 1; j <= num; j++){ for(int k = j+1; k <= num; k++){ edge[0] = simplex[j]; edge[1] = simplex[k]; one_skeleton.emplace_back(edge); } } + i++; } - i++; } return input.is_open(); @@ -256,6 +267,7 @@ class Graph_induced_complex { /** \brief Creates the graph G from a Rips complex. * * @param[in] threshold threshold value for the Rips complex. + * @param[in] distance distance used to compute the Rips complex. * */ template void set_graph_from_rips(double threshold, Distance distance){ @@ -271,7 +283,7 @@ class Graph_induced_complex { */ template void compute_pairwise_distances(Distance ref_distance){ - double d; std::vector zeros(n); for(int i = 0; i < n; i++) distances.push_back(zeros); + double d; std::vector zeros(n); for(int i = 0; i < n; i++) distances.emplace_back(zeros); std::string distance = point_cloud_name; distance.append("_dist"); std::ifstream input(distance.c_str(), std::ios::out | std::ios::binary); @@ -303,9 +315,11 @@ class Graph_induced_complex { } public: // Automatic tuning of Rips complex. - /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling. + /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling---see \cite Carriere17c. * - * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). + * @param[in] distance distance between data points. + * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). + * @param[out] delta threshold used for computing the Rips complex. * */ template double set_graph_from_automatic_rips(Distance distance, int N = 100){ @@ -380,27 +394,31 @@ class Graph_induced_complex { * */ void set_function_from_vector(std::vector function){ - for(int i = 0; i < n; i++) func.emplace(i, function[i]); + int index = 0; for(auto v : function){func.emplace(index, v); index++;} } // ******************************************************************************************************************* // Covers. // ******************************************************************************************************************* - public: // Automatic tuning of resolution for Mapper Delta. - /** \brief Computes the optimal length of intervals for a Mapper Delta. + public: // Automatic tuning of resolution for GIC. + /** \brief Computes the optimal length of intervals (i.e. the smallest interval length avoiding discretization artifacts---see \cite Carriere17c) for a GIC computed with a functional cover. + * + * @param[out] reso interval length used to compute the cover. + * */ - void set_automatic_resolution_for_GICMAP(){ + double set_automatic_resolution_for_GIC(){ double reso = 0; for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.emplace_back(vertex); reso = std::max(reso, std::abs(func[vertices[0]] - func[vertices[1]])); } } if(verbose) std::cout << "resolution = " << reso << std::endl; resolution_double = reso; + return reso; } public: @@ -423,20 +441,25 @@ class Graph_induced_complex { */ void set_gain(double g = 0.3){gain = g;} - public: // Automatic tuning of resolution for Mapper Point. - /** \brief Computes the optimal length of intervals for a standard Mapper. + public: // Automatic tuning of resolution for Nerve. + /** \brief Computes the optimal length of intervals (i.e. the smallest interval length avoiding discretization artifacts---see \cite Carriere17c) for a Nerve computed with a functional cover. + * + * @param[in] g gain. + * @param[out] reso interval length used to compute the cover. + * */ - void set_automatic_resolution_for_MAP(double gain){ + double set_automatic_resolution_for_Nerve(double gain){ double reso = 0; for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + for(auto vertex : st.simplex_vertex_range(simplex)) vertices.emplace_back(vertex); reso = std::max(reso, (std::abs(func[vertices[0]] - func[vertices[1]]))/gain); } } if(verbose) std::cout << "resolution = " << reso << std::endl; resolution_double = reso; + return reso; } public: // Set cover with preimages of function. @@ -459,14 +482,14 @@ class Graph_induced_complex { if(resolution_double == -1){ // Case we use an integer for the number of intervals. double incr = (maxf-minf)/resolution_int; double x = minf; double alpha = (incr*gain)/(2-2*gain); - double y = minf + incr + alpha; std::pair interm(x,y); intervals.push_back(interm); + double y = minf + incr + alpha; std::pair interm(x,y); intervals.emplace_back(interm); for(int i = 1; i < resolution_int-1; i++){ x = minf + i*incr - alpha; y = minf + (i+1)*incr + alpha; - std::pair inter(x,y); intervals.push_back(inter); + std::pair inter(x,y); intervals.emplace_back(inter); } x = minf + (resolution_int-1)*incr - alpha; y = maxf; - std::pair interM(x,y); intervals.push_back(interM); res = intervals.size(); + std::pair interM(x,y); intervals.emplace_back(interM); res = intervals.size(); if(verbose) for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } @@ -475,11 +498,11 @@ class Graph_induced_complex { if(resolution_int == -1){ // Case we use a double for the length of the intervals. double x = minf; double y = x + resolution_double; while(y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ - std::pair inter(x,y); intervals.push_back(inter); + std::pair inter(x,y); intervals.emplace_back(inter); x = y - gain*resolution_double; y = x + resolution_double; } - std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); + std::pair interM(x,maxf); intervals.emplace_back(interM); res = intervals.size(); if(verbose) for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } @@ -487,7 +510,7 @@ class Graph_induced_complex { else{ // Case we use an integer and a double for the length of the intervals. double x = minf; double y = x + resolution_double; int count = 0; while(count < resolution_int && y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ - std::pair inter(x,y); intervals.push_back(inter); count++; + std::pair inter(x,y); intervals.emplace_back(inter); count++; x = y - gain*resolution_double; y = x + resolution_double; } @@ -558,7 +581,7 @@ class Graph_induced_complex { std::vector cc; cc.clear(); dfs(prop,it->first,cc,visit); int cci = cc.size(); if(verbose) std::cout << "one CC with " << cci << " points, "; double average_col = 0; - for(int j = 0; j < cci; j++){cover[cc[j]].push_back(id); average_col += func_color[cc[j]]/cci;} + for(int j = 0; j < cci; j++){cover[cc[j]].emplace_back(id); average_col += func_color[cc[j]]/cci;} cover_fct[id] = i; cover_color[id] = std::pair(cci,average_col); id++; } @@ -584,7 +607,7 @@ class Graph_induced_complex { while(std::getline(input,line)){ cov_elts.clear(); std::stringstream stream(line); while(stream >> cov){ - cov_elts.push_back(cov); cov_number.push_back(cov); + cov_elts.emplace_back(cov); cov_number.emplace_back(cov); cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; } cover[vertex_id] = cov_elts; vertex_id++; @@ -599,6 +622,7 @@ class Graph_induced_complex { public: // Set cover from Voronoi /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. * + * @param[in] distance distance between the points. * @param[in] m number of points in the subsample. * */ @@ -636,7 +660,7 @@ class Graph_induced_complex { for(int j = 0; j < n; j++) if(mindist[j] > dist[j]){ mindist[j] = dist[j]; - if(cover[j].size() == 0) cover[j].push_back(i); + if(cover[j].size() == 0) cover[j].emplace_back(i); else cover[j][0] = i; } } @@ -688,11 +712,11 @@ class Graph_induced_complex { } public: // Create a .dot file that can be compiled with neato to produce a .pdf file. - /** \brief Creates a .dot file for neato (part of the graphviz package) once the simplicial complex is computed to get a visualization + /** \brief Creates a .dot file called SC.dot for neato (part of the graphviz package) once the simplicial complex is computed to get a visualization * of its 1-skeleton in a .pdf file. */ - void plot_DOT_for_neato(){ - char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph Mapper {" << std::endl; + void plot_DOT(){ + char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph GIC {" << std::endl; double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ maxv = std::max(maxv, iit->second.second); minv = std::min(minv, iit->second.second); @@ -700,7 +724,7 @@ class Graph_induced_complex { int k = 0; std::vector nodes; nodes.clear(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ if(iit->second.first > mask){ - nodes.push_back(iit->first); + nodes.emplace_back(iit->first); graphic << iit->first << "[shape=circle fontcolor=black color=black label=\"" \ << iit->first << ":" << iit->second.first << "\" style=filled fillcolor=\"" \ << (1-(maxv-iit->second.second)/(maxv-minv))*0.6 << ", 1, 1\"]" << std::endl; @@ -716,11 +740,10 @@ class Graph_induced_complex { std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; } - public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file. - /** \brief Creates a .txt file for KeplerMapper once the simplicial complex is computed to get a visualization - * of its 1-skeleton in browser. + public: // Create a .txt file that can be compiled with KeplerMapper. + /** \brief Creates a .txt file called SC.txt describing the 1-skeleton, which can then be plotted with e.g. KeplerMapper. */ - void plot_TXT_for_KeplerMapper(){ + void plot_TXT(){ int num_simplices = simplices.size(); int num_edges = 0; char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); @@ -748,27 +771,29 @@ class Graph_induced_complex { public: // Create a .off file that can be visualized (e.g. with Geomview). - /** \brief Creates a .off file for visualization. - * For GIC computed with Voronoi only. + /** \brief Creates a .off file called SC.off for 3D visualization, which contains the 2-skeleton of the GIC. + * This function assumes that the cover has been computed with Voronoi. If data points are in 1D or 2D, + * the remaining coordinates of the points embedded in 3D are set to 0. */ void plot_OFF(){ - assert(data_dimension <= 3); + assert(!cover_name.compare("Voronoi")); char gic[11] = "SC.off"; std::ofstream graphic(gic); graphic << "OFF" << std::endl; int m = voronoi_subsamples.size(); int numedges = 0; int numfaces = 0; std::vector > edges, faces; int numsimplices = simplices.size(); for (int i = 0; i < numsimplices; i++) { - if(simplices[i].size() == 2){ numedges++; - edges.push_back(simplices[i]); - } - if(simplices[i].size() == 3){ numfaces++; - faces.push_back(simplices[i]); - } + if(simplices[i].size() == 2){ numedges++; edges.emplace_back(simplices[i]); } + if(simplices[i].size() == 3){ numfaces++; faces.emplace_back(simplices[i]); } } graphic << m << " " << numedges + numfaces << std::endl; - for(int i = 0; i < m; i++) graphic << point_cloud[voronoi_subsamples[i]][0] << " " \ - << point_cloud[voronoi_subsamples[i]][1] << " " \ - << point_cloud[voronoi_subsamples[i]][2] << std::endl; + for(int i = 0; i < m; i++){ + if(data_dimension <= 3){ + for(int j = 0; j < data_dimension; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; + for(int j = data_dimension; j < 3; j++) graphic << 0 << " "; + graphic << std::endl; + } + else for(int j = 0; j < 3; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; + } for(int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; for(int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; graphic.close(); @@ -783,11 +808,11 @@ class Graph_induced_complex { public: /** \brief Creates the simplicial complex. * - * @param[in] complex SimplicialComplexForGIC to be created. + * @param[in] complex SimplicialComplexForRips to be created. * */ - template - void create_complex(SimplicialComplexForGIC & complex) { + template + void create_complex(SimplicialComplexForRips & complex) { unsigned int dimension = 0; for(auto const& simplex : simplices){ complex.insert_simplex_and_subfaces(simplex); @@ -796,7 +821,7 @@ class Graph_induced_complex { complex.set_dimension(dimension); } - public: + private: /** \brief Finds the maximal clique formed by different elements of the cover in a set of points. * * @param[in] cover_elts vector of points represented by vectors of cover elements (the ones to which they belong). @@ -807,24 +832,24 @@ class Graph_induced_complex { std::vector simplex; for(int i = 0; i < num_nodes; i++) for(unsigned int j = 0; j < cover_elts[i].size(); j++) - simplex.push_back(cover_elts[i][j]); + simplex.emplace_back(cover_elts[i][j]); std::sort(simplex.begin(),simplex.end()); std::vector::iterator it = std::unique(simplex.begin(),simplex.end()); simplex.resize(std::distance(simplex.begin(),it)); - simplices.push_back(simplex); + simplices.emplace_back(simplex); } public: - /** \brief Computes the simplices in the Nerve of the cover C. + /** \brief Computes the simplices for a Nerve. */ void find_Nerve_simplices(){ - for(std::map >::iterator it = cover.begin(); it!=cover.end(); it++) simplices.push_back(it->second); + for(std::map >::iterator it = cover.begin(); it!=cover.end(); it++) simplices.emplace_back(it->second); std::vector >::iterator it; std::sort(simplices.begin(),simplices.end()); it = std::unique(simplices.begin(),simplices.end()); simplices.resize(std::distance(simplices.begin(),it)); } public: - /** \brief Computes the simplices in the GIC of the graph G and the cover C. + /** \brief Computes the simplices for a GIC. */ void find_GIC_simplices() { @@ -833,8 +858,8 @@ class Graph_induced_complex { for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector > comp; - for(auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); - if(comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); + for(auto vertex : st.simplex_vertex_range(simplex)) comp.emplace_back(cover[vertex]); + if(comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.emplace_back(simplex_id); } simplex_id++; } @@ -859,7 +884,7 @@ class Graph_induced_complex { for (auto simplex : st.complex_simplex_range()) { if(!st.has_children(simplex)){ std::vector > cover_elts; - for (auto vertex : st.simplex_vertex_range(simplex)) cover_elts.push_back(cover[vertex]); + for (auto vertex : st.simplex_vertex_range(simplex)) cover_elts.emplace_back(cover[vertex]); find_maximal_clique(cover_elts); } } @@ -869,14 +894,14 @@ class Graph_induced_complex { } public: - /** \brief Computes the simplices in the Mapper Delta by looking at all the edges of the graph - * and adding the corresponding edges in the Mapper Delta if the images of the endpoints belong - * to consecutive intervals. + /** \brief Speed-up special case for simplices computation for a GIC computed with a functional cover. * - * @exception std::invalid_argument In case the gain is greater or equal to 0.5 (causes incorrect output). + * @exception std::invalid_argument in case the gain is greater than or equal to 0.5 (causes incorrect output). * */ - void find_GICMAP_simplices_with_functional_minimal_cover(){ + void find_GIC_simplices_with_functional_minimal_cover(){ + + // Computes the simplices in the GIC by looking at all the edges of the graph and adding the corresponding edges in the GIC if the images of the endpoints belong to consecutive intervals. if (gain >= 0.5) throw std::invalid_argument("the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); @@ -890,7 +915,7 @@ class Graph_induced_complex { // Find cover of current point (vid). if(cover[vid].size() == 2) v1 = std::min(cover[vid][0],cover[vid][1]); else v1 = cover[vid][0]; - std::vector node(1); node[0] = v1; simplices.push_back(node); + std::vector node(1); node[0] = v1; simplices.emplace_back(node); // Loop on neighbors. for(int i = 0; i < num_neighb; i++){ @@ -903,7 +928,7 @@ class Graph_induced_complex { // If neighbor is in next interval, add edge. if(cover_fct[v2] == cover_fct[v1] + 1){ std::vector edge(2); edge[0] = v1; edge[1] = v2; - simplices.push_back(edge); + simplices.emplace_back(edge); } } } diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index cff49372..24fa8c8f 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -41,35 +41,35 @@ BOOST_AUTO_TEST_CASE(check_nerve) { std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); GIC.set_color_from_coordinate(); - GIC.find_Nerve_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + GIC.find_Nerve_simplices(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 0); BOOST_CHECK(stree.dimension() == 0); } -BOOST_AUTO_TEST_CASE(check_GICMAP) { +BOOST_AUTO_TEST_CASE(check_funcGIC) { using Point = std::vector; Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.find_GICMAP_simplices_with_functional_minimal_cover(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + GIC.find_GIC_simplices_with_functional_minimal_cover(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 2); BOOST_CHECK(stree.dimension() == 1); } -BOOST_AUTO_TEST_CASE(check_GICcover) { +BOOST_AUTO_TEST_CASE(check_regGIC) { using Point = std::vector; Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.find_GIC_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + GIC.find_GIC_simplices(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 4); @@ -77,14 +77,14 @@ BOOST_AUTO_TEST_CASE(check_GICcover) { } -BOOST_AUTO_TEST_CASE(check_GICvoronoi) { +BOOST_AUTO_TEST_CASE(check_voronoiGIC) { using Point = std::vector; Gudhi::graph_induced_complex::Graph_induced_complex GIC; std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); GIC.set_color_from_coordinate(); std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),2); - GIC.find_GIC_simplices(); Gudhi::graph_induced_complex::Simplex_tree stree; GIC.create_complex(stree); + GIC.find_GIC_simplices(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 2); BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 1); -- cgit v1.2.3 From ec228f211bd29661951c397fea55f934ab6369ac Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 10 Oct 2017 09:33:05 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2773 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 612752759605fd5988f13c667f77fffa838b687d --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 339c1284..746baa44 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -132,12 +132,12 @@ namespace graph_induced_complex { * * \subsection functionalGICexample Example * - * Functional GIC comes with optimal selection for the Rips threshold, - * the resolution and the gain of the function cover. In this example, + * Functional GIC comes with automatic selection of the Rips threshold, + * the resolution and the gain of the function cover. See \cite Carriere17c for more details. In this example, * we compute the functional GIC of a Klein bottle embedded in R^5, - * where the graph G comes from a Rips complex with optimal threshold, + * where the graph G comes from a Rips complex with automatic threshold, * and the cover C comes from the preimages of intervals covering the first coordinate, - * with optimal resolution and gain. Note that optimal threshold, resolution and gain + * with automatic resolution and gain. Note that automatic threshold, resolution and gain * can be computed as well for the Nerve. * * \include Nerve_GIC/CoordGIC.cpp -- cgit v1.2.3 From f29fb4c840a7f8cee02e94ba46e275d4e6233be1 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 24 Oct 2017 13:44:59 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2803 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: bdd7422940bb851fa439ef83c3c4235396b32d3c --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 4 ++-- src/Nerve_GIC/include/gudhi/GIC.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 746baa44..16d70e2a 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -25,9 +25,9 @@ namespace Gudhi { -namespace graph_induced_complex { +namespace cover_complex { -/** \defgroup graph_induced_complex Graph induced complex +/** \defgroup cover_complex Cover complex * * \author Mathieu Carrière * diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 50f0f0b7..01acc296 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -51,10 +51,10 @@ using Rips_complex = Gudhi::rips_complex::Rips_complex; /** - * \class Graph_induced_complex - * \brief Graph induced complex data structure. + * \class Cover_complex + * \brief Cover complex data structure. * - * \ingroup graph_induced_complex + * \ingroup cover_complex * * \details * The data structure is a simplicial complex, representing a -- cgit v1.2.3 From 9cb300d538a4466df50927cf31de3c06e914cb90 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Wed, 1 Nov 2017 12:03:00 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2820 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 6354766e23a4f21c1d49e50aa1e6100156aa40c6 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 10 ++-- src/Nerve_GIC/include/gudhi/GIC.h | 74 +++++++++++++++---------- 2 files changed, 49 insertions(+), 35 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 16d70e2a..2a869009 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ -#define DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ +#ifndef DOC_COVER_COMPLEX_INTRO_COVER_COMPLEX_H_ +#define DOC_COVER_COMPLEX_INTRO_COVER_COMPLEX_H_ namespace Gudhi { @@ -177,13 +177,13 @@ namespace cover_complex { * \copyright GNU General Public License v3. * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ -/** @} */ // end defgroup graph_induced_complex +/** @} */ // end defgroup cover_complex -} // namespace graph_induced_complex +} // namespace cover_complex } // namespace Gudhi -#endif // DOC_GRAPH_INDUCED_COMPLEX_INTRO_GRAPH_INDUCED_COMPLEX_H_ +#endif // DOC_COVER_COMPLEX_INTRO_COVER_COMPLEX_H_ /* * \subsection gicexample Example with cover from function diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 01acc296..fc615828 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -75,12 +75,13 @@ class Cover_complex { private: //Graph_induced_complex(std::map fun){func = fun;} - bool verbose; // whether to display information. + bool verbose = false; // whether to display information. std::vector point_cloud; std::vector > one_skeleton; typedef int Cover_t; // elements of cover C are indexed by integers. std::vector > simplices; std::map > cover; + std::map > cover_back; int maximal_dim; // maximal dimension of output simplicial complex. int data_dimension; // dimension of input data. int n; // number of points. @@ -162,7 +163,7 @@ class Cover_complex { * @param[in] t string (either "GIC" or "Nerve"). * */ - void set_type(std::string t){type = t;} + void set_type(const std::string & t){type = t;} public: /** \brief Specifies whether the program should display information or not. @@ -197,7 +198,7 @@ class Cover_complex { * @param[in] off_file_name name of the input .OFF or .nOFF file. * */ - bool read_point_cloud(std::string off_file_name){ + bool read_point_cloud(const std::string & off_file_name){ point_cloud_name = off_file_name; std::ifstream input(off_file_name); std::string line; @@ -248,7 +249,7 @@ class Cover_complex { * each edge being represented by the IDs of its two nodes. * */ - void set_graph_from_file(std::string graph_file_name){ + void set_graph_from_file(const std::string & graph_file_name){ int neighb; std::ifstream input(graph_file_name); std::string line; int edge[2]; int n = 0; while(std::getline(input,line)){ @@ -335,7 +336,7 @@ class Cover_complex { * * @param[in] distance distance between data points. * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). - * @param[out] delta threshold used for computing the Rips complex. + * @result delta threshold used for computing the Rips complex. * */ template double set_graph_from_automatic_rips(Distance distance, int N = 100){ @@ -382,7 +383,7 @@ class Cover_complex { * @param[in] func_file_name name of the input function file. * */ - void set_function_from_file(std::string func_file_name){ + void set_function_from_file(const std::string & func_file_name){ int vertex_id = 0; std::ifstream input(func_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; @@ -424,16 +425,17 @@ class Cover_complex { /** \brief Computes the optimal length of intervals * (i.e. the smallest interval length avoiding discretization artifacts---see \cite Carriere17c) for a functional cover. * - * @param[out] reso interval length used to compute the cover. + * @result reso interval length used to compute the cover. * */ double set_automatic_resolution(){ if(!functional_cover){std::cout << "Cover needs to come from the preimages of a function." << std::endl; return 0;} + if(type != "Nerve" && type != "GIC"){std::cout << "Type of complex needs to be specified." << std::endl; return 0;} double reso = 0; - if(type.compare("GIC") == 0){ + if(type == "GIC"){ for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; @@ -445,7 +447,7 @@ class Cover_complex { resolution_double = reso; } - if(type.compare("Nerve") == 0){ + if(type == "Nerve"){ for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; @@ -601,7 +603,7 @@ class Cover_complex { std::vector cc; cc.clear(); dfs(prop,it->first,cc,visit); int cci = cc.size(); if(verbose) std::cout << "one CC with " << cci << " points, "; double average_col = 0; - for(int j = 0; j < cci; j++){cover[cc[j]].push_back(id); average_col += func_color[cc[j]]/cci;} + for(int j = 0; j < cci; j++){cover[cc[j]].push_back(id); cover_back[id].push_back(cc[j]); average_col += func_color[cc[j]]/cci;} cover_fct[id] = i; cover_color[id] = std::pair(cci,average_col); id++; } @@ -621,14 +623,14 @@ class Cover_complex { * @param[in] cover_file_name name of the input cover file. * */ - void set_cover_from_file(std::string cover_file_name){ + void set_cover_from_file(const std::string & cover_file_name){ int vertex_id = 0; Cover_t cov; std::vector cov_elts, cov_number; std::ifstream input(cover_file_name); std::string line; while(std::getline(input,line)){ cov_elts.clear(); std::stringstream stream(line); while(stream >> cov){ cov_elts.push_back(cov); cov_number.push_back(cov); - cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; + cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; cover_back[cov].push_back(vertex_id); } cover[vertex_id] = cov_elts; vertex_id++; } @@ -680,17 +682,28 @@ class Cover_complex { for(int j = 0; j < n; j++) if(mindist[j] > dist[j]){ mindist[j] = dist[j]; - if(cover[j].size() == 0) cover[j].push_back(i); + if(cover[j].size() == 0) cover[j].push_back(i); else cover[j][0] = i; } } - for(int i = 0; i < n; i++){ cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } + for(int i = 0; i < n; i++){ cover_back[cover[i][0]].push_back(i); cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; maximal_dim = m-1; cover_name = "Voronoi"; } + public: // return subset of data corresponding to a node + /** \brief Returns the data subset corresponding to a specific node of the created complex. + * + * @param[in] c ID of the node. + * @result cover_back(c) vector of IDs of data points. + * + */ + std::vector subpopulation(Cover_t c){ + return cover_back[c]; + } + // ******************************************************************************************************************* // Visualization. // ******************************************************************************************************************* @@ -701,7 +714,7 @@ class Cover_complex { * @param[in] color_file_name name of the input color file. * */ - void set_color_from_file(std::string color_file_name){ + void set_color_from_file(const std::string & color_file_name){ int vertex_id = 0; std::ifstream input(color_file_name); std::string line; double f; while(std::getline(input,line)){ std::stringstream stream(line); stream >> f; @@ -797,7 +810,7 @@ class Cover_complex { */ void plot_OFF(){ - assert(!cover_name.compare("Voronoi")); + assert(cover_name == "Voronoi"); char gic[11] = "SC.off"; std::ofstream graphic(gic); graphic << "OFF" << std::endl; int m = voronoi_subsamples.size(); int numedges = 0; int numfaces = 0; std::vector > edges, faces; int numsimplices = simplices.size(); @@ -846,14 +859,16 @@ class Cover_complex { */ void find_simplices(){ - if(type.compare("Nerve") == 0){ + if(type != "Nerve" && type != "GIC"){std::cout << "Type of complex needs to be specified." << std::endl; return;} + + if(type == "Nerve"){ for(std::map >::iterator it = cover.begin(); it!=cover.end(); it++) simplices.push_back(it->second); std::vector >::iterator it; std::sort(simplices.begin(),simplices.end()); it = std::unique(simplices.begin(),simplices.end()); simplices.resize(std::distance(simplices.begin(),it)); } - if(type.compare("GIC") == 0){ + if(type == "GIC"){ if(functional_cover){ @@ -927,19 +942,18 @@ class Cover_complex { simplices.clear(); for (auto simplex : st.complex_simplex_range()) { if(!st.has_children(simplex)){ - std::vector > cover_elts; - for (auto vertex : st.simplex_vertex_range(simplex)) cover_elts.push_back(cover[vertex]); - int num_nodes = cover_elts.size(); + std::vector simplx; + for (auto vertex : st.simplex_vertex_range(simplex)){ + unsigned int sz = cover[vertex].size(); + for(unsigned int i = 0; i < sz; i++){ + simplx.push_back(cover[vertex][i]); + } + } - // Find maximal clique of cover_elts - std::vector simplex; - for(int i = 0; i < num_nodes; i++) - for(unsigned int j = 0; j < cover_elts[i].size(); j++) - simplex.push_back(cover_elts[i][j]); - std::sort(simplex.begin(),simplex.end()); std::vector::iterator it = std::unique(simplex.begin(),simplex.end()); - simplex.resize(std::distance(simplex.begin(),it)); - simplices.push_back(simplex); + std::sort(simplx.begin(),simplx.end()); std::vector::iterator it = std::unique(simplx.begin(),simplx.end()); + simplx.resize(std::distance(simplx.begin(),it)); + simplices.push_back(simplx); } } @@ -954,7 +968,7 @@ class Cover_complex { }; -} // namespace graph_induced_complex +} // namespace cover_complex } // namespace Gudhi -- cgit v1.2.3 From 3d4c842d34f4d6c52ba6c39836f57d702d6a6ff3 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 7 Nov 2017 10:30:08 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2840 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 9037e52ab98b2b9c699c104aa4da45bf6d74cfc7 --- CMakeLists.txt | 3 +-- src/CMakeLists.txt | 1 + src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 4 ++-- src/Nerve_GIC/include/gudhi/GIC.h | 2 +- src/common/doc/main_page.h | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/CMakeLists.txt b/CMakeLists.txt index da6f5709..ef129cd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,6 @@ endif() # Add your new module in the list, order is not important include(GUDHI_modules) -include_directories(src/Nerve_GIC/include/) add_gudhi_module(common) add_gudhi_module(Alpha_complex) @@ -49,8 +48,8 @@ add_gudhi_module(Spatial_searching) add_gudhi_module(Subsampling) add_gudhi_module(Tangential_complex) add_gudhi_module(Witness_complex) +add_gudhi_module(Nerve_GIC) add_subdirectory(src/Nerve_GIC/example) -add_subdirectory(src/Nerve_GIC/test) message("++ GUDHI_MODULES list is:\"${GUDHI_MODULES}\"") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9961fcf9..a2617020 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,7 @@ add_gudhi_module(Spatial_searching) add_gudhi_module(Subsampling) add_gudhi_module(Tangential_complex) add_gudhi_module(Witness_complex) +add_gudhi_module(Nerve_GIC) message("++ GUDHI_MODULES list is:\"${GUDHI_MODULES}\"") diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 2a869009..cb9ba554 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -2,9 +2,9 @@ * (Geometric Understanding in Higher Dimensions) is a generic C++ * library for computational topology. * - * Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau + * Author(s): Mathieu Carriere * - * Copyright (C) 2016 INRIA + * Copyright (C) 2017 INRIA * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index fc615828..2520042d 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -700,7 +700,7 @@ class Cover_complex { * @result cover_back(c) vector of IDs of data points. * */ - std::vector subpopulation(Cover_t c){ + const std::vector & subpopulation(Cover_t c){ return cover_back[c]; } diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index d48294a5..34bf6c22 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -93,8 +93,8 @@ - \subsection GICDataStructure Nerves and Graph Induced Complexes - \image html "gic_complex.png" "Graph Induced Complex of a point cloud." + \subsection CoverComplexDataStructure Cover Complexes: Nerves and Graph Induced Complexes + \image html "gicvisu.jpg" "Graph Induced Complex of a point cloud."
@@ -103,11 +103,11 @@ Copyright: GPL v3
- Nerves and Graph Induced Complexes are simplicial complexes that provably contain + Nerves and Graph Induced Complexes are cover complexes, i.e. simplicial complexes that provably contain topological information about the input data. They can be computed with a cover of the - data, that often comes from the preimage of a family of intervals covering the image + data, that comes i.e. from the preimage of a family of intervals covering the image of a scalar-valued function defined on the data.
- User manual: \ref graph_induced_complex - Reference manual: Gudhi::graph_induced_complex::Graph_induced_complex + User manual: \ref cover_complex - Reference manual: Gudhi::cover_complex::Cover_complex
-- cgit v1.2.3 From 69e3499fb9ecae20a1b9904cac83bbc605972c50 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 16 Nov 2017 20:52:37 +0000 Subject: Apply google code conventions for cpplint git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2898 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 2f82ddf869dc95ec33c6cea825ee24cd1a849c4b --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 8 +- src/Nerve_GIC/example/CoordGIC.cpp | 26 +- src/Nerve_GIC/example/FuncGIC.cpp | 27 +- src/Nerve_GIC/example/GIC.cpp | 26 +- src/Nerve_GIC/example/Nerve.cpp | 24 +- src/Nerve_GIC/example/VoronoiGIC.cpp | 25 +- src/Nerve_GIC/include/gudhi/GIC.h | 1939 +++++++++++++---------- src/Nerve_GIC/test/CMakeLists.txt | 8 +- src/Nerve_GIC/test/test_GIC.cpp | 60 +- 9 files changed, 1180 insertions(+), 963 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index cb9ba554..3a0d8154 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -37,7 +37,8 @@ namespace cover_complex { * neato (from graphviz), * geomview, * KeplerMapper. - * Input point clouds are assumed to be OFF files. + * Input point clouds are assumed to be + * OFF files. * * \section covers Covers * @@ -76,7 +77,8 @@ namespace cover_complex { * * \include Nerve_GIC/Nerve.txt * - * The program also writes a file SC.txt. The first three lines in this file are the location of the input point cloud and the function used to compute the cover. + * The program also writes a file SC.txt. The first three lines in this file are the location of the input point cloud + * and the function used to compute the cover. * The fourth line contains the number of vertices nv and edges ne of the Nerve. * The next nv lines represent the vertices. Each line contains the vertex ID, * the number of data points it contains, and their average color function value. @@ -167,7 +169,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./FuncGIC ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v + * \code $> ./FuncGIC ../../data/points/COIL_database/lucky_cat.off ../../data/points/COIL_database/lucky_cat_PCA1 --v * \endcode * * the program outputs again SC.dot which gives the following visualization after using neato: diff --git a/src/Nerve_GIC/example/CoordGIC.cpp b/src/Nerve_GIC/example/CoordGIC.cpp index f23e3f55..e7a68e07 100644 --- a/src/Nerve_GIC/example/CoordGIC.cpp +++ b/src/Nerve_GIC/example/CoordGIC.cpp @@ -22,10 +22,10 @@ #include -void usage(int nbArgs, char * const progName) { +void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 2 --v \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 --v \n"; exit(-1); // ----- >> } @@ -36,7 +36,8 @@ int main(int argc, char **argv) { std::string off_file_name(argv[1]); int coord = atoi(argv[2]); - bool verb = 0; if(argc == 4) verb = 1; + bool verb = 0; + if (argc == 4) verb = 1; // ----------------------------------------- // Init of a functional GIC from an OFF file @@ -47,32 +48,33 @@ int main(int argc, char **argv) { bool check = GIC.read_point_cloud(off_file_name); - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { GIC.set_type("GIC"); GIC.set_color_from_coordinate(coord); GIC.set_function_from_coordinate(coord); GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); - GIC.set_automatic_resolution(); GIC.set_gain(); + GIC.set_automatic_resolution(); + GIC.set_gain(); GIC.set_cover_from_function(); GIC.find_simplices(); GIC.plot_DOT(); - Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); // -------------------------------------------- // Display information about the functional GIC // -------------------------------------------- - if(verb){ - std::cout << "Functional GIC is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if (verb) { + std::cout << "Functional GIC is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; std::cout << "Iterator on functional GIC simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { diff --git a/src/Nerve_GIC/example/FuncGIC.cpp b/src/Nerve_GIC/example/FuncGIC.cpp index 1601ddab..2de8c021 100644 --- a/src/Nerve_GIC/example/FuncGIC.cpp +++ b/src/Nerve_GIC/example/FuncGIC.cpp @@ -22,10 +22,11 @@ #include -void usage(int nbArgs, char * const progName) { +void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off function [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/COIL_database/lucky_cat.off " + "../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; exit(-1); // ----- >> } @@ -36,7 +37,8 @@ int main(int argc, char **argv) { std::string off_file_name(argv[1]); std::string func_file_name = argv[2]; - bool verb = 0; if(argc == 4) verb = 1; + bool verb = 0; + if (argc == 4) verb = 1; // ----------------------------------------- // Init of a functional GIC from an OFF file @@ -47,32 +49,33 @@ int main(int argc, char **argv) { bool check = GIC.read_point_cloud(off_file_name); - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { GIC.set_type("GIC"); GIC.set_color_from_file(func_file_name); GIC.set_function_from_file(func_file_name); GIC.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); - GIC.set_automatic_resolution(); GIC.set_gain(); + GIC.set_automatic_resolution(); + GIC.set_gain(); GIC.set_cover_from_function(); GIC.find_simplices(); GIC.plot_DOT(); - Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); // -------------------------------------------- // Display information about the functional GIC // -------------------------------------------- - if(verb){ - std::cout << "Functional GIC is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if (verb) { + std::cout << "Functional GIC is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; std::cout << "Iterator on functional GIC simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index cdfe73a7..2d0c9672 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -22,10 +22,10 @@ #include -void usage(int nbArgs, char * const progName) { +void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 0.075 2 0.075 0 --v \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 0.075 2 0.075 0 --v \n"; exit(-1); // ----- >> } @@ -39,7 +39,8 @@ int main(int argc, char **argv) { int coord = atoi(argv[3]); double resolution = atof(argv[4]); double gain = atof(argv[5]); - bool verb = 0; if(argc == 7) verb = 1; + bool verb = 0; + if (argc == 7) verb = 1; // ---------------------------------------------------------------------------- // Init of a graph induced complex from an OFF file @@ -50,31 +51,32 @@ int main(int argc, char **argv) { bool check = GIC.read_point_cloud(off_file_name); - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { GIC.set_color_from_coordinate(coord); GIC.set_function_from_coordinate(coord); GIC.set_graph_from_rips(threshold, Gudhi::Euclidean_distance()); - GIC.set_resolution_with_interval_length(resolution); GIC.set_gain(gain); + GIC.set_resolution_with_interval_length(resolution); + GIC.set_gain(gain); GIC.set_cover_from_function(); GIC.find_GIC_simplices(); GIC.plot_TXT_for_KeplerMapper(); - Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- - if(verb){ - std::cout << "Graph induced complex is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if (verb) { + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; std::cout << "Iterator on graph induced complex simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index 71f12f5d..598ecc03 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -22,7 +22,7 @@ #include -void usage(int nbArgs, char * const progName) { +void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; @@ -38,7 +38,8 @@ int main(int argc, char **argv) { int coord = atoi(argv[2]); int resolution = atoi(argv[3]); double gain = atof(argv[4]); - bool verb = 0; if(argc == 6) verb = 1; + bool verb = 0; + if (argc == 6) verb = 1; // -------------------------------- // Init of a Nerve from an OFF file @@ -49,32 +50,33 @@ int main(int argc, char **argv) { bool check = SC.read_point_cloud(off_file_name); - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { SC.set_type("Nerve"); SC.set_color_from_coordinate(coord); SC.set_function_from_coordinate(coord); SC.set_graph_from_OFF(); - SC.set_resolution_with_interval_number(resolution); SC.set_gain(gain); + SC.set_resolution_with_interval_number(resolution); + SC.set_gain(gain); SC.set_cover_from_function(); SC.find_simplices(); SC.write_info(); - Gudhi::Simplex_tree<> stree; SC.create_complex(stree); + Gudhi::Simplex_tree<> stree; + SC.create_complex(stree); // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- - if(verb){ - std::cout << "Nerve is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if (verb) { + std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " + << stree.num_vertices() << " vertices." << std::endl; std::cout << "Iterator on Nerve simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { diff --git a/src/Nerve_GIC/example/VoronoiGIC.cpp b/src/Nerve_GIC/example/VoronoiGIC.cpp index 8ce64819..ef4f663c 100644 --- a/src/Nerve_GIC/example/VoronoiGIC.cpp +++ b/src/Nerve_GIC/example/VoronoiGIC.cpp @@ -22,10 +22,10 @@ #include -void usage(int nbArgs, char * const progName) { +void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../../../data/points/human.off 100 --v \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; exit(-1); // ----- >> } @@ -36,7 +36,8 @@ int main(int argc, char **argv) { std::string off_file_name(argv[1]); int m = atoi(argv[2]); - bool verb = 0; if(argc == 4) verb = 1; + bool verb = 0; + if (argc == 4) verb = 1; // ---------------------------------------------------------------------------- // Init of a graph induced complex from an OFF file @@ -47,30 +48,30 @@ int main(int argc, char **argv) { bool check = GIC.read_point_cloud(off_file_name); - if(!check) std::cout << "Incorrect OFF file." << std::endl; - else{ - + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { GIC.set_type("GIC"); GIC.set_color_from_coordinate(); GIC.set_graph_from_OFF(); - GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),m); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), m); GIC.find_simplices(); GIC.plot_OFF(); - Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); // ---------------------------------------------------------------------------- // Display information about the graph induced complex // ---------------------------------------------------------------------------- - if(verb){ - std::cout << "Graph induced complex is of dimension " << stree.dimension() << - " - " << stree.num_simplices() << " simplices - " << - stree.num_vertices() << " vertices." << std::endl; + if (verb) { + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; std::cout << "Iterator on graph induced complex simplices" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index ca8727a0..f2a01e97 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -35,8 +35,8 @@ #include #include #include -#include // for numeric_limits -#include // for pair<> +#include // for numeric_limits +#include // for pair<> #include // for std::max #include #include @@ -49,7 +49,6 @@ using Simplex_tree = Gudhi::Simplex_tree<>; using Filtration_value = Simplex_tree::Filtration_value; using Rips_complex = Gudhi::rips_complex::Rips_complex; - /** * \class Cover_complex * \brief Cover complex data structure. @@ -70,906 +69,1100 @@ using Rips_complex = Gudhi::rips_complex::Rips_complex; * correspond to the simplices of the GIC. * */ -template +template class Cover_complex { - private: - //Graph_induced_complex(std::map fun){func = fun;} - bool verbose = false; // whether to display information. - std::vector point_cloud; - std::vector > one_skeleton; - typedef int Cover_t; // elements of cover C are indexed by integers. - std::vector > simplices; - std::map > cover; - std::map > cover_back; - int maximal_dim; // maximal dimension of output simplicial complex. - int data_dimension; // dimension of input data. - int n; // number of points. - std::map cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. - std::map > cover_color; // size and coloring of the vertices of the output simplicial complex. - Simplex_tree st; - - std::map > adjacency_matrix; - std::vector > distances; - - int resolution_int = -1; - double resolution_double = -1; - double gain = -1; - double rate_constant = 10; // Constant in the subsampling. - double rate_power = 0.001; // Power in the subsampling. - int mask = 0; // Ignore nodes containing less than mask points. - - std::map func; - std::map func_color; - std::vector voronoi_subsamples; - std::string cover_name; - std::string point_cloud_name; - std::string color_name; - std::string type; // Nerve or GIC - bool functional_cover = false; // whether we use a cover with preimages of a function or not - - // Point comparator - struct Less{ - Less(std::map func){Fct = func;} - std::map Fct; - bool operator()(int a, int b){if(Fct[a] == Fct[b]) return a < b; else return Fct[a] < Fct[b];} - }; - - // DFS + // Graph_induced_complex(std::map fun){func = fun;} + bool verbose = false; // whether to display information. + std::vector point_cloud; + std::vector > one_skeleton; + typedef int Cover_t; // elements of cover C are indexed by integers. + std::vector > simplices; + std::map > cover; + std::map > cover_back; + int maximal_dim; // maximal dimension of output simplicial complex. + int data_dimension; // dimension of input data. + int n; // number of points. + std::map + cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. + std::map > + cover_color; // size and coloring of the vertices of the output simplicial complex. + Simplex_tree st; + + std::map > adjacency_matrix; + std::vector > distances; + + int resolution_int = -1; + double resolution_double = -1; + double gain = -1; + double rate_constant = 10; // Constant in the subsampling. + double rate_power = 0.001; // Power in the subsampling. + int mask = 0; // Ignore nodes containing less than mask points. + + std::map func; + std::map func_color; + std::vector voronoi_subsamples; + std::string cover_name; + std::string point_cloud_name; + std::string color_name; + std::string type; // Nerve or GIC + bool functional_cover = false; // whether we use a cover with preimages of a function or not + + // Point comparator + struct Less { + Less(std::map func) { Fct = func; } + std::map Fct; + bool operator()(int a, int b) { + if (Fct[a] == Fct[b]) + return a < b; + else + return Fct[a] < Fct[b]; + } + }; + + // DFS private: - void dfs(std::map >& G, int p, std::vector& cc, std::map& visit){ - cc.push_back(p); - visit[p] = true; int neighb = G[p].size(); - for (int i = 0; i < neighb; i++) - if ( visit.find(G[p][i]) != visit.end() ) - if( !(visit[G[p][i]]) ) - dfs(G,G[p][i],cc,visit); - } - - // Find random number in [0,1]. - double GetUniform(){ - static std::default_random_engine re; - static std::uniform_real_distribution Dist(0,1); - return Dist(re); - } - - // Subsample points. - void SampleWithoutReplacement(int populationSize, int sampleSize, std::vector & samples){ - int t = 0; int m = 0; double u; - while (m < sampleSize){ - u = GetUniform(); - if ( (populationSize - t)*u >= sampleSize - m ) - t++; - else{samples[m] = t; t++; m++;} - } - } + void dfs(std::map >& G, int p, std::vector& cc, std::map& visit) { + cc.push_back(p); + visit[p] = true; + int neighb = G[p].size(); + for (int i = 0; i < neighb; i++) + if (visit.find(G[p][i]) != visit.end()) + if (!(visit[G[p][i]])) dfs(G, G[p][i], cc, visit); + } + + // Find random number in [0,1]. + double GetUniform() { + static std::default_random_engine re; + static std::uniform_real_distribution Dist(0, 1); + return Dist(re); + } + + // Subsample points. + void SampleWithoutReplacement(int populationSize, int sampleSize, std::vector& samples) { + int t = 0; + int m = 0; + double u; + while (m < sampleSize) { + u = GetUniform(); + if ((populationSize - t) * u >= sampleSize - m) + t++; + else { + samples[m] = t; + t++; + m++; + } + } + } private: - void fill_adjacency_matrix_from_st(){ - std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix[i] = empty; - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } - } - - public: - /** \brief Specifies whether the type of the output simplicial complex. - * - * @param[in] t string (either "GIC" or "Nerve"). - * - */ - void set_type(const std::string & t){type = t;} + void fill_adjacency_matrix_from_st() { + std::vector empty; + for (int i = 0; i < n; i++) adjacency_matrix[i] = empty; + for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector vertices; + for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); + adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } + } public: - /** \brief Specifies whether the program should display information or not. - * - * @param[in] verb boolean (true = display info, false = do not display info). - * - */ - void set_verbose(bool verb = false){verbose = verb;} + /** \brief Specifies whether the type of the output simplicial complex. + * + * @param[in] t string (either "GIC" or "Nerve"). + * + */ + void set_type(const std::string& t) { type = t; } public: - /** \brief Sets the constants used to subsample the data set. These constants are - * explained in \cite Carriere17c. - * - * @param[in] constant double. - * @param[in] power double. - * - */ - void set_subsampling(double constant, double power){rate_constant = constant; rate_power = power;} + /** \brief Specifies whether the program should display information or not. + * + * @param[in] verb boolean (true = display info, false = do not display info). + * + */ + void set_verbose(bool verb = false) { verbose = verb; } public: - /** \brief Sets the mask, which is a threshold integer such that nodes in the complex that contain a number of data points which is less than or equal to - * this threshold are not displayed. - * - * @param[in] nodemask integer. - * - */ - void set_mask(int nodemask){mask = nodemask;} + /** \brief Sets the constants used to subsample the data set. These constants are + * explained in \cite Carriere17c. + * + * @param[in] constant double. + * @param[in] power double. + * + */ + void set_subsampling(double constant, double power) { + rate_constant = constant; + rate_power = power; + } public: - /** \brief Reads and stores the input point cloud. - * - * @param[in] off_file_name name of the input .OFF or .nOFF file. - * - */ - bool read_point_cloud(const std::string & off_file_name){ - - point_cloud_name = off_file_name; std::ifstream input(off_file_name); std::string line; - - char comment = '#'; - while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} - if(std::strcmp((char*) line.c_str(),"nOFF")==0){ - comment = '#'; while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} - std::stringstream stream(line); stream >> data_dimension; - } - else data_dimension = 3; - - comment = '#'; int numedges, numfaces, i, num; - while(comment == '#'){getline(input, line); if(!line.empty() && !std::all_of(line.begin(),line.end(),isspace)) comment = line[line.find_first_not_of(' ')];} - std::stringstream stream(line); stream >> n; stream >> numfaces; stream >> numedges; - - i = 0; while(i < n){ - getline(input, line); - if(!line.empty() && line[line.find_first_not_of(' ')] != '#' && !std::all_of(line.begin(),line.end(),isspace)){ - std::vector point; std::istringstream iss(line); - point.assign(std::istream_iterator(iss), std::istream_iterator()); - point_cloud.emplace_back(point.begin(),point.begin()+data_dimension); i++; - } - } - - i = 0; while(i < numfaces){ - getline(input, line); - if(!line.empty() && line[line.find_first_not_of(' ')] != '#' && !std::all_of(line.begin(),line.end(),isspace)){ - std::vector simplex; std::istringstream iss(line); - simplex.assign(std::istream_iterator(iss), std::istream_iterator()); - num = simplex[0]; std::vector edge(2); - for(int j = 1; j <= num; j++){ for(int k = j+1; k <= num; k++){ edge[0] = simplex[j]; edge[1] = simplex[k]; one_skeleton.push_back(edge); } } - i++; - } - } - - return input.is_open(); - } - - // ******************************************************************************************************************* - // Graphs. - // ******************************************************************************************************************* - - public: // Set graph from file. - /** \brief Creates a graph G from a file containing the edges. - * - * @param[in] graph_file_name name of the input graph file. - * The graph file contains one edge per line, - * each edge being represented by the IDs of its two nodes. - * - */ - void set_graph_from_file(const std::string & graph_file_name){ - int neighb; std::ifstream input(graph_file_name); - std::string line; int edge[2]; int n = 0; - while(std::getline(input,line)){ - std::stringstream stream(line); stream >> edge[0]; - while(stream >> neighb){edge[1] = neighb; st.insert_simplex_and_subfaces(edge);} - n++; - } - - fill_adjacency_matrix_from_st(); - - } - - - public: // Set graph from OFF file. - /** \brief Creates a graph G from the triangulation given by the input .OFF file. - * - */ - void set_graph_from_OFF(){ - - int num_edges = one_skeleton.size(); - if(num_edges > 0){ - for(int i = 0; i < num_edges; i++) st.insert_simplex_and_subfaces(one_skeleton[i]); - fill_adjacency_matrix_from_st(); - } - else std::cout << "No triangulation read in OFF file!" << std::endl; - - } - - public: // Set graph from Rips complex. - /** \brief Creates a graph G from a Rips complex. - * - * @param[in] threshold threshold value for the Rips complex. - * @param[in] distance distance used to compute the Rips complex. - * - */ - template void set_graph_from_rips(double threshold, Distance distance){ - - Rips_complex rips_complex_from_points(point_cloud, threshold, distance); - rips_complex_from_points.create_complex(st, 1); - fill_adjacency_matrix_from_st(); - - } - - - - public: // Pairwise distances. - /** \private \brief Computes all pairwise distances. - */ - template void compute_pairwise_distances(Distance ref_distance){ - - double d; std::vector zeros(n); for(int i = 0; i < n; i++) distances.push_back(zeros); - std::string distance = point_cloud_name; distance.append("_dist"); - std::ifstream input(distance.c_str(), std::ios::out | std::ios::binary); - - if(input.good()){ - if(verbose) std::cout << "Reading distances..." << std::endl; - for(int i = 0; i < n; i++){ - for (int j = i; j < n; j++){ - input.read((char*) &d,8); distances[i][j] = d; distances[j][i] = d; - } - } - input.close(); - } - - else{ - if(verbose) std::cout << "Computing distances..." << std::endl; - input.close(); std::ofstream output(distance, std::ios::out | std::ios::binary); - for(int i = 0; i < n; i++){ - int state = (int) floor( 100*(i*1.0+1)/n ) %10; - if( state == 0 && verbose) std::cout << "\r" << state << "%" << std::flush; - for (int j = i; j < n; j++){ - double dis = ref_distance(point_cloud[i],point_cloud[j]); - distances[i][j] = dis; distances[j][i] = dis; - output.write((char*) &dis,8); - } - } - output.close(); if(verbose) std::cout << std::endl; - } - - } - - public: // Automatic tuning of Rips complex. - /** \brief Creates a graph G from a Rips complex whose threshold value is automatically tuned with subsampling---see \cite Carriere17c. - * - * @param[in] distance distance between data points. - * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). - * @result delta threshold used for computing the Rips complex. - * - */ - template double set_graph_from_automatic_rips(Distance distance, int N = 100){ - - int m = floor(n/ std::exp((1+rate_power)*std::log(std::log(n)/std::log(rate_constant))) ); - m = std::min(m,n-1); - std::vector samples(m); double delta = 0; - - if(verbose) std::cout << n << " points in R^" << data_dimension << std::endl; - if(verbose) std::cout << "Subsampling " << m << " points" << std::endl; - - if(distances.size() == 0) compute_pairwise_distances(distance); - - //#pragma omp parallel for - for (int i = 0; i < N; i++){ - - SampleWithoutReplacement(n,m,samples); - double hausdorff_dist = 0; - for (int j = 0; j < n; j++){ - double mj = distances[j][samples[0]]; for (int k = 1; k < m; k++) mj = std::min(mj, distances[j][samples[k]]); - hausdorff_dist = std::max(hausdorff_dist, mj); - } - delta += hausdorff_dist/N; - - } - - if(verbose) std::cout << "delta = " << delta << std::endl; - Rips_complex rips_complex_from_points(point_cloud, delta, distance); - rips_complex_from_points.create_complex(st, 1); - fill_adjacency_matrix_from_st(); - - return delta; - - } - - - // ******************************************************************************************************************* - // Functions. - // ******************************************************************************************************************* - - public: // Set function from file. - /** \brief Creates the function f from a file containing the function values. - * - * @param[in] func_file_name name of the input function file. - * - */ - void set_function_from_file(const std::string & func_file_name){ - int vertex_id = 0; std::ifstream input(func_file_name); std::string line; double f; - while(std::getline(input,line)){ - std::stringstream stream(line); stream >> f; - func.emplace(vertex_id, f); vertex_id++; - } - functional_cover = true; - cover_name = func_file_name; - } - - public: // Set function from kth coordinate - /** \brief Creates the function f from the k-th coordinate of the point cloud P. - * - * @param[in] k coordinate to use (start at 0). - * - */ - void set_function_from_coordinate(int k){ - for(int i = 0; i < n; i++) func.emplace(i,point_cloud[i][k]); - char coordinate[100]; sprintf(coordinate, "coordinate %d", k); - functional_cover = true; - cover_name = coordinate; - } - - public: // Set function from vector. - /** \brief Creates the function f from a vector stored in memory. - * - * @param[in] function input vector of values. - * - */ - template void set_function_from_range(InputRange const & function){ - functional_cover = true; - int index = 0; for(auto v : function){func.emplace(index, v); index++;} - } - - // ******************************************************************************************************************* - // Covers. - // ******************************************************************************************************************* - - public: // Automatic tuning of resolution. - /** \brief Computes the optimal length of intervals - * (i.e. the smallest interval length avoiding discretization artifacts---see \cite Carriere17c) for a functional cover. - * - * @result reso interval length used to compute the cover. - * - */ - double set_automatic_resolution(){ - - if(!functional_cover){std::cout << "Cover needs to come from the preimages of a function." << std::endl; return 0;} - if(type != "Nerve" && type != "GIC"){std::cout << "Type of complex needs to be specified." << std::endl; return 0;} - - double reso = 0; - - if(type == "GIC"){ - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - reso = std::max(reso, std::abs(func[vertices[0]] - func[vertices[1]])); - } - } - if(verbose) std::cout << "resolution = " << reso << std::endl; - resolution_double = reso; - } - - if(type == "Nerve"){ - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector vertices; - for(auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - reso = std::max(reso, (std::abs(func[vertices[0]] - func[vertices[1]]))/gain); - } - } - if(verbose) std::cout << "resolution = " << reso << std::endl; - resolution_double = reso; - } - - return reso; - - } + /** \brief Sets the mask, which is a threshold integer such that nodes in the complex that contain a number of data + * points which is less than or equal to + * this threshold are not displayed. + * + * @param[in] nodemask integer. + * + */ + void set_mask(int nodemask) { mask = nodemask; } public: - /** \brief Sets a length of intervals from a value stored in memory. - * - * @param[in] reso length of intervals. - * - */ - void set_resolution_with_interval_length(double reso){resolution_double = reso;} - /** \brief Sets a number of intervals from a value stored in memory. - * - * @param[in] reso number of intervals. - * - */ - void set_resolution_with_interval_number(int reso){resolution_int = reso;} - /** \brief Sets a gain from a value stored in memory (default value 0.3). - * - * @param[in] g gain. - * - */ - void set_gain(double g = 0.3){gain = g;} - - - public: // Set cover with preimages of function. - /** \brief Creates a cover C from the preimages of the function f. - * - */ - void set_cover_from_function(){ - - if(resolution_double == -1 && resolution_int == -1){ std::cout << "Number and/or length of intervals not specified" << std::endl; return; } - if(gain == -1){ std::cout << "Gain not specified" << std::endl; return; } - - // Read function values and compute min and max - std::map::iterator it; - double maxf, minf; minf = std::numeric_limits::max(); maxf = std::numeric_limits::min(); - for(it = func.begin(); it != func.end(); it++){minf = std::min(minf, it->second); maxf = std::max(maxf, it->second);} - int n = func.size(); if(verbose) std::cout << "Min function value = " << minf << " and Max function value = " << maxf << std::endl; - - // Compute cover of im(f) - std::vector > intervals; int res; - - if(resolution_double == -1){ // Case we use an integer for the number of intervals. - double incr = (maxf-minf)/resolution_int; double x = minf; double alpha = (incr*gain)/(2-2*gain); - double y = minf + incr + alpha; std::pair interm(x,y); intervals.push_back(interm); - for(int i = 1; i < resolution_int-1; i++){ - x = minf + i*incr - alpha; - y = minf + (i+1)*incr + alpha; - std::pair inter(x,y); intervals.push_back(inter); - } - x = minf + (resolution_int-1)*incr - alpha; y = maxf; - std::pair interM(x,y); intervals.push_back(interM); res = intervals.size(); - if(verbose) - for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; - } - - else{ - if(resolution_int == -1){ // Case we use a double for the length of the intervals. - double x = minf; double y = x + resolution_double; - while(y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ - std::pair inter(x,y); intervals.push_back(inter); - x = y - gain*resolution_double; - y = x + resolution_double; - } - std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); - if(verbose) - for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; - } - - else{ // Case we use an integer and a double for the length of the intervals. - double x = minf; double y = x + resolution_double; int count = 0; - while(count < resolution_int && y <= maxf && maxf - (y-gain*resolution_double) >= resolution_double){ - std::pair inter(x,y); intervals.push_back(inter); count++; - x = y - gain*resolution_double; - y = x + resolution_double; - } - res = intervals.size(); - if(verbose) - for(int i = 0; i < res; i++) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; - } - } - - // Sort points according to function values - std::vector points(n); for(int i = 0; i < n; i++) points[i] = i; - std::sort(points.begin(),points.end(),Less(this->func)); - int id = 0; int pos = 0; - - for(int i = 0; i < res; i++){ - - // Find points in the preimage - std::map > prop; - std::pair inter1 = intervals[i]; - int tmp = pos; - - if(i != res-1){ - - if(i != 0){ - std::pair inter3 = intervals[i-1]; - while(func[points[tmp]] < inter3.second && tmp != n){ - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; - } - } - - std::pair inter2 = intervals[i+1]; - while(func[points[tmp]] < inter2.first && tmp != n){ - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; - } - - pos = tmp; - while(func[points[tmp]] < inter1.second && tmp != n){ - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; - } - - } - - else{ - - std::pair inter3 = intervals[i-1]; - while(func[points[tmp]] < inter3.second && tmp != n){ - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; - } - - while(tmp != n){ - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; - } - - } - - // Compute the connected components with DFS - std::map visit; if(verbose) std::cout << "Preimage of interval " << i << std::endl; - for(std::map >::iterator it = prop.begin(); it != prop.end(); it++) - visit[it->first] = false; - if (!(prop.empty())){ - for(std::map >::iterator it = prop.begin(); it != prop.end(); it++){ - if ( !(visit[it->first]) ){ - std::vector cc; cc.clear(); - dfs(prop,it->first,cc,visit); int cci = cc.size(); if(verbose) std::cout << "one CC with " << cci << " points, "; - double average_col = 0; - for(int j = 0; j < cci; j++){cover[cc[j]].push_back(id); cover_back[id].push_back(cc[j]); average_col += func_color[cc[j]]/cci;} - cover_fct[id] = i; cover_color[id] = std::pair(cci,average_col); - id++; - } - } - } - if(verbose) std::cout << std::endl; - } - - maximal_dim = id-1; - - } - - public: // Set cover from file. - /** \brief Creates the cover C from a file containing the cover elements of each point (the order has to be the same - * as in the input file!). + /** \brief Reads and stores the input point cloud. * - * @param[in] cover_file_name name of the input cover file. + * @param[in] off_file_name name of the input .OFF or .nOFF file. * */ - void set_cover_from_file(const std::string & cover_file_name){ - int vertex_id = 0; Cover_t cov; std::vector cov_elts, cov_number; - std::ifstream input(cover_file_name); std::string line; - while(std::getline(input,line)){ - cov_elts.clear(); std::stringstream stream(line); - while(stream >> cov){ - cov_elts.push_back(cov); cov_number.push_back(cov); - cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; cover_back[cov].push_back(vertex_id); - } - cover[vertex_id] = cov_elts; vertex_id++; - } - std::vector::iterator it; - std::sort(cov_number.begin(),cov_number.end()); it = std::unique(cov_number.begin(),cov_number.end()); - cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size()-1; - for(int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; - cover_name = cover_file_name; - } - - public: // Set cover from Voronoi - /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. + bool read_point_cloud(const std::string& off_file_name) { + point_cloud_name = off_file_name; + std::ifstream input(off_file_name); + std::string line; + + char comment = '#'; + while (comment == '#') { + getline(input, line); + if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) comment = line[line.find_first_not_of(' ')]; + } + if (std::strcmp((char*)line.c_str(), "nOFF") == 0) { + comment = '#'; + while (comment == '#') { + getline(input, line); + if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) + comment = line[line.find_first_not_of(' ')]; + } + std::stringstream stream(line); + stream >> data_dimension; + } else + data_dimension = 3; + + comment = '#'; + int numedges, numfaces, i, num; + while (comment == '#') { + getline(input, line); + if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) comment = line[line.find_first_not_of(' ')]; + } + std::stringstream stream(line); + stream >> n; + stream >> numfaces; + stream >> numedges; + + i = 0; + while (i < n) { + getline(input, line); + if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && + !std::all_of(line.begin(), line.end(), isspace)) { + std::vector point; + std::istringstream iss(line); + point.assign(std::istream_iterator(iss), std::istream_iterator()); + point_cloud.emplace_back(point.begin(), point.begin() + data_dimension); + i++; + } + } + + i = 0; + while (i < numfaces) { + getline(input, line); + if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && + !std::all_of(line.begin(), line.end(), isspace)) { + std::vector simplex; + std::istringstream iss(line); + simplex.assign(std::istream_iterator(iss), std::istream_iterator()); + num = simplex[0]; + std::vector edge(2); + for (int j = 1; j <= num; j++) { + for (int k = j + 1; k <= num; k++) { + edge[0] = simplex[j]; + edge[1] = simplex[k]; + one_skeleton.push_back(edge); + } + } + i++; + } + } + + return input.is_open(); + } + + // ******************************************************************************************************************* + // Graphs. + // ******************************************************************************************************************* + + public: // Set graph from file. + /** \brief Creates a graph G from a file containing the edges. + * + * @param[in] graph_file_name name of the input graph file. + * The graph file contains one edge per line, + * each edge being represented by the IDs of its two nodes. + * + */ + void set_graph_from_file(const std::string& graph_file_name) { + int neighb; + std::ifstream input(graph_file_name); + std::string line; + int edge[2]; + int n = 0; + while (std::getline(input, line)) { + std::stringstream stream(line); + stream >> edge[0]; + while (stream >> neighb) { + edge[1] = neighb; + st.insert_simplex_and_subfaces(edge); + } + n++; + } + + fill_adjacency_matrix_from_st(); + } + + public: // Set graph from OFF file. + /** \brief Creates a graph G from the triangulation given by the input .OFF file. + * + */ + void set_graph_from_OFF() { + int num_edges = one_skeleton.size(); + if (num_edges > 0) { + for (int i = 0; i < num_edges; i++) st.insert_simplex_and_subfaces(one_skeleton[i]); + fill_adjacency_matrix_from_st(); + } else + std::cout << "No triangulation read in OFF file!" << std::endl; + } + + public: // Set graph from Rips complex. + /** \brief Creates a graph G from a Rips complex. + * + * @param[in] threshold threshold value for the Rips complex. + * @param[in] distance distance used to compute the Rips complex. + * + */ + template + void set_graph_from_rips(double threshold, Distance distance) { + Rips_complex rips_complex_from_points(point_cloud, threshold, distance); + rips_complex_from_points.create_complex(st, 1); + fill_adjacency_matrix_from_st(); + } + + public: // Pairwise distances. + /** \private \brief Computes all pairwise distances. + */ + template + void compute_pairwise_distances(Distance ref_distance) { + double d; + std::vector zeros(n); + for (int i = 0; i < n; i++) distances.push_back(zeros); + std::string distance = point_cloud_name; + distance.append("_dist"); + std::ifstream input(distance.c_str(), std::ios::out | std::ios::binary); + + if (input.good()) { + if (verbose) std::cout << "Reading distances..." << std::endl; + for (int i = 0; i < n; i++) { + for (int j = i; j < n; j++) { + input.read((char*)&d, 8); + distances[i][j] = d; + distances[j][i] = d; + } + } + input.close(); + } + + else { + if (verbose) std::cout << "Computing distances..." << std::endl; + input.close(); + std::ofstream output(distance, std::ios::out | std::ios::binary); + for (int i = 0; i < n; i++) { + int state = (int)floor(100 * (i * 1.0 + 1) / n) % 10; + if (state == 0 && verbose) std::cout << "\r" << state << "%" << std::flush; + for (int j = i; j < n; j++) { + double dis = ref_distance(point_cloud[i], point_cloud[j]); + distances[i][j] = dis; + distances[j][i] = dis; + output.write((char*)&dis, 8); + } + } + output.close(); + if (verbose) std::cout << std::endl; + } + } + + public: // Automatic tuning of Rips complex. + /** \brief Creates a graph G from a Rips complex whose threshold value is automatically tuned with subsampling---see + * \cite Carriere17c. * - * @param[in] distance distance between the points. - * @param[in] m number of points in the subsample. + * @param[in] distance distance between data points. + * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on + * how to choose it). + * @result delta threshold used for computing the Rips complex. * */ - template void set_cover_from_Voronoi(Distance distance, int m = 100){ - - voronoi_subsamples.resize(m); SampleWithoutReplacement(n,m,voronoi_subsamples); - if(distances.size() == 0) compute_pairwise_distances(distance); - std::vector mindist(n); for(int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); - - // Compute the geodesic distances to subsamples with Dijkstra - for(int i = 0; i < m; i++){ - if(verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; - int seed = voronoi_subsamples[i]; - std::vector dist(n); std::vector process(n); - for(int j = 0; j < n; j++){ dist[j] = std::numeric_limits::max(); process[j] = j; } - dist[seed] = 0; int curr_size = process.size(); int min_point, min_index; double min_dist; - std::vector neighbors; int num_neighbors; - - while(curr_size > 0){ - min_dist = std::numeric_limits::max(); min_index = -1; min_point = -1; - for(int j = 0; j < curr_size; j++){ - if(dist[process[j]] < min_dist){ - min_point = process[j]; min_dist = dist[process[j]]; min_index = j; - } - } - assert(min_index != -1); process.erase(process.begin() + min_index); - assert(min_point != -1); neighbors = adjacency_matrix[min_point]; num_neighbors = neighbors.size(); - for(int j = 0; j < num_neighbors; j++){ - double d = dist[min_point] + distances[min_point][neighbors[j]]; - dist[neighbors[j]] = std::min(dist[neighbors[j]], d); - } - curr_size = process.size(); - } - - for(int j = 0; j < n; j++) - if(mindist[j] > dist[j]){ - mindist[j] = dist[j]; - if(cover[j].size() == 0) cover[j].push_back(i); - else cover[j][0] = i; - } - } - - for(int i = 0; i < n; i++){ cover_back[cover[i][0]].push_back(i); cover_color[cover[i][0]].second += func_color[i]; cover_color[cover[i][0]].first++; } - for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; - maximal_dim = m-1; cover_name = "Voronoi"; - - } - - public: // return subset of data corresponding to a node - /** \brief Returns the data subset corresponding to a specific node of the created complex. + template + double set_graph_from_automatic_rips(Distance distance, int N = 100) { + int m = floor(n / std::exp((1 + rate_power) * std::log(std::log(n) / std::log(rate_constant)))); + m = std::min(m, n - 1); + std::vector samples(m); + double delta = 0; + + if (verbose) std::cout << n << " points in R^" << data_dimension << std::endl; + if (verbose) std::cout << "Subsampling " << m << " points" << std::endl; + + if (distances.size() == 0) compute_pairwise_distances(distance); + + //#pragma omp parallel for + for (int i = 0; i < N; i++) { + SampleWithoutReplacement(n, m, samples); + double hausdorff_dist = 0; + for (int j = 0; j < n; j++) { + double mj = distances[j][samples[0]]; + for (int k = 1; k < m; k++) mj = std::min(mj, distances[j][samples[k]]); + hausdorff_dist = std::max(hausdorff_dist, mj); + } + delta += hausdorff_dist / N; + } + + if (verbose) std::cout << "delta = " << delta << std::endl; + Rips_complex rips_complex_from_points(point_cloud, delta, distance); + rips_complex_from_points.create_complex(st, 1); + fill_adjacency_matrix_from_st(); + + return delta; + } + + // ******************************************************************************************************************* + // Functions. + // ******************************************************************************************************************* + + public: // Set function from file. + /** \brief Creates the function f from a file containing the function values. + * + * @param[in] func_file_name name of the input function file. + * + */ + void set_function_from_file(const std::string& func_file_name) { + int vertex_id = 0; + std::ifstream input(func_file_name); + std::string line; + double f; + while (std::getline(input, line)) { + std::stringstream stream(line); + stream >> f; + func.emplace(vertex_id, f); + vertex_id++; + } + functional_cover = true; + cover_name = func_file_name; + } + + public: // Set function from kth coordinate + /** \brief Creates the function f from the k-th coordinate of the point cloud P. + * + * @param[in] k coordinate to use (start at 0). + * + */ + void set_function_from_coordinate(int k) { + for (int i = 0; i < n; i++) func.emplace(i, point_cloud[i][k]); + char coordinate[100]; + sprintf(coordinate, "coordinate %d", k); + functional_cover = true; + cover_name = coordinate; + } + + public: // Set function from vector. + /** \brief Creates the function f from a vector stored in memory. + * + * @param[in] function input vector of values. + * + */ + template + void set_function_from_range(InputRange const& function) { + functional_cover = true; + int index = 0; + for (auto v : function) { + func.emplace(index, v); + index++; + } + } + + // ******************************************************************************************************************* + // Covers. + // ******************************************************************************************************************* + + public: // Automatic tuning of resolution. + /** \brief Computes the optimal length of intervals + * (i.e. the smallest interval length avoiding discretization artifacts---see \cite Carriere17c) for a functional + * cover. + * + * @result reso interval length used to compute the cover. + * + */ + double set_automatic_resolution() { + if (!functional_cover) { + std::cout << "Cover needs to come from the preimages of a function." << std::endl; + return 0; + } + if (type != "Nerve" && type != "GIC") { + std::cout << "Type of complex needs to be specified." << std::endl; + return 0; + } + + double reso = 0; + + if (type == "GIC") { + for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector vertices; + for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + reso = std::max(reso, std::abs(func[vertices[0]] - func[vertices[1]])); + } + } + if (verbose) std::cout << "resolution = " << reso << std::endl; + resolution_double = reso; + } + + if (type == "Nerve") { + for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector vertices; + for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + reso = std::max(reso, (std::abs(func[vertices[0]] - func[vertices[1]])) / gain); + } + } + if (verbose) std::cout << "resolution = " << reso << std::endl; + resolution_double = reso; + } + + return reso; + } + + public: + /** \brief Sets a length of intervals from a value stored in memory. * - * @param[in] c ID of the node. - * @result cover_back(c) vector of IDs of data points. + * @param[in] reso length of intervals. * */ - const std::vector & subpopulation(Cover_t c){ - return cover_back[c]; - } - - // ******************************************************************************************************************* - // Visualization. - // ******************************************************************************************************************* - - public: // Set color from file. - /** \brief Computes the function used to color the nodes of the simplicial complex from a file containing the function values. - * - * @param[in] color_file_name name of the input color file. - * - */ - void set_color_from_file(const std::string & color_file_name){ - int vertex_id = 0; std::ifstream input(color_file_name); std::string line; double f; - while(std::getline(input,line)){ - std::stringstream stream(line); stream >> f; - func_color.emplace(vertex_id, f); vertex_id++; - } - color_name = color_file_name; - } - - public: // Set color from kth coordinate - /** \brief Computes the function used to color the nodes of the simplicial complex from the k-th coordinate. - * - * @param[in] k coordinate to use (start at 0). - * - */ - void set_color_from_coordinate(int k = 0){ - for(int i = 0; i < n; i++) func_color.emplace(i, point_cloud[i][k]); - color_name = "coordinate "; color_name.append(std::to_string(k)); - } - - public: // Set color from vector. - /** \brief Computes the function used to color the nodes of the simplicial complex from a vector stored in memory. - * - * @param[in] color input vector of values. - * - */ - void set_color_from_vector(std::vector color){ - for(unsigned int i = 0; i < color.size(); i++) func_color.emplace(i, color[i]); - } - - public: // Create a .dot file that can be compiled with neato to produce a .pdf file. - /** \brief Creates a .dot file called SC.dot for neato (part of the graphviz package) once the simplicial complex is computed to get a visualization - * of its 1-skeleton in a .pdf file. - */ - void plot_DOT(){ - char mapp[11] = "SC.dot"; std::ofstream graphic(mapp); graphic << "graph GIC {" << std::endl; - double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ - maxv = std::max(maxv, iit->second.second); minv = std::min(minv, iit->second.second); - } - int k = 0; std::vector nodes; nodes.clear(); - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ - if(iit->second.first > mask){ - nodes.push_back(iit->first); - graphic << iit->first << "[shape=circle fontcolor=black color=black label=\"" \ - << iit->first << ":" << iit->second.first << "\" style=filled fillcolor=\"" \ - << (1-(maxv-iit->second.second)/(maxv-minv))*0.6 << ", 1, 1\"]" << std::endl; - k++; - } - } - int ke = 0; int num_simplices = simplices.size(); - for (int i = 0; i < num_simplices; i++) - if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask){ - graphic << " " << simplices[i][0] << " -- " << simplices[i][1] << " [weight=15];" << std::endl; ke++;} - graphic << "}"; graphic.close(); - std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; - } - - public: // Create a .txt file that can be compiled with KeplerMapper. - /** \brief Creates a .txt file called SC.txt describing the 1-skeleton, which can then be plotted with e.g. KeplerMapper. - */ - void write_info(){ - - int num_simplices = simplices.size(); int num_edges = 0; - char mapp[11] = "SC.txt"; std::ofstream graphic(mapp); - for (int i = 0; i < num_simplices; i++) - if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) - num_edges++; - - graphic << point_cloud_name << std::endl; - graphic << cover_name << std::endl; - graphic << color_name << std::endl; - graphic << resolution_double << " " << gain << std::endl; - graphic << cover_color.size() << " " << num_edges << std::endl; - - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) - graphic << iit->first << " " << iit->second.second << " " << iit->second.first << std::endl; - - for (int i = 0; i < num_simplices; i++) - if (simplices[i].size() == 2) - if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) - graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; - graphic.close(); - std::cout << "SC.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." << std::endl; - } - - - public: // Create a .off file that can be visualized (e.g. with Geomview). - /** \brief Creates a .off file called SC.off for 3D visualization, which contains the 2-skeleton of the GIC. - * This function assumes that the cover has been computed with Voronoi. If data points are in 1D or 2D, - * the remaining coordinates of the points embedded in 3D are set to 0. - */ - void plot_OFF(){ - - assert(cover_name == "Voronoi"); - char gic[11] = "SC.off"; std::ofstream graphic(gic); - graphic << "OFF" << std::endl; int m = voronoi_subsamples.size(); int numedges = 0; int numfaces = 0; - std::vector > edges, faces; int numsimplices = simplices.size(); - for (int i = 0; i < numsimplices; i++) { - if(simplices[i].size() == 2){ numedges++; edges.push_back(simplices[i]); } - if(simplices[i].size() == 3){ numfaces++; faces.push_back(simplices[i]); } - } - graphic << m << " " << numedges + numfaces << std::endl; - for(int i = 0; i < m; i++){ - if(data_dimension <= 3){ - for(int j = 0; j < data_dimension; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; - for(int j = data_dimension; j < 3; j++) graphic << 0 << " "; - graphic << std::endl; - } - else for(int j = 0; j < 3; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; - } - for(int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; - for(int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; - graphic.close(); - std::cout << "SC.off generated. It can be visualized with e.g. geomview." << std::endl; - - } - - // ******************************************************************************************************************* - // ******************************************************************************************************************* - + void set_resolution_with_interval_length(double reso) { resolution_double = reso; } + /** \brief Sets a number of intervals from a value stored in memory. + * + * @param[in] reso number of intervals. + * + */ + void set_resolution_with_interval_number(int reso) { resolution_int = reso; } + /** \brief Sets a gain from a value stored in memory (default value 0.3). + * + * @param[in] g gain. + * + */ + void set_gain(double g = 0.3) { gain = g; } + + public: // Set cover with preimages of function. + /** \brief Creates a cover C from the preimages of the function f. + * + */ + void set_cover_from_function() { + if (resolution_double == -1 && resolution_int == -1) { + std::cout << "Number and/or length of intervals not specified" << std::endl; + return; + } + if (gain == -1) { + std::cout << "Gain not specified" << std::endl; + return; + } + + // Read function values and compute min and max + std::map::iterator it; + double maxf, minf; + minf = std::numeric_limits::max(); + maxf = std::numeric_limits::min(); + for (it = func.begin(); it != func.end(); it++) { + minf = std::min(minf, it->second); + maxf = std::max(maxf, it->second); + } + int n = func.size(); + if (verbose) std::cout << "Min function value = " << minf << " and Max function value = " << maxf << std::endl; + + // Compute cover of im(f) + std::vector > intervals; + int res; + + if (resolution_double == -1) { // Case we use an integer for the number of intervals. + double incr = (maxf - minf) / resolution_int; + double x = minf; + double alpha = (incr * gain) / (2 - 2 * gain); + double y = minf + incr + alpha; + std::pair interm(x, y); + intervals.push_back(interm); + for (int i = 1; i < resolution_int - 1; i++) { + x = minf + i * incr - alpha; + y = minf + (i + 1) * incr + alpha; + std::pair inter(x, y); + intervals.push_back(inter); + } + x = minf + (resolution_int - 1) * incr - alpha; + y = maxf; + std::pair interM(x, y); + intervals.push_back(interM); + res = intervals.size(); + if (verbose) + for (int i = 0; i < res; i++) + std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" + << std::endl; + } + + else { + if (resolution_int == -1) { // Case we use a double for the length of the intervals. + double x = minf; + double y = x + resolution_double; + while (y <= maxf && maxf - (y - gain * resolution_double) >= resolution_double) { + std::pair inter(x, y); + intervals.push_back(inter); + x = y - gain * resolution_double; + y = x + resolution_double; + } + std::pair interM(x, maxf); + intervals.push_back(interM); + res = intervals.size(); + if (verbose) + for (int i = 0; i < res; i++) + std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" + << std::endl; + } + + else { // Case we use an integer and a double for the length of the intervals. + double x = minf; + double y = x + resolution_double; + int count = 0; + while (count < resolution_int && y <= maxf && maxf - (y - gain * resolution_double) >= resolution_double) { + std::pair inter(x, y); + intervals.push_back(inter); + count++; + x = y - gain * resolution_double; + y = x + resolution_double; + } + res = intervals.size(); + if (verbose) + for (int i = 0; i < res; i++) + std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" + << std::endl; + } + } + + // Sort points according to function values + std::vector points(n); + for (int i = 0; i < n; i++) points[i] = i; + std::sort(points.begin(), points.end(), Less(this->func)); + int id = 0; + int pos = 0; + + for (int i = 0; i < res; i++) { + // Find points in the preimage + std::map > prop; + std::pair inter1 = intervals[i]; + int tmp = pos; + + if (i != res - 1) { + if (i != 0) { + std::pair inter3 = intervals[i - 1]; + while (func[points[tmp]] < inter3.second && tmp != n) { + prop[points[tmp]] = adjacency_matrix[points[tmp]]; + tmp++; + } + } + + std::pair inter2 = intervals[i + 1]; + while (func[points[tmp]] < inter2.first && tmp != n) { + prop[points[tmp]] = adjacency_matrix[points[tmp]]; + tmp++; + } + + pos = tmp; + while (func[points[tmp]] < inter1.second && tmp != n) { + prop[points[tmp]] = adjacency_matrix[points[tmp]]; + tmp++; + } + + } + + else { + std::pair inter3 = intervals[i - 1]; + while (func[points[tmp]] < inter3.second && tmp != n) { + prop[points[tmp]] = adjacency_matrix[points[tmp]]; + tmp++; + } + + while (tmp != n) { + prop[points[tmp]] = adjacency_matrix[points[tmp]]; + tmp++; + } + } + + // Compute the connected components with DFS + std::map visit; + if (verbose) std::cout << "Preimage of interval " << i << std::endl; + for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) + visit[it->first] = false; + if (!(prop.empty())) { + for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) { + if (!(visit[it->first])) { + std::vector cc; + cc.clear(); + dfs(prop, it->first, cc, visit); + int cci = cc.size(); + if (verbose) std::cout << "one CC with " << cci << " points, "; + double average_col = 0; + for (int j = 0; j < cci; j++) { + cover[cc[j]].push_back(id); + cover_back[id].push_back(cc[j]); + average_col += func_color[cc[j]] / cci; + } + cover_fct[id] = i; + cover_color[id] = std::pair(cci, average_col); + id++; + } + } + } + if (verbose) std::cout << std::endl; + } + + maximal_dim = id - 1; + } + + public: // Set cover from file. + /** \brief Creates the cover C from a file containing the cover elements of each point (the order has to be the same + * as in the input file!). + * + * @param[in] cover_file_name name of the input cover file. + * + */ + void set_cover_from_file(const std::string& cover_file_name) { + int vertex_id = 0; + Cover_t cov; + std::vector cov_elts, cov_number; + std::ifstream input(cover_file_name); + std::string line; + while (std::getline(input, line)) { + cov_elts.clear(); + std::stringstream stream(line); + while (stream >> cov) { + cov_elts.push_back(cov); + cov_number.push_back(cov); + cover_fct[cov] = cov; + cover_color[cov].second += func_color[vertex_id]; + cover_color[cov].first++; + cover_back[cov].push_back(vertex_id); + } + cover[vertex_id] = cov_elts; + vertex_id++; + } + std::vector::iterator it; + std::sort(cov_number.begin(), cov_number.end()); + it = std::unique(cov_number.begin(), cov_number.end()); + cov_number.resize(std::distance(cov_number.begin(), it)); + maximal_dim = cov_number.size() - 1; + for (int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; + cover_name = cover_file_name; + } + + public: // Set cover from Voronoi + /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. + * + * @param[in] distance distance between the points. + * @param[in] m number of points in the subsample. + * + */ + template + void set_cover_from_Voronoi(Distance distance, int m = 100) { + voronoi_subsamples.resize(m); + SampleWithoutReplacement(n, m, voronoi_subsamples); + if (distances.size() == 0) compute_pairwise_distances(distance); + std::vector mindist(n); + for (int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); + + // Compute the geodesic distances to subsamples with Dijkstra + for (int i = 0; i < m; i++) { + if (verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; + int seed = voronoi_subsamples[i]; + std::vector dist(n); + std::vector process(n); + for (int j = 0; j < n; j++) { + dist[j] = std::numeric_limits::max(); + process[j] = j; + } + dist[seed] = 0; + int curr_size = process.size(); + int min_point, min_index; + double min_dist; + std::vector neighbors; + int num_neighbors; + + while (curr_size > 0) { + min_dist = std::numeric_limits::max(); + min_index = -1; + min_point = -1; + for (int j = 0; j < curr_size; j++) { + if (dist[process[j]] < min_dist) { + min_point = process[j]; + min_dist = dist[process[j]]; + min_index = j; + } + } + assert(min_index != -1); + process.erase(process.begin() + min_index); + assert(min_point != -1); + neighbors = adjacency_matrix[min_point]; + num_neighbors = neighbors.size(); + for (int j = 0; j < num_neighbors; j++) { + double d = dist[min_point] + distances[min_point][neighbors[j]]; + dist[neighbors[j]] = std::min(dist[neighbors[j]], d); + } + curr_size = process.size(); + } + + for (int j = 0; j < n; j++) + if (mindist[j] > dist[j]) { + mindist[j] = dist[j]; + if (cover[j].size() == 0) + cover[j].push_back(i); + else + cover[j][0] = i; + } + } + + for (int i = 0; i < n; i++) { + cover_back[cover[i][0]].push_back(i); + cover_color[cover[i][0]].second += func_color[i]; + cover_color[cover[i][0]].first++; + } + for (int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; + maximal_dim = m - 1; + cover_name = "Voronoi"; + } + + public: // return subset of data corresponding to a node + /** \brief Returns the data subset corresponding to a specific node of the created complex. + * + * @param[in] c ID of the node. + * @result cover_back(c) vector of IDs of data points. + * + */ + const std::vector& subpopulation(Cover_t c) { return cover_back[c]; } + + // ******************************************************************************************************************* + // Visualization. + // ******************************************************************************************************************* + + public: // Set color from file. + /** \brief Computes the function used to color the nodes of the simplicial complex from a file containing the function + * values. + * + * @param[in] color_file_name name of the input color file. + * + */ + void set_color_from_file(const std::string& color_file_name) { + int vertex_id = 0; + std::ifstream input(color_file_name); + std::string line; + double f; + while (std::getline(input, line)) { + std::stringstream stream(line); + stream >> f; + func_color.emplace(vertex_id, f); + vertex_id++; + } + color_name = color_file_name; + } + + public: // Set color from kth coordinate + /** \brief Computes the function used to color the nodes of the simplicial complex from the k-th coordinate. + * + * @param[in] k coordinate to use (start at 0). + * + */ + void set_color_from_coordinate(int k = 0) { + for (int i = 0; i < n; i++) func_color.emplace(i, point_cloud[i][k]); + color_name = "coordinate "; + color_name.append(std::to_string(k)); + } + + public: // Set color from vector. + /** \brief Computes the function used to color the nodes of the simplicial complex from a vector stored in memory. + * + * @param[in] color input vector of values. + * + */ + void set_color_from_vector(std::vector color) { + for (unsigned int i = 0; i < color.size(); i++) func_color.emplace(i, color[i]); + } + + public: // Create a .dot file that can be compiled with neato to produce a .pdf file. + /** \brief Creates a .dot file called SC.dot for neato (part of the graphviz package) once the simplicial complex is + * computed to get a visualization + * of its 1-skeleton in a .pdf file. + */ + void plot_DOT() { + char mapp[11] = "SC.dot"; + std::ofstream graphic(mapp); + graphic << "graph GIC {" << std::endl; + double maxv, minv; + maxv = std::numeric_limits::min(); + minv = std::numeric_limits::max(); + for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); + iit++) { + maxv = std::max(maxv, iit->second.second); + minv = std::min(minv, iit->second.second); + } + int k = 0; + std::vector nodes; + nodes.clear(); + for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); + iit++) { + if (iit->second.first > mask) { + nodes.push_back(iit->first); + graphic << iit->first << "[shape=circle fontcolor=black color=black label=\"" << iit->first << ":" + << iit->second.first << "\" style=filled fillcolor=\"" + << (1 - (maxv - iit->second.second) / (maxv - minv)) * 0.6 << ", 1, 1\"]" << std::endl; + k++; + } + } + int ke = 0; + int num_simplices = simplices.size(); + for (int i = 0; i < num_simplices; i++) + if (simplices[i].size() == 2) + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) { + graphic << " " << simplices[i][0] << " -- " << simplices[i][1] << " [weight=15];" << std::endl; + ke++; + } + graphic << "}"; + graphic.close(); + std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; + } + + public: // Create a .txt file that can be compiled with KeplerMapper. + /** \brief Creates a .txt file called SC.txt describing the 1-skeleton, which can then be plotted with e.g. + * KeplerMapper. + */ + void write_info() { + int num_simplices = simplices.size(); + int num_edges = 0; + char mapp[11] = "SC.txt"; + std::ofstream graphic(mapp); + for (int i = 0; i < num_simplices; i++) + if (simplices[i].size() == 2) + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) num_edges++; + + graphic << point_cloud_name << std::endl; + graphic << cover_name << std::endl; + graphic << color_name << std::endl; + graphic << resolution_double << " " << gain << std::endl; + graphic << cover_color.size() << " " << num_edges << std::endl; + + for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); + iit++) + graphic << iit->first << " " << iit->second.second << " " << iit->second.first << std::endl; + + for (int i = 0; i < num_simplices; i++) + if (simplices[i].size() == 2) + if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) + graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; + graphic.close(); + std::cout << "SC.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." + << std::endl; + } + + public: // Create a .off file that can be visualized (e.g. with Geomview). + /** \brief Creates a .off file called SC.off for 3D visualization, which contains the 2-skeleton of the GIC. + * This function assumes that the cover has been computed with Voronoi. If data points are in 1D or 2D, + * the remaining coordinates of the points embedded in 3D are set to 0. + */ + void plot_OFF() { + assert(cover_name == "Voronoi"); + char gic[11] = "SC.off"; + std::ofstream graphic(gic); + graphic << "OFF" << std::endl; + int m = voronoi_subsamples.size(); + int numedges = 0; + int numfaces = 0; + std::vector > edges, faces; + int numsimplices = simplices.size(); + for (int i = 0; i < numsimplices; i++) { + if (simplices[i].size() == 2) { + numedges++; + edges.push_back(simplices[i]); + } + if (simplices[i].size() == 3) { + numfaces++; + faces.push_back(simplices[i]); + } + } + graphic << m << " " << numedges + numfaces << std::endl; + for (int i = 0; i < m; i++) { + if (data_dimension <= 3) { + for (int j = 0; j < data_dimension; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; + for (int j = data_dimension; j < 3; j++) graphic << 0 << " "; + graphic << std::endl; + } else + for (int j = 0; j < 3; j++) graphic << point_cloud[voronoi_subsamples[i]][j] << " "; + } + for (int i = 0; i < numedges; i++) graphic << 2 << " " << edges[i][0] << " " << edges[i][1] << std::endl; + for (int i = 0; i < numfaces; i++) + graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; + graphic.close(); + std::cout << "SC.off generated. It can be visualized with e.g. geomview." << std::endl; + } + + // ******************************************************************************************************************* + // ******************************************************************************************************************* public: - /** \brief Creates the simplicial complex. - * - * @param[in] complex SimplicialComplexForRips to be created. - * - */ - template - void create_complex(SimplicialComplexForRips & complex) { - unsigned int dimension = 0; - for(auto const& simplex : simplices){ - complex.insert_simplex_and_subfaces(simplex); - if(dimension < simplex.size()-1) dimension = simplex.size()-1; - } - complex.set_dimension(dimension); - } + /** \brief Creates the simplicial complex. + * + * @param[in] complex SimplicialComplexForRips to be created. + * + */ + template + void create_complex(SimplicialComplexForRips& complex) { + unsigned int dimension = 0; + for (auto const& simplex : simplices) { + complex.insert_simplex_and_subfaces(simplex); + if (dimension < simplex.size() - 1) dimension = simplex.size() - 1; + } + complex.set_dimension(dimension); + } public: - /** \brief Computes the simplices of the simplicial complex. - */ - void find_simplices(){ - - if(type != "Nerve" && type != "GIC"){std::cout << "Type of complex needs to be specified." << std::endl; return;} - - if(type == "Nerve"){ - for(std::map >::iterator it = cover.begin(); it!=cover.end(); it++) simplices.push_back(it->second); - std::vector >::iterator it; - std::sort(simplices.begin(),simplices.end()); it = std::unique(simplices.begin(),simplices.end()); - simplices.resize(std::distance(simplices.begin(),it)); - } - - if(type == "GIC"){ - - if(functional_cover){ - - // Computes the simplices in the GIC by looking at all the edges of the graph and adding the - // corresponding edges in the GIC if the images of the endpoints belong to consecutive intervals. - - if (gain >= 0.5) - throw std::invalid_argument("the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); - - int v1, v2; - - // Loop on all points. - for(std::map >::iterator it = cover.begin(); it != cover.end(); it++){ - - int vid = it->first; std::vector neighbors = adjacency_matrix[vid]; int num_neighb = neighbors.size(); - - // Find cover of current point (vid). - if(cover[vid].size() == 2) v1 = std::min(cover[vid][0],cover[vid][1]); else v1 = cover[vid][0]; - std::vector node(1); node[0] = v1; simplices.push_back(node); - - // Loop on neighbors. - for(int i = 0; i < num_neighb; i++){ - - int neighb = neighbors[i]; - - // Find cover of neighbor (neighb). - if(cover[neighb].size() == 2) v2 = std::max(cover[neighb][0],cover[neighb][1]); else v2 = cover[neighb][0]; - - // If neighbor is in next interval, add edge. - if(cover_fct[v2] == cover_fct[v1] + 1){ - std::vector edge(2); edge[0] = v1; edge[1] = v2; - simplices.push_back(edge); - } - } - } - std::vector >::iterator it; - std::sort(simplices.begin(),simplices.end()); it = std::unique(simplices.begin(),simplices.end()); - simplices.resize(std::distance(simplices.begin(),it)); - - } - - else{ - - // Find IDs of edges to remove - std::vector simplex_to_remove; int simplex_id = 0; - for (auto simplex : st.complex_simplex_range()) { - if(st.dimension(simplex) == 1){ - std::vector > comp; - for(auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); - if(comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); - } - simplex_id++; - } - - // Remove edges - if(simplex_to_remove.size() > 1){ - int current_id = 1; - auto simplex = st.complex_simplex_range().begin(); int num_rem = 0; - for(int i = 0; i < simplex_id-1; i++){ - int j = i+1; auto simplex_tmp = simplex; simplex_tmp++; - if(j == simplex_to_remove[current_id]){st.remove_maximal_simplex(*simplex_tmp); current_id++; num_rem++;} - else simplex++; - } simplex = st.complex_simplex_range().begin(); - for(int i = 0; i < simplex_to_remove[0]; i++) simplex++; st.remove_maximal_simplex(*simplex); - } - - // Build the Simplex Tree corresponding to the graph - st.expansion(maximal_dim); - - // Find simplices of GIC - simplices.clear(); - for (auto simplex : st.complex_simplex_range()) { - if(!st.has_children(simplex)){ - - std::vector simplx; - for (auto vertex : st.simplex_vertex_range(simplex)){ - unsigned int sz = cover[vertex].size(); - for(unsigned int i = 0; i < sz; i++){ - simplx.push_back(cover[vertex][i]); - } - } - - std::sort(simplx.begin(),simplx.end()); std::vector::iterator it = std::unique(simplx.begin(),simplx.end()); - simplx.resize(std::distance(simplx.begin(),it)); - simplices.push_back(simplx); - - } - } - std::vector >::iterator it; - std::sort(simplices.begin(),simplices.end()); it = std::unique(simplices.begin(),simplices.end()); - simplices.resize(std::distance(simplices.begin(),it)); - - } - } - - } - + /** \brief Computes the simplices of the simplicial complex. + */ + void find_simplices() { + if (type != "Nerve" && type != "GIC") { + std::cout << "Type of complex needs to be specified." << std::endl; + return; + } + + if (type == "Nerve") { + for (std::map >::iterator it = cover.begin(); it != cover.end(); it++) + simplices.push_back(it->second); + std::vector >::iterator it; + std::sort(simplices.begin(), simplices.end()); + it = std::unique(simplices.begin(), simplices.end()); + simplices.resize(std::distance(simplices.begin(), it)); + } + + if (type == "GIC") { + if (functional_cover) { + // Computes the simplices in the GIC by looking at all the edges of the graph and adding the + // corresponding edges in the GIC if the images of the endpoints belong to consecutive intervals. + + if (gain >= 0.5) + throw std::invalid_argument( + "the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); + + int v1, v2; + + // Loop on all points. + for (std::map >::iterator it = cover.begin(); it != cover.end(); it++) { + int vid = it->first; + std::vector neighbors = adjacency_matrix[vid]; + int num_neighb = neighbors.size(); + + // Find cover of current point (vid). + if (cover[vid].size() == 2) + v1 = std::min(cover[vid][0], cover[vid][1]); + else + v1 = cover[vid][0]; + std::vector node(1); + node[0] = v1; + simplices.push_back(node); + + // Loop on neighbors. + for (int i = 0; i < num_neighb; i++) { + int neighb = neighbors[i]; + + // Find cover of neighbor (neighb). + if (cover[neighb].size() == 2) + v2 = std::max(cover[neighb][0], cover[neighb][1]); + else + v2 = cover[neighb][0]; + + // If neighbor is in next interval, add edge. + if (cover_fct[v2] == cover_fct[v1] + 1) { + std::vector edge(2); + edge[0] = v1; + edge[1] = v2; + simplices.push_back(edge); + } + } + } + std::vector >::iterator it; + std::sort(simplices.begin(), simplices.end()); + it = std::unique(simplices.begin(), simplices.end()); + simplices.resize(std::distance(simplices.begin(), it)); + + } + + else { + // Find IDs of edges to remove + std::vector simplex_to_remove; + int simplex_id = 0; + for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector > comp; + for (auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); + if (comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); + } + simplex_id++; + } + + // Remove edges + if (simplex_to_remove.size() > 1) { + int current_id = 1; + auto simplex = st.complex_simplex_range().begin(); + int num_rem = 0; + for (int i = 0; i < simplex_id - 1; i++) { + int j = i + 1; + auto simplex_tmp = simplex; + simplex_tmp++; + if (j == simplex_to_remove[current_id]) { + st.remove_maximal_simplex(*simplex_tmp); + current_id++; + num_rem++; + } else + simplex++; + } + simplex = st.complex_simplex_range().begin(); + for (int i = 0; i < simplex_to_remove[0]; i++) simplex++; + st.remove_maximal_simplex(*simplex); + } + + // Build the Simplex Tree corresponding to the graph + st.expansion(maximal_dim); + + // Find simplices of GIC + simplices.clear(); + for (auto simplex : st.complex_simplex_range()) { + if (!st.has_children(simplex)) { + std::vector simplx; + for (auto vertex : st.simplex_vertex_range(simplex)) { + unsigned int sz = cover[vertex].size(); + for (unsigned int i = 0; i < sz; i++) { + simplx.push_back(cover[vertex][i]); + } + } + + std::sort(simplx.begin(), simplx.end()); + std::vector::iterator it = std::unique(simplx.begin(), simplx.end()); + simplx.resize(std::distance(simplx.begin(), it)); + simplices.push_back(simplx); + } + } + std::vector >::iterator it; + std::sort(simplices.begin(), simplices.end()); + it = std::unique(simplices.begin(), simplices.end()); + simplices.resize(std::distance(simplices.begin(), it)); + } + } + } }; -} // namespace cover_complex +} // namespace cover_complex -} // namespace Gudhi +} // namespace Gudhi #endif // GIC_H_ diff --git a/src/Nerve_GIC/test/CMakeLists.txt b/src/Nerve_GIC/test/CMakeLists.txt index 77efe043..03fe47ca 100644 --- a/src/Nerve_GIC/test/CMakeLists.txt +++ b/src/Nerve_GIC/test/CMakeLists.txt @@ -3,12 +3,12 @@ project(Graph_induced_complex_tests) include(GUDHI_test_coverage) -add_executable ( Graph_induced_complex_test_unit test_GIC.cpp ) -target_link_libraries(Graph_induced_complex_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +add_executable ( Nerve_GIC_test_unit test_GIC.cpp ) +target_link_libraries(Nerve_GIC_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) if (TBB_FOUND) - target_link_libraries(Graph_induced_complex_test_unit ${TBB_LIBRARIES}) + target_link_libraries(Nerve_GIC_test_unit ${TBB_LIBRARIES}) endif() file(COPY data DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) -gudhi_add_coverage_test(Graph_induced_complex_test_unit) +gudhi_add_coverage_test(Nerve_GIC_test_unit) diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index d7af7680..a8b1e7f7 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -28,51 +28,63 @@ #include #include #include -#include // std::max +#include // std::max #include #include #include BOOST_AUTO_TEST_CASE(check_nerve) { - using Point = std::vector; - Gudhi::cover_complex::Cover_complex N; N.set_type("Nerve"); - std::string cloud_file_name("data/cloud"); N.read_point_cloud(cloud_file_name); - std::string graph_file_name("data/graph"); N.set_graph_from_file(graph_file_name); - std::string cover_file_name("data/cover"); N.set_cover_from_file(cover_file_name); - N.find_simplices(); Gudhi::Simplex_tree<> stree; N.create_complex(stree); + Gudhi::cover_complex::Cover_complex N; + N.set_type("Nerve"); + std::string cloud_file_name("data/cloud"); + N.read_point_cloud(cloud_file_name); + std::string graph_file_name("data/graph"); + N.set_graph_from_file(graph_file_name); + std::string cover_file_name("data/cover"); + N.set_cover_from_file(cover_file_name); + N.find_simplices(); + Gudhi::Simplex_tree<> stree; + N.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); - BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 0); + BOOST_CHECK((stree.num_simplices() - stree.num_vertices()) == 0); BOOST_CHECK(stree.dimension() == 0); } BOOST_AUTO_TEST_CASE(check_GIC) { - using Point = std::vector; - Gudhi::cover_complex::Cover_complex GIC; GIC.set_type("GIC"); - std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); - std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); - std::string cover_file_name("data/cover"); GIC.set_cover_from_file(cover_file_name); - GIC.find_simplices(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::cover_complex::Cover_complex GIC; + GIC.set_type("GIC"); + std::string cloud_file_name("data/cloud"); + GIC.read_point_cloud(cloud_file_name); + std::string graph_file_name("data/graph"); + GIC.set_graph_from_file(graph_file_name); + std::string cover_file_name("data/cover"); + GIC.set_cover_from_file(cover_file_name); + GIC.find_simplices(); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 3); - BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 4); + BOOST_CHECK((stree.num_simplices() - stree.num_vertices()) == 4); BOOST_CHECK(stree.dimension() == 2); } - BOOST_AUTO_TEST_CASE(check_voronoiGIC) { - using Point = std::vector; - Gudhi::cover_complex::Cover_complex GIC; GIC.set_type("GIC"); - std::string cloud_file_name("data/cloud"); GIC.read_point_cloud(cloud_file_name); - std::string graph_file_name("data/graph"); GIC.set_graph_from_file(graph_file_name); - GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(),2); - GIC.find_simplices(); Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + Gudhi::cover_complex::Cover_complex GIC; + GIC.set_type("GIC"); + std::string cloud_file_name("data/cloud"); + GIC.read_point_cloud(cloud_file_name); + std::string graph_file_name("data/graph"); + GIC.set_graph_from_file(graph_file_name); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), 2); + GIC.find_simplices(); + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); BOOST_CHECK(stree.num_vertices() == 2); - BOOST_CHECK((stree.num_simplices()-stree.num_vertices()) == 1); + BOOST_CHECK((stree.num_simplices() - stree.num_vertices()) == 1); BOOST_CHECK(stree.dimension() == 1); } - -- cgit v1.2.3 From f4bacd6ca6db4ef85a030cd505715174e4db6f6d Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 19 Dec 2017 14:06:48 +0000 Subject: changed data structure to use boost graphs git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@3085 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 614b6362ceeb8237c224d12b523677dcbc82fba8 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/example/FuncGIC.cpp | 1 + src/Nerve_GIC/example/Nerve.cpp | 15 +- src/Nerve_GIC/include/gudhi/GIC.h | 1077 +++++++++++++---------- src/cmake/modules/GUDHI_modules.cmake | 6 +- 5 files changed, 630 insertions(+), 471 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 3a0d8154..6668d850 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -169,7 +169,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./FuncGIC ../../data/points/COIL_database/lucky_cat.off ../../data/points/COIL_database/lucky_cat_PCA1 --v + * \code $> ./FuncGIC ../../../../data/points/COIL_database/lucky_cat.off ../../../../data/points/COIL_database/lucky_cat_PCA1 --v * \endcode * * the program outputs again SC.dot which gives the following visualization after using neato: diff --git a/src/Nerve_GIC/example/FuncGIC.cpp b/src/Nerve_GIC/example/FuncGIC.cpp index 3762db4e..3583c66f 100644 --- a/src/Nerve_GIC/example/FuncGIC.cpp +++ b/src/Nerve_GIC/example/FuncGIC.cpp @@ -71,6 +71,7 @@ int main(int argc, char **argv) { Gudhi::Simplex_tree<> stree; GIC.create_complex(stree); + GIC.compute_PD >(); // -------------------------------------------- // Display information about the functional GIC diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index 4d5b009b..7634c6f4 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -25,19 +25,21 @@ #include #include +using namespace std; + void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; + cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; + cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; exit(-1); // ----- >> } int main(int argc, char **argv) { if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); - using Point = std::vector; + using Point = vector; - std::string off_file_name(argv[1]); + string off_file_name(argv[1]); int coord = atoi(argv[2]); int resolution = atoi(argv[3]); double gain = atof(argv[4]); @@ -54,7 +56,7 @@ int main(int argc, char **argv) { bool check = SC.read_point_cloud(off_file_name); if (!check) { - std::cout << "Incorrect OFF file." << std::endl; + cout << "Incorrect OFF file." << endl; } else { SC.set_type("Nerve"); @@ -72,6 +74,7 @@ int main(int argc, char **argv) { Gudhi::Simplex_tree<> stree; SC.create_complex(stree); + SC.compute_PD >(); // ---------------------------------------------------------------------------- // Display information about the graph induced complex diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 9f107a7e..d8c6abd1 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -30,6 +30,16 @@ #include #include #include +#include +#include + +#include +#include +#include +#include +#include +#include +#include #include #include @@ -41,13 +51,21 @@ #include #include +using namespace boost; +using namespace std; + namespace Gudhi { namespace cover_complex { -using Simplex_tree = Gudhi::Simplex_tree<>; -using Filtration_value = Simplex_tree::Filtration_value; -using Rips_complex = Gudhi::rips_complex::Rips_complex; +using Simplex_tree = Gudhi::Simplex_tree<>; +using Filtration_value = Simplex_tree::Filtration_value; +using Rips_complex = Gudhi::rips_complex::Rips_complex; +using PersistenceDiagram = vector >; +using Graph = subgraph > > >; +using vertex_t = graph_traits::vertex_descriptor; +using IndexMap = property_map::type; +using WeightMap = property_map::type; /** * \class Cover_complex @@ -72,25 +90,35 @@ using Rips_complex = Gudhi::rips_complex::Rips_complex; template class Cover_complex { private: - // Graph_induced_complex(std::map fun){func = fun;} + bool verbose = false; // whether to display information. - std::vector point_cloud; - std::vector > one_skeleton; - typedef int Cover_t; // elements of cover C are indexed by integers. - std::vector > simplices; - std::map > cover; - std::map > cover_back; + + vector point_cloud; int maximal_dim; // maximal dimension of output simplicial complex. int data_dimension; // dimension of input data. int n; // number of points. - std::map - cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. - std::map > - cover_color; // size and coloring of the vertices of the output simplicial complex. - Simplex_tree st; - std::map > adjacency_matrix; - std::vector > distances; + vector > distances; + + map func; // function used to compute the output simplicial complex. + map func_color; // function used to compute the colors of the nodes of the output simplicial complex. + bool functional_cover = false; // whether we use a cover with preimages of a function or not. + + Graph one_skeleton_OFF; // one-skeleton given by the input OFF file (if it exists). + Graph one_skeleton; // one-skeleton used to compute the connected components. + vector vertices; + vector > simplices; + + vector voronoi_subsamples; + + PersistenceDiagram PD; + vector distribution; + + map > cover; + map > cover_back; + map cover_std; // standard function (induced by func) used to compute the extended persistence diagram of the output simplicial complex. + map cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. + map > cover_color; // size and coloring (induced by func_color) of the vertices of the output simplicial complex. int resolution_int = -1; double resolution_double = -1; @@ -99,19 +127,15 @@ class Cover_complex { double rate_power = 0.001; // Power in the subsampling. int mask = 0; // Ignore nodes containing less than mask points. - std::map func; - std::map func_color; - std::vector voronoi_subsamples; - std::string cover_name; - std::string point_cloud_name; - std::string color_name; - std::string type; // Nerve or GIC - bool functional_cover = false; // whether we use a cover with preimages of a function or not + string cover_name; + string point_cloud_name; + string color_name; + string type; // Nerve or GIC // Point comparator struct Less { - Less(std::map func) { Fct = func; } - std::map Fct; + Less(map func) { Fct = func; } + map Fct; bool operator()(int a, int b) { if (Fct[a] == Fct[b]) return a < b; @@ -120,54 +144,23 @@ class Cover_complex { } }; - // DFS - private: - void dfs(std::map >& G, int p, std::vector& cc, std::map& visit) { - cc.push_back(p); - visit[p] = true; - int neighb = G[p].size(); - for (int i = 0; i < neighb; i++) - if (visit.find(G[p][i]) != visit.end()) - if (!(visit[G[p][i]])) dfs(G, G[p][i], cc, visit); - } - // Find random number in [0,1]. double GetUniform() { - static std::default_random_engine re; - static std::uniform_real_distribution Dist(0, 1); + thread_local default_random_engine re; + thread_local uniform_real_distribution Dist(0, 1); return Dist(re); } // Subsample points. - void SampleWithoutReplacement(int populationSize, int sampleSize, std::vector& samples) { - int t = 0; - int m = 0; - double u; - while (m < sampleSize) { + void SampleWithoutReplacement(int populationSize, int sampleSize, vector & samples) { + int t = 0; int m = 0; double u; + while (m < sampleSize){ u = GetUniform(); - if ((populationSize - t) * u >= sampleSize - m) { - t++; - } else { - samples[m] = t; - t++; - m++; - } + if ((populationSize - t) * u >= sampleSize - m) t++; + else{ samples[m] = t; t++; m++;} } } - private: - void fill_adjacency_matrix_from_st() { - std::vector empty; - for (int i = 0; i < n; i++) adjacency_matrix[i] = empty; - for (auto simplex : st.complex_simplex_range()) { - if (st.dimension(simplex) == 1) { - std::vector vertices; - for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - adjacency_matrix[vertices[0]].push_back(vertices[1]); - adjacency_matrix[vertices[1]].push_back(vertices[0]); - } - } - } public: /** \brief Specifies whether the type of the output simplicial complex. @@ -214,36 +207,36 @@ class Cover_complex { * @param[in] off_file_name name of the input .OFF or .nOFF file. * */ - bool read_point_cloud(const std::string& off_file_name) { + bool read_point_cloud(const string & off_file_name) { point_cloud_name = off_file_name; - std::ifstream input(off_file_name); - std::string line; + ifstream input(off_file_name); + string line; char comment = '#'; while (comment == '#') { getline(input, line); - if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) comment = line[line.find_first_not_of(' ')]; + if (!line.empty() && !all_of(line.begin(), line.end(), (int(*)(int))isspace)) comment = line[line.find_first_not_of(' ')]; } - if (std::strcmp((char*)line.c_str(), "nOFF") == 0) { + if (strcmp((char*)line.c_str(), "nOFF") == 0) { comment = '#'; while (comment == '#') { getline(input, line); - if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) + if (!line.empty() && !all_of(line.begin(), line.end(), (int(*)(int))isspace)) comment = line[line.find_first_not_of(' ')]; } - std::stringstream stream(line); + stringstream stream(line); stream >> data_dimension; } else { data_dimension = 3; } comment = '#'; - int numedges, numfaces, i, num; + int numedges, numfaces, i, dim; while (comment == '#') { getline(input, line); - if (!line.empty() && !std::all_of(line.begin(), line.end(), isspace)) comment = line[line.find_first_not_of(' ')]; + if (!line.empty() && !all_of(line.begin(), line.end(), (int(*)(int))isspace)) comment = line[line.find_first_not_of(' ')]; } - std::stringstream stream(line); + stringstream stream(line); stream >> n; stream >> numfaces; stream >> numedges; @@ -251,12 +244,10 @@ class Cover_complex { i = 0; while (i < n) { getline(input, line); - if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && - !std::all_of(line.begin(), line.end(), isspace)) { - std::vector point; - std::istringstream iss(line); - point.assign(std::istream_iterator(iss), std::istream_iterator()); + if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && !all_of(line.begin(), line.end(), (int(*)(int))isspace)) { + istringstream iss(line); vector point; point.assign(istream_iterator(iss), istream_iterator()); point_cloud.emplace_back(point.begin(), point.begin() + data_dimension); + add_vertex(one_skeleton_OFF); vertices.push_back(add_vertex(one_skeleton)); i++; } } @@ -264,20 +255,12 @@ class Cover_complex { i = 0; while (i < numfaces) { getline(input, line); - if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && - !std::all_of(line.begin(), line.end(), isspace)) { - std::vector simplex; - std::istringstream iss(line); - simplex.assign(std::istream_iterator(iss), std::istream_iterator()); - num = simplex[0]; - std::vector edge(2); - for (int j = 1; j <= num; j++) { - for (int k = j + 1; k <= num; k++) { - edge[0] = simplex[j]; - edge[1] = simplex[k]; - one_skeleton.push_back(edge); - } - } + if (!line.empty() && line[line.find_first_not_of(' ')] != '#' && !all_of(line.begin(), line.end(), (int(*)(int))isspace)) { + vector simplex; istringstream iss(line); + simplex.assign(istream_iterator(iss), istream_iterator()); dim = simplex[0]; + for (int j = 1; j <= dim; j++) + for (int k = j + 1; k <= dim; k++) + add_edge(vertices[simplex[j]], vertices[simplex[k]], one_skeleton_OFF); i++; } } @@ -297,23 +280,12 @@ class Cover_complex { * each edge being represented by the IDs of its two nodes. * */ - void set_graph_from_file(const std::string& graph_file_name) { - int neighb; - std::ifstream input(graph_file_name); - std::string line; - int edge[2]; - int n = 0; - while (std::getline(input, line)) { - std::stringstream stream(line); - stream >> edge[0]; - while (stream >> neighb) { - edge[1] = neighb; - st.insert_simplex_and_subfaces(edge); - } - n++; + void set_graph_from_file(const string & graph_file_name){ + int neighb; ifstream input(graph_file_name); string line; int source; + while (getline(input, line)){ + stringstream stream(line); stream >> source; + while (stream >> neighb) add_edge(vertices[source], vertices[neighb], one_skeleton); } - - fill_adjacency_matrix_from_st(); } public: // Set graph from OFF file. @@ -321,13 +293,8 @@ class Cover_complex { * */ void set_graph_from_OFF() { - int num_edges = one_skeleton.size(); - if (num_edges > 0) { - for (int i = 0; i < num_edges; i++) st.insert_simplex_and_subfaces(one_skeleton[i]); - fill_adjacency_matrix_from_st(); - } else { - std::cout << "No triangulation read in OFF file!" << std::endl; - } + if(num_edges(one_skeleton_OFF)) one_skeleton = one_skeleton_OFF; + else cout << "No triangulation read in OFF file!" << endl; } public: // Set graph from Rips complex. @@ -339,9 +306,23 @@ class Cover_complex { */ template void set_graph_from_rips(double threshold, Distance distance) { - Rips_complex rips_complex_from_points(point_cloud, threshold, distance); - rips_complex_from_points.create_complex(st, 1); - fill_adjacency_matrix_from_st(); + if(distances.size() == 0) compute_pairwise_distances(distance); + for(int i = 0; i < n; i++){ + for(int j = i+1; j < n; j++){ + if(distances[i][j] <= threshold){ + add_edge(vertices[i], vertices[j], one_skeleton); + put(edge_weight, one_skeleton, edge(vertices[i], vertices[j], one_skeleton).first, distances[i][j]); + } + } + } + } + + public: + void set_graph_weights(){ + IndexMap index = get(vertex_index, one_skeleton); WeightMap weight = get(edge_weight, one_skeleton); + graph_traits::edge_iterator ei, ei_end; + for (tie(ei, ei_end) = edges(one_skeleton); ei != ei_end; ++ei) + put(weight, *ei, distances[index[source(*ei, one_skeleton)]][index[target(*ei, one_skeleton)]]); } public: // Pairwise distances. @@ -349,39 +330,34 @@ class Cover_complex { */ template void compute_pairwise_distances(Distance ref_distance) { - double d; - std::vector zeros(n); - for (int i = 0; i < n; i++) distances.push_back(zeros); - std::string distance = point_cloud_name; + double d; vector zeros(n); for (int i = 0; i < n; i++) distances.push_back(zeros); + string distance = point_cloud_name; distance.append("_dist"); - std::ifstream input(distance.c_str(), std::ios::out | std::ios::binary); + ifstream input(distance.c_str(), ios::out | ios::binary); if (input.good()) { if (verbose) std::cout << "Reading distances..." << std::endl; for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { input.read((char*)&d, 8); - distances[i][j] = d; - distances[j][i] = d; + distances[i][j] = d; distances[j][i] = d; } } input.close(); } else { - if (verbose) std::cout << "Computing distances..." << std::endl; - input.close(); - std::ofstream output(distance, std::ios::out | std::ios::binary); + if (verbose) cout << "Computing distances..." << endl; + input.close(); ofstream output(distance, ios::out | ios::binary); for (int i = 0; i < n; i++) { int state = (int)floor(100 * (i * 1.0 + 1) / n) % 10; - if (state == 0 && verbose) std::cout << "\r" << state << "%" << std::flush; + if (state == 0 && verbose) cout << "\r" << state << "%" << flush; for (int j = i; j < n; j++) { double dis = ref_distance(point_cloud[i], point_cloud[j]); - distances[i][j] = dis; - distances[j][i] = dis; + distances[i][j] = dis; distances[j][i] = dis; output.write((char*)&dis, 8); } } output.close(); - if (verbose) std::cout << std::endl; + if (verbose) cout << endl; } } @@ -397,13 +373,13 @@ class Cover_complex { */ template double set_graph_from_automatic_rips(Distance distance, int N = 100) { - int m = floor(n / std::exp((1 + rate_power) * std::log(std::log(n) / std::log(rate_constant)))); - m = std::min(m, n - 1); - std::vector samples(m); + int m = floor(n / exp((1 + rate_power) * log(log(n) / log(rate_constant)))); + m = min(m, n - 1); + vector samples(m); double delta = 0; - if (verbose) std::cout << n << " points in R^" << data_dimension << std::endl; - if (verbose) std::cout << "Subsampling " << m << " points" << std::endl; + if (verbose) cout << n << " points in R^" << data_dimension << endl; + if (verbose) cout << "Subsampling " << m << " points" << endl; if (distances.size() == 0) compute_pairwise_distances(distance); @@ -413,17 +389,14 @@ class Cover_complex { double hausdorff_dist = 0; for (int j = 0; j < n; j++) { double mj = distances[j][samples[0]]; - for (int k = 1; k < m; k++) mj = std::min(mj, distances[j][samples[k]]); - hausdorff_dist = std::max(hausdorff_dist, mj); + for (int k = 1; k < m; k++) mj = min(mj, distances[j][samples[k]]); + hausdorff_dist = max(hausdorff_dist, mj); } delta += hausdorff_dist / N; } - if (verbose) std::cout << "delta = " << delta << std::endl; - Rips_complex rips_complex_from_points(point_cloud, delta, distance); - rips_complex_from_points.create_complex(st, 1); - fill_adjacency_matrix_from_st(); - + if (verbose) cout << "delta = " << delta << endl; + set_graph_from_rips(delta, distance); return delta; } @@ -438,15 +411,9 @@ class Cover_complex { * */ void set_function_from_file(const std::string& func_file_name) { - int vertex_id = 0; - std::ifstream input(func_file_name); - std::string line; - double f; - while (std::getline(input, line)) { - std::stringstream stream(line); - stream >> f; - func.emplace(vertex_id, f); - vertex_id++; + int i = 0; ifstream input(func_file_name); string line; double f; + while (getline(input, line)) { + stringstream stream(line); stream >> f; func.emplace(i, f); i++; } functional_cover = true; cover_name = func_file_name; @@ -473,13 +440,9 @@ class Cover_complex { * */ template - void set_function_from_range(InputRange const& function) { + void set_function_from_range(InputRange const& f) { + for (int i = 0; i < n; i++) func.emplace(i, f[i]); functional_cover = true; - int index = 0; - for (auto v : function) { - func.emplace(index, v); - index++; - } } // ******************************************************************************************************************* @@ -504,29 +467,21 @@ class Cover_complex { return 0; } - double reso = 0; + double reso = 0; IndexMap index = get(vertex_index, one_skeleton); if (type == "GIC") { - for (auto simplex : st.complex_simplex_range()) { - if (st.dimension(simplex) == 1) { - std::vector vertices; - for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - reso = std::max(reso, std::abs(func[vertices[0]] - func[vertices[1]])); - } - } - if (verbose) std::cout << "resolution = " << reso << std::endl; + graph_traits::edge_iterator ei, ei_end; + for (tie(ei, ei_end) = edges(one_skeleton); ei != ei_end; ++ei) + reso = max(reso, abs(func[index[source(*ei, one_skeleton)]] - func[index[target(*ei, one_skeleton)]])); + if (verbose) cout << "resolution = " << reso << endl; resolution_double = reso; } if (type == "Nerve") { - for (auto simplex : st.complex_simplex_range()) { - if (st.dimension(simplex) == 1) { - std::vector vertices; - for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); - reso = std::max(reso, (std::abs(func[vertices[0]] - func[vertices[1]])) / gain); - } - } - if (verbose) std::cout << "resolution = " << reso << std::endl; + graph_traits::edge_iterator ei, ei_end; + for (tie(ei, ei_end) = edges(one_skeleton); ei != ei_end; ++ei) + reso = max(reso, abs(func[index[source(*ei, one_skeleton)]] - func[index[target(*ei, one_skeleton)]]) / gain); + if (verbose) cout << "resolution = " << reso << endl; resolution_double = reso; } @@ -559,77 +514,69 @@ class Cover_complex { */ void set_cover_from_function() { if (resolution_double == -1 && resolution_int == -1) { - std::cout << "Number and/or length of intervals not specified" << std::endl; + cout << "Number and/or length of intervals not specified" << endl; return; } if (gain == -1) { - std::cout << "Gain not specified" << std::endl; + cout << "Gain not specified" << endl; return; } // Read function values and compute min and max - std::map::iterator it; - double maxf, minf; - minf = std::numeric_limits::max(); - maxf = std::numeric_limits::min(); - for (it = func.begin(); it != func.end(); it++) { - minf = std::min(minf, it->second); - maxf = std::max(maxf, it->second); + double minf = numeric_limits::max(); double maxf = numeric_limits::lowest(); + for (int i = 0; i < n; i++) { + minf = min(minf, func[i]); maxf = max(maxf, func[i]); } - int n = func.size(); - if (verbose) std::cout << "Min function value = " << minf << " and Max function value = " << maxf << std::endl; + if (verbose) cout << "Min function value = " << minf << " and Max function value = " << maxf << endl; // Compute cover of im(f) - std::vector > intervals; - int res; + vector > intervals; int res; if (resolution_double == -1) { // Case we use an integer for the number of intervals. double incr = (maxf - minf) / resolution_int; double x = minf; double alpha = (incr * gain) / (2 - 2 * gain); double y = minf + incr + alpha; - std::pair interm(x, y); + pair interm(x, y); intervals.push_back(interm); for (int i = 1; i < resolution_int - 1; i++) { x = minf + i * incr - alpha; y = minf + (i + 1) * incr + alpha; - std::pair inter(x, y); + pair inter(x, y); intervals.push_back(inter); } x = minf + (resolution_int - 1) * incr - alpha; y = maxf; - std::pair interM(x, y); + pair interM(x, y); intervals.push_back(interM); res = intervals.size(); if (verbose) { for (int i = 0; i < res; i++) - std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" - << std::endl; + cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << endl; } } else { if (resolution_int == -1) { // Case we use a double for the length of the intervals. double x = minf; double y = x + resolution_double; while (y <= maxf && maxf - (y - gain * resolution_double) >= resolution_double) { - std::pair inter(x, y); + pair inter(x, y); intervals.push_back(inter); x = y - gain * resolution_double; y = x + resolution_double; } - std::pair interM(x, maxf); + pair interM(x, maxf); intervals.push_back(interM); res = intervals.size(); if (verbose) { for (int i = 0; i < res; i++) - std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" - << std::endl; + cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << endl; } } else { // Case we use an integer and a double for the length of the intervals. double x = minf; double y = x + resolution_double; int count = 0; while (count < resolution_int && y <= maxf && maxf - (y - gain * resolution_double) >= resolution_double) { - std::pair inter(x, y); + pair inter(x, y); intervals.push_back(inter); count++; x = y - gain * resolution_double; @@ -638,88 +585,80 @@ class Cover_complex { res = intervals.size(); if (verbose) { for (int i = 0; i < res; i++) - std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" - << std::endl; + cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << endl; } } } // Sort points according to function values - std::vector points(n); - for (int i = 0; i < n; i++) points[i] = i; - std::sort(points.begin(), points.end(), Less(this->func)); - int id = 0; - int pos = 0; + vector points(n); for (int i = 0; i < n; i++) points[i] = i; + sort(points.begin(), points.end(), Less(this->func)); + + int id = 0; int pos = 0; int maxc = -1; IndexMap index = get(vertex_index, one_skeleton); for (int i = 0; i < res; i++) { + // Find points in the preimage - std::map > prop; - std::pair inter1 = intervals[i]; - int tmp = pos; + vector indices; pair inter1 = intervals[i]; + int tmp = pos; double u, v; Graph G = one_skeleton.create_subgraph(); if (i != res - 1) { + if (i != 0) { - std::pair inter3 = intervals[i - 1]; - while (func[points[tmp]] < inter3.second && tmp != n) { - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; + pair inter3 = intervals[i - 1]; + while (func[points[tmp]] < inter3.second && tmp != n){ + add_vertex(index[vertices[points[tmp]]], G); indices.push_back(points[tmp]); tmp++; } + u = inter3.second; } + else u = inter1.first; - std::pair inter2 = intervals[i + 1]; - while (func[points[tmp]] < inter2.first && tmp != n) { - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; + pair inter2 = intervals[i + 1]; + while (func[points[tmp]] < inter2.first && tmp != n){ + add_vertex(index[vertices[points[tmp]]], G); indices.push_back(points[tmp]); tmp++; } + v = inter2.first; + pos = tmp; - while (func[points[tmp]] < inter1.second && tmp != n) { - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; + while (func[points[tmp]] < inter1.second && tmp != n){ + add_vertex(index[vertices[points[tmp]]], G); indices.push_back(points[tmp]); tmp++; } } else { - std::pair inter3 = intervals[i - 1]; - while (func[points[tmp]] < inter3.second && tmp != n) { - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; + pair inter3 = intervals[i - 1]; + while (func[points[tmp]] < inter3.second && tmp != n){ + add_vertex(index[vertices[points[tmp]]], G); indices.push_back(points[tmp]); tmp++; } - while (tmp != n) { - prop[points[tmp]] = adjacency_matrix[points[tmp]]; - tmp++; + while (tmp != n){ + add_vertex(index[vertices[points[tmp]]], G); indices.push_back(points[tmp]); tmp++; } + + u = inter3.second; v = inter1.second; + } - // Compute the connected components with DFS - std::map visit; - if (verbose) std::cout << "Preimage of interval " << i << std::endl; - for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) - visit[it->first] = false; - if (!(prop.empty())) { - for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) { - if (!(visit[it->first])) { - std::vector cc; - cc.clear(); - dfs(prop, it->first, cc, visit); - int cci = cc.size(); - if (verbose) std::cout << "one CC with " << cci << " points, "; - double average_col = 0; - for (int j = 0; j < cci; j++) { - cover[cc[j]].push_back(id); - cover_back[id].push_back(cc[j]); - average_col += func_color[cc[j]] / cci; - } - cover_fct[id] = i; - cover_color[id] = std::pair(cci, average_col); - id++; - } - } + int num = num_vertices(G); vector component(num); + + // Compute connected components + connected_components(G, &component[0]); int maxct = maxc + 1; + + // Update covers + for(int j = 0; j < num; j++){ + maxc = max(maxc, maxct + component[j]); + cover [indices[j]] .push_back(maxct + component[j]); + cover_back [maxct + component[j]] .push_back(indices[j]); + cover_fct [maxct + component[j]] = i; + cover_std [maxct + component[j]] = 0.5*(u+v); + cover_color [maxct + component[j]] .second += func_color[indices[j]]; //= pair(cci, average_col); + cover_color [maxct + component[j]] .first += 1; } - if (verbose) std::cout << std::endl; } maximal_dim = id - 1; + for (map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) + iit->second.second /= iit->second.first; } public: // Set cover from file. @@ -729,30 +668,27 @@ class Cover_complex { * @param[in] cover_file_name name of the input cover file. * */ - void set_cover_from_file(const std::string& cover_file_name) { - int vertex_id = 0; - Cover_t cov; - std::vector cov_elts, cov_number; - std::ifstream input(cover_file_name); - std::string line; - while (std::getline(input, line)) { + void set_cover_from_file(const string & cover_file_name) { + int i = 0; int cov; vector cov_elts, cov_number; + ifstream input(cover_file_name); string line; + while (getline(input, line)) { cov_elts.clear(); - std::stringstream stream(line); + stringstream stream(line); while (stream >> cov) { cov_elts.push_back(cov); cov_number.push_back(cov); - cover_fct[cov] = cov; - cover_color[cov].second += func_color[vertex_id]; - cover_color[cov].first++; - cover_back[cov].push_back(vertex_id); + cover_fct [cov] = cov; + cover_color [cov] .second += func_color[i]; + cover_color [cov] .first++; + cover_back [cov] .push_back(i); } - cover[vertex_id] = cov_elts; - vertex_id++; + cover[i] = cov_elts; i++; } - std::vector::iterator it; - std::sort(cov_number.begin(), cov_number.end()); - it = std::unique(cov_number.begin(), cov_number.end()); - cov_number.resize(std::distance(cov_number.begin(), it)); + + sort(cov_number.begin(), cov_number.end()); + vector::iterator it = unique(cov_number.begin(), cov_number.end()); + cov_number.resize(distance(cov_number.begin(), it)); + maximal_dim = cov_number.size() - 1; for (int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; cover_name = cover_file_name; @@ -766,60 +702,24 @@ class Cover_complex { * */ template - void set_cover_from_Voronoi(Distance distance, int m = 100) { - voronoi_subsamples.resize(m); - SampleWithoutReplacement(n, m, voronoi_subsamples); - if (distances.size() == 0) compute_pairwise_distances(distance); - std::vector mindist(n); - for (int j = 0; j < n; j++) mindist[j] = std::numeric_limits::max(); + void set_cover_from_Voronoi(Distance distance, int m = 100){ + + voronoi_subsamples.resize(m); SampleWithoutReplacement(n, m, voronoi_subsamples); + if (distances.size() == 0) compute_pairwise_distances(distance); set_graph_weights(); + WeightMap weight = get(edge_weight, one_skeleton); IndexMap index = get(vertex_index, one_skeleton); + vector mindist(n); for (int j = 0; j < n; j++) mindist[j] = numeric_limits::max(); // Compute the geodesic distances to subsamples with Dijkstra for (int i = 0; i < m; i++) { - if (verbose) std::cout << "Computing geodesic distances to seed " << i << "..." << std::endl; - int seed = voronoi_subsamples[i]; - std::vector dist(n); - std::vector process(n); - for (int j = 0; j < n; j++) { - dist[j] = std::numeric_limits::max(); - process[j] = j; - } - dist[seed] = 0; - int curr_size = process.size(); - int min_point, min_index; - double min_dist; - std::vector neighbors; - int num_neighbors; - - while (curr_size > 0) { - min_dist = std::numeric_limits::max(); - min_index = -1; - min_point = -1; - for (int j = 0; j < curr_size; j++) { - if (dist[process[j]] < min_dist) { - min_point = process[j]; - min_dist = dist[process[j]]; - min_index = j; - } - } - assert(min_index != -1); - process.erase(process.begin() + min_index); - assert(min_point != -1); - neighbors = adjacency_matrix[min_point]; - num_neighbors = neighbors.size(); - for (int j = 0; j < num_neighbors; j++) { - double d = dist[min_point] + distances[min_point][neighbors[j]]; - dist[neighbors[j]] = std::min(dist[neighbors[j]], d); - } - curr_size = process.size(); - } + + if (verbose) cout << "Computing geodesic distances to seed " << i << "..." << endl; + int seed = voronoi_subsamples[i]; vector dmap(n); + dijkstra_shortest_paths(one_skeleton, vertices[seed], weight_map(weight).distance_map(make_iterator_property_map(dmap.begin(), index))); for (int j = 0; j < n; j++) - if (mindist[j] > dist[j]) { - mindist[j] = dist[j]; - if (cover[j].size() == 0) - cover[j].push_back(i); - else - cover[j][0] = i; + if (mindist[j] > dmap[j]) { + mindist[j] = dmap[j]; + if (cover[j].size() == 0) cover[j].push_back(i); else cover[j][0] = i; } } @@ -831,6 +731,7 @@ class Cover_complex { for (int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; maximal_dim = m - 1; cover_name = "Voronoi"; + } public: // return subset of data corresponding to a node @@ -840,7 +741,7 @@ class Cover_complex { * @result cover_back(c) vector of IDs of data points. * */ - const std::vector& subpopulation(Cover_t c) { return cover_back[c]; } + const vector & subpopulation(int c) { return cover_back[c]; } // ******************************************************************************************************************* // Visualization. @@ -853,16 +754,17 @@ class Cover_complex { * @param[in] color_file_name name of the input color file. * */ - void set_color_from_file(const std::string& color_file_name) { - int vertex_id = 0; - std::ifstream input(color_file_name); - std::string line; + void set_color_from_file(const string & color_file_name) { + int i = 0; + ifstream input(color_file_name); + string line; double f; - while (std::getline(input, line)) { - std::stringstream stream(line); + while (getline(input, line)) { + stringstream stream(line); + //stream >> one_skeleton[vertices[i]].color; stream >> f; - func_color.emplace(vertex_id, f); - vertex_id++; + func_color.emplace(i, f); + i++; } color_name = color_file_name; } @@ -874,9 +776,9 @@ class Cover_complex { * */ void set_color_from_coordinate(int k = 0) { - for (int i = 0; i < n; i++) func_color.emplace(i, point_cloud[i][k]); + for (int i = 0; i < n; i++) func_color[i] = point_cloud[i][k]; color_name = "coordinate "; - color_name.append(std::to_string(k)); + color_name.append(to_string(k)); } public: // Set color from vector. @@ -885,8 +787,8 @@ class Cover_complex { * @param[in] color input vector of values. * */ - void set_color_from_vector(std::vector color) { - for (unsigned int i = 0; i < color.size(); i++) func_color.emplace(i, color[i]); + void set_color_from_vector(vector c) { + for (unsigned int i = 0; i < c.size(); i++) func_color[i] = c[i]; } public: // Create a .dot file that can be compiled with neato to produce a .pdf file. @@ -895,22 +797,18 @@ class Cover_complex { * of its 1-skeleton in a .pdf file. */ void plot_DOT() { - char mapp[11] = "SC.dot"; - std::ofstream graphic(mapp); - graphic << "graph GIC {" << std::endl; - double maxv, minv; - maxv = std::numeric_limits::min(); - minv = std::numeric_limits::max(); - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); - iit++) { - maxv = std::max(maxv, iit->second.second); - minv = std::min(minv, iit->second.second); + + char mapp[100]; sprintf(mapp, "%s_sc.dot",point_cloud_name.c_str()); ofstream graphic(mapp); + + double maxv = numeric_limits::lowest(); double minv = numeric_limits::max(); + for (map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) { + maxv = max(maxv, iit->second.second); minv = min(minv, iit->second.second); } - int k = 0; - std::vector nodes; - nodes.clear(); - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); - iit++) { + + int k = 0; vector nodes; nodes.clear(); + + graphic << "graph GIC {" << endl; + for (map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) { if (iit->second.first > mask) { nodes.push_back(iit->first); graphic << iit->first << "[shape=circle fontcolor=black color=black label=\"" << iit->first << ":" @@ -930,7 +828,7 @@ class Cover_complex { } graphic << "}"; graphic.close(); - std::cout << "SC.dot generated. It can be visualized with e.g. neato." << std::endl; + cout << ".dot file generated. It can be visualized with e.g. neato." << endl; } public: // Create a .txt file that can be compiled with KeplerMapper. @@ -938,22 +836,21 @@ class Cover_complex { * KeplerMapper. */ void write_info() { - int num_simplices = simplices.size(); - int num_edges = 0; - char mapp[11] = "SC.txt"; - std::ofstream graphic(mapp); + + int num_simplices = simplices.size(); int num_edges = 0; + char mapp[100]; sprintf(mapp, "%s_sc.txt",point_cloud_name.c_str()); ofstream graphic(mapp); + for (int i = 0; i < num_simplices; i++) if (simplices[i].size() == 2) if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) num_edges++; - graphic << point_cloud_name << std::endl; - graphic << cover_name << std::endl; - graphic << color_name << std::endl; - graphic << resolution_double << " " << gain << std::endl; - graphic << cover_color.size() << " " << num_edges << std::endl; + graphic << point_cloud_name << endl; + graphic << cover_name << endl; + graphic << color_name << endl; + graphic << resolution_double << " " << gain << endl; + graphic << cover_color.size() << " " << num_edges << endl; - for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); - iit++) + for (map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++) graphic << iit->first << " " << iit->second.second << " " << iit->second.first << std::endl; for (int i = 0; i < num_simplices; i++) @@ -961,8 +858,8 @@ class Cover_complex { if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; graphic.close(); - std::cout << "SC.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." - << std::endl; + cout << ".txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." << endl; + } public: // Create a .off file that can be visualized (e.g. with Geomview). @@ -971,15 +868,15 @@ class Cover_complex { * the remaining coordinates of the points embedded in 3D are set to 0. */ void plot_OFF() { + assert(cover_name == "Voronoi"); - char gic[11] = "SC.off"; - std::ofstream graphic(gic); - graphic << "OFF" << std::endl; - int m = voronoi_subsamples.size(); - int numedges = 0; - int numfaces = 0; - std::vector > edges, faces; + + int m = voronoi_subsamples.size(); int numedges = 0; int numfaces = 0; vector > edges, faces; int numsimplices = simplices.size(); + + char gic[100]; sprintf(gic, "%s_sc.off",point_cloud_name.c_str()); ofstream graphic(gic); + + graphic << "OFF" << std::endl; for (int i = 0; i < numsimplices; i++) { if (simplices[i].size() == 2) { numedges++; @@ -1004,7 +901,7 @@ class Cover_complex { for (int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; graphic.close(); - std::cout << "SC.off generated. It can be visualized with e.g. geomview." << std::endl; + cout << ".off generated. It can be visualized with e.g. geomview." << endl; } // ******************************************************************************************************************* @@ -1013,121 +910,180 @@ class Cover_complex { public: /** \brief Creates the simplicial complex. * - * @param[in] complex SimplicialComplexForRips to be created. + * @param[in] complex SimplicialComplex to be created. * */ - template - void create_complex(SimplicialComplexForRips& complex) { + template + void create_complex(SimplicialComplex& complex){ unsigned int dimension = 0; for (auto const& simplex : simplices) { - complex.insert_simplex_and_subfaces(simplex); + int numvert = simplex.size(); double filt = std::numeric_limits::lowest(); + for(int i = 0; i < numvert; i++) filt = std::max(cover_color[simplex[i]].second, filt); + complex.insert_simplex_and_subfaces(simplex, filt); if (dimension < simplex.size() - 1) dimension = simplex.size() - 1; } complex.set_dimension(dimension); } + public: + /** \brief Computes the extended persistence diagram of the complex. + * + */ + template + void compute_PD(){ + + SimplicialComplex streef, streeb; unsigned int dimension = 0; + for (auto const & simplex : simplices) { + int numvert = simplex.size(); double filtM = numeric_limits::lowest(); double filtm = filtM; + for(int i = 0; i < numvert; i++){filtM = max(cover_std[simplex[i]], filtM); filtm = max(-cover_std[simplex[i]], filtm);} + streef.insert_simplex_and_subfaces(simplex, filtM); streeb.insert_simplex_and_subfaces(simplex, filtm); + if (dimension < simplex.size() - 1) dimension = simplex.size() - 1; + } streef.set_dimension(dimension); streeb.set_dimension(dimension); + + streef.initialize_filtration(); + Gudhi::persistent_cohomology::Persistent_cohomology pcohf(streef); + pcohf.init_coefficients(2); pcohf.compute_persistent_cohomology(); + pcohf.output_diagram(); + + streeb.initialize_filtration(); + Gudhi::persistent_cohomology::Persistent_cohomology pcohb(streeb); + pcohb.init_coefficients(2); pcohb.compute_persistent_cohomology(); + pcohb.output_diagram(); + + //PD = pcohf.get_persistent_pairs(); + + } + + public: + /** \brief Computes bootstrapped distances distribution. + * + * @param[in] N number of bootstrap iterations. + * + */ + template + void compute_distribution(int N = 100){ + + if(distribution.size() >= N) std::cout << "Already done!" << std::endl; + else{ + for(int i = 0; i < N-distribution.size(); i++){ + + Cover_complex Cboot; Cboot.n = this->n; std::vector boot(this->n); + for(int j = 0; j < this->n; j++){ + double u = GetUniform(); int id = std::floor(u*(this->n)); boot[j] = id; + Cboot.point_cloud[j] = this->point_cloud[id]; Cboot.func.emplace(j,this->func[id]); + } + for(int j = 0; j < n; j++){ + vector dist(n); + for(int k = 0; k < n; k++) + dist[k] = distances[boot[j]][boot[k]]; + Cboot.distances.push_back(dist); + } + + Cboot.set_graph_from_automatic_rips(Gudhi::Euclidean_distance()); + Cboot.set_automatic_resolution(); Cboot.set_gain(); Cboot.set_cover_from_function(); + Cboot.find_simplices(); Cboot.compute_PD >(); + + distribution.push_back(Gudhi::persistence_diagram::bottleneck_distance(this->PD,Cboot.PD)); + + } + + std::sort(distribution.begin(), distribution.end()); + + } + } + + public: + /** \brief Computes the bottleneck distance corresponding to a specific confidence level. + * + * @param[in] alpha Confidence level. + * + */ + double compute_distance_from_confidence_level(double alpha){ + int N = distribution.size(); + return distribution[std::floor(alpha*N)]; + } + + public: + /** \brief Computes the confidence level of a specific bottleneck distance. + * + * @param[in] d Bottleneck distance. + * + */ + double compute_confidence_level_from_distance(double d){ + int N = distribution.size(); + for(int i = 0; i < N; i++) if(distribution[i] > d) return i*1.0/N; + } + + public: + /** \brief Computes the p-value, i.e. the opposite of the confidence level of the largest bottleneck + * distance preserving the points in the persistence diagram of the output simplicial complex. + * + */ + double compute_p_value(){ + double distancemin = -std::numeric_limits::lowest(); + int N = PD.size(); for(int i = 0; i < N; i++) distancemin = std::min(distancemin, 0.5*(PD[i].second - PD[i].first)); + return 1-compute_confidence_level_from_distance(distancemin); + } + public: /** \brief Computes the simplices of the simplicial complex. */ void find_simplices() { if (type != "Nerve" && type != "GIC") { - std::cout << "Type of complex needs to be specified." << std::endl; + cout << "Type of complex needs to be specified." << endl; return; } if (type == "Nerve") { - for (std::map >::iterator it = cover.begin(); it != cover.end(); it++) + for (map >::iterator it = cover.begin(); it != cover.end(); it++) simplices.push_back(it->second); - std::vector >::iterator it; - std::sort(simplices.begin(), simplices.end()); - it = std::unique(simplices.begin(), simplices.end()); - simplices.resize(std::distance(simplices.begin(), it)); + sort(simplices.begin(), simplices.end()); + vector >::iterator it = unique(simplices.begin(), simplices.end()); + simplices.resize(distance(simplices.begin(), it)); } if (type == "GIC") { + + IndexMap index = get(vertex_index, one_skeleton); + if (functional_cover) { // Computes the simplices in the GIC by looking at all the edges of the graph and adding the // corresponding edges in the GIC if the images of the endpoints belong to consecutive intervals. if (gain >= 0.5) - throw std::invalid_argument( - "the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); - - int v1, v2; - - // Loop on all points. - for (std::map >::iterator it = cover.begin(); it != cover.end(); it++) { - int vid = it->first; - std::vector neighbors = adjacency_matrix[vid]; - int num_neighb = neighbors.size(); - - // Find cover of current point (vid). - if (cover[vid].size() == 2) - v1 = std::min(cover[vid][0], cover[vid][1]); - else - v1 = cover[vid][0]; - std::vector node(1); - node[0] = v1; - simplices.push_back(node); - - // Loop on neighbors. - for (int i = 0; i < num_neighb; i++) { - int neighb = neighbors[i]; - - // Find cover of neighbor (neighb). - if (cover[neighb].size() == 2) - v2 = std::max(cover[neighb][0], cover[neighb][1]); - else - v2 = cover[neighb][0]; - - // If neighbor is in next interval, add edge. - if (cover_fct[v2] == cover_fct[v1] + 1) { - std::vector edge(2); - edge[0] = v1; - edge[1] = v2; - simplices.push_back(edge); + throw invalid_argument("the output of this function is correct ONLY if the cover is minimal, i.e. the gain is less than 0.5."); + + // Loop on all edges. + graph_traits::edge_iterator ei, ei_end; + for (tie(ei, ei_end) = edges(one_skeleton); ei != ei_end; ++ei){ + int nums = cover[index[source(*ei, one_skeleton)]].size(); + for(int i = 0; i < nums; i++){ + int vs = cover[index[source(*ei, one_skeleton)]][i]; + int numt = cover[index[target(*ei, one_skeleton)]].size(); + for(int j = 0; j < numt; j++){ + int vt = cover[index[target(*ei, one_skeleton)]][j]; + if(cover_fct[vs] == cover_fct[vt] + 1 || cover_fct[vt] == cover_fct[vs] + 1){ + vector edge(2); edge[0] = vs; edge[1] = vt; simplices.push_back(edge); + } } } } - std::vector >::iterator it; - std::sort(simplices.begin(), simplices.end()); - it = std::unique(simplices.begin(), simplices.end()); - simplices.resize(std::distance(simplices.begin(), it)); + sort(simplices.begin(), simplices.end()); + vector >::iterator it = unique(simplices.begin(), simplices.end()); + simplices.resize(distance(simplices.begin(), it)); } else { - // Find IDs of edges to remove - std::vector simplex_to_remove; - int simplex_id = 0; - for (auto simplex : st.complex_simplex_range()) { - if (st.dimension(simplex) == 1) { - std::vector > comp; - for (auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); - if (comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); - } - simplex_id++; - } - // Remove edges - if (simplex_to_remove.size() > 1) { - int current_id = 1; - auto simplex = st.complex_simplex_range().begin(); - int num_rem = 0; - for (int i = 0; i < simplex_id - 1; i++) { - int j = i + 1; - auto simplex_tmp = simplex; - simplex_tmp++; - if (j == simplex_to_remove[current_id]) { - st.remove_maximal_simplex(*simplex_tmp); - current_id++; - num_rem++; - } else { - simplex++; - } + // Find edges to keep + Simplex_tree st; graph_traits::edge_iterator ei, ei_end; + for (tie(ei, ei_end) = edges(one_skeleton); ei != ei_end; ++ei) + if( !( cover[index[target(*ei, one_skeleton)]].size() == 1 && + cover[index[target(*ei, one_skeleton)]] == cover[index[source(*ei, one_skeleton)]]) ){ + vector edge(2); edge[0] = index[source(*ei, one_skeleton)]; edge[1] = index[target(*ei, one_skeleton)]; + st.insert_simplex_and_subfaces(edge); } - simplex = st.complex_simplex_range().begin(); - for (int i = 0; i < simplex_to_remove[0]; i++) simplex++; - st.remove_maximal_simplex(*simplex); - } + + //st.insert_graph(one_skeleton); // Build the Simplex Tree corresponding to the graph st.expansion(maximal_dim); @@ -1136,24 +1092,23 @@ class Cover_complex { simplices.clear(); for (auto simplex : st.complex_simplex_range()) { if (!st.has_children(simplex)) { - std::vector simplx; + vector simplx; for (auto vertex : st.simplex_vertex_range(simplex)) { unsigned int sz = cover[vertex].size(); for (unsigned int i = 0; i < sz; i++) { simplx.push_back(cover[vertex][i]); } } - - std::sort(simplx.begin(), simplx.end()); - std::vector::iterator it = std::unique(simplx.begin(), simplx.end()); - simplx.resize(std::distance(simplx.begin(), it)); + sort(simplx.begin(), simplx.end()); + vector::iterator it = unique(simplx.begin(), simplx.end()); + simplx.resize(distance(simplx.begin(), it)); simplices.push_back(simplx); } } - std::vector >::iterator it; - std::sort(simplices.begin(), simplices.end()); - it = std::unique(simplices.begin(), simplices.end()); - simplices.resize(std::distance(simplices.begin(), it)); + sort(simplices.begin(), simplices.end()); + vector >::iterator it = unique(simplices.begin(), simplices.end()); + simplices.resize(distance(simplices.begin(), it)); + } } } @@ -1164,3 +1119,203 @@ class Cover_complex { } // namespace Gudhi #endif // GIC_H_ + + + + + + + + + + + + + + + + + +/*Old code. + + private: + void fill_adjacency_matrix_from_st() { + std::vector empty; + for (int i = 0; i < n; i++) adjacency_matrix[i] = empty; + for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector vertices; + for (auto vertex : st.simplex_vertex_range(simplex)) vertices.push_back(vertex); + adjacency_matrix[vertices[0]].push_back(vertices[1]); + adjacency_matrix[vertices[1]].push_back(vertices[0]); + } + } + } + +std::vector simplex_to_remove; +int simplex_id = 0; +for (auto simplex : st.complex_simplex_range()) { + if (st.dimension(simplex) == 1) { + std::vector > comp; + for (auto vertex : st.simplex_vertex_range(simplex)) comp.push_back(cover[vertex]); + if (comp[0].size() == 1 && comp[0] == comp[1]) simplex_to_remove.push_back(simplex_id); + } + simplex_id++; +} + +// Remove edges +if (simplex_to_remove.size() > 1) { + int current_id = 1; + auto simplex = st.complex_simplex_range().begin(); + int num_rem = 0; + for (int i = 0; i < simplex_id - 1; i++) { + int j = i + 1; + auto simplex_tmp = simplex; + simplex_tmp++; + if (j == simplex_to_remove[current_id]) { + st.remove_maximal_simplex(*simplex_tmp); + current_id++; + num_rem++; + } else { + simplex++; + } + } + simplex = st.complex_simplex_range().begin(); + for (int i = 0; i < simplex_to_remove[0]; i++) simplex++; + st.remove_maximal_simplex(*simplex); +} + + +if(cover[index[source(*ei, one_skeleton)]].size() == 1){ + vs = cover[index[source(*ei, one_skeleton)]][0]; + vm = cover_fct[vs]; +} +else{ + vs0 = cover[index[source(*ei, one_skeleton)]][0]; + vs1 = cover[index[source(*ei, one_skeleton)]][1]; + vm = min(cover_fct[vs0], cover_fct[vs1]); + if(vm == cover_fct[vs0]) vs = vs0; else vs = vs1; +} + +if(cover[index[target(*ei, one_skeleton)]].size() == 1){ + vt = cover[index[target(*ei, one_skeleton)]][0]; + vM = cover_fct[vt]; +} +else{ + vt0 = cover[index[target(*ei, one_skeleton)]][0]; + vt1 = cover[index[target(*ei, one_skeleton)]][1]; + vM = max(cover_fct[vt0], cover_fct[vt1]); + if(vM == cover_fct[vt0]) vt = vt0; else vt = vt1; +} + +if(vM == vm + 1){ + //if(max(cover_fct[cover[index[target(*ei, one_skeleton)]][0]], cover_fct[cover[index[target(*ei, one_skeleton)]][1]])== min(cover_fct[index[source(*ei, one_skeleton)]][0], cover_fct[index[source(*ei, one_skeleton)]][1]) + 1){ + vector edge(2); edge[0] = vs; edge[1] = vt; + simplices.push_back(edge); +} + + +for (map >::iterator it = cover.begin(); it != cover.end(); it++) { +int vid = it->first; +vector neighbors = adjacency_matrix[vid]; +int num_neighb = neighbors.size(); + +// Find cover of current point (vid). +if (cover[vid].size() == 2) v1 = std::min(cover[vid][0], cover[vid][1]); +else v1 = cover[vid][0]; +vector node(1); node[0] = v1; +simplices.push_back(node); + +// Loop on neighbors. +for (int i = 0; i < num_neighb; i++) { + int neighb = neighbors[i]; + + // Find cover of neighbor (neighb). + if (cover[neighb].size() == 2) v2 = std::max(cover[neighb][0], cover[neighb][1]); + else v2 = cover[neighb][0]; + + // If neighbor is in next interval, add edge. + if (cover_fct[v2] == cover_fct[v1] + 1) { + vector edge(2); edge[0] = v1; edge[1] = v2; + simplices.push_back(edge); break; + } +} +} + + + std::vector dist(n); + std::vector process(n); + for (int j = 0; j < n; j++) { + dist[j] = std::numeric_limits::max(); + process[j] = j; + } + dist[seed] = 0; + int curr_size = process.size(); + int min_point, min_index; + double min_dist; + std::vector neighbors; + int num_neighbors; + + while (curr_size > 0) { + min_dist = std::numeric_limits::max(); + min_index = -1; + min_point = -1; + for (int j = 0; j < curr_size; j++) { + if (dist[process[j]] < min_dist) { + min_point = process[j]; + min_dist = dist[process[j]]; + min_index = j; + } + } + assert(min_index != -1); + process.erase(process.begin() + min_index); + assert(min_point != -1); + neighbors = adjacency_matrix[min_point]; + num_neighbors = neighbors.size(); + for (int j = 0; j < num_neighbors; j++) { + double d = dist[min_point] + distances[min_point][neighbors[j]]; + dist[neighbors[j]] = std::min(dist[neighbors[j]], d); + } + curr_size = process.size(); + } + + + // Compute the connected components with DFS + std::map visit; + if (verbose) std::cout << "Preimage of interval " << i << std::endl; + for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) + visit[it->first] = false; + if (!(prop.empty())) { + for (std::map >::iterator it = prop.begin(); it != prop.end(); it++) { + if (!(visit[it->first])) { + std::vector cc; + cc.clear(); + dfs(prop, it->first, cc, visit); + int cci = cc.size(); + if (verbose) std::cout << "one CC with " << cci << " points, "; + double average_col = 0; + for (int j = 0; j < cci; j++) { + cover[cc[j]].push_back(id); + cover_back[id].push_back(cc[j]); + average_col += func_color[cc[j]] / cci; + } + cover_fct[id] = i; + cover_std[id] = std::pair(cci, 0.5*(u+v)); + cover_color[id] = std::pair(cci, average_col); + id++; + } + } + } + + + // DFS + private: + void dfs(std::map >& G, int p, std::vector& cc, std::map& visit) { + cc.push_back(p); + visit[p] = true; + int neighb = G[p].size(); + for (int i = 0; i < neighb; i++) + if (visit.find(G[p][i]) != visit.end()) + if (!(visit[G[p][i]])) dfs(G, G[p][i], cc, visit); + } +*/ diff --git a/src/cmake/modules/GUDHI_modules.cmake b/src/cmake/modules/GUDHI_modules.cmake index f95d0c34..74c5fb55 100644 --- a/src/cmake/modules/GUDHI_modules.cmake +++ b/src/cmake/modules/GUDHI_modules.cmake @@ -17,9 +17,9 @@ function(add_gudhi_module file_path) endfunction(add_gudhi_module) option(WITH_GUDHI_BENCHMARK "Activate/desactivate benchmark compilation" OFF) -option(WITH_GUDHI_EXAMPLE "Activate/desactivate examples compilation and installation" OFF) -option(WITH_GUDHI_PYTHON "Activate/desactivate python module compilation and installation" ON) -option(WITH_GUDHI_TEST "Activate/desactivate examples compilation and installation" ON) +option(WITH_GUDHI_EXAMPLE "Activate/desactivate examples compilation and installation" ON) +option(WITH_GUDHI_PYTHON "Activate/desactivate python module compilation and installation" OFF) +option(WITH_GUDHI_TEST "Activate/desactivate examples compilation and installation" OFF) option(WITH_GUDHI_UTILITIES "Activate/desactivate utilities compilation and installation" ON) if (WITH_GUDHI_BENCHMARK) -- cgit v1.2.3 From 06ff6fac211d2823c7d14a6d2f4a4db03f48d2e3 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 26 Jan 2018 14:01:39 +0000 Subject: Seperate installation and examples from main page Move cover complex utilities from examples GIC.cpp example was not compiled, nor tested. It is removed. Persistence representation : no need to link with Boost_SYSTEM git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3164 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cf2bfa6c6de2ed359aaa165b9f80bca7e06defb1 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 29 -- src/Nerve_GIC/example/CMakeLists.txt | 12 - src/Nerve_GIC/example/GIC.cpp | 95 ----- .../example/KeplerMapperVisuFromTxtFile.py | 72 ---- src/Nerve_GIC/example/Nerve.cpp | 96 ----- src/Nerve_GIC/example/Nerve.txt | 63 ---- src/Nerve_GIC/example/VoronoiGIC.cpp | 90 ----- src/Nerve_GIC/example/km.py | 390 --------------------- src/Nerve_GIC/example/km.py.COPYRIGHT | 26 -- src/Nerve_GIC/utilities/CMakeLists.txt | 22 ++ .../utilities/KeplerMapperVisuFromTxtFile.py | 72 ++++ src/Nerve_GIC/utilities/Nerve.cpp | 96 +++++ src/Nerve_GIC/utilities/Nerve.txt | 63 ++++ src/Nerve_GIC/utilities/VoronoiGIC.cpp | 90 +++++ src/Nerve_GIC/utilities/km.py | 390 +++++++++++++++++++++ src/Nerve_GIC/utilities/km.py.COPYRIGHT | 26 ++ .../example/CMakeLists.txt | 5 - .../test/CMakeLists.txt | 14 +- src/common/doc/examples.h | 99 ++++++ src/common/doc/installation.h | 263 ++++++++++++++ src/common/doc/main_page.h | 305 +--------------- 21 files changed, 1130 insertions(+), 1188 deletions(-) delete mode 100644 src/Nerve_GIC/example/GIC.cpp delete mode 100755 src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py delete mode 100644 src/Nerve_GIC/example/Nerve.cpp delete mode 100644 src/Nerve_GIC/example/Nerve.txt delete mode 100644 src/Nerve_GIC/example/VoronoiGIC.cpp delete mode 100755 src/Nerve_GIC/example/km.py delete mode 100644 src/Nerve_GIC/example/km.py.COPYRIGHT create mode 100644 src/Nerve_GIC/utilities/CMakeLists.txt create mode 100755 src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py create mode 100644 src/Nerve_GIC/utilities/Nerve.cpp create mode 100644 src/Nerve_GIC/utilities/Nerve.txt create mode 100644 src/Nerve_GIC/utilities/VoronoiGIC.cpp create mode 100755 src/Nerve_GIC/utilities/km.py create mode 100644 src/Nerve_GIC/utilities/km.py.COPYRIGHT create mode 100644 src/common/doc/examples.h create mode 100644 src/common/doc/installation.h (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 7578cc53..344cb031 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -177,7 +177,6 @@ namespace cover_complex { * \image html "funcGICvisu.jpg" "Visualization with neato" * * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup cover_complex @@ -186,31 +185,3 @@ namespace cover_complex { } // namespace Gudhi #endif // DOC_COVER_COMPLEX_INTRO_COVER_COMPLEX_H_ - - -/* * \subsection gicexample Example with cover from function - * - * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). - * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) - * covering the height function (coordinate 2), - * and the graph G comes from a Rips complex built with threshold 0.075. - * Note that if the gain is too big, the number of cliques increases a lot, - * which make the computation time much larger. - * - * \include Nerve_GIC/GIC.cpp - * - * When launching: - * - * \code $> ./GIC ../../data/points/human.off 0.075 2 0.075 0 --v - * \endcode - * - * the program outputs SC.txt, which can be visualized with python and firefox as before: - * - * \image html "gicvisu.jpg" "Visualization with KeplerMapper" - * */ - - -/* * Using e.g. - * - * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html - * \endcode */ diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index 73728dc0..434637fa 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -3,26 +3,14 @@ project(Nerve_GIC_examples) if (NOT CGAL_VERSION VERSION_LESS 4.8.1) - add_executable ( Nerve Nerve.cpp ) add_executable ( CoordGIC CoordGIC.cpp ) add_executable ( FuncGIC FuncGIC.cpp ) - add_executable ( VoronoiGIC VoronoiGIC.cpp ) if (TBB_FOUND) - target_link_libraries(Nerve ${TBB_LIBRARIES}) target_link_libraries(CoordGIC ${TBB_LIBRARIES}) target_link_libraries(FuncGIC ${TBB_LIBRARIES}) - target_link_libraries(VoronoiGIC ${TBB_LIBRARIES}) endif() - file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) - - add_test(NAME Nerve_GIC_example_nerve COMMAND $ - "${CMAKE_SOURCE_DIR}/data/points/human.off" "2" "10" "0.3") - - add_test(NAME Nerve_GIC_example_VoronoiGIC COMMAND $ - "${CMAKE_SOURCE_DIR}/data/points/human.off" "100") - add_test(NAME Nerve_GIC_example_CoordGIC COMMAND $ "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "0") diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp deleted file mode 100644 index 2bc24a4d..00000000 --- a/src/Nerve_GIC/example/GIC.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 0.075 2 0.075 0 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - double threshold = atof(argv[2]); - int coord = atoi(argv[3]); - double resolution = atof(argv[4]); - double gain = atof(argv[5]); - bool verb = 0; - if (argc == 7) verb = 1; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); - - bool check = GIC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); - - GIC.set_graph_from_rips(threshold, Gudhi::Euclidean_distance()); - - GIC.set_resolution_with_interval_length(resolution); - GIC.set_gain(gain); - GIC.set_cover_from_function(); - - GIC.find_GIC_simplices(); - - GIC.plot_TXT_for_KeplerMapper(); - - Gudhi::Simplex_tree<> stree; - GIC.create_complex(stree); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() - << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py deleted file mode 100755 index d2897774..00000000 --- a/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python - -import km -import numpy as np -from collections import defaultdict - -"""This file is part of the Gudhi Library. The Gudhi library - (Geometric Understanding in Higher Dimensions) is a generic C++ - library for computational topology. - - Author(s): Mathieu Carriere - - Copyright (C) 2017 INRIA - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -""" - -__author__ = "Mathieu Carriere" -__copyright__ = "Copyright (C) 2017 INRIA" -__license__ = "GPL v3" - -network = {} -mapper = km.KeplerMapper(verbose=0) -data = np.zeros((3,3)) -projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) - -f = open('SC.txt','r') -nodes = defaultdict(list) -links = defaultdict(list) -custom = defaultdict(list) - -dat = f.readline() -lens = f.readline() -color = f.readline(); -param = [float(i) for i in f.readline().split(" ")] - -nums = [int(i) for i in f.readline().split(" ")] -num_nodes = nums[0] -num_edges = nums[1] - -for i in range(0,num_nodes): - point = [float(j) for j in f.readline().split(" ")] - nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] - links[ str(int(point[0])) ] = [] - custom[ int(point[0]) ] = point[1] - -m = min([custom[i] for i in range(0,num_nodes)]) -M = max([custom[i] for i in range(0,num_nodes)]) - -for i in range(0,num_edges): - edge = [int(j) for j in f.readline().split(" ")] - links[ str(edge[0]) ].append( str(edge[1]) ) - links[ str(edge[1]) ].append( str(edge[0]) ) - -network["nodes"] = nodes -network["links"] = links -network["meta"] = lens - -mapper.visualize(network, color_function = color, path_html="SC.html", title=dat, -graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, -height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp deleted file mode 100644 index 6abdedc7..00000000 --- a/src/Nerve_GIC/example/Nerve.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int coord = atoi(argv[2]); - int resolution = atoi(argv[3]); - double gain = atof(argv[4]); - bool verb = 0; - if (argc == 6) verb = 1; - - // -------------------------------- - // Init of a Nerve from an OFF file - // -------------------------------- - - Gudhi::cover_complex::Cover_complex SC; - SC.set_verbose(verb); - - bool check = SC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - SC.set_type("Nerve"); - - SC.set_color_from_coordinate(coord); - SC.set_function_from_coordinate(coord); - - SC.set_graph_from_OFF(); - SC.set_resolution_with_interval_number(resolution); - SC.set_gain(gain); - SC.set_cover_from_function(); - - SC.find_simplices(); - - SC.write_info(); - - Gudhi::Simplex_tree<> stree; - SC.create_complex(stree); - SC.compute_PD(); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " - << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on Nerve simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/Nerve.txt b/src/Nerve_GIC/example/Nerve.txt deleted file mode 100644 index 839ff45e..00000000 --- a/src/Nerve_GIC/example/Nerve.txt +++ /dev/null @@ -1,63 +0,0 @@ -Min function value = -0.979672 and Max function value = 0.816414 -Interval 0 = [-0.979672, -0.761576] -Interval 1 = [-0.838551, -0.581967] -Interval 2 = [-0.658942, -0.402359] -Interval 3 = [-0.479334, -0.22275] -Interval 4 = [-0.299725, -0.0431415] -Interval 5 = [-0.120117, 0.136467] -Interval 6 = [0.059492, 0.316076] -Interval 7 = [0.239101, 0.495684] -Interval 8 = [0.418709, 0.675293] -Interval 9 = [0.598318, 0.816414] -Computing preimages... -Computing connected components... -.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox. -5 interval(s) in dimension 0: - [-0.909111, 0.00817529] - [-0.171433, 0.367392] - [-0.171433, 0.367392] - [-0.909111, 0.745853] -0 interval(s) in dimension 1: -Nerve is of dimension 1 - 41 simplices - 21 vertices. -Iterator on Nerve simplices -1 -0 -4 -4 0 -2 -2 1 -8 -8 2 -5 -5 4 -9 -9 8 -13 -13 5 -14 -14 9 -19 -19 13 -25 -32 -20 -32 20 -33 -33 25 -26 -26 14 -26 19 -42 -42 26 -34 -34 33 -27 -27 20 -35 -35 27 -35 34 -42 35 -44 -44 35 -54 -54 44 \ No newline at end of file diff --git a/src/Nerve_GIC/example/VoronoiGIC.cpp b/src/Nerve_GIC/example/VoronoiGIC.cpp deleted file mode 100644 index 32431cc2..00000000 --- a/src/Nerve_GIC/example/VoronoiGIC.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int m = atoi(argv[2]); - bool verb = 0; - if (argc == 4) verb = 1; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::cover_complex::Cover_complex GIC; - GIC.set_verbose(verb); - - bool check = GIC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - GIC.set_type("GIC"); - - GIC.set_color_from_coordinate(); - - GIC.set_graph_from_OFF(); - GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), m); - - GIC.find_simplices(); - - GIC.plot_OFF(); - - Gudhi::Simplex_tree<> stree; - GIC.create_complex(stree); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() - << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/km.py b/src/Nerve_GIC/example/km.py deleted file mode 100755 index 53024aab..00000000 --- a/src/Nerve_GIC/example/km.py +++ /dev/null @@ -1,390 +0,0 @@ -from __future__ import division -import numpy as np -from collections import defaultdict -import json -import itertools -from sklearn import cluster, preprocessing, manifold -from datetime import datetime -import sys - -class KeplerMapper(object): - # With this class you can build topological networks from (high-dimensional) data. - # - # 1) Fit a projection/lens/function to a dataset and transform it. - # For instance "mean_of_row(x) for x in X" - # 2) Map this projection with overlapping intervals/hypercubes. - # Cluster the points inside the interval - # (Note: we cluster on the inverse image/original data to lessen projection loss). - # If two clusters/nodes have the same members (due to the overlap), then: - # connect these with an edge. - # 3) Visualize the network using HTML and D3.js. - # - # functions - # --------- - # fit_transform: Create a projection (lens) from a dataset - # map: Apply Mapper algorithm on this projection and build a simplicial complex - # visualize: Turns the complex dictionary into a HTML/D3.js visualization - - def __init__(self, verbose=2): - self.verbose = verbose - - self.chunk_dist = [] - self.overlap_dist = [] - self.d = [] - self.nr_cubes = 0 - self.overlap_perc = 0 - self.clusterer = False - - def fit_transform(self, X, projection="sum", scaler=preprocessing.MinMaxScaler()): - # Creates the projection/lens from X. - # - # Input: X. Input features as a numpy array. - # Output: projected_X. original data transformed to a projection (lens). - # - # parameters - # ---------- - # projection: Projection parameter is either a string, - # a scikit class with fit_transform, like manifold.TSNE(), - # or a list of dimension indices. - # scaler: if None, do no scaling, else apply scaling to the projection - # Default: Min-Max scaling - - self.scaler = scaler - self.projection = str(projection) - - # Detect if projection is a class (for scikit-learn) - #if str(type(projection))[1:6] == "class": #TODO: de-ugly-fy - # reducer = projection - # if self.verbose > 0: - # try: - # projection.set_params(**{"verbose":self.verbose}) - # except: - # pass - # print("\n..Projecting data using: \n\t%s\n"%str(projection)) - # X = reducer.fit_transform(X) - - # Detect if projection is a string (for standard functions) - if isinstance(projection, str): - if self.verbose > 0: - print("\n..Projecting data using: %s"%(projection)) - # Stats lenses - if projection == "sum": # sum of row - X = np.sum(X, axis=1).reshape((X.shape[0],1)) - if projection == "mean": # mean of row - X = np.mean(X, axis=1).reshape((X.shape[0],1)) - if projection == "median": # mean of row - X = np.median(X, axis=1).reshape((X.shape[0],1)) - if projection == "max": # max of row - X = np.max(X, axis=1).reshape((X.shape[0],1)) - if projection == "min": # min of row - X = np.min(X, axis=1).reshape((X.shape[0],1)) - if projection == "std": # std of row - X = np.std(X, axis=1).reshape((X.shape[0],1)) - - if projection == "dist_mean": # Distance of x to mean of X - X_mean = np.mean(X, axis=0) - X = np.sum(np.sqrt((X - X_mean)**2), axis=1).reshape((X.shape[0],1)) - - # Detect if projection is a list (with dimension indices) - if isinstance(projection, list): - if self.verbose > 0: - print("\n..Projecting data using: %s"%(str(projection))) - X = X[:,np.array(projection)] - - # Scaling - if scaler is not None: - if self.verbose > 0: - print("\n..Scaling with: %s\n"%str(scaler)) - X = scaler.fit_transform(X) - - return X - - def map(self, projected_X, inverse_X=None, clusterer=cluster.DBSCAN(eps=0.5,min_samples=3), nr_cubes=10, overlap_perc=0.1): - # This maps the data to a simplicial complex. Returns a dictionary with nodes and links. - # - # Input: projected_X. A Numpy array with the projection/lens. - # Output: complex. A dictionary with "nodes", "links" and "meta information" - # - # parameters - # ---------- - # projected_X projected_X. A Numpy array with the projection/lens. Required. - # inverse_X Numpy array or None. If None then the projection itself is used for clustering. - # clusterer Scikit-learn API compatible clustering algorithm. Default: DBSCAN - # nr_cubes Int. The number of intervals/hypercubes to create. - # overlap_perc Float. The percentage of overlap "between" the intervals/hypercubes. - - start = datetime.now() - - # Helper function - def cube_coordinates_all(nr_cubes, nr_dimensions): - # Helper function to get origin coordinates for our intervals/hypercubes - # Useful for looping no matter the number of cubes or dimensions - # Example: if there are 4 cubes per dimension and 3 dimensions - # return the bottom left (origin) coordinates of 64 hypercubes, - # as a sorted list of Numpy arrays - # TODO: elegance-ify... - l = [] - for x in range(nr_cubes): - l += [x] * nr_dimensions - return [np.array(list(f)) for f in sorted(set(itertools.permutations(l,nr_dimensions)))] - - nodes = defaultdict(list) - links = defaultdict(list) - complex = {} - self.nr_cubes = nr_cubes - self.clusterer = clusterer - self.overlap_perc = overlap_perc - - if self.verbose > 0: - print("Mapping on data shaped %s using dimensions\n"%(str(projected_X.shape))) - - # If inverse image is not provided, we use the projection as the inverse image (suffer projection loss) - if inverse_X is None: - inverse_X = projected_X - - # We chop up the min-max column ranges into 'nr_cubes' parts - self.chunk_dist = (np.max(projected_X, axis=0) - np.min(projected_X, axis=0))/nr_cubes - - # We calculate the overlapping windows distance - self.overlap_dist = self.overlap_perc * self.chunk_dist - - # We find our starting point - self.d = np.min(projected_X, axis=0) - - # Use a dimension index array on the projected X - # (For now this uses the entire dimensionality, but we keep for experimentation) - di = np.array([x for x in range(projected_X.shape[1])]) - - # Prefix'ing the data with ID's - ids = np.array([x for x in range(projected_X.shape[0])]) - projected_X = np.c_[ids,projected_X] - inverse_X = np.c_[ids,inverse_X] - - # Subdivide the projected data X in intervals/hypercubes with overlap - if self.verbose > 0: - total_cubes = len(cube_coordinates_all(nr_cubes,projected_X.shape[1])) - print("Creating %s hypercubes."%total_cubes) - - for i, coor in enumerate(cube_coordinates_all(nr_cubes,di.shape[0])): - # Slice the hypercube - hypercube = projected_X[ np.invert(np.any((projected_X[:,di+1] >= self.d[di] + (coor * self.chunk_dist[di])) & - (projected_X[:,di+1] < self.d[di] + (coor * self.chunk_dist[di]) + self.chunk_dist[di] + self.overlap_dist[di]) == False, axis=1 )) ] - - if self.verbose > 1: - print("There are %s points in cube_%s / %s with starting range %s"% - (hypercube.shape[0],i,total_cubes,self.d[di] + (coor * self.chunk_dist[di]))) - - # If at least one sample inside the hypercube - if hypercube.shape[0] > 0: - # Cluster the data point(s) in the cube, skipping the id-column - # Note that we apply clustering on the inverse image (original data samples) that fall inside the cube. - inverse_x = inverse_X[[int(nn) for nn in hypercube[:,0]]] - - clusterer.fit(inverse_x[:,1:]) - - if self.verbose > 1: - print("Found %s clusters in cube_%s\n"%(np.unique(clusterer.labels_[clusterer.labels_ > -1]).shape[0],i)) - - #Now for every (sample id in cube, predicted cluster label) - for a in np.c_[hypercube[:,0],clusterer.labels_]: - if a[1] != -1: #if not predicted as noise - cluster_id = str(coor[0])+"_"+str(i)+"_"+str(a[1])+"_"+str(coor)+"_"+str(self.d[di] + (coor * self.chunk_dist[di])) # TODO: de-rudimentary-ify - nodes[cluster_id].append( int(a[0]) ) # Append the member id's as integers - else: - if self.verbose > 1: - print("Cube_%s is empty.\n"%(i)) - - # Create links when clusters from different hypercubes have members with the same sample id. - candidates = itertools.combinations(nodes.keys(),2) - for candidate in candidates: - # if there are non-unique members in the union - if len(nodes[candidate[0]]+nodes[candidate[1]]) != len(set(nodes[candidate[0]]+nodes[candidate[1]])): - links[candidate[0]].append( candidate[1] ) - - # Reporting - if self.verbose > 0: - nr_links = 0 - for k in links: - nr_links += len(links[k]) - print("\ncreated %s edges and %s nodes in %s."%(nr_links,len(nodes),str(datetime.now()-start))) - - complex["nodes"] = nodes - complex["links"] = links - complex["meta"] = self.projection - - return complex - - def visualize(self, complex, color_function="", path_html="mapper_visualization_output.html", title="My Data", - graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=None, width_html=0, - height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=0,gain=0,minimum=0,maximum=0): - # Turns the dictionary 'complex' in a html file with d3.js - # - # Input: complex. Dictionary (output from calling .map()) - # Output: a HTML page saved as a file in 'path_html'. - # - # parameters - # ---------- - # color_function string. Not fully implemented. Default: "" (distance to origin) - # path_html file path as string. Where to save the HTML page. - # title string. HTML page document title and first heading. - # graph_link_distance int. Edge length. - # graph_gravity float. "Gravity" to center of layout. - # graph_charge int. charge between nodes. - # custom_tooltips None or Numpy Array. You could use "y"-label array for this. - # width_html int. Width of canvas. Default: 0 (full width) - # height_html int. Height of canvas. Default: 0 (full height) - # show_tooltips bool. default:True - # show_title bool. default:True - # show_meta bool. default:True - - # Format JSON for D3 graph - json_s = {} - json_s["nodes"] = [] - json_s["links"] = [] - k2e = {} # a key to incremental int dict, used for id's when linking - - for e, k in enumerate(complex["nodes"]): - # Tooltip and node color formatting, TODO: de-mess-ify - if custom_tooltips is not None: - tooltip_s = "

Cluster %s

"%k + " ".join(str(custom_tooltips[complex["nodes"][k][0]]).split(" ")) - if maximum == minimum: - tooltip_i = 0 - else: - tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) - json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(complex["nodes"][k][2])), "color": tooltip_i}) - else: - tooltip_s = "

Cluster %s

Contains %s members."%(k,len(complex["nodes"][k])) - json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(len(complex["nodes"][k]))), "color": str(k.split("_")[0])}) - k2e[k] = e - for k in complex["links"]: - for link in complex["links"][k]: - json_s["links"].append({"source": k2e[k], "target":k2e[link],"value":1}) - - # Width and height of graph in HTML output - if width_html == 0: - width_css = "100%" - width_js = 'document.getElementById("holder").offsetWidth-20' - else: - width_css = "%spx" % width_html - width_js = "%s" % width_html - if height_html == 0: - height_css = "100%" - height_js = 'document.getElementById("holder").offsetHeight-20' - else: - height_css = "%spx" % height_html - height_js = "%s" % height_html - - # Whether to show certain UI elements or not - if show_tooltips == False: - tooltips_display = "display: none;" - else: - tooltips_display = "" - - if show_meta == False: - meta_display = "display: none;" - else: - meta_display = "" - - if show_title == False: - title_display = "display: none;" - else: - title_display = "" - - with open(path_html,"wb") as outfile: - html = """ - - - %s | KeplerMapper - - - -
-

%s

-

- Lens
%s

- Length of intervals
%s

- Overlap percentage
%s%%

- Color Function
%s -

-
- - """%(title,width_css, height_css, title_display, meta_display, tooltips_display, title,complex["meta"],res,gain*100,color_function,width_js,height_js,graph_charge,graph_link_distance,graph_gravity,json.dumps(json_s)) - outfile.write(html.encode("utf-8")) - if self.verbose > 0: - print("\nWrote d3.js graph to '%s'"%path_html) diff --git a/src/Nerve_GIC/example/km.py.COPYRIGHT b/src/Nerve_GIC/example/km.py.COPYRIGHT deleted file mode 100644 index bef7b121..00000000 --- a/src/Nerve_GIC/example/km.py.COPYRIGHT +++ /dev/null @@ -1,26 +0,0 @@ -km.py is a fork of https://github.com/MLWave/kepler-mapper. -Only the visualization part has been kept (Mapper part has been removed). - -This file has te following Copyright : - -The MIT License (MIT) - -Copyright (c) 2015 Triskelion - HJ van Veen - info@mlwave.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/src/Nerve_GIC/utilities/CMakeLists.txt b/src/Nerve_GIC/utilities/CMakeLists.txt new file mode 100644 index 00000000..a0508dc2 --- /dev/null +++ b/src/Nerve_GIC/utilities/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 2.6) +project(Nerve_GIC_examples) + +if (NOT CGAL_VERSION VERSION_LESS 4.8.1) + + add_executable ( Nerve Nerve.cpp ) + add_executable ( VoronoiGIC VoronoiGIC.cpp ) + + if (TBB_FOUND) + target_link_libraries(Nerve ${TBB_LIBRARIES}) + target_link_libraries(VoronoiGIC ${TBB_LIBRARIES}) + endif() + + file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + + add_test(NAME Nerve_GIC_utilities_nerve COMMAND $ + "${CMAKE_SOURCE_DIR}/data/points/human.off" "2" "10" "0.3") + + add_test(NAME Nerve_GIC_utilities_VoronoiGIC COMMAND $ + "${CMAKE_SOURCE_DIR}/data/points/human.off" "100") + +endif (NOT CGAL_VERSION VERSION_LESS 4.8.1) diff --git a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py new file mode 100755 index 00000000..d2897774 --- /dev/null +++ b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import km +import numpy as np +from collections import defaultdict + +"""This file is part of the Gudhi Library. The Gudhi library + (Geometric Understanding in Higher Dimensions) is a generic C++ + library for computational topology. + + Author(s): Mathieu Carriere + + Copyright (C) 2017 INRIA + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +__author__ = "Mathieu Carriere" +__copyright__ = "Copyright (C) 2017 INRIA" +__license__ = "GPL v3" + +network = {} +mapper = km.KeplerMapper(verbose=0) +data = np.zeros((3,3)) +projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) + +f = open('SC.txt','r') +nodes = defaultdict(list) +links = defaultdict(list) +custom = defaultdict(list) + +dat = f.readline() +lens = f.readline() +color = f.readline(); +param = [float(i) for i in f.readline().split(" ")] + +nums = [int(i) for i in f.readline().split(" ")] +num_nodes = nums[0] +num_edges = nums[1] + +for i in range(0,num_nodes): + point = [float(j) for j in f.readline().split(" ")] + nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] + links[ str(int(point[0])) ] = [] + custom[ int(point[0]) ] = point[1] + +m = min([custom[i] for i in range(0,num_nodes)]) +M = max([custom[i] for i in range(0,num_nodes)]) + +for i in range(0,num_edges): + edge = [int(j) for j in f.readline().split(" ")] + links[ str(edge[0]) ].append( str(edge[1]) ) + links[ str(edge[1]) ].append( str(edge[0]) ) + +network["nodes"] = nodes +network["links"] = links +network["meta"] = lens + +mapper.visualize(network, color_function = color, path_html="SC.html", title=dat, +graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, +height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) diff --git a/src/Nerve_GIC/utilities/Nerve.cpp b/src/Nerve_GIC/utilities/Nerve.cpp new file mode 100644 index 00000000..6abdedc7 --- /dev/null +++ b/src/Nerve_GIC/utilities/Nerve.cpp @@ -0,0 +1,96 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include +#include + +void usage(int nbArgs, char *const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int coord = atoi(argv[2]); + int resolution = atoi(argv[3]); + double gain = atof(argv[4]); + bool verb = 0; + if (argc == 6) verb = 1; + + // -------------------------------- + // Init of a Nerve from an OFF file + // -------------------------------- + + Gudhi::cover_complex::Cover_complex SC; + SC.set_verbose(verb); + + bool check = SC.read_point_cloud(off_file_name); + + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { + SC.set_type("Nerve"); + + SC.set_color_from_coordinate(coord); + SC.set_function_from_coordinate(coord); + + SC.set_graph_from_OFF(); + SC.set_resolution_with_interval_number(resolution); + SC.set_gain(gain); + SC.set_cover_from_function(); + + SC.find_simplices(); + + SC.write_info(); + + Gudhi::Simplex_tree<> stree; + SC.create_complex(stree); + SC.compute_PD(); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if (verb) { + std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " + << stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on Nerve simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/utilities/Nerve.txt b/src/Nerve_GIC/utilities/Nerve.txt new file mode 100644 index 00000000..839ff45e --- /dev/null +++ b/src/Nerve_GIC/utilities/Nerve.txt @@ -0,0 +1,63 @@ +Min function value = -0.979672 and Max function value = 0.816414 +Interval 0 = [-0.979672, -0.761576] +Interval 1 = [-0.838551, -0.581967] +Interval 2 = [-0.658942, -0.402359] +Interval 3 = [-0.479334, -0.22275] +Interval 4 = [-0.299725, -0.0431415] +Interval 5 = [-0.120117, 0.136467] +Interval 6 = [0.059492, 0.316076] +Interval 7 = [0.239101, 0.495684] +Interval 8 = [0.418709, 0.675293] +Interval 9 = [0.598318, 0.816414] +Computing preimages... +Computing connected components... +.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox. +5 interval(s) in dimension 0: + [-0.909111, 0.00817529] + [-0.171433, 0.367392] + [-0.171433, 0.367392] + [-0.909111, 0.745853] +0 interval(s) in dimension 1: +Nerve is of dimension 1 - 41 simplices - 21 vertices. +Iterator on Nerve simplices +1 +0 +4 +4 0 +2 +2 1 +8 +8 2 +5 +5 4 +9 +9 8 +13 +13 5 +14 +14 9 +19 +19 13 +25 +32 +20 +32 20 +33 +33 25 +26 +26 14 +26 19 +42 +42 26 +34 +34 33 +27 +27 20 +35 +35 27 +35 34 +42 35 +44 +44 35 +54 +54 44 \ No newline at end of file diff --git a/src/Nerve_GIC/utilities/VoronoiGIC.cpp b/src/Nerve_GIC/utilities/VoronoiGIC.cpp new file mode 100644 index 00000000..32431cc2 --- /dev/null +++ b/src/Nerve_GIC/utilities/VoronoiGIC.cpp @@ -0,0 +1,90 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Mathieu Carrière + * + * Copyright (C) 2017 INRIA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include +#include + +void usage(int nbArgs, char *const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int m = atoi(argv[2]); + bool verb = 0; + if (argc == 4) verb = 1; + + // ---------------------------------------------------------------------------- + // Init of a graph induced complex from an OFF file + // ---------------------------------------------------------------------------- + + Gudhi::cover_complex::Cover_complex GIC; + GIC.set_verbose(verb); + + bool check = GIC.read_point_cloud(off_file_name); + + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { + GIC.set_type("GIC"); + + GIC.set_color_from_coordinate(); + + GIC.set_graph_from_OFF(); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), m); + + GIC.find_simplices(); + + GIC.plot_OFF(); + + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if (verb) { + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/utilities/km.py b/src/Nerve_GIC/utilities/km.py new file mode 100755 index 00000000..53024aab --- /dev/null +++ b/src/Nerve_GIC/utilities/km.py @@ -0,0 +1,390 @@ +from __future__ import division +import numpy as np +from collections import defaultdict +import json +import itertools +from sklearn import cluster, preprocessing, manifold +from datetime import datetime +import sys + +class KeplerMapper(object): + # With this class you can build topological networks from (high-dimensional) data. + # + # 1) Fit a projection/lens/function to a dataset and transform it. + # For instance "mean_of_row(x) for x in X" + # 2) Map this projection with overlapping intervals/hypercubes. + # Cluster the points inside the interval + # (Note: we cluster on the inverse image/original data to lessen projection loss). + # If two clusters/nodes have the same members (due to the overlap), then: + # connect these with an edge. + # 3) Visualize the network using HTML and D3.js. + # + # functions + # --------- + # fit_transform: Create a projection (lens) from a dataset + # map: Apply Mapper algorithm on this projection and build a simplicial complex + # visualize: Turns the complex dictionary into a HTML/D3.js visualization + + def __init__(self, verbose=2): + self.verbose = verbose + + self.chunk_dist = [] + self.overlap_dist = [] + self.d = [] + self.nr_cubes = 0 + self.overlap_perc = 0 + self.clusterer = False + + def fit_transform(self, X, projection="sum", scaler=preprocessing.MinMaxScaler()): + # Creates the projection/lens from X. + # + # Input: X. Input features as a numpy array. + # Output: projected_X. original data transformed to a projection (lens). + # + # parameters + # ---------- + # projection: Projection parameter is either a string, + # a scikit class with fit_transform, like manifold.TSNE(), + # or a list of dimension indices. + # scaler: if None, do no scaling, else apply scaling to the projection + # Default: Min-Max scaling + + self.scaler = scaler + self.projection = str(projection) + + # Detect if projection is a class (for scikit-learn) + #if str(type(projection))[1:6] == "class": #TODO: de-ugly-fy + # reducer = projection + # if self.verbose > 0: + # try: + # projection.set_params(**{"verbose":self.verbose}) + # except: + # pass + # print("\n..Projecting data using: \n\t%s\n"%str(projection)) + # X = reducer.fit_transform(X) + + # Detect if projection is a string (for standard functions) + if isinstance(projection, str): + if self.verbose > 0: + print("\n..Projecting data using: %s"%(projection)) + # Stats lenses + if projection == "sum": # sum of row + X = np.sum(X, axis=1).reshape((X.shape[0],1)) + if projection == "mean": # mean of row + X = np.mean(X, axis=1).reshape((X.shape[0],1)) + if projection == "median": # mean of row + X = np.median(X, axis=1).reshape((X.shape[0],1)) + if projection == "max": # max of row + X = np.max(X, axis=1).reshape((X.shape[0],1)) + if projection == "min": # min of row + X = np.min(X, axis=1).reshape((X.shape[0],1)) + if projection == "std": # std of row + X = np.std(X, axis=1).reshape((X.shape[0],1)) + + if projection == "dist_mean": # Distance of x to mean of X + X_mean = np.mean(X, axis=0) + X = np.sum(np.sqrt((X - X_mean)**2), axis=1).reshape((X.shape[0],1)) + + # Detect if projection is a list (with dimension indices) + if isinstance(projection, list): + if self.verbose > 0: + print("\n..Projecting data using: %s"%(str(projection))) + X = X[:,np.array(projection)] + + # Scaling + if scaler is not None: + if self.verbose > 0: + print("\n..Scaling with: %s\n"%str(scaler)) + X = scaler.fit_transform(X) + + return X + + def map(self, projected_X, inverse_X=None, clusterer=cluster.DBSCAN(eps=0.5,min_samples=3), nr_cubes=10, overlap_perc=0.1): + # This maps the data to a simplicial complex. Returns a dictionary with nodes and links. + # + # Input: projected_X. A Numpy array with the projection/lens. + # Output: complex. A dictionary with "nodes", "links" and "meta information" + # + # parameters + # ---------- + # projected_X projected_X. A Numpy array with the projection/lens. Required. + # inverse_X Numpy array or None. If None then the projection itself is used for clustering. + # clusterer Scikit-learn API compatible clustering algorithm. Default: DBSCAN + # nr_cubes Int. The number of intervals/hypercubes to create. + # overlap_perc Float. The percentage of overlap "between" the intervals/hypercubes. + + start = datetime.now() + + # Helper function + def cube_coordinates_all(nr_cubes, nr_dimensions): + # Helper function to get origin coordinates for our intervals/hypercubes + # Useful for looping no matter the number of cubes or dimensions + # Example: if there are 4 cubes per dimension and 3 dimensions + # return the bottom left (origin) coordinates of 64 hypercubes, + # as a sorted list of Numpy arrays + # TODO: elegance-ify... + l = [] + for x in range(nr_cubes): + l += [x] * nr_dimensions + return [np.array(list(f)) for f in sorted(set(itertools.permutations(l,nr_dimensions)))] + + nodes = defaultdict(list) + links = defaultdict(list) + complex = {} + self.nr_cubes = nr_cubes + self.clusterer = clusterer + self.overlap_perc = overlap_perc + + if self.verbose > 0: + print("Mapping on data shaped %s using dimensions\n"%(str(projected_X.shape))) + + # If inverse image is not provided, we use the projection as the inverse image (suffer projection loss) + if inverse_X is None: + inverse_X = projected_X + + # We chop up the min-max column ranges into 'nr_cubes' parts + self.chunk_dist = (np.max(projected_X, axis=0) - np.min(projected_X, axis=0))/nr_cubes + + # We calculate the overlapping windows distance + self.overlap_dist = self.overlap_perc * self.chunk_dist + + # We find our starting point + self.d = np.min(projected_X, axis=0) + + # Use a dimension index array on the projected X + # (For now this uses the entire dimensionality, but we keep for experimentation) + di = np.array([x for x in range(projected_X.shape[1])]) + + # Prefix'ing the data with ID's + ids = np.array([x for x in range(projected_X.shape[0])]) + projected_X = np.c_[ids,projected_X] + inverse_X = np.c_[ids,inverse_X] + + # Subdivide the projected data X in intervals/hypercubes with overlap + if self.verbose > 0: + total_cubes = len(cube_coordinates_all(nr_cubes,projected_X.shape[1])) + print("Creating %s hypercubes."%total_cubes) + + for i, coor in enumerate(cube_coordinates_all(nr_cubes,di.shape[0])): + # Slice the hypercube + hypercube = projected_X[ np.invert(np.any((projected_X[:,di+1] >= self.d[di] + (coor * self.chunk_dist[di])) & + (projected_X[:,di+1] < self.d[di] + (coor * self.chunk_dist[di]) + self.chunk_dist[di] + self.overlap_dist[di]) == False, axis=1 )) ] + + if self.verbose > 1: + print("There are %s points in cube_%s / %s with starting range %s"% + (hypercube.shape[0],i,total_cubes,self.d[di] + (coor * self.chunk_dist[di]))) + + # If at least one sample inside the hypercube + if hypercube.shape[0] > 0: + # Cluster the data point(s) in the cube, skipping the id-column + # Note that we apply clustering on the inverse image (original data samples) that fall inside the cube. + inverse_x = inverse_X[[int(nn) for nn in hypercube[:,0]]] + + clusterer.fit(inverse_x[:,1:]) + + if self.verbose > 1: + print("Found %s clusters in cube_%s\n"%(np.unique(clusterer.labels_[clusterer.labels_ > -1]).shape[0],i)) + + #Now for every (sample id in cube, predicted cluster label) + for a in np.c_[hypercube[:,0],clusterer.labels_]: + if a[1] != -1: #if not predicted as noise + cluster_id = str(coor[0])+"_"+str(i)+"_"+str(a[1])+"_"+str(coor)+"_"+str(self.d[di] + (coor * self.chunk_dist[di])) # TODO: de-rudimentary-ify + nodes[cluster_id].append( int(a[0]) ) # Append the member id's as integers + else: + if self.verbose > 1: + print("Cube_%s is empty.\n"%(i)) + + # Create links when clusters from different hypercubes have members with the same sample id. + candidates = itertools.combinations(nodes.keys(),2) + for candidate in candidates: + # if there are non-unique members in the union + if len(nodes[candidate[0]]+nodes[candidate[1]]) != len(set(nodes[candidate[0]]+nodes[candidate[1]])): + links[candidate[0]].append( candidate[1] ) + + # Reporting + if self.verbose > 0: + nr_links = 0 + for k in links: + nr_links += len(links[k]) + print("\ncreated %s edges and %s nodes in %s."%(nr_links,len(nodes),str(datetime.now()-start))) + + complex["nodes"] = nodes + complex["links"] = links + complex["meta"] = self.projection + + return complex + + def visualize(self, complex, color_function="", path_html="mapper_visualization_output.html", title="My Data", + graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=None, width_html=0, + height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=0,gain=0,minimum=0,maximum=0): + # Turns the dictionary 'complex' in a html file with d3.js + # + # Input: complex. Dictionary (output from calling .map()) + # Output: a HTML page saved as a file in 'path_html'. + # + # parameters + # ---------- + # color_function string. Not fully implemented. Default: "" (distance to origin) + # path_html file path as string. Where to save the HTML page. + # title string. HTML page document title and first heading. + # graph_link_distance int. Edge length. + # graph_gravity float. "Gravity" to center of layout. + # graph_charge int. charge between nodes. + # custom_tooltips None or Numpy Array. You could use "y"-label array for this. + # width_html int. Width of canvas. Default: 0 (full width) + # height_html int. Height of canvas. Default: 0 (full height) + # show_tooltips bool. default:True + # show_title bool. default:True + # show_meta bool. default:True + + # Format JSON for D3 graph + json_s = {} + json_s["nodes"] = [] + json_s["links"] = [] + k2e = {} # a key to incremental int dict, used for id's when linking + + for e, k in enumerate(complex["nodes"]): + # Tooltip and node color formatting, TODO: de-mess-ify + if custom_tooltips is not None: + tooltip_s = "

Cluster %s

"%k + " ".join(str(custom_tooltips[complex["nodes"][k][0]]).split(" ")) + if maximum == minimum: + tooltip_i = 0 + else: + tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) + json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(complex["nodes"][k][2])), "color": tooltip_i}) + else: + tooltip_s = "

Cluster %s

Contains %s members."%(k,len(complex["nodes"][k])) + json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(len(complex["nodes"][k]))), "color": str(k.split("_")[0])}) + k2e[k] = e + for k in complex["links"]: + for link in complex["links"][k]: + json_s["links"].append({"source": k2e[k], "target":k2e[link],"value":1}) + + # Width and height of graph in HTML output + if width_html == 0: + width_css = "100%" + width_js = 'document.getElementById("holder").offsetWidth-20' + else: + width_css = "%spx" % width_html + width_js = "%s" % width_html + if height_html == 0: + height_css = "100%" + height_js = 'document.getElementById("holder").offsetHeight-20' + else: + height_css = "%spx" % height_html + height_js = "%s" % height_html + + # Whether to show certain UI elements or not + if show_tooltips == False: + tooltips_display = "display: none;" + else: + tooltips_display = "" + + if show_meta == False: + meta_display = "display: none;" + else: + meta_display = "" + + if show_title == False: + title_display = "display: none;" + else: + title_display = "" + + with open(path_html,"wb") as outfile: + html = """ + + + %s | KeplerMapper + + + +
+

%s

+

+ Lens
%s

+ Length of intervals
%s

+ Overlap percentage
%s%%

+ Color Function
%s +

+
+ + """%(title,width_css, height_css, title_display, meta_display, tooltips_display, title,complex["meta"],res,gain*100,color_function,width_js,height_js,graph_charge,graph_link_distance,graph_gravity,json.dumps(json_s)) + outfile.write(html.encode("utf-8")) + if self.verbose > 0: + print("\nWrote d3.js graph to '%s'"%path_html) diff --git a/src/Nerve_GIC/utilities/km.py.COPYRIGHT b/src/Nerve_GIC/utilities/km.py.COPYRIGHT new file mode 100644 index 00000000..bef7b121 --- /dev/null +++ b/src/Nerve_GIC/utilities/km.py.COPYRIGHT @@ -0,0 +1,26 @@ +km.py is a fork of https://github.com/MLWave/kepler-mapper. +Only the visualization part has been kept (Mapper part has been removed). + +This file has te following Copyright : + +The MIT License (MIT) + +Copyright (c) 2015 Triskelion - HJ van Veen - info@mlwave.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/Persistence_representations/example/CMakeLists.txt b/src/Persistence_representations/example/CMakeLists.txt index b8ce8ea6..eb3258f8 100644 --- a/src/Persistence_representations/example/CMakeLists.txt +++ b/src/Persistence_representations/example/CMakeLists.txt @@ -2,28 +2,23 @@ cmake_minimum_required(VERSION 2.6) project(Persistence_representations_example) add_executable ( Persistence_representations_example_landscape_on_grid persistence_landscape_on_grid.cpp ) -target_link_libraries(Persistence_representations_example_landscape_on_grid ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_landscape_on_grid COMMAND $) add_executable ( Persistence_representations_example_landscape persistence_landscape.cpp ) -target_link_libraries(Persistence_representations_example_landscape ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_landscape COMMAND $) add_executable ( Persistence_representations_example_intervals persistence_intervals.cpp ) -target_link_libraries(Persistence_representations_example_intervals ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_intervals COMMAND $ "${CMAKE_SOURCE_DIR}/data/persistence_diagram/first.pers") add_executable ( Persistence_representations_example_vectors persistence_vectors.cpp ) -target_link_libraries(Persistence_representations_example_vectors ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_vectors COMMAND $) add_executable ( Persistence_representations_example_heat_maps persistence_heat_maps.cpp ) -target_link_libraries(Persistence_representations_example_heat_maps ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_heat_maps COMMAND $) diff --git a/src/Persistence_representations/test/CMakeLists.txt b/src/Persistence_representations/test/CMakeLists.txt index 4483de07..335a71ef 100644 --- a/src/Persistence_representations/test/CMakeLists.txt +++ b/src/Persistence_representations/test/CMakeLists.txt @@ -6,38 +6,38 @@ include(GUDHI_test_coverage) # copy data directory for tests purpose. file(COPY data DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) add_executable ( Persistence_intervals_test_unit persistence_intervals_test.cpp ) -target_link_libraries(Persistence_intervals_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_intervals_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_intervals_test_unit) add_executable (Vector_representation_test_unit vector_representation_test.cpp ) -target_link_libraries(Vector_representation_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Vector_representation_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Vector_representation_test_unit) add_executable (Persistence_lanscapes_test_unit persistence_lanscapes_test.cpp ) -target_link_libraries(Persistence_lanscapes_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_lanscapes_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_lanscapes_test_unit) add_executable ( Persistence_lanscapes_on_grid_test_unit persistence_lanscapes_on_grid_test.cpp ) -target_link_libraries(Persistence_lanscapes_on_grid_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_lanscapes_on_grid_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_lanscapes_on_grid_test_unit) add_executable (Persistence_heat_maps_test_unit persistence_heat_maps_test.cpp ) -target_link_libraries(Persistence_heat_maps_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_heat_maps_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_heat_maps_test_unit) add_executable ( Read_persistence_from_file_test_unit read_persistence_from_file_test.cpp ) -target_link_libraries(Read_persistence_from_file_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Read_persistence_from_file_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Read_persistence_from_file_test_unit) if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) add_executable (Persistence_intervals_with_distances_test_unit persistence_intervals_with_distances_test.cpp ) - target_link_libraries(Persistence_intervals_with_distances_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) + target_link_libraries(Persistence_intervals_with_distances_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) if (TBB_FOUND) target_link_libraries(Persistence_intervals_with_distances_test_unit ${TBB_LIBRARIES}) endif(TBB_FOUND) diff --git a/src/common/doc/examples.h b/src/common/doc/examples.h new file mode 100644 index 00000000..40f202c7 --- /dev/null +++ b/src/common/doc/examples.h @@ -0,0 +1,99 @@ +// List of GUDHI examples - Doxygen needs at least a file tag to analyse comments +// In user_version, `find . -name "*.cpp"` in example and utilities folders +/*! @file Examples + * @example Alpha_complex/Alpha_complex_from_off.cpp + * @example Alpha_complex/Alpha_complex_from_points.cpp + * @example Bottleneck_distance/bottleneck_basic_example.cpp + * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp + * @example Witness_complex/example_nearest_landmark_table.cpp + * @example Witness_complex/example_witness_complex_off.cpp + * @example Witness_complex/example_witness_complex_sphere.cpp + * @example Witness_complex/example_strong_witness_complex_off.cpp + * @example Simplex_tree/mini_simplex_tree.cpp + * @example Simplex_tree/graph_expansion_with_blocker.cpp + * @example Simplex_tree/simple_simplex_tree.cpp + * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * @example Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * @example Simplex_tree/cech_complex_cgal_mini_sphere_3d.cpp + * @example Persistent_cohomology/plain_homology.cpp + * @example Persistent_cohomology/persistence_from_file.cpp + * @example Persistent_cohomology/rips_persistence_step_by_step.cpp + * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * @example Persistent_cohomology/custom_persistence_sort.cpp + * @example Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * @example Persistent_cohomology/rips_multifield_persistence.cpp + * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp + * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp + * @example Skeleton_blocker/Skeleton_blocker_link.cpp + * @example Contraction/Garland_heckbert.cpp + * @example Contraction/Rips_contraction.cpp + * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * @example common/example_CGAL_3D_points_off_reader.cpp + * @example common/example_vector_double_points_off_reader.cpp + * @example common/example_CGAL_points_off_reader.cpp + * @example Rips_complex/example_one_skeleton_rips_from_distance_matrix.cpp + * @example Rips_complex/example_one_skeleton_rips_from_points.cpp + * @example Rips_complex/example_rips_complex_from_csv_distance_matrix_file.cpp + * @example Rips_complex/example_rips_complex_from_off_file.cpp + * @example Persistence_representations/persistence_intervals.cpp + * @example Persistence_representations/persistence_vectors.cpp + * @example Persistence_representations/persistence_heat_maps.cpp + * @example Persistence_representations/persistence_landscape_on_grid.cpp + * @example Persistence_representations/persistence_landscape.cpp + * @example Tangential_complex/example_basic.cpp + * @example Tangential_complex/example_with_perturb.cpp + * @example Subsampling/example_custom_kernel.cpp + * @example Subsampling/example_choose_n_farthest_points.cpp + * @example Subsampling/example_sparsify_point_set.cpp + * @example Subsampling/example_pick_n_random_points.cpp + * @example Nerve_GIC/CoordGIC.cpp + * @example Nerve_GIC/Nerve.cpp + * @example Nerve_GIC/FuncGIC.cpp + * @example Nerve_GIC/VoronoiGIC.cpp + * @example Spatial_searching/example_spatial_searching.cpp + * @example Alpha_complex/alpha_complex_3d_persistence.cpp + * @example Alpha_complex/alpha_complex_persistence.cpp + * @example Alpha_complex/weighted_periodic_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * @example Bottleneck_distance/bottleneck_distance.cpp + * @example Witness_complex/weak_witness_persistence.cpp + * @example Witness_complex/strong_witness_persistence.cpp + * @example Bitmap_cubical_complex/cubical_complex_persistence.cpp + * @example Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp + * @example common/off_file_from_shape_generator.cpp + * @example Rips_complex/rips_distance_matrix_persistence.cpp + * @example Rips_complex/rips_persistence.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp + * @example Persistence_representations/persistence_intervals/compute_number_of_dominant_intervals.cpp + * @example Persistence_representations/persistence_intervals/plot_persistence_Betti_numbers.cpp + * @example Persistence_representations/persistence_intervals/plot_persistence_intervals.cpp + * @example Persistence_representations/persistence_intervals/plot_histogram_of_intervals_lengths.cpp + * @example Persistence_representations/persistence_intervals/compute_bottleneck_distance.cpp + * @example Persistence_representations/persistence_heat_maps/create_pssk.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp + * @example Persistence_representations/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp + * @example Persistence_representations/persistence_heat_maps/average_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/plot_persistence_heat_map.cpp + * @example Persistence_representations/persistence_heat_maps/create_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_vectors/plot_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/compute_distance_of_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/average_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/create_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp + * @example Persistence_representations/persistence_landscapes/average_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/compute_scalar_product_of_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/create_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/compute_distance_of_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/plot_landscapes.cpp + */ + diff --git a/src/common/doc/installation.h b/src/common/doc/installation.h new file mode 100644 index 00000000..25675cc5 --- /dev/null +++ b/src/common/doc/installation.h @@ -0,0 +1,263 @@ +/*! \page installation GUDHI installation + * \tableofcontents + * As GUDHI is a header only library, there is no need to install the library. + * + * Examples of GUDHI headers inclusion can be found in \ref demos. + * + * \section compiling Compiling + * The library uses c++11 and requires Boost with version 1.48.0 or + * more recent. It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2015. + * + * \subsection demos Demos and examples + * To build the demos and examples, run the following commands in a terminal: +\verbatim cd /path-to-gudhi/ +mkdir build +cd build/ +cmake .. +make \endverbatim + * A list of examples is available here. + * + * \subsection testsuites Test suites + * To test your build, run the following command in a terminal: + * \verbatim make test \endverbatim + * + * \subsection documentationgeneration Documentation + * To generate the documentation, Doxygen is required. + * Run the following command in a terminal: +\verbatim +make doxygen +# Documentation will be generated in the folder YYYY-MM-DD-hh-mm-ss_GUDHI_X.Y.Z/doc/html/ +# You can customize the directory name by calling `cmake -DUSER_VERSION_DIR=/my/custom/folder` +\endverbatim + * + * \section optionallibrary Optional third-party library + * \subsection gmp GMP + * The multi-field persistent homology algorithm requires GMP which is a free library for arbitrary-precision + * arithmetic, operating on signed integers, rational numbers, and floating point numbers. + * + * The following example requires the GNU Multiple Precision Arithmetic + * Library (GMP) and will not be built if GMP is not installed: + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * + * Having GMP version 4.2 or higher installed is recommended. + * + * \subsection cgal CGAL + * The \ref alpha_complex data structure, \ref bottleneck_distance, and few examples requires CGAL, which is a C++ + * library which provides easy access to efficient and reliable geometric algorithms. + * + * \note There is no need to install CGAL, you can just cmake . && make CGAL (or even + * cmake -DCGAL_HEADER_ONLY=ON . for CGAL version ≥ 4.8.0), thereafter you will be able to compile + * GUDHI by calling cmake -DCGAL_DIR=/your/path/to/CGAL-X.Y .. && make + * + * Having CGAL version 4.4.0 or higher installed is recommended. The procedure to install this library according to + * your operating system is detailed here http://doc.cgal.org/latest/Manual/installation.html + * + * The following examples/utilities require the Computational Geometry Algorithms + * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: + * \li + * Alpha_complex/alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * \li + * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * + * The following examples/utilities require CGAL version ≥ 4.6.0: + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_strong_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_sphere.cpp + * + * The following example requires CGAL version ≥ 4.7.0: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * The following example requires CGAL version ≥ 4.8.1: + * \li + * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp + * \li + * Bottleneck_distance/bottleneck_basic_example.cpp + * \li + * Bottleneck_distance/bottleneck_distance.cpp + * \li + * Nerve_GIC/CoordGIC.cpp + * \li + * Nerve_GIC/FuncGIC.cpp + * \li + * Nerve_GIC/Nerve.cpp + * \li + * Nerve_GIC/VoronoiGIC.cpp + * \li + * Spatial_searching/example_spatial_searching.cpp + * \li + * Subsampling/example_choose_n_farthest_points.cpp + * \li + * Subsampling/example_custom_kernel.cpp + * \li + * Subsampling/example_pick_n_random_points.cpp + * \li + * Subsampling/example_sparsify_point_set.cpp + * \li + * Tangential_complex/example_basic.cpp + * \li + * Tangential_complex/example_with_perturb.cpp + * + * \subsection eigen3 Eigen3 + * The \ref alpha_complex data structure and few examples requires + * Eigen3 is a C++ template library for linear algebra: + * matrices, vectors, numerical solvers, and related algorithms. + * + * The following examples/utilities require the Eigen3 and will not be + * built if Eigen3 is not installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * \li + * Spatial_searching/example_spatial_searching.cpp + * \li + * Subsampling/example_choose_n_farthest_points.cpp + * \li + * Subsampling/example_custom_kernel.cpp + * \li + * Subsampling/example_pick_n_random_points.cpp + * \li + * Subsampling/example_sparsify_point_set.cpp + * \li + * Tangential_complex/example_basic.cpp + * \li + * Tangential_complex/example_with_perturb.cpp + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_strong_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_sphere.cpp + * + * \subsection tbb Threading Building Blocks + * Intel® TBB lets you easily write parallel + * C++ programs that take full advantage of multicore performance, that are portable and composable, and that have + * future-proof scalability. + * + * Having Intel® TBB installed is recommended to parallelize and accelerate some GUDHI computations. + * + * The following examples/utilities are using Intel® TBB if installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * \li + * Bitmap_cubical_complex/cubical_complex_persistence.cpp + * \li + * Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp + * \li + * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * \li + * Nerve_GIC/CoordGIC.cpp + * \li + * Nerve_GIC/FuncGIC.cpp + * \li + * Nerve_GIC/Nerve.cpp + * \li + * Nerve_GIC/VoronoiGIC.cpp + * \li + * Simplex_tree/simple_simplex_tree.cpp + * \li + * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * \li + * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * \li + * Simplex_tree/graph_expansion_with_blocker.cpp + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * \li + * Persistent_cohomology/persistence_from_file.cpp + * \li + * Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * \li + * Persistent_cohomology/plain_homology.cpp + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence_step_by_step.cpp + * \li + * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/weighted_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * \li + * Rips_complex/example_one_skeleton_rips_from_points.cpp + * \li + * Rips_complex/example_rips_complex_from_off_file.cpp + * \li + * Rips_complex/rips_distance_matrix_persistence.cpp + * \li + * Rips_complex/rips_persistence.cpp + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_nearest_landmark_table.cpp + * + * \section Contributions Bug reports and contributions + * Please help us improving the quality of the GUDHI library. You may report bugs or suggestions to: + * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim + * + * GUDHI is open to external contributions. If you want to join our development team, please contact us. + * +*/ + +/*! \page Citation Acknowledging the GUDHI library + * We kindly ask users to cite the GUDHI library as appropriately as possible in their papers, and to mention the use + * of the GUDHI library on the web pages of their projects using GUDHI and provide us with links to these web pages. + * Feel free to contact us in case you have any question or remark on this topic. + * + * We provide \ref GudhiBibtex entries for the modules of the User and Reference Manual, as well as for publications + * directly related to the GUDHI library. + * \section GudhiBibtex GUDHI bibtex + * \verbinclude biblio/how_to_cite_gudhi.bib +*/ diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 148ee670..b3e9ea03 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -93,7 +93,7 @@ - \subsection CoverComplexDataStructure Cover Complexes: Nerves and Graph Induced Complexes + \subsection CoverComplexDataStructure Cover Complexes \image html "gicvisu.jpg" "Graph Induced Complex of a point cloud." @@ -101,6 +101,7 @@ Author: Mathieu Carrière
Introduced in: GUDHI 2.1.0
Copyright: GPL v3
+ Requires: \ref cgal ≥ 4.8.1
Nerves and Graph Induced Complexes are cover complexes, i.e. simplicial complexes that provably contain @@ -250,305 +251,3 @@
*/ - -/*! \page installation GUDHI installation - * \tableofcontents - * As GUDHI is a header only library, there is no need to install the library. - * - * Examples of GUDHI headers inclusion can be found in \ref demos. - * - * \section compiling Compiling - * The library uses c++11 and requires Boost with version 1.48.0 or - * more recent. It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2015. - * - * \subsection demos Demos and examples - * To build the demos and examples, run the following commands in a terminal: -\verbatim cd /path-to-gudhi/ -mkdir build -cd build/ -cmake .. -make \endverbatim - * A list of examples is available here. - * - * \subsection testsuites Test suites - * To test your build, run the following command in a terminal: - * \verbatim make test \endverbatim - * - * \subsection documentationgeneration Documentation - * To generate the documentation, Doxygen is required. - * Run the following command in a terminal: -\verbatim -make doxygen -# Documentation will be generated in the folder YYYY-MM-DD-hh-mm-ss_GUDHI_X.Y.Z/doc/html/ -# You can customize the directory name by calling `cmake -DUSER_VERSION_DIR=/my/custom/folder` -\endverbatim - * - * \section optionallibrary Optional third-party library - * \subsection gmp GMP - * The multi-field persistent homology algorithm requires GMP which is a free library for arbitrary-precision - * arithmetic, operating on signed integers, rational numbers, and floating point numbers. - * - * The following example requires the GNU Multiple Precision Arithmetic - * Library (GMP) and will not be built if GMP is not installed: - * \li - * Persistent_cohomology/rips_multifield_persistence.cpp - * - * Having GMP version 4.2 or higher installed is recommended. - * - * \subsection cgal CGAL - * The \ref alpha_complex data structure, \ref bottleneck_distance, and few examples requires CGAL, which is a C++ - * library which provides easy access to efficient and reliable geometric algorithms. - * - * \note There is no need to install CGAL, you can just cmake . && make CGAL (or even - * cmake -DCGAL_HEADER_ONLY=ON . for CGAL version ≥ 4.8.0), thereafter you will be able to compile - * GUDHI by calling cmake -DCGAL_DIR=/your/path/to/CGAL-X.Y .. && make - * - * Having CGAL version 4.4.0 or higher installed is recommended. The procedure to install this library according to - * your operating system is detailed here http://doc.cgal.org/latest/Manual/installation.html - * - * The following examples/utilities require the Computational Geometry Algorithms - * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: - * \li - * Alpha_complex/alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * \li - * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * - * The following examples/utilities require CGAL version ≥ 4.6.0: - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_strong_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_sphere.cpp - * - * The following example requires CGAL version ≥ 4.7.0: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * - * The following example requires CGAL version ≥ 4.8.1: - * \li - * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp - * \li - * Bottleneck_distance/bottleneck_basic_example.cpp - * \li - * Bottleneck_distance/bottleneck_distance.cpp - * \li - * Spatial_searching/example_spatial_searching.cpp - * \li - * Subsampling/example_choose_n_farthest_points.cpp - * \li - * Subsampling/example_custom_kernel.cpp - * \li - * Subsampling/example_pick_n_random_points.cpp - * \li - * Subsampling/example_sparsify_point_set.cpp - * \li - * Tangential_complex/example_basic.cpp - * \li - * Tangential_complex/example_with_perturb.cpp - * - * \subsection eigen3 Eigen3 - * The \ref alpha_complex data structure and few examples requires - * Eigen3 is a C++ template library for linear algebra: - * matrices, vectors, numerical solvers, and related algorithms. - * - * The following examples/utilities require the Eigen3 and will not be - * built if Eigen3 is not installed: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * \li - * Spatial_searching/example_spatial_searching.cpp - * \li - * Subsampling/example_choose_n_farthest_points.cpp - * \li - * Subsampling/example_custom_kernel.cpp - * \li - * Subsampling/example_pick_n_random_points.cpp - * \li - * Subsampling/example_sparsify_point_set.cpp - * \li - * Tangential_complex/example_basic.cpp - * \li - * Tangential_complex/example_with_perturb.cpp - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_strong_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_sphere.cpp - * - * \subsection tbb Threading Building Blocks - * Intel® TBB lets you easily write parallel - * C++ programs that take full advantage of multicore performance, that are portable and composable, and that have - * future-proof scalability. - * - * Having Intel® TBB installed is recommended to parallelize and accelerate some GUDHI computations. - * - * The following examples/utilities are using Intel® TBB if installed: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * \li - * Bitmap_cubical_complex/cubical_complex_persistence.cpp - * \li - * Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp - * \li - * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp - * \li - * Simplex_tree/simple_simplex_tree.cpp - * \li - * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * \li - * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp - * \li - * Simplex_tree/graph_expansion_with_blocker.cpp - * \li - * Persistent_cohomology/alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/alpha_complex_persistence.cpp - * \li - * Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp - * \li - * Persistent_cohomology/persistence_from_file.cpp - * \li - * Persistent_cohomology/persistence_from_simple_simplex_tree.cpp - * \li - * Persistent_cohomology/plain_homology.cpp - * \li - * Persistent_cohomology/rips_multifield_persistence.cpp - * \li - * Persistent_cohomology/rips_persistence_step_by_step.cpp - * \li - * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/weighted_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * \li - * Rips_complex/example_one_skeleton_rips_from_points.cpp - * \li - * Rips_complex/example_rips_complex_from_off_file.cpp - * \li - * Rips_complex/rips_distance_matrix_persistence.cpp - * \li - * Rips_complex/rips_persistence.cpp - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_nearest_landmark_table.cpp - * - * \section Contributions Bug reports and contributions - * Please help us improving the quality of the GUDHI library. You may report bugs or suggestions to: - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim - * - * GUDHI is open to external contributions. If you want to join our development team, please contact us. - * -*/ - -/*! \page Citation Acknowledging the GUDHI library - * We kindly ask users to cite the GUDHI library as appropriately as possible in their papers, and to mention the use - * of the GUDHI library on the web pages of their projects using GUDHI and provide us with links to these web pages. - * Feel free to contact us in case you have any question or remark on this topic. - * - * We provide \ref GudhiBibtex entries for the modules of the User and Reference Manual, as well as for publications - * directly related to the GUDHI library. - * \section GudhiBibtex GUDHI bibtex - * \verbinclude biblio/how_to_cite_gudhi.bib -*/ - -// List of GUDHI examples - Doxygen needs at least a file tag to analyse comments -/*! @file Examples - * @example Alpha_complex/Alpha_complex_from_off.cpp - * @example Alpha_complex/Alpha_complex_from_points.cpp - * @example Alpha_complex/alpha_complex_3d_persistence.cpp - * @example Alpha_complex/alpha_complex_persistence.cpp - * @example Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * @example Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * @example Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp - * @example Bottleneck_distance/bottleneck_basic_example.cpp - * @example Bottleneck_distance/bottleneck_distance.cpp - * @example Bitmap_cubical_complex/cubical_complex_persistence.cpp - * @example Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp - * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp - * @example common/example_CGAL_3D_points_off_reader.cpp - * @example common/example_CGAL_points_off_reader.cpp - * @example Contraction/Garland_heckbert.cpp - * @example Contraction/Rips_contraction.cpp - * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp - * @example Persistent_cohomology/persistence_from_file.cpp - * @example Persistent_cohomology/persistence_from_simple_simplex_tree.cpp - * @example Persistent_cohomology/plain_homology.cpp - * @example Persistent_cohomology/rips_multifield_persistence.cpp - * @example Persistent_cohomology/custom_persistence_sort.cpp - * @example Persistent_cohomology/rips_persistence_step_by_step.cpp - * @example Rips_complex/example_one_skeleton_rips_from_points.cpp - * @example Rips_complex/example_rips_complex_from_off_file.cpp - * @example Rips_complex/rips_persistence.cpp - * @example Rips_complex/rips_distance_matrix_persistence.cpp - * @example Simplex_tree/mini_simplex_tree.cpp - * @example Simplex_tree/simple_simplex_tree.cpp - * @example Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp - * @example Simplex_tree/graph_expansion_with_blocker.cpp - * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp - * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp - * @example Skeleton_blocker/Skeleton_blocker_link.cpp - * @example Spatial_searching/example_spatial_searching.cpp - * @example Subsampling/example_choose_n_farthest_points.cpp - * @example Subsampling/example_custom_kernel.cpp - * @example Subsampling/example_pick_n_random_points.cpp - * @example Subsampling/example_sparsify_point_set.cpp - * @example Tangential_complex/example_basic.cpp - * @example Tangential_complex/example_with_perturb.cpp - * @example Witness_complex/example_nearest_landmark_table.cpp - * @example Witness_complex/example_strong_witness_complex_off.cpp - * @example Witness_complex/example_witness_complex_off.cpp - * @example Witness_complex/example_witness_complex_sphere.cpp - * @example Witness_complex/weak_witness_persistence.cpp - * @example Witness_complex/strong_witness_persistence.cpp - */ - -- cgit v1.2.3 From b674e9a5fae8bdbb22eadb9a7c0013ce84451743 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 26 Jan 2018 14:55:28 +0000 Subject: Move documentation Copyright in footer Removed from each module git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3167 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7595f2d18cdc3773bbd96fa9fed414876ff9fdc7 --- src/Alpha_complex/doc/Intro_alpha_complex.h | 4 +--- src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h | 1 - src/Contraction/include/gudhi/Edge_contraction.h | 4 ---- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 1 - .../doc/Persistence_representations_doc.h | 1 - src/Persistent_cohomology/doc/Intro_persistent_cohomology.h | 1 - src/Rips_complex/doc/Intro_rips_complex.h | 2 -- src/Simplex_tree/doc/Intro_simplex_tree.h | 1 - src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h | 3 --- src/Spatial_searching/doc/Intro_spatial_searching.h | 2 -- src/Subsampling/doc/Intro_subsampling.h | 2 -- src/Tangential_complex/doc/Intro_tangential_complex.h | 2 -- src/Witness_complex/doc/Witness_complex_doc.h | 3 --- src/common/doc/footer.html | 10 ++-------- 14 files changed, 3 insertions(+), 34 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Alpha_complex/doc/Intro_alpha_complex.h b/src/Alpha_complex/doc/Intro_alpha_complex.h index cf1a946a..a08663ca 100644 --- a/src/Alpha_complex/doc/Intro_alpha_complex.h +++ b/src/Alpha_complex/doc/Intro_alpha_complex.h @@ -31,7 +31,7 @@ namespace alpha_complex { /** \defgroup alpha_complex Alpha complex * * \author Vincent Rouvreau - * + * * @{ * * \section definition Definition @@ -195,8 +195,6 @@ namespace alpha_complex { * * \include Alpha_complex/alphaoffreader_for_doc_32.txt * - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup alpha_complex diff --git a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h index ee84e201..a5d7b60f 100644 --- a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h +++ b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h @@ -105,7 +105,6 @@ namespace cubical_complex { * \section BitmapExamples Examples * End user programs are available in example/Bitmap_cubical_complex and utilities/Bitmap_cubical_complex folders. * - * \copyright GNU General Public License v3. */ /** @} */ // end defgroup cubical_complex diff --git a/src/Contraction/include/gudhi/Edge_contraction.h b/src/Contraction/include/gudhi/Edge_contraction.h index 61f2d945..cf9a2c27 100644 --- a/src/Contraction/include/gudhi/Edge_contraction.h +++ b/src/Contraction/include/gudhi/Edge_contraction.h @@ -210,7 +210,6 @@ int main (int argc, char *argv[]) } \endcode - \verbatim ./example/Contraction/RipsContraction ../../data/SO3_10000.off 0.3 [ 50%] [100%] Built target SkeletonBlockerIteration @@ -223,9 +222,6 @@ Time to simplify and enumerate simplices: 3.166621s wall, 3.150000s user + 0.010000s system = 3.160000s CPU (99.8%) \endverbatim - - -\copyright GNU General Public License v3. */ /** @} */ // end defgroup } // namespace contraction diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 344cb031..f2409087 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -176,7 +176,6 @@ namespace cover_complex { * * \image html "funcGICvisu.jpg" "Visualization with neato" * - * \copyright GNU General Public License v3. */ /** @} */ // end defgroup cover_complex diff --git a/src/Persistence_representations/doc/Persistence_representations_doc.h b/src/Persistence_representations/doc/Persistence_representations_doc.h index 978fb5bd..d781211a 100644 --- a/src/Persistence_representations/doc/Persistence_representations_doc.h +++ b/src/Persistence_representations/doc/Persistence_representations_doc.h @@ -250,7 +250,6 @@ namespace Persistence_representations { absolute value of differences between coordinates. A scalar product is a sum of products of values at the corresponding positions of two vectors. - \copyright GNU General Public License v3. */ /** @} */ // end defgroup Persistence_representations diff --git a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h index ceaea505..4dbe82c7 100644 --- a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h +++ b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h @@ -248,7 +248,6 @@ Simplex_tree dim: 3 Persistent_cohomology/plain_homology.cpp computes the plain homology of a simple simplicial complex without filtration values. - \copyright GNU General Public License v3. */ } // namespace persistent_cohomology diff --git a/src/Rips_complex/doc/Intro_rips_complex.h b/src/Rips_complex/doc/Intro_rips_complex.h index 124dfec9..8c517516 100644 --- a/src/Rips_complex/doc/Intro_rips_complex.h +++ b/src/Rips_complex/doc/Intro_rips_complex.h @@ -146,8 +146,6 @@ namespace rips_complex { * * \include Rips_complex/full_skeleton_rips_for_doc.txt * - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup rips_complex diff --git a/src/Simplex_tree/doc/Intro_simplex_tree.h b/src/Simplex_tree/doc/Intro_simplex_tree.h index 769491d9..6b80d1c9 100644 --- a/src/Simplex_tree/doc/Intro_simplex_tree.h +++ b/src/Simplex_tree/doc/Intro_simplex_tree.h @@ -79,7 +79,6 @@ Number of vertices = 10 Number of simplices = 98 \endcode * 1 incidence relations in a complex. It is consequently faster when accessing the boundary of a simplex, but is less * compact and harder to construct from scratch. * - * \copyright GNU General Public License v3. * @} */ diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h index 32fe411c..aca2aa57 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h @@ -239,9 +239,6 @@ their collaboration to write the two initial papers about this data-structure and also Dominique for leaving him use a prototype. - -\copyright GNU General Public License v3. - @} */ } // namespace skeleton_blocker diff --git a/src/Spatial_searching/doc/Intro_spatial_searching.h b/src/Spatial_searching/doc/Intro_spatial_searching.h index 1ee5e92e..52ed65e4 100644 --- a/src/Spatial_searching/doc/Intro_spatial_searching.h +++ b/src/Spatial_searching/doc/Intro_spatial_searching.h @@ -50,8 +50,6 @@ namespace spatial_searching { * * \include Spatial_searching/example_spatial_searching.cpp * - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup spatial_searching diff --git a/src/Subsampling/doc/Intro_subsampling.h b/src/Subsampling/doc/Intro_subsampling.h index c84616dd..ab9cdc37 100644 --- a/src/Subsampling/doc/Intro_subsampling.h +++ b/src/Subsampling/doc/Intro_subsampling.h @@ -58,8 +58,6 @@ namespace subsampling { * This example outputs a subset of 100 points picked randomly. * * \include Subsampling/example_pick_n_random_points.cpp - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup subsampling diff --git a/src/Tangential_complex/doc/Intro_tangential_complex.h b/src/Tangential_complex/doc/Intro_tangential_complex.h index 3d687c1d..00e00c52 100644 --- a/src/Tangential_complex/doc/Intro_tangential_complex.h +++ b/src/Tangential_complex/doc/Intro_tangential_complex.h @@ -107,8 +107,6 @@ dimensions are known at compile-time. \include Tangential_complex/example_with_perturb.cpp -\copyright GNU General Public License v3. -\verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup tangential_complex diff --git a/src/Witness_complex/doc/Witness_complex_doc.h b/src/Witness_complex/doc/Witness_complex_doc.h index 5d5c0735..62203054 100644 --- a/src/Witness_complex/doc/Witness_complex_doc.h +++ b/src/Witness_complex/doc/Witness_complex_doc.h @@ -117,9 +117,6 @@ int main(int argc, char * const argv[]) { \include Witness_complex/example_nearest_landmark_table.cpp - \copyright GNU General Public License v3. - - */ #endif // WITNESS_COMPLEX_DOC_H_ diff --git a/src/common/doc/footer.html b/src/common/doc/footer.html index 7b4cdc5c..a557922b 100644 --- a/src/common/doc/footer.html +++ b/src/common/doc/footer.html @@ -6,24 +6,18 @@ $projectname  Version $projectnumber  - $projectbrief + - Copyright : GPL v3 $generatedby - doxygen $doxygenversion + Doxygen $doxygenversion - - - -- cgit v1.2.3 From c2d46e0e6cfea1927875219bd5e03962cef7b010 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 29 Jan 2018 16:31:18 +0000 Subject: Fix doc issue for utilities part on the web site git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3176 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 3bafd9e13a5646ca93023144705d3ac7ed7c9b3a --- src/Alpha_complex/utilities/README | 148 ++++++++++----------- src/Bitmap_cubical_complex/utilities/README | 42 ++++-- src/Bottleneck_distance/utilities/README | 32 ++++- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 6 +- src/Nerve_GIC/include/gudhi/GIC.h | 11 +- .../utilities/KeplerMapperVisuFromTxtFile.py | 97 ++++++++------ src/Nerve_GIC/utilities/covercomplex.md | 73 ++++++++++ src/Rips_complex/utilities/README | 67 ++++------ src/Witness_complex/utilities/README | 70 +++++----- src/common/utilities/README | 46 +++++-- 10 files changed, 365 insertions(+), 227 deletions(-) create mode 100644 src/Nerve_GIC/utilities/covercomplex.md (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Alpha_complex/utilities/README b/src/Alpha_complex/utilities/README index 1cd2ca95..56bce602 100644 --- a/src/Alpha_complex/utilities/README +++ b/src/Alpha_complex/utilities/README @@ -1,16 +1,35 @@ -# Alpha_complex # - -## `alpha_complex_3d_persistence` ## +--- +layout: page +title: "Alpha complex" +meta_title: "alphacomplex" +subheadline: "" +teaser: "" +permalink: "/alphacomplex/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} + + + +## alpha_complex_3d_persistence ## This program computes the persistent homology with coefficient field Z/pZ of the 3D alpha complex built from a 3D point cloud. The output diagram contains one bar per line, written with the convention: -`p dim birth death` +``` +p dim birth death +``` where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p` must be a prime number). **Usage** -`alpha_complex_3d_persistence [options] ` -where -`` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). + +``` + alpha_complex_3d_persistence [options] +``` + +where `` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). **Allowed options** @@ -20,43 +39,38 @@ where * `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. **Example** -`alpha_complex_3d_persistence ../../data/points/tore3D_300.off -p 2 -m 0.45` -outputs: ``` -Simplex_tree dim: 3 -2 0 0 inf -2 1 0.0682162 1.0001 -2 1 0.0934117 1.00003 -2 2 0.56444 1.03938 +alpha_complex_3d_persistence ../../data/points/tore3D_300.off -p 2 -m 0.45 ``` -Here we retrieve expected Betti numbers on a tore 3D: -``` -Betti numbers[0] = 1 -Betti numbers[1] = 2 -Betti numbers[2] = 1 -``` +N.B.: -N.B.: * `alpha_complex_3d_persistence` only accepts OFF files in dimension 3. * Filtration values are alpha square values. +## exact_alpha_complex_3d_persistence ## + +Same as `alpha_complex_3d_persistence`, but using exact computation. +It is slower, but it is necessary when points are on a grid for instance. -## `exact_alpha_complex_3d_persistence` ## -Same as `alpha_complex_3d_persistence`, but using exact computation. It is slower, but it is necessary when points are on a grid for instance. +## weighted_alpha_complex_3d_persistence ## -## `weighted_alpha_complex_3d_persistence` ## Same as `alpha_complex_3d_persistence`, but using weighted points. **Usage** -`weighted_alpha_complex_3d_persistence [options] ` + +``` + weighted_alpha_complex_3d_persistence [options] +``` + where -`` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). -`` is the path to the file containing the weights of the points (one value per line). + +* `` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). +* `` is the path to the file containing the weights of the points (one value per line). **Allowed options** @@ -66,32 +80,33 @@ where * `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. **Example** -`weighted_alpha_complex_3d_persistence ../../data/points/tore3D_300.off ../../data/points/tore3D_300.weights -p 2 -m 0.45` -outputs: ``` -Simplex_tree dim: 3 -2 0 -1 inf -2 1 -0.931784 0.000103311 -2 1 -0.906588 2.60165e-05 -2 2 -0.43556 0.0393798 + weighted_alpha_complex_3d_persistence ../../data/points/tore3D_300.off ../../data/points/tore3D_300.weights -p 2 -m 0.45 ``` + N.B.: + * Weights values are explained on CGAL [Alpha shape](https://doc.cgal.org/latest/Alpha_shapes_3/index.html#title0) and [Regular triangulation](https://doc.cgal.org/latest/Triangulation_3/index.html#Triangulation3secclassRegulartriangulation) documentation. * Filtration values are alpha square values. -## `periodic_alpha_complex_3d_persistence` ## +## periodic_alpha_complex_3d_persistence ## Same as `alpha_complex_3d_persistence`, but using periodic alpha shape 3d. Refer to the [CGAL's 3D Periodic Triangulations User Manual](https://doc.cgal.org/latest/Periodic_3_triangulation_3/index.html) for more details. **Usage** -`periodic_alpha_complex_3d_persistence [options] ` + +``` + periodic_alpha_complex_3d_persistence [options] +``` + where -`` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). -`` is the path to the file describing the periodic domain. It must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsIsoCuboid). + +* `` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). +* `` is the path to the file describing the periodic domain. It must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsIsoCuboid). **Allowed options** @@ -102,46 +117,36 @@ where **Example** -`periodic_alpha_complex_3d_persistence ../../data/points/grid_10_10_10_in_0_1.off ../../data/points/iso_cuboid_3_in_0_1.txt -p 3 -m 1.0` -outputs: ``` -Periodic Delaunay computed. -Simplex_tree dim: 3 -3 0 0 inf -3 1 0.0025 inf -3 1 0.0025 inf -3 1 0.0025 inf -3 2 0.005 inf -3 2 0.005 inf -3 2 0.005 inf -3 3 0.0075 inf +periodic_alpha_complex_3d_persistence ../../data/points/grid_10_10_10_in_0_1.off ../../data/points/iso_cuboid_3_in_0_1.txt -p 3 -m 1.0 ``` -Here we retrieve expected Betti numbers on an 3D iso-oriented cuboids: -``` -Betti numbers[0] = 1 -Betti numbers[1] = 3 -Betti numbers[2] = 3 -Betti numbers[3] = 1 -``` +N.B.: -N.B.: * Cuboid file must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsIsoCuboid). * Filtration values are alpha square values. +## alpha_complex_persistence ## -## `alpha_complex_persistence` ## -This program computes the persistent homology with coefficient field Z/pZ of the dD alpha complex built from a dD point cloud. The output diagram contains one bar per line, written with the convention: +This program computes the persistent homology with coefficient field Z/pZ of the dD alpha complex built from a dD point cloud. +The output diagram contains one bar per line, written with the convention: -`p dim birth death` +``` + p dim birth death +``` -where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p` must be a prime number). +where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, +and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p` must be a prime number). **Usage** -`alpha_complex_persistence [options] ` + +``` + alpha_complex_persistence [options] +``` + where `` is the path to the input point cloud in [nOFF ASCII format](http://www.geomview.org/docs/html/OFF.html). @@ -154,24 +159,11 @@ where * `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. **Example** -`alpha_complex_persistence -r 32 -p 2 -m 0.45 ../../data/points/tore3D_300.off` -outputs: ``` -Alpha complex is of dimension 3 - 9273 simplices - 300 vertices. -Simplex_tree dim: 3 -2 0 0 inf -2 1 0.0682162 1.0001 -2 1 0.0934117 1.00003 -2 2 0.56444 1.03938 -``` - -Here we retrieve expected Betti numbers on a tore 3D: -``` -Betti numbers[0] = 1 -Betti numbers[1] = 2 -Betti numbers[2] = 1 + alpha_complex_persistence -r 32 -p 2 -m 0.45 ../../data/points/tore3D_300.off ``` N.B.: + * Filtration values are alpha square values. diff --git a/src/Bitmap_cubical_complex/utilities/README b/src/Bitmap_cubical_complex/utilities/README index ddff7034..393b2654 100644 --- a/src/Bitmap_cubical_complex/utilities/README +++ b/src/Bitmap_cubical_complex/utilities/README @@ -1,18 +1,40 @@ -# Bitmap_cubical_complex # +--- +layout: page +title: "Bitmap cubical complex" +meta_title: "cubicalcomplex" +subheadline: "" +teaser: "" +permalink: "/cubicalcomplex/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} -## `cubical_complex_persistence` ## -This program computes persistent homology, by using the Bitmap_cubical_complex class, of cubical complexes provided in text files in Perseus style. See [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPerseus) for a description of the file format. -Example: +## cubical_complex_persistence ## +This program computes persistent homology, by using the Bitmap_cubical_complex class, of cubical complexes provided in text files in Perseus style. +See [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPerseus) for a description of the file format. -* Create a Cubical Complex from the Perseus style file `CubicalTwoSphere.txt`, computes Persistence cohomology from it and writes the results in a persistence file `CubicalTwoSphere.txt_persistence`: -`cubical_complex_persistence data/bitmap/CubicalTwoSphere.txt` +**Example** -## `periodic_cubical_complex_persistence` ## +``` + cubical_complex_persistence data/bitmap/CubicalTwoSphere.txt +``` + +* Creates a Cubical Complex from the Perseus style file `CubicalTwoSphere.txt`, +computes Persistence cohomology from it and writes the results in a persistence file `CubicalTwoSphere.txt_persistence`. + +## periodic_cubical_complex_persistence ## Same as above, but with periodic boundary conditions. -Example: +**Example** + +``` + periodic_cubical_complex_persistence data/bitmap/3d_torus.txt +``` -* Create a Periodical Cubical Complex from the Perseus style file `3d_torus.txt`, computes Persistence cohomology from it and writes the results in a persistence file `3d_torus.txt_persistence`: -`periodic_cubical_complex_persistence data/bitmap/3d_torus.txt` +* Creates a Periodical Cubical Complex from the Perseus style file `3d_torus.txt`, +computes Persistence cohomology from it and writes the results in a persistence file `3d_torus.txt_persistence`. diff --git a/src/Bottleneck_distance/utilities/README b/src/Bottleneck_distance/utilities/README index d9fdd252..04e1c4bd 100644 --- a/src/Bottleneck_distance/utilities/README +++ b/src/Bottleneck_distance/utilities/README @@ -1,10 +1,30 @@ -# Bottleneck_distance # +--- +layout: page +title: "Bottleneck distance" +meta_title: "bottleneckdistance" +subheadline: "" +teaser: "" +permalink: "/bottleneckdistance/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} + + + +## bottleneck_read_file_example ## -## `bottleneck_read_file_example` ## This program computes the Bottleneck distance between two persistence diagram files. -Usage: -`bottleneck_read_file_example []` +**Usage** + +``` + bottleneck_read_file_example [] +``` + where -`` and `` must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPers). -`` is an error bound on the bottleneck distance (set by default to the smallest positive double value). + +* `` and `` must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPers). +* `` is an error bound on the bottleneck distance (set by default to the smallest positive double value). diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index f2409087..474f0f0e 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -77,8 +77,8 @@ namespace cover_complex { * * \include Nerve_GIC/Nerve.txt * - * The program also writes a file SC.txt. The first three lines in this file are the location of the input point cloud - * and the function used to compute the cover. + * The program also writes a file ../../data/points/human_sc.txt. The first three lines in this file are the location + * of the input point cloud and the function used to compute the cover. * The fourth line contains the number of vertices nv and edges ne of the Nerve. * The next nv lines represent the vertices. Each line contains the vertex ID, * the number of data points it contains, and their average color function value. @@ -118,7 +118,7 @@ namespace cover_complex { * * the program outputs SC.off. Using e.g. * - * \code $> geomview SC.off + * \code $> geomview ../../data/points/human_sc.off * \endcode * * one can obtain the following visualization: diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index 58831bbf..ff95b913 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -934,7 +934,7 @@ class Cover_complex { } graphic << "}"; graphic.close(); - std::cout << ".dot file generated. It can be visualized with e.g. neato." << std::endl; + std::cout << mapp << " file generated. It can be visualized with e.g. neato." << std::endl; } public: // Create a .txt file that can be compiled with KeplerMapper. @@ -944,7 +944,7 @@ class Cover_complex { void write_info() { int num_simplices = simplices.size(); int num_edges = 0; - std::string mapp = point_cloud_name + "_sc.dot"; + std::string mapp = point_cloud_name + "_sc.txt"; std::ofstream graphic(mapp.c_str()); for (int i = 0; i < num_simplices; i++) @@ -970,7 +970,8 @@ class Cover_complex { if (cover_color[simplices[i][0]].first > mask && cover_color[simplices[i][1]].first > mask) graphic << name2id[simplices[i][0]] << " " << name2id[simplices[i][1]] << std::endl; graphic.close(); - std::cout << ".txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." + std::cout << mapp + << " generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox." << std::endl; } @@ -988,7 +989,7 @@ class Cover_complex { std::vector > edges, faces; int numsimplices = simplices.size(); - std::string mapp = point_cloud_name + "_sc.dot"; + std::string mapp = point_cloud_name + "_sc.off"; std::ofstream graphic(mapp.c_str()); graphic << "OFF" << std::endl; @@ -1016,7 +1017,7 @@ class Cover_complex { for (int i = 0; i < numfaces; i++) graphic << 3 << " " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; graphic.close(); - std::cout << ".off generated. It can be visualized with e.g. geomview." << std::endl; + std::cout << mapp << " generated. It can be visualized with e.g. geomview." << std::endl; } // ******************************************************************************************************************* diff --git a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py index d2897774..c811f610 100755 --- a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py +++ b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py @@ -3,6 +3,7 @@ import km import numpy as np from collections import defaultdict +import argparse """This file is part of the Gudhi Library. The Gudhi library (Geometric Understanding in Higher Dimensions) is a generic C++ @@ -30,43 +31,59 @@ __author__ = "Mathieu Carriere" __copyright__ = "Copyright (C) 2017 INRIA" __license__ = "GPL v3" -network = {} -mapper = km.KeplerMapper(verbose=0) -data = np.zeros((3,3)) -projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) - -f = open('SC.txt','r') -nodes = defaultdict(list) -links = defaultdict(list) -custom = defaultdict(list) - -dat = f.readline() -lens = f.readline() -color = f.readline(); -param = [float(i) for i in f.readline().split(" ")] - -nums = [int(i) for i in f.readline().split(" ")] -num_nodes = nums[0] -num_edges = nums[1] - -for i in range(0,num_nodes): - point = [float(j) for j in f.readline().split(" ")] - nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] - links[ str(int(point[0])) ] = [] - custom[ int(point[0]) ] = point[1] - -m = min([custom[i] for i in range(0,num_nodes)]) -M = max([custom[i] for i in range(0,num_nodes)]) - -for i in range(0,num_edges): - edge = [int(j) for j in f.readline().split(" ")] - links[ str(edge[0]) ].append( str(edge[1]) ) - links[ str(edge[1]) ].append( str(edge[0]) ) - -network["nodes"] = nodes -network["links"] = links -network["meta"] = lens - -mapper.visualize(network, color_function = color, path_html="SC.html", title=dat, -graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, -height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) +parser = argparse.ArgumentParser(description='Creates an html Keppler Mapper ' + 'file to visualize a SC.txt file.', + epilog='Example: ' + './KeplerMapperVisuFromTxtFile.py ' + '-f ../../data/points/human.off_sc.txt' + '- Constructs an human.off_sc.html file.') +parser.add_argument("-f", "--file", type=str, required=True) + +args = parser.parse_args() + +with open(args.file, 'r') as f: + network = {} + mapper = km.KeplerMapper(verbose=0) + data = np.zeros((3,3)) + projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) + + nodes = defaultdict(list) + links = defaultdict(list) + custom = defaultdict(list) + + dat = f.readline() + lens = f.readline() + color = f.readline(); + param = [float(i) for i in f.readline().split(" ")] + + nums = [int(i) for i in f.readline().split(" ")] + num_nodes = nums[0] + num_edges = nums[1] + + for i in range(0,num_nodes): + point = [float(j) for j in f.readline().split(" ")] + nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] + links[ str(int(point[0])) ] = [] + custom[ int(point[0]) ] = point[1] + + m = min([custom[i] for i in range(0,num_nodes)]) + M = max([custom[i] for i in range(0,num_nodes)]) + + for i in range(0,num_edges): + edge = [int(j) for j in f.readline().split(" ")] + links[ str(edge[0]) ].append( str(edge[1]) ) + links[ str(edge[1]) ].append( str(edge[0]) ) + + network["nodes"] = nodes + network["links"] = links + network["meta"] = lens + + html_output_filename = args.file.rsplit('.', 1)[0] + '.html' + mapper.visualize(network, color_function = color, path_html=html_output_filename, title=dat, + graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, + height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) + message = repr(html_output_filename) + " is generated. You can now use your favorite web browser to visualize it." + print(message) + + + f.close() diff --git a/src/Nerve_GIC/utilities/covercomplex.md b/src/Nerve_GIC/utilities/covercomplex.md new file mode 100644 index 00000000..692e44e7 --- /dev/null +++ b/src/Nerve_GIC/utilities/covercomplex.md @@ -0,0 +1,73 @@ +--- +layout: page +title: "Cover complex" +meta_title: "covercomplex" +subheadline: "" +teaser: "" +permalink: "/covercomplex/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} + + + +## Nerve ## +This program builds the Nerve of a point cloud sampled on an OFF file. +The cover C comes from the preimages of intervals covering a coordinate function, +which are then refined into their connected components using the triangulation of the .OFF file. + +The program also writes a file SC.txt. +The first three lines in this file are the location of the input point cloud and the function used to compute the cover. +The fourth line contains the number of vertices nv and edges ne of the Nerve. The next nv lines represent the vertices. +Each line contains the vertex ID, the number of data points it contains, and their average color function value. +Finally, the next ne lines represent the edges, characterized by the ID of their vertices. + +**Usage** + +`Nerve coordinate resolution gain [--v]` + +where + +* `coordinate` is the coordinate function to cover +* `resolution` is the number of the intervals +* `gain` is the gain for each interval +* `--v` is optional, it activates verbose mode. + +**Example** + +`Nerve ../../data/points/human.off 2 10 0.3` + +* Builds the Nerve of a point cloud sampled on a 3D human shape (human.off). +The cover C comes from the preimages of intervals (10 intervals with gain 0.3) covering the height function (coordinate 2). + +`python KeplerMapperVisuFromTxtFile.py -f ../../data/points/human.off_sc.txt` + +* Constructs `human.off_sc.html` file. You can now use your favorite web browser to visualize it. + +## VoronoiGIC ## + +This util builds the Graph Induced Complex (GIC) of a point cloud. +It subsamples *N* points in the point cloud, which act as seeds of a geodesic Voronoï diagram. +Each cell of the diagram is then an element of C. + +The program also writes a file `*_sc.off`, that is an OFF file that can be visualized with GeomView. + +**Usage** + +`VoroniGIC samples_number [--v]` + +where + +* `samples_number` is the number of samples to take from the point cloud +* `--v` is optional, it activates verbose mode. + +**Example** + +`VoroniGIC ../../data/points/human.off 700` + +* Builds the Voronoi Graph Induced Complex with 700 subsamples from `human.off` file. +`../../data/points/human_sc.off` can be visualized with GeomView. + diff --git a/src/Rips_complex/utilities/README b/src/Rips_complex/utilities/README index 4d20c806..44a37543 100644 --- a/src/Rips_complex/utilities/README +++ b/src/Rips_complex/utilities/README @@ -1,6 +1,20 @@ -# Rips_complex # - -## `rips_persistence` ## +--- +layout: page +title: "Rips complex" +meta_title: "ripscomplex" +subheadline: "" +teaser: "" +permalink: "/ripscomplex/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} + + + +## rips_persistence ## This program computes the persistent homology with coefficient field *Z/pZ* of a Rips complex defined on a set of input points. The output diagram contains one bar per line, written with the convention: `p dim birth death` @@ -8,6 +22,7 @@ This program computes the persistent homology with coefficient field *Z/pZ* of a where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p` must be a prime number). **Usage** + `rips_persistence [options] ` **Allowed options** @@ -22,53 +37,25 @@ where `dim` is the dimension of the homological feature, `birth` and `death` are Beware: this program may use a lot of RAM and take a lot of time if `max-edge-length` is set to a large value. **Example 1 with Z/2Z coefficients** -`rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 2` -outputs: -``` -2 0 0 inf -2 1 0.0983494 inf -2 1 0.104347 inf -2 2 0.138335 inf -``` +`rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 2` **Example 2 with Z/3Z coefficients** -rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 3 - -outputs: -``` -3 0 0 inf -3 1 0.0983494 inf -3 1 0.104347 inf -3 2 0.138335 inf -``` +`rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 3` +## rips_distance_matrix_persistence ## +Same as `rips_persistence` but taking a distance matrix as input. -## `rips_distance_matrix_persistence` ## -Same as `rips_persistence` but taking a distance matrix as input. - **Usage** -`rips_persistence [options] ` -where + +`rips_persistence [options] ` + +where `` is the path to the file containing a distance matrix. Can be square or lower triangular matrix. Separator is ';'. **Example** -`rips_distance_matrix_persistence data/distance_matrix/full_square_distance_matrix.csv -r 15 -d 3 -p 3 -m 0` -outputs: -``` -The complex contains 46 simplices - and has dimension 3 -3 0 0 inf -3 0 0 8.94427 -3 0 0 7.28011 -3 0 0 6.08276 -3 0 0 5.83095 -3 0 0 5.38516 -3 0 0 5 -3 1 11 12.0416 -3 1 6.32456 6.7082 -``` +`rips_distance_matrix_persistence data/distance_matrix/full_square_distance_matrix.csv -r 15 -d 3 -p 3 -m 0` diff --git a/src/Witness_complex/utilities/README b/src/Witness_complex/utilities/README index 1141033e..5cdb1f88 100644 --- a/src/Witness_complex/utilities/README +++ b/src/Witness_complex/utilities/README @@ -1,18 +1,34 @@ -# Witness_complex # +--- +layout: page +title: "Witness complex" +meta_title: "witnesscomplex" +subheadline: "" +teaser: "" +permalink: "/witnesscomplex/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} + For more details about the witness complex, please read the [user manual of the package](http://gudhi.gforge.inria.fr/doc/latest/group__witness__complex.html). -## `weak_witness_persistence` ## -This program computes the persistent homology with coefficient field *Z/pZ* of a Weak witness complex defined on a set of input points. The output diagram contains one bar per line, written with the convention: +## weak_witness_persistence ## +This program computes the persistent homology with coefficient field *Z/pZ* of a Weak witness complex defined on a set of input points. +The output diagram contains one bar per line, written with the convention: `p dim birth death` -where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients. +where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, +and `p` is the characteristic of the field *Z/pZ* used for homology coefficients. + +**Usage** -*Usage* `weak_witness_persistence [options] ` -*Allowed options* +**Allowed options** * `-h [ --help ]` Produce help message * `-l [ --landmarks ]` Number of landmarks to choose from the point cloud. @@ -22,33 +38,28 @@ where `dim` is the dimension of the homological feature, `birth` and `death` are * `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. * `-d [ --cpx-dimension ]` (default = 2147483647) Maximal dimension of the weak witness complex we want to compute. -*Example* -`weak_witness_persistence data/points/tore3D_1307.off -l 20 -a 0.5 -m 0.006` +**Example** -outputs: -``` -Successfully read 1307 points. -Ambient dimension is 3. -The complex contains 732 simplices and has dimension 8 -11 0 0 inf -11 1 0 inf -11 2 0.0275251 0.0534586 -11 1 0 0.0239952 -``` +`weak_witness_persistence data/points/tore3D_1307.off -l 20 -a 0.5 -m 0.006` N.B.: output is random as the 20 landmarks are chosen randomly. -## `strong_witness_persistence` ## -This program computes the persistent homology with coefficient field *Z/pZ* of a Strong witness complex defined on a set of input points. The output diagram contains one bar per line, written with the convention: + +## strong_witness_persistence ## + +This program computes the persistent homology with coefficient field *Z/pZ* of a Strong witness complex defined on a set of input points. +The output diagram contains one bar per line, written with the convention: `p dim birth death` -where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients. +where `dim` is the dimension of the homological feature, `birth` and `death` are respectively the birth and death of the feature, +and `p` is the characteristic of the field *Z/pZ* used for homology coefficients. + +**Usage** -*Usage* `strong_witness_persistence [options] ` -*Allowed options* +**Allowed options** * `-h [ --help ]` Produce help message * `-l [ --landmarks ]` Number of landmarks to choose from the point cloud. @@ -58,17 +69,8 @@ where `dim` is the dimension of the homological feature, `birth` and `death` are * `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. * `-d [ --cpx-dimension ]` (default = 2147483647) Maximal dimension of the weak witness complex we want to compute. -*Example* -`strong_witness_persistence data/points/tore3D_1307.off -l 20 -a 0.5 -m 0.06` +**Example** -outputs: -``` -Successfully read 1307 points. -Ambient dimension is 3. -The complex contains 1836 simplices and has dimension 8 -11 0 0 inf -11 1 0.00674748 inf -11 2 0.0937751 0.235354 -``` +`strong_witness_persistence data/points/tore3D_1307.off -l 20 -a 0.5 -m 0.06` N.B.: output is random as the 20 landmarks are chosen randomly. diff --git a/src/common/utilities/README b/src/common/utilities/README index 18fa8cc4..f39c63b8 100644 --- a/src/common/utilities/README +++ b/src/common/utilities/README @@ -1,19 +1,43 @@ -# Pointset generator # +--- +layout: page +title: "Pointset generator" +meta_title: "pointsetgenerator" +subheadline: "" +teaser: "" +permalink: "/pointsetgenerator/" +--- +{::comment} +These flags above are here for web site generation, please let them. +cf. https://gitlab.inria.fr/GUDHI/website +Must be in conformity with _data/navigation.yml +{:/comment} -## `off_file_from_shape_generator` ## +## off_file_from_shape_generator ## Generates a pointset and save it in an OFF file. Command-line is: -`off_file_from_shape_generator on|in sphere|cube|curve|torus|klein ...` + +``` +off_file_from_shape_generator on|in sphere|cube|curve|torus|klein ... +``` Warning: "on cube" generator is not available! -Examples: +**Examples** + +``` +off_file_from_shape_generator on sphere onSphere.off 1000 3 15.2 +``` + +* Generates an onSphere.off file with 1000 points randomized on a sphere of dimension 3 and radius 15.2. + +``` +off_file_from_shape_generator in sphere inSphere.off 100 2 +``` + +* Generates an inSphere.off file with 100 points randomized in a sphere of dimension 2 (circle) and radius 1.0 (default). -* Generate an onSphere.off file with 1000 points randomized on a sphere of dimension 3 and radius 15.2: -`off_file_from_shape_generator on sphere onSphere.off 1000 3 15.2` - -* Generate an inSphere.off file with 100 points randomized in a sphere of dimension 2 (circle) and radius 1.0 (default): -`off_file_from_shape_generator in sphere inSphere.off 100 2` +``` +off_file_from_shape_generator in cube inCube.off 10000 3 5.8 +``` -* Generates a inCube.off file with 10000 points randomized in a cube of dimension 3 and side 5.8: -`off_file_from_shape_generator in cube inCube.off 10000 3 5.8` +* Generates a inCube.off file with 10000 points randomized in a cube of dimension 3 and side 5.8. -- cgit v1.2.3 From b92ea601f15a239957ec6beba78ee2deee3d32d6 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 30 Jan 2018 08:54:00 +0000 Subject: Fix --v to -v for Cover complex git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3182 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 46e36af1a3e9aae8f1b12d2ee7fc749eb531f505 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 8 ++++---- src/Nerve_GIC/example/CoordGIC.cpp | 4 ++-- src/Nerve_GIC/example/FuncGIC.cpp | 4 ++-- src/Nerve_GIC/utilities/Nerve.cpp | 4 ++-- src/Nerve_GIC/utilities/VoronoiGIC.cpp | 4 ++-- src/Nerve_GIC/utilities/covercomplex.md | 8 ++++---- .../doc/Persistence_representations_doc.h | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) (limited to 'src/Nerve_GIC/doc/Intro_graph_induced_complex.h') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 474f0f0e..2b648425 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -70,7 +70,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./Nerve ../../data/points/human.off 2 10 0.3 --v + * \code $> ./Nerve ../../data/points/human.off 2 10 0.3 -v * \endcode * * the program output is: @@ -113,7 +113,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./VoronoiGIC ../../data/points/human.off 700 --v + * \code $> ./VoronoiGIC ../../data/points/human.off 700 -v * \endcode * * the program outputs SC.off. Using e.g. @@ -146,7 +146,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./CoordGIC ../../data/points/KleinBottle5D.off 0 --v + * \code $> ./CoordGIC ../../data/points/KleinBottle5D.off 0 -v * \endcode * * the program outputs SC.dot. Using e.g. @@ -169,7 +169,7 @@ namespace cover_complex { * * When launching: * - * \code $> ./FuncGIC ../../data/points/COIL_database/lucky_cat.off ../../data/points/COIL_database/lucky_cat_PCA1 --v + * \code $> ./FuncGIC ../../data/points/COIL_database/lucky_cat.off ../../data/points/COIL_database/lucky_cat_PCA1 -v * \endcode * * the program outputs again SC.dot which gives the following visualization after using neato: diff --git a/src/Nerve_GIC/example/CoordGIC.cpp b/src/Nerve_GIC/example/CoordGIC.cpp index c03fcbb3..c92cf235 100644 --- a/src/Nerve_GIC/example/CoordGIC.cpp +++ b/src/Nerve_GIC/example/CoordGIC.cpp @@ -27,8 +27,8 @@ void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 --v \n"; + std::cerr << "Usage: " << progName << " filename.off coordinate [-v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 -v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/example/FuncGIC.cpp b/src/Nerve_GIC/example/FuncGIC.cpp index 3762db4e..cb0f0d63 100644 --- a/src/Nerve_GIC/example/FuncGIC.cpp +++ b/src/Nerve_GIC/example/FuncGIC.cpp @@ -27,9 +27,9 @@ void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off function [--v] \n"; + std::cerr << "Usage: " << progName << " filename.off function [-v] \n"; std::cerr << " i.e.: " << progName << " ../../data/points/COIL_database/lucky_cat.off " - "../../data/points/COIL_database/lucky_cat_PCA1 --v \n"; + "../../data/points/COIL_database/lucky_cat_PCA1 -v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/utilities/Nerve.cpp b/src/Nerve_GIC/utilities/Nerve.cpp index 6abdedc7..aefc3874 100644 --- a/src/Nerve_GIC/utilities/Nerve.cpp +++ b/src/Nerve_GIC/utilities/Nerve.cpp @@ -27,8 +27,8 @@ void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; + std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [-v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 -v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/utilities/VoronoiGIC.cpp b/src/Nerve_GIC/utilities/VoronoiGIC.cpp index 32431cc2..54bb871e 100644 --- a/src/Nerve_GIC/utilities/VoronoiGIC.cpp +++ b/src/Nerve_GIC/utilities/VoronoiGIC.cpp @@ -27,8 +27,8 @@ void usage(int nbArgs, char *const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; + std::cerr << "Usage: " << progName << " filename.off N [-v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 -v \n"; exit(-1); // ----- >> } diff --git a/src/Nerve_GIC/utilities/covercomplex.md b/src/Nerve_GIC/utilities/covercomplex.md index 692e44e7..41489b66 100644 --- a/src/Nerve_GIC/utilities/covercomplex.md +++ b/src/Nerve_GIC/utilities/covercomplex.md @@ -27,14 +27,14 @@ Finally, the next ne lines represent the edges, characterized by the ID of their **Usage** -`Nerve coordinate resolution gain [--v]` +`Nerve coordinate resolution gain [-v]` where * `coordinate` is the coordinate function to cover * `resolution` is the number of the intervals * `gain` is the gain for each interval -* `--v` is optional, it activates verbose mode. +* `-v` is optional, it activates verbose mode. **Example** @@ -57,12 +57,12 @@ The program also writes a file `*_sc.off`, that is an OFF file that can be visua **Usage** -`VoroniGIC samples_number [--v]` +`VoroniGIC samples_number [-v]` where * `samples_number` is the number of samples to take from the point cloud -* `--v` is optional, it activates verbose mode. +* `-v` is optional, it activates verbose mode. **Example** diff --git a/src/Persistence_representations/doc/Persistence_representations_doc.h b/src/Persistence_representations/doc/Persistence_representations_doc.h index d781211a..38bd3a21 100644 --- a/src/Persistence_representations/doc/Persistence_representations_doc.h +++ b/src/Persistence_representations/doc/Persistence_representations_doc.h @@ -67,7 +67,7 @@ namespace Persistence_representations { \li Concept of representation of persistence that allows computations of distances. \li Concept of representation of persistence that allows computations of scalar products. \li Concept of representation of persistence that allows vectorization. - \li Concept of representation of persistence that allows computations of real--valued characteristics of objects. + \li Concept of representation of persistence that allows computations of real-valued characteristics of objects. At the moment an implementation of the following representations of persistence are available (further details of -- cgit v1.2.3