From 048d38d18723eadace96d369fbb36f3c09225207 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 10 Jul 2022 03:10:01 +0200 Subject: [PATCH 001/943] interpolated mu i measures (yet to check ) I will replace ExactPredInexactConstructs with a geometry traits template next ISA --- .../interpolated_curvature_measures.h | 88 +++++++++++++++++++ .../Triangulation_2/triangulation_prog1.cpp | 63 ++++++++----- 2 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h new file mode 100644 index 000000000000..e4f67d03e17a --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h @@ -0,0 +1,88 @@ +#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CURVATURE_MEASURES_H +#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CURVATURE_MEASURES_H +#endif + +#include +#include +#include +#include + +namespace CGAL { + +namespace Polygon_mesh_processing { + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; + +// enum to specify which measure is computed +enum MEASURE_INDEX { + MU0_AREA_MEASURE, + MU1_MEAN_CURVATURE_MEASURE, + MU2_GAUSSIAN_CURVATURE_MEASURE +}; + +Epic::FT interpolated_mu_i_triangle(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, + const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, MEASURE_INDEX mu_i) +{ + Epic::Vector_3 um; + switch (mu_i) + { + case MU0_AREA_MEASURE: + + um = (u0 + u1 + u2) / 3.0; + + return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); + + case MU1_MEAN_CURVATURE_MEASURE: + + um = (u0 + u1 + u2) / 3.0; + + return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) + + CGAL::cross_product(u0 - u2, x1) + + CGAL::cross_product(u1 - u0, x2)); + + case MU2_GAUSSIAN_CURVATURE_MEASURE: + + return 0.5 * u0 * CGAL::cross_product(u1, u2); + + default: return 0; + } +} + +Epic::FT interpolated_mu_i_face(std::vector& x, std::vector& u, MEASURE_INDEX mu_i) +{ + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + if (n == 3) + return interpolated_mu_i_triangle(x[0], x[1], x[2], + u[0], u[1], u[2], mu_i); + + /// If Quad measure formulas (Bilinear Interpolation) proved to be better, + /// they will be implemented and called here + //else if(n == 4) + // return interpolated_mu0_quad(x[0], x[1], x[2], x[3] + // u[0], u[1], u[2], u[3]); + else { + Epic::FT mu0 = 0; + + // getting barycenter of points + Epic::Vector_3 xm = std::accumulate(x.begin(), x.end(), Epic::Vector_3(0, 0, 0)); + xm /= n; + + // getting unit average normal of points + Epic::Vector_3 um = std::accumulate(u.begin(), u.end(), Epic::Vector_3(0,0,0)); + um /= sqrt(um * um); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + mu0 += interpolated_mu_i_triangle(x[i], x[(i + 1) % n], xm, + u[i], u[(i + 1) % n], um, mu_i); + } + return mu0; + } +} + +} +} diff --git a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp index e68f7973163d..e52400cd5d0c 100644 --- a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp +++ b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp @@ -1,27 +1,50 @@ -#include - #include -#include -typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +#include +#include +#include +#include + + +#include +#include +#include +#include +#include + +#define N 4 +namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Triangulation_2 Triangulation; -typedef Triangulation::Vertex_circulator Vertex_circulator; -typedef Triangulation::Point Point; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; -int main() { - std::ifstream in("data/triangulation_prog1.cin"); - std::istream_iterator begin(in); - std::istream_iterator end; +int main(int argc, char* argv[]) +{ + srand(time(NULL)); - Triangulation t; - t.insert(begin, end); + std::vector X(N); + std::vector U(N); + + for (int i = 0; i < N; i++) { + X[i] = { rand() , rand() , rand() }; + U[i] = { rand() , rand() , rand() }; + U[i] = U[i] / sqrt(U[i] * U[i]); + } + std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU0_AREA_MEASURE) << std::endl; + std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU1_MEAN_CURVATURE_MEASURE) << std::endl; + std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE) << std::endl; + + /*srand(time(NULL)); + Epic::Vector_3 x, y; + Epic::FT d = 0; + + Epic::Vector_3 z; + std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); + for (int i = 0; i < N; i++) + { + x * y; + } + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + std::cout << std::chrono::duration_cast(end - begin).count() << std::endl;*/ - Vertex_circulator vc = t.incident_vertices(t.infinite_vertex()), - done(vc); - if (vc != nullptr) { - do { std::cout << vc->point() << std::endl; - }while(++vc != done); - } - return 0; } + From e63de4f48ae1772992c4c64f158c8c353984e4b1 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 13 Jul 2022 07:59:21 +0200 Subject: [PATCH 002/943] implemented computing mu_i over all faces it works fine, still need to handle if vnm is not given --- ...nterpolated_corrected_curvature_measures.h | 201 ++++++++++++++++++ .../interpolated_curvature_measures.h | 88 -------- .../Triangulation_2/triangulation_prog1.cpp | 76 ++++++- 3 files changed, 267 insertions(+), 98 deletions(-) create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h delete mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h new file mode 100644 index 000000000000..1ebf5fe4dfef --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -0,0 +1,201 @@ +#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#endif + +#include +#include + +#include +#include +#include +#include +#include + + +namespace CGAL { + + namespace Polygon_mesh_processing { + + typedef Exact_predicates_inexact_constructions_kernel Epic; + + // enum to specify which measure is computed + enum Measure_index { + MU0_AREA_MEASURE, + MU1_MEAN_CURVATURE_MEASURE, + MU2_GAUSSIAN_CURVATURE_MEASURE + }; + + Epic::FT interpolated_mu_i_triangle(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, + const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, const Measure_index mu_i) + { + Epic::Vector_3 um; + switch (mu_i) + { + case MU0_AREA_MEASURE: + + um = (u0 + u1 + u2) / 3.0; + + return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); + + case MU1_MEAN_CURVATURE_MEASURE: + + um = (u0 + u1 + u2) / 3.0; + + return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) + + CGAL::cross_product(u0 - u2, x1) + + CGAL::cross_product(u1 - u0, x2)); + + case MU2_GAUSSIAN_CURVATURE_MEASURE: + + return 0.5 * u0 * CGAL::cross_product(u1, u2); + + default: return 0; + } + } + + Epic::FT interpolated_mu_i_quad(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, const Epic::Vector_3 x3, + const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, const Epic::Vector_3 u3, const Measure_index mu_i) + { + /// x0 _ x1 + /// x2 |_| x3 + + switch (mu_i) + { + case MU0_AREA_MEASURE: + + return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(x1 - x0, x3 - x1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(x3 - x2, x2 - x0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1)); + + case MU1_MEAN_CURVATURE_MEASURE: + { + const Epic::Vector_3 u03 = u3 - u0; + const Epic::Vector_3 u12 = u2 - u1; + const Epic::Vector_3 x0_cross = CGAL::cross_product(u12, x0); + const Epic::Vector_3 x1_cross = -CGAL::cross_product(u03, x1); + const Epic::Vector_3 x2_cross = CGAL::cross_product(u03, x2); + const Epic::Vector_3 x3_cross = -CGAL::cross_product(u12, x3); + + + return (1 / 12.0) * (u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) + + u1 * (CGAL::cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - CGAL::cross_product((u0 + u2), x3)) + + u2 * (CGAL::cross_product(-(u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) + + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross)); + } + case MU2_GAUSSIAN_CURVATURE_MEASURE: + + return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(u1 - u0, u3 - u1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(u3 - u2, u2 - u0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1)); + + default: return 0; + } + } + + Epic::FT interpolated_mu_i_face(const std::vector& x, const std::vector& u, const Measure_index mu_i) + { + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + // Triangle: use triangle formulas + if (n == 3) + return interpolated_mu_i_triangle(x[0], x[1], x[2], + u[0], u[1], u[2], mu_i); + + // Quad: use bilinear interpolation formulas + else if (n == 4) + /// x[0] _ x[1] ---> x0 _ x1 (reason for changing order) + /// x[3] |_| x[2] ---> x2 |_| x3 + return interpolated_mu_i_quad(x[0], x[1], x[3], x[2], + u[0], u[1], u[3], u[2], mu_i); + + // N-gon: split into n triangles by barycenter and use triangle formulas for each + else { + Epic::FT mu0 = 0; + + // getting barycenter of points + Epic::Vector_3 xm = std::accumulate(x.begin(), x.end(), Epic::Vector_3(0, 0, 0)); + xm /= n; + + // getting unit average normal of points + Epic::Vector_3 um = std::accumulate(u.begin(), u.end(), Epic::Vector_3(0, 0, 0)); + um /= sqrt(um * um); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + mu0 += interpolated_mu_i_triangle(x[i], x[(i + 1) % n], xm, + u[i], u[(i + 1) % n], um, mu_i); + } + return mu0; + } + } + + + /// TODO: + /// 1- Handle if VNM is not given + /// 2- use GT instead of Epic + + template + std::vector + interpolated_corrected_measure_i( + const PolygonMesh& pmesh, + const Measure_index mu_i, + VertexNormalMap vnm, + const NamedParameters& np = parameters::default_values()) + { + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef boost::graph_traits::face_descriptor face_descriptor; + typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; + + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + //std::unordered_map vnm_init; + + //boost::associative_property_map + // ::vertex_descriptor, Epic::Vector_3>> vnm(vnm_init); + + ////if (!vnm) + // { + // compute_vertex_normals(pmesh, vnm, np); + //} + + std::vector mu_i_map; + + + for (face_descriptor f : faces(pmesh)) + { + halfedge_descriptor h_start = pmesh.halfedge(f); + halfedge_descriptor h_iter = h_start; + + std::vector x; + std::vector u; + + // looping over vertices in face + do { + vertex_descriptor v = source(h_iter, pmesh); + Epic::Point_3 p = get(vpm, v); + x.push_back(Epic::Vector_3(p.x(),p.y(),p.z())); + u.push_back(get(vnm, v)); + h_iter = next(h_iter, pmesh); + } while (h_iter != h_start); + + + mu_i_map.push_back(interpolated_mu_i_face(x, u, mu_i)); + } + return mu_i_map; + } + + } +} + diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h deleted file mode 100644 index e4f67d03e17a..000000000000 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_curvature_measures.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CURVATURE_MEASURES_H -#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CURVATURE_MEASURES_H -#endif - -#include -#include -#include -#include - -namespace CGAL { - -namespace Polygon_mesh_processing { - -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; - -// enum to specify which measure is computed -enum MEASURE_INDEX { - MU0_AREA_MEASURE, - MU1_MEAN_CURVATURE_MEASURE, - MU2_GAUSSIAN_CURVATURE_MEASURE -}; - -Epic::FT interpolated_mu_i_triangle(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, - const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, MEASURE_INDEX mu_i) -{ - Epic::Vector_3 um; - switch (mu_i) - { - case MU0_AREA_MEASURE: - - um = (u0 + u1 + u2) / 3.0; - - return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); - - case MU1_MEAN_CURVATURE_MEASURE: - - um = (u0 + u1 + u2) / 3.0; - - return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) - + CGAL::cross_product(u0 - u2, x1) - + CGAL::cross_product(u1 - u0, x2)); - - case MU2_GAUSSIAN_CURVATURE_MEASURE: - - return 0.5 * u0 * CGAL::cross_product(u1, u2); - - default: return 0; - } -} - -Epic::FT interpolated_mu_i_face(std::vector& x, std::vector& u, MEASURE_INDEX mu_i) -{ - std::size_t n = x.size(); - CGAL_precondition(u.size() == n); - CGAL_precondition(n >= 3); - - if (n == 3) - return interpolated_mu_i_triangle(x[0], x[1], x[2], - u[0], u[1], u[2], mu_i); - - /// If Quad measure formulas (Bilinear Interpolation) proved to be better, - /// they will be implemented and called here - //else if(n == 4) - // return interpolated_mu0_quad(x[0], x[1], x[2], x[3] - // u[0], u[1], u[2], u[3]); - else { - Epic::FT mu0 = 0; - - // getting barycenter of points - Epic::Vector_3 xm = std::accumulate(x.begin(), x.end(), Epic::Vector_3(0, 0, 0)); - xm /= n; - - // getting unit average normal of points - Epic::Vector_3 um = std::accumulate(u.begin(), u.end(), Epic::Vector_3(0,0,0)); - um /= sqrt(um * um); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu0 += interpolated_mu_i_triangle(x[i], x[(i + 1) % n], xm, - u[i], u[(i + 1) % n], um, mu_i); - } - return mu0; - } -} - -} -} diff --git a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp index e52400cd5d0c..2e625d722cc1 100644 --- a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp +++ b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp @@ -1,25 +1,79 @@ #include +#include +#include +#include +#include -#include -#include -#include -#include +#include - -#include -#include +#include +#include #include #include #include +#include -#define N 4 namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; +typedef CGAL::Polyhedron_3 Polyhedron; +typedef CGAL::Surface_mesh Mesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + + int main(int argc, char* argv[]) { - srand(time(NULL)); + Mesh g1; + if (!PMP::IO::read_polygon_mesh("small_bunny.obj", g1) || !CGAL::is_triangle_mesh(g1)) + { + std::cerr << "Invalid input." << std::endl; + return 1; + } + + //int n1 = g1.size_of_facets(); + + std::unordered_map vnm_vec; + boost::associative_property_map< std::unordered_map> vnm(vnm_vec); + + PMP::compute_vertex_normals(g1, vnm); + + + + std::vector mu0_map, mu1_map, mu2_map; + + mu0_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU0_AREA_MEASURE, vnm); + mu1_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, vnm); + mu2_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, vnm); + + int n = g1.faces().size(); + + for (int i = 0; i < n; i++) + { + std::cout << mu0_map[i] << "\n"; + } + + std::cout << "\n"; + + for (int i = 0; i < n; i++) + { + std::cout << mu1_map[i] << "\n"; + } + + std::cout << "\n"; + + for (int i = 0; i < n; i++) + { + std::cout << mu2_map[i] << "\n"; + } + + + + + /*srand(time(NULL)); + + CGAL::GetGeomTraits GT; std::vector X(N); std::vector U(N); @@ -29,9 +83,11 @@ int main(int argc, char* argv[]) U[i] = { rand() , rand() , rand() }; U[i] = U[i] / sqrt(U[i] * U[i]); } + + std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU0_AREA_MEASURE) << std::endl; std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU1_MEAN_CURVATURE_MEASURE) << std::endl; - std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE) << std::endl; + std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE) << std::endl;*/ /*srand(time(NULL)); Epic::Vector_3 x, y; From 2eeb88ac96cb49755b487cb01a1bfc3fc8f0f1fb Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 15 Jul 2022 13:18:56 +0200 Subject: [PATCH 003/943] moved my main program to a new example file in PMP --- .../Polygon_mesh_processing/CMakeLists.txt | 12 +- .../interpolated_corrected_curvatures.cpp | 75 +++++++++++ .../Triangulation_2/triangulation_prog1.cpp | 120 +++--------------- 3 files changed, 106 insertions(+), 101 deletions(-) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index baa4d41677ac..d6f4e273516f 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -5,11 +5,13 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polygon_mesh_processing_Examples) # CGAL and its components -find_package(CGAL REQUIRED) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) # Boost and its components find_package(Boost REQUIRED) + + if(NOT Boost_FOUND) message( @@ -100,6 +102,14 @@ create_single_source_cgal_program("orientation_pipeline_example.cpp") #create_single_source_cgal_program( "snapping_example.cpp") create_single_source_cgal_program("match_faces.cpp") create_single_source_cgal_program("cc_compatible_orientations.cpp") +create_single_source_cgal_program("interpolated_corrected_curvatures.cpp") + +if(CGAL_Qt5_FOUND) + + #link it with the required CGAL libraries + target_link_libraries(interpolated_corrected_curvatures PUBLIC CGAL::CGAL_Basic_viewer) + +endif() if(OpenMesh_FOUND) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp new file mode 100644 index 000000000000..f45bec68a03b --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; +typedef CGAL::Polyhedron_3 Polyhedron; +typedef CGAL::Surface_mesh Mesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + + +int main(int argc, char* argv[]) +{ + const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("small_bunny.obj"); + + Mesh g1; + if(!CGAL::IO::read_polygon_mesh(filename, g1)) + { + std::cerr << "Invalid input file." << std::endl; + return EXIT_FAILURE; + } + std::unordered_map vnm_vec; + boost::associative_property_map< std::unordered_map> vnm(vnm_vec); + + PMP::compute_vertex_normals(g1, vnm); + + + std::vector mu0_map, mu1_map, mu2_map; + + mu0_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + mu1_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + mu2_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + + int n = g1.faces().size(); + + for (int i = 0; i < n; i++) + { + std::cout << mu0_map[i] << "\n"; + } + + std::cout << "\n"; + + for (int i = 0; i < n; i++) + { + std::cout << mu1_map[i] << "\n"; + } + + std::cout << "\n"; + + for (int i = 0; i < n; i++) + { + std::cout << mu2_map[i] << "\n"; + } + + + CGAL::draw(g1); + + return EXIT_SUCCESS; +} diff --git a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp index 2e625d722cc1..86b2c23cb481 100644 --- a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp +++ b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp @@ -1,106 +1,26 @@ -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace PMP = CGAL::Polygon_mesh_processing; - -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; -typedef CGAL::Polyhedron_3 Polyhedron; -typedef CGAL::Surface_mesh Mesh; -typedef boost::graph_traits::face_descriptor face_descriptor; -typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - - - -int main(int argc, char* argv[]) -{ - Mesh g1; - if (!PMP::IO::read_polygon_mesh("small_bunny.obj", g1) || !CGAL::is_triangle_mesh(g1)) - { - std::cerr << "Invalid input." << std::endl; - return 1; - } - - //int n1 = g1.size_of_facets(); - - std::unordered_map vnm_vec; - boost::associative_property_map< std::unordered_map> vnm(vnm_vec); - - PMP::compute_vertex_normals(g1, vnm); - - - - std::vector mu0_map, mu1_map, mu2_map; - - mu0_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU0_AREA_MEASURE, vnm); - mu1_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, vnm); - mu2_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, vnm); +#include - int n = g1.faces().size(); - - for (int i = 0; i < n; i++) - { - std::cout << mu0_map[i] << "\n"; - } - - std::cout << "\n"; - - for (int i = 0; i < n; i++) - { - std::cout << mu1_map[i] << "\n"; - } - - std::cout << "\n"; - - for (int i = 0; i < n; i++) - { - std::cout << mu2_map[i] << "\n"; - } - - - - - /*srand(time(NULL)); - - CGAL::GetGeomTraits GT; - - std::vector X(N); - std::vector U(N); - - for (int i = 0; i < N; i++) { - X[i] = { rand() , rand() , rand() }; - U[i] = { rand() , rand() , rand() }; - U[i] = U[i] / sqrt(U[i] * U[i]); - } - +#include +#include - std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU0_AREA_MEASURE) << std::endl; - std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU1_MEAN_CURVATURE_MEASURE) << std::endl; - std::cout << PMP::interpolated_mu_i_face(X, U, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE) << std::endl;*/ +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; - /*srand(time(NULL)); - Epic::Vector_3 x, y; - Epic::FT d = 0; +typedef CGAL::Triangulation_2 Triangulation; +typedef Triangulation::Vertex_circulator Vertex_circulator; +typedef Triangulation::Point Point; - Epic::Vector_3 z; - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - for (int i = 0; i < N; i++) - { - x * y; - } - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - std::cout << std::chrono::duration_cast(end - begin).count() << std::endl;*/ +int main() { + std::ifstream in("data/triangulation_prog1.cin"); + std::istream_iterator begin(in); + std::istream_iterator end; -} + Triangulation t; + t.insert(begin, end); + Vertex_circulator vc = t.incident_vertices(t.infinite_vertex()), + done(vc); + if (vc != nullptr) { + do { std::cout << vc->point() << std::endl; + }while(++vc != done); + } + return 0; \ No newline at end of file From 5af7795d9450ed2ff27e954b23cf65cfb3524cf5 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 15 Jul 2022 16:47:44 +0200 Subject: [PATCH 004/943] typo fix --- .../examples/Triangulation_2/triangulation_prog1.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp index 86b2c23cb481..b212837b4ee2 100644 --- a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp +++ b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp @@ -23,4 +23,5 @@ int main() { do { std::cout << vc->point() << std::endl; }while(++vc != done); } - return 0; \ No newline at end of file + return 0; +} \ No newline at end of file From 8c943fd433b4d3ce1390aa4802847a6a851d584c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 15 Jul 2022 17:23:13 +0200 Subject: [PATCH 005/943] typo fix --- .../examples/Triangulation_2/triangulation_prog1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp index b212837b4ee2..e68f7973163d 100644 --- a/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp +++ b/Triangulation_2/examples/Triangulation_2/triangulation_prog1.cpp @@ -24,4 +24,4 @@ int main() { }while(++vc != done); } return 0; -} \ No newline at end of file +} From 4b0577a2cff9d47e99577701eae6c3e085cc14c4 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 17 Jul 2022 18:46:04 +0200 Subject: [PATCH 006/943] added doc (yet to build), used generic GT instead of Epic, made VNM a named parameter (WIP) --- .../PackageDescription.txt | 4 + .../doc/Polygon_mesh_processing/examples.txt | 1 + .../interpolated_corrected_curvatures.cpp | 6 +- ...nterpolated_corrected_curvature_measures.h | 422 +++++++++++------- 4 files changed, 271 insertions(+), 162 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 34d2f83f08e2..9f6d7ffd4736 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -16,6 +16,10 @@ /// Functions to triangulate faces, and to refine and fair regions of a polygon mesh. /// \ingroup PkgPolygonMeshProcessingRef +/// \defgroup PMP_corrected_curvatures_grp Corrected Curvature Computation +/// Functions to compute the corrected curvatures of a polygon mesh. +/// \ingroup PkgPolygonMeshProcessingRef + /// \defgroup PMP_normal_grp Normal Computation /// Functions to compute unit normals for individual/all vertices or faces. /// \ingroup PkgPolygonMeshProcessingRef diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 3ce5384c81ce..0317812aa443 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -19,6 +19,7 @@ \example Polygon_mesh_processing/refine_fair_example.cpp \example Polygon_mesh_processing/mesh_slicer_example.cpp \example Polygon_mesh_processing/isotropic_remeshing_example.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index f45bec68a03b..c117e3f817fe 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -43,9 +43,9 @@ int main(int argc, char* argv[]) std::vector mu0_map, mu1_map, mu2_map; - mu0_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - mu1_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - mu2_map = PMP::interpolated_corrected_measure_i(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + mu0_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + mu1_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + mu2_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); int n = g1.faces().size(); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 1ebf5fe4dfef..df5197b2f005 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -2,7 +2,6 @@ #define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H #endif -#include #include #include @@ -14,188 +13,293 @@ namespace CGAL { - namespace Polygon_mesh_processing { - - typedef Exact_predicates_inexact_constructions_kernel Epic; - - // enum to specify which measure is computed - enum Measure_index { - MU0_AREA_MEASURE, - MU1_MEAN_CURVATURE_MEASURE, - MU2_GAUSSIAN_CURVATURE_MEASURE - }; - - Epic::FT interpolated_mu_i_triangle(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, - const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, const Measure_index mu_i) - { - Epic::Vector_3 um; - switch (mu_i) - { - case MU0_AREA_MEASURE: - - um = (u0 + u1 + u2) / 3.0; +namespace Polygon_mesh_processing { + +// enum to specify which measure is computed +enum Measure_index { + MU0_AREA_MEASURE, + MU1_MEAN_CURVATURE_MEASURE, + MU2_GAUSSIAN_CURVATURE_MEASURE +}; + +/** +* \ingroup PMP_corrected_curvatures_grp +* +* computes the interpolated corrected measure of specific triangle. +* +* @tparam GT is the geometric traits class. +* +* @param x0 is the position of vertex #0. +* @param x1 is the position of vertex #1. +* @param x2 is the position of vertex #2. +* @param u0 is the normal vector of vertex #0. +* @param u1 is the normal vector of vertex #1. +* @param u2 is the normal vector of vertex #2. +* @param mu_i an enum for choosing between computing the area measure, +* the mean curvature measure, or the gaussian curvature measure. +* +* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given triangle. +* +* @see `interpolated_corrected_measure_face()` +* @see `interpolated_corrected_measure_quad()` +*/ +template +typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, + const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const Measure_index mu_i) +{ + switch (mu_i) + { + case MU0_AREA_MEASURE: + { + const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; + + return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); + } + case MU1_MEAN_CURVATURE_MEASURE: + { + const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; - return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); + return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) + + CGAL::cross_product(u0 - u2, x1) + + CGAL::cross_product(u1 - u0, x2)); + } + case MU2_GAUSSIAN_CURVATURE_MEASURE: - case MU1_MEAN_CURVATURE_MEASURE: + return 0.5 * u0 * CGAL::cross_product(u1, u2); - um = (u0 + u1 + u2) / 3.0; + default: return 0; + } +} - return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) - + CGAL::cross_product(u0 - u2, x1) - + CGAL::cross_product(u1 - u0, x2)); +/** +* \ingroup PMP_corrected_curvatures_grp +* +* computes the interpolated corrected measure of specific quad +* Note that the vertices 0 to 3 are ordered like this \n +* v0 _ v1 \n +* v2 |_| v3 +* +* @tparam GT is the geometric traits class. +* +* @param x0 is the position of vertex #0. +* @param x1 is the position of vertex #1. +* @param x2 is the position of vertex #2. +* @param x3 is the position of vertex #3. +* @param u0 is the normal vector of vertex #0. +* @param u1 is the normal vector of vertex #1. +* @param u2 is the normal vector of vertex #2. +* @param u3 is the normal vector of vertex #3. +* @param mu_i an enum for choosing between computing the area measure, +* the mean curvature measure, or the gaussian curvature measure. +* +* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given triangle. +* +* @see `interpolated_corrected_measure_face()` +* @see `interpolated_corrected_measure_quad()` +*/ +template +typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, const typename GT::Vector_3 x3, + const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const typename GT::Vector_3 u3, const Measure_index mu_i) +{ + /// x0 _ x1 + /// x2 |_| x3 + + switch (mu_i) + { + case MU0_AREA_MEASURE: + + return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(x1 - x0, x3 - x1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(x3 - x2, x2 - x0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1)); + + case MU1_MEAN_CURVATURE_MEASURE: + { + const typename GT::Vector_3 u03 = u3 - u0; + const typename GT::Vector_3 u12 = u2 - u1; + const typename GT::Vector_3 x0_cross = CGAL::cross_product(u12, x0); + const typename GT::Vector_3 x1_cross = -CGAL::cross_product(u03, x1); + const typename GT::Vector_3 x2_cross = CGAL::cross_product(u03, x2); + const typename GT::Vector_3 x3_cross = -CGAL::cross_product(u12, x3); + + + return (1 / 12.0) * (u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) + + u1 * (CGAL::cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - CGAL::cross_product((u0 + u2), x3)) + + u2 * (CGAL::cross_product(-(u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) + + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross)); + } + case MU2_GAUSSIAN_CURVATURE_MEASURE: - case MU2_GAUSSIAN_CURVATURE_MEASURE: + return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(u1 - u0, u3 - u1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(u3 - u2, u2 - u0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1)); - return 0.5 * u0 * CGAL::cross_product(u1, u2); + default: return 0; + } +} - default: return 0; - } - } - Epic::FT interpolated_mu_i_quad(const Epic::Vector_3 x0, const Epic::Vector_3 x1, const Epic::Vector_3 x2, const Epic::Vector_3 x3, - const Epic::Vector_3 u0, const Epic::Vector_3 u1, const Epic::Vector_3 u2, const Epic::Vector_3 u3, const Measure_index mu_i) +/** +* \ingroup PMP_corrected_curvatures_grp +* +* computes the interpolated corrected measure of specific face. +* +* @tparam GT is the geometric traits class. +* +* @param x is a vector of the vertex positions of the face. +* @param u is a vector of the vertex nomrals of the face. +* @param mu_i an enum for choosing between computing the area measure, +* the mean curvature measure, or the gaussian curvature measure. +* +* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given face. +* +* @see `interpolated_corrected_measure_triangle()` +* @see `interpolated_corrected_measure_quad()` +* @see `interpolated_corrected_measure_mesh()` +*/ +template +typename GT::FT interpolated_corrected_measure_face(const std::vector& x, const std::vector& u, const Measure_index mu_i) +{ + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + // Triangle: use triangle formulas + if (n == 3) + return interpolated_corrected_measure_triangle(x[0], x[1], x[2], + u[0], u[1], u[2], mu_i); + + // Quad: use bilinear interpolation formulas + else if (n == 4) + /// x[0] _ x[1] ---> x0 _ x1 (reason for changing order) + /// x[3] |_| x[2] ---> x2 |_| x3 + return interpolated_corrected_measure_quad(x[0], x[1], x[3], x[2], + u[0], u[1], u[3], u[2], mu_i); + + // N-gon: split into n triangles by barycenter and use triangle formulas for each + else { + typename GT::FT mu0 = 0; + + // getting barycenter of points + typename GT::Vector_3 xm = std::accumulate(x.begin(), x.end(), GT::Vector_3(0, 0, 0)); + xm /= n; + + // getting unit average normal of points + typename GT::Vector_3 um = std::accumulate(u.begin(), u.end(), GT::Vector_3(0, 0, 0)); + um /= sqrt(um * um); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) { - /// x0 _ x1 - /// x2 |_| x3 - - switch (mu_i) - { - case MU0_AREA_MEASURE: - - return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(x1 - x0, x3 - x1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(x3 - x2, x2 - x0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1)); - - case MU1_MEAN_CURVATURE_MEASURE: - { - const Epic::Vector_3 u03 = u3 - u0; - const Epic::Vector_3 u12 = u2 - u1; - const Epic::Vector_3 x0_cross = CGAL::cross_product(u12, x0); - const Epic::Vector_3 x1_cross = -CGAL::cross_product(u03, x1); - const Epic::Vector_3 x2_cross = CGAL::cross_product(u03, x2); - const Epic::Vector_3 x3_cross = -CGAL::cross_product(u12, x3); - - - return (1 / 12.0) * (u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) - + u1 * (CGAL::cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - CGAL::cross_product((u0 + u2), x3)) - + u2 * (CGAL::cross_product(-(u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) - + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross)); - } - case MU2_GAUSSIAN_CURVATURE_MEASURE: - - return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(u1 - u0, u3 - u1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(u3 - u2, u2 - u0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1)); - - default: return 0; - } + mu0 += interpolated_corrected_measure_triangle(x[i], x[(i + 1) % n], xm, + u[i], u[(i + 1) % n], um, mu_i); } + return mu0; + } +} - Epic::FT interpolated_mu_i_face(const std::vector& x, const std::vector& u, const Measure_index mu_i) - { - std::size_t n = x.size(); - CGAL_precondition(u.size() == n); - CGAL_precondition(n >= 3); - - // Triangle: use triangle formulas - if (n == 3) - return interpolated_mu_i_triangle(x[0], x[1], x[2], - u[0], u[1], u[2], mu_i); - - // Quad: use bilinear interpolation formulas - else if (n == 4) - /// x[0] _ x[1] ---> x0 _ x1 (reason for changing order) - /// x[3] |_| x[2] ---> x2 |_| x3 - return interpolated_mu_i_quad(x[0], x[1], x[3], x[2], - u[0], u[1], u[3], u[2], mu_i); - - // N-gon: split into n triangles by barycenter and use triangle formulas for each - else { - Epic::FT mu0 = 0; - - // getting barycenter of points - Epic::Vector_3 xm = std::accumulate(x.begin(), x.end(), Epic::Vector_3(0, 0, 0)); - xm /= n; - - // getting unit average normal of points - Epic::Vector_3 um = std::accumulate(u.begin(), u.end(), Epic::Vector_3(0, 0, 0)); - um /= sqrt(um * um); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu0 += interpolated_mu_i_triangle(x[i], x[(i + 1) % n], xm, - u[i], u[(i + 1) % n], um, mu_i); - } - return mu0; - } - } - - /// TODO: - /// 1- Handle if VNM is not given - /// 2- use GT instead of Epic - - template - std::vector - interpolated_corrected_measure_i( - const PolygonMesh& pmesh, - const Measure_index mu_i, - VertexNormalMap vnm, - const NamedParameters& np = parameters::default_values()) - { - using parameters::choose_parameter; - using parameters::get_parameter; +/** +* \ingroup PMP_corrected_curvatures_grp +* +* computes the interpolated corrected curvature measure on each face of the mesh +* +* @tparam PolygonMesh a model of `FaceGraph` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param mu_i an enum for choosing between computing the area measure, the mean curvature measure or the gaussian curvature measure +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`TODO`} +* \cgalParamExtra{If this parameter is omitted, vertex normals should be computed inside the function body.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @return a vector of the computed measure on all faces. The return type is a std::vector. +* GT is the type of the Geometric Triats deduced from the PolygonMesh and the NamedParameters arguments +* This is to be changed later to a property_map. +* +* @see `interpolated_corrected_measure_face()` +*/ +template +#ifdef DOXYGEN_RUNNING + std::vector +#else + std::vector::type::FT> +#endif + interpolated_corrected_measure_mesh( + const PolygonMesh& pmesh, + const Measure_index mu_i, + NamedParameters& np = parameters::default_values()) +{ + typedef GetGeomTraits::type GT; + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type VNM; - typedef boost::graph_traits::face_descriptor face_descriptor; - typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; - typename GetVertexPointMap::const_type - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - //std::unordered_map vnm_init; + typedef boost::graph_traits::face_descriptor face_descriptor; + typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; - //boost::associative_property_map - // ::vertex_descriptor, Epic::Vector_3>> vnm(vnm_init); + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); - ////if (!vnm) - // { - // compute_vertex_normals(pmesh, vnm, np); - //} + VNM vnm = choose_parameter( + get_parameter(np, internal_np::vertex_normal_map), Vector_map_tag(), pmesh); - std::vector mu_i_map; + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + std::vector mu_i_map; - for (face_descriptor f : faces(pmesh)) - { - halfedge_descriptor h_start = pmesh.halfedge(f); - halfedge_descriptor h_iter = h_start; - std::vector x; - std::vector u; + for (face_descriptor f : faces(pmesh)) + { + halfedge_descriptor h_start = pmesh.halfedge(f); + halfedge_descriptor h_iter = h_start; - // looping over vertices in face - do { - vertex_descriptor v = source(h_iter, pmesh); - Epic::Point_3 p = get(vpm, v); - x.push_back(Epic::Vector_3(p.x(),p.y(),p.z())); - u.push_back(get(vnm, v)); - h_iter = next(h_iter, pmesh); - } while (h_iter != h_start); + std::vector x; + std::vector u; + // looping over vertices in face + do { + vertex_descriptor v = source(h_iter, pmesh); + GT::Point_3 p = get(vpm, v); + x.push_back(GT::Vector_3(p.x(),p.y(),p.z())); + u.push_back(get(vnm, v)); + h_iter = next(h_iter, pmesh); + } while (h_iter != h_start); - mu_i_map.push_back(interpolated_mu_i_face(x, u, mu_i)); - } - return mu_i_map; - } + mu_i_map.push_back(interpolated_corrected_measure_face(x, u, mu_i)); } + return mu_i_map; } - +} +} \ No newline at end of file From c3d654b2c372ae23c135d0641faab1edd099c772 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 02:44:14 +0200 Subject: [PATCH 007/943] add documentation for enum --- ...nterpolated_corrected_curvature_measures.h | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index df5197b2f005..0b164f2d8509 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -15,11 +15,16 @@ namespace CGAL { namespace Polygon_mesh_processing { -// enum to specify which measure is computed +/*! + * \ingroup PMP_corrected_curvatures_grp + * Enumeration type used to specify which measure is computed for the + * interpolated corrected curvature functions + */ +// enum enum Measure_index { - MU0_AREA_MEASURE, - MU1_MEAN_CURVATURE_MEASURE, - MU2_GAUSSIAN_CURVATURE_MEASURE + MU0_AREA_MEASURE, ///< corrected area density of the given face + MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density of the given face + MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density of the given face }; /** @@ -101,8 +106,8 @@ template typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, const typename GT::Vector_3 x3, const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const typename GT::Vector_3 u3, const Measure_index mu_i) { - /// x0 _ x1 - /// x2 |_| x3 + // x0 _ x1 + // x2 |_| x3 switch (mu_i) { @@ -172,8 +177,8 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector x0 _ x1 (reason for changing order) - /// x[3] |_| x[2] ---> x2 |_| x3 + // x[0] _ x[1] ---> x0 _ x1 (reason for changing order) + // x[3] |_| x[2] ---> x2 |_| x3 return interpolated_corrected_measure_quad(x[0], x[1], x[3], x[2], u[0], u[1], u[3], u[2], mu_i); From e1961c4340bef283b3b4c27afaceecdd89d3c01a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 02:48:52 +0200 Subject: [PATCH 008/943] minor doc fix --- .../Curvatures/interpolated_corrected_curvature_measures.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 0b164f2d8509..cf6ca10fc8ec 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -100,7 +100,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto * @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` -* @see `interpolated_corrected_measure_quad()` +* @see `interpolated_corrected_measure_triangle()` */ template typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, const typename GT::Vector_3 x3, From 138f1ea831d9138f008bcb88e0d0db8f7dd26f5b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 03:31:49 +0200 Subject: [PATCH 009/943] added to reference manual page --- .../doc/Polygon_mesh_processing/PackageDescription.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 9f6d7ffd4736..c25cfb8490d3 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -200,6 +200,12 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - \link PMP_locate_grp Nearest Face Location Queries \endlink - \link PMP_locate_grp Random Location Generation \endlink +\cgalCRPSection{Corrected Curvature Functions} +- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_mesh()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_face()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_triangle()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_quad()` + \cgalCRPSection{Normal Computation Functions} - `CGAL::Polygon_mesh_processing::compute_face_normal()` - `CGAL::Polygon_mesh_processing::compute_face_normals()` From b1e191212c8d727180e0614ceae545acc8527b9f Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 04:35:21 +0200 Subject: [PATCH 010/943] doc typos --- .../interpolated_corrected_curvature_measures.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index cf6ca10fc8ec..38fa4bb05bd8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -18,7 +18,7 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_corrected_curvatures_grp * Enumeration type used to specify which measure is computed for the - * interpolated corrected curvature functions + * interpolated corrected curvature functions. */ // enum enum Measure_index { @@ -30,7 +30,7 @@ enum Measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific triangle. +* computes the interpolated corrected measure of a specific triangle. * * @tparam GT is the geometric traits class. * @@ -79,8 +79,8 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific quad -* Note that the vertices 0 to 3 are ordered like this \n +* computes the interpolated corrected measure of a specific quad. \n +* Note that the vertices 0 to 3 are ordered like this: \n * v0 _ v1 \n * v2 |_| v3 * @@ -148,7 +148,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific face. +* computes the interpolated corrected measure of a specific face. * * @tparam GT is the geometric traits class. * @@ -208,7 +208,7 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector Date: Mon, 18 Jul 2022 16:17:03 +0200 Subject: [PATCH 011/943] used a face property map for computing measures, added license will update docs to match void interpolated_corrected_measure_mesh( const PolygonMesh& pmesh, FaceMeasureMap fmm, const Measure_index mu_i, NamedParameters& np = parameters::default_values()) { later if it works --- ...nterpolated_corrected_curvature_measures.h | 54 ++++++++++++++++++ .../interpolated_corrected_curvatures.cpp | 40 ++++---------- ...nterpolated_corrected_curvature_measures.h | 55 ++++++++----------- 3 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h diff --git a/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h b/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h new file mode 100644 index 000000000000..15e2a79af8a9 --- /dev/null +++ b/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h @@ -0,0 +1,54 @@ +// Copyright (c) 2016 GeometryFactory SARL (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Andreas Fabri +// +// Warning: this file is generated, see include/CGAL/licence/README.md + +#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H + +#include +#include + +#ifdef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE + +# if CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE + +# if defined(CGAL_LICENSE_WARNING) + + CGAL_pragma_warning("Your commercial license for CGAL does not cover " + "this release of the Polygon Mesh Processing - Interpolated Corrected Curvatures package.") +# endif + +# ifdef CGAL_LICENSE_ERROR +# error "Your commercial license for CGAL does not cover this release \ + of the Polygon Mesh Processing - Interpolated Corrected Curvatures package. \ + You get this error, as you defined CGAL_LICENSE_ERROR." +# endif // CGAL_LICENSE_ERROR + +# endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE + +#else // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE + +# if defined(CGAL_LICENSE_WARNING) + CGAL_pragma_warning("\nThe macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE is not defined." + "\nYou use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under " + "the terms of the GPLv3+.") +# endif // CGAL_LICENSE_WARNING + +# ifdef CGAL_LICENSE_ERROR +# error "The macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE is not defined.\ + You use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under the terms of \ + the GPLv3+. You get this error, as you defined CGAL_LICENSE_ERROR." +# endif // CGAL_LICENSE_ERROR + +#endif // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE + +#endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index c117e3f817fe..8dcf387d0ed5 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -23,6 +23,7 @@ typedef CGAL::Polyhedron_3 Polyhedron; typedef CGAL::Surface_mesh Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; +typedef std::unordered_map FaceMeasureMap_tag; int main(int argc, char* argv[]) @@ -35,41 +36,20 @@ int main(int argc, char* argv[]) std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; } - std::unordered_map vnm_vec; - boost::associative_property_map< std::unordered_map> vnm(vnm_vec); + std::unordered_map vnm_init; + boost::associative_property_map< std::unordered_map> vnm(vnm_init); PMP::compute_vertex_normals(g1, vnm); + FaceMeasureMap_tag mu0_init, mu1_init, mu2_init; + boost::associative_property_map mu0_map(mu0_init), mu1_map(mu1_init), mu2_map(mu2_init); - std::vector mu0_map, mu1_map, mu2_map; + PMP::interpolated_corrected_measure_mesh(g1, mu0_map, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + PMP::interpolated_corrected_measure_mesh(g1, mu1_map, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + PMP::interpolated_corrected_measure_mesh(g1, mu2_map, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - mu0_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - mu1_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - mu2_map = PMP::interpolated_corrected_measure_mesh(g1, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - - int n = g1.faces().size(); - - for (int i = 0; i < n; i++) + for (face_descriptor f: g1.faces()) { - std::cout << mu0_map[i] << "\n"; + std::cout << f.idx() << ": " << get(mu0_map, f) << ", " << get(mu1_map, f) << ", " << get(mu2_map, f) << ", " << "\n"; } - - std::cout << "\n"; - - for (int i = 0; i < n; i++) - { - std::cout << mu1_map[i] << "\n"; - } - - std::cout << "\n"; - - for (int i = 0; i < n; i++) - { - std::cout << mu2_map[i] << "\n"; - } - - - CGAL::draw(g1); - - return EXIT_SUCCESS; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 38fa4bb05bd8..6a5c675d4e69 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -3,6 +3,7 @@ #endif #include +#include #include #include @@ -17,10 +18,10 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_corrected_curvatures_grp - * Enumeration type used to specify which measure is computed for the - * interpolated corrected curvature functions. + * Enumeration type used to specify which measure is computed for the + * interpolated corrected curvature functions */ -// enum +// enum enum Measure_index { MU0_AREA_MEASURE, ///< corrected area density of the given face MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density of the given face @@ -30,7 +31,7 @@ enum Measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of a specific triangle. +* computes the interpolated corrected measure of specific triangle. * * @tparam GT is the geometric traits class. * @@ -79,9 +80,9 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of a specific quad. \n -* Note that the vertices 0 to 3 are ordered like this: \n -* v0 _ v1 \n +* computes the interpolated corrected measure of specific quad +* Note that the vertices 0 to 3 are ordered like this \n +* v0 _ v1 \n * v2 |_| v3 * * @tparam GT is the geometric traits class. @@ -148,7 +149,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of a specific face. +* computes the interpolated corrected measure of specific face. * * @tparam GT is the geometric traits class. * @@ -208,12 +209,12 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%vertex_descriptor` @@ -234,29 +235,27 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector. +* @return a vector of the computed measure on all faces. The return type is a std::vector. * GT is the type of the Geometric Triats deduced from the PolygonMesh and the NamedParameters arguments * This is to be changed later to a property_map. * * @see `interpolated_corrected_measure_face()` */ -template -#ifdef DOXYGEN_RUNNING - std::vector -#else - std::vector::type::FT> -#endif + void interpolated_corrected_measure_mesh( const PolygonMesh& pmesh, + FaceMeasureMap fmm, const Measure_index mu_i, NamedParameters& np = parameters::default_values()) { + typedef GetGeomTraits::type GT; - typedef dynamic_vertex_property_t Vector_map_tag; + typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; @@ -274,16 +272,13 @@ template::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); - - VNM vnm = choose_parameter( - get_parameter(np, internal_np::vertex_normal_map), Vector_map_tag(), pmesh); + + // TODO - handle if vnm is not provided + VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), get(Vector_map_tag(), pmesh)); if (is_default_parameter::value) compute_vertex_normals(pmesh, vnm, np); - std::vector mu_i_map; - - for (face_descriptor f : faces(pmesh)) { halfedge_descriptor h_start = pmesh.halfedge(f); @@ -301,10 +296,8 @@ template(x, u, mu_i)); + put(fmm, f, interpolated_corrected_measure_face(x, u, mu_i)); } - return mu_i_map; } } -} \ No newline at end of file +} From a54033c0c9211b9c9c42b8eeb6ec6f3f7fa86dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 18 Jul 2022 16:32:33 +0200 Subject: [PATCH 012/943] add a couple of missing const and typename --- ...nterpolated_corrected_curvature_measures.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 6a5c675d4e69..46b2f5c01fcc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -188,11 +188,11 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::type GT; + typedef typename GetGeomTraits::type GT; typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::type Default_vector_map; + typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::type VNM; @@ -265,9 +265,9 @@ template::face_descriptor face_descriptor; - typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), @@ -284,14 +284,14 @@ template x; - std::vector u; + std::vector x; + std::vector u; // looping over vertices in face do { vertex_descriptor v = source(h_iter, pmesh); - GT::Point_3 p = get(vpm, v); - x.push_back(GT::Vector_3(p.x(),p.y(),p.z())); + typename GT::Point_3 p = get(vpm, v); + x.push_back(typename GT::Vector_3(p.x(),p.y(),p.z())); u.push_back(get(vnm, v)); h_iter = next(h_iter, pmesh); } while (h_iter != h_start); From 5cc75c0bc4690df397c7dc14d03ca3049ad113f2 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 21:57:42 +0200 Subject: [PATCH 013/943] Updated Demo Display property plugin, added to license list, --- .../include/CGAL/license/gpl_package_list.txt | 1 + .../interpolated_corrected_curvatures.cpp | 2 +- ...nterpolated_corrected_curvature_measures.h | 10 +- .../Display/Display_property_plugin.cpp | 191 +++++++++++++++++- 4 files changed, 188 insertions(+), 16 deletions(-) diff --git a/Installation/include/CGAL/license/gpl_package_list.txt b/Installation/include/CGAL/license/gpl_package_list.txt index f023d48f375f..485c4234b91d 100644 --- a/Installation/include/CGAL/license/gpl_package_list.txt +++ b/Installation/include/CGAL/license/gpl_package_list.txt @@ -51,6 +51,7 @@ Polygon_mesh_processing/connected_components Polygon Mesh Processing - Connected Polygon_mesh_processing/corefinement Polygon Mesh Processing - Corefinement Polygon_mesh_processing/core Polygon Mesh Processing - Core Polygon_mesh_processing/distance Polygon Mesh Processing - Distance +Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures Polygon Mesh Processing - Interpolated Corrected Curvatures Polygon_mesh_processing/measure Polygon Mesh Processing - Geometric Measure Polygon_mesh_processing/meshing_hole_filling Polygon Mesh Processing - Meshing and Hole Filling Polygon_mesh_processing/orientation Polygon Mesh Processing - Orientation diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 8dcf387d0ed5..d17e37726a8a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -44,7 +44,7 @@ int main(int argc, char* argv[]) FaceMeasureMap_tag mu0_init, mu1_init, mu2_init; boost::associative_property_map mu0_map(mu0_init), mu1_map(mu1_init), mu2_map(mu2_init); - PMP::interpolated_corrected_measure_mesh(g1, mu0_map, PMP::MU0_AREA_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + PMP::interpolated_corrected_measure_mesh(g1, mu0_map, PMP::MU0_AREA_MEASURE); PMP::interpolated_corrected_measure_mesh(g1, mu1_map, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); PMP::interpolated_corrected_measure_mesh(g1, mu2_map, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 46b2f5c01fcc..7f99fbd7cace 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -22,7 +22,7 @@ namespace Polygon_mesh_processing { * interpolated corrected curvature functions */ // enum -enum Measure_index { +enum Curvature_measure_index { MU0_AREA_MEASURE, ///< corrected area density of the given face MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density of the given face MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density of the given face @@ -51,7 +51,7 @@ enum Measure_index { */ template typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, - const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const Measure_index mu_i) + const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) { switch (mu_i) { @@ -105,7 +105,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto */ template typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, const typename GT::Vector_3 x3, - const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const typename GT::Vector_3 u3, const Measure_index mu_i) + const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const typename GT::Vector_3 u3, const Curvature_measure_index mu_i) { // x0 _ x1 // x2 |_| x3 @@ -165,7 +165,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 * @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_measure_face(const std::vector& x, const std::vector& u, const Measure_index mu_i) +typename GT::FT interpolated_corrected_measure_face(const std::vector& x, const std::vector& u, const Curvature_measure_index mu_i) { std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -250,7 +250,7 @@ template #include #include +#include #include "Scene_points_with_normal_item.h" @@ -31,6 +32,7 @@ #include #include #include +#include #define ARBITRARY_DBL_MIN 1.0E-30 #define ARBITRARY_DBL_MAX 1.0E+30 @@ -41,6 +43,8 @@ typedef CGAL::Three::Triangle_container Tri; typedef CGAL::Three::Viewer_interface VI; +namespace PMP = CGAL::Polygon_mesh_processing; + class Scene_heat_item : public CGAL::Three::Scene_item_rendering_helper { @@ -529,6 +533,9 @@ private Q_SLOTS: dock_widget->propertyBox->addItem("Scaled Jacobian"); dock_widget->propertyBox->addItem("Heat Intensity"); dock_widget->propertyBox->addItem("Heat Intensity (Intrinsic Delaunay)"); + dock_widget->propertyBox->addItem("corrected area density"); + dock_widget->propertyBox->addItem("corrected mean curvature density"); + dock_widget->propertyBox->addItem("corrected gaussian curvature density"); detectSMScalarProperties(sm_item->face_graph()); } @@ -603,6 +610,18 @@ private Q_SLOTS: return; sm_item->setRenderingMode(Gouraud); break; + case 4: // corrected area density + displayInterpolatedCurvatureMeasure(sm_item, PMP::MU0_AREA_MEASURE); + sm_item->setRenderingMode(Flat); + break; + case 5: // corrected mean curvature density + displayInterpolatedCurvatureMeasure(sm_item, PMP::MU1_MEAN_CURVATURE_MEASURE); + sm_item->setRenderingMode(Flat); + break; + case 6: // corrected gaussian curvature density + displayInterpolatedCurvatureMeasure(sm_item, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE); + sm_item->setRenderingMode(Flat); + break; default: if(dock_widget->propertyBox->currentText().contains("v:")) { @@ -637,6 +656,18 @@ private Q_SLOTS: sm_item->face_graph()->property_map("f:angle"); if(does_exist) sm_item->face_graph()->remove_property_map(pmap); + std::tie(pmap, does_exist) = + sm_item->face_graph()->property_map("f:corrected_area_density"); + if (does_exist) + sm_item->face_graph()->remove_property_map(pmap); + std::tie(pmap, does_exist) = + sm_item->face_graph()->property_map("f:corrected_mean_curvature_density"); + if (does_exist) + sm_item->face_graph()->remove_property_map(pmap); + std::tie(pmap, does_exist) = + sm_item->face_graph()->property_map("f:corrected_gaussian_curvature_density"); + if (does_exist) + sm_item->face_graph()->remove_property_map(pmap); }); QApplication::restoreOverrideCursor(); sm_item->invalidateOpenGLBuffers(); @@ -668,13 +699,25 @@ private Q_SLOTS: switch(dock_widget->propertyBox->currentIndex()) { case 0: - dock_widget->zoomToMinButton->setEnabled(angles_max.count(sm_item)>0 ); + dock_widget->zoomToMinButton->setEnabled(angles_min.count(sm_item)>0 ); dock_widget->zoomToMaxButton->setEnabled(angles_max.count(sm_item)>0 ); break; case 1: - dock_widget->zoomToMinButton->setEnabled(jacobian_max.count(sm_item)>0); + dock_widget->zoomToMinButton->setEnabled(jacobian_min.count(sm_item)>0); dock_widget->zoomToMaxButton->setEnabled(jacobian_max.count(sm_item)>0); break; + case 4: + dock_widget->zoomToMinButton->setEnabled(mu0_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(mu0_max.count(sm_item) > 0); + break; + case 5: + dock_widget->zoomToMinButton->setEnabled(mu1_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(mu1_max.count(sm_item) > 0); + break; + case 6: + dock_widget->zoomToMinButton->setEnabled(mu2_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(mu2_max.count(sm_item) > 0); + break; default: break; } @@ -701,11 +744,28 @@ private Q_SLOTS: { smesh.remove_property_map(angles); } + SMesh::Property_map mu0; + std::tie(mu0, found) = smesh.property_map("f:corrected_area_density"); + if (found) + { + smesh.remove_property_map(mu0); + } + SMesh::Property_map mu1; + std::tie(mu1, found) = smesh.property_map("f:corrected_mean_curvature_density"); + if (found) + { + smesh.remove_property_map(mu0); + } + SMesh::Property_map mu2; + std::tie(mu2, found) = smesh.property_map("f:corrected_gaussian_curvature_density"); + if (found) + { + smesh.remove_property_map(mu0); + } } void displayScaledJacobian(Scene_surface_mesh_item* item) { - SMesh& smesh = *item->face_graph(); //compute and store the jacobian per face bool non_init; @@ -742,16 +802,59 @@ private Q_SLOTS: treat_sm_property("f:jacobian", item->face_graph()); } - bool resetScaledJacobian(Scene_surface_mesh_item* item) + void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { + std::vector tied_map = { + "f:corrected_area_density", + "f:corrected_mean_curvature_density", + "f:corrected_gaussian_curvature_density" + }; SMesh& smesh = *item->face_graph(); - if(!smesh.property_map("f:jacobian").second) + //compute once and store the value per face + bool non_init; + SMesh::Property_map mu_i_map; + std::tie(mu_i_map, non_init) = + smesh.add_property_map(tied_map[mu_index], 0); + if (non_init) { - return false; + PMP::interpolated_corrected_measure_mesh(smesh, mu_i_map, mu_index); + + double res_min = ARBITRARY_DBL_MAX, + res_max = -ARBITRARY_DBL_MAX; + SMesh::Face_index min_index, max_index; + for (SMesh::Face_index f : faces(smesh)) + { + if (mu_i_map[f] > res_max) + { + res_max = mu_i_map[f]; + max_index = f; + } + if (mu_i_map[f] < res_min) + { + res_min = mu_i_map[f]; + min_index = f; + } + } + switch (mu_index) + { + case PMP::MU0_AREA_MEASURE: + mu0_max[item] = std::make_pair(res_max, max_index); + mu0_min[item] = std::make_pair(res_min, min_index); + break; + case PMP::MU1_MEAN_CURVATURE_MEASURE: + mu1_max[item] = std::make_pair(res_max, max_index); + mu1_min[item] = std::make_pair(res_min, min_index); + break; + case PMP::MU2_GAUSSIAN_CURVATURE_MEASURE: + mu2_max[item] = std::make_pair(res_max, max_index); + mu2_min[item] = std::make_pair(res_min, min_index); + break; + } + + connect(item, &Scene_surface_mesh_item::itemChanged, + this, &DisplayPropertyPlugin::resetProperty); } - dock_widget->minBox->setValue(jacobian_min[item].first-0.01); - dock_widget->maxBox->setValue(jacobian_max[item].first); - return true; + treat_sm_property(tied_map[mu_index], item->face_graph()); } @@ -1054,6 +1157,9 @@ private Q_SLOTS: break; } case 1: + case 4: + case 5: + case 6: dock_widget->groupBox-> setEnabled(true); dock_widget->groupBox_3->setEnabled(true); @@ -1113,6 +1219,34 @@ private Q_SLOTS: dummy_fd, dummy_p); } + break; + case 4: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu0_min[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); + } + break; + case 5: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu1_min[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); + } + break; + case 6: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu2_min[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); + } + break; break; default: break; @@ -1145,6 +1279,33 @@ private Q_SLOTS: getActiveViewer(), dummy_fd, dummy_p); + } + break; + case 4: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu0_max[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); + } + break; + case 5: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu1_max[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); + } + break; + case 6: + { + ::zoomToId(*item->face_graph(), + QString("f%1").arg(mu2_max[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); } break; default: @@ -1436,6 +1597,16 @@ private Q_SLOTS: std::unordered_map > angles_min; std::unordered_map > angles_max; + + std::unordered_map > mu0_min; + std::unordered_map > mu0_max; + + std::unordered_map > mu1_min; + std::unordered_map > mu1_max; + + std::unordered_map > mu2_min; + std::unordered_map > mu2_max; + std::unordered_map is_source; @@ -1718,7 +1889,7 @@ private Q_SLOTS: } - EPICK::Vector_3 unit_center_normal = CGAL::Polygon_mesh_processing::compute_face_normal(f, mesh); + EPICK::Vector_3 unit_center_normal = PMP::compute_face_normal(f, mesh); unit_center_normal *= 1.0/CGAL::approximate_sqrt(unit_center_normal.squared_length()); for(std::size_t i = 0; i < corner_areas.size(); ++i) From 5af4a28b1674cb660d1c4575ccf69a5d4925ace5 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 18 Jul 2022 22:23:46 +0200 Subject: [PATCH 014/943] updated doc for interpolated_corrected_measure_mesh() --- ...nterpolated_corrected_curvature_measures.h | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 7f99fbd7cace..93d41ac77db7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -18,10 +18,10 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_corrected_curvatures_grp - * Enumeration type used to specify which measure is computed for the + * Enumeration type used to specify which measure is computed for the * interpolated corrected curvature functions */ -// enum +// enum enum Curvature_measure_index { MU0_AREA_MEASURE, ///< corrected area density of the given face MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density of the given face @@ -212,9 +212,12 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%face_descriptor` as key type and GT::FT as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * -* @param pmesh the polygon mesh +* @param pmesh the polygon mesh +* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure * @param mu_i an enum for choosing between computing the area measure, the mean curvature measure or the gaussian curvature measure * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @@ -227,7 +230,7 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%vertex_descriptor` @@ -235,12 +238,8 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector. -* GT is the type of the Geometric Triats deduced from the PolygonMesh and the NamedParameters arguments -* This is to be changed later to a property_map. +* \cgalNamedParamsEnd * * @see `interpolated_corrected_measure_face()` */ @@ -272,7 +271,7 @@ template::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); - + // TODO - handle if vnm is not provided VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), get(Vector_map_tag(), pmesh)); @@ -291,7 +290,7 @@ template Date: Mon, 18 Jul 2022 22:40:38 +0200 Subject: [PATCH 015/943] minor fix --- .../interpolated_corrected_curvatures.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index d17e37726a8a..05c74f68cfc7 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -28,7 +28,7 @@ typedef std::unordered_map FaceMeasureMap_tag; int main(int argc, char* argv[]) { - const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("small_bunny.obj"); + const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); Mesh g1; if(!CGAL::IO::read_polygon_mesh(filename, g1)) From 063e058988567727b9ae5421a98212e18958841e Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 22 Jul 2022 15:29:19 +0200 Subject: [PATCH 016/943] minor changes regarding the pull review reordering includes, splitting too long lines, minor addition to doc regarding review on the pull req --- .../interpolated_corrected_curvatures.cpp | 66 +++++++----- ...nterpolated_corrected_curvature_measures.h | 102 +++++++++++------- 2 files changed, 104 insertions(+), 64 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 05c74f68cfc7..505d43286451 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -1,55 +1,67 @@ -#include #include -#include -#include -#include +#include #include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include + namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; -typedef CGAL::Polyhedron_3 Polyhedron; -typedef CGAL::Surface_mesh Mesh; +typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; +typedef CGAL::Surface_mesh Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; -typedef std::unordered_map FaceMeasureMap_tag; +typedef std::unordered_map FaceMeasureMap_tag; +typedef std::unordered_map vertexVectorMap_tag; int main(int argc, char* argv[]) { - const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); - Mesh g1; + const std::string filename = (argc>1) ? + argv[1] : + CGAL::data_file_path("meshes/small_bunny.obj"); + if(!CGAL::IO::read_polygon_mesh(filename, g1)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; } - std::unordered_map vnm_init; - boost::associative_property_map< std::unordered_map> vnm(vnm_init); + + vertexVectorMap_tag vnm_init; + boost::associative_property_map vnm(vnm_init); PMP::compute_vertex_normals(g1, vnm); FaceMeasureMap_tag mu0_init, mu1_init, mu2_init; - boost::associative_property_map mu0_map(mu0_init), mu1_map(mu1_init), mu2_map(mu2_init); + boost::associative_property_map + mu0_map(mu0_init), mu1_map(mu1_init), mu2_map(mu2_init); - PMP::interpolated_corrected_measure_mesh(g1, mu0_map, PMP::MU0_AREA_MEASURE); - PMP::interpolated_corrected_measure_mesh(g1, mu1_map, PMP::MU1_MEAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); - PMP::interpolated_corrected_measure_mesh(g1, mu2_map, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, CGAL::parameters::vertex_normal_map(vnm)); + PMP::interpolated_corrected_measure_mesh( + g1, + mu0_map, + PMP::MU0_AREA_MEASURE); + + PMP::interpolated_corrected_measure_mesh( + g1, + mu1_map, + PMP::MU1_MEAN_CURVATURE_MEASURE, + CGAL::parameters::vertex_normal_map(vnm)); + + PMP::interpolated_corrected_measure_mesh( + g1, + mu2_map, + PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, + CGAL::parameters::vertex_normal_map(vnm)); for (face_descriptor f: g1.faces()) - { - std::cout << f.idx() << ": " << get(mu0_map, f) << ", " << get(mu1_map, f) << ", " << get(mu2_map, f) << ", " << "\n"; - } + std::cout << f.idx() << ": " + << get(mu0_map, f) << ", " + << get(mu1_map, f) << ", " + << get(mu2_map, f) << ", " << "\n"; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 93d41ac77db7..aae957dc0159 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -2,15 +2,15 @@ #define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H #endif -#include #include #include -#include #include #include +#include #include +#include namespace CGAL { @@ -18,14 +18,14 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_corrected_curvatures_grp - * Enumeration type used to specify which measure is computed for the - * interpolated corrected curvature functions + * Enumeration type used to specify which measure of a given face + * is computed for the interpolated corrected curvature functions */ // enum enum Curvature_measure_index { - MU0_AREA_MEASURE, ///< corrected area density of the given face - MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density of the given face - MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density of the given face + MU0_AREA_MEASURE, ///< corrected area density + MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density + MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density }; /** @@ -44,14 +44,20 @@ enum Curvature_measure_index { * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given triangle. +* @return a scalar of type GT::FT. +* This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` * @see `interpolated_corrected_measure_quad()` */ template -typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, - const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, + const typename GT::Vector_3 x1, + const typename GT::Vector_3 x2, + const typename GT::Vector_3 u0, + const typename GT::Vector_3 u1, + const typename GT::Vector_3 u2, + const Curvature_measure_index mu_i) { switch (mu_i) { @@ -98,26 +104,36 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given triangle. +* @return a scalar of type GT::FT. +* This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` * @see `interpolated_corrected_measure_triangle()` */ template -typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, const typename GT::Vector_3 x3, - const typename GT::Vector_3 u0, const typename GT::Vector_3 u1, const typename GT::Vector_3 u2, const typename GT::Vector_3 u3, const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, + const typename GT::Vector_3 x1, + const typename GT::Vector_3 x2, + const typename GT::Vector_3 x3, + const typename GT::Vector_3 u0, + const typename GT::Vector_3 u1, + const typename GT::Vector_3 u2, + const typename GT::Vector_3 u3, + const Curvature_measure_index mu_i) { // x0 _ x1 // x2 |_| x3 - + switch (mu_i) { case MU0_AREA_MEASURE: - return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) + return (1 / 36.0) * ( + (4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(x1 - x0, x3 - x1) + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(x3 - x2, x2 - x0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1)); + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1) + ); case MU1_MEAN_CURVATURE_MEASURE: { @@ -129,17 +145,21 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 const typename GT::Vector_3 x3_cross = -CGAL::cross_product(u12, x3); - return (1 / 12.0) * (u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) + return (1 / 12.0) * ( + u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) + u1 * (CGAL::cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - CGAL::cross_product((u0 + u2), x3)) - + u2 * (CGAL::cross_product(-(u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) - + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross)); + + u2 * (-CGAL::cross_product((u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) + + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross) + ); } case MU2_GAUSSIAN_CURVATURE_MEASURE: - return (1 / 36.0) * ((4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) + return (1 / 36.0) * ( + (4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(u1 - u0, u3 - u1) + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(u3 - u2, u2 - u0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1)); + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1) + ); default: return 0; } @@ -158,14 +178,17 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. This is the value of the interpolated corrected measure of the given face. +* @return a scalar of type GT::FT. +* This is the value of the interpolated corrected measure of the given face. * * @see `interpolated_corrected_measure_triangle()` * @see `interpolated_corrected_measure_quad()` * @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_measure_face(const std::vector& x, const std::vector& u, const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_measure_face(const std::vector& x, + const std::vector& u, + const Curvature_measure_index mu_i) { std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -188,11 +211,13 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%vertex_descriptor` +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` -* must be available in `PolygonMesh`.} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` * as key type and `%Vector_3` as value type} -* \cgalParamDefault{`TODO`} -* \cgalParamExtra{If this parameter is omitted, vertex normals should be computed inside the function body.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals should be +* computed inside the function body.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -246,11 +275,10 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector void - interpolated_corrected_measure_mesh( - const PolygonMesh& pmesh, - FaceMeasureMap fmm, - const Curvature_measure_index mu_i, - const NamedParameters& np = parameters::default_values()) + interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, + FaceMeasureMap fmm, + const Curvature_measure_index mu_i, + const NamedParameters& np = parameters::default_values()) { typedef typename GetGeomTraits::type GT; From 66a26246412d9922610d380c37da5623c432dc69 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 25 Jul 2022 13:31:07 +0200 Subject: [PATCH 017/943] minor doc fix making GT::FT back ticked --- .../interpolated_corrected_curvature_measures.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index aae957dc0159..2409eab42b74 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -44,7 +44,7 @@ enum Curvature_measure_index { * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` @@ -104,7 +104,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` @@ -178,7 +178,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type GT::FT. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given face. * * @see `interpolated_corrected_measure_triangle()` @@ -238,7 +238,7 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%face_descriptor` as key type and GT::FT as value type. +* `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh the polygon mesh From 41be3688ae6a0682ad03db7f22a2bb5a215b4a7b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 26 Jul 2022 19:32:17 +0200 Subject: [PATCH 018/943] Mean and Gaussian Curvatures + Visualizer (Still wip) --- .../interpolated_corrected_curvatures.cpp | 35 +-- ...nterpolated_corrected_curvature_measures.h | 224 +++++++++++++++++- .../Display/Display_property_plugin.cpp | 116 +++------ .../internal/parameters_interface.h | 1 + 4 files changed, 259 insertions(+), 117 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 505d43286451..4480366bc2b0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -33,35 +33,20 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } - vertexVectorMap_tag vnm_init; - boost::associative_property_map vnm(vnm_init); - - PMP::compute_vertex_normals(g1, vnm); - - FaceMeasureMap_tag mu0_init, mu1_init, mu2_init; + FaceMeasureMap_tag mean_curvature_init, gaussian_curvature_init; boost::associative_property_map - mu0_map(mu0_init), mu1_map(mu1_init), mu2_map(mu2_init); + mean_curvature_map(mean_curvature_init), gaussian_curvature_map(gaussian_curvature_init); - PMP::interpolated_corrected_measure_mesh( + PMP::interpolated_corrected_mean_curvature( g1, - mu0_map, - PMP::MU0_AREA_MEASURE); - - PMP::interpolated_corrected_measure_mesh( - g1, - mu1_map, - PMP::MU1_MEAN_CURVATURE_MEASURE, - CGAL::parameters::vertex_normal_map(vnm)); - - PMP::interpolated_corrected_measure_mesh( + mean_curvature_map + ); + PMP::interpolated_corrected_gaussian_curvature( g1, - mu2_map, - PMP::MU2_GAUSSIAN_CURVATURE_MEASURE, - CGAL::parameters::vertex_normal_map(vnm)); + gaussian_curvature_map + ); for (face_descriptor f: g1.faces()) - std::cout << f.idx() << ": " - << get(mu0_map, f) << ", " - << get(mu1_map, f) << ", " - << get(mu2_map, f) << ", " << "\n"; + std::cout << f.idx() << ": HC = " << get(mean_curvature_map, f) + << ", GC = " << get(gaussian_curvature_map, f) << "\n"; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 2409eab42b74..737a2525ebd7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -11,6 +11,8 @@ #include #include +#include +#include namespace CGAL { @@ -210,8 +212,8 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::value) compute_vertex_normals(pmesh, vnm, np); for (face_descriptor f : faces(pmesh)) { - halfedge_descriptor h_start = pmesh.halfedge(f); - halfedge_descriptor h_iter = h_start; - std::vector x; std::vector u; - // looping over vertices in face - do { - vertex_descriptor v = source(h_iter, pmesh); + for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + { typename GT::Point_3 p = get(vpm, v); x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); u.push_back(get(vnm, v)); - h_iter = next(h_iter, pmesh); - } while (h_iter != h_start); + } put(fmm, f, interpolated_corrected_measure_face(x, u, mu_i)); } } + +// +// +//template +//typename GT::FT triangle_in_ball_ratio_1(const typename GT::Vector_3 x1, +// const typename GT::Vector_3 x2, +// const typename GT::Vector_3 x3, +// const typename GT::FT r, +// const typename GT::Vector_3 c, +// const std::size_t res = 3) +//{ +// const typename GT::FT R = r * r; +// const typename GT::FT acc = 1.0 / res; +// std::size_t samples_in = 0; +// for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) +// for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) +// { +// if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) +// samples_in++; +// } +// return samples_in / (typename GT::FT)(res * (res + 1) / 2); +//} + + +template +typename GT::FT face_in_ball_ratio_2(const std::vector& x, + const typename GT::FT r, + const typename GT::Vector_3 c) +{ + std::size_t n = x.size(); + + // getting center of points + typename GT::Vector_3 xm = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xm /= n; + + typename GT::FT d_min = (xm - c).squared_length(); + typename GT::FT d_max = d_min; + + for (const typename GT::Vector_3 xi : x) + { + const typename GT::FT d_sq = (xi - c).squared_length(); + d_max = std::max(d_sq, d_max); + d_min = std::min(d_sq, d_min); + } + + if (d_max <= r * r) return 1.0; + else if (r * r <= d_min) return 0.0; + + d_max = sqrt(d_max); + d_min = sqrt(d_min); + + return (r - d_min) / (d_max - d_min); +} + +template + void expand_interpolated_corrected_measure_face(const PolygonMesh& pmesh, + FaceMeasureMap fmm, + const typename boost::graph_traits::face_descriptor f, + const NamedParameters& np = parameters::default_values()) +{ + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef typename GetGeomTraits::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + + const typename GetGeomTraits::type::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); + + if (r < 0.000001) + return; + + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + + std::queue bfs_q; + std::unordered_set bfs_v; + + //get face center c + typename GT::Vector_3 c; + for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + typename GT::Point_3 p = get(vpm, v); + c += typename GT::Vector_3(p.x(), p.y(), p.z()); + } + c /= degree(f, pmesh); + + GT::FT corrected_mui = 0; + + bfs_q.push(f); + bfs_v.insert(f); + + while (!bfs_q.empty()) { + face_descriptor fi = bfs_q.front(); + bfs_q.pop(); + + // looping over vertices in face to get point coordinates + std::vector x; + for (vertex_descriptor v : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + typename GT::Point_3 p = get(vpm, v); + x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); + } + + const typename GT::FT f_ratio = face_in_ball_ratio_2(x, r, c); + + if (f_ratio > 0.000001) + { + corrected_mui += f_ratio * get(fmm, fi); + for (face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_v.find(fj) == bfs_v.end()) + { + bfs_q.push(fj); + bfs_v.insert(fj); + } + } + } + } + + put(fmm, f, corrected_mui); +} + +//template +// void expand_interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, +// FaceMeasureMap fmm, +// const NamedParameters& np = parameters::default_values()) +//{ +// typedef typename boost::graph_traits::face_descriptor face_descriptor; +// for (face_descriptor f : faces(pmesh)) +// expand_interpolated_corrected_measure_face(pmesh, fmm, f, np); +//} + +template + void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, + FaceCurvatureMap fcm, + const NamedParameters& np = parameters::default_values()) +{ + typedef typename GetGeomTraits::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef std::unordered_map FaceMeasureMap_tag; + + FaceMeasureMap_tag mu0_init, mu1_init; + boost::associative_property_map + mu0_map(mu0_init), mu1_map(mu1_init); + + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); + interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE); + + for (face_descriptor f : faces(pmesh)) + { + expand_interpolated_corrected_measure_face(pmesh, mu0_map, f, np); + expand_interpolated_corrected_measure_face(pmesh, mu1_map, f, np); + + GT::FT f_mu0 = get(mu0_map, f); + if (f_mu0 > 0.000001) + put(fcm, f, 0.5 * get(mu1_map, f) / get(mu0_map, f)); + else + put(fcm, f, 0); + } + +} + +template + void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, + FaceCurvatureMap fcm, + const NamedParameters& np = parameters::default_values()) +{ + typedef typename GetGeomTraits::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef std::unordered_map FaceMeasureMap_tag; + + FaceMeasureMap_tag mu0_init, mu2_init; + boost::associative_property_map + mu0_map(mu0_init), mu2_map(mu2_init); + + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); + interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE); + + for (face_descriptor f : faces(pmesh)) + { + expand_interpolated_corrected_measure_face(pmesh, mu0_map, f, np); + expand_interpolated_corrected_measure_face(pmesh, mu2_map, f, np); + + GT::FT f_mu0 = get(mu0_map, f); + if(f_mu0 > 0.000001) + put(fcm, f, get(mu2_map, f) / f_mu0); + else + put(fcm, f, 0); + } + +} + + + } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 1ea1394649c2..88d86966f1d7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -533,9 +533,8 @@ private Q_SLOTS: dock_widget->propertyBox->addItem("Scaled Jacobian"); dock_widget->propertyBox->addItem("Heat Intensity"); dock_widget->propertyBox->addItem("Heat Intensity (Intrinsic Delaunay)"); - dock_widget->propertyBox->addItem("corrected area density"); - dock_widget->propertyBox->addItem("corrected mean curvature density"); - dock_widget->propertyBox->addItem("corrected gaussian curvature density"); + dock_widget->propertyBox->addItem("Interpolated Corrected Mean Curvature"); + dock_widget->propertyBox->addItem("Interpolated Corrected Gaussian Curvature"); detectSMScalarProperties(sm_item->face_graph()); } @@ -610,15 +609,11 @@ private Q_SLOTS: return; sm_item->setRenderingMode(Gouraud); break; - case 4: // corrected area density - displayInterpolatedCurvatureMeasure(sm_item, PMP::MU0_AREA_MEASURE); - sm_item->setRenderingMode(Flat); - break; - case 5: // corrected mean curvature density + case 4: // Interpolated Corrected Mean Curvature displayInterpolatedCurvatureMeasure(sm_item, PMP::MU1_MEAN_CURVATURE_MEASURE); sm_item->setRenderingMode(Flat); break; - case 6: // corrected gaussian curvature density + case 5: // Interpolated Corrected Gaussian Curvature displayInterpolatedCurvatureMeasure(sm_item, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE); sm_item->setRenderingMode(Flat); break; @@ -657,15 +652,11 @@ private Q_SLOTS: if(does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("f:corrected_area_density"); - if (does_exist) - sm_item->face_graph()->remove_property_map(pmap); - std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("f:corrected_mean_curvature_density"); + sm_item->face_graph()->property_map("f:interpolated_corrected_mean_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("f:corrected_gaussian_curvature_density"); + sm_item->face_graph()->property_map("f:interpolated_corrected_gaussian_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); }); @@ -707,16 +698,12 @@ private Q_SLOTS: dock_widget->zoomToMaxButton->setEnabled(jacobian_max.count(sm_item)>0); break; case 4: - dock_widget->zoomToMinButton->setEnabled(mu0_min.count(sm_item) > 0); - dock_widget->zoomToMaxButton->setEnabled(mu0_max.count(sm_item) > 0); + dock_widget->zoomToMinButton->setEnabled(mean_curvature_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(mean_curvature_max.count(sm_item) > 0); break; case 5: - dock_widget->zoomToMinButton->setEnabled(mu1_min.count(sm_item) > 0); - dock_widget->zoomToMaxButton->setEnabled(mu1_max.count(sm_item) > 0); - break; - case 6: - dock_widget->zoomToMinButton->setEnabled(mu2_min.count(sm_item) > 0); - dock_widget->zoomToMaxButton->setEnabled(mu2_max.count(sm_item) > 0); + dock_widget->zoomToMinButton->setEnabled(gaussian_curvature_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(gaussian_curvature_max.count(sm_item) > 0); break; default: break; @@ -744,23 +731,17 @@ private Q_SLOTS: { smesh.remove_property_map(angles); } - SMesh::Property_map mu0; - std::tie(mu0, found) = smesh.property_map("f:corrected_area_density"); + SMesh::Property_map mean_curvature; + std::tie(mean_curvature, found) = smesh.property_map("f:interpolated_corrected_mean_curvature"); if (found) { - smesh.remove_property_map(mu0); + smesh.remove_property_map(mean_curvature); } - SMesh::Property_map mu1; - std::tie(mu1, found) = smesh.property_map("f:corrected_mean_curvature_density"); + SMesh::Property_map gaussian_curvature; + std::tie(gaussian_curvature, found) = smesh.property_map("f:interpolated_corrected_gaussian_curvature"); if (found) { - smesh.remove_property_map(mu0); - } - SMesh::Property_map mu2; - std::tie(mu2, found) = smesh.property_map("f:corrected_gaussian_curvature_density"); - if (found) - { - smesh.remove_property_map(mu0); + smesh.remove_property_map(gaussian_curvature); } } @@ -804,20 +785,20 @@ private Q_SLOTS: void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { - std::vector tied_map = { - "f:corrected_area_density", - "f:corrected_mean_curvature_density", - "f:corrected_gaussian_curvature_density" - }; + std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? + "f:interpolated_corrected_mean_curvature": "f:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); //compute once and store the value per face bool non_init; SMesh::Property_map mu_i_map; std::tie(mu_i_map, non_init) = - smesh.add_property_map(tied_map[mu_index], 0); + smesh.add_property_map(tied_string, 0); if (non_init) { - PMP::interpolated_corrected_measure_mesh(smesh, mu_i_map, mu_index); + if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map); + else + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map); double res_min = ARBITRARY_DBL_MAX, res_max = -ARBITRARY_DBL_MAX; @@ -837,24 +818,20 @@ private Q_SLOTS: } switch (mu_index) { - case PMP::MU0_AREA_MEASURE: - mu0_max[item] = std::make_pair(res_max, max_index); - mu0_min[item] = std::make_pair(res_min, min_index); - break; case PMP::MU1_MEAN_CURVATURE_MEASURE: - mu1_max[item] = std::make_pair(res_max, max_index); - mu1_min[item] = std::make_pair(res_min, min_index); + mean_curvature_max[item] = std::make_pair(res_max, max_index); + mean_curvature_min[item] = std::make_pair(res_min, min_index); break; case PMP::MU2_GAUSSIAN_CURVATURE_MEASURE: - mu2_max[item] = std::make_pair(res_max, max_index); - mu2_min[item] = std::make_pair(res_min, min_index); + gaussian_curvature_max[item] = std::make_pair(res_max, max_index); + gaussian_curvature_min[item] = std::make_pair(res_min, min_index); break; } connect(item, &Scene_surface_mesh_item::itemChanged, this, &DisplayPropertyPlugin::resetProperty); } - treat_sm_property(tied_map[mu_index], item->face_graph()); + treat_sm_property(tied_string, item->face_graph()); } @@ -1159,7 +1136,6 @@ private Q_SLOTS: case 1: case 4: case 5: - case 6: dock_widget->groupBox-> setEnabled(true); dock_widget->groupBox_3->setEnabled(true); @@ -1223,7 +1199,7 @@ private Q_SLOTS: case 4: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu0_min[item].second), + QString("f%1").arg(mean_curvature_min[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1232,20 +1208,12 @@ private Q_SLOTS: case 5: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu1_min[item].second), + QString("f%1").arg(gaussian_curvature_min[item].second), getActiveViewer(), dummy_fd, dummy_p); } break; - case 6: - { - ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu2_min[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); - } break; break; default: @@ -1284,7 +1252,7 @@ private Q_SLOTS: case 4: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu0_max[item].second), + QString("f%1").arg(mean_curvature_max[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1293,21 +1261,12 @@ private Q_SLOTS: case 5: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu1_max[item].second), + QString("f%1").arg(gaussian_curvature_max[item].second), getActiveViewer(), dummy_fd, dummy_p); } break; - case 6: - { - ::zoomToId(*item->face_graph(), - QString("f%1").arg(mu2_max[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); - } - break; default: break; } @@ -1598,14 +1557,11 @@ private Q_SLOTS: std::unordered_map > angles_min; std::unordered_map > angles_max; - std::unordered_map > mu0_min; - std::unordered_map > mu0_max; + std::unordered_map > mean_curvature_min; + std::unordered_map > mean_curvature_max; - std::unordered_map > mu1_min; - std::unordered_map > mu1_max; - - std::unordered_map > mu2_min; - std::unordered_map > mu2_max; + std::unordered_map > gaussian_curvature_min; + std::unordered_map > gaussian_curvature_max; std::unordered_map is_source; diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index c224b4982513..dd4785ab7e8a 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -87,6 +87,7 @@ CGAL_add_named_parameter(number_of_points_per_edge_t, number_of_points_per_edge, CGAL_add_named_parameter(number_of_points_on_edges_t, number_of_points_on_edges, number_of_points_on_edges) CGAL_add_named_parameter(nb_points_per_area_unit_t, nb_points_per_area_unit, number_of_points_per_area_unit) CGAL_add_named_parameter(nb_points_per_distance_unit_t, nb_points_per_distance_unit, number_of_points_per_distance_unit) +CGAL_add_named_parameter(ball_radius_t, ball_radius, ball_radius) CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_orientation) CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides) CGAL_add_named_parameter(preserve_genus_t, preserve_genus, preserve_genus) From 48ff36dcc94d621d27a1fde09811159e3963eb3a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 27 Jul 2022 12:42:38 +0200 Subject: [PATCH 019/943] fixed some missing typenames --- .../interpolated_corrected_curvature_measures.h | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 737a2525ebd7..9f9a6c0fc14f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -415,7 +415,7 @@ template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef std::unordered_map FaceMeasureMap_tag; + typedef std::unordered_map FaceMeasureMap_tag; FaceMeasureMap_tag mu0_init, mu1_init; boost::associative_property_map @@ -484,13 +484,12 @@ template 0.000001) put(fcm, f, 0.5 * get(mu1_map, f) / get(mu0_map, f)); else put(fcm, f, 0); } - } template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef std::unordered_map FaceMeasureMap_tag; + typedef std::unordered_map FaceMeasureMap_tag; FaceMeasureMap_tag mu0_init, mu2_init; boost::associative_property_map @@ -515,13 +514,12 @@ template 0.000001) put(fcm, f, get(mu2_map, f) / f_mu0); else put(fcm, f, 0); } - } From 6b985bfeb86efd80958f42409fdd9fae5f2b5539 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 27 Jul 2022 13:25:35 +0200 Subject: [PATCH 020/943] for boundary faces --- .../Curvatures/interpolated_corrected_curvature_measures.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 9f9a6c0fc14f..3528ffed8a43 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -439,7 +439,7 @@ template::null_face()) { bfs_q.push(fj); bfs_v.insert(fj); From 8d2a5bcf82a026a0c7aa8399dc024c96cf40b0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 13:40:25 +0200 Subject: [PATCH 021/943] add license header --- .../interpolated_corrected_curvature_measures.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 9f9a6c0fc14f..a3c3d9f16e2c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -1,3 +1,16 @@ +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Hossam Saeed +// + #ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H #define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H #endif From c99008dde1ad696b2e9eea65081908f325e5ac8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 13:40:33 +0200 Subject: [PATCH 022/943] trailing whitespaces --- .../PackageDescription.txt | 2 +- .../interpolated_corrected_curvatures.cpp | 2 +- ...nterpolated_corrected_curvature_measures.h | 28 +++++++++---------- .../Display/Display_property_plugin.cpp | 4 +-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index c25cfb8490d3..d0cab92d6a89 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -16,7 +16,7 @@ /// Functions to triangulate faces, and to refine and fair regions of a polygon mesh. /// \ingroup PkgPolygonMeshProcessingRef -/// \defgroup PMP_corrected_curvatures_grp Corrected Curvature Computation +/// \defgroup PMP_corrected_curvatures_grp Corrected Curvature Computation /// Functions to compute the corrected curvatures of a polygon mesh. /// \ingroup PkgPolygonMeshProcessingRef diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 4480366bc2b0..acf4591fe392 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -47,6 +47,6 @@ int main(int argc, char* argv[]) ); for (face_descriptor f: g1.faces()) - std::cout << f.idx() << ": HC = " << get(mean_curvature_map, f) + std::cout << f.idx() << ": HC = " << get(mean_curvature_map, f) << ", GC = " << get(gaussian_curvature_map, f) << "\n"; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index a3c3d9f16e2c..f618533d2bc9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -59,7 +59,7 @@ enum Curvature_measure_index { * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type `GT::FT`. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` @@ -69,9 +69,9 @@ template typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, const typename GT::Vector_3 x1, const typename GT::Vector_3 x2, - const typename GT::Vector_3 u0, - const typename GT::Vector_3 u1, - const typename GT::Vector_3 u2, + const typename GT::Vector_3 u0, + const typename GT::Vector_3 u1, + const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) { switch (mu_i) @@ -102,8 +102,8 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto * \ingroup PMP_corrected_curvatures_grp * * computes the interpolated corrected measure of specific quad -* Note that the vertices 0 to 3 are ordered like this \n -* v0 _ v1 \n +* Note that the vertices 0 to 3 are ordered like this \n +* v0 _ v1 \n * v2 |_| v3 * * @tparam GT is the geometric traits class. @@ -119,7 +119,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type `GT::FT`. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given triangle. * * @see `interpolated_corrected_measure_face()` @@ -138,7 +138,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 { // x0 _ x1 // x2 |_| x3 - + switch (mu_i) { case MU0_AREA_MEASURE: @@ -193,7 +193,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 * @param mu_i an enum for choosing between computing the area measure, * the mean curvature measure, or the gaussian curvature measure. * -* @return a scalar of type `GT::FT`. +* @return a scalar of type `GT::FT`. * This is the value of the interpolated corrected measure of the given face. * * @see `interpolated_corrected_measure_triangle()` @@ -231,7 +231,7 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} @@ -275,7 +275,7 @@ typename GT::FT interpolated_corrected_measure_face(const std::vector::%vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} @@ -405,7 +405,7 @@ template::face_descriptor face_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - const typename GetGeomTraits::type::FT + const typename GetGeomTraits::type::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); if (r < 0.000001) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 88d86966f1d7..13f704774e38 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -785,13 +785,13 @@ private Q_SLOTS: void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { - std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? + std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? "f:interpolated_corrected_mean_curvature": "f:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); //compute once and store the value per face bool non_init; SMesh::Property_map mu_i_map; - std::tie(mu_i_map, non_init) = + std::tie(mu_i_map, non_init) = smesh.add_property_map(tied_string, 0); if (non_init) { From 1c42a61fa11dc97e0c4629a4c73600e1356a518c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 14:26:28 +0200 Subject: [PATCH 023/943] use traits functor --- ...nterpolated_corrected_curvature_measures.h | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index f618533d2bc9..415737e4991a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -74,25 +74,26 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) { + GT::Construct_cross_product_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: { const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; - return 0.5 * um * CGAL::cross_product(x1 - x0, x2 - x0); + return 0.5 * um * cross_product(x1 - x0, x2 - x0); } case MU1_MEAN_CURVATURE_MEASURE: { const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; - return 0.5 * um * (CGAL::cross_product(u2 - u1, x0) - + CGAL::cross_product(u0 - u2, x1) - + CGAL::cross_product(u1 - u0, x2)); + return 0.5 * um * (cross_product(u2 - u1, x0) + + cross_product(u0 - u2, x1) + + cross_product(u1 - u0, x2)); } case MU2_GAUSSIAN_CURVATURE_MEASURE: - return 0.5 * u0 * CGAL::cross_product(u1, u2); + return 0.5 * u0 * cross_product(u1, u2); default: return 0; } @@ -138,42 +139,42 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 { // x0 _ x1 // x2 |_| x3 - + GT::Construct_cross_product_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: return (1 / 36.0) * ( - (4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(x1 - x0, x2 - x0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(x1 - x0, x3 - x1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(x3 - x2, x2 - x0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(x3 - x2, x3 - x1) + (4 * u0 + 2 * u1 + 2 * u2 + u3) * cross_product(x1 - x0, x2 - x0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * cross_product(x1 - x0, x3 - x1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * cross_product(x3 - x2, x2 - x0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * cross_product(x3 - x2, x3 - x1) ); case MU1_MEAN_CURVATURE_MEASURE: { const typename GT::Vector_3 u03 = u3 - u0; const typename GT::Vector_3 u12 = u2 - u1; - const typename GT::Vector_3 x0_cross = CGAL::cross_product(u12, x0); - const typename GT::Vector_3 x1_cross = -CGAL::cross_product(u03, x1); - const typename GT::Vector_3 x2_cross = CGAL::cross_product(u03, x2); - const typename GT::Vector_3 x3_cross = -CGAL::cross_product(u12, x3); + const typename GT::Vector_3 x0_cross = cross_product(u12, x0); + const typename GT::Vector_3 x1_cross = -cross_product(u03, x1); + const typename GT::Vector_3 x2_cross = cross_product(u03, x2); + const typename GT::Vector_3 x3_cross = -cross_product(u12, x3); return (1 / 12.0) * ( - u0 * (2 * x0_cross - CGAL::cross_product((u2 + u3), x1) + CGAL::cross_product((u1 + u3), x2) + x3_cross) - + u1 * (CGAL::cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - CGAL::cross_product((u0 + u2), x3)) - + u2 * (-CGAL::cross_product((u1 + u3), x0) + x1_cross + 2 * x2_cross + CGAL::cross_product((u0 + u1), x3)) - + u3 * (x0_cross + CGAL::cross_product((u0 + u2), x1) - CGAL::cross_product((u0 + u1), x2) + 2 * x3_cross) + u0 * (2 * x0_cross - cross_product((u2 + u3), x1) + cross_product((u1 + u3), x2) + x3_cross) + + u1 * (cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - cross_product((u0 + u2), x3)) + + u2 * (-cross_product((u1 + u3), x0) + x1_cross + 2 * x2_cross + cross_product((u0 + u1), x3)) + + u3 * (x0_cross + cross_product((u0 + u2), x1) - cross_product((u0 + u1), x2) + 2 * x3_cross) ); } case MU2_GAUSSIAN_CURVATURE_MEASURE: return (1 / 36.0) * ( - (4 * u0 + 2 * u1 + 2 * u2 + u3) * CGAL::cross_product(u1 - u0, u2 - u0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * CGAL::cross_product(u1 - u0, u3 - u1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * CGAL::cross_product(u3 - u2, u2 - u0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * CGAL::cross_product(u3 - u2, u3 - u1) + (4 * u0 + 2 * u1 + 2 * u2 + u3) * cross_product(u1 - u0, u2 - u0) + + (2 * u0 + 4 * u1 + u2 + 2 * u3) * cross_product(u1 - u0, u3 - u1) + + (2 * u0 + u1 + 4 * u2 + 2 * u3) * cross_product(u3 - u2, u2 - u0) + + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * cross_product(u3 - u2, u3 - u1) ); default: return 0; From 12a627e23f2d26e98a6b53228fa4c050cef07d2c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:40:06 +0200 Subject: [PATCH 024/943] expanding from and evaluating on vertices instead of faces --- .../interpolated_corrected_curvatures.cpp | 15 ++-- ...nterpolated_corrected_curvature_measures.h | 87 +++++++++++-------- .../Display/Display_property_plugin.cpp | 56 ++++++------ 3 files changed, 85 insertions(+), 73 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 4480366bc2b0..63c0b8df528c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -17,7 +17,7 @@ typedef CGAL::Surface_mesh Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef std::unordered_map FaceMeasureMap_tag; -typedef std::unordered_map vertexVectorMap_tag; +typedef std::unordered_map vertexVectorMap_tag; int main(int argc, char* argv[]) @@ -25,7 +25,7 @@ int main(int argc, char* argv[]) Mesh g1; const std::string filename = (argc>1) ? argv[1] : - CGAL::data_file_path("meshes/small_bunny.obj"); + CGAL::data_file_path("meshes/cylinder.off"); if(!CGAL::IO::read_polygon_mesh(filename, g1)) { @@ -33,8 +33,9 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } - FaceMeasureMap_tag mean_curvature_init, gaussian_curvature_init; - boost::associative_property_map + + vertexVectorMap_tag mean_curvature_init, gaussian_curvature_init; + boost::associative_property_map mean_curvature_map(mean_curvature_init), gaussian_curvature_map(gaussian_curvature_init); PMP::interpolated_corrected_mean_curvature( @@ -46,7 +47,7 @@ int main(int argc, char* argv[]) gaussian_curvature_map ); - for (face_descriptor f: g1.faces()) - std::cout << f.idx() << ": HC = " << get(mean_curvature_map, f) - << ", GC = " << get(gaussian_curvature_map, f) << "\n"; + for (vertex_descriptor v : vertices(g1)) + std::cout << v.idx() << ": HC = " << get(mean_curvature_map, v) + << ", GC = " << get(gaussian_curvature_map, v) << "\n"; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 3528ffed8a43..3b499a8fe94d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -378,11 +378,12 @@ typename GT::FT face_in_ball_ratio_2(const std::vector& x return (r - d_min) / (d_max - d_min); } -template - void expand_interpolated_corrected_measure_face(const PolygonMesh& pmesh, + void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, FaceMeasureMap fmm, - const typename boost::graph_traits::face_descriptor f, + VertexCurvatureMap vcm, + const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { using parameters::choose_parameter; @@ -406,30 +407,28 @@ template bfs_q; std::unordered_set bfs_v; - //get face center c - typename GT::Vector_3 c; - for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - typename GT::Point_3 p = get(vpm, v); - c += typename GT::Vector_3(p.x(), p.y(), p.z()); - } - c /= degree(f, pmesh); + typename GT::Point_3 vp = get(vpm, v); + typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); typename GT::FT corrected_mui = 0; - bfs_q.push(f); - bfs_v.insert(f); - + for (face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_q.push(f); + bfs_v.insert(f); + } + } while (!bfs_q.empty()) { face_descriptor fi = bfs_q.front(); bfs_q.pop(); // looping over vertices in face to get point coordinates std::vector x; - for (vertex_descriptor v : vertices_around_face(halfedge(fi, pmesh), pmesh)) + for (vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) { - typename GT::Point_3 p = get(vpm, v); - x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); + typename GT::Point_3 pi = get(vpm, vi); + x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); } const typename GT::FT f_ratio = face_in_ball_ratio_2(x, r, c); @@ -448,7 +447,7 @@ template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, - FaceCurvatureMap fcm, + VertexCurvatureMap vcm, const NamedParameters& np = parameters::default_values()) { typedef typename GetGeomTraits::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef std::unordered_map VertexMeasureMap_tag; FaceMeasureMap_tag mu0_init, mu1_init; boost::associative_property_map mu0_map(mu0_init), mu1_map(mu1_init); + VertexMeasureMap_tag mu0_expand_init, mu1_expand_init; + boost::associative_property_map + mu0_expand_map(mu0_expand_init), mu1_expand_map(mu1_expand_init); + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE); - for (face_descriptor f : faces(pmesh)) + for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_face(pmesh, mu0_map, f, np); - expand_interpolated_corrected_measure_face(pmesh, mu1_map, f, np); - - const typename GT::FT f_mu0 = get(mu0_map, f); - if (f_mu0 > 0.000001) - put(fcm, f, 0.5 * get(mu1_map, f) / get(mu0_map, f)); - else - put(fcm, f, 0); + expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu0_expand_map, v, np); + expand_interpolated_corrected_measure_vertex(pmesh, mu1_map, mu1_expand_map, v, np); + + typename GT::FT v_mu0 = get(mu0_expand_map, v); + if (v_mu0 > 0.000001) + put(vcm, v, 0.5 * get(mu1_expand_map, v) / v_mu0); + else + put(vcm, v, 0); } } -template void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, - FaceCurvatureMap fcm, + VertexCurvatureMap vcm, const NamedParameters& np = parameters::default_values()) { typedef typename GetGeomTraits::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef std::unordered_map VertexMeasureMap_tag; FaceMeasureMap_tag mu0_init, mu2_init; boost::associative_property_map mu0_map(mu0_init), mu2_map(mu2_init); + VertexMeasureMap_tag mu0_expand_init, mu2_expand_init; + boost::associative_property_map + mu0_expand_map(mu0_expand_init), mu2_expand_map(mu2_expand_init); + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE); - for (face_descriptor f : faces(pmesh)) + for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_face(pmesh, mu0_map, f, np); - expand_interpolated_corrected_measure_face(pmesh, mu2_map, f, np); + expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu0_expand_map, v, np); + expand_interpolated_corrected_measure_vertex(pmesh, mu2_map, mu2_expand_map, v, np); - const typename GT::FT f_mu0 = get(mu0_map, f); - if(f_mu0 > 0.000001) - put(fcm, f, get(mu2_map, f) / f_mu0); + typename GT::FT v_mu0 = get(mu0_expand_map, v); + if(v_mu0 > 0.000001) + put(vcm, v, get(mu2_expand_map, v) / v_mu0); else - put(fcm, f, 0); + put(vcm, v, 0); } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 88d86966f1d7..2f9bd19e584b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -611,11 +611,11 @@ private Q_SLOTS: break; case 4: // Interpolated Corrected Mean Curvature displayInterpolatedCurvatureMeasure(sm_item, PMP::MU1_MEAN_CURVATURE_MEASURE); - sm_item->setRenderingMode(Flat); + sm_item->setRenderingMode(Gouraud); break; case 5: // Interpolated Corrected Gaussian Curvature displayInterpolatedCurvatureMeasure(sm_item, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE); - sm_item->setRenderingMode(Flat); + sm_item->setRenderingMode(Gouraud); break; default: if(dock_widget->propertyBox->currentText().contains("v:")) @@ -652,11 +652,11 @@ private Q_SLOTS: if(does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("f:interpolated_corrected_mean_curvature"); + sm_item->face_graph()->property_map("v:interpolated_corrected_mean_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("f:interpolated_corrected_gaussian_curvature"); + sm_item->face_graph()->property_map("v:interpolated_corrected_gaussian_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); }); @@ -731,14 +731,14 @@ private Q_SLOTS: { smesh.remove_property_map(angles); } - SMesh::Property_map mean_curvature; - std::tie(mean_curvature, found) = smesh.property_map("f:interpolated_corrected_mean_curvature"); + SMesh::Property_map mean_curvature; + std::tie(mean_curvature, found) = smesh.property_map("v:interpolated_corrected_mean_curvature"); if (found) { smesh.remove_property_map(mean_curvature); } - SMesh::Property_map gaussian_curvature; - std::tie(gaussian_curvature, found) = smesh.property_map("f:interpolated_corrected_gaussian_curvature"); + SMesh::Property_map gaussian_curvature; + std::tie(gaussian_curvature, found) = smesh.property_map("v:interpolated_corrected_gaussian_curvature"); if (found) { smesh.remove_property_map(gaussian_curvature); @@ -786,13 +786,13 @@ private Q_SLOTS: void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? - "f:interpolated_corrected_mean_curvature": "f:interpolated_corrected_gaussian_curvature"; + "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); //compute once and store the value per face bool non_init; - SMesh::Property_map mu_i_map; + SMesh::Property_map mu_i_map; std::tie(mu_i_map, non_init) = - smesh.add_property_map(tied_string, 0); + smesh.add_property_map(tied_string, 0); if (non_init) { if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) @@ -802,18 +802,18 @@ private Q_SLOTS: double res_min = ARBITRARY_DBL_MAX, res_max = -ARBITRARY_DBL_MAX; - SMesh::Face_index min_index, max_index; - for (SMesh::Face_index f : faces(smesh)) + SMesh::Vertex_index min_index, max_index; + for (SMesh::Vertex_index v : vertices(smesh)) { - if (mu_i_map[f] > res_max) + if (mu_i_map[v] > res_max) { - res_max = mu_i_map[f]; - max_index = f; + res_max = mu_i_map[v]; + max_index = v; } - if (mu_i_map[f] < res_min) + if (mu_i_map[v] < res_min) { - res_min = mu_i_map[f]; - min_index = f; + res_min = mu_i_map[v]; + min_index = v; } } switch (mu_index) @@ -831,7 +831,7 @@ private Q_SLOTS: connect(item, &Scene_surface_mesh_item::itemChanged, this, &DisplayPropertyPlugin::resetProperty); } - treat_sm_property(tied_string, item->face_graph()); + treat_sm_property(tied_string, item->face_graph()); } @@ -1199,7 +1199,7 @@ private Q_SLOTS: case 4: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mean_curvature_min[item].second), + QString("v%1").arg(mean_curvature_min[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1208,7 +1208,7 @@ private Q_SLOTS: case 5: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(gaussian_curvature_min[item].second), + QString("v%1").arg(gaussian_curvature_min[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1252,7 +1252,7 @@ private Q_SLOTS: case 4: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(mean_curvature_max[item].second), + QString("v%1").arg(mean_curvature_max[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1261,7 +1261,7 @@ private Q_SLOTS: case 5: { ::zoomToId(*item->face_graph(), - QString("f%1").arg(gaussian_curvature_max[item].second), + QString("v%1").arg(gaussian_curvature_max[item].second), getActiveViewer(), dummy_fd, dummy_p); @@ -1557,11 +1557,11 @@ private Q_SLOTS: std::unordered_map > angles_min; std::unordered_map > angles_max; - std::unordered_map > mean_curvature_min; - std::unordered_map > mean_curvature_max; + std::unordered_map > mean_curvature_min; + std::unordered_map > mean_curvature_max; - std::unordered_map > gaussian_curvature_min; - std::unordered_map > gaussian_curvature_max; + std::unordered_map > gaussian_curvature_min; + std::unordered_map > gaussian_curvature_max; std::unordered_map is_source; From 4ffd2d2a098b3c0bb69db2ade868e770e153de54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 19:05:30 +0200 Subject: [PATCH 025/943] add missing typename --- .../Curvatures/interpolated_corrected_curvature_measures.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 03e5f396e3ce..0c6a370059c4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -74,7 +74,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) { - GT::Construct_cross_product_3 cross_product; + typename GT::Construct_cross_product_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: @@ -139,7 +139,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 { // x0 _ x1 // x2 |_| x3 - GT::Construct_cross_product_3 cross_product; + typename GT::Construct_cross_product_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: From 62c91c1479fb2396ed6b0e9ef9d707e9ef643f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 19:10:52 +0200 Subject: [PATCH 026/943] remove trailing whitespaces --- .../Polyhedron/Plugins/Display/Display_property_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 2f9bd19e584b..0334eb45a972 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -785,13 +785,13 @@ private Q_SLOTS: void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { - std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? + std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); //compute once and store the value per face bool non_init; SMesh::Property_map mu_i_map; - std::tie(mu_i_map, non_init) = + std::tie(mu_i_map, non_init) = smesh.add_property_map(tied_string, 0); if (non_init) { From 184fa0c8a4b5be1b0ca9aab7bdcade05de342cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 27 Jul 2022 19:28:44 +0200 Subject: [PATCH 027/943] fix invalid functor name --- .../Curvatures/interpolated_corrected_curvature_measures.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 0c6a370059c4..c3f349740204 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -74,7 +74,7 @@ typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vecto const typename GT::Vector_3 u2, const Curvature_measure_index mu_i) { - typename GT::Construct_cross_product_3 cross_product; + typename GT::Construct_cross_product_vector_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: @@ -139,7 +139,7 @@ typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 { // x0 _ x1 // x2 |_| x3 - typename GT::Construct_cross_product_3 cross_product; + typename GT::Construct_cross_product_vector_3 cross_product; switch (mu_i) { case MU0_AREA_MEASURE: From db753ee6b568c16ce2872a72d21cf9bed62e42c0 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 31 Jul 2022 00:21:55 +0200 Subject: [PATCH 028/943] Demo improvements + minor fixes - Fixed some typos in example file and in comment in display prop plugin - Added an option in random perturbation plugin to compute normals before hand - added slider for expanding radius with an exponential range and with max val dependant on max edge length --- .../interpolated_corrected_curvatures.cpp | 6 +-- ...nterpolated_corrected_curvature_measures.h | 12 ----- .../Plugins/Display/Display_property.ui | 36 ++++++++++++-- .../Display/Display_property_plugin.cpp | 49 ++++++++++++++++++- .../Plugins/PMP/Random_perturbation_dialog.ui | 24 ++++++++- .../PMP/Random_perturbation_plugin.cpp | 7 +++ 6 files changed, 111 insertions(+), 23 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 63c0b8df528c..5359315f0fa0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -17,7 +17,7 @@ typedef CGAL::Surface_mesh Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef std::unordered_map FaceMeasureMap_tag; -typedef std::unordered_map vertexVectorMap_tag; +typedef std::unordered_map vertexMeasureMap_tag; int main(int argc, char* argv[]) @@ -34,8 +34,8 @@ int main(int argc, char* argv[]) } - vertexVectorMap_tag mean_curvature_init, gaussian_curvature_init; - boost::associative_property_map + vertexMeasureMap_tag mean_curvature_init, gaussian_curvature_init; + boost::associative_property_map mean_curvature_map(mean_curvature_init), gaussian_curvature_map(gaussian_curvature_init); PMP::interpolated_corrected_mean_curvature( diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index c3f349740204..d36e1c67e363 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -338,7 +338,6 @@ template //typename GT::FT triangle_in_ball_ratio_1(const typename GT::Vector_3 x1, @@ -464,17 +463,6 @@ template -// void expand_interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, -// FaceMeasureMap fmm, -// const NamedParameters& np = parameters::default_values()) -//{ -// typedef typename boost::graph_traits::face_descriptor face_descriptor; -// for (face_descriptor f : faces(pmesh)) -// expand_interpolated_corrected_measure_face(pmesh, fmm, f, np); -//} - template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index 7a5a19621f42..70c22f8348c2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -84,18 +84,18 @@ Ramp Colors - + - Color Min... + Min - Color Max... + Max @@ -135,7 +135,7 @@ Zoom - + @@ -158,7 +158,7 @@ Ramp Extrema - + @@ -186,6 +186,32 @@ + + + + 0 + + + 100 + + + true + + + Qt::Horizontal + + + QSlider::TicksAbove + + + + + + + Expanding Radius: 0 + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 0334eb45a972..a2d25d167c6b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -783,12 +784,56 @@ private Q_SLOTS: treat_sm_property("f:jacobian", item->face_graph()); } + double sliderRangeToExpandRadius(SMesh& smesh, double val) + { + double sliderMin = dock_widget->expandingRadiusSlider->minimum(); + double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; + val -= sliderMin; + sliderMin = 0; + + auto vpm = get(CGAL::vertex_point, smesh); + + auto edge_range = CGAL::edges(smesh); + + if (edge_range.begin() == edge_range.end()) + return 0; + + auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { + auto res = EPICK().compare_squared_distance_3_object()( + get(vpm, source((l), smesh)), + get(vpm, target((l), smesh)), + get(vpm, source((r), smesh)), + get(vpm, target((r), smesh))); + return res == CGAL::SMALLER; + }); + + // if edge_reference is not derefrenceble + if (edge_reference == edge_range.end()) + return 0; + + double L = sqrt( + (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) + .squared_length() + ); + + std::cout << L << std::endl; + + double outMin = 0, outMax = 5 * L, base = 1.2; + + return (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + + } + void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) { std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); - //compute once and store the value per face + + expandRadius = sliderRangeToExpandRadius(smesh, dock_widget->expandingRadiusSlider->value()); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + + //compute once and store the value per vertex bool non_init; SMesh::Property_map mu_i_map; std::tie(mu_i_map, non_init) = @@ -1565,7 +1610,7 @@ private Q_SLOTS: std::unordered_map is_source; - + double expandRadius; double minBox; double maxBox; QPixmap legend_; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_dialog.ui index 1d368c3dd592..3427d5b12e6a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_dialog.ui @@ -135,6 +135,26 @@ + + + keep vertex normals unperturbed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + seed_spinbox + + + + + + + + + + + Random seed @@ -147,7 +167,7 @@ - + @@ -163,6 +183,8 @@ seed_spinbox seed_label + keep_normal_label + keep_normal_checkbox deterministic_label deterministic_checkbox diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp index 53499b823367..9afb452ab13c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -102,6 +103,12 @@ public Q_SLOTS: if (poly_item) { SMesh& pmesh = *poly_item->face_graph(); + if(ui.keep_normal_checkbox->isChecked()) + { + SMesh::Property_map vnormals = + pmesh.add_property_map("v:normal").first; + CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh,vnormals); + } if(ui.deterministic_checkbox->isChecked()) { unsigned int seed = static_cast(ui.seed_spinbox->value()); From 127c87857cbec43e692dfd94aefbe7755029e376 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 31 Jul 2022 00:32:42 +0200 Subject: [PATCH 029/943] Use slider radius (after remapping) in curvature computation --- .../Polyhedron/Plugins/Display/Display_property_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index a2d25d167c6b..92f9df7b213d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -841,9 +841,9 @@ private Q_SLOTS: if (non_init) { if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map); + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expandRadius)); else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map); + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expandRadius)); double res_min = ARBITRARY_DBL_MAX, res_max = -ARBITRARY_DBL_MAX; From 22c0859d92fa444f0ca78b2c21bb58cf843d730d Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 31 Jul 2022 00:41:43 +0200 Subject: [PATCH 030/943] trailing spaces --- .../demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 92f9df7b213d..19afdc6728ec 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -815,7 +815,7 @@ private Q_SLOTS: (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) .squared_length() ); - + std::cout << L << std::endl; double outMin = 0, outMax = 5 * L, base = 1.2; From 9635ec14975c74beaaac9cce6f4fc6c883f5ff98 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 31 Jul 2022 18:55:51 +0200 Subject: [PATCH 031/943] minor changes on demo (wip) --- ...nterpolated_corrected_curvature_measures.h | 9 +-- .../Display/Display_property_plugin.cpp | 77 +++++++++++-------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index d36e1c67e363..1ee24fef37f5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -409,9 +409,6 @@ template::type::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); - if (r < 0.000001) - return; - typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); @@ -446,7 +443,7 @@ template(x, r, c); - if (f_ratio > 0.000001) + if (f_ratio > 0.00000001) { corrected_mui += f_ratio * get(fmm, fi); for (face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) @@ -492,7 +489,7 @@ template 0.000001) + if (v_mu0 > 0.00000001) put(vcm, v, 0.5 * get(mu1_expand_map, v) / v_mu0); else put(vcm, v, 0); @@ -528,7 +525,7 @@ template 0.000001) + if(v_mu0 > 0.00000001) put(vcm, v, get(mu2_expand_map, v) / v_mu0); else put(vcm, v, 0); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 19afdc6728ec..91deb90680a8 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -487,8 +487,10 @@ class DisplayPropertyPlugin : connect(scene_obj, SIGNAL(itemIndexSelected(int)), this,SLOT(detectScalarProperties(int))); - on_propertyBox_currentIndexChanged(0); + connect(dock_widget->expandingRadiusSlider, SIGNAL(valueChanged(int)), + this, SLOT(setExpandingRadius(int))); + on_propertyBox_currentIndexChanged(0); } private: @@ -716,6 +718,10 @@ private Q_SLOTS: { Scene_surface_mesh_item* item = qobject_cast(sender()); + + maxEdgeLength = -1; + setExpandingRadius(dock_widget->expandingRadiusSlider->value()); + if(!item) return; SMesh& smesh = *item->face_graph(); @@ -784,43 +790,56 @@ private Q_SLOTS: treat_sm_property("f:jacobian", item->face_graph()); } - double sliderRangeToExpandRadius(SMesh& smesh, double val) + void setExpandingRadius(int val_int) { double sliderMin = dock_widget->expandingRadiusSlider->minimum(); double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; - val -= sliderMin; + double val = val_int - sliderMin; sliderMin = 0; - auto vpm = get(CGAL::vertex_point, smesh); - - auto edge_range = CGAL::edges(smesh); - - if (edge_range.begin() == edge_range.end()) - return 0; + SMesh& smesh = *(qobject_cast(scene->item(scene->mainSelectionIndex())))->face_graph(); - auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { - auto res = EPICK().compare_squared_distance_3_object()( - get(vpm, source((l), smesh)), - get(vpm, target((l), smesh)), - get(vpm, source((r), smesh)), - get(vpm, target((r), smesh))); - return res == CGAL::SMALLER; - }); + auto vpm = get(CGAL::vertex_point, smesh); - // if edge_reference is not derefrenceble - if (edge_reference == edge_range.end()) - return 0; + if (maxEdgeLength < 0) + { + auto edge_range = CGAL::edges(smesh); - double L = sqrt( - (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) - .squared_length() - ); + if (edge_range.begin() == edge_range.end()) + { + expandRadius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + return; + } - std::cout << L << std::endl; + auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { + auto res = EPICK().compare_squared_distance_3_object()( + get(vpm, source((l), smesh)), + get(vpm, target((l), smesh)), + get(vpm, source((r), smesh)), + get(vpm, target((r), smesh))); + return res == CGAL::SMALLER; + }); + + // if edge_reference is not derefrenceble + if (edge_reference == edge_range.end()) + { + expandRadius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + return; + } - double outMin = 0, outMax = 5 * L, base = 1.2; + maxEdgeLength = sqrt( + (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) + .squared_length() + ); - return (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + } + + double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; + + expandRadius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); } @@ -830,9 +849,6 @@ private Q_SLOTS: "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); - expandRadius = sliderRangeToExpandRadius(smesh, dock_widget->expandingRadiusSlider->value()); - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); - //compute once and store the value per vertex bool non_init; SMesh::Property_map mu_i_map; @@ -1611,6 +1627,7 @@ private Q_SLOTS: std::unordered_map is_source; double expandRadius; + double maxEdgeLength = -1; double minBox; double maxBox; QPixmap legend_; From 765220a4661743db3367676f6723cdc9dd23ccce Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 31 Jul 2022 20:03:33 +0200 Subject: [PATCH 032/943] removing the switch from measures functions (for optimization) --- ...nterpolated_corrected_curvature_measures.h | 277 ++++++++++-------- 1 file changed, 151 insertions(+), 126 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 1ee24fef37f5..250ea596c1c3 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -26,6 +26,7 @@ #include #include #include +#include namespace CGAL { @@ -46,207 +47,215 @@ enum Curvature_measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific triangle. +* computes the interpolated corrected area measure of a specific face. * * @tparam GT is the geometric traits class. * -* @param x0 is the position of vertex #0. -* @param x1 is the position of vertex #1. -* @param x2 is the position of vertex #2. -* @param u0 is the normal vector of vertex #0. -* @param u1 is the normal vector of vertex #1. -* @param u2 is the normal vector of vertex #2. -* @param mu_i an enum for choosing between computing the area measure, -* the mean curvature measure, or the gaussian curvature measure. +* @param x is a vector of the vertex positions of the face. +* @param u is a vector of the vertex nomrals of the face. * * @return a scalar of type `GT::FT`. -* This is the value of the interpolated corrected measure of the given triangle. +* This is the value of the interpolated corrected area measure of the given face. * -* @see `interpolated_corrected_measure_face()` -* @see `interpolated_corrected_measure_quad()` +* @see `interpolated_corrected_mean_curvature_measure_face()` +* @see `interpolated_corrected_gaussian_curvature_measure_face()` +* @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_measure_triangle(const typename GT::Vector_3 x0, - const typename GT::Vector_3 x1, - const typename GT::Vector_3 x2, - const typename GT::Vector_3 u0, - const typename GT::Vector_3 u1, - const typename GT::Vector_3 u2, - const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_area_measure_face(const std::vector& x, + const std::vector& u) { + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + typename GT::Construct_cross_product_vector_3 cross_product; - switch (mu_i) + + // Triangle: use triangle formula + if (n == 3) { - case MU0_AREA_MEASURE: + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + return 0.5 * um * cross_product(x[1] - x[0], x[2] - x[0]); + } + // Quad: use bilinear interpolation formula + else if (n == 4) { - const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; - - return 0.5 * um * cross_product(x1 - x0, x2 - x0); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + return (1 / 36.0) * ( + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) + ); } - case MU1_MEAN_CURVATURE_MEASURE: + // N-gon: split into n triangles by polygon center and use triangle formula for each + else { - const typename GT::Vector_3 um = (u0 + u1 + u2) / 3.0; + typename GT::FT mu0 = 0; - return 0.5 * um * (cross_product(u2 - u1, x0) - + cross_product(u0 - u2, x1) - + cross_product(u1 - u0, x2)); - } - case MU2_GAUSSIAN_CURVATURE_MEASURE: + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; - return 0.5 * u0 * cross_product(u1, u2); + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); - default: return 0; + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + const typename GT::Vector_3 um = (u[i] + u[(i + 1) % n] + uc) / 3.0; + mu0 += 0.5 * um * cross_product(x[(i + 1) % n] - x[i], xc - x[i]); + } + return mu0; } } /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific quad -* Note that the vertices 0 to 3 are ordered like this \n -* v0 _ v1 \n -* v2 |_| v3 +* computes the interpolated corrected mean curvature measure of a specific face. * * @tparam GT is the geometric traits class. * -* @param x0 is the position of vertex #0. -* @param x1 is the position of vertex #1. -* @param x2 is the position of vertex #2. -* @param x3 is the position of vertex #3. -* @param u0 is the normal vector of vertex #0. -* @param u1 is the normal vector of vertex #1. -* @param u2 is the normal vector of vertex #2. -* @param u3 is the normal vector of vertex #3. -* @param mu_i an enum for choosing between computing the area measure, -* the mean curvature measure, or the gaussian curvature measure. +* @param x is a vector of the vertex positions of the face. +* @param u is a vector of the vertex nomrals of the face. * * @return a scalar of type `GT::FT`. -* This is the value of the interpolated corrected measure of the given triangle. +* This is the value of the interpolated corrected mean curvature measure of the given face. * -* @see `interpolated_corrected_measure_face()` -* @see `interpolated_corrected_measure_triangle()` +* @see `interpolated_corrected_gaussian_curvature_measure_face()` +* @see `interpolated_corrected_area_measure_face()` +* @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_measure_quad(const typename GT::Vector_3 x0, - const typename GT::Vector_3 x1, - const typename GT::Vector_3 x2, - const typename GT::Vector_3 x3, - const typename GT::Vector_3 u0, - const typename GT::Vector_3 u1, - const typename GT::Vector_3 u2, - const typename GT::Vector_3 u3, - const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& x, + const std::vector& u) { - // x0 _ x1 - // x2 |_| x3 + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + typename GT::Construct_cross_product_vector_3 cross_product; - switch (mu_i) - { - case MU0_AREA_MEASURE: - return (1 / 36.0) * ( - (4 * u0 + 2 * u1 + 2 * u2 + u3) * cross_product(x1 - x0, x2 - x0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * cross_product(x1 - x0, x3 - x1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * cross_product(x3 - x2, x2 - x0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * cross_product(x3 - x2, x3 - x1) - ); + // Triangle: use triangle formula + if (n == 3) + { + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; - case MU1_MEAN_CURVATURE_MEASURE: + return 0.5 * um * (cross_product(u[2] - u[1], x[0]) + + cross_product(u[0] - u[2], x[1]) + + cross_product(u[1] - u[0], x[2])); + } + // Quad: use bilinear interpolation formula + else if (n == 4) { - const typename GT::Vector_3 u03 = u3 - u0; - const typename GT::Vector_3 u12 = u2 - u1; - const typename GT::Vector_3 x0_cross = cross_product(u12, x0); - const typename GT::Vector_3 x1_cross = -cross_product(u03, x1); - const typename GT::Vector_3 x2_cross = cross_product(u03, x2); - const typename GT::Vector_3 x3_cross = -cross_product(u12, x3); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 u13 = u[3] - u[1]; + const typename GT::Vector_3 x0_cross = cross_product(u13, x[0]); + const typename GT::Vector_3 x1_cross = -cross_product(u02, x[1]); + const typename GT::Vector_3 x3_cross = cross_product(u02, x[3]); + const typename GT::Vector_3 x2_cross = -cross_product(u13, x[2]); return (1 / 12.0) * ( - u0 * (2 * x0_cross - cross_product((u2 + u3), x1) + cross_product((u1 + u3), x2) + x3_cross) - + u1 * (cross_product((u2 + u3), x0) + 2 * x1_cross + x2_cross - cross_product((u0 + u2), x3)) - + u2 * (-cross_product((u1 + u3), x0) + x1_cross + 2 * x2_cross + cross_product((u0 + u1), x3)) - + u3 * (x0_cross + cross_product((u0 + u2), x1) - cross_product((u0 + u1), x2) + 2 * x3_cross) + u[0] * (2 * x0_cross - cross_product((u[3] + u[2]), x[1]) + cross_product((u[1] + u[2]), x[3]) + x2_cross) + + u[1] * (cross_product((u[3] + u[2]), x[0]) + 2 * x1_cross + x3_cross - cross_product((u[0] + u[3]), x[2])) + + u[3] * (-cross_product((u[1] + u[2]), x[0]) + x1_cross + 2 * x3_cross + cross_product((u[0] + u[1]), x[2])) + + u[2] * (x0_cross + cross_product((u[0] + u[3]), x[1]) - cross_product((u[0] + u[1]), x[3]) + 2 * x2_cross) ); } - case MU2_GAUSSIAN_CURVATURE_MEASURE: + // N-gon: split into n triangles by polygon center and use triangle formula for each + else + { + typename GT::FT mu1 = 0; - return (1 / 36.0) * ( - (4 * u0 + 2 * u1 + 2 * u2 + u3) * cross_product(u1 - u0, u2 - u0) - + (2 * u0 + 4 * u1 + u2 + 2 * u3) * cross_product(u1 - u0, u3 - u1) - + (2 * u0 + u1 + 4 * u2 + 2 * u3) * cross_product(u3 - u2, u2 - u0) - + (u0 + 2 * u1 + 2 * u2 + 4 * u3) * cross_product(u3 - u2, u3 - u1) - ); + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); - default: return 0; + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + const typename GT::Vector_3 um = (u[i] + u[(i+1)%n] + uc) / 3.0; + mu1 += 0.5 * um * (cross_product(uc - u[(i + 1) % n], x[i]) + + cross_product(u[i] - uc, x[(i + 1) % n]) + + cross_product(u[(i + 1) % n] - u[i], xc)); + } + return mu1; } } - /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected measure of specific face. +* computes the interpolated corrected gaussian curvature measure of a specific face. * * @tparam GT is the geometric traits class. * * @param x is a vector of the vertex positions of the face. * @param u is a vector of the vertex nomrals of the face. -* @param mu_i an enum for choosing between computing the area measure, -* the mean curvature measure, or the gaussian curvature measure. * * @return a scalar of type `GT::FT`. -* This is the value of the interpolated corrected measure of the given face. +* This is the value of the interpolated corrected gaussian curvature measure of the given face. * -* @see `interpolated_corrected_measure_triangle()` -* @see `interpolated_corrected_measure_quad()` +* @see `interpolated_corrected_mean_curvature_measure_face()` +* @see `interpolated_corrected_area_measure_face()` * @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_measure_face(const std::vector& x, - const std::vector& u, - const Curvature_measure_index mu_i) +typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& x, + const std::vector& u) { - std::size_t n = x.size(); - CGAL_precondition(u.size() == n); + std::size_t n = u.size(); CGAL_precondition(n >= 3); - // Triangle: use triangle formulas - if (n == 3) - return interpolated_corrected_measure_triangle(x[0], x[1], x[2], - u[0], u[1], u[2], mu_i); + typename GT::Construct_cross_product_vector_3 cross_product; - // Quad: use bilinear interpolation formulas + // Triangle: use triangle formula + if (n == 3) + { + return 0.5 * u[0] * cross_product(u[1], u[2]); + } + // Quad: use bilinear interpolation formula else if (n == 4) - // x[0] _ x[1] ---> x0 _ x1 (reason for changing order) - // x[3] |_| x[2] ---> x2 |_| x3 - return interpolated_corrected_measure_quad(x[0], x[1], x[3], x[2], - u[0], u[1], u[3], u[2], mu_i); - - // N-gon: split into n triangles by barycenter and use triangle formulas for each - else { - typename GT::FT mu0 = 0; - - // getting center of points - typename GT::Vector_3 xm = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xm /= n; + { + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + return (1 / 36.0) * ( + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(x[1] - x[0], x[3] - x[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(x[1] - x[0], x[2] - x[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(x[2] - x[3], x[3] - x[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(x[2] - x[3], x[2] - x[1]) + ); + } + // N-gon: split into n triangles by polygon center and use triangle formula for each + else + { + typename GT::FT mu2 = 0; // getting unit average normal of points - typename GT::Vector_3 um = + typename GT::Vector_3 uc = std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - um /= sqrt(um * um); + uc /= sqrt(uc * uc); // summing each triangle's measure after triangulation by barycenter split. for (std::size_t i = 0; i < n; i++) { - mu0 += interpolated_corrected_measure_triangle(x[i], x[(i + 1) % n], xm, - u[i], u[(i + 1) % n], um, mu_i); + mu2 += 0.5 * u[i] * cross_product(u[(i + 1) % n], uc); } - return mu0; + return mu2; } } - /** * \ingroup PMP_corrected_curvatures_grp * @@ -322,6 +331,22 @@ template::value) compute_vertex_normals(pmesh, vnm, np); + std::function + &, const std::vector&)> + iccm_function; + switch (mu_i) + { + case MU0_AREA_MEASURE: + iccm_function = &interpolated_corrected_area_measure_face; + break; + case MU1_MEAN_CURVATURE_MEASURE: + iccm_function = &interpolated_corrected_mean_curvature_measure_face; + break; + case MU2_GAUSSIAN_CURVATURE_MEASURE: + iccm_function = &interpolated_corrected_gaussian_curvature_measure_face; + break; + } + for (face_descriptor f : faces(pmesh)) { std::vector x; @@ -334,7 +359,7 @@ template(x, u, mu_i)); + put(fmm, f, iccm_function(x, u)); } } From 870c27670b52912cad7946c8e93e2993c473bb0d Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 1 Aug 2022 08:15:18 +0200 Subject: [PATCH 033/943] minor fixes (typename, doc) --- .../Curvatures/interpolated_corrected_curvature_measures.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 250ea596c1c3..c9a70ee12ec8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -295,7 +295,9 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std * * \cgalNamedParamsEnd * -* @see `interpolated_corrected_measure_face()` +* @see `interpolated_corrected_area_measure_face()` +* @see `interpolated_corrected_mean_curvature_measure_face()` +* @see `interpolated_corrected_gaussian_curvature_measure_face()` */ template @@ -332,7 +334,7 @@ template&, const std::vector&)> + &, const std::vector&)> iccm_function; switch (mu_i) { From 34b776d6c2e6ce0ec8cf54c6139478fb86b3c48e Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 1 Aug 2022 08:35:06 +0200 Subject: [PATCH 034/943] trailing spaces --- .../Polyhedron/Plugins/Display/Display_property_plugin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 91deb90680a8..66187583657e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -721,7 +721,7 @@ private Q_SLOTS: maxEdgeLength = -1; setExpandingRadius(dock_widget->expandingRadiusSlider->value()); - + if(!item) return; SMesh& smesh = *item->face_graph(); @@ -835,9 +835,9 @@ private Q_SLOTS: ); } - + double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; - + expandRadius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); From 09cb2b1e6d1b78fe4e19031c40abb42fd12505cf Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 2 Aug 2022 23:12:23 +0200 Subject: [PATCH 035/943] some refactoring + implemented the anisotropic formulas function --- ...nterpolated_corrected_curvature_measures.h | 162 ++++++++++++++++-- 1 file changed, 143 insertions(+), 19 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index c9a70ee12ec8..1032413a9c5c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -47,7 +47,7 @@ enum Curvature_measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected area measure of a specific face. +* computes the interpolated corrected area measure (mu0) of a specific face. * * @tparam GT is the geometric traits class. * @@ -62,8 +62,8 @@ enum Curvature_measure_index { * @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_area_measure_face(const std::vector& x, - const std::vector& u) +typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, + const std::vector& x = {}) { std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -81,6 +81,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector( + std::vector {u[i], u[i + 1 % n], uc}, + std::vector {x[i], x[i + 1 % n], xc} + ); } return mu0; } @@ -116,7 +119,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector -typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& x, - const std::vector& u) +typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, + const std::vector& x = {}) { std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -153,6 +156,7 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve else if (n == 4) { // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 const typename GT::Vector_3 u02 = u[2] - u[0]; const typename GT::Vector_3 u13 = u[3] - u[1]; @@ -186,10 +190,10 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve // summing each triangle's measure after triangulation by barycenter split. for (std::size_t i = 0; i < n; i++) { - const typename GT::Vector_3 um = (u[i] + u[(i+1)%n] + uc) / 3.0; - mu1 += 0.5 * um * (cross_product(uc - u[(i + 1) % n], x[i]) - + cross_product(u[i] - uc, x[(i + 1) % n]) - + cross_product(u[(i + 1) % n] - u[i], xc)); + mu1 += interpolated_corrected_mean_curvature_measure_face( + std::vector {u[i], u[i + 1 % n], uc}, + std::vector {x[i], x[i + 1 % n], xc} + ); } return mu1; } @@ -198,7 +202,7 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected gaussian curvature measure of a specific face. +* computes the interpolated corrected gaussian curvature measure (mu2) of a specific face. * * @tparam GT is the geometric traits class. * @@ -213,8 +217,8 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve * @see `interpolated_corrected_measure_mesh()` */ template -typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& x, - const std::vector& u) +typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, + const std::vector& x = {}) { std::size_t n = u.size(); CGAL_precondition(n >= 3); @@ -230,6 +234,7 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std else if (n == 4) { // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 return (1 / 36.0) * ( (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(x[1] - x[0], x[3] - x[0]) + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(x[1] - x[0], x[2] - x[1]) @@ -250,12 +255,131 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std // summing each triangle's measure after triangulation by barycenter split. for (std::size_t i = 0; i < n; i++) { - mu2 += 0.5 * u[i] * cross_product(u[(i + 1) % n], uc); + mu2 += interpolated_corrected_gaussian_curvature_measure_face( + std::vector {u[i], u[i + 1 % n], uc} + ); } return mu2; } } +/** +* \ingroup PMP_corrected_curvatures_grp +* +* computes the interpolated corrected anisotropic measure (muXY) of a specific face. +* +* @tparam GT is the geometric traits class. +* +* @param u is a vector of the vertex nomrals of the face. +* @param x is a vector of the vertex positions of the face. +* +* @return an array of scalar values for each combination of the standard basis (3x3) of type `std::array`. +* These are the values of the interpolated corrected anisotropic measure of the given face. +* +* @see `interpolated_corrected_anisotropic_measure_mesh()` +*/ +template +std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, + const std::vector& x) +{ + std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + typename GT::Construct_cross_product_vector_3 cross_product; + std::array muXY; + + // Triangle: use triangle formula + if (n == 3) + { + const typename GT::Vector_3 u01 = u[1] - u[0]; + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 x01 = x[1] - x[0]; + const typename GT::Vector_3 x02 = x[2] - x[0]; + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + + for (std::size_t ix = 0; ix < 3; ix++) + { + const typename GT::Vector_3 X(0, 0, 0); + X[ix] = 1; + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); + } + } + // Quad: use bilinear interpolation formula + else if (n == 4) + { + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + for (std::size_t ix = 0; ix < 3; ix++) + { + const typename GT::Vector_3 X(0, 0, 0); + X[ix] = 1; + const typename GT::Vector_3 u0xX = cross_product(u[0], X); + const typename GT::Vector_3 u1xX = cross_product(u[1], X); + const typename GT::Vector_3 u2xX = cross_product(u[2], X); + const typename GT::Vector_3 u3xX = cross_product(u[3], X); + + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = (1 / 72.0) * ( + + u[0][iy] * ( u0xX * ( - x[0] - 11 * x[1] + 13 * x[3] - x[2]) + + u1xX * ( -5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) + + u3xX * ( x[0] - 7 * x[1] + 11 * x[3] - 5 * x[2]) + + u2xX * ( - x[0] - 5 * x[1] + 7 * x[3] - x[2]) + ) + + u[1][iy] * ( u0xX * ( 13 * x[0] - x[1] - 7 * x[3] - 5 * x[2]) + + u1xX * ( 17 * x[0] - 5 * x[1] - 5 * x[3] - 7 * x[2]) + + u3xX * ( 5 * x[0] + x[1] + x[3] - 7 * x[2]) + + u2xX * ( 7 * x[0] - x[1] + 5 * x[3] - 11 * x[2]) + ) + + u[2][iy] * ( u0xX * (-11 * x[0] + 5 * x[1] - x[3] + 7 * x[2]) + + u1xX * (- 7 * x[0] + x[1] + x[3] + 5 * x[2]) + + u3xX * (- 7 * x[0] - 5 * x[1] - 5 * x[3] + 17 * x[2]) + + u2xX * (- 5 * x[0] - 7 * x[1] - x[3] + 13 * x[2]) + ) + + u[3][iy] * ( u0xX * (- x[0] + 7 * x[1] - 5 * x[3] - x[2]) + + u1xX * (- 5 * x[0] + 11 * x[1] - 7 * x[3] + x[2]) + + u3xX * ( x[0] + 11 * x[1] - 7 * x[3] - 5 * x[2]) + + u2xX * (- x[0] + 13 * x[1] - 11 * x[3] - x[2]) + ) + + ); + } + } + // N-gon: split into n triangles by polygon center and use triangle formula for each + else + { + typename GT::FT muXY = 0; + + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + std::array muXY_curr_triangle = + interpolated_corrected_anisotropic_measure_face( + std::vector {u[i], u[i + 1 % n], uc}, + std::vector {x[i], x[i + 1 % n], xc} + ); + + for (std::size_t ix = 0; ix < 3; ix++) + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] += muXY_curr_triangle[ix * 3 + iy]; + } + } + return muXY; +} + + /** * \ingroup PMP_corrected_curvatures_grp * @@ -333,6 +457,8 @@ template::value) compute_vertex_normals(pmesh, vnm, np); + typedef typename property_map_value::type measure; + std::function &, const std::vector&)> iccm_function; @@ -361,7 +487,7 @@ template Date: Wed, 3 Aug 2022 14:30:52 +0200 Subject: [PATCH 036/943] Principal Curvatures wip --- .../interpolated_corrected_curvatures.cpp | 2 +- ...nterpolated_corrected_curvature_measures.h | 266 +++++++++++++++++- 2 files changed, 260 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 5359315f0fa0..4b8a9e6cfe7d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -25,7 +25,7 @@ int main(int argc, char* argv[]) Mesh g1; const std::string filename = (argc>1) ? argv[1] : - CGAL::data_file_path("meshes/cylinder.off"); + CGAL::data_file_path("meshes/sphere_diff_faces.obj"); if(!CGAL::IO::read_polygon_mesh(filename, g1)) { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 1032413a9c5c..618124e7fc74 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -13,7 +13,6 @@ #ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H #define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H -#endif #include @@ -22,6 +21,7 @@ #include #include #include +#include #include #include @@ -82,7 +82,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector`. +* @return an array of scalar values for each combination of the standard basis (3x3) of type `std::array`. * These are the values of the interpolated corrected anisotropic measure of the given face. * * @see `interpolated_corrected_anisotropic_measure_mesh()` @@ -321,7 +321,7 @@ std::array interpolated_corrected_anisotropic_measure_fa const typename GT::Vector_3 u3xX = cross_product(u[3], X); for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] = (1 / 72.0) * ( + muXY[ix * 3 + iy] = (1.0 / 72.0) * ( u[0][iy] * ( u0xX * ( - x[0] - 11 * x[1] + 13 * x[3] - x[2]) + u1xX * ( -5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) @@ -433,6 +433,7 @@ template::type GT; + typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::%face_descriptor` as key type and `std::array` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals should be +* computed inside the function body.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `interpolated_corrected_anisotropic_measure_face()` +* @see `interpolated_corrected_measure_mesh()` +*/ +template + void + interpolated_corrected_anisotropic_measure_mesh(const PolygonMesh& pmesh, + FaceMeasureMap fmm, + const NamedParameters& np = parameters::default_values()) +{ + + typedef typename GetGeomTraits::type GT; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type VNM; + + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); + + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + + for (face_descriptor f : faces(pmesh)) + { + std::vector x; + std::vector u; + + for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + typename GT::Point_3 p = get(vpm, v); + x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); + } + + put(fmm, f, interpolated_corrected_anisotropic_measure_face(u, x)); + } +} + + // //template //typename GT::FT triangle_in_ball_ratio_1(const typename GT::Vector_3 x1, @@ -556,6 +649,7 @@ template::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; @@ -613,6 +707,85 @@ template + void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, + FaceMeasureMap fmm, + VertexCurvatureMap vcm, + const typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) +{ + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef typename GetGeomTraits::type GT; + + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + + const typename GetGeomTraits::type::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); + + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + + std::queue bfs_q; + std::unordered_set bfs_v; + + typename GT::Point_3 vp = get(vpm, v); + typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); + + Eigen::Matrix corrected_muXY = { + { 0.0, 0.0, 0.0}, + { 0.0, 0.0, 0.0}, + { 0.0, 0.0, 0.0} + }; + + for (face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_q.push(f); + bfs_v.insert(f); + } + } + while (!bfs_q.empty()) { + face_descriptor fi = bfs_q.front(); + bfs_q.pop(); + + // looping over vertices in face to get point coordinates + std::vector x; + for (vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + typename GT::Point_3 pi = get(vpm, vi); + x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); + } + + const typename GT::FT f_ratio = face_in_ball_ratio_2(x, r, c); + + if (f_ratio > 0.00000001) + { + std::array muXY_face = get(fmm, fi); + + for (std::size_t ix = 0; ix < 3; ix++) + for (std::size_t iy = 0; iy < 3; iy++) + corrected_muXY(ix, iy) += muXY_face[ix * 3 + iy]; + + for (face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_v.find(fj) == bfs_v.end() && fj != boost::graph_traits::null_face()) + { + bfs_q.push(fj); + bfs_v.insert(fj); + } + } + } + } + + put(vcm, v, corrected_muXY); +} + template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, @@ -620,8 +793,10 @@ template::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef std::unordered_map VertexMeasureMap_tag; @@ -656,8 +831,10 @@ template::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef std::unordered_map VertexMeasureMap_tag; @@ -685,5 +862,80 @@ template + void interpolated_corrected_principal_curvature(const PolygonMesh& pmesh, + VertexCurvatureMap vcm, + const NamedParameters& np = parameters::default_values()) +{ + typedef typename GetGeomTraits::type GT; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type VNM; + + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + typename GetVertexPointMap::const_type + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); + + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef std::unordered_map FaceScalarMeasureMap_tag; + // using std:: array to store FT values on the 9 combinations of the standard 3D basis + typedef std::unordered_map> FaceArrayMeasureMap_tag; + + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef std::unordered_map VertexScalarMeasureMap_tag; + // using Eigen matrix to store & Process FT values on the 9 combinations of the standard 3D basis + typedef std::unordered_map> VertexMatrixMeasureMap_tag; + + + FaceScalarMeasureMap_tag mu0_init; + boost::associative_property_map + mu0_map(mu0_init); + + FaceArrayMeasureMap_tag muXY_init; + boost::associative_property_map + muXY_map(muXY_init); + + VertexScalarMeasureMap_tag mu0_expand_init; + boost::associative_property_map + mu0_expand_map(mu0_expand_init); + + VertexMatrixMeasureMap_tag muXY_expand_init; + boost::associative_property_map + muXY_expand_map(muXY_expand_init); + + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); + interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map); + + for (vertex_descriptor v : vertices(pmesh)) + { + expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu0_expand_map, v, np); + expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, muXY_map, muXY_expand_map, v, np); + + + + /*typename GT::FT v_mu0 = get(mu0_expand_map, v); + if (v_mu0 > 0.00000001) + put(vcm, v, get(mu2_expand_map, v) / v_mu0); + else + put(vcm, v, 0);*/ + } } -} + +} // namespace Polygon_mesh_processing +} // namespace CGAL + +#endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H \ No newline at end of file From 24edaa24b5fc54bf85ac21b9c291610da6bbbf1c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 3 Aug 2022 18:59:08 +0200 Subject: [PATCH 037/943] principal curvatures (yet to decompose MuXY Matrix) --- .../interpolated_corrected_curvatures.cpp | 23 ++++++++++-- ...nterpolated_corrected_curvature_measures.h | 36 +++++++++++++------ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 4b8a9e6cfe7d..28e6e0ef81cb 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -18,6 +18,14 @@ typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef std::unordered_map FaceMeasureMap_tag; typedef std::unordered_map vertexMeasureMap_tag; +typedef std::unordered_map, + Eigen::Vector + >> +vertexPrincipleCurvatureMap_tag; + int main(int argc, char* argv[]) @@ -38,16 +46,27 @@ int main(int argc, char* argv[]) boost::associative_property_map mean_curvature_map(mean_curvature_init), gaussian_curvature_map(gaussian_curvature_init); + vertexPrincipleCurvatureMap_tag principle_curvature_init; + boost::associative_property_map principle_curvature_map(principle_curvature_init); + PMP::interpolated_corrected_mean_curvature( g1, mean_curvature_map - ); + ); PMP::interpolated_corrected_gaussian_curvature( g1, gaussian_curvature_map ); + PMP::interpolated_corrected_principal_curvatures( + g1, + principle_curvature_map + ); for (vertex_descriptor v : vertices(g1)) + { + auto PC = get(principle_curvature_map, v); std::cout << v.idx() << ": HC = " << get(mean_curvature_map, v) - << ", GC = " << get(gaussian_curvature_map, v) << "\n"; + << ", GC = " << get(gaussian_curvature_map, v) << "\n" + << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; + } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 618124e7fc74..83f63b74b54e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -690,7 +690,7 @@ template(x, r, c); - if (f_ratio > 0.00000001) + if (f_ratio != 0.0) { corrected_mui += f_ratio * get(fmm, fi); for (face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) @@ -764,7 +764,7 @@ template(x, r, c); - if (f_ratio > 0.00000001) + if (f_ratio != 0.0) { std::array muXY_face = get(fmm, fi); @@ -817,7 +817,7 @@ template 0.00000001) + if (v_mu0 != 0.0) put(vcm, v, 0.5 * get(mu1_expand_map, v) / v_mu0); else put(vcm, v, 0); @@ -855,7 +855,7 @@ template 0.00000001) + if(v_mu0 != 0.0) put(vcm, v, get(mu2_expand_map, v) / v_mu0); else put(vcm, v, 0); @@ -864,7 +864,7 @@ template - void interpolated_corrected_principal_curvature(const PolygonMesh& pmesh, + void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, VertexCurvatureMap vcm, const NamedParameters& np = parameters::default_values()) { @@ -925,13 +925,27 @@ template v_muXY = get(muXY_expand_map, v); + typename GT::Vector_3 u_GT = get(vnm, v); - - /*typename GT::FT v_mu0 = get(mu0_expand_map, v); - if (v_mu0 > 0.00000001) - put(vcm, v, get(mu2_expand_map, v) / v_mu0); - else - put(vcm, v, 0);*/ + Eigen::Vector u(u_GT.x(), u_GT.y(), u_GT.z()); + + const typename GT::FT K = 1000 * v_mu0; + + v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); + + Eigen::Vector eig_vals; + Eigen::Matrix eig_vecs; + + + //(WIP) + EigenDecomposition< 3, typename GT::FT>::getEigenDecomposition(v_muXY, eig_vecs, eig_vals); + + put(vcm, v, std::make_tuple((v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, + eig_vecs.column(0), + eig_vecs.column(1))); } } From 24551e2cbb2b38db5aabc2f31395c38651e3d635 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:51:45 +0200 Subject: [PATCH 038/943] principal curvatures completed (but not properly tested) --- .../interpolated_corrected_curvatures.cpp | 2 +- ...nterpolated_corrected_curvature_measures.h | 60 ++++++++++++------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 28e6e0ef81cb..b804ae061cf4 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) Mesh g1; const std::string filename = (argc>1) ? argv[1] : - CGAL::data_file_path("meshes/sphere_diff_faces.obj"); + CGAL::data_file_path("meshes/small_bunny.obj"); if(!CGAL::IO::read_polygon_mesh(filename, g1)) { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 83f63b74b54e..4b6a2f5149d9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include @@ -287,7 +287,7 @@ std::array interpolated_corrected_anisotropic_measure_fa CGAL_precondition(n >= 3); typename GT::Construct_cross_product_vector_3 cross_product; - std::array muXY; + std::array muXY {0}; // Triangle: use triangle formula if (n == 3) @@ -300,8 +300,14 @@ std::array interpolated_corrected_anisotropic_measure_fa for (std::size_t ix = 0; ix < 3; ix++) { - const typename GT::Vector_3 X(0, 0, 0); - X[ix] = 1; + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); + for (std::size_t iy = 0; iy < 3; iy++) muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); } @@ -313,8 +319,14 @@ std::array interpolated_corrected_anisotropic_measure_fa // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 for (std::size_t ix = 0; ix < 3; ix++) { - const typename GT::Vector_3 X(0, 0, 0); - X[ix] = 1; + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); + const typename GT::Vector_3 u0xX = cross_product(u[0], X); const typename GT::Vector_3 u1xX = cross_product(u[1], X); const typename GT::Vector_3 u2xX = cross_product(u[2], X); @@ -350,8 +362,6 @@ std::array interpolated_corrected_anisotropic_measure_fa // N-gon: split into n triangles by polygon center and use triangle formula for each else { - typename GT::FT muXY = 0; - // getting center of points typename GT::Vector_3 xc = std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); @@ -654,7 +664,7 @@ template::vertex_descriptor vertex_descriptor; const typename GetGeomTraits::type::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.1); typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), @@ -737,11 +747,7 @@ template corrected_muXY = { - { 0.0, 0.0, 0.0}, - { 0.0, 0.0, 0.0}, - { 0.0, 0.0, 0.0} - }; + Eigen::Matrix corrected_muXY = Eigen::Matrix::Zero(); for (face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f != boost::graph_traits::null_face()) @@ -935,17 +941,29 @@ template eig_vals; - Eigen::Matrix eig_vecs; + //(WIP) + Eigen::SelfAdjointEigenSolver> eigensolver; + eigensolver.computeDirect(v_muXY); + + if (eigensolver.info() != Eigen::Success) + { + put(vcm, v, std::make_tuple( + 0, + 0, + Eigen::Vector(.0,.0,.0), + Eigen::Vector(.0, .0, .0))); + continue; + } - //(WIP) - EigenDecomposition< 3, typename GT::FT>::getEigenDecomposition(v_muXY, eig_vecs, eig_vals); + Eigen::Vector eig_vals = eigensolver.eigenvalues(); + Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); - put(vcm, v, std::make_tuple((v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + put(vcm, v, std::make_tuple( (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, - eig_vecs.column(0), - eig_vecs.column(1))); + (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + eig_vecs.col(1), + eig_vecs.col(0))); } } From c4db1600fda9f9fa3a50bc005db84f5122107382 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:01:09 +0200 Subject: [PATCH 039/943] trim whitespaces --- .../Curvatures/interpolated_corrected_curvature_measures.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 4b6a2f5149d9..4525628f5645 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include @@ -305,7 +305,7 @@ std::array interpolated_corrected_anisotropic_measure_fa X = typename GT::Vector_3(1, 0, 0); if (ix == 1) X = typename GT::Vector_3(0, 1, 0); - if (ix == 2) + if (ix == 2) X = typename GT::Vector_3(0, 0, 1); for (std::size_t iy = 0; iy < 3; iy++) @@ -945,7 +945,7 @@ template> eigensolver; eigensolver.computeDirect(v_muXY); - + if (eigensolver.info() != Eigen::Success) { put(vcm, v, std::make_tuple( From 85332fed6d9243a03bcb93edf8a08fc05e091799 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 5 Aug 2022 13:58:52 +0200 Subject: [PATCH 040/943] according to some of the review comments on the pull --- .../Polygon_mesh_processing/CMakeLists.txt | 9 ++-- ...nterpolated_corrected_curvature_measures.h | 51 +++++++++++-------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index d6f4e273516f..4783d957589a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polygon_mesh_processing_Examples) # CGAL and its components -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED) # Boost and its components find_package(Boost REQUIRED) @@ -102,12 +102,11 @@ create_single_source_cgal_program("orientation_pipeline_example.cpp") #create_single_source_cgal_program( "snapping_example.cpp") create_single_source_cgal_program("match_faces.cpp") create_single_source_cgal_program("cc_compatible_orientations.cpp") -create_single_source_cgal_program("interpolated_corrected_curvatures.cpp") -if(CGAL_Qt5_FOUND) +if(TARGET CGAL::Eigen3_support) - #link it with the required CGAL libraries - target_link_libraries(interpolated_corrected_curvatures PUBLIC CGAL::CGAL_Basic_viewer) + create_single_source_cgal_program("interpolated_corrected_curvatures.cpp") + target_link_libraries(interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 4525628f5645..33cbe05e576d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -17,10 +17,10 @@ #include #include -#include #include #include #include +#include #include #include @@ -83,10 +83,10 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector( - std::vector {u[i], u[i + 1 % n], uc}, - std::vector {x[i], x[i + 1 % n], xc} + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} ); } return mu0; @@ -191,8 +191,8 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve for (std::size_t i = 0; i < n; i++) { mu1 += interpolated_corrected_mean_curvature_measure_face( - std::vector {u[i], u[i + 1 % n], uc}, - std::vector {x[i], x[i + 1 % n], xc} + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} ); } return mu1; @@ -236,10 +236,10 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 return (1.0 / 36.0) * ( - (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(x[1] - x[0], x[3] - x[0]) - + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(x[1] - x[0], x[2] - x[1]) - + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(x[2] - x[3], x[3] - x[0]) - + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(x[2] - x[3], x[2] - x[1]) + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) ); } // N-gon: split into n triangles by polygon center and use triangle formula for each @@ -256,7 +256,7 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std for (std::size_t i = 0; i < n; i++) { mu2 += interpolated_corrected_gaussian_curvature_measure_face( - std::vector {u[i], u[i + 1 % n], uc} + std::vector {u[i], u[(i + 1) % n], uc} ); } return mu2; @@ -377,8 +377,8 @@ std::array interpolated_corrected_anisotropic_measure_fa { std::array muXY_curr_triangle = interpolated_corrected_anisotropic_measure_face( - std::vector {u[i], u[i + 1 % n], uc}, - std::vector {x[i], x[i + 1 % n], xc} + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} ); for (std::size_t ix = 0; ix < 3; ix++) @@ -486,10 +486,11 @@ template x; + std::vector u; + for (face_descriptor f : faces(pmesh)) { - std::vector x; - std::vector u; for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { @@ -499,6 +500,8 @@ template::value) compute_vertex_normals(pmesh, vnm, np); + std::vector x; + std::vector u; + for (face_descriptor f : faces(pmesh)) { - std::vector x; - std::vector u; for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { @@ -590,6 +594,9 @@ template(u, x)); + x.clear(); + u.clear(); + } } @@ -634,8 +641,8 @@ typename GT::FT face_in_ball_ratio_2(const std::vector& x for (const typename GT::Vector_3 xi : x) { const typename GT::FT d_sq = (xi - c).squared_length(); - d_max = std::max(d_sq, d_max); - d_min = std::min(d_sq, d_min); + d_max = (std::max)(d_sq, d_max); + d_min = (std::min)(d_sq, d_min); } if (d_max <= r * r) return 1.0; From 7473a3e2dc702b1529e40f4931b95faa81430591 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 8 Aug 2022 05:05:28 +0200 Subject: [PATCH 041/943] Optimizing the expanding functions to compute intersections only once per curvature --- ...nterpolated_corrected_curvature_measures.h | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 33cbe05e576d..289878b9a9bf 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -657,8 +657,10 @@ typename GT::FT face_in_ball_ratio_2(const std::vector& x template void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, - FaceMeasureMap fmm, - VertexCurvatureMap vcm, + FaceMeasureMap area_fmm, + FaceMeasureMap curvature_fmm, + VertexCurvatureMap area_vcm, + VertexCurvatureMap curvature_vcm, const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { @@ -684,6 +686,7 @@ template::null_face()) @@ -720,15 +724,18 @@ template void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, - FaceMeasureMap fmm, - VertexCurvatureMap vcm, + AreaFaceMeasureMap area_fmm, + AnisotropicFaceMeasureMap aniso_fmm, + AreaVertexCurvatureMap area_vcm, + AnisotropicVertexCurvatureMap aniso_vcm, const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { @@ -754,6 +761,7 @@ template corrected_muXY = Eigen::Matrix::Zero(); for (face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { @@ -779,7 +787,9 @@ template muXY_face = get(fmm, fi); + corrected_mu0 += f_ratio * get(area_fmm, fi); + + std::array muXY_face = get(aniso_fmm, fi); for (std::size_t ix = 0; ix < 3; ix++) for (std::size_t iy = 0; iy < 3; iy++) @@ -795,8 +805,8 @@ template v_muXY = get(muXY_expand_map, v); From 36d0fd4e5b3c5d5bfaed59ef3f9f8528aed486f1 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 8 Aug 2022 05:41:34 +0200 Subject: [PATCH 042/943] using internal property (SurfMesh) in example --- .../interpolated_corrected_curvatures.cpp | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index b804ae061cf4..c8b972aca658 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -9,24 +9,12 @@ #include #include - namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; typedef CGAL::Surface_mesh Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; -typedef std::unordered_map FaceMeasureMap_tag; -typedef std::unordered_map vertexMeasureMap_tag; -typedef std::unordered_map, - Eigen::Vector - >> -vertexPrincipleCurvatureMap_tag; - - int main(int argc, char* argv[]) { @@ -41,13 +29,31 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } + bool created = false; + + Mesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); + assert(created); + + boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); + assert(created); - vertexMeasureMap_tag mean_curvature_init, gaussian_curvature_init; - boost::associative_property_map - mean_curvature_map(mean_curvature_init), gaussian_curvature_map(gaussian_curvature_init); + Mesh::Property_map, + Eigen::Vector + >> principle_curvature_map; - vertexPrincipleCurvatureMap_tag principle_curvature_init; - boost::associative_property_map principle_curvature_map(principle_curvature_init); + boost::tie(principle_curvature_map, created) = g1.add_property_map, + Eigen::Vector + >>("v:principle_curvature_map", { 0, 0, + Eigen::Vector::Zero(), + Eigen::Vector::Zero() }); + assert(created); PMP::interpolated_corrected_mean_curvature( g1, @@ -64,9 +70,9 @@ int main(int argc, char* argv[]) for (vertex_descriptor v : vertices(g1)) { - auto PC = get(principle_curvature_map, v); - std::cout << v.idx() << ": HC = " << get(mean_curvature_map, v) - << ", GC = " << get(gaussian_curvature_map, v) << "\n" + auto PC = principle_curvature_map[v]; + std::cout << v.idx() << ": HC = " << mean_curvature_map[v] + << ", GC = " << gaussian_curvature_map[v] << "\n" << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; } } From a74e05a389dabe01022fcb4d2871bb027996f5fb Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 8 Aug 2022 06:16:05 +0200 Subject: [PATCH 043/943] documentation: fixes & improvements --- ...nterpolated_corrected_curvature_measures.h | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 289878b9a9bf..3987f473c145 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -47,15 +47,13 @@ enum Curvature_measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected area measure (mu0) of a specific face. +* computes the interpolated corrected area measure \f$ \mu_0 \f$ of a specific face. * -* @tparam GT is the geometric traits class. +* @tparam GT geometric traits class model of `Kernel`. * * @param x is a vector of the vertex positions of the face. -* @param u is a vector of the vertex nomrals of the face. +* @param u is a vector of the vertex normals of the face. * -* @return a scalar of type `GT::FT`. -* This is the value of the interpolated corrected area measure of the given face. * * @see `interpolated_corrected_mean_curvature_measure_face()` * @see `interpolated_corrected_gaussian_curvature_measure_face()` @@ -119,16 +117,13 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector`. +* @return an array of scalar values for each combination of the standard basis (3x3) * These are the values of the interpolated corrected anisotropic measure of the given face. * * @see `interpolated_corrected_anisotropic_measure_mesh()` @@ -395,7 +387,7 @@ std::array interpolated_corrected_anisotropic_measure_fa * * computes the interpolated corrected curvature measure on each face of the mesh * -* @tparam PolygonMesh a model of `FaceGraph` +* @tparam PolygonMesh a model of `FaceListGraph` * @tparam FaceMeasureMap a a model of `WritablePropertyMap` with * `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @@ -423,8 +415,8 @@ std::array interpolated_corrected_anisotropic_measure_fa * `boost::graph_traits::%vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals should be -* computed inside the function body.} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -511,7 +503,7 @@ template::%face_descriptor` as key type and `std::array` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @@ -537,8 +529,8 @@ template::%vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals should be -* computed inside the function body.} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -956,7 +948,6 @@ template> eigensolver; eigensolver.computeDirect(v_muXY); From 86ac0fcb74f26336d492859b1d650fb28b5251d0 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:04:37 +0200 Subject: [PATCH 044/943] Documenting Expansion functions --- ...nterpolated_corrected_curvature_measures.h | 158 +++++++++++++++--- 1 file changed, 134 insertions(+), 24 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 3987f473c145..dbe95c28f459 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -47,7 +47,7 @@ enum Curvature_measure_index { /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected area measure \f$ \mu_0 \f$ of a specific face. +* Computes the interpolated corrected area measure \f$ \mu_0 \f$ of a specific face. * * @tparam GT geometric traits class model of `Kernel`. * @@ -117,7 +117,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector interpolated_corrected_anisotropic_measure_fa /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected curvature measure on each face of the mesh +* Computes the interpolated corrected curvature measure on each face of the mesh * * @tparam PolygonMesh a model of `FaceListGraph` -* @tparam FaceMeasureMap a a model of `WritablePropertyMap` with +* @tparam FaceMeasureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * @@ -399,6 +399,7 @@ std::array interpolated_corrected_anisotropic_measure_fa * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin +* * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with @@ -501,10 +502,10 @@ template::%face_descriptor` as key type and `std::array` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * @@ -513,6 +514,7 @@ template -typename GT::FT face_in_ball_ratio_2(const std::vector& x, - const typename GT::FT r, - const typename GT::Vector_3 c) +typename GT::FT face_in_ball_ratio(const std::vector& x, + const typename GT::FT r, + const typename GT::Vector_3 c) { std::size_t n = x.size(); @@ -646,13 +662,59 @@ typename GT::FT face_in_ball_ratio_2(const std::vector& x return (r - d_min) / (d_max - d_min); } -template::%face_descriptor` as key type and `GT::FT` as value type. +* @tparam VertexMeasureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. +* @param curvature_fmm (curvature face measure map) the property map storing the already computed curvature measure on each face. +* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. +* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. +* @param curvature_vmm (curvature vertex measure map) the property map provided to store the expanded curvature measure on each vertex. +* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. +* @param v (vertex) the vertex to expand the area and curvature measure around. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`0.01`} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `expand_interpolated_corrected_anisotropic_measure_vertex()` +* @see `face_in_ball_ratio()` +*/ +template void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, FaceMeasureMap area_fmm, FaceMeasureMap curvature_fmm, - VertexCurvatureMap area_vcm, - VertexCurvatureMap curvature_vcm, + VertexMeasureMap area_vmm, + VertexMeasureMap curvature_vmm, const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { @@ -700,7 +762,7 @@ template(x, r, c); + const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); if (f_ratio != 0.0) { @@ -716,18 +778,66 @@ template::%face_descriptor` as key type and `GT::FT` as value type. +* @tparam AnisotropicFaceMeasureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%face_descriptor` as key type and `std::array` as value type. +* @tparam AreaVertexMeasureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam AnisotropicVertexMeasureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and `std::array` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. +* @param aniso_fmm (anisotropic face measure map) the property map storing the already computed anisotropic curvature measure on each face. +* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. +* @param aniso_vmm (anisotropic vertex measure map) the property map provided to store the expanded anisotropic curvature measure on each vertex. +* @param v (vertex) the vertex to expand the area and anisotropic curvature measure around. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`0.01`} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `expand_interpolated_corrected_measure_vertex()` +* @see `face_in_ball_ratio()` +*/ template void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, AreaFaceMeasureMap area_fmm, AnisotropicFaceMeasureMap aniso_fmm, - AreaVertexCurvatureMap area_vcm, - AnisotropicVertexCurvatureMap aniso_vcm, + AreaVertexMeasureMap area_vmm, + AnisotropicVertexMeasureMap aniso_vmm, const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { @@ -775,7 +885,7 @@ template(x, r, c); + const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); if (f_ratio != 0.0) { @@ -797,8 +907,8 @@ template Date: Mon, 8 Aug 2022 07:13:14 +0200 Subject: [PATCH 045/943] minor documentation fixes --- .../Polygon_mesh_processing/PackageDescription.txt | 13 ++++++++++--- .../interpolated_corrected_curvature_measures.h | 8 ++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index d0cab92d6a89..5c9e39811d46 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -202,9 +202,16 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. \cgalCRPSection{Corrected Curvature Functions} - `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_mesh()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_triangle()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_quad()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_mesh()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_area_measure_face()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_measure_face()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_measure_face()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_face()` +- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_measure_vertex()` +- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_anisotropic_measure_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` \cgalCRPSection{Normal Computation Functions} - `CGAL::Polygon_mesh_processing::compute_face_normal()` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index dbe95c28f459..00b17269d6f1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -785,7 +785,7 @@ template Date: Mon, 8 Aug 2022 07:41:02 +0200 Subject: [PATCH 046/943] Documenting new functions + minor doc fixes --- ...nterpolated_corrected_curvature_measures.h | 120 +++++++++++++++--- 1 file changed, 103 insertions(+), 17 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 00b17269d6f1..dc7744a402eb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -35,7 +35,7 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_corrected_curvatures_grp * Enumeration type used to specify which measure of a given face - * is computed for the interpolated corrected curvature functions + * is computed for the interpolated corrected curvature functions. */ // enum enum Curvature_measure_index { @@ -385,17 +385,17 @@ std::array interpolated_corrected_anisotropic_measure_fa /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected curvature measure on each face of the mesh +* Computes the interpolated corrected curvature measure on each face of the mesh. * -* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam PolygonMesh a model of `FaceListGraph`. * @tparam FaceMeasureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure +* @param pmesh the polygon mesh. +* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. * @param mu_i an enum for choosing between computing -* the area measure, the mean curvature measure or the gaussian curvature measure +* the area measure, the mean curvature measure or the gaussian curvature measure. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -504,13 +504,13 @@ template::%face_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure +* @param pmesh the polygon mesh. +* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -622,7 +622,7 @@ template& x, * Expands given face area and curvature (mean or gaussian) measures around a vertex `v`. * Expansion is based on the inclusion ratio of each face in a ball of radius `r` around the vertex `v`. * -* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam PolygonMesh a model of `FaceListGraph`. * @tparam FaceMeasureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. * @tparam VertexMeasureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh +* @param pmesh the polygon mesh. * @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. * @param curvature_fmm (curvature face measure map) the property map storing the already computed curvature measure on each face. * This curvature measure can be either the Mean Curvature or the Gaussian Curvature. @@ -797,9 +797,9 @@ template::%vertex_descriptor` as key type and `GT::FT` as value type. * @tparam AnisotropicVertexMeasureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh +* @param pmesh the polygon mesh. * @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. * @param aniso_fmm (anisotropic face measure map) the property map storing the already computed anisotropic measure on each face. * @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. @@ -911,6 +911,27 @@ template::%vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". +* +* @param pmesh the polygon mesh. +* @param vcm the vertex property map in which the computed mean curvatures are stored. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". +* +* @see `interpolated_corrected_gaussian_curvature()` +* @see `interpolated_corrected_principal_curvatures()` +* @see `interpolated_corrected_measure_mesh()` +* @see `expand_interpolated_corrected_measure_vertex()` +*/ + template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, @@ -949,6 +970,26 @@ template::%vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". +* +* @param pmesh the polygon mesh. +* @param vcm the vertex property map in which the computed gaussian curvatures are stored. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". +* +* @see `interpolated_corrected_mean_curvature()` +* @see `interpolated_corrected_principal_curvatures()` +* @see `interpolated_corrected_measure_mesh()` +* @see `expand_interpolated_corrected_measure_vertex()` +*/ template void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, @@ -986,6 +1027,51 @@ template::%vertex_descriptor` as key type and +* `std::tuple, Eigen::Vector>` as value type. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". +* +* @param pmesh the polygon mesh. +* @param vcm the vertex property map in which the computed principal curvatures are stored. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `interpolated_corrected_mean_curvature()` +* @see `interpolated_corrected_gaussian_curvatures()` +* @see `interpolated_corrected_anisotropic_measure_mesh()` +* @see `expand_interpolated_corrected_anisotropic_measure_vertex()` +*/ template void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, From 5840eaf9556370c1c4cdc0cb2b76fc1d81380876 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 9 Aug 2022 17:10:15 +0200 Subject: [PATCH 047/943] Update interpolated_corrected_curvature_measures.h --- .../Curvatures/interpolated_corrected_curvature_measures.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index dc7744a402eb..f16413159cab 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -1068,7 +1068,7 @@ template Date: Sat, 27 Aug 2022 18:01:59 +0200 Subject: [PATCH 048/943] fixing eigen vector definitions so that it works with other compilers --- .../interpolated_corrected_curvature_measures.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index f16413159cab..6ddfe5feb1a0 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -1138,7 +1138,7 @@ template v_muXY = get(muXY_expand_map, v); typename GT::Vector_3 u_GT = get(vnm, v); - Eigen::Vector u(u_GT.x(), u_GT.y(), u_GT.z()); + Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); const typename GT::FT K = 1000 * v_mu0; @@ -1153,12 +1153,12 @@ template(.0,.0,.0), - Eigen::Vector(.0, .0, .0))); + Eigen::Matrix(.0,.0,.0), + Eigen::Matrix(.0, .0, .0))); continue; } - Eigen::Vector eig_vals = eigensolver.eigenvalues(); + Eigen::Matrix eig_vals = eigensolver.eigenvalues(); Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); put(vcm, v, std::make_tuple( From 48262af4247eb8060e3bda3ccfcec6164512007b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 27 Aug 2022 19:46:33 +0200 Subject: [PATCH 049/943] fixing eigenvector definitions --- .../interpolated_corrected_curvatures.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index c8b972aca658..3a36aaac5c88 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -41,18 +41,18 @@ int main(int argc, char* argv[]) Mesh::Property_map, - Eigen::Vector + Eigen::Matrix, + Eigen::Matrix >> principle_curvature_map; boost::tie(principle_curvature_map, created) = g1.add_property_map, - Eigen::Vector + Eigen::Matrix, + Eigen::Matrix >>("v:principle_curvature_map", { 0, 0, - Eigen::Vector::Zero(), - Eigen::Vector::Zero() }); + Eigen::Matrix::Zero(), + Eigen::Matrix::Zero() }); assert(created); PMP::interpolated_corrected_mean_curvature( From 13b056c9d404c9eef9b3cdb630777ecb98db5dcf Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 17 Sep 2022 23:53:18 +0200 Subject: [PATCH 050/943] minor fixes + handled zero expansion radius --- ...nterpolated_corrected_curvature_measures.h | 72 +++++++++++++++---- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 6ddfe5feb1a0..7cd2c67ab060 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -28,10 +29,31 @@ #include #include +#define EXPANDING_RADIUS_EPSILON 1e-6 + namespace CGAL { namespace Polygon_mesh_processing { +namespace internal { + +template +typename GT::FT average_edge_length(const PolygonMesh& pmesh) +{ + const std::size_t n = edges(pmesh).size(); + if (n == 0) + return 0; + + GT::FT avg_edge_length = 0; + for (auto e : edges(pmesh)) + avg_edge_length += edge_length(e, pmesh); + + avg_edge_length /= n; + return avg_edge_length; +} + +} + /*! * \ingroup PMP_corrected_curvatures_grp * Enumeration type used to specify which measure of a given face @@ -63,7 +85,7 @@ template typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, const std::vector& x = {}) { - std::size_t n = x.size(); + const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); @@ -132,7 +154,7 @@ template typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, const std::vector& x = {}) { - std::size_t n = x.size(); + const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); @@ -212,7 +234,7 @@ template typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, const std::vector& x = {}) { - std::size_t n = u.size(); + const std::size_t n = u.size(); CGAL_precondition(n >= 3); typename GT::Construct_cross_product_vector_3 cross_product; @@ -274,7 +296,7 @@ template std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, const std::vector& x) { - std::size_t n = x.size(); + const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); @@ -636,7 +658,7 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, const typename GT::FT r, const typename GT::Vector_3 c) { - std::size_t n = x.size(); + const std::size_t n = x.size(); // getting center of points typename GT::Vector_3 xm = @@ -726,8 +748,8 @@ template::face_descriptor face_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - const typename GetGeomTraits::type::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.1); + const typename GT::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), @@ -849,8 +871,8 @@ template::face_descriptor face_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - const typename GetGeomTraits::type::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01); + const typename GT::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), @@ -938,6 +960,9 @@ template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; @@ -946,6 +971,12 @@ template::vertex_descriptor vertex_descriptor; typedef std::unordered_map VertexMeasureMap_tag; + typename GT::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); + + if (r == 0) + r = internal::average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + FaceMeasureMap_tag mu0_init, mu1_init; boost::associative_property_map mu0_map(mu0_init), mu1_map(mu1_init); @@ -959,7 +990,7 @@ template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; @@ -1004,6 +1038,12 @@ template::vertex_descriptor vertex_descriptor; typedef std::unordered_map VertexMeasureMap_tag; + typename GT::FT + r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); + + if (r == 0) + r = internal::average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + FaceMeasureMap_tag mu0_init, mu2_init; boost::associative_property_map mu0_map(mu0_init), mu2_map(mu2_init); @@ -1017,7 +1057,7 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; + if (is_default_parameter::value) compute_vertex_normals(pmesh, vnm, np); + + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef std::unordered_map FaceScalarMeasureMap_tag; // using std:: array to store FT values on the 9 combinations of the standard 3D basis @@ -1132,7 +1180,7 @@ template v_muXY = get(muXY_expand_map, v); From 4f1a5dd194822e3e763e5c47bd38c1c4151e575c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 20 Sep 2022 04:18:11 +0200 Subject: [PATCH 051/943] minor demo updates --- .../Plugins/Display/Display_property_plugin.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 66187583657e..e38211ecea85 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -1496,10 +1496,10 @@ private Q_SLOTS: void displayMapLegend(const std::vector& values) { // Create a legend_ and display it - const std::size_t size = (std::min)(color_map.size(), (std::size_t)256); + const std::size_t size = (std::min)(color_map.size(), (std::size_t)2048); const int text_height = 20; const int height = text_height*static_cast(size) + text_height; - const int width = 140; + const int width = 170; const int cell_width = width/3; const int top_margin = 15; const int left_margin = 5; @@ -1525,8 +1525,8 @@ private Q_SLOTS: tick_height, color); QRect text_rect(left_margin + cell_width+10, drawing_height - top_margin - j, - 50, text_height); - painter.drawText(text_rect, Qt::AlignCenter, tr("%1").arg(values[i], 0, 'f', 3, QLatin1Char(' '))); + 100, text_height); + painter.drawText(text_rect, Qt::AlignCenter, tr("%1").arg(values[i], 0, 'f', 7, QLatin1Char(' '))); } if(color_map.size() > size){ QRect text_rect(left_margin + cell_width+10, 0, @@ -1545,7 +1545,7 @@ private Q_SLOTS: { // Create a legend_ and display it const int height = 256; - const int width = 140; + const int width = 170; const int cell_width = width/3; const int top_margin = 5; const int left_margin = 5; @@ -1589,11 +1589,11 @@ private Q_SLOTS: painter.setPen(Qt::blue); QRect min_text_rect(left_margin + cell_width+10,drawing_height - top_margin, 100, text_height); - painter.drawText(min_text_rect, Qt::AlignCenter, tr("%1").arg(min_value, 0, 'f', 1)); + painter.drawText(min_text_rect, Qt::AlignCenter, tr("%1").arg(min_value, 0, 'f', 7)); QRect max_text_rect(left_margin + cell_width+10, drawing_height - top_margin - 200, 100, text_height); - painter.drawText(max_text_rect, Qt::AlignCenter, tr("%1").arg(max_value, 0, 'f', 1)); + painter.drawText(max_text_rect, Qt::AlignCenter, tr("%1").arg(max_value, 0, 'f', 7)); dock_widget->legendLabel->setPixmap(legend_); } From 3d3b2c30fd2aedd43140d9c6a9b60b87a9340fba Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 20 Sep 2022 11:18:13 +0200 Subject: [PATCH 052/943] testing init --- ...nterpolated_corrected_curvature_measures.h | 20 ++- .../Polygon_mesh_processing/CMakeLists.txt | 1 + ...est_interopolated_corrected_curvatures.cpp | 147 ++++++++++++++++++ .../Display/Display_property_plugin.cpp | 34 ++-- .../PMP/Random_perturbation_plugin.cpp | 2 +- 5 files changed, 180 insertions(+), 24 deletions(-) create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 7cd2c67ab060..aa05f8aebe47 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -483,8 +483,6 @@ template::value) compute_vertex_normals(pmesh, vnm, np); - typedef typename property_map_value::type measure; - std::function &, const std::vector&)> iccm_function; @@ -985,12 +983,12 @@ template mu0_expand_map(mu0_expand_init), mu1_expand_map(mu1_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); - interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE); + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); + interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, CGAL::parameters::ball_radius(r)); + expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); @@ -1052,12 +1050,12 @@ template mu0_expand_map(mu0_expand_init), mu2_expand_map(mu2_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); - interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE); + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); + interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, CGAL::parameters::ball_radius(r)); + expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); if(v_mu0 != 0.0) @@ -1175,12 +1173,12 @@ template muXY_expand_map(muXY_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE); - interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map); + interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); + interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, CGAL::parameters::ball_radius(r)); + expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); Eigen::Matrix v_muXY = get(muXY_expand_map, v); diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 909dd292063a..808e6d3a05ef 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -69,6 +69,7 @@ create_single_source_cgal_program("self_intersection_polyhedron_test.cpp") create_single_source_cgal_program("self_intersection_surface_mesh_test.cpp") create_single_source_cgal_program("pmp_do_intersect_test.cpp") create_single_source_cgal_program("test_is_polygon_soup_a_polygon_mesh.cpp") +create_single_source_cgal_program("test_interopolated_corrected_curvatures.cpp") create_single_source_cgal_program("test_stitching.cpp") create_single_source_cgal_program("remeshing_test.cpp") create_single_source_cgal_program("remeshing_with_isolated_constraints_test.cpp" ) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp new file mode 100644 index 000000000000..9c2408139a3f --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp @@ -0,0 +1,147 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; +typedef CGAL::Surface_mesh SMesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::edge_descriptor edge_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + +void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel::FT rel_noise_magnitude) { + SMesh pmesh; + const std::string filename = CGAL::data_file_path(mesh_path); + + if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) + { + std::cerr << "Invalid input file." << std::endl; + } + + bool created = false; + + SMesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); + assert(created); + + boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); + assert(created); + + // getting the max and min edge lengthes + const auto edge_range = CGAL::edges(pmesh); + + const auto edge_length_comparator = [&, pmesh](auto l, auto r) { + return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); + }; + + const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); + + const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); + + + if (rel_noise_magnitude > 0) + { + if (!CGAL::is_triangle_mesh(pmesh)) + return; + + SMesh::Property_map vnm; + boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); + assert(created); + + CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); + + PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + } + else { + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + + } + + + + //PMP::interpolated_corrected_mean_curvature( + // pmesh, + // mean_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + //PMP::interpolated_corrected_gaussian_curvature( + // pmesh, + // gaussian_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + + + const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + + std::cout << "# " << mesh_path << ":\n" + << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" + << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" + << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" + << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; + + +} + +int main() +{ + const std::vector mesh_pathes_to_test = { + "meshes/icc_test/Cube with fillet Quads.obj", + "meshes/icc_test/Lantern Quads.obj", + "meshes/icc_test/Lantern Tris.obj", + "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", + "meshes/icc_test/Sphere Quads + Tris 100352.obj", + "meshes/icc_test/Sphere Quads + Tris.obj", + "meshes/icc_test/Sphere Quads Remesh.obj", + "meshes/icc_test/Sphere Quads.obj", + "meshes/icc_test/Sphere Tris Ico.obj", + "meshes/icc_test/Sphere Tris Oct.obj", + "meshes/icc_test/Sphere Tris Tet.obj" + }; + + const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; + const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; + + for (auto mesh_path : mesh_pathes_to_test) { + for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) + for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) + { + test(mesh_path, rel_expansion_radius, rel_noise_magnitude); + } + + std::cout << "_________________________________________________________________________________\n\n"; + } + +} diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index e38211ecea85..cda67cbd9700 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -807,8 +807,8 @@ private Q_SLOTS: if (edge_range.begin() == edge_range.end()) { - expandRadius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); return; } @@ -824,8 +824,8 @@ private Q_SLOTS: // if edge_reference is not derefrenceble if (edge_reference == edge_range.end()) { - expandRadius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); return; } @@ -838,8 +838,8 @@ private Q_SLOTS: double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; - expandRadius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius)); + expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); } @@ -849,6 +849,9 @@ private Q_SLOTS: "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); + const auto vnm = smesh.property_map("v:normal_before_perturbation").first; + const bool vnm_exists = smesh.property_map("v:normal_before_perturbation").second; + //compute once and store the value per vertex bool non_init; SMesh::Property_map mu_i_map; @@ -856,11 +859,18 @@ private Q_SLOTS: smesh.add_property_map(tied_string, 0); if (non_init) { - if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expandRadius)); - else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expandRadius)); - + if (vnm_exists) { + if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + else + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + } + else { + if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + else + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + } double res_min = ARBITRARY_DBL_MAX, res_max = -ARBITRARY_DBL_MAX; SMesh::Vertex_index min_index, max_index; @@ -1626,7 +1636,7 @@ private Q_SLOTS: std::unordered_map is_source; - double expandRadius; + double expand_radius; double maxEdgeLength = -1; double minBox; double maxBox; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp index 9afb452ab13c..004768739cd5 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp @@ -106,7 +106,7 @@ public Q_SLOTS: if(ui.keep_normal_checkbox->isChecked()) { SMesh::Property_map vnormals = - pmesh.add_property_map("v:normal").first; + pmesh.add_property_map("v:normal_before_perturbation").first; CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh,vnormals); } if(ui.deterministic_checkbox->isChecked()) From c7a6651c6335f7911c8fb04274abc39030af64bb Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 20 Sep 2022 17:19:43 +0200 Subject: [PATCH 053/943] GroundTruthtests --- .../test_interopolated_corrected_curvatures.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp index 9c2408139a3f..0caf0149de28 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp @@ -118,17 +118,18 @@ void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel int main() { const std::vector mesh_pathes_to_test = { - "meshes/icc_test/Cube with fillet Quads.obj", - "meshes/icc_test/Lantern Quads.obj", - "meshes/icc_test/Lantern Tris.obj", - "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", - "meshes/icc_test/Sphere Quads + Tris 100352.obj", "meshes/icc_test/Sphere Quads + Tris.obj", - "meshes/icc_test/Sphere Quads Remesh.obj", - "meshes/icc_test/Sphere Quads.obj", + "meshes/icc_test/Sphere Quads + Tris 100352.obj", "meshes/icc_test/Sphere Tris Ico.obj", + "meshes/icc_test/Sphere Tris Tet.obj", "meshes/icc_test/Sphere Tris Oct.obj", - "meshes/icc_test/Sphere Tris Tet.obj" + "meshes/icc_test/Sphere Quads.obj", + "meshes/icc_test/Sphere Quads Remesh.obj", + "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", + "meshes/icc_test/Cube with fillet Quads.obj", + "meshes/cylinder.off", + "meshes/icc_test/Lantern Tris.obj", + "meshes/icc_test/Lantern Quads.obj" }; const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; From 75c7f83c6848a55b4e15f10ca813df2e0d232659 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 20 Sep 2022 17:21:19 +0200 Subject: [PATCH 054/943] whitespaces --- .../interpolated_corrected_curvature_measures.h | 2 +- .../test_interopolated_corrected_curvatures.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index aa05f8aebe47..c1c1bcd52877 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -49,7 +49,7 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) avg_edge_length += edge_length(e, pmesh); avg_edge_length /= n; - return avg_edge_length; + return avg_edge_length; } } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp index 0caf0149de28..e7b473141562 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp @@ -58,7 +58,7 @@ void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel SMesh::Property_map vnm; boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); assert(created); - + CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); @@ -87,7 +87,7 @@ void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel } - + //PMP::interpolated_corrected_mean_curvature( // pmesh, @@ -106,8 +106,8 @@ void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - std::cout << "# " << mesh_path << ":\n" - << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" + std::cout << "# " << mesh_path << ":\n" + << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; From e0c596d29e8c10724300d40fecbf6015385f6da4 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 25 Sep 2022 22:03:50 +0200 Subject: [PATCH 055/943] principal curvatures and directions visualization --- .../interpolated_corrected_curvatures.cpp | 12 +- ...nterpolated_corrected_curvature_measures.h | 59 +++--- .../Polygon_mesh_processing/compute_normal.h | 12 +- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 14 ++ ..._corrected_principal_curvatures_plugin.cpp | 186 ++++++++++++++++++ 5 files changed, 240 insertions(+), 43 deletions(-) create mode 100644 Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp index 3a36aaac5c88..c011d57db41e 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp @@ -41,18 +41,18 @@ int main(int argc, char* argv[]) Mesh::Property_map, - Eigen::Matrix + EpicKernel::Vector_3, + EpicKernel::Vector_3 >> principle_curvature_map; boost::tie(principle_curvature_map, created) = g1.add_property_map, - Eigen::Matrix + EpicKernel::Vector_3, + EpicKernel::Vector_3 >>("v:principle_curvature_map", { 0, 0, - Eigen::Matrix::Zero(), - Eigen::Matrix::Zero() }); + EpicKernel::Vector_3 (0,0,0), + EpicKernel::Vector_3 (0,0,0)}); assert(created); PMP::interpolated_corrected_mean_curvature( diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index c1c1bcd52877..e2e1292aedb4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -754,8 +754,8 @@ template bfs_q; - std::unordered_set bfs_v; + std::queue bfs_queue; + std::unordered_set bfs_visited; typename GT::Point_3 vp = get(vpm, v); typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); @@ -766,13 +766,13 @@ template::null_face()) { - bfs_q.push(f); - bfs_v.insert(f); + bfs_queue.push(f); + bfs_visited.insert(f); } } - while (!bfs_q.empty()) { - face_descriptor fi = bfs_q.front(); - bfs_q.pop(); + while (!bfs_queue.empty()) { + face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); // looping over vertices in face to get point coordinates std::vector x; @@ -790,10 +790,10 @@ template::null_face()) + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) { - bfs_q.push(fj); - bfs_v.insert(fj); + bfs_queue.push(fj); + bfs_visited.insert(fj); } } } @@ -877,8 +877,8 @@ template bfs_q; - std::unordered_set bfs_v; + std::queue bfs_queue; + std::unordered_set bfs_visited; typename GT::Point_3 vp = get(vpm, v); typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); @@ -889,13 +889,13 @@ template::null_face()) { - bfs_q.push(f); - bfs_v.insert(f); + bfs_queue.push(f); + bfs_visited.insert(f); } } - while (!bfs_q.empty()) { - face_descriptor fi = bfs_q.front(); - bfs_q.pop(); + while (!bfs_queue.empty()) { + face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); // looping over vertices in face to get point coordinates std::vector x; @@ -915,14 +915,14 @@ template::null_face()) + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) { - bfs_q.push(fj); - bfs_v.insert(fj); + bfs_queue.push(fj); + bfs_visited.insert(fj); } } } @@ -990,7 +990,6 @@ template v_muXY = get(muXY_expand_map, v); + typename GT::Vector_3 u_GT = get(vnm, v); Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); @@ -1199,19 +1199,22 @@ template(.0,.0,.0), - Eigen::Matrix(.0, .0, .0))); + typename GT::Vector_3(0, 0, 0), + typename GT::Vector_3(0, 0, 0))); continue; } - Eigen::Matrix eig_vals = eigensolver.eigenvalues(); - Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); + const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); + const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); + + const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); + const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); put(vcm, v, std::make_tuple( (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, - eig_vecs.col(1), - eig_vecs.col(0))); + min_eig_vec, + max_eig_vec)); } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h index 2cd837e7bf84..8dfb16af1bdd 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h @@ -717,15 +717,9 @@ compute_vertex_normal(typename boost::graph_traits::vertex_descript } #endif - Vector_3 normal = internal::compute_vertex_normal_most_visible_min_circle(v, face_normals, pmesh, traits); - if(traits.equal_3_object()(normal, CGAL::NULL_VECTOR)) // can't always find a most visible normal - { -#ifdef CGAL_PMP_COMPUTE_NORMAL_DEBUG_PP - std::cout << "Failed to find most visible normal, use weighted sum of normals" << std::endl; -#endif - normal = internal::compute_vertex_normal_as_sum_of_weighted_normals( - v, internal::SIN_WEIGHT, face_normals, vpmap, pmesh, traits); - } + // Change for debugging (comparing with DGtal) + Vector_3 normal = internal::compute_vertex_normal_as_sum_of_weighted_normals( + v, internal::NO_WEIGHT, face_normals, vpmap, pmesh, traits); if(!traits.equal_3_object()(normal, CGAL::NULL_VECTOR)) internal::normalize(normal, traits); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 53cfdc9b825a..7d2177b03a11 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -13,6 +13,20 @@ else() ) endif() +if(TARGET CGAL::Eigen3_support) + + polyhedron_demo_plugin(interpolated_corrected_principal_curvatures_plugin Interpolated_corrected_principal_curvatures_plugin) + target_link_libraries( + interpolated_corrected_principal_curvatures_plugin PUBLIC scene_surface_mesh_item scene_polylines_item + CGAL::Eigen3_support) + +else() + message( + STATUS + "NOTICE: Eigen 3.1 (or greater) was not found. Interpolated corrected principal curvatures plugin will not be available." + ) +endif() + polyhedron_demo_plugin(extrude_plugin Extrude_plugin KEYWORDS PMP) target_link_libraries(extrude_plugin PUBLIC scene_surface_mesh_item scene_selection_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp new file mode 100644 index 000000000000..69c2b4fe2dd3 --- /dev/null +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -0,0 +1,186 @@ +#include +#include +#include +#include "Scene_surface_mesh_item.h" +#include "Scene_polylines_item.h" + +#include + +#include "Scene.h" +#include +#include + +#include +#include + +using namespace CGAL::Three; +class Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin : + public QObject, + public Polyhedron_demo_plugin_interface +{ + Q_OBJECT + Q_INTERFACES(CGAL::Three::Polyhedron_demo_plugin_interface) + Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") + +public: + + QList actions() const { + return _actions; + } + void init(QMainWindow* mw, + Scene_interface* scene_interface, + Messages_interface*) + { + scene = scene_interface; + QAction *actionEstimateCurvature = new QAction(tr("Interpolated Corrected Principal Curvatures"), mw); + connect(actionEstimateCurvature, SIGNAL(triggered()), this, SLOT(on_actionEstimateCurvature_triggered())); + _actions <(scene->item(scene->mainSelectionIndex())); + } + +public Q_SLOTS: + void on_actionEstimateCurvature_triggered(); +private : + Scene_interface *scene; + QList _actions; +}; // end Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin + + +void compute(SMesh* sMesh, + Scene_polylines_item* max_curv, + Scene_polylines_item* min_curv, + Scene_polylines_item* max_negative_curv, + Scene_polylines_item* min_negative_curv) +{ + namespace PMP = CGAL::Polygon_mesh_processing; + typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; + typedef EpicKernel::Point_3 Point; + typedef EpicKernel::Point_3 Point; + typedef EpicKernel::Vector_3 Vector; + typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef std::tuple< + EpicKernel::FT, + EpicKernel::FT, + Vector, + Vector + > PrincipalCurvatureTuple; + + typename boost::property_map::type vpmap = get(CGAL::vertex_point, *sMesh); + + bool created = false; + SMesh::Property_map principle_curvature_map; + + boost::tie(principle_curvature_map, created) = sMesh->add_property_map + ("v:principle_curvature_map", { 0, 0, + Vector(0,0,0), + Vector(0,0,0)}); + assert(created); + + PMP::interpolated_corrected_principal_curvatures( + *sMesh, + principle_curvature_map + ); + + typename EpicKernel::FT max_curvature_magnitude_on_mesh = 0; + for (vertex_descriptor v : vertices(*sMesh)) + { + const PrincipalCurvatureTuple pc = principle_curvature_map[v]; + max_curvature_magnitude_on_mesh = max(max_curvature_magnitude_on_mesh, max(abs(get<0>(pc)), get<1>(pc))); + } + + for(vertex_descriptor v : vertices(*sMesh)) + { + std::vector points; + + // pick central point + const Point& central_point = get(vpmap,v); + points.push_back(central_point); + + // compute min edge len around central vertex + // to scale the ribbons used to display the directions + + typedef EPICK::FT FT; + + const std::size_t n = CGAL::edges(*sMesh).size(); + + EpicKernel::FT avg_edge_length = 0; + if (n > 0) { + for (auto e : CGAL::edges(*sMesh)) + avg_edge_length += PMP::edge_length(e, *sMesh); + avg_edge_length /= n; + } + + const PrincipalCurvatureTuple pc = principle_curvature_map[v]; + + Vector umin = (std::get<0>(pc)/ max_curvature_magnitude_on_mesh) * std::get<2>(pc) * avg_edge_length; + Vector umax = (std::get<1>(pc)/ max_curvature_magnitude_on_mesh) * std::get<3>(pc) * avg_edge_length; + + Scene_polylines_item::Polyline max_segment(2), min_segment(2); + + const double du = 0.4; + + min_segment[0] = central_point + du * umin; + min_segment[1] = central_point - du * umin; + max_segment[0] = central_point + du * umax; + max_segment[1] = central_point - du * umax; + + (std::get<0>(pc) > 0 ? min_curv : min_negative_curv)->polylines.push_back(min_segment); + (std::get<1>(pc) > 0 ? max_curv : max_negative_curv)->polylines.push_back(max_segment); + } +} + +void Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin::on_actionEstimateCurvature_triggered() +{ + // get active polyhedron + const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); + QString name = scene->item(index)->name(); + Scene_surface_mesh_item* sm_item = + qobject_cast(scene->item(index)); + if(! sm_item){ + return; + } + // wait cursor + QApplication::setOverrideCursor(Qt::WaitCursor); + + // types + Scene_polylines_item* max_curv = new Scene_polylines_item; + max_curv->setColor(Qt::red); + max_curv->setWidth(3); + max_curv->setName(tr("%1 (max curvatures)").arg(name)); + + Scene_polylines_item* min_curv = new Scene_polylines_item; + min_curv->setColor(QColor(255,210,0)); + min_curv->setWidth(4); + min_curv->setName(tr("%1 (min curvatures)").arg(name)); + + Scene_polylines_item* max_negative_curv = new Scene_polylines_item; + max_negative_curv->setColor(Qt::cyan); + max_negative_curv->setWidth(4); + max_negative_curv->setName(tr("%1 (min negative curvatures)").arg(name)); + + Scene_polylines_item* min_negative_curv = new Scene_polylines_item; + min_negative_curv->setColor(Qt::blue); + min_negative_curv->setWidth(3); + min_negative_curv->setName(tr("%1 (max negative curvatures)").arg(name)); + + SMesh* pMesh = sm_item->polyhedron(); + compute(pMesh, max_curv, min_curv, max_negative_curv, min_negative_curv); + + scene->addItem(max_curv); + scene->addItem(min_curv); + max_curv->invalidateOpenGLBuffers(); + min_curv->invalidateOpenGLBuffers(); + scene->addItem(max_negative_curv); + scene->addItem(min_negative_curv); + max_negative_curv->invalidateOpenGLBuffers(); + min_negative_curv->invalidateOpenGLBuffers(); + + // default cursor + QApplication::restoreOverrideCursor(); +} + +#include "Interpolated_corrected_principal_curvatures_plugin.moc" From 419745088537cfc6425758ae527048132fde193a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 26 Sep 2022 02:33:04 +0200 Subject: [PATCH 056/943] restored compute_normal.h --- .../CGAL/Polygon_mesh_processing/compute_normal.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h index 8dfb16af1bdd..2cd837e7bf84 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/compute_normal.h @@ -717,9 +717,15 @@ compute_vertex_normal(typename boost::graph_traits::vertex_descript } #endif - // Change for debugging (comparing with DGtal) - Vector_3 normal = internal::compute_vertex_normal_as_sum_of_weighted_normals( - v, internal::NO_WEIGHT, face_normals, vpmap, pmesh, traits); + Vector_3 normal = internal::compute_vertex_normal_most_visible_min_circle(v, face_normals, pmesh, traits); + if(traits.equal_3_object()(normal, CGAL::NULL_VECTOR)) // can't always find a most visible normal + { +#ifdef CGAL_PMP_COMPUTE_NORMAL_DEBUG_PP + std::cout << "Failed to find most visible normal, use weighted sum of normals" << std::endl; +#endif + normal = internal::compute_vertex_normal_as_sum_of_weighted_normals( + v, internal::SIN_WEIGHT, face_normals, vpmap, pmesh, traits); + } if(!traits.equal_3_object()(normal, CGAL::NULL_VECTOR)) internal::normalize(normal, traits); From 7118646bec18cb0d4192daad64d1f52eb16cae97 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 26 Sep 2022 09:19:17 +0200 Subject: [PATCH 057/943] typo fix --- .../Interpolated_corrected_principal_curvatures_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 69c2b4fe2dd3..0b729978c7e7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -160,12 +160,12 @@ void Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin::on_acti Scene_polylines_item* max_negative_curv = new Scene_polylines_item; max_negative_curv->setColor(Qt::cyan); max_negative_curv->setWidth(4); - max_negative_curv->setName(tr("%1 (min negative curvatures)").arg(name)); + max_negative_curv->setName(tr("%1 (max negative curvatures)").arg(name)); Scene_polylines_item* min_negative_curv = new Scene_polylines_item; min_negative_curv->setColor(Qt::blue); min_negative_curv->setWidth(3); - min_negative_curv->setName(tr("%1 (max negative curvatures)").arg(name)); + min_negative_curv->setName(tr("%1 (min negative curvatures)").arg(name)); SMesh* pMesh = sm_item->polyhedron(); compute(pMesh, max_curv, min_curv, max_negative_curv, min_negative_curv); From a1e9345a1ece1571b583326a217cb5833822a7b6 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 26 Sep 2022 19:59:36 +0200 Subject: [PATCH 058/943] added principal curvatures plugin to test with cmake --- Polyhedron/demo/Polyhedron/cgal_test_with_cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/cgal_test_with_cmake b/Polyhedron/demo/Polyhedron/cgal_test_with_cmake index 6fea79491769..59eb5c1d0211 100755 --- a/Polyhedron/demo/Polyhedron/cgal_test_with_cmake +++ b/Polyhedron/demo/Polyhedron/cgal_test_with_cmake @@ -149,6 +149,7 @@ hole_filling_plugin \ hole_filling_sm_plugin \ hole_filling_polyline_plugin \ inside_out_plugin \ +interpolated_corrected_principal_curvatures_plugin\ surface_intersection_plugin \ surface_intersection_sm_plugin \ io_image_plugin \ From 4f76f267d5b3e9dd08529baf06fefdffba256b4f Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 5 Oct 2022 00:38:23 +0200 Subject: [PATCH 059/943] mostly docs and examples, moved utils to internal --- .../PackageDescription.txt | 8 - .../Polygon_mesh_processing.txt | 54 ++++ .../doc/Polygon_mesh_processing/examples.txt | 3 +- .../Polygon_mesh_processing/CMakeLists.txt | 6 +- ...rpolated_corrected_curvatures_example.cpp} | 59 ++-- ...orrected_curvatures_polyhedron_example.cpp | 74 +++++ ...nterpolated_corrected_curvature_measures.h | 290 +----------------- 7 files changed, 184 insertions(+), 310 deletions(-) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures.cpp => interpolated_corrected_curvatures_example.cpp} (52%) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 5c9e39811d46..eae47c610011 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -201,14 +201,6 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - \link PMP_locate_grp Random Location Generation \endlink \cgalCRPSection{Corrected Curvature Functions} -- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_mesh()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_mesh()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_area_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_face()` -- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_measure_vertex()` -- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_anisotropic_measure_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 743d6bc35079..6c684c4419b4 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -876,6 +876,60 @@ not provide storage for the normals. \cgalExample{Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp} +**************************************** +\section PMPICC Computing Curvatures + +This package provides methods to compute curvatures on polygonal meshes based on #PAPER#. +This includes mean curvature, gaussian curvature, principal curvatures and directions. +These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. +The algorithms used prove to work well in general. Also, on meshes with noise +on vertex positions, they give accurate results, on the condition that the +correct vertex normals are provided. + +The implementation is generic in terms of mesh data structure. It can be used on Surface_mesh, +Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. + +These computations are performed using : +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` + +\cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on +the ball_radius named parameter which can be set to a value > 0 to get a smoother +distribution of valuesa and "diffuse" the extreme values of curvatures across the mesh. + +\cgalFigureAnchor{icc_diff_radius} +
+ +
+\cgalFigureCaptionBegin{icc_diff_radius} +The mean curvature distrubution on a bear mesh with different values for the expanding ball radius +\cgalFigureCaptionEnd + +Property maps are used to record the computed curvatures as shown in examples. + +\subsection ICCExample Interpolated Corrected Curvature Examples + +Property maps are an API introduced in the boost library that allows to +associate values to keys. In the following examples, for each proberty map, we associate +a curvature value to each vertex. + +\subsubsection ICCExample Interpolated Corrected Curvature on a Surface Mesh. + +The following example illustrates how to +compute the curvatures on vertices +and store them in property maps provided by the class `Surface_mesh`. + +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} + +\subsubsection NormalsExampleNP Interpolated Corrected Curvature on a Polyhedron + +The following example illustrates how to +compute the curvatures on vertices +and store them in unordered (or ordered) maps as the class `Polyhedron_3` does +not provide storage for the curvatures. + +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} **************************************** \section PMPSlicer Slicer diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 0317812aa443..0588d1c76e14 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -19,7 +19,8 @@ \example Polygon_mesh_processing/refine_fair_example.cpp \example Polygon_mesh_processing/mesh_slicer_example.cpp \example Polygon_mesh_processing/isotropic_remeshing_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 4783d957589a..ab084384835b 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -105,8 +105,10 @@ create_single_source_cgal_program("cc_compatible_orientations.cpp") if(TARGET CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures.cpp") - target_link_libraries(interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_polyhedron_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_polyhedron_example PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp similarity index 52% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index c011d57db41e..caaa52eb3af0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -7,18 +7,17 @@ #include #include -#include namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; -typedef CGAL::Surface_mesh Mesh; -typedef boost::graph_traits::face_descriptor face_descriptor; -typedef boost::graph_traits::vertex_descriptor vertex_descriptor; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; +typedef CGAL::Surface_mesh Surface_Mesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { - Mesh g1; + Surface_Mesh g1; const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); @@ -29,36 +28,54 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } + // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - - Mesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); + Surface_Mesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); + boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); assert(created); - Mesh::Property_map> principle_curvature_map; boost::tie(principle_curvature_map, created) = g1.add_property_map>("v:principle_curvature_map", { 0, 0, - EpicKernel::Vector_3 (0,0,0), - EpicKernel::Vector_3 (0,0,0)}); + Epic_Kernel::Vector_3 (0,0,0), + Epic_Kernel::Vector_3 (0,0,0)}); assert(created); PMP::interpolated_corrected_mean_curvature( g1, mean_curvature_map ); + + // uncomment this to compute a curvature while specifying named parameters + // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) + + /*Surface_Mesh::Property_map vnm; + boost::tie(vnm, created) = g1.add_property_map( + "v:vnm", Epic_Kernel::Vector_3(0, 0, 0) + ); + + assert(created); + + PMP::interpolated_corrected_mean_curvature( + g1, + mean_curvature_map, + CGAL::parameters::ball_radius(0.5).vertex_normal_map(vnm) + );*/ + PMP::interpolated_corrected_gaussian_curvature( g1, gaussian_curvature_map diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp new file mode 100644 index 000000000000..3e56905068f3 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; +typedef CGAL::Polyhedron_3 Polyhedron; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + +int main(int argc, char* argv[]) +{ + Polyhedron g1; + const std::string filename = (argc>1) ? + argv[1] : + CGAL::data_file_path("meshes/small_bunny.obj"); + + if(!CGAL::IO::read_polygon_mesh(filename, g1)) + { + std::cerr << "Invalid input file." << std::endl; + return EXIT_FAILURE; + } + + std::unordered_map mean_curvature_map, gaussian_curvature_map; + std::unordered_map> principle_curvature_map; + + PMP::interpolated_corrected_mean_curvature( + g1, + boost::make_assoc_property_map(mean_curvature_map) + ); + + // uncomment this to compute a curvature while specifying named parameters + // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) + + /*std::unordered_map vnm; + + PMP::interpolated_corrected_mean_curvature( + g1, + boost::make_assoc_property_map(mean_curvature_map), + CGAL::parameters::ball_radius(0.5).vertex_normal_map(boost::make_assoc_property_map(vnm)) + );*/ + + PMP::interpolated_corrected_gaussian_curvature( + g1, + boost::make_assoc_property_map(gaussian_curvature_map) + ); + PMP::interpolated_corrected_principal_curvatures( + g1, + boost::make_assoc_property_map(principle_curvature_map) + ); + + int i = 0; + for (vertex_descriptor v : vertices(g1)) + { + auto PC = principle_curvature_map[v]; + std::cout << i << ": HC = " << mean_curvature_map[v] + << ", GC = " << gaussian_curvature_map[v] << "\n" + << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; + i++; + } +} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index e2e1292aedb4..8f5e1d338edb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -44,7 +44,7 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) if (n == 0) return 0; - GT::FT avg_edge_length = 0; + typename GT::FT avg_edge_length = 0; for (auto e : edges(pmesh)) avg_edge_length += edge_length(e, pmesh); @@ -52,35 +52,12 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) return avg_edge_length; } -} - -/*! - * \ingroup PMP_corrected_curvatures_grp - * Enumeration type used to specify which measure of a given face - * is computed for the interpolated corrected curvature functions. - */ -// enum enum Curvature_measure_index { MU0_AREA_MEASURE, ///< corrected area density MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density }; -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected area measure \f$ \mu_0 \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param x is a vector of the vertex positions of the face. -* @param u is a vector of the vertex normals of the face. -* -* -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_gaussian_curvature_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, const std::vector& x = {}) @@ -136,20 +113,6 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, const std::vector& x = {}) @@ -216,20 +179,6 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve } } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected gaussian curvature measure \f$ \mu_2 \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param x is a vector of the vertex positions of the face. -* @param u is a vector of the vertex nomrals of the face. -* -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_area_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, const std::vector& x = {}) @@ -277,21 +226,6 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std } } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected anisotropic measure \f$ \mu_{XY} \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param u is a vector of the vertex nomrals of the face. -* @param x is a vector of the vertex positions of the face. -* -* @return an array of scalar values for each combination of the standard basis (3x3) -* These are the values of the interpolated corrected anisotropic measure of the given face. -* -* @see `interpolated_corrected_anisotropic_measure_mesh()` -*/ template std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, const std::vector& x) @@ -403,51 +337,6 @@ std::array interpolated_corrected_anisotropic_measure_fa return muXY; } - -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected curvature measure on each face of the mesh. -* -* @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam FaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. -* @param mu_i an enum for choosing between computing -* the area measure, the mean curvature measure or the gaussian curvature measure. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_area_measure_face()` -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_gaussian_curvature_measure_face()` -*/ template void @@ -518,48 +407,6 @@ template::%face_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_anisotropic_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template void @@ -636,21 +483,6 @@ template typename GT::FT face_in_ball_ratio(const std::vector& x, const typename GT::FT r, @@ -682,52 +514,6 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, return (r - d_min) / (d_max - d_min); } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Expands given face area and curvature (mean or gaussian) measures around a vertex `v`. -* Expansion is based on the inclusion ratio of each face in a ball of radius `r` around the vertex `v`. -* -* @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam FaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam VertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. -* @param curvature_fmm (curvature face measure map) the property map storing the already computed curvature measure on each face. -* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. -* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. -* @param curvature_vmm (curvature vertex measure map) the property map provided to store the expanded curvature measure on each vertex. -* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. -* @param v (vertex) the vertex to expand the area and curvature measure around. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`0.01`} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `expand_interpolated_corrected_anisotropic_measure_vertex()` -* @see `face_in_ball_ratio()` -*/ template void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, @@ -802,54 +588,6 @@ template::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam AnisotropicFaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `std::array` as value type. -* @tparam AreaVertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam AnisotropicVertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. -* @param aniso_fmm (anisotropic face measure map) the property map storing the already computed anisotropic measure on each face. -* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. -* @param aniso_vmm (anisotropic vertex measure map) the property map provided to store the expanded anisotropic measure on each vertex. -* @param v (vertex) the vertex to expand the area and anisotropic measure around. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`0.01`} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `expand_interpolated_corrected_measure_vertex()` -* @see `face_in_ball_ratio()` -*/ template @@ -931,6 +669,8 @@ template mu0_expand_map(mu0_expand_init), mu1_expand_map(mu1_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu1_map, internal::MU1_MEAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); if (v_mu0 != 0.0) @@ -1015,8 +753,6 @@ template @@ -1049,12 +785,12 @@ template mu0_expand_map(mu0_expand_init), mu2_expand_map(mu2_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu2_map, internal::MU2_GAUSSIAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); if(v_mu0 != 0.0) @@ -1106,8 +842,6 @@ template @@ -1172,12 +906,12 @@ template muXY_expand_map(muXY_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); Eigen::Matrix v_muXY = get(muXY_expand_map, v); From bb6d3e4f07b372972e942f4198a1666289ac3916 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 5 Oct 2022 10:30:27 +0200 Subject: [PATCH 060/943] doc fix --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 6c684c4419b4..8f222497a527 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -914,7 +914,7 @@ Property maps are an API introduced in the boost library that allows to associate values to keys. In the following examples, for each proberty map, we associate a curvature value to each vertex. -\subsubsection ICCExample Interpolated Corrected Curvature on a Surface Mesh. +\subsubsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh. The following example illustrates how to compute the curvatures on vertices @@ -922,7 +922,7 @@ and store them in property maps provided by the class `Surface_mesh`. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} -\subsubsection NormalsExampleNP Interpolated Corrected Curvature on a Polyhedron +\subsubsection ICCExamplePH Interpolated Corrected Curvature on a Polyhedron The following example illustrates how to compute the curvatures on vertices From e80a4c8cc57e375356090e07da3a7ff4c5d452a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Oct 2022 10:32:45 +0200 Subject: [PATCH 061/943] change ref --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 6c684c4419b4..6bb9140939c2 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -914,7 +914,7 @@ Property maps are an API introduced in the boost library that allows to associate values to keys. In the following examples, for each proberty map, we associate a curvature value to each vertex. -\subsubsection ICCExample Interpolated Corrected Curvature on a Surface Mesh. +\subsubsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh. The following example illustrates how to compute the curvatures on vertices From 2cb8906639e3aea577bd9c98dcd5005b78c44004 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 7 Oct 2022 21:36:30 +0200 Subject: [PATCH 062/943] principle -> principal typo fixed --- .../interpolated_corrected_curvatures_example.cpp | 12 ++++++------ ...lated_corrected_curvatures_polyhedron_example.cpp | 8 ++++---- ...polated_corrected_principal_curvatures_plugin.cpp | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index caaa52eb3af0..78307b952e4f 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -43,14 +43,14 @@ int main(int argc, char* argv[]) Epic_Kernel::FT, Epic_Kernel::Vector_3, Epic_Kernel::Vector_3 - >> principle_curvature_map; + >> principal_curvature_map; - boost::tie(principle_curvature_map, created) = g1.add_property_map>("v:principle_curvature_map", { 0, 0, + >>("v:principal_curvature_map", { 0, 0, Epic_Kernel::Vector_3 (0,0,0), Epic_Kernel::Vector_3 (0,0,0)}); assert(created); @@ -62,7 +62,7 @@ int main(int argc, char* argv[]) // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) - + /*Surface_Mesh::Property_map vnm; boost::tie(vnm, created) = g1.add_property_map( "v:vnm", Epic_Kernel::Vector_3(0, 0, 0) @@ -82,12 +82,12 @@ int main(int argc, char* argv[]) ); PMP::interpolated_corrected_principal_curvatures( g1, - principle_curvature_map + principal_curvature_map ); for (vertex_descriptor v : vertices(g1)) { - auto PC = principle_curvature_map[v]; + auto PC = principal_curvature_map[v]; std::cout << v.idx() << ": HC = " << mean_curvature_map[v] << ", GC = " << gaussian_curvature_map[v] << "\n" << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 3e56905068f3..43aff72dec2b 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -35,7 +35,7 @@ int main(int argc, char* argv[]) Epic_Kernel::FT, Epic_Kernel::Vector_3, Epic_Kernel::Vector_3 - >> principle_curvature_map; + >> principal_curvature_map; PMP::interpolated_corrected_mean_curvature( g1, @@ -44,7 +44,7 @@ int main(int argc, char* argv[]) // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) - + /*std::unordered_map vnm; PMP::interpolated_corrected_mean_curvature( @@ -59,13 +59,13 @@ int main(int argc, char* argv[]) ); PMP::interpolated_corrected_principal_curvatures( g1, - boost::make_assoc_property_map(principle_curvature_map) + boost::make_assoc_property_map(principal_curvature_map) ); int i = 0; for (vertex_descriptor v : vertices(g1)) { - auto PC = principle_curvature_map[v]; + auto PC = principal_curvature_map[v]; std::cout << i << ": HC = " << mean_curvature_map[v] << ", GC = " << gaussian_curvature_map[v] << "\n" << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 0b729978c7e7..59e6438b6763 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -72,23 +72,23 @@ void compute(SMesh* sMesh, typename boost::property_map::type vpmap = get(CGAL::vertex_point, *sMesh); bool created = false; - SMesh::Property_map principle_curvature_map; + SMesh::Property_map principal_curvature_map; - boost::tie(principle_curvature_map, created) = sMesh->add_property_map - ("v:principle_curvature_map", { 0, 0, + boost::tie(principal_curvature_map, created) = sMesh->add_property_map + ("v:principal_curvature_map", { 0, 0, Vector(0,0,0), Vector(0,0,0)}); assert(created); PMP::interpolated_corrected_principal_curvatures( *sMesh, - principle_curvature_map + principal_curvature_map ); typename EpicKernel::FT max_curvature_magnitude_on_mesh = 0; for (vertex_descriptor v : vertices(*sMesh)) { - const PrincipalCurvatureTuple pc = principle_curvature_map[v]; + const PrincipalCurvatureTuple pc = principal_curvature_map[v]; max_curvature_magnitude_on_mesh = max(max_curvature_magnitude_on_mesh, max(abs(get<0>(pc)), get<1>(pc))); } @@ -114,7 +114,7 @@ void compute(SMesh* sMesh, avg_edge_length /= n; } - const PrincipalCurvatureTuple pc = principle_curvature_map[v]; + const PrincipalCurvatureTuple pc = principal_curvature_map[v]; Vector umin = (std::get<0>(pc)/ max_curvature_magnitude_on_mesh) * std::get<2>(pc) * avg_edge_length; Vector umax = (std::get<1>(pc)/ max_curvature_magnitude_on_mesh) * std::get<3>(pc) * avg_edge_length; From 48fc5aeebd9cb076daf20d42c769bb0fa73f797a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 6 Nov 2022 18:19:39 +0200 Subject: [PATCH 063/943] dynamic property maps --- ...nterpolated_corrected_curvature_measures.h | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 8f5e1d338edb..d2765c8aa527 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -702,10 +702,12 @@ template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::property_map>::const_type FaceMeasureMap; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef std::unordered_map VertexMeasureMap_tag; + typedef typename boost::property_map>::const_type VertexMeasureMap; typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -713,13 +715,11 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; - FaceMeasureMap_tag mu0_init, mu1_init; - boost::associative_property_map - mu0_map(mu0_init), mu1_map(mu1_init); + FaceMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + FaceMeasureMap mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); - VertexMeasureMap_tag mu0_expand_init, mu1_expand_init; - boost::associative_property_map - mu0_expand_map(mu0_expand_init), mu1_expand_map(mu1_expand_init); + VertexMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + VertexMeasureMap mu1_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_measure_mesh(pmesh, mu1_map, internal::MU1_MEAN_CURVATURE_MEASURE, np); @@ -766,10 +766,12 @@ template::type GT; typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef std::unordered_map FaceMeasureMap_tag; + typedef typename boost::property_map>::const_type FaceMeasureMap; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef std::unordered_map VertexMeasureMap_tag; + typedef typename boost::property_map>::const_type VertexMeasureMap; typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -777,13 +779,11 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; - FaceMeasureMap_tag mu0_init, mu2_init; - boost::associative_property_map - mu0_map(mu0_init), mu2_map(mu2_init); + FaceMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + FaceMeasureMap mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); - VertexMeasureMap_tag mu0_expand_init, mu2_expand_init; - boost::associative_property_map - mu0_expand_map(mu0_expand_init), mu2_expand_map(mu2_expand_init); + VertexMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + VertexMeasureMap mu2_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_measure_mesh(pmesh, mu2_map, internal::MU2_GAUSSIAN_CURVATURE_MEASURE, np); From 38c66a61e338950689bf6efcbe6aea42f6b74e8a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 6 Nov 2022 18:23:51 +0200 Subject: [PATCH 064/943] typo fixes --- .../interpolated_corrected_curvatures_example.cpp | 2 +- .../Curvatures/interpolated_corrected_curvature_measures.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 78307b952e4f..3916b1ea3e1a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -37,7 +37,7 @@ int main(int argc, char* argv[]) boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); assert(created); - // we use a tuble of 2 scalar values and 2 vectors for principal curvatures and directions + // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions Surface_Mesh::Property_map Date: Sun, 6 Nov 2022 19:06:19 +0200 Subject: [PATCH 065/943] tab to space --- ...est_interopolated_corrected_curvatures.cpp | 238 +++++++++--------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp index e7b473141562..7e376c887716 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp @@ -19,130 +19,130 @@ typedef boost::graph_traits::edge_descriptor edge_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel::FT rel_noise_magnitude) { - SMesh pmesh; - const std::string filename = CGAL::data_file_path(mesh_path); - - if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) - { - std::cerr << "Invalid input file." << std::endl; - } - - bool created = false; - - SMesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); - assert(created); - - boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); - assert(created); - - // getting the max and min edge lengthes - const auto edge_range = CGAL::edges(pmesh); - - const auto edge_length_comparator = [&, pmesh](auto l, auto r) { - return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); - }; - - const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); - - const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); - - - if (rel_noise_magnitude > 0) - { - if (!CGAL::is_triangle_mesh(pmesh)) - return; - - SMesh::Property_map vnm; - boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); - assert(created); - - CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); - - PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - } - else { - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - - } - - - - //PMP::interpolated_corrected_mean_curvature( - // pmesh, - // mean_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - //PMP::interpolated_corrected_gaussian_curvature( - // pmesh, - // gaussian_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - - - const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - - std::cout << "# " << mesh_path << ":\n" - << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" - << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" - << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" - << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; + SMesh pmesh; + const std::string filename = CGAL::data_file_path(mesh_path); + + if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) + { + std::cerr << "Invalid input file." << std::endl; + } + + bool created = false; + + SMesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); + assert(created); + + boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); + assert(created); + + // getting the max and min edge lengthes + const auto edge_range = CGAL::edges(pmesh); + + const auto edge_length_comparator = [&, pmesh](auto l, auto r) { + return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); + }; + + const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); + + const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); + + + if (rel_noise_magnitude > 0) + { + if (!CGAL::is_triangle_mesh(pmesh)) + return; + + SMesh::Property_map vnm; + boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); + assert(created); + + CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); + + PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + } + else { + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + + } + + + + //PMP::interpolated_corrected_mean_curvature( + // pmesh, + // mean_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + //PMP::interpolated_corrected_gaussian_curvature( + // pmesh, + // gaussian_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + + + const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + + std::cout << "# " << mesh_path << ":\n" + << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" + << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" + << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" + << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; } int main() { - const std::vector mesh_pathes_to_test = { - "meshes/icc_test/Sphere Quads + Tris.obj", - "meshes/icc_test/Sphere Quads + Tris 100352.obj", - "meshes/icc_test/Sphere Tris Ico.obj", - "meshes/icc_test/Sphere Tris Tet.obj", - "meshes/icc_test/Sphere Tris Oct.obj", - "meshes/icc_test/Sphere Quads.obj", - "meshes/icc_test/Sphere Quads Remesh.obj", - "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", - "meshes/icc_test/Cube with fillet Quads.obj", - "meshes/cylinder.off", - "meshes/icc_test/Lantern Tris.obj", - "meshes/icc_test/Lantern Quads.obj" - }; - - const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; - const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; - - for (auto mesh_path : mesh_pathes_to_test) { - for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) - for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) - { - test(mesh_path, rel_expansion_radius, rel_noise_magnitude); - } - - std::cout << "_________________________________________________________________________________\n\n"; - } + const std::vector mesh_pathes_to_test = { + "meshes/icc_test/Sphere Quads + Tris.obj", + "meshes/icc_test/Sphere Quads + Tris 100352.obj", + "meshes/icc_test/Sphere Tris Ico.obj", + "meshes/icc_test/Sphere Tris Tet.obj", + "meshes/icc_test/Sphere Tris Oct.obj", + "meshes/icc_test/Sphere Quads.obj", + "meshes/icc_test/Sphere Quads Remesh.obj", + "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", + "meshes/icc_test/Cube with fillet Quads.obj", + "meshes/cylinder.off", + "meshes/icc_test/Lantern Tris.obj", + "meshes/icc_test/Lantern Quads.obj" + }; + + const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; + const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; + + for (auto mesh_path : mesh_pathes_to_test) { + for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) + for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) + { + test(mesh_path, rel_expansion_radius, rel_noise_magnitude); + } + + std::cout << "_________________________________________________________________________________\n\n"; + } } From 4295fd4e07645213ab3ac097cfa60821a2900d7b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 6 Nov 2022 19:49:37 +0200 Subject: [PATCH 066/943] enum minor fix --- .../Display/Display_property_plugin.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index cda67cbd9700..c69b73694980 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -338,7 +338,10 @@ class DisplayPropertyPlugin : typedef CGAL::Heat_method_3::Surface_mesh_geodesic_distances_3 Heat_method_idt; typedef CGAL::dynamic_vertex_property_t Vertex_source_tag; typedef boost::property_map::type Vertex_source_map; - + enum CurvatureType { + MEAN_CURVATURE, + GAUSSIAN_CURVATURE, +}; public: bool applicable(QAction* action) const Q_DECL_OVERRIDE @@ -613,11 +616,11 @@ private Q_SLOTS: sm_item->setRenderingMode(Gouraud); break; case 4: // Interpolated Corrected Mean Curvature - displayInterpolatedCurvatureMeasure(sm_item, PMP::MU1_MEAN_CURVATURE_MEASURE); + displayInterpolatedCurvatureMeasure(sm_item, MEAN_CURVATURE); sm_item->setRenderingMode(Gouraud); break; case 5: // Interpolated Corrected Gaussian Curvature - displayInterpolatedCurvatureMeasure(sm_item, PMP::MU2_GAUSSIAN_CURVATURE_MEASURE); + displayInterpolatedCurvatureMeasure(sm_item, GAUSSIAN_CURVATURE); sm_item->setRenderingMode(Gouraud); break; default: @@ -843,9 +846,11 @@ private Q_SLOTS: } - void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, PMP::Curvature_measure_index mu_index) + void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, CurvatureType mu_index) { - std::string tied_string = (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE)? + if (mu_index != MEAN_CURVATURE && mu_index != GAUSSIAN_CURVATURE) return; + + std::string tied_string = (mu_index == MEAN_CURVATURE)? "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; SMesh& smesh = *item->face_graph(); @@ -860,13 +865,13 @@ private Q_SLOTS: if (non_init) { if (vnm_exists) { - if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) + if (mu_index == MEAN_CURVATURE) PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); else PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); } else { - if (mu_index == PMP::MU1_MEAN_CURVATURE_MEASURE) + if (mu_index == MEAN_CURVATURE) PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); else PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); @@ -887,16 +892,13 @@ private Q_SLOTS: min_index = v; } } - switch (mu_index) - { - case PMP::MU1_MEAN_CURVATURE_MEASURE: + if (mu_index == MEAN_CURVATURE){ mean_curvature_max[item] = std::make_pair(res_max, max_index); mean_curvature_min[item] = std::make_pair(res_min, min_index); - break; - case PMP::MU2_GAUSSIAN_CURVATURE_MEASURE: + } + else { gaussian_curvature_max[item] = std::make_pair(res_max, max_index); gaussian_curvature_min[item] = std::make_pair(res_min, min_index); - break; } connect(item, &Scene_surface_mesh_item::itemChanged, From aeaf881c49c8969ec6b1024fb93e4de8e3306ff6 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 6 Nov 2022 20:35:05 +0200 Subject: [PATCH 067/943] minor fix max func --- .../PMP/Interpolated_corrected_principal_curvatures_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 59e6438b6763..21b292b05d0c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -89,7 +89,7 @@ void compute(SMesh* sMesh, for (vertex_descriptor v : vertices(*sMesh)) { const PrincipalCurvatureTuple pc = principal_curvature_map[v]; - max_curvature_magnitude_on_mesh = max(max_curvature_magnitude_on_mesh, max(abs(get<0>(pc)), get<1>(pc))); + max_curvature_magnitude_on_mesh = std::max(max_curvature_magnitude_on_mesh, std::max(abs(get<0>(pc)), get<1>(pc))); } for(vertex_descriptor v : vertices(*sMesh)) From 8efd947d53a12aa751eaec67f2ae4a37a1b862a3 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 7 Nov 2022 10:58:45 +0200 Subject: [PATCH 068/943] doc fixes --- ...nterpolated_corrected_curvature_measures.h | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 6426cae12de7..6e659e4e6ec8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -686,6 +686,41 @@ template::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* * @see `interpolated_corrected_gaussian_curvature()` * @see `interpolated_corrected_principal_curvatures()` */ @@ -751,6 +786,41 @@ template::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* * @see `interpolated_corrected_mean_curvature()` * @see `interpolated_corrected_principal_curvatures()` */ @@ -837,6 +907,17 @@ template Date: Mon, 7 Nov 2022 11:00:29 +0200 Subject: [PATCH 069/943] trailing white spaces --- ...nterpolated_corrected_curvature_measures.h | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 6e659e4e6ec8..7658f1f4dbb1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -720,7 +720,7 @@ template Date: Tue, 8 Nov 2022 19:19:40 +0200 Subject: [PATCH 070/943] dynamic property maps --- ...nterpolated_corrected_curvature_measures.h | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 7658f1f4dbb1..8a9949b073c8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -26,7 +26,6 @@ #include #include -#include #include #define EXPANDING_RADIUS_EPSILON 1e-6 @@ -932,6 +931,18 @@ template::type GT; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::property_map>::const_type FaceScalarMeasureMap; + typedef typename boost::property_map>>::const_type FaceArrayMeasureMap; + + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::property_map>::const_type VertexScalarMeasureMap; + typedef typename boost::property_map>>::const_type VertexMatrixMeasureMap; + typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::value) compute_vertex_normals(pmesh, vnm, np); + FaceScalarMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + FaceArrayMeasureMap muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); - - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef std::unordered_map FaceScalarMeasureMap_tag; - // using std:: array to store FT values on the 9 combinations of the standard 3D basis - typedef std::unordered_map> FaceArrayMeasureMap_tag; - - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef std::unordered_map VertexScalarMeasureMap_tag; - // using Eigen matrix to store & Process FT values on the 9 combinations of the standard 3D basis - typedef std::unordered_map> VertexMatrixMeasureMap_tag; - - - FaceScalarMeasureMap_tag mu0_init; - boost::associative_property_map - mu0_map(mu0_init); - - FaceArrayMeasureMap_tag muXY_init; - boost::associative_property_map - muXY_map(muXY_init); - - VertexScalarMeasureMap_tag mu0_expand_init; - boost::associative_property_map - mu0_expand_map(mu0_expand_init); - - VertexMatrixMeasureMap_tag muXY_expand_init; - boost::associative_property_map - muXY_expand_map(muXY_expand_init); + VertexScalarMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + VertexMatrixMeasureMap muXY_expand_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); From 866287a98ee0aa02e213873d8c50a1240e109f20 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 8 Nov 2022 20:13:04 +0200 Subject: [PATCH 071/943] minor naming conventions fixes --- ...nterpolated_corrected_curvature_measures.h | 140 +++++++++--------- .../internal/parameters_interface.h | 3 + 2 files changed, 73 insertions(+), 70 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 8a9949b073c8..32c8fcdfcd47 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -351,21 +351,21 @@ template::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::type VNM; + Default_vector_map>::type Vertex_normal_map; using parameters::choose_parameter; using parameters::get_parameter; using parameters::is_default_parameter; - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); - VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + Vertex_normal_map vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), get(Vector_map_tag(), pmesh)); if (is_default_parameter::value) @@ -390,10 +390,10 @@ template x; std::vector u; - for (face_descriptor f : faces(pmesh)) + for (Face_descriptor f : faces(pmesh)) { - for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { typename GT::Point_3 p = get(vpm, v); x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); @@ -420,21 +420,21 @@ template::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::type VNM; + Default_vector_map>::type VertexNormalMap; using parameters::choose_parameter; using parameters::get_parameter; using parameters::is_default_parameter; - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); - VNM vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + VertexNormalMap vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), get(Vector_map_tag(), pmesh)); if (is_default_parameter::value) @@ -443,10 +443,10 @@ template x; std::vector u; - for (face_descriptor f : faces(pmesh)) + for (Face_descriptor f : faces(pmesh)) { - for (vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { typename GT::Point_3 p = get(vpm, v); x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); @@ -528,8 +528,8 @@ template::type GT; - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; const typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -539,8 +539,8 @@ template bfs_queue; - std::unordered_set bfs_visited; + std::queue bfs_queue; + std::unordered_set bfs_visited; typename GT::Point_3 vp = get(vpm, v); typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); @@ -548,7 +548,7 @@ template::null_face()) { bfs_queue.push(f); @@ -556,12 +556,12 @@ template x; - for (vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) { typename GT::Point_3 pi = get(vpm, vi); x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); @@ -573,7 +573,7 @@ template::null_face()) { @@ -603,8 +603,8 @@ template::type GT; - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; const typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -614,8 +614,8 @@ template bfs_queue; - std::unordered_set bfs_visited; + std::queue bfs_queue; + std::unordered_set bfs_visited; typename GT::Point_3 vp = get(vpm, v); typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); @@ -623,7 +623,7 @@ template corrected_muXY = Eigen::Matrix::Zero(); - for (face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f != boost::graph_traits::null_face()) { bfs_queue.push(f); @@ -631,12 +631,12 @@ template x; - for (vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) { typename GT::Point_3 pi = get(vpm, vi); x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); @@ -654,7 +654,7 @@ template::null_face()) { @@ -678,7 +678,7 @@ template::%vertex_descriptor` as key type and `GT::FT` as value type. +* `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. @@ -690,7 +690,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for @@ -700,7 +700,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be @@ -735,13 +735,13 @@ template::type GT; - typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; typedef typename boost::property_map>::const_type FaceMeasureMap; + CGAL::dynamic_face_property_t>::const_type Face_measure_map; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; typedef typename boost::property_map>::const_type VertexMeasureMap; + CGAL::dynamic_vertex_property_t>::const_type Vertex_measure_map; typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -749,16 +749,16 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; - FaceMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - FaceMeasureMap mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); + Face_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + Face_measure_map mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); - VertexMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - VertexMeasureMap mu1_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + Vertex_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + Vertex_measure_map mu1_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_measure_mesh(pmesh, mu1_map, internal::MU1_MEAN_CURVATURE_MEASURE, np); - for (vertex_descriptor v : vertices(pmesh)) + for (Vertex_descriptor v : vertices(pmesh)) { internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); @@ -778,7 +778,7 @@ template::%vertex_descriptor` as key type and `GT::FT` as value type. +* `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. @@ -790,7 +790,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for @@ -800,7 +800,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be @@ -834,13 +834,13 @@ template::type GT; - typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; typedef typename boost::property_map>::const_type FaceMeasureMap; + CGAL::dynamic_face_property_t>::const_type Face_measure_map; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; typedef typename boost::property_map>::const_type VertexMeasureMap; + CGAL::dynamic_vertex_property_t>::const_type Vertex_measure_map; typename GT::FT r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); @@ -848,16 +848,16 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; - FaceMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - FaceMeasureMap mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); + Face_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + Face_measure_map mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); - VertexMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - VertexMeasureMap mu2_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + Vertex_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + Vertex_measure_map mu2_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_measure_mesh(pmesh, mu2_map, internal::MU2_GAUSSIAN_CURVATURE_MEASURE, np); - for (vertex_descriptor v : vertices(pmesh)) + for (Vertex_descriptor v : vertices(pmesh)) { internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); @@ -877,7 +877,7 @@ template::%vertex_descriptor` as key type and +* `boost::graph_traits::%Vertex_descriptor` as key type and * `std::tuple, Eigen::Vector>` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * @@ -890,7 +890,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for @@ -900,7 +900,7 @@ template::%vertex_descriptor` +* `boost::graph_traits::%Vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be @@ -931,23 +931,23 @@ template::type GT; - typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; typedef typename boost::property_map>::const_type FaceScalarMeasureMap; + CGAL::dynamic_face_property_t>::const_type Face_scalar_measure_map; typedef typename boost::property_map>>::const_type FaceArrayMeasureMap; + CGAL::dynamic_face_property_t>>::const_type Face_array_measure_map; - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; typedef typename boost::property_map>::const_type VertexScalarMeasureMap; + CGAL::dynamic_vertex_property_t>::const_type Vertex_scalar_measure_map; typedef typename boost::property_map>>::const_type VertexMatrixMeasureMap; + CGAL::dynamic_vertex_property_t>>::const_type Vertex_matrix_measure_map; typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::type VNM; + Default_vector_map>::type VertexNormalMap; using parameters::choose_parameter; using parameters::get_parameter; @@ -957,7 +957,7 @@ template::value) compute_vertex_normals(pmesh, vnm, np); - FaceScalarMeasureMap mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - FaceArrayMeasureMap muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); + Face_scalar_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + Face_array_measure_map muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); - VertexScalarMeasureMap mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - VertexMatrixMeasureMap muXY_expand_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); + Vertex_scalar_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + Vertex_matrix_measure_map muXY_expand_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); internal::interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); - for (vertex_descriptor v : vertices(pmesh)) + for (Vertex_descriptor v : vertices(pmesh)) { internal::expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 9eea7e71e442..03ee822d0bc9 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -87,6 +87,9 @@ CGAL_add_named_parameter(number_of_points_per_edge_t, number_of_points_per_edge, CGAL_add_named_parameter(number_of_points_on_edges_t, number_of_points_on_edges, number_of_points_on_edges) CGAL_add_named_parameter(nb_points_per_area_unit_t, nb_points_per_area_unit, number_of_points_per_area_unit) CGAL_add_named_parameter(nb_points_per_distance_unit_t, nb_points_per_distance_unit, number_of_points_per_distance_unit) +CGAL_add_named_parameter(vertex_mean_curvature_map_t, vertex_mean_curvature_map, vertex_mean_curvature_map) +CGAL_add_named_parameter(vertex_gaussian_curvature_map_t, vertex_gaussian_curvature_map, vertex_gaussian_curvature_map) +CGAL_add_named_parameter(vertex_principal_curvature_map_t, vertex_principal_curvature_map, vertex_principal_curvature_map) CGAL_add_named_parameter(ball_radius_t, ball_radius, ball_radius) CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_orientation) CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides) From aff46b61624328468311bfe3e83172ade9bed7ec Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 9 Nov 2022 17:32:42 +0200 Subject: [PATCH 072/943] incomplete (integrating class for combined curvature computations) --- ...erpolated_corrected_curvatures_example.cpp | 19 +- ...nterpolated_corrected_curvature_measures.h | 1054 ++++++++++------- 2 files changed, 663 insertions(+), 410 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 3916b1ea3e1a..da6e9d2252f0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -38,19 +38,10 @@ int main(int argc, char* argv[]) assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> principal_curvature_map; - - boost::tie(principal_curvature_map, created) = g1.add_property_map>("v:principal_curvature_map", { 0, 0, + Surface_Mesh::Property_map> principal_curvature_map; + + boost::tie(principal_curvature_map, created) = g1.add_property_map> + ("v:principal_curvature_map", { 0, 0, Epic_Kernel::Vector_3 (0,0,0), Epic_Kernel::Vector_3 (0,0,0)}); assert(created); @@ -90,6 +81,6 @@ int main(int argc, char* argv[]) auto PC = principal_curvature_map[v]; std::cout << v.idx() << ": HC = " << mean_curvature_map[v] << ", GC = " << gaussian_curvature_map[v] << "\n" - << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 32c8fcdfcd47..c4a9154c1aa2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -26,6 +26,7 @@ #include #include +#include #include #define EXPANDING_RADIUS_EPSILON 1e-6 @@ -34,6 +35,32 @@ namespace CGAL { namespace Polygon_mesh_processing { +template +struct Principal_curvature { + typename GT::FT min_curvature; + typename GT::FT max_curvature; + typename GT::Vector_3 min_direction; + typename GT::Vector_3 max_direction; + + Principal_curvature() { + min_curvature = 0; + max_curvature = 0; + min_direction = typename GT::Vector_3(0, 0, 0); + max_direction = typename GT::Vector_3(0, 0, 0); + } + + Principal_curvature( + typename GT::FT min_curvature, + typename GT::FT max_curvature, + typename GT::Vector_3 min_direction, + typename GT::Vector_3 max_direction) { + this->min_curvature = min_curvature; + this->max_curvature = max_curvature; + this->min_direction = min_direction; + this->max_direction = max_direction; + } +}; + namespace internal { template @@ -57,6 +84,16 @@ enum Curvature_measure_index { MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density }; +template +struct Vertex_measures { + typename GT::FT area_measure = 0; + typename GT::FT mean_curvature_measure = 0; + typename GT::FT gaussian_curvature_measure = 0; + std::array anisotropic_measure = { 0, 0, 0, + 0, 0, 0, + 0, 0, 0 }; +}; + template typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, const std::vector& x = {}) @@ -336,130 +373,129 @@ std::array interpolated_corrected_anisotropic_measure_fa return muXY; } -template - void - interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, - FaceMeasureMap fmm, - const Curvature_measure_index mu_i, - const NamedParameters& np = parameters::default_values()) -{ - - typedef typename GetGeomTraits::type GT; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; - - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; - - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - - typename GetVertexPointMap::const_type - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - - Vertex_normal_map vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); - - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); - - std::function - &, const std::vector&)> - iccm_function; - switch (mu_i) - { - case MU0_AREA_MEASURE: - iccm_function = &interpolated_corrected_area_measure_face; - break; - case MU1_MEAN_CURVATURE_MEASURE: - iccm_function = &interpolated_corrected_mean_curvature_measure_face; - break; - case MU2_GAUSSIAN_CURVATURE_MEASURE: - iccm_function = &interpolated_corrected_gaussian_curvature_measure_face; - break; - } - - std::vector x; - std::vector u; - - for (Face_descriptor f : faces(pmesh)) - { - - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - typename GT::Point_3 p = get(vpm, v); - x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - - put(fmm, f, iccm_function(u, x)); - x.clear(); - u.clear(); - } -} - -template - void - interpolated_corrected_anisotropic_measure_mesh(const PolygonMesh& pmesh, - FaceMeasureMap fmm, - const NamedParameters& np = parameters::default_values()) -{ - - typedef typename GetGeomTraits::type GT; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type VertexNormalMap; - - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; - - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - - typename GetVertexPointMap::const_type - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - - VertexNormalMap vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); - - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); - - std::vector x; - std::vector u; - - for (Face_descriptor f : faces(pmesh)) - { - - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - typename GT::Point_3 p = get(vpm, v); - x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - - put(fmm, f, interpolated_corrected_anisotropic_measure_face(u, x)); - x.clear(); - u.clear(); - - } -} - +//template +// void +// interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, +// FaceMeasureMap fmm, +// const Curvature_measure_index mu_i, +// const NamedParameters& np = parameters::default_values()) +//{ +// +// typedef typename GetGeomTraits::type GT; +// +// typedef dynamic_vertex_property_t Vector_map_tag; +// typedef typename boost::property_map::const_type Default_vector_map; +// typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; +// +// using parameters::choose_parameter; +// using parameters::get_parameter; +// using parameters::is_default_parameter; +// +// typedef typename boost::graph_traits::face_descriptor Face_descriptor; +// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; +// typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; +// +// typename GetVertexPointMap::const_type +// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), +// get_const_property_map(CGAL::vertex_point, pmesh)); +// +// Vertex_normal_map vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), +// get(Vector_map_tag(), pmesh)); +// +// if (is_default_parameter::value) +// compute_vertex_normals(pmesh, vnm, np); +// +// std::function +// &, const std::vector&)> +// iccm_function; +// switch (mu_i) +// { +// case MU0_AREA_MEASURE: +// iccm_function = &interpolated_corrected_area_measure_face; +// break; +// case MU1_MEAN_CURVATURE_MEASURE: +// iccm_function = &interpolated_corrected_mean_curvature_measure_face; +// break; +// case MU2_GAUSSIAN_CURVATURE_MEASURE: +// iccm_function = &interpolated_corrected_gaussian_curvature_measure_face; +// break; +// } +// +// std::vector x; +// std::vector u; +// +// for (Face_descriptor f : faces(pmesh)) +// { +// +// for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) +// { +// typename GT::Point_3 p = get(vpm, v); +// x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); +// u.push_back(get(vnm, v)); +// } +// +// put(fmm, f, iccm_function(u, x)); +// x.clear(); +// u.clear(); +// } +//} +// +//template +// void +// interpolated_corrected_anisotropic_measure_mesh(const PolygonMesh& pmesh, +// FaceMeasureMap fmm, +// const NamedParameters& np = parameters::default_values()) +//{ +// +// typedef typename GetGeomTraits::type GT; +// +// typedef dynamic_vertex_property_t Vector_map_tag; +// typedef typename boost::property_map::const_type Default_vector_map; +// typedef typename internal_np::Lookup_named_param_def::type VertexNormalMap; +// +// using parameters::choose_parameter; +// using parameters::get_parameter; +// using parameters::is_default_parameter; +// +// typedef typename boost::graph_traits::face_descriptor Face_descriptor; +// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; +// typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; +// +// typename GetVertexPointMap::const_type +// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), +// get_const_property_map(CGAL::vertex_point, pmesh)); +// +// VertexNormalMap vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), +// get(Vector_map_tag(), pmesh)); +// +// if (is_default_parameter::value) +// compute_vertex_normals(pmesh, vnm, np); +// +// std::vector x; +// std::vector u; +// +// for (Face_descriptor f : faces(pmesh)) +// { +// +// for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) +// { +// typename GT::Point_3 p = get(vpm, v); +// x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); +// u.push_back(get(vnm, v)); +// } +// +// put(fmm, f, interpolated_corrected_anisotropic_measure_face(u, x)); +// x.clear(); +// u.clear(); +// +// } +//} // //template @@ -513,160 +549,472 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, return (r - d_min) / (d_max - d_min); } -template - void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, - FaceMeasureMap area_fmm, - FaceMeasureMap curvature_fmm, - VertexMeasureMap area_vmm, - VertexMeasureMap curvature_vmm, - const typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) +//template +// void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, +// FaceMeasureMap area_fmm, +// FaceMeasureMap curvature_fmm, +// VertexMeasureMap area_vmm, +// VertexMeasureMap curvature_vmm, +// const typename boost::graph_traits::vertex_descriptor v, +// const NamedParameters& np = parameters::default_values()) +//{ +// using parameters::choose_parameter; +// using parameters::get_parameter; +// +// typedef typename GetGeomTraits::type GT; +// +// typedef typename boost::graph_traits::face_descriptor Face_descriptor; +// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; +// +// const typename GT::FT +// r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); +// +// typename GetVertexPointMap::const_type +// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), +// get_const_property_map(CGAL::vertex_point, pmesh)); +// +// +// std::queue bfs_queue; +// std::unordered_set bfs_visited; +// +// typename GT::Point_3 vp = get(vpm, v); +// typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); +// +// typename GT::FT corrected_mu0 = 0; +// typename GT::FT corrected_mui = 0; +// +// for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { +// if (f != boost::graph_traits::null_face()) +// { +// bfs_queue.push(f); +// bfs_visited.insert(f); +// } +// } +// while (!bfs_queue.empty()) { +// Face_descriptor fi = bfs_queue.front(); +// bfs_queue.pop(); +// +// // looping over vertices in face to get point coordinates +// std::vector x; +// for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) +// { +// typename GT::Point_3 pi = get(vpm, vi); +// x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); +// } +// +// const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); +// +// if (f_ratio != 0.0) +// { +// corrected_mu0 += f_ratio * get(area_fmm, fi); +// corrected_mui += f_ratio * get(curvature_fmm, fi); +// for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) +// { +// if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) +// { +// bfs_queue.push(fj); +// bfs_visited.insert(fj); +// } +// } +// } +// } +// put(area_vmm, v, corrected_mu0); +// put(curvature_vmm, v, corrected_mui); +//} +// +//template +// void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, +// AreaFaceMeasureMap area_fmm, +// AnisotropicFaceMeasureMap aniso_fmm, +// AreaVertexMeasureMap area_vmm, +// AnisotropicVertexMeasureMap aniso_vmm, +// const typename boost::graph_traits::vertex_descriptor v, +// const NamedParameters& np = parameters::default_values()) +//{ +// using parameters::choose_parameter; +// using parameters::get_parameter; +// +// typedef typename GetGeomTraits::type GT; +// +// typedef typename boost::graph_traits::face_descriptor Face_descriptor; +// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; +// +// const typename GT::FT +// r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); +// +// typename GetVertexPointMap::const_type +// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), +// get_const_property_map(CGAL::vertex_point, pmesh)); +// +// +// std::queue bfs_queue; +// std::unordered_set bfs_visited; +// +// typename GT::Point_3 vp = get(vpm, v); +// typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); +// +// typename GT::FT corrected_mu0 = 0; +// Eigen::Matrix corrected_muXY = Eigen::Matrix::Zero(); +// +// for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { +// if (f != boost::graph_traits::null_face()) +// { +// bfs_queue.push(f); +// bfs_visited.insert(f); +// } +// } +// while (!bfs_queue.empty()) { +// Face_descriptor fi = bfs_queue.front(); +// bfs_queue.pop(); +// +// // looping over vertices in face to get point coordinates +// std::vector x; +// for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) +// { +// typename GT::Point_3 pi = get(vpm, vi); +// x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); +// } +// +// const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); +// +// if (f_ratio != 0.0) +// { +// corrected_mu0 += f_ratio * get(area_fmm, fi); +// +// std::array muXY_face = get(aniso_fmm, fi); +// +// for (std::size_t ix = 0; ix < 3; ix++) +// for (std::size_t iy = 0; iy < 3; iy++) +// corrected_muXY(ix, iy) += f_ratio * muXY_face[ix * 3 + iy]; +// +// for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) +// { +// if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) +// { +// bfs_queue.push(fj); +// bfs_visited.insert(fj); +// } +// } +// } +// } +// put(area_vmm, v, corrected_mu0); +// put(aniso_vmm, v, corrected_muXY); +//} + + +template +Principal_curvature principal_curvature_from_anisotropic_measures( + const std::array anisotropic_measure, + const typename GT::FT v_mu0, + const typename GT::Vector_3 u_GT +) { - using parameters::choose_parameter; - using parameters::get_parameter; + Eigen::Matrix v_muXY = Eigen::Matrix::Zero(); + + for (std::size_t ix = 0; ix < 3; ix++) + for (std::size_t iy = 0; iy < 3; iy++) + v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; + + Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); + const typename GT::FT K = 1000 * v_mu0; + v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); + + Eigen::SelfAdjointEigenSolver> eigensolver; + + eigensolver.computeDirect(v_muXY); + + if (eigensolver.info() != Eigen::Success) + return Principal_curvature(); + + const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); + const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); + + const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); + const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); + + return Principal_curvature( + (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, + (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + min_eig_vec, + max_eig_vec + ); +} + +template +class Interpolated_corrected_curvatures_computer +{ typedef typename GetGeomTraits::type GT; + typedef typename GT::FT FT; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + + typedef typename GetVertexPointMap::const_type Vertex_position_map; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + + typedef dynamic_vertex_property_t Scalar_map_tag; + typedef typename boost::property_map::const_type Default_scalar_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_scalar_curvature_map; + + typedef dynamic_vertex_property_t> Principal_map_tag; + typedef typename boost::property_map::const_type Default_principal_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvature_map; + + + + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; typedef typename boost::graph_traits::face_descriptor Face_descriptor; typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - const typename GT::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); + typedef typename boost::property_map>::type Face_scalar_measure_map; + typedef typename boost::property_map>>::type Face_anisotropic_measure_map; + +private: + const PolygonMesh& pmesh; + Vertex_position_map vpm; + Vertex_normal_map vnm; + FT ball_radius; + + bool is_mean_curvature_selected; + bool is_gaussian_curvature_selected; + bool is_principal_curvature_selected; + + Vertex_scalar_curvature_map mean_curvature_map, gaussian_curvature_map; + Vertex_principal_curvature_map principal_curvature_map; + + Face_scalar_measure_map mu0_map, mu1_map, mu2_map; + Face_anisotropic_measure_map muXY_map; + + void set_property_maps() { + mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); + muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); + + } + + void set_named_params(const NamedParameters& np = parameters::default_values()) + { + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; - typename GetVertexPointMap::const_type vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), get_const_property_map(CGAL::vertex_point, pmesh)); + vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); - std::queue bfs_queue; - std::unordered_set bfs_visited; + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); - typename GT::Point_3 vp = get(vpm, v); - typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); + const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - typename GT::FT corrected_mu0 = 0; - typename GT::FT corrected_mui = 0; + if (is_mean_curvature_selected) + mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), get(CGAL::dynamic_vertex_property_t(), pmesh)); + if (is_gaussian_curvature_selected) + gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), get(CGAL::dynamic_vertex_property_t(), pmesh)); + if (is_principal_curvature_selected) + principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), get(CGAL::dynamic_vertex_property_t>(), pmesh)); - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); - } + set_ball_radius(radius); } - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); - // looping over vertices in face to get point coordinates - std::vector x; - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - typename GT::Point_3 pi = get(vpm, vi); - x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); - } + void set_ball_radius(const FT radius) { + if (radius == 0) + ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + } + +public: + + Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, + bool is_mean_curvature_selected, + bool is_gaussian_curvature_selected, + bool is_principal_curvature_selected, + const NamedParameters& np = parameters::default_values() + ) : + pmesh(pmesh), + is_mean_curvature_selected(is_mean_curvature_selected), + is_gaussian_curvature_selected(is_gaussian_curvature_selected), + is_principal_curvature_selected(is_principal_curvature_selected) + { + if (!is_mean_curvature_selected && !is_gaussian_curvature_selected && !is_principal_curvature_selected) + return; + + set_named_params(); - const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); + set_property_maps(); - if (f_ratio != 0.0) + compute_selected_curvatures(); + + } + + void interpolated_corrected_all_measures_all_faces() + { + std::vector x; + std::vector u; + + for (Face_descriptor f : faces(pmesh)) { - corrected_mu0 += f_ratio * get(area_fmm, fi); - corrected_mui += f_ratio * get(curvature_fmm, fi); - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) - { - bfs_queue.push(fj); - bfs_visited.insert(fj); - } + Point_3 p = get(vpm, v); + x.push_back(Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); } - } - } - put(area_vmm, v, corrected_mu0); - put(curvature_vmm, v, corrected_mui); -} - -template - void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, - AreaFaceMeasureMap area_fmm, - AnisotropicFaceMeasureMap aniso_fmm, - AreaVertexMeasureMap area_vmm, - AnisotropicVertexMeasureMap aniso_vmm, - const typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) -{ - using parameters::choose_parameter; - using parameters::get_parameter; + put(mu0_map, f, interpolated_corrected_area_measure_face(u, x)); - typedef typename GetGeomTraits::type GT; + if (is_mean_curvature_selected) + put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + if (is_gaussian_curvature_selected) + put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u, x)); - const typename GT::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); + if (is_principal_curvature_selected) + put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); - typename GetVertexPointMap::const_type - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); + x.clear(); + u.clear(); + } + } + Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) + { + Vertex_measures vertex_curvatures; - std::queue bfs_queue; - std::unordered_set bfs_visited; + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + vertex_curvatures.area_measure += get(mu0_map, f); - typename GT::Point_3 vp = get(vpm, v); - typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += get(mu1_map, f); - typename GT::FT corrected_mu0 = 0; - Eigen::Matrix corrected_muXY = Eigen::Matrix::Zero(); + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += get(mu2_map, f); - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, f); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; + } } + + return vertex_curvatures; } - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); - // looping over vertices in face to get point coordinates - std::vector x; - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - typename GT::Point_3 pi = get(vpm, vi); - x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); - } + Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) + { + std::queue bfs_queue; + std::unordered_set bfs_visited; - const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); - if (f_ratio != 0.0) - { - corrected_mu0 += f_ratio * get(area_fmm, fi); + Vertex_measures vertex_curvatures; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_queue.push(f); + bfs_visited.insert(f); + } + } + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); - std::array muXY_face = get(aniso_fmm, fi); + // looping over vertices in face to get point coordinates + std::vector x; + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + } - for (std::size_t ix = 0; ix < 3; ix++) - for (std::size_t iy = 0; iy < 3; iy++) - corrected_muXY(ix, iy) += f_ratio * muXY_face[ix * 3 + iy]; + const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + if (f_ratio != 0.0) { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) + vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); + + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); + + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); + + if (is_principal_curvature_selected) { - bfs_queue.push(fj); - bfs_visited.insert(fj); + const std::array face_anisotropic_measure = get(muXY_map, fi); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } + + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) + { + bfs_queue.push(fj); + bfs_visited.insert(fj); + } } } } + return vertex_curvatures; + } + + void compute_selected_curvatures() { + interpolated_corrected_all_measures_all_faces(); + + for (Vertex_descriptor v : vertices(pmesh)) + { + Vertex_measures vertex_curvatures = (ball_radius < 0)? + expand_interpolated_corrected_measure_vertex_no_radius(v) : + expand_interpolated_corrected_measure_vertex(v); + + if (is_mean_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : + put(mean_curvature_map, v, 0); + } + + if (is_gaussian_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : + put(gaussian_curvature_map, v, 0); + } + + if (is_principal_curvature_selected) { + const Vector_3 v_normal = get(vnm, v); + const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( + vertex_curvatures.anisotropic_measure, + vertex_curvatures.area_measure, + v_normal + ); + put(principal_curvature_map, v, principal_curvature); + } + } } - put(area_vmm, v, corrected_mu0); - put(aniso_vmm, v, corrected_muXY); -} + + + +}; } // namespace internal @@ -722,6 +1070,7 @@ template::type GT; - - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::property_map>::const_type Face_measure_map; - - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::property_map>::const_type Vertex_measure_map; - - typename GT::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); - - if (r == 0) - r = internal::average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - - Face_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - Face_measure_map mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); - - Vertex_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - Vertex_measure_map mu1_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - - internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); - internal::interpolated_corrected_measure_mesh(pmesh, mu1_map, internal::MU1_MEAN_CURVATURE_MEASURE, np); - - for (Vertex_descriptor v : vertices(pmesh)) - { - internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); - - typename GT::FT v_mu0 = get(mu0_expand_map, v); - if (v_mu0 != 0.0) - put(vcm, v, 0.5 * get(mu1_expand_map, v) / v_mu0); - else - put(vcm, v, 0); - } + internal::Interpolated_corrected_curvatures_computer(pmesh, true, false, false, np.vertex_mean_curvature_map(vcm)); } /** @@ -822,6 +1134,7 @@ template @@ -829,44 +1142,7 @@ template::type GT; - - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::property_map>::const_type Face_measure_map; - - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::property_map>::const_type Vertex_measure_map; - - typename GT::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); - - if (r == 0) - r = internal::average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - - Face_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - Face_measure_map mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); - - Vertex_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - Vertex_measure_map mu2_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - - internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); - internal::interpolated_corrected_measure_mesh(pmesh, mu2_map, internal::MU2_GAUSSIAN_CURVATURE_MEASURE, np); - - for (Vertex_descriptor v : vertices(pmesh)) - { - internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); - - typename GT::FT v_mu0 = get(mu0_expand_map, v); - if(v_mu0 != 0.0) - put(vcm, v, get(mu2_expand_map, v) / v_mu0); - else - put(vcm, v, 0); - } + internal::Interpolated_corrected_curvatures_computer(pmesh, false, true, false, np.vertex_gaussian_curvature_map(vcm)); } /** @@ -922,6 +1198,7 @@ template @@ -929,98 +1206,83 @@ template::type GT; - - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::property_map>::const_type Face_scalar_measure_map; - typedef typename boost::property_map>>::const_type Face_array_measure_map; - - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::property_map>::const_type Vertex_scalar_measure_map; - typedef typename boost::property_map>>::const_type Vertex_matrix_measure_map; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type VertexNormalMap; - - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; - - typename GetVertexPointMap::const_type - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - - VertexNormalMap vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); - - typename GT::FT - r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); - - if (r == 0) - r = internal::average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); - - Face_scalar_measure_map mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - Face_array_measure_map muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); - - Vertex_scalar_measure_map mu0_expand_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - Vertex_matrix_measure_map muXY_expand_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); - - internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); - internal::interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); + internal::Interpolated_corrected_curvatures_computer(pmesh, false, false, true, np.vertex_principal_curvature_map(vcm)); +} - for (Vertex_descriptor v : vertices(pmesh)) +// TODO: DOC +/** +* \ingroup PMP_corrected_curvatures_grp +* +* Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. +* By providing mean, gaussian and/or principal curvature property maps, the user +* can choose which curvatures to compute. +* +* @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". +* +* @param pmesh the polygon mesh. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using compute_vertex_normals()} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `interpolated_corrected_mean_curvature()` +* @see `interpolated_corrected_gaussian_curvature()` +* @see `interpolated_corrected_principal_curvatures()` +*/ +template + void interpolated_corrected_curvatures(const PolygonMesh& pmesh, + bool is_mean_curvature_selected, + bool is_gaussian_curvature_selected, + bool is_principal_curvature_selected, + const NamedParameters& np = parameters::default_values()) +{ + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) { - internal::expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); - - typename GT::FT v_mu0 = get(mu0_expand_map, v); - Eigen::Matrix v_muXY = get(muXY_expand_map, v); - - typename GT::Vector_3 u_GT = get(vnm, v); - - Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); - - const typename GT::FT K = 1000 * v_mu0; - - v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); - - Eigen::SelfAdjointEigenSolver> eigensolver; - - eigensolver.computeDirect(v_muXY); - - if (eigensolver.info() != Eigen::Success) - { - put(vcm, v, std::make_tuple( - 0, - 0, - typename GT::Vector_3(0, 0, 0), - typename GT::Vector_3(0, 0, 0))); - continue; - } - - const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); - const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); - - const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); - const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); - - put(vcm, v, std::make_tuple( - (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, - (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, - min_eig_vec, - max_eig_vec)); + internal::Interpolated_corrected_curvatures_computer( + pmesh, + is_mean_curvature_selected, + is_gaussian_curvature_selected, + is_principal_curvature_selected, + np + ); } } + } // namespace Polygon_mesh_processing } // namespace CGAL From 2dcb2939b9011cb3e6fa0b199d1ac226f996a0e8 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 13 Nov 2022 13:32:38 +0200 Subject: [PATCH 073/943] compute multiple curvatures at same time + no radius handled --- ...erpolated_corrected_curvatures_example.cpp | 8 ++ ...nterpolated_corrected_curvature_measures.h | 83 ++++++++----------- 2 files changed, 42 insertions(+), 49 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index da6e9d2252f0..a2fd69fff1a7 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -76,6 +76,14 @@ int main(int argc, char* argv[]) principal_curvature_map ); + PMP::interpolated_corrected_curvatures( + g1, + CGAL::parameters::ball_radius(0) + .vertex_mean_curvature_map(mean_curvature_map) + .vertex_gaussian_curvature_map(gaussian_curvature_map) + .vertex_principal_curvature_map(principal_curvature_map) + ); + for (vertex_descriptor v : vertices(g1)) { auto PC = principal_curvature_map[v]; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index c4a9154c1aa2..b83bf0e70dff 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -753,6 +753,11 @@ class Interpolated_corrected_curvatures_computer typedef typename GT::Point_3 Point_3; typedef typename GT::Vector_3 Vector_3; + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + typedef typename GetVertexPointMap::const_type Vertex_position_map; typedef dynamic_vertex_property_t Vector_map_tag; @@ -761,29 +766,24 @@ class Interpolated_corrected_curvatures_computer NamedParameters, Default_vector_map>::type Vertex_normal_map; - typedef dynamic_vertex_property_t Scalar_map_tag; - typedef typename boost::property_map::const_type Default_scalar_map; + typedef Constant_property_map Default_scalar_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_scalar_curvature_map; + Default_scalar_map>::type Vertex_mean_curvature_map; - typedef dynamic_vertex_property_t> Principal_map_tag; - typedef typename boost::property_map::const_type Default_principal_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_gaussian_curvature_map; + + typedef Constant_property_map> Default_principal_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvature_map; - - - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - typedef typename boost::property_map>::type Face_scalar_measure_map; + CGAL::dynamic_face_property_t>::const_type Face_scalar_measure_map; typedef typename boost::property_map>>::type Face_anisotropic_measure_map; + CGAL::dynamic_face_property_t>>::const_type Face_anisotropic_measure_map; private: const PolygonMesh& pmesh; @@ -795,7 +795,8 @@ class Interpolated_corrected_curvatures_computer bool is_gaussian_curvature_selected; bool is_principal_curvature_selected; - Vertex_scalar_curvature_map mean_curvature_map, gaussian_curvature_map; + Vertex_mean_curvature_map mean_curvature_map; + Vertex_gaussian_curvature_map gaussian_curvature_map; Vertex_principal_curvature_map principal_curvature_map; Face_scalar_measure_map mu0_map, mu1_map, mu2_map; @@ -809,7 +810,7 @@ class Interpolated_corrected_curvatures_computer } - void set_named_params(const NamedParameters& np = parameters::default_values()) + void set_named_params(const NamedParameters& np) { using parameters::choose_parameter; using parameters::get_parameter; @@ -826,12 +827,15 @@ class Interpolated_corrected_curvatures_computer const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - if (is_mean_curvature_selected) - mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), get(CGAL::dynamic_vertex_property_t(), pmesh)); - if (is_gaussian_curvature_selected) - gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), get(CGAL::dynamic_vertex_property_t(), pmesh)); - if (is_principal_curvature_selected) - principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), get(CGAL::dynamic_vertex_property_t>(), pmesh)); + is_mean_curvature_selected = !is_default_parameter::value; + is_gaussian_curvature_selected = !is_default_parameter::value; + is_principal_curvature_selected = !is_default_parameter::value; + + mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); + gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); + principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), Default_principal_map()); + + std::cout << is_mean_curvature_selected << is_gaussian_curvature_selected << is_principal_curvature_selected << std::endl; set_ball_radius(radius); } @@ -839,25 +843,18 @@ class Interpolated_corrected_curvatures_computer void set_ball_radius(const FT radius) { if (radius == 0) ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + ball_radius = radius; } public: Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, - bool is_mean_curvature_selected, - bool is_gaussian_curvature_selected, - bool is_principal_curvature_selected, const NamedParameters& np = parameters::default_values() ) : - pmesh(pmesh), - is_mean_curvature_selected(is_mean_curvature_selected), - is_gaussian_curvature_selected(is_gaussian_curvature_selected), - is_principal_curvature_selected(is_principal_curvature_selected) + pmesh(pmesh) { - if (!is_mean_curvature_selected && !is_gaussian_curvature_selected && !is_principal_curvature_selected) - return; - - set_named_params(); + set_named_params(np); set_property_maps(); @@ -1079,7 +1076,7 @@ template(pmesh, true, false, false, np.vertex_mean_curvature_map(vcm)); + internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_mean_curvature_map(vcm)); } /** @@ -1142,7 +1139,7 @@ template(pmesh, false, true, false, np.vertex_gaussian_curvature_map(vcm)); + internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_gaussian_curvature_map(vcm)); } /** @@ -1206,7 +1203,7 @@ template(pmesh, false, false, true, np.vertex_principal_curvature_map(vcm)); + internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_principal_curvature_map(vcm)); } // TODO: DOC @@ -1265,21 +1262,9 @@ template void interpolated_corrected_curvatures(const PolygonMesh& pmesh, - bool is_mean_curvature_selected, - bool is_gaussian_curvature_selected, - bool is_principal_curvature_selected, const NamedParameters& np = parameters::default_values()) { - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) - { - internal::Interpolated_corrected_curvatures_computer( - pmesh, - is_mean_curvature_selected, - is_gaussian_curvature_selected, - is_principal_curvature_selected, - np - ); - } + internal::Interpolated_corrected_curvatures_computer(pmesh, np); } From dbd18ed101a6e407f05201468bd04c814778f060 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 13 Nov 2022 13:34:18 +0200 Subject: [PATCH 074/943] trailing whitespaces --- .../interpolated_corrected_curvature_measures.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index b83bf0e70dff..183f823e8483 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -848,7 +848,7 @@ class Interpolated_corrected_curvatures_computer } public: - + Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, const NamedParameters& np = parameters::default_values() ) : @@ -911,7 +911,7 @@ class Interpolated_corrected_curvatures_computer vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; } } - + return vertex_curvatures; } @@ -981,8 +981,8 @@ class Interpolated_corrected_curvatures_computer for (Vertex_descriptor v : vertices(pmesh)) { - Vertex_measures vertex_curvatures = (ball_radius < 0)? - expand_interpolated_corrected_measure_vertex_no_radius(v) : + Vertex_measures vertex_curvatures = (ball_radius < 0)? + expand_interpolated_corrected_measure_vertex_no_radius(v) : expand_interpolated_corrected_measure_vertex(v); if (is_mean_curvature_selected) { @@ -1241,7 +1241,7 @@ template Date: Sun, 13 Nov 2022 17:59:01 +0200 Subject: [PATCH 075/943] minor fix --- ...nterpolated_corrected_curvature_measures.h | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 183f823e8483..1a0ef9891b00 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -835,8 +835,6 @@ class Interpolated_corrected_curvatures_computer gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), Default_principal_map()); - std::cout << is_mean_curvature_selected << is_gaussian_curvature_selected << is_principal_curvature_selected << std::endl; - set_ball_radius(radius); } @@ -856,12 +854,16 @@ class Interpolated_corrected_curvatures_computer { set_named_params(np); - set_property_maps(); - - compute_selected_curvatures(); + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) + { + set_property_maps(); + compute_selected_curvatures(); + } } +private: + void interpolated_corrected_all_measures_all_faces() { std::vector x; @@ -1073,10 +1075,10 @@ class Interpolated_corrected_curvatures_computer template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap vcm, - const NamedParameters& np = parameters::default_values()) + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_mean_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); } /** @@ -1136,10 +1138,10 @@ template void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap vcm, - const NamedParameters& np = parameters::default_values()) + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_gaussian_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); } /** @@ -1200,10 +1202,10 @@ template void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, - VertexCurvatureMap vcm, - const NamedParameters& np = parameters::default_values()) + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - internal::Interpolated_corrected_curvatures_computer(pmesh, np.vertex_principal_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvature_map(vcm)); } // TODO: DOC From 6ca73315496d290e77c67d5c8c10930801364adc Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 14 Nov 2022 11:26:13 +0200 Subject: [PATCH 076/943] fixes, doc, examples, general cleanup --- .../PackageDescription.txt | 2 + .../Polygon_mesh_processing.txt | 19 +- ...erpolated_corrected_curvatures_example.cpp | 68 ++-- ...orrected_curvatures_polyhedron_example.cpp | 61 ++-- ...nterpolated_corrected_curvature_measures.h | 343 +++--------------- 5 files changed, 136 insertions(+), 357 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index eae47c610011..93f25c89f1fb 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -204,6 +204,8 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` +- `CGAL::Polygon_mesh_processing::Principal_curvature` \cgalCRPSection{Normal Computation Functions} - `CGAL::Polygon_mesh_processing::compute_face_normal()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 8f222497a527..7932051ec000 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -879,7 +879,10 @@ not provide storage for the normals. **************************************** \section PMPICC Computing Curvatures -This package provides methods to compute curvatures on polygonal meshes based on #PAPER#. +This package provides methods to compute curvatures on polygonal meshes based on + + Interpolated corrected curvature measures for polygonal surfaces +. This includes mean curvature, gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. The algorithms used prove to work well in general. Also, on meshes with noise @@ -893,25 +896,29 @@ These computations are performed using : - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` + +Where it is recommended to use the last function for computing multiple curvatures (example: mean and gaussian) +as the implementation performs the shared computations only once, making it more efficient. \cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on the ball_radius named parameter which can be set to a value > 0 to get a smoother -distribution of valuesa and "diffuse" the extreme values of curvatures across the mesh. +distribution of values and "diffuse" the extreme values of curvatures across the mesh. \cgalFigureAnchor{icc_diff_radius}
\cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature distrubution on a bear mesh with different values for the expanding ball radius +The mean curvature distribution on a bear mesh with different values for the expanding ball radius \cgalFigureCaptionEnd Property maps are used to record the computed curvatures as shown in examples. \subsection ICCExample Interpolated Corrected Curvature Examples -Property maps are an API introduced in the boost library that allows to -associate values to keys. In the following examples, for each proberty map, we associate +Property maps are an API introduced in the boost library that allows associating +values to keys. In the following examples, for each property map, we associate a curvature value to each vertex. \subsubsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh. @@ -926,7 +933,7 @@ and store them in property maps provided by the class `Surface_mesh`. The following example illustrates how to compute the curvatures on vertices -and store them in unordered (or ordered) maps as the class `Polyhedron_3` does +and store them in dynamic property maps as the class `Polyhedron_3` does not provide storage for the curvatures. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index a2fd69fff1a7..ffb86d94795c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -10,19 +10,19 @@ namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; -typedef CGAL::Surface_mesh Surface_Mesh; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; +typedef CGAL::Surface_mesh Surface_Mesh; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { - Surface_Mesh g1; + Surface_Mesh smesh; const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); - if(!CGAL::IO::read_polygon_mesh(filename, g1)) + if(!CGAL::IO::read_polygon_mesh(filename, smesh)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; @@ -30,65 +30,67 @@ int main(int argc, char* argv[]) // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - Surface_Mesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); + Surface_Mesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = smesh.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); + boost::tie(gaussian_curvature_map, created) = smesh.add_property_map("v:gaussian_curvature_map", 0); assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> principal_curvature_map; + Surface_Mesh::Property_map> principal_curvature_map; - boost::tie(principal_curvature_map, created) = g1.add_property_map> + boost::tie(principal_curvature_map, created) = smesh.add_property_map> ("v:principal_curvature_map", { 0, 0, - Epic_Kernel::Vector_3 (0,0,0), - Epic_Kernel::Vector_3 (0,0,0)}); + Epic_kernel::Vector_3(0,0,0), + Epic_kernel::Vector_3(0,0,0) }); assert(created); + // user can call these fucntions to compute a specfic curvature type on each vertex. PMP::interpolated_corrected_mean_curvature( - g1, + smesh, mean_curvature_map ); + PMP::interpolated_corrected_gaussian_curvature( + smesh, + gaussian_curvature_map + ); + + PMP::interpolated_corrected_principal_curvatures( + smesh, + principal_curvature_map + ); + // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) - /*Surface_Mesh::Property_map vnm; - boost::tie(vnm, created) = g1.add_property_map( - "v:vnm", Epic_Kernel::Vector_3(0, 0, 0) + /*Surface_Mesh::Property_map vnm; + boost::tie(vnm, created) = smesh.add_property_map( + "v:vnm", Epic_kernel::Vector_3(0, 0, 0) ); assert(created); PMP::interpolated_corrected_mean_curvature( - g1, + smesh, mean_curvature_map, CGAL::parameters::ball_radius(0.5).vertex_normal_map(vnm) );*/ - PMP::interpolated_corrected_gaussian_curvature( - g1, - gaussian_curvature_map - ); - PMP::interpolated_corrected_principal_curvatures( - g1, - principal_curvature_map - ); - + // This function can be used to compute multiple curvature types by specifiying them as named parameters + // This is more efficient than computing each one separately (shared computations). PMP::interpolated_corrected_curvatures( - g1, - CGAL::parameters::ball_radius(0) - .vertex_mean_curvature_map(mean_curvature_map) - .vertex_gaussian_curvature_map(gaussian_curvature_map) + smesh, + CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) .vertex_principal_curvature_map(principal_curvature_map) ); - for (vertex_descriptor v : vertices(g1)) + for (vertex_descriptor v : vertices(smesh)) { auto PC = principal_curvature_map[v]; - std::cout << v.idx() << ": HC = " << mean_curvature_map[v] - << ", GC = " << gaussian_curvature_map[v] << "\n" - << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; + std::cout << v.idx() << ": HC = " << mean_curvature_map[v] + << ", GC = " << gaussian_curvature_map[v] << "\n" + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; } } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 43aff72dec2b..207625fd8485 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -11,35 +11,43 @@ namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; -typedef CGAL::Polyhedron_3 Polyhedron; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; +typedef CGAL::Polyhedron_3 Polyhedron; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { - Polyhedron g1; + Polyhedron polyhedron; const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); - if(!CGAL::IO::read_polygon_mesh(filename, g1)) + if(!CGAL::IO::read_polygon_mesh(filename, polyhedron)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; } - std::unordered_map mean_curvature_map, gaussian_curvature_map; - std::unordered_map> principal_curvature_map; + boost::property_map>::type + mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), + gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); + boost::property_map>>::type + principal_curvature_map = get(CGAL::dynamic_vertex_property_t< PMP::Principal_curvature>(), polyhedron); PMP::interpolated_corrected_mean_curvature( - g1, - boost::make_assoc_property_map(mean_curvature_map) + polyhedron, + mean_curvature_map + ); + + PMP::interpolated_corrected_gaussian_curvature( + polyhedron, + gaussian_curvature_map + ); + + PMP::interpolated_corrected_principal_curvatures( + polyhedron, + principal_curvature_map ); // uncomment this to compute a curvature while specifying named parameters @@ -48,27 +56,26 @@ int main(int argc, char* argv[]) /*std::unordered_map vnm; PMP::interpolated_corrected_mean_curvature( - g1, - boost::make_assoc_property_map(mean_curvature_map), + polyhedron, + mean_curvature_map, CGAL::parameters::ball_radius(0.5).vertex_normal_map(boost::make_assoc_property_map(vnm)) );*/ - PMP::interpolated_corrected_gaussian_curvature( - g1, - boost::make_assoc_property_map(gaussian_curvature_map) - ); - PMP::interpolated_corrected_principal_curvatures( - g1, - boost::make_assoc_property_map(principal_curvature_map) + // This function can be used to compute multiple curvature types by specifiying them as named parameters + // This is more efficient than computing each one separately (shared computations). + PMP::interpolated_corrected_curvatures( + polyhedron, + CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) + .vertex_principal_curvature_map(principal_curvature_map) ); int i = 0; - for (vertex_descriptor v : vertices(g1)) + for (vertex_descriptor v : vertices(polyhedron)) { - auto PC = principal_curvature_map[v]; - std::cout << i << ": HC = " << mean_curvature_map[v] - << ", GC = " << gaussian_curvature_map[v] << "\n" - << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; + auto PC = get(principal_curvature_map, v); + std::cout << i << ": HC = " << get(mean_curvature_map, v) + << ", GC = " << get(gaussian_curvature_map, v) << "\n" + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; i++; } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 1a0ef9891b00..0ed47db00584 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -35,11 +35,26 @@ namespace CGAL { namespace Polygon_mesh_processing { +/** +* \ingroup PMP_corrected_curvatures_grp +* +* \brief a struct for storing principal curvatures and directions. +* +* @tparam GT is the geometric traits class. +*/ template struct Principal_curvature { + + /// min curvature magnitude typename GT::FT min_curvature; + + /// max curvature magnitude typename GT::FT max_curvature; + + /// min curvature direction vector typename GT::Vector_3 min_direction; + + /// max curvature direction vector typename GT::Vector_3 max_direction; Principal_curvature() { @@ -373,138 +388,13 @@ std::array interpolated_corrected_anisotropic_measure_fa return muXY; } -//template -// void -// interpolated_corrected_measure_mesh(const PolygonMesh& pmesh, -// FaceMeasureMap fmm, -// const Curvature_measure_index mu_i, -// const NamedParameters& np = parameters::default_values()) -//{ -// -// typedef typename GetGeomTraits::type GT; -// -// typedef dynamic_vertex_property_t Vector_map_tag; -// typedef typename boost::property_map::const_type Default_vector_map; -// typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; -// -// using parameters::choose_parameter; -// using parameters::get_parameter; -// using parameters::is_default_parameter; -// -// typedef typename boost::graph_traits::face_descriptor Face_descriptor; -// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; -// typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; -// -// typename GetVertexPointMap::const_type -// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), -// get_const_property_map(CGAL::vertex_point, pmesh)); -// -// Vertex_normal_map vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), -// get(Vector_map_tag(), pmesh)); -// -// if (is_default_parameter::value) -// compute_vertex_normals(pmesh, vnm, np); -// -// std::function -// &, const std::vector&)> -// iccm_function; -// switch (mu_i) -// { -// case MU0_AREA_MEASURE: -// iccm_function = &interpolated_corrected_area_measure_face; -// break; -// case MU1_MEAN_CURVATURE_MEASURE: -// iccm_function = &interpolated_corrected_mean_curvature_measure_face; -// break; -// case MU2_GAUSSIAN_CURVATURE_MEASURE: -// iccm_function = &interpolated_corrected_gaussian_curvature_measure_face; -// break; -// } -// -// std::vector x; -// std::vector u; -// -// for (Face_descriptor f : faces(pmesh)) -// { -// -// for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) -// { -// typename GT::Point_3 p = get(vpm, v); -// x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); -// u.push_back(get(vnm, v)); -// } -// -// put(fmm, f, iccm_function(u, x)); -// x.clear(); -// u.clear(); -// } -//} -// -//template -// void -// interpolated_corrected_anisotropic_measure_mesh(const PolygonMesh& pmesh, -// FaceMeasureMap fmm, -// const NamedParameters& np = parameters::default_values()) -//{ -// -// typedef typename GetGeomTraits::type GT; -// -// typedef dynamic_vertex_property_t Vector_map_tag; -// typedef typename boost::property_map::const_type Default_vector_map; -// typedef typename internal_np::Lookup_named_param_def::type VertexNormalMap; -// -// using parameters::choose_parameter; -// using parameters::get_parameter; -// using parameters::is_default_parameter; -// -// typedef typename boost::graph_traits::face_descriptor Face_descriptor; -// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; -// typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; -// -// typename GetVertexPointMap::const_type -// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), -// get_const_property_map(CGAL::vertex_point, pmesh)); -// -// VertexNormalMap vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), -// get(Vector_map_tag(), pmesh)); -// -// if (is_default_parameter::value) -// compute_vertex_normals(pmesh, vnm, np); -// -// std::vector x; -// std::vector u; -// -// for (Face_descriptor f : faces(pmesh)) -// { -// -// for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) -// { -// typename GT::Point_3 p = get(vpm, v); -// x.push_back(typename GT::Vector_3(p.x(), p.y(), p.z())); -// u.push_back(get(vnm, v)); -// } -// -// put(fmm, f, interpolated_corrected_anisotropic_measure_face(u, x)); -// x.clear(); -// u.clear(); -// -// } -//} - -// //template -//typename GT::FT triangle_in_ball_ratio_1(const typename GT::Vector_3 x1, -// const typename GT::Vector_3 x2, -// const typename GT::Vector_3 x3, -// const typename GT::FT r, -// const typename GT::Vector_3 c, -// const std::size_t res = 3) +//typename GT::FT triangle_in_ball_ratio(const typename GT::Vector_3 x1, +// const typename GT::Vector_3 x2, +// const typename GT::Vector_3 x3, +// const typename GT::FT r, +// const typename GT::Vector_3 c, +// const std::size_t res = 3) //{ // const typename GT::FT R = r * r; // const typename GT::FT acc = 1.0 / res; @@ -549,162 +439,6 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, return (r - d_min) / (d_max - d_min); } -//template -// void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, -// FaceMeasureMap area_fmm, -// FaceMeasureMap curvature_fmm, -// VertexMeasureMap area_vmm, -// VertexMeasureMap curvature_vmm, -// const typename boost::graph_traits::vertex_descriptor v, -// const NamedParameters& np = parameters::default_values()) -//{ -// using parameters::choose_parameter; -// using parameters::get_parameter; -// -// typedef typename GetGeomTraits::type GT; -// -// typedef typename boost::graph_traits::face_descriptor Face_descriptor; -// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; -// -// const typename GT::FT -// r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); -// -// typename GetVertexPointMap::const_type -// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), -// get_const_property_map(CGAL::vertex_point, pmesh)); -// -// -// std::queue bfs_queue; -// std::unordered_set bfs_visited; -// -// typename GT::Point_3 vp = get(vpm, v); -// typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); -// -// typename GT::FT corrected_mu0 = 0; -// typename GT::FT corrected_mui = 0; -// -// for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { -// if (f != boost::graph_traits::null_face()) -// { -// bfs_queue.push(f); -// bfs_visited.insert(f); -// } -// } -// while (!bfs_queue.empty()) { -// Face_descriptor fi = bfs_queue.front(); -// bfs_queue.pop(); -// -// // looping over vertices in face to get point coordinates -// std::vector x; -// for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) -// { -// typename GT::Point_3 pi = get(vpm, vi); -// x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); -// } -// -// const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); -// -// if (f_ratio != 0.0) -// { -// corrected_mu0 += f_ratio * get(area_fmm, fi); -// corrected_mui += f_ratio * get(curvature_fmm, fi); -// for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) -// { -// if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) -// { -// bfs_queue.push(fj); -// bfs_visited.insert(fj); -// } -// } -// } -// } -// put(area_vmm, v, corrected_mu0); -// put(curvature_vmm, v, corrected_mui); -//} -// -//template -// void expand_interpolated_corrected_anisotropic_measure_vertex(const PolygonMesh& pmesh, -// AreaFaceMeasureMap area_fmm, -// AnisotropicFaceMeasureMap aniso_fmm, -// AreaVertexMeasureMap area_vmm, -// AnisotropicVertexMeasureMap aniso_vmm, -// const typename boost::graph_traits::vertex_descriptor v, -// const NamedParameters& np = parameters::default_values()) -//{ -// using parameters::choose_parameter; -// using parameters::get_parameter; -// -// typedef typename GetGeomTraits::type GT; -// -// typedef typename boost::graph_traits::face_descriptor Face_descriptor; -// typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; -// -// const typename GT::FT -// r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0); -// -// typename GetVertexPointMap::const_type -// vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), -// get_const_property_map(CGAL::vertex_point, pmesh)); -// -// -// std::queue bfs_queue; -// std::unordered_set bfs_visited; -// -// typename GT::Point_3 vp = get(vpm, v); -// typename GT::Vector_3 c = typename GT::Vector_3(vp.x(), vp.y(), vp.z()); -// -// typename GT::FT corrected_mu0 = 0; -// Eigen::Matrix corrected_muXY = Eigen::Matrix::Zero(); -// -// for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { -// if (f != boost::graph_traits::null_face()) -// { -// bfs_queue.push(f); -// bfs_visited.insert(f); -// } -// } -// while (!bfs_queue.empty()) { -// Face_descriptor fi = bfs_queue.front(); -// bfs_queue.pop(); -// -// // looping over vertices in face to get point coordinates -// std::vector x; -// for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) -// { -// typename GT::Point_3 pi = get(vpm, vi); -// x.push_back(typename GT::Vector_3(pi.x(), pi.y(), pi.z())); -// } -// -// const typename GT::FT f_ratio = face_in_ball_ratio(x, r, c); -// -// if (f_ratio != 0.0) -// { -// corrected_mu0 += f_ratio * get(area_fmm, fi); -// -// std::array muXY_face = get(aniso_fmm, fi); -// -// for (std::size_t ix = 0; ix < 3; ix++) -// for (std::size_t iy = 0; iy < 3; iy++) -// corrected_muXY(ix, iy) += f_ratio * muXY_face[ix * 3 + iy]; -// -// for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) -// { -// if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) -// { -// bfs_queue.push(fj); -// bfs_visited.insert(fj); -// } -// } -// } -// } -// put(area_vmm, v, corrected_mu0); -// put(aniso_vmm, v, corrected_muXY); -//} - - template Principal_curvature principal_curvature_from_anisotropic_measures( const std::array anisotropic_measure, @@ -1208,12 +942,11 @@ template::%Vertex_descriptor` +* as key type and `%FT` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_gaussian_curvature_map} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamType{a class model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%FT` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} +* \cgalParamNEnd +* +* +* \cgalParamNBegin{vertex_prinicipal_curvature_map} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamType{a class model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%Principal_curvature` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} +* \cgalParamNEnd * * \cgalParamNBegin{ball_radius} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of * measures on faces around the vertex} * \cgalParamNEnd * From 59c3605a0689e20a54a8998d9ed3296fd8862cbb Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 14 Nov 2022 11:28:37 +0200 Subject: [PATCH 077/943] trailing whitespace --- .../interpolated_corrected_curvature_measures.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 0ed47db00584..5bcff27cc2ee 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -37,14 +37,14 @@ namespace Polygon_mesh_processing { /** * \ingroup PMP_corrected_curvatures_grp -* +* * \brief a struct for storing principal curvatures and directions. * * @tparam GT is the geometric traits class. */ template struct Principal_curvature { - + /// min curvature magnitude typename GT::FT min_curvature; @@ -976,7 +976,7 @@ template(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} * \cgalParamNEnd -* +* * * \cgalParamNBegin{vertex_prinicipal_curvature_map} * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} From b0a82c4569c6f9483ed45f76f2224f9b9212fad8 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 14 Nov 2022 11:37:14 +0200 Subject: [PATCH 078/943] typo fix --- .../Curvatures/interpolated_corrected_curvature_measures.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 5bcff27cc2ee..9da751c7f83b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -996,7 +996,7 @@ template::%Vertex_descriptor` From 25eb94f1ec4996a46ec443888e768ff3e9ba6dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 14 Nov 2022 14:24:24 +0100 Subject: [PATCH 079/943] force copy fig --- .../doc/Polygon_mesh_processing/Doxyfile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in index fa3b8b8f1bf5..f2e738b4d23c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in @@ -21,4 +21,5 @@ EXCLUDE_SYMBOLS += experimental HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/selfintersections.jpg \ ${CGAL_PACKAGE_DOC_DIR}/fig/mesh_smoothing.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png + ${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png \ + ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png From b56500d0fc8edbf4971c367bfbde6a9d2dd1a915 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 16 Nov 2022 12:51:14 +0200 Subject: [PATCH 080/943] 4-space -> 2-space indents --- ...erpolated_corrected_curvatures_example.cpp | 36 +- ...orrected_curvatures_polyhedron_example.cpp | 26 +- ...nterpolated_corrected_curvature_measures.h | 920 +++++++++--------- ...est_interopolated_corrected_curvatures.cpp | 226 ++--- .../Display/Display_property_plugin.cpp | 214 ++-- 5 files changed, 708 insertions(+), 714 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index ffb86d94795c..7bf182c3ce3d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -18,11 +18,11 @@ typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { Surface_Mesh smesh; - const std::string filename = (argc>1) ? - argv[1] : - CGAL::data_file_path("meshes/small_bunny.obj"); + const std::string filename = (argc > 1) ? + argv[1] : + CGAL::data_file_path("meshes/small_bunny.obj"); - if(!CGAL::IO::read_polygon_mesh(filename, smesh)) + if (!CGAL::IO::read_polygon_mesh(filename, smesh)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; @@ -41,25 +41,25 @@ int main(int argc, char* argv[]) Surface_Mesh::Property_map> principal_curvature_map; boost::tie(principal_curvature_map, created) = smesh.add_property_map> - ("v:principal_curvature_map", { 0, 0, - Epic_kernel::Vector_3(0,0,0), - Epic_kernel::Vector_3(0,0,0) }); + ("v:principal_curvature_map", { 0, 0, + Epic_kernel::Vector_3(0,0,0), + Epic_kernel::Vector_3(0,0,0) }); assert(created); // user can call these fucntions to compute a specfic curvature type on each vertex. PMP::interpolated_corrected_mean_curvature( - smesh, - mean_curvature_map + smesh, + mean_curvature_map ); PMP::interpolated_corrected_gaussian_curvature( - smesh, - gaussian_curvature_map + smesh, + gaussian_curvature_map ); PMP::interpolated_corrected_principal_curvatures( - smesh, - principal_curvature_map + smesh, + principal_curvature_map ); // uncomment this to compute a curvature while specifying named parameters @@ -81,16 +81,16 @@ int main(int argc, char* argv[]) // This function can be used to compute multiple curvature types by specifiying them as named parameters // This is more efficient than computing each one separately (shared computations). PMP::interpolated_corrected_curvatures( - smesh, - CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) - .vertex_principal_curvature_map(principal_curvature_map) + smesh, + CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) + .vertex_principal_curvature_map(principal_curvature_map) ); for (vertex_descriptor v : vertices(smesh)) { auto PC = principal_curvature_map[v]; std::cout << v.idx() << ": HC = " << mean_curvature_map[v] - << ", GC = " << gaussian_curvature_map[v] << "\n" - << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; + << ", GC = " << gaussian_curvature_map[v] << "\n" + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; } } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 207625fd8485..929fc8d96a67 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -16,14 +16,12 @@ typedef CGAL::Polyhedron_3 Polyhedron; typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { Polyhedron polyhedron; - const std::string filename = (argc>1) ? - argv[1] : - CGAL::data_file_path("meshes/small_bunny.obj"); + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); - if(!CGAL::IO::read_polygon_mesh(filename, polyhedron)) + if (!CGAL::IO::read_polygon_mesh(filename, polyhedron)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; @@ -33,22 +31,19 @@ int main(int argc, char* argv[]) mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); boost::property_map>>::type - principal_curvature_map = get(CGAL::dynamic_vertex_property_t< PMP::Principal_curvature>(), polyhedron); + principal_curvature_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); PMP::interpolated_corrected_mean_curvature( polyhedron, - mean_curvature_map - ); + mean_curvature_map); PMP::interpolated_corrected_gaussian_curvature( polyhedron, - gaussian_curvature_map - ); + gaussian_curvature_map); PMP::interpolated_corrected_principal_curvatures( polyhedron, - principal_curvature_map - ); + principal_curvature_map); // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) @@ -66,16 +61,15 @@ int main(int argc, char* argv[]) PMP::interpolated_corrected_curvatures( polyhedron, CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) - .vertex_principal_curvature_map(principal_curvature_map) - ); + .vertex_principal_curvature_map(principal_curvature_map)); int i = 0; for (vertex_descriptor v : vertices(polyhedron)) { auto PC = get(principal_curvature_map, v); std::cout << i << ": HC = " << get(mean_curvature_map, v) - << ", GC = " << get(gaussian_curvature_map, v) << "\n" - << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; + << ", GC = " << get(gaussian_curvature_map, v) << "\n" + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; i++; } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 9da751c7f83b..4006b761679f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -45,74 +45,74 @@ namespace Polygon_mesh_processing { template struct Principal_curvature { - /// min curvature magnitude - typename GT::FT min_curvature; - - /// max curvature magnitude - typename GT::FT max_curvature; - - /// min curvature direction vector - typename GT::Vector_3 min_direction; - - /// max curvature direction vector - typename GT::Vector_3 max_direction; - - Principal_curvature() { - min_curvature = 0; - max_curvature = 0; - min_direction = typename GT::Vector_3(0, 0, 0); - max_direction = typename GT::Vector_3(0, 0, 0); - } - - Principal_curvature( - typename GT::FT min_curvature, - typename GT::FT max_curvature, - typename GT::Vector_3 min_direction, - typename GT::Vector_3 max_direction) { - this->min_curvature = min_curvature; - this->max_curvature = max_curvature; - this->min_direction = min_direction; - this->max_direction = max_direction; - } + /// min curvature magnitude + typename GT::FT min_curvature; + + /// max curvature magnitude + typename GT::FT max_curvature; + + /// min curvature direction vector + typename GT::Vector_3 min_direction; + + /// max curvature direction vector + typename GT::Vector_3 max_direction; + + Principal_curvature() { + min_curvature = 0; + max_curvature = 0; + min_direction = typename GT::Vector_3(0, 0, 0); + max_direction = typename GT::Vector_3(0, 0, 0); + } + + Principal_curvature( + typename GT::FT min_curvature, + typename GT::FT max_curvature, + typename GT::Vector_3 min_direction, + typename GT::Vector_3 max_direction + ) { + min_curvature = min_curvature; + max_curvature = max_curvature; + min_direction = min_direction; + max_direction = max_direction; + } }; namespace internal { -template -typename GT::FT average_edge_length(const PolygonMesh& pmesh) -{ + template + typename GT::FT average_edge_length(const PolygonMesh& pmesh) { const std::size_t n = edges(pmesh).size(); if (n == 0) - return 0; + return 0; typename GT::FT avg_edge_length = 0; for (auto e : edges(pmesh)) - avg_edge_length += edge_length(e, pmesh); + avg_edge_length += edge_length(e, pmesh); avg_edge_length /= n; return avg_edge_length; -} + } -enum Curvature_measure_index { + enum Curvature_measure_index { MU0_AREA_MEASURE, ///< corrected area density MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density -}; + }; -template -struct Vertex_measures { + template + struct Vertex_measures { typename GT::FT area_measure = 0; typename GT::FT mean_curvature_measure = 0; typename GT::FT gaussian_curvature_measure = 0; std::array anisotropic_measure = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -}; + }; -template -typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, - const std::vector& x = {}) -{ + template + typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, + const std::vector& x = {}) + { const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); @@ -122,52 +122,52 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - } - return mu0; + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + mu0 += interpolated_corrected_area_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); + } + return mu0; } -} + } -template -typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, - const std::vector& x = {}) -{ + template + typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, + const std::vector& x = {}) + { const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); @@ -177,63 +177,63 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve // Triangle: use triangle formula if (n == 3) { - const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; - return 0.5 * um * (cross_product(u[2] - u[1], x[0]) - + cross_product(u[0] - u[2], x[1]) - + cross_product(u[1] - u[0], x[2])); + return 0.5 * um * (cross_product(u[2] - u[1], x[0]) + + cross_product(u[0] - u[2], x[1]) + + cross_product(u[1] - u[0], x[2])); } // Quad: use bilinear interpolation formula else if (n == 4) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - - const typename GT::Vector_3 u02 = u[2] - u[0]; - const typename GT::Vector_3 u13 = u[3] - u[1]; - const typename GT::Vector_3 x0_cross = cross_product(u13, x[0]); - const typename GT::Vector_3 x1_cross = -cross_product(u02, x[1]); - const typename GT::Vector_3 x3_cross = cross_product(u02, x[3]); - const typename GT::Vector_3 x2_cross = -cross_product(u13, x[2]); - - return (1.0 / 12.0) * ( - u[0] * (2 * x0_cross - cross_product((u[3] + u[2]), x[1]) + cross_product((u[1] + u[2]), x[3]) + x2_cross) - + u[1] * (cross_product((u[3] + u[2]), x[0]) + 2 * x1_cross + x3_cross - cross_product((u[0] + u[3]), x[2])) - + u[3] * (-cross_product((u[1] + u[2]), x[0]) + x1_cross + 2 * x3_cross + cross_product((u[0] + u[1]), x[2])) - + u[2] * (x0_cross + cross_product((u[0] + u[3]), x[1]) - cross_product((u[0] + u[1]), x[3]) + 2 * x2_cross) - ); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 u13 = u[3] - u[1]; + const typename GT::Vector_3 x0_cross = cross_product(u13, x[0]); + const typename GT::Vector_3 x1_cross = -cross_product(u02, x[1]); + const typename GT::Vector_3 x3_cross = cross_product(u02, x[3]); + const typename GT::Vector_3 x2_cross = -cross_product(u13, x[2]); + + return (1.0 / 12.0) * ( + u[0] * (2 * x0_cross - cross_product((u[3] + u[2]), x[1]) + cross_product((u[1] + u[2]), x[3]) + x2_cross) + + u[1] * (cross_product((u[3] + u[2]), x[0]) + 2 * x1_cross + x3_cross - cross_product((u[0] + u[3]), x[2])) + + u[3] * (-cross_product((u[1] + u[2]), x[0]) + x1_cross + 2 * x3_cross + cross_product((u[0] + u[1]), x[2])) + + u[2] * (x0_cross + cross_product((u[0] + u[3]), x[1]) - cross_product((u[0] + u[1]), x[3]) + 2 * x2_cross) + ); } // N-gon: split into n triangles by polygon center and use triangle formula for each else { - typename GT::FT mu1 = 0; + typename GT::FT mu1 = 0; - // getting center of points - typename GT::Vector_3 xc = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; - - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu1 += interpolated_corrected_mean_curvature_measure_face( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - } - return mu1; + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + mu1 += interpolated_corrected_mean_curvature_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); + } + return mu1; } -} + } -template -typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, - const std::vector& x = {}) -{ + template + typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, + const std::vector& x = {}) + { const std::size_t n = u.size(); CGAL_precondition(n >= 3); @@ -242,182 +242,182 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std // Triangle: use triangle formula if (n == 3) { - return 0.5 * u[0] * cross_product(u[1], u[2]); + return 0.5 * u[0] * cross_product(u[1], u[2]); } // Quad: use bilinear interpolation formula else if (n == 4) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - return (1.0 / 36.0) * ( - (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) - + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) - + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) - + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) - ); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + return (1.0 / 36.0) * ( + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) + ); } // N-gon: split into n triangles by polygon center and use triangle formula for each else { - typename GT::FT mu2 = 0; - - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu2 += interpolated_corrected_gaussian_curvature_measure_face( - std::vector {u[i], u[(i + 1) % n], uc} - ); - } - return mu2; + typename GT::FT mu2 = 0; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + mu2 += interpolated_corrected_gaussian_curvature_measure_face( + std::vector {u[i], u[(i + 1) % n], uc} + ); + } + return mu2; } -} + } -template -std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, - const std::vector& x) -{ + template + std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, + const std::vector& x) + { const std::size_t n = x.size(); CGAL_precondition(u.size() == n); CGAL_precondition(n >= 3); typename GT::Construct_cross_product_vector_3 cross_product; - std::array muXY {0}; + std::array muXY{ 0 }; // Triangle: use triangle formula if (n == 3) { - const typename GT::Vector_3 u01 = u[1] - u[0]; - const typename GT::Vector_3 u02 = u[2] - u[0]; - const typename GT::Vector_3 x01 = x[1] - x[0]; - const typename GT::Vector_3 x02 = x[2] - x[0]; - const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + const typename GT::Vector_3 u01 = u[1] - u[0]; + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 x01 = x[1] - x[0]; + const typename GT::Vector_3 x02 = x[2] - x[0]; + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + + for (std::size_t ix = 0; ix < 3; ix++) + { + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); - for (std::size_t ix = 0; ix < 3; ix++) - { - typename GT::Vector_3 X; - if (ix == 0) - X = typename GT::Vector_3(1, 0, 0); - if (ix == 1) - X = typename GT::Vector_3(0, 1, 0); - if (ix == 2) - X = typename GT::Vector_3(0, 0, 1); - - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); - } + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); + } } // Quad: use bilinear interpolation formula else if (n == 4) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - for (std::size_t ix = 0; ix < 3; ix++) - { - typename GT::Vector_3 X; - if (ix == 0) - X = typename GT::Vector_3(1, 0, 0); - if (ix == 1) - X = typename GT::Vector_3(0, 1, 0); - if (ix == 2) - X = typename GT::Vector_3(0, 0, 1); - - const typename GT::Vector_3 u0xX = cross_product(u[0], X); - const typename GT::Vector_3 u1xX = cross_product(u[1], X); - const typename GT::Vector_3 u2xX = cross_product(u[2], X); - const typename GT::Vector_3 u3xX = cross_product(u[3], X); - - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] = (1.0 / 72.0) * ( - - u[0][iy] * ( u0xX * ( - x[0] - 11 * x[1] + 13 * x[3] - x[2]) - + u1xX * ( -5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) - + u3xX * ( x[0] - 7 * x[1] + 11 * x[3] - 5 * x[2]) - + u2xX * ( - x[0] - 5 * x[1] + 7 * x[3] - x[2]) - ) - + u[1][iy] * ( u0xX * ( 13 * x[0] - x[1] - 7 * x[3] - 5 * x[2]) - + u1xX * ( 17 * x[0] - 5 * x[1] - 5 * x[3] - 7 * x[2]) - + u3xX * ( 5 * x[0] + x[1] + x[3] - 7 * x[2]) - + u2xX * ( 7 * x[0] - x[1] + 5 * x[3] - 11 * x[2]) - ) - + u[2][iy] * ( u0xX * (-11 * x[0] + 5 * x[1] - x[3] + 7 * x[2]) - + u1xX * (- 7 * x[0] + x[1] + x[3] + 5 * x[2]) - + u3xX * (- 7 * x[0] - 5 * x[1] - 5 * x[3] + 17 * x[2]) - + u2xX * (- 5 * x[0] - 7 * x[1] - x[3] + 13 * x[2]) - ) - + u[3][iy] * ( u0xX * (- x[0] + 7 * x[1] - 5 * x[3] - x[2]) - + u1xX * (- 5 * x[0] + 11 * x[1] - 7 * x[3] + x[2]) - + u3xX * ( x[0] + 11 * x[1] - 7 * x[3] - 5 * x[2]) - + u2xX * (- x[0] + 13 * x[1] - 11 * x[3] - x[2]) - ) - - ); - } + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + for (std::size_t ix = 0; ix < 3; ix++) + { + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); + + const typename GT::Vector_3 u0xX = cross_product(u[0], X); + const typename GT::Vector_3 u1xX = cross_product(u[1], X); + const typename GT::Vector_3 u2xX = cross_product(u[2], X); + const typename GT::Vector_3 u3xX = cross_product(u[3], X); + + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = (1.0 / 72.0) * ( + + u[0][iy] * (u0xX * (-x[0] - 11 * x[1] + 13 * x[3] - x[2]) + + u1xX * (-5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) + + u3xX * (x[0] - 7 * x[1] + 11 * x[3] - 5 * x[2]) + + u2xX * (-x[0] - 5 * x[1] + 7 * x[3] - x[2]) + ) + + u[1][iy] * (u0xX * (13 * x[0] - x[1] - 7 * x[3] - 5 * x[2]) + + u1xX * (17 * x[0] - 5 * x[1] - 5 * x[3] - 7 * x[2]) + + u3xX * (5 * x[0] + x[1] + x[3] - 7 * x[2]) + + u2xX * (7 * x[0] - x[1] + 5 * x[3] - 11 * x[2]) + ) + + u[2][iy] * (u0xX * (-11 * x[0] + 5 * x[1] - x[3] + 7 * x[2]) + + u1xX * (-7 * x[0] + x[1] + x[3] + 5 * x[2]) + + u3xX * (-7 * x[0] - 5 * x[1] - 5 * x[3] + 17 * x[2]) + + u2xX * (-5 * x[0] - 7 * x[1] - x[3] + 13 * x[2]) + ) + + u[3][iy] * (u0xX * (-x[0] + 7 * x[1] - 5 * x[3] - x[2]) + + u1xX * (-5 * x[0] + 11 * x[1] - 7 * x[3] + x[2]) + + u3xX * (x[0] + 11 * x[1] - 7 * x[3] - 5 * x[2]) + + u2xX * (-x[0] + 13 * x[1] - 11 * x[3] - x[2]) + ) + + ); + } } // N-gon: split into n triangles by polygon center and use triangle formula for each else { - // getting center of points - typename GT::Vector_3 xc = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; - - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - std::array muXY_curr_triangle = - interpolated_corrected_anisotropic_measure_face( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - - for (std::size_t ix = 0; ix < 3; ix++) - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] += muXY_curr_triangle[ix * 3 + iy]; - } + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; + + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) + { + std::array muXY_curr_triangle = + interpolated_corrected_anisotropic_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); + + for (std::size_t ix = 0; ix < 3; ix++) + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] += muXY_curr_triangle[ix * 3 + iy]; + } } return muXY; -} - -//template -//typename GT::FT triangle_in_ball_ratio(const typename GT::Vector_3 x1, -// const typename GT::Vector_3 x2, -// const typename GT::Vector_3 x3, -// const typename GT::FT r, -// const typename GT::Vector_3 c, -// const std::size_t res = 3) -//{ -// const typename GT::FT R = r * r; -// const typename GT::FT acc = 1.0 / res; -// std::size_t samples_in = 0; -// for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) -// for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) -// { -// if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) -// samples_in++; -// } -// return samples_in / (typename GT::FT)(res * (res + 1) / 2); -//} - -template -typename GT::FT face_in_ball_ratio(const std::vector& x, - const typename GT::FT r, - const typename GT::Vector_3 c) -{ + } + + //template + //typename GT::FT triangle_in_ball_ratio(const typename GT::Vector_3 x1, + // const typename GT::Vector_3 x2, + // const typename GT::Vector_3 x3, + // const typename GT::FT r, + // const typename GT::Vector_3 c, + // const std::size_t res = 3) + //{ + // const typename GT::FT R = r * r; + // const typename GT::FT acc = 1.0 / res; + // std::size_t samples_in = 0; + // for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) + // for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) + // { + // if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) + // samples_in++; + // } + // return samples_in / (typename GT::FT)(res * (res + 1) / 2); + //} + + template + typename GT::FT face_in_ball_ratio(const std::vector& x, + const typename GT::FT r, + const typename GT::Vector_3 c) + { const std::size_t n = x.size(); // getting center of points typename GT::Vector_3 xm = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); xm /= n; typename GT::FT d_min = (xm - c).squared_length(); @@ -425,9 +425,9 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, for (const typename GT::Vector_3 xi : x) { - const typename GT::FT d_sq = (xi - c).squared_length(); - d_max = (std::max)(d_sq, d_max); - d_min = (std::min)(d_sq, d_min); + const typename GT::FT d_sq = (xi - c).squared_length(); + d_max = (std::max)(d_sq, d_max); + d_min = (std::min)(d_sq, d_min); } if (d_max <= r * r) return 1.0; @@ -437,20 +437,20 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, d_min = sqrt(d_min); return (r - d_min) / (d_max - d_min); -} + } -template -Principal_curvature principal_curvature_from_anisotropic_measures( + template + Principal_curvature principal_curvature_from_anisotropic_measures( const std::array anisotropic_measure, const typename GT::FT v_mu0, const typename GT::Vector_3 u_GT -) -{ + ) + { Eigen::Matrix v_muXY = Eigen::Matrix::Zero(); for (std::size_t ix = 0; ix < 3; ix++) - for (std::size_t iy = 0; iy < 3; iy++) - v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; + for (std::size_t iy = 0; iy < 3; iy++) + v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); const typename GT::FT K = 1000 * v_mu0; @@ -462,7 +462,7 @@ Principal_curvature principal_curvature_from_anisotropic_measures( eigensolver.computeDirect(v_muXY); if (eigensolver.info() != Eigen::Success) - return Principal_curvature(); + return Principal_curvature(); const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); @@ -471,16 +471,16 @@ Principal_curvature principal_curvature_from_anisotropic_measures( const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); return Principal_curvature( - (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, - (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, - min_eig_vec, - max_eig_vec - ); -} - -template -class Interpolated_corrected_curvatures_computer -{ + (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, + (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + min_eig_vec, + max_eig_vec + ); + } + + template + class Interpolated_corrected_curvatures_computer + { typedef typename GetGeomTraits::type GT; typedef typename GT::FT FT; @@ -497,29 +497,29 @@ class Interpolated_corrected_curvatures_computer typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + NamedParameters, + Default_vector_map>::type Vertex_normal_map; typedef Constant_property_map Default_scalar_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_mean_curvature_map; + NamedParameters, + Default_scalar_map>::type Vertex_mean_curvature_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_gaussian_curvature_map; + NamedParameters, + Default_scalar_map>::type Vertex_gaussian_curvature_map; typedef Constant_property_map> Default_principal_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvature_map; + NamedParameters, + Default_principal_map>::type Vertex_principal_curvature_map; typedef typename boost::property_map>::const_type Face_scalar_measure_map; + CGAL::dynamic_face_property_t>::const_type Face_scalar_measure_map; typedef typename boost::property_map>>::const_type Face_anisotropic_measure_map; + CGAL::dynamic_face_property_t>>::const_type Face_anisotropic_measure_map; -private: + private: const PolygonMesh& pmesh; Vertex_position_map vpm; Vertex_normal_map vnm; @@ -537,217 +537,217 @@ class Interpolated_corrected_curvatures_computer Face_anisotropic_measure_map muXY_map; void set_property_maps() { - mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); - mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); - muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); + mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); + muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); } void set_named_params(const NamedParameters& np) { - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); - vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); + vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); - const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - is_mean_curvature_selected = !is_default_parameter::value; - is_gaussian_curvature_selected = !is_default_parameter::value; - is_principal_curvature_selected = !is_default_parameter::value; + is_mean_curvature_selected = !is_default_parameter::value; + is_gaussian_curvature_selected = !is_default_parameter::value; + is_principal_curvature_selected = !is_default_parameter::value; - mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); - gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); - principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), Default_principal_map()); + mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); + gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); + principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), Default_principal_map()); - set_ball_radius(radius); + set_ball_radius(radius); } void set_ball_radius(const FT radius) { - if (radius == 0) - ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - else - ball_radius = radius; + if (radius == 0) + ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + ball_radius = radius; } -public: + public: Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values() + const NamedParameters& np = parameters::default_values() ) : - pmesh(pmesh) + pmesh(pmesh) { - set_named_params(np); + set_named_params(np); - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) - { - set_property_maps(); + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) + { + set_property_maps(); - compute_selected_curvatures(); - } + compute_selected_curvatures(); + } } -private: + private: void interpolated_corrected_all_measures_all_faces() { - std::vector x; - std::vector u; + std::vector x; + std::vector u; - for (Face_descriptor f : faces(pmesh)) + for (Face_descriptor f : faces(pmesh)) + { + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - Point_3 p = get(vpm, v); - x.push_back(Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - put(mu0_map, f, interpolated_corrected_area_measure_face(u, x)); + Point_3 p = get(vpm, v); + x.push_back(Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); + } + put(mu0_map, f, interpolated_corrected_area_measure_face(u, x)); - if (is_mean_curvature_selected) - put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); + if (is_mean_curvature_selected) + put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); - if (is_gaussian_curvature_selected) - put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u, x)); + if (is_gaussian_curvature_selected) + put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u, x)); - if (is_principal_curvature_selected) - put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); + if (is_principal_curvature_selected) + put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); - x.clear(); - u.clear(); - } + x.clear(); + u.clear(); + } } Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) { - Vertex_measures vertex_curvatures; + Vertex_measures vertex_curvatures; - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - vertex_curvatures.area_measure += get(mu0_map, f); + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + vertex_curvatures.area_measure += get(mu0_map, f); - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += get(mu1_map, f); + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += get(mu1_map, f); - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += get(mu2_map, f); + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += get(mu2_map, f); - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, f); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; - } + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, f); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; } + } - return vertex_curvatures; + return vertex_curvatures; } Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) { - std::queue bfs_queue; - std::unordered_set bfs_visited; + std::queue bfs_queue; + std::unordered_set bfs_visited; - Point_3 vp = get(vpm, v); - Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); - Vertex_measures vertex_curvatures; + Vertex_measures vertex_curvatures; - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); - } + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_queue.push(f); + bfs_visited.insert(f); } - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); + } + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); - // looping over vertices in face to get point coordinates - std::vector x; - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - Point_3 pi = get(vpm, vi); - x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); - } + // looping over vertices in face to get point coordinates + std::vector x; + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + } - const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); + const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); - if (f_ratio != 0.0) + if (f_ratio != 0.0) + { + vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); + + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); + + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); + + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, fi); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } + + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) { - vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); - - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); - - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); - - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, fi); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; - } - - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) - { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) - { - bfs_queue.push(fj); - bfs_visited.insert(fj); - } - } + bfs_queue.push(fj); + bfs_visited.insert(fj); } + } } - return vertex_curvatures; + } + return vertex_curvatures; } void compute_selected_curvatures() { - interpolated_corrected_all_measures_all_faces(); - - for (Vertex_descriptor v : vertices(pmesh)) - { - Vertex_measures vertex_curvatures = (ball_radius < 0)? - expand_interpolated_corrected_measure_vertex_no_radius(v) : - expand_interpolated_corrected_measure_vertex(v); - - if (is_mean_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : - put(mean_curvature_map, v, 0); - } + interpolated_corrected_all_measures_all_faces(); + + for (Vertex_descriptor v : vertices(pmesh)) + { + Vertex_measures vertex_curvatures = (ball_radius < 0) ? + expand_interpolated_corrected_measure_vertex_no_radius(v) : + expand_interpolated_corrected_measure_vertex(v); + + if (is_mean_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : + put(mean_curvature_map, v, 0); + } - if (is_gaussian_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : - put(gaussian_curvature_map, v, 0); - } + if (is_gaussian_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : + put(gaussian_curvature_map, v, 0); + } - if (is_principal_curvature_selected) { - const Vector_3 v_normal = get(vnm, v); - const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( - vertex_curvatures.anisotropic_measure, - vertex_curvatures.area_measure, - v_normal - ); - put(principal_curvature_map, v, principal_curvature); - } + if (is_principal_curvature_selected) { + const Vector_3 v_normal = get(vnm, v); + const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( + vertex_curvatures.anisotropic_measure, + vertex_curvatures.area_measure, + v_normal + ); + put(principal_curvature_map, v, principal_curvature); } + } } -}; + }; } // namespace internal @@ -807,12 +807,12 @@ class Interpolated_corrected_curvatures_computer */ template - void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> + void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); } /** @@ -870,12 +870,12 @@ template - void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> + void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); } /** @@ -934,12 +934,12 @@ template - void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> + void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, + VertexCurvatureMap& vcm, + NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvature_map(vcm)); } /** @@ -1023,11 +1023,11 @@ template - void interpolated_corrected_curvatures(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> + void interpolated_corrected_curvatures(const PolygonMesh& pmesh, + const NamedParameters& np = parameters::default_values()) { - internal::Interpolated_corrected_curvatures_computer(pmesh, np); + internal::Interpolated_corrected_curvatures_computer(pmesh, np); } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp index 7e376c887716..b2dbcc0850bb 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp @@ -19,130 +19,130 @@ typedef boost::graph_traits::edge_descriptor edge_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel::FT rel_noise_magnitude) { - SMesh pmesh; - const std::string filename = CGAL::data_file_path(mesh_path); + SMesh pmesh; + const std::string filename = CGAL::data_file_path(mesh_path); - if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) - { - std::cerr << "Invalid input file." << std::endl; - } + if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) + { + std::cerr << "Invalid input file." << std::endl; + } - bool created = false; + bool created = false; - SMesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); - assert(created); + SMesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); + assert(created); + + boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); + assert(created); + + // getting the max and min edge lengthes + const auto edge_range = CGAL::edges(pmesh); + + const auto edge_length_comparator = [&, pmesh](auto l, auto r) { + return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); + }; + + const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); + + const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); + const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); + + + if (rel_noise_magnitude > 0) + { + if (!CGAL::is_triangle_mesh(pmesh)) + return; - boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); + SMesh::Property_map vnm; + boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); assert(created); - // getting the max and min edge lengthes - const auto edge_range = CGAL::edges(pmesh); - - const auto edge_length_comparator = [&, pmesh](auto l, auto r) { - return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); - }; - - const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); - - const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); - - - if (rel_noise_magnitude > 0) - { - if (!CGAL::is_triangle_mesh(pmesh)) - return; - - SMesh::Property_map vnm; - boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); - assert(created); - - CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); - - PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - } - else { - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - - } - - - - //PMP::interpolated_corrected_mean_curvature( - // pmesh, - // mean_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - //PMP::interpolated_corrected_gaussian_curvature( - // pmesh, - // gaussian_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - - - const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - - std::cout << "# " << mesh_path << ":\n" - << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" - << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" - << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" - << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; + CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); + + PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) + ); + } + else { + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + ); + + } + + + + //PMP::interpolated_corrected_mean_curvature( + // pmesh, + // mean_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + //PMP::interpolated_corrected_gaussian_curvature( + // pmesh, + // gaussian_curvature_map, + // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) + //); + + + const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); + const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); + + std::cout << "# " << mesh_path << ":\n" + << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" + << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" + << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" + << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; } int main() { - const std::vector mesh_pathes_to_test = { - "meshes/icc_test/Sphere Quads + Tris.obj", - "meshes/icc_test/Sphere Quads + Tris 100352.obj", - "meshes/icc_test/Sphere Tris Ico.obj", - "meshes/icc_test/Sphere Tris Tet.obj", - "meshes/icc_test/Sphere Tris Oct.obj", - "meshes/icc_test/Sphere Quads.obj", - "meshes/icc_test/Sphere Quads Remesh.obj", - "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", - "meshes/icc_test/Cube with fillet Quads.obj", - "meshes/cylinder.off", - "meshes/icc_test/Lantern Tris.obj", - "meshes/icc_test/Lantern Quads.obj" - }; - - const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; - const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; - - for (auto mesh_path : mesh_pathes_to_test) { - for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) - for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) - { - test(mesh_path, rel_expansion_radius, rel_noise_magnitude); - } - - std::cout << "_________________________________________________________________________________\n\n"; - } + const std::vector mesh_pathes_to_test = { + "meshes/icc_test/Sphere Quads + Tris.obj", + "meshes/icc_test/Sphere Quads + Tris 100352.obj", + "meshes/icc_test/Sphere Tris Ico.obj", + "meshes/icc_test/Sphere Tris Tet.obj", + "meshes/icc_test/Sphere Tris Oct.obj", + "meshes/icc_test/Sphere Quads.obj", + "meshes/icc_test/Sphere Quads Remesh.obj", + "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", + "meshes/icc_test/Cube with fillet Quads.obj", + "meshes/cylinder.off", + "meshes/icc_test/Lantern Tris.obj", + "meshes/icc_test/Lantern Quads.obj" + }; + + const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; + const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; + + for (auto mesh_path : mesh_pathes_to_test) { + for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) + for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) + { + test(mesh_path, rel_expansion_radius, rel_noise_magnitude); + } + + std::cout << "_________________________________________________________________________________\n\n"; + } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index c69b73694980..db26f59168a8 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -658,13 +658,13 @@ private Q_SLOTS: if(does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("v:interpolated_corrected_mean_curvature"); + sm_item->face_graph()->property_map("v:interpolated_corrected_mean_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("v:interpolated_corrected_gaussian_curvature"); + sm_item->face_graph()->property_map("v:interpolated_corrected_gaussian_curvature"); if (does_exist) - sm_item->face_graph()->remove_property_map(pmap); + sm_item->face_graph()->remove_property_map(pmap); }); QApplication::restoreOverrideCursor(); sm_item->invalidateOpenGLBuffers(); @@ -704,13 +704,13 @@ private Q_SLOTS: dock_widget->zoomToMaxButton->setEnabled(jacobian_max.count(sm_item)>0); break; case 4: - dock_widget->zoomToMinButton->setEnabled(mean_curvature_min.count(sm_item) > 0); - dock_widget->zoomToMaxButton->setEnabled(mean_curvature_max.count(sm_item) > 0); - break; + dock_widget->zoomToMinButton->setEnabled(mean_curvature_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(mean_curvature_max.count(sm_item) > 0); + break; case 5: - dock_widget->zoomToMinButton->setEnabled(gaussian_curvature_min.count(sm_item) > 0); - dock_widget->zoomToMaxButton->setEnabled(gaussian_curvature_max.count(sm_item) > 0); - break; + dock_widget->zoomToMinButton->setEnabled(gaussian_curvature_min.count(sm_item) > 0); + dock_widget->zoomToMaxButton->setEnabled(gaussian_curvature_max.count(sm_item) > 0); + break; default: break; } @@ -745,13 +745,13 @@ private Q_SLOTS: std::tie(mean_curvature, found) = smesh.property_map("v:interpolated_corrected_mean_curvature"); if (found) { - smesh.remove_property_map(mean_curvature); + smesh.remove_property_map(mean_curvature); } SMesh::Property_map gaussian_curvature; std::tie(gaussian_curvature, found) = smesh.property_map("v:interpolated_corrected_gaussian_curvature"); if (found) { - smesh.remove_property_map(gaussian_curvature); + smesh.remove_property_map(gaussian_curvature); } } @@ -795,54 +795,54 @@ private Q_SLOTS: void setExpandingRadius(int val_int) { - double sliderMin = dock_widget->expandingRadiusSlider->minimum(); - double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; - double val = val_int - sliderMin; - sliderMin = 0; + double sliderMin = dock_widget->expandingRadiusSlider->minimum(); + double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; + double val = val_int - sliderMin; + sliderMin = 0; - SMesh& smesh = *(qobject_cast(scene->item(scene->mainSelectionIndex())))->face_graph(); + SMesh& smesh = *(qobject_cast(scene->item(scene->mainSelectionIndex())))->face_graph(); - auto vpm = get(CGAL::vertex_point, smesh); + auto vpm = get(CGAL::vertex_point, smesh); - if (maxEdgeLength < 0) + if (maxEdgeLength < 0) + { + auto edge_range = CGAL::edges(smesh); + + if (edge_range.begin() == edge_range.end()) { - auto edge_range = CGAL::edges(smesh); - - if (edge_range.begin() == edge_range.end()) - { - expand_radius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); - return; - } - - auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { - auto res = EPICK().compare_squared_distance_3_object()( - get(vpm, source((l), smesh)), - get(vpm, target((l), smesh)), - get(vpm, source((r), smesh)), - get(vpm, target((r), smesh))); - return res == CGAL::SMALLER; - }); - - // if edge_reference is not derefrenceble - if (edge_reference == edge_range.end()) - { - expand_radius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); - return; - } - - maxEdgeLength = sqrt( - (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) - .squared_length() - ); - + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + return; + } + + auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { + auto res = EPICK().compare_squared_distance_3_object()( + get(vpm, source((l), smesh)), + get(vpm, target((l), smesh)), + get(vpm, source((r), smesh)), + get(vpm, target((r), smesh))); + return res == CGAL::SMALLER; + }); + + // if edge_reference is not derefrenceble + if (edge_reference == edge_range.end()) + { + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + return; } + + maxEdgeLength = sqrt( + (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) + .squared_length() + ); + + } - double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; + double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; - expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); } @@ -864,45 +864,45 @@ private Q_SLOTS: smesh.add_property_map(tied_string, 0); if (non_init) { - if (vnm_exists) { - if (mu_index == MEAN_CURVATURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); - else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); - } - else { - if (mu_index == MEAN_CURVATURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); - else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); - } - double res_min = ARBITRARY_DBL_MAX, - res_max = -ARBITRARY_DBL_MAX; - SMesh::Vertex_index min_index, max_index; - for (SMesh::Vertex_index v : vertices(smesh)) + if (vnm_exists) { + if (mu_index == MEAN_CURVATURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + else + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + } + else { + if (mu_index == MEAN_CURVATURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + else + PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + } + double res_min = ARBITRARY_DBL_MAX, + res_max = -ARBITRARY_DBL_MAX; + SMesh::Vertex_index min_index, max_index; + for (SMesh::Vertex_index v : vertices(smesh)) + { + if (mu_i_map[v] > res_max) { - if (mu_i_map[v] > res_max) - { - res_max = mu_i_map[v]; - max_index = v; - } - if (mu_i_map[v] < res_min) - { - res_min = mu_i_map[v]; - min_index = v; - } - } - if (mu_index == MEAN_CURVATURE){ - mean_curvature_max[item] = std::make_pair(res_max, max_index); - mean_curvature_min[item] = std::make_pair(res_min, min_index); + res_max = mu_i_map[v]; + max_index = v; } - else { - gaussian_curvature_max[item] = std::make_pair(res_max, max_index); - gaussian_curvature_min[item] = std::make_pair(res_min, min_index); + if (mu_i_map[v] < res_min) + { + res_min = mu_i_map[v]; + min_index = v; } + } + if (mu_index == MEAN_CURVATURE){ + mean_curvature_max[item] = std::make_pair(res_max, max_index); + mean_curvature_min[item] = std::make_pair(res_min, min_index); + } + else { + gaussian_curvature_max[item] = std::make_pair(res_max, max_index); + gaussian_curvature_min[item] = std::make_pair(res_min, min_index); + } - connect(item, &Scene_surface_mesh_item::itemChanged, - this, &DisplayPropertyPlugin::resetProperty); + connect(item, &Scene_surface_mesh_item::itemChanged, + this, &DisplayPropertyPlugin::resetProperty); } treat_sm_property(tied_string, item->face_graph()); } @@ -1271,20 +1271,20 @@ private Q_SLOTS: break; case 4: { - ::zoomToId(*item->face_graph(), - QString("v%1").arg(mean_curvature_min[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); + ::zoomToId(*item->face_graph(), + QString("v%1").arg(mean_curvature_min[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); } break; case 5: { - ::zoomToId(*item->face_graph(), - QString("v%1").arg(gaussian_curvature_min[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); + ::zoomToId(*item->face_graph(), + QString("v%1").arg(gaussian_curvature_min[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); } break; break; @@ -1324,20 +1324,20 @@ private Q_SLOTS: break; case 4: { - ::zoomToId(*item->face_graph(), - QString("v%1").arg(mean_curvature_max[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); + ::zoomToId(*item->face_graph(), + QString("v%1").arg(mean_curvature_max[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); } break; case 5: { - ::zoomToId(*item->face_graph(), - QString("v%1").arg(gaussian_curvature_max[item].second), - getActiveViewer(), - dummy_fd, - dummy_p); + ::zoomToId(*item->face_graph(), + QString("v%1").arg(gaussian_curvature_max[item].second), + getActiveViewer(), + dummy_fd, + dummy_p); } break; default: From e79e34df4fe4e69279865c3b8294159774ad04dc Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 16 Nov 2022 12:53:43 +0200 Subject: [PATCH 081/943] trim trailing whitespaces --- .../Plugins/Display/Display_property_plugin.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index db26f59168a8..6efc7f213fe2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -807,14 +807,14 @@ private Q_SLOTS: if (maxEdgeLength < 0) { auto edge_range = CGAL::edges(smesh); - + if (edge_range.begin() == edge_range.end()) { expand_radius = 0; dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); return; } - + auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { auto res = EPICK().compare_squared_distance_3_object()( get(vpm, source((l), smesh)), @@ -823,7 +823,7 @@ private Q_SLOTS: get(vpm, target((r), smesh))); return res == CGAL::SMALLER; }); - + // if edge_reference is not derefrenceble if (edge_reference == edge_range.end()) { @@ -831,12 +831,12 @@ private Q_SLOTS: dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); return; } - + maxEdgeLength = sqrt( (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) .squared_length() ); - + } double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; From 400f9de47c68df5ac92a9eba42f0865af1c60515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 17 Nov 2022 19:49:42 +0100 Subject: [PATCH 082/943] first draft version for getting the triangulation of a face WARNING: COMPILATION NOT TESTED! --- .../triangulate_faces.h | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h index 0b48967f2733..abe56ea35a61 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h @@ -499,6 +499,153 @@ bool triangulate_face(typename boost::graph_traits::face_descriptor return modifier.triangulate_face(f, pmesh, use_cdt, visitor); } + +#ifndef CGAL_TRIANGULATE_FACES_DO_NOT_USE_CDT2 +template +OutputIterator +face_triangulation(typename boost::graph_traits::face_descriptor f, + PolygonMesh& pmesh, + OutputIterator out, + const NamedParameters& np = parameters::default_values()) +{ + using parameters::choose_parameter; + using parameters::get_parameter; + + //VertexPointMap + typedef typename GetVertexPointMap::type VPMap; + VPMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point), + get_property_map(vertex_point, pmesh)); + + //Kernel + typedef typename GetGeomTraits::type Kernel; + Kernel traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); + + //Face_info + typedef typename internal::Triangulate_modifier>::Face_info Face_info; + + //CDT + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef CGAL::Projection_traits_3 P_traits; + typedef CGAL::Triangulation_vertex_base_with_info_2 Vb; + typedef CGAL::Triangulation_face_base_with_info_2 Fb1; + typedef CGAL::Constrained_triangulation_face_base_2 Fb; + typedef CGAL::Triangulation_data_structure_2 TDS; + typedef CGAL::Exact_intersections_tag Itag; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; + P_traits cdt_traits(normal); + CDT cdt(cdt_traits); + + std::size_t original_size = CGAL::halfedges_around_face(halfedge(f, pmesh), pmesh).size(); + + // Halfedge_around_facet_circulator + typedef typename CDT::Vertex_handle Tr_Vertex_handle; + halfedge_descriptor start = halfedge(f, pmesh); + halfedge_descriptor h = start; + Tr_Vertex_handle previous, first; + do + { + Tr_Vertex_handle vh = cdt.insert(get(_vpmap, target(h, pmesh))); + if (first == Tr_Vertex_handle()) { + first = vh; + } + vh->info() = h; + if(previous != Tr_Vertex_handle() && previous != vh) { + cdt.insert_constraint(previous, vh); + } + previous = vh; + h = next(h, pmesh); + + } while( h != start ); + cdt.insert_constraint(previous, first); + + // sets mark is_external + for(typename CDT::All_faces_iterator fit = cdt.all_faces_begin(), + end = cdt.all_faces_end(); + fit != end; ++fit) + { + fit->info().is_external = false; + } + std::queue face_queue; + face_queue.push(cdt.infinite_vertex()->face()); + while(! face_queue.empty() ) + { + typename CDT::Face_handle fh = face_queue.front(); + face_queue.pop(); + + if(fh->info().is_external) + continue; + + fh->info().is_external = true; + for(int i = 0; i <3; ++i) + { + if(!cdt.is_constrained(typename CDT::Edge(fh, i))) + { + face_queue.push(fh->neighbor(i)); + } + } + } + + if(cdt.dimension() != 2 || cdt.number_of_vertices() != original_size) + return out; + + for(typename CDT::Finite_edges_iterator eit = cdt.finite_edges_begin(), + end = cdt.finite_edges_end(); + eit != end; ++eit) + { + typename CDT::Face_handle fh = eit->first; + const int index = eit->second; + typename CDT::Face_handle opposite_fh = fh->neighbor(eit->second); + const int opposite_index = opposite_fh->index(fh); + + const Tr_Vertex_handle va = fh->vertex(cdt. cw(index)); + const Tr_Vertex_handle vb = fh->vertex(cdt.ccw(index)); + + if( ! (is_external(fh) && is_external(opposite_fh))//not both fh are external + && ! cdt.is_constrained(*eit) ) //and edge is not constrained + { + // strictly internal edge + halfedge_descriptor hnew = halfedge(add_edge(pmesh), pmesh), + hnewopp = opposite(hnew, pmesh); + + fh->info().e[index] = hnew; + opposite_fh->info().e[opposite_index] = hnewopp; + + set_target(hnew, target(va->info(), pmesh), pmesh); + set_target(hnewopp, target(vb->info(), pmesh), pmesh); + } + if( cdt.is_constrained(*eit) ) //edge is constrained + { + if(!is_external(fh)) { + fh->info().e[index] = va->info(); + } + if(!is_external(opposite_fh)) { + opposite_fh->info().e[opposite_index] = vb->info(); + } + } + } + for(typename CDT::Finite_faces_iterator fit = cdt.finite_faces_begin(), + end = cdt.finite_faces_end(); + fit != end; ++fit) + { + if(!is_external(fit)) + { + halfedge_descriptor h0 = fit->info().e[0]; + halfedge_descriptor h1 = fit->info().e[1]; + halfedge_descriptor h2 = fit->info().e[2]; + *out++=std::make_tuple(target(h0, pmesh), target(h1, pmesh), target(h2,pmesh)); + } + } + + return out; +} +#endif + + + /** * \ingroup PMP_meshing_grp * From 80e3522eaa294462a26c758745908c5ff5cc9ffb Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 18 Nov 2022 12:56:08 +0200 Subject: [PATCH 083/943] incomplete (single vertex curvature) --- ...nterpolated_corrected_curvature_measures.h | 465 +++++++++++++++++- 1 file changed, 455 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 4006b761679f..3f118bdba45d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -598,7 +598,7 @@ namespace internal { private: - void interpolated_corrected_all_measures_all_faces() + void interpolated_corrected_selected_measures_all_faces() { std::vector x; std::vector u; @@ -629,23 +629,239 @@ namespace internal { Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) { - Vertex_measures vertex_curvatures; + Vertex_measures vertex_measures; for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - vertex_curvatures.area_measure += get(mu0_map, f); + vertex_measures.area_measure += get(mu0_map, f); if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += get(mu1_map, f); + vertex_measures.mean_curvature_measure += get(mu1_map, f); if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += get(mu2_map, f); + vertex_measures.gaussian_curvature_measure += get(mu2_map, f); if (is_principal_curvature_selected) { const std::array face_anisotropic_measure = get(muXY_map, f); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += face_anisotropic_measure[i]; + } + } + + return vertex_measures; + } + + Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) + { + std::queue bfs_queue; + std::unordered_set bfs_visited; + + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + + Vertex_measures vertex_measures; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_queue.push(f); + bfs_visited.insert(f); + } + } + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); + + // looping over vertices in face to get point coordinates + std::vector x; + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + } + + const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); + + if (f_ratio != 0.0) + { + vertex_measures.area_measure += f_ratio * get(mu0_map, fi); + + if (is_mean_curvature_selected) + vertex_measures.mean_curvature_measure += f_ratio * get(mu1_map, fi); + + if (is_gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); + + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, fi); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } + + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) + { + bfs_queue.push(fj); + bfs_visited.insert(fj); + } + } + } + } + return vertex_measures; + } + + void compute_selected_curvatures() { + interpolated_corrected_selected_measures_all_faces(); + + for (Vertex_descriptor v : vertices(pmesh)) + { + Vertex_measures vertex_measures = (ball_radius < 0) ? + expand_interpolated_corrected_measure_vertex_no_radius(v) : + expand_interpolated_corrected_measure_vertex(v); + + if (is_mean_curvature_selected) { + vertex_measures.area_measure != 0 ? + put(mean_curvature_map, v, 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure) : + put(mean_curvature_map, v, 0); + } + + if (is_gaussian_curvature_selected) { + vertex_measures.area_measure != 0 ? + put(gaussian_curvature_map, v, vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure) : + put(gaussian_curvature_map, v, 0); + } + + if (is_principal_curvature_selected) { + const Vector_3 v_normal = get(vnm, v); + const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( + vertex_measures.anisotropic_measure, + vertex_measures.area_measure, + v_normal + ); + put(principal_curvature_map, v, principal_curvature); + } + } + } + }; + + template + class Interpolated_corrected_curvatures_point_computer + { + typedef typename GetGeomTraits::type GT; + + typedef typename GT::FT FT; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + + typedef typename GetVertexPointMap::const_type Vertex_position_map; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + + private: + const PolygonMesh& pmesh; + Vertex_position_map vpm; + Vertex_normal_map vnm; + FT ball_radius; + + bool is_mean_curvature_selected; + bool is_gaussian_curvature_selected; + bool is_principal_curvature_selected; + + Point_3 point; + + void set_named_params(const NamedParameters& np) + { + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); + + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + + const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + + is_mean_curvature_selected = !is_default_parameter::value; + is_gaussian_curvature_selected = !is_default_parameter::value; + is_principal_curvature_selected = !is_default_parameter::value; + + set_ball_radius(radius); + } + + void set_ball_radius(const FT radius) { + if (radius == 0) + ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + ball_radius = radius; + } + + public: + + Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, + const NamedParameters& np = parameters::default_values() + ) : + pmesh(pmesh) + { + set_named_params(np); + + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) + { + set_property_maps(); + + compute_selected_curvatures(); + } + } + + private: + Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) + { + Vertex_measures vertex_curvatures; + + std::vector x; + std::vector u; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + Point_3 p = get(vpm, v); + x.push_back(Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); + } + + vertex_curvatures.area_measure += interpolated_corrected_area_measure_face(u, x); + + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); + + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); + + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); for (std::size_t i = 0; i < 3 * 3; i++) vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; } + + x.clear(); + u.clear(); } return vertex_curvatures; @@ -668,12 +884,15 @@ namespace internal { bfs_visited.insert(f); } } + + std::vector x; + std::vector u; + while (!bfs_queue.empty()) { Face_descriptor fi = bfs_queue.front(); bfs_queue.pop(); // looping over vertices in face to get point coordinates - std::vector x; for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) { Point_3 pi = get(vpm, vi); @@ -684,6 +903,11 @@ namespace internal { if (f_ratio != 0.0) { + for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + u.push_back(get(vnm, vi)); + } + vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); if (is_mean_curvature_selected) @@ -699,6 +923,9 @@ namespace internal { vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; } + x.clear(); + u.clear(); + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) { if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) @@ -713,13 +940,11 @@ namespace internal { } void compute_selected_curvatures() { - interpolated_corrected_all_measures_all_faces(); - for (Vertex_descriptor v : vertices(pmesh)) { Vertex_measures vertex_curvatures = (ball_radius < 0) ? - expand_interpolated_corrected_measure_vertex_no_radius(v) : - expand_interpolated_corrected_measure_vertex(v); + compute_expanded_interpolated_corrected_measure_vertex_no_radius(v) : + compute_expanded_interpolated_corrected_measure_vertex(v); if (is_mean_curvature_selected) { vertex_curvatures.area_measure != 0 ? @@ -745,7 +970,227 @@ namespace internal { } } + }; + template + class Interpolated_corrected_curvatures_element_computer + { + typedef typename GetGeomTraits::type GT; + + typedef typename GT::FT FT; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + + typedef typename GetVertexPointMap::const_type Vertex_position_map; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + + private: + const PolygonMesh& pmesh; + Vertex_position_map vpm; + Vertex_normal_map vnm; + FT ball_radius; + + bool is_mean_curvature_selected; + bool is_gaussian_curvature_selected; + bool is_principal_curvature_selected; + + void set_named_params(const NamedParameters& np) + { + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); + + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + + const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + + is_mean_curvature_selected = !is_default_parameter::value; + is_gaussian_curvature_selected = !is_default_parameter::value; + is_principal_curvature_selected = !is_default_parameter::value; + + set_ball_radius(radius); + } + + void set_ball_radius(const FT radius) { + if (radius == 0) + ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + ball_radius = radius; + } + + public: + + Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, + const NamedParameters& np = parameters::default_values() + ) : + pmesh(pmesh) + { + set_named_params(np); + + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) + { + set_property_maps(); + } + } + + private: + Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) + { + Vertex_measures vertex_curvatures; + + std::vector x; + std::vector u; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + Point_3 p = get(vpm, v); + x.push_back(Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); + } + + vertex_curvatures.area_measure += interpolated_corrected_area_measure_face(u, x); + + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); + + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); + + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; + } + + x.clear(); + u.clear(); + } + + return vertex_curvatures; + } + + Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) + { + std::queue bfs_queue; + std::unordered_set bfs_visited; + + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + + Vertex_measures vertex_curvatures; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_queue.push(f); + bfs_visited.insert(f); + } + } + + std::vector x; + std::vector u; + + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); + + // looping over vertices in face to get point coordinates + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + } + + const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); + + if (f_ratio != 0.0) + { + for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) + { + u.push_back(get(vnm, vi)); + } + + vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); + + if (is_mean_curvature_selected) + vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); + + if (is_gaussian_curvature_selected) + vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); + + if (is_principal_curvature_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, fi); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } + + x.clear(); + u.clear(); + + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) + { + bfs_queue.push(fj); + bfs_visited.insert(fj); + } + } + } + } + return vertex_curvatures; + } + + void compute_selected_curvatures() { + for (Vertex_descriptor v : vertices(pmesh)) + { + Vertex_measures vertex_curvatures = (ball_radius < 0) ? + compute_expanded_interpolated_corrected_measure_vertex_no_radius(v) : + compute_expanded_interpolated_corrected_measure_vertex(v); + + if (is_mean_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : + put(mean_curvature_map, v, 0); + } + + if (is_gaussian_curvature_selected) { + vertex_curvatures.area_measure != 0 ? + put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : + put(gaussian_curvature_map, v, 0); + } + + if (is_principal_curvature_selected) { + const Vector_3 v_normal = get(vnm, v); + const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( + vertex_curvatures.anisotropic_measure, + vertex_curvatures.area_measure, + v_normal + ); + put(principal_curvature_map, v, principal_curvature); + } + } + } }; From e302b02f764301209548fae1c435f8a92c892d02 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 11:02:26 +0200 Subject: [PATCH 084/943] Docs: adding bibtex, ack of DGtal, Authors + Renaming vars + minor fix + removing last commit's approach --- Documentation/doc/biblio/geom.bib | 11 + .../PackageDescription.txt | 2 +- .../Polygon_mesh_processing.txt | 11 +- ...erpolated_corrected_curvatures_example.cpp | 14 +- ...orrected_curvatures_polyhedron_example.cpp | 10 +- ...nterpolated_corrected_curvature_measures.h | 496 +----------------- ..._corrected_principal_curvatures_plugin.cpp | 22 +- .../internal/parameters_interface.h | 2 +- 8 files changed, 66 insertions(+), 502 deletions(-) diff --git a/Documentation/doc/biblio/geom.bib b/Documentation/doc/biblio/geom.bib index 270f537e1394..37c42071a85f 100644 --- a/Documentation/doc/biblio/geom.bib +++ b/Documentation/doc/biblio/geom.bib @@ -152060,6 +152060,7 @@ @article{cvl-ew-12 Pages = {215--224}, Year = {2012}, Url = {http://monge.univ-mlv.fr/~colinde/pub/09edgewidth.pdf} +} @inproceedings{tang2009interactive, title={Interactive Hausdorff distance computation for general polygonal models}, @@ -152071,3 +152072,13 @@ @inproceedings{tang2009interactive year={2009}, organization={ACM} } + +@article{lachaud2020, + author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert and David Coeurjolly}, + journal = {Computer Graphics Forum (Proceedings of Symposium on Geometry Processing)}, + number = {5}, + title = {Interpolated corrected curvature measures for polygonal surfaces}, + volume = {39}, + month = jul, + year = {2020} +} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 93f25c89f1fb..5090535be250 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -203,7 +203,7 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. \cgalCRPSection{Corrected Curvature Functions} - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` - `CGAL::Polygon_mesh_processing::Principal_curvature` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 7932051ec000..2347ae1c7ae8 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -879,10 +879,7 @@ not provide storage for the normals. **************************************** \section PMPICC Computing Curvatures -This package provides methods to compute curvatures on polygonal meshes based on - - Interpolated corrected curvature measures for polygonal surfaces -. +This package provides methods to compute curvatures on polygonal meshes based on \cgalCite{lachaud2020} This includes mean curvature, gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. The algorithms used prove to work well in general. Also, on meshes with noise @@ -895,7 +892,7 @@ Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. These computations are performed using : - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` Where it is recommended to use the last function for computing multiple curvatures (example: mean and gaussian) @@ -1145,6 +1142,10 @@ available on 7th of October 2020. It only uses the high level algorithm of chec is covered by a set of prisms, where each prism is an offset for an input triangle. That is, the implementation in \cgal does not use indirect predicates. +The interpolated corrected curvatures were implemented during GSoC 2022. This was implemented by Hossam Saeed and under +supervision of Sebastien Loriot, Jaques-Olivier Lachaud and David Coeurjolly. The implementation is based \cgalCite{lachaud2020}. +DGtal's implementation was also +used as a reference during the project. */ } /* namespace CGAL */ diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 7bf182c3ce3d..71aa06a8caec 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -38,10 +38,10 @@ int main(int argc, char* argv[]) assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> principal_curvature_map; + Surface_Mesh::Property_map> principal_curvatures_and_directions_map; - boost::tie(principal_curvature_map, created) = smesh.add_property_map> - ("v:principal_curvature_map", { 0, 0, + boost::tie(principal_curvatures_and_directions_map, created) = smesh.add_property_map> + ("v:principal_curvatures_and_directions_map", { 0, 0, Epic_kernel::Vector_3(0,0,0), Epic_kernel::Vector_3(0,0,0) }); assert(created); @@ -57,9 +57,9 @@ int main(int argc, char* argv[]) gaussian_curvature_map ); - PMP::interpolated_corrected_principal_curvatures( + PMP::interpolated_corrected_principal_curvatures_and_directions( smesh, - principal_curvature_map + principal_curvatures_and_directions_map ); // uncomment this to compute a curvature while specifying named parameters @@ -83,12 +83,12 @@ int main(int argc, char* argv[]) PMP::interpolated_corrected_curvatures( smesh, CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) - .vertex_principal_curvature_map(principal_curvature_map) + .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map) ); for (vertex_descriptor v : vertices(smesh)) { - auto PC = principal_curvature_map[v]; + auto PC = principal_curvatures_and_directions_map[v]; std::cout << v.idx() << ": HC = " << mean_curvature_map[v] << ", GC = " << gaussian_curvature_map[v] << "\n" << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 929fc8d96a67..50fe1a014d8e 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -31,7 +31,7 @@ int main(int argc, char *argv[]) mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); boost::property_map>>::type - principal_curvature_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); + principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); PMP::interpolated_corrected_mean_curvature( polyhedron, @@ -41,9 +41,9 @@ int main(int argc, char *argv[]) polyhedron, gaussian_curvature_map); - PMP::interpolated_corrected_principal_curvatures( + PMP::interpolated_corrected_principal_curvatures_and_directions( polyhedron, - principal_curvature_map); + principal_curvatures_and_directions_map); // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) @@ -61,12 +61,12 @@ int main(int argc, char *argv[]) PMP::interpolated_corrected_curvatures( polyhedron, CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) - .vertex_principal_curvature_map(principal_curvature_map)); + .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map)); int i = 0; for (vertex_descriptor v : vertices(polyhedron)) { - auto PC = get(principal_curvature_map, v); + auto PC = get(principal_curvatures_and_directions_map, v); std::cout << i << ": HC = " << get(mean_curvature_map, v) << ", GC = " << get(gaussian_curvature_map, v) << "\n" << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 3f118bdba45d..3b02341a2129 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -70,10 +70,10 @@ struct Principal_curvature { typename GT::Vector_3 min_direction, typename GT::Vector_3 max_direction ) { - min_curvature = min_curvature; - max_curvature = max_curvature; - min_direction = min_direction; - max_direction = max_direction; + this->min_curvature = min_curvature; + this->max_curvature = max_curvature; + this->min_direction = min_direction; + this->max_direction = max_direction; } }; @@ -440,7 +440,7 @@ namespace internal { } template - Principal_curvature principal_curvature_from_anisotropic_measures( + Principal_curvature principal_curvatures_and_directions_from_anisotropic_measures( const std::array anisotropic_measure, const typename GT::FT v_mu0, const typename GT::Vector_3 u_GT @@ -510,9 +510,9 @@ namespace internal { Default_scalar_map>::type Vertex_gaussian_curvature_map; typedef Constant_property_map> Default_principal_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvature_map; + Default_principal_map>::type Vertex_principal_curvatures_and_directions_map; typedef typename boost::property_map>::const_type Face_scalar_measure_map; @@ -527,11 +527,11 @@ namespace internal { bool is_mean_curvature_selected; bool is_gaussian_curvature_selected; - bool is_principal_curvature_selected; + bool is_principal_curvatures_and_directions_selected; Vertex_mean_curvature_map mean_curvature_map; Vertex_gaussian_curvature_map gaussian_curvature_map; - Vertex_principal_curvature_map principal_curvature_map; + Vertex_principal_curvatures_and_directions_map principal_curvatures_and_directions_map; Face_scalar_measure_map mu0_map, mu1_map, mu2_map; Face_anisotropic_measure_map muXY_map; @@ -563,11 +563,11 @@ namespace internal { is_mean_curvature_selected = !is_default_parameter::value; is_gaussian_curvature_selected = !is_default_parameter::value; - is_principal_curvature_selected = !is_default_parameter::value; + is_principal_curvatures_and_directions_selected = !is_default_parameter::value; mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); - principal_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvature_map), Default_principal_map()); + principal_curvatures_and_directions_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions_map), Default_principal_map()); set_ball_radius(radius); } @@ -588,7 +588,7 @@ namespace internal { { set_named_params(np); - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvatures_and_directions_selected) { set_property_maps(); @@ -619,7 +619,7 @@ namespace internal { if (is_gaussian_curvature_selected) put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u, x)); - if (is_principal_curvature_selected) + if (is_principal_curvatures_and_directions_selected) put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); x.clear(); @@ -640,7 +640,7 @@ namespace internal { if (is_gaussian_curvature_selected) vertex_measures.gaussian_curvature_measure += get(mu2_map, f); - if (is_principal_curvature_selected) + if (is_principal_curvatures_and_directions_selected) { const std::array face_anisotropic_measure = get(muXY_map, f); for (std::size_t i = 0; i < 3 * 3; i++) @@ -692,7 +692,7 @@ namespace internal { if (is_gaussian_curvature_selected) vertex_measures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); - if (is_principal_curvature_selected) + if (is_principal_curvatures_and_directions_selected) { const std::array face_anisotropic_measure = get(muXY_map, fi); for (std::size_t i = 0; i < 3 * 3; i++) @@ -733,467 +733,19 @@ namespace internal { put(gaussian_curvature_map, v, 0); } - if (is_principal_curvature_selected) { + if (is_principal_curvatures_and_directions_selected) { const Vector_3 v_normal = get(vnm, v); - const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( + const Principal_curvature principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, v_normal ); - put(principal_curvature_map, v, principal_curvature); + put(principal_curvatures_and_directions_map, v, principal_curvatures_and_directions); } } } }; - template - class Interpolated_corrected_curvatures_point_computer - { - typedef typename GetGeomTraits::type GT; - - typedef typename GT::FT FT; - typedef typename GT::Point_3 Point_3; - typedef typename GT::Vector_3 Vector_3; - - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - - typedef typename GetVertexPointMap::const_type Vertex_position_map; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; - - private: - const PolygonMesh& pmesh; - Vertex_position_map vpm; - Vertex_normal_map vnm; - FT ball_radius; - - bool is_mean_curvature_selected; - bool is_gaussian_curvature_selected; - bool is_principal_curvature_selected; - - Point_3 point; - - void set_named_params(const NamedParameters& np) - { - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; - - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - - vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); - - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); - - const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - - is_mean_curvature_selected = !is_default_parameter::value; - is_gaussian_curvature_selected = !is_default_parameter::value; - is_principal_curvature_selected = !is_default_parameter::value; - - set_ball_radius(radius); - } - - void set_ball_radius(const FT radius) { - if (radius == 0) - ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - else - ball_radius = radius; - } - - public: - - Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values() - ) : - pmesh(pmesh) - { - set_named_params(np); - - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) - { - set_property_maps(); - - compute_selected_curvatures(); - } - } - - private: - Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) - { - Vertex_measures vertex_curvatures; - - std::vector x; - std::vector u; - - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - Point_3 p = get(vpm, v); - x.push_back(Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - - vertex_curvatures.area_measure += interpolated_corrected_area_measure_face(u, x); - - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); - - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); - - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; - } - - x.clear(); - u.clear(); - } - - return vertex_curvatures; - } - - Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) - { - std::queue bfs_queue; - std::unordered_set bfs_visited; - - Point_3 vp = get(vpm, v); - Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); - - Vertex_measures vertex_curvatures; - - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); - } - } - - std::vector x; - std::vector u; - - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); - - // looping over vertices in face to get point coordinates - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - Point_3 pi = get(vpm, vi); - x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); - } - - const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); - - if (f_ratio != 0.0) - { - for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - u.push_back(get(vnm, vi)); - } - - vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); - - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); - - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); - - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, fi); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; - } - - x.clear(); - u.clear(); - - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) - { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) - { - bfs_queue.push(fj); - bfs_visited.insert(fj); - } - } - } - } - return vertex_curvatures; - } - - void compute_selected_curvatures() { - for (Vertex_descriptor v : vertices(pmesh)) - { - Vertex_measures vertex_curvatures = (ball_radius < 0) ? - compute_expanded_interpolated_corrected_measure_vertex_no_radius(v) : - compute_expanded_interpolated_corrected_measure_vertex(v); - - if (is_mean_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : - put(mean_curvature_map, v, 0); - } - - if (is_gaussian_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : - put(gaussian_curvature_map, v, 0); - } - - if (is_principal_curvature_selected) { - const Vector_3 v_normal = get(vnm, v); - const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( - vertex_curvatures.anisotropic_measure, - vertex_curvatures.area_measure, - v_normal - ); - put(principal_curvature_map, v, principal_curvature); - } - } - } - - }; - - template - class Interpolated_corrected_curvatures_element_computer - { - typedef typename GetGeomTraits::type GT; - - typedef typename GT::FT FT; - typedef typename GT::Point_3 Point_3; - typedef typename GT::Vector_3 Vector_3; - - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - - typedef typename GetVertexPointMap::const_type Vertex_position_map; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; - - private: - const PolygonMesh& pmesh; - Vertex_position_map vpm; - Vertex_normal_map vnm; - FT ball_radius; - - bool is_mean_curvature_selected; - bool is_gaussian_curvature_selected; - bool is_principal_curvature_selected; - - void set_named_params(const NamedParameters& np) - { - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; - - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); - - vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); - - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); - - const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - - is_mean_curvature_selected = !is_default_parameter::value; - is_gaussian_curvature_selected = !is_default_parameter::value; - is_principal_curvature_selected = !is_default_parameter::value; - - set_ball_radius(radius); - } - - void set_ball_radius(const FT radius) { - if (radius == 0) - ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - else - ball_radius = radius; - } - - public: - - Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values() - ) : - pmesh(pmesh) - { - set_named_params(np); - - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvature_selected) - { - set_property_maps(); - } - } - - private: - Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) - { - Vertex_measures vertex_curvatures; - - std::vector x; - std::vector u; - - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - Point_3 p = get(vpm, v); - x.push_back(Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - - vertex_curvatures.area_measure += interpolated_corrected_area_measure_face(u, x); - - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); - - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); - - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += face_anisotropic_measure[i]; - } - - x.clear(); - u.clear(); - } - - return vertex_curvatures; - } - - Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) - { - std::queue bfs_queue; - std::unordered_set bfs_visited; - - Point_3 vp = get(vpm, v); - Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); - - Vertex_measures vertex_curvatures; - - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); - } - } - - std::vector x; - std::vector u; - - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); - - // looping over vertices in face to get point coordinates - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - Point_3 pi = get(vpm, vi); - x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); - } - - const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); - - if (f_ratio != 0.0) - { - for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - u.push_back(get(vnm, vi)); - } - - vertex_curvatures.area_measure += f_ratio * get(mu0_map, fi); - - if (is_mean_curvature_selected) - vertex_curvatures.mean_curvature_measure += f_ratio * get(mu1_map, fi); - - if (is_gaussian_curvature_selected) - vertex_curvatures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); - - if (is_principal_curvature_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, fi); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_curvatures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; - } - - x.clear(); - u.clear(); - - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) - { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) - { - bfs_queue.push(fj); - bfs_visited.insert(fj); - } - } - } - } - return vertex_curvatures; - } - - void compute_selected_curvatures() { - for (Vertex_descriptor v : vertices(pmesh)) - { - Vertex_measures vertex_curvatures = (ball_radius < 0) ? - compute_expanded_interpolated_corrected_measure_vertex_no_radius(v) : - compute_expanded_interpolated_corrected_measure_vertex(v); - - if (is_mean_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(mean_curvature_map, v, 0.5 * vertex_curvatures.mean_curvature_measure / vertex_curvatures.area_measure) : - put(mean_curvature_map, v, 0); - } - - if (is_gaussian_curvature_selected) { - vertex_curvatures.area_measure != 0 ? - put(gaussian_curvature_map, v, vertex_curvatures.gaussian_curvature_measure / vertex_curvatures.area_measure) : - put(gaussian_curvature_map, v, 0); - } - - if (is_principal_curvature_selected) { - const Vector_3 v_normal = get(vnm, v); - const Principal_curvature principal_curvature = principal_curvature_from_anisotropic_measures( - vertex_curvatures.anisotropic_measure, - vertex_curvatures.area_measure, - v_normal - ); - put(principal_curvature_map, v, principal_curvature); - } - } - } - - }; - } // namespace internal /** @@ -1247,7 +799,7 @@ namespace internal { * \cgalNamedParamsEnd * * @see `interpolated_corrected_gaussian_curvature()` -* @see `interpolated_corrected_principal_curvatures()` +* @see `interpolated_corrected_principal_curvatures_and_directions()` * @see `interpolated_corrected_curvatures()` */ @@ -1311,7 +863,7 @@ template - void interpolated_corrected_principal_curvatures(const PolygonMesh& pmesh, + void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvatures_and_directions_map(vcm)); } /** @@ -1441,7 +993,7 @@ template::%Vertex_descriptor` @@ -1465,7 +1017,7 @@ template diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 21b292b05d0c..09df28bc2816 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -14,7 +14,7 @@ #include using namespace CGAL::Three; -class Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin : +class Polyhedron_demo_interpolated_corrected_principal_curvatures_and_directions_plugin : public QObject, public Polyhedron_demo_plugin_interface { @@ -47,7 +47,7 @@ public Q_SLOTS: private : Scene_interface *scene; QList _actions; -}; // end Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin +}; // end Polyhedron_demo_interpolated_corrected_principal_curvatures_and_directions_plugin void compute(SMesh* sMesh, @@ -72,23 +72,23 @@ void compute(SMesh* sMesh, typename boost::property_map::type vpmap = get(CGAL::vertex_point, *sMesh); bool created = false; - SMesh::Property_map principal_curvature_map; + SMesh::Property_map principal_curvatures_and_directions_map; - boost::tie(principal_curvature_map, created) = sMesh->add_property_map - ("v:principal_curvature_map", { 0, 0, + boost::tie(principal_curvatures_and_directions_map, created) = sMesh->add_property_map + ("v:principal_curvatures_and_directions_map", { 0, 0, Vector(0,0,0), Vector(0,0,0)}); assert(created); - PMP::interpolated_corrected_principal_curvatures( + PMP::interpolated_corrected_principal_curvatures_and_directions( *sMesh, - principal_curvature_map + principal_curvatures_and_directions_map ); typename EpicKernel::FT max_curvature_magnitude_on_mesh = 0; for (vertex_descriptor v : vertices(*sMesh)) { - const PrincipalCurvatureTuple pc = principal_curvature_map[v]; + const PrincipalCurvatureTuple pc = principal_curvatures_and_directions_map[v]; max_curvature_magnitude_on_mesh = std::max(max_curvature_magnitude_on_mesh, std::max(abs(get<0>(pc)), get<1>(pc))); } @@ -114,7 +114,7 @@ void compute(SMesh* sMesh, avg_edge_length /= n; } - const PrincipalCurvatureTuple pc = principal_curvature_map[v]; + const PrincipalCurvatureTuple pc = principal_curvatures_and_directions_map[v]; Vector umin = (std::get<0>(pc)/ max_curvature_magnitude_on_mesh) * std::get<2>(pc) * avg_edge_length; Vector umax = (std::get<1>(pc)/ max_curvature_magnitude_on_mesh) * std::get<3>(pc) * avg_edge_length; @@ -133,7 +133,7 @@ void compute(SMesh* sMesh, } } -void Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin::on_actionEstimateCurvature_triggered() +void Polyhedron_demo_interpolated_corrected_principal_curvatures_and_directions_plugin::on_actionEstimateCurvature_triggered() { // get active polyhedron const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); @@ -183,4 +183,4 @@ void Polyhedron_demo_interpolated_corrected_principal_curvatures_plugin::on_acti QApplication::restoreOverrideCursor(); } -#include "Interpolated_corrected_principal_curvatures_plugin.moc" +#include "Interpolated_corrected_principal_curvatures_and_directions_plugin.moc" diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 03ee822d0bc9..21b8227e86c9 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -89,7 +89,7 @@ CGAL_add_named_parameter(nb_points_per_area_unit_t, nb_points_per_area_unit, num CGAL_add_named_parameter(nb_points_per_distance_unit_t, nb_points_per_distance_unit, number_of_points_per_distance_unit) CGAL_add_named_parameter(vertex_mean_curvature_map_t, vertex_mean_curvature_map, vertex_mean_curvature_map) CGAL_add_named_parameter(vertex_gaussian_curvature_map_t, vertex_gaussian_curvature_map, vertex_gaussian_curvature_map) -CGAL_add_named_parameter(vertex_principal_curvature_map_t, vertex_principal_curvature_map, vertex_principal_curvature_map) +CGAL_add_named_parameter(vertex_principal_curvatures_and_directions_map_t, vertex_principal_curvatures_and_directions_map, vertex_principal_curvatures_and_directions_map) CGAL_add_named_parameter(ball_radius_t, ball_radius, ball_radius) CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_orientation) CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides) From f35faf60e18ace1d90646823bd7c1ff1ff8ddb1e Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 11:54:20 +0200 Subject: [PATCH 085/943] minor doc fixes and renaming --- .../PackageDescription.txt | 4 ++-- .../Polygon_mesh_processing.txt | 17 ++++++++-------- ...erpolated_corrected_curvatures_example.cpp | 4 ++-- ...orrected_curvatures_polyhedron_example.cpp | 4 ++-- ...nterpolated_corrected_curvature_measures.h | 20 +++++++++---------- 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 5090535be250..f62b2816cf7f 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -200,12 +200,12 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - \link PMP_locate_grp Nearest Face Location Queries \endlink - \link PMP_locate_grp Random Location Generation \endlink -\cgalCRPSection{Corrected Curvature Functions} +\cgalCRPSection{Corrected Curvatures} - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` -- `CGAL::Polygon_mesh_processing::Principal_curvature` +- `CGAL::Polygon_mesh_processing::Principal_curvatures_and_directions` \cgalCRPSection{Normal Computation Functions} - `CGAL::Polygon_mesh_processing::compute_face_normal()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 2347ae1c7ae8..1d7184561a80 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -879,11 +879,11 @@ not provide storage for the normals. **************************************** \section PMPICC Computing Curvatures -This package provides methods to compute curvatures on polygonal meshes based on \cgalCite{lachaud2020} -This includes mean curvature, gaussian curvature, principal curvatures and directions. -These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. -The algorithms used prove to work well in general. Also, on meshes with noise -on vertex positions, they give accurate results, on the condition that the +This package provides methods to compute curvatures on polygonal meshes based on Interpolated Corrected Curvatures +on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, gaussian curvature, +principal curvatures and directions. These can be computed on triangle meshes, quad meshes, +and meshes with n-gon faces. The algorithms used prove to work well in general. Also, on meshes +with noise on vertex positions, they give accurate results, on the condition that the correct vertex normals are provided. The implementation is generic in terms of mesh data structure. It can be used on Surface_mesh, @@ -912,13 +912,12 @@ The mean curvature distribution on a bear mesh with different values for the exp Property maps are used to record the computed curvatures as shown in examples. -\subsection ICCExample Interpolated Corrected Curvature Examples Property maps are an API introduced in the boost library that allows associating values to keys. In the following examples, for each property map, we associate a curvature value to each vertex. -\subsubsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh. +\subsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh Example The following example illustrates how to compute the curvatures on vertices @@ -926,7 +925,7 @@ and store them in property maps provided by the class `Surface_mesh`. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} -\subsubsection ICCExamplePH Interpolated Corrected Curvature on a Polyhedron +\subsection ICCExamplePH Interpolated Corrected Curvature on a Polyhedron Example The following example illustrates how to compute the curvatures on vertices @@ -1143,7 +1142,7 @@ is covered by a set of prisms, where each prism is an offset for an input triang That is, the implementation in \cgal does not use indirect predicates. The interpolated corrected curvatures were implemented during GSoC 2022. This was implemented by Hossam Saeed and under -supervision of Sebastien Loriot, Jaques-Olivier Lachaud and David Coeurjolly. The implementation is based \cgalCite{lachaud2020}. +supervision of Sebastien Loriot, Jaques-Olivier Lachaud and David Coeurjolly. The implementation is based on \cgalCite{lachaud2020}. DGtal's implementation was also used as a reference during the project. diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 71aa06a8caec..33d34cd34f13 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -38,9 +38,9 @@ int main(int argc, char* argv[]) assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> principal_curvatures_and_directions_map; + Surface_Mesh::Property_map> principal_curvatures_and_directions_map; - boost::tie(principal_curvatures_and_directions_map, created) = smesh.add_property_map> + boost::tie(principal_curvatures_and_directions_map, created) = smesh.add_property_map> ("v:principal_curvatures_and_directions_map", { 0, 0, Epic_kernel::Vector_3(0,0,0), Epic_kernel::Vector_3(0,0,0) }); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 50fe1a014d8e..6bbe49ce37e5 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -30,8 +30,8 @@ int main(int argc, char *argv[]) boost::property_map>::type mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); - boost::property_map>>::type - principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); + boost::property_map>>::type + principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); PMP::interpolated_corrected_mean_curvature( polyhedron, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 3b02341a2129..6ed11404a257 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -43,7 +43,7 @@ namespace Polygon_mesh_processing { * @tparam GT is the geometric traits class. */ template -struct Principal_curvature { +struct Principal_curvatures_and_directions { /// min curvature magnitude typename GT::FT min_curvature; @@ -57,14 +57,14 @@ struct Principal_curvature { /// max curvature direction vector typename GT::Vector_3 max_direction; - Principal_curvature() { + Principal_curvatures_and_directions() { min_curvature = 0; max_curvature = 0; min_direction = typename GT::Vector_3(0, 0, 0); max_direction = typename GT::Vector_3(0, 0, 0); } - Principal_curvature( + Principal_curvatures_and_directions( typename GT::FT min_curvature, typename GT::FT max_curvature, typename GT::Vector_3 min_direction, @@ -440,7 +440,7 @@ namespace internal { } template - Principal_curvature principal_curvatures_and_directions_from_anisotropic_measures( + Principal_curvatures_and_directions principal_curvatures_and_directions_from_anisotropic_measures( const std::array anisotropic_measure, const typename GT::FT v_mu0, const typename GT::Vector_3 u_GT @@ -462,7 +462,7 @@ namespace internal { eigensolver.computeDirect(v_muXY); if (eigensolver.info() != Eigen::Success) - return Principal_curvature(); + return Principal_curvatures_and_directions(); const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); @@ -470,7 +470,7 @@ namespace internal { const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); - return Principal_curvature( + return Principal_curvatures_and_directions( (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, min_eig_vec, @@ -509,7 +509,7 @@ namespace internal { NamedParameters, Default_scalar_map>::type Vertex_gaussian_curvature_map; - typedef Constant_property_map> Default_principal_map; + typedef Constant_property_map> Default_principal_map; typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvatures_and_directions_map; @@ -735,7 +735,7 @@ namespace internal { if (is_principal_curvatures_and_directions_selected) { const Vector_3 v_normal = get(vnm, v); - const Principal_curvature principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( + const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, v_normal @@ -997,8 +997,8 @@ template::%Vertex_descriptor` -* as key type and `%Principal_curvature` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} +* as key type and `%Principal_curvatures_and_directions` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} * \cgalParamNEnd * From fe8988b650046236a9dc26c39707c915de4c4147 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 12:16:27 +0200 Subject: [PATCH 086/943] demo fixes --- .../demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 6efc7f213fe2..404bb20f8072 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -1638,7 +1638,7 @@ private Q_SLOTS: std::unordered_map is_source; - double expand_radius; + double expand_radius = 0; double maxEdgeLength = -1; double minBox; double maxBox; From dd49b0c0d87eb344efc3ef994c32b74ca2916706 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 12:18:28 +0200 Subject: [PATCH 087/943] demo fixes --- ..._corrected_principal_curvatures_plugin.cpp | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 09df28bc2816..789ba4a06567 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -57,42 +57,38 @@ void compute(SMesh* sMesh, Scene_polylines_item* min_negative_curv) { namespace PMP = CGAL::Polygon_mesh_processing; - typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; - typedef EpicKernel::Point_3 Point; - typedef EpicKernel::Point_3 Point; - typedef EpicKernel::Vector_3 Vector; - typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef std::tuple< - EpicKernel::FT, - EpicKernel::FT, - Vector, - Vector - > PrincipalCurvatureTuple; + typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; + typedef Epic_kernel::Point_3 Point; + typedef Epic_kernel::Point_3 Point; + typedef Epic_kernel::Vector_3 Vector; + typedef boost::graph_traits::vertex_descriptor Vertex_descriptor; typename boost::property_map::type vpmap = get(CGAL::vertex_point, *sMesh); bool created = false; - SMesh::Property_map principal_curvatures_and_directions_map; + SMesh::Property_map> principal_curvatures_and_directions_map; + + boost::tie(principal_curvatures_and_directions_map, created) = sMesh->add_property_map> + ("v:principal_curvatures_and_directions_map", { 0, 0, + Vector(0,0,0), + Vector(0,0,0) }); + assert(created); - boost::tie(principal_curvatures_and_directions_map, created) = sMesh->add_property_map - ("v:principal_curvatures_and_directions_map", { 0, 0, - Vector(0,0,0), - Vector(0,0,0)}); - assert(created); PMP::interpolated_corrected_principal_curvatures_and_directions( - *sMesh, - principal_curvatures_and_directions_map + *sMesh, + principal_curvatures_and_directions_map, + CGAL::parameters::ball_radius(0) ); - typename EpicKernel::FT max_curvature_magnitude_on_mesh = 0; - for (vertex_descriptor v : vertices(*sMesh)) + typename Epic_kernel::FT max_curvature_magnitude_on_mesh = 0; + for (Vertex_descriptor v : vertices(*sMesh)) { - const PrincipalCurvatureTuple pc = principal_curvatures_and_directions_map[v]; - max_curvature_magnitude_on_mesh = std::max(max_curvature_magnitude_on_mesh, std::max(abs(get<0>(pc)), get<1>(pc))); + const PMP::Principal_curvatures_and_directions pc = principal_curvatures_and_directions_map[v]; + max_curvature_magnitude_on_mesh = std::max(max_curvature_magnitude_on_mesh, std::max(abs(pc.min_curvature), abs(pc.max_curvature))); } - for(vertex_descriptor v : vertices(*sMesh)) + for(Vertex_descriptor v : vertices(*sMesh)) { std::vector points; @@ -107,17 +103,17 @@ void compute(SMesh* sMesh, const std::size_t n = CGAL::edges(*sMesh).size(); - EpicKernel::FT avg_edge_length = 0; + Epic_kernel::FT avg_edge_length = 0; if (n > 0) { - for (auto e : CGAL::edges(*sMesh)) - avg_edge_length += PMP::edge_length(e, *sMesh); - avg_edge_length /= n; + for (auto e : CGAL::edges(*sMesh)) + avg_edge_length += PMP::edge_length(e, *sMesh); + avg_edge_length /= n; } - const PrincipalCurvatureTuple pc = principal_curvatures_and_directions_map[v]; + const PMP::Principal_curvatures_and_directions pc = principal_curvatures_and_directions_map[v]; - Vector umin = (std::get<0>(pc)/ max_curvature_magnitude_on_mesh) * std::get<2>(pc) * avg_edge_length; - Vector umax = (std::get<1>(pc)/ max_curvature_magnitude_on_mesh) * std::get<3>(pc) * avg_edge_length; + Vector umin = (pc.min_curvature / max_curvature_magnitude_on_mesh) * pc.min_direction * avg_edge_length; + Vector umax = (pc.max_curvature / max_curvature_magnitude_on_mesh) * pc.max_direction * avg_edge_length; Scene_polylines_item::Polyline max_segment(2), min_segment(2); @@ -128,8 +124,8 @@ void compute(SMesh* sMesh, max_segment[0] = central_point + du * umax; max_segment[1] = central_point - du * umax; - (std::get<0>(pc) > 0 ? min_curv : min_negative_curv)->polylines.push_back(min_segment); - (std::get<1>(pc) > 0 ? max_curv : max_negative_curv)->polylines.push_back(max_segment); + (pc.min_curvature > 0 ? min_curv : min_negative_curv)->polylines.push_back(min_segment); + (pc.max_curvature > 0 ? max_curv : max_negative_curv)->polylines.push_back(max_segment); } } @@ -183,4 +179,4 @@ void Polyhedron_demo_interpolated_corrected_principal_curvatures_and_directions_ QApplication::restoreOverrideCursor(); } -#include "Interpolated_corrected_principal_curvatures_and_directions_plugin.moc" +#include "Interpolated_corrected_principal_curvatures_plugin.moc" From d96dca1264c3f53a836d6410165c60910967e005 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 17:16:28 +0200 Subject: [PATCH 088/943] Skipping concave n-gons case for now remove face triangulation function draft --- .../triangulate_faces.h | 147 ------------------ 1 file changed, 147 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h index abe56ea35a61..0b48967f2733 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h @@ -499,153 +499,6 @@ bool triangulate_face(typename boost::graph_traits::face_descriptor return modifier.triangulate_face(f, pmesh, use_cdt, visitor); } - -#ifndef CGAL_TRIANGULATE_FACES_DO_NOT_USE_CDT2 -template -OutputIterator -face_triangulation(typename boost::graph_traits::face_descriptor f, - PolygonMesh& pmesh, - OutputIterator out, - const NamedParameters& np = parameters::default_values()) -{ - using parameters::choose_parameter; - using parameters::get_parameter; - - //VertexPointMap - typedef typename GetVertexPointMap::type VPMap; - VPMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point), - get_property_map(vertex_point, pmesh)); - - //Kernel - typedef typename GetGeomTraits::type Kernel; - Kernel traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); - - //Face_info - typedef typename internal::Triangulate_modifier>::Face_info Face_info; - - //CDT - typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; - typedef CGAL::Projection_traits_3 P_traits; - typedef CGAL::Triangulation_vertex_base_with_info_2 Vb; - typedef CGAL::Triangulation_face_base_with_info_2 Fb1; - typedef CGAL::Constrained_triangulation_face_base_2 Fb; - typedef CGAL::Triangulation_data_structure_2 TDS; - typedef CGAL::Exact_intersections_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; - P_traits cdt_traits(normal); - CDT cdt(cdt_traits); - - std::size_t original_size = CGAL::halfedges_around_face(halfedge(f, pmesh), pmesh).size(); - - // Halfedge_around_facet_circulator - typedef typename CDT::Vertex_handle Tr_Vertex_handle; - halfedge_descriptor start = halfedge(f, pmesh); - halfedge_descriptor h = start; - Tr_Vertex_handle previous, first; - do - { - Tr_Vertex_handle vh = cdt.insert(get(_vpmap, target(h, pmesh))); - if (first == Tr_Vertex_handle()) { - first = vh; - } - vh->info() = h; - if(previous != Tr_Vertex_handle() && previous != vh) { - cdt.insert_constraint(previous, vh); - } - previous = vh; - h = next(h, pmesh); - - } while( h != start ); - cdt.insert_constraint(previous, first); - - // sets mark is_external - for(typename CDT::All_faces_iterator fit = cdt.all_faces_begin(), - end = cdt.all_faces_end(); - fit != end; ++fit) - { - fit->info().is_external = false; - } - std::queue face_queue; - face_queue.push(cdt.infinite_vertex()->face()); - while(! face_queue.empty() ) - { - typename CDT::Face_handle fh = face_queue.front(); - face_queue.pop(); - - if(fh->info().is_external) - continue; - - fh->info().is_external = true; - for(int i = 0; i <3; ++i) - { - if(!cdt.is_constrained(typename CDT::Edge(fh, i))) - { - face_queue.push(fh->neighbor(i)); - } - } - } - - if(cdt.dimension() != 2 || cdt.number_of_vertices() != original_size) - return out; - - for(typename CDT::Finite_edges_iterator eit = cdt.finite_edges_begin(), - end = cdt.finite_edges_end(); - eit != end; ++eit) - { - typename CDT::Face_handle fh = eit->first; - const int index = eit->second; - typename CDT::Face_handle opposite_fh = fh->neighbor(eit->second); - const int opposite_index = opposite_fh->index(fh); - - const Tr_Vertex_handle va = fh->vertex(cdt. cw(index)); - const Tr_Vertex_handle vb = fh->vertex(cdt.ccw(index)); - - if( ! (is_external(fh) && is_external(opposite_fh))//not both fh are external - && ! cdt.is_constrained(*eit) ) //and edge is not constrained - { - // strictly internal edge - halfedge_descriptor hnew = halfedge(add_edge(pmesh), pmesh), - hnewopp = opposite(hnew, pmesh); - - fh->info().e[index] = hnew; - opposite_fh->info().e[opposite_index] = hnewopp; - - set_target(hnew, target(va->info(), pmesh), pmesh); - set_target(hnewopp, target(vb->info(), pmesh), pmesh); - } - if( cdt.is_constrained(*eit) ) //edge is constrained - { - if(!is_external(fh)) { - fh->info().e[index] = va->info(); - } - if(!is_external(opposite_fh)) { - opposite_fh->info().e[opposite_index] = vb->info(); - } - } - } - for(typename CDT::Finite_faces_iterator fit = cdt.finite_faces_begin(), - end = cdt.finite_faces_end(); - fit != end; ++fit) - { - if(!is_external(fit)) - { - halfedge_descriptor h0 = fit->info().e[0]; - halfedge_descriptor h1 = fit->info().e[1]; - halfedge_descriptor h2 = fit->info().e[2]; - *out++=std::make_tuple(target(h0, pmesh), target(h1, pmesh), target(h2,pmesh)); - } - } - - return out; -} -#endif - - - /** * \ingroup PMP_meshing_grp * From 0ac812bd2f57e4efbea92c7cbaf0bc5579166dac Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 17:23:15 +0200 Subject: [PATCH 089/943] minor change, position shouldn't be optional that is, in area and mean measures, in gaussian, it is not needed --- .../Curvatures/interpolated_corrected_curvature_measures.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 6ed11404a257..f14904c6799a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -111,7 +111,7 @@ namespace internal { template typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, - const std::vector& x = {}) + const std::vector& x) { const std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -166,7 +166,7 @@ namespace internal { template typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, - const std::vector& x = {}) + const std::vector& x) { const std::size_t n = x.size(); CGAL_precondition(u.size() == n); @@ -617,7 +617,7 @@ namespace internal { put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); if (is_gaussian_curvature_selected) - put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u, x)); + put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u)); if (is_principal_curvatures_and_directions_selected) put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); From d5a2cf1f0555a015ea3d17c24624565cbb4aebcc Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 19 Nov 2022 19:27:33 +0200 Subject: [PATCH 090/943] fixed an expansion bug when mesh has boundary and no input radius is specified --- .../Curvatures/interpolated_corrected_curvature_measures.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index f14904c6799a..4a50a618e66f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -632,6 +632,9 @@ namespace internal { Vertex_measures vertex_measures; for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f == boost::graph_traits::null_face()) + continue; + vertex_measures.area_measure += get(mu0_map, f); if (is_mean_curvature_selected) From 1fd56cdd1dfd5fa06184c1ea38fe581f29c02fdf Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:28:10 +0200 Subject: [PATCH 091/943] testing file for implemented functions --- .../Polygon_mesh_processing/CMakeLists.txt | 2 +- ...est_interopolated_corrected_curvatures.cpp | 148 --------------- ...test_interpolated_corrected_curvatures.cpp | 178 ++++++++++++++++++ 3 files changed, 179 insertions(+), 149 deletions(-) delete mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 808e6d3a05ef..c1aedddedf4e 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -69,7 +69,7 @@ create_single_source_cgal_program("self_intersection_polyhedron_test.cpp") create_single_source_cgal_program("self_intersection_surface_mesh_test.cpp") create_single_source_cgal_program("pmp_do_intersect_test.cpp") create_single_source_cgal_program("test_is_polygon_soup_a_polygon_mesh.cpp") -create_single_source_cgal_program("test_interopolated_corrected_curvatures.cpp") +create_single_source_cgal_program("test_interpolated_corrected_curvatures.cpp") create_single_source_cgal_program("test_stitching.cpp") create_single_source_cgal_program("remeshing_test.cpp") create_single_source_cgal_program("remeshing_with_isolated_constraints_test.cpp" ) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp deleted file mode 100644 index b2dbcc0850bb..000000000000 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interopolated_corrected_curvatures.cpp +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -namespace PMP = CGAL::Polygon_mesh_processing; - -typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; -typedef CGAL::Surface_mesh SMesh; -typedef boost::graph_traits::face_descriptor face_descriptor; -typedef boost::graph_traits::edge_descriptor edge_descriptor; -typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - -void test(std::string mesh_path, EpicKernel::FT rel_expansion_radius, EpicKernel::FT rel_noise_magnitude) { - SMesh pmesh; - const std::string filename = CGAL::data_file_path(mesh_path); - - if (!CGAL::IO::read_polygon_mesh(filename, pmesh)) - { - std::cerr << "Invalid input file." << std::endl; - } - - bool created = false; - - SMesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = pmesh.add_property_map("v:mean_curvature_map", 0); - assert(created); - - boost::tie(gaussian_curvature_map, created) = pmesh.add_property_map("v:gaussian_curvature_map", 0); - assert(created); - - // getting the max and min edge lengthes - const auto edge_range = CGAL::edges(pmesh); - - const auto edge_length_comparator = [&, pmesh](auto l, auto r) { - return PMP::edge_length(l, pmesh) < PMP::edge_length(r, pmesh); - }; - - const edge_descriptor longest_edge = *std::max_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT max_edge_length = PMP::edge_length(longest_edge, pmesh); - - const edge_descriptor shortest_edge = *std::min_element(edge_range.begin(), edge_range.end(), edge_length_comparator); - const EpicKernel::FT min_edge_length = PMP::edge_length(shortest_edge, pmesh); - - - if (rel_noise_magnitude > 0) - { - if (!CGAL::is_triangle_mesh(pmesh)) - return; - - SMesh::Property_map vnm; - boost::tie(vnm, created) = pmesh.add_property_map("v:vnm", { 0 , 0 , 0 }); - assert(created); - - CGAL::Polygon_mesh_processing::compute_vertex_normals(pmesh, vnm); - - PMP::random_perturbation(pmesh, rel_noise_magnitude * min_edge_length, CGAL::parameters::random_seed(0)); - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length).vertex_normal_map(vnm) - ); - } - else { - PMP::interpolated_corrected_mean_curvature( - pmesh, - mean_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - PMP::interpolated_corrected_gaussian_curvature( - pmesh, - gaussian_curvature_map, - CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - ); - - } - - - - //PMP::interpolated_corrected_mean_curvature( - // pmesh, - // mean_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - //PMP::interpolated_corrected_gaussian_curvature( - // pmesh, - // gaussian_curvature_map, - // CGAL::parameters::ball_radius(rel_expansion_radius * max_edge_length) - //); - - - const EpicKernel::FT max_mean_curvature = *std::max_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT min_mean_curvature = *std::min_element(mean_curvature_map.begin(), mean_curvature_map.end()); - const EpicKernel::FT max_gaussian_curvature = *std::max_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - const EpicKernel::FT min_gaussian_curvature = *std::min_element(gaussian_curvature_map.begin(), gaussian_curvature_map.end()); - - std::cout << "# " << mesh_path << ":\n" - << "expansion radius ratio to max length / expansion radius = " << rel_expansion_radius << " / " << rel_expansion_radius * max_edge_length << ",\n" - << "max perturbation ratio to minlength / max perturbation = " << rel_noise_magnitude << " / " << rel_noise_magnitude * min_edge_length << "\n" - << "mean curvature: min = " << min_mean_curvature << " <-> " << max_mean_curvature << " = max" << "\n" - << "gaussian curvature: min = " << min_gaussian_curvature << " <-> " << max_gaussian_curvature << " = max" << "\n\n\n"; - - -} - -int main() -{ - const std::vector mesh_pathes_to_test = { - "meshes/icc_test/Sphere Quads + Tris.obj", - "meshes/icc_test/Sphere Quads + Tris 100352.obj", - "meshes/icc_test/Sphere Tris Ico.obj", - "meshes/icc_test/Sphere Tris Tet.obj", - "meshes/icc_test/Sphere Tris Oct.obj", - "meshes/icc_test/Sphere Quads.obj", - "meshes/icc_test/Sphere Quads Remesh.obj", - "meshes/icc_test/Sphere Ngons + Quads + Tris.obj", - "meshes/icc_test/Cube with fillet Quads.obj", - "meshes/cylinder.off", - "meshes/icc_test/Lantern Tris.obj", - "meshes/icc_test/Lantern Quads.obj" - }; - - const std::vector rel_expansion_radii = { 0, 0.1, 0.5, 1 }; - const std::vector rel_noise_magnitudes = { 0, 0.5, 0.9 }; - - for (auto mesh_path : mesh_pathes_to_test) { - for (EpicKernel::FT rel_expansion_radius : rel_expansion_radii) - for (EpicKernel::FT rel_noise_magnitude : rel_noise_magnitudes) - { - test(mesh_path, rel_expansion_radius, rel_noise_magnitude); - } - - std::cout << "_________________________________________________________________________________\n\n"; - } - -} diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp new file mode 100644 index 000000000000..a4f43470332e --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -0,0 +1,178 @@ +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#define ABS_ERROR 1e-6 + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; +typedef CGAL::Surface_mesh SMesh; +typedef CGAL::Polyhedron_3 Polyhedron; + +struct Average_test_info { + Epic_kernel::FT expansion_radius = -1; + Epic_kernel::FT mean_curvature_avg; + Epic_kernel::FT gaussian_curvature_avg; + Epic_kernel::FT principal_curvature_avg; + Epic_kernel::FT tolerance = 0.9; + + Average_test_info( + Epic_kernel::FT mean_curvature_avg, + Epic_kernel::FT gaussian_curvature_avg, + Epic_kernel::FT principal_curvature_avg, + Epic_kernel::FT expansion_radius = -1, + Epic_kernel::FT tolerance = 0.9 + ): + expansion_radius(expansion_radius), + mean_curvature_avg(mean_curvature_avg), + gaussian_curvature_avg(gaussian_curvature_avg), + principal_curvature_avg(principal_curvature_avg), + tolerance(tolerance) + { + } + +}; + +bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_kernel::FT tolerance) +{ + if (abs(expected) < ABS_ERROR && abs(result) < ABS_ERROR) + return true; // expected 0, got 0 + else if (abs(expected) < ABS_ERROR) + return false; // expected 0, got non-0 + + return std::min(result, expected) / std::max(result, expected) > tolerance; +} + +template +void test_average_curvatures(std::string mesh_path, Average_test_info test_info){ + PolygonMesh pmesh; + const std::string filename = CGAL::data_file_path(mesh_path); + + if (!CGAL::IO::read_polygon_mesh(filename, pmesh) || faces(pmesh).size() == 0) + { + std::cerr << "Invalid input file." << std::endl; + } + + typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + + boost::property_map>::type + mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh), + gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh); + boost::property_map>>::type + principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); + + // test_info.expansion_radius -> test if no radius is provided by user. + if (test_info.expansion_radius < 0) { + PMP::interpolated_corrected_mean_curvature(pmesh, mean_curvature_map); + PMP::interpolated_corrected_gaussian_curvature(pmesh, gaussian_curvature_map); + PMP::interpolated_corrected_principal_curvatures_and_directions(pmesh, principal_curvatures_and_directions_map); + } + else { + PMP::interpolated_corrected_mean_curvature( + pmesh, + mean_curvature_map, + CGAL::parameters::ball_radius(test_info.expansion_radius) + ); + + PMP::interpolated_corrected_gaussian_curvature( + pmesh, + gaussian_curvature_map, + CGAL::parameters::ball_radius(test_info.expansion_radius) + ); + + PMP::interpolated_corrected_principal_curvatures_and_directions( + pmesh, + principal_curvatures_and_directions_map, + CGAL::parameters::ball_radius(test_info.expansion_radius) + ); + } + + Epic_kernel::FT mean_curvature_avg = 0, gaussian_curvature_avg = 0, principal_curvature_avg = 0; + + for (vertex_descriptor v : vertices(pmesh)) + { + mean_curvature_avg += get(mean_curvature_map, v); + gaussian_curvature_avg += get(gaussian_curvature_map, v); + principal_curvature_avg += get(principal_curvatures_and_directions_map, v).min_curvature + + get(principal_curvatures_and_directions_map, v).max_curvature; + } + + mean_curvature_avg /= vertices(pmesh).size(); + gaussian_curvature_avg /= vertices(pmesh).size(); + principal_curvature_avg /= vertices(pmesh).size() * 2; + + // are average curvatures equal to expected? + assert(passes_comparison(mean_curvature_avg, test_info.mean_curvature_avg, test_info.tolerance)); + assert(passes_comparison(gaussian_curvature_avg, test_info.gaussian_curvature_avg, test_info.tolerance)); + assert(passes_comparison(principal_curvature_avg, test_info.principal_curvature_avg, test_info.tolerance)); + + PMP::interpolated_corrected_curvatures( + pmesh, + CGAL::parameters::ball_radius(test_info.expansion_radius) + .vertex_mean_curvature_map(mean_curvature_map) + .vertex_gaussian_curvature_map(gaussian_curvature_map) + .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map) + ); + + // are average curvatures computed from interpolated_corrected_curvatures() equal to average curvatures each computed on its own? + Epic_kernel::FT new_mean_curvature_avg = 0, new_gaussian_curvature_avg = 0, new_principal_curvature_avg = 0; + + for (vertex_descriptor v : vertices(pmesh)) + { + new_mean_curvature_avg += get(mean_curvature_map, v); + new_gaussian_curvature_avg += get(gaussian_curvature_map, v); + new_principal_curvature_avg += get(principal_curvatures_and_directions_map, v).min_curvature + + get(principal_curvatures_and_directions_map, v).max_curvature; + } + + new_mean_curvature_avg /= vertices(pmesh).size(); + new_gaussian_curvature_avg /= vertices(pmesh).size(); + new_principal_curvature_avg /= vertices(pmesh).size() * 2; + + assert(passes_comparison(mean_curvature_avg, new_mean_curvature_avg, 0.99)); + assert(passes_comparison(gaussian_curvature_avg, new_gaussian_curvature_avg, 0.99)); + assert(passes_comparison(principal_curvature_avg, new_principal_curvature_avg, 0.99)); +} + +int main() +{ + // testing on a simple sphere(r = 0.5), on both Polyhedron & SurfaceMesh: + // Expected: Mean Curvature = 2, Gaussian Curvature = 4, Principal Curvatures = 2 & 2 so 2 on avg. + test_average_curvatures("meshes/sphere.off", Average_test_info(2,4,2)); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2)); + + // Same mesh but with specified expansion radii of 0 and 0.25 (half radius of sphere) + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0)); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0.25)); + + // testing on a simple sphere(r = 10), on both Polyhedron & SurfaceMesh: + // Expected: Mean Curvature = 0.1, Gaussian Curvature = 0.01, Principal Curvatures = 0.1 & 0.1 so 0.1 on avg. + test_average_curvatures("meshes/sphere966.off", Average_test_info(0.1, 0.01, 0.1)); + test_average_curvatures("meshes/sphere966.off", Average_test_info(0.1, 0.01, 0.1)); + + // Same mesh but with specified expansion radii of 0 and 5 (half radius of sphere) + test_average_curvatures("meshes/sphere966.off", Average_test_info(0.1, 0.01, 0.1, 0)); + test_average_curvatures("meshes/sphere966.off", Average_test_info(0.1, 0.01, 0.1, 5)); + + // testing on a simple half cylinder(r = 1), on both Polyhedron & SurfaceMesh: + // Expected: Mean Curvature = 0.5, Gaussian Curvature = 0, Principal Curvatures = 0 & 1 so 0.5 on avg. + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5)); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5)); + + // Same mesh but with specified expansion radii of 0 and 0.5 (half radius of cylinder) + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0)); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5)); + + + +} From 2af64657636b1fadbacee3dac9e6b2108e1ffedf Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:39:14 +0200 Subject: [PATCH 092/943] trailing spaces --- .../test_interpolated_corrected_curvatures.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index a4f43470332e..163c9b8d334d 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -32,13 +32,13 @@ struct Average_test_info { Epic_kernel::FT principal_curvature_avg, Epic_kernel::FT expansion_radius = -1, Epic_kernel::FT tolerance = 0.9 - ): + ): expansion_radius(expansion_radius), mean_curvature_avg(mean_curvature_avg), gaussian_curvature_avg(gaussian_curvature_avg), principal_curvature_avg(principal_curvature_avg), tolerance(tolerance) - { + { } }; From f6855fef22c428a701719578097f4051ce8525e1 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:13:26 +0200 Subject: [PATCH 093/943] single vertex computation implemented single vertex curvature computation compared against the whole mesh computation on both cases of no radius and with radius on some vertices still need to add tests, documentation and an example file --- ...nterpolated_corrected_curvature_measures.h | 1374 ++++++++++------- .../internal/parameters_interface.h | 3 + 2 files changed, 830 insertions(+), 547 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 4a50a618e66f..94aaff9b8b52 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -79,675 +79,911 @@ struct Principal_curvatures_and_directions { namespace internal { - template - typename GT::FT average_edge_length(const PolygonMesh& pmesh) { - const std::size_t n = edges(pmesh).size(); - if (n == 0) - return 0; - - typename GT::FT avg_edge_length = 0; - for (auto e : edges(pmesh)) - avg_edge_length += edge_length(e, pmesh); - - avg_edge_length /= n; - return avg_edge_length; - } +template +typename GT::FT average_edge_length(const PolygonMesh& pmesh) { + const std::size_t n = edges(pmesh).size(); + if (n == 0) + return 0; + + typename GT::FT avg_edge_length = 0; + for (auto e : edges(pmesh)) + avg_edge_length += edge_length(e, pmesh); + + avg_edge_length /= n; + return avg_edge_length; +} - enum Curvature_measure_index { - MU0_AREA_MEASURE, ///< corrected area density - MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density - MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density - }; - - template - struct Vertex_measures { - typename GT::FT area_measure = 0; - typename GT::FT mean_curvature_measure = 0; - typename GT::FT gaussian_curvature_measure = 0; - std::array anisotropic_measure = { 0, 0, 0, - 0, 0, 0, - 0, 0, 0 }; - }; - - template - typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, - const std::vector& x) +enum Curvature_measure_index { + MU0_AREA_MEASURE, ///< corrected area density + MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density + MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density +}; + +template +struct Vertex_measures { + typename GT::FT area_measure = 0; + typename GT::FT mean_curvature_measure = 0; + typename GT::FT gaussian_curvature_measure = 0; + std::array anisotropic_measure = { 0, 0, 0, + 0, 0, 0, + 0, 0, 0 }; +}; + +template +typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, + const std::vector& x) +{ + const std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + typename GT::Construct_cross_product_vector_3 cross_product; + + // Triangle: use triangle formula + if (n == 3) + { + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + return 0.5 * um * cross_product(x[1] - x[0], x[2] - x[0]); + } + // Quad: use bilinear interpolation formula + else if (n == 4) { - const std::size_t n = x.size(); - CGAL_precondition(u.size() == n); - CGAL_precondition(n >= 3); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + return (1.0 / 36.0) * ( + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(x[1] - x[0], x[3] - x[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(x[1] - x[0], x[2] - x[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(x[2] - x[3], x[3] - x[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(x[2] - x[3], x[2] - x[1]) + ); + } + // N-gon: split into n triangles by polygon center and use triangle formula for each + else + { + typename GT::FT mu0 = 0; - typename GT::Construct_cross_product_vector_3 cross_product; + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; - // Triangle: use triangle formula - if (n == 3) - { - const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; - return 0.5 * um * cross_product(x[1] - x[0], x[2] - x[0]); - } - // Quad: use bilinear interpolation formula - else if (n == 4) + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); + + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - return (1.0 / 36.0) * ( - (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(x[1] - x[0], x[3] - x[0]) - + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(x[1] - x[0], x[2] - x[1]) - + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(x[2] - x[3], x[3] - x[0]) - + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(x[2] - x[3], x[2] - x[1]) - ); + mu0 += interpolated_corrected_area_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); } - // N-gon: split into n triangles by polygon center and use triangle formula for each - else - { - typename GT::FT mu0 = 0; + return mu0; + } +} - // getting center of points - typename GT::Vector_3 xc = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; +template +typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, + const std::vector& x) +{ + const std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); + typename GT::Construct_cross_product_vector_3 cross_product; - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu0 += interpolated_corrected_area_measure_face( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - } - return mu0; - } - } + // Triangle: use triangle formula + if (n == 3) + { + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; - template - typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, - const std::vector& x) + return 0.5 * um * (cross_product(u[2] - u[1], x[0]) + + cross_product(u[0] - u[2], x[1]) + + cross_product(u[1] - u[0], x[2])); + } + // Quad: use bilinear interpolation formula + else if (n == 4) { - const std::size_t n = x.size(); - CGAL_precondition(u.size() == n); - CGAL_precondition(n >= 3); + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 u13 = u[3] - u[1]; + const typename GT::Vector_3 x0_cross = cross_product(u13, x[0]); + const typename GT::Vector_3 x1_cross = -cross_product(u02, x[1]); + const typename GT::Vector_3 x3_cross = cross_product(u02, x[3]); + const typename GT::Vector_3 x2_cross = -cross_product(u13, x[2]); + + return (1.0 / 12.0) * ( + u[0] * (2 * x0_cross - cross_product((u[3] + u[2]), x[1]) + cross_product((u[1] + u[2]), x[3]) + x2_cross) + + u[1] * (cross_product((u[3] + u[2]), x[0]) + 2 * x1_cross + x3_cross - cross_product((u[0] + u[3]), x[2])) + + u[3] * (-cross_product((u[1] + u[2]), x[0]) + x1_cross + 2 * x3_cross + cross_product((u[0] + u[1]), x[2])) + + u[2] * (x0_cross + cross_product((u[0] + u[3]), x[1]) - cross_product((u[0] + u[1]), x[3]) + 2 * x2_cross) + ); + } + // N-gon: split into n triangles by polygon center and use triangle formula for each + else + { + typename GT::FT mu1 = 0; - typename GT::Construct_cross_product_vector_3 cross_product; + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; - // Triangle: use triangle formula - if (n == 3) - { - const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); - return 0.5 * um * (cross_product(u[2] - u[1], x[0]) - + cross_product(u[0] - u[2], x[1]) - + cross_product(u[1] - u[0], x[2])); - } - // Quad: use bilinear interpolation formula - else if (n == 4) + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - - const typename GT::Vector_3 u02 = u[2] - u[0]; - const typename GT::Vector_3 u13 = u[3] - u[1]; - const typename GT::Vector_3 x0_cross = cross_product(u13, x[0]); - const typename GT::Vector_3 x1_cross = -cross_product(u02, x[1]); - const typename GT::Vector_3 x3_cross = cross_product(u02, x[3]); - const typename GT::Vector_3 x2_cross = -cross_product(u13, x[2]); - - return (1.0 / 12.0) * ( - u[0] * (2 * x0_cross - cross_product((u[3] + u[2]), x[1]) + cross_product((u[1] + u[2]), x[3]) + x2_cross) - + u[1] * (cross_product((u[3] + u[2]), x[0]) + 2 * x1_cross + x3_cross - cross_product((u[0] + u[3]), x[2])) - + u[3] * (-cross_product((u[1] + u[2]), x[0]) + x1_cross + 2 * x3_cross + cross_product((u[0] + u[1]), x[2])) - + u[2] * (x0_cross + cross_product((u[0] + u[3]), x[1]) - cross_product((u[0] + u[1]), x[3]) + 2 * x2_cross) - ); + mu1 += interpolated_corrected_mean_curvature_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); } - // N-gon: split into n triangles by polygon center and use triangle formula for each - else - { - typename GT::FT mu1 = 0; + return mu1; + } +} - // getting center of points - typename GT::Vector_3 xc = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; +template +typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, + const std::vector& x = {}) +{ + const std::size_t n = u.size(); + CGAL_precondition(n >= 3); - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); + typename GT::Construct_cross_product_vector_3 cross_product; - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu1 += interpolated_corrected_mean_curvature_measure_face( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - } - return mu1; - } + // Triangle: use triangle formula + if (n == 3) + { + return 0.5 * u[0] * cross_product(u[1], u[2]); } - - template - typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, - const std::vector& x = {}) + // Quad: use bilinear interpolation formula + else if (n == 4) + { + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + return (1.0 / 36.0) * ( + (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) + + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) + + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) + + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) + ); + } + // N-gon: split into n triangles by polygon center and use triangle formula for each + else { - const std::size_t n = u.size(); - CGAL_precondition(n >= 3); + typename GT::FT mu2 = 0; - typename GT::Construct_cross_product_vector_3 cross_product; + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); - // Triangle: use triangle formula - if (n == 3) + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) { - return 0.5 * u[0] * cross_product(u[1], u[2]); + mu2 += interpolated_corrected_gaussian_curvature_measure_face( + std::vector {u[i], u[(i + 1) % n], uc} + ); } - // Quad: use bilinear interpolation formula - else if (n == 4) + return mu2; + } +} + +template +std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, + const std::vector& x) +{ + const std::size_t n = x.size(); + CGAL_precondition(u.size() == n); + CGAL_precondition(n >= 3); + + typename GT::Construct_cross_product_vector_3 cross_product; + std::array muXY{ 0 }; + + // Triangle: use triangle formula + if (n == 3) + { + const typename GT::Vector_3 u01 = u[1] - u[0]; + const typename GT::Vector_3 u02 = u[2] - u[0]; + const typename GT::Vector_3 x01 = x[1] - x[0]; + const typename GT::Vector_3 x02 = x[2] - x[0]; + const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + + for (std::size_t ix = 0; ix < 3; ix++) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - return (1.0 / 36.0) * ( - (4 * u[0] + 2 * u[1] + 2 * u[3] + u[2]) * cross_product(u[1] - u[0], u[3] - u[0]) - + (2 * u[0] + 4 * u[1] + u[3] + 2 * u[2]) * cross_product(u[1] - u[0], u[2] - u[1]) - + (2 * u[0] + u[1] + 4 * u[3] + 2 * u[2]) * cross_product(u[2] - u[3], u[3] - u[0]) - + (u[0] + 2 * u[1] + 2 * u[3] + 4 * u[2]) * cross_product(u[2] - u[3], u[2] - u[1]) - ); + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); + + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); } - // N-gon: split into n triangles by polygon center and use triangle formula for each - else + } + // Quad: use bilinear interpolation formula + else if (n == 4) + { + // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. + // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 + for (std::size_t ix = 0; ix < 3; ix++) { - typename GT::FT mu2 = 0; + typename GT::Vector_3 X; + if (ix == 0) + X = typename GT::Vector_3(1, 0, 0); + if (ix == 1) + X = typename GT::Vector_3(0, 1, 0); + if (ix == 2) + X = typename GT::Vector_3(0, 0, 1); + + const typename GT::Vector_3 u0xX = cross_product(u[0], X); + const typename GT::Vector_3 u1xX = cross_product(u[1], X); + const typename GT::Vector_3 u2xX = cross_product(u[2], X); + const typename GT::Vector_3 u3xX = cross_product(u[3], X); - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) - { - mu2 += interpolated_corrected_gaussian_curvature_measure_face( - std::vector {u[i], u[(i + 1) % n], uc} - ); - } - return mu2; + for (std::size_t iy = 0; iy < 3; iy++) + muXY[ix * 3 + iy] = (1.0 / 72.0) * ( + + u[0][iy] * (u0xX * (-x[0] - 11 * x[1] + 13 * x[3] - x[2]) + + u1xX * (-5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) + + u3xX * (x[0] - 7 * x[1] + 11 * x[3] - 5 * x[2]) + + u2xX * (-x[0] - 5 * x[1] + 7 * x[3] - x[2]) + ) + + u[1][iy] * (u0xX * (13 * x[0] - x[1] - 7 * x[3] - 5 * x[2]) + + u1xX * (17 * x[0] - 5 * x[1] - 5 * x[3] - 7 * x[2]) + + u3xX * (5 * x[0] + x[1] + x[3] - 7 * x[2]) + + u2xX * (7 * x[0] - x[1] + 5 * x[3] - 11 * x[2]) + ) + + u[2][iy] * (u0xX * (-11 * x[0] + 5 * x[1] - x[3] + 7 * x[2]) + + u1xX * (-7 * x[0] + x[1] + x[3] + 5 * x[2]) + + u3xX * (-7 * x[0] - 5 * x[1] - 5 * x[3] + 17 * x[2]) + + u2xX * (-5 * x[0] - 7 * x[1] - x[3] + 13 * x[2]) + ) + + u[3][iy] * (u0xX * (-x[0] + 7 * x[1] - 5 * x[3] - x[2]) + + u1xX * (-5 * x[0] + 11 * x[1] - 7 * x[3] + x[2]) + + u3xX * (x[0] + 11 * x[1] - 7 * x[3] - 5 * x[2]) + + u2xX * (-x[0] + 13 * x[1] - 11 * x[3] - x[2]) + ) + + ); } } - - template - std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, - const std::vector& x) + // N-gon: split into n triangles by polygon center and use triangle formula for each + else { - const std::size_t n = x.size(); - CGAL_precondition(u.size() == n); - CGAL_precondition(n >= 3); + // getting center of points + typename GT::Vector_3 xc = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xc /= n; - typename GT::Construct_cross_product_vector_3 cross_product; - std::array muXY{ 0 }; + // getting unit average normal of points + typename GT::Vector_3 uc = + std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); + uc /= sqrt(uc * uc); - // Triangle: use triangle formula - if (n == 3) + // summing each triangle's measure after triangulation by barycenter split. + for (std::size_t i = 0; i < n; i++) { - const typename GT::Vector_3 u01 = u[1] - u[0]; - const typename GT::Vector_3 u02 = u[2] - u[0]; - const typename GT::Vector_3 x01 = x[1] - x[0]; - const typename GT::Vector_3 x02 = x[2] - x[0]; - const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; + std::array muXY_curr_triangle = + interpolated_corrected_anisotropic_measure_face( + std::vector {u[i], u[(i + 1) % n], uc}, + std::vector {x[i], x[(i + 1) % n], xc} + ); for (std::size_t ix = 0; ix < 3; ix++) - { - typename GT::Vector_3 X; - if (ix == 0) - X = typename GT::Vector_3(1, 0, 0); - if (ix == 1) - X = typename GT::Vector_3(0, 1, 0); - if (ix == 2) - X = typename GT::Vector_3(0, 0, 1); - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); - } + muXY[ix * 3 + iy] += muXY_curr_triangle[ix * 3 + iy]; } - // Quad: use bilinear interpolation formula - else if (n == 4) + } + return muXY; +} + +//template +//typename GT::FT triangle_in_ball_ratio(const typename GT::Vector_3 x1, +// const typename GT::Vector_3 x2, +// const typename GT::Vector_3 x3, +// const typename GT::FT r, +// const typename GT::Vector_3 c, +// const std::size_t res = 3) +//{ +// const typename GT::FT R = r * r; +// const typename GT::FT acc = 1.0 / res; +// std::size_t samples_in = 0; +// for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) +// for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) +// { +// if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) +// samples_in++; +// } +// return samples_in / (typename GT::FT)(res * (res + 1) / 2); +//} + +template +typename GT::FT face_in_ball_ratio(const std::vector& x, + const typename GT::FT r, + const typename GT::Vector_3 c) +{ + const std::size_t n = x.size(); + + // getting center of points + typename GT::Vector_3 xm = + std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); + xm /= n; + + typename GT::FT d_min = (xm - c).squared_length(); + typename GT::FT d_max = d_min; + + for (const typename GT::Vector_3 xi : x) + { + const typename GT::FT d_sq = (xi - c).squared_length(); + d_max = (std::max)(d_sq, d_max); + d_min = (std::min)(d_sq, d_min); + } + + if (d_max <= r * r) return 1.0; + else if (r * r <= d_min) return 0.0; + + d_max = sqrt(d_max); + d_min = sqrt(d_min); + + return (r - d_min) / (d_max - d_min); +} + +template +Principal_curvatures_and_directions principal_curvatures_and_directions_from_anisotropic_measures( + const std::array anisotropic_measure, + const typename GT::FT v_mu0, + const typename GT::Vector_3 u_GT +) +{ + Eigen::Matrix v_muXY = Eigen::Matrix::Zero(); + + for (std::size_t ix = 0; ix < 3; ix++) + for (std::size_t iy = 0; iy < 3; iy++) + v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; + + Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); + const typename GT::FT K = 1000 * v_mu0; + + v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); + + Eigen::SelfAdjointEigenSolver> eigensolver; + + eigensolver.computeDirect(v_muXY); + + if (eigensolver.info() != Eigen::Success) + return Principal_curvatures_and_directions(); + + const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); + const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); + + const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); + const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); + + return Principal_curvatures_and_directions( + (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, + (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + min_eig_vec, + max_eig_vec + ); +} + +template +typename Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( + const PolygonMesh pmesh, + const typename boost::graph_traits::vertex_descriptor v, + const bool is_mean_curvature_selected, + const bool is_gaussian_curvature_selected, + const bool is_principal_curvatures_and_directions_selected, + const VPM vpm, + const VNM vnm +) +{ + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + typedef typename GT::FT FT; + + std::queue bfs_queue; + std::unordered_set bfs_visited; + + typename Vertex_measures vertex_measures; + + std::vector x; + std::vector u; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) { - // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. - // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - for (std::size_t ix = 0; ix < 3; ix++) + for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) { - typename GT::Vector_3 X; - if (ix == 0) - X = typename GT::Vector_3(1, 0, 0); - if (ix == 1) - X = typename GT::Vector_3(0, 1, 0); - if (ix == 2) - X = typename GT::Vector_3(0, 0, 1); - - const typename GT::Vector_3 u0xX = cross_product(u[0], X); - const typename GT::Vector_3 u1xX = cross_product(u[1], X); - const typename GT::Vector_3 u2xX = cross_product(u[2], X); - const typename GT::Vector_3 u3xX = cross_product(u[3], X); - - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] = (1.0 / 72.0) * ( - - u[0][iy] * (u0xX * (-x[0] - 11 * x[1] + 13 * x[3] - x[2]) - + u1xX * (-5 * x[0] - 7 * x[1] + 11 * x[3] + x[2]) - + u3xX * (x[0] - 7 * x[1] + 11 * x[3] - 5 * x[2]) - + u2xX * (-x[0] - 5 * x[1] + 7 * x[3] - x[2]) - ) - + u[1][iy] * (u0xX * (13 * x[0] - x[1] - 7 * x[3] - 5 * x[2]) - + u1xX * (17 * x[0] - 5 * x[1] - 5 * x[3] - 7 * x[2]) - + u3xX * (5 * x[0] + x[1] + x[3] - 7 * x[2]) - + u2xX * (7 * x[0] - x[1] + 5 * x[3] - 11 * x[2]) - ) - + u[2][iy] * (u0xX * (-11 * x[0] + 5 * x[1] - x[3] + 7 * x[2]) - + u1xX * (-7 * x[0] + x[1] + x[3] + 5 * x[2]) - + u3xX * (-7 * x[0] - 5 * x[1] - 5 * x[3] + 17 * x[2]) - + u2xX * (-5 * x[0] - 7 * x[1] - x[3] + 13 * x[2]) - ) - + u[3][iy] * (u0xX * (-x[0] + 7 * x[1] - 5 * x[3] - x[2]) - + u1xX * (-5 * x[0] + 11 * x[1] - 7 * x[3] + x[2]) - + u3xX * (x[0] + 11 * x[1] - 7 * x[3] - 5 * x[2]) - + u2xX * (-x[0] + 13 * x[1] - 11 * x[3] - x[2]) - ) - - ); + Point_3 pi = get(vpm, vi); + Vector_3 ui = get(vnm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + u.push_back(ui); } - } - // N-gon: split into n triangles by polygon center and use triangle formula for each - else - { - // getting center of points - typename GT::Vector_3 xc = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; - - // getting unit average normal of points - typename GT::Vector_3 uc = - std::accumulate(u.begin(), u.end(), typename GT::Vector_3(0, 0, 0)); - uc /= sqrt(uc * uc); - - // summing each triangle's measure after triangulation by barycenter split. - for (std::size_t i = 0; i < n; i++) + + vertex_measures.area_measure += interpolated_corrected_area_measure_face(u, x); + + if (is_mean_curvature_selected) + vertex_measures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); + + if (is_gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); + + if (is_principal_curvatures_and_directions_selected) { - std::array muXY_curr_triangle = - interpolated_corrected_anisotropic_measure_face( - std::vector {u[i], u[(i + 1) % n], uc}, - std::vector {x[i], x[(i + 1) % n], xc} - ); - - for (std::size_t ix = 0; ix < 3; ix++) - for (std::size_t iy = 0; iy < 3; iy++) - muXY[ix * 3 + iy] += muXY_curr_triangle[ix * 3 + iy]; + const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += face_anisotropic_measure[i]; } } - return muXY; + + x.clear(); + u.clear(); } + return vertex_measures; +} - //template - //typename GT::FT triangle_in_ball_ratio(const typename GT::Vector_3 x1, - // const typename GT::Vector_3 x2, - // const typename GT::Vector_3 x3, - // const typename GT::FT r, - // const typename GT::Vector_3 c, - // const std::size_t res = 3) - //{ - // const typename GT::FT R = r * r; - // const typename GT::FT acc = 1.0 / res; - // std::size_t samples_in = 0; - // for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) - // for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) - // { - // if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) - // samples_in++; - // } - // return samples_in / (typename GT::FT)(res * (res + 1) / 2); - //} - - template - typename GT::FT face_in_ball_ratio(const std::vector& x, - const typename GT::FT r, - const typename GT::Vector_3 c) - { - const std::size_t n = x.size(); - // getting center of points - typename GT::Vector_3 xm = - std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xm /= n; +template +typename Vertex_measures interpolated_corrected_measures_one_vertex( + const PolygonMesh pmesh, + const typename boost::graph_traits::vertex_descriptor v, + const typename GT::FT radius, + const bool is_mean_curvature_selected, + const bool is_gaussian_curvature_selected, + const bool is_principal_curvatures_and_directions_selected, + const VPM vpm, + const VNM vnm +) +{ + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + typedef typename GT::FT FT; + + std::queue bfs_queue; + std::unordered_set bfs_visited; - typename GT::FT d_min = (xm - c).squared_length(); - typename GT::FT d_max = d_min; + typename Vertex_measures vertex_measures; - for (const typename GT::Vector_3 xi : x) + typename Point_3 vp = get(vpm, v); + typename Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) { - const typename GT::FT d_sq = (xi - c).squared_length(); - d_max = (std::max)(d_sq, d_max); - d_min = (std::min)(d_sq, d_min); + bfs_queue.push(f); + bfs_visited.insert(f); } + } + std::vector x; + std::vector u; + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); - if (d_max <= r * r) return 1.0; - else if (r * r <= d_min) return 0.0; - - d_max = sqrt(d_max); - d_min = sqrt(d_min); + // looping over vertices in face to get point coordinates - return (r - d_min) / (d_max - d_min); - } + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + Vector_3 ui = get(vnm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + u.push_back(ui); + } - template - Principal_curvatures_and_directions principal_curvatures_and_directions_from_anisotropic_measures( - const std::array anisotropic_measure, - const typename GT::FT v_mu0, - const typename GT::Vector_3 u_GT - ) - { - Eigen::Matrix v_muXY = Eigen::Matrix::Zero(); + const FT f_ratio = face_in_ball_ratio(x, radius, c); - for (std::size_t ix = 0; ix < 3; ix++) - for (std::size_t iy = 0; iy < 3; iy++) - v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; + if (f_ratio != 0.0) + { + vertex_measures.area_measure += f_ratio * interpolated_corrected_area_measure_face(u, x); - Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); - const typename GT::FT K = 1000 * v_mu0; + if (is_mean_curvature_selected) + vertex_measures.mean_curvature_measure += f_ratio * interpolated_corrected_mean_curvature_measure_face(u, x); - v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); + if (is_gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += f_ratio * interpolated_corrected_gaussian_curvature_measure_face(u, x); - Eigen::SelfAdjointEigenSolver> eigensolver; + if (is_principal_curvatures_and_directions_selected) + { + const std::array face_anisotropic_measure = interpolated_corrected_anisotropic_measure_face(u, x); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } - eigensolver.computeDirect(v_muXY); + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) + { + bfs_queue.push(fj); + bfs_visited.insert(fj); + } + } + } - if (eigensolver.info() != Eigen::Success) - return Principal_curvatures_and_directions(); + x.clear(); + u.clear(); + } + return vertex_measures; +} - const Eigen::Matrix eig_vals = eigensolver.eigenvalues(); - const Eigen::Matrix eig_vecs = eigensolver.eigenvectors(); +template + void interpolated_corrected_curvatures_one_vertex( + const PolygonMesh pmesh, + const typename boost::graph_traits::vertex_descriptor v, + NamedParameters& np = parameters::default_values() + ) +{ + typedef typename GetGeomTraits::type GT; + typedef typename GetVertexPointMap::const_type Vertex_position_map; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + Vertex_position_map vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); + + Vertex_normal_map vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); + + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); + + typename GT::FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + if (radius == 0) + radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + radius = radius; + + typename GT::FT* vertex_mean_curvature = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature), nullptr); + typename GT::FT* vertex_gaussian_curvature = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature), nullptr); + typename Principal_curvatures_and_directions* vertex_principal_curvatures_and_directions = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions), nullptr); + + const bool is_mean_curvature_selected = (vertex_mean_curvature != nullptr); + const bool is_gaussian_curvature_selected = (vertex_gaussian_curvature != nullptr); + const bool is_principal_curvatures_and_directions_selected = (vertex_principal_curvatures_and_directions != nullptr); + + std::cout << is_mean_curvature_selected << is_gaussian_curvature_selected << is_principal_curvatures_and_directions_selected << std::endl; + + Vertex_measures vertex_measures; + + if (radius < 0) + vertex_measures = interpolated_corrected_measures_one_vertex_no_radius( + pmesh, + v, + is_mean_curvature_selected, + is_gaussian_curvature_selected, + is_principal_curvatures_and_directions_selected, + vpm, + vnm + ); + else + vertex_measures = interpolated_corrected_measures_one_vertex( + pmesh, + v, + radius, + is_mean_curvature_selected, + is_gaussian_curvature_selected, + is_principal_curvatures_and_directions_selected, + vpm, + vnm + ); + + + if (is_mean_curvature_selected) { + *vertex_mean_curvature = vertex_measures.area_measure != 0 ? + 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure : 0; + } - const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); - const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); + if (is_gaussian_curvature_selected) { + *vertex_gaussian_curvature = vertex_measures.area_measure != 0 ? + vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure : 0; + } - return Principal_curvatures_and_directions( - (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, - (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, - min_eig_vec, - max_eig_vec + if (is_principal_curvatures_and_directions_selected) { + const GT::Vector_3 v_normal = get(vnm, v); + const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( + vertex_measures.anisotropic_measure, + vertex_measures.area_measure, + v_normal ); + *vertex_principal_curvatures_and_directions = principal_curvatures_and_directions; } +} - template - class Interpolated_corrected_curvatures_computer - { - typedef typename GetGeomTraits::type GT; - - typedef typename GT::FT FT; - typedef typename GT::Point_3 Point_3; - typedef typename GT::Vector_3 Vector_3; - - typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; - typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; - typedef typename boost::graph_traits::face_descriptor Face_descriptor; - typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; - - typedef typename GetVertexPointMap::const_type Vertex_position_map; - - typedef dynamic_vertex_property_t Vector_map_tag; - typedef typename boost::property_map::const_type Default_vector_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; - - typedef Constant_property_map Default_scalar_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_mean_curvature_map; - - typedef typename internal_np::Lookup_named_param_def::type Vertex_gaussian_curvature_map; - - typedef Constant_property_map> Default_principal_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvatures_and_directions_map; - - typedef typename boost::property_map>::const_type Face_scalar_measure_map; - typedef typename boost::property_map>>::const_type Face_anisotropic_measure_map; - - private: - const PolygonMesh& pmesh; - Vertex_position_map vpm; - Vertex_normal_map vnm; - FT ball_radius; - - bool is_mean_curvature_selected; - bool is_gaussian_curvature_selected; - bool is_principal_curvatures_and_directions_selected; - - Vertex_mean_curvature_map mean_curvature_map; - Vertex_gaussian_curvature_map gaussian_curvature_map; - Vertex_principal_curvatures_and_directions_map principal_curvatures_and_directions_map; - - Face_scalar_measure_map mu0_map, mu1_map, mu2_map; - Face_anisotropic_measure_map muXY_map; - - void set_property_maps() { - mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); - mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); - mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); - muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); - } +template +class Interpolated_corrected_curvatures_computer +{ + typedef typename GetGeomTraits::type GT; + + typedef typename GT::FT FT; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Vector_3 Vector_3; + + typedef typename boost::graph_traits::halfedge_descriptor Halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor Edge_descriptor; + typedef typename boost::graph_traits::face_descriptor Face_descriptor; + typedef typename boost::graph_traits::vertex_descriptor Vertex_descriptor; + + typedef typename GetVertexPointMap::const_type Vertex_position_map; + + typedef dynamic_vertex_property_t Vector_map_tag; + typedef typename boost::property_map::const_type Default_vector_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_normal_map; + + typedef Constant_property_map Default_scalar_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_mean_curvature_map; + + typedef typename internal_np::Lookup_named_param_def::type Vertex_gaussian_curvature_map; + + typedef Constant_property_map> Default_principal_map; + typedef typename internal_np::Lookup_named_param_def::type Vertex_principal_curvatures_and_directions_map; + + typedef typename boost::property_map>::const_type Face_scalar_measure_map; + typedef typename boost::property_map>>::const_type Face_anisotropic_measure_map; + +private: + const PolygonMesh& pmesh; + Vertex_position_map vpm; + Vertex_normal_map vnm; + FT ball_radius; + + bool is_mean_curvature_selected; + bool is_gaussian_curvature_selected; + bool is_principal_curvatures_and_directions_selected; + + Vertex_mean_curvature_map mean_curvature_map; + Vertex_gaussian_curvature_map gaussian_curvature_map; + Vertex_principal_curvatures_and_directions_map principal_curvatures_and_directions_map; + + Face_scalar_measure_map mu0_map, mu1_map, mu2_map; + Face_anisotropic_measure_map muXY_map; + + void set_property_maps() { + mu0_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu1_map = get(CGAL::dynamic_face_property_t(), pmesh); + mu2_map = get(CGAL::dynamic_face_property_t(), pmesh); + muXY_map = get(CGAL::dynamic_face_property_t>(), pmesh); - void set_named_params(const NamedParameters& np) - { - using parameters::choose_parameter; - using parameters::get_parameter; - using parameters::is_default_parameter; + } - vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), - get_const_property_map(CGAL::vertex_point, pmesh)); + void set_named_params(const NamedParameters& np) + { + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; - vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), - get(Vector_map_tag(), pmesh)); + vpm = choose_parameter(get_parameter(np, CGAL::vertex_point), + get_const_property_map(CGAL::vertex_point, pmesh)); - if (is_default_parameter::value) - compute_vertex_normals(pmesh, vnm, np); + vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), + get(Vector_map_tag(), pmesh)); - const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + if (is_default_parameter::value) + compute_vertex_normals(pmesh, vnm, np); - is_mean_curvature_selected = !is_default_parameter::value; - is_gaussian_curvature_selected = !is_default_parameter::value; - is_principal_curvatures_and_directions_selected = !is_default_parameter::value; + const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); - mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); - gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); - principal_curvatures_and_directions_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions_map), Default_principal_map()); + is_mean_curvature_selected = !is_default_parameter::value; + is_gaussian_curvature_selected = !is_default_parameter::value; + is_principal_curvatures_and_directions_selected = !is_default_parameter::value; - set_ball_radius(radius); - } + mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); + gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); + principal_curvatures_and_directions_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions_map), Default_principal_map()); - void set_ball_radius(const FT radius) { - if (radius == 0) - ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; - else - ball_radius = radius; - } + set_ball_radius(radius); + } - public: + void set_ball_radius(const FT radius) { + if (radius == 0) + ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + else + ball_radius = radius; + } - Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values() - ) : - pmesh(pmesh) - { - set_named_params(np); +public: - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvatures_and_directions_selected) - { - set_property_maps(); + Interpolated_corrected_curvatures_computer(const PolygonMesh& pmesh, + const NamedParameters& np = parameters::default_values() + ) : + pmesh(pmesh) + { + set_named_params(np); - compute_selected_curvatures(); - } + if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvatures_and_directions_selected) + { + set_property_maps(); + + compute_selected_curvatures(); } + } - private: +private: - void interpolated_corrected_selected_measures_all_faces() - { - std::vector x; - std::vector u; + void interpolated_corrected_selected_measures_all_faces() + { + std::vector x; + std::vector u; - for (Face_descriptor f : faces(pmesh)) + for (Face_descriptor f : faces(pmesh)) + { + for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) { - for (Vertex_descriptor v : vertices_around_face(halfedge(f, pmesh), pmesh)) - { - Point_3 p = get(vpm, v); - x.push_back(Vector_3(p.x(), p.y(), p.z())); - u.push_back(get(vnm, v)); - } - put(mu0_map, f, interpolated_corrected_area_measure_face(u, x)); + Point_3 p = get(vpm, v); + x.push_back(Vector_3(p.x(), p.y(), p.z())); + u.push_back(get(vnm, v)); + } + put(mu0_map, f, interpolated_corrected_area_measure_face(u, x)); - if (is_mean_curvature_selected) - put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); + if (is_mean_curvature_selected) + put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); - if (is_gaussian_curvature_selected) - put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u)); + if (is_gaussian_curvature_selected) + put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u)); - if (is_principal_curvatures_and_directions_selected) - put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); + if (is_principal_curvatures_and_directions_selected) + put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); - x.clear(); - u.clear(); - } + x.clear(); + u.clear(); } + } - Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) - { - Vertex_measures vertex_measures; + Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) + { + Vertex_measures vertex_measures; - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f == boost::graph_traits::null_face()) - continue; + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f == boost::graph_traits::null_face()) + continue; - vertex_measures.area_measure += get(mu0_map, f); + vertex_measures.area_measure += get(mu0_map, f); - if (is_mean_curvature_selected) - vertex_measures.mean_curvature_measure += get(mu1_map, f); + if (is_mean_curvature_selected) + vertex_measures.mean_curvature_measure += get(mu1_map, f); - if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += get(mu2_map, f); + if (is_gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += get(mu2_map, f); - if (is_principal_curvatures_and_directions_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, f); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_measures.anisotropic_measure[i] += face_anisotropic_measure[i]; - } + if (is_principal_curvatures_and_directions_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, f); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += face_anisotropic_measure[i]; } - - return vertex_measures; } - Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) - { - std::queue bfs_queue; - std::unordered_set bfs_visited; + return vertex_measures; + } - Point_3 vp = get(vpm, v); - Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) + { + std::queue bfs_queue; + std::unordered_set bfs_visited; - Vertex_measures vertex_measures; + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); - for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { - if (f != boost::graph_traits::null_face()) - { - bfs_queue.push(f); - bfs_visited.insert(f); - } + Vertex_measures vertex_measures; + + for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { + if (f != boost::graph_traits::null_face()) + { + bfs_queue.push(f); + bfs_visited.insert(f); } - while (!bfs_queue.empty()) { - Face_descriptor fi = bfs_queue.front(); - bfs_queue.pop(); + } + while (!bfs_queue.empty()) { + Face_descriptor fi = bfs_queue.front(); + bfs_queue.pop(); - // looping over vertices in face to get point coordinates - std::vector x; - for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) - { - Point_3 pi = get(vpm, vi); - x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); - } + // looping over vertices in face to get point coordinates + std::vector x; + for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) + { + Point_3 pi = get(vpm, vi); + x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); + } - const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); + const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); - if (f_ratio != 0.0) - { - vertex_measures.area_measure += f_ratio * get(mu0_map, fi); + if (f_ratio != 0.0) + { + vertex_measures.area_measure += f_ratio * get(mu0_map, fi); - if (is_mean_curvature_selected) - vertex_measures.mean_curvature_measure += f_ratio * get(mu1_map, fi); + if (is_mean_curvature_selected) + vertex_measures.mean_curvature_measure += f_ratio * get(mu1_map, fi); - if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); + if (is_gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); - if (is_principal_curvatures_and_directions_selected) - { - const std::array face_anisotropic_measure = get(muXY_map, fi); - for (std::size_t i = 0; i < 3 * 3; i++) - vertex_measures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; - } + if (is_principal_curvatures_and_directions_selected) + { + const std::array face_anisotropic_measure = get(muXY_map, fi); + for (std::size_t i = 0; i < 3 * 3; i++) + vertex_measures.anisotropic_measure[i] += f_ratio * face_anisotropic_measure[i]; + } - for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + for (Face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh)) + { + if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) { - if (bfs_visited.find(fj) == bfs_visited.end() && fj != boost::graph_traits::null_face()) - { - bfs_queue.push(fj); - bfs_visited.insert(fj); - } + bfs_queue.push(fj); + bfs_visited.insert(fj); } } } - return vertex_measures; } + return vertex_measures; + } - void compute_selected_curvatures() { - interpolated_corrected_selected_measures_all_faces(); + void compute_selected_curvatures() { + interpolated_corrected_selected_measures_all_faces(); - for (Vertex_descriptor v : vertices(pmesh)) - { - Vertex_measures vertex_measures = (ball_radius < 0) ? - expand_interpolated_corrected_measure_vertex_no_radius(v) : - expand_interpolated_corrected_measure_vertex(v); - - if (is_mean_curvature_selected) { - vertex_measures.area_measure != 0 ? - put(mean_curvature_map, v, 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure) : - put(mean_curvature_map, v, 0); - } + for (Vertex_descriptor v : vertices(pmesh)) + { + Vertex_measures vertex_measures = (ball_radius < 0) ? + expand_interpolated_corrected_measure_vertex_no_radius(v) : + expand_interpolated_corrected_measure_vertex(v); + + if (is_mean_curvature_selected) { + vertex_measures.area_measure != 0 ? + put(mean_curvature_map, v, 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure) : + put(mean_curvature_map, v, 0); + } - if (is_gaussian_curvature_selected) { - vertex_measures.area_measure != 0 ? - put(gaussian_curvature_map, v, vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure) : - put(gaussian_curvature_map, v, 0); - } + if (is_gaussian_curvature_selected) { + vertex_measures.area_measure != 0 ? + put(gaussian_curvature_map, v, vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure) : + put(gaussian_curvature_map, v, 0); + } - if (is_principal_curvatures_and_directions_selected) { - const Vector_3 v_normal = get(vnm, v); - const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( - vertex_measures.anisotropic_measure, - vertex_measures.area_measure, - v_normal - ); - put(principal_curvatures_and_directions_map, v, principal_curvatures_and_directions); - } + if (is_principal_curvatures_and_directions_selected) { + const Vector_3 v_normal = get(vnm, v); + const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( + vertex_measures.anisotropic_measure, + vertex_measures.area_measure, + v_normal + ); + put(principal_curvatures_and_directions_map, v, principal_curvatures_and_directions); } } - }; + } +}; } // namespace internal @@ -1030,6 +1266,50 @@ template(pmesh, np); } +template + typename GT::FT interpolated_corrected_mean_curvature_at_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) +{ + // use interpolated_corrected_curvatures_at_vertex to compute mean curvature + typename GT::FT* mean_curvature = new typename GT::FT(); + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_mean_curvature(mean_curvature)); + return *mean_curvature; +} + +template + typename GT::FT interpolated_corrected_gaussian_curvature_at_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) +{ + // use interpolated_corrected_curvatures_at_vertex to compute gaussian curvature + typename GT::FT* gc = new typename GT::FT(); + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_gaussian_curvature(gc)); + return *gc; +} + +template + Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_at_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) +{ + // use interpolated_corrected_curvatures_at_vertex to compute principal curvatures + Principal_curvatures_and_directions* pcd = new Principal_curvatures_and_directions(); + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(pcd)); + return *pcd; +} + +template + void interpolated_corrected_curvatures_at_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) +{ + internal::interpolated_corrected_curvatures_one_vertex(pmesh, v, np); +} } // namespace Polygon_mesh_processing } // namespace CGAL diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 21b8227e86c9..0d5469775614 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -90,6 +90,9 @@ CGAL_add_named_parameter(nb_points_per_distance_unit_t, nb_points_per_distance_u CGAL_add_named_parameter(vertex_mean_curvature_map_t, vertex_mean_curvature_map, vertex_mean_curvature_map) CGAL_add_named_parameter(vertex_gaussian_curvature_map_t, vertex_gaussian_curvature_map, vertex_gaussian_curvature_map) CGAL_add_named_parameter(vertex_principal_curvatures_and_directions_map_t, vertex_principal_curvatures_and_directions_map, vertex_principal_curvatures_and_directions_map) +CGAL_add_named_parameter(vertex_mean_curvature_t, vertex_mean_curvature, vertex_mean_curvature) +CGAL_add_named_parameter(vertex_gaussian_curvature_t, vertex_gaussian_curvature, vertex_gaussian_curvature) +CGAL_add_named_parameter(vertex_principal_curvatures_and_directions_t, vertex_principal_curvatures_and_directions, vertex_principal_curvatures_and_directions) CGAL_add_named_parameter(ball_radius_t, ball_radius, ball_radius) CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_orientation) CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides) From 73bde6daa0c57675f5eccd157fab07f6b0370d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 20 Jan 2023 16:02:25 +0100 Subject: [PATCH 094/943] Eigen is needed --- .../test/Polygon_mesh_processing/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index c1aedddedf4e..c446a7395dee 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -1,4 +1,4 @@ -# Created by the script cgal_create_CMakeLists +0# Created by the script cgal_create_CMakeLists # This is the CMake script for compiling a set of CGAL applications. cmake_minimum_required(VERSION 3.1...3.23) @@ -44,6 +44,8 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(test_shape_smoothing PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("delaunay_remeshing_test.cpp") target_link_libraries(delaunay_remeshing_test PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("test_interpolated_corrected_curvatures.cpp") + target_link_libraries(test_interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) endif() find_package(OpenMesh QUIET) @@ -69,7 +71,6 @@ create_single_source_cgal_program("self_intersection_polyhedron_test.cpp") create_single_source_cgal_program("self_intersection_surface_mesh_test.cpp") create_single_source_cgal_program("pmp_do_intersect_test.cpp") create_single_source_cgal_program("test_is_polygon_soup_a_polygon_mesh.cpp") -create_single_source_cgal_program("test_interpolated_corrected_curvatures.cpp") create_single_source_cgal_program("test_stitching.cpp") create_single_source_cgal_program("remeshing_test.cpp") create_single_source_cgal_program("remeshing_with_isolated_constraints_test.cpp" ) From 8af5c620fafb7c6771357f91f05fb9000f748a90 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 23 Jan 2023 13:49:34 +0200 Subject: [PATCH 095/943] reference documentation + minor fix + added documentation for the at_vertext curvature functions - removed dynamically allocated pointers for storing the curvature on vertex --- .../PackageDescription.txt | 4 + ...nterpolated_corrected_curvature_measures.h | 761 ++++++++++++------ 2 files changed, 504 insertions(+), 261 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index f62b2816cf7f..f6696dc1ba8c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -205,6 +205,10 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_at_vertex()` - `CGAL::Polygon_mesh_processing::Principal_curvatures_and_directions` \cgalCRPSection{Normal Computation Functions} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 94aaff9b8b52..cdd25aefc0e5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -36,11 +36,11 @@ namespace CGAL { namespace Polygon_mesh_processing { /** -* \ingroup PMP_corrected_curvatures_grp -* -* \brief a struct for storing principal curvatures and directions. -* -* @tparam GT is the geometric traits class. + * \ingroup PMP_corrected_curvatures_grp + * + * \brief a struct for storing principal curvatures and directions. + * + * @tparam GT is the geometric traits class. */ template struct Principal_curvatures_and_directions { @@ -665,11 +665,11 @@ template vertex_measures; if (radius < 0) + { + std::cout << -1; vertex_measures = interpolated_corrected_measures_one_vertex_no_radius( pmesh, v, @@ -679,18 +679,21 @@ template( - pmesh, - v, - radius, - is_mean_curvature_selected, - is_gaussian_curvature_selected, - is_principal_curvatures_and_directions_selected, - vpm, - vnm - ); - + pmesh, + v, + radius, + is_mean_curvature_selected, + is_gaussian_curvature_selected, + is_principal_curvatures_and_directions_selected, + vpm, + vnm + ); + } if (is_mean_curvature_selected) { *vertex_mean_curvature = vertex_measures.area_measure != 0 ? @@ -988,58 +991,58 @@ class Interpolated_corrected_curvatures_computer } // namespace internal /** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected mean curvature across the mesh -* and stores it in a vertex property map `vcm`. -* -* @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam VertexCurvatureMap model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed mean curvatures are stored. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures -* by summing measures of faces inside a ball of this radius centered at the -* vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_gaussian_curvature()` -* @see `interpolated_corrected_principal_curvatures_and_directions()` -* @see `interpolated_corrected_curvatures()` + * \ingroup PMP_corrected_curvatures_grp + * + * Computes the interpolated corrected mean curvature across the mesh + * and stores it in a vertex property map `vcm`. + * + * @tparam PolygonMesh a model of `FaceListGraph`. + * @tparam VertexCurvatureMap model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". + * + * @param pmesh the polygon mesh. + * @param vcm the vertex property map in which the computed mean curvatures are stored. + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". + * + * \cgalNamedParamsBegin + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @see `interpolated_corrected_gaussian_curvature()` + * @see `interpolated_corrected_principal_curvatures_and_directions()` + * @see `interpolated_corrected_curvatures()` */ template::%Vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed gaussian curvatures are stored. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures -* by summing measures of faces inside a ball of this radius centered at the -* vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_mean_curvature()` -* @see `interpolated_corrected_principal_curvatures_and_directions()` -* @see `interpolated_corrected_curvatures()` + * \ingroup PMP_corrected_curvatures_grp + * + * Computes the interpolated corrected gaussian curvature across the mesh + * and stores it in a vertex property map `vcm`. + * + * @tparam PolygonMesh a model of `FaceListGraph`. + * @tparam VertexCurvatureMap model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". + * + * @param pmesh the polygon mesh. + * @param vcm the vertex property map in which the computed gaussian curvatures are stored. + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". + * + * \cgalNamedParamsBegin + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @see `interpolated_corrected_mean_curvature()` + * @see `interpolated_corrected_principal_curvatures_and_directions()` + * @see `interpolated_corrected_curvatures()` */ template @@ -1115,59 +1118,59 @@ template::%Vertex_descriptor` as key type and -* `std::tuple, Eigen::Vector>` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed principal curvatures are stored. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures -* by summing measures of faces inside a ball of this radius centered at the -* vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_mean_curvature()` -* @see `interpolated_corrected_gaussian_curvature()` -* @see `interpolated_corrected_curvatures()` + * \ingroup PMP_corrected_curvatures_grp + * + * Computes the interpolated corrected principal curvatures across the mesh + * and stores it in a vertex property map `vcm`. + * + * @tparam PolygonMesh a model of `FaceListGraph`. + * @tparam VertexCurvatureMap model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` as key type and + * `%Principal_curvatures_and_directions` as value type. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". + * + * @param pmesh the polygon mesh. + * @param vcm the vertex property map in which the computed principal curvatures are stored. + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * + * \cgalNamedParamsBegin + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @see `interpolated_corrected_mean_curvature()` + * @see `interpolated_corrected_gaussian_curvature()` + * @see `interpolated_corrected_curvatures()` */ template @@ -1179,84 +1182,84 @@ template::%Vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_mean_curvature_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} -* \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_gaussian_curvature_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} -* \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} -* \cgalParamNEnd -* -* -* \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} -* \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Principal_curvatures_and_directions` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} -* \cgalParamNEnd -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures -* by summing measures of faces inside a ball of this radius centered at the -* vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball.} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of -* measures on faces around the vertex} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_mean_curvature()` -* @see `interpolated_corrected_gaussian_curvature()` -* @see `interpolated_corrected_principal_curvatures_and_directions()` + * \ingroup PMP_corrected_curvatures_grp + * + * Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. + * By providing mean, gaussian and/or principal curvature property maps as named parameters, the user + * can choose which curvatures to compute. + * + * @tparam PolygonMesh a model of `FaceListGraph`. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". + * + * @param pmesh the polygon mesh. + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * + * \cgalNamedParamsBegin + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_mean_curvature_map} + * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} + * \cgalParamType{a class model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%FT` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_gaussian_curvature_map} + * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} + * \cgalParamType{a class model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%FT` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} + * \cgalParamNEnd + * + * + * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} + * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} + * \cgalParamType{a class model of `WritablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Principal_curvatures_and_directions` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball.} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @see `interpolated_corrected_mean_curvature()` + * @see `interpolated_corrected_gaussian_curvature()` + * @see `interpolated_corrected_principal_curvatures_and_directions()` */ template @@ -1266,6 +1269,60 @@ template(pmesh, np); } +/** + * \ingroup PMP_corrected_curvatures_grp + * computes the interpolated corrected mean curvature at a vertex of a triangle mesh. + * + * @tparam GT a geometric traits class that provides the nested type `FT`, + * @tparam PolygonMesh a model of `FaceListGraph` + * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * + * @param pmesh the polygon mesh + * @param v the vertex of `pmesh` to compute the mean curvature at + * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * + * \cgalNamedParamsBegin + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @return the interpolated corrected mean curvature at the vertex `v` + * + * @see `interpolated_corrected_mean_curvature()` + * @see `interpolated_corrected_gaussian_curvature_at_vertex()` + * @see `interpolated_corrected_principal_curvatures_and_directions_at_vertex()` + * @see `interpolated_corrected_curvatures_at_vertex()` +*/ + template typename GT::FT interpolated_corrected_mean_curvature_at_vertex(const PolygonMesh& pmesh, @@ -1273,11 +1330,65 @@ template::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @return the interpolated corrected Gaussian curvature at the vertex `v` + * + * @see `interpolated_corrected_gaussian_curvature()` + * @see `interpolated_corrected_mean_curvature_at_vertex()` + * @see `interpolated_corrected_principal_curvatures_and_directions_at_vertex()` + * @see `interpolated_corrected_curvatures_at_vertex()` +*/ + template typename GT::FT interpolated_corrected_gaussian_curvature_at_vertex(const PolygonMesh& pmesh, @@ -1285,11 +1396,64 @@ template::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * \cgalNamedParamsEnd + * + * @return the interpolated corrected principal curvatures and directions at the vertex `v` + * + * @see `interpolated_corrected_principal_curvatures_and_directions()` + * @see `interpolated_corrected_mean_curvature_at_vertex()` + * @see `interpolated_corrected_gaussian_curvature_at_vertex()` + * @see `interpolated_corrected_curvatures_at_vertex()` +*/ + template Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_at_vertex(const PolygonMesh& pmesh, @@ -1297,11 +1461,86 @@ template* pcd = new Principal_curvatures_and_directions(); - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(pcd)); - return *pcd; + Principal_curvatures_and_directions pcd; + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); + return pcd; } +/** + * \ingroup PMP_corrected_curvatures_grp + * Computes the interpolated corrected curvatures at a certain vertex, based on the provided pointers. + * By providing mean, gaussian and/or principal curvature pointers as named parameters, the user + * can choose which curvatures to compute. + * The pointers are used to store the computed curvatures. + * The user is responsible for the memory management of the pointers. + * + * @tparam PolygonMesh a model of `FaceListGraph` + * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * + * @param pmesh the polygon mesh + * @param v the vertex of `pmesh` to compute the curvatures at + * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * + * \cgalNamedParamsBegin + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_normal_map} + * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with + * `boost::graph_traits::%Vertex_descriptor` + * as key type and `%Vector_3` as value type} + * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} + * \cgalParamExtra{If this parameter is omitted, vertex normals will be + * computed using compute_vertex_normals()} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_mean_curvature} + * \cgalParamDescription{a pointer to a scalar value to store the mean curvature at the vertex `v`} + * \cgalParamType{`GT::FT*`} + * \cgalParamDefault{`nullptr`} + * \cgalParamExtra{If this parameter is omitted, mean curvature won't be computed} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_gaussian_curvature} + * \cgalParamDescription{a pointer to a scalar value to store the gaussian curvature at the vertex `v`} + * \cgalParamType{`GT::FT*`} + * \cgalParamDefault{`nullptr`} + * \cgalParamExtra{If this parameter is omitted, gaussian curvature won't be computed} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_principal_curvatures_and_directions} + * \cgalParamDescription{a pointer to a Principal_curvatures_and_directions object to store the principal curvatures and directions at the vertex `v`} + * \cgalParamType{`Principal_curvatures_and_directions*`} + * \cgalParamDefault{`nullptr`} + * \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} + * \cgalParamNEnd + * + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball.} + * \cgalParamType{`GT::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of + * measures on faces around the vertex} + * \cgalParamNEnd + * + * \cgalNamedParamsEnd + * + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` +*/ template void interpolated_corrected_curvatures_at_vertex(const PolygonMesh& pmesh, From 483e8b8e509ee4420ba0861ab70dd5a50133f7b0 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 08:44:09 +0200 Subject: [PATCH 096/943] User manual + add example file for 1 vertex curvature --- .../Polygon_mesh_processing.txt | 16 ++++- .../Polygon_mesh_processing/CMakeLists.txt | 2 + ...corrected_curvatures_at_vertex_example.cpp | 60 +++++++++++++++++++ ...erpolated_corrected_curvatures_example.cpp | 2 + ...nterpolated_corrected_curvature_measures.h | 2 - 5 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 1d7184561a80..49f912ee5ca7 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -889,7 +889,7 @@ correct vertex normals are provided. The implementation is generic in terms of mesh data structure. It can be used on Surface_mesh, Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. -These computations are performed using : +These computations are performed using (on all vertices of mesh): - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` @@ -898,6 +898,13 @@ These computations are performed using : Where it is recommended to use the last function for computing multiple curvatures (example: mean and gaussian) as the implementation performs the shared computations only once, making it more efficient. +Similarly, we can use the following example functions to compute the curvatures on a specific vertex: +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_at_vertex()` + + \cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on the ball_radius named parameter which can be set to a value > 0 to get a smoother distribution of values and "diffuse" the extreme values of curvatures across the mesh. @@ -934,6 +941,13 @@ not provide storage for the curvatures. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} +\subsection ICCExamplePH Interpolated Corrected Curvature on a Vertex Example + +The following example illustrates how to +compute the curvatures on a specific vertex + +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp} + **************************************** \section PMPSlicer Slicer diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index ab084384835b..5e840c38a508 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -109,6 +109,8 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(interpolated_corrected_curvatures_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("interpolated_corrected_curvatures_polyhedron_example.cpp") target_link_libraries(interpolated_corrected_curvatures_polyhedron_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_at_vertex_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_at_vertex_example PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp new file mode 100644 index 000000000000..6ed061db93b8 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +#include + +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; +typedef Epic_kernel::FT FT; +typedef CGAL::Surface_mesh Surface_Mesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + +int main(int argc, char* argv[]) +{ + // instantiating and reading mesh + Surface_Mesh smesh; + const std::string filename = (argc > 1) ? + argv[1] : + CGAL::data_file_path("meshes/small_bunny.obj"); + + if (!CGAL::IO::read_polygon_mesh(filename, smesh)) + { + std::cerr << "Invalid input file." << std::endl; + return EXIT_FAILURE; + } + + // loop over vertices and use vertex_descriptor to compute a curvature on one vertex + for (vertex_descriptor v : vertices(smesh)) + { + FT h = PMP::interpolated_corrected_mean_curvature_at_vertex(smesh, v); + FT g = PMP::interpolated_corrected_gaussian_curvature_at_vertex(smesh, v); + PMP::Principal_curvatures_and_directions p = + PMP::interpolated_corrected_principal_curvatures_and_directions_at_vertex(smesh, v); + + // we can also specify a ball radius for expansion and a user defined vertex normals map using + // named parameters. Refer to interpolated_corrected_curvatures_example.cpp to see example usage. + + // Can also use interpolated_corrected_curvatures_at_vertex() to compute multiple curvatures + // on the vertex at the same time. This is more efficient than computing each one separately. + // The following commented lines show this (all mentioned named parameters work on it as well) + // we specify which curvatures we want to compute by passing pointers as named parameters + // as shown. These pointers are used for storing the result as well. in this example we + // selected mean and gaussian curvatures + // PMP::interpolated_corrected_curvatures_at_vertex( + // smesh, + // v, + // CGAL::parameters::vertex_mean_curvature(&h) + // .vertex_gaussian_curvature(&g) + // ); + + std::cout << v.idx() << ": HC = " << h + << ", GC = " << g << "\n" + << ", PC = [ " << p.min_curvature << " , " << p.max_curvature << " ]\n"; + } +} diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 33d34cd34f13..91266f594135 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -47,6 +47,8 @@ int main(int argc, char* argv[]) assert(created); // user can call these fucntions to compute a specfic curvature type on each vertex. + // (Note: if no ball radius is specified, the measure expansion of each vertex happens by + // summing measures on faces adjacent to each vertex.) PMP::interpolated_corrected_mean_curvature( smesh, mean_curvature_map diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index cdd25aefc0e5..847bac1f5c06 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -669,7 +669,6 @@ template( pmesh, v, @@ -682,7 +681,6 @@ template( pmesh, v, From a7cd6a275ecabaad05c802b4593e1f7235e25e65 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 09:00:24 +0200 Subject: [PATCH 097/943] trailling whitespaces --- ...olated_corrected_curvatures_at_vertex_example.cpp | 12 ++++++------ .../interpolated_corrected_curvatures_example.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp index 6ed061db93b8..009c5881f262 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp @@ -17,7 +17,7 @@ typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { - // instantiating and reading mesh + // instantiating and reading mesh Surface_Mesh smesh; const std::string filename = (argc > 1) ? argv[1] : @@ -34,21 +34,21 @@ int main(int argc, char* argv[]) { FT h = PMP::interpolated_corrected_mean_curvature_at_vertex(smesh, v); FT g = PMP::interpolated_corrected_gaussian_curvature_at_vertex(smesh, v); - PMP::Principal_curvatures_and_directions p = + PMP::Principal_curvatures_and_directions p = PMP::interpolated_corrected_principal_curvatures_and_directions_at_vertex(smesh, v); - // we can also specify a ball radius for expansion and a user defined vertex normals map using + // we can also specify a ball radius for expansion and a user defined vertex normals map using // named parameters. Refer to interpolated_corrected_curvatures_example.cpp to see example usage. // Can also use interpolated_corrected_curvatures_at_vertex() to compute multiple curvatures // on the vertex at the same time. This is more efficient than computing each one separately. // The following commented lines show this (all mentioned named parameters work on it as well) - // we specify which curvatures we want to compute by passing pointers as named parameters - // as shown. These pointers are used for storing the result as well. in this example we + // we specify which curvatures we want to compute by passing pointers as named parameters + // as shown. These pointers are used for storing the result as well. in this example we // selected mean and gaussian curvatures // PMP::interpolated_corrected_curvatures_at_vertex( // smesh, - // v, + // v, // CGAL::parameters::vertex_mean_curvature(&h) // .vertex_gaussian_curvature(&g) // ); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 91266f594135..511288702336 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) assert(created); // user can call these fucntions to compute a specfic curvature type on each vertex. - // (Note: if no ball radius is specified, the measure expansion of each vertex happens by + // (Note: if no ball radius is specified, the measure expansion of each vertex happens by // summing measures on faces adjacent to each vertex.) PMP::interpolated_corrected_mean_curvature( smesh, From fc943a4c317588c51b7e64da23dd84c4fef9672a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 09:18:05 +0200 Subject: [PATCH 098/943] minor doc fixes --- .../Polygon_mesh_processing/Polygon_mesh_processing.txt | 8 ++++---- .../doc/Polygon_mesh_processing/examples.txt | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 49f912ee5ca7..426e9e3b54a6 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -898,7 +898,7 @@ These computations are performed using (on all vertices of mesh): Where it is recommended to use the last function for computing multiple curvatures (example: mean and gaussian) as the implementation performs the shared computations only once, making it more efficient. -Similarly, we can use the following example functions to compute the curvatures on a specific vertex: +Similarly, we can use the following functions to compute curvatures on a specific vertex: - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` @@ -924,7 +924,7 @@ Property maps are an API introduced in the boost library that allows associating values to keys. In the following examples, for each property map, we associate a curvature value to each vertex. -\subsection ICCExampleSM Interpolated Corrected Curvature on a Surface Mesh Example +\subsection ICCExampleSM Interpolated Corrected Curvatures on a Surface Mesh Example The following example illustrates how to compute the curvatures on vertices @@ -932,7 +932,7 @@ and store them in property maps provided by the class `Surface_mesh`. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} -\subsection ICCExamplePH Interpolated Corrected Curvature on a Polyhedron Example +\subsection ICCExamplePH Interpolated Corrected Curvatures on a Polyhedron Example The following example illustrates how to compute the curvatures on vertices @@ -941,7 +941,7 @@ not provide storage for the curvatures. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} -\subsection ICCExamplePH Interpolated Corrected Curvature on a Vertex Example +\subsection ICCExampleSV Interpolated Corrected Curvatures on a Vertex Example The following example illustrates how to compute the curvatures on a specific vertex diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 0588d1c76e14..58af6e391b56 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -21,6 +21,7 @@ \example Polygon_mesh_processing/isotropic_remeshing_example.cpp \example Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp \example Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +\example Polygon_mesh_processing/interpolated_corrected_gaussian_curvature_at_vertex.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp From ca4e412e0e1d98c605ef6cc16eb448a43f66158f Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 09:35:20 +0200 Subject: [PATCH 099/943] minor fix --- .../test/Polygon_mesh_processing/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index c446a7395dee..8608e203c6eb 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -1,4 +1,4 @@ -0# Created by the script cgal_create_CMakeLists +# Created by the script cgal_create_CMakeLists # This is the CMake script for compiling a set of CGAL applications. cmake_minimum_required(VERSION 3.1...3.23) From da3db9a40674ac30071ec9e579412e1c2ba9a8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 09:58:35 +0100 Subject: [PATCH 100/943] typo --- .../test/Polygon_mesh_processing/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index c446a7395dee..8608e203c6eb 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -1,4 +1,4 @@ -0# Created by the script cgal_create_CMakeLists +# Created by the script cgal_create_CMakeLists # This is the CMake script for compiling a set of CGAL applications. cmake_minimum_required(VERSION 3.1...3.23) From 50ba18725ca32ab402357f13409bcee7f1e9fd79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 11:10:29 +0100 Subject: [PATCH 101/943] fix typename usage --- ...nterpolated_corrected_curvature_measures.h | 26 +++++++++---------- ...test_interpolated_corrected_curvatures.cpp | 6 ++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 94aaff9b8b52..94520cf403dd 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -479,7 +479,7 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from } template -typename Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( +Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( const PolygonMesh pmesh, const typename boost::graph_traits::vertex_descriptor v, const bool is_mean_curvature_selected, @@ -498,7 +498,7 @@ typename Vertex_measures interpolated_corrected_measures_one_vertex_no_radiu std::queue bfs_queue; std::unordered_set bfs_visited; - typename Vertex_measures vertex_measures; + Vertex_measures vertex_measures; std::vector x; std::vector u; @@ -538,7 +538,7 @@ typename Vertex_measures interpolated_corrected_measures_one_vertex_no_radiu template -typename Vertex_measures interpolated_corrected_measures_one_vertex( +Vertex_measures interpolated_corrected_measures_one_vertex( const PolygonMesh pmesh, const typename boost::graph_traits::vertex_descriptor v, const typename GT::FT radius, @@ -558,10 +558,10 @@ typename Vertex_measures interpolated_corrected_measures_one_vertex( std::queue bfs_queue; std::unordered_set bfs_visited; - typename Vertex_measures vertex_measures; + Vertex_measures vertex_measures; - typename Point_3 vp = get(vpm, v); - typename Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); + Point_3 vp = get(vpm, v); + Vector_3 c = Vector_3(vp.x(), vp.y(), vp.z()); for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f != boost::graph_traits::null_face()) @@ -626,13 +626,13 @@ template::vertex_descriptor v, - NamedParameters& np = parameters::default_values() + const NamedParameters& np = parameters::default_values() ) { typedef typename GetGeomTraits::type GT; typedef typename GetVertexPointMap::const_type Vertex_position_map; - typedef dynamic_vertex_property_t Vector_map_tag; + typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def* vertex_principal_curvatures_and_directions = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions), nullptr); + Principal_curvatures_and_directions* vertex_principal_curvatures_and_directions = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions), nullptr); const bool is_mean_curvature_selected = (vertex_mean_curvature != nullptr); const bool is_gaussian_curvature_selected = (vertex_gaussian_curvature != nullptr); @@ -703,7 +703,7 @@ template principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, @@ -1046,7 +1046,7 @@ template void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); } @@ -1109,7 +1109,7 @@ template void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); } @@ -1173,7 +1173,7 @@ template void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, - NamedParameters& np = parameters::default_values()) + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvatures_and_directions_map(vcm)); } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index 163c9b8d334d..7f8aa1f7d691 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -63,12 +63,12 @@ void test_average_curvatures(std::string mesh_path, Average_test_info test_info) std::cerr << "Invalid input file." << std::endl; } - typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - boost::property_map>::type + typename boost::property_map>::type mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh), gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - boost::property_map>>::type + typename boost::property_map>>::type principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); // test_info.expansion_radius -> test if no radius is provided by user. From 69610f6958dc51f31ede8a0e75c32e4f4c9a5c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 11:15:04 +0100 Subject: [PATCH 102/943] move function --- ...nterpolated_corrected_curvature_measures.h | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 94520cf403dd..821436dc05f6 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -990,17 +990,15 @@ class Interpolated_corrected_curvatures_computer /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected mean curvature across the mesh -* and stores it in a vertex property map `vcm`. +* Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. +* By providing mean, gaussian and/or principal curvature property maps as named parameters, the user +* can choose which curvatures to compute. * * @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam VertexCurvatureMap model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed mean curvatures are stored. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin * @@ -1024,37 +1022,63 @@ class Interpolated_corrected_curvatures_computer * computed using compute_vertex_normals()} * \cgalParamNEnd * +* \cgalParamNBegin{vertex_mean_curvature_map} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamType{a class model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%FT` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_gaussian_curvature_map} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamType{a class model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%FT` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} +* \cgalParamNEnd +* +* +* \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamType{a class model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` +* as key type and `%Principal_curvatures_and_directions` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} +* \cgalParamNEnd +* * \cgalParamNBegin{ball_radius} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of * measures on faces around the vertex} * \cgalParamNEnd * * \cgalNamedParamsEnd * +* @see `interpolated_corrected_mean_curvature()` * @see `interpolated_corrected_gaussian_curvature()` * @see `interpolated_corrected_principal_curvatures_and_directions()` -* @see `interpolated_corrected_curvatures()` */ - -template - void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, + void interpolated_corrected_curvatures(const PolygonMesh& pmesh, const NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); + internal::Interpolated_corrected_curvatures_computer(pmesh, np); } /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected gaussian curvature across the mesh +* Computes the interpolated corrected mean curvature across the mesh * and stores it in a vertex property map `vcm`. * * @tparam PolygonMesh a model of `FaceListGraph`. @@ -1063,7 +1087,7 @@ template - void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, + void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, const NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); } /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected principal curvatures across the mesh +* Computes the interpolated corrected gaussian curvature across the mesh * and stores it in a vertex property map `vcm`. * * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` as key type and -* `std::tuple, Eigen::Vector>` as value type. +* `boost::graph_traits::%Vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed principal curvatures are stored. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* @param vcm the vertex property map in which the computed gaussian curvatures are stored. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". * * \cgalNamedParamsBegin * @@ -1166,29 +1190,32 @@ template - void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, + void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, VertexCurvatureMap& vcm, const NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvatures_and_directions_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); } /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. -* By providing mean, gaussian and/or principal curvature property maps as named parameters, the user -* can choose which curvatures to compute. +* Computes the interpolated corrected principal curvatures across the mesh +* and stores it in a vertex property map `vcm`. * * @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam VertexCurvatureMap model of `WritablePropertyMap` with +* `boost::graph_traits::%Vertex_descriptor` as key type and +* `std::tuple, Eigen::Vector>` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. +* @param vcm the vertex property map in which the computed principal curvatures are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -1213,42 +1240,14 @@ template::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_gaussian_curvature_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} -* \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} -* \cgalParamNEnd -* -* -* \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} -* \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Principal_curvatures_and_directions` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} -* \cgalParamNEnd -* * \cgalParamNBegin{ball_radius} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball.} +* inclusion ratio inside this ball} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of * measures on faces around the vertex} * \cgalParamNEnd * @@ -1256,14 +1255,15 @@ template - void interpolated_corrected_curvatures(const PolygonMesh& pmesh, + void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, + VertexCurvatureMap& vcm, const NamedParameters& np = parameters::default_values()) { - internal::Interpolated_corrected_curvatures_computer(pmesh, np); + interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvatures_and_directions_map(vcm)); } template Date: Tue, 24 Jan 2023 11:27:31 +0100 Subject: [PATCH 103/943] fix warning --- .../Interpolated_corrected_principal_curvatures_plugin.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index 789ba4a06567..e5a01f7b3c3b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -81,7 +81,7 @@ void compute(SMesh* sMesh, CGAL::parameters::ball_radius(0) ); - typename Epic_kernel::FT max_curvature_magnitude_on_mesh = 0; + double max_curvature_magnitude_on_mesh = 0; for (Vertex_descriptor v : vertices(*sMesh)) { const PMP::Principal_curvatures_and_directions pc = principal_curvatures_and_directions_map[v]; @@ -99,11 +99,9 @@ void compute(SMesh* sMesh, // compute min edge len around central vertex // to scale the ribbons used to display the directions - typedef EPICK::FT FT; - const std::size_t n = CGAL::edges(*sMesh).size(); - Epic_kernel::FT avg_edge_length = 0; + double avg_edge_length = 0; if (n > 0) { for (auto e : CGAL::edges(*sMesh)) avg_edge_length += PMP::edge_length(e, *sMesh); From 999b475e4ca5142589b239fb8418a7ff78254c56 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:08:02 +0200 Subject: [PATCH 104/943] tests (incomplete) + minor typename fix still not passing single vertex on polyhedron due to a problem with vertex normal map --- ...nterpolated_corrected_curvature_measures.h | 10 ++-- ...test_interpolated_corrected_curvatures.cpp | 58 ++++++++++++++++--- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 847bac1f5c06..4cf352e32e48 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -399,8 +399,8 @@ std::array interpolated_corrected_anisotropic_measure_fa // const typename GT::FT R = r * r; // const typename GT::FT acc = 1.0 / res; // std::size_t samples_in = 0; -// for (GT::FT alpha = acc / 3; alpha < 1; alpha += acc) -// for (GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) +// for (typename GT::FT alpha = acc / 3; alpha < 1; alpha += acc) +// for (typename GT::FT beta = acc / 3; beta < 1 - alpha; beta += acc) // { // if ((alpha * x1 + beta * x2 + (1 - alpha - beta) * x3 - c).squared_length() < R) // samples_in++; @@ -632,7 +632,7 @@ template::type GT; typedef typename GetVertexPointMap::const_type Vertex_position_map; - typedef dynamic_vertex_property_t Vector_map_tag; + typedef dynamic_vertex_property_t Vector_map_tag; typedef typename boost::property_map::const_type Default_vector_map; typedef typename internal_np::Lookup_named_param_def(pmesh) * EXPANDING_RADIUS_EPSILON; - else - radius = radius; typename GT::FT* vertex_mean_curvature = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature), nullptr); typename GT::FT* vertex_gaussian_curvature = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature), nullptr); @@ -704,7 +702,7 @@ template principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index 163c9b8d334d..a6fa6f712680 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -54,7 +54,11 @@ bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_ke } template -void test_average_curvatures(std::string mesh_path, Average_test_info test_info){ +void test_average_curvatures(std::string mesh_path, + Average_test_info test_info, + bool compare_single_vertex = false +){ + PolygonMesh pmesh; const std::string filename = CGAL::data_file_path(mesh_path); @@ -116,6 +120,7 @@ void test_average_curvatures(std::string mesh_path, Average_test_info test_info) assert(passes_comparison(gaussian_curvature_avg, test_info.gaussian_curvature_avg, test_info.tolerance)); assert(passes_comparison(principal_curvature_avg, test_info.principal_curvature_avg, test_info.tolerance)); + // computing curvatures together from interpolated_corrected_curvatures() PMP::interpolated_corrected_curvatures( pmesh, CGAL::parameters::ball_radius(test_info.expansion_radius) @@ -124,7 +129,6 @@ void test_average_curvatures(std::string mesh_path, Average_test_info test_info) .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map) ); - // are average curvatures computed from interpolated_corrected_curvatures() equal to average curvatures each computed on its own? Epic_kernel::FT new_mean_curvature_avg = 0, new_gaussian_curvature_avg = 0, new_principal_curvature_avg = 0; for (vertex_descriptor v : vertices(pmesh)) @@ -138,22 +142,62 @@ void test_average_curvatures(std::string mesh_path, Average_test_info test_info) new_mean_curvature_avg /= vertices(pmesh).size(); new_gaussian_curvature_avg /= vertices(pmesh).size(); new_principal_curvature_avg /= vertices(pmesh).size() * 2; - + + // are average curvatures computed from interpolated_corrected_curvatures() + // equal to average curvatures each computed on its own? assert(passes_comparison(mean_curvature_avg, new_mean_curvature_avg, 0.99)); assert(passes_comparison(gaussian_curvature_avg, new_gaussian_curvature_avg, 0.99)); assert(passes_comparison(principal_curvature_avg, new_principal_curvature_avg, 0.99)); + + if (compare_single_vertex) + { + // computing curvatures together from interpolated_corrected_curvatures() + + Epic_kernel::FT single_vertex_mean_curvature_avg = 0, + single_vertex_gaussian_curvature_avg = 0, + single_vertex_principal_curvature_avg = 0; + + Epic_kernel::FT h, g; + PMP::Principal_curvatures_and_directions p; + + for (vertex_descriptor v : vertices(pmesh)) + { + PMP::interpolated_corrected_curvatures_at_vertex( + pmesh, + v, + CGAL::parameters::vertex_gaussian_curvature(&g) + .vertex_mean_curvature(&h) + .vertex_principal_curvatures_and_directions(&p) + ); + + single_vertex_mean_curvature_avg += h; + single_vertex_gaussian_curvature_avg += g; + single_vertex_principal_curvature_avg += p.min_curvature + p.max_curvature; + } + + single_vertex_mean_curvature_avg /= vertices(pmesh).size(); + single_vertex_gaussian_curvature_avg /= vertices(pmesh).size(); + single_vertex_principal_curvature_avg /= vertices(pmesh).size() * 2; + + assert(passes_comparison(mean_curvature_avg, single_vertex_mean_curvature_avg, 0.99)); + assert(passes_comparison(gaussian_curvature_avg, single_vertex_gaussian_curvature_avg, 0.99)); + assert(passes_comparison(principal_curvature_avg, single_vertex_principal_curvature_avg, 0.99)); + } + } int main() { // testing on a simple sphere(r = 0.5), on both Polyhedron & SurfaceMesh: + // For this mesh, ina addition to the whole mesh functions, we also compare against the single vertex + // curvature functions to make sure the produce the same results // Expected: Mean Curvature = 2, Gaussian Curvature = 4, Principal Curvatures = 2 & 2 so 2 on avg. - test_average_curvatures("meshes/sphere.off", Average_test_info(2,4,2)); - test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2)); + test_average_curvatures("meshes/sphere.off", Average_test_info(2,4,2), true); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2), true); // Same mesh but with specified expansion radii of 0 and 0.25 (half radius of sphere) - test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0)); - test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0.25)); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0), true); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2, 0.25), true); // testing on a simple sphere(r = 10), on both Polyhedron & SurfaceMesh: // Expected: Mean Curvature = 0.1, Gaussian Curvature = 0.01, Principal Curvatures = 0.1 & 0.1 so 0.1 on avg. From 7303c7401e476d85784715ab3c28e05a8ca3eb8a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:42:39 +0200 Subject: [PATCH 105/943] move function + minor func doc fix --- ...nterpolated_corrected_curvature_measures.h | 155 +++++++++--------- 1 file changed, 78 insertions(+), 77 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 078fcaeb48e3..2ae9a6856e38 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -1210,7 +1210,7 @@ template::%Vertex_descriptor` as key type and -* `std::tuple, Eigen::Vector>` as value type. +* `%Principal_curvatures_and_directions` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. @@ -1265,16 +1265,20 @@ template*`} + * \cgalParamDefault{`nullptr`} + * \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} + * \cgalParamNEnd + * * \cgalParamNBegin{ball_radius} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball} + * inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of * measures on faces around the vertex} * \cgalParamNEnd * * \cgalNamedParamsEnd * - * @return the interpolated corrected mean curvature at the vertex `v` - * - * @see `interpolated_corrected_mean_curvature()` - * @see `interpolated_corrected_gaussian_curvature_at_vertex()` - * @see `interpolated_corrected_principal_curvatures_and_directions_at_vertex()` - * @see `interpolated_corrected_curvatures_at_vertex()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` + * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` */ - -template - typename GT::FT interpolated_corrected_mean_curvature_at_vertex(const PolygonMesh& pmesh, + void interpolated_corrected_curvatures_at_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute mean curvature - typename GT::FT mean_curvature; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); - return mean_curvature; + internal::interpolated_corrected_curvatures_one_vertex(pmesh, v, np); } /** * \ingroup PMP_corrected_curvatures_grp - * computes the interpolated corrected Gaussian curvature at a vertex of a triangle mesh. + * computes the interpolated corrected mean curvature at a vertex of a triangle mesh. * * @tparam GT a geometric traits class that provides the nested type `FT`, * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the Gaussian curvature at + * @param v the vertex of `pmesh` to compute the mean curvature at * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -1377,36 +1396,36 @@ template - typename GT::FT interpolated_corrected_gaussian_curvature_at_vertex(const PolygonMesh& pmesh, + typename GT::FT interpolated_corrected_mean_curvature_at_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute gaussian curvature - typename GT::FT gc; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); - return gc; + // use interpolated_corrected_curvatures_at_vertex to compute mean curvature + typename GT::FT mean_curvature; + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); + return mean_curvature; } /** * \ingroup PMP_corrected_curvatures_grp - * computes the interpolated corrected principal curvatures and directions at a vertex of a triangle mesh. + * computes the interpolated corrected Gaussian curvature at a vertex of a triangle mesh. * - * @tparam GT the geometric traits class, + * @tparam GT a geometric traits class that provides the nested type `FT`, * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the principal curvatures and directions at + * @param v the vertex of `pmesh` to compute the Gaussian curvature at * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -1440,41 +1459,39 @@ template - Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_at_vertex(const PolygonMesh& pmesh, + typename GT::FT interpolated_corrected_gaussian_curvature_at_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute principal curvatures - Principal_curvatures_and_directions pcd; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); - return pcd; + // use interpolated_corrected_curvatures_at_vertex to compute gaussian curvature + typename GT::FT gc; + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); + return gc; } /** * \ingroup PMP_corrected_curvatures_grp - * Computes the interpolated corrected curvatures at a certain vertex, based on the provided pointers. - * By providing mean, gaussian and/or principal curvature pointers as named parameters, the user - * can choose which curvatures to compute. - * The pointers are used to store the computed curvatures. - * The user is responsible for the memory management of the pointers. + * computes the interpolated corrected principal curvatures and directions at a vertex of a triangle mesh. * + * @tparam GT the geometric traits class, * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the curvatures at + * @param v the vertex of `pmesh` to compute the principal curvatures and directions at * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin @@ -1498,52 +1515,36 @@ template*`} - * \cgalParamDefault{`nullptr`} - * \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} - * \cgalParamNEnd - * * \cgalParamNBegin{ball_radius} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball.} + * inclusion ratio inside this ball} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of * measures on faces around the vertex} * \cgalParamNEnd - * * \cgalNamedParamsEnd * - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` + * @return the interpolated corrected principal curvatures and directions at the vertex `v` + * + * @see `interpolated_corrected_principal_curvatures_and_directions()` + * @see `interpolated_corrected_mean_curvature_at_vertex()` + * @see `interpolated_corrected_gaussian_curvature_at_vertex()` + * @see `interpolated_corrected_curvatures_at_vertex()` */ -template - void interpolated_corrected_curvatures_at_vertex(const PolygonMesh& pmesh, + Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_at_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - internal::interpolated_corrected_curvatures_one_vertex(pmesh, v, np); + // use interpolated_corrected_curvatures_at_vertex to compute principal curvatures + Principal_curvatures_and_directions pcd; + interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); + return pcd; } } // namespace Polygon_mesh_processing From f9c21faf02f7296a6285909dffa9c3758599e564 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:11:58 +0200 Subject: [PATCH 106/943] trailling white spaces --- .../test_interpolated_corrected_curvatures.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index cd71fbb20f34..367d3c7045d1 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -54,7 +54,7 @@ bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_ke } template -void test_average_curvatures(std::string mesh_path, +void test_average_curvatures(std::string mesh_path, Average_test_info test_info, bool compare_single_vertex = false ){ @@ -142,8 +142,8 @@ void test_average_curvatures(std::string mesh_path, new_mean_curvature_avg /= vertices(pmesh).size(); new_gaussian_curvature_avg /= vertices(pmesh).size(); new_principal_curvature_avg /= vertices(pmesh).size() * 2; - - // are average curvatures computed from interpolated_corrected_curvatures() + + // are average curvatures computed from interpolated_corrected_curvatures() // equal to average curvatures each computed on its own? assert(passes_comparison(mean_curvature_avg, new_mean_curvature_avg, 0.99)); assert(passes_comparison(gaussian_curvature_avg, new_gaussian_curvature_avg, 0.99)); @@ -156,15 +156,15 @@ void test_average_curvatures(std::string mesh_path, Epic_kernel::FT single_vertex_mean_curvature_avg = 0, single_vertex_gaussian_curvature_avg = 0, single_vertex_principal_curvature_avg = 0; - + Epic_kernel::FT h, g; PMP::Principal_curvatures_and_directions p; - + for (vertex_descriptor v : vertices(pmesh)) { PMP::interpolated_corrected_curvatures_at_vertex( pmesh, - v, + v, CGAL::parameters::vertex_gaussian_curvature(&g) .vertex_mean_curvature(&h) .vertex_principal_curvatures_and_directions(&p) @@ -189,8 +189,8 @@ void test_average_curvatures(std::string mesh_path, int main() { // testing on a simple sphere(r = 0.5), on both Polyhedron & SurfaceMesh: - // For this mesh, ina addition to the whole mesh functions, we also compare against the single vertex - // curvature functions to make sure the produce the same results + // For this mesh, ina addition to the whole mesh functions, we also compare against the single vertex + // curvature functions to make sure the produce the same results // Expected: Mean Curvature = 2, Gaussian Curvature = 4, Principal Curvatures = 2 & 2 so 2 on avg. test_average_curvatures("meshes/sphere.off", Average_test_info(2,4,2), true); test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2), true); From 92e22644357462fd3b13af386d4795284999639e Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 17:58:03 +0200 Subject: [PATCH 107/943] Update test_interpolated_corrected_curvatures.cpp --- .../test_interpolated_corrected_curvatures.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index 367d3c7045d1..12ab2bff3872 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -168,6 +168,7 @@ void test_average_curvatures(std::string mesh_path, CGAL::parameters::vertex_gaussian_curvature(&g) .vertex_mean_curvature(&h) .vertex_principal_curvatures_and_directions(&p) + .ball_radius(test_info.expansion_radius) ); single_vertex_mean_curvature_avg += h; From 6f2f912c4d03e5a418d37c2f9b1de7c0d4de4a5a Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 24 Jan 2023 18:41:25 +0200 Subject: [PATCH 108/943] minor fix --- .../Curvatures/interpolated_corrected_curvature_measures.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 2ae9a6856e38..32287848fb31 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -480,7 +480,7 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from template Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( - const PolygonMesh pmesh, + const PolygonMesh& pmesh, const typename boost::graph_traits::vertex_descriptor v, const bool is_mean_curvature_selected, const bool is_gaussian_curvature_selected, @@ -539,7 +539,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( template Vertex_measures interpolated_corrected_measures_one_vertex( - const PolygonMesh pmesh, + const PolygonMesh& pmesh, const typename boost::graph_traits::vertex_descriptor v, const typename GT::FT radius, const bool is_mean_curvature_selected, @@ -624,7 +624,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( template void interpolated_corrected_curvatures_one_vertex( - const PolygonMesh pmesh, + const PolygonMesh& pmesh, const typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values() ) From 1294548acc0444ec23145fe29d3e428baa515f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 17:58:27 +0100 Subject: [PATCH 109/943] avoid macro substitution --- .../test_interpolated_corrected_curvatures.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index 12ab2bff3872..2aa963fea52b 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -50,7 +50,7 @@ bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_ke else if (abs(expected) < ABS_ERROR) return false; // expected 0, got non-0 - return std::min(result, expected) / std::max(result, expected) > tolerance; + return (std::min)(result, expected) / (std::max)(result, expected) > tolerance; } template From 00cf0970e56f8eafdbb74afe728e8b7e8bcf3c3e Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:04:51 +0200 Subject: [PATCH 110/943] changed the mesh file used in examples --- ...corrected_curvatures_at_vertex_example.cpp | 3 +- ...erpolated_corrected_curvatures_example.cpp | 3 +- ...orrected_curvatures_polyhedron_example.cpp | 35 ++++++++++--------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp index 009c5881f262..046f9101d1e6 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp @@ -12,7 +12,6 @@ namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; typedef Epic_kernel::FT FT; typedef CGAL::Surface_mesh Surface_Mesh; -typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) @@ -21,7 +20,7 @@ int main(int argc, char* argv[]) Surface_Mesh smesh; const std::string filename = (argc > 1) ? argv[1] : - CGAL::data_file_path("meshes/small_bunny.obj"); + CGAL::data_file_path("meshes/sphere.off"); if (!CGAL::IO::read_polygon_mesh(filename, smesh)) { diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index 511288702336..6a991bafdfb8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -12,7 +12,6 @@ namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; typedef CGAL::Surface_mesh Surface_Mesh; -typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) @@ -20,7 +19,7 @@ int main(int argc, char* argv[]) Surface_Mesh smesh; const std::string filename = (argc > 1) ? argv[1] : - CGAL::data_file_path("meshes/small_bunny.obj"); + CGAL::data_file_path("meshes/sphere.off"); if (!CGAL::IO::read_polygon_mesh(filename, smesh)) { diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp index 6bbe49ce37e5..0d1ffcfa35d1 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -13,13 +13,14 @@ namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; typedef CGAL::Polyhedron_3 Polyhedron; -typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { Polyhedron polyhedron; - const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); + const std::string filename = (argc > 1) ? + argv[1] : + CGAL::data_file_path("meshes/sphere.off"); if (!CGAL::IO::read_polygon_mesh(filename, polyhedron)) { @@ -28,22 +29,22 @@ int main(int argc, char *argv[]) } boost::property_map>::type - mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), - gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); + mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), + gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); boost::property_map>>::type - principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); + principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); PMP::interpolated_corrected_mean_curvature( - polyhedron, - mean_curvature_map); + polyhedron, + mean_curvature_map); PMP::interpolated_corrected_gaussian_curvature( - polyhedron, - gaussian_curvature_map); + polyhedron, + gaussian_curvature_map); PMP::interpolated_corrected_principal_curvatures_and_directions( - polyhedron, - principal_curvatures_and_directions_map); + polyhedron, + principal_curvatures_and_directions_map); // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) @@ -59,17 +60,17 @@ int main(int argc, char *argv[]) // This function can be used to compute multiple curvature types by specifiying them as named parameters // This is more efficient than computing each one separately (shared computations). PMP::interpolated_corrected_curvatures( - polyhedron, - CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) - .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map)); + polyhedron, + CGAL::parameters::vertex_mean_curvature_map(mean_curvature_map) + .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map)); int i = 0; for (vertex_descriptor v : vertices(polyhedron)) { auto PC = get(principal_curvatures_and_directions_map, v); std::cout << i << ": HC = " << get(mean_curvature_map, v) - << ", GC = " << get(gaussian_curvature_map, v) << "\n" - << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; + << ", GC = " << get(gaussian_curvature_map, v) << "\n" + << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; i++; } } From 8d2043d0aab934e3d97cd2de8be8f112638fc94b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 28 Jan 2023 15:54:35 +0200 Subject: [PATCH 111/943] renaming mostly to pass the max path error --- .../PackageDescription.txt | 8 ++-- .../Polygon_mesh_processing.txt | 14 +++--- .../doc/Polygon_mesh_processing/examples.txt | 6 +-- .../Polygon_mesh_processing/CMakeLists.txt | 12 ++--- ...lated_corrected_curvatures_example_PH.cpp} | 0 ...lated_corrected_curvatures_example_SM.cpp} | 0 ...d_corrected_curvatures_vertex_example.cpp} | 12 ++--- ...nterpolated_corrected_curvature_measures.h | 44 +++++++++---------- ...test_interpolated_corrected_curvatures.cpp | 2 +- 9 files changed, 49 insertions(+), 49 deletions(-) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_polyhedron_example.cpp => interpolated_corrected_curvatures_example_PH.cpp} (100%) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_example.cpp => interpolated_corrected_curvatures_example_SM.cpp} (100%) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_at_vertex_example.cpp => interpolated_corrected_curvatures_vertex_example.cpp} (83%) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index d5790ec725ee..52ae8934ddf2 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -212,10 +212,10 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` - `CGAL::Polygon_mesh_processing::Principal_curvatures_and_directions` \cgalCRPSection{Normal Computation Functions} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index fedebf4b8f8a..751db0992492 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -909,10 +909,10 @@ Where it is recommended to use the last function for computing multiple curvatur as the implementation performs the shared computations only once, making it more efficient. Similarly, we can use the following functions to compute curvatures on a specific vertex: -- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_at_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_at_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` \cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on @@ -940,7 +940,7 @@ The following example illustrates how to compute the curvatures on vertices and store them in property maps provided by the class `Surface_mesh`. -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp} \subsection ICCExamplePH Interpolated Corrected Curvatures on a Polyhedron Example @@ -949,14 +949,14 @@ compute the curvatures on vertices and store them in dynamic property maps as the class `Polyhedron_3` does not provide storage for the curvatures. -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp} \subsection ICCExampleSV Interpolated Corrected Curvatures on a Vertex Example The following example illustrates how to compute the curvatures on a specific vertex -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp} **************************************** \section PMPSlicer Slicer diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 58af6e391b56..33e68eea8091 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -19,9 +19,9 @@ \example Polygon_mesh_processing/refine_fair_example.cpp \example Polygon_mesh_processing/mesh_slicer_example.cpp \example Polygon_mesh_processing/isotropic_remeshing_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_gaussian_curvature_at_vertex.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 5e840c38a508..93e321e837c8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -105,12 +105,12 @@ create_single_source_cgal_program("cc_compatible_orientations.cpp") if(TARGET CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_example.cpp") - target_link_libraries(interpolated_corrected_curvatures_example PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_polyhedron_example.cpp") - target_link_libraries(interpolated_corrected_curvatures_polyhedron_example PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_at_vertex_example.cpp") - target_link_libraries(interpolated_corrected_curvatures_at_vertex_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_example_SM.cpp") + target_link_libraries(interpolated_corrected_curvatures_example_SM PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_example_PH.cpp") + target_link_libraries(interpolated_corrected_curvatures_example_PH PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_vertex_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_vertex_example PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp similarity index 100% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp similarity index 100% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp similarity index 83% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp index 046f9101d1e6..a897066facb6 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_at_vertex_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp @@ -31,21 +31,21 @@ int main(int argc, char* argv[]) // loop over vertices and use vertex_descriptor to compute a curvature on one vertex for (vertex_descriptor v : vertices(smesh)) { - FT h = PMP::interpolated_corrected_mean_curvature_at_vertex(smesh, v); - FT g = PMP::interpolated_corrected_gaussian_curvature_at_vertex(smesh, v); + FT h = PMP::interpolated_corrected_mean_curvature_one_vertex(smesh, v); + FT g = PMP::interpolated_corrected_gaussian_curvature_one_vertex(smesh, v); PMP::Principal_curvatures_and_directions p = - PMP::interpolated_corrected_principal_curvatures_and_directions_at_vertex(smesh, v); + PMP::interpolated_corrected_principal_curvatures_and_directions_one_vertex(smesh, v); // we can also specify a ball radius for expansion and a user defined vertex normals map using - // named parameters. Refer to interpolated_corrected_curvatures_example.cpp to see example usage. + // named parameters. Refer to interpolated_corrected_curvatures_example_SM.cpp to see example usage. - // Can also use interpolated_corrected_curvatures_at_vertex() to compute multiple curvatures + // Can also use interpolated_corrected_curvatures_one_vertex() to compute multiple curvatures // on the vertex at the same time. This is more efficient than computing each one separately. // The following commented lines show this (all mentioned named parameters work on it as well) // we specify which curvatures we want to compute by passing pointers as named parameters // as shown. These pointers are used for storing the result as well. in this example we // selected mean and gaussian curvatures - // PMP::interpolated_corrected_curvatures_at_vertex( + // PMP::interpolated_corrected_curvatures_one_vertex( // smesh, // v, // CGAL::parameters::vertex_mean_curvature(&h) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 32287848fb31..2142e57fd194 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -1337,13 +1337,13 @@ template - void interpolated_corrected_curvatures_at_vertex(const PolygonMesh& pmesh, + void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { @@ -1399,20 +1399,20 @@ template - typename GT::FT interpolated_corrected_mean_curvature_at_vertex(const PolygonMesh& pmesh, + typename GT::FT interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute mean curvature + // use interpolated_corrected_curvatures_one_vertex to compute mean curvature typename GT::FT mean_curvature; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); return mean_curvature; } @@ -1465,20 +1465,20 @@ template - typename GT::FT interpolated_corrected_gaussian_curvature_at_vertex(const PolygonMesh& pmesh, + typename GT::FT interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute gaussian curvature + // use interpolated_corrected_curvatures_one_vertex to compute gaussian curvature typename GT::FT gc; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); return gc; } @@ -1530,20 +1530,20 @@ template - Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_at_vertex(const PolygonMesh& pmesh, + Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_one_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_at_vertex to compute principal curvatures + // use interpolated_corrected_curvatures_one_vertex to compute principal curvatures Principal_curvatures_and_directions pcd; - interpolated_corrected_curvatures_at_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); return pcd; } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index 2aa963fea52b..37fc6f050df4 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -162,7 +162,7 @@ void test_average_curvatures(std::string mesh_path, for (vertex_descriptor v : vertices(pmesh)) { - PMP::interpolated_corrected_curvatures_at_vertex( + PMP::interpolated_corrected_curvatures_one_vertex( pmesh, v, CGAL::parameters::vertex_gaussian_curvature(&g) From 4e669b79a73682b97aca64b9e04ef46edbf56143 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 29 Jan 2023 06:26:16 +0200 Subject: [PATCH 112/943] conversion warnings --- ...interpolated_corrected_curvature_measures.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index 2142e57fd194..cfe3b79b6e19 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -89,7 +89,7 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) { for (auto e : edges(pmesh)) avg_edge_length += edge_length(e, pmesh); - avg_edge_length /= n; + avg_edge_length /= static_cast(n); return avg_edge_length; } @@ -145,7 +145,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector(n); // getting unit average normal of points typename GT::Vector_3 uc = @@ -211,7 +211,7 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve // getting center of points typename GT::Vector_3 xc = std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; + xc /= static_cast(n); // getting unit average normal of points typename GT::Vector_3 uc = @@ -297,7 +297,7 @@ std::array interpolated_corrected_anisotropic_measure_fa const typename GT::Vector_3 x02 = x[2] - x[0]; const typename GT::Vector_3 um = (u[0] + u[1] + u[2]) / 3.0; - for (std::size_t ix = 0; ix < 3; ix++) + for (unsigned int ix = 0; ix < 3; ix++) { typename GT::Vector_3 X; if (ix == 0) @@ -307,7 +307,7 @@ std::array interpolated_corrected_anisotropic_measure_fa if (ix == 2) X = typename GT::Vector_3(0, 0, 1); - for (std::size_t iy = 0; iy < 3; iy++) + for (unsigned int iy = 0; iy < 3; iy++) muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); } } @@ -316,7 +316,7 @@ std::array interpolated_corrected_anisotropic_measure_fa { // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. // the indices in paper vs in here are: 00 = 0, 10 = 1, 11 = 2, 01 = 3 - for (std::size_t ix = 0; ix < 3; ix++) + for (unsigned int ix = 0; ix < 3; ix++) { typename GT::Vector_3 X; if (ix == 0) @@ -331,7 +331,7 @@ std::array interpolated_corrected_anisotropic_measure_fa const typename GT::Vector_3 u2xX = cross_product(u[2], X); const typename GT::Vector_3 u3xX = cross_product(u[3], X); - for (std::size_t iy = 0; iy < 3; iy++) + for (unsigned int iy = 0; iy < 3; iy++) muXY[ix * 3 + iy] = (1.0 / 72.0) * ( u[0][iy] * (u0xX * (-x[0] - 11 * x[1] + 13 * x[3] - x[2]) @@ -364,7 +364,7 @@ std::array interpolated_corrected_anisotropic_measure_fa // getting center of points typename GT::Vector_3 xc = std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xc /= n; + xc /= static_cast(n); // getting unit average normal of points typename GT::Vector_3 uc = @@ -418,7 +418,7 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, // getting center of points typename GT::Vector_3 xm = std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); - xm /= n; + xm /= static_cast(n); typename GT::FT d_min = (xm - c).squared_length(); typename GT::FT d_max = d_min; From 2ccabc92899980c65ce17ff9e165905af3d2e6c0 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 29 Jan 2023 09:39:39 +0200 Subject: [PATCH 113/943] renaming files --- ....h => interpolated_corrected_curvatures.h} | 20 +++++++++---------- .../include/CGAL/license/gpl_package_list.txt | 2 +- ...olated_corrected_curvatures_example_PH.cpp | 2 +- ...olated_corrected_curvatures_example_SM.cpp | 2 +- ...ed_corrected_curvatures_vertex_example.cpp | 2 +- ....h => interpolated_corrected_curvatures.h} | 8 ++++---- ...test_interpolated_corrected_curvatures.cpp | 2 +- .../Display/Display_property_plugin.cpp | 2 +- ..._corrected_principal_curvatures_plugin.cpp | 2 +- 9 files changed, 21 insertions(+), 21 deletions(-) rename Installation/include/CGAL/license/Polygon_mesh_processing/{interpolated_corrected_curvature_measures.h => interpolated_corrected_curvatures.h} (83%) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/{Curvatures/interpolated_corrected_curvature_measures.h => interpolated_corrected_curvatures.h} (99%) diff --git a/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h b/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvatures.h similarity index 83% rename from Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h rename to Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 15e2a79af8a9..e484daaf5eae 100644 --- a/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvature_measures.h +++ b/Installation/include/CGAL/license/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -11,15 +11,15 @@ // // Warning: this file is generated, see include/CGAL/licence/README.md -#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H -#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H +#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H #include #include -#ifdef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE +#ifdef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE -# if CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE +# if CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE # if defined(CGAL_LICENSE_WARNING) @@ -33,22 +33,22 @@ You get this error, as you defined CGAL_LICENSE_ERROR." # endif // CGAL_LICENSE_ERROR -# endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE +# endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE -#else // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE +#else // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE # if defined(CGAL_LICENSE_WARNING) - CGAL_pragma_warning("\nThe macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE is not defined." + CGAL_pragma_warning("\nThe macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE is not defined." "\nYou use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under " "the terms of the GPLv3+.") # endif // CGAL_LICENSE_WARNING # ifdef CGAL_LICENSE_ERROR -# error "The macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE is not defined.\ +# error "The macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE is not defined.\ You use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under the terms of \ the GPLv3+. You get this error, as you defined CGAL_LICENSE_ERROR." # endif // CGAL_LICENSE_ERROR -#endif // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_COMMERCIAL_LICENSE +#endif // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE -#endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H diff --git a/Installation/include/CGAL/license/gpl_package_list.txt b/Installation/include/CGAL/license/gpl_package_list.txt index c6ac0b619df0..14d68b5d9a6a 100644 --- a/Installation/include/CGAL/license/gpl_package_list.txt +++ b/Installation/include/CGAL/license/gpl_package_list.txt @@ -51,7 +51,7 @@ Polygon_mesh_processing/connected_components Polygon Mesh Processing - Connected Polygon_mesh_processing/corefinement Polygon Mesh Processing - Corefinement Polygon_mesh_processing/core Polygon Mesh Processing - Core Polygon_mesh_processing/distance Polygon Mesh Processing - Distance -Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures Polygon Mesh Processing - Interpolated Corrected Curvatures +Polygon_mesh_processing/interpolated_corrected_curvatures Polygon Mesh Processing - Interpolated Corrected Curvatures Polygon_mesh_processing/measure Polygon Mesh Processing - Geometric Measure Polygon_mesh_processing/meshing_hole_filling Polygon Mesh Processing - Meshing and Hole Filling Polygon_mesh_processing/orientation Polygon Mesh Processing - Orientation diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp index 0d1ffcfa35d1..3cf675c53ca4 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp index 6a991bafdfb8..d92ec7b8096d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp index a897066facb6..beb2eda31c04 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h similarity index 99% rename from Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h rename to Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index cfe3b79b6e19..7f0bbc8197ce 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -11,10 +11,10 @@ // Author(s) : Hossam Saeed // -#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H -#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURE_MEASURES_H +#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H +#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H -#include +#include #include #include @@ -1550,4 +1550,4 @@ template -#include +#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 67a2061fc5e8..f515c7c12e08 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include "Scene_points_with_normal_item.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp index e5a01f7b3c3b..8bb6a229967b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Interpolated_corrected_principal_curvatures_plugin.cpp @@ -11,7 +11,7 @@ #include #include -#include +#include using namespace CGAL::Three; class Polyhedron_demo_interpolated_corrected_principal_curvatures_and_directions_plugin : From eef0f5fd80cf703486b1f72b862898f45c266d00 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 31 Jan 2023 11:23:46 +0200 Subject: [PATCH 114/943] removed unused parameter --- .../interpolated_corrected_curvatures.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 7f0bbc8197ce..a71fdf164449 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -27,7 +27,6 @@ #include #include #include -#include #define EXPANDING_RADIUS_EPSILON 1e-6 @@ -231,8 +230,7 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve } template -typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, - const std::vector& x = {}) +typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u) { const std::size_t n = u.size(); CGAL_precondition(n >= 3); From 4f4eeea292f09dc7e7a84c55787346f2ec51a607 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 31 Jan 2023 11:55:15 +0200 Subject: [PATCH 115/943] removing _example suffix (renaming) --- .../Polygon_mesh_processing.txt | 6 +++--- .../doc/Polygon_mesh_processing/examples.txt | 6 +++--- .../examples/Polygon_mesh_processing/CMakeLists.txt | 12 ++++++------ ....cpp => interpolated_corrected_curvatures_PH.cpp} | 0 ....cpp => interpolated_corrected_curvatures_SM.cpp} | 0 ... => interpolated_corrected_curvatures_vertex.cpp} | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_example_PH.cpp => interpolated_corrected_curvatures_PH.cpp} (100%) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_example_SM.cpp => interpolated_corrected_curvatures_SM.cpp} (100%) rename Polygon_mesh_processing/examples/Polygon_mesh_processing/{interpolated_corrected_curvatures_vertex_example.cpp => interpolated_corrected_curvatures_vertex.cpp} (98%) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 751db0992492..1da140d96791 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -940,7 +940,7 @@ The following example illustrates how to compute the curvatures on vertices and store them in property maps provided by the class `Surface_mesh`. -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp} \subsection ICCExamplePH Interpolated Corrected Curvatures on a Polyhedron Example @@ -949,14 +949,14 @@ compute the curvatures on vertices and store them in dynamic property maps as the class `Polyhedron_3` does not provide storage for the curvatures. -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp} \subsection ICCExampleSV Interpolated Corrected Curvatures on a Vertex Example The following example illustrates how to compute the curvatures on a specific vertex -\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp} +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp} **************************************** \section PMPSlicer Slicer diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 33e68eea8091..3a5620d82424 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -19,9 +19,9 @@ \example Polygon_mesh_processing/refine_fair_example.cpp \example Polygon_mesh_processing/mesh_slicer_example.cpp \example Polygon_mesh_processing/isotropic_remeshing_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 93e321e837c8..19a3aaf5313d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -105,12 +105,12 @@ create_single_source_cgal_program("cc_compatible_orientations.cpp") if(TARGET CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_example_SM.cpp") - target_link_libraries(interpolated_corrected_curvatures_example_SM PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_example_PH.cpp") - target_link_libraries(interpolated_corrected_curvatures_example_PH PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures_vertex_example.cpp") - target_link_libraries(interpolated_corrected_curvatures_vertex_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_SM.cpp") + target_link_libraries(interpolated_corrected_curvatures_SM PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_PH.cpp") + target_link_libraries(interpolated_corrected_curvatures_PH PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_vertex.cpp") + target_link_libraries(interpolated_corrected_curvatures_vertex PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp similarity index 100% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_PH.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp similarity index 100% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example_SM.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp similarity index 98% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp index beb2eda31c04..47fbcfd68711 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp @@ -37,7 +37,7 @@ int main(int argc, char* argv[]) PMP::interpolated_corrected_principal_curvatures_and_directions_one_vertex(smesh, v); // we can also specify a ball radius for expansion and a user defined vertex normals map using - // named parameters. Refer to interpolated_corrected_curvatures_example_SM.cpp to see example usage. + // named parameters. Refer to interpolated_corrected_curvatures_SM.cpp to see example usage. // Can also use interpolated_corrected_curvatures_one_vertex() to compute multiple curvatures // on the vertex at the same time. This is more efficient than computing each one separately. From bd5d9df950ea845efa3b6bdf926a1b548c8c4ffd Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 31 Jan 2023 11:57:00 +0200 Subject: [PATCH 116/943] fix some functions were passing x to interpolated_corrected_gaussian_curvature_measure_face() when it was not needed (and causes a compilation error for 1 vertex) --- .../interpolated_corrected_curvatures.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index a71fdf164449..3c7c647e8a6b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -518,7 +518,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( vertex_measures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u, x); + vertex_measures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u); if (is_principal_curvatures_and_directions_selected) { @@ -594,7 +594,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( vertex_measures.mean_curvature_measure += f_ratio * interpolated_corrected_mean_curvature_measure_face(u, x); if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += f_ratio * interpolated_corrected_gaussian_curvature_measure_face(u, x); + vertex_measures.gaussian_curvature_measure += f_ratio * interpolated_corrected_gaussian_curvature_measure_face(u); if (is_principal_curvatures_and_directions_selected) { From 6a7e7d267ebf9be9eedd306ce311b7c0d5c7dc2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 31 Jan 2023 11:56:48 +0100 Subject: [PATCH 117/943] fix link --- .../interpolated_corrected_curvatures.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 3c7c647e8a6b..88110842b67d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1273,11 +1273,11 @@ template Date: Tue, 31 Jan 2023 12:06:10 +0100 Subject: [PATCH 118/943] remove unused variable --- .../demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index f515c7c12e08..c4c7d6a3c916 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -839,7 +839,7 @@ private Q_SLOTS: } - double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2; + double outMax = 5 * maxEdgeLength, base = 1.2; expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); From e71fcd899a44a07a53d65fbdf976d6224141fd0c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 2 Feb 2023 02:15:34 +0200 Subject: [PATCH 119/943] removed unused enum --- .../interpolated_corrected_curvatures.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 88110842b67d..7adc37f0b4a2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -92,12 +92,6 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) { return avg_edge_length; } -enum Curvature_measure_index { - MU0_AREA_MEASURE, ///< corrected area density - MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density - MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density -}; - template struct Vertex_measures { typename GT::FT area_measure = 0; From fcbc89b50314db6f17508bcc8a63046c18c910fc Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:07:20 +0200 Subject: [PATCH 120/943] added comments for clarity --- .../interpolated_corrected_curvatures.h | 63 +++++++++++++++---- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 7adc37f0b4a2..952a7e749ecf 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -118,7 +118,7 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector interpolated_corrected_anisotropic_measure_fa muXY[ix * 3 + iy] = 0.5 * um * (cross_product(u02[iy] * X, x01) - cross_product(u01[iy] * X, x02)); } } - // Quad: use bilinear interpolation formula + // Quad: use the bilinear interpolation formula else if (n == 4) { // for the formulas below, values of verices 2 & 3 are swapped (compared to paper) to correct order. @@ -412,6 +412,7 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, std::accumulate(x.begin(), x.end(), typename GT::Vector_3(0, 0, 0)); xm /= static_cast(n); + // computing squared distance of furthest and closest point to ball center typename GT::FT d_min = (xm - c).squared_length(); typename GT::FT d_max = d_min; @@ -422,12 +423,14 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, d_min = (std::min)(d_sq, d_min); } + // if the furthest point is inside ball, return 1 if (d_max <= r * r) return 1.0; + // if the closest point is outside ball, return 0 else if (r * r <= d_min) return 0.0; + // else, approximate inclusion ratio of the triangle: d_max = sqrt(d_max); d_min = sqrt(d_min); - return (r - d_min) / (d_max - d_min); } @@ -438,17 +441,22 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from const typename GT::Vector_3 u_GT ) { + // putting anisotropic measure in matrix form Eigen::Matrix v_muXY = Eigen::Matrix::Zero(); for (std::size_t ix = 0; ix < 3; ix++) for (std::size_t iy = 0; iy < 3; iy++) v_muXY(ix, iy) = anisotropic_measure[ix * 3 + iy]; + // constant factor K to force the principal direction eigenvectors to be tangential to the surface Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); const typename GT::FT K = 1000 * v_mu0; + // symmetrizing and adding the constant term v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); + + // computing eigenvalues and eigenvectors Eigen::SelfAdjointEigenSolver> eigensolver; eigensolver.computeDirect(v_muXY); @@ -462,6 +470,7 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from const typename GT::Vector_3 min_eig_vec(eig_vecs(0, 1), eig_vecs(1, 1), eig_vecs(2, 1)); const typename GT::Vector_3 max_eig_vec(eig_vecs(0, 0), eig_vecs(1, 0), eig_vecs(2, 0)); + // returning principal curvatures and directions (with the correct sign) return Principal_curvatures_and_directions( (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, @@ -470,6 +479,7 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from ); } +// measures are computed for faces only if they are adjacent to the vertex template Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( const PolygonMesh& pmesh, @@ -495,9 +505,11 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( std::vector x; std::vector u; + // compute for each face around the vertex (except the null (boundary) face) for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f != boost::graph_traits::null_face()) { + // looping over vertices in face to get point coordinates and normal vectors for (Vertex_descriptor vi : vertices_around_face(halfedge(f, pmesh), pmesh)) { Point_3 pi = get(vpm, vi); @@ -506,6 +518,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( u.push_back(ui); } + // compute measures for selected curvatures (area is always computed) vertex_measures.area_measure += interpolated_corrected_area_measure_face(u, x); if (is_mean_curvature_selected) @@ -528,7 +541,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( return vertex_measures; } - +// measures are computed for faces only if they are in the ball of radius 'radius' centered at the vertex template Vertex_measures interpolated_corrected_measures_one_vertex( const PolygonMesh& pmesh, @@ -547,6 +560,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( typedef typename GT::Vector_3 Vector_3; typedef typename GT::FT FT; + // the ball expansion is done using a BFS traversal from the vertex std::queue bfs_queue; std::unordered_set bfs_visited; @@ -568,8 +582,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( Face_descriptor fi = bfs_queue.front(); bfs_queue.pop(); - // looping over vertices in face to get point coordinates - + // looping over vertices in face to get point coordinates and normal vectors for (Vertex_descriptor vi : vertices_around_face(halfedge(fi, pmesh), pmesh)) { Point_3 pi = get(vpm, vi); @@ -578,8 +591,11 @@ Vertex_measures interpolated_corrected_measures_one_vertex( u.push_back(ui); } + // approximate inclusion ratio of the face in the ball const FT f_ratio = face_in_ball_ratio(x, radius, c); + // if it is not 0 (not completely outside), compute measures for selected curvatures (area is always computed) + // and add neighboring faces to the bfs queue if (f_ratio != 0.0) { vertex_measures.area_measure += f_ratio * interpolated_corrected_area_measure_face(u, x); @@ -613,6 +629,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( return vertex_measures; } +// computes selected curvatures for one specific vertex template void interpolated_corrected_curvatures_one_vertex( @@ -640,23 +657,29 @@ template::value) compute_vertex_normals(pmesh, vnm, np); + // if no radius is given, we pass -1 which will make the expansion be only on the incident faces instead of a ball typename GT::FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + // if the radius is 0, we use a small epsilon to expand the ball (scaled with the average edge length) if (radius == 0) radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + // get parameters (pointers) for curvatures typename GT::FT* vertex_mean_curvature = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature), nullptr); typename GT::FT* vertex_gaussian_curvature = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature), nullptr); Principal_curvatures_and_directions* vertex_principal_curvatures_and_directions = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions), nullptr); + // determine which curvatures are selected (by checking if the pointers are not null) const bool is_mean_curvature_selected = (vertex_mean_curvature != nullptr); const bool is_gaussian_curvature_selected = (vertex_gaussian_curvature != nullptr); const bool is_principal_curvatures_and_directions_selected = (vertex_principal_curvatures_and_directions != nullptr); Vertex_measures vertex_measures; + // if the radius is negative, we do not expand the ball (only the incident faces) if (radius < 0) { vertex_measures = interpolated_corrected_measures_one_vertex_no_radius( @@ -683,6 +706,7 @@ template principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, @@ -783,11 +808,14 @@ class Interpolated_corrected_curvatures_computer vnm = choose_parameter(get_parameter(np, internal_np::vertex_normal_map), get(Vector_map_tag(), pmesh)); + // if no normal map is given, compute normals if (is_default_parameter::value) compute_vertex_normals(pmesh, vnm, np); + // if no radius is given, we pass -1 which will make the expansion be only on the incident faces instead of a ball const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + // check which curvature maps are provided by the user (determines which curvatures are computed) is_mean_curvature_selected = !is_default_parameter::value; is_gaussian_curvature_selected = !is_default_parameter::value; is_principal_curvatures_and_directions_selected = !is_default_parameter::value; @@ -800,6 +828,7 @@ class Interpolated_corrected_curvatures_computer } void set_ball_radius(const FT radius) { + // if given radius is 0, we use a small epsilon to expand the ball (scaled by the average edge length) if (radius == 0) ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; else @@ -825,6 +854,8 @@ class Interpolated_corrected_curvatures_computer private: + // Computes the (selected) interpolated corrected measures for all faces + // and stores them in the property maps void interpolated_corrected_selected_measures_all_faces() { std::vector x; @@ -854,14 +885,17 @@ class Interpolated_corrected_curvatures_computer } } + // expand the measures of the faces incident to v Vertex_measures expand_interpolated_corrected_measure_vertex_no_radius(Vertex_descriptor v) { Vertex_measures vertex_measures; + // add the measures of the faces incident to v (excluding the null (boundary) face) for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f == boost::graph_traits::null_face()) continue; + // only add the measures for the selected curvatures (area measure is always added) vertex_measures.area_measure += get(mu0_map, f); if (is_mean_curvature_selected) @@ -881,8 +915,10 @@ class Interpolated_corrected_curvatures_computer return vertex_measures; } + // expand the measures of the faces inside the ball of radius r around v Vertex_measures expand_interpolated_corrected_measure_vertex(Vertex_descriptor v) { + // the ball expansion is done using a BFS traversal from the vertex std::queue bfs_queue; std::unordered_set bfs_visited; @@ -891,6 +927,7 @@ class Interpolated_corrected_curvatures_computer Vertex_measures vertex_measures; + // add the measures of the faces incident to v (excluding the null (boundary) face) for (Face_descriptor f : faces_around_target(halfedge(v, pmesh), pmesh)) { if (f != boost::graph_traits::null_face()) { @@ -910,8 +947,11 @@ class Interpolated_corrected_curvatures_computer x.push_back(Vector_3(pi.x(), pi.y(), pi.z())); } + // compute the inclusion ratio of the face in the ball const FT f_ratio = face_in_ball_ratio(x, ball_radius, c); + // if the face is inside the ball, add the measures + // only add the measures for the selected curvatures (area measure is always added) if (f_ratio != 0.0) { vertex_measures.area_measure += f_ratio * get(mu0_map, fi); @@ -947,10 +987,13 @@ class Interpolated_corrected_curvatures_computer for (Vertex_descriptor v : vertices(pmesh)) { + // expand the computed measures (on faces) to the vertices Vertex_measures vertex_measures = (ball_radius < 0) ? expand_interpolated_corrected_measure_vertex_no_radius(v) : expand_interpolated_corrected_measure_vertex(v); + // compute the selected curvatures from the expanded measures and store them in the property maps + // if the area measure is zero, the curvature is set to zero if (is_mean_curvature_selected) { vertex_measures.area_measure != 0 ? put(mean_curvature_map, v, 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure) : @@ -964,6 +1007,7 @@ class Interpolated_corrected_curvatures_computer } if (is_principal_curvatures_and_directions_selected) { + // compute the principal curvatures and directions from the anisotropic measure const Vector_3 v_normal = get(vnm, v); const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, @@ -1402,7 +1446,6 @@ template::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_one_vertex to compute mean curvature typename GT::FT mean_curvature; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); return mean_curvature; @@ -1468,7 +1511,6 @@ template::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_one_vertex to compute gaussian curvature typename GT::FT gc; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); return gc; @@ -1533,7 +1575,6 @@ template::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { - // use interpolated_corrected_curvatures_one_vertex to compute principal curvatures Principal_curvatures_and_directions pcd; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); return pcd; From ec4312695a5136411b53ae572f9445fd7e385983 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:23:50 +0200 Subject: [PATCH 121/943] remove unused var + minor change --- .../interpolated_corrected_curvatures.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 952a7e749ecf..b298f8cf495f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -497,9 +497,6 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( typedef typename GT::Vector_3 Vector_3; typedef typename GT::FT FT; - std::queue bfs_queue; - std::unordered_set bfs_visited; - Vertex_measures vertex_measures; std::vector x; @@ -814,6 +811,7 @@ class Interpolated_corrected_curvatures_computer // if no radius is given, we pass -1 which will make the expansion be only on the incident faces instead of a ball const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + set_ball_radius(radius); // check which curvature maps are provided by the user (determines which curvatures are computed) is_mean_curvature_selected = !is_default_parameter::value; @@ -823,8 +821,6 @@ class Interpolated_corrected_curvatures_computer mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); principal_curvatures_and_directions_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions_map), Default_principal_map()); - - set_ball_radius(radius); } void set_ball_radius(const FT radius) { From 2260c4fab3756034d8fd80b1bbd7f079cae0b698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 3 Feb 2023 10:39:58 +0100 Subject: [PATCH 122/943] more than one curve can be on the left of an event with overlapping curves on the right --- .../Surface_sweep_2/Surface_sweep_2_impl.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Surface_sweep_2/include/CGAL/Surface_sweep_2/Surface_sweep_2_impl.h b/Surface_sweep_2/include/CGAL/Surface_sweep_2/Surface_sweep_2_impl.h index de98db8e9a03..41d961803103 100644 --- a/Surface_sweep_2/include/CGAL/Surface_sweep_2/Surface_sweep_2_impl.h +++ b/Surface_sweep_2/include/CGAL/Surface_sweep_2/Surface_sweep_2_impl.h @@ -110,19 +110,28 @@ void Surface_sweep_2::_handle_left_curves() this->m_currentEvent->push_back_curve_to_right(sc); } else { - this->m_currentEvent->push_back_curve_to_left(sc); this->m_currentEvent->set_weak_intersection(); - this->m_visitor->update_event(this->m_currentEvent, sc); - _add_curve_to_right(this->m_currentEvent, sc); + auto status_line_it = this->m_status_line_insert_hint; + do{ + this->m_currentEvent->push_back_curve_to_left(sc); + this->m_visitor->update_event(this->m_currentEvent, sc); + _add_curve_to_right(this->m_currentEvent, sc); + ++status_line_it; + if (status_line_it==this->m_statusLine.end()) break; + if (this->m_statusLineCurveLess(this->m_currentEvent->point(), *status_line_it)!=EQUAL) + break; + sc = *status_line_it; + } + while(true); // the loop is only needed in case there are overlapping curve in right curves } - // sc is now on the left + // some subcurves have been addded on the left CGAL_SS_PRINT_TEXT("Event after update:"); CGAL_SS_PRINT_EOL(); CGAL_SS_PRINT_EVENT_INFO(this->m_currentEvent); CGAL_SS_PRINT_EOL(); CGAL_assertion(std::distance(this->m_currentEvent->left_curves_begin(), - this->m_currentEvent->left_curves_end())==1); + this->m_currentEvent->left_curves_end())!=0); } else { // The event is not located on any subcurve. From 19fd037731d50f20e703c6dddc9997441bad9d06 Mon Sep 17 00:00:00 2001 From: David Coeurjolly Date: Mon, 20 Feb 2023 11:20:07 +0100 Subject: [PATCH 123/943] Minor API doc edits --- .../interpolated_corrected_curvatures.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index b298f8cf495f..ea01b0fe4c34 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1022,8 +1022,8 @@ class Interpolated_corrected_curvatures_computer * \ingroup PMP_corrected_curvatures_grp * * Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. -* By providing mean, gaussian and/or principal curvature property maps as named parameters, the user -* can choose which curvatures to compute. +* By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user +* can choose which quantites to compute. * * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". @@ -1039,7 +1039,7 @@ class Interpolated_corrected_curvatures_computer * `boost::graph_traits::%Vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for +* \cgalParamExtra{If this parameter is omitted, an internal property map forBy * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * @@ -1301,9 +1301,10 @@ template Date: Wed, 22 Mar 2023 18:13:27 +0100 Subject: [PATCH 124/943] first pass on the API --- .../Polygon_mesh_processing.txt | 2 +- ...terpolated_corrected_curvatures_vertex.cpp | 7 +- .../interpolated_corrected_curvatures.h | 695 ++++++++++-------- 3 files changed, 386 insertions(+), 318 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 1da140d96791..2eb85a80bfbb 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -1166,7 +1166,7 @@ is covered by a set of prisms, where each prism is an offset for an input triang That is, the implementation in \cgal does not use indirect predicates. The interpolated corrected curvatures were implemented during GSoC 2022. This was implemented by Hossam Saeed and under -supervision of Sebastien Loriot, Jaques-Olivier Lachaud and David Coeurjolly. The implementation is based on \cgalCite{lachaud2020}. +supervision of David Coeurjolly, Jaques-Olivier Lachaud, and Sébastien Loriot. The implementation is based on \cgalCite{lachaud2020}. DGtal's implementation was also used as a reference during the project. diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp index 47fbcfd68711..e5845a1b3a5a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp @@ -10,7 +10,6 @@ namespace PMP = CGAL::Polygon_mesh_processing; typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; -typedef Epic_kernel::FT FT; typedef CGAL::Surface_mesh Surface_Mesh; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; @@ -31,10 +30,10 @@ int main(int argc, char* argv[]) // loop over vertices and use vertex_descriptor to compute a curvature on one vertex for (vertex_descriptor v : vertices(smesh)) { - FT h = PMP::interpolated_corrected_mean_curvature_one_vertex(smesh, v); - FT g = PMP::interpolated_corrected_gaussian_curvature_one_vertex(smesh, v); + double h = PMP::interpolated_corrected_mean_curvature_one_vertex(smesh, v); + double g = PMP::interpolated_corrected_gaussian_curvature_one_vertex(smesh, v); PMP::Principal_curvatures_and_directions p = - PMP::interpolated_corrected_principal_curvatures_and_directions_one_vertex(smesh, v); + PMP::interpolated_corrected_principal_curvatures_and_directions_one_vertex(smesh, v); // we can also specify a ball radius for expansion and a user defined vertex normals map using // named parameters. Refer to interpolated_corrected_curvatures_SM.cpp to see example usage. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index ea01b0fe4c34..24c1d12a59e3 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -28,8 +28,6 @@ #include #include -#define EXPANDING_RADIUS_EPSILON 1e-6 - namespace CGAL { namespace Polygon_mesh_processing { @@ -39,7 +37,7 @@ namespace Polygon_mesh_processing { * * \brief a struct for storing principal curvatures and directions. * - * @tparam GT is the geometric traits class. + * @tparam GT is the geometric traits class, model of `Kernel`. */ template struct Principal_curvatures_and_directions { @@ -662,7 +660,7 @@ template(pmesh) * EXPANDING_RADIUS_EPSILON; + radius = average_edge_length(pmesh) * 1e-6; // get parameters (pointers) for curvatures typename GT::FT* vertex_mean_curvature = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature), nullptr); @@ -826,7 +824,7 @@ class Interpolated_corrected_curvatures_computer void set_ball_radius(const FT radius) { // if given radius is 0, we use a small epsilon to expand the ball (scaled by the average edge length) if (radius == 0) - ball_radius = average_edge_length(pmesh) * EXPANDING_RADIUS_EPSILON; + ball_radius = average_edge_length(pmesh) * 1e-6; else ball_radius = radius; } @@ -1021,7 +1019,7 @@ class Interpolated_corrected_curvatures_computer /** * \ingroup PMP_corrected_curvatures_grp * -* Computes the interpolated corrected curvatures across the mesh, based on the provided property maps. +* computes the interpolated corrected curvatures across the mesh `pmesh`. * By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * @@ -1029,66 +1027,70 @@ class Interpolated_corrected_curvatures_computer * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below. +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map forBy +* \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_mean_curvature_map} * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::FT` as value type} * \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_gaussian_curvature_map} * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%FT` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::FT` as value type} * \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} * \cgalParamNEnd * -* * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Principal_curvatures_and_directions` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t>(), pmesh)`} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `Principal_curvatures_and_directions` as value type} * \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} -* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* \cgalParamDescription{a strictly positive scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their * inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} -* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion is then just a sum of * measures on faces around the vertex} * \cgalParamNEnd * @@ -1099,9 +1101,9 @@ class Interpolated_corrected_curvatures_computer * @see `interpolated_corrected_principal_curvatures_and_directions()` */ template - void interpolated_corrected_curvatures(const PolygonMesh& pmesh, - const NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> +void interpolated_corrected_curvatures(const PolygonMesh& pmesh, + const NamedParameters& np = parameters::default_values()) { internal::Interpolated_corrected_curvatures_computer(pmesh, np); } @@ -1109,25 +1111,25 @@ template::%Vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam VertexCurvatureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. * @param vcm the vertex property map in which the computed mean curvatures are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} @@ -1136,11 +1138,18 @@ template::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1162,10 +1171,10 @@ template - void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - const NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> +void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, + VertexCurvatureMap vcm, + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_mean_curvature_map(vcm)); } @@ -1173,24 +1182,24 @@ template::%Vertex_descriptor` as key type and `GT::FT` as value type. +* @tparam VertexCurvatureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. * @param vcm the vertex property map in which the computed gaussian curvatures are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` +* `boost::graph_traits::%vertex_descriptor` * as key type and `%Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for @@ -1199,12 +1208,19 @@ template::%Vertex_descriptor` +* \cgalParamType{a class model of `GT::ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` * as key type and `%Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1225,10 +1241,10 @@ template - void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - const NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> +void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, + VertexCurvatureMap vcm, + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); } @@ -1236,26 +1252,26 @@ template::%Vertex_descriptor` as key type and -* `%Principal_curvatures_and_directions` as value type. +* @tparam VertexCurvatureMap a model of `WritablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` as key type and +* `Principal_curvatures_and_directions` as value type. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. * @param vcm the vertex property map in which the computed principal curvatures are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} * \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%Vertex_descriptor` -* as key type and `%Point_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} @@ -1264,11 +1280,18 @@ template::%Vertex_descriptor` -* as key type and `%Vector_3` as value type} +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1289,289 +1312,335 @@ template - void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, - VertexCurvatureMap& vcm, - const NamedParameters& np = parameters::default_values()) +typename NamedParameters = parameters::Default_named_parameters> +void interpolated_corrected_principal_curvatures_and_directions(const PolygonMesh& pmesh, + VertexCurvatureMap vcm, + const NamedParameters& np = parameters::default_values()) { interpolated_corrected_curvatures(pmesh, np.vertex_principal_curvatures_and_directions_map(vcm)); } /** - * \ingroup PMP_corrected_curvatures_grp - * Computes the interpolated corrected curvatures at a certain vertex, based on the provided pointers. - * By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user - * can choose which quantites to compute. - * - * The pointers are used to store the computed quantities. - * The user is responsible for the memory management of the pointers. - * - * @tparam PolygonMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" - * - * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the curvatures at - * @param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - * - * \cgalNamedParamsBegin - * \cgalParamNBegin{vertex_point_map} - * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Point_3` as value type} - * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} - * \cgalParamExtra{If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_normal_map} - * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Vector_3` as value type} - * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} - * \cgalParamExtra{If this parameter is omitted, vertex normals will be - * computed using compute_vertex_normals()} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_mean_curvature} - * \cgalParamDescription{a pointer to a scalar value to store the mean curvature at the vertex `v`} - * \cgalParamType{`GT::FT*`} - * \cgalParamDefault{`nullptr`} - * \cgalParamExtra{If this parameter is omitted, mean curvature won't be computed} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_gaussian_curvature} - * \cgalParamDescription{a pointer to a scalar value to store the gaussian curvature at the vertex `v`} - * \cgalParamType{`GT::FT*`} - * \cgalParamDefault{`nullptr`} - * \cgalParamExtra{If this parameter is omitted, gaussian curvature won't be computed} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_principal_curvatures_and_directions} - * \cgalParamDescription{a pointer to a Principal_curvatures_and_directions object to store the principal curvatures and directions at the vertex `v`} - * \cgalParamType{`Principal_curvatures_and_directions*`} - * \cgalParamDefault{`nullptr`} - * \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} - * \cgalParamNEnd - * - * \cgalParamNBegin{ball_radius} - * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures - * by summing measures of faces inside a ball of this radius centered at the - * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball.} - * \cgalParamType{`GT::FT`} - * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of - * measures on faces around the vertex} - * \cgalParamNEnd - * - * \cgalNamedParamsEnd - * - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` - * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` +* \ingroup PMP_corrected_curvatures_grp +* computes the interpolated corrected curvatures at a certain vertex, based on the provided pointers. +* By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user +* can choose which quantites to compute. +* +* The pointers are used to store the computed quantities. +* The user is responsible for the memory management of the pointers. +* +* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param v the vertex of `pmesh` to compute the curvatures at +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_mean_curvature} +* \cgalParamDescription{a pointer to a scalar value to store the mean curvature at the vertex `v`} +* \cgalParamType{`GT::FT*`} +* \cgalParamDefault{`nullptr`} +* \cgalParamExtra{If this parameter is omitted, mean curvature won't be computed} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_gaussian_curvature} +* \cgalParamDescription{a pointer to a scalar value to store the gaussian curvature at the vertex `v`} +* \cgalParamType{`GT::FT*`} +* \cgalParamDefault{`nullptr`} +* \cgalParamExtra{If this parameter is omitted, gaussian curvature won't be computed} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_principal_curvatures_and_directions} +* \cgalParamDescription{a pointer to a Principal_curvatures_and_directions object to store the principal curvatures and directions at the vertex `v`} +* \cgalParamType{`Principal_curvatures_and_directions*`} +* \cgalParamDefault{`nullptr`} +* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball.} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` +* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` +* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` */ template - void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, - typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) + typename NamedParameters = parameters::Default_named_parameters> +void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) { internal::interpolated_corrected_curvatures_one_vertex(pmesh, v, np); } /** - * \ingroup PMP_corrected_curvatures_grp - * computes the interpolated corrected mean curvature at a vertex of a triangle mesh. - * - * @tparam GT a geometric traits class that provides the nested type `FT`, - * @tparam PolygonMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" - * - * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the mean curvature at - * @param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - * - * \cgalNamedParamsBegin - * \cgalParamNBegin{vertex_point_map} - * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Point_3` as value type} - * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} - * \cgalParamExtra{If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_normal_map} - * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Vector_3` as value type} - * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} - * \cgalParamExtra{If this parameter is omitted, vertex normals will be - * computed using compute_vertex_normals()} - * \cgalParamNEnd - * - * \cgalParamNBegin{ball_radius} - * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures - * by summing measures of faces inside a ball of this radius centered at the - * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball} - * \cgalParamType{`GT::FT`} - * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of - * measures on faces around the vertex} - * \cgalParamNEnd - * - * \cgalNamedParamsEnd - * - * @return the interpolated corrected mean curvature at the vertex `v` - * - * @see `interpolated_corrected_mean_curvature()` - * @see `interpolated_corrected_gaussian_curvature_one_vertex()` - * @see `interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - * @see `interpolated_corrected_curvatures_one_vertex()` +* \ingroup PMP_corrected_curvatures_grp +* computes the interpolated corrected mean curvature at a vertex of a triangle mesh. +* +* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param v the vertex of `pmesh` to compute the mean curvature at +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @return the interpolated corrected mean curvature at the vertex `v` +* +* @see `interpolated_corrected_mean_curvature()` +* @see `interpolated_corrected_gaussian_curvature_one_vertex()` +* @see `interpolated_corrected_principal_curvatures_and_directions_one_vertex()` +* @see `interpolated_corrected_curvatures_one_vertex()` */ -template - typename GT::FT interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, - typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) +template +#ifdef DOXYGEN_RUNNING +typename GT::FT +#else +typename GetGeomTraits::type::FT +#endif +interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) { - typename GT::FT mean_curvature; + typename GetGeomTraits::type::FT mean_curvature; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); return mean_curvature; } /** - * \ingroup PMP_corrected_curvatures_grp - * computes the interpolated corrected Gaussian curvature at a vertex of a triangle mesh. - * - * @tparam GT a geometric traits class that provides the nested type `FT`, - * @tparam PolygonMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" - * - * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the Gaussian curvature at - * @param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - * - * \cgalNamedParamsBegin - * \cgalParamNBegin{vertex_point_map} - * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Point_3` as value type} - * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} - * \cgalParamExtra{If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_normal_map} - * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Vector_3` as value type} - * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} - * \cgalParamExtra{If this parameter is omitted, vertex normals will be - * computed using compute_vertex_normals()} - * \cgalParamNEnd - * - * \cgalParamNBegin{ball_radius} - * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures - * by summing measures of faces inside a ball of this radius centered at the - * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball} - * \cgalParamType{`GT::FT`} - * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of - * measures on faces around the vertex} - * \cgalParamNEnd - * - * \cgalNamedParamsEnd - * - * @return the interpolated corrected Gaussian curvature at the vertex `v` - * - * @see `interpolated_corrected_gaussian_curvature()` - * @see `interpolated_corrected_mean_curvature_one_vertex()` - * @see `interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - * @see `interpolated_corrected_curvatures_one_vertex()` +* \ingroup PMP_corrected_curvatures_grp +* computes the interpolated corrected Gaussian curvature at a vertex of a triangle mesh. +* +* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param v the vertex of `pmesh` to compute the Gaussian curvature at +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `GT::Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* @return the interpolated corrected Gaussian curvature at the vertex `v` +* +* @see `interpolated_corrected_gaussian_curvature()` +* @see `interpolated_corrected_mean_curvature_one_vertex()` +* @see `interpolated_corrected_principal_curvatures_and_directions_one_vertex()` +* @see `interpolated_corrected_curvatures_one_vertex()` */ -template - typename GT::FT interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, - typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) +#ifdef DOXYGEN_RUNNING +typename GT::FT +#else +typename GetGeomTraits::type::FT +#endif +interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) { - typename GT::FT gc; + typename GetGeomTraits::type::FT gc; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); return gc; } /** - * \ingroup PMP_corrected_curvatures_grp - * computes the interpolated corrected principal curvatures and directions at a vertex of a triangle mesh. - * - * @tparam GT the geometric traits class, - * @tparam PolygonMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" - * - * @param pmesh the polygon mesh - * @param v the vertex of `pmesh` to compute the principal curvatures and directions at - * @param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - * - * \cgalNamedParamsBegin - * \cgalParamNBegin{vertex_point_map} - * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Point_3` as value type} - * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} - * \cgalParamExtra{If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} - * \cgalParamNEnd - * - * \cgalParamNBegin{vertex_normal_map} - * \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} - * \cgalParamType{a class model of `ReadablePropertyMap` with - * `boost::graph_traits::%Vertex_descriptor` - * as key type and `%Vector_3` as value type} - * \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} - * \cgalParamExtra{If this parameter is omitted, vertex normals will be - * computed using compute_vertex_normals()} - * \cgalParamNEnd - * - * \cgalParamNBegin{ball_radius} - * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures - * by summing measures of faces inside a ball of this radius centered at the - * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball} - * \cgalParamType{`GT::FT`} - * \cgalParamDefault{`-1`} - * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of - * measures on faces around the vertex} - * \cgalParamNEnd - * \cgalNamedParamsEnd - * - * @return the interpolated corrected principal curvatures and directions at the vertex `v` - * - * @see `interpolated_corrected_principal_curvatures_and_directions()` - * @see `interpolated_corrected_mean_curvature_one_vertex()` - * @see `interpolated_corrected_gaussian_curvature_one_vertex()` - * @see `interpolated_corrected_curvatures_one_vertex()` +* \ingroup PMP_corrected_curvatures_grp +* computes the interpolated corrected principal curvatures and directions at a vertex of a triangle mesh. +* +* @tparam PolygonMesh a model of `FaceListGraph` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param pmesh the polygon mesh +* @param v the vertex of `pmesh` to compute the principal curvatures and directions at +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* `GT` stands for the type of the object provided to the named parameter `geom_traits()`. +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for +* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_normal_map} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with +* `boost::graph_traits::%vertex_descriptor` +* as key type and `%Vector_3` as value type} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* \cgalParamExtra{If this parameter is omitted, vertex normals will be +* computed using `compute_vertex_normals()`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{ball_radius} +* \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures +* by summing measures of faces inside a ball of this radius centered at the +* vertex expanded from. The summed face measures are weighted by their +* inclusion ratio inside this ball} +* \cgalParamType{`GT::FT`} +* \cgalParamDefault{`-1`} +* \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of +* measures on faces around the vertex} +* \cgalParamNEnd +* \cgalNamedParamsEnd +* +* @return the interpolated corrected principal curvatures and directions at the vertex `v` +* +* @see `interpolated_corrected_principal_curvatures_and_directions()` +* @see `interpolated_corrected_mean_curvature_one_vertex()` +* @see `interpolated_corrected_gaussian_curvature_one_vertex()` +* @see `interpolated_corrected_curvatures_one_vertex()` */ -template - Principal_curvatures_and_directions interpolated_corrected_principal_curvatures_and_directions_one_vertex(const PolygonMesh& pmesh, - typename boost::graph_traits::vertex_descriptor v, - const NamedParameters& np = parameters::default_values()) +template +#ifdef DOXYGEN_RUNNING +Principal_curvatures_and_directions +#else +Principal_curvatures_and_directions::type> +#endif +interpolated_corrected_principal_curvatures_and_directions_one_vertex(const PolygonMesh& pmesh, + typename boost::graph_traits::vertex_descriptor v, + const NamedParameters& np = parameters::default_values()) { + using GT=typename GetGeomTraits::type; Principal_curvatures_and_directions pcd; interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); return pcd; From 5ef5d67920724435a903a932866b9525260125a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 22 Mar 2023 18:40:44 +0100 Subject: [PATCH 125/943] do not use pointers --- .../interpolated_corrected_curvatures.h | 75 +++++++++---------- ...test_interpolated_corrected_curvatures.cpp | 6 +- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 24c1d12a59e3..cc898d2fc943 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -624,6 +624,16 @@ Vertex_measures interpolated_corrected_measures_one_vertex( return vertex_measures; } +template +void set_value(const T& value, std::reference_wrapper rw) +{ + rw.get()=value; +} + +template +void set_value(const T&, internal_np::Param_not_found) +{} + // computes selected curvatures for one specific vertex template @@ -662,15 +672,10 @@ template(pmesh) * 1e-6; - // get parameters (pointers) for curvatures - typename GT::FT* vertex_mean_curvature = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature), nullptr); - typename GT::FT* vertex_gaussian_curvature = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature), nullptr); - Principal_curvatures_and_directions* vertex_principal_curvatures_and_directions = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions), nullptr); - - // determine which curvatures are selected (by checking if the pointers are not null) - const bool is_mean_curvature_selected = (vertex_mean_curvature != nullptr); - const bool is_gaussian_curvature_selected = (vertex_gaussian_curvature != nullptr); - const bool is_principal_curvatures_and_directions_selected = (vertex_principal_curvatures_and_directions != nullptr); + // determine which curvatures are selected + const bool is_mean_curvature_selected = !is_default_parameter::value; + const bool is_gaussian_curvature_selected = !is_default_parameter::value; + const bool is_principal_curvatures_and_directions_selected = !is_default_parameter::value; Vertex_measures vertex_measures; @@ -703,13 +708,13 @@ template principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, - v_normal - ); - *vertex_principal_curvatures_and_directions = principal_curvatures_and_directions; + v_normal); + set_value(principal_curvatures_and_directions, get_parameter(np, internal_np::vertex_principal_curvatures_and_directions)); } } @@ -1064,7 +1068,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `GT::FT` as value type} -* \cgalParamExtra{If this parameter is omitted, mean curvatures won't be computed} +* \cgalParamExtra{If this parameter is omitted, mean curvatures will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_gaussian_curvature_map} @@ -1072,7 +1076,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `GT::FT` as value type} -* \cgalParamExtra{If this parameter is omitted, gaussian curvatures won't be computed} +* \cgalParamExtra{If this parameter is omitted, gaussian curvatures will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} @@ -1080,7 +1084,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `Principal_curvatures_and_directions` as value type} -* \cgalParamExtra{If this parameter is omitted, mean principal won't be computed} +* \cgalParamExtra{If this parameter is omitted, mean principal will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1323,13 +1327,10 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes /** * \ingroup PMP_corrected_curvatures_grp -* computes the interpolated corrected curvatures at a certain vertex, based on the provided pointers. +* computes the interpolated corrected curvatures at a vertex `v`. * By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * -* The pointers are used to store the computed quantities. -* The user is responsible for the memory management of the pointers. -* * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * @@ -1359,7 +1360,6 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * computed using `compute_vertex_normals()`} * \cgalParamNEnd * -* * \cgalParamNBegin{geom_traits} * \cgalParamDescription{an instance of a geometric traits class} * \cgalParamType{a class model of `Kernel`} @@ -1368,24 +1368,21 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * \cgalParamNEnd * * \cgalParamNBegin{vertex_mean_curvature} -* \cgalParamDescription{a pointer to a scalar value to store the mean curvature at the vertex `v`} -* \cgalParamType{`GT::FT*`} -* \cgalParamDefault{`nullptr`} -* \cgalParamExtra{If this parameter is omitted, mean curvature won't be computed} +* \cgalParamDescription{a reference to a scalar value to store the mean curvature at the vertex `v`} +* \cgalParamType{`std::reference_wrapper`} +* \cgalParamExtra{If this parameter is omitted, mean curvature will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_gaussian_curvature} -* \cgalParamDescription{a pointer to a scalar value to store the gaussian curvature at the vertex `v`} -* \cgalParamType{`GT::FT*`} -* \cgalParamDefault{`nullptr`} -* \cgalParamExtra{If this parameter is omitted, gaussian curvature won't be computed} +* \cgalParamDescription{a reference to a scalar value to store the gaussian curvature at the vertex `v`} +* \cgalParamType{`std::reference_wrapper`} +* \cgalParamExtra{If this parameter is omitted, gaussian curvature will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions} -* \cgalParamDescription{a pointer to a Principal_curvatures_and_directions object to store the principal curvatures and directions at the vertex `v`} -* \cgalParamType{`Principal_curvatures_and_directions*`} -* \cgalParamDefault{`nullptr`} -* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions won't be computed} +* \cgalParamDescription{a reference to an`Principal_curvatures_and_directions` object to store the principal curvatures and directions at the vertex `v`} +* \cgalParamType{`std::reference_wrapper>`} +* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1488,7 +1485,7 @@ interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, const NamedParameters& np = parameters::default_values()) { typename GetGeomTraits::type::FT mean_curvature; - interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_mean_curvature(&mean_curvature)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_mean_curvature(std::ref(mean_curvature))); return mean_curvature; } @@ -1565,7 +1562,7 @@ interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, const NamedParameters& np = parameters::default_values()) { typename GetGeomTraits::type::FT gc; - interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(&gc)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(std::ref(gc))); return gc; } @@ -1642,7 +1639,7 @@ interpolated_corrected_principal_curvatures_and_directions_one_vertex(const Poly { using GT=typename GetGeomTraits::type; Principal_curvatures_and_directions pcd; - interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(&pcd)); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_principal_curvatures_and_directions(std::ref(pcd))); return pcd; } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index c8d3894720cc..bd0594652206 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -165,9 +165,9 @@ void test_average_curvatures(std::string mesh_path, PMP::interpolated_corrected_curvatures_one_vertex( pmesh, v, - CGAL::parameters::vertex_gaussian_curvature(&g) - .vertex_mean_curvature(&h) - .vertex_principal_curvatures_and_directions(&p) + CGAL::parameters::vertex_gaussian_curvature(std::ref(g)) + .vertex_mean_curvature(std::ref(h)) + .vertex_principal_curvatures_and_directions(std::ref(p)) .ball_radius(test_info.expansion_radius) ); From 7f4597720eed4bc4c9c215668f99e02495357826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 22 Mar 2023 18:44:11 +0100 Subject: [PATCH 126/943] the mesh does not need to be triangulated --- .../interpolated_corrected_curvatures.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index cc898d2fc943..94a8533ca42b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1414,7 +1414,7 @@ void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, /** * \ingroup PMP_corrected_curvatures_grp -* computes the interpolated corrected mean curvature at a vertex of a triangle mesh. +* computes the interpolated corrected mean curvature at vertex `v` of mesh `pmesh`. * * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @@ -1491,7 +1491,7 @@ interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, /** * \ingroup PMP_corrected_curvatures_grp -* computes the interpolated corrected Gaussian curvature at a vertex of a triangle mesh. +* computes the interpolated corrected Gaussian curvature at vertex `v` of mesh `pmesh`. * * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @@ -1568,7 +1568,7 @@ interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, /** * \ingroup PMP_corrected_curvatures_grp -* computes the interpolated corrected principal curvatures and directions at a vertex of a triangle mesh. +* computes the interpolated corrected principal curvatures and directions at vertex `v` of mesh `pmesh`. * * @tparam PolygonMesh a model of `FaceListGraph` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" From 661513b16ee05509e00d0975213e928c75443dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 22 Mar 2023 19:12:28 +0100 Subject: [PATCH 127/943] gaussian -> Gaussian --- .../PackageDescription.txt | 4 +- .../Polygon_mesh_processing.txt | 4 +- .../interpolated_corrected_curvatures_PH.cpp | 2 +- .../interpolated_corrected_curvatures_SM.cpp | 2 +- ...terpolated_corrected_curvatures_vertex.cpp | 4 +- .../interpolated_corrected_curvatures.h | 76 +++++++++---------- ...test_interpolated_corrected_curvatures.cpp | 24 +++--- .../Display/Display_property_plugin.cpp | 10 +-- .../internal/parameters_interface.h | 4 +- 9 files changed, 65 insertions(+), 65 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 9cb257338a72..9c8b5d6f2948 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -209,11 +209,11 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. \cgalCRPSection{Corrected Curvatures} - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` - `CGAL::Polygon_mesh_processing::Principal_curvatures_and_directions` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 2eb85a80bfbb..65c236e99fc3 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -901,7 +901,7 @@ Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. These computations are performed using (on all vertices of mesh): - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` @@ -910,7 +910,7 @@ as the implementation performs the shared computations only once, making it more Similarly, we can use the following functions to compute curvatures on a specific vertex: - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp index 3cf675c53ca4..0e3923dc67b8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp @@ -38,7 +38,7 @@ int main(int argc, char* argv[]) polyhedron, mean_curvature_map); - PMP::interpolated_corrected_gaussian_curvature( + PMP::interpolated_corrected_Gaussian_curvature( polyhedron, gaussian_curvature_map); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp index d92ec7b8096d..811146dd6412 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp @@ -53,7 +53,7 @@ int main(int argc, char* argv[]) mean_curvature_map ); - PMP::interpolated_corrected_gaussian_curvature( + PMP::interpolated_corrected_Gaussian_curvature( smesh, gaussian_curvature_map ); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp index e5845a1b3a5a..c0722b25675a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp @@ -31,7 +31,7 @@ int main(int argc, char* argv[]) for (vertex_descriptor v : vertices(smesh)) { double h = PMP::interpolated_corrected_mean_curvature_one_vertex(smesh, v); - double g = PMP::interpolated_corrected_gaussian_curvature_one_vertex(smesh, v); + double g = PMP::interpolated_corrected_Gaussian_curvature_one_vertex(smesh, v); PMP::Principal_curvatures_and_directions p = PMP::interpolated_corrected_principal_curvatures_and_directions_one_vertex(smesh, v); @@ -48,7 +48,7 @@ int main(int argc, char* argv[]) // smesh, // v, // CGAL::parameters::vertex_mean_curvature(&h) - // .vertex_gaussian_curvature(&g) + // .vertex_Gaussian_curvature(&g) // ); std::cout << v.idx() << ": HC = " << h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 94a8533ca42b..bffd2657e96c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -222,7 +222,7 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve } template -typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u) +typename GT::FT interpolated_corrected_Gaussian_curvature_measure_face(const std::vector& u) { const std::size_t n = u.size(); CGAL_precondition(n >= 3); @@ -259,7 +259,7 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std // summing each triangle's measure after triangulation by barycenter split. for (std::size_t i = 0; i < n; i++) { - mu2 += interpolated_corrected_gaussian_curvature_measure_face( + mu2 += interpolated_corrected_Gaussian_curvature_measure_face( std::vector {u[i], u[(i + 1) % n], uc} ); } @@ -483,7 +483,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( const PolygonMesh& pmesh, const typename boost::graph_traits::vertex_descriptor v, const bool is_mean_curvature_selected, - const bool is_gaussian_curvature_selected, + const bool is_Gaussian_curvature_selected, const bool is_principal_curvatures_and_directions_selected, const VPM vpm, const VNM vnm @@ -519,8 +519,8 @@ Vertex_measures interpolated_corrected_measures_one_vertex_no_radius( if (is_mean_curvature_selected) vertex_measures.mean_curvature_measure += interpolated_corrected_mean_curvature_measure_face(u, x); - if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += interpolated_corrected_gaussian_curvature_measure_face(u); + if (is_Gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += interpolated_corrected_Gaussian_curvature_measure_face(u); if (is_principal_curvatures_and_directions_selected) { @@ -543,7 +543,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( const typename boost::graph_traits::vertex_descriptor v, const typename GT::FT radius, const bool is_mean_curvature_selected, - const bool is_gaussian_curvature_selected, + const bool is_Gaussian_curvature_selected, const bool is_principal_curvatures_and_directions_selected, const VPM vpm, const VNM vnm @@ -598,8 +598,8 @@ Vertex_measures interpolated_corrected_measures_one_vertex( if (is_mean_curvature_selected) vertex_measures.mean_curvature_measure += f_ratio * interpolated_corrected_mean_curvature_measure_face(u, x); - if (is_gaussian_curvature_selected) - vertex_measures.gaussian_curvature_measure += f_ratio * interpolated_corrected_gaussian_curvature_measure_face(u); + if (is_Gaussian_curvature_selected) + vertex_measures.gaussian_curvature_measure += f_ratio * interpolated_corrected_Gaussian_curvature_measure_face(u); if (is_principal_curvatures_and_directions_selected) { @@ -674,7 +674,7 @@ template::value; - const bool is_gaussian_curvature_selected = !is_default_parameter::value; + const bool is_Gaussian_curvature_selected = !is_default_parameter::value; const bool is_principal_curvatures_and_directions_selected = !is_default_parameter::value; Vertex_measures vertex_measures; @@ -686,7 +686,7 @@ template::type Vertex_mean_curvature_map; - typedef typename internal_np::Lookup_named_param_def::type Vertex_gaussian_curvature_map; + Default_scalar_map>::type Vertex_Gaussian_curvature_map; typedef Constant_property_map> Default_principal_map; typedef typename internal_np::Lookup_named_param_def::value; - is_gaussian_curvature_selected = !is_default_parameter::value; + is_Gaussian_curvature_selected = !is_default_parameter::value; is_principal_curvatures_and_directions_selected = !is_default_parameter::value; mean_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_mean_curvature_map), Default_scalar_map()); - gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_gaussian_curvature_map), Default_scalar_map()); + gaussian_curvature_map = choose_parameter(get_parameter(np, internal_np::vertex_Gaussian_curvature_map), Default_scalar_map()); principal_curvatures_and_directions_map = choose_parameter(get_parameter(np, internal_np::vertex_principal_curvatures_and_directions_map), Default_principal_map()); } @@ -842,7 +842,7 @@ class Interpolated_corrected_curvatures_computer { set_named_params(np); - if (is_mean_curvature_selected || is_gaussian_curvature_selected || is_principal_curvatures_and_directions_selected) + if (is_mean_curvature_selected || is_Gaussian_curvature_selected || is_principal_curvatures_and_directions_selected) { set_property_maps(); @@ -872,8 +872,8 @@ class Interpolated_corrected_curvatures_computer if (is_mean_curvature_selected) put(mu1_map, f, interpolated_corrected_mean_curvature_measure_face(u, x)); - if (is_gaussian_curvature_selected) - put(mu2_map, f, interpolated_corrected_gaussian_curvature_measure_face(u)); + if (is_Gaussian_curvature_selected) + put(mu2_map, f, interpolated_corrected_Gaussian_curvature_measure_face(u)); if (is_principal_curvatures_and_directions_selected) put(muXY_map, f, interpolated_corrected_anisotropic_measure_face(u, x)); @@ -899,7 +899,7 @@ class Interpolated_corrected_curvatures_computer if (is_mean_curvature_selected) vertex_measures.mean_curvature_measure += get(mu1_map, f); - if (is_gaussian_curvature_selected) + if (is_Gaussian_curvature_selected) vertex_measures.gaussian_curvature_measure += get(mu2_map, f); if (is_principal_curvatures_and_directions_selected) @@ -957,7 +957,7 @@ class Interpolated_corrected_curvatures_computer if (is_mean_curvature_selected) vertex_measures.mean_curvature_measure += f_ratio * get(mu1_map, fi); - if (is_gaussian_curvature_selected) + if (is_Gaussian_curvature_selected) vertex_measures.gaussian_curvature_measure += f_ratio * get(mu2_map, fi); if (is_principal_curvatures_and_directions_selected) @@ -998,7 +998,7 @@ class Interpolated_corrected_curvatures_computer put(mean_curvature_map, v, 0); } - if (is_gaussian_curvature_selected) { + if (is_Gaussian_curvature_selected) { vertex_measures.area_measure != 0 ? put(gaussian_curvature_map, v, vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure) : put(gaussian_curvature_map, v, 0); @@ -1071,7 +1071,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamExtra{If this parameter is omitted, mean curvatures will not be computed} * \cgalParamNEnd * -* \cgalParamNBegin{vertex_gaussian_curvature_map} +* \cgalParamNBegin{vertex_Gaussian_curvature_map} * \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` @@ -1101,7 +1101,7 @@ class Interpolated_corrected_curvatures_computer * \cgalNamedParamsEnd * * @see `interpolated_corrected_mean_curvature()` -* @see `interpolated_corrected_gaussian_curvature()` +* @see `interpolated_corrected_Gaussian_curvature()` * @see `interpolated_corrected_principal_curvatures_and_directions()` */ template -void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, +void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, VertexCurvatureMap vcm, const NamedParameters& np = parameters::default_values()) { - interpolated_corrected_curvatures(pmesh, np.vertex_gaussian_curvature_map(vcm)); + interpolated_corrected_curvatures(pmesh, np.vertex_Gaussian_curvature_map(vcm)); } /** @@ -1312,7 +1312,7 @@ void interpolated_corrected_gaussian_curvature(const PolygonMesh& pmesh, * \cgalNamedParamsEnd * * @see `interpolated_corrected_mean_curvature()` -* @see `interpolated_corrected_gaussian_curvature()` +* @see `interpolated_corrected_Gaussian_curvature()` * @see `interpolated_corrected_curvatures()` */ template`} * \cgalParamExtra{If this parameter is omitted, gaussian curvature will not be computed} @@ -1400,7 +1400,7 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` -* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_one_vertex()` +* @see `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature_one_vertex()` * @see `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` */ template::type::FT #endif -interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, +interpolated_corrected_Gaussian_curvature_one_vertex(const PolygonMesh& pmesh, typename boost::graph_traits::vertex_descriptor v, const NamedParameters& np = parameters::default_values()) { typename GetGeomTraits::type::FT gc; - interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_gaussian_curvature(std::ref(gc))); + interpolated_corrected_curvatures_one_vertex(pmesh, v, np.vertex_Gaussian_curvature(std::ref(gc))); return gc; } @@ -1622,7 +1622,7 @@ interpolated_corrected_gaussian_curvature_one_vertex(const PolygonMesh& pmesh, * * @see `interpolated_corrected_principal_curvatures_and_directions()` * @see `interpolated_corrected_mean_curvature_one_vertex()` -* @see `interpolated_corrected_gaussian_curvature_one_vertex()` +* @see `interpolated_corrected_Gaussian_curvature_one_vertex()` * @see `interpolated_corrected_curvatures_one_vertex()` */ diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index bd0594652206..c0772ce989bc 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -78,7 +78,7 @@ void test_average_curvatures(std::string mesh_path, // test_info.expansion_radius -> test if no radius is provided by user. if (test_info.expansion_radius < 0) { PMP::interpolated_corrected_mean_curvature(pmesh, mean_curvature_map); - PMP::interpolated_corrected_gaussian_curvature(pmesh, gaussian_curvature_map); + PMP::interpolated_corrected_Gaussian_curvature(pmesh, gaussian_curvature_map); PMP::interpolated_corrected_principal_curvatures_and_directions(pmesh, principal_curvatures_and_directions_map); } else { @@ -88,7 +88,7 @@ void test_average_curvatures(std::string mesh_path, CGAL::parameters::ball_radius(test_info.expansion_radius) ); - PMP::interpolated_corrected_gaussian_curvature( + PMP::interpolated_corrected_Gaussian_curvature( pmesh, gaussian_curvature_map, CGAL::parameters::ball_radius(test_info.expansion_radius) @@ -125,28 +125,28 @@ void test_average_curvatures(std::string mesh_path, pmesh, CGAL::parameters::ball_radius(test_info.expansion_radius) .vertex_mean_curvature_map(mean_curvature_map) - .vertex_gaussian_curvature_map(gaussian_curvature_map) + .vertex_Gaussian_curvature_map(gaussian_curvature_map) .vertex_principal_curvatures_and_directions_map(principal_curvatures_and_directions_map) ); - Epic_kernel::FT new_mean_curvature_avg = 0, new_gaussian_curvature_avg = 0, new_principal_curvature_avg = 0; + Epic_kernel::FT new_mean_curvature_avg = 0, new_Gaussian_curvature_avg = 0, new_principal_curvature_avg = 0; for (vertex_descriptor v : vertices(pmesh)) { new_mean_curvature_avg += get(mean_curvature_map, v); - new_gaussian_curvature_avg += get(gaussian_curvature_map, v); + new_Gaussian_curvature_avg += get(gaussian_curvature_map, v); new_principal_curvature_avg += get(principal_curvatures_and_directions_map, v).min_curvature + get(principal_curvatures_and_directions_map, v).max_curvature; } new_mean_curvature_avg /= vertices(pmesh).size(); - new_gaussian_curvature_avg /= vertices(pmesh).size(); + new_Gaussian_curvature_avg /= vertices(pmesh).size(); new_principal_curvature_avg /= vertices(pmesh).size() * 2; // are average curvatures computed from interpolated_corrected_curvatures() // equal to average curvatures each computed on its own? assert(passes_comparison(mean_curvature_avg, new_mean_curvature_avg, 0.99)); - assert(passes_comparison(gaussian_curvature_avg, new_gaussian_curvature_avg, 0.99)); + assert(passes_comparison(gaussian_curvature_avg, new_Gaussian_curvature_avg, 0.99)); assert(passes_comparison(principal_curvature_avg, new_principal_curvature_avg, 0.99)); if (compare_single_vertex) @@ -154,7 +154,7 @@ void test_average_curvatures(std::string mesh_path, // computing curvatures together from interpolated_corrected_curvatures() Epic_kernel::FT single_vertex_mean_curvature_avg = 0, - single_vertex_gaussian_curvature_avg = 0, + single_vertex_Gaussian_curvature_avg = 0, single_vertex_principal_curvature_avg = 0; Epic_kernel::FT h, g; @@ -165,23 +165,23 @@ void test_average_curvatures(std::string mesh_path, PMP::interpolated_corrected_curvatures_one_vertex( pmesh, v, - CGAL::parameters::vertex_gaussian_curvature(std::ref(g)) + CGAL::parameters::vertex_Gaussian_curvature(std::ref(g)) .vertex_mean_curvature(std::ref(h)) .vertex_principal_curvatures_and_directions(std::ref(p)) .ball_radius(test_info.expansion_radius) ); single_vertex_mean_curvature_avg += h; - single_vertex_gaussian_curvature_avg += g; + single_vertex_Gaussian_curvature_avg += g; single_vertex_principal_curvature_avg += p.min_curvature + p.max_curvature; } single_vertex_mean_curvature_avg /= vertices(pmesh).size(); - single_vertex_gaussian_curvature_avg /= vertices(pmesh).size(); + single_vertex_Gaussian_curvature_avg /= vertices(pmesh).size(); single_vertex_principal_curvature_avg /= vertices(pmesh).size() * 2; assert(passes_comparison(mean_curvature_avg, single_vertex_mean_curvature_avg, 0.99)); - assert(passes_comparison(gaussian_curvature_avg, single_vertex_gaussian_curvature_avg, 0.99)); + assert(passes_comparison(gaussian_curvature_avg, single_vertex_Gaussian_curvature_avg, 0.99)); assert(passes_comparison(principal_curvature_avg, single_vertex_principal_curvature_avg, 0.99)); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index c4c7d6a3c916..050487c9fec2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -662,7 +662,7 @@ private Q_SLOTS: if (does_exist) sm_item->face_graph()->remove_property_map(pmap); std::tie(pmap, does_exist) = - sm_item->face_graph()->property_map("v:interpolated_corrected_gaussian_curvature"); + sm_item->face_graph()->property_map("v:interpolated_corrected_Gaussian_curvature"); if (does_exist) sm_item->face_graph()->remove_property_map(pmap); }); @@ -748,7 +748,7 @@ private Q_SLOTS: smesh.remove_property_map(mean_curvature); } SMesh::Property_map gaussian_curvature; - std::tie(gaussian_curvature, found) = smesh.property_map("v:interpolated_corrected_gaussian_curvature"); + std::tie(gaussian_curvature, found) = smesh.property_map("v:interpolated_corrected_Gaussian_curvature"); if (found) { smesh.remove_property_map(gaussian_curvature); @@ -851,7 +851,7 @@ private Q_SLOTS: if (mu_index != MEAN_CURVATURE && mu_index != GAUSSIAN_CURVATURE) return; std::string tied_string = (mu_index == MEAN_CURVATURE)? - "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature"; + "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_Gaussian_curvature"; SMesh& smesh = *item->face_graph(); const auto vnm = smesh.property_map("v:normal_before_perturbation").first; @@ -868,13 +868,13 @@ private Q_SLOTS: if (mu_index == MEAN_CURVATURE) PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); } else { if (mu_index == MEAN_CURVATURE) PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); else - PMP::interpolated_corrected_gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); } double res_min = ARBITRARY_DBL_MAX, res_max = -ARBITRARY_DBL_MAX; diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 4990dca1ba15..30272955bb00 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -91,10 +91,10 @@ CGAL_add_named_parameter(number_of_points_on_edges_t, number_of_points_on_edges, CGAL_add_named_parameter(nb_points_per_area_unit_t, nb_points_per_area_unit, number_of_points_per_area_unit) CGAL_add_named_parameter(nb_points_per_distance_unit_t, nb_points_per_distance_unit, number_of_points_per_distance_unit) CGAL_add_named_parameter(vertex_mean_curvature_map_t, vertex_mean_curvature_map, vertex_mean_curvature_map) -CGAL_add_named_parameter(vertex_gaussian_curvature_map_t, vertex_gaussian_curvature_map, vertex_gaussian_curvature_map) +CGAL_add_named_parameter(vertex_Gaussian_curvature_map_t, vertex_Gaussian_curvature_map, vertex_Gaussian_curvature_map) CGAL_add_named_parameter(vertex_principal_curvatures_and_directions_map_t, vertex_principal_curvatures_and_directions_map, vertex_principal_curvatures_and_directions_map) CGAL_add_named_parameter(vertex_mean_curvature_t, vertex_mean_curvature, vertex_mean_curvature) -CGAL_add_named_parameter(vertex_gaussian_curvature_t, vertex_gaussian_curvature, vertex_gaussian_curvature) +CGAL_add_named_parameter(vertex_Gaussian_curvature_t, vertex_Gaussian_curvature, vertex_Gaussian_curvature) CGAL_add_named_parameter(vertex_principal_curvatures_and_directions_t, vertex_principal_curvatures_and_directions, vertex_principal_curvatures_and_directions) CGAL_add_named_parameter(ball_radius_t, ball_radius, ball_radius) CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_orientation) From 556218bf153dcfd7b82861445e0a77e135753c0f Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 25 Mar 2023 11:57:22 +0200 Subject: [PATCH 128/943] gaussian -> Gaussian in docs and comments --- .../Polygon_mesh_processing.txt | 4 ++-- .../interpolated_corrected_curvatures_vertex.cpp | 2 +- .../interpolated_corrected_curvatures.h | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 65c236e99fc3..e2bee6e295d8 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -890,7 +890,7 @@ not provide storage for the normals. \section PMPICC Computing Curvatures This package provides methods to compute curvatures on polygonal meshes based on Interpolated Corrected Curvatures -on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, gaussian curvature, +on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, Gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. The algorithms used prove to work well in general. Also, on meshes with noise on vertex positions, they give accurate results, on the condition that the @@ -905,7 +905,7 @@ These computations are performed using (on all vertices of mesh): - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` -Where it is recommended to use the last function for computing multiple curvatures (example: mean and gaussian) +Where it is recommended to use the last function for computing multiple curvatures (example: mean and Gaussian) as the implementation performs the shared computations only once, making it more efficient. Similarly, we can use the following functions to compute curvatures on a specific vertex: diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp index c0722b25675a..c6bef5faa740 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp @@ -43,7 +43,7 @@ int main(int argc, char* argv[]) // The following commented lines show this (all mentioned named parameters work on it as well) // we specify which curvatures we want to compute by passing pointers as named parameters // as shown. These pointers are used for storing the result as well. in this example we - // selected mean and gaussian curvatures + // selected mean and Gaussian curvatures // PMP::interpolated_corrected_curvatures_one_vertex( // smesh, // v, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index bffd2657e96c..2324b0e9e88c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1024,7 +1024,7 @@ class Interpolated_corrected_curvatures_computer * \ingroup PMP_corrected_curvatures_grp * * computes the interpolated corrected curvatures across the mesh `pmesh`. -* By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user +* By providing mean, Gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * * @tparam PolygonMesh a model of `FaceListGraph`. @@ -1076,7 +1076,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `GT::FT` as value type} -* \cgalParamExtra{If this parameter is omitted, gaussian curvatures will not be computed} +* \cgalParamExtra{If this parameter is omitted, Gaussian curvatures will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} @@ -1186,7 +1186,7 @@ void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected gaussian curvature across the mesh `pmesh`. +* computes the interpolated corrected Gaussian curvature across the mesh `pmesh`. * * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap a model of `WritablePropertyMap` with @@ -1194,7 +1194,7 @@ void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed gaussian curvatures are stored. +* @param vcm the vertex property map in which the computed Gaussian curvatures are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters". * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * @@ -1328,7 +1328,7 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes /** * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected curvatures at a vertex `v`. -* By providing mean, gaussian and/or principal curvature and direction property maps as named parameters, the user +* By providing mean, Gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * * @tparam PolygonMesh a model of `FaceListGraph` @@ -1374,9 +1374,9 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * \cgalParamNEnd * * \cgalParamNBegin{vertex_Gaussian_curvature} -* \cgalParamDescription{a reference to a scalar value to store the gaussian curvature at the vertex `v`} +* \cgalParamDescription{a reference to a scalar value to store the Gaussian curvature at the vertex `v`} * \cgalParamType{`std::reference_wrapper`} -* \cgalParamExtra{If this parameter is omitted, gaussian curvature will not be computed} +* \cgalParamExtra{If this parameter is omitted, Gaussian curvature will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions} From 2bc8b1b49565f9f033c40d30dd08d1f6192d99f5 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 25 Mar 2023 13:29:15 +0200 Subject: [PATCH 129/943] user man doc improvements --- .../Polygon_mesh_processing.txt | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index e2bee6e295d8..49614be67c91 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -896,10 +896,10 @@ and meshes with n-gon faces. The algorithms used prove to work well in general. with noise on vertex positions, they give accurate results, on the condition that the correct vertex normals are provided. -The implementation is generic in terms of mesh data structure. It can be used on Surface_mesh, -Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. +The implementation is generic in terms of mesh data structure. It can be used on `Surface_mesh`, +`Polyhedron_3` and other polygonal mesh structures based on the concept `FaceGraph`. -These computations are performed using (on all vertices of mesh): +These computations are performed using (on all vertices of the mesh): - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` @@ -916,29 +916,25 @@ Similarly, we can use the following functions to compute curvatures on a specifi \cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on -the ball_radius named parameter which can be set to a value > 0 to get a smoother -distribution of values and "diffuse" the extreme values of curvatures across the mesh. +the named parameter `ball_radius`, which can be set to a value > 0 to get a smoother +distribution of values and "diffuses" the extreme values of curvatures across the mesh. \cgalFigureAnchor{icc_diff_radius}
- +
\cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature distribution on a bear mesh with different values for the expanding ball radius +The mean curvature distribution on a bear mesh with different values for the ball radius parameter \cgalFigureCaptionEnd -Property maps are used to record the computed curvatures as shown in examples. - - -Property maps are an API introduced in the boost library that allows associating -values to keys. In the following examples, for each property map, we associate +\ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate a curvature value to each vertex. \subsection ICCExampleSM Interpolated Corrected Curvatures on a Surface Mesh Example The following example illustrates how to compute the curvatures on vertices -and store them in property maps provided by the class `Surface_mesh`. +and store them in the property maps provided by the class `Surface_mesh`. \cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp} From 49c12d9265f2b0c02fd816f82d82f5e9141c4504 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 25 Mar 2023 13:44:36 +0200 Subject: [PATCH 130/943] ref doc fixes --- .../interpolated_corrected_curvatures.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 2324b0e9e88c..71a2ceaaa911 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1072,7 +1072,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamNEnd * * \cgalParamNBegin{vertex_Gaussian_curvature_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating Gaussian curvatures to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `GT::FT` as value type} @@ -1080,11 +1080,11 @@ class Interpolated_corrected_curvatures_computer * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating principal curvatures and directions to the vertices of `pmesh`} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `Principal_curvatures_and_directions` as value type} -* \cgalParamExtra{If this parameter is omitted, mean principal will not be computed} +* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1256,7 +1256,7 @@ void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, /** * \ingroup PMP_corrected_curvatures_grp * -* computes the interpolated corrected principal curvatures across the mesh `pmesh`. +* computes the interpolated corrected principal curvatures and directions across the mesh `pmesh`. * * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap a model of `WritablePropertyMap` with @@ -1265,7 +1265,7 @@ void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * * @param pmesh the polygon mesh. -* @param vcm the vertex property map in which the computed principal curvatures are stored. +* @param vcm the vertex property map in which the computed principal curvatures and directions are stored. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * From 057b6fc2dd5011052b1049bbbfbc3728c3b875e8 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:20:26 +0200 Subject: [PATCH 131/943] gaussian -> Gaussian in example files --- .../interpolated_corrected_curvatures_PH.cpp | 6 +++--- .../interpolated_corrected_curvatures_SM.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp index 0e3923dc67b8..ecf40b840829 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp @@ -30,7 +30,7 @@ int main(int argc, char* argv[]) boost::property_map>::type mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), - gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); + Gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); boost::property_map>>::type principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) PMP::interpolated_corrected_Gaussian_curvature( polyhedron, - gaussian_curvature_map); + Gaussian_curvature_map); PMP::interpolated_corrected_principal_curvatures_and_directions( polyhedron, @@ -69,7 +69,7 @@ int main(int argc, char* argv[]) { auto PC = get(principal_curvatures_and_directions_map, v); std::cout << i << ": HC = " << get(mean_curvature_map, v) - << ", GC = " << get(gaussian_curvature_map, v) << "\n" + << ", GC = " << get(Gaussian_curvature_map, v) << "\n" << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; i++; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp index 811146dd6412..ab985e5068d0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp @@ -29,11 +29,11 @@ int main(int argc, char* argv[]) // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - Surface_Mesh::Property_map mean_curvature_map, gaussian_curvature_map; + Surface_Mesh::Property_map mean_curvature_map, Gaussian_curvature_map; boost::tie(mean_curvature_map, created) = smesh.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(gaussian_curvature_map, created) = smesh.add_property_map("v:gaussian_curvature_map", 0); + boost::tie(Gaussian_curvature_map, created) = smesh.add_property_map("v:Gaussian_curvature_map", 0); assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions @@ -55,7 +55,7 @@ int main(int argc, char* argv[]) PMP::interpolated_corrected_Gaussian_curvature( smesh, - gaussian_curvature_map + Gaussian_curvature_map ); PMP::interpolated_corrected_principal_curvatures_and_directions( @@ -91,7 +91,7 @@ int main(int argc, char* argv[]) { auto PC = principal_curvatures_and_directions_map[v]; std::cout << v.idx() << ": HC = " << mean_curvature_map[v] - << ", GC = " << gaussian_curvature_map[v] << "\n" + << ", GC = " << Gaussian_curvature_map[v] << "\n" << ", PC = [ " << PC.min_curvature << " , " << PC.max_curvature << " ]\n"; } } From 5aa995dbe7a24727d22bcbee6d3d2170b0d3274b Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:45:16 +0200 Subject: [PATCH 132/943] missing dots in ref documentation --- .../interpolated_corrected_curvatures.h | 250 +++++++++--------- 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 71a2ceaaa911..a22761691b18 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1037,54 +1037,54 @@ class Interpolated_corrected_curvatures_computer * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamDescription{an instance of a geometric traits class.} * \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_mean_curvature_map} -* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating mean curvatures to the vertices of `pmesh`.} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` * as key type and `GT::FT` as value type} -* \cgalParamExtra{If this parameter is omitted, mean curvatures will not be computed} +* \cgalParamExtra{If this parameter is omitted, mean curvatures will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_Gaussian_curvature_map} -* \cgalParamDescription{a property map associating Gaussian curvatures to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating Gaussian curvatures to the vertices of `pmesh`.} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::FT` as value type} -* \cgalParamExtra{If this parameter is omitted, Gaussian curvatures will not be computed} +* as key type and `GT::FT` as value type.} +* \cgalParamExtra{If this parameter is omitted, Gaussian curvatures will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions_map} -* \cgalParamDescription{a property map associating principal curvatures and directions to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating principal curvatures and directions to the vertices of `pmesh`.} * \cgalParamType{a class model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `Principal_curvatures_and_directions` as value type} -* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed} +* as key type and `Principal_curvatures_and_directions` as value type.} +* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1095,7 +1095,7 @@ class Interpolated_corrected_curvatures_computer * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion is then just a sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -1130,29 +1130,29 @@ void interpolated_corrected_curvatures(const PolygonMesh& pmesh, * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamDescription{an instance of a geometric traits class.} * \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1160,11 +1160,11 @@ void interpolated_corrected_curvatures(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -1201,29 +1201,29 @@ void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `%Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `GT::ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `%Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamDescription{an instance of a geometric traits class.} * \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1231,11 +1231,11 @@ void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -1272,29 +1272,29 @@ void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, * \cgalNamedParamsBegin * * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamDescription{an instance of a geometric traits class.} * \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1302,11 +1302,11 @@ void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -1331,58 +1331,58 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * By providing mean, Gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * -* @tparam PolygonMesh a model of `FaceListGraph` -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param v the vertex of `pmesh` to compute the curvatures at +* @param pmesh the polygon mesh. +* @param v the vertex of `pmesh` to compute the curvatures at. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamDescription{an instance of a geometric traits class.} * \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_mean_curvature} -* \cgalParamDescription{a reference to a scalar value to store the mean curvature at the vertex `v`} -* \cgalParamType{`std::reference_wrapper`} -* \cgalParamExtra{If this parameter is omitted, mean curvature will not be computed} +* \cgalParamDescription{a reference to a scalar value to store the mean curvature at the vertex `v`.} +* \cgalParamType{`std::reference_wrapper`.} +* \cgalParamExtra{If this parameter is omitted, mean curvature will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_Gaussian_curvature} -* \cgalParamDescription{a reference to a scalar value to store the Gaussian curvature at the vertex `v`} -* \cgalParamType{`std::reference_wrapper`} -* \cgalParamExtra{If this parameter is omitted, Gaussian curvature will not be computed} +* \cgalParamDescription{a reference to a scalar value to store the Gaussian curvature at the vertex `v`.} +* \cgalParamType{`std::reference_wrapper`.} +* \cgalParamExtra{If this parameter is omitted, Gaussian curvature will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_principal_curvatures_and_directions} -* \cgalParamDescription{a reference to an`Principal_curvatures_and_directions` object to store the principal curvatures and directions at the vertex `v`} -* \cgalParamType{`std::reference_wrapper>`} -* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed} +* \cgalParamDescription{a reference to an`Principal_curvatures_and_directions` object to store the principal curvatures and directions at the vertex `v`.} +* \cgalParamType{`std::reference_wrapper>`.} +* \cgalParamExtra{If this parameter is omitted, principal curvatures and directions will not be computed.} * \cgalParamNEnd * * \cgalParamNBegin{ball_radius} @@ -1393,7 +1393,7 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the epansion is then just a sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd @@ -1416,39 +1416,39 @@ void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected mean curvature at vertex `v` of mesh `pmesh`. * -* @tparam PolygonMesh a model of `FaceListGraph` -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param v the vertex of `pmesh` to compute the mean curvature at +* @param pmesh the polygon mesh. +* @param v the vertex of `pmesh` to compute the mean curvature at. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} -* \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDescription{an instance of a geometric traits class.} +* \cgalParamType{a class model of `Kernel`.} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1456,16 +1456,16 @@ void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd * -* @return the interpolated corrected mean curvature at the vertex `v` +* @return the interpolated corrected mean curvature at the vertex `v`. * * @see `interpolated_corrected_mean_curvature()` * @see `interpolated_corrected_Gaussian_curvature_one_vertex()` @@ -1493,39 +1493,39 @@ interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected Gaussian curvature at vertex `v` of mesh `pmesh`. * -* @tparam PolygonMesh a model of `FaceListGraph` -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param v the vertex of `pmesh` to compute the Gaussian curvature at +* @param pmesh the polygon mesh. +* @param v the vertex of `pmesh` to compute the Gaussian curvature at. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `GT::Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `GT::Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `GT::Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} -* \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDescription{an instance of a geometric traits class.} +* \cgalParamType{a class model of `Kernel`.} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1533,16 +1533,16 @@ interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * * \cgalNamedParamsEnd * -* @return the interpolated corrected Gaussian curvature at the vertex `v` +* @return the interpolated corrected Gaussian curvature at the vertex `v`. * * @see `interpolated_corrected_Gaussian_curvature()` * @see `interpolated_corrected_mean_curvature_one_vertex()` @@ -1570,39 +1570,39 @@ interpolated_corrected_Gaussian_curvature_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected principal curvatures and directions at vertex `v` of mesh `pmesh`. * -* @tparam PolygonMesh a model of `FaceListGraph` -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam PolygonMesh a model of `FaceListGraph`. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * -* @param pmesh the polygon mesh -* @param v the vertex of `pmesh` to compute the principal curvatures and directions at +* @param pmesh the polygon mesh. +* @param v the vertex of `pmesh` to compute the principal curvatures and directions at. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * `GT` stands for the type of the object provided to the named parameter `geom_traits()`. * * \cgalNamedParamsBegin * \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* as key type and `%Point_3` as value type.} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`.} * \cgalParamExtra{If this parameter is omitted, an internal property map for * `CGAL::vertex_point_t` must be available in `PolygonMesh`.} * \cgalParamNEnd * * \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} +* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`.} * \cgalParamType{a class model of `ReadablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} +* as key type and `%Vector_3` as value type.} +* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`.} * \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using `compute_vertex_normals()`} +* computed using `compute_vertex_normals()`.} * \cgalParamNEnd * * \cgalParamNBegin{geom_traits} -* \cgalParamDescription{an instance of a geometric traits class} -* \cgalParamType{a class model of `Kernel`} -* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamDescription{an instance of a geometric traits class.} +* \cgalParamType{a class model of `Kernel`.} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`.} * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} * \cgalParamNEnd * @@ -1610,15 +1610,15 @@ interpolated_corrected_Gaussian_curvature_one_vertex(const PolygonMesh& pmesh, * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures * by summing measures of faces inside a ball of this radius centered at the * vertex expanded from. The summed face measures are weighted by their -* inclusion ratio inside this ball} +* inclusion ratio inside this ball.} * \cgalParamType{`GT::FT`} * \cgalParamDefault{`-1`} * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of -* measures on faces around the vertex} +* measures on faces around the vertex.} * \cgalParamNEnd * \cgalNamedParamsEnd * -* @return the interpolated corrected principal curvatures and directions at the vertex `v` +* @return the interpolated corrected principal curvatures and directions at the vertex `v`. * * @see `interpolated_corrected_principal_curvatures_and_directions()` * @see `interpolated_corrected_mean_curvature_one_vertex()` From 2884d8b3cbdd14341d63142d4e96949e3a06be97 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:06:06 +0200 Subject: [PATCH 133/943] using is_zero() & is_negative() for FT variables --- .../interpolated_corrected_curvatures.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index a22761691b18..72f7b1b93d07 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -470,8 +470,8 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from // returning principal curvatures and directions (with the correct sign) return Principal_curvatures_and_directions( - (v_mu0 != 0.0) ? -eig_vals[1] / v_mu0 : 0.0, - (v_mu0 != 0.0) ? -eig_vals[0] / v_mu0 : 0.0, + (!is_zero(v_mu0)) ? -eig_vals[1] / v_mu0 : 0.0, + (!is_zero(v_mu0)) ? -eig_vals[0] / v_mu0 : 0.0, min_eig_vec, max_eig_vec ); @@ -591,7 +591,7 @@ Vertex_measures interpolated_corrected_measures_one_vertex( // if it is not 0 (not completely outside), compute measures for selected curvatures (area is always computed) // and add neighboring faces to the bfs queue - if (f_ratio != 0.0) + if (!is_zero(f_ratio)) { vertex_measures.area_measure += f_ratio * interpolated_corrected_area_measure_face(u, x); @@ -669,7 +669,7 @@ template(pmesh) * 1e-6; // determine which curvatures are selected @@ -680,7 +680,7 @@ template vertex_measures; // if the radius is negative, we do not expand the ball (only the incident faces) - if (radius < 0) + if (is_negative(radius)) { vertex_measures = interpolated_corrected_measures_one_vertex_no_radius( pmesh, @@ -708,12 +708,12 @@ template(pmesh) * 1e-6; else ball_radius = radius; @@ -950,7 +950,7 @@ class Interpolated_corrected_curvatures_computer // if the face is inside the ball, add the measures // only add the measures for the selected curvatures (area measure is always added) - if (f_ratio != 0.0) + if (!is_zero(f_ratio)) { vertex_measures.area_measure += f_ratio * get(mu0_map, fi); @@ -986,20 +986,20 @@ class Interpolated_corrected_curvatures_computer for (Vertex_descriptor v : vertices(pmesh)) { // expand the computed measures (on faces) to the vertices - Vertex_measures vertex_measures = (ball_radius < 0) ? + Vertex_measures vertex_measures = (is_negative(ball_radius)) ? expand_interpolated_corrected_measure_vertex_no_radius(v) : expand_interpolated_corrected_measure_vertex(v); // compute the selected curvatures from the expanded measures and store them in the property maps // if the area measure is zero, the curvature is set to zero if (is_mean_curvature_selected) { - vertex_measures.area_measure != 0 ? + !is_zero(vertex_measures.area_measure) ? put(mean_curvature_map, v, 0.5 * vertex_measures.mean_curvature_measure / vertex_measures.area_measure) : put(mean_curvature_map, v, 0); } if (is_Gaussian_curvature_selected) { - vertex_measures.area_measure != 0 ? + !is_zero(vertex_measures.area_measure) ? put(gaussian_curvature_map, v, vertex_measures.gaussian_curvature_measure / vertex_measures.area_measure) : put(gaussian_curvature_map, v, 0); } From 4279a734bfb71821609ee14ea5bf33bcc90831cf Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 27 Mar 2023 19:35:31 +0200 Subject: [PATCH 134/943] minor linting changing --- .../interpolated_corrected_curvatures_PH.cpp | 16 ++++------ .../interpolated_corrected_curvatures_SM.cpp | 31 +++++++++---------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp index ecf40b840829..0aa0c196d3f5 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp @@ -31,20 +31,16 @@ int main(int argc, char* argv[]) boost::property_map>::type mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron), Gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); + boost::property_map>>::type - principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); + principal_curvatures_and_directions_map = + get(CGAL::dynamic_vertex_property_t>(), polyhedron); - PMP::interpolated_corrected_mean_curvature( - polyhedron, - mean_curvature_map); + PMP::interpolated_corrected_mean_curvature(polyhedron, mean_curvature_map); - PMP::interpolated_corrected_Gaussian_curvature( - polyhedron, - Gaussian_curvature_map); + PMP::interpolated_corrected_Gaussian_curvature(polyhedron, Gaussian_curvature_map); - PMP::interpolated_corrected_principal_curvatures_and_directions( - polyhedron, - principal_curvatures_and_directions_map); + PMP::interpolated_corrected_principal_curvatures_and_directions(polyhedron, principal_curvatures_and_directions_map); // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp index ab985e5068d0..d75ab14f6984 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp @@ -29,17 +29,23 @@ int main(int argc, char* argv[]) // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - Surface_Mesh::Property_map mean_curvature_map, Gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = smesh.add_property_map("v:mean_curvature_map", 0); + Surface_Mesh::Property_map + mean_curvature_map, Gaussian_curvature_map; + + boost::tie(mean_curvature_map, created) = + smesh.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(Gaussian_curvature_map, created) = smesh.add_property_map("v:Gaussian_curvature_map", 0); + boost::tie(Gaussian_curvature_map, created) = + smesh.add_property_map("v:Gaussian_curvature_map", 0); assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> principal_curvatures_and_directions_map; + Surface_Mesh::Property_map> + principal_curvatures_and_directions_map; - boost::tie(principal_curvatures_and_directions_map, created) = smesh.add_property_map> + boost::tie(principal_curvatures_and_directions_map, created) = + smesh.add_property_map> ("v:principal_curvatures_and_directions_map", { 0, 0, Epic_kernel::Vector_3(0,0,0), Epic_kernel::Vector_3(0,0,0) }); @@ -48,20 +54,11 @@ int main(int argc, char* argv[]) // user can call these fucntions to compute a specfic curvature type on each vertex. // (Note: if no ball radius is specified, the measure expansion of each vertex happens by // summing measures on faces adjacent to each vertex.) - PMP::interpolated_corrected_mean_curvature( - smesh, - mean_curvature_map - ); + PMP::interpolated_corrected_mean_curvature(smesh, mean_curvature_map); - PMP::interpolated_corrected_Gaussian_curvature( - smesh, - Gaussian_curvature_map - ); + PMP::interpolated_corrected_Gaussian_curvature(smesh, Gaussian_curvature_map); - PMP::interpolated_corrected_principal_curvatures_and_directions( - smesh, - principal_curvatures_and_directions_map - ); + PMP::interpolated_corrected_principal_curvatures_and_directions(smesh, principal_curvatures_and_directions_map); // uncomment this to compute a curvature while specifying named parameters // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) From 33c7f5c03aabadea45c0ed1078d38df38455efa2 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 27 Mar 2023 19:37:31 +0200 Subject: [PATCH 135/943] traillling spaces --- .../interpolated_corrected_curvatures_PH.cpp | 2 +- .../interpolated_corrected_curvatures_SM.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp index 0aa0c196d3f5..c93de26f26cc 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) Gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), polyhedron); boost::property_map>>::type - principal_curvatures_and_directions_map = + principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), polyhedron); PMP::interpolated_corrected_mean_curvature(polyhedron, mean_curvature_map); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp index d75ab14f6984..dae2ec0716ec 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp @@ -29,22 +29,22 @@ int main(int argc, char* argv[]) // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - Surface_Mesh::Property_map + Surface_Mesh::Property_map mean_curvature_map, Gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = + boost::tie(mean_curvature_map, created) = smesh.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(Gaussian_curvature_map, created) = + boost::tie(Gaussian_curvature_map, created) = smesh.add_property_map("v:Gaussian_curvature_map", 0); assert(created); // we use a tuple of 2 scalar values and 2 vectors for principal curvatures and directions - Surface_Mesh::Property_map> + Surface_Mesh::Property_map> principal_curvatures_and_directions_map; - boost::tie(principal_curvatures_and_directions_map, created) = + boost::tie(principal_curvatures_and_directions_map, created) = smesh.add_property_map> ("v:principal_curvatures_and_directions_map", { 0, 0, Epic_kernel::Vector_3(0,0,0), From 796d7cc57d79a06454afac969a329d49a428f6b3 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Fri, 31 Mar 2023 01:55:26 +0200 Subject: [PATCH 136/943] handled scale dependency and add tests for it --- .../interpolated_corrected_curvatures.h | 22 ++++-- ...test_interpolated_corrected_curvatures.cpp | 68 ++++++++++++++----- 2 files changed, 66 insertions(+), 24 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 72f7b1b93d07..4b940f157e88 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -436,7 +436,8 @@ template Principal_curvatures_and_directions principal_curvatures_and_directions_from_anisotropic_measures( const std::array anisotropic_measure, const typename GT::FT v_mu0, - const typename GT::Vector_3 u_GT + const typename GT::Vector_3 u_GT, + const typename GT::FT avg_edge_length ) { // putting anisotropic measure in matrix form @@ -448,7 +449,7 @@ Principal_curvatures_and_directions principal_curvatures_and_directions_from // constant factor K to force the principal direction eigenvectors to be tangential to the surface Eigen::Matrix u(u_GT.x(), u_GT.y(), u_GT.z()); - const typename GT::FT K = 1000 * v_mu0; + const typename GT::FT K = 1000 * avg_edge_length * v_mu0; // symmetrizing and adding the constant term v_muXY = 0.5 * (v_muXY + v_muXY.transpose()) + K * u * u.transpose(); @@ -668,9 +669,13 @@ template(pmesh); + // if the radius is 0, we use a small epsilon to expand the ball (scaled with the average edge length) if (is_zero(radius)) - radius = average_edge_length(pmesh) * 1e-6; + radius = avg_edge_length * 1e-6; // determine which curvatures are selected const bool is_mean_curvature_selected = !is_default_parameter::value; @@ -723,7 +728,9 @@ template principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, - v_normal); + v_normal, + avg_edge_length + ); set_value(principal_curvatures_and_directions, get_parameter(np, internal_np::vertex_principal_curvatures_and_directions)); } } @@ -775,6 +782,7 @@ class Interpolated_corrected_curvatures_computer Vertex_position_map vpm; Vertex_normal_map vnm; FT ball_radius; + FT avg_edge_length; bool is_mean_curvature_selected; bool is_Gaussian_curvature_selected; @@ -813,6 +821,7 @@ class Interpolated_corrected_curvatures_computer // if no radius is given, we pass -1 which will make the expansion be only on the incident faces instead of a ball const FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + avg_edge_length = average_edge_length(pmesh); set_ball_radius(radius); // check which curvature maps are provided by the user (determines which curvatures are computed) @@ -828,7 +837,7 @@ class Interpolated_corrected_curvatures_computer void set_ball_radius(const FT radius) { // if given radius is 0, we use a small epsilon to expand the ball (scaled by the average edge length) if (is_zero(radius)) - ball_radius = average_edge_length(pmesh) * 1e-6; + ball_radius = avg_edge_length * 1e-6; else ball_radius = radius; } @@ -1010,7 +1019,8 @@ class Interpolated_corrected_curvatures_computer const Principal_curvatures_and_directions principal_curvatures_and_directions = principal_curvatures_and_directions_from_anisotropic_measures( vertex_measures.anisotropic_measure, vertex_measures.area_measure, - v_normal + v_normal, + avg_edge_length ); put(principal_curvatures_and_directions_map, v, principal_curvatures_and_directions); } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp index c0772ce989bc..2f1af8adb106 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_interpolated_corrected_curvatures.cpp @@ -32,7 +32,7 @@ struct Average_test_info { Epic_kernel::FT principal_curvature_avg, Epic_kernel::FT expansion_radius = -1, Epic_kernel::FT tolerance = 0.9 - ): + ) : expansion_radius(expansion_radius), mean_curvature_avg(mean_curvature_avg), gaussian_curvature_avg(gaussian_curvature_avg), @@ -43,8 +43,7 @@ struct Average_test_info { }; -bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_kernel::FT tolerance) -{ +bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_kernel::FT tolerance) { if (abs(expected) < ABS_ERROR && abs(result) < ABS_ERROR) return true; // expected 0, got 0 else if (abs(expected) < ABS_ERROR) @@ -56,8 +55,10 @@ bool passes_comparison(Epic_kernel::FT result, Epic_kernel::FT expected, Epic_ke template void test_average_curvatures(std::string mesh_path, Average_test_info test_info, - bool compare_single_vertex = false -){ + bool compare_single_vertex = false, + int scale_factor_exponent = 0 +) { + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; PolygonMesh pmesh; const std::string filename = CGAL::data_file_path(mesh_path); @@ -67,14 +68,33 @@ void test_average_curvatures(std::string mesh_path, std::cerr << "Invalid input file." << std::endl; } - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + // The following part is used to scale the given mesh and expected curvatures by a constant factor + // this is used to test the stability of the implementation across different scales + if (scale_factor_exponent) { + Epic_kernel::FT factor = pow(10, scale_factor_exponent); + + test_info.expansion_radius *= factor; + test_info.mean_curvature_avg /= factor; + test_info.gaussian_curvature_avg /= factor * factor; + test_info.principal_curvature_avg /= factor; + + auto vpm = get(CGAL::vertex_point, pmesh); + + for (vertex_descriptor vi : vertices(pmesh)) { + Epic_kernel::Point_3 pi = get(vpm, vi); + Epic_kernel::Point_3 pi_new(pi.x() * factor, pi.y() * factor, pi.z() * factor); + put(vpm, vi, pi_new); + } + } + typename boost::property_map>::type mean_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh), gaussian_curvature_map = get(CGAL::dynamic_vertex_property_t(), pmesh); - typename boost::property_map>>::type - principal_curvatures_and_directions_map = get(CGAL::dynamic_vertex_property_t>(), pmesh); - + typename boost::property_map + >>::type + principal_curvatures_and_directions_map = + get(CGAL::dynamic_vertex_property_t>(), pmesh); // test_info.expansion_radius -> test if no radius is provided by user. if (test_info.expansion_radius < 0) { PMP::interpolated_corrected_mean_curvature(pmesh, mean_curvature_map); @@ -103,8 +123,7 @@ void test_average_curvatures(std::string mesh_path, Epic_kernel::FT mean_curvature_avg = 0, gaussian_curvature_avg = 0, principal_curvature_avg = 0; - for (vertex_descriptor v : vertices(pmesh)) - { + for (vertex_descriptor v : vertices(pmesh)) { mean_curvature_avg += get(mean_curvature_map, v); gaussian_curvature_avg += get(gaussian_curvature_map, v); principal_curvature_avg += get(principal_curvatures_and_directions_map, v).min_curvature @@ -131,8 +150,7 @@ void test_average_curvatures(std::string mesh_path, Epic_kernel::FT new_mean_curvature_avg = 0, new_Gaussian_curvature_avg = 0, new_principal_curvature_avg = 0; - for (vertex_descriptor v : vertices(pmesh)) - { + for (vertex_descriptor v : vertices(pmesh)) { new_mean_curvature_avg += get(mean_curvature_map, v); new_Gaussian_curvature_avg += get(gaussian_curvature_map, v); new_principal_curvature_avg += get(principal_curvatures_and_directions_map, v).min_curvature @@ -149,8 +167,7 @@ void test_average_curvatures(std::string mesh_path, assert(passes_comparison(gaussian_curvature_avg, new_Gaussian_curvature_avg, 0.99)); assert(passes_comparison(principal_curvature_avg, new_principal_curvature_avg, 0.99)); - if (compare_single_vertex) - { + if (compare_single_vertex) { // computing curvatures together from interpolated_corrected_curvatures() Epic_kernel::FT single_vertex_mean_curvature_avg = 0, @@ -160,8 +177,7 @@ void test_average_curvatures(std::string mesh_path, Epic_kernel::FT h, g; PMP::Principal_curvatures_and_directions p; - for (vertex_descriptor v : vertices(pmesh)) - { + for (vertex_descriptor v : vertices(pmesh)) { PMP::interpolated_corrected_curvatures_one_vertex( pmesh, v, @@ -193,7 +209,7 @@ int main() // For this mesh, ina addition to the whole mesh functions, we also compare against the single vertex // curvature functions to make sure the produce the same results // Expected: Mean Curvature = 2, Gaussian Curvature = 4, Principal Curvatures = 2 & 2 so 2 on avg. - test_average_curvatures("meshes/sphere.off", Average_test_info(2,4,2), true); + test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2), true); test_average_curvatures("meshes/sphere.off", Average_test_info(2, 4, 2), true); // Same mesh but with specified expansion radii of 0 and 0.25 (half radius of sphere) @@ -218,6 +234,22 @@ int main() test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0)); test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5)); + // Same tests as last one, but with a scaling on the mesh with different values to check for scale stability + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, -6); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, -6); + + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, -3); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, -3); + + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, -1); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, -1); + + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, 1); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, 1); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, 3); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, 3); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0), false, 6); + test_average_curvatures("meshes/cylinder.off", Average_test_info(0.5, 0, 0.5, 0.5), false, 6); } From a1ff847b6a4ec05ce40e3e24b7d38d8a87fd868e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 08:17:16 +0100 Subject: [PATCH 137/943] add "brute-force" version of autorefine() --- .../Polygon_mesh_processing/CMakeLists.txt | 1 + .../triangle_mesh_autorefinement.cpp | 29 + .../Polygon_mesh_processing/autorefinement.h | 507 ++++++++++++++++++ .../internal/parameters_interface.h | 1 + 4 files changed, 538 insertions(+) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/triangle_mesh_autorefinement.cpp create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 192e7d29b745..e188e01e3eb7 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -50,6 +50,7 @@ create_single_source_cgal_program("match_faces.cpp") create_single_source_cgal_program("cc_compatible_orientations.cpp") create_single_source_cgal_program("hausdorff_distance_remeshing_example.cpp") create_single_source_cgal_program("hausdorff_bounded_error_distance_example.cpp") +create_single_source_cgal_program("triangle_mesh_autorefinement.cpp") find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater) include(CGAL_Eigen3_support) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangle_mesh_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangle_mesh_autorefinement.cpp new file mode 100644 index 000000000000..65db52fef2c9 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangle_mesh_autorefinement.cpp @@ -0,0 +1,29 @@ +#include +#include + +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef Kernel::Point_3 Point; + +typedef CGAL::Surface_mesh Mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int argc, char** argv) +{ + Mesh mesh; + + const std::string filename = argc == 1 ? CGAL::data_file_path("meshes/elephant.off") + : std::string(argv[1]); + CGAL::IO::read_polygon_mesh(filename, mesh); + + PMP::autorefine(mesh); + + CGAL::IO::write_polygon_mesh("autorefined.off", mesh, CGAL::parameters::stream_precision(17)); + + return 0; +} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h new file mode 100644 index 000000000000..8c34b4041d86 --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -0,0 +1,507 @@ +// Copyright (c) 2023 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sebastien Loriot +// + +#ifndef CGAL_POLYGON_MESH_PROCESSING_AUTOREFINEMENT_H +#define CGAL_POLYGON_MESH_PROCESSING_AUTOREFINEMENT_H + +#include + +#include +#include +#include +#include + +// output +#include +#include + +#ifndef NDEBUG +// debug +#include +#endif + +#include + +namespace CGAL { +namespace Polygon_mesh_processing { + +#ifndef DOXYGEN_RUNNING +namespace autorefine_impl { + +template +void generate_subtriangles(const typename EK::Triangle_3& t, + const std::vector& segments, + const std::vector& points, + std::vector& new_triangles) +{ + typedef CGAL::Projection_traits_3 P_traits; + // typedef CGAL::Exact_intersections_tag Itag; + typedef CGAL::No_constraint_intersection_requiring_constructions_tag Itag; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; + + + P_traits cdt_traits(normal(t[0], t[1], t[2])); + CDT cdt(cdt_traits); + + cdt.insert_outside_affine_hull(t[0]); + cdt.insert_outside_affine_hull(t[1]); + typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), false); + v->set_point(t[2]); + + for (const typename EK::Segment_3& s : segments) + cdt.insert_constraint(s[0], s[1]); + + for (const typename EK::Point_3& p : points) + cdt.insert(p); + + for (typename CDT::Face_handle fh : cdt.finite_face_handles()) + { + new_triangles.emplace_back(fh->vertex(0)->point(), + fh->vertex(cdt.ccw(0))->point(), + fh->vertex(cdt.cw(0))->point()); + } +} + +template +struct Intersection_visitor +{ + std::vector& all_segments_1; + std::vector& all_segments_2; + std::vector& all_points_1; + std::vector& all_points_2; + + Intersection_visitor(std::vector& all_segments_1, + std::vector& all_segments_2, + std::vector& all_points_1, + std::vector& all_points_2) + : all_segments_1(all_segments_1) + , all_segments_2(all_segments_2) + , all_points_1(all_points_1) + , all_points_2(all_points_2) + {} + + typedef void result_type; + void operator()(const typename EK::Point_3& p) + { + all_points_1.push_back(p); + all_points_2.push_back(p); + } + + void operator()(const typename EK::Segment_3& s) + { + all_segments_1.push_back(s); + all_segments_2.push_back(s); + } + + void operator()(const typename EK::Triangle_3& t) + { + for (std::size_t i=1; i<3; ++i) + { + typename EK::Segment_3 s(t[i-1], t[i]); + all_segments_1.push_back(s); + all_segments_2.push_back(s); + } + } + + void operator()(const std::vector& poly) + { + std::size_t nbp = poly.size(); + for (std::size_t i=1; i +bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, const std::vector< std::vector>>& triangles) +{ + typedef typename Kernel_traits::value_type>::type IK; + typedef boost::graph_traits Graph_traits; + typedef typename Graph_traits::face_descriptor face_descriptor; + typedef typename Graph_traits::halfedge_descriptor halfedge_descriptor; + + std::vector soup_points; + std::vector > soup_triangles; + Cartesian_converter to_exact; + std::map point_id_map; + + auto get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); + if (insert_res.second) + soup_points.push_back(pt); + return insert_res.first->second; + }; + + for (face_descriptor f : faces(tm)) + { + int tid = get(tid_map, f); + if (tid == -1) + { + halfedge_descriptor h = halfedge(f, tm); + soup_triangles.emplace_back( + CGAL::make_array(get_point_id(to_exact(get(vpm,source(h, tm)))), + get_point_id(to_exact(get(vpm,target(h, tm)))), + get_point_id(to_exact(get(vpm,target(next(h, tm), tm))))) + ); + } + else + { + for (const typename EK::Triangle_3& t : triangles[tid]) + { + soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + } + } + } + + typedef Surface_mesh Exact_mesh; + Exact_mesh etm; + orient_polygon_soup(soup_points, soup_triangles); + polygon_soup_to_polygon_mesh(soup_points, soup_triangles, etm); + typename Exact_mesh::Property_map is_border_map = + etm.template add_property_map("v:is_border", false).first; + for(typename Exact_mesh::Halfedge_index h : etm.halfedges()) + { + if (CGAL::is_border(h, etm)) + is_border_map[target(h, etm)] = true; + } + + //TODO: double check me + auto skip_faces = [&](const std::pair& p) + { + typename Exact_mesh::Halfedge_index h1 = etm.halfedge(p.first), h2=etm.halfedge(p.second); + + boost::container::small_vector bv1; + if (is_border_map[source(h1, etm)]) bv1.push_back(prev(h1, etm)); + if (is_border_map[target(h1, etm)]) bv1.push_back(h1); + if (is_border_map[target(next(h1, etm), etm)]) bv1.push_back(next(h1, etm)); + if (bv1.empty()) return false; + + boost::container::small_vector bv2; + if (is_border_map[source(h2, etm)]) bv2.push_back(prev(h2, etm)); + if (is_border_map[target(h2, etm)]) bv2.push_back(h2); + if (is_border_map[target(next(h2, etm), etm)]) bv2.push_back(next(h2, etm)); + if (bv2.empty()) return false; + + //collect identical border vertices + boost::container::small_vector, 3> common; + for(typename Exact_mesh::Halfedge_index h1 : bv1) + for(typename Exact_mesh::Halfedge_index h2 : bv2) + if (etm.point(target(h1, etm))==etm.point(target(h2,etm))) + common.push_back(std::make_pair(h1,h2)); + + if (common.empty()) return false; + + switch (common.size()) + { + case 1: + { + // geometric check if the opposite segments intersect the triangles + const typename EK::Triangle_3 t1(etm.point(source(h1,etm)), + etm.point(target(h1,etm)), + etm.point(target(next(h1,etm),etm))); + const typename EK::Triangle_3 t2(etm.point(source(h2,etm)), + etm.point(target(h2,etm)), + etm.point(target(next(h2,etm),etm))); + + const typename EK::Segment_3 s1(etm.point(source(common[0].first,etm)), etm.point(target(next(common[0].first,etm),etm))); + const typename EK::Segment_3 s2(etm.point(source(common[0].second,etm)), etm.point(target(next(common[0].second,etm),etm))); + + if(do_intersect(t1, s2) || do_intersect(t2, s1)) + return false; + return true; + } + case 2: + { + // shared edge + h1 = next(common[0].first, etm) == common[1].first ? common[1].first : common[0].first; + h2 = next(common[0].second, etm) == common[1].second ? common[1].second : common[0].second; + + if ( is_border(etm.opposite(h1), etm) && + is_border(etm.opposite(h2), etm) ) + { + if( CGAL::coplanar(etm.point(source(h1,etm)), + etm.point(target(h1,etm)), + etm.point(target(etm.next(h1),etm)), + etm.point(source(h1,etm))) && + CGAL::coplanar_orientation(etm.point(source(h1,etm)), + etm.point(target(h1,etm)), + etm.point(target(etm.next(h1),etm)), + etm.point(source(h1,etm))) == CGAL::POSITIVE) + { + return false; + } + return true; + } + else + { + // TODO: 2 identical border vertices, no common edge on the boundary. Not sure what to do + return false; + } + } + default: // size == 3 + return true; + } + }; + + std::vector< std::pair > si_faces; + self_intersections(etm, + CGAL::filter_output_iterator(std::back_inserter(si_faces), + skip_faces)); + + return si_faces.empty(); +} + +} // end of autorefine_impl +#endif + +/** + * \ingroup PMP_corefinement_grp + * \link coref_def_subsec autorefines \endlink `tm`. Refines a triangle mesh + * so that no triangles intersects in their interior. + * Self-intersection edges will be marked as constrained. If an edge that was marked as + * constrained is split, its sub-edges will be marked as constrained as well. + * + * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` + * @tparam NamedParameters a sequence of \ref namedparameters + * + * @param tm input triangulated surface mesh + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd + * + * \cgalNamedParamsBegin + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` + * will be set after the corefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * \cgalNamedParamsEnd + * + */ +template +void +autorefine( TriangleMesh& tm, + const NamedParameters& np = parameters::default_values()) +{ + //TODO: what about degenerate faces? + + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef typename GetGeomTraits::type GT; + GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); + + typedef typename GetVertexPointMap::type VPM; + VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), + get_property_map(vertex_point, tm)); + + typedef typename internal_np::Lookup_named_param_def < + internal_np::concurrency_tag_t, + NamedParameters, + Sequential_tag + > ::type Concurrency_tag; + + typedef boost::graph_traits Graph_traits; + typedef typename Graph_traits::face_descriptor face_descriptor; + typedef typename Graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename Graph_traits::vertex_descriptor vertex_descriptor; + typedef std::pair Pair_of_faces; + + std::vector si_pairs; + + // collect intersecting pairs of triangles + self_intersections(tm, std::back_inserter(si_pairs), np); + + if (si_pairs.empty()) return; + + // assign an id per triangle involved in an intersection + // + the faces involved in the intersection + typedef CGAL::dynamic_face_property_t Face_property_tag; + typedef typename boost::property_map::type Triangle_id_map; + + Triangle_id_map tid_map = get(Face_property_tag(), tm); + for (face_descriptor f : faces(tm)) + put(tid_map, f, -1); + + std::vector intersected_faces; + int tid=-1; + for (const Pair_of_faces& p : si_pairs) + { + if (get(tid_map, p.first)==-1) + { + put(tid_map, p.first, ++tid); + intersected_faces.push_back(p.first); + } + if (get(tid_map, p.second)==-1) + { + put(tid_map, p.second, ++tid); + intersected_faces.push_back(p.second); + } + } + + // init the vector of triangles used for the autorefinement of triangles + typedef CGAL::Exact_predicates_exact_constructions_kernel EK; + std::vector< std::vector > triangles(tid+1); + Cartesian_converter to_exact; + + for(face_descriptor f : intersected_faces) + { + halfedge_descriptor h = halfedge(f, tm); + triangles[get(tid_map, f)].emplace_back( + to_exact( get(vpm, source(h, tm)) ), + to_exact( get(vpm, target(h, tm)) ), + to_exact( get(vpm, target(next(h, tm), tm)) ) ); + } + + typename EK::Intersect_3 intersection = EK().intersect_3_object(); + for (const Pair_of_faces& p : si_pairs) + { + int i1 = get(tid_map, p.first), + i2 = get(tid_map, p.second); + + + std::size_t nbt_1 = triangles[i1].size(), + nbt_2 = triangles[i2].size(); + + std::vector< std::vector > all_segments_1(nbt_1); + std::vector< std::vector > all_segments_2(nbt_2); + std::vector< std::vector > all_points_1(nbt_1); + std::vector< std::vector > all_points_2(nbt_2); + + std::vector t1_subtriangles, t2_subtriangles; + for (std::size_t it1=0; it1 intersection_visitor(all_segments_1[it1], all_segments_2[it2], + all_points_1[it1], all_points_2[it2]); + + boost::apply_visitor(intersection_visitor, *inter); + } + } + } + + // now refine triangles + std::vector new_triangles; + for(std::size_t it1=0; it1(triangles[i1][it1], all_segments_1[it1], all_points_1[it1], new_triangles); + } + triangles[i1].swap(new_triangles); + new_triangles.clear(); + for(std::size_t it2=0; it2(triangles[i2][it2], all_segments_2[it2], all_points_2[it2], new_triangles); + } + triangles[i2].swap(new_triangles); + } + + CGAL_assertion( autorefine_impl::is_output_valid(tm, vpm, tid_map, triangles) ); + + // brute force output: create a soup, orient and to-mesh + // WARNING: there is no reason when using double that identical exact points are identical in double + std::vector soup_points; + std::vector > soup_triangles; + Cartesian_converter to_input; + std::map point_id_map; + + for (vertex_descriptor v : vertices(tm)) + { + if (point_id_map.insert(std::make_pair(to_exact(get(vpm,v)), soup_points.size())).second) + soup_points.push_back(get(vpm,v)); + } + + auto get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); + if (insert_res.second) + soup_points.push_back(to_input(pt)); + return insert_res.first->second; + }; + + for (face_descriptor f : faces(tm)) + { + int tid = get(tid_map, f); + if (tid == -1) + { + halfedge_descriptor h = halfedge(f, tm); + soup_triangles.emplace_back( + CGAL::make_array(get_point_id(to_exact(get(vpm,source(h, tm)))), + get_point_id(to_exact(get(vpm,target(h, tm)))), + get_point_id(to_exact(get(vpm,target(next(h, tm), tm))))) + ); + } + else + { + for (const typename EK::Triangle_3& t : triangles[tid]) + { + soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + } + } + } + clear(tm); + orient_polygon_soup(soup_points, soup_triangles); + polygon_soup_to_polygon_mesh(soup_points, soup_triangles, tm); +} + +} } // end of CGAL::Polygon_mesh_processing + +#endif // CGAL_POLYGON_MESH_PROCESSING_AUTOREFINEMENT_H diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 5c649faa56c7..7d758abc4ee6 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -45,6 +45,7 @@ CGAL_add_named_parameter(implementation_tag_t, implementation_tag, implementatio CGAL_add_named_parameter(prevent_unselection_t, prevent_unselection, prevent_unselection) CGAL_add_named_parameter(verbose_t, verbose, verbose) +CGAL_add_named_parameter(concurrency_tag_t, concurrency_tag, concurrency_tag) // List of named parameters used for IO CGAL_add_named_parameter(vertex_normal_output_iterator_t, vertex_normal_output_iterator, vertex_normal_output_iterator) From b0edd90580ea3044ca3fbfe11086d5413f9338cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 17:21:01 +0100 Subject: [PATCH 138/943] add option to directly dump the soup --- .../Polygon_mesh_processing/autorefinement.h | 149 ++++++++++-------- 1 file changed, 84 insertions(+), 65 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 8c34b4041d86..fd124bce8579 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -266,67 +266,12 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, const std::vec } } // end of autorefine_impl -#endif -/** - * \ingroup PMP_corefinement_grp - * \link coref_def_subsec autorefines \endlink `tm`. Refines a triangle mesh - * so that no triangles intersects in their interior. - * Self-intersection edges will be marked as constrained. If an edge that was marked as - * constrained is split, its sub-edges will be marked as constrained as well. - * - * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref namedparameters - * - * @param tm input triangulated surface mesh - * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - * - * \cgalParamNBegin{geom_traits} - * \cgalParamDescription{an instance of a geometric traits class} - * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} - * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} - * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} - * \cgalParamNEnd - * - * \cgalNamedParamsBegin - * \cgalParamNBegin{vertex_point_map} - * \cgalParamDescription{a property map associating points to the vertices of `tm`} - * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - * as key type and `%Point_3` as value type} - * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} - * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` - * must be available in `TriangleMesh`.} - * \cgalParamNEnd - * - * \cgalParamNBegin{edge_is_constrained_map} - * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} - * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` - * as key type and `bool` as value type} - * \cgalParamDefault{a constant property map returning `false` for any edge} - * \cgalParamNEnd - * - * \cgalParamNBegin{face_index_map} - * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} - * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` - * as key type and `std::size_t` as value type} - * \cgalParamDefault{an automatically indexed internal map} - * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` - * will be set after the corefinement is done.} - * \cgalParamNEnd - * - * \cgalParamNBegin{visitor} - * \cgalParamDescription{a visitor used to track the creation of new faces} - * \cgalParamType{a class model of `PMPCorefinementVisitor`} - * \cgalParamDefault{`Corefinement::Default_visitor`} - * \cgalParamNEnd - * \cgalNamedParamsEnd - * - */ -template -void -autorefine( TriangleMesh& tm, - const NamedParameters& np = parameters::default_values()) +template +void autorefine_soup_output(const TriangleMesh& tm, + std::vector& soup_points, + std::vector >& soup_triangles, + const NamedParameters& np = parameters::default_values()) { //TODO: what about degenerate faces? @@ -336,9 +281,9 @@ autorefine( TriangleMesh& tm, typedef typename GetGeomTraits::type GT; GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); - typedef typename GetVertexPointMap::type VPM; + typedef typename GetVertexPointMap::const_type VPM; VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), - get_property_map(vertex_point, tm)); + get_const_property_map(vertex_point, tm)); typedef typename internal_np::Lookup_named_param_def < internal_np::concurrency_tag_t, @@ -362,7 +307,7 @@ autorefine( TriangleMesh& tm, // assign an id per triangle involved in an intersection // + the faces involved in the intersection typedef CGAL::dynamic_face_property_t Face_property_tag; - typedef typename boost::property_map::type Triangle_id_map; + typedef typename boost::property_map::const_type Triangle_id_map; Triangle_id_map tid_map = get(Face_property_tag(), tm); for (face_descriptor f : faces(tm)) @@ -458,8 +403,6 @@ autorefine( TriangleMesh& tm, // brute force output: create a soup, orient and to-mesh // WARNING: there is no reason when using double that identical exact points are identical in double - std::vector soup_points; - std::vector > soup_triangles; Cartesian_converter to_input; std::map point_id_map; @@ -497,11 +440,87 @@ autorefine( TriangleMesh& tm, } } } + +} +#endif + +/** + * \ingroup PMP_corefinement_grp + * \link coref_def_subsec autorefines \endlink `tm`. Refines a triangle mesh + * so that no triangles intersects in their interior. + * Self-intersection edges will be marked as constrained. If an edge that was marked as + * constrained is split, its sub-edges will be marked as constrained as well. + * + * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` + * @tparam NamedParameters a sequence of \ref namedparameters + * + * @param tm input triangulated surface mesh + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd + * + * \cgalNamedParamsBegin + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` + * will be set after the corefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * \cgalNamedParamsEnd + * + */ +template +void +autorefine( TriangleMesh& tm, + const NamedParameters& np = parameters::default_values()) +{ + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef typename GetGeomTraits::type GT; + GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); + + std::vector soup_points; + std::vector > soup_triangles; + + autorefine_soup_output(tm, soup_points, soup_triangles, np); + clear(tm); orient_polygon_soup(soup_points, soup_triangles); polygon_soup_to_polygon_mesh(soup_points, soup_triangles, tm); } + } } // end of CGAL::Polygon_mesh_processing #endif // CGAL_POLYGON_MESH_PROCESSING_AUTOREFINEMENT_H From 47ac016af779ab6a987ee16c62bbf723bd4c182f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 17:32:35 +0100 Subject: [PATCH 139/943] skip degenerate faces --- .../Polygon_mesh_processing/autorefinement.h | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index fd124bce8579..4b7020b5615b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -125,8 +126,8 @@ struct Intersection_visitor } }; -template -bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, const std::vector< std::vector>>& triangles) +template +bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map is_degen, const std::vector< std::vector>>& triangles) { typedef typename Kernel_traits::value_type>::type IK; typedef boost::graph_traits Graph_traits; @@ -148,6 +149,7 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, const std::vec for (face_descriptor f : faces(tm)) { + if (get(is_degen, f)) continue; // skip degenerate faces int tid = get(tid_map, f); if (tid == -1) { @@ -273,8 +275,6 @@ void autorefine_soup_output(const TriangleMesh& tm, std::vector >& soup_triangles, const NamedParameters& np = parameters::default_values()) { - //TODO: what about degenerate faces? - using parameters::choose_parameter; using parameters::get_parameter; @@ -304,12 +304,20 @@ void autorefine_soup_output(const TriangleMesh& tm, if (si_pairs.empty()) return; + // mark degenerate faces so that we can ignore them + typedef CGAL::dynamic_face_property_t Degen_property_tag; + typedef typename boost::property_map::const_type Is_degen_map; + Is_degen_map is_degen = get(Degen_property_tag(), tm); + + for(face_descriptor f : faces(tm)) + put(is_degen, f, is_degenerate_triangle_face(f, tm, np)); + // assign an id per triangle involved in an intersection // + the faces involved in the intersection - typedef CGAL::dynamic_face_property_t Face_property_tag; - typedef typename boost::property_map::const_type Triangle_id_map; + typedef CGAL::dynamic_face_property_t TID_property_tag; + typedef typename boost::property_map::const_type Triangle_id_map; - Triangle_id_map tid_map = get(Face_property_tag(), tm); + Triangle_id_map tid_map = get(TID_property_tag(), tm); for (face_descriptor f : faces(tm)) put(tid_map, f, -1); @@ -317,12 +325,12 @@ void autorefine_soup_output(const TriangleMesh& tm, int tid=-1; for (const Pair_of_faces& p : si_pairs) { - if (get(tid_map, p.first)==-1) + if (get(tid_map, p.first)==-1 && !get(is_degen, p.first)) { put(tid_map, p.first, ++tid); intersected_faces.push_back(p.first); } - if (get(tid_map, p.second)==-1) + if (get(tid_map, p.second)==-1 && !get(is_degen, p.second)) { put(tid_map, p.second, ++tid); intersected_faces.push_back(p.second); @@ -349,6 +357,7 @@ void autorefine_soup_output(const TriangleMesh& tm, int i1 = get(tid_map, p.first), i2 = get(tid_map, p.second); + if (i1==-1 || i2==-1) continue; //skip degenerate faces std::size_t nbt_1 = triangles[i1].size(), nbt_2 = triangles[i2].size(); @@ -399,7 +408,7 @@ void autorefine_soup_output(const TriangleMesh& tm, triangles[i2].swap(new_triangles); } - CGAL_assertion( autorefine_impl::is_output_valid(tm, vpm, tid_map, triangles) ); + CGAL_assertion( autorefine_impl::is_output_valid(tm, vpm, tid_map, is_degen, triangles) ); // brute force output: create a soup, orient and to-mesh // WARNING: there is no reason when using double that identical exact points are identical in double @@ -422,6 +431,8 @@ void autorefine_soup_output(const TriangleMesh& tm, for (face_descriptor f : faces(tm)) { + if (get(is_degen, f)) continue; //skip degenerate faces + int tid = get(tid_map, f); if (tid == -1) { @@ -440,7 +451,6 @@ void autorefine_soup_output(const TriangleMesh& tm, } } } - } #endif From 6df9926f9b6ea6553be1fbcfd1c0996e76b802f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 17:47:04 +0100 Subject: [PATCH 140/943] add another example with soup as input --- .../Polygon_mesh_processing/CMakeLists.txt | 1 + .../soup_autorefinement.cpp | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index e188e01e3eb7..d2faeb70cb28 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -51,6 +51,7 @@ create_single_source_cgal_program("cc_compatible_orientations.cpp") create_single_source_cgal_program("hausdorff_distance_remeshing_example.cpp") create_single_source_cgal_program("hausdorff_bounded_error_distance_example.cpp") create_single_source_cgal_program("triangle_mesh_autorefinement.cpp") +create_single_source_cgal_program("soup_autorefinement.cpp") find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater) include(CGAL_Eigen3_support) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp new file mode 100644 index 000000000000..fa1f5d686907 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -0,0 +1,39 @@ +#include +#include + +#include +#include +#include +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef Kernel::Point_3 Point; + +typedef CGAL::Surface_mesh Mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int argc, char** argv) +{ + const std::string filename = argc == 1 ? CGAL::data_file_path("meshes/elephant.off") + : std::string(argv[1]); + + std::vector input_points; + std::vector > input_triangles; + + CGAL::IO::read_polygon_soup(filename, input_points, input_triangles); + PMP::repair_polygon_soup(input_points, input_triangles); + + Mesh mesh; + PMP::orient_polygon_soup(input_points, input_triangles); + PMP::polygon_soup_to_polygon_mesh(input_points, input_triangles, mesh); + + PMP::autorefine(mesh); + + CGAL::IO::write_polygon_mesh("autorefined.off", mesh, CGAL::parameters::stream_precision(17)); + + return 0; +} From e1414de8d935cc5da43682c48b5419823b806c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 18:09:26 +0100 Subject: [PATCH 141/943] add debug --- .../Polygon_mesh_processing/autorefinement.h | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 4b7020b5615b..8dd8d28fcfcc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -181,6 +181,17 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i is_border_map[target(h, etm)] = true; } +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + std::cerr << std::setprecision(17); + auto verbose_fail_msg = [&](int i, const std::pair& p) + { + typename Exact_mesh::Halfedge_index h1 = halfedge(p.first, etm), h2 = halfedge(p.second, etm); + std::cerr << "DEBUG: failing at check #" << i << "\n"; + std::cerr << "DEBUG: " << etm.point(source(h1, etm)) << " " << etm.point(target(h1, etm)) << " " << etm.point(target(next(h1, etm), etm)) << " " << etm.point(source(h1, etm)) << "\n"; + std::cerr << "DEBUG: " << etm.point(source(h2, etm)) << " " << etm.point(target(h2, etm)) << " " << etm.point(target(next(h2, etm), etm)) << " " << etm.point(source(h2, etm)) << "\n"; + }; +#endif + //TODO: double check me auto skip_faces = [&](const std::pair& p) { @@ -190,13 +201,25 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i if (is_border_map[source(h1, etm)]) bv1.push_back(prev(h1, etm)); if (is_border_map[target(h1, etm)]) bv1.push_back(h1); if (is_border_map[target(next(h1, etm), etm)]) bv1.push_back(next(h1, etm)); - if (bv1.empty()) return false; + if (bv1.empty()) + { +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(1, p); +#endif + return false; + } boost::container::small_vector bv2; if (is_border_map[source(h2, etm)]) bv2.push_back(prev(h2, etm)); if (is_border_map[target(h2, etm)]) bv2.push_back(h2); if (is_border_map[target(next(h2, etm), etm)]) bv2.push_back(next(h2, etm)); - if (bv2.empty()) return false; + if (bv2.empty()) + { +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(2, p); +#endif + return false; + } //collect identical border vertices boost::container::small_vector, 3> common; @@ -205,7 +228,13 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i if (etm.point(target(h1, etm))==etm.point(target(h2,etm))) common.push_back(std::make_pair(h1,h2)); - if (common.empty()) return false; + if (common.empty()) + { +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(3, p); +#endif + return false; + } switch (common.size()) { @@ -223,7 +252,12 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i const typename EK::Segment_3 s2(etm.point(source(common[0].second,etm)), etm.point(target(next(common[0].second,etm),etm))); if(do_intersect(t1, s2) || do_intersect(t2, s1)) + { +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(4, p); +#endif return false; + } return true; } case 2: @@ -244,6 +278,9 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i etm.point(target(etm.next(h1),etm)), etm.point(source(h1,etm))) == CGAL::POSITIVE) { +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(5, p); +#endif return false; } return true; @@ -251,6 +288,9 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i else { // TODO: 2 identical border vertices, no common edge on the boundary. Not sure what to do +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + verbose_fail_msg(6, p); +#endif return false; } } From 85368c43c6258e67aca26af6985fb57884642901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 19:38:10 +0100 Subject: [PATCH 142/943] use all vertices in the check --- .../Polygon_mesh_processing/autorefinement.h | 79 ++++++------------- 1 file changed, 23 insertions(+), 56 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 8dd8d28fcfcc..fd5e7312c263 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -173,13 +173,6 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i Exact_mesh etm; orient_polygon_soup(soup_points, soup_triangles); polygon_soup_to_polygon_mesh(soup_points, soup_triangles, etm); - typename Exact_mesh::Property_map is_border_map = - etm.template add_property_map("v:is_border", false).first; - for(typename Exact_mesh::Halfedge_index h : etm.halfedges()) - { - if (CGAL::is_border(h, etm)) - is_border_map[target(h, etm)] = true; - } #ifdef CGAL_DEBUG_PMP_AUTOREFINE std::cerr << std::setprecision(17); @@ -197,41 +190,27 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i { typename Exact_mesh::Halfedge_index h1 = etm.halfedge(p.first), h2=etm.halfedge(p.second); - boost::container::small_vector bv1; - if (is_border_map[source(h1, etm)]) bv1.push_back(prev(h1, etm)); - if (is_border_map[target(h1, etm)]) bv1.push_back(h1); - if (is_border_map[target(next(h1, etm), etm)]) bv1.push_back(next(h1, etm)); - if (bv1.empty()) - { -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(1, p); -#endif - return false; - } + boost::container::small_vector v1; + v1.push_back(prev(h1, etm)); + v1.push_back(h1); + v1.push_back(next(h1, etm)); - boost::container::small_vector bv2; - if (is_border_map[source(h2, etm)]) bv2.push_back(prev(h2, etm)); - if (is_border_map[target(h2, etm)]) bv2.push_back(h2); - if (is_border_map[target(next(h2, etm), etm)]) bv2.push_back(next(h2, etm)); - if (bv2.empty()) - { -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(2, p); -#endif - return false; - } + boost::container::small_vector v2; + v2.push_back(prev(h2, etm)); + v2.push_back(h2); + v2.push_back(next(h2, etm)); - //collect identical border vertices + //collect identical vertices boost::container::small_vector, 3> common; - for(typename Exact_mesh::Halfedge_index h1 : bv1) - for(typename Exact_mesh::Halfedge_index h2 : bv2) + for(typename Exact_mesh::Halfedge_index h1 : v1) + for(typename Exact_mesh::Halfedge_index h2 : v2) if (etm.point(target(h1, etm))==etm.point(target(h2,etm))) common.push_back(std::make_pair(h1,h2)); if (common.empty()) { #ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(3, p); + verbose_fail_msg(1, p); #endif return false; } @@ -254,7 +233,7 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i if(do_intersect(t1, s2) || do_intersect(t2, s1)) { #ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(4, p); + verbose_fail_msg(2, p); #endif return false; } @@ -266,33 +245,21 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i h1 = next(common[0].first, etm) == common[1].first ? common[1].first : common[0].first; h2 = next(common[0].second, etm) == common[1].second ? common[1].second : common[0].second; - if ( is_border(etm.opposite(h1), etm) && - is_border(etm.opposite(h2), etm) ) + if( CGAL::coplanar(etm.point(source(h1,etm)), + etm.point(target(h1,etm)), + etm.point(target(etm.next(h1),etm)), + etm.point(source(h1,etm))) && + CGAL::coplanar_orientation(etm.point(source(h1,etm)), + etm.point(target(h1,etm)), + etm.point(target(etm.next(h1),etm)), + etm.point(source(h1,etm))) == CGAL::POSITIVE) { - if( CGAL::coplanar(etm.point(source(h1,etm)), - etm.point(target(h1,etm)), - etm.point(target(etm.next(h1),etm)), - etm.point(source(h1,etm))) && - CGAL::coplanar_orientation(etm.point(source(h1,etm)), - etm.point(target(h1,etm)), - etm.point(target(etm.next(h1),etm)), - etm.point(source(h1,etm))) == CGAL::POSITIVE) - { #ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(5, p); -#endif - return false; - } - return true; - } - else - { - // TODO: 2 identical border vertices, no common edge on the boundary. Not sure what to do -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(6, p); + verbose_fail_msg(3, p); #endif return false; } + return true; } default: // size == 3 return true; From 944475f169213f38a04637480f0be7aaa080b98c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 2 Jan 2023 19:38:38 +0100 Subject: [PATCH 143/943] triangulate input faces --- .../examples/Polygon_mesh_processing/soup_autorefinement.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index fa1f5d686907..8ca983aa31c3 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -30,6 +31,7 @@ int main(int argc, char** argv) Mesh mesh; PMP::orient_polygon_soup(input_points, input_triangles); PMP::polygon_soup_to_polygon_mesh(input_points, input_triangles, mesh); + PMP::triangulate_faces(mesh); PMP::autorefine(mesh); From 2b77fcd094859cd07853b1ae02434b05d5a277a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 3 Jan 2023 18:22:14 +0100 Subject: [PATCH 144/943] faster implementation + fix intersection segments + check --- .../Polygon_mesh_processing/autorefinement.h | 246 ++++++++++-------- 1 file changed, 133 insertions(+), 113 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index fd5e7312c263..01188d4d6b14 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -26,7 +27,7 @@ #include #include -#ifndef NDEBUG +#ifdef CGAL_DEBUG_PMP_AUTOREFINE // debug #include #endif @@ -46,12 +47,42 @@ void generate_subtriangles(const typename EK::Triangle_3& t, std::vector& new_triangles) { typedef CGAL::Projection_traits_3 P_traits; - // typedef CGAL::Exact_intersections_tag Itag; - typedef CGAL::No_constraint_intersection_requiring_constructions_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; - - - P_traits cdt_traits(normal(t[0], t[1], t[2])); + typedef CGAL::Exact_intersections_tag Itag; + //typedef CGAL::No_constraint_intersection_requiring_constructions_tag Itag; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_base; + typedef CGAL::Constrained_triangulation_plus_2 CDT; + + typename EK::Vector_3 n = normal(t[0], t[1], t[2]); + //~ bool orientation_flipped = false; + //~ if (n.x() < 0) + //~ { + //~ orientation_flipped = true; + //~ n = -n; + //~ } + //~ else + //~ { + //~ if (n.x()==0) + //~ { + //~ if (n.y() < 0) + //~ { + //~ orientation_flipped = true; + //~ n = -n; + //~ } + //~ else + //~ { + //~ if (n.y()==0) + //~ { + //~ if (n.z() < 0) + //~ { + //~ orientation_flipped = true; + //~ n = -n; + //~ } + //~ } + //~ } + //~ } + //~ } + + P_traits cdt_traits(n); CDT cdt(cdt_traits); cdt.insert_outside_affine_hull(t[0]); @@ -65,12 +96,41 @@ void generate_subtriangles(const typename EK::Triangle_3& t, for (const typename EK::Point_3& p : points) cdt.insert(p); - for (typename CDT::Face_handle fh : cdt.finite_face_handles()) - { - new_triangles.emplace_back(fh->vertex(0)->point(), - fh->vertex(cdt.ccw(0))->point(), - fh->vertex(cdt.cw(0))->point()); - } + //~ if (orientation_flipped) + //~ for (typename CDT::Face_handle fh : cdt.finite_face_handles()) + //~ { + //~ new_triangles.emplace_back(fh->vertex(0)->point(), + //~ fh->vertex(cdt.cw(0))->point(), + //~ fh->vertex(cdt.ccw(0))->point()); + //~ } + //~ else +#ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS + static int k = 0; + std::stringstream buffer; + buffer.precision(17); + int nbt=0; +#endif + for (typename CDT::Face_handle fh : cdt.finite_face_handles()) + { + new_triangles.emplace_back(fh->vertex(0)->point(), + fh->vertex(cdt.ccw(0))->point(), + fh->vertex(cdt.cw(0))->point()); +#ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS + ++nbt; + buffer << fh->vertex(0)->point() << "\n"; + buffer << fh->vertex(cdt.ccw(0))->point() << "\n"; + buffer << fh->vertex(cdt.cw(0))->point() << "\n"; +#endif + } + +#ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS + std::ofstream dump("triangulation_"+std::to_string(k)+".off"); + dump << "OFF\n" << 3*nbt << " " << nbt << " 0\n"; + dump << buffer.str(); + for (int i=0; i @@ -106,69 +166,31 @@ struct Intersection_visitor void operator()(const typename EK::Triangle_3& t) { - for (std::size_t i=1; i<3; ++i) + for (std::size_t i=0; i<3; ++i) { - typename EK::Segment_3 s(t[i-1], t[i]); + typename EK::Segment_3 s(t[i], t[(i+1)%3]); all_segments_1.push_back(s); all_segments_2.push_back(s); } + } void operator()(const std::vector& poly) { std::size_t nbp = poly.size(); - for (std::size_t i=1; i -bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map is_degen, const std::vector< std::vector>>& triangles) +template +bool is_output_valid(std::vector> soup_points, + std::vector > soup_triangles) { - typedef typename Kernel_traits::value_type>::type IK; - typedef boost::graph_traits Graph_traits; - typedef typename Graph_traits::face_descriptor face_descriptor; - typedef typename Graph_traits::halfedge_descriptor halfedge_descriptor; - - std::vector soup_points; - std::vector > soup_triangles; - Cartesian_converter to_exact; - std::map point_id_map; - - auto get_point_id = [&](const typename EK::Point_3& pt) - { - auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); - if (insert_res.second) - soup_points.push_back(pt); - return insert_res.first->second; - }; - - for (face_descriptor f : faces(tm)) - { - if (get(is_degen, f)) continue; // skip degenerate faces - int tid = get(tid_map, f); - if (tid == -1) - { - halfedge_descriptor h = halfedge(f, tm); - soup_triangles.emplace_back( - CGAL::make_array(get_point_id(to_exact(get(vpm,source(h, tm)))), - get_point_id(to_exact(get(vpm,target(h, tm)))), - get_point_id(to_exact(get(vpm,target(next(h, tm), tm))))) - ); - } - else - { - for (const typename EK::Triangle_3& t : triangles[tid]) - { - soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); - } - } - } - typedef Surface_mesh Exact_mesh; Exact_mesh etm; orient_polygon_soup(soup_points, soup_triangles); @@ -248,11 +270,11 @@ bool is_output_valid(TriangleMesh& tm , VPM vpm, TID_Map tid_map, Is_degen_map i if( CGAL::coplanar(etm.point(source(h1,etm)), etm.point(target(h1,etm)), etm.point(target(etm.next(h1),etm)), - etm.point(source(h1,etm))) && + etm.point(target(etm.next(h2),etm))) && CGAL::coplanar_orientation(etm.point(source(h1,etm)), etm.point(target(h1,etm)), etm.point(target(etm.next(h1),etm)), - etm.point(source(h1,etm))) == CGAL::POSITIVE) + etm.point(target(etm.next(h2),etm))) == CGAL::POSITIVE) { #ifdef CGAL_DEBUG_PMP_AUTOREFINE verbose_fail_msg(3, p); @@ -346,18 +368,22 @@ void autorefine_soup_output(const TriangleMesh& tm, // init the vector of triangles used for the autorefinement of triangles typedef CGAL::Exact_predicates_exact_constructions_kernel EK; - std::vector< std::vector > triangles(tid+1); + std::vector< EK::Triangle_3 > triangles(tid+1); Cartesian_converter to_exact; for(face_descriptor f : intersected_faces) { halfedge_descriptor h = halfedge(f, tm); - triangles[get(tid_map, f)].emplace_back( + triangles[get(tid_map, f)]= EK::Triangle_3( to_exact( get(vpm, source(h, tm)) ), to_exact( get(vpm, target(h, tm)) ), to_exact( get(vpm, target(next(h, tm), tm)) ) ); } + std::vector< std::vector > all_segments(triangles.size()); + std::vector< std::vector > all_points(triangles.size()); + + typename EK::Intersect_3 intersection = EK().intersect_3_object(); for (const Pair_of_faces& p : si_pairs) { @@ -366,73 +392,59 @@ void autorefine_soup_output(const TriangleMesh& tm, if (i1==-1 || i2==-1) continue; //skip degenerate faces - std::size_t nbt_1 = triangles[i1].size(), - nbt_2 = triangles[i2].size(); + const EK::Triangle_3& t1 = triangles[i1]; + const EK::Triangle_3& t2 = triangles[i2]; - std::vector< std::vector > all_segments_1(nbt_1); - std::vector< std::vector > all_segments_2(nbt_2); - std::vector< std::vector > all_points_1(nbt_1); - std::vector< std::vector > all_points_2(nbt_2); + auto inter = intersection(t1, t2); - std::vector t1_subtriangles, t2_subtriangles; - for (std::size_t it1=0; it1 intersection_visitor(all_segments_1[it1], all_segments_2[it2], - all_points_1[it1], all_points_2[it2]); + autorefine_impl::Intersection_visitor intersection_visitor(all_segments[i1], all_segments[i2], + all_points[i1], all_points[i2]); - boost::apply_visitor(intersection_visitor, *inter); - } - } + boost::apply_visitor(intersection_visitor, *inter); } + } - // now refine triangles - std::vector new_triangles; - for(std::size_t it1=0; it1(triangles[i1][it1], all_segments_1[it1], all_points_1[it1], new_triangles); - } - triangles[i1].swap(new_triangles); - new_triangles.clear(); - for(std::size_t it2=0; it2(triangles[i2][it2], all_segments_2[it2], all_points_2[it2], new_triangles); - } - triangles[i2].swap(new_triangles); + // now refine triangles + std::vector new_triangles; + for(std::size_t ti=0; ti(triangles[ti], all_segments[ti], all_points[ti], new_triangles); } - CGAL_assertion( autorefine_impl::is_output_valid(tm, vpm, tid_map, is_degen, triangles) ); // brute force output: create a soup, orient and to-mesh - // WARNING: there is no reason when using double that identical exact points are identical in double Cartesian_converter to_input; std::map point_id_map; +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + std::vector exact_soup_points; +#endif for (vertex_descriptor v : vertices(tm)) { if (point_id_map.insert(std::make_pair(to_exact(get(vpm,v)), soup_points.size())).second) + { soup_points.push_back(get(vpm,v)); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.push_back(to_exact(get(vpm,v))); +#endif + } } auto get_point_id = [&](const typename EK::Point_3& pt) { auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); if (insert_res.second) + { soup_points.push_back(to_input(pt)); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.push_back(pt); +#endif + } return insert_res.first->second; }; @@ -450,14 +462,22 @@ void autorefine_soup_output(const TriangleMesh& tm, get_point_id(to_exact(get(vpm,target(next(h, tm), tm))))) ); } - else - { - for (const typename EK::Triangle_3& t : triangles[tid]) - { - soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); - } - } } + for (const typename EK::Triangle_3& t : new_triangles) + { + soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + } + + +#ifndef CGAL_NDEBUG + CGAL_assertion( autorefine_impl::is_output_valid(exact_soup_points, soup_triangles) ); +#endif + +#ifdef CGAL_DEBUG_PMP_AUTOREFINE + autorefine_impl::is_output_valid(exact_soup_points, soup_triangles); + throw std::runtime_error("invalid output"); +#endif + } #endif From d92d37c476c40e909db3b8a27b20e3968c4e1f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 3 Jan 2023 18:44:52 +0100 Subject: [PATCH 145/943] fix condition --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 01188d4d6b14..d18826fc2f1e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -474,7 +474,7 @@ void autorefine_soup_output(const TriangleMesh& tm, #endif #ifdef CGAL_DEBUG_PMP_AUTOREFINE - autorefine_impl::is_output_valid(exact_soup_points, soup_triangles); + if (!autorefine_impl::is_output_valid(exact_soup_points, soup_triangles)) throw std::runtime_error("invalid output"); #endif From 34e8d7ee420489459d88a90a83a277cc9e071caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 4 Jan 2023 16:51:55 +0100 Subject: [PATCH 146/943] disable CDT+ that is slower and add debug --- .../Polygon_mesh_processing/autorefinement.h | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index d18826fc2f1e..3ec807450421 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -32,6 +32,10 @@ #include #endif +#ifndef CGAL_PMP_AUTOREFINE_VERBOSE +#define CGAL_PMP_AUTOREFINE_VERBOSE(MSG) +#endif + #include namespace CGAL { @@ -49,8 +53,12 @@ void generate_subtriangles(const typename EK::Triangle_3& t, typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; //typedef CGAL::No_constraint_intersection_requiring_constructions_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_base; - typedef CGAL::Constrained_triangulation_plus_2 CDT; + + + //typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_base; + //typedef CGAL::Constrained_triangulation_plus_2 CDT; + + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; typename EK::Vector_3 n = normal(t[0], t[1], t[2]); //~ bool orientation_flipped = false; @@ -329,6 +337,7 @@ void autorefine_soup_output(const TriangleMesh& tm, std::vector si_pairs; // collect intersecting pairs of triangles + CGAL_PMP_AUTOREFINE_VERBOSE("collect intersecting pairs"); self_intersections(tm, std::back_inserter(si_pairs), np); if (si_pairs.empty()) return; @@ -384,6 +393,7 @@ void autorefine_soup_output(const TriangleMesh& tm, std::vector< std::vector > all_points(triangles.size()); + CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); typename EK::Intersect_3 intersection = EK().intersect_3_object(); for (const Pair_of_faces& p : si_pairs) { @@ -406,6 +416,7 @@ void autorefine_soup_output(const TriangleMesh& tm, } } + CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles std::vector new_triangles; for(std::size_t ti=0; ti to_input; std::map point_id_map; #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) @@ -468,16 +480,17 @@ void autorefine_soup_output(const TriangleMesh& tm, soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); } - #ifndef CGAL_NDEBUG + CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); CGAL_assertion( autorefine_impl::is_output_valid(exact_soup_points, soup_triangles) ); #endif #ifdef CGAL_DEBUG_PMP_AUTOREFINE + CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); if (!autorefine_impl::is_output_valid(exact_soup_points, soup_triangles)) throw std::runtime_error("invalid output"); #endif - + CGAL_PMP_AUTOREFINE_VERBOSE("done"); } #endif From e94c7be4aa72ca2b481e15265ec30f5bad92abec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 5 Jan 2023 08:44:32 +0100 Subject: [PATCH 147/943] update doc + TODOs --- .../Polygon_mesh_processing/autorefinement.h | 31 +++---------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 3ec807450421..0711ad71e21c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1,3 +1,5 @@ +//TODO: add for soup face the id of the input face. not sure it is easy to report intersection edge as a pair of vertex id + // Copyright (c) 2023 GeometryFactory (France). // All rights reserved. // @@ -347,6 +349,7 @@ void autorefine_soup_output(const TriangleMesh& tm, typedef typename boost::property_map::const_type Is_degen_map; Is_degen_map is_degen = get(Degen_property_tag(), tm); +// TODO: we already have this test in bbox inter when it report (f,f) for(face_descriptor f : faces(tm)) put(is_degen, f, is_degenerate_triangle_face(f, tm, np)); @@ -496,10 +499,7 @@ void autorefine_soup_output(const TriangleMesh& tm, /** * \ingroup PMP_corefinement_grp - * \link coref_def_subsec autorefines \endlink `tm`. Refines a triangle mesh - * so that no triangles intersects in their interior. - * Self-intersection edges will be marked as constrained. If an edge that was marked as - * constrained is split, its sub-edges will be marked as constrained as well. + * refines a triangle mesh so that no triangles intersects in their interior. * * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` * @tparam NamedParameters a sequence of \ref namedparameters @@ -524,29 +524,6 @@ void autorefine_soup_output(const TriangleMesh& tm, * must be available in `TriangleMesh`.} * \cgalParamNEnd * - * \cgalParamNBegin{edge_is_constrained_map} - * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} - * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` - * as key type and `bool` as value type} - * \cgalParamDefault{a constant property map returning `false` for any edge} - * \cgalParamNEnd - * - * \cgalParamNBegin{face_index_map} - * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} - * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` - * as key type and `std::size_t` as value type} - * \cgalParamDefault{an automatically indexed internal map} - * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` - * will be set after the corefinement is done.} - * \cgalParamNEnd - * - * \cgalParamNBegin{visitor} - * \cgalParamDescription{a visitor used to track the creation of new faces} - * \cgalParamType{a class model of `PMPCorefinementVisitor`} - * \cgalParamDefault{`Corefinement::Default_visitor`} - * \cgalParamNEnd - * \cgalNamedParamsEnd - * */ template From 370d9134a08db1f422e6038dfa7e94ea695efea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 9 Jan 2023 17:59:56 +0100 Subject: [PATCH 148/943] use insertion by range --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 0711ad71e21c..b2786386205f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -54,13 +54,10 @@ void generate_subtriangles(const typename EK::Triangle_3& t, { typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; - //typedef CGAL::No_constraint_intersection_requiring_constructions_tag Itag; - - //typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_base; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; //typedef CGAL::Constrained_triangulation_plus_2 CDT; - - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; + typedef CDT_2 CDT; typename EK::Vector_3 n = normal(t[0], t[1], t[2]); //~ bool orientation_flipped = false; @@ -100,11 +97,9 @@ void generate_subtriangles(const typename EK::Triangle_3& t, typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), false); v->set_point(t[2]); - for (const typename EK::Segment_3& s : segments) - cdt.insert_constraint(s[0], s[1]); + cdt.insert_constraints(segments.begin(), segments.end()); + cdt.insert(points.begin(), points.end()); - for (const typename EK::Point_3& p : points) - cdt.insert(p); //~ if (orientation_flipped) //~ for (typename CDT::Face_handle fh : cdt.finite_face_handles()) From 9ba370a22902afb08d0af7629b7383bba785ac57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 10 Jan 2023 14:40:02 +0100 Subject: [PATCH 149/943] use a canonical orientation --- .../Polygon_mesh_processing/autorefinement.h | 58 ++++++------------- 1 file changed, 17 insertions(+), 41 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index b2786386205f..881ffcc8796b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -60,55 +60,26 @@ void generate_subtriangles(const typename EK::Triangle_3& t, typedef CDT_2 CDT; typename EK::Vector_3 n = normal(t[0], t[1], t[2]); - //~ bool orientation_flipped = false; - //~ if (n.x() < 0) - //~ { - //~ orientation_flipped = true; - //~ n = -n; - //~ } - //~ else - //~ { - //~ if (n.x()==0) - //~ { - //~ if (n.y() < 0) - //~ { - //~ orientation_flipped = true; - //~ n = -n; - //~ } - //~ else - //~ { - //~ if (n.y()==0) - //~ { - //~ if (n.z() < 0) - //~ { - //~ orientation_flipped = true; - //~ n = -n; - //~ } - //~ } - //~ } - //~ } - //~ } + typename EK::Point_3 o(0,0,0); + + bool orientation_flipped = false; + if ( typename EK::Less_xyz_3()(o+n,o) ) + { + n=-n; + orientation_flipped = true; + } P_traits cdt_traits(n); CDT cdt(cdt_traits); cdt.insert_outside_affine_hull(t[0]); cdt.insert_outside_affine_hull(t[1]); - typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), false); + typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), orientation_flipped); v->set_point(t[2]); cdt.insert_constraints(segments.begin(), segments.end()); cdt.insert(points.begin(), points.end()); - - //~ if (orientation_flipped) - //~ for (typename CDT::Face_handle fh : cdt.finite_face_handles()) - //~ { - //~ new_triangles.emplace_back(fh->vertex(0)->point(), - //~ fh->vertex(cdt.cw(0))->point(), - //~ fh->vertex(cdt.ccw(0))->point()); - //~ } - //~ else #ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS static int k = 0; std::stringstream buffer; @@ -117,9 +88,14 @@ void generate_subtriangles(const typename EK::Triangle_3& t, #endif for (typename CDT::Face_handle fh : cdt.finite_face_handles()) { - new_triangles.emplace_back(fh->vertex(0)->point(), - fh->vertex(cdt.ccw(0))->point(), - fh->vertex(cdt.cw(0))->point()); + if (orientation_flipped) + new_triangles.emplace_back(fh->vertex(0)->point(), + fh->vertex(cdt.cw(0))->point(), + fh->vertex(cdt.ccw(0))->point()); + else + new_triangles.emplace_back(fh->vertex(0)->point(), + fh->vertex(cdt.ccw(0))->point(), + fh->vertex(cdt.cw(0))->point()); #ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS ++nbt; buffer << fh->vertex(0)->point() << "\n"; From f9668e279f5f7f2acb49a735adb9f6c15e110841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 11 Jan 2023 11:14:05 +0100 Subject: [PATCH 150/943] use self-intersection test for soup for checking the validity of the output on some cases it seems twice faster --- .../Polygon_mesh_processing/autorefinement.h | 122 +----------------- 1 file changed, 4 insertions(+), 118 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 881ffcc8796b..9393e197a195 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -29,11 +29,6 @@ #include #include -#ifdef CGAL_DEBUG_PMP_AUTOREFINE -// debug -#include -#endif - #ifndef CGAL_PMP_AUTOREFINE_VERBOSE #define CGAL_PMP_AUTOREFINE_VERBOSE(MSG) #endif @@ -168,115 +163,6 @@ struct Intersection_visitor } }; -template -bool is_output_valid(std::vector> soup_points, - std::vector > soup_triangles) -{ - typedef Surface_mesh Exact_mesh; - Exact_mesh etm; - orient_polygon_soup(soup_points, soup_triangles); - polygon_soup_to_polygon_mesh(soup_points, soup_triangles, etm); - -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - std::cerr << std::setprecision(17); - auto verbose_fail_msg = [&](int i, const std::pair& p) - { - typename Exact_mesh::Halfedge_index h1 = halfedge(p.first, etm), h2 = halfedge(p.second, etm); - std::cerr << "DEBUG: failing at check #" << i << "\n"; - std::cerr << "DEBUG: " << etm.point(source(h1, etm)) << " " << etm.point(target(h1, etm)) << " " << etm.point(target(next(h1, etm), etm)) << " " << etm.point(source(h1, etm)) << "\n"; - std::cerr << "DEBUG: " << etm.point(source(h2, etm)) << " " << etm.point(target(h2, etm)) << " " << etm.point(target(next(h2, etm), etm)) << " " << etm.point(source(h2, etm)) << "\n"; - }; -#endif - - //TODO: double check me - auto skip_faces = [&](const std::pair& p) - { - typename Exact_mesh::Halfedge_index h1 = etm.halfedge(p.first), h2=etm.halfedge(p.second); - - boost::container::small_vector v1; - v1.push_back(prev(h1, etm)); - v1.push_back(h1); - v1.push_back(next(h1, etm)); - - boost::container::small_vector v2; - v2.push_back(prev(h2, etm)); - v2.push_back(h2); - v2.push_back(next(h2, etm)); - - //collect identical vertices - boost::container::small_vector, 3> common; - for(typename Exact_mesh::Halfedge_index h1 : v1) - for(typename Exact_mesh::Halfedge_index h2 : v2) - if (etm.point(target(h1, etm))==etm.point(target(h2,etm))) - common.push_back(std::make_pair(h1,h2)); - - if (common.empty()) - { -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(1, p); -#endif - return false; - } - - switch (common.size()) - { - case 1: - { - // geometric check if the opposite segments intersect the triangles - const typename EK::Triangle_3 t1(etm.point(source(h1,etm)), - etm.point(target(h1,etm)), - etm.point(target(next(h1,etm),etm))); - const typename EK::Triangle_3 t2(etm.point(source(h2,etm)), - etm.point(target(h2,etm)), - etm.point(target(next(h2,etm),etm))); - - const typename EK::Segment_3 s1(etm.point(source(common[0].first,etm)), etm.point(target(next(common[0].first,etm),etm))); - const typename EK::Segment_3 s2(etm.point(source(common[0].second,etm)), etm.point(target(next(common[0].second,etm),etm))); - - if(do_intersect(t1, s2) || do_intersect(t2, s1)) - { -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(2, p); -#endif - return false; - } - return true; - } - case 2: - { - // shared edge - h1 = next(common[0].first, etm) == common[1].first ? common[1].first : common[0].first; - h2 = next(common[0].second, etm) == common[1].second ? common[1].second : common[0].second; - - if( CGAL::coplanar(etm.point(source(h1,etm)), - etm.point(target(h1,etm)), - etm.point(target(etm.next(h1),etm)), - etm.point(target(etm.next(h2),etm))) && - CGAL::coplanar_orientation(etm.point(source(h1,etm)), - etm.point(target(h1,etm)), - etm.point(target(etm.next(h1),etm)), - etm.point(target(etm.next(h2),etm))) == CGAL::POSITIVE) - { -#ifdef CGAL_DEBUG_PMP_AUTOREFINE - verbose_fail_msg(3, p); -#endif - return false; - } - return true; - } - default: // size == 3 - return true; - } - }; - - std::vector< std::pair > si_faces; - self_intersections(etm, - CGAL::filter_output_iterator(std::back_inserter(si_faces), - skip_faces)); - - return si_faces.empty(); -} - } // end of autorefine_impl template @@ -456,13 +342,13 @@ void autorefine_soup_output(const TriangleMesh& tm, #ifndef CGAL_NDEBUG CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - CGAL_assertion( autorefine_impl::is_output_valid(exact_soup_points, soup_triangles) ); -#endif - + CGAL_assertion( !does_triangle_soup_self_intersect(exact_soup_points, soup_triangles) ); +#else #ifdef CGAL_DEBUG_PMP_AUTOREFINE CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - if (!autorefine_impl::is_output_valid(exact_soup_points, soup_triangles)) + if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles)) throw std::runtime_error("invalid output"); +#endif #endif CGAL_PMP_AUTOREFINE_VERBOSE("done"); } From 7d1582ddbb9ad7bf6e7d8872eb08101254b7e68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 11 Jan 2023 14:00:32 +0100 Subject: [PATCH 151/943] avoid doing twice the degenerate test --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 9393e197a195..283e139eb1c6 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -206,9 +206,11 @@ void autorefine_soup_output(const TriangleMesh& tm, typedef typename boost::property_map::const_type Is_degen_map; Is_degen_map is_degen = get(Degen_property_tag(), tm); -// TODO: we already have this test in bbox inter when it report (f,f) for(face_descriptor f : faces(tm)) - put(is_degen, f, is_degenerate_triangle_face(f, tm, np)); + put(is_degen, f, false); + for (const Pair_of_faces& p : si_pairs) + if (p.first==p.second) // bbox inter reports (f,f) for degenerate faces + put(is_degen, p.first, true); // assign an id per triangle involved in an intersection // + the faces involved in the intersection From 822e65b3cf93b51855d14349d96cdbcf09cff85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 13 Jan 2023 09:35:51 +0100 Subject: [PATCH 152/943] build visitor once for all --- .../Polygon_mesh_processing/autorefinement.h | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 283e139eb1c6..ea1c0de07eba 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -54,6 +54,7 @@ void generate_subtriangles(const typename EK::Triangle_3& t, //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; + // positive triangle normal typename EK::Vector_3 n = normal(t[0], t[1], t[2]); typename EK::Point_3 o(0,0,0); @@ -112,32 +113,32 @@ void generate_subtriangles(const typename EK::Triangle_3& t, template struct Intersection_visitor { - std::vector& all_segments_1; - std::vector& all_segments_2; - std::vector& all_points_1; - std::vector& all_points_2; - - Intersection_visitor(std::vector& all_segments_1, - std::vector& all_segments_2, - std::vector& all_points_1, - std::vector& all_points_2) - : all_segments_1(all_segments_1) - , all_segments_2(all_segments_2) - , all_points_1(all_points_1) - , all_points_2(all_points_2) + std::vector< std::vector >& all_segments; + std::vector< std::vector >& all_points; + std::pair ids; + + Intersection_visitor(std::vector< std::vector >& all_segments, + std::vector< std::vector >& all_points) + : all_segments (all_segments) + , all_points(all_points) {} + void set_triangle_ids(int i1, int i2) + { + ids = {i1, i2}; + } + typedef void result_type; void operator()(const typename EK::Point_3& p) { - all_points_1.push_back(p); - all_points_2.push_back(p); + all_points[ids.first].push_back(p); + all_points[ids.second].push_back(p); } void operator()(const typename EK::Segment_3& s) { - all_segments_1.push_back(s); - all_segments_2.push_back(s); + all_segments[ids.first].push_back(s); + all_segments[ids.second].push_back(s); } void operator()(const typename EK::Triangle_3& t) @@ -145,8 +146,8 @@ struct Intersection_visitor for (std::size_t i=0; i<3; ++i) { typename EK::Segment_3 s(t[i], t[(i+1)%3]); - all_segments_1.push_back(s); - all_segments_2.push_back(s); + all_segments[ids.first].push_back(s); + all_segments[ids.second].push_back(s); } } @@ -157,8 +158,8 @@ struct Intersection_visitor for (std::size_t i=0; i > all_segments(triangles.size()); std::vector< std::vector > all_points(triangles.size()); - CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); typename EK::Intersect_3 intersection = EK().intersect_3_object(); + autorefine_impl::Intersection_visitor intersection_visitor(all_segments, all_points); + for (const Pair_of_faces& p : si_pairs) { int i1 = get(tid_map, p.first), @@ -271,9 +273,7 @@ void autorefine_soup_output(const TriangleMesh& tm, if (inter != boost::none) { - autorefine_impl::Intersection_visitor intersection_visitor(all_segments[i1], all_segments[i2], - all_points[i1], all_points[i2]); - + intersection_visitor.set_triangle_ids(i1, i2); boost::apply_visitor(intersection_visitor, *inter); } } From 9c2de3ee7974a1ccd5e72c73bbf60e03366d5523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 13 Jan 2023 11:42:14 +0100 Subject: [PATCH 153/943] handle soup as input --- .../Polygon_mesh_processing/autorefinement.h | 123 ++++++++---------- 1 file changed, 53 insertions(+), 70 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index ea1c0de07eba..290dde253324 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -28,6 +28,7 @@ // output #include #include +#include #ifndef CGAL_PMP_AUTOREFINE_VERBOSE #define CGAL_PMP_AUTOREFINE_VERBOSE(MSG) @@ -166,8 +167,9 @@ struct Intersection_visitor } // end of autorefine_impl -template -void autorefine_soup_output(const TriangleMesh& tm, +template +void autorefine_soup_output(const PointRange& input_points, + const TriIdsRange& id_triples, std::vector& soup_points, std::vector >& soup_triangles, const NamedParameters& np = parameters::default_values()) @@ -175,12 +177,9 @@ void autorefine_soup_output(const TriangleMesh& tm, using parameters::choose_parameter; using parameters::get_parameter; - typedef typename GetGeomTraits::type GT; - GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); - - typedef typename GetVertexPointMap::const_type VPM; - VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), - get_const_property_map(vertex_point, tm)); + typedef typename GetPolygonSoupGeomTraits::type GT; + typedef typename GetPointMap::const_type Point_map; + Point_map pm = choose_parameter(get_parameter(np, internal_np::point_map)); typedef typename internal_np::Lookup_named_param_def < internal_np::concurrency_tag_t, @@ -188,68 +187,54 @@ void autorefine_soup_output(const TriangleMesh& tm, Sequential_tag > ::type Concurrency_tag; - typedef boost::graph_traits Graph_traits; - typedef typename Graph_traits::face_descriptor face_descriptor; - typedef typename Graph_traits::halfedge_descriptor halfedge_descriptor; - typedef typename Graph_traits::vertex_descriptor vertex_descriptor; - typedef std::pair Pair_of_faces; + typedef std::size_t Input_TID; + typedef std::pair Pair_of_triangle_ids; - std::vector si_pairs; + std::vector si_pairs; // collect intersecting pairs of triangles CGAL_PMP_AUTOREFINE_VERBOSE("collect intersecting pairs"); - self_intersections(tm, std::back_inserter(si_pairs), np); + triangle_soup_self_intersections(input_points, id_triples, std::back_inserter(si_pairs), np); if (si_pairs.empty()) return; // mark degenerate faces so that we can ignore them - typedef CGAL::dynamic_face_property_t Degen_property_tag; - typedef typename boost::property_map::const_type Is_degen_map; - Is_degen_map is_degen = get(Degen_property_tag(), tm); + std::vector is_degen(id_triples.size(), false); - for(face_descriptor f : faces(tm)) - put(is_degen, f, false); - for (const Pair_of_faces& p : si_pairs) + for (const Pair_of_triangle_ids& p : si_pairs) if (p.first==p.second) // bbox inter reports (f,f) for degenerate faces - put(is_degen, p.first, true); + is_degen[p.first] = true; // assign an id per triangle involved in an intersection // + the faces involved in the intersection - typedef CGAL::dynamic_face_property_t TID_property_tag; - typedef typename boost::property_map::const_type Triangle_id_map; - - Triangle_id_map tid_map = get(TID_property_tag(), tm); - for (face_descriptor f : faces(tm)) - put(tid_map, f, -1); - - std::vector intersected_faces; - int tid=-1; - for (const Pair_of_faces& p : si_pairs) + std::vector tri_inter_ids(id_triples.size(), -1); + std::vector intersected_faces; + int tiid=-1; + for (const Pair_of_triangle_ids& p : si_pairs) { - if (get(tid_map, p.first)==-1 && !get(is_degen, p.first)) + if (tri_inter_ids[p.first]==-1 && !is_degen[p.first]) { - put(tid_map, p.first, ++tid); + tri_inter_ids[p.first]=++tiid; intersected_faces.push_back(p.first); } - if (get(tid_map, p.second)==-1 && !get(is_degen, p.second)) + if (tri_inter_ids[p.second]==-1 && !is_degen[p.second]) { - put(tid_map, p.second, ++tid); + tri_inter_ids[p.second]=++tiid; intersected_faces.push_back(p.second); } } // init the vector of triangles used for the autorefinement of triangles typedef CGAL::Exact_predicates_exact_constructions_kernel EK; - std::vector< EK::Triangle_3 > triangles(tid+1); + std::vector< EK::Triangle_3 > triangles(tiid+1); Cartesian_converter to_exact; - for(face_descriptor f : intersected_faces) + for(Input_TID f : intersected_faces) { - halfedge_descriptor h = halfedge(f, tm); - triangles[get(tid_map, f)]= EK::Triangle_3( - to_exact( get(vpm, source(h, tm)) ), - to_exact( get(vpm, target(h, tm)) ), - to_exact( get(vpm, target(next(h, tm), tm)) ) ); + triangles[tri_inter_ids[f]]= EK::Triangle_3( + to_exact( get(pm, input_points[id_triples[f][0]]) ), + to_exact( get(pm, input_points[id_triples[f][1]]) ), + to_exact( get(pm, input_points[id_triples[f][2]]) ) ); } std::vector< std::vector > all_segments(triangles.size()); @@ -259,10 +244,10 @@ void autorefine_soup_output(const TriangleMesh& tm, typename EK::Intersect_3 intersection = EK().intersect_3_object(); autorefine_impl::Intersection_visitor intersection_visitor(all_segments, all_points); - for (const Pair_of_faces& p : si_pairs) + for (const Pair_of_triangle_ids& p : si_pairs) { - int i1 = get(tid_map, p.first), - i2 = get(tid_map, p.second); + int i1 = tri_inter_ids[p.first], + i2 = tri_inter_ids[p.second]; if (i1==-1 || i2==-1) continue; //skip degenerate faces @@ -298,17 +283,6 @@ void autorefine_soup_output(const TriangleMesh& tm, std::vector exact_soup_points; #endif - for (vertex_descriptor v : vertices(tm)) - { - if (point_id_map.insert(std::make_pair(to_exact(get(vpm,v)), soup_points.size())).second) - { - soup_points.push_back(get(vpm,v)); -#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.push_back(to_exact(get(vpm,v))); -#endif - } - } - auto get_point_id = [&](const typename EK::Point_3& pt) { auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); @@ -322,18 +296,22 @@ void autorefine_soup_output(const TriangleMesh& tm, return insert_res.first->second; }; - for (face_descriptor f : faces(tm)) + std::vector input_point_ids; + input_point_ids.reserve(input_points.size()); + for (const auto& p : input_points) + input_point_ids.push_back(get_point_id(to_exact(get(pm,p)))); + + for (Input_TID f=0; f::type GT; GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); - std::vector soup_points; - std::vector > soup_triangles; + std::vector in_soup_points; + std::vector > in_soup_triangles; + std::vector out_soup_points; + std::vector > out_soup_triangles; + + polygon_mesh_to_polygon_soup(tm, in_soup_points, in_soup_triangles); - autorefine_soup_output(tm, soup_points, soup_triangles, np); + autorefine_soup_output(in_soup_points, in_soup_triangles, + out_soup_points, out_soup_triangles); clear(tm); - orient_polygon_soup(soup_points, soup_triangles); - polygon_soup_to_polygon_mesh(soup_points, soup_triangles, tm); + orient_polygon_soup(out_soup_points, out_soup_triangles); + polygon_soup_to_polygon_mesh(out_soup_points, out_soup_triangles, tm); } From b4887272e85bfde8bebf0093a9169cc897bca5ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 13 Jan 2023 11:56:36 +0100 Subject: [PATCH 154/943] use soup as input/output in example --- .../soup_autorefinement.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index 8ca983aa31c3..297875c9ec89 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -23,19 +23,14 @@ int main(int argc, char** argv) : std::string(argv[1]); std::vector input_points; - std::vector > input_triangles; - + std::vector> input_triangles; CGAL::IO::read_polygon_soup(filename, input_points, input_triangles); - PMP::repair_polygon_soup(input_points, input_triangles); - - Mesh mesh; - PMP::orient_polygon_soup(input_points, input_triangles); - PMP::polygon_soup_to_polygon_mesh(input_points, input_triangles, mesh); - PMP::triangulate_faces(mesh); - PMP::autorefine(mesh); + std::vector output_points; + std::vector> output_triangles; + PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles); - CGAL::IO::write_polygon_mesh("autorefined.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); return 0; } From d979121cd29c42c203609ab3bc4956601e9b0512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 13 Jan 2023 15:41:33 +0100 Subject: [PATCH 155/943] repair soup is still recommanded --- .../examples/Polygon_mesh_processing/soup_autorefinement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index 297875c9ec89..9ade96e3be84 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -25,6 +24,7 @@ int main(int argc, char** argv) std::vector input_points; std::vector> input_triangles; CGAL::IO::read_polygon_soup(filename, input_points, input_triangles); + PMP::repair_polygon_soup(input_points, input_triangles); std::vector output_points; std::vector> output_triangles; From 4bc74c399cac5ce0ac84ba894e1b5e996960d605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 16 Jan 2023 22:59:18 +0100 Subject: [PATCH 156/943] WIP: start improving intersect computation --- .../Polygon_mesh_processing/autorefinement.h | 269 ++++++++++++++++-- 1 file changed, 248 insertions(+), 21 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 290dde253324..80b964ad8590 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1,5 +1,5 @@ //TODO: add for soup face the id of the input face. not sure it is easy to report intersection edge as a pair of vertex id - +//TODO: only return intersection segments // Copyright (c) 2023 GeometryFactory (France). // All rights reserved. // @@ -43,21 +43,26 @@ namespace Polygon_mesh_processing { namespace autorefine_impl { template -void generate_subtriangles(const typename EK::Triangle_3& t, - const std::vector& segments, +void generate_subtriangles(std::size_t ti, + std::vector& segments, const std::vector& points, + const std::vector& in_triangle_ids, + const std::set >& intersecting_triangles, + const std::vector& triangles, std::vector& new_triangles) { typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; + const typename EK::Triangle_3& t = triangles[ti]; + // positive triangle normal typename EK::Vector_3 n = normal(t[0], t[1], t[2]); - typename EK::Point_3 o(0,0,0); + typename EK::Point_3 o(CGAL::ORIGIN); bool orientation_flipped = false; if ( typename EK::Less_xyz_3()(o+n,o) ) @@ -74,6 +79,184 @@ void generate_subtriangles(const typename EK::Triangle_3& t, typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), orientation_flipped); v->set_point(t[2]); +#if 1 + //~ static std::ofstream debug("inter_segments.polylines.txt"); + //~ debug.precision(17); + + // pre-compute segment intersections + if (!segments.empty()) + { + std::size_t nbs = segments.size(); + //~ std::cout << "nbs " << nbs << "\n"; + + //~ if (nbs==8) + //~ { + //~ for (std::size_t i = 0; i > points_on_segments(nbs); + for (std::size_t i = 0; i(&(*res))) + { + points_on_segments[i].push_back(*pt_ptr); + points_on_segments[j].push_back(*pt_ptr); + + //~ std::cout << "new inter " << *pt_ptr << "\n"; + + } + else + { + // We can have hard cases if two triangles are coplanar.... + + //~ std::cout << "coplanar inter: " << i << " " << j << "\n"; + + auto inter = CGAL::intersection(segments[i], segments[j]); + if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) + { + points_on_segments[i].push_back(*pt_ptr); + points_on_segments[j].push_back(*pt_ptr); + + //~ std::cout << "new inter bis" << *pt_ptr << "\n"; + } + else + { + if (const typename EK::Segment_3* seg_ptr = boost::get(&(*inter))) + { + points_on_segments[i].push_back(seg_ptr->source()); + points_on_segments[j].push_back(seg_ptr->source()); + points_on_segments[i].push_back(seg_ptr->target()); + points_on_segments[j].push_back(seg_ptr->target()); + + } + else + std::cerr <<"ERROR!\n"; + } + + #if 0 + //this code works if triangles are not coplanar + // coplanar intersection that is not a point + int coord = 0; + const typename EK::Segment_3& s = segments[i]; + typename EK::Point_3 src = s.source(), tgt=s.target(); + if (src.x()==tgt.x()) + { + coord=1; + if (src.y()==tgt.y()) + coord==2; + } + + std::vector tmp_pts = { + src, tgt, segments[j][0], segments[j][1] }; + + std::sort(tmp_pts.begin(), tmp_pts.end(), + [coord](const typename EK::Point_3& p, const typename EK::Point_3& q) + {return p[coord] cst_points; + std::vector> csts; + for (std::size_t i = 0; itgt[coord]) + std::swap(src, tgt); + + std::sort(points_on_segments[i].begin(), points_on_segments[i].end(), [coord](const typename EK::Point_3& p, const typename EK::Point_3& q){return p[coord] no_inter_segments; + no_inter_segments.reserve(nbs); + for (std::size_t i = 0; i >& all_segments; std::vector< std::vector >& all_points; + std::vector< std::vector >& all_in_triangle_ids; std::pair ids; Intersection_visitor(std::vector< std::vector >& all_segments, - std::vector< std::vector >& all_points) + std::vector< std::vector >& all_points, + std::vector< std::vector >& all_in_triangle_ids) : all_segments (all_segments) , all_points(all_points) + , all_in_triangle_ids(all_in_triangle_ids) {} void set_triangle_ids(int i1, int i2) @@ -140,6 +326,8 @@ struct Intersection_visitor { all_segments[ids.first].push_back(s); all_segments[ids.second].push_back(s); + all_in_triangle_ids[ids.first].push_back(ids.second); + all_in_triangle_ids[ids.second].push_back(ids.first); } void operator()(const typename EK::Triangle_3& t) @@ -149,6 +337,8 @@ struct Intersection_visitor typename EK::Segment_3 s(t[i], t[(i+1)%3]); all_segments[ids.first].push_back(s); all_segments[ids.second].push_back(s); + all_in_triangle_ids[ids.first].push_back(ids.second); + all_in_triangle_ids[ids.second].push_back(ids.first); } } @@ -161,6 +351,8 @@ struct Intersection_visitor typename EK::Segment_3 s(poly[i], poly[(i+1)%nbp]); all_segments[ids.first].push_back(s); all_segments[ids.second].push_back(s); + all_in_triangle_ids[ids.first].push_back(ids.second); + all_in_triangle_ids[ids.second].push_back(ids.first); } } }; @@ -239,11 +431,13 @@ void autorefine_soup_output(const PointRange& input_points, std::vector< std::vector > all_segments(triangles.size()); std::vector< std::vector > all_points(triangles.size()); + std::vector< std::vector > all_in_triangle_ids(triangles.size()); CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); typename EK::Intersect_3 intersection = EK().intersect_3_object(); - autorefine_impl::Intersection_visitor intersection_visitor(all_segments, all_points); + autorefine_impl::Intersection_visitor intersection_visitor(all_segments, all_points, all_in_triangle_ids); + std::set > intersecting_triangles; for (const Pair_of_triangle_ids& p : si_pairs) { int i1 = tri_inter_ids[p.first], @@ -258,25 +452,13 @@ void autorefine_soup_output(const PointRange& input_points, if (inter != boost::none) { + intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); intersection_visitor.set_triangle_ids(i1, i2); boost::apply_visitor(intersection_visitor, *inter); } } - CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); - // now refine triangles - std::vector new_triangles; - for(std::size_t ti=0; ti(triangles[ti], all_segments[ti], all_points[ti], new_triangles); - } - - - // brute force output: create a soup, orient and to-mesh - CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); + // deduplicate inserted segments Cartesian_converter to_input; std::map point_id_map; #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) @@ -296,6 +478,51 @@ void autorefine_soup_output(const PointRange& input_points, return insert_res.first->second; }; + // filter duplicated segments + for(std::size_t ti=0; ti filtered_segments; + std::vector filtered_in_triangle_ids; + filtered_segments.reserve(nbs); + std::set> segset; + for (std::size_t si=0; si new_triangles; + for(std::size_t ti=0; ti(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + + + // brute force output: create a soup, orient and to-mesh + CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); + std::vector input_point_ids; input_point_ids.reserve(input_points.size()); for (const auto& p : input_points) From 842b6282b5c7a0b9f9c9551dfa443edd4f5319f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 23 Jan 2023 15:39:01 +0100 Subject: [PATCH 157/943] STILL WIP: copy/paste code for coplanar intersection --- .../Polygon_mesh_processing/autorefinement.h | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 80b964ad8590..6d97f7521ded 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,12 +36,43 @@ #include +#define TEST_RESOLVE_INTERSECTION +#define DEDUPLICATE_SEGMENTS + namespace CGAL { namespace Polygon_mesh_processing { #ifndef DOXYGEN_RUNNING namespace autorefine_impl { +template +bool do_coplanar_segments_intersect(const typename K::Segment_3& s1, + const typename K::Segment_3& s2, + const K& k = K()) +{ + // supporting_line intersects: points are coplanar + typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); + ::CGAL::Orientation or1 = cpl_orient(s1[0], s1[1], s2[0]); + ::CGAL::Orientation or2 = cpl_orient(s1[0], s1[1], s2[1]); + + if(or1 == COLLINEAR && or2 == COLLINEAR) + { + // segments are collinear + typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); + return (cln_order(s1[0], s2[0], s1[1]) || + cln_order(s1[0], s2[1], s1[1]) || + cln_order(s2[0], s1[0], s2[1])); + } + + if(or1 != or2) + { + or1 = cpl_orient(s2[0], s2[1], s1[0]); + return (or1 == COLLINEAR || or1 != cpl_orient(s2[0], s2[1], s1[1])); + } + + return false; +} + template void generate_subtriangles(std::size_t ti, std::vector& segments, @@ -54,7 +85,11 @@ void generate_subtriangles(std::size_t ti, typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; @@ -79,7 +114,7 @@ void generate_subtriangles(std::size_t ti, typename CDT::Vertex_handle v = cdt.tds().insert_dim_up(cdt.infinite_vertex(), orientation_flipped); v->set_point(t[2]); -#if 1 +#ifdef TEST_RESOLVE_INTERSECTION //~ static std::ofstream debug("inter_segments.polylines.txt"); //~ debug.precision(17); @@ -102,7 +137,7 @@ void generate_subtriangles(std::size_t ti, { if (intersecting_triangles.count(CGAL::make_sorted_pair(in_triangle_ids[i], in_triangle_ids[j]))!=0) { - if (CGAL::do_intersect(segments[i], segments[j])) + if (do_coplanar_segments_intersect(segments[i], segments[j])) { auto res = CGAL::intersection(triangles[in_triangle_ids[i]].supporting_plane(), triangles[in_triangle_ids[j]].supporting_plane(), @@ -479,6 +514,7 @@ void autorefine_soup_output(const PointRange& input_points, }; // filter duplicated segments +#ifdef DEDUPLICATE_SEGMENTS for(std::size_t ti=0; ti(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); } - // brute force output: create a soup, orient and to-mesh CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); From 39d7bbc57fee319e45f8c51c75794f7828cc21d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 14:54:20 +0100 Subject: [PATCH 158/943] WIP import intersection computation from coref code --- .../Polygon_mesh_processing/autorefinement.h | 363 +++++++++++++----- 1 file changed, 259 insertions(+), 104 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 6d97f7521ded..afbe0c3479d7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,8 +36,8 @@ #include -#define TEST_RESOLVE_INTERSECTION -#define DEDUPLICATE_SEGMENTS +// #define TEST_RESOLVE_INTERSECTION +// #define DEDUPLICATE_SEGMENTS namespace CGAL { namespace Polygon_mesh_processing { @@ -45,10 +45,13 @@ namespace Polygon_mesh_processing { #ifndef DOXYGEN_RUNNING namespace autorefine_impl { +enum Segment_inter_type { NO_INTERSECTION=0, COPLANAR_SEGMENTS, POINT_INTERSECTION }; + template -bool do_coplanar_segments_intersect(const typename K::Segment_3& s1, - const typename K::Segment_3& s2, - const K& k = K()) +Segment_inter_type +do_coplanar_segments_intersect(const typename K::Segment_3& s1, + const typename K::Segment_3& s2, + const K& k = K()) { // supporting_line intersects: points are coplanar typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); @@ -61,26 +64,207 @@ bool do_coplanar_segments_intersect(const typename K::Segment_3& s1, typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); return (cln_order(s1[0], s2[0], s1[1]) || cln_order(s1[0], s2[1], s1[1]) || - cln_order(s2[0], s1[0], s2[1])); + cln_order(s2[0], s1[0], s2[1])) ? COPLANAR_SEGMENTS : NO_INTERSECTION; } if(or1 != or2) { or1 = cpl_orient(s2[0], s2[1], s1[0]); - return (or1 == COLLINEAR || or1 != cpl_orient(s2[0], s2[1], s1[1])); + return (or1 == COLLINEAR || or1 != cpl_orient(s2[0], s2[1], s1[1])) ? POINT_INTERSECTION : NO_INTERSECTION; + } + + return NO_INTERSECTION; +} + +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// + +// imported from Polygon_mesh_processing/internal/Corefinement/intersect_triangle_segment_3.h + +template +void +find_intersection(const typename K::Point_3& p, const typename K::Point_3& q, //segment + const typename K::Point_3& a, const typename K::Point_3& b, const typename K::Point_3& c, //triangle + std::vector& inter_pts, + bool is_p_coplanar=false, bool is_q_coplanar=false) // note that in coref this was wrt a halfedge not p/q +{ + Orientation ab=orientation(p,q,a,b); + Orientation bc=orientation(p,q,b,c); + Orientation ca=orientation(p,q,c,a); + + if ( ab==POSITIVE || bc==POSITIVE || ca==POSITIVE ) + return; + + int nb_coplanar=(ab==COPLANAR?1:0) + (bc==COPLANAR?1:0) + (ca==COPLANAR?1:0); + +/* + if ( nb_coplanar==0 ) + return result_type(ON_FACE,hd,is_src_coplanar,is_tgt_coplanar); + + if (nb_coplanar==1){ + if (ab==COPLANAR) + // intersection is ab + return result_type(ON_EDGE,next(hd,tm),is_src_coplanar,is_tgt_coplanar); + if (bc==COPLANAR) + // intersection is bc + return result_type(ON_EDGE,prev(hd,tm),is_src_coplanar,is_tgt_coplanar); + CGAL_assertion(ca==COPLANAR); + // intersection is ca + return result_type(ON_EDGE,hd,is_src_coplanar,is_tgt_coplanar); + } +*/ + + if (is_p_coplanar) + { + inter_pts.push_back(p); + return; + } + if (is_q_coplanar) + { + inter_pts.push_back(q); + return; + } + + if (nb_coplanar!=2) + { + inter_pts.push_back( + typename K::Construct_plane_line_intersection_point_3()(a, b, c, p, q) + ); + } + else + { + if (ab!=COPLANAR) + { + // intersection is c + inter_pts.push_back(c); + return; + } + + if (bc!=COPLANAR) + { + // intersection is a + inter_pts.push_back(a); + return; + } + CGAL_assertion(ca!=COPLANAR); + // intersection is b + inter_pts.push_back(b); } +} - return false; +template +void test_edge(const typename K::Point_3& p, const typename K::Point_3& q, + const typename K::Point_3& a, const typename K::Point_3& b, const typename K::Point_3& c, + const Orientation abcp, + const Orientation abcq, + std::vector& inter_pts) +{ + switch ( abcp ) { + case POSITIVE: + switch ( abcq ) { + case POSITIVE: + // the segment lies in the positive open halfspaces defined by the + // triangle's supporting plane + break; + case NEGATIVE: + // p sees the triangle in counterclockwise order + find_intersection(p,q,a,b,c,inter_pts); + break; + //case COPLANAR: + default: + // q belongs to the triangle's supporting plane + // p sees the triangle in counterclockwise order + find_intersection(p,q,a,b,c,inter_pts,false,true); + } + break; + case NEGATIVE: + switch ( abcq ) { + case POSITIVE: + // q sees the triangle in counterclockwise order + find_intersection(q,p,a,b,c,inter_pts); + break; + case NEGATIVE: + // the segment lies in the negative open halfspaces defined by the + // triangle's supporting plane + break; + // case COPLANAR: + default: + // q belongs to the triangle's supporting plane + // p sees the triangle in clockwise order + find_intersection(q,p,a,b,c,inter_pts,true,false); + } + break; + default: + //case COPLANAR: // p belongs to the triangle's supporting plane + switch ( abcq ) { + case POSITIVE: + // q sees the triangle in counterclockwise order + find_intersection(q,p,a,b,c,inter_pts,false, true); + break; + case NEGATIVE: + // q sees the triangle in clockwise order + find_intersection(p,q,a,b,c,inter_pts,true); + break; + //case COPLANAR: + default: + // the segment is coplanar with the triangle's supporting plane + // we test whether the segment intersects the triangle in the common + // supporting plane + if ( ::CGAL::Intersections::internal::do_intersect_coplanar(a,b,c,p,q,K()) ) + { + //handle coplanar intersection + // TODO: use coref function + throw std::runtime_error("coplanar intersection"); + return; + } + } + } } +template +void collect_intersections(const std::array& t1, + const std::array& t2, + std::vector& inter_pts) +{ + // test edges of t1 vs t2 + std::array ori; + for (int i=0; i<3; ++i) + ori[i] = orientation(t2[0],t2[1],t2[2],t1[i]); + for (int i=0; i<3; ++i) + { + int j=(i+1)%3; + test_edge(t1[i], t1[j], t2[0], t2[1], t2[2], ori[i], ori[j], inter_pts); + if (inter_pts.size()>1) return; + } + + // test edges of t2 vs t1 + for (int i=0; i<3; ++i) + ori[i] = orientation(t1[0],t1[1],t1[2],t2[i]); + for (int i=0; i<3; ++i) + { + int j=(i+1)%3; + test_edge(t2[i], t2[j], t1[0], t1[1], t1[2], ori[i], ori[j], inter_pts); + if (inter_pts.size()>1) return; + } +} + +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// +////////////////////////////////// + template void generate_subtriangles(std::size_t ti, std::vector& segments, const std::vector& points, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, - const std::vector& triangles, - std::vector& new_triangles) + const std::vector>& triangles, + std::vector>& new_triangles) { typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; @@ -93,7 +277,7 @@ void generate_subtriangles(std::size_t ti, //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; - const typename EK::Triangle_3& t = triangles[ti]; + const std::array& t = triangles[ti]; // positive triangle normal typename EK::Vector_3 n = normal(t[0], t[1], t[2]); @@ -130,6 +314,11 @@ void generate_subtriangles(std::size_t ti, //~ std::ofstream("cst_"+std::to_string(i)+".polylines.txt") << std::setprecision(17) << "2 " << segments[i] << "\n"; //~ } + auto supporting_plane = [](const std::array& t) + { + return typename EK::Plane_3(t[0], t[1], t[2]); + }; + std::vector< std::vector > points_on_segments(nbs); for (std::size_t i = 0; i(segments[i], segments[j])) + Segment_inter_type seg_inter_type = do_coplanar_segments_intersect(segments[i], segments[j]); + switch(seg_inter_type) { - auto res = CGAL::intersection(triangles[in_triangle_ids[i]].supporting_plane(), - triangles[in_triangle_ids[j]].supporting_plane(), - triangles[ti].supporting_plane()); - - if (const typename EK::Point_3* pt_ptr = boost::get(&(*res))) + case POINT_INTERSECTION: { - points_on_segments[i].push_back(*pt_ptr); - points_on_segments[j].push_back(*pt_ptr); + auto res = CGAL::intersection(supporting_plane(triangles[in_triangle_ids[i]]), + supporting_plane(triangles[in_triangle_ids[j]]), + supporting_plane(triangles[ti])); + + if (const typename EK::Point_3* pt_ptr = boost::get(&(*res))) + { + points_on_segments[i].push_back(*pt_ptr); + points_on_segments[j].push_back(*pt_ptr); - //~ std::cout << "new inter " << *pt_ptr << "\n"; + //~ std::cout << "new inter " << *pt_ptr << "\n"; + } } - else + // break; No break because of the coplanar case + case COPLANAR_SEGMENTS: { // We can have hard cases if two triangles are coplanar.... //~ std::cout << "coplanar inter: " << i << " " << j << "\n"; auto inter = CGAL::intersection(segments[i], segments[j]); + + if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); + if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) { points_on_segments[i].push_back(*pt_ptr); @@ -224,6 +421,9 @@ void generate_subtriangles(std::size_t ti, //~ debug << "4 " << triangles[ti] << " " << triangles[ti][0] << "\n"; //~ exit(1); } + break; + default: + break; } } } @@ -304,13 +504,13 @@ void generate_subtriangles(std::size_t ti, for (typename CDT::Face_handle fh : cdt.finite_face_handles()) { if (orientation_flipped) - new_triangles.emplace_back(fh->vertex(0)->point(), - fh->vertex(cdt.cw(0))->point(), - fh->vertex(cdt.ccw(0))->point()); + new_triangles.push_back( CGAL::make_array(fh->vertex(0)->point(), + fh->vertex(cdt.cw(0))->point(), + fh->vertex(cdt.ccw(0))->point()) ); else - new_triangles.emplace_back(fh->vertex(0)->point(), - fh->vertex(cdt.ccw(0))->point(), - fh->vertex(cdt.cw(0))->point()); + new_triangles.push_back( CGAL::make_array(fh->vertex(0)->point(), + fh->vertex(cdt.ccw(0))->point(), + fh->vertex(cdt.cw(0))->point()) ); #ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS ++nbt; buffer << fh->vertex(0)->point() << "\n"; @@ -329,69 +529,6 @@ void generate_subtriangles(std::size_t ti, #endif } -template -struct Intersection_visitor -{ - std::vector< std::vector >& all_segments; - std::vector< std::vector >& all_points; - std::vector< std::vector >& all_in_triangle_ids; - std::pair ids; - - Intersection_visitor(std::vector< std::vector >& all_segments, - std::vector< std::vector >& all_points, - std::vector< std::vector >& all_in_triangle_ids) - : all_segments (all_segments) - , all_points(all_points) - , all_in_triangle_ids(all_in_triangle_ids) - {} - - void set_triangle_ids(int i1, int i2) - { - ids = {i1, i2}; - } - - typedef void result_type; - void operator()(const typename EK::Point_3& p) - { - all_points[ids.first].push_back(p); - all_points[ids.second].push_back(p); - } - - void operator()(const typename EK::Segment_3& s) - { - all_segments[ids.first].push_back(s); - all_segments[ids.second].push_back(s); - all_in_triangle_ids[ids.first].push_back(ids.second); - all_in_triangle_ids[ids.second].push_back(ids.first); - } - - void operator()(const typename EK::Triangle_3& t) - { - for (std::size_t i=0; i<3; ++i) - { - typename EK::Segment_3 s(t[i], t[(i+1)%3]); - all_segments[ids.first].push_back(s); - all_segments[ids.second].push_back(s); - all_in_triangle_ids[ids.first].push_back(ids.second); - all_in_triangle_ids[ids.second].push_back(ids.first); - } - - } - - void operator()(const std::vector& poly) - { - std::size_t nbp = poly.size(); - for (std::size_t i=0; i @@ -453,24 +590,22 @@ void autorefine_soup_output(const PointRange& input_points, // init the vector of triangles used for the autorefinement of triangles typedef CGAL::Exact_predicates_exact_constructions_kernel EK; - std::vector< EK::Triangle_3 > triangles(tiid+1); + std::vector< std::array > triangles(tiid+1); Cartesian_converter to_exact; for(Input_TID f : intersected_faces) { - triangles[tri_inter_ids[f]]= EK::Triangle_3( + triangles[tri_inter_ids[f]]= CGAL::make_array( to_exact( get(pm, input_points[id_triples[f][0]]) ), to_exact( get(pm, input_points[id_triples[f][1]]) ), to_exact( get(pm, input_points[id_triples[f][2]]) ) ); } - std::vector< std::vector > all_segments(triangles.size()); + std::vector< std::vector > all_segments(triangles.size()); // TODO use std::pair std::vector< std::vector > all_points(triangles.size()); std::vector< std::vector > all_in_triangle_ids(triangles.size()); CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); - typename EK::Intersect_3 intersection = EK().intersect_3_object(); - autorefine_impl::Intersection_visitor intersection_visitor(all_segments, all_points, all_in_triangle_ids); std::set > intersecting_triangles; for (const Pair_of_triangle_ids& p : si_pairs) @@ -480,16 +615,36 @@ void autorefine_soup_output(const PointRange& input_points, if (i1==-1 || i2==-1) continue; //skip degenerate faces - const EK::Triangle_3& t1 = triangles[i1]; - const EK::Triangle_3& t2 = triangles[i2]; + const std::array& t1 = triangles[i1]; + const std::array& t2 = triangles[i2]; - auto inter = intersection(t1, t2); + std::vector inter_pts; + autorefine_impl::collect_intersections(t1, t2, inter_pts); - if (inter != boost::none) + if (!inter_pts.empty()) { - intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); - intersection_visitor.set_triangle_ids(i1, i2); - boost::apply_visitor(intersection_visitor, *inter); + std::size_t nbi = inter_pts.size(); + switch(nbi) + { + case 1: + all_points[i1].push_back(inter_pts[0]); + all_points[i2].push_back(inter_pts[0]); + break; + case 2: + all_segments[i1].push_back({inter_pts[0], inter_pts[1]}); + all_segments[i2].push_back({inter_pts[0], inter_pts[1]}); + all_in_triangle_ids[i1].push_back(i2); + all_in_triangle_ids[i2].push_back(i1); + break; + default: + for (std::size_t i=0;i new_triangles; + std::vector> new_triangles; for(std::size_t ti=0; ti& t : new_triangles) { soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); } From 10252faf1df2480f21c25959c1980e68819099a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 16:04:43 +0100 Subject: [PATCH 159/943] WIP use segments --- .../Polygon_mesh_processing/autorefinement.h | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index afbe0c3479d7..c9bb3f3ffa81 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,8 +36,8 @@ #include -// #define TEST_RESOLVE_INTERSECTION -// #define DEDUPLICATE_SEGMENTS +//#define TEST_RESOLVE_INTERSECTION +//#define DEDUPLICATE_SEGMENTS namespace CGAL { namespace Polygon_mesh_processing { @@ -49,8 +49,8 @@ enum Segment_inter_type { NO_INTERSECTION=0, COPLANAR_SEGMENTS, POINT_INTERSECTI template Segment_inter_type -do_coplanar_segments_intersect(const typename K::Segment_3& s1, - const typename K::Segment_3& s2, +do_coplanar_segments_intersect(const std::array& s1, + const std::array& s2, const K& k = K()) { // supporting_line intersects: points are coplanar @@ -259,7 +259,7 @@ void collect_intersections(const std::array& t1, template void generate_subtriangles(std::size_t ti, - std::vector& segments, + std::vector>& segments, const std::vector& points, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, @@ -351,7 +351,9 @@ void generate_subtriangles(std::size_t ti, //~ std::cout << "coplanar inter: " << i << " " << j << "\n"; - auto inter = CGAL::intersection(segments[i], segments[j]); + typename EK::Segment_3 s1(segments[i][0], segments[i][1]); + typename EK::Segment_3 s2(segments[j][0], segments[j][1]);// TODO: avoid this construction + auto inter = CGAL::intersection(s1, s2); if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); @@ -381,7 +383,7 @@ void generate_subtriangles(std::size_t ti, // coplanar intersection that is not a point int coord = 0; const typename EK::Segment_3& s = segments[i]; - typename EK::Point_3 src = s.source(), tgt=s.target(); + typename EK::Point_3 src = s[0], tgt=s[1]; if (src.x()==tgt.x()) { coord=1; @@ -401,10 +403,10 @@ void generate_subtriangles(std::size_t ti, points_on_segments[j].push_back(tmp_pts[1]); points_on_segments[j].push_back(tmp_pts[2]); #endif - //~ std::cout << "new inter coli " << segments[j].source() << "\n"; - //~ std::cout << "new inter coli " << segments[j].target() << "\n"; - //~ std::cout << "new inter coli " << segments[i].source() << "\n"; - //~ std::cout << "new inter coli " << segments[i].target() << "\n"; + //~ std::cout << "new inter coli " << segments[j][0] << "\n"; + //~ std::cout << "new inter coli " << segments[j][1] << "\n"; + //~ std::cout << "new inter coli " << segments[i][0] << "\n"; + //~ std::cout << "new inter coli " << segments[i][1] << "\n"; //~ points_on_segments[j].push_back(*pt_ptr); @@ -437,8 +439,8 @@ void generate_subtriangles(std::size_t ti, { // TODO: predicate on input triangles int coord = 0; - const typename EK::Segment_3& s = segments[i]; - typename EK::Point_3 src = s.source(), tgt=s.target(); + const std::array& s = segments[i]; + typename EK::Point_3 src = s[0], tgt=s[1]; if (src.x()==tgt.x()) { coord=1; @@ -482,7 +484,7 @@ void generate_subtriangles(std::size_t ti, cdt.insert_constraints(cst_points.begin(), cst_points.end(), csts.begin(), csts.end()); - std::vector no_inter_segments; + std::vector> no_inter_segments; no_inter_segments.reserve(nbs); for (std::size_t i = 0; i > all_segments(triangles.size()); // TODO use std::pair + std::vector< std::vector > > all_segments(triangles.size()); std::vector< std::vector > all_points(triangles.size()); std::vector< std::vector > all_in_triangle_ids(triangles.size()); @@ -631,16 +633,16 @@ void autorefine_soup_output(const PointRange& input_points, all_points[i2].push_back(inter_pts[0]); break; case 2: - all_segments[i1].push_back({inter_pts[0], inter_pts[1]}); - all_segments[i2].push_back({inter_pts[0], inter_pts[1]}); + all_segments[i1].push_back(CGAL::make_array(inter_pts[0], inter_pts[1])); + all_segments[i2].push_back(CGAL::make_array(inter_pts[0], inter_pts[1])); all_in_triangle_ids[i1].push_back(i2); all_in_triangle_ids[i2].push_back(i1); break; default: for (std::size_t i=0;i filtered_segments; + std::vector> filtered_segments; std::vector filtered_in_triangle_ids; filtered_segments.reserve(nbs); std::set> segset; for (std::size_t si=0; si Date: Tue, 24 Jan 2023 16:04:54 +0100 Subject: [PATCH 160/943] always std::array as cst --- Triangulation_2/include/CGAL/Constrained_triangulation_2.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h index 42867cfbb074..047c8526afc5 100644 --- a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h @@ -330,11 +330,11 @@ class Constrained_triangulation_2 #if 1 template static decltype(auto) get_source(const Segment_2& segment){ - return segment.source(); + return segment[0]; } template static decltype(auto) get_target(const Segment_2& segment){ - return segment.target(); + return segment[1]; } static const Point& get_source(const Constraint& cst){ From 810715778223710a066d3161e2a4ec453475eaf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Jan 2023 18:04:10 +0100 Subject: [PATCH 161/943] WIP handle coplanar --- .../Polygon_mesh_processing/autorefinement.h | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index c9bb3f3ffa81..f412c2ea298e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -82,8 +82,30 @@ do_coplanar_segments_intersect(const std::array& s1, ////////////////////////////////// ////////////////////////////////// -// imported from Polygon_mesh_processing/internal/Corefinement/intersect_triangle_segment_3.h +// imported from Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h + +template +void coplanar_intersections(const std::array& t1, + const std::array& t2, + std::vector& inter_pts) +{ + const typename K::Point_3& p = t1[0], q = t1[1], r = t1[2]; + + std::list l_inter_pts; + l_inter_pts.push_back(t2[0]); + l_inter_pts.push_back(t2[1]); + l_inter_pts.push_back(t2[2]); + //intersect t2 with the three half planes which intersection defines t1 + K k; + Intersections::internal::intersection_coplanar_triangles_cutoff(p,q,r,k,l_inter_pts); //line pq + Intersections::internal::intersection_coplanar_triangles_cutoff(q,r,p,k,l_inter_pts); //line qr + Intersections::internal::intersection_coplanar_triangles_cutoff(r,p,q,k,l_inter_pts); //line rp + + inter_pts.assign(l_inter_pts.begin(), l_inter_pts.end()); +} + +// imported from Polygon_mesh_processing/internal/Corefinement/intersect_triangle_segment_3.h template void find_intersection(const typename K::Point_3& p, const typename K::Point_3& q, //segment @@ -162,7 +184,7 @@ void test_edge(const typename K::Point_3& p, const typename K::Point_3& q, const Orientation abcq, std::vector& inter_pts) { - switch ( abcp ) { + switch ( abcp ) { case POSITIVE: switch ( abcq ) { case POSITIVE: @@ -213,13 +235,13 @@ void test_edge(const typename K::Point_3& p, const typename K::Point_3& q, // the segment is coplanar with the triangle's supporting plane // we test whether the segment intersects the triangle in the common // supporting plane - if ( ::CGAL::Intersections::internal::do_intersect_coplanar(a,b,c,p,q,K()) ) - { + //if ( ::CGAL::Intersections::internal::do_intersect_coplanar(a,b,c,p,q,K()) ) + //{ //handle coplanar intersection - // TODO: use coref function - throw std::runtime_error("coplanar intersection"); - return; - } + // nothing done as coplanar case handle in collect_intersections + // and other intersection points will be collected with non-coplanar edges + //} + break; } } } @@ -233,6 +255,13 @@ void collect_intersections(const std::array& t1, std::array ori; for (int i=0; i<3; ++i) ori[i] = orientation(t2[0],t2[1],t2[2],t1[i]); + + if (ori[0]== COPLANAR && ori[1]==COPLANAR && ori[2]==COPLANAR) + { + coplanar_intersections(t1, t2, inter_pts); + return; + } + for (int i=0; i<3; ++i) { int j=(i+1)%3; @@ -378,7 +407,7 @@ void generate_subtriangles(std::size_t ti, std::cerr <<"ERROR!\n"; } - #if 0 +#if 0 //this code works if triangles are not coplanar // coplanar intersection that is not a point int coord = 0; From fa662e7dea97c5f33c8872c71817c18f51df0894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 25 Jan 2023 14:45:12 +0100 Subject: [PATCH 162/943] WIP handle duplicated intersections + add in intersection list --- .../Polygon_mesh_processing/autorefinement.h | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index f412c2ea298e..ae9858ae77d5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1,5 +1,5 @@ //TODO: add for soup face the id of the input face. not sure it is easy to report intersection edge as a pair of vertex id -//TODO: only return intersection segments +//TODO: only return intersection segments (pay attention to degenerate triangles that are currently ignored) // Copyright (c) 2023 GeometryFactory (France). // All rights reserved. // @@ -36,8 +36,8 @@ #include -//#define TEST_RESOLVE_INTERSECTION -//#define DEDUPLICATE_SEGMENTS +// #define TEST_RESOLVE_INTERSECTION +// #define DEDUPLICATE_SEGMENTS namespace CGAL { namespace Polygon_mesh_processing { @@ -266,7 +266,7 @@ void collect_intersections(const std::array& t1, { int j=(i+1)%3; test_edge(t1[i], t1[j], t2[0], t2[1], t2[2], ori[i], ori[j], inter_pts); - if (inter_pts.size()>1) return; + //~ if (inter_pts.size()>1) return; } // test edges of t2 vs t1 @@ -276,8 +276,13 @@ void collect_intersections(const std::array& t1, { int j=(i+1)%3; test_edge(t2[i], t2[j], t1[0], t1[1], t1[2], ori[i], ori[j], inter_pts); - if (inter_pts.size()>1) return; + //~ if (inter_pts.size()>1) return; } + + // because we don't handle intersection type and can have edge-edge edge-vertex duplicates + std::sort(inter_pts.begin(), inter_pts.end()); + auto last = std::unique(inter_pts.begin(), inter_pts.end()); + inter_pts.erase(last, inter_pts.end()); } ////////////////////////////////// @@ -288,7 +293,7 @@ void collect_intersections(const std::array& t1, template void generate_subtriangles(std::size_t ti, - std::vector>& segments, + std::vector>& segments, const std::vector& points, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, @@ -331,6 +336,27 @@ void generate_subtriangles(std::size_t ti, //~ static std::ofstream debug("inter_segments.polylines.txt"); //~ debug.precision(17); + //~ std::cout << "points.size() " << points.size() << "\n"; + //~ std::set all_triangles_indices(in_triangle_ids.begin(), in_triangle_ids.end()); + //~ all_triangles_indices.insert(ti); + + //~ std::ofstream debug("triangles.polylines.txt"); + //~ debug << std::setprecision(17); + //~ for (std::size_t i : all_triangles_indices) + //~ debug << "4 " + //~ << triangles[i][0] << " " + //~ << triangles[i][1] << " " + //~ << triangles[i][2] << " " + //~ << triangles[i][0] << "\n"; + //~ debug.close(); + //~ debug.open("triangle.off"); + //~ debug << std::setprecision(17); + //~ debug << "OFF\n3 1 0\n"; + //~ debug << triangles[ti][0] << "\n" + //~ << triangles[ti][1] << "\n" + //~ << triangles[ti][2] << "\n 3 0 1 2\n"; + //~ debug.close(); + // pre-compute segment intersections if (!segments.empty()) { @@ -340,7 +366,7 @@ void generate_subtriangles(std::size_t ti, //~ if (nbs==8) //~ { //~ for (std::size_t i = 0; i& t) @@ -404,7 +430,7 @@ void generate_subtriangles(std::size_t ti, } else - std::cerr <<"ERROR!\n"; + throw std::runtime_error("BOOM\n"); } #if 0 @@ -671,11 +697,12 @@ void autorefine_soup_output(const PointRange& input_points, for (std::size_t i=0;i Date: Thu, 2 Feb 2023 11:14:18 +0100 Subject: [PATCH 163/943] WIP new coplanar intersection --- .../Triangle_3_Triangle_3_intersection.h | 297 +++++++++++++++--- .../Polygon_mesh_processing/autorefinement.h | 36 ++- 2 files changed, 285 insertions(+), 48 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 424e1fc93616..d4e467a07986 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -31,54 +31,257 @@ namespace CGAL { namespace Intersections { namespace internal{ +template +typename K::FT +coplanar_segment_segment_alpha_intersection(const typename K::Point_3& p1, const typename K::Point_3& p2, // segment 1 + const typename K::Point_3& p3, const typename K::Point_3& p4, // segment 2 + const K& k) +{ + const typename K::Vector_3 v1 = p2-p1; + const typename K::Vector_3 v2 = p4-p3; + + CGAL_assertion(k.coplanar_3_object()(p1,p2,p3,p4)); + + const typename K::Vector_3 v3 = p3 - p1; + const typename K::Vector_3 v3v2 = cross_product(v3,v2); + const typename K::Vector_3 v1v2 = cross_product(v1,v2); + const typename K::FT sl = v1v2.squared_length(); + CGAL_assertion(!certainly(is_zero(sl))); + + const typename K::FT t = ((v3v2.x()*v1v2.x()) + (v3v2.y()*v1v2.y()) + (v3v2.z()*v1v2.z())) / sl; + return t; // p1 + (p2-p1) * t +} + +template +struct Point_on_triangle +{ + static + inline + const typename Kernel::Point_3& + point_from_id(const typename Kernel::Point_3& p, + const typename Kernel::Point_3& q, + const typename Kernel::Point_3& r, + int id) + { + switch(id) + { + case 0: + return p; + case 1: + return q; + default: + return r; + } + } + + Point_on_triangle(int i1, int i2=-1, int sign=0, typename Kernel::FT alpha = 0.) // TODO add global zero()? + : t1_t2_ids(i1,i2) + , sign(sign) + {} + + // (id, -1) point on t1 + // (-1, id) point on t2 + // (id1, id2) intersection of edges + std::pair t1_t2_ids; + int sign; + typename Kernel::FT alpha; + + Orientation + orientation (const typename Kernel::Point_3& p1, // source of edge edge_ids1 + const typename Kernel::Point_3& q1, // target of edge edge_ids1 + const typename Kernel::Point_3& r1, + int edge_id1, + const typename Kernel::Point_3& p2, + const typename Kernel::Point_3& q2, + const typename Kernel::Point_3& r2, + const Kernel& k) const + { + if (t1_t2_ids.first!=-1) + { + if (t1_t2_ids.second==-1) return ZERO; // it is a point on t1 + // this is an intersection point + if (sign == 0) + return POSITIVE; + if (sign == -1) + return edge_id1==t1_t2_ids.first+1?POSITIVE:NEGATIVE; + else + return edge_id1==t1_t2_ids.first+1?NEGATIVE:POSITIVE; + } + else + { + //this is an input point of t2 + typename Kernel::Coplanar_orientation_3 orient = k.coplanar_orientation_3_object(); + const typename Kernel::Point_3& query = point_from_id(p2,q2,r2,t1_t2_ids.second); + return orient(p1,q1,r1,query); + } + } + + int id1() const { return t1_t2_ids.first; } + int id2() const { return t1_t2_ids.second; } + + typename Kernel::Point_3 + point(const typename Kernel::Point_3& p1, + const typename Kernel::Point_3& q1, + const typename Kernel::Point_3& r1, + const typename Kernel::Point_3& p2, + const typename Kernel::Point_3& q2, + const typename Kernel::Point_3& r2, + const Kernel& k) const + { + if (t1_t2_ids.first==-1) + return point_from_id(p2,q2,r2,t1_t2_ids.second); + if (t1_t2_ids.second==-1) + return point_from_id(p1,q1,r1,t1_t2_ids.first); + + return k.construct_barycenter_3_object()(point_from_id(p2,q2,r2,(t1_t2_ids.second+1)%3), alpha, point_from_id(p2,q2,r2,t1_t2_ids.second)) ; + } +}; + template -void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p, - const typename Kernel::Point_3& q, - const typename Kernel::Point_3& r, +Point_on_triangle +intersection(const Point_on_triangle& p, + const Point_on_triangle& q, + int edge_id_t1, + const typename Kernel::Point_3& p1, + const typename Kernel::Point_3& q1, +// const typename Kernel::Point_3& r1, + const typename Kernel::Point_3& p2, + const typename Kernel::Point_3& q2, + const typename Kernel::Point_3& r2, + const Kernel& k) +{ + typedef Point_on_triangle Pot; + switch(p.id1()) + { + case -1: + { + switch(q.id1()) + { + case -1: // (-1, ip2) - (-1, iq2) + { + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, p.id2()), + Pot::point_from_id(p2, q2, r2, q.id2()), k); + int sgn = sign(alpha); + return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); // intersection with an original edge of t2 + } + default: + if (q.id2()!=-1) // (-1, ip2) - (iq1, iq2) + { + // we shorten an already cut edge + CGAL_assertion((p.id2()+1)%3 == q.id2()); + + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, p.id2()), + Pot::point_from_id(p2, q2, r2, q.id2()), k); + int sgn = sign(alpha); + return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); + } + // (-1, ip2) - (iq1, -1) + //vertex of t1, special case t1 edge passed thru a vertex of t2 + CGAL_assertion(edge_id_t1 == 2); + return Point_on_triangle(2, -1); // point on t1 has to be created from the intersection of edge 0 and edge 1 + } + } + default: + { + switch(p.id2()) + { + case -1: + { + switch(q.id1()) + { + case -1: // (ip1, -1) - (-1, iq2) + //vertex of t1, special case t1 edge passed thru a vertex of t2 + return Point_on_triangle(0, -1); + default: + { + CGAL_assertion(q.id2()!=-1); // (ip1, -1) - (iq2, -1) + //(ip1,-1), (iq1, iq2) + CGAL_assertion(edge_id_t1==2 && p.id1()==1); + return Point_on_triangle(q.id1()==1?2:0,-1); // vertex of t1 + } + } + } + default: + { + switch(q.id1()) + { + case -1: // (ip1, ip2) - (-1, iq2) + { + // we shorten an already cut edge + CGAL_assertion((q.id2()+1)%3 == p.id2()); + + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, p.id2()), k); + int sgn = sign(alpha); + return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); + } + default: + { + switch(q.id2()) + { + case -1: // (ip1, ip2) - (iq1, -1) + { + CGAL_assertion(edge_id_t1==2 && q.id1()==1); + return Point_on_triangle(p.id1()==1?2:0); // vertex of t1 + } + default: // (ip1, ip2) - (iq1, iq2) + return Point_on_triangle((p.id1()+1)%3==q.id1()?q.id1():p.id1(), -1); // vertex of t1 + } + } + } + } + } + } + } +} + +template +void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p1, + const typename Kernel::Point_3& q1, + const typename Kernel::Point_3& r1, + int edge_id, + const typename Kernel::Point_3& p2, + const typename Kernel::Point_3& q2, + const typename Kernel::Point_3& r2, const Kernel& k, - std::list& inter_pts) + std::list>& inter_pts) { - typedef typename std::list::iterator Iterator; + typedef typename std::list>::iterator Iterator; if(inter_pts.empty()) return; - typename Kernel::Coplanar_orientation_3 orient = k.coplanar_orientation_3_object(); - typename Kernel::Construct_line_3 line = k.construct_line_3_object(); - - //orient(p,q,r,r) is POSITIVE - std::map orientations; - for (Iterator it=inter_pts.begin();it!=inter_pts.end();++it) - orientations[ &(*it) ]=orient(p,q,r,*it); + //orient(p1,q1,r1,r1) is POSITIVE + std::map*,Orientation> orientations; // TODO skip map + for (const Point_on_triangle& pot : inter_pts) + orientations[ &pot ]=pot.orientation(p1,q1,r1,edge_id,p2,q2,r2,k); - CGAL_kernel_assertion_code(int pt_added = 0;) + CGAL_kernel_assertion_code(int pt_added = 0); - const typename Kernel::Point_3* prev = &(*boost::prior(inter_pts.end())); - Iterator stop = inter_pts.size() > 2 ? inter_pts.end() : boost::prior(inter_pts.end()); + Iterator prev = std::prev(inter_pts.end()); + Iterator stop = inter_pts.size() > 2 ? inter_pts.end() : std::prev(inter_pts.end()); for(Iterator it=inter_pts.begin(); it!=stop; ++it) { - const typename Kernel::Point_3& curr = *it; - Orientation or_prev = orientations[prev], - or_curr = orientations[&curr]; + Orientation or_prev = orientations[&(*prev)], + or_curr = orientations[&(*it)]; if((or_prev == POSITIVE && or_curr == NEGATIVE) || (or_prev == NEGATIVE && or_curr == POSITIVE)) { - typename Intersection_traits::result_type - obj = intersection(line(p,q), line(*prev,curr), k); - - // assert "not empty" - CGAL_kernel_assertion(bool(obj)); + Point_on_triangle new_pt = intersection(*prev, *it, edge_id, p1, q1, p2, q2, r2, k); - const typename Kernel::Point_3* inter = intersect_get(obj); - CGAL_kernel_assertion(inter != nullptr); - - prev = &(*inter_pts.insert(it,*inter)); - orientations[prev] = COLLINEAR; - CGAL_kernel_assertion_code(++pt_added;) + prev = inter_pts.insert(it,new_pt); + orientations[&(*prev)] = COLLINEAR; + CGAL_assertion_code(++pt_added); } - prev = &(*it); + prev = it; } CGAL_kernel_assertion(pt_added<3); @@ -98,35 +301,41 @@ intersection_coplanar_triangles(const typename K::Triangle_3& t1, const typename K::Triangle_3& t2, const K& k) { - const typename K::Point_3& p = t1.vertex(0), - q = t1.vertex(1), - r = t1.vertex(2); + const typename K::Point_3& p1 = t1.vertex(0), + q1 = t1.vertex(1), + r1 = t1.vertex(2); + + const typename K::Point_3& p2 = t2.vertex(0), + q2 = t2.vertex(1), + r2 = t2.vertex(2); - std::list inter_pts; - inter_pts.push_back(t2.vertex(0)); - inter_pts.push_back(t2.vertex(1)); - inter_pts.push_back(t2.vertex(2)); + std::list> inter_pts; + inter_pts.push_back(Point_on_triangle(-1,0)); + inter_pts.push_back(Point_on_triangle(-1,1)); + inter_pts.push_back(Point_on_triangle(-1,2)); //intersect t2 with the three half planes which intersection defines t1 - intersection_coplanar_triangles_cutoff(p,q,r,k,inter_pts); //line pq - intersection_coplanar_triangles_cutoff(q,r,p,k,inter_pts); //line qr - intersection_coplanar_triangles_cutoff(r,p,q,k,inter_pts); //line rp + intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,inter_pts); //line pq + intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,inter_pts); //line qr + intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,inter_pts); //line rp + auto point = [&](const Point_on_triangle& pot){ return pot.point(p1,q1,r1,p2,q2,r2,k); }; switch(inter_pts.size()) { case 0: return intersection_return(); case 1: - return intersection_return(*inter_pts.begin()); + return intersection_return(point(*inter_pts.begin())); case 2: return intersection_return( - k.construct_segment_3_object()(*inter_pts.begin(), *boost::next(inter_pts.begin())) ); + k.construct_segment_3_object()(point(*inter_pts.begin()), point(*std::next(inter_pts.begin()))) ); case 3: return intersection_return( - k.construct_triangle_3_object()(*inter_pts.begin(), *boost::next(inter_pts.begin()), *boost::prior(inter_pts.end())) ); + k.construct_triangle_3_object()(point(*inter_pts.begin()), point(*std::next(inter_pts.begin())), point(*std::prev(inter_pts.end()))) ); default: return intersection_return( - std::vector(inter_pts.begin(),inter_pts.end())); + std::vector(boost::make_transform_iterator(inter_pts.begin(), point), + boost::make_transform_iterator(inter_pts.end(), point))); } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index ae9858ae77d5..6d0334d93661 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,8 +36,8 @@ #include -// #define TEST_RESOLVE_INTERSECTION -// #define DEDUPLICATE_SEGMENTS +//#define TEST_RESOLVE_INTERSECTION +//#define DEDUPLICATE_SEGMENTS namespace CGAL { namespace Polygon_mesh_processing { @@ -259,6 +259,9 @@ void collect_intersections(const std::array& t1, if (ori[0]== COPLANAR && ori[1]==COPLANAR && ori[2]==COPLANAR) { coplanar_intersections(t1, t2, inter_pts); + for (auto p : inter_pts) + if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); + return; } @@ -283,6 +286,11 @@ void collect_intersections(const std::array& t1, std::sort(inter_pts.begin(), inter_pts.end()); auto last = std::unique(inter_pts.begin(), inter_pts.end()); inter_pts.erase(last, inter_pts.end()); + + + for (auto p : inter_pts) + if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); + } ////////////////////////////////// @@ -300,6 +308,10 @@ void generate_subtriangles(std::size_t ti, const std::vector>& triangles, std::vector>& new_triangles) { + //~ std::cout << "generate_subtriangles()\n"; + std::cout << std::setprecision(17); + + typedef CGAL::Projection_traits_3 P_traits; typedef CGAL::Exact_intersections_tag Itag; @@ -395,7 +407,7 @@ void generate_subtriangles(std::size_t ti, points_on_segments[i].push_back(*pt_ptr); points_on_segments[j].push_back(*pt_ptr); - //~ std::cout << "new inter " << *pt_ptr << "\n"; + //~ std::cout << "new inter " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; } } @@ -417,7 +429,7 @@ void generate_subtriangles(std::size_t ti, points_on_segments[i].push_back(*pt_ptr); points_on_segments[j].push_back(*pt_ptr); - //~ std::cout << "new inter bis" << *pt_ptr << "\n"; + //~ std::cout << "new inter bis " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; } else { @@ -428,6 +440,8 @@ void generate_subtriangles(std::size_t ti, points_on_segments[i].push_back(seg_ptr->target()); points_on_segments[j].push_back(seg_ptr->target()); + //~ std::cout << "new inter seg " << *seg_ptr << " (" << depth(*seg_ptr) << ")" << "\n"; + } else throw std::runtime_error("BOOM\n"); @@ -537,6 +551,20 @@ void generate_subtriangles(std::size_t ti, } } + //~ int max_degree = 0; + //~ for (const auto p : cst_points) + //~ max_degree = std::max(max_degree, depth(p)); + //~ std::cout << "max_degree " << max_degree << "\n"; + + //~ if (max_degree > 10){ + //~ for (const auto p : cst_points) + //~ std::cout << " -- " << p << "(" << depth(p) << ")\n"; + //~ std::cout << "segments:\n"; + //~ for (auto s : segments) + //~ std::cout << " " << depth(s[0]) << " " << depth(s[1]) << "\n"; + //~ exit(1); + //~ } + cdt.insert_constraints(cst_points.begin(), cst_points.end(), csts.begin(), csts.end()); std::vector> no_inter_segments; From 8e050bdb49c5268af0e12bb48bcf34edd01db96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 1 Mar 2023 15:39:28 +0100 Subject: [PATCH 164/943] fix various bug and add debug triangle_3_triangle_3_intersection now passes --- .../Triangle_3_Triangle_3_intersection.h | 131 +++++++++++++----- 1 file changed, 98 insertions(+), 33 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index d4e467a07986..55610e867ff3 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -14,6 +14,8 @@ #ifndef CGAL_INTERNAL_INTERSECTIONS_TRIANGLE_3_TRIANGLE_3_INTERSECTION_H #define CGAL_INTERNAL_INTERSECTIONS_TRIANGLE_3_TRIANGLE_3_INTERSECTION_H +//#define CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + #include #include #include @@ -74,21 +76,20 @@ struct Point_on_triangle } } - Point_on_triangle(int i1, int i2=-1, int sign=0, typename Kernel::FT alpha = 0.) // TODO add global zero()? + Point_on_triangle(int i1, int i2=-1, typename Kernel::FT alpha = 0.) // TODO add global zero()? : t1_t2_ids(i1,i2) - , sign(sign) + , alpha(alpha) {} // (id, -1) point on t1 // (-1, id) point on t2 // (id1, id2) intersection of edges std::pair t1_t2_ids; - int sign; typename Kernel::FT alpha; Orientation - orientation (const typename Kernel::Point_3& p1, // source of edge edge_ids1 - const typename Kernel::Point_3& q1, // target of edge edge_ids1 + orientation (const typename Kernel::Point_3& p1, // source of edge edge_id1 + const typename Kernel::Point_3& q1, // target of edge edge_id1 const typename Kernel::Point_3& r1, int edge_id1, const typename Kernel::Point_3& p2, @@ -98,15 +99,21 @@ struct Point_on_triangle { if (t1_t2_ids.first!=-1) { - if (t1_t2_ids.second==-1) return ZERO; // it is a point on t1 + if (t1_t2_ids.second==-1) + return (edge_id1==t1_t2_ids.first || (edge_id1+1)%3==t1_t2_ids.first) ? ZERO:POSITIVE; // it is a point on t1 // this is an intersection point - if (sign == 0) - return POSITIVE; - if (sign == -1) - return edge_id1==t1_t2_ids.first+1?POSITIVE:NEGATIVE; - else - return edge_id1==t1_t2_ids.first+1?NEGATIVE:POSITIVE; - } + + if (t1_t2_ids.first==edge_id1) + return ZERO; + if (t1_t2_ids.first==(edge_id1+1)%3) + { + if (alpha==0) return ZERO; + return alpha>=0 ? POSITIVE:NEGATIVE; + } + CGAL_assertion((t1_t2_ids.first+1)%3==edge_id1); + if (alpha==1) return ZERO; + return alpha<=1?POSITIVE:NEGATIVE; + } else { //this is an input point of t2 @@ -150,6 +157,11 @@ intersection(const Point_on_triangle& p, const typename Kernel::Point_3& r2, const Kernel& k) { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " calling intersection: "; + std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "])-"; + std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1 << "\n"; +#endif typedef Point_on_triangle Pot; switch(p.id1()) { @@ -163,21 +175,23 @@ intersection(const Point_on_triangle& p, coplanar_segment_segment_alpha_intersection(p1, q1, Pot::point_from_id(p2, q2, r2, p.id2()), Pot::point_from_id(p2, q2, r2, q.id2()), k); - int sgn = sign(alpha); - return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); // intersection with an original edge of t2 + return Point_on_triangle(edge_id_t1, p.id2(), alpha); // intersection with an original edge of t2 } default: if (q.id2()!=-1) // (-1, ip2) - (iq1, iq2) { - // we shorten an already cut edge - CGAL_assertion((p.id2()+1)%3 == q.id2()); - - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, p.id2()), - Pot::point_from_id(p2, q2, r2, q.id2()), k); - int sgn = sign(alpha); - return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); + if (p.id2() == q.id2() || p.id2() == (q.id2()+1)%3) + { + // points are on the same edge of t2 --> we shorten an already cut edge + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); + + return Point_on_triangle(edge_id_t1, q.id2(), alpha); + } + // point of t1 + return Point_on_triangle((q.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); } // (-1, ip2) - (iq1, -1) //vertex of t1, special case t1 edge passed thru a vertex of t2 @@ -211,15 +225,18 @@ intersection(const Point_on_triangle& p, { case -1: // (ip1, ip2) - (-1, iq2) { - // we shorten an already cut edge - CGAL_assertion((q.id2()+1)%3 == p.id2()); + if (q.id2() == p.id2() || q.id2() == (p.id2()+1)%3) + { + // points are on the same edge of t2 --> we shorten an already cut edge + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, p.id2()), + Pot::point_from_id(p2, q2, r2, (p.id2()+1)%3), k); - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, q.id2()), - Pot::point_from_id(p2, q2, r2, p.id2()), k); - int sgn = sign(alpha); - return Point_on_triangle(edge_id_t1, p.id2(), sgn, alpha); + return Point_on_triangle(edge_id_t1, p.id2(), alpha); + } + // point of t1 + return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); } default: { @@ -231,7 +248,8 @@ intersection(const Point_on_triangle& p, return Point_on_triangle(p.id1()==1?2:0); // vertex of t1 } default: // (ip1, ip2) - (iq1, iq2) - return Point_on_triangle((p.id1()+1)%3==q.id1()?q.id1():p.id1(), -1); // vertex of t1 + CGAL_assertion(p.id1()==q.id1()); + return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 } } } @@ -252,6 +270,11 @@ void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p1, const Kernel& k, std::list>& inter_pts) { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " cutoff using e" << edge_id << ": " + << to_double(p1.x()) << " " << to_double(p1.y()) << " " << to_double(p1.z()) << " " + << to_double(q1.x()) << " " << to_double(q1.y()) << " " << to_double(q1.z()) << "\n"; +#endif typedef typename std::list>::iterator Iterator; if(inter_pts.empty()) @@ -262,6 +285,12 @@ void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p1, for (const Point_on_triangle& pot : inter_pts) orientations[ &pot ]=pot.orientation(p1,q1,r1,edge_id,p2,q2,r2,k); +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " Orientations:"; + for (const Point_on_triangle& pot : inter_pts) + std::cout << " " << orientations[ &pot ]; + std::cout << "\n"; +#endif CGAL_kernel_assertion_code(int pt_added = 0); Iterator prev = std::prev(inter_pts.end()); @@ -301,6 +330,22 @@ intersection_coplanar_triangles(const typename K::Triangle_3& t1, const typename K::Triangle_3& t2, const K& k) { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + auto to_string = [](const typename K::Triangle_3& t) + { + std::stringstream sstr; + sstr << "4 " + << to_double(t[0].x()) << " " << to_double(t[0].y()) << " " << to_double(t[0].z()) << " " + << to_double(t[1].x()) << " " << to_double(t[1].y()) << " " << to_double(t[1].z()) << " " + << to_double(t[2].x()) << " " << to_double(t[2].y()) << " " << to_double(t[2].z()) << " " + << to_double(t[0].x()) << " " << to_double(t[0].y()) << " " << to_double(t[0].z()) << "\n"; + return sstr.str(); + }; + + std::cout << "intersection_coplanar_triangles\n"; + std::ofstream("/tmp/t1.polylines.txt") << to_string(t1) << "\n"; + std::ofstream("/tmp/t2.polylines.txt") << to_string(t2) << "\n"; +#endif const typename K::Point_3& p1 = t1.vertex(0), q1 = t1.vertex(1), r1 = t1.vertex(2); @@ -314,10 +359,30 @@ intersection_coplanar_triangles(const typename K::Triangle_3& t1, inter_pts.push_back(Point_on_triangle(-1,1)); inter_pts.push_back(Point_on_triangle(-1,2)); +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + auto print_points = [&]() + { + for(auto p : inter_pts) std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) "; std::cout <<"\n"; + }; + std::cout << " ipts size: " << inter_pts.size() << "\n"; + print_points(); +#endif //intersect t2 with the three half planes which intersection defines t1 intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,inter_pts); //line pq +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << inter_pts.size() << "\n"; + print_points(); +#endif intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,inter_pts); //line qr +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << inter_pts.size() << "\n"; + print_points(); +#endif intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,inter_pts); //line rp +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << inter_pts.size() << "\n"; + print_points(); +#endif auto point = [&](const Point_on_triangle& pot){ return pot.point(p1,q1,r1,p2,q2,r2,k); }; switch(inter_pts.size()) From 0bf300d5c51ea71657925aec1a3e6721729cc3c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 1 Mar 2023 17:19:35 +0100 Subject: [PATCH 165/943] plug new coplanar triangle intersection code --- .../Polygon_mesh_processing/autorefinement.h | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 6d0334d93661..b87a04c8a6a2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -83,26 +83,44 @@ do_coplanar_segments_intersect(const std::array& s1, ////////////////////////////////// // imported from Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h - template void coplanar_intersections(const std::array& t1, const std::array& t2, std::vector& inter_pts) { - const typename K::Point_3& p = t1[0], q = t1[1], r = t1[2]; + const typename K::Point_3& p1 = t1[0], q1 = t1[1], r1 = t1[2]; + const typename K::Point_3& p2 = t2[0], q2 = t2[1], r2 = t2[2]; + + std::list> l_inter_pts; + l_inter_pts.push_back(Intersections::internal::Point_on_triangle(-1,0)); + l_inter_pts.push_back(Intersections::internal::Point_on_triangle(-1,1)); + l_inter_pts.push_back(Intersections::internal::Point_on_triangle(-1,2)); + +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + auto to_string = [](const auto& t) + { + std::stringstream sstr; + sstr << "4 " + << to_double(t[0].x()) << " " << to_double(t[0].y()) << " " << to_double(t[0].z()) << " " + << to_double(t[1].x()) << " " << to_double(t[1].y()) << " " << to_double(t[1].z()) << " " + << to_double(t[2].x()) << " " << to_double(t[2].y()) << " " << to_double(t[2].z()) << " " + << to_double(t[0].x()) << " " << to_double(t[0].y()) << " " << to_double(t[0].z()) << "\n"; + return sstr.str(); + }; - std::list l_inter_pts; - l_inter_pts.push_back(t2[0]); - l_inter_pts.push_back(t2[1]); - l_inter_pts.push_back(t2[2]); + std::cout << "intersection_coplanar_triangles\n"; + std::ofstream("/tmp/t1.polylines.txt") << to_string(t1) << "\n"; + std::ofstream("/tmp/t2.polylines.txt") << to_string(t2) << "\n"; +#endif //intersect t2 with the three half planes which intersection defines t1 K k; - Intersections::internal::intersection_coplanar_triangles_cutoff(p,q,r,k,l_inter_pts); //line pq - Intersections::internal::intersection_coplanar_triangles_cutoff(q,r,p,k,l_inter_pts); //line qr - Intersections::internal::intersection_coplanar_triangles_cutoff(r,p,q,k,l_inter_pts); //line rp + intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,l_inter_pts); //line p1q1 + intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,l_inter_pts); //line q1r1 + intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,l_inter_pts); //line r1p1 - inter_pts.assign(l_inter_pts.begin(), l_inter_pts.end()); + for (const Intersections::internal::Point_on_triangle& pot : l_inter_pts) + inter_pts.push_back( pot.point(p1,q1,r1,p2,q2,r2,k) ); } // imported from Polygon_mesh_processing/internal/Corefinement/intersect_triangle_segment_3.h From 4fa600bc5fbf357f071817c7e8a775e89d9b2fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 3 Mar 2023 10:33:16 +0100 Subject: [PATCH 166/943] bug fix --- .../internal/Triangle_3_Triangle_3_intersection.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 55610e867ff3..7c6ad7b95f82 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -33,6 +33,7 @@ namespace CGAL { namespace Intersections { namespace internal{ +//TODO: move into a functor template typename K::FT coplanar_segment_segment_alpha_intersection(const typename K::Point_3& p1, const typename K::Point_3& p2, // segment 1 @@ -248,8 +249,18 @@ intersection(const Point_on_triangle& p, return Point_on_triangle(p.id1()==1?2:0); // vertex of t1 } default: // (ip1, ip2) - (iq1, iq2) - CGAL_assertion(p.id1()==q.id1()); - return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 + { + CGAL_assertion(p.id1()==q.id1() || p.id2()==q.id2() ); + + if (p.id1()==q.id1()) + return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 + + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); + return Point_on_triangle(edge_id_t1, q.id2(), alpha); + } } } } From 2fade292146be00a4d383c8a0356802de81aa708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 3 Mar 2023 10:35:42 +0100 Subject: [PATCH 167/943] add more debug --- .../Polygon_mesh_processing/autorefinement.h | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index b87a04c8a6a2..c5f3ebb78905 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -38,6 +38,7 @@ //#define TEST_RESOLVE_INTERSECTION //#define DEDUPLICATE_SEGMENTS +//#define DEBUG_DEPTH namespace CGAL { namespace Polygon_mesh_processing { @@ -111,13 +112,31 @@ void coplanar_intersections(const std::array& t1, std::cout << "intersection_coplanar_triangles\n"; std::ofstream("/tmp/t1.polylines.txt") << to_string(t1) << "\n"; std::ofstream("/tmp/t2.polylines.txt") << to_string(t2) << "\n"; + auto print_points = [&]() + { + for(auto p : l_inter_pts) std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) "; std::cout <<"\n"; + }; + std::cout << " ipts size: " << l_inter_pts.size() << "\n"; + print_points(); #endif //intersect t2 with the three half planes which intersection defines t1 K k; intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,l_inter_pts); //line p1q1 +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << l_inter_pts.size() << "\n"; + print_points(); +#endif intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,l_inter_pts); //line q1r1 +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << l_inter_pts.size() << "\n"; + print_points(); +#endif intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,l_inter_pts); //line r1p1 +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " ipts size: " << l_inter_pts.size() << "\n"; + print_points(); +#endif for (const Intersections::internal::Point_on_triangle& pot : l_inter_pts) inter_pts.push_back( pot.point(p1,q1,r1,p2,q2,r2,k) ); @@ -277,8 +296,10 @@ void collect_intersections(const std::array& t1, if (ori[0]== COPLANAR && ori[1]==COPLANAR && ori[2]==COPLANAR) { coplanar_intersections(t1, t2, inter_pts); +#ifdef DEBUG_DEPTH for (auto p : inter_pts) - if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); + if (depth(p)>2) throw std::runtime_error("Depth is not 4: "+std::to_string(depth(p))); +#endif return; } @@ -308,7 +329,6 @@ void collect_intersections(const std::array& t1, for (auto p : inter_pts) if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); - } ////////////////////////////////// From f3e4a60f96be4fe94124a8c945a0bd3bd2f5ffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 6 Mar 2023 14:03:24 +0100 Subject: [PATCH 168/943] fix intersection point computation --- .../internal/Triangle_3_Triangle_3_intersection.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 7c6ad7b95f82..ac376f443506 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -141,7 +141,7 @@ struct Point_on_triangle if (t1_t2_ids.second==-1) return point_from_id(p1,q1,r1,t1_t2_ids.first); - return k.construct_barycenter_3_object()(point_from_id(p2,q2,r2,(t1_t2_ids.second+1)%3), alpha, point_from_id(p2,q2,r2,t1_t2_ids.second)) ; + return k.construct_barycenter_3_object()(point_from_id(p1,q1,r1,(t1_t2_ids.first+1)%3), alpha, point_from_id(p1,q1,r1,t1_t2_ids.first)) ; } }; @@ -160,8 +160,8 @@ intersection(const Point_on_triangle& p, { #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " calling intersection: "; - std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "])-"; - std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1 << "\n"; + std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) -"; + std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1 << "\n"; #endif typedef Point_on_triangle Pot; switch(p.id1()) @@ -354,8 +354,8 @@ intersection_coplanar_triangles(const typename K::Triangle_3& t1, }; std::cout << "intersection_coplanar_triangles\n"; - std::ofstream("/tmp/t1.polylines.txt") << to_string(t1) << "\n"; - std::ofstream("/tmp/t2.polylines.txt") << to_string(t2) << "\n"; + std::ofstream("/tmp/t1.polylines.txt") << std::setprecision(17) << to_string(t1) << "\n"; + std::ofstream("/tmp/t2.polylines.txt") << std::setprecision(17) << to_string(t2) << "\n"; #endif const typename K::Point_3& p1 = t1.vertex(0), q1 = t1.vertex(1), From f499c392664483298fb4c26bc587cce758671b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 6 Mar 2023 19:30:07 +0100 Subject: [PATCH 169/943] add a version with fixed dimension for projection --- .../Polygon_mesh_processing/autorefinement.h | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index c5f3ebb78905..7524c9c7f342 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -38,8 +38,13 @@ //#define TEST_RESOLVE_INTERSECTION //#define DEDUPLICATE_SEGMENTS +//#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH +#ifdef USE_FIXED_PROJECTION_TRAITS +#include +#endif + namespace CGAL { namespace Polygon_mesh_processing { @@ -337,7 +342,11 @@ void collect_intersections(const std::array& t1, ////////////////////////////////// ////////////////////////////////// -template +template void generate_subtriangles(std::size_t ti, std::vector>& segments, const std::vector& points, @@ -349,8 +358,11 @@ void generate_subtriangles(std::size_t ti, //~ std::cout << "generate_subtriangles()\n"; std::cout << std::setprecision(17); - +#ifdef USE_FIXED_PROJECTION_TRAITS + typedef ::CGAL::internal::Projection_traits_3 P_traits; +#else typedef CGAL::Projection_traits_3 P_traits; +#endif typedef CGAL::Exact_intersections_tag Itag; typedef CGAL::Constrained_Delaunay_triangulation_2set_point(t[2]); +#endif #ifdef TEST_RESOLVE_INTERSECTION //~ static std::ofstream debug("inter_segments.polylines.txt"); @@ -832,7 +852,31 @@ void autorefine_soup_output(const PointRange& input_points, if (all_segments[ti].empty() && all_points[ti].empty()) new_triangles.push_back(triangles[ti]); else + { + #ifdef USE_FIXED_PROJECTION_TRAITS + const std::array& t = triangles[ti]; + auto is_constant_in_dim = [](const std::array& t, int dim) + { + return t[0][dim]==t[1][dim] && t[0][dim]!=t[2][dim]; + }; + + typename EK::Vector_3 orth = CGAL::normal(t[0], t[1], t[2]); // TODO::avoid construction? + int c = CGAL::abs(orth[0]) > CGAL::abs(orth[1]) ? 0 : 1; + c = CGAL::abs(orth[2]) > CGAL::abs(orth[c]) ? 2 : c; + + if(c == 0) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } else if(c == 1) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } else if(c == 2) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + #else autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + #endif + } + + } // brute force output: create a soup, orient and to-mesh From 3abf7c401b67eefc2a2408dbac40c11f7e933203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 6 Mar 2023 19:31:26 +0100 Subject: [PATCH 170/943] add debug --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 7524c9c7f342..e5a7dbbb139e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -145,6 +145,19 @@ void coplanar_intersections(const std::array& t1, for (const Intersections::internal::Point_on_triangle& pot : l_inter_pts) inter_pts.push_back( pot.point(p1,q1,r1,p2,q2,r2,k) ); + +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::ofstream debug("interpts.xyz"); + debug << std::setprecision(17); + debug << l_inter_pts.size() << "\n"; + for (auto pot : l_inter_pts) + debug << pot.point(p1,q1,r1,p2,q2,r2,k) << "\n"; + debug.close(); + std::cout <<"check!\n"; + int i; + std::cin >> i; +#endif + } // imported from Polygon_mesh_processing/internal/Corefinement/intersect_triangle_segment_3.h From 8ff9f17a415524a52aa253b3c148ad45459de656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 13 Mar 2023 15:33:35 +0100 Subject: [PATCH 171/943] restore traits creation --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index e5a7dbbb139e..3bb845854ec2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -401,13 +401,14 @@ void generate_subtriangles(std::size_t ti, cdt.insert(t[1]); cdt.insert(t[2]); #else - P_traits cdt_traits(n); bool orientation_flipped = false; if ( typename EK::Less_xyz_3()(o+n,o) ) { n=-n; orientation_flipped = true; } + + P_traits cdt_traits(n); CDT cdt(cdt_traits); cdt.insert_outside_affine_hull(t[0]); cdt.insert_outside_affine_hull(t[1]); From 14105bbdd4319109f83b256b7af86e855870a487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Mar 2023 13:56:54 +0100 Subject: [PATCH 172/943] always use local indices for range insertion of constraints --- .../Polygon_mesh_processing/autorefinement.h | 253 ++++++++++++------ 1 file changed, 167 insertions(+), 86 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 3bb845854ec2..a81b00f65a48 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -37,7 +37,8 @@ #include //#define TEST_RESOLVE_INTERSECTION -//#define DEDUPLICATE_SEGMENTS +#define DEDUPLICATE_SEGMENTS +//#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH @@ -45,6 +46,10 @@ #include #endif +#ifdef DEBUG_COUNTERS +#include +#endif + namespace CGAL { namespace Polygon_mesh_processing { @@ -55,28 +60,28 @@ enum Segment_inter_type { NO_INTERSECTION=0, COPLANAR_SEGMENTS, POINT_INTERSECTI template Segment_inter_type -do_coplanar_segments_intersect(const std::array& s1, - const std::array& s2, +do_coplanar_segments_intersect(const typename K::Point_3& s1_0, const typename K::Point_3& s1_1, + const typename K::Point_3& s2_0, const typename K::Point_3& s2_1, const K& k = K()) { // supporting_line intersects: points are coplanar typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); - ::CGAL::Orientation or1 = cpl_orient(s1[0], s1[1], s2[0]); - ::CGAL::Orientation or2 = cpl_orient(s1[0], s1[1], s2[1]); + ::CGAL::Orientation or1 = cpl_orient(s1_0, s1_1, s2_0); + ::CGAL::Orientation or2 = cpl_orient(s1_0, s1_1, s2_1); if(or1 == COLLINEAR && or2 == COLLINEAR) { // segments are collinear typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); - return (cln_order(s1[0], s2[0], s1[1]) || - cln_order(s1[0], s2[1], s1[1]) || - cln_order(s2[0], s1[0], s2[1])) ? COPLANAR_SEGMENTS : NO_INTERSECTION; + return (cln_order(s1_0, s2_0, s1_1) || + cln_order(s1_0, s2_1, s1_1) || + cln_order(s2_0, s1_0, s2_1)) ? COPLANAR_SEGMENTS : NO_INTERSECTION; } if(or1 != or2) { - or1 = cpl_orient(s2[0], s2[1], s1[0]); - return (or1 == COLLINEAR || or1 != cpl_orient(s2[0], s2[1], s1[1])) ? POINT_INTERSECTION : NO_INTERSECTION; + or1 = cpl_orient(s2_0, s2_1, s1_0); + return (or1 == COLLINEAR || or1 != cpl_orient(s2_0, s2_1, s1_1)) ? POINT_INTERSECTION : NO_INTERSECTION; } return NO_INTERSECTION; @@ -361,8 +366,8 @@ template void generate_subtriangles(std::size_t ti, - std::vector>& segments, - const std::vector& points, + std::vector>& segments, + std::vector& points, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, const std::vector>& triangles, @@ -376,13 +381,14 @@ void generate_subtriangles(std::size_t ti, #else typedef CGAL::Projection_traits_3 P_traits; #endif - typedef CGAL::Exact_intersections_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; + + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; @@ -416,6 +422,35 @@ void generate_subtriangles(std::size_t ti, v->set_point(t[2]); #endif +#ifdef DEBUG_COUNTERS + struct Counter + { + int c1=0; + int c2=0; + int c3=0; + int c4=0; + int total=0; + ~Counter() + { + std::cout << "intersection of 3 planes: " << c1 << "\n"; + std::cout << "coplanar segment intersection : " << c2 << "\n"; + std::cout << "coplanar segment overlap: " << c3 << "\n"; + std::cout << "no intersection: " << c4 << "\n"; + std::cout << "# pairs of segments : " << total << "\n"; + std::cout << "time computing segment intersections: " << timer1.time() << "\n"; + std::cout << "time sorting intersection points: " << timer2.time() << "\n"; + std::cout << "time for cdt of constraints: " << timer3.time() << "\n"; + } + CGAL::Real_timer timer1, timer2, timer3; + }; + + static Counter counter; +#define COUNTER_INSTRUCTION(X) X +#else +#define COUNTER_INSTRUCTION(X) +#endif + + #ifdef TEST_RESOLVE_INTERSECTION //~ static std::ofstream debug("inter_segments.polylines.txt"); //~ debug.precision(17); @@ -458,14 +493,33 @@ void generate_subtriangles(std::size_t ti, return typename EK::Plane_3(t[0], t[1], t[2]); }; - std::vector< std::vector > points_on_segments(nbs); + std::vector< std::vector > points_on_segments(nbs); + + COUNTER_INSTRUCTION(counter.timer1.start();) + + std::map point_id_map; + + for (std::size_t pid=0; pidsecond; + }; + + for (std::size_t i = 0; i(segments[i], segments[j]); + Segment_inter_type seg_inter_type = + do_coplanar_segments_intersect(points[segments[i].first], points[segments[i].second], + points[segments[j].first], points[segments[j].second]); switch(seg_inter_type) { case POINT_INTERSECTION: @@ -476,9 +530,11 @@ void generate_subtriangles(std::size_t ti, if (const typename EK::Point_3* pt_ptr = boost::get(&(*res))) { - points_on_segments[i].push_back(*pt_ptr); - points_on_segments[j].push_back(*pt_ptr); - + COUNTER_INSTRUCTION(++counter.c1;) + std::size_t pid = get_point_id(*pt_ptr); + points_on_segments[i].push_back(pid); + points_on_segments[j].push_back(pid); + break; //~ std::cout << "new inter " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; } @@ -490,30 +546,35 @@ void generate_subtriangles(std::size_t ti, //~ std::cout << "coplanar inter: " << i << " " << j << "\n"; - typename EK::Segment_3 s1(segments[i][0], segments[i][1]); - typename EK::Segment_3 s2(segments[j][0], segments[j][1]);// TODO: avoid this construction + typename EK::Segment_3 s1(points[segments[i].first], points[segments[i].second]); + typename EK::Segment_3 s2(points[segments[j].first], points[segments[j].second]);// TODO: avoid this construction auto inter = CGAL::intersection(s1, s2); if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) { - points_on_segments[i].push_back(*pt_ptr); - points_on_segments[j].push_back(*pt_ptr); - + COUNTER_INSTRUCTION(++counter.c2;) + std::size_t pid = get_point_id(*pt_ptr); + points_on_segments[i].push_back(pid); + points_on_segments[j].push_back(pid); + break; //~ std::cout << "new inter bis " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; } else { if (const typename EK::Segment_3* seg_ptr = boost::get(&(*inter))) { - points_on_segments[i].push_back(seg_ptr->source()); - points_on_segments[j].push_back(seg_ptr->source()); - points_on_segments[i].push_back(seg_ptr->target()); - points_on_segments[j].push_back(seg_ptr->target()); - + //TODO HERE WE SHOULD IMPROVE TO AVOID RECOMPUTING SEGMENTS ENDPOINTS + COUNTER_INSTRUCTION(++counter.c3;) + std::size_t src_pid = get_point_id(seg_ptr->source()); + std::size_t tgt_pid = get_point_id(seg_ptr->target()); + points_on_segments[i].push_back(src_pid); + points_on_segments[j].push_back(src_pid); + points_on_segments[i].push_back(tgt_pid); + points_on_segments[j].push_back(tgt_pid); + break; //~ std::cout << "new inter seg " << *seg_ptr << " (" << depth(*seg_ptr) << ")" << "\n"; - } else throw std::runtime_error("BOOM\n"); @@ -564,24 +625,26 @@ void generate_subtriangles(std::size_t ti, //~ debug << "4 " << triangles[ti] << " " << triangles[ti][0] << "\n"; //~ exit(1); } - break; +// break; default: + COUNTER_INSTRUCTION(++counter.c4;) break; } } + COUNTER_INSTRUCTION(++counter.total;) } } - - std::vector cst_points; - std::vector> csts; + COUNTER_INSTRUCTION(counter.timer1.stop();) + COUNTER_INSTRUCTION(counter.timer2.start();) + std::size_t nb_new_segments=0; for (std::size_t i = 0; i& s = segments[i]; - typename EK::Point_3 src = s[0], tgt=s[1]; + std::size_t src_id = segments[i].first, tgt_id = segments[i].second; + typename EK::Point_3 src = points[src_id], tgt=points[tgt_id]; if (src.x()==tgt.x()) { coord=1; @@ -589,15 +652,23 @@ void generate_subtriangles(std::size_t ti, coord==2; } if (src[coord]>tgt[coord]) + { + std::swap(src_id, tgt_id); std::swap(src, tgt); + } - std::sort(points_on_segments[i].begin(), points_on_segments[i].end(), [coord](const typename EK::Point_3& p, const typename EK::Point_3& q){return p[coord]> no_inter_segments; - no_inter_segments.reserve(nbs); + // now fill segments with new segments + segments.reserve(segments.size()+nb_new_segments); for (std::size_t i = 0; i to_input; - std::map point_id_map; -#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - std::vector exact_soup_points; -#endif - - auto get_point_id = [&](const typename EK::Point_3& pt) - { - auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); - if (insert_res.second) - { - soup_points.push_back(to_input(pt)); -#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.push_back(pt); -#endif - } - return insert_res.first->second; - }; - - // filter duplicated segments #ifdef DEDUPLICATE_SEGMENTS + // deduplicate inserted segments + std::vector>> all_segments_ids(all_segments.size()); for(std::size_t ti=0; ti point_id_map; + auto get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, all_points[ti].size())); + if (insert_res.second) + all_points[ti].push_back(pt); + return insert_res.first->second; + }; + std::size_t nbs = all_segments[ti].size(); std::vector> filtered_segments; std::vector filtered_in_triangle_ids; @@ -841,19 +904,16 @@ void autorefine_soup_output(const PointRange& input_points, { EK::Point_3 src = all_segments[ti][si][0], tgt = all_segments[ti][si][1]; + std::size_t src_id = get_point_id(src), tgt_id=get_point_id(tgt); if (segset.insert( - CGAL::make_sorted_pair( get_point_id(src), - get_point_id(tgt))).second) + CGAL::make_sorted_pair(src_id, tgt_id)).second) { - filtered_segments.push_back(all_segments[ti][si]); + all_segments_ids[ti].emplace_back(src_id, tgt_id); filtered_in_triangle_ids.push_back(all_in_triangle_ids[ti][si]); } } - if (filtered_segments.size()!=nbs) - { - filtered_segments.swap(all_segments[ti]); + if (all_segments_ids[ti].size()!=nbs) filtered_in_triangle_ids.swap(all_in_triangle_ids[ti]); - } } } #endif @@ -886,7 +946,7 @@ void autorefine_soup_output(const PointRange& input_points, autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); } #else - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); #endif } @@ -896,11 +956,31 @@ void autorefine_soup_output(const PointRange& input_points, // brute force output: create a soup, orient and to-mesh CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); + Cartesian_converter to_input; + std::map point_id_map; +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + std::vector exact_soup_points; +#endif + + auto get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); + if (insert_res.second) + { + soup_points.push_back(to_input(pt)); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.push_back(pt); +#endif + } + return insert_res.first->second; + }; + std::vector input_point_ids; input_point_ids.reserve(input_points.size()); for (const auto& p : input_points) input_point_ids.push_back(get_point_id(to_exact(get(pm,p)))); + // raw copy of input triangles with no intersection for (Input_TID f=0; f& t : new_triangles) { soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); From 003910ee220262b370b31bfe525ecb20bf2e8a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Mar 2023 18:10:04 +0100 Subject: [PATCH 173/943] fix typo --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index a81b00f65a48..e18cf1982b2b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -663,7 +663,7 @@ void generate_subtriangles(std::size_t ti, [&](std::size_t id1, std::size_t id2) { if (id1==id2) return false; - return points[id1][coord] Date: Tue, 14 Mar 2023 18:32:31 +0100 Subject: [PATCH 174/943] dramatic typo --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index e18cf1982b2b..d40fce82d2bc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -649,7 +649,7 @@ void generate_subtriangles(std::size_t ti, { coord=1; if (src.y()==tgt.y()) - coord==2; + coord=2; } if (src[coord]>tgt[coord]) { From 5defd784cc0dae96083708f8b2454c2249509dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 15 Mar 2023 14:24:37 +0100 Subject: [PATCH 175/943] better treatment of intersection between segments --- .../Polygon_mesh_processing/autorefinement.h | 447 ++++++++++++++---- 1 file changed, 346 insertions(+), 101 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index d40fce82d2bc..711c3d82ce0a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -56,13 +56,59 @@ namespace Polygon_mesh_processing { #ifndef DOXYGEN_RUNNING namespace autorefine_impl { -enum Segment_inter_type { NO_INTERSECTION=0, COPLANAR_SEGMENTS, POINT_INTERSECTION }; + +enum Segment_inter_type_old { NO_INTERSECTION_OLD=0, COPLANAR_SEGMENTS, POINT_INTERSECTION_OLD }; +enum Segment_inter_type { NO_INTERSECTION=0, + POINT_INTERSECTION, + POINT_P, + POINT_Q, + POINT_R, + POINT_S, + COPLANAR_SEGMENT_PQ, + COPLANAR_SEGMENT_RS, + COPLANAR_SEGMENT_PS, + COPLANAR_SEGMENT_QS, + COPLANAR_SEGMENT_PR, + COPLANAR_SEGMENT_QR, + }; + + + +std::string print_enum(Segment_inter_type_old s) +{ + switch(s) + { + case NO_INTERSECTION_OLD: return "NO_INTERSECTION_OLD"; + case COPLANAR_SEGMENTS: return "COPLANAR_SEGMENTS"; + case POINT_INTERSECTION_OLD: return "POINT_INTERSECTION_OLD"; + } +} + +std::string print_enum(Segment_inter_type s) +{ + switch(s) + { + case NO_INTERSECTION: return "NO_INTERSECTION"; + case POINT_INTERSECTION: return "POINT_INTERSECTION"; + case POINT_P: return "POINT_P"; + case POINT_Q: return "POINT_Q"; + case POINT_R: return "POINT_R"; + case POINT_S: return "POINT_S"; + case COPLANAR_SEGMENT_PQ: return "COPLANAR_SEGMENT_PQ"; + case COPLANAR_SEGMENT_RS: return "COPLANAR_SEGMENT_RS"; + case COPLANAR_SEGMENT_PS: return "COPLANAR_SEGMENT_PS"; + case COPLANAR_SEGMENT_QS: return "COPLANAR_SEGMENT_QS"; + case COPLANAR_SEGMENT_PR: return "COPLANAR_SEGMENT_PR"; + case COPLANAR_SEGMENT_QR: return "COPLANAR_SEGMENT_QR"; + } +} + template -Segment_inter_type -do_coplanar_segments_intersect(const typename K::Point_3& s1_0, const typename K::Point_3& s1_1, - const typename K::Point_3& s2_0, const typename K::Point_3& s2_1, - const K& k = K()) +Segment_inter_type_old +do_coplanar_segments_intersect_old(const typename K::Point_3& s1_0, const typename K::Point_3& s1_1, + const typename K::Point_3& s2_0, const typename K::Point_3& s2_1, + const K& k = K()) { // supporting_line intersects: points are coplanar typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); @@ -75,13 +121,155 @@ do_coplanar_segments_intersect(const typename K::Point_3& s1_0, const typename K typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); return (cln_order(s1_0, s2_0, s1_1) || cln_order(s1_0, s2_1, s1_1) || - cln_order(s2_0, s1_0, s2_1)) ? COPLANAR_SEGMENTS : NO_INTERSECTION; + cln_order(s2_0, s1_0, s2_1)) ? COPLANAR_SEGMENTS : NO_INTERSECTION_OLD; } if(or1 != or2) { or1 = cpl_orient(s2_0, s2_1, s1_0); - return (or1 == COLLINEAR || or1 != cpl_orient(s2_0, s2_1, s1_1)) ? POINT_INTERSECTION : NO_INTERSECTION; + return (or1 == COLLINEAR || or1 != cpl_orient(s2_0, s2_1, s1_1)) ? POINT_INTERSECTION_OLD : NO_INTERSECTION_OLD; + } + + return NO_INTERSECTION_OLD; +} + + +// test intersection in the interior of segment pq and rs with pq and rs being coplanar segments +// note that for coplanar cases, we might report identical endpoints +template +Segment_inter_type +do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, + std::size_t ri, std::size_t si, + const std::vector& points, + const K& k = K()) +{ + typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); + typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); + + const typename K::Point_3& p=points[pi]; + const typename K::Point_3& q=points[qi]; + const typename K::Point_3& r=points[ri]; + const typename K::Point_3& s=points[si]; + + // first handle case of shared endpoints + if (pi==ri) + { + if (si==qi || cpl_orient(p, q, s)!=COPLANAR) return NO_INTERSECTION; + // can be s, q or nothing + if (cln_order(p,s,q)) + return POINT_S; + if (cln_order(p,q,s)) + return POINT_Q; + return NO_INTERSECTION; + } + else + { + if(pi==si) + { + if (qi==ri || cpl_orient(p, q, r)!=COPLANAR) return NO_INTERSECTION; + // can be r, q or nothing + if (cln_order(p,r,q)) + return POINT_R; + if (cln_order(p,q,r)) + return POINT_Q; + return NO_INTERSECTION; + } + else + { + if (qi==ri) + { + if (pi==si || cpl_orient(p, q, s)!=COPLANAR) return NO_INTERSECTION; + // can be p, s or nothing + if (cln_order(p,s,q)) + return POINT_S; + if (cln_order(q,p,s)) + return POINT_P; + return NO_INTERSECTION; + } + else + { + if (qi==si) + { + if (pi==ri || cpl_orient(p, q, r)!=COPLANAR) return NO_INTERSECTION; + // can be p, r or nothing + if (cln_order(p,r,q)) + return POINT_R; + if (cln_order(q,p,r)) + return POINT_P; + return NO_INTERSECTION; + } + } + } + } + + // supporting_line intersects: points are coplanar + ::CGAL::Orientation pqr = cpl_orient(p, q, r); + ::CGAL::Orientation pqs = cpl_orient(p, q, s); + + if(pqr == COLLINEAR && pqs == COLLINEAR) + { + // segments are collinear + bool r_in_pq = cln_order(p, r, q), + s_in_pq = cln_order(p, s, q), + p_in_rs = cln_order(r, p, s); + + if (r_in_pq) + { + // intersection could be rs, pr or qr + if (s_in_pq) + return COPLANAR_SEGMENT_RS; + if (p_in_rs) + return COPLANAR_SEGMENT_PR; + CGAL_assertion(cln_order(r, q, s)); + return COPLANAR_SEGMENT_QR; + } + else + { + if (s_in_pq) + { + // intersection could be ps or qs + if (p_in_rs) + return COPLANAR_SEGMENT_PS; + CGAL_assertion(cln_order(r, q, s)); + return COPLANAR_SEGMENT_QS; + } + else + if (p_in_rs) + { + CGAL_assertion(cln_order(r, q, s)); + return COPLANAR_SEGMENT_PQ; + } + } + return NO_INTERSECTION; + } + + if(pqr != pqs) + { + ::CGAL::Orientation rsp = cpl_orient(r, s, p); + + if (rsp==COLLINEAR) + { + if (pqr==COLLINEAR || pqs==COLLINEAR) + { + throw std::runtime_error("no expected #1"); + } + return POINT_P; + } + ::CGAL::Orientation rsq = cpl_orient(r, s, q); + if (rsq==COLLINEAR) + { + if (pqr==COLLINEAR || pqs==COLLINEAR) + { + throw std::runtime_error("no expected #2"); + } + return POINT_Q; + } + if (rsp!=rsq) + { + if (pqr==COLLINEAR) return POINT_R; + if (pqs==COLLINEAR) return POINT_S; + return POINT_INTERSECTION; + } } return NO_INTERSECTION; @@ -429,6 +617,7 @@ void generate_subtriangles(std::size_t ti, int c2=0; int c3=0; int c4=0; + int c5=0; int total=0; ~Counter() { @@ -436,6 +625,7 @@ void generate_subtriangles(std::size_t ti, std::cout << "coplanar segment intersection : " << c2 << "\n"; std::cout << "coplanar segment overlap: " << c3 << "\n"; std::cout << "no intersection: " << c4 << "\n"; + std::cout << "intersection filtered with bboxes: " << c5 << "\n"; std::cout << "# pairs of segments : " << total << "\n"; std::cout << "time computing segment intersections: " << timer1.time() << "\n"; std::cout << "time sorting intersection points: " << timer2.time() << "\n"; @@ -480,13 +670,6 @@ void generate_subtriangles(std::size_t ti, if (!segments.empty()) { std::size_t nbs = segments.size(); - //~ std::cout << "nbs " << nbs << "\n"; - - //~ if (nbs==8) - //~ { - //~ for (std::size_t i = 0; i& t) { @@ -510,20 +693,69 @@ void generate_subtriangles(std::size_t ti, return insert_res.first->second; }; - + std::vector point_boxes(points.size()); + for (std::size_t i = 0; i segment_boxes(nbs); + for (std::size_t i = 0; i(points[segments[i].first], points[segments[i].second], - points[segments[j].first], points[segments[j].second]); + do_coplanar_segments_intersect(segments[i].first, segments[i].second, + segments[j].first, segments[j].second, + points); + + + //~ Segment_inter_type_old seg_inter_type_old = + //~ do_coplanar_segments_intersect_old(points[segments[i].first], points[segments[i].second], + //~ points[segments[j].first], points[segments[j].second]); + + + //~ std::cout << std::setprecision(17); + //~ std::cout << points[segments[i].first] << " " << points[segments[i].second] << "\n"; + //~ std::cout << points[segments[j].first] << " " << points[segments[j].second] << "\n"; + //~ std::cout << "OLD: " << print_enum(seg_inter_type_old) << "\n"; + //~ std::cout << "NEW: " << print_enum(seg_inter_type) << "\n"; + switch(seg_inter_type) { + case POINT_P: + { + points_on_segments[j].push_back(segments[i].first); + break; + } + case POINT_Q: + { + points_on_segments[j].push_back(segments[i].second); + break; + } + case POINT_R: + { + points_on_segments[i].push_back(segments[j].first); + break; + } + case POINT_S: + { + points_on_segments[i].push_back(segments[j].second); + break; + } case POINT_INTERSECTION: { + // TODO: use version with no variant auto res = CGAL::intersection(supporting_plane(triangles[in_triangle_ids[i]]), supporting_plane(triangles[in_triangle_ids[j]]), supporting_plane(triangles[ti])); @@ -534,101 +766,78 @@ void generate_subtriangles(std::size_t ti, std::size_t pid = get_point_id(*pt_ptr); points_on_segments[i].push_back(pid); points_on_segments[j].push_back(pid); - break; - //~ std::cout << "new inter " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; - - } - } - // break; No break because of the coplanar case - case COPLANAR_SEGMENTS: - { - // We can have hard cases if two triangles are coplanar.... - - //~ std::cout << "coplanar inter: " << i << " " << j << "\n"; - - typename EK::Segment_3 s1(points[segments[i].first], points[segments[i].second]); - typename EK::Segment_3 s2(points[segments[j].first], points[segments[j].second]);// TODO: avoid this construction - auto inter = CGAL::intersection(s1, s2); - - if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); - - if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) - { - COUNTER_INSTRUCTION(++counter.c2;) - std::size_t pid = get_point_id(*pt_ptr); - points_on_segments[i].push_back(pid); - points_on_segments[j].push_back(pid); - break; - //~ std::cout << "new inter bis " << *pt_ptr << " (" << depth(points_on_segments[i].back()) << ")" << "\n"; } else { - if (const typename EK::Segment_3* seg_ptr = boost::get(&(*inter))) + COUNTER_INSTRUCTION(++counter.c2;) + //TODO find better! + typename EK::Segment_3 s1(points[segments[i].first], points[segments[i].second]); + typename EK::Segment_3 s2(points[segments[j].first], points[segments[j].second]);// TODO: avoid this construction + auto inter = CGAL::intersection(s1, s2); + if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); + if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) { - //TODO HERE WE SHOULD IMPROVE TO AVOID RECOMPUTING SEGMENTS ENDPOINTS - COUNTER_INSTRUCTION(++counter.c3;) - std::size_t src_pid = get_point_id(seg_ptr->source()); - std::size_t tgt_pid = get_point_id(seg_ptr->target()); - points_on_segments[i].push_back(src_pid); - points_on_segments[j].push_back(src_pid); - points_on_segments[i].push_back(tgt_pid); - points_on_segments[j].push_back(tgt_pid); + std::size_t pid = get_point_id(*pt_ptr); + points_on_segments[i].push_back(pid); + points_on_segments[j].push_back(pid); break; - //~ std::cout << "new inter seg " << *seg_ptr << " (" << depth(*seg_ptr) << ")" << "\n"; } else - throw std::runtime_error("BOOM\n"); - } - -#if 0 - //this code works if triangles are not coplanar - // coplanar intersection that is not a point - int coord = 0; - const typename EK::Segment_3& s = segments[i]; - typename EK::Point_3 src = s[0], tgt=s[1]; - if (src.x()==tgt.x()) - { - coord=1; - if (src.y()==tgt.y()) - coord==2; + throw std::runtime_error("Unexpected case 1"); + //~ std::ofstream debug ("/tmp/triangles.polylines.txt"); + //~ debug << "4 " << triangles[ti][0] << " " << triangles[ti][1] << " " << triangles[ti][2] << " " << triangles[ti][0] << "\n"; + //~ debug << "4 " << triangles[in_triangle_ids[i]][0] << " " << triangles[in_triangle_ids[i]][1] << " " << triangles[in_triangle_ids[i]][2] << " " << triangles[in_triangle_ids[i]][0] << "\n"; + //~ debug << "4 " << triangles[in_triangle_ids[j]][0] << " " << triangles[in_triangle_ids[j]][1] << " " << triangles[in_triangle_ids[j]][2] << " " << triangles[in_triangle_ids[j]][0] << "\n"; + //~ debug.close(); + //~ throw std::runtime_error("Unexpected case 1"); } - - std::vector tmp_pts = { - src, tgt, segments[j][0], segments[j][1] }; - - std::sort(tmp_pts.begin(), tmp_pts.end(), - [coord](const typename EK::Point_3& p, const typename EK::Point_3& q) - {return p[coord](points_on_segments[i].begin(), points_on_segments[i].end()).size()!= points_on_segments[i].size()) + { + std::cout << "coord = " << coord << "\n"; + std::cout << "(src.x()==tgt.x()) " << (src.x()==tgt.x()) << "\n"; + std::cout << "(src.y()==tgt.y()) " << (src.y()==tgt.y()) << "\n"; + std::cout << "(src.z()==tgt.z()) " << (src.z()==tgt.z()) << "\n"; + + for (auto v : points_on_segments[i]) + std::cout << " " << v; + std::cout << std::endl; + for (auto v : points_on_segments[i]) + std::cout << points[v] << "\n"; + std::cout << std::endl; + throw std::runtime_error("unique failed!"); + } + + nb_new_segments+=points_on_segments[i].size()-2; //~ { @@ -721,6 +948,24 @@ void generate_subtriangles(std::size_t ti, //~ std::cout << "done\n"; #endif + // TODO: sorted pair to be constructed when pushing_back + for (std::pair& s : segments) + if (s.second < s.first) + std::swap(s.first,s.second); + std::sort(segments.begin(), segments.end()); + auto last = std::unique(segments.begin(), segments.end()); + segments.erase(last, segments.end()); + + + std::ofstream("/tmp/tri.xyz") << std::setprecision(17) << triangles[ti][0] << "\n" + << triangles[ti][1] << "\n" + << triangles[ti][2] << "\n"; + std::ofstream debug("/tmp/cst.polylines.txt"); + debug << std::setprecision(17); + for(auto s : segments) + debug << "2 " << points[s.first] << " " << points[s.second] << "\n"; + debug.close(); + COUNTER_INSTRUCTION(counter.timer3.start();) cdt.insert_constraints(points.begin(), points.end(), segments.begin(), segments.end()); COUNTER_INSTRUCTION(counter.timer3.stop();) From 48c49add1cd8100ed08cbff3a97f11de244f3fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 15 Mar 2023 15:48:44 +0100 Subject: [PATCH 176/943] more debug and enum fix --- .../Polygon_mesh_processing/autorefinement.h | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 711c3d82ce0a..8cc1dd7ff9f8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -154,7 +154,7 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, // first handle case of shared endpoints if (pi==ri) { - if (si==qi || cpl_orient(p, q, s)!=COPLANAR) return NO_INTERSECTION; + if (si==qi || cpl_orient(p, q, s)!=COLLINEAR) return NO_INTERSECTION; // can be s, q or nothing if (cln_order(p,s,q)) return POINT_S; @@ -166,7 +166,7 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, { if(pi==si) { - if (qi==ri || cpl_orient(p, q, r)!=COPLANAR) return NO_INTERSECTION; + if (qi==ri || cpl_orient(p, q, r)!=COLLINEAR) return NO_INTERSECTION; // can be r, q or nothing if (cln_order(p,r,q)) return POINT_R; @@ -178,7 +178,7 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, { if (qi==ri) { - if (pi==si || cpl_orient(p, q, s)!=COPLANAR) return NO_INTERSECTION; + if (pi==si || cpl_orient(p, q, s)!=COLLINEAR) return NO_INTERSECTION; // can be p, s or nothing if (cln_order(p,s,q)) return POINT_S; @@ -190,7 +190,7 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, { if (qi==si) { - if (pi==ri || cpl_orient(p, q, r)!=COPLANAR) return NO_INTERSECTION; + if (pi==ri || cpl_orient(p, q, r)!=COLLINEAR) return NO_INTERSECTION; // can be p, r or nothing if (cln_order(p,r,q)) return POINT_R; @@ -577,7 +577,7 @@ void generate_subtriangles(std::size_t ti, #endif typedef CGAL::Constrained_Delaunay_triangulation_2 CDT_2; - //typedef CGAL::Constrained_triangulation_plus_2 CDT; + //typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef CDT_2 CDT; const std::array& t = triangles[ti]; @@ -630,8 +630,11 @@ void generate_subtriangles(std::size_t ti, std::cout << "time computing segment intersections: " << timer1.time() << "\n"; std::cout << "time sorting intersection points: " << timer2.time() << "\n"; std::cout << "time for cdt of constraints: " << timer3.time() << "\n"; + std::cout << "time coplanar segment intersections: " << timer4.time() << "\n"; + std::cout << "time of do_coplanar_segments_intersect: " << timer5.time() << "\n"; + std::cout << "time of triplane intersection: " << timer6.time() << "\n"; } - CGAL::Real_timer timer1, timer2, timer3; + CGAL::Real_timer timer1, timer2, timer3, timer4, timer5, timer6; }; static Counter counter; @@ -713,11 +716,12 @@ void generate_subtriangles(std::size_t ti, continue; } - // TODO: use point ids to skip some test? + COUNTER_INSTRUCTION(counter.timer5.start();) Segment_inter_type seg_inter_type = do_coplanar_segments_intersect(segments[i].first, segments[i].second, segments[j].first, segments[j].second, points); + COUNTER_INSTRUCTION(counter.timer5.stop();) //~ Segment_inter_type_old seg_inter_type_old = @@ -756,9 +760,11 @@ void generate_subtriangles(std::size_t ti, case POINT_INTERSECTION: { // TODO: use version with no variant + COUNTER_INSTRUCTION(counter.timer6.start();) auto res = CGAL::intersection(supporting_plane(triangles[in_triangle_ids[i]]), supporting_plane(triangles[in_triangle_ids[j]]), supporting_plane(triangles[ti])); + COUNTER_INSTRUCTION(counter.timer6.stop();) if (const typename EK::Point_3* pt_ptr = boost::get(&(*res))) { @@ -770,6 +776,7 @@ void generate_subtriangles(std::size_t ti, else { COUNTER_INSTRUCTION(++counter.c2;) + COUNTER_INSTRUCTION(counter.timer4.start();) //TODO find better! typename EK::Segment_3 s1(points[segments[i].first], points[segments[i].second]); typename EK::Segment_3 s2(points[segments[j].first], points[segments[j].second]);// TODO: avoid this construction @@ -784,6 +791,7 @@ void generate_subtriangles(std::size_t ti, } else throw std::runtime_error("Unexpected case 1"); + COUNTER_INSTRUCTION(counter.timer4.stop();) //~ std::ofstream debug ("/tmp/triangles.polylines.txt"); //~ debug << "4 " << triangles[ti][0] << " " << triangles[ti][1] << " " << triangles[ti][2] << " " << triangles[ti][0] << "\n"; //~ debug << "4 " << triangles[in_triangle_ids[i]][0] << " " << triangles[in_triangle_ids[i]][1] << " " << triangles[in_triangle_ids[i]][2] << " " << triangles[in_triangle_ids[i]][0] << "\n"; @@ -877,24 +885,6 @@ void generate_subtriangles(std::size_t ti, points_on_segments[i].push_back(tgt_id); auto last = std::unique(points_on_segments[i].begin(), points_on_segments[i].end()); points_on_segments[i].erase(last, points_on_segments[i].end()); - - if (std::set(points_on_segments[i].begin(), points_on_segments[i].end()).size()!= points_on_segments[i].size()) - { - std::cout << "coord = " << coord << "\n"; - std::cout << "(src.x()==tgt.x()) " << (src.x()==tgt.x()) << "\n"; - std::cout << "(src.y()==tgt.y()) " << (src.y()==tgt.y()) << "\n"; - std::cout << "(src.z()==tgt.z()) " << (src.z()==tgt.z()) << "\n"; - - for (auto v : points_on_segments[i]) - std::cout << " " << v; - std::cout << std::endl; - for (auto v : points_on_segments[i]) - std::cout << points[v] << "\n"; - std::cout << std::endl; - throw std::runtime_error("unique failed!"); - } - - nb_new_segments+=points_on_segments[i].size()-2; //~ { @@ -1240,6 +1230,7 @@ void autorefine_soup_output(const PointRange& input_points, ); } } + // import refined triangles for (const std::array& t : new_triangles) { From ebb051f0b6e5bd89b17e4eb48f5c0cfdd2b6f1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Mar 2023 10:26:06 +0100 Subject: [PATCH 177/943] remove debug --- .../Polygon_mesh_processing/autorefinement.h | 96 ++----------------- 1 file changed, 10 insertions(+), 86 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 8cc1dd7ff9f8..f6b7bac57bb4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,9 +36,9 @@ #include -//#define TEST_RESOLVE_INTERSECTION +#define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS -//#define DEBUG_COUNTERS +#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH @@ -56,8 +56,6 @@ namespace Polygon_mesh_processing { #ifndef DOXYGEN_RUNNING namespace autorefine_impl { - -enum Segment_inter_type_old { NO_INTERSECTION_OLD=0, COPLANAR_SEGMENTS, POINT_INTERSECTION_OLD }; enum Segment_inter_type { NO_INTERSECTION=0, POINT_INTERSECTION, POINT_P, @@ -72,68 +70,6 @@ enum Segment_inter_type { NO_INTERSECTION=0, COPLANAR_SEGMENT_QR, }; - - -std::string print_enum(Segment_inter_type_old s) -{ - switch(s) - { - case NO_INTERSECTION_OLD: return "NO_INTERSECTION_OLD"; - case COPLANAR_SEGMENTS: return "COPLANAR_SEGMENTS"; - case POINT_INTERSECTION_OLD: return "POINT_INTERSECTION_OLD"; - } -} - -std::string print_enum(Segment_inter_type s) -{ - switch(s) - { - case NO_INTERSECTION: return "NO_INTERSECTION"; - case POINT_INTERSECTION: return "POINT_INTERSECTION"; - case POINT_P: return "POINT_P"; - case POINT_Q: return "POINT_Q"; - case POINT_R: return "POINT_R"; - case POINT_S: return "POINT_S"; - case COPLANAR_SEGMENT_PQ: return "COPLANAR_SEGMENT_PQ"; - case COPLANAR_SEGMENT_RS: return "COPLANAR_SEGMENT_RS"; - case COPLANAR_SEGMENT_PS: return "COPLANAR_SEGMENT_PS"; - case COPLANAR_SEGMENT_QS: return "COPLANAR_SEGMENT_QS"; - case COPLANAR_SEGMENT_PR: return "COPLANAR_SEGMENT_PR"; - case COPLANAR_SEGMENT_QR: return "COPLANAR_SEGMENT_QR"; - } -} - - -template -Segment_inter_type_old -do_coplanar_segments_intersect_old(const typename K::Point_3& s1_0, const typename K::Point_3& s1_1, - const typename K::Point_3& s2_0, const typename K::Point_3& s2_1, - const K& k = K()) -{ - // supporting_line intersects: points are coplanar - typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); - ::CGAL::Orientation or1 = cpl_orient(s1_0, s1_1, s2_0); - ::CGAL::Orientation or2 = cpl_orient(s1_0, s1_1, s2_1); - - if(or1 == COLLINEAR && or2 == COLLINEAR) - { - // segments are collinear - typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); - return (cln_order(s1_0, s2_0, s1_1) || - cln_order(s1_0, s2_1, s1_1) || - cln_order(s2_0, s1_0, s2_1)) ? COPLANAR_SEGMENTS : NO_INTERSECTION_OLD; - } - - if(or1 != or2) - { - or1 = cpl_orient(s2_0, s2_1, s1_0); - return (or1 == COLLINEAR || or1 != cpl_orient(s2_0, s2_1, s1_1)) ? POINT_INTERSECTION_OLD : NO_INTERSECTION_OLD; - } - - return NO_INTERSECTION_OLD; -} - - // test intersection in the interior of segment pq and rs with pq and rs being coplanar segments // note that for coplanar cases, we might report identical endpoints template @@ -723,18 +659,6 @@ void generate_subtriangles(std::size_t ti, points); COUNTER_INSTRUCTION(counter.timer5.stop();) - - //~ Segment_inter_type_old seg_inter_type_old = - //~ do_coplanar_segments_intersect_old(points[segments[i].first], points[segments[i].second], - //~ points[segments[j].first], points[segments[j].second]); - - - //~ std::cout << std::setprecision(17); - //~ std::cout << points[segments[i].first] << " " << points[segments[i].second] << "\n"; - //~ std::cout << points[segments[j].first] << " " << points[segments[j].second] << "\n"; - //~ std::cout << "OLD: " << print_enum(seg_inter_type_old) << "\n"; - //~ std::cout << "NEW: " << print_enum(seg_inter_type) << "\n"; - switch(seg_inter_type) { case POINT_P: @@ -947,14 +871,14 @@ void generate_subtriangles(std::size_t ti, segments.erase(last, segments.end()); - std::ofstream("/tmp/tri.xyz") << std::setprecision(17) << triangles[ti][0] << "\n" - << triangles[ti][1] << "\n" - << triangles[ti][2] << "\n"; - std::ofstream debug("/tmp/cst.polylines.txt"); - debug << std::setprecision(17); - for(auto s : segments) - debug << "2 " << points[s.first] << " " << points[s.second] << "\n"; - debug.close(); + //~ std::ofstream("/tmp/tri.xyz") << std::setprecision(17) << triangles[ti][0] << "\n" + //~ << triangles[ti][1] << "\n" + //~ << triangles[ti][2] << "\n"; + //~ std::ofstream debug("/tmp/cst.polylines.txt"); + //~ debug << std::setprecision(17); + //~ for(auto s : segments) + //~ debug << "2 " << points[s.first] << " " << points[s.second] << "\n"; + //~ debug.close(); COUNTER_INSTRUCTION(counter.timer3.start();) cdt.insert_constraints(points.begin(), points.end(), segments.begin(), segments.end()); From b31dc68889c704f0120e6286fb3bbbacdf19da48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Mar 2023 10:28:24 +0100 Subject: [PATCH 178/943] add another option coplanar orientation --- .../Polygon_mesh_processing/autorefinement.h | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index f6b7bac57bb4..7432f1f7d35e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -38,7 +38,7 @@ #define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS -#define DEBUG_COUNTERS +//#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH @@ -77,10 +77,20 @@ Segment_inter_type do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, std::size_t ri, std::size_t si, const std::vector& points, + const typename K::Vector_3& plane_normal, const K& k = K()) { typename K::Collinear_are_ordered_along_line_3 cln_order = k.collinear_are_ordered_along_line_3_object(); +#ifdef USE_PROJECTED_ORIENTATION_2_FOR_COPLANAR_ORIENTATION_TESTS + auto cpl_orient = + [&plane_normal](const typename K::Point_3& p, const typename K::Point_3& q, const typename K::Point_3& r) + { + return ::CGAL::orientation(q-p, r-p, plane_normal); + }; +#else typename K::Coplanar_orientation_3 cpl_orient=k.coplanar_orientation_3_object(); + CGAL_USE(plane_normal); +#endif const typename K::Point_3& p=points[pi]; const typename K::Point_3& q=points[qi]; @@ -638,7 +648,7 @@ void generate_subtriangles(std::size_t ti, std::vector segment_boxes(nbs); for (std::size_t i = 0; i(segments[i].first, segments[i].second, segments[j].first, segments[j].second, - points); + points, n); COUNTER_INSTRUCTION(counter.timer5.stop();) switch(seg_inter_type) @@ -767,9 +777,10 @@ void generate_subtriangles(std::size_t ti, points_on_segments[j].push_back(segments[i].second); break; } -// break; case NO_INTERSECTION: + { COUNTER_INSTRUCTION(++counter.c4;) + } } } COUNTER_INSTRUCTION(++counter.total;) @@ -859,7 +870,6 @@ void generate_subtriangles(std::size_t ti, } } } - //~ std::cout << "done\n"; #endif // TODO: sorted pair to be constructed when pushing_back From 38a92ead67a2b471b68ecfc23367b72b710739ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Mar 2023 14:59:08 +0100 Subject: [PATCH 179/943] make the message clearer --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 7432f1f7d35e..a54e4d299712 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,7 +36,7 @@ #include -#define TEST_RESOLVE_INTERSECTION +//#define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS //#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS @@ -1178,7 +1178,7 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef CGAL_DEBUG_PMP_AUTOREFINE CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles)) - throw std::runtime_error("invalid output"); + throw std::runtime_error("ERROR: invalid output, there is most probably a bug"); #endif #endif CGAL_PMP_AUTOREFINE_VERBOSE("done"); From 6139fc4119b0c80bd6285e4c1cf1c7c269b85721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Mar 2023 19:10:05 +0100 Subject: [PATCH 180/943] insert points even if no constraints --- .../Polygon_mesh_processing/autorefinement.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index a54e4d299712..734a47fcf562 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -465,7 +465,6 @@ void collect_intersections(const std::array& t1, { int j=(i+1)%3; test_edge(t1[i], t1[j], t2[0], t2[1], t2[2], ori[i], ori[j], inter_pts); - //~ if (inter_pts.size()>1) return; } // test edges of t2 vs t1 @@ -475,7 +474,6 @@ void collect_intersections(const std::array& t1, { int j=(i+1)%3; test_edge(t2[i], t2[j], t1[0], t1[1], t1[2], ori[i], ori[j], inter_pts); - //~ if (inter_pts.size()>1) return; } // because we don't handle intersection type and can have edge-edge edge-vertex duplicates @@ -483,9 +481,10 @@ void collect_intersections(const std::array& t1, auto last = std::unique(inter_pts.begin(), inter_pts.end()); inter_pts.erase(last, inter_pts.end()); - +#ifdef DEBUG_DEPTH for (auto p : inter_pts) if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); +#endif } ////////////////////////////////// @@ -507,8 +506,8 @@ void generate_subtriangles(std::size_t ti, const std::vector>& triangles, std::vector>& new_triangles) { - //~ std::cout << "generate_subtriangles()\n"; - std::cout << std::setprecision(17); + // std::cout << "generate_subtriangles()\n"; + // std::cout << std::setprecision(17); #ifdef USE_FIXED_PROJECTION_TRAITS typedef ::CGAL::internal::Projection_traits_3 P_traits; @@ -870,16 +869,16 @@ void generate_subtriangles(std::size_t ti, } } } -#endif // TODO: sorted pair to be constructed when pushing_back + // TODO: only needed in case of coplanar segments? for (std::pair& s : segments) if (s.second < s.first) std::swap(s.first,s.second); std::sort(segments.begin(), segments.end()); auto last = std::unique(segments.begin(), segments.end()); segments.erase(last, segments.end()); - +#endif //~ std::ofstream("/tmp/tri.xyz") << std::setprecision(17) << triangles[ti][0] << "\n" //~ << triangles[ti][1] << "\n" @@ -891,7 +890,10 @@ void generate_subtriangles(std::size_t ti, //~ debug.close(); COUNTER_INSTRUCTION(counter.timer3.start();) - cdt.insert_constraints(points.begin(), points.end(), segments.begin(), segments.end()); + if (segments.empty()) + cdt.insert(points.begin(), points.end()); + else + cdt.insert_constraints(points.begin(), points.end(), segments.begin(), segments.end()); COUNTER_INSTRUCTION(counter.timer3.stop();) #ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS From 85b3f7ed5732f203905086d630b7e35c521e7c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 27 Mar 2023 17:52:09 +0200 Subject: [PATCH 181/943] working around non-triangular polygons --- .../Polygon_mesh_processing/soup_autorefinement.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index 9ade96e3be84..a46fc6e711c7 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -7,6 +7,8 @@ #include #include +#include + #include typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; @@ -22,10 +24,13 @@ int main(int argc, char** argv) : std::string(argv[1]); std::vector input_points; - std::vector> input_triangles; + std::vector> input_triangles; CGAL::IO::read_polygon_soup(filename, input_points, input_triangles); PMP::repair_polygon_soup(input_points, input_triangles); + for (const auto& c : input_triangles) + if (c.size()!=3) return 0; // skipt for now + std::vector output_points; std::vector> output_triangles; PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles); From b06ed794e6e7ffa1f3112ec16ba556128be2ba79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 27 Mar 2023 17:53:36 +0200 Subject: [PATCH 182/943] add more debug --- .../Polygon_mesh_processing/autorefinement.h | 159 +++++++++++++++++- 1 file changed, 155 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 734a47fcf562..7cd083e83388 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -36,7 +36,7 @@ #include -//#define TEST_RESOLVE_INTERSECTION +#define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS //#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS @@ -227,6 +227,69 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, ////////////////////////////////// ////////////////////////////////// +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION +template +void old_intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p, + const typename Kernel::Point_3& q, + const typename Kernel::Point_3& r, + const Kernel& k, + std::list& inter_pts) +{ + typedef typename std::list::iterator Iterator; + + if(inter_pts.empty()) + return; + + typename Kernel::Coplanar_orientation_3 orient = k.coplanar_orientation_3_object(); + typename Kernel::Construct_line_3 line = k.construct_line_3_object(); + + //orient(p,q,r,r) is POSITIVE + std::map orientations; + for (Iterator it=inter_pts.begin();it!=inter_pts.end();++it) + orientations[ &(*it) ]=orient(p,q,r,*it); + + CGAL_kernel_assertion_code(int pt_added = 0;) + + const typename Kernel::Point_3* prev = &(*boost::prior(inter_pts.end())); + Iterator stop = inter_pts.size() > 2 ? inter_pts.end() : boost::prior(inter_pts.end()); + for(Iterator it=inter_pts.begin(); it!=stop; ++it) + { + const typename Kernel::Point_3& curr = *it; + Orientation or_prev = orientations[prev], + or_curr = orientations[&curr]; + + if((or_prev == POSITIVE && or_curr == NEGATIVE) || + (or_prev == NEGATIVE && or_curr == POSITIVE)) + { + typename Intersection_traits::result_type + obj = ::CGAL::Intersections::internal::intersection(line(p,q), line(*prev,curr), k); + + // assert "not empty" + CGAL_kernel_assertion(bool(obj)); + + const typename Kernel::Point_3* inter = ::CGAL::Intersections::internal::intersect_get(obj); + CGAL_kernel_assertion(inter != nullptr); + + prev = &(*inter_pts.insert(it,*inter)); + orientations[prev] = COLLINEAR; + CGAL_kernel_assertion_code(++pt_added;) + } + + prev = &(*it); + } + + CGAL_kernel_assertion(pt_added<3); + Iterator it = inter_pts.begin(); + while(it!=inter_pts.end()) + { + if(orientations[&(*it)] == NEGATIVE) + inter_pts.erase(it++); + else + ++it; + } +} +#endif + // imported from Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h template void coplanar_intersections(const std::array& t1, @@ -242,6 +305,19 @@ void coplanar_intersections(const std::array& t1, l_inter_pts.push_back(Intersections::internal::Point_on_triangle(-1,2)); #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::list old_l_inter_pts; + old_l_inter_pts.push_back(p2); + old_l_inter_pts.push_back(q2); + old_l_inter_pts.push_back(r2); + + + auto enum_to_string = [](CGAL::Orientation o) + { + if (o==COLLINEAR) return std::string("COLLINEAR"); + if (o==POSITIVE) return std::string("POSITIVE"); + return std::string("NEGATIVE"); + }; + auto to_string = [](const auto& t) { std::stringstream sstr; @@ -256,6 +332,32 @@ void coplanar_intersections(const std::array& t1, std::cout << "intersection_coplanar_triangles\n"; std::ofstream("/tmp/t1.polylines.txt") << to_string(t1) << "\n"; std::ofstream("/tmp/t2.polylines.txt") << to_string(t2) << "\n"; + + std::cout << "Position of vertices of t1: "; + std::cout << enum_to_string( coplanar_orientation(p2,q2,r2,p1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(p2,q2,r2,q1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(p2,q2,r2,r1)) << "\n"; + std::cout << " "; + std::cout << enum_to_string( coplanar_orientation(q2,r2,p2,p1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(q2,r2,p2,q1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(q2,r2,p2,r1)) << "\n"; + std::cout << " "; + std::cout << enum_to_string( coplanar_orientation(r2,p2,q2,p1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(r2,p2,q2,q1)) << " - "; + std::cout << enum_to_string( coplanar_orientation(r2,p2,q2,r1)) << "\n"; + std::cout << "Position of vertices of t2: "; + std::cout << enum_to_string( coplanar_orientation(p1,q1,r1,p2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(p1,q1,r1,q2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(p1,q1,r1,r2)) << "\n"; + std::cout << " "; + std::cout << enum_to_string( coplanar_orientation(q1,r1,p1,p2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(q1,r1,p1,q2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(q1,r1,p1,r2)) << "\n"; + std::cout << " "; + std::cout << enum_to_string( coplanar_orientation(r1,p1,q1,p2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(r1,p1,q1,q2)) << " - "; + std::cout << enum_to_string( coplanar_orientation(r1,p1,q1,r2)) << "\n"; + auto print_points = [&]() { for(auto p : l_inter_pts) std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) "; std::cout <<"\n"; @@ -270,31 +372,76 @@ void coplanar_intersections(const std::array& t1, #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); + old_intersection_coplanar_triangles_cutoff(p1,q1,r1,k,old_l_inter_pts); + CGAL_assertion(l_inter_pts.size()==old_l_inter_pts.size()); + for (std::size_t i=0; ipoint(p1,q1,r1,p2,q2,r2,k)) + { + std::cout <<"ERROR with point #" << i << "\n"; + throw std::runtime_error("invalid output 0"); + } + } #endif intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,l_inter_pts); //line q1r1 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); + old_intersection_coplanar_triangles_cutoff(q1,r1,p1,k,old_l_inter_pts); + CGAL_assertion(l_inter_pts.size()==old_l_inter_pts.size()); + for (std::size_t i=0; ipoint(p1,q1,r1,p2,q2,r2,k)) + { + std::cout <<"ERROR with point #" << i << "\n"; + throw std::runtime_error("invalid output 1"); + } + } #endif intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,l_inter_pts); //line r1p1 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); + old_intersection_coplanar_triangles_cutoff(r1,p1,q1,k,old_l_inter_pts); + CGAL_assertion(l_inter_pts.size()==old_l_inter_pts.size()); + for (std::size_t i=0; ipoint(p1,q1,r1,p2,q2,r2,k)) + { + std::cout <<"ERROR with point #" << i << "\n"; + throw std::runtime_error("invalid output 2"); + } + } +#endif + +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::size_t start=inter_pts.size(); #endif for (const Intersections::internal::Point_on_triangle& pot : l_inter_pts) inter_pts.push_back( pot.point(p1,q1,r1,p2,q2,r2,k) ); #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + for (std::size_t i=0; i> i; + // std::cout <<"check!\n"; + // int i; + // std::cin >> i; #endif } @@ -1022,6 +1169,10 @@ void autorefine_soup_output(const PointRange& input_points, std::vector inter_pts; autorefine_impl::collect_intersections(t1, t2, inter_pts); + CGAL_assertion( + CGAL::do_intersect(typename EK::Triangle_3(t1[0], t1[1], t1[2]), typename EK::Triangle_3(t2[0], t2[1], t2[2])) + != inter_pts.empty()); + if (!inter_pts.empty()) { std::size_t nbi = inter_pts.size(); From bd967e7cec9885afb9cee799ae6b39a16abfa609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 27 Mar 2023 17:53:50 +0200 Subject: [PATCH 183/943] avoid duplicated tangency point --- .../Polygon_mesh_processing/autorefinement.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 7cd083e83388..c90ba515271c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -778,7 +778,13 @@ void generate_subtriangles(std::size_t ti, std::map point_id_map; for (std::size_t pid=0; pid(points.begin(), points.end()).size()); + CGAL_assertion(points.size()==point_id_map.size()); } // TODO: sorted pair to be constructed when pushing_back @@ -1217,6 +1226,14 @@ void autorefine_soup_output(const PointRange& input_points, return insert_res.first->second; }; + if (!all_points[ti].empty()) + { + std::vector tmp; + tmp.swap(all_points[ti]); + for (const typename EK::Point_3& pt : tmp) + get_point_id(pt); + } + std::size_t nbs = all_segments[ti].size(); std::vector> filtered_segments; std::vector filtered_in_triangle_ids; From 2b74b8f10d561a335e159857e14f109a92aeed50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 28 Mar 2023 14:35:40 +0200 Subject: [PATCH 184/943] fix some bugs --- .../Triangle_3_Triangle_3_intersection.h | 98 ++++++++++++++----- 1 file changed, 76 insertions(+), 22 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index ac376f443506..35aa4f8f0a53 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -86,6 +87,7 @@ struct Point_on_triangle // (-1, id) point on t2 // (id1, id2) intersection of edges std::pair t1_t2_ids; + boost::container::flat_set extra_t1; typename Kernel::FT alpha; Orientation @@ -161,7 +163,7 @@ intersection(const Point_on_triangle& p, #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " calling intersection: "; std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) -"; - std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1 << "\n"; + std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1; #endif typedef Point_on_triangle Pot; switch(p.id1()) @@ -172,17 +174,26 @@ intersection(const Point_on_triangle& p, { case -1: // (-1, ip2) - (-1, iq2) { + CGAL_assertion((p.id2()+1)%3 == q.id2() || (q.id2()+1)%3 == p.id2()); +// CGAL_assertion(p.extra_t1.empty() && q.extra_t1.empty()); // TMP to see if it's worth implementing special case +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 1\n"; +#endif typename Kernel::FT alpha = coplanar_segment_segment_alpha_intersection(p1, q1, Pot::point_from_id(p2, q2, r2, p.id2()), Pot::point_from_id(p2, q2, r2, q.id2()), k); - return Point_on_triangle(edge_id_t1, p.id2(), alpha); // intersection with an original edge of t2 + int id2 = (p.id2()+1)%3 == q.id2() ? p.id2() : q.id2(); + return Point_on_triangle(edge_id_t1, id2, alpha); // intersection with an original edge of t2 } default: if (q.id2()!=-1) // (-1, ip2) - (iq1, iq2) { if (p.id2() == q.id2() || p.id2() == (q.id2()+1)%3) { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 2\n"; +#endif // points are on the same edge of t2 --> we shorten an already cut edge typename Kernel::FT alpha = coplanar_segment_segment_alpha_intersection(p1, q1, @@ -191,13 +202,23 @@ intersection(const Point_on_triangle& p, return Point_on_triangle(edge_id_t1, q.id2(), alpha); } - // point of t1 - return Point_on_triangle((q.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 3\n"; +#endif + // point of t1: look for an edge of t1 containing both points + CGAL_assertion( p.extra_t1.count(q.id1())!=0 || p.extra_t1.count(3-q.id1()-edge_id_t1)!=0 ); + int eid1 = p.extra_t1.count(q.id1())!=0 ? q.id1() : 3-q.id1()-edge_id_t1; + return Point_on_triangle((eid1+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 } // (-1, ip2) - (iq1, -1) //vertex of t1, special case t1 edge passed thru a vertex of t2 CGAL_assertion(edge_id_t1 == 2); - return Point_on_triangle(2, -1); // point on t1 has to be created from the intersection of edge 0 and edge 1 +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 4\n"; +#endif + CGAL_assertion(q.id1()==1); + CGAL_assertion(!p.extra_t1.empty()); + return Point_on_triangle(p.extra_t1.count(0)==1?0:2,-1); } } default: @@ -210,13 +231,24 @@ intersection(const Point_on_triangle& p, { case -1: // (ip1, -1) - (-1, iq2) //vertex of t1, special case t1 edge passed thru a vertex of t2 - return Point_on_triangle(0, -1); +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 5\n"; +#endif + CGAL_assertion(edge_id_t1 == 2); + CGAL_assertion(p.id1()==1); + CGAL_assertion(!q.extra_t1.empty()); + return Point_on_triangle(q.extra_t1.count(0)==1?0:2,-1); default: { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 6\n"; +#endif CGAL_assertion(q.id2()!=-1); // (ip1, -1) - (iq2, -1) //(ip1,-1), (iq1, iq2) - CGAL_assertion(edge_id_t1==2 && p.id1()==1); - return Point_on_triangle(q.id1()==1?2:0,-1); // vertex of t1 + CGAL_assertion(edge_id_t1==2); + // p and q are on the same edge of t1 + CGAL_assertion(p.id1()==q.id1() || p.id1()==(q.id1()+1)%3); + return Point_on_triangle((q.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); } } } @@ -228,6 +260,9 @@ intersection(const Point_on_triangle& p, { if (q.id2() == p.id2() || q.id2() == (p.id2()+1)%3) { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 7\n"; +#endif // points are on the same edge of t2 --> we shorten an already cut edge typename Kernel::FT alpha = coplanar_segment_segment_alpha_intersection(p1, q1, @@ -236,8 +271,14 @@ intersection(const Point_on_triangle& p, return Point_on_triangle(edge_id_t1, p.id2(), alpha); } +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 8\n"; +#endif // point of t1 - return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); + //std::cout << "q.extra_t1: "; for(int qet1 : q.extra_t1) std::cout << " " << qet1; std::cout << "\n"; + CGAL_assertion( q.extra_t1.count(p.id1())!=0 || q.extra_t1.count(3-p.id1()-edge_id_t1)!=0 ); + int eid1 = q.extra_t1.count(p.id1())!=0 ? p.id1() : 3-p.id1()-edge_id_t1; + return Point_on_triangle((eid1+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 } default: { @@ -245,21 +286,30 @@ intersection(const Point_on_triangle& p, { case -1: // (ip1, ip2) - (iq1, -1) { - CGAL_assertion(edge_id_t1==2 && q.id1()==1); - return Point_on_triangle(p.id1()==1?2:0); // vertex of t1 + // p and q are on the same edge of t1 + CGAL_assertion(q.id1()==p.id1() || q.id1()==(p.id1()+1)%3); +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 9\n"; +#endif + return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); } default: // (ip1, ip2) - (iq1, iq2) { - CGAL_assertion(p.id1()==q.id1() || p.id2()==q.id2() ); - - if (p.id1()==q.id1()) - return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 - - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, q.id2()), - Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); - return Point_on_triangle(edge_id_t1, q.id2(), alpha); + if (p.id2()==q.id2()) + { +#ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION + std::cout << " -- case 10\n"; +#endif + typename Kernel::FT alpha = + coplanar_segment_segment_alpha_intersection(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); + return Point_on_triangle(edge_id_t1, q.id2(), alpha); + } + // we are intersecting an edge of t1 + CGAL_assertion(p.id1()==q.id1() || edge_id_t1==2); + int eid1 = p.id1()==q.id1() ? p.id1() : 1; + return Point_on_triangle((eid1+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 } } } @@ -293,8 +343,12 @@ void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p1, //orient(p1,q1,r1,r1) is POSITIVE std::map*,Orientation> orientations; // TODO skip map - for (const Point_on_triangle& pot : inter_pts) + for (Point_on_triangle& pot : inter_pts) + { orientations[ &pot ]=pot.orientation(p1,q1,r1,edge_id,p2,q2,r2,k); + if (pot.id1()==-1 && orientations[ &pot ]==COLLINEAR) + pot.extra_t1.insert(edge_id); + } #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " Orientations:"; From e29d52421e624a416b741e3416d75bc65ee1e101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 28 Mar 2023 16:43:35 +0200 Subject: [PATCH 185/943] fix doc --- .../Polygon_mesh_processing/autorefinement.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index c90ba515271c..c7e067916d59 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1360,19 +1360,18 @@ void autorefine_soup_output(const PointRange& input_points, * refines a triangle mesh so that no triangles intersects in their interior. * * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * - * \cgalParamNBegin{geom_traits} - * \cgalParamDescription{an instance of a geometric traits class} - * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} - * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} - * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} - * \cgalParamNEnd - * * \cgalNamedParamsBegin + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `tm`} * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` @@ -1380,7 +1379,8 @@ void autorefine_soup_output(const PointRange& input_points, * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` * must be available in `TriangleMesh`.} - * \cgalParamNEnd + * \cgalParamNEnd + * \cgalNamedParamsEnd * */ template Date: Wed, 29 Mar 2023 16:38:34 +0200 Subject: [PATCH 186/943] triangulate soup --- .../examples/Polygon_mesh_processing/soup_autorefinement.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index a46fc6e711c7..d955734853bf 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -27,9 +27,7 @@ int main(int argc, char** argv) std::vector> input_triangles; CGAL::IO::read_polygon_soup(filename, input_points, input_triangles); PMP::repair_polygon_soup(input_points, input_triangles); - - for (const auto& c : input_triangles) - if (c.size()!=3) return 0; // skipt for now + PMP::triangulate_polygons(input_points, input_triangles); std::vector output_points; std::vector> output_triangles; From 2a791d2625c885b96f6d12b890d6b482918b48d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 31 Mar 2023 10:24:42 +0200 Subject: [PATCH 187/943] add optional progress display --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index c7e067916d59..4f56b8a0d817 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -25,6 +25,10 @@ #include #include +#ifdef USE_PROGRESS_DISPLAY +#include +#endif + // output #include #include @@ -1260,6 +1264,11 @@ void autorefine_soup_output(const PointRange& input_points, CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles std::vector> new_triangles; + +#ifdef USE_PROGRESS_DISPLAY + boost::timer::progress_display pd(triangles.size()); +#endif + for(std::size_t ti=0; ti Date: Fri, 31 Mar 2023 10:26:21 +0200 Subject: [PATCH 188/943] repair soup before orient + to mesh --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 4f56b8a0d817..e38f64ff3010 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -1417,6 +1418,7 @@ autorefine( TriangleMesh& tm, out_soup_points, out_soup_triangles); clear(tm); + repair_polygon_soup(out_soup_points, out_soup_triangles); orient_polygon_soup(out_soup_points, out_soup_triangles); polygon_soup_to_polygon_mesh(out_soup_points, out_soup_triangles, tm); } From 55f8bcb12202de6fb6fe70ee3096d979b8f95dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Apr 2023 18:24:59 +0200 Subject: [PATCH 189/943] fix assertion --- .../internal/Triangle_3_Triangle_3_intersection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 35aa4f8f0a53..4cc5f9be5600 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -372,7 +372,7 @@ void intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& p1, prev = inter_pts.insert(it,new_pt); orientations[&(*prev)] = COLLINEAR; - CGAL_assertion_code(++pt_added); + CGAL_kernel_assertion_code(++pt_added); } prev = it; From cef23a90456ece3a592b33fcdf17317726759bb3 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 8 Apr 2023 10:24:47 +0200 Subject: [PATCH 190/943] moving captions out of the figure --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 49614be67c91..70f9cf00c0e7 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -921,10 +921,12 @@ distribution of values and "diffuses" the extreme values of curvatures across th \cgalFigureAnchor{icc_diff_radius}
- +
\cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature distribution on a bear mesh with different values for the ball radius parameter +The mean curvature distribution on a bear mesh with different values for the ball +radius parameter. R = 0 (a), R = 0.025 (b), R = 0.05 (c), R = 0.16 (d). Note that +the max edge length is 0.031 and the size of bounding box of the mesh is 1 x 0.7 x 0.8. \cgalFigureCaptionEnd \ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate From 8393933630960d1b23198aac9bc37b6ce38ea0f0 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sat, 8 Apr 2023 10:27:13 +0200 Subject: [PATCH 191/943] minor grammer fixes --- .../Polygon_mesh_processing.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 70f9cf00c0e7..987b88b0a217 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -905,8 +905,8 @@ These computations are performed using (on all vertices of the mesh): - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` -Where it is recommended to use the last function for computing multiple curvatures (example: mean and Gaussian) -as the implementation performs the shared computations only once, making it more efficient. +Where it is recommended to use the last function for computing multiple curvatures (for example: mean and +Gaussian) as the implementation performs the shared computations only once, making it more efficient. Similarly, we can use the following functions to compute curvatures on a specific vertex: - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_one_vertex()` @@ -924,9 +924,9 @@ distribution of values and "diffuses" the extreme values of curvatures across th \cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature distribution on a bear mesh with different values for the ball -radius parameter. R = 0 (a), R = 0.025 (b), R = 0.05 (c), R = 0.16 (d). Note that -the max edge length is 0.031 and the size of bounding box of the mesh is 1 x 0.7 x 0.8. +The mean curvature distribution on a bear mesh with different values for the ball radius +parameter. R = 0 (a), R = 0.025 (b), R = 0.05 (c), R = 0.16 (d). Note that the max +edge length is 0.031 and the size of the bounding box of the mesh is 1 x 0.7 x 0.8. \cgalFigureCaptionEnd \ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate From f8a9862abfd91f33622830b9142e3137c57842b6 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:14:37 +0200 Subject: [PATCH 192/943] incomplete update to user man doc --- .../Polygon_mesh_processing.txt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 987b88b0a217..b454706b9723 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -892,10 +892,16 @@ not provide storage for the normals. This package provides methods to compute curvatures on polygonal meshes based on Interpolated Corrected Curvatures on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, Gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, quad meshes, -and meshes with n-gon faces. The algorithms used prove to work well in general. Also, on meshes +and meshes with n-gon faces (for n-gons, the centroid must be inside the n-gon face). +The algorithms used prove to work well in general. Also, on meshes with noise on vertex positions, they give accurate results, on the condition that the correct vertex normals are provided. +\subsection ICCBackground Brief Background + + +\subsection ICCAPI API + The implementation is generic in terms of mesh data structure. It can be used on `Surface_mesh`, `Polyhedron_3` and other polygonal mesh structures based on the concept `FaceGraph`. @@ -914,6 +920,9 @@ Similarly, we can use the following functions to compute curvatures on a specifi - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` +\subsection ICCResults Results + +**To be updated** \cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on the named parameter `ball_radius`, which can be set to a value > 0 to get a smoother @@ -921,12 +930,12 @@ distribution of values and "diffuses" the extreme values of curvatures across th \cgalFigureAnchor{icc_diff_radius}
- +
\cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature distribution on a bear mesh with different values for the ball radius -parameter. R = 0 (a), R = 0.025 (b), R = 0.05 (c), R = 0.16 (d). Note that the max -edge length is 0.031 and the size of the bounding box of the mesh is 1 x 0.7 x 0.8. +The mean curvature on a mesh with different values for the ball radius +parameter: (a) R = 0, (b) R = 0.025, (c) R = 0.05, (d) R = 0.16. Note that the max +edge length is 0.031 and the size of the bounding box of the mesh is 1 x .7 x .8. \cgalFigureCaptionEnd \ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate From 261eac81e9847bdc2b313ac19ae7a00edeaa9405 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Tue, 18 Apr 2023 14:30:37 +0200 Subject: [PATCH 193/943] user manual - incomplete --- .../Polygon_mesh_processing.txt | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index b454706b9723..ead5b5a8c80c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -889,16 +889,57 @@ not provide storage for the normals. **************************************** \section PMPICC Computing Curvatures -This package provides methods to compute curvatures on polygonal meshes based on Interpolated Corrected Curvatures -on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, Gaussian curvature, -principal curvatures and directions. These can be computed on triangle meshes, quad meshes, -and meshes with n-gon faces (for n-gons, the centroid must be inside the n-gon face). -The algorithms used prove to work well in general. Also, on meshes -with noise on vertex positions, they give accurate results, on the condition that the -correct vertex normals are provided. +This package provides methods to compute curvatures on polygonal meshes based on Interpolated +Corrected Curvatures on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, +Gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, +quad meshes, and meshes with n-gon faces (for n-gons, the centroid must be inside the n-gon face). +The algorithms used prove to work well in general. Also, on meshes with noise on vertex positions, +they give accurate results, on the condition that the correct vertex normals are provided. \subsection ICCBackground Brief Background +Curvatures are quantities that describe the local geometry of a surface. They are important in many +geometry processing applications. since surfaces are 2-dimensional objects (embedded in 3D), they can bend +in 2 independent directions. These directions are called principal directions, and the amount of bending +in each direction is called the principal curvature: \f$ k_1 \f$ and \f$ k_2 \f$. Curvature is usually +expressed as scalar quantities like the mean curvature \f$ H \f$ and the Gaussian curvature \f$ K \f$ +which are defined in terms of the principal curvatures. + +The algorithms are based on the following paper \cgalCite{lachaud2020}. It introduces a new way to +compute curvatures on polygonal meshes. The main idea is based on decoupling the normal information from +the position information, which is useful for dealing with digital surfaces, or meshes with noise on +vertex positions. To compute the curvatures, we first compute interpolated curvature measures for each face +as described below. For a triangle \f$ \tau_{ijk} \f$, with vertices \a i, \a j, \a k: + +\f[ + \begin{align*} + \mu^{(0)}(\tau_{ijk}) = &\frac{1}{2} \langle \bar{\mathbf{u}} \mid (\mathbf{x}_j - \mathbf{x}_i) \times (\mathbf{x}_k - \mathbf{x}_i) \rangle, \\ + \mu^{(1)}(\tau_{ijk}) = &\frac{1}{2} \langle \bar{\mathbf{u}} \mid (\mathbf{u}_k - \mathbf{u}_j) \times \mathbf{x}_i + (\mathbf{u}_i - \mathbf{u}_k) \times \mathbf{x}_j + (\mathbf{u}_j - \mathbf{u}_i) \times \mathbf{x}_k \rangle, \\ + \mu^{(2)}(\tau_{ijk}) = &\frac{1}{2} \langle \mathbf{u}_i \mid \mathbf{u}_j \times \mathbf{u}_k \rangle, \\ + \mu^{\mathbf{X},\mathbf{Y}}(\tau_{ijk}) = & \frac{1}{2} \big\langle \bar{\mathbf{u}} \big| \langle \mathbf{Y} | \mathbf{u}_k -\mathbf{u}_i \rangle \mathbf{X} \times (\mathbf{x}_j - \mathbf{x}_i) \big\rangle + -\frac{1}{2} \big\langle \bar{\mathbf{u}} \big| \langle \mathbf{Y} | \mathbf{u}_j -\mathbf{u}_i \rangle \mathbf{X} \times (\mathbf{x}_k - \mathbf{x}_i) \big\rangle, + \end{align*} +\f] +where \f$ \langle \cdot \mid \cdot \rangle \f$ denotes the usual scalar product, +\f$ \bar{\mathbf{u}}=\frac{1}{3}( \mathbf{u}_i + \mathbf{u}_j + \mathbf{u}_k )\f$. + +The first measure \f$ \mu^{(0)} \f$ is the area measure of the triangle, and the second and third measures +\f$ \mu^{(1)} \f$ and \f$ \mu^{(2)} \f$ are the mean and Gaussian corrected curvature measures of the triangle. +The last measure \f$ \mu^{\mathbf{X},\mathbf{Y}} \f$ is the anisotropic corrected curvature measure of the triangle. +The anisotropic measure is later used to compute the principal curvatures and directions through an eigenvalue +solver. + +The interpolated curvature measures are then computed for each vertex \f$ v \f$ as the sum of +the curvature measures of the faces in a ball around \f$ v \f$ weighted by the inclusion ratio of the +triangle in the ball. if the ball radius is not specified, the sum is instead over the incident faces +of \f$ v \f$. + +To get the final curvature value for a vertex \f$ v \f$, the respective interpolated curvature measure +is divided by the interpolated area measure. + +\f[ +\mu^{(k)}( B ) = \sum_{\tau : \text{triangle} } \mu^{(k)}( \tau ) \frac{\mathrm{Area}( \tau \cap B )}{\mathrm{Area}(\tau)}. +\f] \subsection ICCAPI API @@ -920,7 +961,7 @@ Similarly, we can use the following functions to compute curvatures on a specifi - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions_one_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures_one_vertex()` -\subsection ICCResults Results +\subsection ICCResults Results & Performance **To be updated** From ef465063783b4646f5a90753f4b1f3375221134b Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 18 Apr 2023 16:46:40 +0100 Subject: [PATCH 194/943] Add cmake/modules files --- .../CGAL_Qt6_moc_and_resource_files.cmake | 25 ++++ .../CGAL_SetupCGAL_Qt6Dependencies.cmake | 124 ++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake create mode 100644 Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake diff --git a/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake b/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake new file mode 100644 index 000000000000..21b32bc2e9e6 --- /dev/null +++ b/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake @@ -0,0 +1,25 @@ +if(CGAL_Qt6_moc_and_resource_files_included) + return() +endif() +set(CGAL_Qt6_moc_and_resource_files_included TRUE) +# qrc files (resources files, that contain icons, at least) +if(EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc) + qt5_add_resources (_CGAL_Qt6_RESOURCE_FILES_private + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Input.qrc + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/File.qrc + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Triangulation_2.qrc) +else() + # Installed version, in CMake resources + file ( COPY + ${CGAL_MODULES_DIR}/demo/resources + ${CGAL_MODULES_DIR}/demo/icons + DESTINATION ${CMAKE_BINARY_DIR}) + qt5_add_resources (_CGAL_Qt6_RESOURCE_FILES_private + ${CMAKE_BINARY_DIR}/resources/CGAL.qrc + ${CMAKE_BINARY_DIR}/icons/Input.qrc + ${CMAKE_BINARY_DIR}/icons/File.qrc + ${CMAKE_BINARY_DIR}/icons/Triangulation_2.qrc) +endif() + +qt5_wrap_ui(_CGAL_Qt6_UI_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/ImageInterface.ui) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake new file mode 100644 index 000000000000..161e9673345c --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake @@ -0,0 +1,124 @@ +#.rst: +# CGAL_SetupCGAL_Qt6Dependencies +# ------------------------------ +# +# The module searches for the dependencies of the `CGAL_Qt6` library: +# - the `Qt6` libraries +# +# by calling +# +# .. code-block:: cmake +# +# find_package(Qt6 QUIET COMPONENTS OpenGL Svg) +# +# and defines the variable :variable:`CGAL_Qt6_FOUND` and the function +# :command:`CGAL_setup_CGAL_Qt6_dependencies`. +# + +if(CGAL_SetupCGAL_Qt6Dependencies_included) + return() +endif() +set(CGAL_SetupCGAL_Qt6Dependencies_included TRUE) + +#.rst: +# Used Modules +# ^^^^^^^^^^^^ +# - :module:`Qt6Config` +find_package(Qt6 QUIET COMPONENTS OpenGL Svg) + +set(CGAL_Qt6_MISSING_DEPS "") +if(NOT Qt6OpenGL_FOUND) + set(CGAL_Qt6_MISSING_DEPS "Qt6OpenGL") +endif() +if(NOT Qt6Svg_FOUND) + set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} Qt6Svg") +endif() +if(NOT Qt6_FOUND) + set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} Qt6") +endif() +if(NOT EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsItem.h) + set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} headers") +endif() + +#.rst: +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# .. variable:: CGAL_Qt6_FOUND +# +# Set to `TRUE` if the dependencies of `CGAL_Qt6` were found. +# +if(NOT CGAL_Qt6_MISSING_DEPS) + set(CGAL_Qt6_FOUND TRUE) + set_property(GLOBAL PROPERTY CGAL_Qt6_FOUND TRUE) + + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Qt6_moc_and_resource_files.cmake) + + if(NOT TARGET CGAL_Qt6_moc_and_resources) + add_library(CGAL_Qt6_moc_and_resources STATIC + ${_CGAL_Qt6_MOC_FILES_private} + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsViewNavigation.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/DemosMainWindow.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsItem.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsViewInput.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/camera.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/frame.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/keyFrameInterpolator.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/manipulatedCameraFrame.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/manipulatedFrame.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/qglviewer.h + ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/image_interface.h + ${_CGAL_Qt6_UI_FILES} + ${_CGAL_Qt6_RESOURCE_FILES_private}) + target_include_directories( CGAL_Qt6_moc_and_resources PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(CGAL_Qt6_moc_and_resources PROPERTIES + POSITION_INDEPENDENT_CODE TRUE + EXCLUDE_FROM_ALL TRUE + AUTOMOC TRUE) + target_link_libraries(CGAL_Qt6_moc_and_resources CGAL::CGAL Qt6::Widgets Qt6::OpenGL Qt6::Svg ) + + add_library(CGAL::CGAL_Qt6_moc_and_resources ALIAS CGAL_Qt6_moc_and_resources) + add_library(CGAL::Qt6_moc_and_resources ALIAS CGAL_Qt6_moc_and_resources) + endif() + +endif() + +#get_property(QT_UIC_EXECUTABLE TARGET Qt6::uic PROPERTY LOCATION) +#message( STATUS "Qt6Core include: ${Qt6Core_INCLUDE_DIRS}" ) +#message( STATUS "Qt6 libraries: ${Qt6Core_LIBRARIES} ${Qt6Gui_LIBRARIES} ${Qt6Svg_LIBRARIES} ${Qt6OpenGL_LIBRARIES}" ) +#message( STATUS "Qt6Core definitions: ${Qt6Core_DEFINITIONS}" ) +#message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) +#message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) + +#.rst: +# +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: CGAL_setup_CGAL_Qt6_dependencies +# +# Link the target with the dependencies of `CGAL_Qt6`:: +# +# CGAL_setup_CGAL_Qt6_dependencies( target ) +# +# The dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword. +# +function(CGAL_setup_CGAL_Qt6_dependencies target) + + if($ENV{CGAL_FAKE_PUBLIC_RELEASE}) + target_compile_definitions( ${target} INTERFACE CGAL_FAKE_PUBLIC_RELEASE=1 ) + endif() + target_link_libraries( ${target} INTERFACE CGAL::CGAL) + target_link_libraries( ${target} INTERFACE CGAL::Qt6_moc_and_resources) + target_link_libraries( ${target} INTERFACE Qt6::OpenGL Qt6::Svg ) + + # Remove -Wdeprecated-copy, for g++ >= 9.0, because Qt6, as of + # version 5.12, has a lot of [-Wdeprecated-copy] warnings. + if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" + AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9" ) + target_compile_options( ${target} INTERFACE "-Wno-deprecated-copy" "-Wno-cast-function-type" ) + endif() + +endfunction() From c6ce5fb1208bb48e173a5bd81116f28c13c10a4e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 12:19:38 +0100 Subject: [PATCH 195/943] Switch to QT6 for the GraphicsView demos --- .../demo/Alpha_shapes_2/CMakeLists.txt | 20 +++++------ .../demo/Apollonius_graph_2/CMakeLists.txt | 18 +++++----- .../demo/Bounding_volumes/CMakeLists.txt | 18 +++++----- .../demo/Circular_kernel_2/CMakeLists.txt | 18 +++++----- GraphicsView/demo/Generator/CMakeLists.txt | 16 ++++----- GraphicsView/demo/GraphicsView/CMakeLists.txt | 12 +++---- .../demo/L1_Voronoi_diagram_2/CMakeLists.txt | 18 +++++----- .../demo/Largest_empty_rect_2/CMakeLists.txt | 16 ++++----- .../Periodic_2_triangulation_2/CMakeLists.txt | 18 +++++----- GraphicsView/demo/Polygon/CMakeLists.txt | 18 +++++----- .../Segment_Delaunay_graph_2/CMakeLists.txt | 22 +++++------- .../CMakeLists.txt | 16 ++++----- .../demo/Snap_rounding_2/CMakeLists.txt | 18 +++++----- .../demo/Spatial_searching_2/CMakeLists.txt | 18 +++++----- .../demo/Stream_lines_2/CMakeLists.txt | 20 +++++------ .../demo/Triangulation_2/CMakeLists.txt | 34 +++++++++--------- .../include/CGAL/Qt/DemosMainWindow_impl.h | 15 ++++---- GraphicsView/include/CGAL/Qt/qglviewer.h | 4 +-- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 2 +- Installation/CMakeLists.txt | 36 +++++++++---------- .../cmake/modules/CGALConfig_binary.cmake.in | 24 ++++++------- .../cmake/modules/CGALConfig_install.cmake.in | 20 +++++------ Installation/cmake/modules/CGAL_Macros.cmake | 8 ++--- .../CGAL_Qt6_moc_and_resource_files.cmake | 6 ++-- .../CGAL_SetupCGAL_Qt6Dependencies.cmake | 17 +++++---- .../cmake/modules/CGAL_add_test.cmake | 34 +++++++++--------- .../CGAL_setup_target_dependencies.cmake | 4 +-- Installation/lib/cmake/CGAL/CGALConfig.cmake | 5 ++- 28 files changed, 236 insertions(+), 239 deletions(-) diff --git a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt index ca4a58c59589..771664f2a4b5 100644 --- a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt +++ b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt @@ -13,31 +13,31 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Alpha_shapes_2.ui) + qt6_wrap_ui(DT_UI_FILES Alpha_shapes_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Alpha_shapes_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Alpha_shapes_2.qrc) # The executable itself. add_executable( - Alpha_shapes_2 Alpha_shapes_2.cpp ${DT_UI_FILES} ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + Alpha_shapes_2 Alpha_shapes_2.cpp ${DT_UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shapes_2) - target_link_libraries(Alpha_shapes_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Alpha_shapes_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Alpha_shapes_2) @@ -45,5 +45,5 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Alpha_shapes_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt index ab0f43011f9a..27a13e4b21cb 100644 --- a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt +++ b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt @@ -13,32 +13,32 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) #-------------------------------- # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Apollonius_graph_2.ui) + qt6_wrap_ui(DT_UI_FILES Apollonius_graph_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Apollonius_graph_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Apollonius_graph_2.qrc) # use the Qt MOC preprocessor on classes that derives from QObject # The executable itself. add_executable( Apollonius_graph_2 Apollonius_graph_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Apollonius_graph_2) - target_link_libraries(Apollonius_graph_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Apollonius_graph_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Apollonius_graph_2) @@ -46,5 +46,5 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Apollonius_graph_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Bounding_volumes/CMakeLists.txt b/GraphicsView/demo/Bounding_volumes/CMakeLists.txt index 69a30838cea5..3325c4379037 100644 --- a/GraphicsView/demo/Bounding_volumes/CMakeLists.txt +++ b/GraphicsView/demo/Bounding_volumes/CMakeLists.txt @@ -13,34 +13,34 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_INCLUDE_CURRENT_DIR ON) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Bounding_volumes.ui) + qt6_wrap_ui(DT_UI_FILES Bounding_volumes.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Bounding_volumes.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Bounding_volumes.qrc) # use the Qt MOC preprocessor on classes that derives from QObject # The executable itself. add_executable( Bounding_volumes Bounding_volumes.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Bounding_volumes) - target_link_libraries(Bounding_volumes PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Bounding_volumes PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Bounding_volumes) @@ -50,6 +50,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt b/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt index eb2e2b790116..129bcd076b86 100644 --- a/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt +++ b/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt @@ -13,32 +13,32 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Circular_kernel_2.ui) + qt6_wrap_ui(DT_UI_FILES Circular_kernel_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Circular_kernel_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Circular_kernel_2.qrc) # use the Qt MOC preprocessor on classes that derives from QObject # The executable itself. add_executable( Circular_kernel_2 Circular_kernel_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Circular_kernel_2) - target_link_libraries(Circular_kernel_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Circular_kernel_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Circular_kernel_2) @@ -48,6 +48,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Generator/CMakeLists.txt b/GraphicsView/demo/Generator/CMakeLists.txt index 3be28ec735dc..58346ad7753c 100644 --- a/GraphicsView/demo/Generator/CMakeLists.txt +++ b/GraphicsView/demo/Generator/CMakeLists.txt @@ -12,36 +12,36 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Generator_2.ui) + qt6_wrap_ui(DT_UI_FILES Generator_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Generator_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Generator_2.qrc) # use the Qt MOC preprocessor on classes that derives from QObject # The executable itself. add_executable(Generator_2 Generator_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Generator_2) - target_link_libraries(Generator_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui) + target_link_libraries(Generator_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Generator_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/GraphicsView/CMakeLists.txt b/GraphicsView/demo/GraphicsView/CMakeLists.txt index 51617b00b874..4b3940bf0fa0 100644 --- a/GraphicsView/demo/GraphicsView/CMakeLists.txt +++ b/GraphicsView/demo/GraphicsView/CMakeLists.txt @@ -12,25 +12,25 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) - add_executable(min min.cpp ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + add_executable(min min.cpp ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS min) - target_link_libraries(min PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui) + target_link_libraries(min PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(min) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt b/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt index 432cb655369e..b5e8e231bde5 100644 --- a/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt +++ b/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt @@ -13,32 +13,32 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES L1_voronoi_diagram_2.ui) + qt6_wrap_ui(DT_UI_FILES L1_voronoi_diagram_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./L1_voronoi_diagram_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./L1_voronoi_diagram_2.qrc) # The executable itself. add_executable( L1_voronoi_diagram_2 L1_voronoi_diagram_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS L1_voronoi_diagram_2) - target_link_libraries(L1_voronoi_diagram_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(L1_voronoi_diagram_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(L1_voronoi_diagram_2) @@ -48,6 +48,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt b/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt index a6de2468c40b..7c83ab38c01c 100644 --- a/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt +++ b/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt @@ -13,36 +13,36 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Largest_empty_rectangle_2.ui) + qt6_wrap_ui(DT_UI_FILES Largest_empty_rectangle_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Largest_empty_rectangle_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Largest_empty_rectangle_2.qrc) # The executable itself. add_executable( Largest_empty_rectangle_2 Largest_empty_rectangle_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Largest_empty_rectangle_2) target_link_libraries(Largest_empty_rectangle_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Largest_empty_rectangle_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt index 2f964941bb01..0cae7c979012 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt @@ -10,22 +10,22 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Periodic_2_triangulation_2.ui) + qt6_wrap_ui(DT_UI_FILES Periodic_2_triangulation_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Periodic_2_triangulation_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Periodic_2_triangulation_2.qrc) # find header files for projects that can show them file(GLOB headers "*.h") @@ -39,8 +39,8 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) Periodic_2_Delaunay_triangulation_2 Periodic_2_Delaunay_triangulation_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES} + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES} ${headers} ${QT_headers} ${P2T2_headers}) @@ -49,12 +49,12 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) Periodic_2_Delaunay_triangulation_2) target_link_libraries(Periodic_2_Delaunay_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Periodic_2_Delaunay_triangulation_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Polygon/CMakeLists.txt b/GraphicsView/demo/Polygon/CMakeLists.txt index 8314d618d2ff..fb753dccefe5 100644 --- a/GraphicsView/demo/Polygon/CMakeLists.txt +++ b/GraphicsView/demo/Polygon/CMakeLists.txt @@ -13,7 +13,7 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) @@ -22,9 +22,9 @@ if(NOT TARGET CGAL::Eigen3_support) return() endif() -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) @@ -34,25 +34,25 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) endif() # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Polygon_2.ui) + qt6_wrap_ui(DT_UI_FILES Polygon_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Polygon_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Polygon_2.qrc) # add_library( CGAL SHARED IMPORTED ) # SET_PROPERTY(TARGET CGAL PROPERTY IMPORTED_LOCATION ${CGAL_LIBRARY} ) # The executable itself. add_executable(Polygon_2 Polygon_2.cpp ${DT_UI_FILES} ${DT_RESOURCE_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Polygon_2) - target_link_libraries(Polygon_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - CGAL::Eigen3_support Qt5::Gui) + target_link_libraries(Polygon_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + CGAL::Eigen3_support Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Polygon_2) else() - message("NOTICE: This demo requires CGAL, CGAL_Core, and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL, CGAL_Core, and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt b/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt index 745fbb09ed0a..653619eb3201 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt +++ b/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt @@ -13,40 +13,36 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) -set(QT_USE_QTXML TRUE) -set(QT_USE_QTMAIN TRUE) -set(QT_USE_QTSCRIPT TRUE) -set(QT_USE_QTOPENGL TRUE) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) # UI files (Qt Designer files) - qt5_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) + qt6_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Segment_voronoi_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Segment_voronoi_2.qrc) # The executable itself. add_executable( Segment_voronoi_2 Segment_voronoi_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Segment_voronoi_2) - target_link_libraries(Segment_voronoi_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Segment_voronoi_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Segment_voronoi_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt index f1d5e4fbbd41..25cc1e2f3b6f 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt +++ b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt @@ -13,39 +13,39 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) set(QT_USE_QTXML TRUE) set(QT_USE_QTMAIN TRUE) set(QT_USE_QTSCRIPT TRUE) set(QT_USE_QTOPENGL TRUE) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) include_directories(BEFORE ./include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) # UI files (Qt Designer files) - qt5_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) + qt6_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Segment_voronoi_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Segment_voronoi_2.qrc) # The executable itself. add_executable( Segment_voronoi_linf_2 Segment_voronoi_linf_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Segment_voronoi_linf_2) target_link_libraries(Segment_voronoi_linf_2 PRIVATE CGAL::CGAL - CGAL::CGAL_Qt5 Qt5::Gui) + CGAL::CGAL_Qt6 Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Segment_voronoi_linf_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt index 0b7ebdeb6d86..aaffe63198b9 100644 --- a/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt +++ b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt @@ -13,30 +13,30 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Snap_rounding_2.ui) + qt6_wrap_ui(DT_UI_FILES Snap_rounding_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Snap_rounding_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Snap_rounding_2.qrc) # The executable itself. add_executable( Snap_rounding_2 Snap_rounding_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Snap_rounding_2) - target_link_libraries(Snap_rounding_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Snap_rounding_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Snap_rounding_2) @@ -44,5 +44,5 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Snap_rounding_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6<, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt b/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt index f5d5aad6d142..6615bea349df 100644 --- a/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt +++ b/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt @@ -13,36 +13,36 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Spatial_searching_2.ui) + qt6_wrap_ui(DT_UI_FILES Spatial_searching_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Spatial_searching_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Spatial_searching_2.qrc) # The executable itself. add_executable( Spatial_searching_2 Spatial_searching_2.cpp ${DT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Spatial_searching_2) - target_link_libraries(Spatial_searching_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Spatial_searching_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Spatial_searching_2) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Stream_lines_2/CMakeLists.txt b/GraphicsView/demo/Stream_lines_2/CMakeLists.txt index 0067351b4e14..19f88273a048 100644 --- a/GraphicsView/demo/Stream_lines_2/CMakeLists.txt +++ b/GraphicsView/demo/Stream_lines_2/CMakeLists.txt @@ -13,31 +13,31 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # UI files (Qt Designer files) - qt5_wrap_ui(DT_UI_FILES Stream_lines_2.ui) + qt6_wrap_ui(DT_UI_FILES Stream_lines_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Stream_lines_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Stream_lines_2.qrc) # The executable itself. add_executable( - Stream_lines_2 Stream_lines_2.cpp ${DT_UI_FILES} ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + Stream_lines_2 Stream_lines_2.cpp ${DT_UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Stream_lines_2) - target_link_libraries(Stream_lines_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Gui) + target_link_libraries(Stream_lines_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Stream_lines_2) @@ -47,6 +47,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index 4560bc339dcb..6ee55850f86d 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -16,11 +16,11 @@ endif() set(CMAKE_AUTOMOC TRUE) set(CMAKE_INCLUDE_CURRENT_DIR TRUE) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) -find_package(Qt5 QUIET COMPONENTS Widgets) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) +find_package(Qt6 QUIET COMPONENTS Widgets) -if(NOT CGAL_Qt5_FOUND OR NOT Qt5_FOUND) - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") +if(NOT CGAL_Qt6_FOUND OR NOT Qt6_FOUND) + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") return() endif() @@ -31,15 +31,15 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # The "constrained Delaunay" demo: Constrained_Delaunay_triangulation_2 #-------------------------------- -qt5_add_resources(CD_RES_FILE Constrained_Delaunay_triangulation_2.qrc) -qt5_wrap_ui(CD_UI_FILES Constrained_Delaunay_triangulation_2.ui) +qt6_add_resources(CD_RES_FILE Constrained_Delaunay_triangulation_2.qrc) +qt6_wrap_ui(CD_UI_FILES Constrained_Delaunay_triangulation_2.ui) # The executable itself. add_executable( Constrained_Delaunay_triangulation_2 Constrained_Delaunay_triangulation_2.cpp ${CD_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CD_RES_FILE}) + ${CGAL_Qt6_RESOURCE_FILES} ${CD_RES_FILE}) target_link_libraries(Constrained_Delaunay_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) target_include_directories(Constrained_Delaunay_triangulation_2 PRIVATE ./include) @@ -48,14 +48,14 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2) #-------------------------------- # The "Delaunay" demo: Delaunay_triangulation_2 #-------------------------------- -qt5_wrap_ui(D_UI_FILES Delaunay_triangulation_2.ui) -qt5_add_resources(D_RES_FILE Delaunay_triangulation_2.qrc) +qt6_wrap_ui(D_UI_FILES Delaunay_triangulation_2.ui) +qt6_add_resources(D_RES_FILE Delaunay_triangulation_2.qrc) # The executable itself. add_executable( Delaunay_triangulation_2 Delaunay_triangulation_2.cpp ${D_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${D_RES_FILE}) + ${CGAL_Qt6_RESOURCE_FILES} ${D_RES_FILE}) target_link_libraries(Delaunay_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2) @@ -64,13 +64,13 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2) #-------------------------------- # The executable itself. -qt5_add_resources(R_RES_FILE Regular_triangulation_2.qrc) -qt5_wrap_ui(R_UI_FILES Regular_triangulation_2.ui) +qt6_add_resources(R_RES_FILE Regular_triangulation_2.qrc) +qt6_wrap_ui(R_UI_FILES Regular_triangulation_2.ui) add_executable( Regular_triangulation_2 Regular_triangulation_2.cpp ${R_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${R_RES_FILE}) -target_link_libraries(Regular_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::Widgets) + ${CGAL_Qt6_RESOURCE_FILES} ${R_RES_FILE}) +target_link_libraries(Regular_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::Widgets) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Regular_triangulation_2) diff --git a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h index 009b142b963b..31458a45eca2 100644 --- a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h +++ b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h @@ -32,12 +32,11 @@ #include #include #include -#include +#include #include #include #include -#include -#include +#include #include #include #include @@ -205,16 +204,16 @@ void DemosMainWindow::setUseOpenGL(bool checked) { if(checked) { - QGLWidget* new_viewport = new QGLWidget; + // AF QOpenGLWidget* new_viewport = new QOpenGLWidget; // Setup the format to allow antialiasing with OpenGL: // one need to activate the SampleBuffers, if the graphic driver allows // this. - QGLFormat glformat = new_viewport->format(); - glformat.setOption(QGL::SampleBuffers); - new_viewport->setFormat(glformat); + // AF QGLFormat glformat = new_viewport->format(); + // AF glformat.setOption(QGL::SampleBuffers); + // AF new_viewport->setFormat(glformat); - view->setViewport(new_viewport); + // AF view->setViewport(new_viewport); } else { view->setViewport(new QWidget); diff --git a/GraphicsView/include/CGAL/Qt/qglviewer.h b/GraphicsView/include/CGAL/Qt/qglviewer.h index 16fd9b123eb5..89885041c58a 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer.h @@ -30,7 +30,6 @@ #include #include #include -#include #include #include @@ -72,8 +71,7 @@ class CGAL_QT_EXPORT QGLViewer : public QOpenGLWidget, public QOpenGLFunctions { public: //todo check if this is used. If not remove it - explicit QGLViewer(QGLContext* context, QWidget *parent = nullptr, - ::Qt::WindowFlags flags = ::Qt::WindowType(0)); + explicit QGLViewer(QOpenGLContext* context, QWidget *parent = nullptr, ::Qt::WindowFlags flags = ::Qt::WindowType(0)); explicit QGLViewer(QWidget *parent = nullptr, diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index 0950301c127e..d54e88f8aba7 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 0a521d9dd2c2..e4372214daeb 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -500,7 +500,7 @@ macro(set_special_prefix library prefix) set(CGAL_EXT_LIB_${library}_PREFIX ${prefix}) endmacro() -set_special_prefix(Qt5 QT) +set_special_prefix(Qt6 QT) set_special_prefix(Eigen3 EIGEN3) set_special_prefix(Coin3D COIN3D) @@ -647,10 +647,10 @@ cache_get(CGAL_3RD_PARTY_INCLUDE_DIRS ) cache_get(CGAL_3RD_PARTY_LIBRARIES ) cache_get(CGAL_3RD_PARTY_LIBRARIES_DIRS) -install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/Qt" COMPONENT CGAL_Qt5) +install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/Qt" COMPONENT CGAL_Qt6) if(CGAL_BRANCH_BUILD) - install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/" DESTINATION "${CGAL_INSTALL_CMAKE_DIR}/demo/resources" COMPONENT CGAL_Qt5) - install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/" DESTINATION "${CGAL_INSTALL_CMAKE_DIR}/demo/icons" COMPONENT CGAL_Qt5) + install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/" DESTINATION "${CGAL_INSTALL_CMAKE_DIR}/demo/resources" COMPONENT CGAL_Qt6) + install(DIRECTORY "${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/" DESTINATION "${CGAL_INSTALL_CMAKE_DIR}/demo/icons" COMPONENT CGAL_Qt6) endif() # @@ -660,7 +660,7 @@ set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) get_property(CGAL_FOUND GLOBAL PROPERTY CGAL_FOUND) get_property(CGAL_Core_FOUND GLOBAL PROPERTY CGAL_Core_FOUND) get_property(CGAL_ImageIO_FOUND GLOBAL PROPERTY CGAL_ImageIO_FOUND) -get_property(CGAL_Qt5_FOUND GLOBAL PROPERTY CGAL_Qt5_FOUND) +get_property(CGAL_Qt6_FOUND GLOBAL PROPERTY CGAL_Qt6_FOUND) # # Repeat some problems @@ -928,7 +928,7 @@ if(CGAL_BRANCH_BUILD) find_package(GMP REQUIRED) find_package(Doxygen REQUIRED) find_package(Eigen3 REQUIRED) - find_package(Qt5 COMPONENTS Core Widgets OpenGL Gui REQUIRED) + find_package(Qt6 COMPONENTS Core Widgets OpenGL Gui REQUIRED) find_package(VTK COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE) find_package(IPE) find_package(RS3) @@ -939,10 +939,10 @@ if(CGAL_BRANCH_BUILD) set(compile_options "\ ${CMAKE_CXX_FLAGS} -DCGAL_EIGEN3_ENABLED -DCGAL_PROFILE \ -${Qt5Widgets_DEFINITIONS} ${Qt5OpenGL_DEFINITIONS} ${Qt5Gui_DEFINITIONS} \ -${Qt5OpenGL_EXECUTABLE_COMPILE_FLAGS} -fPIC \ -${Qt5Gui_EXECUTABLE_COMPILE_FLAGS} \ -${CGAL_3RD_PARTY_DEFINITIONS} ${CGAL_Qt5_3RD_PARTY_DEFINITIONS} \ +${Qt6Widgets_DEFINITIONS} ${Qt6OpenGL_DEFINITIONS} ${Qt6Gui_DEFINITIONS} \ +${Qt6OpenGL_EXECUTABLE_COMPILE_FLAGS} -fPIC \ +${Qt6Gui_EXECUTABLE_COMPILE_FLAGS} \ +${CGAL_3RD_PARTY_DEFINITIONS} ${CGAL_Qt6_3RD_PARTY_DEFINITIONS} \ ${CGAL_DEFINITIONS}") message("COMPILATION OPTIONS ARE : ${compile_options}") @@ -1032,11 +1032,11 @@ You must disable CGAL_ENABLE_CHECK_HEADERS.") ${RS_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR} ${GMP_INCLUDE_DIR} - ${Qt5OpenGL_INCLUDE_DIRS} - ${Qt5Widgets_INCLUDE_DIRS} - ${Qt5Gui_DEFINITIONS} + ${Qt6OpenGL_INCLUDE_DIRS} + ${Qt6Widgets_INCLUDE_DIRS} + ${Qt6Gui_DEFINITIONS} ${CGAL_3RD_PARTY_INCLUDE_DIRS} - ${CGAL_Qt5_3RD_PARTY_INCLUDE_DIRS}) + ${CGAL_Qt6_3RD_PARTY_INCLUDE_DIRS}) list(APPEND include_options "-I${incdir}") endforeach() include_directories(SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS}) @@ -1234,7 +1234,7 @@ endif() #print some info about versions if(RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE) - find_package(Qt5 QUIET COMPONENTS Core) + find_package(Qt6 QUIET COMPONENTS Core) find_package(Boost) if(NOT CGAL_DISABLE_GMP) find_package(GMP) @@ -1248,7 +1248,7 @@ if(RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE) STATUS "USING BOOST_VERSION = '${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}'" ) - if(Qt5_FOUND) - message(STATUS "USING Qt5_VERSION = '${Qt5Core_VERSION_STRING}'") - endif()#Qt5_FOUND + if(Qt6_FOUND) + message(STATUS "USING Qt6_VERSION = '${Qt6Core_VERSION_STRING}'") + endif()#Qt6_FOUND endif()#RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index b15db42aa7e8..7987a2bbd1f3 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -36,7 +36,7 @@ else() CGAL_alias_library(CGAL) CGAL_alias_library(CGAL_Core) CGAL_alias_library(CGAL_ImageIO) - CGAL_alias_library(CGAL_Qt5) + CGAL_alias_library(CGAL_Qt6) endif() macro(CGAL_set_LIB_LIBRARY_var lib) @@ -50,7 +50,7 @@ endmacro() CGAL_set_LIB_LIBRARY_var(CGAL) CGAL_set_LIB_LIBRARY_var(CGAL_Core) CGAL_set_LIB_LIBRARY_var(CGAL_ImageIO) -CGAL_set_LIB_LIBRARY_var(CGAL_Qt5) +CGAL_set_LIB_LIBRARY_var(CGAL_Qt6) set(CGAL_CONFIGURED_LIBRARIES "@CGAL_ACTUAL_CONFIGURED_LIBRARIES@") @@ -120,15 +120,15 @@ macro(check_cgal_component COMPONENT) else( "${CGAL_LIB}" STREQUAL "CGAL" ) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - - include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") + if ("${CGAL_LIB}" STREQUAL "CGAL_Qt6") - if(CGAL_Qt5_MISSING_DEPS) - set( CGAL_Qt5_FOUND FALSE ) - message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") + include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt6Dependencies.cmake") + + if(CGAL_Qt6_MISSING_DEPS) + set( CGAL_Qt6_FOUND FALSE ) + message(STATUS "libCGAL_Qt6 is missing the dependencies: ${CGAL_Qt6_MISSING_DEPS} cannot be configured.") else() - set( CGAL_Qt5_FOUND TRUE ) + set( CGAL_Qt6_FOUND TRUE ) endif() elseif("${CGAL_LIB}" STREQUAL "CGAL_Core") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_CoreDependencies.cmake") @@ -138,10 +138,10 @@ macro(check_cgal_component COMPONENT) else() set( CGAL_Core_FOUND TRUE ) endif() - else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else("${CGAL_LIB}" STREQUAL "CGAL_Qt6") # Libraries that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif("${CGAL_LIB}" STREQUAL "CGAL_Qt6") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) @@ -214,7 +214,7 @@ if (NOT TARGET CGAL::CGAL_Basic_viewer) add_library(CGAL::CGAL_Basic_viewer INTERFACE IMPORTED GLOBAL) set_target_properties(CGAL::CGAL_Basic_viewer PROPERTIES INTERFACE_COMPILE_DEFINITIONS "CGAL_USE_BASIC_VIEWER;QT_NO_KEYWORDS" - INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt5) + INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt6) endif() include("${CGAL_MODULES_DIR}/CGAL_enable_end_of_configuration_hook.cmake") diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index 00db762aa76d..9ee7c0ba8803 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -104,15 +104,15 @@ macro(check_cgal_component COMPONENT) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - - include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") + if ("${CGAL_LIB}" STREQUAL "CGAL_Qt6") - if(CGAL_Qt5_MISSING_DEPS) - set( CGAL_Qt5_FOUND FALSE ) - message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") + include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt6Dependencies.cmake") + + if(CGAL_Qt6_MISSING_DEPS) + set( CGAL_Qt6_FOUND FALSE ) + message(STATUS "libCGAL_Qt6 is missing the dependencies: ${CGAL_Qt6_MISSING_DEPS} cannot be configured.") else() - set( CGAL_Qt5_FOUND TRUE ) + set( CGAL_Qt6_FOUND TRUE ) endif() elseif("${CGAL_LIB}" STREQUAL "CGAL_Core") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_CoreDependencies.cmake") @@ -122,10 +122,10 @@ macro(check_cgal_component COMPONENT) else() set( CGAL_Core_FOUND TRUE ) endif() - else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else("${CGAL_LIB}" STREQUAL "CGAL_Qt6") # Libraries that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif("${CGAL_LIB}" STREQUAL "CGAL_Qt6") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) @@ -198,7 +198,7 @@ if (NOT TARGET CGAL::CGAL_Basic_viewer) add_library(CGAL::CGAL_Basic_viewer INTERFACE IMPORTED GLOBAL) set_target_properties(CGAL::CGAL_Basic_viewer PROPERTIES INTERFACE_COMPILE_DEFINITIONS "CGAL_USE_BASIC_VIEWER;QT_NO_KEYWORDS" - INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt5) + INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt6) endif() include("${CGAL_MODULES_DIR}/CGAL_enable_end_of_configuration_hook.cmake") diff --git a/Installation/cmake/modules/CGAL_Macros.cmake b/Installation/cmake/modules/CGAL_Macros.cmake index 8ca618abcd46..2cc35fdc572e 100644 --- a/Installation/cmake/modules/CGAL_Macros.cmake +++ b/Installation/cmake/modules/CGAL_Macros.cmake @@ -229,7 +229,7 @@ if( NOT CGAL_MACROS_FILE_INCLUDED ) message (STATUS "Configured ${lib} from UseLIB-file: ${usefile}") # UseLIB-file has to set ${vlib}_SETUP to TRUE - # TODO EBEB what about Qt5, zlib? + # TODO EBEB what about Qt6, zlib? else() @@ -288,11 +288,11 @@ if( NOT CGAL_MACROS_FILE_INCLUDED ) add_to_list( CGAL_3RD_PARTY_DEFINITIONS ${CGAL_${component}_3RD_PARTY_DEFINITIONS} ) add_to_list( CGAL_3RD_PARTY_LIBRARIES_DIRS ${CGAL_${component}_3RD_PARTY_LIBRARIES_DIRS} ) - # To deal with imported targets of Qt5 and Boost, when CGAL + # To deal with imported targets of Qt6 and Boost, when CGAL # targets are themselves imported by another project. - if (${component} STREQUAL "Qt5") - find_package(Qt5 COMPONENTS OpenGL Gui Core Script ScriptTools QUIET) + if (${component} STREQUAL "Qt6") + find_package(Qt6 COMPONENTS Widgets OpenGLWidgets Gui Core Script ScriptTools QUIET) endif() else(WITH_CGAL_${component}) diff --git a/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake b/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake index 21b32bc2e9e6..c3c6cbb71431 100644 --- a/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake +++ b/Installation/cmake/modules/CGAL_Qt6_moc_and_resource_files.cmake @@ -4,7 +4,7 @@ endif() set(CGAL_Qt6_moc_and_resource_files_included TRUE) # qrc files (resources files, that contain icons, at least) if(EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc) - qt5_add_resources (_CGAL_Qt6_RESOURCE_FILES_private + qt6_add_resources (_CGAL_Qt6_RESOURCE_FILES_private ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Input.qrc ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/File.qrc @@ -15,11 +15,11 @@ else() ${CGAL_MODULES_DIR}/demo/resources ${CGAL_MODULES_DIR}/demo/icons DESTINATION ${CMAKE_BINARY_DIR}) - qt5_add_resources (_CGAL_Qt6_RESOURCE_FILES_private + qt6_add_resources (_CGAL_Qt6_RESOURCE_FILES_private ${CMAKE_BINARY_DIR}/resources/CGAL.qrc ${CMAKE_BINARY_DIR}/icons/Input.qrc ${CMAKE_BINARY_DIR}/icons/File.qrc ${CMAKE_BINARY_DIR}/icons/Triangulation_2.qrc) endif() -qt5_wrap_ui(_CGAL_Qt6_UI_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/ImageInterface.ui) +qt_wrap_ui(_CGAL_Qt6_UI_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/ImageInterface.ui) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake index 161e9673345c..690d018d33f8 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt6Dependencies.cmake @@ -9,7 +9,7 @@ # # .. code-block:: cmake # -# find_package(Qt6 QUIET COMPONENTS OpenGL Svg) +# find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) # # and defines the variable :variable:`CGAL_Qt6_FOUND` and the function # :command:`CGAL_setup_CGAL_Qt6_dependencies`. @@ -24,19 +24,24 @@ set(CGAL_SetupCGAL_Qt6Dependencies_included TRUE) # Used Modules # ^^^^^^^^^^^^ # - :module:`Qt6Config` -find_package(Qt6 QUIET COMPONENTS OpenGL Svg) + +find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets Svg) set(CGAL_Qt6_MISSING_DEPS "") -if(NOT Qt6OpenGL_FOUND) - set(CGAL_Qt6_MISSING_DEPS "Qt6OpenGL") +if(NOT Qt6OpenGLWidgets_FOUND) + message( STATUS "NOTICE: NOT Qt6OpenGLWidgets_FOUND") + set(CGAL_Qt6_MISSING_DEPS "Qt6OpenGLWidgets") endif() if(NOT Qt6Svg_FOUND) + message(STATUS "NOTICE: NOT Qt6Svg_FOUND") set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} Qt6Svg") endif() if(NOT Qt6_FOUND) + message(STATUS "NOTICE: NOT Qt6_FOUND") set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} Qt6") endif() if(NOT EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsItem.h) + message(STATUS "NOTICE: NOT EXISTS GraphicsItem") set(CGAL_Qt6_MISSING_DEPS "${CGAL_Qt6_MISSING_DEPS} headers") endif() @@ -75,7 +80,7 @@ if(NOT CGAL_Qt6_MISSING_DEPS) POSITION_INDEPENDENT_CODE TRUE EXCLUDE_FROM_ALL TRUE AUTOMOC TRUE) - target_link_libraries(CGAL_Qt6_moc_and_resources CGAL::CGAL Qt6::Widgets Qt6::OpenGL Qt6::Svg ) + target_link_libraries(CGAL_Qt6_moc_and_resources CGAL::CGAL Qt6::Widgets Qt6::OpenGLWidgets Qt6::Svg ) add_library(CGAL::CGAL_Qt6_moc_and_resources ALIAS CGAL_Qt6_moc_and_resources) add_library(CGAL::Qt6_moc_and_resources ALIAS CGAL_Qt6_moc_and_resources) @@ -112,7 +117,7 @@ function(CGAL_setup_CGAL_Qt6_dependencies target) endif() target_link_libraries( ${target} INTERFACE CGAL::CGAL) target_link_libraries( ${target} INTERFACE CGAL::Qt6_moc_and_resources) - target_link_libraries( ${target} INTERFACE Qt6::OpenGL Qt6::Svg ) + target_link_libraries( ${target} INTERFACE Qt6::OpenGLWidgets Qt6::Svg ) # Remove -Wdeprecated-copy, for g++ >= 9.0, because Qt6, as of # version 5.12, has a lot of [-Wdeprecated-copy] warnings. diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index a5c8b2bc83a7..eb0c748109cc 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -117,23 +117,23 @@ function(cgal_add_compilation_test exe_name) set_property(TEST "check_build_system" PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture") endif() - if(TARGET CGAL_Qt5_moc_and_resources) # if CGAL_Qt5 was searched, and is header-only + if(TARGET CGAL_Qt6_moc_and_resources) # if CGAL_Qt6 was searched, and is header-only get_property(linked_libraries TARGET "${exe_name}" PROPERTY LINK_LIBRARIES) # message(STATUS "${exe_name} depends on ${linked_libraries}") - string(FIND "${linked_libraries}" "CGAL::CGAL_Qt5" link_with_CGAL_Qt5) - if(link_with_CGAL_Qt5 STRGREATER "-1" AND - NOT TARGET compilation_of__CGAL_Qt5_moc_and_resources) + string(FIND "${linked_libraries}" "CGAL::CGAL_Qt6" link_with_CGAL_Qt6) + if(link_with_CGAL_Qt6 STRGREATER "-1" AND + NOT TARGET compilation_of__CGAL_Qt6_moc_and_resources) # This custom target is useless. It is used only as a flag to # detect that the test has already been created. - add_custom_target(compilation_of__CGAL_Qt5_moc_and_resources) - add_dependencies( compilation_of__CGAL_Qt5_moc_and_resources CGAL_Qt5_moc_and_resources ) - add_test(NAME "compilation_of__CGAL_Qt5_moc_and_resources" - COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "CGAL_Qt5_moc_and_resources" --config "$") - set_property(TEST "compilation_of__CGAL_Qt5_moc_and_resources" + add_custom_target(compilation_of__CGAL_Qt6_moc_and_resources) + add_dependencies( compilation_of__CGAL_Qt6_moc_and_resources CGAL_Qt6_moc_and_resources ) + add_test(NAME "compilation_of__CGAL_Qt6_moc_and_resources" + COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "CGAL_Qt6_moc_and_resources" --config "$") + set_property(TEST "compilation_of__CGAL_Qt6_moc_and_resources" APPEND PROPERTY LABELS "CGAL_build_system") - set_property(TEST "compilation_of__CGAL_Qt5_moc_and_resources" - PROPERTY FIXTURES_SETUP "CGAL_Qt5_moc_and_resources_Fixture") - set_property(TEST "compilation_of__CGAL_Qt5_moc_and_resources" + set_property(TEST "compilation_of__CGAL_Qt6_moc_and_resources" + PROPERTY FIXTURES_SETUP "CGAL_Qt6_moc_and_resources_Fixture") + set_property(TEST "compilation_of__CGAL_Qt6_moc_and_resources" APPEND PROPERTY DEPENDS "check_build_system") endif() endif() @@ -313,7 +313,7 @@ function(cgal_add_test exe_name) -P "${CGAL_MODULES_DIR}/run_test_with_cin.cmake") set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${cin_file}) - # message(STATUS "add test: ${exe_name} < ${cin_file}") + # message(STATUS "add test: ${exe_name} < ${cin_file}") endif() else() if(NOT ARGS AND NOT cgal_add_test_TEST_NAME) @@ -328,12 +328,12 @@ function(cgal_add_test exe_name) file(STRINGS "${cmd_file}" CMD_LINES) string(CONFIGURE "${CMD_LINES}" CMD_LINES) set(ARGS) - # message(STATUS "DEBUG test ${exe_name}") + # message(STATUS "DEBUG test ${exe_name}") foreach(CMD_LINE ${CMD_LINES}) - # message(STATUS " command line: ${CMD_LINE}") + # message(STATUS " command line: ${CMD_LINE}") string(REGEX REPLACE "\#.*" "" CMD_LINE "${CMD_LINE}") separate_arguments(CMD_LINE_ARGS UNIX_COMMAND ${CMD_LINE}) - # message(STATUS " args: ${CMD_LINE_ARGS}") + # message(STATUS " args: ${CMD_LINE_ARGS}") list(APPEND ARGS ${CMD_LINE_ARGS}) endforeach() expand_list_with_globbing(ARGS) @@ -341,7 +341,7 @@ function(cgal_add_test exe_name) APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${cmd_file}) endif() endif() - # message(STATUS "add test: ${exe_name} ${ARGS}") + # message(STATUS "add test: ${exe_name} ${ARGS}") if(ANDROID) add_test(NAME ${test_name} COMMAND ${TIME_COMMAND} ${adb_executable} shell cd ${CGAL_REMOTE_TEST_DIR_PREFIX}${PROJECT_NAME} && LD_LIBRARY_PATH=${CGAL_REMOTE_TEST_DIR_PREFIX}${PROJECT_NAME} ${CGAL_REMOTE_TEST_DIR_PREFIX}${PROJECT_NAME}/${exe_name} ${ARGS}) elseif(CGAL_RUN_TESTS_THROUGH_SSH) diff --git a/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake index bed40154c809..820664d04981 100644 --- a/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake +++ b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake @@ -5,7 +5,7 @@ function(CGAL_setup_target_dependencies target) CGAL_setup_CGAL_Core_dependencies(${target}) elseif(${target} STREQUAL CGAL_ImageIO) CGAL_setup_CGAL_ImageIO_dependencies(${target}) - elseif(${target} STREQUAL CGAL_Qt5) - CGAL_setup_CGAL_Qt5_dependencies(${target}) + elseif(${target} STREQUAL CGAL_Qt6) + CGAL_setup_CGAL_Qt6_dependencies(${target}) endif() endfunction() diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index b9030ecc4dc7..f7afccf00574 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -128,7 +128,7 @@ if( CGAL_DEV_MODE OR RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE ) endif() foreach(comp ${CGAL_FIND_COMPONENTS}) - if(NOT comp MATCHES "Core|ImageIO|Qt5") + if(NOT comp MATCHES "Core|ImageIO|Qt6") message(FATAL_ERROR "The requested CGAL component ${comp} does not exist!") endif() if(comp MATCHES "Core" AND CGAL_DISABLE_GMP) @@ -193,6 +193,5 @@ if (NOT TARGET CGAL::CGAL_Basic_viewer) add_library(CGAL::CGAL_Basic_viewer INTERFACE IMPORTED GLOBAL) set_target_properties(CGAL::CGAL_Basic_viewer PROPERTIES INTERFACE_COMPILE_DEFINITIONS "CGAL_USE_BASIC_VIEWER;QT_NO_KEYWORDS" - INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt5) + INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt6) endif() - From 47683f2dea3c40bbd380b78426a47dee5d9154b0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 14:27:45 +0100 Subject: [PATCH 196/943] The Truiangulation_2/examples which use draw() compile and visualize but have an assertion in a QMap --- .../include/CGAL/Qt/Basic_viewer_qt.h | 4 ++-- .../include/CGAL/Qt/CreateOpenGLContext.h | 21 +++++++++++-------- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 6 +++++- .../examples/Triangulation_2/CMakeLists.txt | 6 +++--- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h b/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h index 3c7b05082b98..054740afb350 100644 --- a/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h +++ b/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #ifdef __GNUC__ @@ -1779,7 +1779,7 @@ class Basic_viewer_qt : public CGAL::QGLViewer static const unsigned int NB_VBO_BUFFERS=(END_POS-BEGIN_POS)+ (END_COLOR-BEGIN_COLOR)+2; // +2 for 2 vectors of normals - QGLBuffer buffers[NB_VBO_BUFFERS]; + QOpenGLBuffer buffers[NB_VBO_BUFFERS]; // The following enum gives the indices of the different vao. enum diff --git a/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h b/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h index 20bed5105a18..e85911f73e87 100644 --- a/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h +++ b/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h @@ -13,19 +13,22 @@ #define CGAL_QT_CREATE_OPENGL_CONTEXT_H #include -#include + namespace CGAL{ namespace Qt{ -inline QGLContext* createOpenGLContext() +inline QOpenGLContext* createOpenGLContext() { QOpenGLContext *context = new QOpenGLContext(); - QSurfaceFormat format; - format.setVersion(2,1); - format.setProfile(QSurfaceFormat::CompatibilityProfile); - context->setFormat(format); - QGLContext *result = QGLContext::fromOpenGLContext(context); - result->create(); - return result; + context->create(); + return context; + + //QSurfaceFormat format; + //format.setVersion(2,1); + //format.setProfile(QSurfaceFormat::CompatibilityProfile); + //context->setFormat(format); + //QGLContext *result = QGLContext::fromOpenGLContext(context); + // result->create(); + //return result; } } // namespace Qt } // namespace CGAL diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index d54e88f8aba7..c8dec4a0725d 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -2455,7 +2456,10 @@ void CGAL::QGLViewer::setMouseBinding(::Qt::Key key, ::Qt::KeyboardModifiers mod mouseBinding_.insert(mbp, map); ClickBindingPrivate cbp(modifiers, button, false, ::Qt::NoButton, key); - clickBinding_.remove(cbp); + + // AF: currently results in a runtime error + // clickBinding_.remove(cbp); + } diff --git a/Triangulation_2/examples/Triangulation_2/CMakeLists.txt b/Triangulation_2/examples/Triangulation_2/CMakeLists.txt index e4f5e7392ee8..47374a859985 100644 --- a/Triangulation_2/examples/Triangulation_2/CMakeLists.txt +++ b/Triangulation_2/examples/Triangulation_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Triangulation_2_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( @@ -15,10 +15,10 @@ foreach(cppfile ${cppfiles}) create_single_source_cgal_program("${cppfile}") endforeach() -if(CGAL_Qt5_FOUND) +if(CGAL_Qt6_FOUND) target_link_libraries(polygon_triangulation PUBLIC CGAL::CGAL_Basic_viewer) target_link_libraries(draw_triangulation_2 PUBLIC CGAL::CGAL_Basic_viewer) target_link_libraries(star_conflict_zone PUBLIC CGAL::CGAL_Basic_viewer) else() - message(STATUS "NOTICE: Several examples require Qt5 and will not be compiled.") + message(STATUS "NOTICE: Several examples require Qt6 and will not be compiled.") endif() From b1040de076ee390b3062d9734fdae4fb597ee445 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 14:46:31 +0100 Subject: [PATCH 197/943] Surface_mesh example works as well --- Surface_mesh/examples/Surface_mesh/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Surface_mesh/examples/Surface_mesh/CMakeLists.txt b/Surface_mesh/examples/Surface_mesh/CMakeLists.txt index b39506d8b451..87cdd52e06c4 100644 --- a/Surface_mesh/examples/Surface_mesh/CMakeLists.txt +++ b/Surface_mesh/examples/Surface_mesh/CMakeLists.txt @@ -9,8 +9,8 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Surface_mesh_Examples) -#CGAL_Qt5 is needed for the drawing. -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +#CGAL_Qt6 is needed for the drawing. +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) create_single_source_cgal_program("sm_points.cpp") create_single_source_cgal_program("sm_derivation.cpp") @@ -28,7 +28,7 @@ create_single_source_cgal_program("check_orientation.cpp") #create the executable of the application create_single_source_cgal_program("draw_surface_mesh.cpp") -if(CGAL_Qt5_FOUND) +if(CGAL_Qt6_FOUND) #link it with the required CGAL libraries target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Basic_viewer) From 42a9757f2f1e9a768eabe4287a8071d797fe0d1d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 15:05:12 +0100 Subject: [PATCH 198/943] Fix to have a weak order --- GraphicsView/include/CGAL/Qt/qglviewer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer.h b/GraphicsView/include/CGAL/Qt/qglviewer.h index 89885041c58a..2cf5b7faf342 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer.h @@ -1156,7 +1156,7 @@ private Q_SLOTS: return modifiers < cbp.modifiers; if (button != cbp.button) return button < cbp.button; - return doubleClick != cbp.doubleClick; + return doubleClick < cbp.doubleClick; } }; #endif From 370e81ef08a91199779dad96cbbb16a49f34a8bf Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 15:05:33 +0100 Subject: [PATCH 199/943] AABB Tree demo works --- AABB_tree/demo/AABB_tree/CMakeLists.txt | 40 +++++++++++------------ AABB_tree/demo/AABB_tree/MainWindow.h | 2 +- AABB_tree/demo/AABB_tree/Scene.h | 4 +-- AABB_tree/demo/AABB_tree/Viewer.cpp | 2 +- GraphicsView/include/CGAL/Qt/debug_impl.h | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/CMakeLists.txt b/AABB_tree/demo/AABB_tree/CMakeLists.txt index c777eba1798e..76e9faa655e4 100644 --- a/AABB_tree/demo/AABB_tree/CMakeLists.txt +++ b/AABB_tree/demo/AABB_tree/CMakeLists.txt @@ -20,28 +20,28 @@ endif() # Include this package's headers first include_directories(BEFORE ./ ./include) -# Find CGAL and CGAL Qt5 -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +# Find CGAL and CGAL Qt6 +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -# Find Qt5 itself -find_package(Qt5 QUIET COMPONENTS Script OpenGL Gui Svg) +# Find Qt6 itself +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Gui Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) - qt5_wrap_ui(UI_FILES MainWindow.ui) + qt6_wrap_ui(UI_FILES MainWindow.ui) include(AddFileDependencies) - qt5_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") + qt6_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") add_file_dependencies(MainWindow_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h") - qt5_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") + qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h") - qt5_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") + qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") add_file_dependencies(Scene_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Scene.h") - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES AABB_demo.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES AABB_demo.qrc) add_file_dependencies( AABB_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp" @@ -49,30 +49,30 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") add_executable( - AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt5_RESOURCE_FILES} - #${CGAL_Qt5_MOC_FILES} + AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} + #${CGAL_Qt6_MOC_FILES} ) # Link with Qt libraries - target_link_libraries(AABB_demo PRIVATE Qt5::OpenGL Qt5::Gui - CGAL::CGAL CGAL::CGAL_Qt5) + target_link_libraries(AABB_demo PRIVATE Qt6::OpenGLWidgets Qt6::Gui + CGAL::CGAL CGAL::CGAL_Qt6) add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(AABB_demo) -else(CGAL_Qt5_FOUND AND Qt5_FOUND) +else(CGAL_Qt6_FOUND AND Qt6_FOUND) set(AABB_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(AABB_MISSING_DEPS "CGAL_Qt5, ${AABB_MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(AABB_MISSING_DEPS "CGAL_Qt6, ${AABB_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(AABB_MISSING_DEPS "Qt5, ${AABB_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(AABB_MISSING_DEPS "Qt6, ${AABB_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${AABB_MISSING_DEPS}, and will not be compiled.") -endif(CGAL_Qt5_FOUND AND Qt5_FOUND) +endif(CGAL_Qt6_FOUND AND Qt6_FOUND) diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index 2a072f195121..f768694514b8 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -1,7 +1,7 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include +#include #include class QDragEnterEvent; diff --git a/AABB_tree/demo/AABB_tree/Scene.h b/AABB_tree/demo/AABB_tree/Scene.h index 44d7b8239ce8..cc109a433fdf 100644 --- a/AABB_tree/demo/AABB_tree/Scene.h +++ b/AABB_tree/demo/AABB_tree/Scene.h @@ -1,7 +1,7 @@ #ifndef SCENE_H #define SCENE_H -#include +#include #include #include @@ -77,7 +77,7 @@ class Scene : public QObject }; public: - QGLContext* context; + QOpenGLContext* context; void draw(CGAL::QGLViewer*); void update_bbox(); Bbox bbox() { return m_bbox; } diff --git a/AABB_tree/demo/AABB_tree/Viewer.cpp b/AABB_tree/demo/AABB_tree/Viewer.cpp index 7bc82f7770e6..6f5eac006797 100644 --- a/AABB_tree/demo/AABB_tree/Viewer.cpp +++ b/AABB_tree/demo/AABB_tree/Viewer.cpp @@ -1,7 +1,7 @@ #include "Viewer.h" #include "Scene.h" #include -#include +#include #include Viewer::Viewer(QWidget* parent) diff --git a/GraphicsView/include/CGAL/Qt/debug_impl.h b/GraphicsView/include/CGAL/Qt/debug_impl.h index eaa4d7ed108b..4f3c152697c6 100644 --- a/GraphicsView/include/CGAL/Qt/debug_impl.h +++ b/GraphicsView/include/CGAL/Qt/debug_impl.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include namespace CGAL { namespace Qt { From 5601e035ff0bd50bb7856028399071a2ab052da7 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 17:05:21 +0100 Subject: [PATCH 200/943] Change all CMakeLists.txt --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 148 ++++++++++-------- .../Plugins/Alpha_wrap_3/CMakeLists.txt | 2 +- .../Plugins/Camera_position/CMakeLists.txt | 2 +- .../Plugins/Classification/CMakeLists.txt | 2 +- .../Polyhedron/Plugins/Display/CMakeLists.txt | 2 +- .../demo/Polyhedron/Plugins/IO/CMakeLists.txt | 2 +- .../Polyhedron/Plugins/Mesh_2/CMakeLists.txt | 2 +- .../Polyhedron/Plugins/Mesh_3/CMakeLists.txt | 12 +- .../Operations_on_polyhedra/CMakeLists.txt | 6 +- .../Polyhedron/Plugins/PCA/CMakeLists.txt | 6 +- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 26 +-- .../Plugins/Point_set/CMakeLists.txt | 26 +-- .../Plugins/Surface_mesh/CMakeLists.txt | 12 +- .../Tetrahedral_remeshing/CMakeLists.txt | 6 +- .../Plugins/Three_examples/CMakeLists.txt | 16 +- .../implicit_functions/CMakeLists.txt | 22 +-- 16 files changed, 156 insertions(+), 136 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 9eb13d44e097..e78c8acd1d0b 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -36,25 +36,34 @@ option(POLYHEDRON_QTSCRIPT_DEBUGGER "Activate the use of Qt Script Debugger in Polyhedron_3 demo" OFF) # Find CGAL -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5 ImageIO) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 ImageIO) set_package_properties(CGAL PROPERTIES TYPE REQUIRED) include(${CGAL_USE_FILE}) -# Find Qt5 itself -find_package(Qt5 QUIET - COMPONENTS OpenGL Script Widgets +if(CGAL_Qt6_FOUND) + message( STATUS "we found CGAL_Qt6") +endif() + +# Find Qt6 itself +find_package(Qt6 QUIET + COMPONENTS OpenGLWidgets Widgets OPTIONAL_COMPONENTS ScriptTools WebSockets Network) set_package_properties( - Qt5 PROPERTIES + Qt6 PROPERTIES TYPE REQUIRED PURPOSE "Enables the 3D Features, for GUI and visualization." - DESCRIPTION "To find this package, it should be sufficient to fill the Qt5_DIR variable with: ///lib/cmake/Qt5") + DESCRIPTION "To find this package, it should be sufficient to fill the Qt6_DIR variable with: ///lib/cmake/Qt6") + +if(NOT Qt6_FOUND) + message( STATUS "we did not find it") +endif() -if(Qt5_FOUND) +if(Qt6_FOUND) + message( STATUS "we did find Qt6") add_definitions(-DQT_NO_KEYWORDS) add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE) -endif(Qt5_FOUND) +endif(Qt6_FOUND) find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater) set_package_properties( @@ -119,23 +128,34 @@ set_package_properties( DESCRIPTION "A library for parallel programming." PURPOSE "Plugins such as Mesh_3, Bilateral smoothing, and WLOP are faster if TBB is linked.") -if(CGAL_Qt5_FOUND AND Qt5_FOUND) + + +if(NOT CGAL_Qt6_FOUND) + message( STATUS "NOT CGAL_Qt6_FOUND") +endif() + +if(NOT Qt6_FOUND) + message( STATUS "NOT Qt6_FOUND") +endif() + + +if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) - qt5_wrap_ui(MainWindowUI_files MainWindow.ui) - qt5_wrap_ui(SubViewerUI_files SubViewer.ui) - qt5_wrap_ui(statisticsUI_FILES Statistics_on_item_dialog.ui) - qt5_wrap_ui(FileLoaderDialogUI_files FileLoaderDialog.ui) - qt5_wrap_ui(Show_point_dialogUI_FILES Show_point_dialog.ui) - qt5_wrap_ui(PreferencesUI_FILES Preferences.ui Details.ui SSH_dialog.ui) - qt5_wrap_ui(Show_point_dialogUI_FILES Show_point_dialog.ui) - qt5_wrap_ui(ViewerUI_FILES LightingDialog.ui) - qt5_generate_moc("File_loader_dialog.h" + qt6_wrap_ui(MainWindowUI_files MainWindow.ui) + qt6_wrap_ui(SubViewerUI_files SubViewer.ui) + qt6_wrap_ui(statisticsUI_FILES Statistics_on_item_dialog.ui) + qt6_wrap_ui(FileLoaderDialogUI_files FileLoaderDialog.ui) + qt6_wrap_ui(Show_point_dialogUI_FILES Show_point_dialog.ui) + qt6_wrap_ui(PreferencesUI_FILES Preferences.ui Details.ui SSH_dialog.ui) + qt6_wrap_ui(Show_point_dialogUI_FILES Show_point_dialog.ui) + qt6_wrap_ui(ViewerUI_FILES LightingDialog.ui) + qt6_generate_moc("File_loader_dialog.h" "${CMAKE_CURRENT_BINARY_DIR}/File_loader_dialog_moc.cpp") include(${CMAKE_CURRENT_SOURCE_DIR}/polyhedron_demo_macros.cmake) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES Polyhedron_3.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES Polyhedron_3.qrc) find_path( CGAL_THREE_HEADERS_PATH NAMES CGAL/Three/Scene_item.h @@ -144,16 +164,16 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) DOC "Path to CGAL/Three/Scene_item.h") if(CGAL_THREE_HEADERS_PATH) - qt5_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Viewer_interface.h" + qt6_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Viewer_interface.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_interface_moc.cpp") - qt5_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Scene_item.h" + qt6_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Scene_item.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_item_moc.cpp") - qt5_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Scene_group_item.h" + qt6_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Scene_group_item.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_group_item_moc.cpp") - qt5_generate_moc( + qt6_generate_moc( "${CGAL_THREE_HEADERS_PATH}/CGAL/Three/Scene_item_rendering_helper.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_item_rendering_helper_moc.cpp") - qt5_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/TextRenderer.h" + qt6_generate_moc("${CGAL_THREE_HEADERS_PATH}/CGAL/Three/TextRenderer.h" "${CMAKE_CURRENT_BINARY_DIR}/TextRenderer_moc.cpp") else() message(FATAL_ERROR "Cannot find ") @@ -174,8 +194,8 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) Viewer.cpp Three.cpp ${ViewerUI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES} + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES} Viewer_interface_moc.cpp Scene_item_moc.cpp Scene_item.cpp @@ -191,11 +211,11 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) Primitive_container.cpp Polyhedron_demo_plugin_helper.cpp CGAL_double_edit.cpp) - target_link_libraries(demo_framework PUBLIC Qt5::OpenGL Qt5::Widgets Qt5::Gui - Qt5::Script CGAL::CGAL_Qt5) - if(TARGET Qt5::WebSockets) - target_link_libraries(demo_framework PUBLIC Qt5::WebSockets) - message(STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.") + target_link_libraries(demo_framework PUBLIC Qt6::OpenGLWidgets Qt6::Widgets Qt6::Gui + CGAL::CGAL_Qt6) + if(TARGET Qt6::WebSockets) + target_link_libraries(demo_framework PUBLIC Qt6::WebSockets) + message(STATUS "Qt6WebSockets was found. Using WebSockets is therefore possible.") endif() #compilation_of__demo_framework is defined in polyhedron_demo_macros.cmake @@ -204,29 +224,29 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) # CMake). That is to deal with the visibility of symbols of # `Three.h`/`Three.cpp`. target_compile_definitions(demo_framework PRIVATE three_EXPORTS=1) - target_compile_definitions(demo_framework PRIVATE -DCGAL_USE_Qt5_RESOURCES) + target_compile_definitions(demo_framework PRIVATE -DCGAL_USE_Qt6_RESOURCES) add_library(scene_basic_objects SHARED Scene_plane_item.cpp Scene_spheres_item.cpp) target_link_libraries( - scene_basic_objects PUBLIC demo_framework ${CGAL_LIBRARIES} Qt5::OpenGL - Qt5::Gui Qt5::Script Qt5::Widgets) + scene_basic_objects PUBLIC demo_framework ${CGAL_LIBRARIES} Qt6::OpenGLWidgets + Qt6::Gui Qt6::Widgets) add_library(scene_color_ramp SHARED Color_ramp.cpp) - target_link_libraries(scene_color_ramp PRIVATE Qt5::Core) + target_link_libraries(scene_color_ramp PRIVATE Qt6::Core) add_library(scene_callback_signaler SHARED Callback_signaler.cpp) - target_link_libraries(scene_callback_signaler PRIVATE Qt5::Core) + target_link_libraries(scene_callback_signaler PRIVATE Qt6::Core) add_library(point_dialog SHARED Show_point_dialog.cpp Show_point_dialog.ui ${Show_point_dialogUI_FILES}) - target_link_libraries(point_dialog PUBLIC Qt5::OpenGL Qt5::Gui Qt5::Script - Qt5::Widgets) + target_link_libraries(point_dialog PUBLIC Qt6::OpenGLWidgets Qt6::Gui + Qt6::Widgets) macro(add_item item_name) add_library(${item_name} SHARED ${ARGN}) target_link_libraries( - ${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt5::OpenGL Qt5::Gui - Qt5::Script Qt5::Widgets) + ${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt6::OpenGLWidgets Qt6::Gui + Qt6::Widgets) add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${item_name}) endmacro(add_item) @@ -286,7 +306,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) add_item(scene_textured_item Scene_textured_surface_mesh_item.cpp texture.cpp) target_link_libraries(scene_textured_item PUBLIC CGAL::Eigen3_support) - qt5_wrap_ui(editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui) + qt6_wrap_ui(editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui) add_item(scene_edit_item Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp ${editionUI_FILES}) @@ -337,35 +357,35 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) Polyhedron_demo.cpp File_loader_dialog_moc.cpp Use_ssh.cpp - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES} + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES} ${FileLoaderDialogUI_files} ${MainWindowUI_files} ${PreferencesUI_FILES} ${statisticsUI_FILES} ${SubViewerUI_files}) target_link_libraries( - polyhedron_demo PUBLIC demo_framework point_dialog Qt5::Gui Qt5::OpenGL - Qt5::Widgets Qt5::Script) + polyhedron_demo PUBLIC demo_framework point_dialog Qt6::Gui Qt6::OpenGLWidgets + Qt6::Widgets ) if(LIBSSH_FOUND) target_compile_definitions(polyhedron_demo PRIVATE -DCGAL_USE_SSH) target_link_libraries(polyhedron_demo PRIVATE ${LIBSSH_LIBRARIES}) target_include_directories(polyhedron_demo SYSTEM PRIVATE ${LIBSSH_INCLUDE_DIR}) endif() #libssh - if(TARGET Qt5::WebSockets) + if(TARGET Qt6::WebSockets) target_compile_definitions(polyhedron_demo PRIVATE -DCGAL_USE_WEBSOCKETS) target_compile_definitions(demo_framework PRIVATE -DCGAL_USE_WEBSOCKETS) - target_link_libraries(polyhedron_demo PRIVATE Qt5::WebSockets) + target_link_libraries(polyhedron_demo PRIVATE Qt6::WebSockets) endif() add_executable(Polyhedron_3 Polyhedron_3.cpp) target_link_libraries(Polyhedron_3 PRIVATE polyhedron_demo) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Polyhedron_3) if(POLYHEDRON_QTSCRIPT_DEBUGGER) - if(TARGET Qt5::ScriptTools) - target_link_libraries(polyhedron_demo PUBLIC Qt5::ScriptTools) + if(TARGET Qt6::ScriptTools) + target_link_libraries(polyhedron_demo PUBLIC Qt6::ScriptTools) else() - message(STATUS "POLYHEDRON_QTSCRIPT_DEBUGGER is set to TRUE but the Qt5 ScriptTools library was not found.") + message(STATUS "POLYHEDRON_QTSCRIPT_DEBUGGER is set to TRUE but the Qt6 ScriptTools library was not found.") endif() endif() target_link_libraries(Polyhedron_3 PRIVATE demo_framework) @@ -409,23 +429,23 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) add_to_cached_list(CGAL_EXECUTABLE_TARGETS CGAL_PMP) #WS Server - if(TARGET Qt5::WebSockets AND TARGET Qt5::Network) + if(TARGET Qt6::WebSockets AND TARGET Qt6::Network) add_executable(WS_server Server_ws.cpp) - target_link_libraries(WS_server PUBLIC Qt5::WebSockets Qt5::Widgets Qt5::Network) - message(STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.") + target_link_libraries(WS_server PUBLIC Qt6::WebSockets Qt6::Widgets Qt6::Network) + message(STATUS "Qt6WebSockets was found. Using WebSockets is therefore possible.") endif() # # Exporting # - if(TARGET CGAL_Qt5) + if(TARGET CGAL_Qt6) export( - TARGETS CGAL CGAL_Qt5 CGAL_ImageIO + TARGETS CGAL CGAL_Qt6 CGAL_ImageIO FILE polyhedron_demo_targets.cmake NAMESPACE Polyhedron_) endif() - if(TARGET CGAL_Qt5_moc_and_resources) + if(TARGET CGAL_Qt6_moc_and_resources) export( - TARGETS CGAL_Qt5_moc_and_resources + TARGETS CGAL_Qt6_moc_and_resources NAMESPACE Polyhedron_ APPEND FILE polyhedron_demo_targets.cmake) endif() @@ -447,21 +467,21 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) CGAL_polyhedron_demoConfig.cmake) #TO DO script the activation of all the plugins. -else(CGAL_Qt5_FOUND AND Qt5_FOUND) +else(CGAL_Qt6_FOUND AND Qt6_FOUND) set(POLYHEDRON_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(POLYHEDRON_MISSING_DEPS "the CGAL Qt5 library, ${POLYHEDRON_MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(POLYHEDRON_MISSING_DEPS "the CGAL Qt6 library, ${POLYHEDRON_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(POLYHEDRON_MISSING_DEPS "Qt5, ${POLYHEDRON_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(POLYHEDRON_MISSING_DEPS "Qt6, ${POLYHEDRON_MISSING_DEPS}") endif() - message("NOTICE: This demo requires ${POLYHEDRON_MISSING_DEPS} and will not be compiled.") + message("NOTICE: XX This demo requires ${POLYHEDRON_MISSING_DEPS} and will not be compiled.") -endif(CGAL_Qt5_FOUND AND Qt5_FOUND) +endif(CGAL_Qt6_FOUND AND Qt6_FOUND) feature_summary( WHAT REQUIRED_PACKAGES_NOT_FOUND diff --git a/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/CMakeLists.txt index 89b5b8ea92a1..3f6540236e37 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/CMakeLists.txt @@ -1,7 +1,7 @@ include(polyhedron_demo_macros) #if the plugin has a UI file -qt5_wrap_ui(alpha_wrap_3UI_FILES alpha_wrap_3_dialog.ui) +qt6_wrap_ui(alpha_wrap_3UI_FILES alpha_wrap_3_dialog.ui) polyhedron_demo_plugin(alpha_wrap_3_plugin Alpha_wrap_3_plugin ${alpha_wrap_3UI_FILES}) #if the plugin uses external libraries like scene_items diff --git a/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt index 35c19f5a82aa..e080e6837a31 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt @@ -1,6 +1,6 @@ include( polyhedron_demo_macros ) -qt5_wrap_ui( cameraUI_FILES Camera_positions_list.ui ) +qt6_wrap_ui( cameraUI_FILES Camera_positions_list.ui ) polyhedron_demo_plugin(camera_positions_plugin Camera_positions_plugin Camera_positions_list.cpp diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt index 86d60a563194..7b8cafbb3c41 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt @@ -20,7 +20,7 @@ if(TARGET CGAL::Eigen3_support) message(STATUS "NOTICE: OpenCV was not found. OpenCV random forest predicate for classification won't be available.") endif() - qt5_wrap_ui(classificationUI_FILES Classification_widget.ui + qt6_wrap_ui(classificationUI_FILES Classification_widget.ui Classification_advanced_widget.ui) polyhedron_demo_plugin( classification_plugin diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt index 6e1c99909175..3831b4679a13 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt @@ -1,6 +1,6 @@ include(polyhedron_demo_macros) if(TARGET CGAL::Eigen3_support) - qt5_wrap_ui( display_propertyUI_FILES Display_property.ui ) + qt6_wrap_ui( display_propertyUI_FILES Display_property.ui ) polyhedron_demo_plugin(display_property_plugin Display_property_plugin ${display_propertyUI_FILES} KEYWORDS Viewer) target_link_libraries(display_property_plugin PUBLIC diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt index 0d4300700dc9..ec7b583d8a28 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt @@ -11,7 +11,7 @@ include(CGAL_LASLIB_support) polyhedron_demo_plugin(gocad_plugin GOCAD_io_plugin KEYWORDS Viewer) target_link_libraries(gocad_plugin PUBLIC scene_surface_mesh_item) -qt5_wrap_ui( funcUI_FILES Function_dialog.ui ) +qt6_wrap_ui( funcUI_FILES Function_dialog.ui ) polyhedron_demo_plugin(io_implicit_function_plugin Implicit_function_io_plugin ${funcUI_FILES} diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt index e4336410f023..3f3be1c57aac 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt @@ -1,6 +1,6 @@ include(polyhedron_demo_macros) #if the plugin has a UI file -qt5_wrap_ui(mesh_2UI_FILES mesh_2_dialog.ui) +qt6_wrap_ui(mesh_2UI_FILES mesh_2_dialog.ui) polyhedron_demo_plugin(mesh_2_plugin Mesh_2_plugin ${mesh_2UI_FILES}) #if the plugin uses external libraries like scene_items target_link_libraries( diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 9bf2f376761b..7343e7e215cd 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -2,11 +2,11 @@ include(polyhedron_demo_macros) remove_definitions(-DQT_STATICPLUGIN) -qt5_wrap_cpp(VOLUME_MOC_OUTFILES +qt6_wrap_cpp(VOLUME_MOC_OUTFILES ${CMAKE_CURRENT_SOURCE_DIR}/Volume_plane_thread.h) -qt5_wrap_cpp(VOLUME_MOC_OUTFILES +qt6_wrap_cpp(VOLUME_MOC_OUTFILES ${CMAKE_CURRENT_SOURCE_DIR}/Volume_plane_interface.h) -qt5_wrap_ui(meshingUI_FILES Meshing_dialog.ui Smoother_dialog.ui +qt6_wrap_ui(meshingUI_FILES Meshing_dialog.ui Smoother_dialog.ui Local_optimizers_dialog.ui) polyhedron_demo_plugin( mesh_3_plugin @@ -55,7 +55,7 @@ endif() find_package(Boost QUIET OPTIONAL_COMPONENTS filesystem system) if(Boost_FILESYSTEM_FOUND) - qt5_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui) + qt6_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui) polyhedron_demo_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp Raw_image_dialog.cpp @@ -101,11 +101,11 @@ endif() polyhedron_demo_plugin(c3t3_io_plugin C3t3_io_plugin KEYWORDS Viewer Mesh_3) target_link_libraries(c3t3_io_plugin PUBLIC scene_c3t3_item) -qt5_wrap_ui(tetraUI_FILES Tetrahedra_filter_widget.ui) +qt6_wrap_ui(tetraUI_FILES Tetrahedra_filter_widget.ui) polyhedron_demo_plugin(tetrahedra_filtering_plugin Tetrahedra_filtering_plugin ${tetraUI_FILES} KEYWORDS Mesh_3 Viewer) target_link_libraries(tetrahedra_filtering_plugin PUBLIC scene_c3t3_item scene_tetrahedra_item) -qt5_wrap_ui(ribUI_FILES Rib_dialog.ui) +qt6_wrap_ui(ribUI_FILES Rib_dialog.ui) polyhedron_demo_plugin(c3t3_rib_exporter_plugin C3t3_rib_exporter_plugin ${ribUI_FILES} KEYWORDS Mesh_3) target_link_libraries(c3t3_rib_exporter_plugin PUBLIC scene_c3t3_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt index 628d00b72d34..2e030be7f6df 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt @@ -1,5 +1,5 @@ include(polyhedron_demo_macros) -qt5_wrap_ui(clip_polyhedronUI_FILES Clip_polyhedron_plugin.ui) +qt6_wrap_ui(clip_polyhedronUI_FILES Clip_polyhedron_plugin.ui) polyhedron_demo_plugin(clip_polyhedron_plugin Clip_polyhedron_plugin ${clip_polyhedronUI_FILES}) target_link_libraries( @@ -16,12 +16,12 @@ target_link_libraries( polyhedron_demo_plugin(diff_between_meshes_plugin Diff_between_meshes_plugin) target_link_libraries(diff_between_meshes_plugin PUBLIC scene_surface_mesh_item) - qt5_wrap_ui( animateUI_FILES Animate_widget.ui ) + qt6_wrap_ui( animateUI_FILES Animate_widget.ui ) polyhedron_demo_plugin(animate_mesh_plugin Animate_mesh_plugin ${animateUI_FILES}) target_link_libraries(animate_mesh_plugin PUBLIC scene_surface_mesh_item) if( TARGET CGAL::METIS_support ) - qt5_wrap_ui( partitionUI_FILES PartitionDialog.ui ) + qt6_wrap_ui( partitionUI_FILES PartitionDialog.ui ) polyhedron_demo_plugin(partition_plugin Partition_graph_plugin ${partitionUI_FILES}) target_link_libraries(partition_plugin PUBLIC scene_surface_mesh_item CGAL::METIS_support ) else() diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt index 4171347a6dcc..ccc765452927 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt @@ -4,7 +4,7 @@ target_link_libraries( pca_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_basic_objects) -qt5_wrap_ui(transformUI_FILES Transformation_widget.ui MeshOnGrid_dialog.ui) +qt6_wrap_ui(transformUI_FILES Transformation_widget.ui MeshOnGrid_dialog.ui) polyhedron_demo_plugin(affine_transform_plugin Affine_transform_plugin ${transformUI_FILES} KEYWORDS PointSetProcessing) @@ -16,7 +16,7 @@ polyhedron_demo_plugin(edit_box_plugin Edit_box_plugin) target_link_libraries(edit_box_plugin PUBLIC scene_edit_box_item scene_surface_mesh_item) -qt5_wrap_ui(clipUI_FILES Clipping_box_widget.ui) +qt6_wrap_ui(clipUI_FILES Clipping_box_widget.ui) polyhedron_demo_plugin(clipping_box_plugin Clipping_box_plugin ${clipUI_FILES}) target_link_libraries(clipping_box_plugin PUBLIC scene_edit_box_item scene_basic_objects) @@ -29,7 +29,7 @@ target_link_libraries( create_obb_mesh_plugin PUBLIC scene_surface_mesh_item scene_selection_item scene_points_with_normal_item) -qt5_wrap_ui(volumesUI_FILES Basic_generator_widget.ui) +qt6_wrap_ui(volumesUI_FILES Basic_generator_widget.ui) polyhedron_demo_plugin( basic_generator_plugin Basic_generator_plugin ${volumesUI_FILES} KEYWORDS PolygonMesh PointSetProcessing) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 6ff2b7c356dc..3abd47002122 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -15,15 +15,15 @@ target_link_libraries(extrude_plugin PUBLIC scene_surface_mesh_item if(TARGET CGAL::Eigen3_support) if("${EIGEN3_VERSION}" VERSION_GREATER "3.1.90") - qt5_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) + qt6_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) polyhedron_demo_plugin(hole_filling_plugin Hole_filling_plugin ${hole_fillingUI_FILES} KEYWORDS PMP) target_link_libraries(hole_filling_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_selection_item CGAL::Eigen3_support) - qt5_wrap_ui( fairingUI_FILES Fairing_widget.ui) + qt6_wrap_ui( fairingUI_FILES Fairing_widget.ui) polyhedron_demo_plugin(fairing_plugin Fairing_plugin ${fairingUI_FILES} KEYWORDS PMP) target_link_libraries(fairing_plugin PUBLIC scene_selection_item CGAL::Eigen3_support) - qt5_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) + qt6_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) polyhedron_demo_plugin(mean_curvature_flow_skeleton_plugin Mean_curvature_flow_skeleton_plugin ${Mean_curvature_flow_skeleton_pluginUI_FILES}) target_link_libraries(mean_curvature_flow_skeleton_plugin PUBLIC @@ -34,7 +34,7 @@ if(TARGET CGAL::Eigen3_support) demo_framework CGAL::Eigen3_support) # The smoothing plugin can still do some things, even if Ceres is not found - qt5_wrap_ui( smoothingUI_FILES Smoothing_plugin.ui Smoothing_tangential_relaxation.ui) + qt6_wrap_ui( smoothingUI_FILES Smoothing_plugin.ui Smoothing_tangential_relaxation.ui) polyhedron_demo_plugin(smoothing_plugin Smoothing_plugin ${smoothingUI_FILES}) target_link_libraries(smoothing_plugin PUBLIC scene_surface_mesh_item scene_selection_item CGAL::Eigen3_support) find_package(Ceres QUIET) @@ -49,7 +49,7 @@ if(TARGET CGAL::Eigen3_support) PURPOSE "Can be used as a solver in the smoothing plugin.") target_link_libraries(extrude_plugin PUBLIC CGAL::Eigen3_support) - qt5_wrap_ui(remeshPlanarPatchesUI_FILES Remesh_planar_patches_dialog.ui) + qt6_wrap_ui(remeshPlanarPatchesUI_FILES Remesh_planar_patches_dialog.ui) polyhedron_demo_plugin(remesh_planar_patches_plugin Remesh_planar_patches_plugin ${remeshPlanarPatchesUI_FILES} KEYWORDS PMP) target_link_libraries(remesh_planar_patches_plugin PUBLIC scene_surface_mesh_item CGAL::Eigen3_support) @@ -71,7 +71,7 @@ else() message(STATUS "NOTICE: The hole filling and fairing plugins require Eigen 3.2 (or higher) and will not be available.") endif() -qt5_wrap_ui(soupUI_FILES Repair_soup.ui) +qt6_wrap_ui(soupUI_FILES Repair_soup.ui) polyhedron_demo_plugin(orient_soup_plugin Orient_soup_plugin ${soupUI_FILES} KEYWORDS Classification PMP) target_link_libraries( @@ -85,18 +85,18 @@ target_link_libraries(inside_out_plugin PUBLIC scene_surface_mesh_item scene_pol polyhedron_demo_plugin(join_and_split_plugin Join_and_split_polyhedra_plugin KEYWORDS PMP) target_link_libraries(join_and_split_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -qt5_wrap_ui( point_inside_polyhedronUI_FILES Point_inside_polyhedron_widget.ui) +qt6_wrap_ui( point_inside_polyhedronUI_FILES Point_inside_polyhedron_widget.ui) polyhedron_demo_plugin(point_inside_polyhedron_plugin Point_inside_polyhedron_plugin ${point_inside_polyhedronUI_FILES}) target_link_libraries(point_inside_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item) -qt5_wrap_ui( polyhedron_slicerUI_FILES Polyhedron_slicer_widget.ui) +qt6_wrap_ui( polyhedron_slicerUI_FILES Polyhedron_slicer_widget.ui) polyhedron_demo_plugin(polyhedron_slicer_plugin Polyhedron_slicer_plugin ${polyhedron_slicerUI_FILES}) target_link_libraries(polyhedron_slicer_plugin PUBLIC scene_surface_mesh_item scene_basic_objects scene_polylines_item) polyhedron_demo_plugin(polyhedron_stitching_plugin Polyhedron_stitching_plugin KEYWORDS PMP) target_link_libraries(polyhedron_stitching_plugin PUBLIC scene_surface_mesh_item scene_polylines_item) -qt5_wrap_ui( selectionUI_FILES Selection_widget.ui) +qt6_wrap_ui( selectionUI_FILES Selection_widget.ui) polyhedron_demo_plugin(selection_plugin Selection_plugin ${selectionUI_FILES} KEYWORDS PMP Viewer Classification Mesh_3) target_link_libraries(selection_plugin PUBLIC scene_selection_item scene_points_with_normal_item scene_polylines_item) @@ -117,11 +117,11 @@ target_link_libraries( PUBLIC scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) -qt5_wrap_ui( repairUI_FILES RemoveNeedlesDialog.ui SelfSnapDialog.ui) +qt6_wrap_ui( repairUI_FILES RemoveNeedlesDialog.ui SelfSnapDialog.ui) polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin ${repairUI_FILES} KEYWORDS PMP) target_link_libraries(repair_polyhedron_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item) -qt5_wrap_ui(isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) +qt6_wrap_ui(isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES} KEYWORDS PMP) target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_surface_mesh_item @@ -141,7 +141,7 @@ endif() polyhedron_demo_plugin(detect_sharp_edges_plugin Detect_sharp_edges_plugin KEYWORDS Viewer Mesh_3 PMP) target_link_libraries(detect_sharp_edges_plugin PUBLIC scene_surface_mesh_item) -qt5_wrap_ui(randomPerturbationUI_FILES Random_perturbation_dialog.ui) +qt6_wrap_ui(randomPerturbationUI_FILES Random_perturbation_dialog.ui) polyhedron_demo_plugin(random_perturbation_plugin Random_perturbation_plugin ${randomPerturbationUI_FILES} KEYWORDS PMP) target_link_libraries(random_perturbation_plugin PUBLIC scene_surface_mesh_item @@ -152,7 +152,7 @@ polyhedron_demo_plugin(degenerated_faces_plugin Degenerated_faces_plugin target_link_libraries(degenerated_faces_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -qt5_wrap_ui(engravUI_FILES Engrave_dock_widget.ui) +qt6_wrap_ui(engravUI_FILES Engrave_dock_widget.ui) polyhedron_demo_plugin(engrave_text_plugin Engrave_text_plugin ${engravUI_FILES}) target_link_libraries( diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index 1955755b2dbb..3bade0d26e6e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -24,7 +24,7 @@ if(TARGET CGAL::Eigen3_support) message(STATUS "NOTICE: SCIP and GLPK were not found. Polygonal surface reconstruction will not be available.") endif() - qt5_wrap_ui(surface_reconstructionUI_FILES Surface_reconstruction_plugin.ui) + qt6_wrap_ui(surface_reconstructionUI_FILES Surface_reconstruction_plugin.ui) polyhedron_demo_plugin( surface_reconstruction_plugin Surface_reconstruction_plugin @@ -46,7 +46,7 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(surface_reconstruction_plugin PUBLIC CGAL::GLPK_support) endif() - qt5_wrap_ui(point_set_normal_estimationUI_FILES + qt6_wrap_ui(point_set_normal_estimationUI_FILES Point_set_normal_estimation_plugin.ui) polyhedron_demo_plugin( point_set_normal_estimation_plugin Point_set_normal_estimation_plugin @@ -57,7 +57,7 @@ if(TARGET CGAL::Eigen3_support) PUBLIC scene_points_with_normal_item scene_callback_signaler CGAL::Eigen3_support) - qt5_wrap_ui(features_detection_pluginUI_FILES Features_detection_plugin.ui) + qt6_wrap_ui(features_detection_pluginUI_FILES Features_detection_plugin.ui) polyhedron_demo_plugin( features_detection_plugin Features_detection_plugin ${features_detection_pluginUI_FILES} KEYWORDS PointSetProcessing) @@ -80,7 +80,7 @@ if(TARGET CGAL::Eigen3_support) PUBLIC scene_points_with_normal_item scene_callback_signaler CGAL::Eigen3_support) - qt5_wrap_ui(point_set_shape_detectionUI_FILES + qt6_wrap_ui(point_set_shape_detectionUI_FILES Point_set_shape_detection_plugin.ui) polyhedron_demo_plugin( point_set_shape_detection_plugin Point_set_shape_detection_plugin @@ -97,7 +97,7 @@ if(TARGET CGAL::Eigen3_support) include(CGAL_pointmatcher_support) if(TARGET CGAL::OpenGR_support OR CGAL::pointmatcher_support) - qt5_wrap_ui(register_point_setsUI_FILES Register_point_sets_plugin.ui) + qt6_wrap_ui(register_point_setsUI_FILES Register_point_sets_plugin.ui) polyhedron_demo_plugin( register_point_sets_plugin Register_point_sets_plugin ${register_point_setsUI_FILES} KEYWORDS PointSetProcessing) @@ -123,7 +123,7 @@ else() message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Feature detection plugin will not be available.") endif() -qt5_wrap_ui(point_set_bilateral_smoothingUI_FILES +qt6_wrap_ui(point_set_bilateral_smoothingUI_FILES Point_set_bilateral_smoothing_plugin.ui) polyhedron_demo_plugin( point_set_bilateral_smoothing_plugin Point_set_bilateral_smoothing_plugin @@ -132,7 +132,7 @@ target_link_libraries( point_set_bilateral_smoothing_plugin PUBLIC scene_points_with_normal_item scene_callback_signaler) -qt5_wrap_ui(ps_outliers_removal_UI_FILES Point_set_outliers_removal_plugin.ui) +qt6_wrap_ui(ps_outliers_removal_UI_FILES Point_set_outliers_removal_plugin.ui) polyhedron_demo_plugin( point_set_outliers_removal_plugin Point_set_outliers_removal_plugin ${ps_outliers_removal_UI_FILES} KEYWORDS PointSetProcessing) @@ -140,7 +140,7 @@ target_link_libraries( point_set_outliers_removal_plugin PUBLIC scene_points_with_normal_item scene_callback_signaler) -qt5_wrap_ui(point_set_selectionUI_FILES Point_set_selection_widget.ui) +qt6_wrap_ui(point_set_selectionUI_FILES Point_set_selection_widget.ui) polyhedron_demo_plugin( point_set_selection_plugin Point_set_selection_plugin ${point_set_selectionUI_FILES} KEYWORDS PointSetProcessing Classification) @@ -148,7 +148,7 @@ target_link_libraries( point_set_selection_plugin PUBLIC scene_points_with_normal_item scene_polylines_item scene_edit_box_item) -qt5_wrap_ui(point_set_simplificationUI_FILES Point_set_simplification_plugin.ui) +qt6_wrap_ui(point_set_simplificationUI_FILES Point_set_simplification_plugin.ui) polyhedron_demo_plugin( point_set_simplification_plugin Point_set_simplification_plugin ${point_set_simplificationUI_FILES} KEYWORDS PointSetProcessing) @@ -156,14 +156,14 @@ target_link_libraries( point_set_simplification_plugin PUBLIC scene_points_with_normal_item scene_callback_signaler) -qt5_wrap_ui(point_set_upsamplingUI_FILES Point_set_upsampling_plugin.ui) +qt6_wrap_ui(point_set_upsamplingUI_FILES Point_set_upsampling_plugin.ui) polyhedron_demo_plugin( point_set_upsampling_plugin Point_set_upsampling_plugin ${point_set_upsamplingUI_FILES} KEYWORDS PointSetProcessing) target_link_libraries(point_set_upsampling_plugin PUBLIC scene_points_with_normal_item) -qt5_wrap_ui(point_set_wlopFILES Point_set_wlop_plugin.ui) +qt6_wrap_ui(point_set_wlopFILES Point_set_wlop_plugin.ui) polyhedron_demo_plugin(point_set_wlop_plugin Point_set_wlop_plugin ${point_set_wlopFILES} KEYWORDS PointSetProcessing) target_link_libraries(point_set_wlop_plugin PUBLIC scene_points_with_normal_item @@ -186,13 +186,13 @@ polyhedron_demo_plugin( target_link_libraries(point_set_interference_plugin PUBLIC scene_points_with_normal_item) -qt5_wrap_ui(alpha_shapeUI_FILES Alpha_shape_widget.ui) +qt6_wrap_ui(alpha_shapeUI_FILES Alpha_shape_widget.ui) polyhedron_demo_plugin(alpha_shape_plugin Alpha_shape_plugin ${alpha_shapeUI_FILES} KEYWORDS PointSetProcessing) target_link_libraries(alpha_shape_plugin PUBLIC scene_points_with_normal_item scene_c3t3_item) -qt5_wrap_ui(distanceUI_FILES Point_set_to_mesh_distance_widget.ui) +qt6_wrap_ui(distanceUI_FILES Point_set_to_mesh_distance_widget.ui) polyhedron_demo_plugin( point_set_to_mesh_distance_plugin Point_set_to_mesh_distance_plugin ${distanceUI_FILES} KEYWORDS PointSetProcessing) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index 4e553fbde16a..1c211311a738 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -9,7 +9,7 @@ if(NOT CGAL_DISABLE_GMP) include(${CGAL_USE_FILE}) - qt5_wrap_ui(parameterizationUI_FILES Parameterization_widget.ui OTE_dialog.ui) + qt6_wrap_ui(parameterizationUI_FILES Parameterization_widget.ui OTE_dialog.ui) polyhedron_demo_plugin(parameterization_plugin Parameterization_plugin ${parameterizationUI_FILES}) target_link_libraries( @@ -26,7 +26,7 @@ if(NOT CGAL_DISABLE_GMP) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. The Parameterization plugin will not be available.") endif() - qt5_wrap_ui(segmentationUI_FILES Mesh_segmentation_widget.ui) + qt6_wrap_ui(segmentationUI_FILES Mesh_segmentation_widget.ui) polyhedron_demo_plugin(mesh_segmentation_plugin Mesh_segmentation_plugin ${segmentationUI_FILES}) target_link_libraries(mesh_segmentation_plugin PUBLIC scene_surface_mesh_item) @@ -37,11 +37,11 @@ if(NOT CGAL_DISABLE_GMP) PROPERTIES RESOURCE_LOCK Selection_test_resources) endif() - qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) + qt6_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) target_link_libraries(mesh_simplification_plugin PUBLIC scene_surface_mesh_item scene_selection_item) - qt5_wrap_ui(remeshingUI_FILES Remeshing_dialog.ui) + qt6_wrap_ui(remeshingUI_FILES Remeshing_dialog.ui) polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) target_link_libraries(offset_meshing_plugin PUBLIC scene_surface_mesh_item @@ -54,14 +54,14 @@ if(NOT CGAL_DISABLE_GMP) target_link_libraries(offset_meshing_plugin PUBLIC CGAL::TBB_support) endif() - qt5_wrap_ui(shortestPathUI_FILES Shortest_path_widget.ui) + qt6_wrap_ui(shortestPathUI_FILES Shortest_path_widget.ui) polyhedron_demo_plugin(shortest_path_plugin Shortest_path_plugin ${shortestPathUI_FILES}) target_link_libraries( shortest_path_plugin PUBLIC scene_surface_mesh_item scene_shortest_path_item scene_basic_objects) - qt5_wrap_ui(basicUI_FILES Surface_mesh_approximation_dockwidget.ui) + qt6_wrap_ui(basicUI_FILES Surface_mesh_approximation_dockwidget.ui) polyhedron_demo_plugin( surface_mesh_approximation_plugin Surface_mesh_approximation_plugin ${basicUI_FILES} VSA_wrapper.cpp) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/CMakeLists.txt index a7547b6e19cd..15dc949776e9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/CMakeLists.txt @@ -2,12 +2,12 @@ include(polyhedron_demo_macros) remove_definitions(-DQT_STATICPLUGIN) -qt5_wrap_cpp(VOLUME_MOC_OUTFILES +qt6_wrap_cpp(VOLUME_MOC_OUTFILES ${CMAKE_CURRENT_SOURCE_DIR}/Volume_plane_thread.h) -qt5_wrap_cpp(VOLUME_MOC_OUTFILES +qt6_wrap_cpp(VOLUME_MOC_OUTFILES ${CMAKE_CURRENT_SOURCE_DIR}/Volume_plane_interface.h) -qt5_wrap_ui(tetRemeshingUI_FILES Tetrahedral_remeshing_dialog.ui) +qt6_wrap_ui(tetRemeshingUI_FILES Tetrahedral_remeshing_dialog.ui) polyhedron_demo_plugin( tetrahedral_remeshing_plugin Tetrahedral_remeshing_plugin ${tetRemeshingUI_FILES} KEYWORDS Tetrahedral_remeshing) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt index a3b77b8e4526..7ebf7feedea9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt @@ -10,22 +10,22 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) #Find CGAL -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5 ImageIO) -# Find Qt5 itself -find_package(Qt5 QUIET - COMPONENTS OpenGL Script Svg - OPTIONAL_COMPONENTS ScriptTools WebSockets) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 ImageIO) +# Find Qt6 itself +find_package(Qt6 QUIET + COMPONENTS OpenGLWidget Svg + OPTIONAL_COMPONENTS WebSockets) if(RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE) - if(Qt5_FOUND) + if(Qt6_FOUND) include(${CGAL_USE_FILE}) endif() polyhedron_demo_plugin(example_plugin Example_plugin) - qt5_wrap_ui(basicUI_FILES Basic_dialog.ui) + qt6_wrap_ui(basicUI_FILES Basic_dialog.ui) polyhedron_demo_plugin(basic_plugin Basic_plugin ${basicUI_FILES}) - qt5_wrap_ui(dockUI_FILES Basic_dock_widget.ui) + qt6_wrap_ui(dockUI_FILES Basic_dock_widget.ui) polyhedron_demo_plugin(dock_widget_plugin Dock_widget_plugin ${dockUI_FILES}) polyhedron_demo_plugin(basic_item_plugin Basic_item_plugin) diff --git a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt index 98faad76be30..7e374a519dcb 100644 --- a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt @@ -19,17 +19,17 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") # Include directory of demo includes include_directories(BEFORE ${Mesh_3_implicit_functions_BINARY_DIR} ../include) -# Find CGAL and CGAL Qt5 -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +# Find CGAL and CGAL Qt6 +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -# Find Qt5 itself +# Find Qt6 itself set(QT_USE_QTXML TRUE) set(QT_USE_QTMAIN TRUE) set(QT_USE_QTSCRIPT TRUE) set(QT_USE_QTOPENGL TRUE) -find_package(Qt5 QUIET COMPONENTS Script OpenGL ScriptTools) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets ScriptTools) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) # put plugins (which are shared libraries) at the same location as # executable files set(LIBRARY_OUTPUT_PATH ${RUNTIME_OUTPUT_PATH}) @@ -47,18 +47,18 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) polyhedron_demo_plugin(p_klein_function_plugin Klein_implicit_function KEYWORDS Mesh_3) -else(CGAL_Qt5_FOUND AND Qt5_FOUND) +else(CGAL_Qt6_FOUND AND Qt6_FOUND) set(MESH_3_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(MESH_3_MISSING_DEPS "the CGAL Qt5 library, ${MESH_3_MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(MESH_3_MISSING_DEPS "the CGAL Qt6 library, ${MESH_3_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(MESH_3_MISSING_DEPS "Qt5, ${MESH_3_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(MESH_3_MISSING_DEPS "Qt6, ${MESH_3_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${MESH_3_MISSING_DEPS} and will not be compiled.") -endif(CGAL_Qt5_FOUND AND Qt5_FOUND) +endif(CGAL_Qt6_FOUND AND Qt6_FOUND) From 5030d671d5ee5a71f4eee1b8fe2ea6e1e5d1317e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 19 Apr 2023 17:06:44 +0100 Subject: [PATCH 201/943] Target Polyhedron_3 builds and executes, but with all scripting and RegExp (deprecated) commented --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 43 +++++++++++++------ Polyhedron/demo/Polyhedron/MainWindow.h | 20 +++++---- .../demo/Polyhedron/Polyhedron_demo.cpp | 4 +- Polyhedron/demo/Polyhedron/Scene.cpp | 2 +- Polyhedron/demo/Polyhedron/Scene.h | 2 +- .../demo/Polyhedron/Show_point_dialog.cpp | 5 ++- Polyhedron/demo/Polyhedron/Viewer.cpp | 3 +- .../Polyhedron/polyhedron_demo_macros.cmake | 4 +- Three/include/CGAL/Three/exceptions.h | 14 +++--- 9 files changed, 64 insertions(+), 33 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index b797ecf7a70e..4560cf9aceea 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -73,10 +73,12 @@ #include #include +#include "Color_map.h" + #ifdef QT_SCRIPT_LIB # include # include -#include "Color_map.h" + using namespace CGAL::Three; @@ -123,6 +125,7 @@ const QString debug_widgets_names[9] = { # endif #endif +#if 0 QScriptValue myPrintFunction(QScriptContext *context, QScriptEngine *engine) { MainWindow* mw = qobject_cast(engine->parent()); @@ -138,6 +141,7 @@ QScriptValue myPrintFunction(QScriptContext *context, QScriptEngine *engine) return engine->undefinedValue(); } +#endif inline QKeySequence combine(Qt::Modifier m, Qt::Key k) @@ -166,8 +170,8 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren is_locked = false; // remove the Load Script menu entry, when the demo has not been compiled with QT_SCRIPT_LIB #if !defined(QT_SCRIPT_LIB) - ui->menuBar->removeAction(ui->actionLoadScript); - ui->menuBar->removeAction(ui->on_actionLoad_a_Scene_from_a_Script_File); + // ui->menuBar->removeAction(ui->actionLoadScript); + // ui->menuBar->removeAction(ui->on_actionLoad_a_Scene_from_a_Script_File); #endif // Save some pointers from ui, for latter use. sceneView = ui->sceneView; @@ -528,6 +532,7 @@ void MainWindow::filterOperations(bool) #include +#if 0 void MainWindow::evaluate_script(QString script, const QString& filename, const bool quiet) { @@ -595,6 +600,7 @@ void MainWindow::enableScriptDebugger(bool b /* = true */) this->error(tr("Your version of Qt is too old, and for that reason " "the Qt Script Debugger is not available.")); } +#endif namespace { bool actionsByName(QAction* x, QAction* y) { @@ -650,8 +656,8 @@ bool MainWindow::load_plugin(QString fileName, bool blacklisted) QFileInfo fileinfo(fileName); //set plugin name QString name = fileinfo.fileName(); - name.remove(QRegExp("^lib")); - name.remove(QRegExp("\\..*")); + name.remove(QRegularExpression("^lib")); + name.remove(QRegularExpression("\\..*")); //do not load it if it is in the blacklist if(blacklisted) { @@ -1138,20 +1144,22 @@ bool MainWindow::file_matches_filter(const QString& filters, QString filename_striped=fileinfo.fileName(); //match all filters between () - QRegExp all_filters_rx("\\((.*)\\)"); + QRegularExpression all_filters_rx("\\((.*)\\)"); QStringList split_filters = filters.split(";;"); Q_FOREACH(const QString& filter, split_filters) { //extract filters +#if 0 // AF @todo if ( all_filters_rx.indexIn(filter)!=-1 ){ Q_FOREACH(const QString& pattern,all_filters_rx.cap(1).split(' ')){ - QRegExp rx(pattern); - rx.setPatternSyntax(QRegExp::Wildcard); + QRegularExpression rx(pattern); + rx.setPatternSyntax(QRegularExpression::Wildcard); if ( rx.exactMatch(filename_striped) ){ return true; } } } +#endif } return false; } @@ -1268,6 +1276,7 @@ void MainWindow::open(QString filename) bool MainWindow::open(QString filename, QString loader_name) { QFileInfo fileinfo(filename); boost::optional item_opt; +#if 0 // AF try { item_opt = wrap_a_call_to_cpp ([this, fileinfo, loader_name]() @@ -1284,6 +1293,7 @@ bool MainWindow::open(QString filename, QString loader_name) { std::cerr << e.what() << std::endl; return false; } +#endif return true; } @@ -1887,6 +1897,7 @@ void MainWindow::closeEvent(QCloseEvent *event) event->accept(); } +#if 0 bool MainWindow::loadScript(QString filename) { QFileInfo fileinfo(filename); @@ -1920,12 +1931,15 @@ bool MainWindow::loadScript(QFileInfo info) #endif return false; } +#endif void MainWindow::throw_exception() { +#if 0 // AF wrap_a_call_to_cpp([]() { throw std::runtime_error("Exception thrown in " "MainWindow::throw_exception()"); }, this, __FILE__, __LINE__); +#endif } void MainWindow::on_actionLoadScript_triggered() @@ -2046,7 +2060,7 @@ void MainWindow::on_actionSaveAs_triggered() sf = plugin->saveNameFilters().split(";;").first(); } } - QRegExp extensions("\\(\\*\\..+\\)"); + QRegularExpression extensions("\\(\\*\\..+\\)"); QStringList filter_exts; if(filters.empty()) { @@ -2056,6 +2070,7 @@ void MainWindow::on_actionSaveAs_triggered() .arg(item->name())); return; } +#if 0 // AF Q_FOREACH(QString string, filters) { QStringList sl = string.split(";;"); @@ -2065,6 +2080,8 @@ void MainWindow::on_actionSaveAs_triggered() filter_exts.append(extensions.capturedTexts()); } } +#endif + filters << tr("All files (*)"); if(canSavePlugins.isEmpty()) { QMessageBox::warning(this, @@ -2094,9 +2111,9 @@ void MainWindow::on_actionSaveAs_triggered() if(filename.isEmpty()) return; last_saved_dir = QFileInfo(filename).absoluteDir().path(); - extensions.indexIn(sf.split(";;").first()); + // AF extensions.indexIn(sf.split(";;").first()); QString filter_ext, filename_ext; - filter_ext = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) + // AF filter_ext = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) filter_ext.remove(")"); filter_ext.remove("("); @@ -2804,9 +2821,11 @@ void MainWindow::colorItems() return; std::vector colors_; colors_.reserve(nb_files); +# compute_color_map(scene->item(scene->selectionIndices().last())->color(), static_cast(nb_files), std::back_inserter(colors_)); + std::size_t nb_item = -1; Q_FOREACH(int id, scene->selectionIndices()) { @@ -3859,7 +3878,7 @@ void MainWindow::on_actionLoad_a_Scene_from_a_Script_File_triggered() if(filename.isEmpty()) return; } - loadScript(QFileInfo(filename)); + if(do_download){ QFile tmp_file(filename); tmp_file.remove(); diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index 7202c8ac6296..f0c3adca0078 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -3,12 +3,13 @@ #include "config.h" #include "MainWindow_config.h" -#include +#include #include #include -#include -#include +// AF @todo Scripting has changed +// #include +// #include #include @@ -60,8 +61,8 @@ namespace Ui { class MAINWINDOW_EXPORT MainWindow : public CGAL::Qt::DemosMainWindow, public Messages_interface, - public CGAL::Three::Three, - protected QScriptable + public CGAL::Three::Three + // AF , protected QScriptable { Q_OBJECT Q_INTERFACES(Messages_interface) @@ -147,12 +148,13 @@ public Q_SLOTS: index of the item to be reloaded as data attached to the action. The index must identify a valid `Scene_item`.*/ void reloadItem(); - +#if 0 //! Loads a script. Returns true if it worked. bool loadScript(QString filename); //! Loads a script. Returns true if it worked. bool loadScript(QFileInfo); +#endif /*! * Gives the keyboard input focus to the widget searchEdit. @@ -261,7 +263,7 @@ public Q_SLOTS: * If able, finds a script debugger and interrupts current action. Default * value for parameter is true. */ - void enableScriptDebugger(bool = true); + // void enableScriptDebugger(bool = true); /// This slot is used to test exception handling in Qt Scripts. void throw_exception(); @@ -449,9 +451,11 @@ protected Q_SLOTS: //! Calls evaluate_script(script, filename, true). void evaluate_script_quiet(QString script, const QString & fileName = QString()); + #endif + QMutex mutex; QWaitCondition wait_condition; -#endif + public Q_SLOTS: void on_actionSa_ve_Scene_as_Script_triggered(); void on_actionLoad_a_Scene_from_a_Script_File_triggered(); diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp index 7b6e5225dfe3..6348c203eab8 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp @@ -129,10 +129,10 @@ Polyhedron_demo::Polyhedron_demo(int& argc, char **argv, } #endif - mainWindow.loadScript(":/cgal/Polyhedron_3/javascript/lib.js"); + // mainWindow.loadScript(":/cgal/Polyhedron_3/javascript/lib.js"); QFileInfo autostart_js("autostart.js"); if(!parser.isSet(no_autostart) && autostart_js.exists()) { - mainWindow.loadScript(autostart_js); + // mainWindow.loadScript(autostart_js); } Q_FOREACH(QString filename, parser.positionalArguments()) { mainWindow.open(filename); diff --git a/Polyhedron/demo/Polyhedron/Scene.cpp b/Polyhedron/demo/Polyhedron/Scene.cpp index c70929ab4a5e..8a66f7fb2cad 100644 --- a/Polyhedron/demo/Polyhedron/Scene.cpp +++ b/Polyhedron/demo/Polyhedron/Scene.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Scene.h b/Polyhedron/demo/Polyhedron/Scene.h index b661ed7baa83..0724bc577cf3 100644 --- a/Polyhedron/demo/Polyhedron/Scene.h +++ b/Polyhedron/demo/Polyhedron/Scene.h @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp index c831303083d8..1654dadf30bc 100644 --- a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp +++ b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp @@ -2,6 +2,7 @@ #include "ui_Show_point_dialog.h" #include +#include Show_point_dialog::Show_point_dialog(QWidget* parent) : QDialog(parent) @@ -50,7 +51,8 @@ void Show_point_dialog::interprete_string(const QString& string) + "|" + not_double_char_re + "+" + double_re + ")" + "$"; - QRegExp re(full_re); +#if 0 // AF @todo QRegExp had exactMatch() and cap() + QRegularExpression re(full_re); if(re.exactMatch(string)) { // const double x = re.cap(1).toDouble(); // const double y = re.cap(2).toDouble(); @@ -66,6 +68,7 @@ void Show_point_dialog::interprete_string(const QString& string) ui->coord_z->setText(QString()); m_has_correct_coordinates = false; } +#endif } double Show_point_dialog::get_x() const diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index 201e15555c50..83182e00bf2e 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #ifdef CGAL_USE_WEBSOCKETS #include @@ -1838,7 +1839,7 @@ void Viewer::setLighting() connect(dialog->position_lineEdit, &QLineEdit::editingFinished, [this, dialog]() { - QStringList list = dialog->position_lineEdit->text().split(QRegExp(","), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = dialog->position_lineEdit->text().split(QRegularExpression(","), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=3){ QMessageBox *msgBox = new QMessageBox; diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index 0e20273faa76..3b31bce3992e 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -19,7 +19,7 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) set(moc_file_name "") else() set(moc_file_name ${plugin_implementation_base_name}.moc ) - qt5_generate_moc( ${plugin_implementation_base_name}.cpp "${CMAKE_CURRENT_BINARY_DIR}/${moc_file_name}" ) + qt6_generate_moc( ${plugin_implementation_base_name}.cpp "${CMAKE_CURRENT_BINARY_DIR}/${moc_file_name}" ) add_file_dependencies( ${moc_file_name} "${CMAKE_CURRENT_SOURCE_DIR}/${plugin_implementation_base_name}.cpp" ) endif() @@ -49,7 +49,7 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) set_property(TEST "compilation_of__demo_framework" APPEND PROPERTY FIXTURES_SETUP "demo_framework_SetupFixture") set_property(TEST "compilation_of__demo_framework" - APPEND PROPERTY DEPENDS "compilation_of__CGAL_Qt5_moc_and_resources") + APPEND PROPERTY DEPENDS "compilation_of__CGAL_Qt6_moc_and_resources") endif() endif() else() diff --git a/Three/include/CGAL/Three/exceptions.h b/Three/include/CGAL/Three/exceptions.h index cf3640d5b46a..15fa13cd320d 100644 --- a/Three/include/CGAL/Three/exceptions.h +++ b/Three/include/CGAL/Three/exceptions.h @@ -19,9 +19,9 @@ #include #include #include -#include -#include -#include +//#include +//#include +//#include #include #include @@ -60,6 +60,7 @@ struct Optional_or_bool { enum Context { CURRENT_CONTEXT, PARENT_CONTEXT }; +#if 1 // AF @todo scripting has changed /// This function template wraps a `Callable` that can be called without /// any argument (such as a lambda expression without arguments), and in /// case the function call is in a Qt Script context, wraps the call in a @@ -69,7 +70,7 @@ enum Context { CURRENT_CONTEXT, PARENT_CONTEXT }; template typename Optional_or_bool::type>::type wrap_a_call_to_cpp(Callable f, - QScriptable* qs = 0, + // QScriptable* qs = 0, const char* file = 0, int line = -1, Context c = CURRENT_CONTEXT) { @@ -78,12 +79,13 @@ wrap_a_call_to_cpp(Callable f, typedef typename O_r_b::type Return_type; const bool no_try_catch = qApp->property("no-try-catch").toBool(); - if(no_try_catch || qs == 0 || !qs->context()) return O_r_b::invoke(f); + if(no_try_catch /* || qs == 0 || !qs->context() */ ) return O_r_b::invoke(f); else try { return O_r_b::invoke(f); } catch(const std::exception& e) { +#if 0 const Script_exception* se = dynamic_cast(&e); QScriptContext* context = qs->context(); QStringList qt_bt = context->backtrace(); @@ -121,9 +123,11 @@ wrap_a_call_to_cpp(Callable f, qScriptValueFromSequence(context->engine(), qt_bt)); std::cerr << "result after throwError: " << qPrintable(v.toString()) << std::endl; +#endif return Return_type(); } } +#endif } // end namespace Three } // end namespace CGAL From b80fbc83d08a059d2cfdc176009636c3216f6e4f Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 08:18:29 +0100 Subject: [PATCH 202/943] Fixes for target Mesh_3 --- .../Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp | 2 +- Polyhedron/demo/Polyhedron/Scene_plane_item.cpp | 15 +++++++++------ .../Scene_polyhedron_selection_item.cpp | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 68c3053d876b..f137b7eb46e6 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -666,7 +666,7 @@ public Q_SLOTS: QApplication::setOverrideCursor(Qt::WaitCursor); //Control widgets creation QLayout* layout = createOrGetDockLayout(); - QRegExpValidator* validator = new QRegExpValidator(QRegExp("\\d*"), this); + QRegularExpressionValidator* validator = new QRegularExpressionValidator(QRegularExpression("\\d*"), this); bool show_sliders = true; if(x_control == nullptr) { diff --git a/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp b/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp index ea241f1cd780..ba455ac0cc22 100644 --- a/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include using namespace CGAL::Three; typedef Triangle_container Tc; @@ -307,13 +307,14 @@ void Scene_plane_item::setPlaneOrientation() { bool does_match = true; //check that the result is of the form %1*x + %2*y + %3*z + %4 = 0, modulo the whitespaces. - QRegExp rx( + QRegularExpression rx( "(\\-?\\s*\\d*\\.?\\d*(?:e\\-?\\d*)?)\\s*\\*\\s*x\\s*\\+?\\s*(\\-?\\s*\\d*\\.?\\d*(?:e\\-?\\d*)?)\\s*\\*\\s*y\\s*\\+?\\s*(\\-?\\s*\\d*\\.?\\d*(?:e\\-?\\d*)?)\\s*\\*\\s*z\\s*\\+?\\s*(\\-?\\s*\\d*\\.?\\d*(?:e\\-?\\d*)?)\\s*=\\s*0" ); const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); QVector3D qoffset(offset.x, offset.y, offset.z); const CGAL::qglviewer::Vec& pos = frame->position(); const CGAL::qglviewer::Vec& n = frame->inverseTransformOf(CGAL::qglviewer::Vec(0.f, 0.f, 1.f)); + QRegularExpressionMatch match; do{ bool ok; @@ -327,13 +328,15 @@ void Scene_plane_item::setPlaneOrientation() &ok); if(!ok) return; - does_match = rx.exactMatch(eq); - if(!does_match) + + match = rx.match(eq); // AF: exact? + // does_match = rx.exactMatch(eq); + if(! match.hasMatch()) { QMessageBox::warning(CGAL::Three::Three::mainWindow(),"Error","The input must be of the form a*x+b*y+c*z+d=0"); } - }while(!does_match); - double a(rx.cap(1).toDouble()), b(rx.cap(2).toDouble()), c(rx.cap(3).toDouble()), d(rx.cap(4).toDouble()); + }while(! match.hasMatch()); + double a(match.captured(1).toDouble()), b(match.captured(2).toDouble()), c(match.captured(3).toDouble()), d(match.captured(4).toDouble()); Kernel_epic::Point_3 sure_point(0,0,0); if(c != 0) diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 561f3f7c8fb7..e6922054fbe2 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -1830,7 +1830,7 @@ Scene_polyhedron_selection_item::Scene_polyhedron_selection_item(Scene_face_grap { common_constructor(); QString sf = poly_item->property("source filename").toString(); - QRegExp rx("\\.(ts$|off$|obj$|ply$|stl$|surf$|vtk$|vtp$|vtu)"); + QRegularExpression rx("\\.(ts$|off$|obj$|ply$|stl$|surf$|vtk$|vtp$|vtu)"); sf.remove(rx); if(!sf.isEmpty()) setProperty("defaultSaveDir", sf); From bd78a33b206fa0efaae62314a8d96f367e6b55b8 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 09:52:25 +0100 Subject: [PATCH 203/943] PMP compiles [skip ci] --- .../Classification/Classification_plugin.cpp | 2 +- .../Plugins/PCA/Affine_transform_plugin.cpp | 2 +- .../Plugins/PCA/Basic_generator_plugin.cpp | 20 +++++++++---------- .../Scene_edit_polyhedron_item.h | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Classification_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Classification/Classification_plugin.cpp index 586c45709638..5ac906e1c560 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Classification_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Classification_plugin.cpp @@ -1389,7 +1389,7 @@ public Q_SLOTS: QAction* add_selection = label_buttons.back().menu->addAction ("Add selection to training set"); - add_selection->setShortcut(Qt::SHIFT | (Qt::Key_A + (label_button.shortcut - 'a'))); + add_selection->setShortcut(QKeySequence(Qt::SHIFT | (Qt::Key_A + (label_button.shortcut - 'a')))); // add_selection->setShortcut(Qt::Key_0 + label_buttons.size() - 1); connect(add_selection, SIGNAL(triggered()), this, diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp index 9e2af43a3186..a1ca2fe9f62d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp @@ -727,7 +727,7 @@ void Polyhedron_demo_affine_transform_plugin::normalize(Item* item) double max = (std::max)((double)tsr.x()-bil.x(), (double)tsr.y()-bil.y()); max = (std::max)(max, (double)tsr.z()-bil.z()); QVector3D v_bil= QVector3D(bil.x(),bil.y(),bil.z()); - QMatrix4x4 frameMat = QMatrix(); + QMatrix4x4 frameMat = QMatrix4x4(); QVector3D center(item->center().x, item->center().y, item->center().z); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index c7a62533106d..4397d8f9362a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -369,7 +369,7 @@ void Basic_generator_plugin::generateCube() for(int i=0; i<8; ++i) { - QStringList list = point_texts[i].split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = point_texts[i].split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=3){ QMessageBox *msgBox = new QMessageBox; @@ -410,7 +410,7 @@ void Basic_generator_plugin::generateCube() else { QString text = dock_widget->extremaEdit->text(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=6){ QMessageBox *msgBox = new QMessageBox; @@ -461,7 +461,7 @@ void Basic_generator_plugin::generatePrism() bool is_closed = dock_widget->prismCheckBox->isChecked(); QString text = dock_widget->prism_lineEdit->text(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=3){ QMessageBox *msgBox = new QMessageBox; @@ -508,7 +508,7 @@ void Basic_generator_plugin::generatePyramid() bool is_closed = dock_widget->pyramidCheckBox->isChecked(); QString text = dock_widget->pyramid_lineEdit->text(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=3){ QMessageBox *msgBox = new QMessageBox; @@ -551,7 +551,7 @@ void Basic_generator_plugin::generateSphere() { int precision = dock_widget->SphereSpinBox->value(); QString text = dock_widget->center_radius_lineEdit->text(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=4){ QMessageBox *msgBox = new QMessageBox; @@ -601,7 +601,7 @@ void Basic_generator_plugin::generateTetrahedron() for (int i = 0; i < 4; ++i) { - QStringList list = point_texts[i].split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = point_texts[i].split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size() != 3) { QMessageBox* msgBox = new QMessageBox; @@ -635,7 +635,7 @@ void Basic_generator_plugin::generateTetrahedron() else { QString text = dock_widget->point_textEdit_2->toPlainText(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size() != 12) { QMessageBox* msgBox = new QMessageBox; @@ -676,7 +676,7 @@ void Basic_generator_plugin::generatePoints() { QString text = dock_widget->point_textEdit->toPlainText(); Scene_points_with_normal_item* item = new Scene_points_with_normal_item(); - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); int counter = 0; double coord[3]; bool ok = true; @@ -735,7 +735,7 @@ void Basic_generator_plugin::generateLines() std::vector& polyline = *(polylines.rbegin()); QStringList polylines_metadata; - QStringList list = text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); int counter = 0; double coord[3]; bool ok = true; @@ -867,7 +867,7 @@ void Basic_generator_plugin::generateGrid() bool triangulated = dock_widget->grid_checkBox->isChecked(); points_text= dock_widget->grid_lineEdit->text(); - QStringList list = points_text.split(QRegExp("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); + QStringList list = points_text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS); if (list.isEmpty()) return; if (list.size()!=6){ QMessageBox *msgBox = new QMessageBox; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h index 3fc7b02d1ddf..bd93820384fa 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h @@ -26,9 +26,9 @@ #include #include -#include -#include -#include +#include +#include +#include typedef boost::graph_traits::vertex_descriptor sm_vertex_descriptor; From ab1d7990d2f1fe2275d4d839aa476176bbffa5db Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 11:14:11 +0100 Subject: [PATCH 204/943] various fixes [skip ci] --- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 6 ++---- Polyhedron/demo/Polyhedron/Show_point_dialog.cpp | 13 ++++++------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index c8dec4a0725d..e1ead77a2276 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -2456,10 +2456,8 @@ void CGAL::QGLViewer::setMouseBinding(::Qt::Key key, ::Qt::KeyboardModifiers mod mouseBinding_.insert(mbp, map); ClickBindingPrivate cbp(modifiers, button, false, ::Qt::NoButton, key); - - // AF: currently results in a runtime error - // clickBinding_.remove(cbp); - + clickBinding_.remove(cbp); + } diff --git a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp index 1654dadf30bc..5df594bc57c4 100644 --- a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp +++ b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp @@ -51,15 +51,16 @@ void Show_point_dialog::interprete_string(const QString& string) + "|" + not_double_char_re + "+" + double_re + ")" + "$"; -#if 0 // AF @todo QRegExp had exactMatch() and cap() + QRegularExpression re(full_re); - if(re.exactMatch(string)) { + QRegularExpressionMatch match = re.match(string); // AF @todo QRegExp had exactMatch() + if(match.hasMatch()) { // const double x = re.cap(1).toDouble(); // const double y = re.cap(2).toDouble(); // const double z = re.cap(3).toDouble(); - ui->coord_x->setText(QString(re.cap(1))); - ui->coord_y->setText(QString(re.cap(2))); - ui->coord_z->setText(QString(re.cap(3))); + ui->coord_x->setText(QString(match.captured(1))); + ui->coord_y->setText(QString(match.captured(2))); + ui->coord_z->setText(QString(match.captured(3))); m_has_correct_coordinates = true; } else { @@ -68,7 +69,6 @@ void Show_point_dialog::interprete_string(const QString& string) ui->coord_z->setText(QString()); m_has_correct_coordinates = false; } -#endif } double Show_point_dialog::get_x() const @@ -90,4 +90,3 @@ bool Show_point_dialog::has_correct_coordinates() const { return m_has_correct_coordinates; } - From c77f1443072722dd9f239303423a0114f9e8c1fb Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 11:38:47 +0100 Subject: [PATCH 205/943] various fixes [skip ci] --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 4560cf9aceea..91d3d9b1d47e 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -600,7 +600,7 @@ void MainWindow::enableScriptDebugger(bool b /* = true */) this->error(tr("Your version of Qt is too old, and for that reason " "the Qt Script Debugger is not available.")); } -#endif +#endif namespace { bool actionsByName(QAction* x, QAction* y) { @@ -2070,17 +2070,16 @@ void MainWindow::on_actionSaveAs_triggered() .arg(item->name())); return; } -#if 0 // AF + Q_FOREACH(QString string, filters) { QStringList sl = string.split(";;"); Q_FOREACH(QString s, sl){ - int pos = extensions.indexIn(s); - if( pos >-1) - filter_exts.append(extensions.capturedTexts()); + QRegularExpressionMatch match = extensions.match(s); + if(match.hasMatch()) + filter_exts.append(match.capturedTexts()); } } -#endif filters << tr("All files (*)"); if(canSavePlugins.isEmpty()) { @@ -3878,7 +3877,7 @@ void MainWindow::on_actionLoad_a_Scene_from_a_Script_File_triggered() if(filename.isEmpty()) return; } - + if(do_download){ QFile tmp_file(filename); tmp_file.remove(); From b15e0a1ea256e21a5f904f7ab27404e3ef2a8de1 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 15:54:44 +0100 Subject: [PATCH 206/943] Fix 'Save As' [skip ci] --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 91d3d9b1d47e..40e14de0d22c 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1141,25 +1141,22 @@ bool MainWindow::file_matches_filter(const QString& filters, const QString& filename ) { QFileInfo fileinfo(filename); - QString filename_striped=fileinfo.fileName(); + QString filename_stripped=fileinfo.fileName(); //match all filters between () QRegularExpression all_filters_rx("\\((.*)\\)"); QStringList split_filters = filters.split(";;"); Q_FOREACH(const QString& filter, split_filters) { - //extract filters -#if 0 // AF @todo - if ( all_filters_rx.indexIn(filter)!=-1 ){ - Q_FOREACH(const QString& pattern,all_filters_rx.cap(1).split(' ')){ - QRegularExpression rx(pattern); - rx.setPatternSyntax(QRegularExpression::Wildcard); - if ( rx.exactMatch(filename_striped) ){ - return true; + QRegularExpressionMatch match = all_filters_rx.match(filter); + if(match.hasMatch()){ + for (const QString& pattern : match.captured(1).split(' ')) { + QRegularExpressionMatch m = QRegularExpression(QRegularExpression::fromWildcard(pattern)).match(filename_stripped); + if (m.hasMatch()) { + return true; + } } } - } -#endif } return false; } From 0574c6ba4cad8e73f0902840490abea8c9da6576 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 20 Apr 2023 16:35:14 +0100 Subject: [PATCH 207/943] Change the remaining CMakeLists.txt [skip ci] --- .../demo/Alpha_shapes_3/CMakeLists.txt | 18 +++---- .../Arrangement_on_surface_2/CMakeLists.txt | 28 +++++------ .../demo/Circular_kernel_3/CMakeLists.txt | 14 +++--- .../Hyperbolic_triangulation_2/CMakeLists.txt | 20 ++++---- .../demo/Linear_cell_complex/CMakeLists.txt | 20 ++++---- .../CMakeLists.txt | 50 +++++++++---------- .../Periodic_3_triangulation_3/CMakeLists.txt | 44 ++++++++-------- .../demo/Periodic_Lloyd_3/CMakeLists.txt | 38 +++++++------- .../CMakeLists.txt | 16 +++--- .../Polyline_simplification_2/CMakeLists.txt | 16 +++--- .../CMakeLists.txt | 38 +++++++------- .../demo/Triangulation_3/CMakeLists.txt | 34 ++++++------- .../Triangulation_on_sphere_2/CMakeLists.txt | 18 +++---- 13 files changed, 177 insertions(+), 177 deletions(-) diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt index ec2a2a8dbb46..b74ed758e222 100644 --- a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt @@ -17,11 +17,11 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) @@ -29,24 +29,24 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include_directories(BEFORE ./) # ui file, created with Qt Designer - qt5_wrap_ui(uis MainWindow.ui) + qt6_wrap_ui(uis MainWindow.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Alpha_shape_3.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Alpha_shape_3.qrc) add_executable( Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp ${uis} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shape_3) - target_link_libraries(Alpha_shape_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::OpenGL Qt5::Gui) + target_link_libraries(Alpha_shape_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::OpenGLWidgets Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Alpha_shape_3) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt index 82e33197dae2..6b221f35824b 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt @@ -12,10 +12,10 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt5) -find_package(Qt5 QUIET COMPONENTS Gui Widgets) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) +find_package(Qt6 QUIET COMPONENTS Gui Widgets) -if (CGAL_Qt5_FOUND AND Qt5_FOUND) +if (CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) add_compile_definitions(QT_NO_KEYWORDS) include_directories( BEFORE ./ ) @@ -50,7 +50,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND) endif() - qt5_wrap_ui(arrangement_2_uis + qt6_wrap_ui(arrangement_2_uis ArrangementDemoWindow.ui NewTabDialog.ui OverlayDialog.ui @@ -58,7 +58,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND) AlgebraicCurveInputDialog.ui RationalCurveInputDialog.ui) - qt5_wrap_cpp(CGAL_Qt5_MOC_FILES + qt6_wrap_cpp(CGAL_Qt6_MOC_FILES ArrangementDemoWindow.h ArrangementDemoTab.h GraphicsViewCurveInput.h @@ -70,7 +70,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND) ColorItemEditor.h PropertyValueDelegate.h) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES Arrangement_on_surface_2.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES Arrangement_on_surface_2.qrc) add_executable(arrangement_2 arrangement_2.cpp @@ -107,11 +107,11 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND) ArrangementIO.cpp ${UTILS_COMPILE_FILES} ${arrangement_2_uis} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) - target_link_libraries(arrangement_2 PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets) - target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5) + target_link_libraries(arrangement_2 PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets) + target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6) if(CGAL_Core_FOUND) target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL_Core) endif() @@ -124,11 +124,11 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND) else() set(MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(MISSING_DEPS "the CGAL Qt5 library, ${MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(MISSING_DEPS "the CGAL Qt6 library, ${MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(MISSING_DEPS "Qt5, ${MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(MISSING_DEPS "Qt6, ${MISSING_DEPS}") endif() message("NOTICE: This demo requires ${MISSING_DEPS} and will not be compiled.") endif() diff --git a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt index 54c3be3aba43..85038ef29987 100644 --- a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt +++ b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt @@ -10,20 +10,20 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL) +find_package(Qt6 QUIET COMPONENTS OpenGLWidget) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_executable( Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Circular_kernel_3) - target_link_libraries(Circular_kernel_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::OpenGL Qt5::Gui) + target_link_libraries(Circular_kernel_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::OpenGLWidget Qt6::Gui) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Circular_kernel_3) @@ -33,6 +33,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt index fbdf3791ccbf..7fa99290718d 100644 --- a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt +++ b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt @@ -11,25 +11,25 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) find_package(LEDA QUIET) -# Find Qt5 itself -find_package(Qt5 QUIET COMPONENTS OpenGL Gui) +# Find Qt6 itself +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Gui) -if(CGAL_Qt5_FOUND - AND Qt5_FOUND +if(CGAL_Qt6_FOUND + AND Qt6_FOUND AND (CGAL_Core_FOUND OR LEDA_FOUND)) # ui files, created with Qt Designer - qt5_wrap_ui(UIS HDT2.ui) + qt6_wrap_ui(UIS HDT2.ui) - qt5_add_resources(RESOURCE_FILES resources/Delaunay_triangulation_2.qrc) + qt6_add_resources(RESOURCE_FILES resources/Delaunay_triangulation_2.qrc) # cpp files - add_executable ( HDT2 HDT2.cpp ${CGAL_Qt5_RESOURCE_FILES} ${RESOURCE_FILES} ${UIS}) + add_executable ( HDT2 HDT2.cpp ${CGAL_Qt6_RESOURCE_FILES} ${RESOURCE_FILES} ${UIS}) target_include_directories(HDT2 PRIVATE ./ ./include) add_to_cached_list( CGAL_EXECUTABLE_TARGETS HDT2 ) - target_link_libraries ( HDT2 CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + target_link_libraries ( HDT2 CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(CGAL_Core_FOUND) target_link_libraries ( HDT2 CGAL::CGAL_Core) else() @@ -39,5 +39,5 @@ if(CGAL_Qt5_FOUND include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test( HDT2 ) else() - message("NOTICE: This demo requires CGAL_Core (or LEDA), and Qt5 and will not be compiled.") + message("NOTICE: This demo requires CGAL_Core (or LEDA), and Qt6 and will not be compiled.") endif() diff --git a/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt b/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt index 66c6e7088aa5..cda51b9191e8 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt +++ b/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt @@ -40,26 +40,26 @@ add_definitions(-DCGAL_PROFILE_LCC_DEMO) add_definitions(-DCMAP_WITH_INDEX) # to use cc with index (handle otherwise) ################## -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg) if(NOT - (CGAL_Qt5_FOUND - AND Qt5_FOUND)) + (CGAL_Qt6_FOUND + AND Qt6_FOUND)) - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") else() add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS) # ui file, created with Qt Designer - qt5_wrap_ui(uis MainWindow.ui CreateMesh.ui CreateMenger.ui + qt6_wrap_ui(uis MainWindow.ui CreateMesh.ui CreateMenger.ui CreateSierpinskiCarpet.ui CreateSierpinskiTriangle.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Linear_cell_complex_3.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Linear_cell_complex_3.qrc) add_executable( Linear_cell_complex_3_demo @@ -73,13 +73,13 @@ else() MainWindow.h Viewer.h ${uis} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Linear_cell_complex_3_demo) target_link_libraries(Linear_cell_complex_3_demo - PUBLIC CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui Qt5::OpenGL) + PUBLIC CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui Qt6::OpenGLWidgets) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Linear_cell_complex_3_demo) diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt index 96eb570c9c94..bdb94342a0a8 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt @@ -15,15 +15,15 @@ endif() # Include this package's headers first include_directories(BEFORE ./ ./include) -# Find CGAL and CGAL Qt5 -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +# Find CGAL and CGAL Qt6 +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -# Find Qt5 itself -find_package(Qt5 5.4 QUIET COMPONENTS OpenGL) -if(Qt5_FOUND) +# Find Qt6 itself +find_package(Qt6 5.4 QUIET COMPONENTS OpenGLWidgets) +if(Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif(Qt5_FOUND) +endif(Qt6_FOUND) # Find CImg find_path( @@ -39,37 +39,37 @@ else() "Try setting the environment variable CIMG_INC_DIR to point to the path of the directory containing CImg.h.") endif() -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(SRCS glviewer.cpp scene.cpp Otr2_demo.cpp window.cpp render.cpp) - set(CGAL_Qt5_MOC_FILES moc_dialog_options.cxx moc_glviewer.cxx moc_window.cxx) + set(CGAL_Qt6_MOC_FILES moc_dialog_options.cxx moc_glviewer.cxx moc_window.cxx) set(UIS pwsrec.ui options.ui) - qt5_wrap_ui(UI_FILES ${UIS}) + qt6_wrap_ui(UI_FILES ${UIS}) include(AddFileDependencies) - qt5_generate_moc("window.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_window.cxx") + qt6_generate_moc("window.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_window.cxx") add_file_dependencies(moc_window.cxx "${CMAKE_CURRENT_SOURCE_DIR}/window.h") - qt5_generate_moc("glviewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_glviewer.cxx") + qt6_generate_moc("glviewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_glviewer.cxx") add_file_dependencies(moc_glviewer.cxx "${CMAKE_CURRENT_SOURCE_DIR}/glviewer.h") - qt5_generate_moc("dialog_options.h" + qt6_generate_moc("dialog_options.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_dialog_options.cxx") add_file_dependencies(moc_dialog_options.cxx "${CMAKE_CURRENT_SOURCE_DIR}/dialog_options.h") - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES pwsrec.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES pwsrec.qrc) - add_executable(Otr2_demo ${SRCS} ${CGAL_Qt5_MOC_FILES} ${UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES}) + add_executable(Otr2_demo ${SRCS} ${CGAL_Qt6_MOC_FILES} ${UI_FILES} + ${CGAL_Qt6_RESOURCE_FILES}) - target_link_libraries(Otr2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui - Qt5::OpenGL) + target_link_libraries(Otr2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui + Qt6::OpenGLWidgets) # Link with pthread if necessary if(CIMG_INCLUDE_DIR) @@ -88,21 +88,21 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Otr2_demo) else( - CGAL_Qt5_FOUND - AND Qt5_FOUND) + CGAL_Qt6_FOUND + AND Qt6_FOUND) set(OTR2_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(OTR2_MISSING_DEPS "the CGAL Qt5 library, ${OTR2_MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(OTR2_MISSING_DEPS "the CGAL Qt6 library, ${OTR2_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(OTR2_MISSING_DEPS "Qt5.4, ${OTR2_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(OTR2_MISSING_DEPS "Qt6.4, ${OTR2_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${OTR2_MISSING_DEPS} and will not be compiled.") endif( - CGAL_Qt5_FOUND - AND Qt5_FOUND) + CGAL_Qt6_FOUND + AND Qt6_FOUND) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt index 3692008579ee..f668d13ffdb0 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt @@ -14,37 +14,37 @@ if(POLICY CMP0071) endif() # Find CGAL -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -# Find Qt5 itself -find_package(Qt5 QUIET COMPONENTS OpenGL Help Core) +# Find Qt6 itself +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Help Core) -if(Qt5_FOUND) +if(Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif(Qt5_FOUND) +endif(Qt6_FOUND) -if(Qt5Help_VERSION VERSION_LESS 5.12) - set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt5::qcollectiongenerator) +if(Qt6Help_VERSION VERSION_LESS 5.12) + set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt6::qcollectiongenerator) else() - set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt5::qhelpgenerator) + set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt6::qhelpgenerator) endif() -if(CGAL_Qt5_FOUND - AND Qt5_FOUND +if(CGAL_Qt6_FOUND + AND Qt6_FOUND AND TARGET ${CGAL_QCOLLECTIONGENERATOR_TARGET}) # UI files (Qt Designer files) - qt5_wrap_ui(UI_FILES MainWindow.ui) + qt6_wrap_ui(UI_FILES MainWindow.ui) # qrc files (resource files) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Periodic_3_triangulation_3.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Periodic_3_triangulation_3.qrc) # use the Qt MOC preprocessor on classes that derive from QObject - qt5_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Scene.cpp") - qt5_generate_moc("MainWindow.h" + qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Scene.cpp") + qt6_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_MainWindow.cpp") - qt5_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Viewer.cpp") + qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Viewer.cpp") # generate QtAssistant collection file add_custom_command( @@ -66,14 +66,14 @@ if(CGAL_Qt5_FOUND MainWindow.ui moc_MainWindow.cpp ${UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES} + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES} Periodic_3_triangulation_3.qhc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS periodic_3_triangulation_3_demo) target_link_libraries(periodic_3_triangulation_3_demo - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::OpenGL) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGLWidgets) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(periodic_3_triangulation_3_demo) @@ -81,14 +81,14 @@ else() set(PERIODIC_TRIANGULATION_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) + if(NOT CGAL_Qt6_FOUND) set(PERIODIC_TRIANGULATION_MISSING_DEPS - "the CGAL Qt5 library, ${PERIODIC_TRIANGULATION_MISSING_DEPS}") + "the CGAL Qt6 library, ${PERIODIC_TRIANGULATION_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) + if(NOT Qt6_FOUND) set(PERIODIC_TRIANGULATION_MISSING_DEPS - "Qt5, ${PERIODIC_TRIANGULATION_MISSING_DEPS}") + "Qt6, ${PERIODIC_TRIANGULATION_MISSING_DEPS}") endif() if(NOT TARGET ${CGAL_QCOLLECTIONGENERATOR_TARGET}) diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt index 63284a9ba629..a587c2deb4f8 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt @@ -17,27 +17,27 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS Script Help OpenGL Svg) +find_package(Qt6 QUIET COMPONENTS Help OpenGLWidget Svg) -if(Qt5Help_VERSION VERSION_LESS 5.12) - set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt5::qcollectiongenerator) +if(Qt6Help_VERSION VERSION_LESS 5.12) + set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt6::qcollectiongenerator) else() - set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt5::qhelpgenerator) + set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt6::qhelpgenerator) endif() -if(CGAL_Qt5_FOUND - AND Qt5_FOUND +if(CGAL_Qt6_FOUND + AND Qt6_FOUND AND TARGET ${CGAL_QCOLLECTIONGENERATOR_TARGET}) include_directories(BEFORE ./) # ui file, created with Qt Designer - qt5_wrap_ui(uis MainWindow.ui) + qt6_wrap_ui(uis MainWindow.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Periodic_Lloyd_3.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Periodic_Lloyd_3.qrc) if(DEFINED QT_QCOLLECTIONGENERATOR_EXECUTABLE) @@ -62,29 +62,29 @@ if(CGAL_Qt5_FOUND MainWindow.cpp Viewer.cpp ${uis} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Periodic_Lloyd_3) - target_link_libraries(Periodic_Lloyd_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - Qt5::OpenGL) + target_link_libraries(Periodic_Lloyd_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + Qt6::OpenGLWidget) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Periodic_Lloyd_3) -else(CGAL_Qt5_FOUND - AND Qt5_FOUND +else(CGAL_Qt6_FOUND + AND Qt6_FOUND AND QT_QCOLLECTIONGENERATOR_EXECUTABLE) set(PERIODIC_LLOYD_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) + if(NOT CGAL_Qt6_FOUND) set(PERIODIC_LLOYD_MISSING_DEPS - "the CGAL Qt5 library, ${PERIODIC_LLOYD_MISSING_DEPS}") + "the CGAL Qt6 library, ${PERIODIC_LLOYD_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(PERIODIC_LLOYD_MISSING_DEPS "Qt5, ${PERIODIC_LLOYD_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(PERIODIC_LLOYD_MISSING_DEPS "Qt6, ${PERIODIC_LLOYD_MISSING_DEPS}") endif() if(NOT QT_QCOLLECTIONGENERATOR_EXECUTABLE) diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt index a2b4110a07f0..cda66cbac6e7 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt @@ -8,28 +8,28 @@ include_directories(${CMAKE_BINARY_DIR}) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -find_package(CGAL REQUIRED COMPONENTS Core Qt5) +find_package(CGAL REQUIRED COMPONENTS Core Qt6) include(${CGAL_USE_FILE}) find_package(LEDA QUIET) -find_package(Qt5 QUIET COMPONENTS Widgets) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) if((CGAL_Core_FOUND OR LEDA_FOUND) - AND Qt5_FOUND - AND CGAL_Qt5_FOUND) + AND Qt6_FOUND + AND CGAL_Qt6_FOUND) include_directories(BEFORE include) # ui files, created with Qt Designer - qt5_wrap_ui(UIS P4HDT2.ui) + qt6_wrap_ui(UIS P4HDT2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(RESOURCE_FILES Main_resources.qrc) + qt6_add_resources(RESOURCE_FILES Main_resources.qrc) # cpp files add_executable(P4HDT2 P4HDT2.cpp ${RESOURCE_FILES} ${UIS}) - target_link_libraries(P4HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + target_link_libraries(P4HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(TARGET CGAL::CGAL_Core) target_link_libraries(P4HDT2 PRIVATE CGAL::CGAL_Core) endif() @@ -41,5 +41,5 @@ if((CGAL_Core_FOUND OR LEDA_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(P4HDT2) else() - message("NOTICE: This demo requires Qt5 and will not be compiled.") + message("NOTICE: This demo requires Qt6 and will not be compiled.") endif() diff --git a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt index 002fd913902f..f9da2a3bfb7d 100644 --- a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt +++ b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt @@ -13,33 +13,33 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) set(CMAKE_INCLUDE_CURRENT_DIR ON) -find_package(Qt5 QUIET COMPONENTS Script OpenGL Widgets Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Widgets Svg) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) add_definitions(-DQT_NO_KEYWORDS) # UI files (Qt Designer files) - qt5_wrap_ui(CDT_UI_FILES Polyline_simplification_2.ui) + qt6_wrap_ui(CDT_UI_FILES Polyline_simplification_2.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.qrc) # The executable itself. add_executable( Polyline_simplification_2 ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) target_link_libraries(Polyline_simplification_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Gui) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Gui) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Polyline_simplification_2) @@ -48,6 +48,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) else() - message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.") endif() diff --git a/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt b/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt index 6ec0024f3a59..b00178ac2338 100644 --- a/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt +++ b/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt @@ -14,8 +14,8 @@ endif() include_directories(./) -# Find CGAL and CGAL Qt5 -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +# Find CGAL and CGAL Qt6 +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) @@ -24,52 +24,52 @@ if(NOT TARGET CGAL::Eigen3_support) return() endif() -# Find Qt5 itself -find_package(Qt5 QUIET COMPONENTS Script OpenGL) +# Find Qt6 itself +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets) -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_INCLUDE_CURRENT_DIR ON) - qt5_wrap_ui(UI_FILES MainWindow.ui) + qt6_wrap_ui(UI_FILES MainWindow.ui) include(AddFileDependencies) - qt5_generate_moc("MainWindow.h" + qt6_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") add_file_dependencies(MainWindow_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h") - qt5_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") + qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h") - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES PCA_demo.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES PCA_demo.qrc) add_file_dependencies( PCA_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") - add_executable(PCA_demo PCA_demo.cpp ${UI_FILES} ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + add_executable(PCA_demo PCA_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) - target_link_libraries(PCA_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 - CGAL::Eigen3_support Qt5::Gui) + target_link_libraries(PCA_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 + CGAL::Eigen3_support Qt6::Gui) add_to_cached_list(CGAL_EXECUTABLE_TARGETS PCA_demo) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(PCA_demo) -else(CGAL_Qt5_FOUND AND Qt5_FOUND) +else(CGAL_Qt6_FOUND AND Qt6_FOUND) set(PCA_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) - set(PCA_MISSING_DEPS "the CGAL Qt5 library, ${PCA_MISSING_DEPS}") + if(NOT CGAL_Qt6_FOUND) + set(PCA_MISSING_DEPS "the CGAL Qt6 library, ${PCA_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(PCA_MISSING_DEPS "Qt5, ${PCA_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(PCA_MISSING_DEPS "Qt6, ${PCA_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${PCA_MISSING_DEPS} and will not be compiled.") -endif(CGAL_Qt5_FOUND AND Qt5_FOUND) +endif(CGAL_Qt6_FOUND AND Qt6_FOUND) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index d142ca179899..3c4b5f8ad346 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -18,14 +18,14 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt5 QUIET COMPONENTS OpenGL) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets) -if(Qt5_FOUND) +if(Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif(Qt5_FOUND) +endif(Qt6_FOUND) # Activate concurrency ? (turned OFF by default) option(CGAL_ACTIVATE_CONCURRENT_TRIANGULATION_3 @@ -45,15 +45,15 @@ else(CGAL_ACTIVATE_CONCURRENT_TRIANGULATION_3) endif(LINK_WITH_TBB) endif() -if(CGAL_Qt5_FOUND AND Qt5_FOUND) +if(CGAL_Qt6_FOUND AND Qt6_FOUND) include_directories(BEFORE ./) # ui files, created with Qt Designer - qt5_wrap_ui(uis MainWindow.ui) + qt6_wrap_ui(uis MainWindow.ui) # qrc files (resources files, that contain icons, at least) - qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./T3_demo.qrc) + qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./T3_demo.qrc) # cpp files add_executable( @@ -64,13 +64,13 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) PreferenceDlg.cpp Scene.cpp ${uis} - ${CGAL_Qt5_RESOURCE_FILES} - ${CGAL_Qt5_MOC_FILES}) + ${CGAL_Qt6_RESOURCE_FILES} + ${CGAL_Qt6_MOC_FILES}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS T3_demo) - target_link_libraries(T3_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt5) - target_link_libraries(T3_demo PRIVATE Qt5::OpenGL) + target_link_libraries(T3_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6) + target_link_libraries(T3_demo PRIVATE Qt6::OpenGLWidgets) if(TARGET CGAL::TBB_support) target_link_libraries(T3_demo PUBLIC CGAL::TBB_support) endif() @@ -81,19 +81,19 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(T3_demo) -else(CGAL_Qt5_FOUND AND Qt5_FOUND) +else(CGAL_Qt6_FOUND AND Qt6_FOUND) set(TRIANGULATION_3_MISSING_DEPS "") - if(NOT CGAL_Qt5_FOUND) + if(NOT CGAL_Qt6_FOUND) set(TRIANGULATION_3_MISSING_DEPS - "the CGAL Qt5 library, ${TRIANGULATION_3_MISSING_DEPS}") + "the CGAL Qt6 library, ${TRIANGULATION_3_MISSING_DEPS}") endif() - if(NOT Qt5_FOUND) - set(TRIANGULATION_3_MISSING_DEPS "Qt5, ${TRIANGULATION_3_MISSING_DEPS}") + if(NOT Qt6_FOUND) + set(TRIANGULATION_3_MISSING_DEPS "Qt6, ${TRIANGULATION_3_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${TRIANGULATION_3_MISSING_DEPS}, and will not be compiled.") -endif(CGAL_Qt5_FOUND AND Qt5_FOUND) +endif(CGAL_Qt6_FOUND AND Qt6_FOUND) diff --git a/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt b/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt index c9b21f4d7eef..020c94e50df6 100644 --- a/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt +++ b/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt @@ -20,32 +20,32 @@ if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() -# Find CGAL and CGAL Qt5 -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +# Find CGAL and CGAL Qt6 +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -# Find Qt5 itself -find_package(Qt5 QUIET COMPONENTS Script OpenGL Gui Svg) +# Find Qt6 itself +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Gui Svg) find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) -if(CGAL_Qt5_FOUND AND Qt5_FOUND AND TARGET CGAL::Eigen3_support) +if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET CGAL::Eigen3_support) # Include this package's headers first include_directories(BEFORE ./ ./include) # ui file, created with Qt Designer - qt5_wrap_ui( uis Mainwindow.ui ) + qt6_wrap_ui( uis Mainwindow.ui ) - #qt5_generate_moc( main.cpp Mainwindow.moc) + #qt6_generate_moc( main.cpp Mainwindow.moc) add_executable ( Triangulation_on_sphere_2_Demo main.cpp Viewer.cpp ${uis}) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Triangulation_on_sphere_2_Demo ) - target_link_libraries( Triangulation_on_sphere_2_Demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 CGAL::Eigen3_support) + target_link_libraries( Triangulation_on_sphere_2_Demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 CGAL::Eigen3_support) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test( Triangulation_on_sphere_2_Demo ) else() - message("NOTICE: This demo requires CGAL, Qt5, and Eigen, and will not be compiled.") + message("NOTICE: This demo requires CGAL, Qt6, and Eigen, and will not be compiled.") endif() From 7e160aa2bb4daea89c4c222784b7c1ab696043b3 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 21 Apr 2023 14:36:13 +0100 Subject: [PATCH 208/943] Hello QJSEngine [skip ci] --- AABB_tree/demo/AABB_tree/CMakeLists.txt | 4 +-- AABB_tree/demo/AABB_tree/MainWindow.cpp | 26 ++++++++++++++++--- AABB_tree/demo/AABB_tree/MainWindow.h | 34 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/CMakeLists.txt b/AABB_tree/demo/AABB_tree/CMakeLists.txt index 76e9faa655e4..d3042f8eb7c9 100644 --- a/AABB_tree/demo/AABB_tree/CMakeLists.txt +++ b/AABB_tree/demo/AABB_tree/CMakeLists.txt @@ -24,7 +24,7 @@ include_directories(BEFORE ./ ./include) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Gui Svg) +find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Gui Svg Qml) if(CGAL_Qt6_FOUND AND Qt6_FOUND) @@ -53,7 +53,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) #${CGAL_Qt6_MOC_FILES} ) # Link with Qt libraries - target_link_libraries(AABB_demo PRIVATE Qt6::OpenGLWidgets Qt6::Gui + target_link_libraries(AABB_demo PRIVATE Qt6::OpenGLWidgets Qt6::Gui Qt6::Qml CGAL::CGAL CGAL::CGAL_Qt6) add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo) diff --git a/AABB_tree/demo/AABB_tree/MainWindow.cpp b/AABB_tree/demo/AABB_tree/MainWindow.cpp index 95fc4056bf7e..7064d50ba5a3 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.cpp +++ b/AABB_tree/demo/AABB_tree/MainWindow.cpp @@ -13,6 +13,8 @@ #include "ui_MainWindow.h" + + MainWindow::MainWindow(QWidget* parent) : CGAL::Qt::DemosMainWindow(parent) { @@ -38,12 +40,25 @@ MainWindow::MainWindow(QWidget* parent) connect(this, SIGNAL(openRecentFile(QString)), this, SLOT(open(QString))); + QJSValue mainWindow = myEngine.newQObject(this); + myEngine.globalObject().setProperty("main_window", mainWindow); readSettings(); + std::ifstream script("init.js"); + if(script.good()){ + std::string line; + while(getline(script, line)){ + myEngine.evaluate(line.c_str()); + } + } } MainWindow::~MainWindow() { m_pViewer->makeCurrent(); + // AF I thought this helps to avoid the exception when the program + // terminates, but it does not + myEngine.globalObject().setProperty("main_window", QJSValue()); + myEngine.collectGarbage(); delete ui; } @@ -65,6 +80,13 @@ void MainWindow::dropEvent(QDropEvent *event) event->acceptProposedAction(); } + +void MainWindow::hello() const +{ + std::cout << "Hhello world" << std::endl; +} + + void MainWindow::updateViewerBBox() { m_pScene->update_bbox(); @@ -418,7 +440,3 @@ void MainWindow::on_actionCopy_snapshot_triggered() qb->setImage(snapshot); QApplication::restoreOverrideCursor(); } - - - - diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index f768694514b8..7a28f7cde919 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include +#include #include class QDragEnterEvent; @@ -12,6 +13,36 @@ namespace Ui { class MainWindow; } +#if 0 + +struct Foo : public QObject +{ + + Q_OBJECT +public: + QJSEngine myEngine; + + Foo() + { + QJSValue baz = myEngine.newQObject(this); + myEngine.globalObject().setProperty("baz", baz); + } + + void bar() + { + std::cout << "bar()" << std::endl; + myEngine.evaluate("baz.hello()"); + } + +public slots: + void hello() const // if not a slot it must be + { + std::cout << "called hello()" << std::endl; + } + +}; +#endif + class MainWindow : public CGAL::Qt::DemosMainWindow @@ -22,6 +53,8 @@ class MainWindow : ~MainWindow(); public slots: + + void hello() const; void updateViewerBBox(); void open(QString filename); void setAddKeyFrameKeyboardModifiers(Qt::KeyboardModifiers); @@ -79,6 +112,7 @@ class MainWindow : void on_actionView_cutting_plane_triggered(); private: + QJSEngine myEngine; Scene* m_pScene; Viewer* m_pViewer; Ui::MainWindow* ui; From b4a259c31b28396cbeba31fb831b53ba9a06f538 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 21 Apr 2023 14:36:13 +0100 Subject: [PATCH 209/943] Hello QJSEngine [skip ci] --- AABB_tree/demo/AABB_tree/init.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 AABB_tree/demo/AABB_tree/init.js diff --git a/AABB_tree/demo/AABB_tree/init.js b/AABB_tree/demo/AABB_tree/init.js new file mode 100644 index 000000000000..e7f08e266c68 --- /dev/null +++ b/AABB_tree/demo/AABB_tree/init.js @@ -0,0 +1,2 @@ +main_window.hello(); +main_window.hello(); From 24451c03e1ef4a81a346f9dc4e7158be1e5aa1cc Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Tue, 25 Apr 2023 17:01:09 +0200 Subject: [PATCH 210/943] Add doc which constructions are trivial/exact. --- ..._predicates_inexact_constructions_kernel.h | 205 +++++++++++++++++- 1 file changed, 197 insertions(+), 8 deletions(-) diff --git a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h index 1063561e3d65..a24ad8901c22 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h @@ -4,16 +4,205 @@ namespace CGAL { /*! \ingroup kernel_predef -A typedef to a kernel which has the following properties: - -
    -
  • It uses %Cartesian representation. -
  • It supports constructions of points from `double` %Cartesian -coordinates. -
  • It provides exact geometric predicates, but inexact geometric -constructions. +A typedef to a kernel that has the following properties: + +
      +
    • It uses %Cartesian representation. +
    • It supports constructions of points from `double` %Cartesian +coordinates. +
    • It provides exact geometric predicates, but geometric +constructions are not exact in general.
    +

    Trivial Constructions

    + +Some geometric constructions, however, are exact because they only +copy parameters and do not involve any computations that could lead to +roundoff errors. We call such a construction trivial. For +instance, all copy constructors, such as `Point_2::Point_2(const +Point_2&)`, are trivial constructions. In addition, the following +constructions in `CGAL::Exact_predicates_inexact_constructions_kernel` +are trivial: + +
      +
    • `Point_2::Point_2(double,double)` +
    • `Point_2::Point_2(const Weighted_point_2&)` +
    • `Point_2::Point_2(Origin)` +
    • `Weighted_point_2::Weighted_point_2(double,double)` +
    • `Weighted_point_2::Weighted_point_2(const Point_2&, double = 0)` +
    • `Weighted_point_2::Weighted_point_2(Origin)` +
    • `Vector_2::Vector_2(double,double)` +
    • `Direction_2::Direction_2(double,double)` +
    • `Direction_2::Direction_2(const Vector_2&)` +
    • `Line_2::Line_2(double,double,double)` +
    • `Ray_2::Ray_2(const Point_2&, const Point_2&)` +
    • `Segment_2::Segment_2(const Point_2&, const Point_2&)` +
    • `Triangle_2::Triangle_2(const Point_2&, const Point_2&, const Point_2&)` +
    • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&)` +
    • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&, int)` +
    • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&, const Point_2&, const Point_2&)` +
    • `Iso_rectangle_2::Iso_rectangle_2(const Bbox_2&)` +
    • `Circle_2::Circle_2(const Point_2&, double, Orientation = COUNTERCLOCKWISE)` +
    • `Kernel::ConstructPoint_2()(const Weighted_point_2&)` +
    • `Kernel::ConstructPoint_2()(Origin)` +
    • `Kernel::ConstructWeightedPoint_2()(const Point_2&, double = 0)` +
    • `Kernel::ConstructWeightedPoint_2()(Origin)` +
    • `Kernel::ConstructVector_2()(Origin, const Point_2&)` +
    • `Kernel::ConstructVector_2()(const Point_2&, Origin)` +
    • `Kernel::ConstructVector_2()(Null_vector)` +
    • `Kernel::ConstructDirection_2()(const Vector_2&)` +
    • `Kernel::ConstructSegment_2()(const Point_2&, const Point_2&)` +
    • `Kernel::ConstructRay_2()(const Point_2&, const Point_2&)` +
    • `Kernel::ConstructCircle_2()(const Point_2&, double, Orientation = COUNTERCLOCKWISE)` +
    • `Kernel::ConstructCircle_2()(const Point_2&, Orientation = COUNTERCLOCKWISE)` +
    • `Kernel::ConstructTriangle_2()(const Point_2&, const Point_2&, const Point_2&)` +
    • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&)` +
    • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&, int)` +
    • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&, const Point_2&, const Point_2&)` +
    • `Kernel::ConstructVertex_2()(const Segment_2&, int)` +
    • `Kernel::ConstructVertex_2()(const Triangle_2&, int)` +
    • `Kernel::ConstructVertex_2()(const Iso_rectangle_2&, int)` +
    • `Kernel::ConstructBbox_2()(const Point_2&)` +
    • `Kernel::ConstructBbox_2()(const Segment_2&)` +
    • `Kernel::ConstructBbox_2()(const Triangle_2&)` +
    • `Kernel::ConstructBbox_2()(const Iso_rectangle_2&)` +
    • `Kernel::ConstructCenter_2()(const Circle_2&)` +
    • `Kernel::ConstructOppositeVector_2()(const Vector_2&)` +
    • `Kernel::ConstructOppositeDirection_2()(const Direction_2&)` +
    • `Kernel::ConstructOppositeSegment_2()(const Segment_2&)` +
    • `Kernel::ConstructOppositeRay_2()(const Ray_2&)` +
    • `Kernel::ConstructOppositeLine_2()(const Line_2&)` +
    • `Kernel::ConstructOppositeTriangle_2()(const Triangle_2&)` +
    • `Kernel::ConstructOppositeCircle_2()(const Circle_2&)` +
    • `Kernel::ConstructSource_2()(const Segment_2&)` +
    • `Kernel::ConstructSource_2()(const Ray_2&)` +
    • `Kernel::ConstructSecondPoint_2()(const Ray_2&)` +
    • `Kernel::ConstructTarget_2()(const Target_2&)` +
    • `Kernel::ConstructMinVertex_2()(const Segment_2&)` +
    • `Kernel::ConstructMinVertex_2()(const Iso_rectangle_2&)` +
    • `Kernel::ConstructMaxVertex_2()(const Segment_2&)` +
    • `Kernel::ConstructMaxVertex_2()(const Iso_rectangle_2&)` +
    • `Kernel::ComputeWeight_2()(const Weighted_point_2&)` +
    • `Kernel::ComputeX_2()(const Point_2&)` +
    • `Kernel::ComputeX_2()(const Vector_2&)` +
    • `Kernel::ComputeY_2()(const Point_2&)` +
    • `Kernel::ComputeY_2()(const Vector_2&)` +
    • `Kernel::ComputeA_2()(const Line_2&)` +
    • `Kernel::ComputeB_2()(const Line_2&)` +
    • `Kernel::ComputeC_2()(const Line_2&)` +
    • `Kernel::ComputeDx_2()(const Direction_2&)` +
    • `Kernel::ComputeDy_2()(const Direction_2&)` +
    • `Kernel::ComputeXmin_2()(const Iso_rectangle_2&)` +
    • `Kernel::ComputeXmax_2()(const Iso_rectangle_2&)` +
    • `Kernel::ComputeYmin_2()(const Iso_rectangle_2&)` +
    • `Kernel::ComputeYmax_2()(const Iso_rectangle_2&)` +
    • `Kernel::ComputeSquaredRadius_2()(const Circle_2&)` +
    • `Kernel::ComputeSquaredRadius_2()(const Point_2&)` +
    • `Kernel::CartesianConstIterator_2()(const Point_2&)` +
    • `Kernel::CartesianConstIterator_2()(const Point_2&, int)` +
    • `Kernel::CartesianConstIterator_2()(const Vector_2&)` +
    • `Kernel::CartesianConstIterator_2()(const Vector_2&, int)` +
    • `Point_3::Point_3(double,double,double)` +
    • `Point_3::Point_3(const Weighted_point_3&)` +
    • `Point_3::Point_3(Origin)` +
    • `Weighted_point_3::Weighted_point_3(double,double)` +
    • `Weighted_point_3::Weighted_point_3(const Point_3&, double = 0)` +
    • `Weighted_point_3::Weighted_point_3(Origin)` +
    • `Vector_3::Vector_3(double,double,double)` +
    • `Direction_3::Direction_3(double,double,double)` +
    • `Direction_3::Direction_3(const Vector_3&)` +
    • `Line_3::Line_3(const Point_3&, const Vector_3&)` +
    • `Line_3::Line_3(const Point_3&, const Direction_3&)` +
    • `Plane_3::Plane_3(double,double,double,double)` +
    • `Circle_3::Circle_3(const Point_3&, double, const Plane_3&)` +
    • `Sphere_3::Sphere_3(const Point_3&, double, Orientation = COUNTERCLOCKWISE)` +
    • `Ray_3::Ray_3(const Point_3&, const Point_3&)` +
    • `Segment_3::Segment_3(const Point_3&, const Point_3&)` +
    • `Triangle_3::Triangle_3(const Point_3&, const Point_3&, const Point_3&)` +
    • `Tetrahedron_3::Tetrahedron_3(const Point_3&, const Point_3&, const Point_3&, const Point_3&)` +
    • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&)` +
    • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&, int)` +
    • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&)` +
    • `Iso_cuboid_3::Iso_cuboid_3(const Bbox_3&)` +
    • `Kernel::ConstructPoint_3()(const Weighted_point_3&)` +
    • `Kernel::ConstructPoint_3()(Origin)` +
    • `Kernel::ConstructWeightedPoint_3()(const Point_3&, double = 0)` +
    • `Kernel::ConstructWeightedPoint_3()(Origin)` +
    • `Kernel::ConstructVector_3()(Origin, const Point_3&)` +
    • `Kernel::ConstructVector_3()(const Point_3&, Origin)` +
    • `Kernel::ConstructVector_3()(Null_vector)` +
    • `Kernel::ConstructDirection_3()(const Vector_3&)` +
    • `Kernel::ConstructPlane_3()(double,double,double,double)` +
    • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&)` +
    • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&, int)` +
    • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&)` +
    • `Kernel::ConstructLine_3()(const Point_3&, const Vector_3&)` +
    • `Kernel::ConstructLine_3()(const Point_3&, const Direction_3&)` +
    • `Kernel::ConstructRay_3()(const Point_3&, const Point_3&)` +
    • `Kernel::ConstructSphere_3()(const Point_3&, double, Orientation = COUNTERCLOCKWISE)` +
    • `Kernel::ConstructSphere_3()(const Point_3&, Orientation = COUNTERCLOCKWISE)` +
    • `Kernel::ConstructSegment_3()(const Point_3&, const Point_3&)` +
    • `Kernel::ConstructTriangle_3()(const Point_3&, const Point_3&, const Point_3&)` +
    • `Kernel::ConstructTetrahedron_3()(const Point_3&, const Point_3&, const Point_3&, const Point_3&)` +
    • `Kernel::ConstructCircle_3()(const Point_3&, double, const Plane_3&)` +
    • `Kernel::ConstructCircle_3()( +
    • `Kernel::ConstructVertex_3()(const Segment_3&, int)` +
    • `Kernel::ConstructVertex_3()(const Triangle_3&, int)` +
    • `Kernel::ConstructVertex_3()(const Tetrahedron_3&, int)` +
    • `Kernel::ConstructVertex_3()(const Iso_cuboid_3&, int)` +
    • `Kernel::ConstructSource_3()(const Segment_3&)` +
    • `Kernel::ConstructSource_3()(const Ray_3&)` +
    • `Kernel::ConstructTarget_3()(const Target_3&)` +
    • `Kernel::ConstructMinVertex_3()(const Segment_3&)` +
    • `Kernel::ConstructMinVertex_3()(const Iso_cuboid_3&)` +
    • `Kernel::ConstructMaxVertex_3()(const Segment_3&)` +
    • `Kernel::ConstructMaxVertex_3()(const Iso_cuboid_3&)` +
    • `Kernel::ConstructBbox_3()(const Point_3&)` +
    • `Kernel::ConstructBbox_3()(const Segment_3&)` +
    • `Kernel::ConstructBbox_3()(const Triangle_3&)` +
    • `Kernel::ConstructBbox_3()(const Tetrahedron_3&)` +
    • `Kernel::ConstructBbox_3()(const Iso_cuboid_3&)` +
    • `Kernel::ConstructCenter_3()(const Sphere_3&)` +
    • `Kernel::ConstructCenter_3()(const Circle_3&)` +
    • `Kernel::ConstructSecondPoint_3()(const Ray_3&)` +
    • `Kernel::ConstructOppositeVector_3()(const Vector_3&)` +
    • `Kernel::ConstructOppositeDirection_3()(const Direction_3&)` +
    • `Kernel::ConstructOppositeSegment_3()(const Segment_3&)` +
    • `Kernel::ConstructOppositeRay_3()(const Ray_3&)` +
    • `Kernel::ConstructOppositeLine_3()(const Line_3&)` +
    • `Kernel::ConstructOppositeTriangle_3()(const Triangle_3&)` +
    • `Kernel::ConstructOppositePlane_3()(const Plane_3&)` +
    • `Kernel::ConstructOppositeSphere_3()(const Sphere_3&)` +
    • `Kernel::ConstructOppositeCircle_3()(const Circle_3&)` +
    • `Kernel::ComputeWeight_3()(const Weighted_point_3&)` +
    • `Kernel::ComputeX_3()(const Point_3&)` +
    • `Kernel::ComputeX_3()(const Vector_3&)` +
    • `Kernel::ComputeY_3()(const Point_3&)` +
    • `Kernel::ComputeY_3()(const Vector_3&)` +
    • `Kernel::ComputeZ_3()(const Point_3&)` +
    • `Kernel::ComputeZ_3()(const Vector_3&)` +
    • `Kernel::ComputeA_3()(const Line_3&)` +
    • `Kernel::ComputeB_3()(const Line_3&)` +
    • `Kernel::ComputeC_3()(const Line_3&)` +
    • `Kernel::ComputeD_3()(const Line_3&)` +
    • `Kernel::ComputeDx_3()(const Direction_3&)` +
    • `Kernel::ComputeDy_3()(const Direction_3&)` +
    • `Kernel::ComputeDz_3()(const Direction_3&)` +
    • `Kernel::ComputeXmin_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeXmax_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeYmin_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeYmax_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeZmin_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeZmax_3()(const Iso_cuboid_3&)` +
    • `Kernel::ComputeSquaredRadius_3()(const Sphere_3&)` +
    • `Kernel::ComputeSquaredRadius_3()(const Circle_3&)` +
    • `Kernel::ComputeSquaredRadius_3()(const Point_3&)` +
    • `Kernel::CartesianConstIterator_3()(const Point_3&)` +
    • `Kernel::CartesianConstIterator_3()(const Point_3&, int)` +
    • `Kernel::CartesianConstIterator_3()(const Vector_3&)` +
    • `Kernel::CartesianConstIterator_3()(const Vector_3&, int)` +
    + \cgalModels `Kernel` \sa `CGAL::Exact_predicates_exact_constructions_kernel` From 67441a37726221204593c51e604dd9c87fa306ef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 25 Apr 2023 17:27:03 +0200 Subject: [PATCH 211/943] Convert all CMakeLists.txt to Qt6 --- .../examples/Boolean_set_operations_2/CMakeLists.txt | 2 +- Installation/test/Installation/CMakeLists.txt | 8 ++++---- .../examples/Linear_cell_complex/CMakeLists.txt | 2 +- Mesh_2/examples/Mesh_2/CMakeLists.txt | 2 +- Nef_3/examples/Nef_3/CMakeLists.txt | 2 +- .../examples/Periodic_2_triangulation_2/CMakeLists.txt | 2 +- Point_set_3/examples/Point_set_3/CMakeLists.txt | 2 +- Polygon/examples/Polygon/CMakeLists.txt | 2 +- Polyhedron/demo/Polyhedron/include/CGAL/Use_ssh.h | 2 +- Polyhedron/examples/Polyhedron/CMakeLists.txt | 2 +- .../examples/Straight_skeleton_2/CMakeLists.txt | 2 +- .../test/Straight_skeleton_2/CMakeLists.txt | 2 +- .../examples/Surface_mesh_topology/CMakeLists.txt | 2 +- .../test/Surface_mesh_topology/CMakeLists.txt | 2 +- Triangulation_3/examples/Triangulation_3/CMakeLists.txt | 4 ++-- .../examples/Voronoi_diagram_2/CMakeLists.txt | 4 ++-- 16 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Boolean_set_operations_2/examples/Boolean_set_operations_2/CMakeLists.txt b/Boolean_set_operations_2/examples/Boolean_set_operations_2/CMakeLists.txt index f24ead2e8bd4..f01d9597d925 100644 --- a/Boolean_set_operations_2/examples/Boolean_set_operations_2/CMakeLists.txt +++ b/Boolean_set_operations_2/examples/Boolean_set_operations_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Boolean_set_operations_2_Examples) -find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index 2560f75d5c8d..d65c89d3dacc 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -79,7 +79,7 @@ else() endif() if(WITH_CGAL_Qt5) - find_package(Qt5 QUIET COMPONENTS Core) + find_package(Qt6 QUIET COMPONENTS Core) if(Qt5_FOUND) create_link_to_program(CGAL_Qt5) endif() @@ -146,7 +146,7 @@ set_tests_properties( test_find_package_version_fail-exact PROPERTIES WILL_FAIL TRUE) -find_package(CGAL COMPONENTS Qt5) +find_package(CGAL COMPONENTS Qt6) file(MAKE_DIRECTORY "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install") file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_build) @@ -196,7 +196,7 @@ else()#CGAL_BRANCH_BUILD endif()#CGAL_BRANCH_BUILD list(APPEND test_config_lst "test_config_file_2") -#configure cgal for a non standard install without qt5 +#configure cgal for a non standard install without Qt6 get_filename_component(CORRECT_INSTALL_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install/dummy.txt" DIRECTORY) add_test(NAME config_non_standard_cgal COMMAND ${CMAKE_COMMAND} ${GENERATOR} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${CORRECT_INSTALL_PATH} -DCGAL_INSTALL_LIB_DIR=lib @@ -215,7 +215,7 @@ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_3") list(APPEND test_config_lst "test_config_file_3") if(CGAL_Qt5_FOUND) - #configure cgal for a non standard install with qt5 + #configure cgal for a non standard install with Qt6 add_test(NAME config_non_standard_cgal_qt5 COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt5 -DCGAL_INSTALL_LIB_DIR=lib "${CGAL_SOURCE_DIR}" diff --git a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt index d0ed1c3a028c..320149215f20 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt +++ b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Linear_cell_complex_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # For Gprof. # ADD_DEFINITIONS("-pg") diff --git a/Mesh_2/examples/Mesh_2/CMakeLists.txt b/Mesh_2/examples/Mesh_2/CMakeLists.txt index b42d588216a2..949c376ecbb7 100644 --- a/Mesh_2/examples/Mesh_2/CMakeLists.txt +++ b/Mesh_2/examples/Mesh_2/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Mesh_2_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Nef_3/examples/Nef_3/CMakeLists.txt b/Nef_3/examples/Nef_3/CMakeLists.txt index 8d88f56728f6..479f814c4103 100644 --- a/Nef_3/examples/Nef_3/CMakeLists.txt +++ b/Nef_3/examples/Nef_3/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Nef_3_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/CMakeLists.txt b/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/CMakeLists.txt index 0acef682baaf..8eb15e9dc00d 100644 --- a/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/CMakeLists.txt +++ b/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Periodic_2_triangulation_2_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Point_set_3/examples/Point_set_3/CMakeLists.txt b/Point_set_3/examples/Point_set_3/CMakeLists.txt index b26633c293a3..cfd4152dd57d 100644 --- a/Point_set_3/examples/Point_set_3/CMakeLists.txt +++ b/Point_set_3/examples/Point_set_3/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Point_set_3_Examples) # CGAL and its components -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) create_single_source_cgal_program("point_set.cpp") create_single_source_cgal_program("point_set_property.cpp") diff --git a/Polygon/examples/Polygon/CMakeLists.txt b/Polygon/examples/Polygon/CMakeLists.txt index c9fdf0aa007a..d3d48d57fc4f 100644 --- a/Polygon/examples/Polygon/CMakeLists.txt +++ b/Polygon/examples/Polygon/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polygon_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Polyhedron/demo/Polyhedron/include/CGAL/Use_ssh.h b/Polyhedron/demo/Polyhedron/include/CGAL/Use_ssh.h index d006e6704feb..b0309c3917c8 100644 --- a/Polyhedron/demo/Polyhedron/include/CGAL/Use_ssh.h +++ b/Polyhedron/demo/Polyhedron/include/CGAL/Use_ssh.h @@ -2,8 +2,8 @@ #define USE_SSH_H #include #include +#include -class QStringList; namespace CGAL{ namespace ssh_internal{ diff --git a/Polyhedron/examples/Polyhedron/CMakeLists.txt b/Polyhedron/examples/Polyhedron/CMakeLists.txt index 207f712b3231..bdec4ea6e90a 100644 --- a/Polyhedron/examples/Polyhedron/CMakeLists.txt +++ b/Polyhedron/examples/Polyhedron/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polyhedron_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( diff --git a/Straight_skeleton_2/examples/Straight_skeleton_2/CMakeLists.txt b/Straight_skeleton_2/examples/Straight_skeleton_2/CMakeLists.txt index c6e8c6c0d51e..928a4c2f0e82 100644 --- a/Straight_skeleton_2/examples/Straight_skeleton_2/CMakeLists.txt +++ b/Straight_skeleton_2/examples/Straight_skeleton_2/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project( Straight_skeleton_2_Examples ) -find_package(CGAL REQUIRED COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED COMPONENTS Qt6 Core) # create a target per cppfile file(GLOB cppfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/CMakeLists.txt b/Straight_skeleton_2/test/Straight_skeleton_2/CMakeLists.txt index 34257e84946d..7d4b7c35b07a 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/CMakeLists.txt +++ b/Straight_skeleton_2/test/Straight_skeleton_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Straight_skeleton_2_Tests) -find_package(CGAL REQUIRED COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED COMPONENTS Qt6 Core) include_directories(BEFORE "include") diff --git a/Surface_mesh_topology/examples/Surface_mesh_topology/CMakeLists.txt b/Surface_mesh_topology/examples/Surface_mesh_topology/CMakeLists.txt index 778aafba88fe..b331761128f0 100644 --- a/Surface_mesh_topology/examples/Surface_mesh_topology/CMakeLists.txt +++ b/Surface_mesh_topology/examples/Surface_mesh_topology/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Surface_mesh_topology_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # add_definitions(-DCGAL_TRACE_PATH_TESTS) # add_definitions(-DCGAL_TRACE_CMAP_TOOLS) diff --git a/Surface_mesh_topology/test/Surface_mesh_topology/CMakeLists.txt b/Surface_mesh_topology/test/Surface_mesh_topology/CMakeLists.txt index 904303a77e8d..203721628be9 100644 --- a/Surface_mesh_topology/test/Surface_mesh_topology/CMakeLists.txt +++ b/Surface_mesh_topology/test/Surface_mesh_topology/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Surface_mesh_topology_Tests) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # add_definitions(-DCGAL_TRACE_PATH_TESTS) # add_definitions(-DCGAL_TRACE_CMAP_TOOLS) diff --git a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt index 4519992969f5..9aa0e8f4401f 100644 --- a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Triangulation_3_Examples) -find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) include_directories(BEFORE "../../include") @@ -26,7 +26,7 @@ create_single_source_cgal_program("draw_triangulation_3.cpp") if(CGAL_Qt5_FOUND) target_link_libraries(draw_triangulation_3 PUBLIC CGAL::CGAL_Basic_viewer) else() - message(STATUS "NOTICE: The example 'draw_triangulation_3' requires Qt5, and will not be compiled.") + message(STATUS "NOTICE: The example 'draw_triangulation_3' requires Qt6, and will not be compiled.") endif() find_package(TBB QUIET) diff --git a/Voronoi_diagram_2/examples/Voronoi_diagram_2/CMakeLists.txt b/Voronoi_diagram_2/examples/Voronoi_diagram_2/CMakeLists.txt index ea1bf322bf54..308963700a5b 100644 --- a/Voronoi_diagram_2/examples/Voronoi_diagram_2/CMakeLists.txt +++ b/Voronoi_diagram_2/examples/Voronoi_diagram_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Voronoi_diagram_2_Examples) -find_package(CGAL REQUIRED QUIET OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED QUIET OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( @@ -18,5 +18,5 @@ endforeach() if(CGAL_Qt5_FOUND) target_link_libraries(draw_voronoi_diagram_2 PUBLIC CGAL::CGAL_Basic_viewer) else() - message(STATUS "NOTICE: The Qt5 library was not found. The example 'draw_voronoi_diagram_2' will not be compiled.") + message(STATUS "NOTICE: The Qt6 library was not found. The example 'draw_voronoi_diagram_2' will not be compiled.") endif() From 134b464aaa4280e1ba9c70e5839b47b61a657e08 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 26 Apr 2023 11:51:43 +0100 Subject: [PATCH 212/943] Allocate the QJSEngine on the heap --- AABB_tree/demo/AABB_tree/MainWindow.cpp | 12 ++++++------ AABB_tree/demo/AABB_tree/MainWindow.h | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/MainWindow.cpp b/AABB_tree/demo/AABB_tree/MainWindow.cpp index 7064d50ba5a3..4321e396b8d4 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.cpp +++ b/AABB_tree/demo/AABB_tree/MainWindow.cpp @@ -16,7 +16,7 @@ MainWindow::MainWindow(QWidget* parent) -: CGAL::Qt::DemosMainWindow(parent) + : CGAL::Qt::DemosMainWindow(parent), myEngine(new QJSEngine()) { ui = new Ui::MainWindow; ui->setupUi(this); @@ -40,14 +40,14 @@ MainWindow::MainWindow(QWidget* parent) connect(this, SIGNAL(openRecentFile(QString)), this, SLOT(open(QString))); - QJSValue mainWindow = myEngine.newQObject(this); - myEngine.globalObject().setProperty("main_window", mainWindow); + QJSValue mainWindow = myEngine->newQObject(this); + myEngine->globalObject().setProperty("main_window", mainWindow); readSettings(); std::ifstream script("init.js"); if(script.good()){ std::string line; while(getline(script, line)){ - myEngine.evaluate(line.c_str()); + myEngine->evaluate(line.c_str()); } } } @@ -57,8 +57,8 @@ MainWindow::~MainWindow() m_pViewer->makeCurrent(); // AF I thought this helps to avoid the exception when the program // terminates, but it does not - myEngine.globalObject().setProperty("main_window", QJSValue()); - myEngine.collectGarbage(); + myEngine->globalObject().setProperty("main_window", QJSValue()); + myEngine->collectGarbage(); delete ui; } diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index 7a28f7cde919..50cd927a7cb4 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -20,18 +20,19 @@ struct Foo : public QObject Q_OBJECT public: - QJSEngine myEngine; + QJSEngine* myEngine; Foo() + : myEngine(new QJSEngine()) { - QJSValue baz = myEngine.newQObject(this); - myEngine.globalObject().setProperty("baz", baz); + QJSValue baz = myEngine->newQObject(this); + myEngine->.globalObject().setProperty("baz", baz); } void bar() { std::cout << "bar()" << std::endl; - myEngine.evaluate("baz.hello()"); + myEngine->evaluate("baz.hello()"); } public slots: @@ -112,7 +113,7 @@ class MainWindow : void on_actionView_cutting_plane_triggered(); private: - QJSEngine myEngine; + QJSEngine* myEngine; Scene* m_pScene; Viewer* m_pViewer; Ui::MainWindow* ui; From 585e79b67e5750a541d18e97487f9b23d07d5d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 26 Apr 2023 13:06:19 +0200 Subject: [PATCH 213/943] add authors from the history section --- .../doc/Polygon_mesh_processing/PackageDescription.txt | 2 +- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 9c8b5d6f2948..bf667377a96a 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -79,7 +79,7 @@ \cgalPkgPicture{hole_filling_ico.png} \cgalPkgSummaryBegin -\cgalPkgAuthors{Sébastien Loriot, Mael Rouxel-Labbé, Jane Tournois, and Ilker %O. Yaz} +\cgalPkgAuthors{David Coeurjolly, Jaques-Olivier Lachaud, Konstantinos Katriopla, Sébastien Loriot, Mael Rouxel-Labbé, Hossam Saeed, Jane Tournois, and Ilker %O. Yaz} \cgalPkgDesc{This package provides a collection of methods and classes for polygon mesh processing, ranging from basic operations on simplices, to complex geometry processing algorithms such as Boolean operations, remeshing, repairing, collision and intersection detection, and more.} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index ead5b5a8c80c..eac246d8ab47 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -4,7 +4,7 @@ namespace CGAL { \anchor Chapter_PolygonMeshProcessing \cgalAutoToc -\authors Sébastien Loriot, Mael Rouxel-Labbé, Jane Tournois, Ilker %O. Yaz +\authors David Coeurjolly, Jaques-Olivier Lachaud, Konstantinos Katriopla, Sébastien Loriot, Mael Rouxel-Labbé, Hossam Saeed, Jane Tournois, and Ilker %O. Yaz \image html neptun_head.jpg \image latex neptun_head.jpg From cfa16aa95fb754181e40acb18e8203ab76652211 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 27 Apr 2023 12:14:36 +0200 Subject: [PATCH 214/943] Document which constructions are exact in EPIC. --- .../doc/resources/1.9.3/BaseDoxyfile.in | 3 +- Kernel_23/doc/Kernel_23/CGAL/Circle_2.h | 8 + Kernel_23/doc/Kernel_23/CGAL/Circle_3.h | 8 +- Kernel_23/doc/Kernel_23/CGAL/Direction_2.h | 6 + Kernel_23/doc/Kernel_23/CGAL/Direction_3.h | 9 + ..._predicates_inexact_constructions_kernel.h | 357 +++++++++--------- Kernel_23/doc/Kernel_23/CGAL/Iso_cuboid_3.h | 21 ++ .../doc/Kernel_23/CGAL/Iso_rectangle_2.h | 18 + Kernel_23/doc/Kernel_23/CGAL/Line_2.h | 5 + Kernel_23/doc/Kernel_23/CGAL/Line_3.h | 5 + Kernel_23/doc/Kernel_23/CGAL/Plane_3.h | 9 + Kernel_23/doc/Kernel_23/CGAL/Point_2.h | 11 + Kernel_23/doc/Kernel_23/CGAL/Point_3.h | 13 + Kernel_23/doc/Kernel_23/CGAL/Ray_2.h | 2 + Kernel_23/doc/Kernel_23/CGAL/Ray_3.h | 2 + Kernel_23/doc/Kernel_23/CGAL/Segment_2.h | 10 + Kernel_23/doc/Kernel_23/CGAL/Segment_3.h | 10 + Kernel_23/doc/Kernel_23/CGAL/Sphere_3.h | 9 + Kernel_23/doc/Kernel_23/CGAL/Tetrahedron_3.h | 4 + Kernel_23/doc/Kernel_23/CGAL/Triangle_2.h | 5 + Kernel_23/doc/Kernel_23/CGAL/Triangle_3.h | 4 + Kernel_23/doc/Kernel_23/CGAL/Vector_2.h | 10 + Kernel_23/doc/Kernel_23/CGAL/Vector_3.h | 13 + .../doc/Kernel_23/CGAL/Weighted_point_2.h | 15 +- .../doc/Kernel_23/CGAL/Weighted_point_3.h | 15 + 25 files changed, 392 insertions(+), 180 deletions(-) diff --git a/Documentation/doc/resources/1.9.3/BaseDoxyfile.in b/Documentation/doc/resources/1.9.3/BaseDoxyfile.in index 3fcdb56be680..0a56ea1fc37e 100644 --- a/Documentation/doc/resources/1.9.3/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.9.3/BaseDoxyfile.in @@ -382,7 +382,8 @@ ALIASES = "cgal=%CGAL" \ "cgalParamNEnd=
\htmlonly[block] \endhtmlonly " \ "cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \ "cgalParamSectionEnd=\cgalParamNEnd" \ - "cgalParamPrecondition{1}=
  • Precondition: \1
  • " + "cgalParamPrecondition{1}=
  • Precondition: \1
  • " \ + "cgalEpicExact=
    Exactness
    This construction is trivial and therefore always exact in `Exact_predicates_inexact_constructions_kernel`.
    " # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For diff --git a/Kernel_23/doc/Kernel_23/CGAL/Circle_2.h b/Kernel_23/doc/Kernel_23/CGAL/Circle_2.h index 1e9eacdeb0e4..ecb9d969847a 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Circle_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Circle_2.h @@ -29,6 +29,8 @@ It is initialized to the circle with center `center`, squared radius `squared_radius` and orientation `ori`. \pre `ori != COLLINEAR` and `squared_radius >= 0`. + +\cgalEpicExact */ Circle_2(const Point_2 ¢er, const Kernel::FT &squared_radius, @@ -65,6 +67,8 @@ It is initialized to the circle with center `center`, squared radius zero and orientation `ori`. \pre `ori != COLLINEAR`. \post `c.is_degenerate()` = `true`. + +\cgalEpicExact */ Circle_2( const Point_2 ¢er, const Orientation &ori = COUNTERCLOCKWISE); @@ -77,18 +81,21 @@ Circle_2( const Point_2 ¢er, /*! returns the center of `c`. +\cgalEpicExact */ const Point_2 ¢er( ) const; /*! returns the squared radius of `c`. +\cgalEpicExact */ const Kernel::FT& squared_radius( ) const; /*! returns the orientation of `c`. +\cgalEpicExact */ Orientation orientation( ) const; @@ -172,6 +179,7 @@ bool has_on_unbounded_side(const Point_2 &p) const; returns the circle with the same center and squared radius as `c` but with opposite orientation. +\cgalEpicExact */ Circle_2 opposite() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Circle_3.h b/Kernel_23/doc/Kernel_23/CGAL/Circle_3.h index 1fcdcab6e68f..f152c18e2953 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Circle_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Circle_3.h @@ -22,6 +22,8 @@ introduces a variable `c` of type `Circle_3`. It is initialized to the circle of center `center` and squared radius `sq_r` in plane `plane`. \pre `center` lies in `plane` and `sq_r >= 0`. + +\cgalEpicExact */ Circle_3(const Point_3 ¢er, const Kernel::FT &sq_r, @@ -60,7 +62,7 @@ It is initialized to the circle along which the sphere and the plane intersect. \pre The sphere and the plane intersect along a circle. */ - Circle_3(constSphere_3 & sphere, + Circle_3(const Sphere_3 & sphere, const Plane_3 & plane); /*! @@ -80,24 +82,28 @@ Circle_3(const Plane_3 & plane, /*! returns the center of `c`. +\cgalEpicExact */ const Point_3 & center( ) const; /*! returns the squared radius of `c`. +\cgalEpicExact */ const Kernel::FT & squared_radius( ) const; /*! returns the supporting plane of `c`. +\cgalEpicExact */ const Plane_3 & supporting_plane( ) const; /*! returns the diametral sphere of `c`. +\cgalEpicExact */ const Sphere_3 & diametral_sphere( ) const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Direction_2.h b/Kernel_23/doc/Kernel_23/CGAL/Direction_2.h index 00a2e8d74a57..3c3355de785b 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Direction_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Direction_2.h @@ -26,6 +26,7 @@ class Direction_2 { /*! introduces the direction `d` of vector `v`. +\cgalEpicExact */ Direction_2(const Vector_2 &v); @@ -47,6 +48,7 @@ Direction_2(const Segment_2 &s); /*! introduces a direction `d` passing through the origin and the point with %Cartesian coordinates \f$ (x, y)\f$. +\cgalEpicExact */ Direction_2(const Kernel::RT &x, const Kernel::RT &y); @@ -61,16 +63,20 @@ Direction_2(const Kernel::RT &x, const Kernel::RT &y); /*! returns values, such that `d``== Direction_2(delta(0),delta(1))`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::RT delta(int i) const; /*! returns `delta(0)`. +\cgalEpicExact */ Kernel::RT dx() const; /*! returns `delta(1)`. +\cgalEpicExact */ Kernel::RT dy() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Direction_3.h b/Kernel_23/doc/Kernel_23/CGAL/Direction_3.h index 81b096ac359a..32dd7834bdb7 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Direction_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Direction_3.h @@ -26,6 +26,7 @@ class Direction_3 { /*! introduces a direction `d` initialized with the direction of vector `v`. +\cgalEpicExact */ Direction_3(const Vector_3 &v); @@ -47,6 +48,7 @@ Direction_3(const Segment_3 &s); /*! introduces a direction `d` initialized with the direction from the origin to the point with %Cartesian coordinates \f$ (x, y, z)\f$. +\cgalEpicExact */ Direction_3(const Kernel::RT &x, const Kernel::RT &y, const Kernel::RT &z); @@ -58,21 +60,26 @@ Direction_3(const Kernel::RT &x, const Kernel::RT &y, const Kernel::RT &z); /*! returns values, such that `d``== Direction_3(delta(0),delta(1),delta(2))`. \pre `0 <= i <= 2`. + +\cgalEpicExact */ Kernel::RT delta(int i) const; /*! returns `delta(0)`. +\cgalEpicExact */ Kernel::RT dx() const; /*! returns `delta(1)`. +\cgalEpicExact */ Kernel::RT dy() const; /*! returns `delta(2)`. +\cgalEpicExact */ Kernel::RT dz() const; @@ -88,11 +95,13 @@ bool operator!=(const Direction_3 &e) const; /*! The direction opposite to `d`. +\cgalEpicExact */ Direction_3 operator-() const; /*! returns a vector that has the same direction as `d`. +\cgalEpicExact */ Vector_3 vector() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h index a24ad8901c22..8a5e33aa5fc8 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h @@ -14,193 +14,196 @@ coordinates. constructions are not exact in general. -

    Trivial Constructions

    - -Some geometric constructions, however, are exact because they only +
    Trivial Constructions
    +

    Some geometric constructions, however, are exact because they only copy parameters and do not involve any computations that could lead to roundoff errors. We call such a construction trivial. For instance, all copy constructors, such as `Point_2::Point_2(const Point_2&)`, are trivial constructions. In addition, the following constructions in `CGAL::Exact_predicates_inexact_constructions_kernel` -are trivial: +are trivial:

    -
      -
    • `Point_2::Point_2(double,double)` -
    • `Point_2::Point_2(const Weighted_point_2&)` +
        +
      • `Point_2::Point_2(FT, FT)` +
      • `Point_2::Point_2(Weighted_point_2)`
      • `Point_2::Point_2(Origin)` -
      • `Weighted_point_2::Weighted_point_2(double,double)` -
      • `Weighted_point_2::Weighted_point_2(const Point_2&, double = 0)` +
      • `FT Point_2::x()` +
      • `FT Point_2::y()` +
      • `FT Point_2::cartesian(int)` +
      • `FT Point_2::operator[](int)` +
      • `Bbox_2 Point_2::bbox()` +
      • `Vector_2 operator-(Point_2, Origin)` +
      • `Vector_2 operator-(Origin, Point_2)` +
      • `Weighted_point_2::Weighted_point_2(FT, FT)` +
      • `Weighted_point_2::Weighted_point_2(Point_2, FT)` +
      • `Weighted_point_2::Weighted_point_2(Point_2)`
      • `Weighted_point_2::Weighted_point_2(Origin)` -
      • `Vector_2::Vector_2(double,double)` -
      • `Direction_2::Direction_2(double,double)` -
      • `Direction_2::Direction_2(const Vector_2&)` -
      • `Line_2::Line_2(double,double,double)` -
      • `Ray_2::Ray_2(const Point_2&, const Point_2&)` -
      • `Segment_2::Segment_2(const Point_2&, const Point_2&)` -
      • `Triangle_2::Triangle_2(const Point_2&, const Point_2&, const Point_2&)` -
      • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&)` -
      • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&, int)` -
      • `Iso_rectangle_2::Iso_rectangle_2(const Point_2&, const Point_2&, const Point_2&, const Point_2&)` -
      • `Iso_rectangle_2::Iso_rectangle_2(const Bbox_2&)` -
      • `Circle_2::Circle_2(const Point_2&, double, Orientation = COUNTERCLOCKWISE)` -
      • `Kernel::ConstructPoint_2()(const Weighted_point_2&)` -
      • `Kernel::ConstructPoint_2()(Origin)` -
      • `Kernel::ConstructWeightedPoint_2()(const Point_2&, double = 0)` -
      • `Kernel::ConstructWeightedPoint_2()(Origin)` -
      • `Kernel::ConstructVector_2()(Origin, const Point_2&)` -
      • `Kernel::ConstructVector_2()(const Point_2&, Origin)` -
      • `Kernel::ConstructVector_2()(Null_vector)` -
      • `Kernel::ConstructDirection_2()(const Vector_2&)` -
      • `Kernel::ConstructSegment_2()(const Point_2&, const Point_2&)` -
      • `Kernel::ConstructRay_2()(const Point_2&, const Point_2&)` -
      • `Kernel::ConstructCircle_2()(const Point_2&, double, Orientation = COUNTERCLOCKWISE)` -
      • `Kernel::ConstructCircle_2()(const Point_2&, Orientation = COUNTERCLOCKWISE)` -
      • `Kernel::ConstructTriangle_2()(const Point_2&, const Point_2&, const Point_2&)` -
      • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&)` -
      • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&, int)` -
      • `Kernel::ConstructIsoRectangle_2()(const Point_2&, const Point_2&, const Point_2&, const Point_2&)` -
      • `Kernel::ConstructVertex_2()(const Segment_2&, int)` -
      • `Kernel::ConstructVertex_2()(const Triangle_2&, int)` -
      • `Kernel::ConstructVertex_2()(const Iso_rectangle_2&, int)` -
      • `Kernel::ConstructBbox_2()(const Point_2&)` -
      • `Kernel::ConstructBbox_2()(const Segment_2&)` -
      • `Kernel::ConstructBbox_2()(const Triangle_2&)` -
      • `Kernel::ConstructBbox_2()(const Iso_rectangle_2&)` -
      • `Kernel::ConstructCenter_2()(const Circle_2&)` -
      • `Kernel::ConstructOppositeVector_2()(const Vector_2&)` -
      • `Kernel::ConstructOppositeDirection_2()(const Direction_2&)` -
      • `Kernel::ConstructOppositeSegment_2()(const Segment_2&)` -
      • `Kernel::ConstructOppositeRay_2()(const Ray_2&)` -
      • `Kernel::ConstructOppositeLine_2()(const Line_2&)` -
      • `Kernel::ConstructOppositeTriangle_2()(const Triangle_2&)` -
      • `Kernel::ConstructOppositeCircle_2()(const Circle_2&)` -
      • `Kernel::ConstructSource_2()(const Segment_2&)` -
      • `Kernel::ConstructSource_2()(const Ray_2&)` -
      • `Kernel::ConstructSecondPoint_2()(const Ray_2&)` -
      • `Kernel::ConstructTarget_2()(const Target_2&)` -
      • `Kernel::ConstructMinVertex_2()(const Segment_2&)` -
      • `Kernel::ConstructMinVertex_2()(const Iso_rectangle_2&)` -
      • `Kernel::ConstructMaxVertex_2()(const Segment_2&)` -
      • `Kernel::ConstructMaxVertex_2()(const Iso_rectangle_2&)` -
      • `Kernel::ComputeWeight_2()(const Weighted_point_2&)` -
      • `Kernel::ComputeX_2()(const Point_2&)` -
      • `Kernel::ComputeX_2()(const Vector_2&)` -
      • `Kernel::ComputeY_2()(const Point_2&)` -
      • `Kernel::ComputeY_2()(const Vector_2&)` -
      • `Kernel::ComputeA_2()(const Line_2&)` -
      • `Kernel::ComputeB_2()(const Line_2&)` -
      • `Kernel::ComputeC_2()(const Line_2&)` -
      • `Kernel::ComputeDx_2()(const Direction_2&)` -
      • `Kernel::ComputeDy_2()(const Direction_2&)` -
      • `Kernel::ComputeXmin_2()(const Iso_rectangle_2&)` -
      • `Kernel::ComputeXmax_2()(const Iso_rectangle_2&)` -
      • `Kernel::ComputeYmin_2()(const Iso_rectangle_2&)` -
      • `Kernel::ComputeYmax_2()(const Iso_rectangle_2&)` -
      • `Kernel::ComputeSquaredRadius_2()(const Circle_2&)` -
      • `Kernel::ComputeSquaredRadius_2()(const Point_2&)` -
      • `Kernel::CartesianConstIterator_2()(const Point_2&)` -
      • `Kernel::CartesianConstIterator_2()(const Point_2&, int)` -
      • `Kernel::CartesianConstIterator_2()(const Vector_2&)` -
      • `Kernel::CartesianConstIterator_2()(const Vector_2&, int)` -
      • `Point_3::Point_3(double,double,double)` -
      • `Point_3::Point_3(const Weighted_point_3&)` +
      • `Point_2 Weighted_point_2::point()` +
      • `FT Weighted_point_2::weight()` +
      • `FT Weighted_point_2::x()` +
      • `FT Weighted_point_2::y()` +
      • `FT Weighted_point_2::cartesian(int)` +
      • `FT Weighted_point_2::operator[](int)` +
      • `Bbox_2 Weighted_point_2::bbox()` +
      • `Vector_2::Vector_2(FT, FT)` +
      • `FT Vector_2::x()` +
      • `FT Vector_2::y()` +
      • `FT Vector_2::cartesian(int)` +
      • `FT Vector_2::operator[](int)` +
      • `Direction_2 Vector_2::direction()` +
      • `Vector_2 Vector_2::operator-()` +
      • `Direction_2::Direction_2(FT, FT)` +
      • `Direction_2::Direction_2(Vector_2)` +
      • `RT Direction_2::delta(int)` +
      • `RT Direction_2::dx()` +
      • `RT Direction_2::dy()` +
      • `Direction_2 Direction_2::operator-()` +
      • `Vector_2 Direction_2::vector()` +
      • `Line_2::Line_2(RT, RT, RT)` +
      • `RT Line_2::a()` +
      • `RT Line_2::b()` +
      • `Line_2 Line_2::opposite()` +
      • `Ray_2::Ray_2(Point_2, Point_2)` +
      • `Point_2 Ray_2::source()` +
      • `Segment_2::Segment_2(Point_2, Point_2)` +
      • `Point_2 Segment_2::source()` +
      • `Point_2 Segment_2::target()` +
      • `Point_2 Segment_2::min()` +
      • `Point_2 Segment_2::max()` +
      • `Point_2 Segment_2::vertex(int)` +
      • `Point_2 Segment_2::point(int)` +
      • `Point_2 Segment_2::operator[](int)` +
      • `Segment_2 Segment_2::opposite()` +
      • `Bbox_2 Segment_2::bbox()` +
      • `Triangle_2::Triangle_2(Point_2, Point_2, Point_2)` +
      • `Point_2 Triangle_2::vertex(int)` +
      • `Point_2 Triangle_2::operator[](int)` +
      • `Triangle_2 Triangle_2::opposite()` +
      • `Bbox_2 Triangle_2::bbox()` +
      • `Iso_rectangle_2::Iso_rectangle_2(Point_2, Point_2)` +
      • `Iso_rectangle_2::Iso_rectangle_2(Point_2, Point_2, int)` +
      • `Iso_rectangle_2::Iso_rectangle_2(Point_2, Point_2, Point_2, Point_2)` +
      • `Iso_rectangle_2::Iso_rectangle_2(Bbox_2)` +
      • `Point_2 Iso_rectangle_2::vertex(int)` +
      • `Point_2 Iso_rectangle_2::operator[](int)` +
      • `Point_2 Iso_rectangle_2::min()` +
      • `Point_2 Iso_rectangle_2::max()` +
      • `FT Iso_rectangle_2::xmin()` +
      • `FT Iso_rectangle_2::ymin()` +
      • `FT Iso_rectangle_2::xmax()` +
      • `FT Iso_rectangle_2::ymax()` +
      • `FT Iso_rectangle_2::min_coord(int)` +
      • `FT Iso_rectangle_2::max_coord(int)` +
      • `Bbox_2 Iso_rectangle_2::bbox()` +
      • `Circle_2::Circle_2(Point_2, FT, Orientation)` +
      • `Circle_2::Circle_2(Point_2, Orientation)` +
      • `Point_2 Circle_2::center()` +
      • `FT Circle_2::squared_radius()` +
      • `Orientation Circle_2::orientation()` +
      • `Circle_2 Circle_2::opposite()` +
      • `Point_3::Point_3(FT, FT, FT)` +
      • `Point_3::Point_3(Weighted_point_3)`
      • `Point_3::Point_3(Origin)` -
      • `Weighted_point_3::Weighted_point_3(double,double)` -
      • `Weighted_point_3::Weighted_point_3(const Point_3&, double = 0)` +
      • `FT Point_3::x()` +
      • `FT Point_3::y()` +
      • `FT Point_3::z()` +
      • `FT Point_3::cartesian(int)` +
      • `FT Point_3::operator[](int)` +
      • `Bbox_3 Point_3::bbox()` +
      • `Vector_3 operator-(Point_3, Origin)` +
      • `Vector_3 operator-(Origin, Point_3)` +
      • `Weighted_point_3::Weighted_point_3(FT, FT, FT)` +
      • `Weighted_point_3::Weighted_point_3(Point_3, FT)` +
      • `Weighted_point_3::Weighted_point_3(Point_3)`
      • `Weighted_point_3::Weighted_point_3(Origin)` -
      • `Vector_3::Vector_3(double,double,double)` -
      • `Direction_3::Direction_3(double,double,double)` -
      • `Direction_3::Direction_3(const Vector_3&)` -
      • `Line_3::Line_3(const Point_3&, const Vector_3&)` -
      • `Line_3::Line_3(const Point_3&, const Direction_3&)` -
      • `Plane_3::Plane_3(double,double,double,double)` -
      • `Circle_3::Circle_3(const Point_3&, double, const Plane_3&)` -
      • `Sphere_3::Sphere_3(const Point_3&, double, Orientation = COUNTERCLOCKWISE)` -
      • `Ray_3::Ray_3(const Point_3&, const Point_3&)` -
      • `Segment_3::Segment_3(const Point_3&, const Point_3&)` -
      • `Triangle_3::Triangle_3(const Point_3&, const Point_3&, const Point_3&)` -
      • `Tetrahedron_3::Tetrahedron_3(const Point_3&, const Point_3&, const Point_3&, const Point_3&)` -
      • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&)` -
      • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&, int)` -
      • `Iso_cuboid_3::Iso_cuboid_3(const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&)` -
      • `Iso_cuboid_3::Iso_cuboid_3(const Bbox_3&)` -
      • `Kernel::ConstructPoint_3()(const Weighted_point_3&)` -
      • `Kernel::ConstructPoint_3()(Origin)` -
      • `Kernel::ConstructWeightedPoint_3()(const Point_3&, double = 0)` -
      • `Kernel::ConstructWeightedPoint_3()(Origin)` -
      • `Kernel::ConstructVector_3()(Origin, const Point_3&)` -
      • `Kernel::ConstructVector_3()(const Point_3&, Origin)` -
      • `Kernel::ConstructVector_3()(Null_vector)` -
      • `Kernel::ConstructDirection_3()(const Vector_3&)` -
      • `Kernel::ConstructPlane_3()(double,double,double,double)` -
      • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&)` -
      • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&, int)` -
      • `Kernel::ConstructIsoCuboid_3()(const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&, const Point_3&)` -
      • `Kernel::ConstructLine_3()(const Point_3&, const Vector_3&)` -
      • `Kernel::ConstructLine_3()(const Point_3&, const Direction_3&)` -
      • `Kernel::ConstructRay_3()(const Point_3&, const Point_3&)` -
      • `Kernel::ConstructSphere_3()(const Point_3&, double, Orientation = COUNTERCLOCKWISE)` -
      • `Kernel::ConstructSphere_3()(const Point_3&, Orientation = COUNTERCLOCKWISE)` -
      • `Kernel::ConstructSegment_3()(const Point_3&, const Point_3&)` -
      • `Kernel::ConstructTriangle_3()(const Point_3&, const Point_3&, const Point_3&)` -
      • `Kernel::ConstructTetrahedron_3()(const Point_3&, const Point_3&, const Point_3&, const Point_3&)` -
      • `Kernel::ConstructCircle_3()(const Point_3&, double, const Plane_3&)` -
      • `Kernel::ConstructCircle_3()( -
      • `Kernel::ConstructVertex_3()(const Segment_3&, int)` -
      • `Kernel::ConstructVertex_3()(const Triangle_3&, int)` -
      • `Kernel::ConstructVertex_3()(const Tetrahedron_3&, int)` -
      • `Kernel::ConstructVertex_3()(const Iso_cuboid_3&, int)` -
      • `Kernel::ConstructSource_3()(const Segment_3&)` -
      • `Kernel::ConstructSource_3()(const Ray_3&)` -
      • `Kernel::ConstructTarget_3()(const Target_3&)` -
      • `Kernel::ConstructMinVertex_3()(const Segment_3&)` -
      • `Kernel::ConstructMinVertex_3()(const Iso_cuboid_3&)` -
      • `Kernel::ConstructMaxVertex_3()(const Segment_3&)` -
      • `Kernel::ConstructMaxVertex_3()(const Iso_cuboid_3&)` -
      • `Kernel::ConstructBbox_3()(const Point_3&)` -
      • `Kernel::ConstructBbox_3()(const Segment_3&)` -
      • `Kernel::ConstructBbox_3()(const Triangle_3&)` -
      • `Kernel::ConstructBbox_3()(const Tetrahedron_3&)` -
      • `Kernel::ConstructBbox_3()(const Iso_cuboid_3&)` -
      • `Kernel::ConstructCenter_3()(const Sphere_3&)` -
      • `Kernel::ConstructCenter_3()(const Circle_3&)` -
      • `Kernel::ConstructSecondPoint_3()(const Ray_3&)` -
      • `Kernel::ConstructOppositeVector_3()(const Vector_3&)` -
      • `Kernel::ConstructOppositeDirection_3()(const Direction_3&)` -
      • `Kernel::ConstructOppositeSegment_3()(const Segment_3&)` -
      • `Kernel::ConstructOppositeRay_3()(const Ray_3&)` -
      • `Kernel::ConstructOppositeLine_3()(const Line_3&)` -
      • `Kernel::ConstructOppositeTriangle_3()(const Triangle_3&)` -
      • `Kernel::ConstructOppositePlane_3()(const Plane_3&)` -
      • `Kernel::ConstructOppositeSphere_3()(const Sphere_3&)` -
      • `Kernel::ConstructOppositeCircle_3()(const Circle_3&)` -
      • `Kernel::ComputeWeight_3()(const Weighted_point_3&)` -
      • `Kernel::ComputeX_3()(const Point_3&)` -
      • `Kernel::ComputeX_3()(const Vector_3&)` -
      • `Kernel::ComputeY_3()(const Point_3&)` -
      • `Kernel::ComputeY_3()(const Vector_3&)` -
      • `Kernel::ComputeZ_3()(const Point_3&)` -
      • `Kernel::ComputeZ_3()(const Vector_3&)` -
      • `Kernel::ComputeA_3()(const Line_3&)` -
      • `Kernel::ComputeB_3()(const Line_3&)` -
      • `Kernel::ComputeC_3()(const Line_3&)` -
      • `Kernel::ComputeD_3()(const Line_3&)` -
      • `Kernel::ComputeDx_3()(const Direction_3&)` -
      • `Kernel::ComputeDy_3()(const Direction_3&)` -
      • `Kernel::ComputeDz_3()(const Direction_3&)` -
      • `Kernel::ComputeXmin_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeXmax_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeYmin_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeYmax_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeZmin_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeZmax_3()(const Iso_cuboid_3&)` -
      • `Kernel::ComputeSquaredRadius_3()(const Sphere_3&)` -
      • `Kernel::ComputeSquaredRadius_3()(const Circle_3&)` -
      • `Kernel::ComputeSquaredRadius_3()(const Point_3&)` -
      • `Kernel::CartesianConstIterator_3()(const Point_3&)` -
      • `Kernel::CartesianConstIterator_3()(const Point_3&, int)` -
      • `Kernel::CartesianConstIterator_3()(const Vector_3&)` -
      • `Kernel::CartesianConstIterator_3()(const Vector_3&, int)` +
      • `Point_3 Weighted_point_3::point()` +
      • `FT Weighted_point_3::weight()` +
      • `FT Weighted_point_3::x()` +
      • `FT Weighted_point_3::y()` +
      • `FT Weighted_point_3::z()` +
      • `FT Weighted_point_3::cartesian(int)` +
      • `FT Weighted_point_3::operator[](int)` +
      • `Bbox_3 Weighted_point_3::bbox()` +
      • `Vector_3::Vector_3(FT, FT, FT)` +
      • `Vector_3::Vector_3(Null_vector)` +
      • `FT Vector_3::x()` +
      • `FT Vector_3::y()` +
      • `FT Vector_3::z()` +
      • `FT Vector_3::cartesian(int)` +
      • `FT Vector_3::operator[](int)` +
      • `Direction_3 Vector_3::direction()` +
      • `Vector_3 Vector_3::opposite()` +
      • `Direction_3::Direction_3(RT, RT, RT)` +
      • `Direction_3::Direction_3(Vector_3)` +
      • `RT Direction_3::delta(int)` +
      • `RT Direction_3::dx()` +
      • `RT Direction_3::dy()` +
      • `RT Direction_3::dz()` +
      • `Direction_3 Direction_3::opposite()` +
      • `Vector_3 Direction_3::vector()` +
      • `Line_3::Line_3(Point_3, Vector_3)` +
      • `Line_3::Line_3(Point_3, Direction_3)` +
      • `Line_3 Line_3::opposite()` +
      • `Vector_3 Line_3::to_vector()` +
      • `Direction_3 Line_3::direction()` +
      • `Plane_3::Plane_3(FT, FT, FT, FT)` +
      • `Plane_3::Plane_3(Circle_3)` +
      • `FT Plane_3::a()` +
      • `FT Plane_3::b()` +
      • `FT Plane_3::c()` +
      • `FT Plane_3::d()` +
      • `Plane_3 Plane_3::opposite()` +
      • `Vector_3 Plane_3::orthogonal_vector()` +
      • `Direction_3 Plane_3::orthogonal_direction()` +
      • `Circle_3::Circle_3(Point_3, FT, Plane_3)` +
      • `Point_3 Circle_3::center()` +
      • `FT Circle_3::squared_radius()` +
      • `FT Circle_3::supporting_plane()` +
      • `Sphere_3 Circle_3::diametral_sphere()` +
      • `Sphere_3::Sphere_3(Point_3, FT, Orientation)` +
      • `Sphere_3::Sphere_3(Point_3, Orientation)` +
      • `Sphere_3::Sphere_3(Circle_3)` +
      • `Point_3 Sphere_3::center()` +
      • `FT Sphere_3::squared_radius()` +
      • `Orientation Sphere_3::orientation()` +
      • `Sphere_3 Sphere_3::opposite()` +
      • `Ray_3::Ray_3(Point_3, Point_3)` +
      • `Point_3 Ray_3::source()` +
      • `Segment_3::Segment_3(Point_3, Point_3)` +
      • `Point_3 Segment_3::source()` +
      • `Point_3 Segment_3::target()` +
      • `Point_3 Segment_3::min()` +
      • `Point_3 Segment_3::max()` +
      • `Point_3 Segment_3::vertex(int)` +
      • `Point_3 Segment_3::point(int)` +
      • `Point_3 Segment_3::operator[](int)` +
      • `Segment_3 Segment_3::opposite()` +
      • `Bbox_3 Segment_3::bbox()` +
      • `Triangle_3::Triangle_3(Point_3, Point_3, Point_3)` +
      • `Point_3 Triangle_3::vertex(int)` +
      • `Point_3 Triangle_3::operator[](int)` +
      • `Bbox_3 Triangle_3::bbox()` +
      • `Tetrahedron_3::Tetrahedron_3(Point_3, Point_3, Point_3, Point_3)` +
      • `Point_3 Tetrahedron_3::vertex(int)` +
      • `Point_3 Tetrahedron_3::operator[](int)` +
      • `Bbox_3 Tetrahedron_3::bbox()` +
      • `Iso_cuboid_3::Iso_cuboid_3(Point_3, Point_3)` +
      • `Iso_cuboid_3::Iso_cuboid_3(Point_3, Point_3, int)` +
      • `Iso_cuboid_3::Iso_cuboid_3(Point_3, Point_3, Point_3, Point_3, Point_3, Point_3)` +
      • `Iso_cuboid_3::Iso_cuboid_3(Bbox_3)` +
      • `Point_3 Iso_cuboid_3::vertex(int)` +
      • `Point_3 Iso_cuboid_3::operator[](int)` +
      • `Point_3 Iso_cuboid_3::min()` +
      • `Point_3 Iso_cuboid_3::max()` +
      • `FT Iso_cuboid_3::xmin()` +
      • `FT Iso_cuboid_3::ymin()` +
      • `FT Iso_cuboid_3::zmin()` +
      • `FT Iso_cuboid_3::xmax()` +
      • `FT Iso_cuboid_3::ymax()` +
      • `FT Iso_cuboid_3::zmax()` +
      • `FT Iso_cuboid_3::min_coord(int)` +
      • `FT Iso_cuboid_3::max_coord(int)` +
      • `Bbox_3 Iso_cuboid_3::bbox()`
      \cgalModels `Kernel` diff --git a/Kernel_23/doc/Kernel_23/CGAL/Iso_cuboid_3.h b/Kernel_23/doc/Kernel_23/CGAL/Iso_cuboid_3.h index a32da1d2490d..d2e9a734ad41 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Iso_cuboid_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Iso_cuboid_3.h @@ -31,6 +31,7 @@ class Iso_cuboid_3 { introduces an iso-oriented cuboid `c` with diagonal opposite vertices `p` and `q`. Note that the object is brought in the canonical form. +\cgalEpicExact */ Iso_cuboid_3(const Point_3 &p, const Point_3 &q); @@ -40,6 +41,8 @@ introduces an iso-oriented cuboid `c` with diagonal opposite vertices `p` and `q`. The `int` argument value is only used to distinguish the two overloaded functions. \pre `p.x()<=q.x()`, `p.y()<=q.y()` and `p.z()<=q.z()`. + +\cgalEpicExact */ Iso_cuboid_3(const Point_3 &p, const Point_3 &q, int); @@ -52,6 +55,7 @@ minimal \f$ y\f$ coordinate is the one of `bottom`, the maximal \f$ y\f$ coordinate is the one of `top`, the minimal \f$ z\f$ coordinate is the one of `far`, the maximal \f$ z\f$ coordinate is the one of `close`. +\cgalEpicExact */ Iso_cuboid_3(const Point_3 &left, const Point_3 &right, @@ -75,6 +79,7 @@ const Kernel::RT& hw = RT(1)); /*! If `Kernel::RT` is constructible from double, introduces an iso-oriented cuboid from `bbox`. +\cgalEpicExact */ Iso_cuboid_3(const Bbox_3& bbox); @@ -97,6 +102,7 @@ bool operator!=(const Iso_cuboid_3 &c2) const; /*! returns the i'th vertex modulo 8 of `c`. starting with the lower left vertex. +\cgalEpicExact */ Point_3 vertex(int i) const; @@ -104,52 +110,62 @@ Point_3 vertex(int i) const; returns `vertex(i)`, as indicated in the figure below: \image html IsoCuboid.png \image latex IsoCuboid.png + +\cgalEpicExact */ Point_3 operator[](int i) const; /*! returns the smallest vertex of `c` (= `vertex(0)`). +\cgalEpicExact */ Point_3 min() const; /*! returns the largest vertex of `c` (= `vertex(7)`). +\cgalEpicExact */ Point_3 max() const; /*! returns smallest %Cartesian \f$ x\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT xmin() const; /*! returns smallest %Cartesian \f$ y\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT ymin() const; /*! returns smallest %Cartesian \f$ z\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT zmin() const; /*! returns largest %Cartesian \f$ x\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT xmax() const; /*! returns largest %Cartesian \f$ y\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT ymax() const; /*! returns largest %Cartesian \f$ z\f$-coordinate in `c`. +\cgalEpicExact */ Kernel::FT zmax() const; @@ -157,6 +173,8 @@ Kernel::FT zmax() const; returns `i`-th %Cartesian coordinate of the smallest vertex of `c`. \pre `0 <= i <= 2`. + +\cgalEpicExact */ Kernel::FT min_coord(int i) const; @@ -164,6 +182,8 @@ Kernel::FT min_coord(int i) const; returns `i`-th %Cartesian coordinate of the largest vertex of `c`. \pre `0 <= i <= 2`. + +\cgalEpicExact */ Kernel::FT max_coord(int i) const; @@ -213,6 +233,7 @@ Kernel::FT volume() const; /*! returns a bounding box containing `c`. +\cgalEpicExact */ Bbox_3 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Iso_rectangle_2.h b/Kernel_23/doc/Kernel_23/CGAL/Iso_rectangle_2.h index d7228803e0e2..764b6ac796f7 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Iso_rectangle_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Iso_rectangle_2.h @@ -32,6 +32,7 @@ class Iso_rectangle_2 { introduces an iso-oriented rectangle `r` with diagonal opposite vertices `p` and `q`. Note that the object is brought in the canonical form. +\cgalEpicExact */ Iso_rectangle_2(const Point_2 &p, const Point_2 &q); @@ -41,6 +42,8 @@ introduces an iso-oriented rectangle `r` with diagonal opposite vertices `p` and `q`. The `int` argument value is only used to distinguish the two overloaded functions. \pre `p.x()<=q.x()` and `p.y()<=q.y()`. + +\cgalEpicExact */ Iso_rectangle_2(const Point_2 &p, const Point_2 &q, @@ -52,6 +55,7 @@ minimal \f$ x\f$ coordinate is the one of `left`, the maximal \f$ x\f$ coordinate is the one of `right`, the minimal \f$ y\f$ coordinate is the one of `bottom`, the maximal \f$ y\f$ coordinate is the one of `top`. +\cgalEpicExact */ Iso_rectangle_2(const Point_2 &left, const Point_2 &right, @@ -71,6 +75,7 @@ const Kernel::RT& hw = RT(1)); /*! If `Kernel::RT` is constructible from double, introduces an iso-oriented rectangle from `bbox`. +\cgalEpicExact */ Iso_rectangle_2(const Bbox_2& bbox); @@ -93,41 +98,49 @@ bool operator!=(const Iso_rectangle_2 &r2) const; /*! returns the i'th vertex modulo 4 of `r` in counterclockwise order, starting with the lower left vertex. +\cgalEpicExact */ Point_2 vertex(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_2 operator[](int i) const; /*! returns the lower left vertex of `r` (= `vertex(0)`). +\cgalEpicExact */ Point_2 min() const; /*! returns the upper right vertex of `r` (= `vertex(2)`). +\cgalEpicExact */ Point_2 max() const; /*! returns the \f$ x\f$ coordinate of lower left vertex of `r`. +\cgalEpicExact */ Kernel::FT xmin() const; /*! returns the \f$ y\f$ coordinate of lower left vertex of `r`. +\cgalEpicExact */ Kernel::FT ymin() const; /*! returns the \f$ x\f$ coordinate of upper right vertex of `r`. +\cgalEpicExact */ Kernel::FT xmax() const; /*! returns the \f$ y\f$ coordinate of upper right vertex of `r`. +\cgalEpicExact */ Kernel::FT ymax() const; @@ -135,6 +148,8 @@ Kernel::FT ymax() const; returns the `i`'th %Cartesian coordinate of the lower left vertex of `r`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT min_coord(int i) const; @@ -142,6 +157,8 @@ Kernel::FT min_coord(int i) const; returns the `i`'th %Cartesian coordinate of the upper right vertex of `r`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT max_coord(int i) const; @@ -191,6 +208,7 @@ Kernel::FT area() const; /*! returns a bounding box containing `r`. +\cgalEpicExact */ Bbox_2 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Line_2.h b/Kernel_23/doc/Kernel_23/CGAL/Line_2.h index 079c65a6eb6c..2cd4a22a791b 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Line_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Line_2.h @@ -47,6 +47,7 @@ class Line_2 { /*! introduces a line `l` with the line equation in %Cartesian coordinates \f$ ax +by +c = 0\f$. +\cgalEpicExact */ Line_2(const Kernel::RT &a, const Kernel::RT &b, const Kernel::RT &c); @@ -98,16 +99,19 @@ bool operator!=(const Line_2 &h) const; /*! returns the first coefficient of `l`. +\cgalEpicExact */ Kernel::RT a() const; /*! returns the second coefficient of `l`. +\cgalEpicExact */ Kernel::RT b() const; /*! returns the third coefficient of `l`. +\cgalEpicExact */ Kernel::RT c() const; @@ -205,6 +209,7 @@ Direction_2 direction() const; /*! returns the line with opposite direction. +\cgalEpicExact */ Line_2 opposite() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Line_3.h b/Kernel_23/doc/Kernel_23/CGAL/Line_3.h index e7b19f591073..57be8fabf5b1 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Line_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Line_3.h @@ -25,12 +25,14 @@ Line_3(const Point_3 &p, const Point_3 &q); /*! introduces a line `l` passing through point `p` with direction `d`. +\cgalEpicExact */ Line_3(const Point_3 &p, const Direction_3&d); /*! introduces a line `l` passing through point `p` and oriented by `v`. +\cgalEpicExact */ Line_3(const Point_3 &p, const Vector_3&v); @@ -100,16 +102,19 @@ Plane_3 perpendicular_plane(const Point_3 &p) const; /*! returns the line with opposite direction. +\cgalEpicExact */ Line_3 opposite() const; /*! returns a vector having the same direction as `l`. +\cgalEpicExact */ Vector_3 to_vector() const; /*! returns the direction of `l`. +\cgalEpicExact */ Direction_3 direction() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Plane_3.h b/Kernel_23/doc/Kernel_23/CGAL/Plane_3.h index 9ef778c7c174..88c71c73700b 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Plane_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Plane_3.h @@ -29,6 +29,7 @@ creates a plane `h` defined by the equation \f$ a\, px +b\, py +c\, pz + d = 0\f$. Notice that `h` is degenerate if \f$ a = b = c = 0\f$. +\cgalEpicExact */ Plane_3(const Kernel::RT &a, const Kernel::RT &b, @@ -84,6 +85,7 @@ const Point_3 &p); /*! introduces a plane `h` that is defined as the plane containing the circle. +\cgalEpicExact */ Plane_3(const Circle_3 &c); @@ -105,21 +107,25 @@ bool operator!=(const Plane_3 &h2) const; /*! returns the first coefficient of `h`. +\cgalEpicExact */ Kernel::RT a() const; /*! returns the second coefficient of `h`. +\cgalEpicExact */ Kernel::RT b() const; /*! returns the third coefficient of `h`. +\cgalEpicExact */ Kernel::RT c() const; /*! returns the fourth coefficient of `h`. +\cgalEpicExact */ Kernel::RT d() const; @@ -137,6 +143,7 @@ Point_3 projection(const Point_3 &p) const; /*! returns the plane with opposite orientation. +\cgalEpicExact */ Plane_3 opposite() const; @@ -148,12 +155,14 @@ Point_3 point() const; /*! returns a vector that is orthogonal to `h` and that is directed to the positive side of `h`. +\cgalEpicExact */ Vector_3 orthogonal_vector() const; /*! returns the direction that is orthogonal to `h` and that is directed to the positive side of `h`. +\cgalEpicExact */ Direction_3 orthogonal_direction() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Point_2.h b/Kernel_23/doc/Kernel_23/CGAL/Point_2.h index 00ea07ef2fbc..ffa2cf49cc92 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Point_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Point_2.h @@ -55,6 +55,7 @@ typedef unspecified_type Cartesian_const_iterator; /*! introduces a variable `p` with %Cartesian coordinates \f$ (0,0)\f$. +\cgalEpicExact */ Point_2(const Origin &ORIGIN); @@ -66,6 +67,7 @@ Point_2(int x, int y); /*! introduces a point `p` initialized to `(x,y)` provided `RT` supports construction from `double`. +\cgalEpicExact */ Point_2(double x, double y); @@ -77,11 +79,13 @@ Point_2(const Kernel::RT &hx, const Kernel::RT &hy, const Kernel::RT &hw = RT(1) /*! introduces a point `p` initialized to `(x,y)`. +\cgalEpicExact */ Point_2(const Kernel::FT &x, const Kernel::FT &y); /*! introduces a point from a weighted point. +\cgalEpicExact \warning The `explicit` keyword is used to avoid accidental implicit conversions between Point_2 and Weighted_point_2. @@ -141,11 +145,13 @@ Kernel::RT hw() const; /*! returns the %Cartesian \f$ x\f$ coordinate, that is `hx()`/`hw()`. +\cgalEpicExact */ Kernel::FT x() const; /*! returns the %Cartesian \f$ y\f$ coordinate, that is `hy()`/`hw()`. +\cgalEpicExact */ Kernel::FT y() const; @@ -166,12 +172,16 @@ Kernel::RT homogeneous(int i) const; /*! returns the i'th %Cartesian coordinate of `p`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -194,6 +204,7 @@ int dimension() const; /*! returns a bounding box containing `p`. +\cgalEpicExact */ Bbox_2 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Point_3.h b/Kernel_23/doc/Kernel_23/CGAL/Point_3.h index 0babd70a4c84..70db98ff117c 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Point_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Point_3.h @@ -40,6 +40,7 @@ typedef unspecified_type Cartesian_const_iterator; /*! introduces a point with %Cartesian coordinates\f$ (0,0,0)\f$. +\cgalEpicExact */ Point_3(const Origin &ORIGIN); @@ -51,6 +52,7 @@ Point_3(int x, int y, int z); /*! introduces a point `p` initialized to `(x,y,z)` provided `RT` supports it. +\cgalEpicExact */ Point_3(double x, double y, double z); @@ -62,6 +64,7 @@ Point_3(const Kernel::RT &hx, const Kernel::RT &hy, const Kernel::RT &hz, const /*! introduces a point `p` initialized to `(x,y,z)`. +\cgalEpicExact */ Point_3(const Kernel::FT &x, const Kernel::FT &y, const Kernel::FT &z); @@ -70,6 +73,8 @@ introduces a point from a weighted point. \warning The `explicit` keyword is used to avoid accidental implicit conversions between Point_3 and Weighted_point_3. + +\cgalEpicExact */ explicit Point_3(const Kernel::Weighted_point_3 &wp); @@ -131,16 +136,19 @@ Kernel::RT hw() const; /*! returns the %Cartesian \f$ x\f$ coordinate, that is `hx()`/`hw()`. +\cgalEpicExact */ Kernel::FT x() const; /*! returns the %Cartesian \f$ y\f$ coordinate, that is `hy()`/`hw()`. +\cgalEpicExact */ Kernel::FT y() const; /*! returns the %Cartesian \f$ z\f$ coordinate, that is `hz()`/`hw()`. +\cgalEpicExact */ Kernel::FT z() const; @@ -161,12 +169,16 @@ Kernel::RT homogeneous(int i) const; /*! returns the i'th %Cartesian coordinate of `p`. \pre `0 <= i <= 2`. + +\cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 2`. + +\cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -189,6 +201,7 @@ int dimension() const; /*! returns a bounding box containing `p`. +\cgalEpicExact */ Bbox_3 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Ray_2.h b/Kernel_23/doc/Kernel_23/CGAL/Ray_2.h index c153b0f9ee38..c38f84606eea 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Ray_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Ray_2.h @@ -20,6 +20,7 @@ class Ray_2 { /*! introduces a ray `r` with source `p` and passing through point `q`. +\cgalEpicExact */ Ray_2(const Point_2 &p, const Point_2&q); @@ -59,6 +60,7 @@ bool operator!=(const Ray_2 &h) const; /*! returns the source of `r`. +\cgalEpicExact */ Point_2 source() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Ray_3.h b/Kernel_23/doc/Kernel_23/CGAL/Ray_3.h index 86e6efce248a..766e7403240c 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Ray_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Ray_3.h @@ -20,6 +20,7 @@ class Ray_3 { /*! introduces a ray `r` with source `p` and passing through point `q`. +\cgalEpicExact */ Ray_3(const Point_3 &p, const Point_3 &q); @@ -59,6 +60,7 @@ bool operator!=(const Ray_3 &h) const; /*! returns the source of `r` +\cgalEpicExact */ Point_3 source() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Segment_2.h b/Kernel_23/doc/Kernel_23/CGAL/Segment_2.h index 71ae42573350..b2ce17ed50f0 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Segment_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Segment_2.h @@ -29,6 +29,7 @@ class Segment_2 { introduces a segment `s` with source `p` and target `q`. The segment is directed from the source towards the target. +\cgalEpicExact */ Segment_2(const Point_2 &p, const Point_2 &q); @@ -50,21 +51,25 @@ bool operator!=(const Segment_2 &q) const; /*! returns the source of `s`. +\cgalEpicExact */ Point_2 source() const; /*! returns the target of `s`. +\cgalEpicExact */ Point_2 target() const; /*! returns the point of `s` with lexicographically smallest coordinate. +\cgalEpicExact */ Point_2 min() const; /*! returns the point of `s` with lexicographically largest coordinate. +\cgalEpicExact */ Point_2 max() const; @@ -73,16 +78,19 @@ returns source or target of `s`: `vertex(0)` returns the source of `s`, `vertex(1)` returns the target of `s`. The parameter `i` is taken modulo 2, which gives easy access to the other vertex. +\cgalEpicExact */ Point_2 vertex(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_2 point(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_2 operator[](int i) const; @@ -103,6 +111,7 @@ Vector_2 to_vector() const; /*! returns a segment with source and target point interchanged. +\cgalEpicExact */ Segment_2 opposite() const; @@ -152,6 +161,7 @@ bool collinear_has_on(const Point_2 &p) const; /*! returns a bounding box containing `s`. +\cgalEpicExact */ Bbox_2 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Segment_3.h b/Kernel_23/doc/Kernel_23/CGAL/Segment_3.h index 36dcda524944..dc3dd9b4f1c8 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Segment_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Segment_3.h @@ -29,6 +29,7 @@ class Segment_3 { introduces a segment `s` with source `p` and target `q`. It is directed from the source towards the target. +\cgalEpicExact */ Segment_3(const Point_3 &p, const Point_3 &q); @@ -50,21 +51,25 @@ bool operator!=(const Segment_3 &q) const; /*! returns the source of `s`. +\cgalEpicExact */ Point_3 source() const; /*! returns the target of `s`. +\cgalEpicExact */ Point_3 target() const; /*! returns the point of `s` with smallest coordinate (lexicographically). +\cgalEpicExact */ Point_3 min() const; /*! returns the point of `s` with largest coordinate (lexicographically). +\cgalEpicExact */ Point_3 max() const; @@ -73,16 +78,19 @@ returns source or target of `s`: `vertex(0)` returns the source, `vertex(1)` returns the target. The parameter `i` is taken modulo 2, which gives easy access to the other vertex. +\cgalEpicExact */ Point_3 vertex(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_3 point(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_3 operator[](int i) const; @@ -103,6 +111,7 @@ Direction_3 direction() const; /*! returns a segment with source and target interchanged. +\cgalEpicExact */ Segment_3 opposite() const; @@ -126,6 +135,7 @@ bool has_on(const Point_3 &p) const; /*! returns a bounding box containing `s`. +\cgalEpicExact */ Bbox_3 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Sphere_3.h b/Kernel_23/doc/Kernel_23/CGAL/Sphere_3.h index f8541de6dd30..04fef101b3c9 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Sphere_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Sphere_3.h @@ -29,6 +29,8 @@ It is initialized to the sphere with center `center`, squared radius `squared_radius` and orientation `orientation`. \pre `orientation != COPLANAR` and `squared_radius >= 0`. + +\cgalEpicExact */ Sphere_3( const Point_3 & center, const Kernel::FT & squared_radius, @@ -78,6 +80,8 @@ It is initialized to the sphere with center `center`, squared radius zero and orientation `orientation`. \pre `orientation != COPLANAR`. \post `c.is_degenerate()` = `true`. + +\cgalEpicExact */ Sphere_3( const Point_3 & center, const Orientation& orientation = COUNTERCLOCKWISE); @@ -86,6 +90,7 @@ Sphere_3( const Point_3 & center, introduces a variable `c` of type `Sphere_3`. It is initialized to the diametral sphere of the circle. +\cgalEpicExact */ Sphere_3( const Circle_3 & c ); @@ -97,18 +102,21 @@ Sphere_3( const Circle_3 & c ); /*! returns the center of `c`. +\cgalEpicExact */ const Point_3 & center( ) const; /*! returns the squared radius of `c`. +\cgalEpicExact */ Kernel::FT const& squared_radius( ) const; /*! returns the orientation of `c`. +\cgalEpicExact */ Orientation const& orientation( ) const; @@ -202,6 +210,7 @@ bool has_on(const Circle_3 &p) const; returns the sphere with the same center and squared radius as `c` but with opposite orientation. +\cgalEpicExact */ Sphere_3 opposite() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Tetrahedron_3.h b/Kernel_23/doc/Kernel_23/CGAL/Tetrahedron_3.h index 649a874e2423..d045765309e6 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Tetrahedron_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Tetrahedron_3.h @@ -29,6 +29,7 @@ class Tetrahedron_3 { /*! introduces a tetrahedron `t` with vertices `p0`, `p1`, `p2` and `p3`. +\cgalEpicExact */ Tetrahedron_3(const Point_3 &p0, const Point_3 &p1, @@ -54,11 +55,13 @@ bool operator!=(const Tetrahedron_3 &t2) const; /*! returns the i'th vertex modulo 4 of `t`. +\cgalEpicExact */ Point_3 vertex(int i) const; /*! returns `vertex(int i)`. +\cgalEpicExact */ Point_3 operator[](int i) const; @@ -129,6 +132,7 @@ Kernel::FT volume() const; /*! returns a bounding box containing `t`. +\cgalEpicExact */ Bbox_3 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Triangle_2.h b/Kernel_23/doc/Kernel_23/CGAL/Triangle_2.h index e19f43bc5226..8812fe4d09cb 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Triangle_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Triangle_2.h @@ -25,6 +25,7 @@ class Triangle_2 { /*! introduces a triangle `t` with vertices `p`, `q` and `r`. +\cgalEpicExact */ Triangle_2(const Point_2 &p, const Point_2 &q, @@ -49,11 +50,13 @@ bool operator!=(const Triangle_2 &t2) const; /*! returns the i'th vertex modulo 3 of `t`. +\cgalEpicExact */ Point_2 vertex(int i) const; /*! returns `vertex(i)`. +\cgalEpicExact */ Point_2 operator[](int i) const; @@ -127,6 +130,7 @@ bool has_on_unbounded_side(const Point_2 &p) const; returns a triangle where the boundary is oriented the other way round (this flips the positive and the negative side, but not the bounded and unbounded side). +\cgalEpicExact */ Triangle_2 opposite(); @@ -137,6 +141,7 @@ Kernel::FT area() const; /*! returns a bounding box containing `t`. +\cgalEpicExact */ Bbox_2 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Triangle_3.h b/Kernel_23/doc/Kernel_23/CGAL/Triangle_3.h index d0dadad48b80..1f9396d91e54 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Triangle_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Triangle_3.h @@ -20,6 +20,7 @@ class Triangle_3 { /*! introduces a triangle `t` with vertices `p`, `q` and `r`. +\cgalEpicExact */ Triangle_3(const Point_3 &p, const Point_3 &q, @@ -44,11 +45,13 @@ bool operator!=(const Triangle_3 &t2) const; /*! returns the i'th vertex modulo 3 of `t`. +\cgalEpicExact */ Point_3 vertex(int i) const; /*! returns `vertex(int i)`. +\cgalEpicExact */ Point_3 operator[](int i) const; @@ -86,6 +89,7 @@ Kernel::FT squared_area() const; /*! returns a bounding box containing `t`. +\cgalEpicExact */ Bbox_3 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Vector_2.h b/Kernel_23/doc/Kernel_23/CGAL/Vector_2.h index eaeab03a882a..c8b45010ae48 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Vector_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Vector_2.h @@ -66,6 +66,7 @@ Vector_2(int x, int y); /*! introduces a vector `v` initialized to `(x,y)`. +\cgalEpicExact */ Vector_2(double x, double y); @@ -77,6 +78,7 @@ Vector_2(const Kernel::RT &hx, const Kernel::RT &hy, const Kernel::RT &hw = RT(1 /*! introduces a vector `v` initialized to `(x,y)`. +\cgalEpicExact */ Vector_2(const Kernel::FT &x, const Kernel::FT &y); @@ -107,11 +109,13 @@ Kernel::RT hw() const; /*! returns the `x`-coordinate of `v`, that is `hx()`/`hw()`. +\cgalEpicExact */ Kernel::FT x() const; /*! returns the `y`-coordinate of `v`, that is `hy()`/`hw()`. +\cgalEpicExact */ Kernel::FT y() const; @@ -133,12 +137,16 @@ Kernel::RT homogeneous(int i) const; /*! returns the i'th Cartesian coordinate of `v`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 1`. + +\cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -161,6 +169,7 @@ int dimension() const; /*! returns the direction which passes through `v`. +\cgalEpicExact */ Direction_2 direction() const; @@ -216,6 +225,7 @@ Vector_2& operator-=(const Vector_2 &w); /*! returns the opposite vector. +\cgalEpicExact */ Vector_2 operator-() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Vector_3.h b/Kernel_23/doc/Kernel_23/CGAL/Vector_3.h index d126bd977403..e1c38752e677 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Vector_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Vector_3.h @@ -59,6 +59,7 @@ Vector_3(const Line_3 &l); /*! introduces a null vector `v`. +\cgalEpicExact */ Vector_3(const Null_vector &NULL_VECTOR); @@ -69,6 +70,7 @@ Vector_3(int x, int y, int z); /*! introduces a vector `v` initialized to `(x, y, z)`. +\cgalEpicExact */ Vector_3(double x, double y, double z); @@ -79,6 +81,7 @@ Vector_3(const Kernel::RT &hx, const Kernel::RT &hy, const Kernel::RT &hz, const /*! introduces a vector `v` initialized to `(x, y, z)`. +\cgalEpicExact */ Vector_3(const Kernel::FT &x, const Kernel::FT &y, const Kernel::FT &z); @@ -114,16 +117,19 @@ Kernel::RT hw() const; /*! returns the `x`-coordinate of `v`, that is `hx()`/`hw()`. +\cgalEpicExact */ Kernel::FT x() const; /*! returns the `y`-coordinate of `v`, that is `hy()`/`hw()`. +\cgalEpicExact */ Kernel::FT y() const; /*! returns the `z` coordinate of `v`, that is `hz()`/`hw()`. +\cgalEpicExact */ Kernel::FT z() const; @@ -144,12 +150,16 @@ Kernel::RT homogeneous(int i) const; /*! returns the i'th %Cartesian coordinate of `v`. \pre `0 <= i <= 2` + +\cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 2` + +\cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -177,6 +187,8 @@ Vector_3 transform(const Aff_transformation_3 &t) const; /*! returns the direction of `v`. + +\cgalEpicExact */ Direction_3 direction() const; @@ -220,6 +232,7 @@ Vector_3& operator-=(const Vector_3 &w); /*! Returns the opposite vector. +\cgalEpicExact */ Vector_3 operator-() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h index 01a147e6d645..a61368add0ed 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h @@ -43,12 +43,14 @@ class Weighted_point_2 /*! introduces a weighted point with %Cartesian coordinates `(0,0)` and weight `0`. + \cgalEpicExact */ Weighted_point_2(const Origin &ORIGIN); /*! introduces a weighted point from point `p` and weight `0`. - + \cgalEpicExact + \warning The `explicit` keyword is used to avoid accidental implicit conversions between Point_2 and Weighted_point_2. */ @@ -56,11 +58,13 @@ class Weighted_point_2 /*! introduces a weighted point from point `p` and weight `w`. + \cgalEpicExact */ Weighted_point_2(const Point_2& p, Kernel::FT& w); /*! introduces a weighted point with coordinates `x`, `y`, and weight `0`. + \cgalEpicExact */ Weighted_point_2(const Kernel::FT& x, const Kernel::FT& y); @@ -71,11 +75,13 @@ class Weighted_point_2 /*! returns the point of the weighted point. + \cgalEpicExact */ Point_2 point() const; /*! returns the weight of the weighted point. + \cgalEpicExact */ Kernel::FT weight() const; /// @} @@ -129,11 +135,13 @@ class Weighted_point_2 /*! returns the %Cartesian \f$ x\f$ coordinate, that is `hx()`/`hw()`. + \cgalEpicExact */ Kernel::FT x() const; /*! returns the %Cartesian \f$ y\f$ coordinate, that is `hy()`/`hw()`. + \cgalEpicExact */ Kernel::FT y() const; @@ -154,12 +162,16 @@ class Weighted_point_2 /*! returns the i'th %Cartesian coordinate of `p`. \pre `0 <= i <= 1` + + \cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 1` + + \cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -182,6 +194,7 @@ class Weighted_point_2 /*! returns a bounding box containing `p`. + \cgalEpicExact */ Bbox_2 bbox() const; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_3.h b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_3.h index 3dcb39e1786b..22a1f071fe74 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_3.h @@ -43,6 +43,7 @@ class Weighted_point_3 /*! introduces a weighted point with %Cartesian coordinates `(0,0,0)` and weight `0`. + \cgalEpicExact */ Weighted_point_3(const Origin &ORIGIN); @@ -51,16 +52,20 @@ class Weighted_point_3 \warning The `explicit` keyword is used to avoid accidental implicit conversions between Point_3 and Weighted_point_3. + + \cgalEpicExact */ explicit Weighted_point_3(const Point_3& p); /*! introduces a weighted point from point `p` and weight `w`. + \cgalEpicExact */ Weighted_point_3(const Point_3& p, Kernel::FT& w); /*! introduces a weighted point with coordinates `x`, `y`, `z` and weight `0`. + \cgalEpicExact */ Weighted_point_3(const Kernel::FT& x, const Kernel::FT& y, const Kernel::FT& z); @@ -71,11 +76,13 @@ class Weighted_point_3 /*! returns the point of the weighted point. + \cgalEpicExact */ Point_3 point() const; /*! returns the weight of the weighted point. + \cgalEpicExact */ Kernel::FT weight() const; /// @} @@ -134,16 +141,19 @@ class Weighted_point_3 /*! returns the %Cartesian \f$ x\f$ coordinate, that is `hx()`/`hw()`. + \cgalEpicExact */ Kernel::FT x() const; /*! returns the %Cartesian \f$ y\f$ coordinate, that is `hy()`/`hw()`. + \cgalEpicExact */ Kernel::FT y() const; /*! returns the %Cartesian \f$ z\f$ coordinate, that is `hz()`/`hw()`. + \cgalEpicExact */ Kernel::FT z() const; @@ -164,12 +174,16 @@ class Weighted_point_3 /*! returns the i'th %Cartesian coordinate of `p`. \pre `0 <= i <= 2` + + \cgalEpicExact */ Kernel::FT cartesian(int i) const; /*! returns `cartesian(i)`. \pre `0 <= i <= 2` + + \cgalEpicExact */ Kernel::FT operator[](int i) const; @@ -192,6 +206,7 @@ class Weighted_point_3 /*! returns a bounding box containing `p`. + \cgalEpicExact */ Bbox_3 bbox() const; From f6451700d13abd352ff3426effb37ff5c4038bef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 27 Apr 2023 15:19:35 +0200 Subject: [PATCH 215/943] fix memory leak --- AABB_tree/demo/AABB_tree/MainWindow.cpp | 2 +- AABB_tree/demo/AABB_tree/MainWindow.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/MainWindow.cpp b/AABB_tree/demo/AABB_tree/MainWindow.cpp index 4321e396b8d4..cd1444b9968c 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.cpp +++ b/AABB_tree/demo/AABB_tree/MainWindow.cpp @@ -16,7 +16,7 @@ MainWindow::MainWindow(QWidget* parent) - : CGAL::Qt::DemosMainWindow(parent), myEngine(new QJSEngine()) + : CGAL::Qt::DemosMainWindow(parent), myEngine(new QJSEngine(this)) { ui = new Ui::MainWindow; ui->setupUi(this); diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index 50cd927a7cb4..87f6de0c76c9 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -23,7 +23,7 @@ struct Foo : public QObject QJSEngine* myEngine; Foo() - : myEngine(new QJSEngine()) + : myEngine(new QJSEngine(this)) { QJSValue baz = myEngine->newQObject(this); myEngine->.globalObject().setProperty("baz", baz); From 003ce240b65d2563fbb9799262c9912df32b5893 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 27 Apr 2023 15:34:53 +0200 Subject: [PATCH 216/943] Added EPIC exact tag for the (two relevant) global functions. --- .../CGAL/Exact_predicates_inexact_constructions_kernel.h | 4 ++++ Kernel_23/doc/Kernel_23/CGAL/Kernel/global_functions.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h index 8a5e33aa5fc8..3349ebca9777 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h @@ -204,6 +204,10 @@ are trivial:

    • `FT Iso_cuboid_3::min_coord(int)`
    • `FT Iso_cuboid_3::max_coord(int)`
    • `Bbox_3 Iso_cuboid_3::bbox()` +
    • `Point_2 min_vertex(Iso_rectangle_2)` +
    • `Point_2 min_vertex(Iso_cuboid_3)` +
    • `Point_2 max_vertex(Iso_rectangle_2)` +
    • `Point_2 max_vertex(Iso_cuboid_3)`
    \cgalModels `Kernel` diff --git a/Kernel_23/doc/Kernel_23/CGAL/Kernel/global_functions.h b/Kernel_23/doc/Kernel_23/CGAL/Kernel/global_functions.h index 6be2530b49b6..7ac44aca209b 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Kernel/global_functions.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Kernel/global_functions.h @@ -2242,12 +2242,14 @@ const CGAL::Point_3& q); /*! computes the vertex with the lexicographically largest coordinates of the iso rectangle `ir`. +\cgalEpicExact */ template CGAL::Point_2 max_vertex( const CGAL::Iso_rectangle_2& ir ); /*! computes the vertex with the lexicographically largest coordinates of the iso cuboid `ic`. +\cgalEpicExact */ template CGAL::Point_3 max_vertex( const CGAL::Iso_cuboid_3& ic ); @@ -2292,12 +2294,14 @@ CGAL::Point_3 midpoint( const CGAL::Segment_3& s ); /*! computes the vertex with the lexicographically smallest coordinates of the iso rectangle `ir`. +\cgalEpicExact */ template CGAL::Point_2 min_vertex( const CGAL::Iso_rectangle_2& ir ); /*! computes the vertex with the lexicographically smallest coordinates of the iso cuboid `ic`. +\cgalEpicExact */ template CGAL::Point_3 min_vertex( const CGAL::Iso_cuboid_3& ic ); From 4ad2561b39332ed3a82f6b7e33e352705d96d372 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 27 Apr 2023 16:52:25 +0200 Subject: [PATCH 217/943] remove trailing whitespace --- .../Exact_predicates_inexact_constructions_kernel.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h index 3349ebca9777..aa14c521c2e9 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Exact_predicates_inexact_constructions_kernel.h @@ -6,12 +6,12 @@ namespace CGAL { A typedef to a kernel that has the following properties: -
      -
    • It uses %Cartesian representation. -
    • It supports constructions of points from `double` %Cartesian -coordinates. -
    • It provides exact geometric predicates, but geometric -constructions are not exact in general. +
        +
      • It uses %Cartesian representation. +
      • It supports constructions of points from `double` %Cartesian +coordinates. +
      • It provides exact geometric predicates, but geometric +constructions are not exact in general.
      Trivial Constructions
      From 721aafd22ed39c7ad46d7ea20d90cc2bb6dfa10c Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 27 Apr 2023 17:49:50 +0200 Subject: [PATCH 218/943] remove trailing whitespace --- Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h index a61368add0ed..2b0fe496d5e6 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Weighted_point_2.h @@ -50,7 +50,7 @@ class Weighted_point_2 /*! introduces a weighted point from point `p` and weight `0`. \cgalEpicExact - + \warning The `explicit` keyword is used to avoid accidental implicit conversions between Point_2 and Weighted_point_2. */ @@ -162,7 +162,7 @@ class Weighted_point_2 /*! returns the i'th %Cartesian coordinate of `p`. \pre `0 <= i <= 1` - + \cgalEpicExact */ Kernel::FT cartesian(int i) const; @@ -170,7 +170,7 @@ class Weighted_point_2 /*! returns `cartesian(i)`. \pre `0 <= i <= 1` - + \cgalEpicExact */ Kernel::FT operator[](int i) const; From a5cfd5ebad33a96b2ffc28b77f983ca90b0e63d3 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Fri, 28 Apr 2023 09:09:55 +0200 Subject: [PATCH 219/943] add cgalepicexact macro for all doxygen versions --- Documentation/doc/resources/1.8.13/BaseDoxyfile.in | 3 ++- Documentation/doc/resources/1.8.14/BaseDoxyfile.in | 3 ++- Documentation/doc/resources/1.8.20/BaseDoxyfile.in | 3 ++- Documentation/doc/resources/1.8.4/BaseDoxyfile.in | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in index 69351ed254e8..1cc6aa39585e 100644 --- a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in @@ -359,7 +359,8 @@ ALIASES = "cgal=%CGAL" \ "cgalParamNEnd=
    \htmlonly[block] \endhtmlonly " \ "cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \ "cgalParamSectionEnd=\cgalParamNEnd" \ - "cgalParamPrecondition{1}=
  • Precondition: \1
  • " + "cgalParamPrecondition{1}=
  • Precondition: \1
  • " \ + "cgalEpicExact=
    Exactness
    This construction is trivial and therefore always exact in `Exact_predicates_inexact_constructions_kernel`.
    " # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" diff --git a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in index 1a59e5d2d97f..3a280dbad850 100644 --- a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in @@ -353,7 +353,8 @@ ALIASES = "cgal=%CGAL" \ "cgalParamNEnd= \htmlonly[block] \endhtmlonly " \ "cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \ "cgalParamSectionEnd=\cgalParamNEnd" \ - "cgalParamPrecondition{1}=
  • Precondition: \1
  • " + "cgalParamPrecondition{1}=
  • Precondition: \1
  • " \ + "cgalEpicExact=
    Exactness
    This construction is trivial and therefore always exact in `Exact_predicates_inexact_constructions_kernel`.
    " # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For diff --git a/Documentation/doc/resources/1.8.20/BaseDoxyfile.in b/Documentation/doc/resources/1.8.20/BaseDoxyfile.in index f950a6836db9..1c3073af6f9a 100644 --- a/Documentation/doc/resources/1.8.20/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.20/BaseDoxyfile.in @@ -375,7 +375,8 @@ ALIASES = "cgal=%CGAL" \ "cgalParamNEnd= \htmlonly[block] \endhtmlonly " \ "cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \ "cgalParamSectionEnd=\cgalParamNEnd" \ - "cgalParamPrecondition{1}=
  • Precondition: \1
  • " + "cgalParamPrecondition{1}=
  • Precondition: \1
  • " \ + "cgalEpicExact=
    Exactness
    This construction is trivial and therefore always exact in `Exact_predicates_inexact_constructions_kernel`.
    " # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources diff --git a/Documentation/doc/resources/1.8.4/BaseDoxyfile.in b/Documentation/doc/resources/1.8.4/BaseDoxyfile.in index 70267fd649dc..4532a3fc4a18 100644 --- a/Documentation/doc/resources/1.8.4/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.4/BaseDoxyfile.in @@ -365,6 +365,7 @@ ALIASES+= "cgalParamNEnd= \htmlonly[block] \endhtmlonly
    Exactness
    This construction is trivial and therefore always exact in `Exact_predicates_inexact_constructions_kernel`.
    " # This tag can be used to specify a number of word-keyword mappings (TCL only). From a10460dd31365c64f5ddf581eb24ce9cfdf1430a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 28 Apr 2023 14:05:01 +0200 Subject: [PATCH 220/943] Remove trailing whitespaces --- Polyhedron/demo/Polyhedron/MainWindow.h | 2 +- Three/include/CGAL/Three/exceptions.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index f0c3adca0078..d970c1813ef3 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -451,7 +451,7 @@ protected Q_SLOTS: //! Calls evaluate_script(script, filename, true). void evaluate_script_quiet(QString script, const QString & fileName = QString()); - #endif + #endif QMutex mutex; QWaitCondition wait_condition; diff --git a/Three/include/CGAL/Three/exceptions.h b/Three/include/CGAL/Three/exceptions.h index 15fa13cd320d..417798cd469f 100644 --- a/Three/include/CGAL/Three/exceptions.h +++ b/Three/include/CGAL/Three/exceptions.h @@ -127,7 +127,7 @@ wrap_a_call_to_cpp(Callable f, return Return_type(); } } -#endif +#endif } // end namespace Three } // end namespace CGAL From db652acef2a84f940c627b1681c58c6f2ae9f985 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 28 Apr 2023 15:31:35 +0200 Subject: [PATCH 221/943] add Qt6 to the CI tests --- .github/install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/install.sh b/.github/install.sh index 32b8552aa8f6..d19a714ae79a 100755 --- a/.github/install.sh +++ b/.github/install.sh @@ -2,7 +2,8 @@ sudo apt-get update sudo apt-get install -y libmpfr-dev \ libeigen3-dev qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev \ - libqt5svg5-dev qttools5-dev qttools5-dev-tools libboost-dev libinsighttoolkit4-dev zsh + libqt5svg5-dev qttools5-dev qttools5-dev-tools libboost-dev libinsighttoolkit4-dev zsh \ + qt6-base-dev qt6-declarative-dev #update cmake to 3.18.4 sudo apt purge --auto-remove cmake cd /tmp From b2a330bbdfb25fd9572b163381e1aec0b7c29eb9 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Sun, 30 Apr 2023 14:21:54 +0100 Subject: [PATCH 222/943] WIP re-adding scripting --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 4 +- Polyhedron/demo/Polyhedron/MainWindow.cpp | 192 +++++++--------------- Polyhedron/demo/Polyhedron/MainWindow.h | 25 +-- 3 files changed, 71 insertions(+), 150 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index ce49786fd28c..c6d91a0cf727 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -46,7 +46,7 @@ endif() # Find Qt6 itself find_package(Qt6 QUIET - COMPONENTS OpenGLWidgets Widgets + COMPONENTS OpenGLWidgets Widgets Qml OPTIONAL_COMPONENTS WebSockets Network) set_package_properties( @@ -211,7 +211,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) Primitive_container.cpp Polyhedron_demo_plugin_helper.cpp CGAL_double_edit.cpp) - target_link_libraries(demo_framework PUBLIC Qt6::OpenGLWidgets Qt6::Widgets Qt6::Gui + target_link_libraries(demo_framework PUBLIC Qt6::OpenGLWidgets Qt6::Widgets Qt6::Gui Qt6::Qml CGAL::CGAL_Qt6) if(TARGET Qt6::WebSockets) target_link_libraries(demo_framework PUBLIC Qt6::WebSockets) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 40e14de0d22c..b481ce58d009 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -46,15 +46,10 @@ #include #include #include -#include #include #include -#ifdef QT_SCRIPT_LIB -# include -# ifdef QT_SCRIPTTOOLS_LIB -# include -# endif -#endif +#include + #include #include @@ -75,58 +70,25 @@ #include "Color_map.h" -#ifdef QT_SCRIPT_LIB -# include -# include - - using namespace CGAL::Three; -QScriptValue -myScene_itemToScriptValue(QScriptEngine *engine, +QJSValue +myScene_itemToScriptValue(QJSEngine *engine, CGAL::Three::Scene_item* const &in) { return engine->newQObject(in); } -void myScene_itemFromScriptValue(const QScriptValue &object, +void myScene_itemFromScriptValue(const QJSValue &object, CGAL::Three::Scene_item* &out) { out = qobject_cast(object.toQObject()); } -#endif // QT_SCRIPT_LIB - -#ifdef QT_SCRIPT_LIB -# ifdef QT_SCRIPTTOOLS_LIB - -const QScriptEngineDebugger::DebuggerWidget debug_widgets[9] = { - QScriptEngineDebugger::ConsoleWidget, - QScriptEngineDebugger::StackWidget, - QScriptEngineDebugger::ScriptsWidget, - QScriptEngineDebugger::LocalsWidget, - QScriptEngineDebugger::CodeWidget, - QScriptEngineDebugger::CodeFinderWidget, - QScriptEngineDebugger::BreakpointsWidget, - QScriptEngineDebugger::DebugOutputWidget, - QScriptEngineDebugger::ErrorLogWidget -}; -const QString debug_widgets_names[9] = { - "Script console", - "Stack", - "Scripts", - "Locals", - "Code", - "CodeFinder", - "Breakpoints", - "DebugOutput", - "ErrorLog" -}; - -# endif -#endif + + #if 0 -QScriptValue myPrintFunction(QScriptContext *context, QScriptEngine *engine) +QJSValue myPrintFunction(QScriptContext *context, QJSEngine *engine) { MainWindow* mw = qobject_cast(engine->parent()); QString result; @@ -168,11 +130,7 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren menu_map[ui->menuOperations->title()] = ui->menuOperations; this->verbose = verbose; is_locked = false; - // remove the Load Script menu entry, when the demo has not been compiled with QT_SCRIPT_LIB -#if !defined(QT_SCRIPT_LIB) - // ui->menuBar->removeAction(ui->actionLoadScript); - // ui->menuBar->removeAction(ui->on_actionLoad_a_Scene_from_a_Script_File); -#endif + // Save some pointers from ui, for latter use. sceneView = ui->sceneView; viewer_window = new SubViewer(ui->mdiArea, this, nullptr); @@ -329,54 +287,36 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren // Reset the "Operation menu" clearMenu(ui->menuOperations); -#ifdef QT_SCRIPT_LIB std::cerr << "Enable scripts.\n"; - script_engine = new QScriptEngine(this); + script_engine = new QJSEngine(this); + +#if 0 qScriptRegisterMetaType(script_engine, myScene_itemToScriptValue, myScene_itemFromScriptValue); -# ifdef QT_SCRIPTTOOLS_LIB - QScriptEngineDebugger* debugger = new QScriptEngineDebugger(this); - debugger->setObjectName("qt script debugger"); - QAction* debuggerMenuAction = - menuBar()->addMenu(debugger->createStandardMenu()); - debuggerMenuAction->setText(tr("Qt Script &Debug")); - for(unsigned int i = 0; i < 9; ++i) - { - QDockWidget* dock = new QDockWidget(debug_widgets_names[i], this); - dock->setObjectName(debug_widgets_names[i]); - dock->setWidget(debugger->widget(debug_widgets[i])); - this->QMainWindow::addDockWidget(Qt::BottomDockWidgetArea, dock); - dock->hide(); - } - debugger->setAutoShowStandardWindow(false); - debugger->attachTo(script_engine); -# endif // QT_SCRIPTTOOLS_LIB - QScriptValue fun = script_engine->newFunction(myPrintFunction); - script_engine->globalObject().setProperty("print", fun); + + QJSValue fun = script_engine->newFunction(myPrintFunction); + script_engine->globalObject().setProperty("print", fun); +#endif // evaluate_script("print('hello', 'world', 'from QtScript!')"); - QScriptValue mainWindowObjectValue = script_engine->newQObject(this); + QJSValue mainWindowObjectValue = script_engine->newQObject(this); script_engine->globalObject().setProperty("main_window", mainWindowObjectValue); - QScriptValue sceneObjectValue = script_engine->newQObject(scene); + QJSValue sceneObjectValue = script_engine->newQObject(scene); mainWindowObjectValue.setProperty("scene", sceneObjectValue); script_engine->globalObject().setProperty("scene", sceneObjectValue); - QScriptValue viewerObjectValue = script_engine->newQObject(viewer); + QJSValue viewerObjectValue = script_engine->newQObject(viewer); mainWindowObjectValue.setProperty("viewer", viewerObjectValue); script_engine->globalObject().setProperty("viewer", viewerObjectValue); - QScriptValue cameraObjectValue = script_engine->newQObject(viewer->camera()); + QJSValue cameraObjectValue = script_engine->newQObject(viewer->camera()); viewerObjectValue.setProperty("camera", cameraObjectValue); script_engine->globalObject().setProperty("camera", cameraObjectValue); evaluate_script("var plugins = new Array();"); -# ifdef QT_SCRIPTTOOLS_LIB - QScriptValue debuggerObjectValue = script_engine->newQObject(debugger); - script_engine->globalObject().setProperty("debugger", debuggerObjectValue); -# endif -#endif + readSettings(); // Among other things, the column widths are stored. @@ -415,18 +355,15 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren actionResetDefaultLoaders = new QAction("Reset Default Loaders",this); -#ifdef QT_SCRIPT_LIB // evaluate_script("print(plugins);"); Q_FOREACH(QAction* action, findChildren()) { if(action->objectName() != "") { - QScriptValue objectValue = script_engine->newQObject(action); + QJSValue objectValue = script_engine->newQObject(action); script_engine->globalObject().setProperty(action->objectName(), objectValue); } } filterOperations(true); - // debugger->action(QScriptEngineDebugger::InterruptAction)->trigger(); -#endif } void addActionToMenu(QAction* action, QMenu* menu) @@ -532,23 +469,33 @@ void MainWindow::filterOperations(bool) #include -#if 0 + void MainWindow::evaluate_script(QString script, const QString& filename, const bool quiet) { +#if 0 QScriptContext* context = script_engine->currentContext(); - QScriptValue object = context->activationObject(); - QScriptValue former_current_filename = object.property("current_filename");; + QJSValue object = context->activationObject(); + QJSValue former_current_filename = object.property("current_filename");; object.setProperty("current_filename", filename); +#endif + + QJSValue value = script_engine->evaluate(script, filename); + if (value.isError()) + if(! quiet){ + qDebug() << "Uncaught exception at line" + << value.property("lineNumber").toInt() + << ":" << value.toString(); + } +#if 0 - QScriptValue value = script_engine->evaluate(script, filename); if(script_engine->hasUncaughtException()) { - QScriptValue js_exception = script_engine->uncaughtException(); - QScriptValue js_bt =js_exception.property("backtrace"); + QJSValue js_exception = script_engine->uncaughtException(); + QJSValue js_bt =js_exception.property("backtrace"); QStringList bt = script_engine->uncaughtExceptionBacktrace(); if(js_bt.isValid()) { QStringList other_bt; - qScriptValueToSequence(js_bt, other_bt); + qJSValueToSequence(js_bt, other_bt); if(!other_bt.isEmpty()) bt = other_bt; } if(!quiet) { @@ -569,6 +516,7 @@ void MainWindow::evaluate_script(QString script, } object.setProperty("current_filename", former_current_filename); +#endif } void MainWindow::evaluate_script_quiet(QString script, @@ -577,30 +525,7 @@ void MainWindow::evaluate_script_quiet(QString script, evaluate_script(script, filename, true); } -void MainWindow::enableScriptDebugger(bool b /* = true */) -{ - Q_UNUSED(b); -#ifdef QT_SCRIPT_LIB -# ifdef QT_SCRIPTTOOLS_LIB - QScriptEngineDebugger* debugger = - findChild("qt script debugger"); - if(debugger) { - if(b) { - debugger->action(QScriptEngineDebugger::InterruptAction)->trigger(); - } - else { - std::cerr << "Detach the script debugger\n"; - debugger->detach(); - } - } - return; -# endif -#endif - // If we are here, then the debugger is not available - this->error(tr("Your version of Qt is too old, and for that reason " - "the Qt Script Debugger is not available.")); -} -#endif + namespace { bool actionsByName(QAction* x, QAction* y) { @@ -704,12 +629,10 @@ bool MainWindow::load_plugin(QString fileName, bool blacklisted) pluginsStatus_map[name] = QString("Not for this program."); } else{ -#ifdef QT_SCRIPT_LIB - QScriptValue objectValue = + QJSValue objectValue = script_engine->newQObject(obj); script_engine->globalObject().setProperty(obj->objectName(), objectValue); evaluate_script_quiet(QString("plugins.push(%1);").arg(obj->objectName())); -#endif pluginsStatus_map[name] = QString("success"); } } @@ -927,11 +850,10 @@ void MainWindow::addAction(QString actionName, QAction* action = new QAction(actionText, this); action->setObjectName(actionName); menu->addAction(action); -#ifdef QT_SCRIPT_LIB - QScriptValue objectValue = script_engine->newQObject(action); + + QJSValue objectValue = script_engine->newQObject(action); script_engine->globalObject().setProperty(action->objectName(), objectValue); -#endif } void MainWindow::viewerShow(float xmin, @@ -1165,7 +1087,6 @@ void MainWindow::open(QString filename) { QFileInfo fileinfo(filename); -#ifdef QT_SCRIPT_LIB // Handles the loading of script file from the command line arguments, // and the special command line arguments that start with "javascript:" // or "qtscript:" @@ -1193,7 +1114,6 @@ void MainWindow::open(QString filename) QApplication::restoreOverrideCursor(); return; } -#endif if ( !fileinfo.exists() ){ QMessageBox::warning(this, @@ -1290,8 +1210,11 @@ bool MainWindow::open(QString filename, QString loader_name) { std::cerr << e.what() << std::endl; return false; } +#else + bool ok; + loadItem(fileinfo, findLoader(loader_name), ok); + return ok; #endif - return true; } @@ -1894,9 +1817,10 @@ void MainWindow::closeEvent(QCloseEvent *event) event->accept(); } -#if 0 + bool MainWindow::loadScript(QString filename) { +#if 0 QFileInfo fileinfo(filename); boost::optional opt = wrap_a_call_to_cpp ([this, fileinfo] { @@ -1904,11 +1828,15 @@ bool MainWindow::loadScript(QString filename) }, this, __FILE__, __LINE__, CGAL::Three::PARENT_CONTEXT); if(!opt) return false; else return *opt; +#else + QFileInfo fileinfo(filename); + return loadScript(fileinfo); +#endif } bool MainWindow::loadScript(QFileInfo info) { -#if defined(QT_SCRIPT_LIB) + QString program; QString filename = info.absoluteFilePath(); QFile script_file(filename); @@ -1925,10 +1853,9 @@ bool MainWindow::loadScript(QFileInfo info) evaluate_script(program, filename); return true; } -#endif return false; } -#endif + void MainWindow::throw_exception() { #if 0 // AF @@ -1936,14 +1863,15 @@ void MainWindow::throw_exception() { throw std::runtime_error("Exception thrown in " "MainWindow::throw_exception()"); }, this, __FILE__, __LINE__); +#else + throw std::runtime_error("Exception thrown in " + "MainWindow::throw_exception()"); #endif } void MainWindow::on_actionLoadScript_triggered() { -#if defined(QT_SCRIPT_LIB) -#endif } void MainWindow::on_actionLoad_triggered() @@ -3874,7 +3802,7 @@ void MainWindow::on_actionLoad_a_Scene_from_a_Script_File_triggered() if(filename.isEmpty()) return; } - + loadScript(QFileInfo(filename)); if(do_download){ QFile tmp_file(filename); tmp_file.remove(); diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index d970c1813ef3..ea43c7a482f6 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -1,5 +1,8 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H + +#define QT_SCRIPT_LIB + #include "config.h" #include "MainWindow_config.h" @@ -7,10 +10,7 @@ #include #include -// AF @todo Scripting has changed -// #include -// #include - +#include #include #include @@ -62,7 +62,6 @@ class MAINWINDOW_EXPORT MainWindow : public CGAL::Qt::DemosMainWindow, public Messages_interface, public CGAL::Three::Three - // AF , protected QScriptable { Q_OBJECT Q_INTERFACES(Messages_interface) @@ -148,13 +147,12 @@ public Q_SLOTS: index of the item to be reloaded as data attached to the action. The index must identify a valid `Scene_item`.*/ void reloadItem(); -#if 0 + //! Loads a script. Returns true if it worked. bool loadScript(QString filename); //! Loads a script. Returns true if it worked. bool loadScript(QFileInfo); -#endif /*! * Gives the keyboard input focus to the widget searchEdit. @@ -259,11 +257,6 @@ public Q_SLOTS: //!Returns true if the target plugin is present. If not, returns false. bool hasPlugin(const QString&) const; - /*! - * If able, finds a script debugger and interrupts current action. Default - * value for parameter is true. - */ - // void enableScriptDebugger(bool = true); /// This slot is used to test exception handling in Qt Scripts. void throw_exception(); @@ -331,7 +324,7 @@ protected Q_SLOTS: bool on_actionErase_triggered(); //!Duplicates the selected item and selects the new item. void on_actionDuplicate_triggered(); - //!If QT_SCRIPT_LIB is defined, opens a dialog to choose a script. + //!Opens a dialog to choose a script. void on_actionLoadScript_triggered(); //!Loads a plugin from a specified directory void on_actionLoadPlugin_triggered(); @@ -439,8 +432,8 @@ protected Q_SLOTS: bool verbose; void insertActionBeforeLoadPlugin(QMenu*, QAction *actionToInsert); -#ifdef QT_SCRIPT_LIB - QScriptEngine* script_engine; + + QJSEngine* script_engine; public: /*! Evaluates a script and search for uncaught exceptions. If quiet is false, prints the *backtrace of the uncaught exceptions. @@ -451,7 +444,7 @@ protected Q_SLOTS: //! Calls evaluate_script(script, filename, true). void evaluate_script_quiet(QString script, const QString & fileName = QString()); - #endif + QMutex mutex; QWaitCondition wait_condition; From ae5d32ba2e425853d4cf822ffd64e19c1d45e7ad Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 1 May 2023 12:23:20 +0200 Subject: [PATCH 223/943] citing/referencing "corrected curvature measures" + refining the theo background --- Documentation/doc/biblio/geom.bib | 12 +++++++ .../Polygon_mesh_processing.txt | 33 ++++++++++--------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Documentation/doc/biblio/geom.bib b/Documentation/doc/biblio/geom.bib index 7c9fec6e420d..f072116a2e27 100644 --- a/Documentation/doc/biblio/geom.bib +++ b/Documentation/doc/biblio/geom.bib @@ -152065,3 +152065,15 @@ @article{lachaud2020 month = jul, year = {2020} } + +@article{lachaud2022 + author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert}, + journal = {Discrete & Computational Geometry}, + title = {Corrected Curvature Measures}, + volume = {68}, + pages = {477-524}, + month = jul, + year = {2022}, + url = {https://doi.org/10.1007/s00454-022-00399-4} +} + diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index eac246d8ab47..354c622f0e99 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -898,18 +898,21 @@ they give accurate results, on the condition that the correct vertex normals are \subsection ICCBackground Brief Background -Curvatures are quantities that describe the local geometry of a surface. They are important in many -geometry processing applications. since surfaces are 2-dimensional objects (embedded in 3D), they can bend +Surface curvatures are quantities that describe the local geometry of a surface. They are important in many +geometry processing applications. As surfaces are 2-dimensional objects (embedded in 3D), they can bend in 2 independent directions. These directions are called principal directions, and the amount of bending -in each direction is called the principal curvature: \f$ k_1 \f$ and \f$ k_2 \f$. Curvature is usually -expressed as scalar quantities like the mean curvature \f$ H \f$ and the Gaussian curvature \f$ K \f$ -which are defined in terms of the principal curvatures. - -The algorithms are based on the following paper \cgalCite{lachaud2020}. It introduces a new way to -compute curvatures on polygonal meshes. The main idea is based on decoupling the normal information from -the position information, which is useful for dealing with digital surfaces, or meshes with noise on -vertex positions. To compute the curvatures, we first compute interpolated curvature measures for each face -as described below. For a triangle \f$ \tau_{ijk} \f$, with vertices \a i, \a j, \a k: +in each direction is called the principal curvature: \f$ k_1 \f$ and \f$ k_2 \f$ (denoting max and min +curvatures). Curvature is usually expressed as scalar quantities like the mean curvature \f$ H \f$ and +the Gaussian curvature \f$ K \f$ which are defined in terms of the principal curvatures. + +The algorithms are based on the two papers \cgalCite{lachaud2022} and \cgalCite{lachaud2020}. They +introduce a new way to compute curvatures on polygonal meshes. The main idea in \cgalCite{lachaud2022} is +based on decoupling the normal information from the position information, which is useful for dealing with +digital surfaces, or meshes with noise on vertex positions. \cgalCite{lachaud2020} introduces some +extensions to this framework. As it uses linear interpolation on the corrected normal vector field +to derive new closed form equations for the corrected curvature measures. These interpolated +curvature measures are the first step for computing the curvatures. For a triangle \f$ \tau_{ijk} \f$, +with vertices \a i, \a j, \a k: \f[ \begin{align*} @@ -923,10 +926,10 @@ as described below. For a triangle \f$ \tau_{ijk} \f$, with vertices \a i, \a j, where \f$ \langle \cdot \mid \cdot \rangle \f$ denotes the usual scalar product, \f$ \bar{\mathbf{u}}=\frac{1}{3}( \mathbf{u}_i + \mathbf{u}_j + \mathbf{u}_k )\f$. -The first measure \f$ \mu^{(0)} \f$ is the area measure of the triangle, and the second and third measures -\f$ \mu^{(1)} \f$ and \f$ \mu^{(2)} \f$ are the mean and Gaussian corrected curvature measures of the triangle. -The last measure \f$ \mu^{\mathbf{X},\mathbf{Y}} \f$ is the anisotropic corrected curvature measure of the triangle. -The anisotropic measure is later used to compute the principal curvatures and directions through an eigenvalue +The first measure \f$ \mu^{(0)} \f$ is the area measure of the triangle, and the measures \f$ \mu^{(1)} \f$ and +\f$ \mu^{(2)} \f$ are the mean and Gaussian corrected curvature measures of the triangle. The last measure +\f$ \mu^{\mathbf{X},\mathbf{Y}} \f$ is the anisotropic corrected curvature measure of the triangle. The +anisotropic measure is later used to compute the principal curvatures and directions through an eigenvalue solver. The interpolated curvature measures are then computed for each vertex \f$ v \f$ as the sum of From 83bf49bf3977565330e6316cd2640fc60c38cb46 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Mon, 1 May 2023 12:29:25 +0200 Subject: [PATCH 224/943] Computing curvatures mentioned in the outline section (1.3) --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 354c622f0e99..6b6f979ba59f 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -49,6 +49,7 @@ mesh, which includes point location and self intersection tests. - \ref PMPCombinatorialRepair : repair of polygon meshes and polygon soups. - \ref PMPGeometricRepair : repair of the geometry of polygon meshes. - \ref PMPNormalComp : normal computation at vertices and on faces of a polygon mesh. +- \ref PMPICC : computing curvatures (mean, gaussian, principal) on a polygon mesh. - \ref PMPSlicer : functor able to compute the intersections of a polygon mesh with arbitrary planes (slicer). - \ref PMPConnectedComponents : methods to deal with connected components of a polygon mesh (extraction, marks, removal, ...). From 0ee9406235728660ecc74122fc20505bacfd21ba Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 30 Jul 2020 15:42:41 +0200 Subject: [PATCH 225/943] add possibility to provide a variable sizing field to PMP::isotropic_remeshing # Conflicts: # Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt # Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h --- .../Polygon_mesh_processing/CMakeLists.txt | 1 + ...sotropic_remeshing_with_sizing_example.cpp | 39 ++++++++ .../Isotropic_remeshing/Sizing_field.h | 50 ++++++++++ .../Uniform_sizing_field.h | 92 +++++++++++++++++++ .../Isotropic_remeshing/remesh_impl.h | 60 ++++++------ .../CGAL/Polygon_mesh_processing/remesh.h | 32 +++++-- 6 files changed, 233 insertions(+), 41 deletions(-) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index c755ecf63e8e..cf1424b05c92 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -27,6 +27,7 @@ create_single_source_cgal_program("mesh_slicer_example.cpp") #create_single_source_cgal_program( "remove_degeneracies_example.cpp") create_single_source_cgal_program("isotropic_remeshing_example.cpp") create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") +create_single_source_cgal_program("isotropic_remeshing_with_sizing_example.cpp") create_single_source_cgal_program("tangential_relaxation_example.cpp") create_single_source_cgal_program("surface_mesh_intersection.cpp") create_single_source_cgal_program("corefinement_SM.cpp") diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp new file mode 100644 index 000000000000..fa5dc55d7896 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -0,0 +1,39 @@ +#include +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef CGAL::Surface_mesh Mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int argc, char* argv[]) +{ + const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; + std::ifstream input(filename); + + Mesh mesh; + if (!input || !(input >> mesh) || !CGAL::is_triangle_mesh(mesh)) { + std::cerr << "Not a valid input file." << std::endl; + return 1; + } + + double target_edge_length = 0.04; + unsigned int nb_iter = 3; + + std::cout << "Start remeshing of " << filename + << " (" << num_faces(mesh) << " faces)..." << std::endl; + + PMP::isotropic_remeshing( + faces(mesh), + target_edge_length, + mesh, + PMP::parameters::number_of_iterations(nb_iter) + ); + + std::cout << "Remeshing done." << std::endl; + + return 0; +} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h new file mode 100644 index 000000000000..3df70524feca --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -0,0 +1,50 @@ +// Copyright (c) 2020 GeometryFactory (France) +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Jane Tournois + +#ifndef CGAL_SIZING_FIELD_H +#define CGAL_SIZING_FIELD_H + +#include + +#include + +namespace CGAL +{ +/*! +* Sizing field virtual class +*/ +template +class Sizing_field +{ +private: + typedef PolygonMesh PM; + typedef typename boost::property_map::const_type VPMap; + typedef typename boost::property_traits::value_type Point; + typedef typename CGAL::Kernel_traits::Kernel K; + +public: + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef Point Point_3; + typedef typename K::FT FT; + +public: + virtual bool is_too_long(const halfedge_descriptor& h, FT& sql) const = 0; + virtual bool is_too_long(const vertex_descriptor& va, const vertex_descriptor& vb) const = 0; + virtual bool is_too_short(const halfedge_descriptor& h, FT& sqlen) const = 0; + virtual Point_3 split_placement(const halfedge_descriptor& h) const = 0; + +}; + +}//end namespace CGAL + +#endif //CGAL_SIZING_FIELD_H diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h new file mode 100644 index 000000000000..7b00635ff543 --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -0,0 +1,92 @@ +// Copyright (c) 2020 GeometryFactory (France) +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Jane Tournois + +#ifndef CGAL_UNIFORM_SIZING_FIELD_H +#define CGAL_UNIFORM_SIZING_FIELD_H + +#include + +#include + +#include + +namespace CGAL +{ +template +class Uniform_sizing_field : public CGAL::Sizing_field +{ +private: + typedef CGAL::Sizing_field Base; + +public: + typedef typename Base::FT FT; + typedef typename Base::Point_3 Point_3; + typedef typename Base::halfedge_descriptor halfedge_descriptor; + typedef typename Base::vertex_descriptor vertex_descriptor; + + Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + : m_sq_short( CGAL::square(4./5. * size)) + , m_sq_long( CGAL::square(4./3. * size)) + , m_pmesh(pmesh) + {} + +private: + FT sqlength(const vertex_descriptor& va, + const vertex_descriptor& vb) const + { + typename boost::property_map::const_type + vpmap = get(CGAL::vertex_point, m_pmesh); + return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); + } + + FT sqlength(const halfedge_descriptor& h) const + { + return sqlength(target(h, m_pmesh), source(h, m_pmesh)); + } + +public: + bool is_too_long(const halfedge_descriptor& h, FT& sqlen) const + { + sqlen = sqlength(h); + return sqlen > m_sq_long; + } + + bool is_too_long(const vertex_descriptor& va, + const vertex_descriptor& vb) const + { + FT sqlen = sqlength(va, vb); + return sqlen > m_sq_long; + } + + bool is_too_short(const halfedge_descriptor& h, FT& sqlen) const + { + sqlen = sqlength(h); + return sqlen < m_sq_short; + } + + virtual Point_3 split_placement(const halfedge_descriptor& h) const + { + typename boost::property_map::const_type + vpmap = get(CGAL::vertex_point, m_pmesh); + return CGAL::midpoint(get(vpmap, target(h, m_pmesh)), + get(vpmap, source(h, m_pmesh))); + } + +private: + FT m_sq_short; + FT m_sq_long; + const PolygonMesh& m_pmesh; +}; + +}//end namespace CGAL + +#endif //CGAL_UNIFORM_SIZING_FIELD_H diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 9cdb76ac76b0..e6911102a683 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -478,13 +478,12 @@ namespace internal { // "visits all edges of the mesh //if an edge is longer than the given threshold `high`, the edge //is split at its midpoint and the two adjacent triangles are bisected (2-4 split)" - void split_long_edges(const double& high) + template + void split_long_edges(const SizingFunction& sizing) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << "Split long edges (" << high << ")..." << std::endl; #endif - double sq_high = high*high; - //collect long edges typedef std::pair H_and_sql; std::multiset< H_and_sql, std::function > @@ -497,8 +496,8 @@ namespace internal { { if (!is_split_allowed(e)) continue; - double sqlen = sqlength(e); - if(sqlen > sq_high) + double sqlen; + if(sizing.is_too_long(halfedge(e, mesh_), sqlen)) long_edges.emplace(halfedge(e, mesh_), sqlen); } @@ -528,7 +527,7 @@ namespace internal { Patch_id patch_id_opp = get_patch_id(face(opposite(he, mesh_), mesh_)); //split edge - Point refinement_point = this->midpoint(he); + Point refinement_point = sizing.split_placement(he); halfedge_descriptor hnew = CGAL::Euler::split_edge(he, mesh_); CGAL_assertion(he == next(hnew, mesh_)); put(ecmap_, edge(hnew, mesh_), get(ecmap_, edge(he, mesh_)) ); @@ -548,13 +547,12 @@ namespace internal { halfedge_added(hnew_opp, status(opposite(he, mesh_))); //check sub-edges - double sqlen_new = 0.25 * sqlen; - if (sqlen_new > sq_high) - { - //if it was more than twice the "long" threshold, insert them - long_edges.emplace(hnew, sqlen_new); - long_edges.emplace(next(hnew, mesh_), sqlen_new); - } + //if it was more than twice the "long" threshold, insert them + double sqlen_new; + if(sizing.is_too_long(hnew, sqlen_new)) + long_edges.emplace(hnew, sqlen_new); + if(sizing.is_too_long(next(hnew, mesh_), sqlen_new)) + long_edges.insert(long_edge(next(hnew, mesh_), sqlen_new)); //insert new edges to keep triangular faces, and update long_edges if (!is_on_border(hnew)) @@ -573,8 +571,8 @@ namespace internal { if (snew == PATCH) { - double sql = sqlength(hnew2); - if (sql > sq_high) + double sql; + if(sizing.is_too_long(hnew2, sql)) long_edges.emplace(hnew2, sql); } } @@ -596,8 +594,8 @@ namespace internal { if (snew == PATCH) { - double sql = sqlength(hnew2); - if (sql > sq_high) + double sql; + if (sizing.is_too_long(hnew2, sql)) long_edges.emplace(hnew2, sql); } } @@ -620,8 +618,8 @@ namespace internal { // "collapses and thus removes all edges that are shorter than a // threshold `low`. [...] testing before each collapse whether the collapse // would produce an edge that is longer than `high`" - void collapse_short_edges(const double& low, - const double& high, + template + void collapse_short_edges(const SizingFunction& sizing, const bool collapse_constraints) { typedef boost::bimap< @@ -637,14 +635,13 @@ namespace internal { std::cout << "Fill bimap..."; std::cout.flush(); #endif - double sq_low = low*low; - double sq_high = high*high; Boost_bimap short_edges; for(edge_descriptor e : edges(mesh_)) { - double sqlen = sqlength(e); - if ((sqlen < sq_low) && is_collapse_allowed(e, collapse_constraints)) + double sqlen; + if( sizing.is_too_short(halfedge(e, mesh_), sqlen) + && is_collapse_allowed(e, collapse_constraints)) short_edges.insert(short_edge(halfedge(e, mesh_), sqlen)); } #ifdef CGAL_PMP_REMESHING_VERBOSE_PROGRESS @@ -741,7 +738,7 @@ namespace internal { for(halfedge_descriptor ha : halfedges_around_target(va, mesh_)) { vertex_descriptor va_i = source(ha, mesh_); - if (sqlength(vb, va_i) > sq_high) + if (sizing.is_too_long(vb, va_i)) { collapse_ok = false; break; @@ -796,7 +793,7 @@ namespace internal { //fix constrained case CGAL_assertion((is_constrained(vkept) || is_corner(vkept) || is_on_patch_border(vkept)) == (is_va_constrained || is_vb_constrained || is_va_on_constrained_polyline || is_vb_on_constrained_polyline)); - if (fix_degenerate_faces(vkept, short_edges, sq_low, collapse_constraints)) + if (fix_degenerate_faces(vkept, short_edges, sizing, collapse_constraints)) { #ifdef CGAL_PMP_REMESHING_DEBUG debug_status_map(); @@ -806,8 +803,9 @@ namespace internal { //insert new/remaining short edges for (halfedge_descriptor ht : halfedges_around_target(vkept, mesh_)) { - double sqlen = sqlength(ht); - if ((sqlen < sq_low) && is_collapse_allowed(edge(ht, mesh_), collapse_constraints)) + double sqlen; + if (sizing.is_too_short(ht, sqlen) + && is_collapse_allowed(edge(ht, mesh_), collapse_constraints)) short_edges.insert(short_edge(ht, sqlen)); } } @@ -1645,10 +1643,10 @@ namespace internal { // else keep current status for en and eno } - template + template bool fix_degenerate_faces(const vertex_descriptor& v, Bimap& short_edges, - const double& sq_low, + const SizingFunction& sizing, const bool collapse_constraints) { std::unordered_set degenerate_faces; @@ -1726,8 +1724,8 @@ namespace internal { //insert new edges in 'short_edges' if (is_collapse_allowed(edge(hf, mesh_), collapse_constraints)) { - double sqlen = sqlength(hf); - if (sqlen < sq_low) + double sqlen; + if (sizing.is_too_short(hf, sqlen)) short_edges.insert(typename Bimap::value_type(hf, sqlen)); } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 6b37ec946ea9..791a0741a611 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -198,6 +199,21 @@ void isotropic_remeshing(const FaceRange& faces , const double& target_edge_length , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) +{ + isotropic_remeshing(faces, + CGAL::Uniform_sizing_field(target_edge_length, pmesh), + pmesh, + np); +} + +template +void isotropic_remeshing(const FaceRange& faces + , const SizingFunction& sizing + , PolygonMesh& pmesh + , const NamedParameters& np) { if (boost::begin(faces)==boost::end(faces)) return; @@ -261,12 +277,10 @@ void isotropic_remeshing(const FaceRange& faces #endif ) ) ); - double low = 4. / 5. * target_edge_length; - double high = 4. / 3. * target_edge_length; - #if !defined(CGAL_NO_PRECONDITIONS) if(protect) { + double high = 4. / 3. * target_edge_length; std::string msg("Isotropic remeshing : protect_constraints cannot be set to"); msg.append(" true with constraints larger than 4/3 * target_edge_length."); msg.append(" Remeshing aborted."); @@ -313,13 +327,11 @@ void isotropic_remeshing(const FaceRange& faces #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " * Iteration " << (i + 1) << " *" << std::endl; #endif - if (target_edge_length>0) - { - if(do_split) - remesher.split_long_edges(high); - if(do_collapse) - remesher.collapse_short_edges(low, high, collapse_constraints); - } + + if(do_split) + remesher.split_long_edges(sizing); + if(do_collapse) + remesher.collapse_short_edges(sizing, collapse_constraints); if(do_flip) remesher.flip_edges_for_valence_and_shape(); remesher.tangential_relaxation_impl(smoothing_1d, nb_laplacian); From 9de41310fd27bd8d55a7a9b75914f5c2d60f2a1f Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 30 Jul 2020 16:23:03 +0200 Subject: [PATCH 226/943] use boost::optional instead of a bool and a double # Conflicts: # Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h --- .../Isotropic_remeshing/Sizing_field.h | 14 ++--- .../Uniform_sizing_field.h | 35 ++++++++----- .../Isotropic_remeshing/remesh_impl.h | 51 ++++++++++--------- 3 files changed, 57 insertions(+), 43 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index 3df70524feca..fc6b14a984f5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -10,12 +10,13 @@ // // Author(s) : Jane Tournois -#ifndef CGAL_SIZING_FIELD_H -#define CGAL_SIZING_FIELD_H +#ifndef CGAL_PMP_REMESHING_SIZING_FIELD_H +#define CGAL_PMP_REMESHING_SIZING_FIELD_H #include #include +#include namespace CGAL { @@ -38,13 +39,14 @@ class Sizing_field typedef typename K::FT FT; public: - virtual bool is_too_long(const halfedge_descriptor& h, FT& sql) const = 0; - virtual bool is_too_long(const vertex_descriptor& va, const vertex_descriptor& vb) const = 0; - virtual bool is_too_short(const halfedge_descriptor& h, FT& sqlen) const = 0; + virtual boost::optional is_too_long(const halfedge_descriptor& h) const = 0; + virtual boost::optional is_too_long(const vertex_descriptor& va, + const vertex_descriptor& vb) const = 0; + virtual boost::optional is_too_short(const halfedge_descriptor& h) const = 0; virtual Point_3 split_placement(const halfedge_descriptor& h) const = 0; }; }//end namespace CGAL -#endif //CGAL_SIZING_FIELD_H +#endif //CGAL_PMP_REMESHING_SIZING_FIELD_H diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index 7b00635ff543..8704c84ef117 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -10,8 +10,8 @@ // // Author(s) : Jane Tournois -#ifndef CGAL_UNIFORM_SIZING_FIELD_H -#define CGAL_UNIFORM_SIZING_FIELD_H +#ifndef CGAL_PMP_REMESHING_UNIFORM_SIZING_FIELD_H +#define CGAL_PMP_REMESHING_UNIFORM_SIZING_FIELD_H #include @@ -54,23 +54,32 @@ class Uniform_sizing_field : public CGAL::Sizing_field } public: - bool is_too_long(const halfedge_descriptor& h, FT& sqlen) const + boost::optional is_too_long(const halfedge_descriptor& h) const { - sqlen = sqlength(h); - return sqlen > m_sq_long; + const FT sqlen = sqlength(h); + if(sqlen > m_sq_long) + return sqlen; + else + return boost::none; } - bool is_too_long(const vertex_descriptor& va, - const vertex_descriptor& vb) const + boost::optional is_too_long(const vertex_descriptor& va, + const vertex_descriptor& vb) const { - FT sqlen = sqlength(va, vb); - return sqlen > m_sq_long; + const FT sqlen = sqlength(va, vb); + if (sqlen > m_sq_long) + return sqlen; + else + return boost::none; } - bool is_too_short(const halfedge_descriptor& h, FT& sqlen) const + boost::optional is_too_short(const halfedge_descriptor& h) const { - sqlen = sqlength(h); - return sqlen < m_sq_short; + const FT sqlen = sqlength(h); + if (sqlen < m_sq_long) + return sqlen; + else + return boost::none; } virtual Point_3 split_placement(const halfedge_descriptor& h) const @@ -89,4 +98,4 @@ class Uniform_sizing_field : public CGAL::Sizing_field }//end namespace CGAL -#endif //CGAL_UNIFORM_SIZING_FIELD_H +#endif //CGAL_PMP_REMESHING_UNIFORM_SIZING_FIELD_H diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index e6911102a683..ed95352bab9c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -496,9 +496,9 @@ namespace internal { { if (!is_split_allowed(e)) continue; - double sqlen; - if(sizing.is_too_long(halfedge(e, mesh_), sqlen)) - long_edges.emplace(halfedge(e, mesh_), sqlen); + boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_)); + if(sqlen != boost::none) + long_edges.emplace(halfedge(e, mesh_), sqlen.get()); } //split long edges @@ -548,11 +548,13 @@ namespace internal { //check sub-edges //if it was more than twice the "long" threshold, insert them - double sqlen_new; - if(sizing.is_too_long(hnew, sqlen_new)) - long_edges.emplace(hnew, sqlen_new); - if(sizing.is_too_long(next(hnew, mesh_), sqlen_new)) - long_edges.insert(long_edge(next(hnew, mesh_), sqlen_new)); + boost::optional sqlen_new = sizing.is_too_long(hnew); + if(sqlen_new != boost::none) + long_edges.emplace(hnew, sqlen_new.get()); + + sqlen_new = sizing.is_too_long(next(hnew, mesh_)); + if (sqlen_new != boost::none) + long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); //insert new edges to keep triangular faces, and update long_edges if (!is_on_border(hnew)) @@ -571,9 +573,9 @@ namespace internal { if (snew == PATCH) { - double sql; - if(sizing.is_too_long(hnew2, sql)) - long_edges.emplace(hnew2, sql); + boost::optional sql = sizing.is_too_long(hnew2); + if(sql != boost::none) + long_edges.emplace(hnew2, sql.get()); } } @@ -594,9 +596,9 @@ namespace internal { if (snew == PATCH) { - double sql; - if (sizing.is_too_long(hnew2, sql)) - long_edges.emplace(hnew2, sql); + boost::optional sql = sizing.is_too_long(hnew2); + if (sql != boost::none) + long_edges.emplace(hnew2, sql.get()); } } } @@ -639,10 +641,10 @@ namespace internal { Boost_bimap short_edges; for(edge_descriptor e : edges(mesh_)) { - double sqlen; - if( sizing.is_too_short(halfedge(e, mesh_), sqlen) + boost::optional sqlen = sizing.is_too_short(halfedge(e, mesh_)); + if(sqlen != boost::none && is_collapse_allowed(e, collapse_constraints)) - short_edges.insert(short_edge(halfedge(e, mesh_), sqlen)); + short_edges.insert(short_edge(halfedge(e, mesh_), sqlen.get())); } #ifdef CGAL_PMP_REMESHING_VERBOSE_PROGRESS std::cout << "done." << std::endl; @@ -738,7 +740,8 @@ namespace internal { for(halfedge_descriptor ha : halfedges_around_target(va, mesh_)) { vertex_descriptor va_i = source(ha, mesh_); - if (sizing.is_too_long(vb, va_i)) + boost::optional sqha = sizing.is_too_long(vb, va_i); + if (sqha != boost::none) { collapse_ok = false; break; @@ -803,10 +806,10 @@ namespace internal { //insert new/remaining short edges for (halfedge_descriptor ht : halfedges_around_target(vkept, mesh_)) { - double sqlen; - if (sizing.is_too_short(ht, sqlen) + boost::optional sqlen = sizing.is_too_short(ht); + if (sqlen != boost::none && is_collapse_allowed(edge(ht, mesh_), collapse_constraints)) - short_edges.insert(short_edge(ht, sqlen)); + short_edges.insert(short_edge(ht, sqlen.get())); } } }//end if(collapse_ok) @@ -1724,9 +1727,9 @@ namespace internal { //insert new edges in 'short_edges' if (is_collapse_allowed(edge(hf, mesh_), collapse_constraints)) { - double sqlen; - if (sizing.is_too_short(hf, sqlen)) - short_edges.insert(typename Bimap::value_type(hf, sqlen)); + boost::optional sqlen = sizing.is_too_short(hf); + if (sqlen != boost::none) + short_edges.insert(typename Bimap::value_type(hf, sqlen.get())); } if(!is_border(hf, mesh_) && From ad55b8cd9f7e6dd5cf9a54818c06570b36b861fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 11 Apr 2021 07:45:14 +0200 Subject: [PATCH 227/943] fix compilation issues --- .../Isotropic_remeshing/remesh_impl.h | 9 ++++----- .../CGAL/Polygon_mesh_processing/remesh.h | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index ed95352bab9c..6103108cc50e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -227,14 +227,14 @@ namespace internal { template + typename FacePatchMap, + typename SizingFunction> bool constraints_are_short_enough(const PM& pmesh, EdgeConstraintMap ecmap, VertexPointMap vpmap, const FacePatchMap& fpm, - const double& high) + const SizingFunction& sizing) { - double sqh = high*high; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef typename boost::graph_traits::edge_descriptor edge_descriptor; for(edge_descriptor e : edges(pmesh)) @@ -244,8 +244,7 @@ namespace internal { get(ecmap, e) || get(fpm, face(h,pmesh))!=get(fpm, face(opposite(h,pmesh),pmesh)) ) { - if (sqh < CGAL::squared_distance(get(vpmap, source(h, pmesh)), - get(vpmap, target(h, pmesh)))) + if (sizing.is_too_long(source(h, pmesh), target(h, pmesh))) { return false; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 791a0741a611..8887a0b9beb5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -31,6 +31,16 @@ namespace CGAL { namespace Polygon_mesh_processing { +/*! \todo document me or merge the doc with the original overload*/ +template +void isotropic_remeshing(const FaceRange& faces + , const SizingFunction& sizing + , PolygonMesh& pmesh + , const NamedParameters& np); + /*! * \ingroup PMP_meshing_grp * @@ -200,8 +210,10 @@ void isotropic_remeshing(const FaceRange& faces , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { - isotropic_remeshing(faces, - CGAL::Uniform_sizing_field(target_edge_length, pmesh), + typedef Uniform_sizing_field Default_sizing; + isotropic_remeshing( + faces, + Default_sizing(target_edge_length, pmesh), pmesh, np); } @@ -280,12 +292,11 @@ void isotropic_remeshing(const FaceRange& faces #if !defined(CGAL_NO_PRECONDITIONS) if(protect) { - double high = 4. / 3. * target_edge_length; std::string msg("Isotropic remeshing : protect_constraints cannot be set to"); msg.append(" true with constraints larger than 4/3 * target_edge_length."); msg.append(" Remeshing aborted."); CGAL_precondition_msg( - internal::constraints_are_short_enough(pmesh, ecmap, vpmap, fpmap, high), + internal::constraints_are_short_enough(pmesh, ecmap, vpmap, fpmap, sizing), msg.c_str()); } #endif From 5c1e820c1eff9fba31e6622e7d4737cfcc619fa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 11 Apr 2021 08:39:54 +0200 Subject: [PATCH 228/943] fix test and demo --- .../internal/Isotropic_remeshing/remesh_impl.h | 4 ++-- .../include/CGAL/Polygon_mesh_processing/remesh.h | 6 ++---- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 6103108cc50e..f0daf9cc20a5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -481,7 +481,7 @@ namespace internal { void split_long_edges(const SizingFunction& sizing) { #ifdef CGAL_PMP_REMESHING_VERBOSE - std::cout << "Split long edges (" << high << ")..." << std::endl; + std::cout << "Split long edges..." << std::endl; #endif //collect long edges typedef std::pair H_and_sql; @@ -629,7 +629,7 @@ namespace internal { typedef typename Boost_bimap::value_type short_edge; #ifdef CGAL_PMP_REMESHING_VERBOSE - std::cout << "Collapse short edges (" << low << ", " << high << ")..." + std::cout << "Collapse short edges..." << std::endl; #endif #ifdef CGAL_PMP_REMESHING_VERBOSE_PROGRESS diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 8887a0b9beb5..54c99b2de432 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -328,8 +328,7 @@ void isotropic_remeshing(const FaceRange& faces #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << std::endl; - std::cout << "Remeshing (size = " << target_edge_length; - std::cout << ", #iter = " << nb_iterations << ")..." << std::endl; + std::cout << "Remeshing (#iter = " << nb_iterations << ")..." << std::endl; t.reset(); t.start(); #endif @@ -355,8 +354,7 @@ void isotropic_remeshing(const FaceRange& faces #ifdef CGAL_PMP_REMESHING_VERBOSE t.stop(); - std::cout << "Remeshing done (size = " << target_edge_length; - std::cout << ", #iter = " << nb_iterations; + std::cout << "Remeshing done (#iter = " << nb_iterations; std::cout << ", " << t.time() << " sec )." << std::endl; #endif } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 37dcedc8adb2..d20594ec1688 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -406,7 +406,7 @@ public Q_SLOTS: selection_item->constrained_edges_pmap(), get(CGAL::vertex_point, *selection_item->polyhedron()), CGAL::Constant_property_map(1), - 4. / 3. * target_length)) + CGAL::Uniform_sizing_field(target_length, pmesh))) { QApplication::restoreOverrideCursor(); //If facets are selected, splitting edges will add facets that won't be selected, and it will mess up the rest. @@ -606,7 +606,7 @@ public Q_SLOTS: ecm, get(CGAL::vertex_point, pmesh), CGAL::Constant_property_map(1), - 4. / 3. * target_length)) + CGAL::Uniform_sizing_field(target_length, pmesh))) { QApplication::restoreOverrideCursor(); QMessageBox::warning(mw, tr("Error"), From 50bbb4f6828ad0291cee8383c4decb8cb31b23a9 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 12 Apr 2021 07:48:10 +0200 Subject: [PATCH 229/943] add namespace to avoid conflicts with Uniform_sizing_field in Mesh_3 --- .../internal/Isotropic_remeshing/Uniform_sizing_field.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index 8704c84ef117..3f32aacb1aa9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -21,6 +21,8 @@ namespace CGAL { +namespace Polygon_mesh_processing +{ template class Uniform_sizing_field : public CGAL::Sizing_field { @@ -96,6 +98,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field const PolygonMesh& m_pmesh; }; +}//end namespace Polygon_mesh_processing }//end namespace CGAL #endif //CGAL_PMP_REMESHING_UNIFORM_SIZING_FIELD_H From 13c4db20dd6f6858cad4eb8aa0b25b6d9b540739 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 12 Apr 2021 11:28:32 +0200 Subject: [PATCH 230/943] fix max value for constraints length --- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index d20594ec1688..f1b138c16728 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -406,7 +406,7 @@ public Q_SLOTS: selection_item->constrained_edges_pmap(), get(CGAL::vertex_point, *selection_item->polyhedron()), CGAL::Constant_property_map(1), - CGAL::Uniform_sizing_field(target_length, pmesh))) + CGAL::Polygon_mesh_processing::Uniform_sizing_field( 4. / 3. * target_length, pmesh))) { QApplication::restoreOverrideCursor(); //If facets are selected, splitting edges will add facets that won't be selected, and it will mess up the rest. @@ -606,7 +606,7 @@ public Q_SLOTS: ecm, get(CGAL::vertex_point, pmesh), CGAL::Constant_property_map(1), - CGAL::Uniform_sizing_field(target_length, pmesh))) + CGAL::Polygon_mesh_processing::Uniform_sizing_field(4. / 3. * target_length, pmesh))) { QApplication::restoreOverrideCursor(); QMessageBox::warning(mw, tr("Error"), From 7326fb52ceea2c98462000cb6170e28ee1d8e0be Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 16 May 2023 22:56:41 +0200 Subject: [PATCH 231/943] Add initial preparations for adaptive sizing field Add Adaptive_sizing_field header with edge min and max limits, and tolerance Adjust the example --- ...sotropic_remeshing_with_sizing_example.cpp | 10 +- .../Adaptive_sizing_field.h | 112 ++++++++++++++++++ .../CGAL/Polygon_mesh_processing/remesh.h | 18 +++ 3 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index fa5dc55d7896..96325e6d8619 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -11,7 +11,7 @@ namespace PMP = CGAL::Polygon_mesh_processing; int main(int argc, char* argv[]) { - const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/pig.off"); std::ifstream input(filename); Mesh mesh; @@ -20,7 +20,8 @@ int main(int argc, char* argv[]) return 1; } - double target_edge_length = 0.04; + const std::pair edge_min_max{0.1, 0.4}; + const double tol = 0.1; unsigned int nb_iter = 3; std::cout << "Start remeshing of " << filename @@ -28,11 +29,14 @@ int main(int argc, char* argv[]) PMP::isotropic_remeshing( faces(mesh), - target_edge_length, + edge_min_max, + tol, mesh, PMP::parameters::number_of_iterations(nb_iter) ); + CGAL::IO::write_polygon_mesh("out.off", mesh, CGAL::parameters::stream_precision(17)); + std::cout << "Remeshing done." << std::endl; return 0; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h new file mode 100644 index 000000000000..6b48181388e4 --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -0,0 +1,112 @@ +// Copyright (c) 2020 GeometryFactory (France) +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Jane Tournois + +#ifndef CGAL_PMP_REMESHING_ADAPTIVE_SIZING_FIELD_H +#define CGAL_PMP_REMESHING_ADAPTIVE_SIZING_FIELD_H + +#include + +#include + +#include + +namespace CGAL +{ +namespace Polygon_mesh_processing +{ +template +class Adaptive_sizing_field : public CGAL::Sizing_field +{ +private: + typedef CGAL::Sizing_field Base; + +public: + typedef typename Base::FT FT; + typedef typename Base::Point_3 Point_3; + typedef typename Base::halfedge_descriptor halfedge_descriptor; + typedef typename Base::vertex_descriptor vertex_descriptor; + + Adaptive_sizing_field(const std::pair& edge_len_min_max + , const FT& tolerance + , const PolygonMesh& pmesh) + : m_sq_short( CGAL::square(edge_len_min_max.first)) + , m_sq_long( CGAL::square(edge_len_min_max.second)) + , tol(tolerance) + , m_pmesh(pmesh) + { + // calculate and store curvature and sizing field here in constructor? + // todo what about updating it? + } + +private: + FT sqlength(const vertex_descriptor& va, + const vertex_descriptor& vb) const + { + typename boost::property_map::const_type + vpmap = get(CGAL::vertex_point, m_pmesh); + return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); + } + + FT sqlength(const halfedge_descriptor& h) const + { + return sqlength(target(h, m_pmesh), source(h, m_pmesh)); + } + +public: + boost::optional is_too_long(const halfedge_descriptor& h) const + { + const FT sqlen = sqlength(h); + if(sqlen > m_sq_long) + return sqlen; + else + return boost::none; + } + + boost::optional is_too_long(const vertex_descriptor& va, + const vertex_descriptor& vb) const + { + const FT sqlen = sqlength(va, vb); + if (sqlen > m_sq_long) + return sqlen; + else + return boost::none; + } + + boost::optional is_too_short(const halfedge_descriptor& h) const + { + const FT sqlen = sqlength(h); + if (sqlen < m_sq_long) + return sqlen; + else + return boost::none; + } + + virtual Point_3 split_placement(const halfedge_descriptor& h) const + { + typename boost::property_map::const_type + vpmap = get(CGAL::vertex_point, m_pmesh); + return CGAL::midpoint(get(vpmap, target(h, m_pmesh)), + get(vpmap, source(h, m_pmesh))); + } + +private: + FT m_sq_short; + FT m_sq_long; + FT tol; + const PolygonMesh& m_pmesh; + //todo add property map containing sizing field form m_pmesh here +}; + +}//end namespace Polygon_mesh_processing +}//end namespace CGAL + +#endif //CGAL_PMP_REMESHING_ADAPTIVE_SIZING_FIELD_H diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 54c99b2de432..4ba686e9e191 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -218,6 +219,23 @@ void isotropic_remeshing(const FaceRange& faces np); } +template +void isotropic_remeshing(const FaceRange& faces + , const std::pair& edge_len_min_max //todo add defaults? + , const double& tolerance //todo add defaults? + , PolygonMesh& pmesh + , const NamedParameters& np = parameters::default_values()) +{ + typedef Adaptive_sizing_field Adaptive_sizing; + isotropic_remeshing( + faces, + Adaptive_sizing(edge_len_min_max, tolerance, pmesh), + pmesh, + np); +} + template Date: Fri, 19 May 2023 22:42:32 +0200 Subject: [PATCH 232/943] Create a vertex property map that will contain sizing info (WIP) Also, update target length checks --- ...sotropic_remeshing_with_sizing_example.cpp | 5 +- .../Adaptive_sizing_field.h | 57 +++++++++++++++---- .../Uniform_sizing_field.h | 2 + .../Isotropic_remeshing/remesh_impl.h | 7 ++- .../CGAL/Polygon_mesh_processing/remesh.h | 8 +-- 5 files changed, 59 insertions(+), 20 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index 96325e6d8619..1e1335ccfa6d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -20,8 +20,8 @@ int main(int argc, char* argv[]) return 1; } - const std::pair edge_min_max{0.1, 0.4}; - const double tol = 0.1; + //todo ip - update + const std::pair edge_min_max{0.1, 0.12}; unsigned int nb_iter = 3; std::cout << "Start remeshing of " << filename @@ -30,7 +30,6 @@ int main(int argc, char* argv[]) PMP::isotropic_remeshing( faces(mesh), edge_min_max, - tol, mesh, PMP::parameters::number_of_iterations(nb_iter) ); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 6b48181388e4..1293577ad4f8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -34,17 +34,22 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename Base::Point_3 Point_3; typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; + typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; + typedef typename boost::property_map::type VertexSizingMap; - Adaptive_sizing_field(const std::pair& edge_len_min_max - , const FT& tolerance - , const PolygonMesh& pmesh) + Adaptive_sizing_field(const std::pair& edge_len_min_max + , PolygonMesh& pmesh) : m_sq_short( CGAL::square(edge_len_min_max.first)) , m_sq_long( CGAL::square(edge_len_min_max.second)) - , tol(tolerance) , m_pmesh(pmesh) { - // calculate and store curvature and sizing field here in constructor? - // todo what about updating it? + //todo ip: initialize sizing map with default values + //todo ip: might end up using directly the property map of the curvature calculation (if mutable)? + vertex_sizing_map_ = get(Vertex_property_tag(), m_pmesh); + for(vertex_descriptor v : vertices(m_pmesh)){ + put(vertex_sizing_map_, v, m_sq_long); + } } private: @@ -62,10 +67,24 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } public: + void calc_sizing_map() + { + //todo ip + // calculate curvature + + // loop over curvature property field and calculate the target mesh size for a vertex + // don't forget to store squared length + + } + boost::optional is_too_long(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - if(sqlen > m_sq_long) + FT sqtarg_len = std::min(get(vertex_sizing_map_, source(h, m_pmesh)), + get(vertex_sizing_map_, target(h, m_pmesh))); + CGAL_assertion(get(vertex_sizing_map_, source(h, m_pmesh))); + CGAL_assertion(get(vertex_sizing_map_, target(h, m_pmesh))); + if(sqlen > sqtarg_len) return sqlen; else return boost::none; @@ -75,7 +94,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field const vertex_descriptor& vb) const { const FT sqlen = sqlength(va, vb); - if (sqlen > m_sq_long) + FT sqtarg_len = std::min(get(vertex_sizing_map_, va), + get(vertex_sizing_map_, vb)); + CGAL_assertion(get(vertex_sizing_map_, va)); + CGAL_assertion(get(vertex_sizing_map_, vb)); + if (sqlen > sqtarg_len) return sqlen; else return boost::none; @@ -84,7 +107,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_short(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - if (sqlen < m_sq_long) + FT sqtarg_len = std::min(get(vertex_sizing_map_, source(h, m_pmesh)), + get(vertex_sizing_map_, target(h, m_pmesh))); + CGAL_assertion(get(vertex_sizing_map_, source(h, m_pmesh))); + CGAL_assertion(get(vertex_sizing_map_, target(h, m_pmesh))); + if (sqlen < sqtarg_len) return sqlen; else return boost::none; @@ -98,12 +125,18 @@ class Adaptive_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } + void update_sizing_map(const vertex_descriptor& vnew) + { + //todo ip: calculate curvature for the vertex + //dummy + put(vertex_sizing_map_, vnew, m_sq_short); + } + private: FT m_sq_short; FT m_sq_long; - FT tol; - const PolygonMesh& m_pmesh; - //todo add property map containing sizing field form m_pmesh here + PolygonMesh& m_pmesh; + VertexSizingMap vertex_sizing_map_; }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index 3f32aacb1aa9..fbb522b7c787 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -92,6 +92,8 @@ class Uniform_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } + void update_sizing_map(const vertex_descriptor& vnew) const {} //todo ip- rewrite to remove this? + private: FT m_sq_short; FT m_sq_long; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index f0daf9cc20a5..19651ded9ae5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -478,7 +478,7 @@ namespace internal { //if an edge is longer than the given threshold `high`, the edge //is split at its midpoint and the two adjacent triangles are bisected (2-4 split)" template - void split_long_edges(const SizingFunction& sizing) + void split_long_edges(SizingFunction& sizing) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << "Split long edges..." << std::endl; @@ -536,6 +536,8 @@ namespace internal { //move refinement point vertex_descriptor vnew = target(hnew, mesh_); put(vpmap_, vnew, refinement_point); + //todo ip-add + sizing.update_sizing_map(vnew); #ifdef CGAL_PMP_REMESHING_VERY_VERBOSE std::cout << " Refinement point : " << refinement_point << std::endl; #endif @@ -1080,6 +1082,7 @@ namespace internal { Point proj = trees[patch_id_to_index_map[get_patch_id(face(halfedge(v, mesh_), mesh_))]]->closest_point(get(vpmap_, v)); put(vpmap_, v, proj); + //todo ip - also update sizing field here? } CGAL_assertion(!input_mesh_is_valid_ || is_valid_polygon_mesh(mesh_)); #ifdef CGAL_PMP_REMESHING_DEBUG @@ -1108,6 +1111,7 @@ namespace internal { continue; //note if v is constrained, it has not moved put(vpmap_, v, proj(v)); + //todo ip: also update sizing field here? } CGAL_assertion(is_valid(mesh_)); #ifdef CGAL_PMP_REMESHING_DEBUG @@ -2010,6 +2014,7 @@ namespace internal { VertexIsConstrainedMap vcmap_; FaceIndexMap fimap_; CGAL_assertion_code(bool input_mesh_is_valid_;) + //todo ip: maybe make sizing field member (reference) here? easier to handle updates };//end class Incremental_remesher }//end namespace internal diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 4ba686e9e191..858f34958109 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -38,7 +38,7 @@ template void isotropic_remeshing(const FaceRange& faces - , const SizingFunction& sizing + , SizingFunction& sizing , PolygonMesh& pmesh , const NamedParameters& np); @@ -224,14 +224,14 @@ template void isotropic_remeshing(const FaceRange& faces , const std::pair& edge_len_min_max //todo add defaults? - , const double& tolerance //todo add defaults? , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { typedef Adaptive_sizing_field Adaptive_sizing; + Adaptive_sizing sizing(edge_len_min_max, pmesh); isotropic_remeshing( faces, - Adaptive_sizing(edge_len_min_max, tolerance, pmesh), + sizing, pmesh, np); } @@ -241,7 +241,7 @@ template void isotropic_remeshing(const FaceRange& faces - , const SizingFunction& sizing + , SizingFunction& sizing , PolygonMesh& pmesh , const NamedParameters& np) { From a15956d231a5639cd850c6dde9f37891fdad1e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 24 May 2023 16:09:31 +0200 Subject: [PATCH 233/943] add clear function and input must mesh should be const in principle --- .../Non_manifold_feature_map.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Non_manifold_feature_map.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Non_manifold_feature_map.h index 8177a02d178b..e8901ebd727b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Non_manifold_feature_map.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Non_manifold_feature_map.h @@ -28,8 +28,8 @@ struct Non_manifold_feature_map typedef typename Graph_traits::halfedge_descriptor halfedge_descriptor; typedef dynamic_edge_property_t Edge_to_id_tag; typedef dynamic_vertex_property_t Vertex_to_id_tag; - typedef typename boost::property_map::type Edge_to_nm_id; - typedef typename boost::property_map::type Vertex_to_nm_id; + typedef typename boost::property_map::const_type Edge_to_nm_id; + typedef typename boost::property_map::const_type Vertex_to_nm_id; Edge_to_nm_id e_nm_id; Vertex_to_nm_id v_nm_id; std::vector< std::vector > non_manifold_edges; @@ -39,7 +39,7 @@ struct Non_manifold_feature_map {} template - Non_manifold_feature_map(PolygonMesh& pm, Vpm vpm) + Non_manifold_feature_map(const PolygonMesh& pm, Vpm vpm) : e_nm_id(get(Edge_to_id_tag(), pm)) , v_nm_id(get(Vertex_to_id_tag(), pm)) { @@ -99,6 +99,14 @@ struct Non_manifold_feature_map } } } + + void clear() + { + non_manifold_edges.clear(); + non_manifold_vertices.clear(); + e_nm_id = Edge_to_nm_id(); + v_nm_id = Vertex_to_nm_id(); + } }; } } // end of CGAL::Polygon_mesh_processing From 5d73a7addd778919f50b60b37d87e70886703035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 25 May 2023 10:06:51 +0200 Subject: [PATCH 234/943] add TODOs for parallelism --- .../examples/Polygon_mesh_processing/CMakeLists.txt | 1 + .../CGAL/Polygon_mesh_processing/autorefinement.h | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index d2faeb70cb28..306e216be408 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -120,6 +120,7 @@ if(TARGET CGAL::TBB_support) target_link_libraries(self_intersections_example PUBLIC CGAL::TBB_support) target_link_libraries(hausdorff_distance_remeshing_example PUBLIC CGAL::TBB_support) target_link_libraries(hausdorff_bounded_error_distance_example PUBLIC CGAL::TBB_support) + target_link_libraries(soup_autorefinement PUBLIC CGAL::TBB_support) create_single_source_cgal_program("corefinement_parallel_union_meshes.cpp") target_link_libraries(corefinement_parallel_union_meshes PUBLIC CGAL::TBB_support) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index e38f64ff3010..a46f2664803f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1116,7 +1116,7 @@ void autorefine_soup_output(const PointRange& input_points, typedef std::size_t Input_TID; typedef std::pair Pair_of_triangle_ids; - std::vector si_pairs; + std::vector si_pairs; // TODO: check std::vector is fine with Parallel_tag // collect intersecting pairs of triangles CGAL_PMP_AUTOREFINE_VERBOSE("collect intersecting pairs"); @@ -1170,6 +1170,7 @@ void autorefine_soup_output(const PointRange& input_points, CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); std::set > intersecting_triangles; + //TODO: PARALLEL_FOR #2 for (const Pair_of_triangle_ids& p : si_pairs) { int i1 = tri_inter_ids[p.first], @@ -1217,6 +1218,7 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef DEDUPLICATE_SEGMENTS // deduplicate inserted segments + //TODO: PARALLEL_FOR #3 std::vector>> all_segments_ids(all_segments.size()); for(std::size_t ti=0; ti> new_triangles; + std::vector> new_triangles; // Need to be threadsafe #ifdef USE_PROGRESS_DISPLAY boost::timer::progress_display pd(triangles.size()); #endif + //TODO: PARALLEL_FOR #1 for(std::size_t ti=0; ti to_input; + // TODO: reuse the fact that maps per triangle are already sorted std::map point_id_map; #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) std::vector exact_soup_points; @@ -1348,6 +1352,7 @@ void autorefine_soup_output(const PointRange& input_points, } // import refined triangles + //TODO: PARALLEL_FOR #4 for (const std::array& t : new_triangles) { soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); @@ -1355,11 +1360,11 @@ void autorefine_soup_output(const PointRange& input_points, #ifndef CGAL_NDEBUG CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - CGAL_assertion( !does_triangle_soup_self_intersect(exact_soup_points, soup_triangles) ); + CGAL_assertion( !does_triangle_soup_self_intersect(exact_soup_points, soup_triangles) ); #else #ifdef CGAL_DEBUG_PMP_AUTOREFINE CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles)) + if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles)) throw std::runtime_error("ERROR: invalid output, there is most probably a bug"); #endif #endif From 278e1867aa322600cd236413ba305f96b013258e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 26 May 2023 17:12:28 +0100 Subject: [PATCH 235/943] parallize #1 --- .../soup_autorefinement.cpp | 7 +- .../Polygon_mesh_processing/autorefinement.h | 89 +++++++++++++------ 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index d955734853bf..f12306689485 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -29,11 +30,13 @@ int main(int argc, char** argv) PMP::repair_polygon_soup(input_points, input_triangles); PMP::triangulate_polygons(input_points, input_triangles); + CGAL::Real_timer t; + t.start(); std::vector output_points; std::vector> output_triangles; PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles); - - CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); + std::cout << "#points = " << output_points.size() << " and #triangles = " << output_triangles.size() << " in " << t.time() << " sec." << std::endl; + // CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index a46f2664803f..e862d6839609 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -39,6 +39,11 @@ #define CGAL_PMP_AUTOREFINE_VERBOSE(MSG) #endif +#ifdef CGAL_LINKED_WITH_TBB +#include +#include +#endif + #include #define TEST_RESOLVE_INTERSECTION @@ -656,7 +661,12 @@ void generate_subtriangles(std::size_t ti, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, const std::vector>& triangles, - std::vector>& new_triangles) +#ifdef CGAL_LINKED_WITH_TBB + tbb::concurrent_vector>& new_triangles +#else + std::vector>& new_triangles +#endif + ) { // std::cout << "generate_subtriangles()\n"; // std::cout << std::setprecision(17); @@ -1266,46 +1276,67 @@ void autorefine_soup_output(const PointRange& input_points, CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles - std::vector> new_triangles; // Need to be threadsafe +#ifdef CGAL_LINKED_WITH_TBB + tbb::concurrent_vector> new_triangles; +#else + std::vector> new_triangles; +#endif #ifdef USE_PROGRESS_DISPLAY boost::timer::progress_display pd(triangles.size()); #endif - //TODO: PARALLEL_FOR #1 - for(std::size_t ti=0; ti& t = triangles[ti]; - auto is_constant_in_dim = [](const std::array& t, int dim) - { - return t[0][dim]==t[1][dim] && t[0][dim]!=t[2][dim]; - }; + if (all_segments[ti].empty() && all_points[ti].empty()) + new_triangles.push_back(triangles[ti]); + else + { +#ifdef USE_FIXED_PROJECTION_TRAITS + const std::array& t = triangles[ti]; + auto is_constant_in_dim = [](const std::array& t, int dim) + { + return t[0][dim] == t[1][dim] && t[0][dim] != t[2][dim]; + }; - typename EK::Vector_3 orth = CGAL::normal(t[0], t[1], t[2]); // TODO::avoid construction? - int c = CGAL::abs(orth[0]) > CGAL::abs(orth[1]) ? 0 : 1; - c = CGAL::abs(orth[2]) > CGAL::abs(orth[c]) ? 2 : c; + typename EK::Vector_3 orth = CGAL::normal(t[0], t[1], t[2]); // TODO::avoid construction? + int c = CGAL::abs(orth[0]) > CGAL::abs(orth[1]) ? 0 : 1; + c = CGAL::abs(orth[2]) > CGAL::abs(orth[c]) ? 2 : c; - if(c == 0) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } else if(c == 1) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } else if(c == 2) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } - #else - autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - #endif - } + if (c == 0) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + else if (c == 1) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + else if (c == 2) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } +#else + autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); +#endif + } #ifdef USE_PROGRESS_DISPLAY - ++pd; + ++pd; #endif + }; + +#ifdef CGAL_LINKED_WITH_TBB + tbb::parallel_for(tbb::blocked_range(0, triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + func(ti); + } + ); +#else + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + func(ti); } +#endif + + // brute force output: create a soup, orient and to-mesh CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); From 319743abf9126d413f6ad9feb99988896094e1f9 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 15:24:35 +0300 Subject: [PATCH 236/943] Simplified test data and eliminated no. of faces (which is not used) --- .../{CompareCurveList.h => Compare_curves.h} | 0 .../DATA/segments_tight/test00.txt | 36 ++-- .../DATA/segments_tight/test01.txt | 50 ++--- .../DATA/segments_tight/test02.txt | 39 ++-- .../DATA/segments_tight/test03.txt | 27 ++- .../DATA/segments_tight/test04.txt | 39 ++-- .../DATA/segments_tight/test05.txt | 39 ++-- .../DATA/segments_tight/test06.txt | 87 ++++---- .../DATA/segments_tight/test07.txt | 26 +-- .../DATA/segments_tight/test08.txt | 24 +-- .../DATA/segments_tight/test09.txt | 25 ++- .../DATA/segments_tight/test10.txt | 26 ++- .../DATA/segments_tight/test11.txt | 26 ++- .../DATA/segments_tight/test12.txt | 40 ++-- .../DATA/segments_tight/test13.txt | 39 ++-- .../DATA/segments_tight/test14.txt | 70 +++---- .../DATA/segments_tight/test15.txt | 53 +++-- .../DATA/segments_tight/test16.txt | 90 ++++----- .../DATA/segments_tight/test17.txt | 27 ++- .../DATA/segments_tight/test18.txt | 38 ++-- .../DATA/segments_tight/test19.txt | 24 +-- .../DATA/segments_tight/test20.txt | 40 ++-- .../DATA/segments_tight/test21.txt | 42 ++-- .../DATA/segments_tight/test22.txt | 36 ++-- .../DATA/segments_tight/test23.txt | 29 ++- .../DATA/segments_tight/test24.txt | 28 +-- .../DATA/segments_tight/test25.txt | 29 ++- .../DATA/segments_tight/test26.txt | 60 +++--- .../DATA/segments_tight/test27.txt | 48 ++--- .../DATA/segments_tight/test28.txt | 58 +++--- .../DATA/segments_tight/test29.txt | 36 ++-- .../DATA/segments_tight/test30.txt | 30 +-- .../DATA/segments_tight/test31.txt | 50 ++--- .../DATA/segments_tight/test32.txt | 50 ++--- .../DATA/segments_tight/test33.txt | 18 +- .../DATA/segments_tight/test34.txt | 18 +- .../DATA/segments_tight/test35.txt | 66 +++--- .../DATA/segments_tight/test36.txt | 66 +++--- .../DATA/segments_tight/test37.txt | 86 ++++---- .../DATA/segments_tight/test40.txt | 24 +-- .../DATA/segments_tight/test41.txt | 24 +-- .../DATA/segments_tight/test42.txt | 30 +-- .../DATA/segments_tight/test43.txt | 16 +- .../DATA/segments_tight/test44.txt | 27 ++- .../DATA/segments_tight/test45.txt | 16 +- .../DATA/segments_tight/test46.txt | 26 +-- .../DATA/segments_tight/test47.txt | 24 +-- .../DATA/segments_tight/test48.txt | 46 ++--- .../DATA/segments_tight/test49.txt | 16 +- .../DATA/segments_tight/test50.txt | 42 ++-- .../DATA/segments_tight/test51.txt | 190 +++++++++--------- .../DATA/segments_tight/test52.txt | 38 ++-- .../DATA/segments_tight/test53.txt | 23 +-- .../DATA/segments_tight/test54.txt | 30 +-- .../DATA/segments_tight/test55.txt | 39 ++-- .../DATA/segments_tight/test56.txt | 37 ++-- .../DATA/segments_tight/test60.txt | 29 ++- .../DATA/segments_tight/test61.txt | 50 ++--- .../DATA/segments_tight/test62.txt | 14 +- .../DATA/segments_tight/test63.txt | 32 +-- .../DATA/segments_tight/test64.txt | 14 +- .../DATA/segments_tight/test65.txt | 30 +-- .../DATA/segments_tight/test66.txt | 34 ++-- .../DATA/segments_tight/test67.txt | 47 +++-- .../DATA/segments_tight/test68.txt | 70 +++---- .../DATA/segments_tight/test69.txt | 49 +++-- .../DATA/segments_tight/test70.txt | 62 +++--- .../DATA/segments_tight/test71.txt | 38 ++-- .../DATA/segments_tight/test72.txt | 114 +++++------ .../DATA/segments_tight/test73.txt | 28 +-- .../DATA/segments_tight/test74.txt | 50 ++--- .../DATA/segments_tight/test75.txt | 34 ++-- .../DATA/segments_tight/test76.txt | 42 ++-- .../DATA/segments_tight/test77.txt | 21 +- .../DATA/segments_tight/test78.txt | 106 +++++----- .../DATA/segments_tight/test79.txt | 50 ++--- .../DATA/segments_tight/test80.txt | 36 ++-- .../DATA/segments_tight/test81.txt | 78 +++---- .../DATA/segments_tight/test82.txt | 30 +-- .../DATA/segments_tight/test83.txt | 38 ++-- .../DATA/segments_tight/test84.txt | 42 ++-- .../DATA/segments_tight/test85.txt | 33 ++- .../DATA/segments_tight/test86.txt | 32 ++- .../DATA/segments_tight/test87.txt | 31 ++- .../DATA/segments_tight/test88.txt | 37 ++-- 85 files changed, 1744 insertions(+), 1790 deletions(-) rename Surface_sweep_2/test/Surface_sweep_2/{CompareCurveList.h => Compare_curves.h} (100%) diff --git a/Surface_sweep_2/test/Surface_sweep_2/CompareCurveList.h b/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/CompareCurveList.h rename to Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt index 420b718d1e7b..7d48df57242c 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt @@ -1,23 +1,27 @@ +# No. of input segments followed by segments 2 -1 1 1 -1 1 1 -1 -1 +# No. of output segments followed by segments 4 -0/8 0/8 -1/1 -1/1 --1/1 1/1 0/8 0/8 -0/8 0/8 1/1 -1/1 -1/1 1/1 0/8 0/8 +0 0 -1 -1 +-1 1 0 0 +0 0 1 -1 +1 1 0 0 +# No. of output points followed by points 5 --1/1 -1/1 --1/1 1/1 -0/8 0/8 -1/1 -1/1 -1/1 1/1 -1 -0/8 0/8 +-1 -1 +-1 1 +0 0 +1 -1 +1 1 +# No. of intersection points followed by points 1 +0 0 +# No of faces: 1 +# No. of output segments with overlaps followed by segments 4 -0/8 0/8 -1/1 -1/1 --1/1 1/1 0/8 0/8 -0/8 0/8 1/1 -1/1 -1/1 1/1 0/8 0/8 - +0 0 -1 -1 +-1 1 0 0 +0 0 1 -1 +1 1 0 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt index b8f61bf90c6c..b5e69de02428 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt @@ -4,47 +4,47 @@ 5 0 1 2 1 0 3 4 12 -1/1 0/1 36/20 32/20 -36/20 32/20 1/1 2/1 +1 0 36/20 32/20 +36/20 32/20 1 2 36/20 32/20 44/20 48/20 -1/1 3/1 44/20 48/20 -44/20 48/20 3/1 4/1 -82/26 24/26 3/1 0/1 +1 3 44/20 48/20 +44/20 48/20 3 4 +82/26 24/26 3 0 82/26 24/26 36/20 32/20 86/26 48/26 82/26 24/26 44/20 48/20 86/26 48/26 -4/1 6/1 86/26 48/26 -5/1 0/1 82/26 24/26 -86/26 48/26 5/1 1/1 +4 6 86/26 48/26 +5 0 82/26 24/26 +86/26 48/26 5 1 12 -1/1 0/1 -1/1 2/1 -1/1 3/1 +1 0 +1 2 +1 3 36/20 32/20 44/20 48/20 -3/1 0/1 -3/1 4/1 +3 0 +3 4 82/26 24/26 86/26 48/26 -4/1 6/1 -5/1 0/1 -5/1 1/1 +4 6 +5 0 +5 1 4 36/20 32/20 44/20 48/20 82/26 24/26 86/26 48/26 -2 +# No. of faces: 2 12 -1/1 0/1 36/20 32/20 -36/20 32/20 1/1 2/1 +1 0 36/20 32/20 +36/20 32/20 1 2 36/20 32/20 44/20 48/20 -1/1 3/1 44/20 48/20 -44/20 48/20 3/1 4/1 -82/26 24/26 3/1 0/1 +1 3 44/20 48/20 +44/20 48/20 3 4 +82/26 24/26 3 0 82/26 24/26 36/20 32/20 86/26 48/26 82/26 24/26 44/20 48/20 86/26 48/26 -4/1 6/1 86/26 48/26 -5/1 0/1 82/26 24/26 -86/26 48/26 5/1 1/1 +4 6 86/26 48/26 +5 0 82/26 24/26 +86/26 48/26 5 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt index 9f96ea0d395d..5c505dbd01f9 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt @@ -3,32 +3,31 @@ 7 4 1 3 5 2 3 7 7 -0/1 6/1 153/43 241/43 -153/43 241/43 3/1 7/1 -140/32 114/32 1/1 3/1 +0 6 153/43 241/43 +153/43 241/43 3 7 +140/32 114/32 1 3 140/32 114/32 153/43 241/43 -5/1 2/1 140/32 114/32 -7/1 4/1 140/32 114/32 -153/43 241/43 9/1 5/1 +5 2 140/32 114/32 +7 4 140/32 114/32 +153/43 241/43 9 5 8 -0/1 6/1 -1/1 3/1 -3/1 7/1 +0 6 +1 3 +3 7 153/43 241/43 140/32 114/32 -5/1 2/1 -7/1 4/1 -9/1 5/1 +5 2 +7 4 +9 5 2 153/43 241/43 140/32 114/32 -1 +# No. of faces: 1 7 -0/1 6/1 153/43 241/43 -153/43 241/43 3/1 7/1 -140/32 114/32 1/1 3/1 +0 6 153/43 241/43 +153/43 241/43 3 7 +140/32 114/32 1 3 140/32 114/32 153/43 241/43 -5/1 2/1 140/32 114/32 -7/1 4/1 140/32 114/32 -153/43 241/43 9/1 5/1 - +5 2 140/32 114/32 +7 4 140/32 114/32 +153/43 241/43 9 5 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt index 9fc24d516679..15cc231bb28d 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt @@ -3,20 +3,19 @@ 1 2 5 2 1 3 5 3 3 -1/1 1/1 5/1 1/1 -1/1 2/1 5/1 2/1 -1/1 3/1 5/1 3/1 +1 1 5 1 +1 2 5 2 +1 3 5 3 6 -1/1 1/1 -1/1 2/1 -1/1 3/1 -5/1 1/1 -5/1 2/1 -5/1 3/1 +1 1 +1 2 +1 3 +5 1 +5 2 +5 3 0 -1 +# No. of faces: 1 3 -1/1 1/1 5/1 1/1 -1/1 2/1 5/1 2/1 -1/1 3/1 5/1 3/1 - +1 1 5 1 +1 2 5 2 +1 3 5 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt index 953c0bdeaafe..8ea66e0df9fe 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt @@ -3,32 +3,31 @@ 2 2 9 2 3 7 8 1 7 -2/1 2/1 63/21 42/21 -1/1 4/1 63/21 42/21 -63/21 42/21 4/1 1/1 +2 2 63/21 42/21 +1 4 63/21 42/21 +63/21 42/21 4 1 63/21 42/21 301/42 84/42 -3/1 7/1 301/42 84/42 -301/42 84/42 8/1 1/1 -301/42 84/42 9/1 2/1 +3 7 301/42 84/42 +301/42 84/42 8 1 +301/42 84/42 9 2 8 -1/1 4/1 -2/1 2/1 +1 4 +2 2 63/21 42/21 -3/1 7/1 -4/1 1/1 +3 7 +4 1 301/42 84/42 -8/1 1/1 -9/1 2/1 +8 1 +9 2 2 63/21 42/21 301/42 84/42 -1 +# No. of faces: 1 7 -2/1 2/1 63/21 42/21 -1/1 4/1 63/21 42/21 -63/21 42/21 4/1 1/1 +2 2 63/21 42/21 +1 4 63/21 42/21 +63/21 42/21 4 1 63/21 42/21 301/42 84/42 -3/1 7/1 301/42 84/42 -301/42 84/42 8/1 1/1 -301/42 84/42 9/1 2/1 - +3 7 301/42 84/42 +301/42 84/42 8 1 +301/42 84/42 9 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt index 46d7e73e4d6f..187550ca704f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt @@ -3,38 +3,37 @@ 3 2 10 6 1 3 14 3 9 -3/1 2/1 247/52 156/52 -1/1 3/1 247/52 156/52 +3 2 247/52 156/52 +1 3 247/52 156/52 247/52 156/52 681/87 414/87 -2/1 7/1 681/87 414/87 -681/87 414/87 10/1 6/1 +2 7 681/87 414/87 +681/87 414/87 10 6 247/52 156/52 806/65 195/65 681/87 414/87 806/65 195/65 -806/65 195/65 14/1 3/1 -806/65 195/65 15/1 2/1 +806/65 195/65 14 3 +806/65 195/65 15 2 9 -1/1 3/1 -2/1 7/1 -3/1 2/1 +1 3 +2 7 +3 2 247/52 156/52 681/87 414/87 -10/1 6/1 +10 6 806/65 195/65 -14/1 3/1 -15/1 2/1 +14 3 +15 2 3 247/52 156/52 681/87 414/87 806/65 195/65 -2 +# No. of faces: 2 9 -3/1 2/1 247/52 156/52 -1/1 3/1 247/52 156/52 +3 2 247/52 156/52 +1 3 247/52 156/52 247/52 156/52 681/87 414/87 -2/1 7/1 681/87 414/87 -681/87 414/87 10/1 6/1 +2 7 681/87 414/87 +681/87 414/87 10 6 247/52 156/52 806/65 195/65 681/87 414/87 806/65 195/65 -806/65 195/65 14/1 3/1 -806/65 195/65 15/1 2/1 - +806/65 195/65 14 3 +806/65 195/65 15 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt index cd0e00f2585d..2f9455a5a350 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt @@ -6,56 +6,55 @@ 6 2 3 7 5 7 3 5 14 -60/16 92/16 3/1 5/1 -60/16 92/16 3/1 7/1 -213/45 185/45 1/1 1/1 +60/16 92/16 3 5 +60/16 92/16 3 7 +213/45 185/45 1 1 213/45 185/45 60/16 92/16 -5/1 7/1 60/16 92/16 -6/1 2/1 213/45 185/45 -7/1 6/1 213/45 185/45 -156/15 60/15 9/1 4/1 -156/15 60/15 8/1 6/1 -58/5 15/5 11/1 3/1 -58/5 15/5 156/15 60/15 -12/1 3/1 58/5 15/5 -12/1 4/1 156/15 60/15 -14/1 1/1 58/5 15/5 +5 7 60/16 92/16 +6 2 213/45 185/45 +7 6 213/45 185/45 +156/15 4 9 4 +156/15 4 8 6 +58/5 3 11 3 +58/5 3 156/15 4 +12 3 58/5 3 +12 4 156/15 4 +14 1 58/5 3 16 -1/1 1/1 -3/1 5/1 -3/1 7/1 +1 1 +3 5 +3 7 60/16 92/16 213/45 185/45 -5/1 7/1 -6/1 2/1 -7/1 6/1 -8/1 6/1 -9/1 4/1 -156/15 60/15 -11/1 3/1 -58/5 15/5 -12/1 3/1 -12/1 4/1 -14/1 1/1 +5 7 +6 2 +7 6 +8 6 +9 4 +156/15 4 +11 3 +58/5 3 +12 3 +12 4 +14 1 4 60/16 92/16 213/45 185/45 -156/15 60/15 -58/5 15/5 -1 +156/15 4 +58/5 3 +# No. of faces: 1 14 -60/16 92/16 3/1 5/1 -60/16 92/16 3/1 7/1 -213/45 185/45 1/1 1/1 +60/16 92/16 3 5 +60/16 92/16 3 7 +213/45 185/45 1 1 213/45 185/45 60/16 92/16 -5/1 7/1 60/16 92/16 -6/1 2/1 213/45 185/45 -7/1 6/1 213/45 185/45 -156/15 60/15 9/1 4/1 -156/15 60/15 8/1 6/1 -58/5 15/5 11/1 3/1 -58/5 15/5 156/15 60/15 -12/1 3/1 58/5 15/5 -12/1 4/1 156/15 60/15 -14/1 1/1 58/5 15/5 - +5 7 60/16 92/16 +6 2 213/45 185/45 +7 6 213/45 185/45 +156/15 4 9 4 +156/15 4 8 6 +58/5 3 11 3 +58/5 3 156/15 4 +12 3 58/5 3 +12 4 156/15 4 +14 1 58/5 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt index c94c53eece64..b95f6e3998ca 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt @@ -4,19 +4,19 @@ 7 1 9 4 5 5 9 4 4 -5/1 5/1 2/1 3/1 -7/1 1/1 2/1 3/1 -7/1 1/1 9/1 4/1 -5/1 5/1 9/1 4/1 +5 5 2 3 +7 1 2 3 +7 1 9 4 +5 5 9 4 4 -2/1 3/1 -5/1 5/1 -7/1 1/1 -9/1 4/1 +2 3 +5 5 +7 1 +9 4 0 -2 +# No. of faces: 2 4 -5/1 5/1 2/1 3/1 -7/1 1/1 2/1 3/1 -7/1 1/1 9/1 4/1 -5/1 5/1 9/1 4/1 +5 5 2 3 +7 1 2 3 +7 1 9 4 +5 5 9 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt index 2aa0735bf044..10db8ae63eaa 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt @@ -2,18 +2,18 @@ 1 2 4 2 3 0 5 4 3 -3/1 0/1 4/1 2/1 -1/1 2/1 4/1 2/1 -4/1 2/1 5/1 4/1 +3 0 4 2 +1 2 4 2 +4 2 5 4 4 -1/1 2/1 -3/1 0/1 -4/1 2/1 -5/1 4/1 -1 -4/1 2/1 +1 2 +3 0 +4 2 +5 4 1 +4 2 +# No. of faces: 1 3 -3/1 0/1 4/1 2/1 -1/1 2/1 4/1 2/1 -4/1 2/1 5/1 4/1 +3 0 4 2 +1 2 4 2 +4 2 5 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt index e9f6371753e0..8e0635e3ca68 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt @@ -2,19 +2,18 @@ 1 1 7 1 3 1 5 4 3 -1/1 1/1 3/1 1/1 -3/1 1/1 5/1 4/1 -3/1 1/1 7/1 1/1 +1 1 3 1 +3 1 5 4 +3 1 7 1 4 -1/1 1/1 -3/1 1/1 -5/1 4/1 -7/1 1/1 -1 -3/1 1/1 +1 1 +3 1 +5 4 +7 1 1 +3 1 +# No. of faces: 1 3 -1/1 1/1 3/1 1/1 -3/1 1/1 5/1 4/1 -3/1 1/1 7/1 1/1 - +1 1 3 1 +3 1 5 4 +3 1 7 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt index f01134605549..47e21732fd62 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt @@ -2,20 +2,18 @@ 6 1 1 1 4 -2 3 1 3 -3/1 1/1 1/1 1/1 -4/1 -2/1 3/1 1/1 -6/1 1/1 3/1 1/1 +3 1 1 1 +4 -2 3 1 +6 1 3 1 4 -1/1 1/1 -3/1 1/1 -4/1 -2/1 -6/1 1/1 -1 -3/1 1/1 +1 1 +3 1 +4 -2 +6 1 1 +3 1 +# No. of faces: 1 3 -3/1 1/1 1/1 1/1 -4/1 -2/1 3/1 1/1 -6/1 1/1 3/1 1/1 - - +3 1 1 1 +4 -2 3 1 +6 1 3 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt index 78140996955a..e389d4a7db70 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt @@ -2,20 +2,18 @@ 1 1 3 5 5 3 2 3 3 -1/1 1/1 2/1 3/1 -2/1 3/1 3/1 5/1 -5/1 3/1 2/1 3/1 +1 1 2 3 +2 3 3 5 +5 3 2 3 4 -1/1 1/1 -2/1 3/1 -3/1 5/1 -5/1 3/1 -1 -2/1 3/1 +1 1 +2 3 +3 5 +5 3 1 +2 3 +# No. of faces: 1 3 -1/1 1/1 2/1 3/1 -2/1 3/1 3/1 5/1 -5/1 3/1 2/1 3/1 - - +1 1 2 3 +2 3 3 5 +5 3 2 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt index 39d22990f454..4710b27995dd 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt @@ -3,27 +3,25 @@ 7 1 1 1 1 4 5 4 5 -1/1 4/1 2/1 4/1 -4/1 1/1 1/1 1/1 -2/1 4/1 4/1 1/1 -2/1 4/1 5/1 4/1 -7/1 1/1 4/1 1/1 +1 4 2 4 +4 1 1 1 +2 4 4 1 +2 4 5 4 +7 1 4 1 6 -1/1 1/1 -1/1 4/1 -2/1 4/1 -4/1 1/1 -5/1 4/1 -7/1 1/1 +1 1 +1 4 +2 4 +4 1 +5 4 +7 1 2 -2/1 4/1 -4/1 1/1 -1 +2 4 +4 1 +# No. of faces: 1 5 -1/1 4/1 2/1 4/1 -4/1 1/1 1/1 1/1 -2/1 4/1 4/1 1/1 -2/1 4/1 5/1 4/1 -7/1 1/1 4/1 1/1 - - +1 4 2 4 +4 1 1 1 +2 4 4 1 +2 4 5 4 +7 1 4 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt index 69f7c821d955..3fad0655447f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt @@ -3,26 +3,25 @@ 1 5 9 -1 7 4 3 0 5 -0/1 2/1 4/1 2/1 -280/56 112/56 3/1 0/1 -1/1 5/1 280/56 112/56 -7/1 4/1 280/56 112/56 -280/56 112/56 9/1 -1/1 +0 2 4 2 +5 2 3 0 +1 5 5 2 +7 4 5 2 +5 2 9 -1 7 -0/1 2/1 -1/1 5/1 -3/1 0/1 -4/1 2/1 -280/56 112/56 -7/1 4/1 -9/1 -1/1 -1 -280/56 112/56 +0 2 +1 5 +3 0 +4 2 +5 2 +7 4 +9 -1 1 +5 2 +# No. of faces: 1 5 -0/1 2/1 4/1 2/1 -280/56 112/56 3/1 0/1 -1/1 5/1 280/56 112/56 -7/1 4/1 280/56 112/56 -280/56 112/56 9/1 -1/1 - +0 2 4 2 +5 2 3 0 +1 5 5 2 +7 4 5 2 +5 2 9 -1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt index 6252c3b96dc4..01535344d7c1 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt @@ -7,41 +7,41 @@ 3 -1 5 -1 3 -2 5 -2 9 -0/1 2/1 4/1 2/1 -3/1 -2/1 5/1 -2/1 -3/1 -1/1 5/1 -1/1 -280/56 112/56 3/1 0/1 -1/1 5/1 280/56 112/56 -3/1 4/1 5/1 4/1 -3/1 5/1 5/1 5/1 -7/1 4/1 280/56 112/56 -280/56 112/56 9/1 -1/1 +0 2 4 2 +3 -2 5 -2 +3 -1 5 -1 +5 2 3 0 +1 5 5 2 +3 4 5 4 +3 5 5 5 +7 4 5 2 +5 2 9 -1 15 -0/1 2/1 -1/1 5/1 -3/1 -2/1 -3/1 -1/1 -3/1 0/1 -3/1 4/1 -3/1 5/1 -4/1 2/1 -5/1 -2/1 -5/1 -1/1 -280/56 112/56 -5/1 4/1 -5/1 5/1 -7/1 4/1 -9/1 -1/1 -1 -280/56 112/56 +0 2 +1 5 +3 -2 +3 -1 +3 0 +3 4 +3 5 +4 2 +5 -2 +5 -1 +5 2 +5 4 +5 5 +7 4 +9 -1 1 +5 2 +# No. of faces: 1 9 -0/1 2/1 4/1 2/1 -3/1 -2/1 5/1 -2/1 -3/1 -1/1 5/1 -1/1 -280/56 112/56 3/1 0/1 -1/1 5/1 280/56 112/56 -3/1 4/1 5/1 4/1 -3/1 5/1 5/1 5/1 -7/1 4/1 280/56 112/56 -280/56 112/56 9/1 -1/1 +0 2 4 2 +3 -2 5 -2 +3 -1 5 -1 +5 2 3 0 +1 5 5 2 +3 4 5 4 +3 5 5 5 +7 4 5 2 +5 2 9 -1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt index bc9ee1611370..f7b36b054329 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt @@ -9,33 +9,32 @@ 8 2 5 -1 4 3 5 -1 9 -3/1 -3/1 0/1 0/1 -4/1 -4/1 3/1 -3/1 -0/1 0/1 4/1 3/1 -4/1 -4/1 5/1 -1/1 -3/1 -3/1 5/1 -1/1 -4/1 3/1 5/1 -1/1 -8/1 2/1 5/1 -1/1 -5/1 -1/1 9/1 -1/1 -8/1 2/1 9/1 -1/1 +3 -3 0 0 +4 -4 3 -3 +0 0 4 3 +4 -4 5 -1 +3 -3 5 -1 +4 3 5 -1 +8 2 5 -1 +5 -1 9 -1 +8 2 9 -1 7 -0/1 0/1 -3/1 -3/1 -4/1 -4/1 -4/1 3/1 -5/1 -1/1 -8/1 2/1 -9/1 -1/1 +0 0 +3 -3 +4 -4 +4 3 +5 -1 +8 2 +9 -1 0 -4 +# No. of faces: 4 9 -3/1 -3/1 0/1 0/1 -4/1 -4/1 3/1 -3/1 -0/1 0/1 4/1 3/1 -4/1 -4/1 5/1 -1/1 -3/1 -3/1 5/1 -1/1 -4/1 3/1 5/1 -1/1 -8/1 2/1 5/1 -1/1 -5/1 -1/1 9/1 -1/1 -8/1 2/1 9/1 -1/1 - +3 -3 0 0 +4 -4 3 -3 +0 0 4 3 +4 -4 5 -1 +3 -3 5 -1 +4 3 5 -1 +8 2 5 -1 +5 -1 9 -1 +8 2 9 -1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt index d174c920fc29..3bc6a8ce5476 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt @@ -7,51 +7,51 @@ 0 2 6 4 1 4 5 2 14 -2/1 0/1 36/12 36/12 -36/12 36/12 1/1 1/1 -0/1 2/1 36/12 36/12 -36/12 36/12 0/1 3/1 -1/1 4/1 36/12 36/12 -36/12 36/12 1/1 5/1 -36/12 36/12 2/1 6/1 -4/1 0/1 36/12 36/12 -36/12 36/12 4/1 6/1 -5/1 1/1 36/12 36/12 -36/12 36/12 5/1 2/1 -5/1 5/1 36/12 36/12 -6/1 3/1 36/12 36/12 -36/12 36/12 6/1 4/1 +2 0 3 3 +3 3 1 1 +0 2 3 3 +3 3 0 3 +1 4 3 3 +3 3 1 5 +3 3 2 6 +4 0 3 3 +3 3 4 6 +5 1 3 3 +3 3 5 2 +5 5 3 3 +6 3 3 3 +3 3 6 4 15 -0/1 2/1 -0/1 3/1 -1/1 1/1 -1/1 4/1 -1/1 5/1 -2/1 0/1 -2/1 6/1 -36/12 36/12 -4/1 0/1 -4/1 6/1 -5/1 1/1 -5/1 2/1 -5/1 5/1 -6/1 3/1 -6/1 4/1 -1 -36/12 36/12 +0 2 +0 3 +1 1 +1 4 +1 5 +2 0 +2 6 +3 3 +4 0 +4 6 +5 1 +5 2 +5 5 +6 3 +6 4 1 +3 3 +# No. of faces: 1 14 -2/1 0/1 36/12 36/12 -36/12 36/12 1/1 1/1 -0/1 2/1 36/12 36/12 -36/12 36/12 0/1 3/1 -1/1 4/1 36/12 36/12 -36/12 36/12 1/1 5/1 -36/12 36/12 2/1 6/1 -4/1 0/1 36/12 36/12 -36/12 36/12 4/1 6/1 -5/1 1/1 36/12 36/12 -36/12 36/12 5/1 2/1 -5/1 5/1 36/12 36/12 -6/1 3/1 36/12 36/12 -36/12 36/12 6/1 4/1 +2 0 3 3 +3 3 1 1 +0 2 3 3 +3 3 0 3 +1 4 3 3 +3 3 1 5 +3 3 2 6 +4 0 3 3 +3 3 4 6 +5 1 3 3 +3 3 5 2 +5 5 3 3 +6 3 3 3 +3 3 6 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt index 32cf9a98c6c8..34351b917acf 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt @@ -4,20 +4,19 @@ 1 3 0 4 1 3 2 4 4 -1/1 3/1 0/1 4/1 -1/1 5/1 0/1 4/1 -1/1 3/1 2/1 4/1 -1/1 5/1 2/1 4/1 +1 3 0 4 +1 5 0 4 +1 3 2 4 +1 5 2 4 4 -0/1 4/1 -1/1 3/1 -1/1 5/1 -2/1 4/1 +0 4 +1 3 +1 5 +2 4 0 -2 +# No. of faces: 2 4 -1/1 3/1 0/1 4/1 -1/1 5/1 0/1 4/1 -1/1 3/1 2/1 4/1 -1/1 5/1 2/1 4/1 - +1 3 0 4 +1 5 0 4 +1 3 2 4 +1 5 2 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt index 049c8e10a28d..23c2db7d18f9 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt @@ -3,25 +3,25 @@ 0 2 3 2 2 -1 4 1 5 -2/1 -1/1 36/12 0/12 -0/1 0/1 36/12 0/12 -0/1 2/1 3/1 2/1 -36/12 0/12 4/1 1/1 -36/12 0/12 6/1 0/1 +2 -1 3 0 +0 0 3 0 +0 2 3 2 +3 0 4 1 +3 0 6 0 7 -0/1 0/1 -0/1 2/1 -2/1 -1/1 -36/12 0/12 -3/1 2/1 -4/1 1/1 -6/1 0/1 -1 -36/12 0/12 +0 0 +0 2 +2 -1 +3 0 +3 2 +4 1 +6 0 1 +3 0 +# No. of faces: 1 5 -2/1 -1/1 36/12 0/12 -0/1 0/1 36/12 0/12 -0/1 2/1 3/1 2/1 -36/12 0/12 4/1 1/1 -36/12 0/12 6/1 0/1 +2 -1 3 0 +0 0 3 0 +0 2 3 2 +3 0 4 1 +3 0 6 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt index b21e9b2a1077..a6cf55f80253 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt @@ -3,19 +3,17 @@ 3 0 5 0 5 0 8 0 3 -0/1 0/1 3/1 0/1 -3/1 0/1 5/1 0/1 -5/1 0/1 8/1 0/1 +0 0 3 0 +3 0 5 0 +5 0 8 0 4 -0/1 0/1 -3/1 0/1 -5/1 0/1 -8/1 0/1 +0 0 +3 0 +5 0 +8 0 0 -1 +# No. of faces: 1 3 -0/1 0/1 3/1 0/1 -3/1 0/1 5/1 0/1 -5/1 0/1 8/1 0/1 - - +0 0 3 0 +3 0 5 0 +5 0 8 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt index 9075a5d1fb56..2c261cad7d14 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt @@ -3,28 +3,24 @@ 3 0 5 4 3 4 5 0 5 -3/1 0/1 4/1 2/1 -1/1 2/1 4/1 2/1 -3/1 4/1 4/1 2/1 -4/1 2/1 5/1 0/1 -4/1 2/1 5/1 4/1 +3 0 4 2 +1 2 4 2 +3 4 4 2 +4 2 5 0 +4 2 5 4 6 -1/1 2/1 -3/1 0/1 -3/1 4/1 -4/1 2/1 -5/1 0/1 -5/1 4/1 -1 -4/1 2/1 +1 2 +3 0 +3 4 +4 2 +5 0 +5 4 1 +4 2 +# No. of faces: 1 5 -3/1 0/1 4/1 2/1 -1/1 2/1 4/1 2/1 -3/1 4/1 4/1 2/1 -4/1 2/1 5/1 0/1 -4/1 2/1 5/1 4/1 - - - - +3 0 4 2 +1 2 4 2 +3 4 4 2 +4 2 5 0 +4 2 5 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt index 445b25d3b6ef..ad795ac780e4 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt @@ -3,27 +3,27 @@ 9 3 0 3 2 1 6 5 6 -2/1 1/1 180/45 135/45 -180/45 135/45 0/1 3/1 -180/45 135/45 1/1 6/1 -6/1 1/1 180/45 135/45 -180/45 135/45 6/1 5/1 -9/1 3/1 180/45 135/45 +2 1 4 3 +4 3 0 3 +4 3 1 6 +6 1 4 3 +4 3 6 5 +9 3 4 3 7 -0/1 3/1 -1/1 6/1 -2/1 1/1 -180/45 135/45 -6/1 1/1 -6/1 5/1 -9/1 3/1 -1 -180/45 135/45 +0 3 +1 6 +2 1 +4 3 +6 1 +6 5 +9 3 1 +4 3 +# No. of faces: 1 6 -2/1 1/1 180/45 135/45 -180/45 135/45 0/1 3/1 -180/45 135/45 1/1 6/1 -6/1 1/1 180/45 135/45 -180/45 135/45 6/1 5/1 -9/1 3/1 180/45 135/45 +2 1 4 3 +4 3 0 3 +4 3 1 6 +6 1 4 3 +4 3 6 5 +9 3 4 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt index 738953c643b9..e6ac95bc0179 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt @@ -5,25 +5,23 @@ 0 0 -1 -3 0 0 -3 4 5 -0/1 0/1 -1/1 -3/1 -0/1 0/1 -3/1 4/1 -0/1 0/1 1/1 1/1 -0/1 0/1 2/1 3/1 -0/1 0/1 9/1 8/1 +0 0 -1 -3 +0 0 -3 4 +0 0 1 1 +0 0 2 3 +0 0 9 8 6 --3/1 4/1 --1/1 -3/1 -0/1 0/1 -1/1 1/1 -2/1 3/1 -9/1 8/1 +-3 4 +-1 -3 +0 0 +1 1 +2 3 +9 8 0 -1 +# No. of faces: 1 5 -0/1 0/1 -1/1 -3/1 -0/1 0/1 -3/1 4/1 -0/1 0/1 1/1 1/1 -0/1 0/1 2/1 3/1 -0/1 0/1 9/1 8/1 - - +0 0 -1 -3 +0 0 -3 4 +0 0 1 1 +0 0 2 3 +0 0 9 8 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt index 8c692cc93a41..633acf5e4672 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt @@ -4,21 +4,20 @@ 0 0 4 0 0 0 2 -2 4 -1/1 2/1 0/1 0/1 -0/1 0/1 2/1 -2/1 -3/1 2/1 0/1 0/1 -0/1 0/1 4/1 0/1 +1 2 0 0 +0 0 2 -2 +3 2 0 0 +0 0 4 0 5 -0/1 0/1 -1/1 2/1 -2/1 -2/1 -3/1 2/1 -4/1 0/1 +0 0 +1 2 +2 -2 +3 2 +4 0 0 -1 +# No. of faces: 1 4 -1/1 2/1 0/1 0/1 -0/1 0/1 2/1 -2/1 -3/1 2/1 0/1 0/1 -0/1 0/1 4/1 0/1 - +1 2 0 0 +0 0 2 -2 +3 2 0 0 +0 0 4 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt index 601e8cfbf8a0..c1b674a8f00b 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt @@ -4,20 +4,20 @@ -2 -2 0 0 0 0 -2 -4 4 -0/1 0/1 -2/1 -4/1 --2/1 -2/1 0/1 0/1 --3/1 0/1 0/1 0/1 --3/1 2/1 0/1 0/1 +0 0 -2 -4 +-2 -2 0 0 +-3 0 0 0 +-3 2 0 0 5 --3/1 0/1 --3/1 2/1 --2/1 -4/1 --2/1 -2/1 -0/1 0/1 +-3 0 +-3 2 +-2 -4 +-2 -2 +0 0 0 -1 +# No. of faces: 1 4 -0/1 0/1 -2/1 -4/1 --2/1 -2/1 0/1 0/1 --3/1 0/1 0/1 0/1 --3/1 2/1 0/1 0/1 +0 0 -2 -4 +-2 -2 0 0 +-3 0 0 0 +-3 2 0 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt index 3b52e2164d7e..c679dad3f340 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt @@ -4,21 +4,20 @@ 6 0 3 3 0 6 3 3 4 -0/1 0/1 3/1 3/1 -0/1 6/1 3/1 3/1 -6/1 0/1 3/1 3/1 -3/1 3/1 6/1 6/1 +0 0 3 3 +0 6 3 3 +6 0 3 3 +3 3 6 6 5 -0/1 0/1 -0/1 6/1 -3/1 3/1 -6/1 0/1 -6/1 6/1 +0 0 +0 6 +3 3 +6 0 +6 6 0 -1 +# No. of faces: 1 4 -0/1 0/1 3/1 3/1 -0/1 6/1 3/1 3/1 -6/1 0/1 3/1 3/1 -3/1 3/1 6/1 6/1 - +0 0 3 3 +0 6 3 3 +6 0 3 3 +3 3 6 6 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt index fc3cfb4fc30c..2cfe803179b2 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt @@ -7,36 +7,36 @@ 0 1 4 1 1 4 3 6 8 -1/1 4/1 2/1 5/1 -0/1 5/1 2/1 5/1 -0/1 7/1 2/1 5/1 -2/1 5/1 3/1 6/1 -0/1 1/1 4/1 1/1 -2/1 4/1 4/1 2/1 -2/1 4/1 4/1 4/1 -2/1 7/1 4/1 9/1 +1 4 2 5 +0 5 2 5 +0 7 2 5 +2 5 3 6 +0 1 4 1 +2 4 4 2 +2 4 4 4 +2 7 4 9 12 -0/1 1/1 -0/1 5/1 -0/1 7/1 -1/1 4/1 -2/1 4/1 -2/1 5/1 -2/1 7/1 -3/1 6/1 -4/1 1/1 -4/1 2/1 -4/1 4/1 -4/1 9/1 -1 -2/1 5/1 +0 1 +0 5 +0 7 +1 4 +2 4 +2 5 +2 7 +3 6 +4 1 +4 2 +4 4 +4 9 1 +2 5 +# No. of faces: 1 8 -1/1 4/1 2/1 5/1 -0/1 5/1 2/1 5/1 -0/1 7/1 2/1 5/1 -2/1 5/1 3/1 6/1 -0/1 1/1 4/1 1/1 -2/1 4/1 4/1 2/1 -2/1 4/1 4/1 4/1 -2/1 7/1 4/1 9/1 +1 4 2 5 +0 5 2 5 +0 7 2 5 +2 5 3 6 +0 1 4 1 +2 4 4 2 +2 4 4 4 +2 7 4 9 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt index 1d25c06c8c44..09d93ba7d9b6 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt @@ -8,30 +8,30 @@ 1 3 2 2 1 1 2 2 8 -0/1 2/1 1/1 1/1 -0/1 2/1 1/1 3/1 -1/1 3/1 0/1 4/1 -1/1 5/1 0/1 4/1 -1/1 1/1 2/1 2/1 -1/1 3/1 2/1 2/1 -1/1 3/1 2/1 4/1 -1/1 5/1 2/1 4/1 +0 2 1 1 +0 2 1 3 +1 3 0 4 +1 5 0 4 +1 1 2 2 +1 3 2 2 +1 3 2 4 +1 5 2 4 7 -0/1 2/1 -0/1 4/1 -1/1 1/1 -1/1 3/1 -1/1 5/1 -2/1 2/1 -2/1 4/1 +0 2 +0 4 +1 1 +1 3 +1 5 +2 2 +2 4 0 -3 +# No. of faces: 3 8 -0/1 2/1 1/1 1/1 -0/1 2/1 1/1 3/1 -1/1 3/1 0/1 4/1 -1/1 5/1 0/1 4/1 -1/1 1/1 2/1 2/1 -1/1 3/1 2/1 2/1 -1/1 3/1 2/1 4/1 -1/1 5/1 2/1 4/1 +0 2 1 1 +0 2 1 3 +1 3 0 4 +1 5 0 4 +1 1 2 2 +1 3 2 2 +1 3 2 4 +1 5 2 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt index ed905e724c2d..d945734fca4f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt @@ -10,35 +10,35 @@ 2 1 3 0 2 -1 3 0 10 -0/1 -1/1 -1/1 0/1 --1/1 0/1 0/1 1/1 -0/1 -1/1 1/1 0/1 -1/1 0/1 0/1 1/1 -0/1 1/1 1/1 2/1 -1/1 0/1 2/1 -1/1 -1/1 0/1 2/1 1/1 -2/1 1/1 1/1 2/1 -2/1 -1/1 3/1 0/1 -2/1 1/1 3/1 0/1 +0 -1 -1 0 +-1 0 0 1 +0 -1 1 0 +1 0 0 1 +0 1 1 2 +1 0 2 -1 +1 0 2 1 +2 1 1 2 +2 -1 3 0 +2 1 3 0 8 --1/1 0/1 -0/1 -1/1 -0/1 1/1 -1/1 0/1 -1/1 2/1 -2/1 -1/1 -2/1 1/1 -3/1 0/1 +-1 0 +0 -1 +0 1 +1 0 +1 2 +2 -1 +2 1 +3 0 0 -4 +# No. of faces: 4 10 -0/1 -1/1 -1/1 0/1 --1/1 0/1 0/1 1/1 -0/1 -1/1 1/1 0/1 -1/1 0/1 0/1 1/1 -0/1 1/1 1/1 2/1 -1/1 0/1 2/1 -1/1 -1/1 0/1 2/1 1/1 -2/1 1/1 1/1 2/1 -2/1 -1/1 3/1 0/1 -2/1 1/1 3/1 0/1 +0 -1 -1 0 +-1 0 0 1 +0 -1 1 0 +1 0 0 1 +0 1 1 2 +1 0 2 -1 +1 0 2 1 +2 1 1 2 +2 -1 3 0 +2 1 3 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt index 37aca71a59c4..44a64a0247f6 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt @@ -3,24 +3,24 @@ 0 0 4 4 2 2 5 2 5 -0/1 0/1 2/1 2/1 -0/1 4/1 2/1 2/1 -2/1 2/1 4/1 0/1 -2/1 2/1 4/1 4/1 -2/1 2/1 5/1 2/1 +0 0 2 2 +0 4 2 2 +2 2 4 0 +2 2 4 4 +2 2 5 2 6 -0/1 0/1 -0/1 4/1 -2/1 2/1 -4/1 0/1 -4/1 4/1 -5/1 2/1 -1 -2/1 2/1 +0 0 +0 4 +2 2 +4 0 +4 4 +5 2 1 +2 2 +# No. of faces: 1 5 -0/1 0/1 2/1 2/1 -0/1 4/1 2/1 2/1 -2/1 2/1 4/1 0/1 -2/1 2/1 4/1 4/1 -2/1 2/1 5/1 2/1 +0 0 2 2 +0 4 2 2 +2 2 4 0 +2 2 4 4 +2 2 5 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt index e6a784c9d3d5..93f5204f2623 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt @@ -2,21 +2,21 @@ 0 0 5 0 2 -2 2 3 4 -2/1 -2/1 50/25 0/25 -0/1 0/1 50/25 0/25 -50/25 0/25 2/1 3/1 -50/25 0/25 5/1 0/1 +2 -2 2 0 +0 0 2 0 +2 0 2 3 +2 0 5 0 5 -0/1 0/1 -2/1 -2/1 -50/25 0/25 -2/1 3/1 -5/1 0/1 -1 -50/25 0/25 +0 0 +2 -2 +2 0 +2 3 +5 0 1 +2 0 +# No. of faces: 1 4 -2/1 -2/1 50/25 0/25 -0/1 0/1 50/25 0/25 -50/25 0/25 2/1 3/1 -50/25 0/25 5/1 0/1 +2 -2 2 0 +0 0 2 0 +2 0 2 3 +2 0 5 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt index 3185f80ec7b8..42f4208cf9a4 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt @@ -3,31 +3,31 @@ 0 0 5 0 2 4 2 -2 7 -60/30 0/30 2/1 -2/1 -0/1 0/1 60/30 0/30 -24/12 24/12 60/30 0/30 -1/1 2/1 24/12 24/12 -2/1 4/1 24/12 24/12 -24/12 24/12 3/1 2/1 -60/30 0/30 5/1 0/1 +2 0 2 -2 +0 0 2 0 +2 2 2 0 +1 2 2 2 +2 4 2 2 +2 2 3 2 +2 0 5 0 8 -0/1 0/1 -1/1 2/1 -2/1 -2/1 -60/30 0/30 -24/12 24/12 -2/1 4/1 -3/1 2/1 -5/1 0/1 +0 0 +1 2 +2 -2 +2 0 +2 2 +2 4 +3 2 +5 0 2 -60/30 0/30 -24/12 24/12 -1 +2 0 +2 2 +# No. of faces: 1 7 -60/30 0/30 2/1 -2/1 -0/1 0/1 60/30 0/30 -24/12 24/12 60/30 0/30 -1/1 2/1 24/12 24/12 -2/1 4/1 24/12 24/12 -24/12 24/12 3/1 2/1 -60/30 0/30 5/1 0/1 +2 0 2 -2 +0 0 2 0 +2 2 2 0 +1 2 2 2 +2 4 2 2 +2 2 3 2 +2 0 5 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt index 830d83f2e599..822e3789c289 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt @@ -3,31 +3,31 @@ 0 0 5 0 2 -2 2 4 7 -2/1 -2/1 2/1 0/1 -0/1 0/1 2/1 0/1 -2/1 0/1 2/1 2/1 -1/1 2/1 2/1 2/1 -2/1 2/1 2/1 4/1 -2/1 2/1 3/1 2/1 -2/1 0/1 5/1 0/1 +2 -2 2 0 +0 0 2 0 +2 0 2 2 +1 2 2 2 +2 2 2 4 +2 2 3 2 +2 0 5 0 8 -0/1 0/1 -1/1 2/1 -2/1 -2/1 -60/30 0/30 -24/12 24/12 -2/1 4/1 -3/1 2/1 -5/1 0/1 +0 0 +1 2 +2 -2 +2 0 +2 2 +2 4 +3 2 +5 0 2 -60/30 0/30 -24/12 24/12 -1 +2 0 +2 2 +# No. of faces: 1 7 -2/1 -2/1 2/1 0/1 -0/1 0/1 2/1 0/1 -2/1 0/1 2/1 2/1 -1/1 2/1 2/1 2/1 -2/1 2/1 2/1 4/1 -2/1 2/1 3/1 2/1 -2/1 0/1 5/1 0/1 +2 -2 2 0 +0 0 2 0 +2 0 2 2 +1 2 2 2 +2 2 2 4 +2 2 3 2 +2 0 5 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt index 52b22ae49a6f..6db47eaf9eda 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt @@ -2,15 +2,15 @@ 1 5 1 2 0 0 3 2 2 -1/1 5/1 1/1 2/1 -0/1 0/1 3/1 2/1 +1 5 1 2 +0 0 3 2 4 -0/1 0/1 -1/1 2/1 -1/1 5/1 -3/1 2/1 +0 0 +1 2 +1 5 +3 2 0 -1 +# No. of faces: 1 2 -1/1 5/1 1/1 2/1 -0/1 0/1 3/1 2/1 +1 5 1 2 +0 0 3 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt index 9587d1b15dc6..47ced43d85b2 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt @@ -2,15 +2,15 @@ -1 2 1 4 0 0 0 2 2 -0/1 0/1 0/1 2/1 --1/1 2/1 1/1 4/1 +0 0 0 2 +-1 2 1 4 4 --1/1 2/1 -0/1 0/1 -0/1 2/1 -1/1 4/1 +-1 2 +0 0 +0 2 +1 4 0 -1 +# No. of faces: 1 2 -0/1 0/1 0/1 2/1 --1/1 2/1 1/1 4/1 +0 0 0 2 +-1 2 1 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt index 58b53d159913..c8a3dd025bc0 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt @@ -5,39 +5,39 @@ 1 3 3 3 1 0 3 0 9 -2/1 3/1 2/1 2/1 -1/1 3/1 2/1 3/1 -2/1 4/1 2/1 3/1 -0/1 4/1 2/1 4/1 -2/1 6/1 2/1 4/1 -1/1 0/1 3/1 0/1 -2/1 3/1 3/1 3/1 -1/1 7/1 3/1 7/1 -2/1 4/1 4/1 4/1 +2 3 2 2 +1 3 2 3 +2 4 2 3 +0 4 2 4 +2 6 2 4 +1 0 3 0 +2 3 3 3 +1 7 3 7 +2 4 4 4 12 -0/1 4/1 -1/1 0/1 -1/1 3/1 -1/1 7/1 -2/1 2/1 -16/8 24/8 -32/16 64/16 -2/1 6/1 -3/1 0/1 -3/1 3/1 -3/1 7/1 -4/1 4/1 +0 4 +1 0 +1 3 +1 7 +2 2 +2 3 +2 4 +2 6 +3 0 +3 3 +3 7 +4 4 2 -16/8 24/8 -32/16 64/16 -1 +2 3 +2 4 +# No. of faces: 1 9 -2/1 3/1 2/1 2/1 -1/1 3/1 2/1 3/1 -2/1 4/1 2/1 3/1 -0/1 4/1 2/1 4/1 -2/1 6/1 2/1 4/1 -1/1 0/1 3/1 0/1 -2/1 3/1 3/1 3/1 -1/1 7/1 3/1 7/1 -2/1 4/1 4/1 4/1 +2 3 2 2 +1 3 2 3 +2 4 2 3 +0 4 2 4 +2 6 2 4 +1 0 3 0 +2 3 3 3 +1 7 3 7 +2 4 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt index 2c4c5a96f292..03fbb7e16eaf 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt @@ -4,43 +4,43 @@ 0 4 4 2 1 2 4 5 11 -2/1 0/1 2/1 3/1 -1/1 2/1 2/1 3/1 -0/1 4/1 2/1 3/1 -2/1 3/1 2/1 6/1 -1/1 7/1 2/1 6/1 -2/1 6/1 2/1 9/1 -2/1 3/1 7/2 9/2 -2/1 6/1 7/2 9/2 -2/1 3/1 4/1 2/1 -7/2 9/2 4/1 5/1 -7/2 9/2 5/1 3/1 +2 0 2 3 +1 2 2 3 +0 4 2 3 +2 3 2 6 +1 7 2 6 +2 6 2 9 +2 3 7/2 9/2 +2 6 7/2 9/2 +2 3 4 2 +7/2 9/2 4 5 +7/2 9/2 5 3 11 -0/1 4/1 -1/1 2/1 -1/1 7/1 -2/1 0/1 -36/18 54/18 +0 4 +1 2 +1 7 +2 0 +2 3 72/36 216/36 -2/1 9/1 +2 9 84/24 108/24 -4/1 2/1 -4/1 5/1 -5/1 3/1 +4 2 +4 5 +5 3 3 -36/18 54/18 +2 3 72/36 216/36 84/24 108/24 -2 +# No. of faces: 2 11 -2/1 0/1 2/1 3/1 -1/1 2/1 2/1 3/1 -0/1 4/1 2/1 3/1 -2/1 3/1 2/1 6/1 -1/1 7/1 2/1 6/1 -2/1 6/1 2/1 9/1 -2/1 3/1 7/2 9/2 -2/1 6/1 7/2 9/2 -2/1 3/1 4/1 2/1 -7/2 9/2 4/1 5/1 -7/2 9/2 5/1 3/1 +2 0 2 3 +1 2 2 3 +0 4 2 3 +2 3 2 6 +1 7 2 6 +2 6 2 9 +2 3 7/2 9/2 +2 6 7/2 9/2 +2 3 4 2 +7/2 9/2 4 5 +7/2 9/2 5 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt index bf946526e36a..2c10412d83b6 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt @@ -5,51 +5,51 @@ -2 4 1 6 -1 6 -1 1 13 --1/1 6/5 -1/1 1/1 --3/1 2/1 -1/1 6/5 --1/1 14/3 -1/1 6/5 --2/1 4/1 -1/1 14/3 --1/1 6/1 -1/1 14/3 -0/1 0/1 0/1 4/5 --1/1 6/5 0/1 4/5 -0/1 4/5 0/1 3/1 -0/1 4/1 0/1 16/3 --1/1 14/3 0/1 16/3 -0/1 16/3 0/1 6/1 -0/1 16/3 1/1 6/1 -0/1 4/5 2/1 0/1 +-1 6/5 -1 1 +-3 2 -1 6/5 +-1 14/3 -1 6/5 +-2 4 -1 14/3 +-1 6 -1 14/3 +0 0 0 4/5 +-1 6/5 0 4/5 +0 4/5 0 3 +0 4 0 16/3 +-1 14/3 0 16/3 +0 16/3 0 6 +0 16/3 1 6 +0 4/5 2 0 14 --3/1 2/1 --2/1 4/1 --1/1 1/1 +-3 2 +-2 4 +-1 1 -25/25 30/25 --15/15 70/15 --1/1 6/1 -0/1 0/1 -0/15 12/15 -0/1 3/1 -0/1 4/1 -0/6 32/6 -0/1 6/1 -1/1 6/1 -2/1 0/1 +-1 70/15 +-1 6 +0 0 +0 12/15 +0 3 +0 4 +0 32/6 +0 6 +1 6 +2 0 4 -25/25 30/25 --15/15 70/15 -0/15 12/15 -0/6 32/6 -1 +-1 70/15 +0 12/15 +0 32/6 +# No. of faces: 1 13 --1/1 6/5 -1/1 1/1 --3/1 2/1 -1/1 6/5 --1/1 14/3 -1/1 6/5 --2/1 4/1 -1/1 14/3 --1/1 6/1 -1/1 14/3 -0/1 0/1 0/1 4/5 --1/1 6/5 0/1 4/5 -0/1 4/5 0/1 3/1 -0/1 4/1 0/1 16/3 --1/1 14/3 0/1 16/3 -0/1 16/3 0/1 6/1 -0/1 16/3 1/1 6/1 -0/1 4/5 2/1 0/1 +-1 6/5 -1 1 +-3 2 -1 6/5 +-1 14/3 -1 6/5 +-2 4 -1 14/3 +-1 6 -1 14/3 +0 0 0 4/5 +-1 6/5 0 4/5 +0 4/5 0 3 +0 4 0 16/3 +-1 14/3 0 16/3 +0 16/3 0 6 +0 16/3 1 6 +0 4/5 2 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt index beea62f7afb4..2cb778d38b75 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt @@ -2,18 +2,18 @@ 0 0 0 6 0 3 3 3 3 -0/1 0/1 0/1 3/1 -0/1 3/1 0/1 6/1 -0/1 3/1 3/1 3/1 +0 0 0 3 +0 3 0 6 +0 3 3 3 4 -0/1 0/1 -0/1 3/1 -0/1 6/1 -3/1 3/1 -1 -0/1 3/1 +0 0 +0 3 +0 6 +3 3 1 +0 3 +# No. of faces: 1 3 -0/1 0/1 0/1 3/1 -0/1 3/1 0/1 6/1 -0/1 3/1 3/1 3/1 +0 0 0 3 +0 3 0 6 +0 3 3 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt index 3651988bd29b..f9cefcc2116e 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt @@ -2,18 +2,18 @@ -3 3 0 3 0 0 0 6 3 -0/1 0/1 0/1 3/1 --3/1 3/1 0/1 3/1 -0/1 3/1 0/1 6/1 +0 0 0 3 +-3 3 0 3 +0 3 0 6 4 --3/1 3/1 -0/1 0/1 -0/1 3/1 -0/1 6/1 -1 -0/1 3/1 +-3 3 +0 0 +0 3 +0 6 1 +0 3 +# No. of faces: 1 3 -0/1 0/1 0/1 3/1 --3/1 3/1 0/1 3/1 -0/1 3/1 0/1 6/1 +0 0 0 3 +-3 3 0 3 +0 3 0 6 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt index b83c0b96d1c3..4cfeb604b7fe 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt @@ -3,21 +3,21 @@ -2 2 0 2 0 2 2 2 4 -0/1 0/1 0/1 2/1 --2/1 2/1 0/1 2/1 -0/1 2/1 0/1 4/1 -0/1 2/1 2/1 2/1 +0 0 0 2 +-2 2 0 2 +0 2 0 4 +0 2 2 2 5 --2/1 2/1 -0/1 0/1 -0/1 2/1 -0/1 4/1 -2/1 2/1 -1 -0/1 2/1 +-2 2 +0 0 +0 2 +0 4 +2 2 1 +0 2 +# No. of faces: 1 4 -0/1 0/1 0/1 2/1 --2/1 2/1 0/1 2/1 -0/1 2/1 0/1 4/1 -0/1 2/1 2/1 2/1 +0 0 0 2 +-2 2 0 2 +0 2 0 4 +0 2 2 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt index a78d9c4bdea3..90afe463752b 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt @@ -2,14 +2,14 @@ 0 5 4 5 4 5 4 1 2 -4/1 5/1 4/1 1/1 -0/1 5/1 4/1 5/1 +4 5 4 1 +0 5 4 5 3 -0/1 5/1 -4/1 1/1 -4/1 5/1 +0 5 +4 1 +4 5 0 -1 +# No. of faces: 1 2 -4/1 5/1 4/1 1/1 -0/1 5/1 4/1 5/1 +4 5 4 1 +0 5 4 5 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt index 0aff3e7b1810..19a28bae19dc 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt @@ -4,20 +4,19 @@ 0 0 4 0 0 4 0 0 4 -0/1 4/1 0/1 0/1 -0/1 0/1 4/1 0/1 -4/1 4/1 4/1 0/1 -0/1 4/1 4/1 4/1 +0 4 0 0 +0 0 4 0 +4 4 4 0 +0 4 4 4 4 -0/1 0/1 -0/1 4/1 -4/1 0/1 -4/1 4/1 +0 0 +0 4 +4 0 +4 4 0 -2 +# No. of faces: 2 4 -0/1 4/1 0/1 0/1 -0/1 0/1 4/1 0/1 -4/1 4/1 4/1 0/1 -0/1 4/1 4/1 4/1 - +0 4 0 0 +0 0 4 0 +4 4 4 0 +0 4 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt index 431f41756eb6..24188d25fa0f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt @@ -2,14 +2,14 @@ 0 0 4 0 0 4 0 0 2 -0/1 4/1 0/1 0/1 -0/1 0/1 4/1 0/1 +0 4 0 0 +0 0 4 0 3 -0/1 0/1 -0/1 4/1 -4/1 0/1 +0 0 +0 4 +4 0 0 -1 +# No. of faces: 1 2 -0/1 4/1 0/1 0/1 -0/1 0/1 4/1 0/1 +0 4 0 0 +0 0 4 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt index ed0e785f55ba..512151f3428d 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt @@ -3,19 +3,19 @@ 2 5 2 2 2 1 4 1 3 -2/1 5/1 2/1 2/1 -0/1 6/1 2/1 6/1 -2/1 1/1 4/1 1/1 +2 5 2 2 +0 6 2 6 +2 1 4 1 6 -0/1 6/1 -2/1 1/1 -2/1 2/1 -2/1 5/1 -2/1 6/1 -4/1 1/1 +0 6 +2 1 +2 2 +2 5 +2 6 +4 1 0 -1 +# No. of faces: 1 3 -2/1 5/1 2/1 2/1 -0/1 6/1 2/1 6/1 -2/1 1/1 4/1 1/1 +2 5 2 2 +0 6 2 6 +2 1 4 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt index 5861e7d3583d..1624ab365376 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt @@ -2,18 +2,18 @@ 2 0 2 3 4 0 0 0 3 -2/1 0/1 0/1 0/1 -2/1 0/1 2/1 3/1 -4/1 0/1 2/1 0/1 +2 0 0 0 +2 0 2 3 +4 0 2 0 4 -0/1 0/1 -2/1 0/1 -2/1 3/1 -4/1 0/1 -1 -2/1 0/1 +0 0 +2 0 +2 3 +4 0 1 +2 0 +# No. of faces: 1 3 -2/1 0/1 0/1 0/1 -2/1 0/1 2/1 3/1 -4/1 0/1 2/1 0/1 +2 0 0 0 +2 0 2 3 +4 0 2 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt index 8546ccf6f28b..9884d9b633fe 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt @@ -4,29 +4,29 @@ 7 3 12 3 9 3 9 0 6 -0/1 0/1 2/1 0/1 -2/1 3/1 2/1 0/1 -2/1 0/1 5/1 0/1 -9/1 3/1 9/1 0/1 -7/1 3/1 9/1 3/1 -9/1 3/1 12/1 3/1 +0 0 2 0 +2 3 2 0 +2 0 5 0 +9 3 9 0 +7 3 9 3 +9 3 12 3 8 -0/1 0/1 -2/1 0/1 -2/1 3/1 -5/1 0/1 -7/1 3/1 -9/1 0/1 -9/1 3/1 -12/1 3/1 +0 0 +2 0 +2 3 +5 0 +7 3 +9 0 +9 3 +12 3 2 -2/1 0/1 -9/1 3/1 -1 +2 0 +9 3 +# No. of faces: 1 6 -0/1 0/1 2/1 0/1 -2/1 3/1 2/1 0/1 -2/1 0/1 5/1 0/1 -9/1 3/1 9/1 0/1 -7/1 3/1 9/1 3/1 -9/1 3/1 12/1 3/1 +0 0 2 0 +2 3 2 0 +2 0 5 0 +9 3 9 0 +7 3 9 3 +9 3 12 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt index 38fdef6d37bf..937d78e447e4 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt @@ -2,14 +2,14 @@ 0 0 4 0 4 0 4 4 2 -0/1 0/1 4/1 0/1 -4/1 0/1 4/1 4/1 +0 0 4 0 +4 0 4 4 3 -0/1 0/1 -4/1 0/1 -4/1 4/1 +0 0 +4 0 +4 4 0 -1 +# No. of faces: 1 2 -0/1 0/1 4/1 0/1 -4/1 0/1 4/1 4/1 +0 0 4 0 +4 0 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt index 47db121f373e..11d3fd8a787f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt @@ -5,27 +5,27 @@ 8 6 9 7 8 6 9 5 6 -5/1 5/1 8/1 5/1 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -4/1 7/1 8/1 7/1 -8/1 6/1 9/1 5/1 -8/1 6/1 9/1 7/1 +5 5 8 5 +8 6 8 5 +8 7 8 6 +4 7 8 7 +8 6 9 5 +8 6 9 7 7 -4/1 7/1 -5/1 5/1 -8/1 5/1 -8/1 6/1 -8/1 7/1 -9/1 5/1 -9/1 7/1 -1 -8/1 6/1 +4 7 +5 5 +8 5 +8 6 +8 7 +9 5 +9 7 1 +8 6 +# No. of faces: 1 6 -5/1 5/1 8/1 5/1 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -4/1 7/1 8/1 7/1 -8/1 6/1 9/1 5/1 -8/1 6/1 9/1 7/1 +5 5 8 5 +8 6 8 5 +8 7 8 6 +4 7 8 7 +8 6 9 5 +8 6 9 7 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt index cf9cd7243ce9..0acf50538185 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt @@ -16,103 +16,103 @@ 2 0 6 4 2 10 6 8 30 -2/1 3/1 2/1 0/1 -0/1 1/1 2/1 3/1 -2/1 4/1 2/1 3/1 -2/1 4/1 0/1 3/1 -0/1 6/1 2/1 6/1 -2/1 6/1 2/1 8/1 -1/1 7/1 2/1 8/1 -0/1 8/1 2/1 8/1 -2/1 8/1 2/1 10/1 -2/1 3/1 3/1 4/1 -2/1 8/1 10/3 28/3 -2/1 10/1 10/3 28/3 -2/1 3/1 4/1 3/1 -10/3 28/3 4/1 10/1 -2/1 0/1 6/1 4/1 -6/1 5/1 6/1 4/1 -6/1 5/1 5/1 5/1 -6/1 6/1 6/1 5/1 -6/1 6/1 2/1 4/1 -2/1 6/1 6/1 6/1 -6/1 7/1 6/1 6/1 -4/1 7/1 6/1 7/1 -6/1 8/1 6/1 7/1 -10/3 28/3 6/1 8/1 -8/1 5/1 6/1 5/1 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -6/1 7/1 8/1 7/1 -9/1 5/1 8/1 6/1 -9/1 7/1 8/1 6/1 +2 3 2 0 +0 1 2 3 +2 4 2 3 +2 4 0 3 +0 6 2 6 +2 6 2 8 +1 7 2 8 +0 8 2 8 +2 8 2 10 +2 3 3 4 +2 8 10/3 28/3 +2 10 10/3 28/3 +2 3 4 3 +10/3 28/3 4 10 +2 0 6 4 +6 5 6 4 +6 5 5 5 +6 6 6 5 +6 6 2 4 +2 6 6 6 +6 7 6 6 +4 7 6 7 +6 8 6 7 +10/3 28/3 6 8 +8 5 6 5 +8 6 8 5 +8 7 8 6 +6 7 8 7 +9 5 8 6 +9 7 8 6 27 -0/1 1/1 -0/1 3/1 -0/1 6/1 -0/1 8/1 -1/1 7/1 -2/1 0/1 -2/1 3/1 -2/1 4/1 -2/1 6/1 -2/1 8/1 -2/1 10/1 -3/1 4/1 +0 1 +0 3 +0 6 +0 8 +1 7 +2 0 +2 3 +2 4 +2 6 +2 8 +2 10 +3 4 60/18 168/18 -4/1 3/1 -4/1 7/1 -4/1 10/1 -5/1 5/1 -6/1 4/1 -72/12 60/12 -6/1 6/1 -96/16 112/16 -6/1 8/1 -8/1 5/1 -8/1 6/1 -8/1 7/1 -9/1 5/1 -9/1 7/1 +4 3 +4 7 +4 10 +5 5 +6 4 +6 5 +6 6 +6 7 +6 8 +8 5 +8 6 +8 7 +9 5 +9 7 9 -2/1 3/1 -2/1 4/1 -2/1 6/1 -2/1 8/1 +2 3 +2 4 +2 6 +2 8 60/18 168/18 -72/12 60/12 -6/1 6/1 -96/16 112/16 -8/1 6/1 -5 +6 5 +6 6 +6 7 +8 6 +# No. of faces: 5 30 -2/1 3/1 2/1 0/1 -0/1 1/1 2/1 3/1 -2/1 4/1 2/1 3/1 -2/1 4/1 0/1 3/1 -0/1 6/1 2/1 6/1 -2/1 6/1 2/1 8/1 -1/1 7/1 2/1 8/1 -0/1 8/1 2/1 8/1 -2/1 8/1 2/1 10/1 -2/1 3/1 3/1 4/1 -2/1 8/1 10/3 28/3 -2/1 10/1 10/3 28/3 -2/1 3/1 4/1 3/1 -10/3 28/3 4/1 10/1 -2/1 0/1 6/1 4/1 -6/1 5/1 6/1 4/1 -6/1 5/1 5/1 5/1 -6/1 6/1 6/1 5/1 -6/1 6/1 2/1 4/1 -2/1 6/1 6/1 6/1 -6/1 7/1 6/1 6/1 -4/1 7/1 6/1 7/1 -6/1 8/1 6/1 7/1 -10/3 28/3 6/1 8/1 -8/1 5/1 6/1 5/1 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -6/1 7/1 8/1 7/1 -9/1 5/1 8/1 6/1 -9/1 7/1 8/1 6/1 +2 3 2 0 +0 1 2 3 +2 4 2 3 +2 4 0 3 +0 6 2 6 +2 6 2 8 +1 7 2 8 +0 8 2 8 +2 8 2 10 +2 3 3 4 +2 8 10/3 28/3 +2 10 10/3 28/3 +2 3 4 3 +10/3 28/3 4 10 +2 0 6 4 +6 5 6 4 +6 5 5 5 +6 6 6 5 +6 6 2 4 +2 6 6 6 +6 7 6 6 +4 7 6 7 +6 8 6 7 +10/3 28/3 6 8 +8 5 6 5 +8 6 8 5 +8 7 8 6 +6 7 8 7 +9 5 8 6 +9 7 8 6 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt index 519eff3c8c95..e54693b507ca 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt @@ -3,27 +3,27 @@ 0 0 4 4 2 5 2 -1 6 -2/1 2/1 2/1 -1/1 -0/1 0/1 2/1 2/1 -0/1 4/1 2/1 2/1 -2/1 5/1 2/1 2/1 -2/1 2/1 4/1 0/1 -2/1 2/1 4/1 4/1 +2 2 2 -1 +0 0 2 2 +0 4 2 2 +2 5 2 2 +2 2 4 0 +2 2 4 4 7 -0/1 0/1 -0/1 4/1 -2/1 -1/1 +0 0 +0 4 +2 -1 64/32 64/32 -2/1 5/1 -4/1 0/1 -4/1 4/1 +2 5 +4 0 +4 4 1 64/32 64/32 -1 +# No. of faces: 1 6 -2/1 2/1 2/1 -1/1 -0/1 0/1 2/1 2/1 -0/1 4/1 2/1 2/1 -2/1 5/1 2/1 2/1 -2/1 2/1 4/1 0/1 -2/1 2/1 4/1 4/1 +2 2 2 -1 +0 0 2 2 +0 4 2 2 +2 5 2 2 +2 2 4 0 +2 2 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt index 79d174935580..03bc28fe6cab 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt @@ -3,18 +3,17 @@ 0 3 0 2 0 2 0 0 3 -0/1 2/1 0/1 0/1 -0/1 3/1 0/1 2/1 -0/1 5/1 0/1 3/1 +0 2 0 0 +0 3 0 2 +0 5 0 3 4 -0/1 0/1 -0/1 2/1 -0/1 3/1 -0/1 5/1 +0 0 +0 2 +0 3 +0 5 0 -1 +# No. of faces: 1 3 -0/1 2/1 0/1 0/1 -0/1 3/1 0/1 2/1 -0/1 5/1 0/1 3/1 - +0 2 0 0 +0 3 0 2 +0 5 0 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt index ce10a30cb75c..75d469762858 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt @@ -3,21 +3,21 @@ 8 6 9 7 8 6 9 5 4 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -8/1 6/1 9/1 5/1 -8/1 6/1 9/1 7/1 +8 6 8 5 +8 7 8 6 +8 6 9 5 +8 6 9 7 5 -8/1 5/1 -8/1 6/1 -8/1 7/1 -9/1 5/1 -9/1 7/1 -1 -8/1 6/1 +8 5 +8 6 +8 7 +9 5 +9 7 1 +8 6 +# No. of faces: 1 4 -8/1 6/1 8/1 5/1 -8/1 7/1 8/1 6/1 -8/1 6/1 9/1 5/1 -8/1 6/1 9/1 7/1 +8 6 8 5 +8 7 8 6 +8 6 9 5 +8 6 9 7 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt index 1065362fc19d..f2f078a93299 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt @@ -3,26 +3,25 @@ 0 1 2 1 2 0 2 2 5 -0/1 0/1 0/1 1/1 -0/1 1/1 0/1 2/1 -2/1 0/1 2/1 1/1 -0/1 1/1 2/1 1/1 -2/1 1/1 2/1 2/1 +0 0 0 1 +0 1 0 2 +2 0 2 1 +0 1 2 1 +2 1 2 2 6 -0/1 0/1 -0/1 1/1 -0/1 2/1 -2/1 0/1 -2/1 1/1 -2/1 2/1 +0 0 +0 1 +0 2 +2 0 +2 1 +2 2 2 -0/1 1/1 -2/1 1/1 -1 +0 1 +2 1 +# No. of faces: 1 5 -0/1 0/1 0/1 1/1 -0/1 1/1 0/1 2/1 -2/1 0/1 2/1 1/1 -0/1 1/1 2/1 1/1 -2/1 1/1 2/1 2/1 - +0 0 0 1 +0 1 0 2 +2 0 2 1 +0 1 2 1 +2 1 2 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt index adc296648a43..bac5d28e69c2 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt @@ -3,25 +3,24 @@ 0 1 6 5 3 3 7 3 5 -3/1 0/1 3/1 3/1 -0/1 1/1 3/1 3/1 -3/1 3/1 3/1 6/1 -3/1 3/1 6/1 5/1 -3/1 3/1 7/1 3/1 +3 0 3 3 +0 1 3 3 +3 3 3 6 +3 3 6 5 +3 3 7 3 6 -0/1 1/1 -3/1 0/1 -3/1 3/1 -3/1 6/1 -6/1 5/1 -7/1 3/1 -1 -3/1 3/1 +0 1 +3 0 +3 3 +3 6 +6 5 +7 3 1 +3 3 +# No. of faces: 1 5 -3/1 0/1 3/1 3/1 -0/1 1/1 3/1 3/1 -3/1 3/1 3/1 6/1 -3/1 3/1 6/1 5/1 -3/1 3/1 7/1 3/1 - +3 0 3 3 +0 1 3 3 +3 3 3 6 +3 3 6 5 +3 3 7 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt index 92beb4090a24..580ad8751274 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt @@ -2,21 +2,20 @@ 0 0 4 0 3 0 7 0 3 -0/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 7/1 0/1 +0 0 3 0 +3 0 4 0 +4 0 7 0 4 -0/1 0/1 -3/1 0/1 -4/1 0/1 -7/1 0/1 +0 0 +3 0 +4 0 +7 0 2 -3/1 0/1 -4/1 0/1 -1 +3 0 +4 0 +# No. of faces: 1 4 -0/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 7/1 0/1 - +0 0 3 0 +3 0 4 0 +3 0 4 0 +4 0 7 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt index 6db6035cbc7f..56f8052dbd5c 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt @@ -3,31 +3,31 @@ 0 0 4 0 2 0 8 0 5 -0/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 6/1 0/1 -6/1 0/1 8/1 0/1 +0 0 2 0 +2 0 3 0 +3 0 4 0 +4 0 6 0 +6 0 8 0 6 -0/1 0/1 -2/1 0/1 -3/1 0/1 -4/1 0/1 -6/1 0/1 -8/1 0/1 +0 0 +2 0 +3 0 +4 0 +6 0 +8 0 4 -2/1 0/1 -3/1 0/1 -4/1 0/1 -6/1 0/1 -1 +2 0 +3 0 +4 0 +6 0 +# No. of faces: 1 9 -0/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -3/1 0/1 4/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 6/1 0/1 -4/1 0/1 6/1 0/1 -6/1 0/1 8/1 0/1 \ No newline at end of file +0 0 2 0 +2 0 3 0 +2 0 3 0 +3 0 4 0 +3 0 4 0 +3 0 4 0 +4 0 6 0 +4 0 6 0 +6 0 8 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt index ee6c49c399e5..a975379f310d 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt @@ -2,14 +2,12 @@ 0 0 3 0 0 0 3 0 1 -0/1 0/1 3/1 0/1 +0 0 3 0 2 -0/1 0/1 -3/1 0/1 +0 0 +3 0 0 -1 +# No. of faces: 1 2 -0/1 0/1 3/1 0/1 -0/1 0/1 3/1 0/1 - - +0 0 3 0 +0 0 3 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt index 8923f049d153..0bf64d49d7fe 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt @@ -4,22 +4,22 @@ 0 0 5 0 2 0 3 0 3 -0/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 5/1 0/1 +0 0 2 0 +2 0 3 0 +3 0 5 0 4 -0/1 0/1 -2/1 0/1 -3/1 0/1 -5/1 0/1 +0 0 +2 0 +3 0 +5 0 2 -2/1 0/1 -3/1 0/1 -1 +2 0 +3 0 +# No. of faces: 1 6 -0/1 0/1 2/1 0/1 -0/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 5/1 0/1 -3/1 0/1 5/1 0/1 +0 0 2 0 +0 0 2 0 +2 0 3 0 +2 0 3 0 +3 0 5 0 +3 0 5 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt index f2825be57f25..b27adefbb3b2 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt @@ -3,13 +3,13 @@ 0 0 6 6 6 6 0 0 1 -0/1 0/1 6/1 6/1 +0 0 6 6 2 -0/1 0/1 -6/1 6/1 +0 0 +6 6 0 -1 +# No. of faces: 1 3 -0/1 0/1 6/1 6/1 -0/1 0/1 6/1 6/1 -6/1 6/1 0/1 0/1 +0 0 6 6 +0 0 6 6 +6 6 0 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt index e83cce072aee..d1ebcea2dc15 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt @@ -3,23 +3,23 @@ 0 0 4 4 0 4 4 0 4 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 +0 0 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 4 5 -0/1 0/1 -0/1 4/1 +0 0 +0 4 64/32 64/32 -4/1 0/1 -4/1 4/1 +4 0 +4 4 1 64/32 64/32 -1 +# No. of faces: 1 6 -0/1 0/1 64/32 64/32 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 -64/32 64/32 4/1 4/1 +0 0 64/32 64/32 +0 0 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 4 +64/32 64/32 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt index 7725cef46c2a..420a030dada6 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt @@ -4,25 +4,25 @@ 0 4 4 0 0 4 4 0 4 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 +0 0 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 4 5 -0/1 0/1 -0/1 4/1 +0 0 +0 4 64/32 64/32 -4/1 0/1 -4/1 4/1 +4 0 +4 4 1 64/32 64/32 -1 +# No. of faces: 1 8 -0/1 0/1 64/32 64/32 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 -64/32 64/32 4/1 4/1 +0 0 64/32 64/32 +0 0 64/32 64/32 +0 4 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 0 +64/32 64/32 4 4 +64/32 64/32 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt index b380b5e7cbda..cdd01dcd1193 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt @@ -5,32 +5,31 @@ 0 4 4 0 -1 2 5 2 6 -0/1 0/1 48/24 48/24 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 4/1 0/1 -48/24 48/24 4/1 4/1 -48/24 48/24 5/1 2/1 +0 0 48/24 48/24 +-1 2 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 4 0 +48/24 48/24 4 4 +48/24 48/24 5 2 7 --1/1 2/1 -0/1 0/1 -0/1 4/1 +-1 2 +0 0 +0 4 48/24 48/24 -4/1 0/1 -4/1 4/1 -5/1 2/1 +4 0 +4 4 +5 2 1 48/24 48/24 -1 +# No. of faces: 1 10 -0/1 0/1 48/24 48/24 -0/1 0/1 48/24 48/24 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 4/1 0/1 -48/24 48/24 4/1 0/1 -48/24 48/24 4/1 4/1 -48/24 48/24 4/1 4/1 -48/24 48/24 5/1 2/1 - +0 0 48/24 48/24 +0 0 48/24 48/24 +-1 2 48/24 48/24 +0 4 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 4 0 +48/24 48/24 4 0 +48/24 48/24 4 4 +48/24 48/24 4 4 +48/24 48/24 5 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt index 54feabc43bac..4d739e20e788 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt @@ -6,43 +6,43 @@ -1 2 5 2 1 1 3 3 8 -0/1 0/1 1/1 1/1 -1/1 1/1 48/24 48/24 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 3/1 3/1 -48/24 48/24 4/1 0/1 -3/1 3/1 4/1 4/1 -48/24 48/24 5/1 2/1 +0 0 1 1 +1 1 48/24 48/24 +-1 2 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 3 3 +48/24 48/24 4 0 +3 3 4 4 +48/24 48/24 5 2 9 --1/1 2/1 -0/1 0/1 -0/1 4/1 -1/1 1/1 +-1 2 +0 0 +0 4 +1 1 48/24 48/24 -3/1 3/1 -4/1 0/1 -4/1 4/1 -5/1 2/1 +3 3 +4 0 +4 4 +5 2 3 -1/1 1/1 +1 1 48/24 48/24 -3/1 3/1 -1 +3 3 +# No. of faces: 1 16 -0/1 0/1 1/1 1/1 -0/1 0/1 1/1 1/1 -1/1 1/1 48/24 48/24 -1/1 1/1 48/24 48/24 -1/1 1/1 48/24 48/24 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 3/1 3/1 -48/24 48/24 3/1 3/1 -48/24 48/24 3/1 3/1 -48/24 48/24 4/1 0/1 -48/24 48/24 4/1 0/1 -3/1 3/1 4/1 4/1 -3/1 3/1 4/1 4/1 -48/24 48/24 5/1 2/1 +0 0 1 1 +0 0 1 1 +1 1 48/24 48/24 +1 1 48/24 48/24 +1 1 48/24 48/24 +-1 2 48/24 48/24 +0 4 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 3 3 +48/24 48/24 3 3 +48/24 48/24 3 3 +48/24 48/24 4 0 +48/24 48/24 4 0 +3 3 4 4 +3 3 4 4 +48/24 48/24 5 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt index cc0683ad7ad8..c353837bfed8 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt @@ -8,31 +8,30 @@ 1 1 2 1 2 1 1 1 7 -0/1 0/1 1/1 1/1 -1/1 1/1 0/1 1/1 -1/1 1/1 0/1 2/1 -1/1 1/1 2/1 1/1 -3/1 0/1 2/1 1/1 -2/1 1/1 3/1 1/1 -3/1 2/1 2/1 1/1 +0 0 1 1 +1 1 0 1 +1 1 0 2 +1 1 2 1 +3 0 2 1 +2 1 3 1 +3 2 2 1 8 -0/1 0/1 -0/1 1/1 -0/1 2/1 -1/1 1/1 -2/1 1/1 -3/1 0/1 -3/1 1/1 -3/1 2/1 +0 0 +0 1 +0 2 +1 1 +2 1 +3 0 +3 1 +3 2 0 -1 +# No. of faces: 1 8 -0/1 0/1 1/1 1/1 -1/1 1/1 0/1 1/1 -1/1 1/1 0/1 2/1 -1/1 1/1 2/1 1/1 -2/1 1/1 1/1 1/1 -3/1 0/1 2/1 1/1 -2/1 1/1 3/1 1/1 -3/1 2/1 2/1 1/1 - +0 0 1 1 +1 1 0 1 +1 1 0 2 +1 1 2 1 +2 1 1 1 +3 0 2 1 +2 1 3 1 +3 2 2 1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt index c6b68c4163b5..cfc1576cd41e 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt @@ -5,37 +5,37 @@ 1 0 4 0 0 0 3 0 6 -0/1 0/1 1/1 0/1 -1/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 5/1 0/1 -5/1 0/1 7/1 0/1 +0 0 1 0 +1 0 2 0 +2 0 3 0 +3 0 4 0 +4 0 5 0 +5 0 7 0 7 -0/1 0/1 -1/1 0/1 -2/1 0/1 -3/1 0/1 -4/1 0/1 -5/1 0/1 -7/1 0/1 +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +7 0 5 -1/1 0/1 -2/1 0/1 -3/1 0/1 -4/1 0/1 -5/1 0/1 -1 +1 0 +2 0 +3 0 +4 0 +5 0 +# No. of faces: 1 12 -0/1 0/1 1/1 0/1 -1/1 0/1 2/1 0/1 -1/1 0/1 2/1 0/1 -2/1 0/1 3/1 0/1 -2/1 0/1 3/1 0/1 -2/1 0/1 3/1 0/1 -3/1 0/1 4/1 0/1 -3/1 0/1 4/1 0/1 -3/1 0/1 4/1 0/1 -4/1 0/1 5/1 0/1 -4/1 0/1 5/1 0/1 -5/1 0/1 7/1 0/1 +0 0 1 0 +1 0 2 0 +1 0 2 0 +2 0 3 0 +2 0 3 0 +2 0 3 0 +3 0 4 0 +3 0 4 0 +3 0 4 0 +4 0 5 0 +4 0 5 0 +5 0 7 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt index 7ac58ab7917a..726cdc2d9d49 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt @@ -3,27 +3,23 @@ 0 2 4 2 0 2 4 2 4 -2/1 2/1 2/1 0/1 -0/1 2/1 2/1 2/1 -2/1 4/1 2/1 2/1 -2/1 2/1 4/1 2/1 +2 2 2 0 +0 2 2 2 +2 4 2 2 +2 2 4 2 5 -0/1 2/1 -2/1 0/1 -32/16 32/16 -2/1 4/1 -4/1 2/1 -1 -32/16 32/16 +0 2 +2 0 +2 2 +2 4 +4 2 1 +2 2 +# No. of faces: 1 6 -2/1 2/1 2/1 0/1 -0/1 2/1 2/1 2/1 -0/1 2/1 2/1 2/1 -2/1 4/1 2/1 2/1 -2/1 2/1 4/1 2/1 -2/1 2/1 4/1 2/1 - - - - +2 2 2 0 +0 2 2 2 +0 2 2 2 +2 4 2 2 +2 2 4 2 +2 2 4 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt index c231c7b4f77a..212a77a0f3cc 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt @@ -13,69 +13,69 @@ 10 0 14 4 10 0 14 4 15 --1/1 2/1 1/1 2/1 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 -4/1 2/1 6/1 2/1 -5/1 0/1 224/32 64/32 -5/1 4/1 224/32 64/32 -224/32 64/32 9/1 0/1 -224/32 64/32 9/1 4/1 -9/1 2/1 11/1 2/1 -10/1 0/1 384/32 64/32 -10/1 4/1 384/32 64/32 -384/32 64/32 14/1 0/1 -384/32 64/32 14/1 4/1 +-1 2 1 2 +0 0 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 4 +4 2 6 2 +5 0 224/32 64/32 +5 4 224/32 64/32 +224/32 64/32 9 0 +224/32 64/32 9 4 +9 2 11 2 +10 0 384/32 64/32 +10 4 384/32 64/32 +384/32 64/32 14 0 +384/32 64/32 14 4 21 --1/1 2/1 -0/1 0/1 -0/1 4/1 -1/1 2/1 +-1 2 +0 0 +0 4 +1 2 64/32 64/32 -4/1 0/1 -4/1 2/1 -4/1 4/1 -5/1 0/1 -5/1 4/1 -6/1 2/1 +4 0 +4 2 +4 4 +5 0 +5 4 +6 2 224/32 64/32 -9/1 0/1 -9/1 2/1 -9/1 4/1 -10/1 0/1 -10/1 4/1 -11/1 2/1 +9 0 +9 2 +9 4 +10 0 +10 4 +11 2 384/32 64/32 -14/1 0/1 -14/1 4/1 +14 0 +14 4 3 64/32 64/32 224/32 64/32 384/32 64/32 -1 +# No. of faces: 1 23 --1/1 2/1 1/1 2/1 -0/1 0/1 64/32 64/32 -0/1 0/1 64/32 64/32 -0/1 4/1 64/32 64/32 -0/1 4/1 64/32 64/32 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 0/1 -64/32 64/32 4/1 4/1 -64/32 64/32 4/1 4/1 -4/1 2/1 6/1 2/1 -5/1 0/1 224/32 64/32 -5/1 4/1 224/32 64/32 -5/1 4/1 224/32 64/32 -224/32 64/32 9/1 0/1 -224/32 64/32 9/1 0/1 -224/32 64/32 9/1 4/1 -9/1 2/1 11/1 2/1 -10/1 0/1 384/32 64/32 -10/1 0/1 384/32 64/32 -10/1 4/1 384/32 64/32 -384/32 64/32 14/1 0/1 -384/32 64/32 14/1 4/1 -384/32 64/32 14/1 4/1 +-1 2 1 2 +0 0 64/32 64/32 +0 0 64/32 64/32 +0 4 64/32 64/32 +0 4 64/32 64/32 +64/32 64/32 4 0 +64/32 64/32 4 0 +64/32 64/32 4 4 +64/32 64/32 4 4 +4 2 6 2 +5 0 224/32 64/32 +5 4 224/32 64/32 +5 4 224/32 64/32 +224/32 64/32 9 0 +224/32 64/32 9 0 +224/32 64/32 9 4 +9 2 11 2 +10 0 384/32 64/32 +10 0 384/32 64/32 +10 4 384/32 64/32 +384/32 64/32 14 0 +384/32 64/32 14 4 +384/32 64/32 14 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt index 0a95db80faca..5e2b5aafab2b 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt @@ -2,20 +2,20 @@ 3 0 3 4 3 2 3 7 3 -3/1 0/1 3/1 2/1 -3/1 2/1 3/1 4/1 -3/1 4/1 3/1 7/1 +3 0 3 2 +3 2 3 4 +3 4 3 7 4 -3/1 0/1 -3/1 2/1 -3/1 4/1 -3/1 7/1 +3 0 +3 2 +3 4 +3 7 2 -3/1 2/1 -3/1 4/1 -1 +3 2 +3 4 +# No. of faces: 1 4 -3/1 0/1 3/1 2/1 -3/1 2/1 3/1 4/1 -3/1 2/1 3/1 4/1 -3/1 4/1 3/1 7/1 +3 0 3 2 +3 2 3 4 +3 2 3 4 +3 4 3 7 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt index 4cc18dcb0214..c48b428b7915 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt @@ -3,31 +3,31 @@ 2 4 2 0 0 3 4 3 6 -2/1 2/1 2/1 0/1 -2/1 2/1 2/1 3/1 -0/1 3/1 2/1 3/1 -2/1 3/1 2/1 4/1 -2/1 7/1 2/1 4/1 -2/1 3/1 4/1 3/1 +2 2 2 0 +2 2 2 3 +0 3 2 3 +2 3 2 4 +2 7 2 4 +2 3 4 3 7 -0/1 3/1 -2/1 0/1 -2/1 2/1 -32/16 48/16 -2/1 4/1 -2/1 7/1 -4/1 3/1 +0 3 +2 0 +2 2 +2 3 +2 4 +2 7 +4 3 3 -2/1 2/1 -32/16 48/16 -2/1 4/1 -1 +2 2 +2 3 +2 4 +# No. of faces: 1 8 -2/1 2/1 2/1 0/1 -2/1 2/1 2/1 3/1 -2/1 2/1 2/1 3/1 -0/1 3/1 2/1 3/1 -2/1 3/1 2/1 4/1 -2/1 3/1 2/1 4/1 -2/1 7/1 2/1 4/1 -2/1 3/1 4/1 3/1 +2 2 2 0 +2 2 2 3 +2 2 2 3 +0 3 2 3 +2 3 2 4 +2 3 2 4 +2 7 2 4 +2 3 4 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt index 50fe97fa3830..2b7af6f80e7e 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt @@ -3,23 +3,23 @@ 2 4 2 0 0 2 4 2 4 -2/1 0/1 2/1 2/1 -0/1 2/1 2/1 2/1 -2/1 2/1 2/1 4/1 -2/1 2/1 4/1 2/1 +2 0 2 2 +0 2 2 2 +2 2 2 4 +2 2 4 2 5 -0/1 2/1 -2/1 0/1 -32/16 32/16 -2/1 4/1 -4/1 2/1 -1 -32/16 32/16 +0 2 +2 0 +2 2 +2 4 +4 2 1 +2 2 +# No. of faces: 1 6 -2/1 0/1 2/1 2/1 -2/1 0/1 2/1 2/1 -0/1 2/1 2/1 2/1 -2/1 2/1 2/1 4/1 -2/1 2/1 2/1 4/1 -2/1 2/1 4/1 2/1 +2 0 2 2 +2 0 2 2 +0 2 2 2 +2 2 2 4 +2 2 2 4 +2 2 4 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt index e33576bb8159..97bfc5d24fdc 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt @@ -3,31 +3,31 @@ 4 4 4 0 0 2 6 2 7 -2/1 2/1 2/1 0/1 -0/1 2/1 2/1 2/1 -2/1 4/1 2/1 2/1 -4/1 2/1 4/1 0/1 -2/1 2/1 4/1 2/1 -4/1 4/1 4/1 2/1 -4/1 2/1 6/1 2/1 +2 2 2 0 +0 2 2 2 +2 4 2 2 +4 2 4 0 +2 2 4 2 +4 4 4 2 +4 2 6 2 8 -0/1 2/1 -2/1 0/1 +0 2 +2 0 48/24 48/24 -2/1 4/1 -4/1 0/1 +2 4 +4 0 96/24 48/24 -4/1 4/1 -6/1 2/1 +4 4 +6 2 2 48/24 48/24 96/24 48/24 -1 +# No. of faces: 1 7 -2/1 2/1 2/1 0/1 -0/1 2/1 2/1 2/1 -2/1 4/1 2/1 2/1 -4/1 2/1 4/1 0/1 -2/1 2/1 4/1 2/1 -4/1 4/1 4/1 2/1 -4/1 2/1 6/1 2/1 +2 2 2 0 +0 2 2 2 +2 4 2 2 +4 2 4 0 +2 2 4 2 +4 4 4 2 +4 2 6 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt index 52ed98b070e4..b3ec36e67447 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt @@ -2,17 +2,16 @@ 0 3 0 0 0 2 0 0 2 -0/1 2/1 0/1 0/1 -0/1 3/1 0/1 2/1 +0 2 0 0 +0 3 0 2 3 -0/1 0/1 -0/1 2/1 -0/1 3/1 -1 -0/1 2/1 +0 0 +0 2 +0 3 1 +0 2 +# No. of faces: 1 3 -0/1 2/1 0/1 0/1 -0/1 2/1 0/1 0/1 -0/1 3/1 0/1 2/1 - +0 2 0 0 +0 2 0 0 +0 3 0 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt index 194577128a5b..a91fe60a7391 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt @@ -6,59 +6,59 @@ 0 3 5 3 0 1 5 1 14 -1/1 1/1 1/1 0/1 -0/1 1/1 1/1 1/1 -1/1 2/1 1/1 1/1 -1/1 2/1 1/1 3/1 -0/1 3/1 1/1 3/1 -1/1 3/1 1/1 5/1 -4/1 0/1 4/1 1/1 -1/1 1/1 4/1 1/1 -4/1 1/1 4/1 2/1 -4/1 2/1 4/1 3/1 -1/1 3/1 4/1 3/1 -4/1 3/1 4/1 4/1 -4/1 1/1 5/1 1/1 -4/1 3/1 5/1 3/1 +1 1 1 0 +0 1 1 1 +1 2 1 1 +1 2 1 3 +0 3 1 3 +1 3 1 5 +4 0 4 1 +1 1 4 1 +4 1 4 2 +4 2 4 3 +1 3 4 3 +4 3 4 4 +4 1 5 1 +4 3 5 3 14 -0/1 1/1 -0/1 3/1 -1/1 0/1 -25/25 25/25 -1/1 2/1 -25/25 75/25 -1/1 5/1 -4/1 0/1 -80/20 20/20 -4/1 2/1 -80/20 60/20 -4/1 4/1 -5/1 1/1 -5/1 3/1 +0 1 +0 3 +1 0 +1 1 +1 2 +1 3 +1 5 +4 0 +4 1 +4 2 +4 3 +4 4 +5 1 +5 3 6 -25/25 25/25 -1/1 2/1 -25/25 75/25 -80/20 20/20 -4/1 2/1 -80/20 60/20 -2 +1 1 +1 2 +1 3 +4 1 +4 2 +4 3 +# No. of faces: 2 18 -1/1 1/1 1/1 0/1 -0/1 1/1 1/1 1/1 -1/1 2/1 1/1 1/1 -1/1 2/1 1/1 3/1 -1/1 2/1 1/1 3/1 -0/1 3/1 1/1 3/1 -1/1 3/1 1/1 5/1 -1/1 3/1 1/1 5/1 -4/1 0/1 4/1 1/1 -1/1 1/1 4/1 1/1 -4/1 1/1 4/1 2/1 -4/1 2/1 4/1 3/1 -4/1 2/1 4/1 3/1 -1/1 3/1 4/1 3/1 -4/1 3/1 4/1 4/1 -4/1 3/1 4/1 4/1 -4/1 1/1 5/1 1/1 -4/1 3/1 5/1 3/1 +1 1 1 0 +0 1 1 1 +1 2 1 1 +1 2 1 3 +1 2 1 3 +0 3 1 3 +1 3 1 5 +1 3 1 5 +4 0 4 1 +1 1 4 1 +4 1 4 2 +4 2 4 3 +4 2 4 3 +1 3 4 3 +4 3 4 4 +4 3 4 4 +4 1 5 1 +4 3 5 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt index dc9b76b12841..9390c7cc6087 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt @@ -4,31 +4,31 @@ 0 3 3 3 0 1 3 1 6 -0/1 1/1 0/1 0/1 -0/1 2/1 0/1 1/1 -0/1 2/1 0/1 3/1 -0/1 3/1 0/1 5/1 -0/1 1/1 3/1 1/1 -0/1 3/1 3/1 3/1 +0 1 0 0 +0 2 0 1 +0 2 0 3 +0 3 0 5 +0 1 3 1 +0 3 3 3 7 -0/1 0/1 -0/1 1/1 -0/1 2/1 -0/1 3/1 -0/1 5/1 -3/1 1/1 -3/1 3/1 +0 0 +0 1 +0 2 +0 3 +0 5 +3 1 +3 3 3 -0/1 1/1 -0/1 2/1 -0/1 3/1 -1 +0 1 +0 2 +0 3 +# No. of faces: 1 8 -0/1 1/1 0/1 0/1 -0/1 2/1 0/1 1/1 -0/1 2/1 0/1 3/1 -0/1 2/1 0/1 3/1 -0/1 3/1 0/1 5/1 -0/1 3/1 0/1 5/1 -0/1 1/1 3/1 1/1 -0/1 3/1 3/1 3/1 +0 1 0 0 +0 2 0 1 +0 2 0 3 +0 2 0 3 +0 3 0 5 +0 3 0 5 +0 1 3 1 +0 3 3 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt index 57300a903c32..3181a33c4986 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt @@ -8,25 +8,23 @@ 0 4 0 0 0 4 0 0 4 -0/1 0/1 0/1 4/1 -0/1 0/1 4/1 0/1 -4/1 0/1 4/1 4/1 -0/1 4/1 4/1 4/1 +0 0 0 4 +0 0 4 0 +4 0 4 4 +0 4 4 4 4 -0/1 0/1 -0/1 4/1 -4/1 0/1 -4/1 4/1 +0 0 +0 4 +4 0 +4 4 0 -2 +# No. of faces: 2 8 -0/1 0/1 0/1 4/1 -0/1 0/1 0/1 4/1 -0/1 0/1 4/1 0/1 -0/1 0/1 4/1 0/1 -4/1 0/1 4/1 4/1 -4/1 0/1 4/1 4/1 -0/1 4/1 4/1 4/1 -0/1 4/1 4/1 4/1 - - +0 0 0 4 +0 0 0 4 +0 0 4 0 +0 0 4 0 +4 0 4 4 +4 0 4 4 +0 4 4 4 +0 4 4 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt index 4c27222b4150..4f7bc3a18d5b 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt @@ -6,45 +6,45 @@ 1 7 6 7 1 7 6 7 10 -0/1 2/1 144/72 288/72 -0/1 6/1 144/72 288/72 -1/1 1/1 150/30 30/30 -144/72 288/72 150/30 30/30 -144/72 288/72 150/30 210/30 -1/1 7/1 150/30 210/30 -150/30 30/30 6/1 0/1 -150/30 30/30 6/1 1/1 -150/30 210/30 6/1 7/1 -150/30 210/30 6/1 8/1 +0 2 2 4 +0 6 2 4 +1 1 5 1 +2 4 5 1 +2 4 5 7 +1 7 5 7 +5 1 6 0 +5 1 6 1 +5 7 6 7 +5 7 6 8 11 -0/1 2/1 -0/1 6/1 -1/1 1/1 -1/1 7/1 -144/72 288/72 -150/30 30/30 -150/30 210/30 -6/1 0/1 -6/1 1/1 -6/1 7/1 -6/1 8/1 +0 2 +0 6 +1 1 +1 7 +2 4 +5 1 +5 7 +6 0 +6 1 +6 7 +6 8 3 -144/72 288/72 -150/30 30/30 -150/30 210/30 -1 +2 4 +5 1 +5 7 +# No. of faces: 1 14 -0/1 2/1 144/72 288/72 -0/1 6/1 144/72 288/72 -1/1 1/1 150/30 30/30 -1/1 1/1 150/30 30/30 -144/72 288/72 150/30 30/30 -144/72 288/72 150/30 210/30 -1/1 7/1 150/30 210/30 -1/1 7/1 150/30 210/30 -150/30 30/30 6/1 0/1 -150/30 30/30 6/1 1/1 -150/30 30/30 6/1 1/1 -150/30 210/30 6/1 7/1 -150/30 210/30 6/1 7/1 -150/30 210/30 6/1 8/1 +0 2 2 4 +0 6 2 4 +1 1 5 1 +1 1 5 1 +2 4 5 1 +2 4 5 7 +1 7 5 7 +1 7 5 7 +5 1 6 0 +5 1 6 1 +5 1 6 1 +5 7 6 7 +5 7 6 7 +5 7 6 8 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt index e4dbeb073c2c..723bf69b8ff2 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt @@ -3,23 +3,23 @@ 0 4 4 0 -1 2 5 2 4 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 4/1 0/1 -48/24 48/24 5/1 2/1 +-1 2 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 4 0 +48/24 48/24 5 2 5 --1/1 2/1 -0/1 4/1 +-1 2 +0 4 48/24 48/24 -4/1 0/1 -5/1 2/1 +4 0 +5 2 1 48/24 48/24 -1 +# No. of faces: 1 6 --1/1 2/1 48/24 48/24 -0/1 4/1 48/24 48/24 -0/1 4/1 48/24 48/24 -48/24 48/24 4/1 0/1 -48/24 48/24 4/1 0/1 -48/24 48/24 5/1 2/1 +-1 2 48/24 48/24 +0 4 48/24 48/24 +0 4 48/24 48/24 +48/24 48/24 4 0 +48/24 48/24 4 0 +48/24 48/24 5 2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt index 67a74747e524..5ef7d44396bd 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt @@ -5,26 +5,24 @@ 0 2 5 1 0 4 5 5 5 -0/1 2/1 5/1 1/1 -0/1 3/1 5/1 1/1 -0/1 3/1 5/1 5/1 -0/1 4/1 5/1 5/1 -0/1 1/1 7/1 0/1 +0 2 5 1 +0 3 5 1 +0 3 5 5 +0 4 5 5 +0 1 7 0 7 -0/1 1/1 -0/1 2/1 -0/1 3/1 -0/1 4/1 -5/1 1/1 -5/1 5/1 -7/1 0/1 +0 1 +0 2 +0 3 +0 4 +5 1 +5 5 +7 0 0 -1 +# No. of faces: 1 5 -0/1 2/1 5/1 1/1 -0/1 3/1 5/1 1/1 -0/1 3/1 5/1 5/1 -0/1 4/1 5/1 5/1 -0/1 1/1 7/1 0/1 - - +0 2 5 1 +0 3 5 1 +0 3 5 5 +0 4 5 5 +0 1 7 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt index 419bf09b9ebd..b7d779ff1b14 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt @@ -4,27 +4,27 @@ 3 2 5 4 3 2 5 0 6 -0/1 0/1 3/1 2/1 -0/1 4/1 3/1 2/1 -3/1 2/1 5/1 0/1 -3/1 2/1 5/1 4/1 -3/1 2/1 6/1 0/1 -3/1 2/1 6/1 4/1 +0 0 3 2 +0 4 3 2 +3 2 5 0 +3 2 5 4 +3 2 6 0 +3 2 6 4 7 -0/1 0/1 -0/1 4/1 -3/1 2/1 -5/1 0/1 -5/1 4/1 -6/1 0/1 -6/1 4/1 -1 -3/1 2/1 +0 0 +0 4 +3 2 +5 0 +5 4 +6 0 +6 4 1 +3 2 +# No. of faces: 1 6 -0/1 0/1 3/1 2/1 -0/1 4/1 3/1 2/1 -3/1 2/1 5/1 0/1 -3/1 2/1 5/1 4/1 -3/1 2/1 6/1 0/1 -3/1 2/1 6/1 4/1 +0 0 3 2 +0 4 3 2 +3 2 5 0 +3 2 5 4 +3 2 6 0 +3 2 6 4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt index 79d9d1bd8be6..53e394fb9dc3 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt @@ -3,24 +3,21 @@ 2 0 4 3 2 0 5 2 4 -0/1 0/1 2/1 0/1 -2/1 0/1 4/1 3/1 -2/1 0/1 5/1 2/1 -2/1 0/1 6/1 0/1 +0 0 2 0 +2 0 4 3 +2 0 5 2 +2 0 6 0 5 -0/1 0/1 -2/1 0/1 -4/1 3/1 -5/1 2/1 -6/1 0/1 -1 -2/1 0/1 +0 0 +2 0 +4 3 +5 2 +6 0 1 +2 0 +# No. of faces: 1 4 -0/1 0/1 2/1 0/1 -2/1 0/1 4/1 3/1 -2/1 0/1 5/1 2/1 -2/1 0/1 6/1 0/1 - - - +0 0 2 0 +2 0 4 3 +2 0 5 2 +2 0 6 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt index bb28d85698ca..85ef8c50bc4f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt @@ -3,23 +3,21 @@ 3 3 6 1 3 3 6 0 4 -0/1 3/1 3/1 3/1 -3/1 3/1 6/1 0/1 -3/1 3/1 6/1 1/1 -3/1 3/1 6/1 3/1 +0 3 3 3 +3 3 6 0 +3 3 6 1 +3 3 6 3 5 -0/1 3/1 -3/1 3/1 -6/1 0/1 -6/1 1/1 -6/1 3/1 -1 -3/1 3/1 +0 3 +3 3 +6 0 +6 1 +6 3 1 +3 3 +# No. of faces: 1 4 -0/1 3/1 3/1 3/1 -3/1 3/1 6/1 0/1 -3/1 3/1 6/1 1/1 -3/1 3/1 6/1 3/1 - - +0 3 3 3 +3 3 6 0 +3 3 6 1 +3 3 6 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt index 2d84b028ae6a..029e8e04e931 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt @@ -3,22 +3,21 @@ 3 3 5 0 3 3 6 6 4 -3/1 3/1 0/1 3/1 -3/1 3/1 5/1 0/1 -3/1 3/1 6/1 6/1 -7/1 3/1 3/1 3/1 +3 3 0 3 +3 3 5 0 +3 3 6 6 +7 3 3 3 5 -0/1 3/1 -3/1 3/1 -5/1 0/1 -6/1 6/1 -7/1 3/1 -1 -3/1 3/1 +0 3 +3 3 +5 0 +6 6 +7 3 1 +3 3 +# No. of faces: 1 4 -3/1 3/1 0/1 3/1 -3/1 3/1 5/1 0/1 -3/1 3/1 6/1 6/1 -7/1 3/1 3/1 3/1 - +3 3 0 3 +3 3 5 0 +3 3 6 6 +7 3 3 3 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt index 911adaeaab2b..036b8c8b6bdf 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt @@ -3,25 +3,24 @@ 1 0 5 8 3 4 6 6 5 -1/1 0/1 3/1 4/1 -0/1 4/1 3/1 4/1 -3/1 4/1 5/1 8/1 -3/1 4/1 6/1 6/1 -3/1 4/1 7/1 4/1 +1 0 3 4 +0 4 3 4 +3 4 5 8 +3 4 6 6 +3 4 7 4 6 -0/1 4/1 -1/1 0/1 -3/1 4/1 -5/1 8/1 -6/1 6/1 -7/1 4/1 -1 -3/1 4/1 +0 4 +1 0 +3 4 +5 8 +6 6 +7 4 1 +3 4 +# No. of faces: 1 5 -1/1 0/1 3/1 4/1 -0/1 4/1 3/1 4/1 -3/1 4/1 5/1 8/1 -3/1 4/1 6/1 6/1 -3/1 4/1 7/1 4/1 - +1 0 3 4 +0 4 3 4 +3 4 5 8 +3 4 6 6 +3 4 7 4 From b781d6a2f83b152eacb1d0aae8b47aaf044fcb7c Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 17:25:06 +0300 Subject: [PATCH 237/943] Fixed default polyline traits --- .../include/CGAL/Surface_sweep_2_algorithms.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Surface_sweep_2/include/CGAL/Surface_sweep_2_algorithms.h b/Surface_sweep_2/include/CGAL/Surface_sweep_2_algorithms.h index f18f1018db3e..18f5554dde7c 100644 --- a/Surface_sweep_2/include/CGAL/Surface_sweep_2_algorithms.h +++ b/Surface_sweep_2/include/CGAL/Surface_sweep_2_algorithms.h @@ -33,6 +33,7 @@ #include #include #include +#include namespace CGAL { @@ -54,11 +55,13 @@ struct Default_arr_traits > typedef CGAL::Arr_segment_traits_2 Traits; }; -template -struct Default_arr_traits > +template +struct Default_arr_traits, + typename Kernel::Point_2>> { - typedef CGAL::Arr_polyline_traits_2 Traits; + using Subtraits = CGAL::Arr_segment_traits_2; + typedef CGAL::Arr_polyline_traits_2 Traits; }; template From f247756bfbc21eaa5126453d85fe45c8a000c434 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 17:26:04 +0300 Subject: [PATCH 238/943] Enhanced test --- .../test/Surface_sweep_2/CMakeLists.txt | 17 +- .../test/Surface_sweep_2/Compare_curves.h | 53 ++- .../test/Surface_sweep_2/cgal_test_base | 26 +- .../test/Surface_sweep_2/cgal_test_with_cmake | 1 - .../test/Surface_sweep_2/test_sweep.cpp | 314 +++++++++--------- 5 files changed, 207 insertions(+), 204 deletions(-) diff --git a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt index 6bc64ec76019..3471c16f7155 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt @@ -7,7 +7,6 @@ project(Surface_sweep_2_Tests) find_package(CGAL REQUIRED COMPONENTS Core) set(CGAL_SEGMENT_TRAITS 1) -set(CGAL_SEGMENT_LEDA_TRAITS 2) set(CGAL_POLYLINE_TRAITS 11) set(CGAL_CONIC_TRAITS 21) @@ -38,16 +37,18 @@ function(compile_and_run_sweep name source_file point_location traits data_set) file( GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "${CMAKE_CURRENT_SOURCE_DIR}/${data_set}/*") + "${CMAKE_CURRENT_SOURCE_DIR}/${data_set}/*.txt") foreach(file ${files}) - # message("test ${source_file} ${file}") + # message("test ${source_file} ${file}") string(MAKE_C_IDENTIFIER "${name} ${file}" test_name) - # message(" --> ${test_name}") + # message(" --> ${test_name}") cgal_add_test(${name} TEST_NAME ${test_name} ARGUMENTS ${file}) endforeach() endfunction() -compile_and_run_sweep(test_sweep test_sweep.cpp ${NAIVE} ${CGAL_SEGMENT_TRAITS} - "DATA/segments_tight") -compile_and_run_sweep(test_sweep_conic test_sweep_conic.cpp ${NAIVE} - ${CGAL_CONIC_TRAITS} "DATA/conics") +# compile_and_run_sweep(test_sweep test_sweep.cpp ${NAIVE} ${CGAL_SEGMENT_TRAITS} +# "DATA/segments_tight") +# compile_and_run_sweep(test_sweep_conic test_sweep_conic.cpp ${NAIVE} +# ${CGAL_CONIC_TRAITS} "DATA/conics") +compile_and_run_sweep(test_sweep_polyline test_sweep.cpp ${NAIVE} + ${CGAL_POLYLINE_TRAITS} "DATA/polylines") diff --git a/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h b/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h index ff43d9b73a4d..311f26746d4c 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h +++ b/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h @@ -1,47 +1,44 @@ -#ifndef _COMPARE_CURVE_LIST_H -#define _COMPARE_CURVE_LIST_H +#ifndef _COMPARE_CURVES_H +#define _COMPARE_CURVES_H #include #include - -template -class Equal_pred -{ +template +class Equal_pred { public: - typedef typename Traits::Point_2 Point_2; - typedef typename Traits::X_monotone_curve_2 X_monotone_curve_2; + using Point_2 = typename Traits::Point_2; + using X_monotone_curve_2 = typename Traits::X_monotone_curve_2; + + Equal_pred(const Traits& traits) : m_traits(traits) {} bool operator()(const Point_2& p1, const Point_2& p2) - { - return(Traits().equal_2_object()(p1, p2)); - } + { return(m_traits.equal_2_object()(p1, p2)); } bool operator()(const X_monotone_curve_2& c1, const X_monotone_curve_2& c2) - { - return(Traits().equal_2_object()(c1, c2)); - } -}; + { return(m_traits.equal_2_object()(c1, c2)); } +private: + const Traits& m_traits; +}; -template - bool compare_lists(const List& list1, const List& list2, Traits& /*tr*/) -{ - typedef typename List::const_iterator Iter; - Iter begin1 = list1.begin(); - Iter end1 = list1.end(); - - Iter begin2 = list2.begin(); - if(! (list1.size() == list2.size())) - { - std::cout << "The lists are not of the same lengths (" +template +bool compare_lists(const List& list1, const List& list2, Traits& traits) { + if(! (list1.size() == list2.size())) { + std::cerr << "Error: The lists are not of the same lengths (" << list1.size() << "," << list2.size() << ")\n"; return false; } - Equal_pred eq; - return std::equal(begin1, end1, begin2, eq); + Equal_pred eq(traits); + auto rc = std::equal(list1.begin(), list1.end(), list2.begin(), eq); + if (! rc) { + std::cerr << "Error: The curves do not match\n"; + return false; + } + + return true; } diff --git a/Surface_sweep_2/test/Surface_sweep_2/cgal_test_base b/Surface_sweep_2/test/Surface_sweep_2/cgal_test_base index c6c8af71e9aa..2612c02c50f1 100755 --- a/Surface_sweep_2/test/Surface_sweep_2/cgal_test_base +++ b/Surface_sweep_2/test/Surface_sweep_2/cgal_test_base @@ -78,12 +78,11 @@ compile() compile_and_run() { - echo "---$1---" # running general test if compile $1 $2 $3 ; then - echo " compilation of $1 succeeded" >> $ERRORFILE + echo " compilation of $1 succeeded" >> $ERRORFILE SUBCURVES="" run $1 $2 $3 $4 SUBCURVES="subcurves" @@ -93,14 +92,13 @@ compile_and_run() fi eval "2>&1 ${MAKE_CMD} CGAL_MAKEFILE=$CGAL_MAKEFILE clean > /dev/null " - } clean_tests() { if [ "${TEST_WITH_CMAKE}" != "FALSE" ]; then # - # The clean target generated by CMake under cygwin + # The clean target generated by CMake under cygwin # always fails for some reason # if ! ( uname | grep -q "CYGWIN" ) ; then @@ -117,7 +115,7 @@ compile_and_run_sweep() # running general test if compile $1 $2 $3 ; then - echo " compilation of $1 succeeded" >> $ERRORFILE + echo " compilation of $1 succeeded" >> $ERRORFILE run $1 $2 $3 $4 else echo " ERROR: compilation of $1 failed" >> $ERRORFILE @@ -134,7 +132,7 @@ run() for DATAFILE in ${datafiles} do if [ -d $DATAFILE ]; then - echo "$DATEFILE is a directory" + echo "$DATEFILE is a directory" continue fi @@ -158,7 +156,6 @@ run() echo " ERROR: could not execute $1 $DATAFILE $SUBCURVES" >> $ERRORFILE fi done - } run_io() @@ -178,20 +175,20 @@ run_io() for DATAFILE in ${datafiles} do - + if [ -d $DATAFILE ]; then - echo "$DATEFILE is a directory" + echo "$DATEFILE is a directory" continue fi - + IOFILE="${iofiles}`basename ${DATAFILE}`_${SUFFIO}" echo $IOFILE - + if [ -f $1 ] ; then rm -f arr.txt - + DATANAME=`basename $DATAFILE` - IONAME=`basename $IOFILE` + IONAME=`basename $IOFILE` OUTPUTFILE=ProgramOutput.$3.$1.$DATANAME.$PLATFORM.$2 rm -f $OUTPUTFILE @@ -246,6 +243,7 @@ TRAP=1 # Trapezoidal decomposition NAIVE=2 WALK=3 - #run the test for new sweep +#run the test for new sweep (compile_and_run_sweep test_sweep $NAIVE $CGAL_SEGMENT_TRAITS "DATA/segments_tight") (compile_and_run_sweep test_sweep_conic $NAIVE $CGAL_CONIC_TRAITS "DATA/conics") +(compile_and_run_sweep test_sweep $NAIVE $CGAL_POLYLINE_TRAITS "DATA/polylines diff --git a/Surface_sweep_2/test/Surface_sweep_2/cgal_test_with_cmake b/Surface_sweep_2/test/Surface_sweep_2/cgal_test_with_cmake index 8c72a52e3326..60483af61d6c 100755 --- a/Surface_sweep_2/test/Surface_sweep_2/cgal_test_with_cmake +++ b/Surface_sweep_2/test/Surface_sweep_2/cgal_test_with_cmake @@ -1,4 +1,3 @@ #! /bin/bash ./cgal_test_base -cmake - diff --git a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp index 23ceebf559d1..7af2076d7a8d 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp +++ b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp @@ -1,6 +1,5 @@ // examples/Pm_with_intersections/example4 // --------------------------------------- -#include #include #include #include @@ -8,10 +7,12 @@ #include #include +#include + #define CGAL_SEGMENT_TRAITS 1 -#define CGAL_SEGMENT_LEDA_TRAITS 2 #define CGAL_POLYLINE_TRAITS 11 #define CGAL_CONIC_TRAITS 21 +#define CGAL_POLYCONIC_TRAITS 22 // Picking a default Traits class (this, with the // PL flag enables the running of the test independently of cgal_make.) @@ -19,13 +20,12 @@ #define CGAL_ARR_TEST_TRAITS CGAL_SEGMENT_TRAITS #endif -// Making sure test doesn't fail if LEDA is not installed -#if ! defined(CGAL_USE_LEDA) && \ - (CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_LEDA_TRAITS || \ - CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS ) +// Making sure test doesn't fail if CORE is not installed +#if ! defined(CGAL_USE_CORE) && \ + ((CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS) || \ + (CGAL_ARR_TEST_TRAITS == CGAL_POLYCONIC_TRAITS)) -int main() -{ +int main() { std::cout << "A try to run test with LEDA traits but LEDA is not installed."; std::cout << std::endl; std::cout << "Test is not performed."; @@ -33,11 +33,12 @@ int main() return 0; } + #elif ! defined(CGAL_USE_GMP) && \ - (CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS) + ((CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS) || \ + (CGAL_ARR_TEST_TRAITS == CGAL_POLYLINE_TRAITS)) -int main() -{ +int main() { std::cout << "A try to run test with GMP number type but GMP is not installed."; std::cout << std::endl; std::cout << "Test is not performed."; @@ -48,117 +49,123 @@ int main() #else - - // Choose traits #if CGAL_ARR_TEST_TRAITS==CGAL_SEGMENT_TRAITS #include -#include -#include +#include #include -#include -#elif CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_LEDA_TRAITS -#include -#include -#include #elif CGAL_ARR_TEST_TRAITS == CGAL_POLYLINE_TRAITS +#include #include -#include -#include #include #include #elif CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS #include -#include #include +#elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCONIC_TRAITS +#include +#include +#include #else #error No traits defined for test #endif #include #include + #include -#include "CompareCurveList.h" -#if CGAL_ARR_TEST_TRAITS==CGAL_SEGMENT_TRAITS +#include "Compare_curves.h" + +#if CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS typedef CGAL::Gmpq NT; typedef CGAL::Cartesian Kernel; typedef CGAL::Arr_segment_traits_2 Traits; -#elif CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_LEDA_TRAITS - typedef leda_rational NT; - typedef CGAL::Pm_segment_traits_leda_kernel_2 Kernel; - typedef CGAL::Arr_leda_segment_traits_2 Traits; - #elif CGAL_ARR_TEST_TRAITS == CGAL_POLYLINE_TRAITS - typedef CGAL::Quotient NT; + typedef CGAL::Gmpq NT; typedef CGAL::Cartesian Kernel; - typedef CGAL::Arr_segment_cached_traits_2 Seg_traits; + typedef CGAL::Arr_segment_traits_2 Seg_traits; typedef CGAL::Arr_polyline_traits_2 Traits; #elif CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS -typedef leda_real NT; -typedef CGAL::Cartesian Kernel; -typedef CGAL::Arr_conic_traits_2 Traits; -#endif - -typedef Traits::Point_2 Point_2; -typedef Traits::X_monotone_curve_2 X_monotone_curve_2; + typedef CGAL::Arr_conic_traits_2 Traits; -typedef std::list PointList; -typedef PointList::iterator PointListIter; +#elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCURVE_TRAITS + typedef CGAL::Arr_conic_traits_2 Conic_traits; + typedef CGAL::Arr_polycurve_traits_2 Traits; -typedef std::list CurveList; -typedef CurveList::iterator CurveListIter; +#endif -void ReadCurveList(std::ifstream &inp, CurveList &clist); -void ReadCurveListRational(std::ifstream &inp, CurveList &clist); -void ReadPointList(std::ifstream &inp, PointList &plist); -bool IsCurveListIdentical(CurveList &list1, CurveList &list2); -bool IsPointListIdentical(PointList &list1, PointList &list2); +typedef Traits::Point_2 Point_2; +typedef Traits::Curve_2 Curve_2; +typedef Traits::X_monotone_curve_2 X_monotone_curve_2; + +typedef std::list Points; +typedef std::list Curves; +typedef std::list X_monotone_curves; + +bool read_curves(std::ifstream& inp, Curves& curves, const Traits& traits); +bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, + const Traits& traits); +bool read_points(std::ifstream& inp, Points& points, const Traits& traits); +bool curves_identical(X_monotone_curves& list1, X_monotone_curves& list2); +bool points_identical(Points& list1, Points& list2); + +// istream modifier skips chars until end of line. +std::istream& skip_until_eol(std::istream& in) { + if (in.eof()) return in; + char c; + while (in.get(c) && (c != '\n')); + return in; +} -int main(int argc, char * argv[]) -{ +// istream modifier that checks for OFF comments and removes them. +std::istream& skip_comment(std::istream& in) { + char c; + while ((in >> c) && (c == '#')) in >> skip_until_eol; + in.putback(c); + return in; +} - if ( argc != 2 ) - { +int main(int argc, char* argv[]) { + if (argc != 2) { std::cout << "Specify a file name " << std::endl; return -1; } std::ifstream inp(argv[1]); - if (!inp.is_open()) { - std::cerr << "Cannot open file " << argv[1] << "!" << std::endl; + if (! inp.is_open()) { + std::cerr << "Error: Cannot open file " << argv[1] << "!" << std::endl; return -1; } - CurveList curves; - ReadCurveList(inp, curves); - Traits tr; + Curves curves; + if (! read_curves(inp, curves, tr)) return -1; + // get subcurves w/o overlapping - CurveList curves_no_overlap_list_out; - CGAL::compute_subcurves(curves.begin(), - curves.end(), - std::back_inserter(curves_no_overlap_list_out)); + X_monotone_curves curves_no_overlap_out; + CGAL::compute_subcurves(curves.begin(), curves.end(), + std::back_inserter(curves_no_overlap_out), + false, tr); // get subcurves w/ overlapping - CurveList curves_with_overlap_list_out; - CGAL::compute_subcurves(curves.begin(), - curves.end(), - std::back_inserter(curves_with_overlap_list_out), - true); - - /*std::copy(curves_no_overlap_list_out.begin(), - curves_no_overlap_list_out.end(), + X_monotone_curves curves_with_overlap_out; + CGAL::compute_subcurves(curves.begin(), curves.end(), + std::back_inserter(curves_with_overlap_out), + true, tr); + + /*std::copy(curves_no_overlap_out.begin(), + curves_no_overlap_out.end(), std::ostream_iterator(std::cout, "\n")); std::cout<<"\n\n*******************\n\n"; - std::copy(curves_with_overlap_list_out.begin(), - curves_with_overlap_list_out.end(), + std::copy(curves_with_overlap_out.begin(), + curves_with_overlap_out.end(), std::ostream_iterator(std::cout, "\n")); return 0;*/ @@ -166,134 +173,135 @@ int main(int argc, char * argv[]) // get intersection points (with endpoints) - PointList points_with_ends_list_out; - CGAL::compute_intersection_points(curves.begin(), - curves.end(), - std::back_inserter(points_with_ends_list_out), - true); + Points points_with_ends_out; + CGAL::compute_intersection_points(curves.begin(), curves.end(), + std::back_inserter(points_with_ends_out), + true, tr); // get intersection points w/o end points - PointList points_without_ends_list_out; - CGAL::compute_intersection_points(curves.begin(), - curves.end(), - std::back_inserter(points_without_ends_list_out), - false); - std::cout << points_without_ends_list_out.size() - << " points_without_ends_list_out(size)\n"; + Points points_without_ends_out; + CGAL::compute_intersection_points(curves.begin(), curves.end(), + std::back_inserter(points_without_ends_out), + false, tr); + + std::cout << points_without_ends_out.size() + << " points_without_ends_out(size)\n"; // check the do_curves_intersecting method bool do_intersect_out = CGAL::do_curves_intersect(curves.begin(), curves.end()); - // read curves and points from file - CurveList curves_no_overlap_list; - ReadCurveListRational(inp, curves_no_overlap_list); - - PointList points_with_ends_list; - ReadPointList(inp, points_with_ends_list); + X_monotone_curves curves_no_overlap; + if (! read_xcurves(inp, curves_no_overlap, tr)) return -1; - PointList points_without_ends_list; - ReadPointList(inp, points_without_ends_list); + Points points_with_ends; + if (! read_points(inp, points_with_ends, tr)) return -1; - int num_faces; - inp >> num_faces; + Points points_without_ends; + if (! read_points(inp, points_without_ends, tr)) return -1; - CurveList curves_with_overlap_list; - ReadCurveListRational(inp, curves_with_overlap_list); + X_monotone_curves curves_with_overlap; + if (! read_xcurves(inp, curves_with_overlap, tr)) return -1; - if ( !compare_lists(curves_no_overlap_list_out, - curves_no_overlap_list, tr) ) + if (! compare_lists(curves_no_overlap_out, curves_no_overlap, tr)) return -1; - if ( !compare_lists(curves_with_overlap_list_out, - curves_with_overlap_list, tr) ) + if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) return -1; - if ( !compare_lists(points_with_ends_list_out, - points_with_ends_list, tr)) + if (! compare_lists(points_with_ends_out, points_with_ends, tr)) return -1; - if ( !compare_lists(points_without_ends_list_out, - points_without_ends_list, tr)) + if (! compare_lists(points_without_ends_out, points_without_ends, tr)) return -1; bool do_intersect = false; - if((points_without_ends_list.size() != 0) || - (curves_no_overlap_list_out.size() != - curves_with_overlap_list_out.size())) + if ((points_without_ends.size() != 0) || + (curves_no_overlap_out.size() != curves_with_overlap_out.size())) do_intersect = true; - if (do_intersect_out != do_intersect) + if (do_intersect_out != do_intersect) { + std::cerr << "Error: do_intersect()\n"; return -1; + } - std::cout<<"OK\n"; + std::cout << "OK\n"; return 0; } -void ReadCurveList(std::ifstream& inp, CurveList& clist) -{ +#if CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS + +bool read_curves(std::ifstream& inp, Curves& curves, const Traits&) { int count; - inp >> count; - //std::cout << "ReadCurveList " << count << "\n"; + inp >> skip_comment >> count; + std::cout << "read_curves " << count << "\n"; - for (int i = 0; i < count; i++) { + for (int i = 0; i < count; ++i) { NT x0, y0, x1, y1; - int ix0, iy0, ix1, iy1; - inp >> ix0 >> iy0 >> ix1 >> iy1; - x0 = ix0; y0 = iy0; x1 = ix1; y1 = iy1; - + inp >> skip_comment >> x0 >> y0 >> x1 >> y1; Point_2 p1(x0, y0); Point_2 p2(x1, y1); - X_monotone_curve_2 curve(p1, p2); - clist.push_back(curve); - //std::cout << curve << "\n"; + Curve_2 curve(p1, p2); + curves.push_back(curve); + std::cout << curve << "\n"; } + return true; } -void ReadCurveListRational(std::ifstream& inp, CurveList& clist) -{ - int count; - inp >> count; - std::cout << "ReadCurveListRational " << count << "\n"; - char ch; - - for (int i = 0; i < count; i++) { - int a, b; - inp >> a >> ch >> b; - NT x0(a,b); - inp >> a >> ch >> b; - NT y0(a,b); - Point_2 p1(x0, y0); +bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, + const Traits& traits) +{ return read_curves(inp, xcurves, traits); } - inp >> a >> ch >> b; - NT x1(a,b); - inp >> a >> ch >> b; - NT y1(a,b); - Point_2 p2(x1, y1); +#elif CGAL_ARR_TEST_TRAITS == CGAL_POLYLINE_TRAITS - X_monotone_curve_2 curve(p1, p2); - clist.push_back(curve); - std::cout << curve << "\n"; +template +bool read_curves_(std::ifstream& inp, Curves_& curves, const Traits& traits, + const Ctr& ctr) { + int count; + inp >> skip_comment >> count; + std::cout << "read_curves " << count << "\n"; + for (int i = 0; i < count; ++i) { + Points points; + auto rc = read_points(inp, points, traits); + if (! rc) return false; + auto cv = ctr(points.begin(), points.end()); + std::cout << cv << "\n"; + curves.push_back(cv); } + return true; +} + +bool read_curves(std::ifstream& inp, Curves& curves, const Traits& traits) { + auto ctr_cv = traits.construct_curve_2_object(); + return read_curves_(inp, curves, traits, ctr_cv); +} + +bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, + const Traits& traits) { + auto ctr_xcv = traits.construct_x_monotone_curve_2_object(); + return read_curves_(inp, xcurves, traits, ctr_xcv); } -void ReadPointList(std::ifstream &inp, PointList &plist) -{ + +#else +#error No traits defined for test +#endif + +bool read_points(std::ifstream& inp, Points& points, const Traits&) { int count; - inp >> count; + inp >> skip_comment >> count; char ch; - std::cout << "ReadPointList " << count << "\n"; + std::cout << "read_points " << count << "\n"; for (int i = 0; i < count; i++) { - int a, b; - inp >> a >> ch >> b; - NT x0(a,b); - inp >> a >> ch >> b; - NT y0(a,b); - Point_2 p(x0, y0); - plist.push_back(p); + NT x, y; + inp >> skip_comment >> x >> y; + Point_2 p(x, y); + points.push_back(p); + std::cout << p << "\n"; } + return true; } #endif From 81fd350a79c4788a34024fa27aad8aa2f10935f5 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 21:52:40 +0300 Subject: [PATCH 239/943] Fixed 1st test --- .../test/Surface_sweep_2/Compare_curves.h | 2 +- .../DATA/polylines/big_overlap.txt | 31 ++++++ .../test/Surface_sweep_2/test_sweep.cpp | 94 +++++++++---------- 3 files changed, 78 insertions(+), 49 deletions(-) create mode 100644 Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h b/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h index 311f26746d4c..2727e737570d 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h +++ b/Surface_sweep_2/test/Surface_sweep_2/Compare_curves.h @@ -34,7 +34,7 @@ bool compare_lists(const List& list1, const List& list2, Traits& traits) { Equal_pred eq(traits); auto rc = std::equal(list1.begin(), list1.end(), list2.begin(), eq); if (! rc) { - std::cerr << "Error: The curves do not match\n"; + std::cerr << "Error: The lists do not match\n"; return false; } diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt new file mode 100644 index 000000000000..60cda75d7fd1 --- /dev/null +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt @@ -0,0 +1,31 @@ +# No. of input polylines followed by polylines +2 +5 0 0 20 0 30 20 40 0 60 0 +6 10 10 25 10 30 20 40 0 50 0 50 -10 +# No. of output polylines followed by polylines +5 +3 0 0 20 0 25 10 +2 10 10 25 10 +2 50 0 50 -10 +4 25 10 30 20 40 0 50 0 +2 50 0 60 0 +# No. of output points followed by points +6 +0 0 +10 10 +25 10 +50 -10 +50 0 +60 0 +# No. of intersection points followed by points +2 +25 10 +50 0 +# No. of output polylines with overlaps followed by polylines +6 +3 0 0 20 0 25 10 +2 10 10 25 10 +2 50 0 50 -10 +4 25 10 30 20 40 0 50 0 +4 25 10 30 20 40 0 50 0 +2 50 0 60 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp index 7af2076d7a8d..d85bf455ccf4 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp +++ b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp @@ -146,76 +146,70 @@ int main(int argc, char* argv[]) { Curves curves; if (! read_curves(inp, curves, tr)) return -1; - // get subcurves w/o overlapping + // Test subcurves w/o overlapping X_monotone_curves curves_no_overlap_out; CGAL::compute_subcurves(curves.begin(), curves.end(), std::back_inserter(curves_no_overlap_out), false, tr); - // get subcurves w/ overlapping - X_monotone_curves curves_with_overlap_out; - CGAL::compute_subcurves(curves.begin(), curves.end(), - std::back_inserter(curves_with_overlap_out), - true, tr); - - /*std::copy(curves_no_overlap_out.begin(), - curves_no_overlap_out.end(), - std::ostream_iterator(std::cout, "\n")); - std::cout<<"\n\n*******************\n\n"; - - std::copy(curves_with_overlap_out.begin(), - curves_with_overlap_out.end(), - std::ostream_iterator(std::cout, "\n")); - return 0;*/ - - //std::cout << mylist1.size() << " curves\n"; + X_monotone_curves curves_no_overlap; + if (! read_xcurves(inp, curves_no_overlap, tr)) return -1; + if (! compare_lists(curves_no_overlap_out, curves_no_overlap, tr)) { + std::cerr << "Curves w/o overlapping do not match!\n"; + for (const auto& xcv : curves_no_overlap_out) std::cerr << xcv << std::endl; + return -1; + } - // get intersection points (with endpoints) + // Test intersection points (with endpoints) Points points_with_ends_out; CGAL::compute_intersection_points(curves.begin(), curves.end(), std::back_inserter(points_with_ends_out), true, tr); + Points points_with_ends; + if (! read_points(inp, points_with_ends, tr)) return -1; + + if (! compare_lists(points_with_ends_out, points_with_ends, tr)) { + std::cerr << "Endpoints do not match!\n"; + for (const auto& p : points_with_ends_out) std::cerr << p << std::endl; + return -1; + } - // get intersection points w/o end points + // Test intersection points w/o end points Points points_without_ends_out; CGAL::compute_intersection_points(curves.begin(), curves.end(), std::back_inserter(points_without_ends_out), false, tr); - std::cout << points_without_ends_out.size() - << " points_without_ends_out(size)\n"; - - // check the do_curves_intersecting method - bool do_intersect_out = - CGAL::do_curves_intersect(curves.begin(), curves.end()); - - // read curves and points from file - X_monotone_curves curves_no_overlap; - if (! read_xcurves(inp, curves_no_overlap, tr)) return -1; - - Points points_with_ends; - if (! read_points(inp, points_with_ends, tr)) return -1; - Points points_without_ends; if (! read_points(inp, points_without_ends, tr)) return -1; - X_monotone_curves curves_with_overlap; - if (! read_xcurves(inp, curves_with_overlap, tr)) return -1; - - if (! compare_lists(curves_no_overlap_out, curves_no_overlap, tr)) + if (! compare_lists(points_without_ends_out, points_without_ends, tr)) { + std::cerr << "Intersection points do not match!\n"; + for (const auto& p : points_without_ends_out) std::cerr << p << std::endl; return -1; + } - if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) - return -1; + // Test subcurves w/ overlapping + X_monotone_curves curves_with_overlap_out; + CGAL::compute_subcurves(curves.begin(), curves.end(), + std::back_inserter(curves_with_overlap_out), + true, tr); - if (! compare_lists(points_with_ends_out, points_with_ends, tr)) - return -1; + X_monotone_curves curves_with_overlap; + if (! read_xcurves(inp, curves_with_overlap, tr)) return -1; - if (! compare_lists(points_without_ends_out, points_without_ends, tr)) + if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) { + std::cerr << "Curves w/ overlapping do not match!\n"; + for (const auto& xcv : curves_with_overlap_out) std::cerr << xcv << std::endl; return -1; + } + + // Test the do_curves_intersecting method + bool do_intersect_out = + CGAL::do_curves_intersect(curves.begin(), curves.end()); bool do_intersect = false; if ((points_without_ends.size() != 0) || @@ -227,7 +221,7 @@ int main(int argc, char* argv[]) { return -1; } - std::cout << "OK\n"; + std::cout << "Passed\n"; return 0; } @@ -261,23 +255,27 @@ bool read_curves_(std::ifstream& inp, Curves_& curves, const Traits& traits, const Ctr& ctr) { int count; inp >> skip_comment >> count; - std::cout << "read_curves " << count << "\n"; + // std::cout << "read_curves " << count << "\n"; for (int i = 0; i < count; ++i) { Points points; auto rc = read_points(inp, points, traits); if (! rc) return false; auto cv = ctr(points.begin(), points.end()); - std::cout << cv << "\n"; + // std::cout << cv << "\n"; curves.push_back(cv); } return true; } +/*! Read curves. + */ bool read_curves(std::ifstream& inp, Curves& curves, const Traits& traits) { auto ctr_cv = traits.construct_curve_2_object(); return read_curves_(inp, curves, traits, ctr_cv); } +/*! Read x-monotone curves. + */ bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, const Traits& traits) { auto ctr_xcv = traits.construct_x_monotone_curve_2_object(); @@ -293,13 +291,13 @@ bool read_points(std::ifstream& inp, Points& points, const Traits&) { inp >> skip_comment >> count; char ch; - std::cout << "read_points " << count << "\n"; + // std::cout << "read_points " << count << "\n"; for (int i = 0; i < count; i++) { NT x, y; inp >> skip_comment >> x >> y; Point_2 p(x, y); + // std::cout << p << "\n"; points.push_back(p); - std::cout << p << "\n"; } return true; } From 28c669dd9c24a09391d077f2adaab85b64811520 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 23:41:37 +0300 Subject: [PATCH 240/943] 1st revision --- .../Surface_sweep_2/DATA/polylines/test00.txt | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt b/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt new file mode 100644 index 000000000000..a024e6ccf8f4 --- /dev/null +++ b/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt @@ -0,0 +1,56 @@ +# No. of input polylines followed by polylines +4 +3 0 1 1 0 4 0 +3 1 1 2 0 8 0 +3 1 2 3 0 6 0 +3 4 1 5 0 7 0 +# No. of output polylines followed by polylines +10 +3 0 1 1 0 2 0 +2 1 1 2 0 +2 2 0 3 0 +2 1 2 3 0 +2 3 0 4 0 +2 4 0 5 0 +2 4 1 5 0 +2 5 0 6 0 +2 6 0 7 0 +2 7 0 8 0 +# No. of output points followed by points +11 +0 1 +1 1 +1 2 +2 0 +3 0 +4 0 +4 1 +5 0 +6 0 +7 0 +8 0 +# No. of intersection points followed by points +4 +2 0 +4 0 +6 0 +7 0 +# No. of output polylines with overlaps followed by polylines +17 +3 0 1 1 0 2 0 +2 1 1 2 0 +2 2 0 3 0 +2 2 0 3 0 +2 1 2 3 0 +2 3 0 4 0 +2 3 0 4 0 +2 3 0 4 0 +2 4 0 5 0 +2 4 0 5 0 +2 4 1 5 0 +2 5 0 6 0 +2 5 0 6 0 +2 5 0 6 0 +2 6 0 7 0 +2 6 0 7 0 +2 7 0 8 0 From ebdada0b29d73308d2f80b40ec76a8901a43af02 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 May 2023 23:52:17 +0300 Subject: [PATCH 241/943] Updated (renamed DATA => data) --- .../test/Surface_sweep_2/CMakeLists.txt | 11 ++--- .../{DATA => data}/conics/con01.txt | 0 .../{DATA => data}/conics/con02.txt | 0 .../{DATA => data}/conics/con03.txt | 0 .../{DATA => data}/conics/con04.txt | 0 .../{DATA => data}/conics/con05.txt | 0 .../{DATA => data}/conics/con06.txt | 0 .../{DATA => data}/conics/con07.txt | 0 .../{DATA => data}/conics/con08.txt | 0 .../{DATA => data}/conics/con09.txt | 0 .../{DATA => data}/conics/con10.txt | 0 .../{DATA => data}/polylines/big_overlap | 0 .../{DATA => data}/polylines/big_overlap.txt | 0 .../{DATA => data}/polylines/big_overlap2 | 0 .../{DATA => data}/polylines/closed_polyline | 0 .../{DATA => data}/polylines/collinears | 0 .../polylines/edge_vertex_intersection | 0 .../polylines/endpoint_intersection | 0 .../{DATA => data}/polylines/partial_overlap | 0 .../{DATA => data}/polylines/partial_overlap2 | 0 .../{DATA => data}/polylines/segment_overlap | 0 .../{DATA => data}/polylines/self_cut | 0 .../polylines/simple_intersection | 0 .../{DATA => data}/polylines/test00.txt | 0 .../{DATA => data}/polylines/total_overlap | 0 .../{DATA => data}/polylines/triangle | 0 .../{DATA => data}/polylines/two_segments | 0 .../polylines/vertex_intersection | 0 .../{DATA => data}/polylines/vertical_segment | 0 .../segment_circles/edge_vertex_intersection | 0 .../segment_circles/segs_and_circles | 0 .../segment_circles/simple_intersection | 0 .../{DATA => data}/segment_circles/triangle | 0 .../segment_circles/two_segments | 0 .../segment_circles/vertex_intersection | 0 .../segment_circles/vertical_segment | 0 .../{DATA => data}/segments/H_degeneracy | 0 .../segments/edge_vertex_intersection | 0 .../segments/simple_intersection | 0 .../{DATA => data}/segments/star_4 | 0 .../{DATA => data}/segments/triangle | 0 .../{DATA => data}/segments/two_segments | 0 .../segments/vertex_intersection | 0 .../{DATA => data}/segments/vertical_segment | 0 .../{DATA => data}/segments_tight/test00.txt | 0 .../{DATA => data}/segments_tight/test01.txt | 0 .../{DATA => data}/segments_tight/test02.txt | 0 .../{DATA => data}/segments_tight/test03.txt | 0 .../{DATA => data}/segments_tight/test04.txt | 0 .../{DATA => data}/segments_tight/test05.txt | 0 .../{DATA => data}/segments_tight/test06.txt | 0 .../{DATA => data}/segments_tight/test07.txt | 0 .../{DATA => data}/segments_tight/test08.txt | 0 .../{DATA => data}/segments_tight/test09.txt | 0 .../{DATA => data}/segments_tight/test10.txt | 0 .../{DATA => data}/segments_tight/test11.txt | 0 .../{DATA => data}/segments_tight/test12.txt | 0 .../{DATA => data}/segments_tight/test13.txt | 0 .../{DATA => data}/segments_tight/test14.txt | 0 .../{DATA => data}/segments_tight/test15.txt | 0 .../{DATA => data}/segments_tight/test16.txt | 0 .../{DATA => data}/segments_tight/test17.txt | 0 .../{DATA => data}/segments_tight/test18.txt | 0 .../{DATA => data}/segments_tight/test19.txt | 0 .../{DATA => data}/segments_tight/test20.txt | 0 .../{DATA => data}/segments_tight/test21.txt | 0 .../{DATA => data}/segments_tight/test22.txt | 0 .../{DATA => data}/segments_tight/test23.txt | 0 .../{DATA => data}/segments_tight/test24.txt | 0 .../{DATA => data}/segments_tight/test25.txt | 0 .../{DATA => data}/segments_tight/test26.txt | 0 .../{DATA => data}/segments_tight/test27.txt | 0 .../{DATA => data}/segments_tight/test28.txt | 0 .../{DATA => data}/segments_tight/test29.txt | 0 .../{DATA => data}/segments_tight/test30.txt | 0 .../{DATA => data}/segments_tight/test31.txt | 0 .../{DATA => data}/segments_tight/test32.txt | 0 .../{DATA => data}/segments_tight/test33.txt | 0 .../{DATA => data}/segments_tight/test34.txt | 0 .../{DATA => data}/segments_tight/test35.txt | 0 .../{DATA => data}/segments_tight/test36.txt | 0 .../{DATA => data}/segments_tight/test37.txt | 0 .../{DATA => data}/segments_tight/test40.txt | 0 .../{DATA => data}/segments_tight/test41.txt | 0 .../{DATA => data}/segments_tight/test42.txt | 0 .../{DATA => data}/segments_tight/test43.txt | 0 .../{DATA => data}/segments_tight/test44.txt | 0 .../{DATA => data}/segments_tight/test45.txt | 0 .../{DATA => data}/segments_tight/test46.txt | 0 .../{DATA => data}/segments_tight/test47.txt | 0 .../{DATA => data}/segments_tight/test48.txt | 0 .../{DATA => data}/segments_tight/test49.txt | 0 .../{DATA => data}/segments_tight/test50.txt | 0 .../{DATA => data}/segments_tight/test51.txt | 0 .../{DATA => data}/segments_tight/test52.txt | 0 .../{DATA => data}/segments_tight/test53.txt | 0 .../{DATA => data}/segments_tight/test54.txt | 0 .../{DATA => data}/segments_tight/test55.txt | 0 .../{DATA => data}/segments_tight/test56.txt | 0 .../{DATA => data}/segments_tight/test60.txt | 0 .../{DATA => data}/segments_tight/test61.txt | 0 .../{DATA => data}/segments_tight/test62.txt | 0 .../{DATA => data}/segments_tight/test63.txt | 0 .../{DATA => data}/segments_tight/test64.txt | 0 .../{DATA => data}/segments_tight/test65.txt | 0 .../{DATA => data}/segments_tight/test66.txt | 0 .../{DATA => data}/segments_tight/test67.txt | 0 .../{DATA => data}/segments_tight/test68.txt | 0 .../{DATA => data}/segments_tight/test69.txt | 0 .../{DATA => data}/segments_tight/test70.txt | 0 .../{DATA => data}/segments_tight/test71.txt | 0 .../{DATA => data}/segments_tight/test72.txt | 0 .../{DATA => data}/segments_tight/test73.txt | 0 .../{DATA => data}/segments_tight/test74.txt | 0 .../{DATA => data}/segments_tight/test75.txt | 0 .../{DATA => data}/segments_tight/test76.txt | 0 .../{DATA => data}/segments_tight/test77.txt | 0 .../{DATA => data}/segments_tight/test78.txt | 0 .../{DATA => data}/segments_tight/test79.txt | 0 .../{DATA => data}/segments_tight/test80.txt | 0 .../{DATA => data}/segments_tight/test81.txt | 0 .../{DATA => data}/segments_tight/test82.txt | 0 .../{DATA => data}/segments_tight/test83.txt | 0 .../{DATA => data}/segments_tight/test84.txt | 0 .../{DATA => data}/segments_tight/test85.txt | 0 .../{DATA => data}/segments_tight/test86.txt | 0 .../{DATA => data}/segments_tight/test87.txt | 0 .../{DATA => data}/segments_tight/test88.txt | 0 .../test/Surface_sweep_2/test_sweep.cpp | 44 ++++++++++++++----- 129 files changed, 38 insertions(+), 17 deletions(-) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con01.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con02.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con03.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con04.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con05.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con06.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con07.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con08.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con09.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/conics/con10.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/big_overlap (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/big_overlap.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/big_overlap2 (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/closed_polyline (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/collinears (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/edge_vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/endpoint_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/partial_overlap (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/partial_overlap2 (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/segment_overlap (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/self_cut (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/simple_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/test00.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/total_overlap (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/triangle (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/two_segments (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/polylines/vertical_segment (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/edge_vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/segs_and_circles (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/simple_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/triangle (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/two_segments (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segment_circles/vertical_segment (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/H_degeneracy (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/edge_vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/simple_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/star_4 (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/triangle (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/two_segments (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/vertex_intersection (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments/vertical_segment (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test00.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test01.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test02.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test03.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test04.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test05.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test06.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test07.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test08.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test09.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test10.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test11.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test12.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test13.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test14.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test15.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test16.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test17.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test18.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test19.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test20.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test21.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test22.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test23.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test24.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test25.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test26.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test27.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test28.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test29.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test30.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test31.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test32.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test33.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test34.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test35.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test36.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test37.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test40.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test41.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test42.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test43.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test44.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test45.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test46.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test47.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test48.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test49.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test50.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test51.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test52.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test53.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test54.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test55.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test56.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test60.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test61.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test62.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test63.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test64.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test65.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test66.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test67.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test68.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test69.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test70.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test71.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test72.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test73.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test74.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test75.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test76.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test77.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test78.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test79.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test80.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test81.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test82.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test83.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test84.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test85.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test86.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test87.txt (100%) rename Surface_sweep_2/test/Surface_sweep_2/{DATA => data}/segments_tight/test88.txt (100%) diff --git a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt index 3471c16f7155..ac96a58ca421 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt @@ -9,6 +9,7 @@ find_package(CGAL REQUIRED COMPONENTS Core) set(CGAL_SEGMENT_TRAITS 1) set(CGAL_POLYLINE_TRAITS 11) set(CGAL_CONIC_TRAITS 21) +set(CGAL_POLYCONIC_TRAITS 22) set(TRAP 1) # Trapezoidal decomposition set(NAIVE 2) @@ -46,9 +47,9 @@ function(compile_and_run_sweep name source_file point_location traits data_set) endforeach() endfunction() -# compile_and_run_sweep(test_sweep test_sweep.cpp ${NAIVE} ${CGAL_SEGMENT_TRAITS} -# "DATA/segments_tight") -# compile_and_run_sweep(test_sweep_conic test_sweep_conic.cpp ${NAIVE} -# ${CGAL_CONIC_TRAITS} "DATA/conics") +compile_and_run_sweep(test_sweep test_sweep.cpp ${NAIVE} + ${CGAL_SEGMENT_TRAITS} "data/segments_tight") +compile_and_run_sweep(test_sweep_conic test_sweep_conic.cpp ${NAIVE} + ${CGAL_CONIC_TRAITS} "data/conics") compile_and_run_sweep(test_sweep_polyline test_sweep.cpp ${NAIVE} - ${CGAL_POLYLINE_TRAITS} "DATA/polylines") + ${CGAL_POLYLINE_TRAITS} "data/polylines") diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con01.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con01.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con02.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con02.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con03.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con03.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con04.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con04.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con05.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con05.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con06.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con06.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con07.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con07.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con08.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con08.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con09.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con09.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con10.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/conics/con10.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap2 b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap2 similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/big_overlap2 rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/closed_polyline b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/closed_polyline similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/closed_polyline rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/closed_polyline diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/collinears b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/collinears similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/collinears rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/collinears diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/edge_vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/edge_vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/edge_vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/edge_vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/endpoint_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/endpoint_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/endpoint_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/endpoint_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/partial_overlap b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/partial_overlap similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/partial_overlap rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/partial_overlap diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/partial_overlap2 b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/partial_overlap2 similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/partial_overlap2 rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/partial_overlap2 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/segment_overlap b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/segment_overlap similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/segment_overlap rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/segment_overlap diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/self_cut b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/self_cut similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/self_cut rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/self_cut diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/simple_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/simple_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/simple_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/simple_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/test00.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/test00.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/test00.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/total_overlap b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/total_overlap similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/total_overlap rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/total_overlap diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/triangle b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/triangle similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/triangle rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/triangle diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/two_segments b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/two_segments similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/two_segments rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/two_segments diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/vertical_segment b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/vertical_segment similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/polylines/vertical_segment rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/vertical_segment diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/edge_vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/edge_vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/edge_vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/edge_vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/segs_and_circles b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/segs_and_circles similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/segs_and_circles rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/segs_and_circles diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/simple_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/simple_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/simple_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/simple_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/triangle b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/triangle similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/triangle rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/triangle diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/two_segments b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/two_segments similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/two_segments rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/two_segments diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/vertical_segment b/Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/vertical_segment similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segment_circles/vertical_segment rename to Surface_sweep_2/test/Surface_sweep_2/data/segment_circles/vertical_segment diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/H_degeneracy b/Surface_sweep_2/test/Surface_sweep_2/data/segments/H_degeneracy similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/H_degeneracy rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/H_degeneracy diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/edge_vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segments/edge_vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/edge_vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/edge_vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/simple_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segments/simple_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/simple_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/simple_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/star_4 b/Surface_sweep_2/test/Surface_sweep_2/data/segments/star_4 similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/star_4 rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/star_4 diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/triangle b/Surface_sweep_2/test/Surface_sweep_2/data/segments/triangle similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/triangle rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/triangle diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/two_segments b/Surface_sweep_2/test/Surface_sweep_2/data/segments/two_segments similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/two_segments rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/two_segments diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/vertex_intersection b/Surface_sweep_2/test/Surface_sweep_2/data/segments/vertex_intersection similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/vertex_intersection rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/vertex_intersection diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments/vertical_segment b/Surface_sweep_2/test/Surface_sweep_2/data/segments/vertical_segment similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments/vertical_segment rename to Surface_sweep_2/test/Surface_sweep_2/data/segments/vertical_segment diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test00.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test00.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test00.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test01.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test01.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test01.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test02.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test02.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test02.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test03.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test03.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test03.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test04.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test04.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test04.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test05.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test05.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test05.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test06.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test06.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test06.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test07.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test07.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test07.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test08.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test08.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test08.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test09.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test09.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test09.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test10.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test10.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test10.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test11.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test11.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test11.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test12.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test12.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test12.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test13.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test13.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test13.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test14.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test14.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test14.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test15.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test15.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test15.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test16.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test16.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test16.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test17.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test17.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test17.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test18.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test18.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test18.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test19.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test19.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test19.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test20.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test20.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test20.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test21.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test21.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test21.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test22.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test22.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test22.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test23.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test23.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test23.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test24.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test24.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test24.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test25.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test25.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test25.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test26.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test26.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test26.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test27.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test27.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test27.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test28.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test28.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test28.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test29.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test29.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test29.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test30.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test30.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test30.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test31.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test31.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test31.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test32.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test32.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test32.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test33.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test33.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test33.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test34.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test34.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test34.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test35.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test35.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test35.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test36.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test36.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test36.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test37.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test37.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test37.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test40.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test40.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test40.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test41.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test41.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test41.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test42.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test42.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test42.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test43.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test43.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test43.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test44.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test44.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test44.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test45.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test45.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test45.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test46.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test46.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test46.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test47.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test47.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test47.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test48.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test48.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test48.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test49.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test49.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test49.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test50.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test50.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test50.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test51.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test51.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test51.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test52.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test52.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test52.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test53.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test53.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test53.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test54.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test54.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test54.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test55.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test55.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test55.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test56.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test56.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test56.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test60.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test60.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test60.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test61.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test61.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test61.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test62.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test62.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test62.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test63.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test63.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test63.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test64.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test64.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test64.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test65.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test65.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test65.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test66.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test66.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test66.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test67.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test67.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test67.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test68.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test68.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test68.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test69.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test69.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test69.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test70.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test70.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test70.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test71.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test71.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test71.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test72.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test72.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test72.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test73.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test73.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test73.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test74.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test74.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test74.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test75.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test75.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test75.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test76.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test76.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test76.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test77.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test77.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test77.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test78.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test78.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test78.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test79.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test79.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test79.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test80.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test80.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test80.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test81.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test81.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test81.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test82.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test82.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test82.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test83.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test83.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test83.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test84.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test84.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test84.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test85.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test85.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test85.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test86.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test86.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test86.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test87.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test87.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test87.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt b/Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test88.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/DATA/segments_tight/test88.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/segments_tight/test88.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp index d85bf455ccf4..97265afa626b 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp +++ b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp @@ -63,9 +63,11 @@ int main() { #elif CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS #include #include +#include #elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCONIC_TRAITS #include #include +#include #include #else #error No traits defined for test @@ -79,22 +81,39 @@ int main() { #include "Compare_curves.h" #if CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS - typedef CGAL::Gmpq NT; - typedef CGAL::Cartesian Kernel; - typedef CGAL::Arr_segment_traits_2 Traits; +typedef CGAL::Gmpq NT; +typedef CGAL::Cartesian Kernel; +typedef CGAL::Arr_segment_traits_2 Traits; #elif CGAL_ARR_TEST_TRAITS == CGAL_POLYLINE_TRAITS - typedef CGAL::Gmpq NT; - typedef CGAL::Cartesian Kernel; - typedef CGAL::Arr_segment_traits_2 Seg_traits; - typedef CGAL::Arr_polyline_traits_2 Traits; +typedef CGAL::Gmpq NT; +typedef CGAL::Cartesian Kernel; +typedef CGAL::Arr_segment_traits_2 Seg_traits; +typedef CGAL::Arr_polyline_traits_2 Traits; #elif CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS - typedef CGAL::Arr_conic_traits_2 Traits; - +typedef CGAL::CORE_algebraic_number_traits Nt_traits; +typedef Nt_traits::Rational Rational; +typedef Nt_traits::Algebraic Algebraic; +typedef CGAL::Cartesian Rat_kernel; +typedef Rat_kernel::Point_2 Rat_point_2; +typedef Rat_kernel::Segment_2 Rat_segment_2; +typedef Rat_kernel::Circle_2 Rat_circle_2; +typedef CGAL::Cartesian Alg_kernel; +typedef CGAL::Arr_conic_traits_2 + Traits_2; #elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCURVE_TRAITS - typedef CGAL::Arr_conic_traits_2 Conic_traits; - typedef CGAL::Arr_polycurve_traits_2 Traits; +typedef CGAL::CORE_algebraic_number_traits Nt_traits; +typedef Nt_traits::Rational Rational; +typedef Nt_traits::Algebraic Algebraic; +typedef CGAL::Cartesian Rat_kernel; +typedef Rat_kernel::Point_2 Rat_point_2; +typedef Rat_kernel::Segment_2 Rat_segment_2; +typedef Rat_kernel::Circle_2 Rat_circle_2; +typedef CGAL::Cartesian Alg_kernel; +typedef CGAL::Arr_conic_traits_2 + Conic_traits; +typedef CGAL::Arr_polycurve_traits_2 Traits; #endif @@ -203,7 +222,8 @@ int main(int argc, char* argv[]) { if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) { std::cerr << "Curves w/ overlapping do not match!\n"; - for (const auto& xcv : curves_with_overlap_out) std::cerr << xcv << std::endl; + for (const auto& xcv : curves_with_overlap_out) + std::cerr << xcv << std::endl; return -1; } From 1c1ed53c76457c841dab781f76f3eacfb299071c Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 30 May 2023 08:03:29 +0100 Subject: [PATCH 242/943] Parallelize deduplicate_segments() --- .../Polygon_mesh_processing/autorefinement.h | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index e862d6839609..ad88f3a6aceb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1178,7 +1178,8 @@ void autorefine_soup_output(const PointRange& input_points, std::vector< std::vector > all_in_triangle_ids(triangles.size()); CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); - + Real_timer t; + t.start(); std::set > intersecting_triangles; //TODO: PARALLEL_FOR #2 for (const Pair_of_triangle_ids& p : si_pairs) @@ -1225,16 +1226,22 @@ void autorefine_soup_output(const PointRange& input_points, intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); } } + std::cout << t.time() << " sec. for #2" << std::endl; #ifdef DEDUPLICATE_SEGMENTS // deduplicate inserted segments //TODO: PARALLEL_FOR #3 + Real_timer t3; + t3.start(); std::vector>> all_segments_ids(all_segments.size()); - for(std::size_t ti=0; ti point_id_map; + + auto get_point_id = [&](const typename EK::Point_3& pt) { auto insert_res = point_id_map.insert(std::make_pair(pt, all_points[ti].size())); @@ -1243,6 +1250,7 @@ void autorefine_soup_output(const PointRange& input_points, return insert_res.first->second; }; + if (!all_points[ti].empty()) { std::vector tmp; @@ -1271,9 +1279,25 @@ void autorefine_soup_output(const PointRange& input_points, if (all_segments_ids[ti].size()!=nbs) filtered_in_triangle_ids.swap(all_in_triangle_ids[ti]); } + }; + +#ifdef CGAL_LINKED_WITH_TBB + tbb::parallel_for(tbb::blocked_range(0, triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + deduplicate_inserted_segments(ti); + } + ); +#else + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + deduplicate_inserted_segments(ti); } #endif + + std::cout << t.time() << " sec. for #3" << std::endl; +#endif + CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles #ifdef CGAL_LINKED_WITH_TBB From 2695834873b41052bb2b8669d74e93de41fb89ea Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 30 May 2023 08:10:06 +0100 Subject: [PATCH 243/943] Rename lambdas --- .../Polygon_mesh_processing/soup_autorefinement.cpp | 2 +- .../CGAL/Polygon_mesh_processing/autorefinement.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index f12306689485..d5ebeb78c3f5 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -36,7 +36,7 @@ int main(int argc, char** argv) std::vector> output_triangles; PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles); std::cout << "#points = " << output_points.size() << " and #triangles = " << output_triangles.size() << " in " << t.time() << " sec." << std::endl; - // CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index ad88f3a6aceb..40a3ed87cbc7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1226,7 +1226,7 @@ void autorefine_soup_output(const PointRange& input_points, intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); } } - std::cout << t.time() << " sec. for #2" << std::endl; + std::cout << t.time() << " sec. for compute_intersections()" << std::endl; #ifdef DEDUPLICATE_SEGMENTS // deduplicate inserted segments @@ -1295,7 +1295,7 @@ void autorefine_soup_output(const PointRange& input_points, #endif - std::cout << t.time() << " sec. for #3" << std::endl; + std::cout << t.time() << " sec. for deduplicate_segments()" << std::endl; #endif CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); @@ -1311,7 +1311,7 @@ void autorefine_soup_output(const PointRange& input_points, #endif - auto func = [&](std::size_t ti) + auto refine_triangles = [&](std::size_t ti) { if (all_segments[ti].empty() && all_points[ti].empty()) new_triangles.push_back(triangles[ti]); @@ -1351,12 +1351,12 @@ void autorefine_soup_output(const PointRange& input_points, tbb::parallel_for(tbb::blocked_range(0, triangles.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) - func(ti); + refine_triangles(ti); } ); #else for (std::size_t ti = 0; ti < triangles.size(); ++ti) { - func(ti); + refine_triangles(ti); } #endif From e34a79864a78c7a19402af066698881d54a22d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 30 May 2023 10:13:28 +0200 Subject: [PATCH 244/943] debug macro --- .../Polygon_mesh_processing/autorefinement.h | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 40a3ed87cbc7..eb24d60804a7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -48,15 +48,20 @@ #define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS +#define USE_DEBUG_PARALLEL_TIMERS //#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH +#ifdef USE_DEBUG_PARALLEL_TIMERS +#include +#endif + #ifdef USE_FIXED_PROJECTION_TRAITS #include #endif -#ifdef DEBUG_COUNTERS +#if defined(DEBUG_COUNTERS) || defined(USE_DEBUG_PARALLEL_TIMERS) #include #endif @@ -1178,8 +1183,10 @@ void autorefine_soup_output(const PointRange& input_points, std::vector< std::vector > all_in_triangle_ids(triangles.size()); CGAL_PMP_AUTOREFINE_VERBOSE("compute intersections"); +#ifdef USE_DEBUG_PARALLEL_TIMERS Real_timer t; t.start(); +#endif std::set > intersecting_triangles; //TODO: PARALLEL_FOR #2 for (const Pair_of_triangle_ids& p : si_pairs) @@ -1226,7 +1233,9 @@ void autorefine_soup_output(const PointRange& input_points, intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); } } - std::cout << t.time() << " sec. for compute_intersections()" << std::endl; +#ifdef USE_DEBUG_PARALLEL_TIMERS + std::cout << t.time() << " sec. for #2" << std::endl; +#endif #ifdef DEDUPLICATE_SEGMENTS // deduplicate inserted segments @@ -1294,8 +1303,9 @@ void autorefine_soup_output(const PointRange& input_points, } #endif - - std::cout << t.time() << " sec. for deduplicate_segments()" << std::endl; +#ifdef USE_DEBUG_PARALLEL_TIMERS + std::cout << t.time() << " sec. for #3" << std::endl; +#endif #endif CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); @@ -1347,6 +1357,11 @@ void autorefine_soup_output(const PointRange& input_points, #endif }; + +#ifdef USE_DEBUG_PARALLEL_TIMERS + t.reset(); + t.start(); +#endif #ifdef CGAL_LINKED_WITH_TBB tbb::parallel_for(tbb::blocked_range(0, triangles.size()), [&](const tbb::blocked_range& r) { @@ -1360,7 +1375,11 @@ void autorefine_soup_output(const PointRange& input_points, } #endif - +#ifdef USE_DEBUG_PARALLEL_TIMERS + t.stop(); + std::cout << t.time() << " sec. for #1" << std::endl; + t.reset(); +#endif // brute force output: create a soup, orient and to-mesh CGAL_PMP_AUTOREFINE_VERBOSE("create output soup"); @@ -1408,10 +1427,19 @@ void autorefine_soup_output(const PointRange& input_points, // import refined triangles //TODO: PARALLEL_FOR #4 +#ifdef USE_DEBUG_PARALLEL_TIMERS + t.reset(); + t.start(); +#endif for (const std::array& t : new_triangles) { soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); } +#ifdef USE_DEBUG_PARALLEL_TIMERS + t.stop(); + std::cout << t.time() << " sec. for #4" << std::endl; + t.reset(); +#endif #ifndef CGAL_NDEBUG CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); From 3d6d9b3edce9890d2b0dae38c2d1231602f98411 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 30 May 2023 11:10:36 +0100 Subject: [PATCH 245/943] parallelize unique points --- .../Polygon_mesh_processing/autorefinement.h | 73 ++++++++++++++++++- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index eb24d60804a7..e5f96d26c3bd 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -41,6 +41,7 @@ #ifdef CGAL_LINKED_WITH_TBB #include +#include #include #endif @@ -1386,11 +1387,18 @@ void autorefine_soup_output(const PointRange& input_points, Cartesian_converter to_input; // TODO: reuse the fact that maps per triangle are already sorted + +#ifdef CGAL_LINKED_WITH_TBB + tbb::concurrent_map point_id_map; +#else std::map point_id_map; +#endif + #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) std::vector exact_soup_points; #endif + /// Lambda get_point_id() auto get_point_id = [&](const typename EK::Point_3& pt) { auto insert_res = point_id_map.insert(std::make_pair(pt, soup_points.size())); @@ -1404,6 +1412,8 @@ void autorefine_soup_output(const PointRange& input_points, return insert_res.first->second; }; + + std::vector input_point_ids; input_point_ids.reserve(input_points.size()); for (const auto& p : input_points) @@ -1431,13 +1441,70 @@ void autorefine_soup_output(const PointRange& input_points, t.reset(); t.start(); #endif - for (const std::array& t : new_triangles) - { + + bool sequential = +#ifdef CGAL_LINKED_WITH_TBB + false; +#else + true; +#endif + + + std::size_t offset = soup_triangles.size(); + std::string mode; + if(sequential || new_triangles.size() < 100){ + mode = "sequential"; + soup_triangles.reserve(offset + new_triangles.size()); + for (const std::array& t : new_triangles) + { soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + } } + else { + mode = "parallel"; +#ifdef CGAL_LINKED_WITH_TBB + + tbb::concurrent_vector concurrent_soup_points; + /// Lambda concurrent_get_point_id() + auto concurrent_get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, concurrent_soup_points.size())); + if (insert_res.second) + { + concurrent_soup_points.push_back(to_input(pt)); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.push_back(pt); +#endif + } + return insert_res.first->second; + }; + + + soup_triangles.resize(offset + new_triangles.size()); + std::cout << "soup_triangles.size() = " << soup_triangles.size() << std::endl; + std::cout << "new_triangles.size() = " << new_triangles.size() << std::endl; + tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) { + if (offset + ti > soup_triangles.size()) { + std::cout << "ti = " << ti << std::endl; + } + const std::array& t = new_triangles[ti]; + soup_triangles[offset + ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); + } + } + ); + + soup_points.reserve(soup_points.size() + concurrent_soup_points.size()); + soup_points.insert(soup_points.end(), concurrent_soup_points.begin(), concurrent_soup_points.end()); + } +#endif + + + #ifdef USE_DEBUG_PARALLEL_TIMERS t.stop(); - std::cout << t.time() << " sec. for #4" << std::endl; + std::cout << t.time() << " sec. for #4 (" << mode << ")" << std::endl; t.reset(); #endif From a1fbd105dacff034f89de7db2b5086c2f24999ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 30 May 2023 15:07:13 +0200 Subject: [PATCH 246/943] add TODO --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index e5f96d26c3bd..16c788c22ecc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -164,7 +164,9 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, } } + // supporting_line intersects: points are coplanar + // TODO: check if we can write a dedicated predicate taking advantage of p,q being shared ::CGAL::Orientation pqr = cpl_orient(p, q, r); ::CGAL::Orientation pqs = cpl_orient(p, q, s); From 4b2f3e6ec7c10e0d7acf8d40608f4e548db7e091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 30 May 2023 16:01:05 +0200 Subject: [PATCH 247/943] take np into account for concurrency --- .../soup_autorefinement.cpp | 4 +- .../Polygon_mesh_processing/autorefinement.h | 211 ++++++++++-------- 2 files changed, 115 insertions(+), 100 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index d5ebeb78c3f5..823c50974dcc 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -34,7 +34,9 @@ int main(int argc, char** argv) t.start(); std::vector output_points; std::vector> output_triangles; - PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles); + PMP::autorefine_soup_output(input_points, input_triangles, + output_points, output_triangles, + CGAL::parameters::concurrency_tag(CGAL::Parallel_if_available_tag())); std::cout << "#points = " << output_points.size() << " and #triangles = " << output_triangles.size() << " in " << t.time() << " sec." << std::endl; CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 16c788c22ecc..ae383a4af293 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -658,10 +658,11 @@ void collect_intersections(const std::array& t1, ////////////////////////////////// ////////////////////////////////// -template void generate_subtriangles(std::size_t ti, std::vector>& segments, @@ -669,11 +670,7 @@ void generate_subtriangles(std::size_t ti, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, const std::vector>& triangles, -#ifdef CGAL_LINKED_WITH_TBB - tbb::concurrent_vector>& new_triangles -#else - std::vector>& new_triangles -#endif + PointVector& new_triangles ) { // std::cout << "generate_subtriangles()\n"; @@ -1131,6 +1128,14 @@ void autorefine_soup_output(const PointRange& input_points, Sequential_tag > ::type Concurrency_tag; + constexpr bool parallel_execution = std::is_same_v; + +#ifndef CGAL_LINKED_WITH_TBB + CGAL_static_assertion_msg (parallel_execution, + "Parallel_tag is enabled but TBB is unavailable."); +#endif + + typedef std::size_t Input_TID; typedef std::pair Pair_of_triangle_ids; @@ -1294,16 +1299,20 @@ void autorefine_soup_output(const PointRange& input_points, }; #ifdef CGAL_LINKED_WITH_TBB - tbb::parallel_for(tbb::blocked_range(0, triangles.size()), - [&](const tbb::blocked_range& r) { - for (size_t ti = r.begin(); ti != r.end(); ++ti) - deduplicate_inserted_segments(ti); - } - ); -#else - for (std::size_t ti = 0; ti < triangles.size(); ++ti) { - deduplicate_inserted_segments(ti); + if (parallel_execution) + { + tbb::parallel_for(tbb::blocked_range(0, triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + deduplicate_inserted_segments(ti); + } + ); } + else +#else + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + deduplicate_inserted_segments(ti); + } #endif #ifdef USE_DEBUG_PARALLEL_TIMERS @@ -1314,7 +1323,9 @@ void autorefine_soup_output(const PointRange& input_points, CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles #ifdef CGAL_LINKED_WITH_TBB - tbb::concurrent_vector> new_triangles; + std::conditional_t>, + std::vector>> new_triangles; #else std::vector> new_triangles; #endif @@ -1325,40 +1336,40 @@ void autorefine_soup_output(const PointRange& input_points, auto refine_triangles = [&](std::size_t ti) + { + if (all_segments[ti].empty() && all_points[ti].empty()) + new_triangles.push_back(triangles[ti]); + else { - if (all_segments[ti].empty() && all_points[ti].empty()) - new_triangles.push_back(triangles[ti]); - else - { #ifdef USE_FIXED_PROJECTION_TRAITS - const std::array& t = triangles[ti]; - auto is_constant_in_dim = [](const std::array& t, int dim) - { - return t[0][dim] == t[1][dim] && t[0][dim] != t[2][dim]; - }; + const std::array& t = triangles[ti]; + auto is_constant_in_dim = [](const std::array& t, int dim) + { + return t[0][dim] == t[1][dim] && t[0][dim] != t[2][dim]; + }; - typename EK::Vector_3 orth = CGAL::normal(t[0], t[1], t[2]); // TODO::avoid construction? - int c = CGAL::abs(orth[0]) > CGAL::abs(orth[1]) ? 0 : 1; - c = CGAL::abs(orth[2]) > CGAL::abs(orth[c]) ? 2 : c; + typename EK::Vector_3 orth = CGAL::normal(t[0], t[1], t[2]); // TODO::avoid construction? + int c = CGAL::abs(orth[0]) > CGAL::abs(orth[1]) ? 0 : 1; + c = CGAL::abs(orth[2]) > CGAL::abs(orth[c]) ? 2 : c; - if (c == 0) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } - else if (c == 1) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } - else if (c == 2) { - autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); - } + if (c == 0) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + else if (c == 1) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } + else if (c == 2) { + autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + } #else - autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); #endif - } + } #ifdef USE_PROGRESS_DISPLAY - ++pd; + ++pd; #endif - }; + }; #ifdef USE_DEBUG_PARALLEL_TIMERS @@ -1366,16 +1377,20 @@ void autorefine_soup_output(const PointRange& input_points, t.start(); #endif #ifdef CGAL_LINKED_WITH_TBB - tbb::parallel_for(tbb::blocked_range(0, triangles.size()), - [&](const tbb::blocked_range& r) { - for (size_t ti = r.begin(); ti != r.end(); ++ti) - refine_triangles(ti); - } - ); -#else - for (std::size_t ti = 0; ti < triangles.size(); ++ti) { - refine_triangles(ti); + if (parallel_execution) + { + tbb::parallel_for(tbb::blocked_range(0, triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + refine_triangles(ti); + } + ); } + else +#else + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + refine_triangles(ti); + } #endif #ifdef USE_DEBUG_PARALLEL_TIMERS @@ -1391,7 +1406,9 @@ void autorefine_soup_output(const PointRange& input_points, // TODO: reuse the fact that maps per triangle are already sorted #ifdef CGAL_LINKED_WITH_TBB - tbb::concurrent_map point_id_map; + std::conditional_t, + std::map> point_id_map; #else std::map point_id_map; #endif @@ -1444,63 +1461,59 @@ void autorefine_soup_output(const PointRange& input_points, t.start(); #endif - bool sequential = -#ifdef CGAL_LINKED_WITH_TBB - false; -#else - true; + std::size_t offset = soup_triangles.size(); +#ifdef USE_DEBUG_PARALLEL_TIMERS + std::string mode = "parallel"; #endif - - std::size_t offset = soup_triangles.size(); - std::string mode; - if(sequential || new_triangles.size() < 100){ - mode = "sequential"; - soup_triangles.reserve(offset + new_triangles.size()); - for (const std::array& t : new_triangles) - { - soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); - } - } - else { - mode = "parallel"; + //TODO: 100 should be fined tune and depends on #threads #ifdef CGAL_LINKED_WITH_TBB - - tbb::concurrent_vector concurrent_soup_points; - /// Lambda concurrent_get_point_id() - auto concurrent_get_point_id = [&](const typename EK::Point_3& pt) - { - auto insert_res = point_id_map.insert(std::make_pair(pt, concurrent_soup_points.size())); - if (insert_res.second) - { - concurrent_soup_points.push_back(to_input(pt)); + if(parallel_execution && new_triangles.size() > 100) + { + tbb::concurrent_vector concurrent_soup_points; + /// Lambda concurrent_get_point_id() + auto concurrent_get_point_id = [&](const typename EK::Point_3& pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, concurrent_soup_points.size())); + if (insert_res.second) + { + concurrent_soup_points.push_back(to_input(pt)); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.push_back(pt); + exact_soup_points.push_back(pt); #endif - } - return insert_res.first->second; - }; + } + return insert_res.first->second; + }; - soup_triangles.resize(offset + new_triangles.size()); - std::cout << "soup_triangles.size() = " << soup_triangles.size() << std::endl; - std::cout << "new_triangles.size() = " << new_triangles.size() << std::endl; - tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), - [&](const tbb::blocked_range& r) { - for (size_t ti = r.begin(); ti != r.end(); ++ti) { - if (offset + ti > soup_triangles.size()) { - std::cout << "ti = " << ti << std::endl; - } - const std::array& t = new_triangles[ti]; - soup_triangles[offset + ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); - } - } - ); + soup_triangles.resize(offset + new_triangles.size()); + std::cout << "soup_triangles.size() = " << soup_triangles.size() << std::endl; + std::cout << "new_triangles.size() = " << new_triangles.size() << std::endl; + tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) { + if (offset + ti > soup_triangles.size()) { + std::cout << "ti = " << ti << std::endl; + } + const std::array& t = new_triangles[ti]; + soup_triangles[offset + ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); + } + } + ); - soup_points.reserve(soup_points.size() + concurrent_soup_points.size()); - soup_points.insert(soup_points.end(), concurrent_soup_points.begin(), concurrent_soup_points.end()); + soup_points.reserve(soup_points.size() + concurrent_soup_points.size()); + soup_points.insert(soup_points.end(), concurrent_soup_points.begin(), concurrent_soup_points.end()); } + else +#endif + { +#ifdef USE_DEBUG_PARALLEL_TIMERS + mode = "sequential"; #endif + soup_triangles.reserve(offset + new_triangles.size()); + for (const std::array& t : new_triangles) + soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + } From 2e99b211b0e22579f76093eec62cfbb1697e17d9 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Tue, 30 May 2023 17:10:58 +0300 Subject: [PATCH 248/943] Ported test_sweep_conic to test_sweep and fixed the conic test cases --- .../test/Surface_sweep_2/CMakeLists.txt | 2 +- .../Surface_sweep_2/data/conics/con01.txt | 1 - .../Surface_sweep_2/data/conics/con02.txt | 2 - .../Surface_sweep_2/data/conics/con03.txt | 5 - .../Surface_sweep_2/data/conics/con04.txt | 4 +- .../Surface_sweep_2/data/conics/con05.txt | 4 - .../Surface_sweep_2/data/conics/con06.txt | 1 - .../Surface_sweep_2/data/conics/con07.txt | 1 - .../Surface_sweep_2/data/conics/con08.txt | 2 - .../Surface_sweep_2/data/conics/con09.txt | 3 +- .../Surface_sweep_2/data/conics/con10.txt | 3 +- .../polylines/{big_overlap.txt => test01.txt} | 0 .../Surface_sweep_2/data/polylines/test02.txt | 51 +++ .../test/Surface_sweep_2/test_sweep.cpp | 430 +++++++++++++----- .../test/Surface_sweep_2/test_sweep_conic.cpp | 279 ------------ 15 files changed, 374 insertions(+), 414 deletions(-) rename Surface_sweep_2/test/Surface_sweep_2/data/polylines/{big_overlap.txt => test01.txt} (100%) create mode 100644 Surface_sweep_2/test/Surface_sweep_2/data/polylines/test02.txt delete mode 100644 Surface_sweep_2/test/Surface_sweep_2/test_sweep_conic.cpp diff --git a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt index ac96a58ca421..9e96fa6dc1c7 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/CMakeLists.txt @@ -49,7 +49,7 @@ endfunction() compile_and_run_sweep(test_sweep test_sweep.cpp ${NAIVE} ${CGAL_SEGMENT_TRAITS} "data/segments_tight") -compile_and_run_sweep(test_sweep_conic test_sweep_conic.cpp ${NAIVE} +compile_and_run_sweep(test_sweep_conic test_sweep.cpp ${NAIVE} ${CGAL_CONIC_TRAITS} "data/conics") compile_and_run_sweep(test_sweep_polyline test_sweep.cpp ${NAIVE} ${CGAL_POLYLINE_TRAITS} "data/polylines") diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt index a3464614b95f..1ff457efdb12 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con01.txt @@ -8,4 +8,3 @@ e 3 3 7 5 4 5 10 5 {1*x^2 + 1*y^2 + 0*xy + -14*x + -10*y + 65} : (4.66667,6.88562) --cw--> (10,5) 5 1 - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt index f3ca4fd2817a..c404b51caa16 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con02.txt @@ -10,5 +10,3 @@ e 3 3 4 9 7 9 1 9 {1*x^2 + 1*y^2 + 0*xy + -8*x + -18*y + 88} : (7,9) --cw--> (5.45237,6.375) 6 2 - - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt index 6ed5fcbab23b..599a66f9b14e 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con03.txt @@ -12,8 +12,3 @@ f 3 3 4 9 {1*x^2 + 1*y^2 + 0*xy + -8*x + -18*y + 88} : (1,9) --cw--> (7,9) 6 2 - - - - - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt index d9a9875cdeb0..eb6a5c187110 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con04.txt @@ -12,6 +12,4 @@ f 1 1 3 2 {1*x^2 + 1*y^2 + 0*xy + -6*x + -4*y + 12} : (4,2) --cw--> (2,2) {1*x^2 + 1*y^2 + 0*xy + -6*x + -4*y + 12} : (2,2) --cw--> (4,2) 6 -0 - - +1 diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt index 224bbc2397af..e68e06cb4881 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con05.txt @@ -12,7 +12,3 @@ f 3 3 4 9 {1*x^2 + 1*y^2 + 0*xy + -8*x + -18*y + 88} : (1,9) --cw--> (7,9) 6 2 - - - - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt index 59ac8c5f663a..f82851db1c19 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con06.txt @@ -14,4 +14,3 @@ f 1 1 1 1 {1*x^2 + 1*y^2 + 0*xy + -4*x + 0*y + 3} : (2,1) --cw--> (3,0) 5 3 - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt index 2b2253b55948..e884bd401544 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con07.txt @@ -10,4 +10,3 @@ f 2 2 2 2 {1*x^2 + 1*y^2 + 0*xy + -4*x + -4*y + 4} : (0,2) --cw--> (4,2) 5 1 - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt index 54aae8118a02..630633469109 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con08.txt @@ -26,5 +26,3 @@ f 3 1 0 0 {4*x^2 + 25*y^2 + 0*xy + -16*x + 0*y + -84} : (2.75552,1.97704) --cw--> (7,0) 10 6 - - diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt index 543d1cff8130..6afc8ee809ca 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con09.txt @@ -121,5 +121,4 @@ f 1 1 -4 0 {1*x^2 + 1*y^2 + 0*xy + -8*x + 0*y + 0} : (8,0) --cw--> (4.5,-3.96863) {1*x^2 + 1*y^2 + 0*xy + -8*x + 0*y + 0} : (4.5,3.96863) --cw--> (8,0) 59 -34 - +41 diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt index 51c9e3ffb2ae..d5f29cc31017 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt +++ b/Surface_sweep_2/test/Surface_sweep_2/data/conics/con10.txt @@ -18,5 +18,4 @@ s 7 -2 3 2 {1*x^2 + 1*y^2 + 0*xy + -14*x + 2*y + 49} : (8,-1) --cw--> (7,-2) {1*x^2 + 1*y^2 + 0*xy + -14*x + 2*y + 49} : (7,0) --cw--> (8,-1) 8 -7 - +5 diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap.txt b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/test01.txt similarity index 100% rename from Surface_sweep_2/test/Surface_sweep_2/data/polylines/big_overlap.txt rename to Surface_sweep_2/test/Surface_sweep_2/data/polylines/test01.txt diff --git a/Surface_sweep_2/test/Surface_sweep_2/data/polylines/test02.txt b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/test02.txt new file mode 100644 index 000000000000..7af88f99c7ad --- /dev/null +++ b/Surface_sweep_2/test/Surface_sweep_2/data/polylines/test02.txt @@ -0,0 +1,51 @@ +# No. of input polylines followed by polylines +4 +2 0 0 7 0 +2 1 0 6 0 +2 2 0 5 0 +2 3 0 4 0 +# No. of output polylines followed by polylines +7 +2 0 0 1 0 +2 1 0 2 0 +2 2 0 3 0 +2 3 0 4 0 +2 4 0 5 0 +2 5 0 6 0 +2 6 0 7 0 +# No. of output points followed by points +8 +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +# No. of intersection points followed by points +6 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +# No. of output polylines with overlaps followed by polylines +16 +2 0 0 1 0 +2 1 0 2 0 +2 1 0 2 0 +2 2 0 3 0 +2 2 0 3 0 +2 2 0 3 0 +2 3 0 4 0 +2 3 0 4 0 +2 3 0 4 0 +2 3 0 4 0 +2 4 0 5 0 +2 4 0 5 0 +2 4 0 5 0 +2 5 0 6 0 +2 5 0 6 0 +2 6 0 7 0 diff --git a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp index 97265afa626b..cc11bbabac3f 100644 --- a/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp +++ b/Surface_sweep_2/test/Surface_sweep_2/test_sweep.cpp @@ -101,8 +101,8 @@ typedef Rat_kernel::Segment_2 Rat_segment_2; typedef Rat_kernel::Circle_2 Rat_circle_2; typedef CGAL::Cartesian Alg_kernel; typedef CGAL::Arr_conic_traits_2 - Traits_2; -#elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCURVE_TRAITS + Traits; +#elif CGAL_ARR_TEST_TRAITS == CGAL_POLYCONIC_TRAITS typedef CGAL::CORE_algebraic_number_traits Nt_traits; typedef Nt_traits::Rational Rational; typedef Nt_traits::Algebraic Algebraic; @@ -125,10 +125,6 @@ typedef std::list Points; typedef std::list Curves; typedef std::list X_monotone_curves; -bool read_curves(std::ifstream& inp, Curves& curves, const Traits& traits); -bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, - const Traits& traits); -bool read_points(std::ifstream& inp, Points& points, const Traits& traits); bool curves_identical(X_monotone_curves& list1, X_monotone_curves& list2); bool points_identical(Points& list1, Points& list2); @@ -148,109 +144,32 @@ std::istream& skip_comment(std::istream& in) { return in; } -int main(int argc, char* argv[]) { - if (argc != 2) { - std::cout << "Specify a file name " << std::endl; - return -1; - } - - std::ifstream inp(argv[1]); - if (! inp.is_open()) { - std::cerr << "Error: Cannot open file " << argv[1] << "!" << std::endl; - return -1; - } - - Traits tr; - - Curves curves; - if (! read_curves(inp, curves, tr)) return -1; - - // Test subcurves w/o overlapping - X_monotone_curves curves_no_overlap_out; - CGAL::compute_subcurves(curves.begin(), curves.end(), - std::back_inserter(curves_no_overlap_out), - false, tr); - - - X_monotone_curves curves_no_overlap; - if (! read_xcurves(inp, curves_no_overlap, tr)) return -1; - - if (! compare_lists(curves_no_overlap_out, curves_no_overlap, tr)) { - std::cerr << "Curves w/o overlapping do not match!\n"; - for (const auto& xcv : curves_no_overlap_out) std::cerr << xcv << std::endl; - return -1; - } - - // Test intersection points (with endpoints) - Points points_with_ends_out; - CGAL::compute_intersection_points(curves.begin(), curves.end(), - std::back_inserter(points_with_ends_out), - true, tr); - - Points points_with_ends; - if (! read_points(inp, points_with_ends, tr)) return -1; - - if (! compare_lists(points_with_ends_out, points_with_ends, tr)) { - std::cerr << "Endpoints do not match!\n"; - for (const auto& p : points_with_ends_out) std::cerr << p << std::endl; - return -1; - } - - // Test intersection points w/o end points - Points points_without_ends_out; - CGAL::compute_intersection_points(curves.begin(), curves.end(), - std::back_inserter(points_without_ends_out), - false, tr); - - Points points_without_ends; - if (! read_points(inp, points_without_ends, tr)) return -1; - - if (! compare_lists(points_without_ends_out, points_without_ends, tr)) { - std::cerr << "Intersection points do not match!\n"; - for (const auto& p : points_without_ends_out) std::cerr << p << std::endl; - return -1; - } - - // Test subcurves w/ overlapping - X_monotone_curves curves_with_overlap_out; - CGAL::compute_subcurves(curves.begin(), curves.end(), - std::back_inserter(curves_with_overlap_out), - true, tr); - - X_monotone_curves curves_with_overlap; - if (! read_xcurves(inp, curves_with_overlap, tr)) return -1; - - if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) { - std::cerr << "Curves w/ overlapping do not match!\n"; - for (const auto& xcv : curves_with_overlap_out) - std::cerr << xcv << std::endl; - return -1; - } - - // Test the do_curves_intersecting method - bool do_intersect_out = - CGAL::do_curves_intersect(curves.begin(), curves.end()); +#if CGAL_ARR_TEST_TRAITS != CGAL_CONIC_TRAITS - bool do_intersect = false; - if ((points_without_ends.size() != 0) || - (curves_no_overlap_out.size() != curves_with_overlap_out.size())) - do_intersect = true; +bool read_points(std::ifstream& inp, Points& points, const Traits&) { + int count; + inp >> skip_comment >> count; + char ch; - if (do_intersect_out != do_intersect) { - std::cerr << "Error: do_intersect()\n"; - return -1; + // std::cout << "read_points " << count << "\n"; + for (int i = 0; i < count; i++) { + NT x, y; + inp >> skip_comment >> x >> y; + Point_2 p(x, y); + // std::cout << p << "\n"; + points.push_back(p); } - - std::cout << "Passed\n"; - return 0; + return true; } +#endif + #if CGAL_ARR_TEST_TRAITS == CGAL_SEGMENT_TRAITS bool read_curves(std::ifstream& inp, Curves& curves, const Traits&) { int count; inp >> skip_comment >> count; - std::cout << "read_curves " << count << "\n"; + // std::cout << "read_curves " << count << "\n"; for (int i = 0; i < count; ++i) { NT x0, y0, x1, y1; @@ -259,7 +178,7 @@ bool read_curves(std::ifstream& inp, Curves& curves, const Traits&) { Point_2 p2(x1, y1); Curve_2 curve(p1, p2); curves.push_back(curve); - std::cout << curve << "\n"; + // std::cout << curve << "\n"; } return true; } @@ -302,24 +221,313 @@ bool read_xcurves(std::ifstream& inp, X_monotone_curves& xcurves, return read_curves_(inp, xcurves, traits, ctr_xcv); } +#elif CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS + +void read_curve(std::ifstream& is, Curve_2& cv) { + // Read a line from the input file. + char one_line[128]; + + is >> skip_comment; + is.getline(one_line, 128); + std::string stringvalues(one_line); + std::istringstream str_line(stringvalues, std::istringstream::in); + + // Get the arc type. + // Supported types are: 'f' - Full ellipse (or circle). + // 'e' - Elliptic arc (or circular arc). + // 's' - Line segment. + char type; + bool is_circle = false; // Is this a circle. + Rat_circle_2 circle; + Rational r, s, t, u, v, w; // The conic coefficients. + + str_line >> type; + + // An ellipse (full ellipse or a partial ellipse): + if (type == 'f' || type == 'F' || type == 'e' || type == 'E') { + // Read the ellipse (using the format "a b x0 y0"): + // + // x - x0 2 y - y0 2 + // ( -------- ) + ( -------- ) = 1 + // a b + // + int a, b, x0, y0; + + str_line >> a >> b >> x0 >> y0; + + Rational a_sq = Rational(a*a); + Rational b_sq = Rational(b*b); + + if (a == b) { + is_circle = true; + circle = + Rat_circle_2(Rat_point_2(Rational(x0), Rational(y0)), Rational(a*b)); + } + else { + r = b_sq; + s = a_sq; + t = 0; + u = Rational(-2*x0*b_sq); + v = Rational(-2*y0*a_sq); + w = Rational(x0*x0*b_sq + y0*y0*a_sq - a_sq*b_sq); + } + + if (type == 'f' || type == 'F') { + // Create a full ellipse (or circle). + if (is_circle) cv = Curve_2 (circle); + else cv = Curve_2(r, s, t, u, v, w); + } + else { + // Read the endpointd of the arc. + int x1, y1, x2, y2; + + str_line >> x1 >> y1 >> x2 >> y2; + + Point_2 source = Point_2(Algebraic(x1), Algebraic(y1)); + Point_2 target = Point_2(Algebraic(x2), Algebraic(y2)); + + // Create the arc. Note that it is always clockwise oriented. + if (is_circle) cv = Curve_2(circle, CGAL::CLOCKWISE, source, target); + else cv = Curve_2(r, s, t, u, v, w, CGAL::CLOCKWISE, source, target); + } + } + else if (type == 's' || type == 'S') { + // Read a segment, given by its endpoints (x1,y1) and (x2,y2); + int x1, y1, x2, y2; + + str_line >> x1 >> y1 >> x2 >> y2; + + // Create the segment. + Rat_point_2 source = Rat_point_2 (Rational(x1), Rational(y1)); + Rat_point_2 target = Rat_point_2 (Rational(x2), Rational(y2)); + + cv = Curve_2(Rat_segment_2 (source, target)); + } + + // std::cout << cv << std::endl; +} + +/*! Read curves. + */ +bool read_curves(std::ifstream& inp, Curves& curves, const Traits&) { + // auto ctr_cv = traits.construct_curve_2_object(); + int count; + inp >> skip_comment >> count; + Curve_2 cv; + char dummy[256]; + inp.getline(dummy, sizeof(dummy)); + for (int i = 0; i < count; ++i) { + read_curve(inp, cv); + curves.push_back(cv); + } + return true; +} + #else #error No traits defined for test #endif -bool read_points(std::ifstream& inp, Points& points, const Traits&) { - int count; - inp >> skip_comment >> count; - char ch; +#if CGAL_ARR_TEST_TRAITS != CGAL_CONIC_TRAITS - // std::cout << "read_points " << count << "\n"; - for (int i = 0; i < count; i++) { - NT x, y; - inp >> skip_comment >> x >> y; - Point_2 p(x, y); - // std::cout << p << "\n"; - points.push_back(p); +// Test subcurves w/o overlapping +bool test_curves_no_overlap(std::ifstream& inp, Curves& curves, + const X_monotone_curves& curves_no_overlap_out, + const Traits& tr) { + X_monotone_curves curves_no_overlap; + if (! read_xcurves(inp, curves_no_overlap, tr)) return false; + + if (! compare_lists(curves_no_overlap_out, curves_no_overlap, tr)) { + std::cerr << "Error: Curves w/o overlapping do not match!\n"; + for (const auto& xcv : curves_no_overlap_out) std::cerr << xcv << std::endl; + return false; } + + return true; +} + +// Test subcurves w/ overlapping +bool test_curves_with_overlap(std::ifstream& inp, Curves& curves, + const X_monotone_curves& curves_with_overlap_out, + const Traits& tr) { + X_monotone_curves curves_with_overlap; + if (! read_xcurves(inp, curves_with_overlap, tr)) return false; + + if (! compare_lists(curves_with_overlap_out, curves_with_overlap, tr)) { + std::cerr << "Error: Curves w/ overlapping do not match!\n"; + for (const auto& xcv : curves_with_overlap_out) + std::cerr << xcv << std::endl; + return false; + } + + return true; +} + +// Test intersection points (with endpoints) +bool test_points_with_ends(std::ifstream& inp, Curves& curves, + const Points& points_with_ends_out, + const Traits& tr) { + Points points_with_ends; + if (! read_points(inp, points_with_ends, tr)) return false; + + if (! compare_lists(points_with_ends_out, points_with_ends, tr)) { + std::cerr << "Error: Endpoints do not match!\n"; + for (const auto& p : points_with_ends_out) std::cerr << p << std::endl; + return false; + } + + return true; +} + +// Test intersection points w/o end points +bool test_points_no_ends(std::ifstream& inp, Curves& curves, + const Points& points_no_ends_out, + const Traits& tr) { + Points points_no_ends; + if (! read_points(inp, points_no_ends, tr)) return -1; + + if (! compare_lists(points_no_ends_out, points_no_ends, tr)) { + std::cerr << "Error: Intersection points do not match!\n"; + for (const auto& p : points_no_ends_out) std::cerr << p << std::endl; + return false; + } + + return true; +} + +#else + +/*! Test the surface sweep with conic traits. + */ +bool test_conic(std::ifstream& inp, Curves& curves, + const X_monotone_curves& curves_no_overlap_out, + const Points& points_with_ends_out, + const Points& points_no_ends_out, + const Traits&) { + char dummy[256]; + + CGAL::Bbox_2 bbox = curves.front().bbox(); + for (auto it = std::next(curves.begin()); it != curves.end(); ++it) + bbox = bbox + it->bbox(); + + // generate the string for the output + std::stringstream out1; + for (const auto& xcv : curves_no_overlap_out) out1 << xcv << "\n"; + + // read the output from the file + std::stringstream out2; + char buf[1024]; + int count = 0; + + inp >> count; + inp.getline(buf, 1024); // to get rid of the new line + for (int i = 0; i < count; ++i) { + inp.getline(buf, 1024); + out2 << buf << "\n"; + } + + // std::cout << "Result: \n" << curves_no_overlap_out.size() << "\n"; + // for (const auto& xcv : curves_no_overlap_out) + // std::cout << xcv << "\n"; + + std::string calculated = out1.str(); + std::string infile = out2.str(); + + if (infile != calculated) { + std::cerr << "Error\n"; + std::cerr << "\ncalculated:\n"; + std::cerr << calculated << std::endl; + std::cerr << "\nin file:\n"; + std::cerr << infile << std::endl; + std::cerr << "--" << std::endl; + return false; + } + + std::size_t points_with_ends_size, points_no_ends_size; + inp >> skip_comment >> points_with_ends_size >> points_no_ends_size; + + auto points_with_ends_out_size = points_with_ends_out.size(); + if (points_with_ends_size != points_with_ends_out_size ) { + std::cerr << "Error: Number of endpoints do not match (" + << points_with_ends_out_size << ", " + << points_with_ends_size << ")\n"; + return false; + } + + auto points_no_ends_out_size = points_no_ends_out.size(); + if (points_no_ends_size != points_no_ends_out_size) { + std::cerr << "Error: Number of intersection points do not match (" + << points_no_ends_out_size << ", " + << points_no_ends_size << ")\n"; + return false; + } + return true; } #endif + +int main(int argc, char* argv[]) { + if (argc != 2) { + std::cout << "Specify a file name " << std::endl; + return -1; + } + + std::ifstream inp(argv[1]); + if (! inp.is_open()) { + std::cerr << "Error: Cannot open file " << argv[1] << "!" << std::endl; + return -1; + } + + Traits tr; + + Curves curves; + if (! read_curves(inp, curves, tr)) return -1; + + X_monotone_curves curves_no_overlap_out; + CGAL::compute_subcurves(curves.begin(), curves.end(), + std::back_inserter(curves_no_overlap_out), + false, tr); + + X_monotone_curves curves_with_overlap_out; + CGAL::compute_subcurves(curves.begin(), curves.end(), + std::back_inserter(curves_with_overlap_out), + true, tr); + + Points points_with_ends_out; + CGAL::compute_intersection_points(curves.begin(), curves.end(), + std::back_inserter(points_with_ends_out), + true, tr); + + Points points_no_ends_out; + CGAL::compute_intersection_points(curves.begin(), curves.end(), + std::back_inserter(points_no_ends_out), + false, tr); + +#if CGAL_ARR_TEST_TRAITS == CGAL_CONIC_TRAITS + if (! test_conic(inp, curves, curves_no_overlap_out, + points_with_ends_out, points_no_ends_out, tr)) + return -1; +#else + if (! test_curves_no_overlap(inp, curves, curves_no_overlap_out, tr)) + return -1; + if (! test_points_with_ends(inp, curves, points_with_ends_out, tr)) return -1; + if (! test_points_no_ends(inp, curves, points_no_ends_out, tr)) return -1; + if (! test_curves_with_overlap(inp, curves, curves_with_overlap_out, tr)) + return -1; +#endif + + // Test the do_curves_intersecting method + bool do_intersect_out = + CGAL::do_curves_intersect(curves.begin(), curves.end()); + bool do_intersect = ! points_no_ends_out.empty() || + (curves_no_overlap_out.size() != curves_with_overlap_out.size()); + if (do_intersect_out != do_intersect) { + std::cerr << "Error: do_intersect()\n"; + return -1; + } + + std::cout << "Passed\n"; + return 0; +} + +#endif diff --git a/Surface_sweep_2/test/Surface_sweep_2/test_sweep_conic.cpp b/Surface_sweep_2/test/Surface_sweep_2/test_sweep_conic.cpp deleted file mode 100644 index 45ae95448515..000000000000 --- a/Surface_sweep_2/test/Surface_sweep_2/test_sweep_conic.cpp +++ /dev/null @@ -1,279 +0,0 @@ -#include - -#if !defined(CGAL_USE_CORE) -#include -int main() -{ - std::cout << "CORE is not installed. Test aborted!" << std::endl; - return 0; -} -#else - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -typedef CGAL::CORE_algebraic_number_traits Nt_traits; -typedef Nt_traits::Rational Rational; -typedef Nt_traits::Algebraic Algebraic; -typedef CGAL::Cartesian Rat_kernel; -typedef Rat_kernel::Point_2 Rat_point_2; -typedef Rat_kernel::Segment_2 Rat_segment_2; -typedef Rat_kernel::Circle_2 Rat_circle_2; -typedef CGAL::Cartesian Alg_kernel; -typedef CGAL::Arr_conic_traits_2 - Traits_2; - -typedef Traits_2::Curve_2 Curve_2; -typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2; -typedef Traits_2::Point_2 Point_2; -typedef std::list CurveList; - -typedef std::list PointList; -typedef PointList::iterator PointListIter; - - -/*! Conic reader */ -template -class Conic_reader { -public: - int ReadData(const char* filename, CurveList& curves, CGAL::Bbox_2& bbox) - { - Curve_2 cv; - char dummy[256]; - - std::ifstream inp(filename); - if (!inp.is_open()) { - std::cerr << "Cannot open file " << filename << "!" << std::endl; - return -1; - } - int count; - inp >> count; - inp.getline(dummy, sizeof(dummy)); - for (int i = 0; i < count; i++) { - ReadCurve(inp, cv); - curves.push_back(cv); - CGAL::Bbox_2 curve_bbox = cv.bbox(); - if (i == 0) bbox = curve_bbox; - else bbox = bbox + curve_bbox; - } - inp.close(); - return 0; - } - - void ReadCurve(std::ifstream & is, Curve_2 & cv) - { - // Read a line from the input file. - char one_line[128]; - - skip_comments (is, one_line); - std::string stringvalues(one_line); - std::istringstream str_line (stringvalues, std::istringstream::in); - - // Get the arc type. - // Supported types are: 'f' - Full ellipse (or circle). - // 'e' - Elliptic arc (or circular arc). - // 's' - Line segment. - char type; - bool is_circle = false; // Is this a circle. - Rat_circle_2 circle; - Rational r, s, t, u, v, w; // The conic coefficients. - - str_line >> type; - - // An ellipse (full ellipse or a partial ellipse): - if (type == 'f' || type == 'F' || type == 'e' || type == 'E') - { - // Read the ellipse (using the format "a b x0 y0"): - // - // x - x0 2 y - y0 2 - // ( -------- ) + ( -------- ) = 1 - // a b - // - int a, b, x0, y0; - - str_line >> a >> b >> x0 >> y0; - - Rational a_sq = Rational(a*a); - Rational b_sq = Rational(b*b); - - if (a == b) - { - is_circle = true; - circle = Rat_circle_2 (Rat_point_2 (Rational(x0), Rational(y0)), - Rational(a*b)); - } - else - { - r = b_sq; - s = a_sq; - t = 0; - u = Rational(-2*x0*b_sq); - v = Rational(-2*y0*a_sq); - w = Rational(x0*x0*b_sq + y0*y0*a_sq - a_sq*b_sq); - } - - if (type == 'f' || type == 'F') - { - // Create a full ellipse (or circle). - if (is_circle) - cv = Curve_2 (circle); - else - cv = Curve_2 (r, s, t, u, v, w); - } - else - { - // Read the endpointd of the arc. - int x1, y1, x2, y2; - - str_line >> x1 >> y1 >> x2 >> y2; - - Point_2 source = Point_2 (Algebraic(x1), Algebraic(y1)); - Point_2 target = Point_2 (Algebraic(x2), Algebraic(y2)); - - // Create the arc. Note that it is always clockwise oriented. - if (is_circle) - cv = Curve_2 (circle, - CGAL::CLOCKWISE, - source, target); - else - cv = Curve_2 (r, s, t, u, v, w, - CGAL::CLOCKWISE, - source, target); - } - } - else if (type == 's' || type == 'S') - { - // Read a segment, given by its endpoints (x1,y1) and (x2,y2); - int x1, y1, x2, y2; - - str_line >> x1 >> y1 >> x2 >> y2; - - // Create the segment. - Rat_point_2 source = Rat_point_2 (Rational(x1), Rational(y1)); - Rat_point_2 target = Rat_point_2 (Rational(x2), Rational(y2)); - - cv = Curve_2(Rat_segment_2 (source, target)); - } - - return; - } - - void skip_comments( std::ifstream& is, char* one_line ) - { - while( !is.eof() ){ - is.getline( one_line, 128 ); - if( one_line[0] != '#' ){ - break; - } - } - } -}; - -//--------------------------------------------------------------------------- -// The main: -// -int main (int argc, char** argv) -{ - bool verbose = false; - - // Define a test objects to read the conic arcs from it. - if (argc<2) - { - std::cerr << "Usage: Conic_traits_test " << std::endl; - exit(1); - } - - CGAL::Bbox_2 bbox; - CurveList curves; - - Conic_reader reader; - reader.ReadData(argv[1], curves, bbox); - - // run the sweep - std::list mylist; - - CGAL::compute_subcurves(curves.begin(), curves.end(), - std::back_inserter(mylist), false); - - - PointList point_list_with_ends; - CGAL::compute_intersection_points(curves.begin(), curves.end(), - std::back_inserter(point_list_with_ends), true); - std::size_t point_count_with_ends_calculated = point_list_with_ends.size(); - - // generate the string for the output - std::stringstream out1; - for ( std::list::iterator iter = mylist.begin() ; - iter != mylist.end() ; ++iter ) - { - out1 << *iter << "\n"; - } - - // read the output from the file - std::stringstream out2; - char buf[1024]; - int count = 0; - - std::ifstream in_file(argv[1]); - in_file >> count; - in_file.getline(buf, 1024); // to get rid of the new line - for ( int i = 0 ; i < count ; i++ ) { - in_file.getline(buf, 1024); - } - in_file >> count; - in_file.getline(buf, 1024); // to get rid of the new line - for (int i = 0; i < count; i++) { - in_file.getline(buf, 1024); - out2 << buf << "\n"; - } - std::size_t point_count_with_ends_from_file = 0; - in_file >> point_count_with_ends_from_file; - in_file.close(); - - if ( verbose ) - { - std::cout << "Result: \n" << mylist.size() << "\n"; - for ( std::list::iterator i = mylist.begin() ; - i != mylist.end() ; ++i ) - { - std::cout << *i << "\n"; - } - } - - std::string calculated = out1.str(); - std::string infile = out2.str(); - - if ( infile == calculated ) { - if ( point_count_with_ends_from_file != - point_count_with_ends_calculated ) { - std::cout << "number of intersection points (with ends):" - << point_count_with_ends_calculated << ". Should be " - << point_count_with_ends_from_file << "\n"; - std::cout << argv[1] << " Error\n"; - return -1; - } else { - std::cout << argv[1] << " OK!\n"; - } - } else { - std::cout << argv[1] << " Error\n"; - std::cout << "\ncalculated:\n"; - std::cout << calculated << std::endl; - std::cout << "\nin file:\n"; - std::cout << infile << std::endl; - std::cout << "--" << std::endl; - return -1; - } - - return 0; -} - -#endif From 3d6c0da44cdf28be1ebfc4e7818ba78987c7209c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 31 May 2023 09:14:42 +0200 Subject: [PATCH 249/943] remove debug --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index ae383a4af293..18bbfa2ce40f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1323,9 +1323,9 @@ void autorefine_soup_output(const PointRange& input_points, CGAL_PMP_AUTOREFINE_VERBOSE("triangulate faces"); // now refine triangles #ifdef CGAL_LINKED_WITH_TBB - std::conditional_t>, - std::vector>> new_triangles; + std::conditional_t>, + std::vector>> new_triangles; #else std::vector> new_triangles; #endif @@ -1487,8 +1487,6 @@ void autorefine_soup_output(const PointRange& input_points, soup_triangles.resize(offset + new_triangles.size()); - std::cout << "soup_triangles.size() = " << soup_triangles.size() << std::endl; - std::cout << "new_triangles.size() = " << new_triangles.size() << std::endl; tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { From 854aacd671b9936730e97f8bf003bf2969e016fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 6 Jun 2023 15:31:19 +0200 Subject: [PATCH 250/943] add comments --- .../Triangle_3_Triangle_3_intersection.h | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 4cc5f9be5600..99dcd24ff457 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -59,6 +59,19 @@ coplanar_segment_segment_alpha_intersection(const typename K::Point_3& p1, const template struct Point_on_triangle { + // triangle points are not stored in this class but are expected + // to always be passed in the same order. For a triangle pqr, + // edge 0 is pq, edge 1 qr and edge 2 rp. Point 0 is p, 1 is q and 2 is r. + // + // (id, -1) point on t1 + // (-1, id) point on t2 + // (id1, id2) intersection of edges + std::pair t1_t2_ids; + boost::container::flat_set extra_t1; // store other ids of edges containing the point + typename Kernel::FT alpha; // + +////// + static inline const typename Kernel::Point_3& @@ -83,13 +96,7 @@ struct Point_on_triangle , alpha(alpha) {} - // (id, -1) point on t1 - // (-1, id) point on t2 - // (id1, id2) intersection of edges - std::pair t1_t2_ids; - boost::container::flat_set extra_t1; - typename Kernel::FT alpha; - + // orientation of the current point wrt to edge id1 (p1q1) Orientation orientation (const typename Kernel::Point_3& p1, // source of edge edge_id1 const typename Kernel::Point_3& q1, // target of edge edge_id1 @@ -116,7 +123,7 @@ struct Point_on_triangle CGAL_assertion((t1_t2_ids.first+1)%3==edge_id1); if (alpha==1) return ZERO; return alpha<=1?POSITIVE:NEGATIVE; - } + } else { //this is an input point of t2 @@ -129,6 +136,7 @@ struct Point_on_triangle int id1() const { return t1_t2_ids.first; } int id2() const { return t1_t2_ids.second; } + // construct the intersection point from the info stored typename Kernel::Point_3 point(const typename Kernel::Point_3& p1, const typename Kernel::Point_3& q1, @@ -147,6 +155,12 @@ struct Point_on_triangle } }; +// the intersection of two triangles is computed by interatively intersection t2 +// with halfspaces defined by edges of t1. The following function is called +// for each each on t1 on edge of the current intersection. +// pq is such an edge and p1q1 from t1 defines the halfspace intersection +// we are currently interseted in. We return the intersection point of +// pq with p1q1 template Point_on_triangle intersection(const Point_on_triangle& p, @@ -172,7 +186,7 @@ intersection(const Point_on_triangle& p, { switch(q.id1()) { - case -1: // (-1, ip2) - (-1, iq2) + case -1: // A: (-1, ip2) - (-1, iq2) { CGAL_assertion((p.id2()+1)%3 == q.id2() || (q.id2()+1)%3 == p.id2()); // CGAL_assertion(p.extra_t1.empty() && q.extra_t1.empty()); // TMP to see if it's worth implementing special case @@ -187,7 +201,7 @@ intersection(const Point_on_triangle& p, return Point_on_triangle(edge_id_t1, id2, alpha); // intersection with an original edge of t2 } default: - if (q.id2()!=-1) // (-1, ip2) - (iq1, iq2) + if (q.id2()!=-1) // B: (-1, ip2) - (iq1, iq2) { if (p.id2() == q.id2() || p.id2() == (q.id2()+1)%3) { @@ -210,7 +224,7 @@ intersection(const Point_on_triangle& p, int eid1 = p.extra_t1.count(q.id1())!=0 ? q.id1() : 3-q.id1()-edge_id_t1; return Point_on_triangle((eid1+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3, -1); // vertex of t1 } - // (-1, ip2) - (iq1, -1) + // C: (-1, ip2) - (iq1, -1) //vertex of t1, special case t1 edge passed thru a vertex of t2 CGAL_assertion(edge_id_t1 == 2); #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION @@ -229,7 +243,7 @@ intersection(const Point_on_triangle& p, { switch(q.id1()) { - case -1: // (ip1, -1) - (-1, iq2) + case -1: // G: (ip1, -1) - (-1, iq2) //vertex of t1, special case t1 edge passed thru a vertex of t2 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " -- case 5\n"; @@ -243,8 +257,8 @@ intersection(const Point_on_triangle& p, #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " -- case 6\n"; #endif - CGAL_assertion(q.id2()!=-1); // (ip1, -1) - (iq2, -1) - //(ip1,-1), (iq1, iq2) + CGAL_assertion(q.id2()!=-1); // I: (ip1, -1) - (iq2, -1) + //H: (ip1,-1), (iq1, iq2) CGAL_assertion(edge_id_t1==2); // p and q are on the same edge of t1 CGAL_assertion(p.id1()==q.id1() || p.id1()==(q.id1()+1)%3); @@ -256,7 +270,7 @@ intersection(const Point_on_triangle& p, { switch(q.id1()) { - case -1: // (ip1, ip2) - (-1, iq2) + case -1: // D: (ip1, ip2) - (-1, iq2) { if (q.id2() == p.id2() || q.id2() == (p.id2()+1)%3) { @@ -284,7 +298,7 @@ intersection(const Point_on_triangle& p, { switch(q.id2()) { - case -1: // (ip1, ip2) - (iq1, -1) + case -1: // F: (ip1, ip2) - (iq1, -1) { // p and q are on the same edge of t1 CGAL_assertion(q.id1()==p.id1() || q.id1()==(p.id1()+1)%3); @@ -293,7 +307,7 @@ intersection(const Point_on_triangle& p, #endif return Point_on_triangle((p.id1()+1)%3==edge_id_t1?edge_id_t1:(edge_id_t1+1)%3 , -1); } - default: // (ip1, ip2) - (iq1, iq2) + default: // E: (ip1, ip2) - (iq1, iq2) { if (p.id2()==q.id2()) { From 0551cefa5d315c4071dec5c1118bceaaa6bdfcdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 7 Jun 2023 15:02:10 +0200 Subject: [PATCH 251/943] add more test from errors while testing thingi10k models --- .../triangle_3_triangle_3_intersection.cpp | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/Intersections_3/test/Intersections_3/triangle_3_triangle_3_intersection.cpp b/Intersections_3/test/Intersections_3/triangle_3_triangle_3_intersection.cpp index 0098bcd01422..f0875a55ee8b 100644 --- a/Intersections_3/test/Intersections_3/triangle_3_triangle_3_intersection.cpp +++ b/Intersections_3/test/Intersections_3/triangle_3_triangle_3_intersection.cpp @@ -96,6 +96,13 @@ void test_coplanar_triangles(){ assert(CGAL::object_cast(&obj)!=nullptr); obj=CGAL::intersection(t2,t1); assert(CGAL::object_cast(&obj)!=nullptr); + // TK10 case C' + t1=Triangle(Point(88.7921, 89.0007, 1.25), Point(88.1912, 88.3997, 1.25), Point(89.8224, 90.031, 1.25)); + t2=Triangle(Point(88.0497, 88.2583, 1.25), Point(82.9292, 81.8747, 1.25), Point(91.1726, 91.3812, 1.25)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); //Intersection is a point //edges are collinear, one vertex in common t1=Triangle( Point(0,0,0),Point(0,1,0),Point(1,0,0) ); @@ -153,6 +160,13 @@ void test_coplanar_triangles(){ assert(CGAL::object_cast(&obj)!=nullptr); obj=CGAL::intersection(t2,t1); assert(CGAL::object_cast(&obj)!=nullptr); + // TK10 case D + t1=Triangle(Point(-34.893700000000003, -16.0351, 3.1334899999999998e-12), Point(-34.893700000000003, -18.5351, 3.1334899999999998e-12), Point(-42.393700000000003, -16.0351, 3.1334899999999998e-12)); + t2=Triangle(Point(-34.893700000000003, -32.0351, 3.1334899999999998e-12), Point(-34.893700000000003, -9.7851400000000002, 3.1334899999999998e-12), Point(-31.643699999999999, -17.201799999999999, 3.1334899999999998e-12)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); //Intersection is a polygon //David's star t1=Triangle( Point(0,0,0),Point(1,0,0),Point(0.5,1.5,0) ); @@ -181,6 +195,51 @@ void test_coplanar_triangles(){ obj=CGAL::intersection(t2,t1); assert(CGAL::object_cast(&obj)!=nullptr); assert(CGAL::object_cast(&obj)->size()==4); + // TK10 case A + t1=Triangle(Point(3.74861, 12.4822, 14.0112), Point(5.40582, 12.4822, 15.6895), Point(5.37748, 12.4822, 15.7206)); + t2=Triangle(Point(5.49972, 12.4822, 13.491), Point(5.27627, 12.4822, 15.8106), Point(5.32119, 12.4822, 15.8126)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + // TK10 case C + t1=Triangle(Point(5, -94.6659, 3.85175), Point(5, -94.5682, 3.08638), Point(5, -94.8182, 3.08638)); + t2=Triangle(Point(5, -94.4317, 3.76399), Point(5, -97.6182, 3.08638), Point(5, -94.5659, 2.99682)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + // TK10 case E + t1=Triangle(Point(-955.858, -45.032, -0.016), Point(-955.856, -45.032, -0.004), Point(-955.856, -45.032, -0.002)); + t2=Triangle(Point(-955.856, -45.032, 0.006), Point(-955.854, -45.032, -0.002), Point(-955.876, -45.032, -0.034)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + // TK10 case F + t1=Triangle(Point(141.172, 20.576, 155.764), Point(141.172, 20.588, 155.766), Point(141.172, 20.59, 155.766)); + t2=Triangle(Point(141.172, 20.602, 155.768), Point(141.172, 20.594, 155.766), Point(141.172, 20.574, 155.764)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + // TK10 case D + t1=Triangle(Point(152.864, 126.324, 0.950001), Point(152.77, 126.483, 0.950001), Point(153.072, 125.973, 0.950001)); + t2=Triangle(Point(153.322, 125.551, 0.950001), Point(152.218, 127.415, 0.950001), Point(153.66, 124.768, 0.950001)); + obj=CGAL::intersection(t1,t2); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); + obj=CGAL::intersection(t2,t1); + assert(CGAL::object_cast(&obj)!=nullptr); + assert(CGAL::object_cast(&obj)->size()==4); //Intersection is empty t1=Triangle( Point(0,0,0),Point(0,1,0),Point(1,0,0) ); t2=Triangle( Point(-0.1,-0.1,0),Point(-0.1,-0.9,0),Point(-1,-0.1,0) ); From 48712f7862f02ce63558de039c603e0d018ae31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 8 Jun 2023 14:04:55 +0200 Subject: [PATCH 252/943] don't use c++17 features --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 18bbfa2ce40f..6b664ec360bc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1128,7 +1128,7 @@ void autorefine_soup_output(const PointRange& input_points, Sequential_tag > ::type Concurrency_tag; - constexpr bool parallel_execution = std::is_same_v; + constexpr bool parallel_execution = std::is_same::value; #ifndef CGAL_LINKED_WITH_TBB CGAL_static_assertion_msg (parallel_execution, From 003bf47781ef69354d9cd388f2fce00168c2e762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 8 Jun 2023 14:05:09 +0200 Subject: [PATCH 253/943] move alpha computation into a functor --- .../Triangle_3_Triangle_3_intersection.h | 52 +++++-------------- .../include/CGAL/Kernel/function_objects.h | 31 +++++++++++ .../include/CGAL/Kernel/interface_macros.h | 2 + .../Polygon_mesh_processing/autorefinement.h | 6 +-- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h index 99dcd24ff457..68166f18c6e2 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Triangle_3_Triangle_3_intersection.h @@ -34,28 +34,6 @@ namespace CGAL { namespace Intersections { namespace internal{ -//TODO: move into a functor -template -typename K::FT -coplanar_segment_segment_alpha_intersection(const typename K::Point_3& p1, const typename K::Point_3& p2, // segment 1 - const typename K::Point_3& p3, const typename K::Point_3& p4, // segment 2 - const K& k) -{ - const typename K::Vector_3 v1 = p2-p1; - const typename K::Vector_3 v2 = p4-p3; - - CGAL_assertion(k.coplanar_3_object()(p1,p2,p3,p4)); - - const typename K::Vector_3 v3 = p3 - p1; - const typename K::Vector_3 v3v2 = cross_product(v3,v2); - const typename K::Vector_3 v1v2 = cross_product(v1,v2); - const typename K::FT sl = v1v2.squared_length(); - CGAL_assertion(!certainly(is_zero(sl))); - - const typename K::FT t = ((v3v2.x()*v1v2.x()) + (v3v2.y()*v1v2.y()) + (v3v2.z()*v1v2.z())) / sl; - return t; // p1 + (p2-p1) * t -} - template struct Point_on_triangle { @@ -179,6 +157,8 @@ intersection(const Point_on_triangle& p, std::cout << " (" << p.id1() << "," << p.id2() << ",[" << p.alpha << "]) -"; std::cout << " (" << q.id1() << "," << q.id2() << ",[" << q.alpha << "]) || e" << edge_id_t1; #endif + typename Kernel::Compute_alpha_for_coplanar_triangle_intersection_3 compute_alpha + = k.compute_alpha_for_coplanar_triangle_intersection_3_object(); typedef Point_on_triangle Pot; switch(p.id1()) { @@ -193,10 +173,9 @@ intersection(const Point_on_triangle& p, #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " -- case 1\n"; #endif - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, p.id2()), - Pot::point_from_id(p2, q2, r2, q.id2()), k); + typename Kernel::FT alpha = compute_alpha(p1, q1, + Pot::point_from_id(p2, q2, r2, p.id2()), + Pot::point_from_id(p2, q2, r2, q.id2())); int id2 = (p.id2()+1)%3 == q.id2() ? p.id2() : q.id2(); return Point_on_triangle(edge_id_t1, id2, alpha); // intersection with an original edge of t2 } @@ -209,10 +188,9 @@ intersection(const Point_on_triangle& p, std::cout << " -- case 2\n"; #endif // points are on the same edge of t2 --> we shorten an already cut edge - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, q.id2()), - Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); + typename Kernel::FT alpha = compute_alpha(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3)); return Point_on_triangle(edge_id_t1, q.id2(), alpha); } @@ -278,10 +256,9 @@ intersection(const Point_on_triangle& p, std::cout << " -- case 7\n"; #endif // points are on the same edge of t2 --> we shorten an already cut edge - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, p.id2()), - Pot::point_from_id(p2, q2, r2, (p.id2()+1)%3), k); + typename Kernel::FT alpha = compute_alpha(p1, q1, + Pot::point_from_id(p2, q2, r2, p.id2()), + Pot::point_from_id(p2, q2, r2, (p.id2()+1)%3)); return Point_on_triangle(edge_id_t1, p.id2(), alpha); } @@ -314,10 +291,9 @@ intersection(const Point_on_triangle& p, #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " -- case 10\n"; #endif - typename Kernel::FT alpha = - coplanar_segment_segment_alpha_intersection(p1, q1, - Pot::point_from_id(p2, q2, r2, q.id2()), - Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3), k); + typename Kernel::FT alpha = compute_alpha(p1, q1, + Pot::point_from_id(p2, q2, r2, q.id2()), + Pot::point_from_id(p2, q2, r2, (q.id2()+1)%3)); return Point_on_triangle(edge_id_t1, q.id2(), alpha); } // we are intersecting an edge of t1 diff --git a/Kernel_23/include/CGAL/Kernel/function_objects.h b/Kernel_23/include/CGAL/Kernel/function_objects.h index 71aa268e6d35..780c0b2d4e50 100644 --- a/Kernel_23/include/CGAL/Kernel/function_objects.h +++ b/Kernel_23/include/CGAL/Kernel/function_objects.h @@ -2149,6 +2149,37 @@ namespace CommonKernelFunctors { } }; + template + class Compute_alpha_for_coplanar_triangle_intersection_3 + { + typedef typename K::Point_3 Point_3; + typedef typename K::Vector_3 Vector_3; + public: + typedef typename K::FT result_type; + result_type + operator()(const Point_3& p1, const Point_3& p2, // segment 1 + const Point_3& p3, const Point_3& p4) const // segment 2 + { + typename K::Construct_vector_3 vector = K().construct_vector_3_object(); + typename K::Construct_cross_product_vector_3 cross_product = + K().construct_cross_product_vector_3_object(); + + const Vector_3 v1 = vector(p1, p2); + const Vector_3 v2 = vector(p3, p4); + + CGAL_assertion(K().coplanar_3_object()(p1,p2,p3,p4)); + + const Vector_3 v3 = vector(p1, p3); + const Vector_3 v3v2 = cross_product(v3,v2); + const Vector_3 v1v2 = cross_product(v1,v2); + const typename K::FT sl = K().compute_squared_length_3_object()(v1v2); + CGAL_assertion(!certainly(is_zero(sl))); + + const typename K::FT t = ((v3v2.x()*v1v2.x()) + (v3v2.y()*v1v2.y()) + (v3v2.z()*v1v2.z())) / sl; + return t; // p1 + (p2-p1) * t + } + }; + template class Construct_point_on_2 { diff --git a/Kernel_23/include/CGAL/Kernel/interface_macros.h b/Kernel_23/include/CGAL/Kernel/interface_macros.h index 9c85643a977e..e5a2ebf81210 100644 --- a/Kernel_23/include/CGAL/Kernel/interface_macros.h +++ b/Kernel_23/include/CGAL/Kernel/interface_macros.h @@ -396,6 +396,8 @@ CGAL_Kernel_cons(Construct_plane_3, construct_plane_3_object) CGAL_Kernel_cons(Construct_plane_line_intersection_point_3, construct_plane_line_intersection_point_3_object) +CGAL_Kernel_cons(Compute_alpha_for_coplanar_triangle_intersection_3, + compute_alpha_for_coplanar_triangle_intersection_3_object) CGAL_Kernel_cons(Construct_point_on_2, construct_point_on_2_object) CGAL_Kernel_cons(Construct_point_on_3, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 6b664ec360bc..6c8ba3f8cd27 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -386,7 +386,7 @@ void coplanar_intersections(const std::array& t1, //intersect t2 with the three half planes which intersection defines t1 K k; - intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,l_inter_pts); //line p1q1 + Intersections::internal::intersection_coplanar_triangles_cutoff(p1,q1,r1,0,p2,q2,r2,k,l_inter_pts); //line p1q1 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); @@ -401,7 +401,7 @@ void coplanar_intersections(const std::array& t1, } } #endif - intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,l_inter_pts); //line q1r1 + Intersections::internal::intersection_coplanar_triangles_cutoff(q1,r1,p1,1,p2,q2,r2,k,l_inter_pts); //line q1r1 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); @@ -416,7 +416,7 @@ void coplanar_intersections(const std::array& t1, } } #endif - intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,l_inter_pts); //line r1p1 + Intersections::internal::intersection_coplanar_triangles_cutoff(r1,p1,q1,2,p2,q2,r2,k,l_inter_pts); //line r1p1 #ifdef CGAL_DEBUG_COPLANAR_T3_T3_INTERSECTION std::cout << " ipts size: " << l_inter_pts.size() << "\n"; print_points(); From 0684bd203fa818c1dbf6cb4b3fae839e08da94a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 8 Jun 2023 14:17:18 +0200 Subject: [PATCH 254/943] hide debug --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 6c8ba3f8cd27..90174e42753d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -49,7 +49,7 @@ #define TEST_RESOLVE_INTERSECTION #define DEDUPLICATE_SEGMENTS -#define USE_DEBUG_PARALLEL_TIMERS +//#define USE_DEBUG_PARALLEL_TIMERS //#define DEBUG_COUNTERS //#define USE_FIXED_PROJECTION_TRAITS //#define DEBUG_DEPTH @@ -1248,8 +1248,6 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef DEDUPLICATE_SEGMENTS // deduplicate inserted segments //TODO: PARALLEL_FOR #3 - Real_timer t3; - t3.start(); std::vector>> all_segments_ids(all_segments.size()); auto deduplicate_inserted_segments = [&](std::size_t ti) From c5fab1c874248e87abe1f769616f624f8bd0efdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 8 Jun 2023 14:21:59 +0200 Subject: [PATCH 255/943] fix sequential run --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 90174e42753d..11b15fa4ec47 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1307,11 +1307,10 @@ void autorefine_soup_output(const PointRange& input_points, ); } else -#else - for (std::size_t ti = 0; ti < triangles.size(); ++ti) { - deduplicate_inserted_segments(ti); - } #endif + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + deduplicate_inserted_segments(ti); + } #ifdef USE_DEBUG_PARALLEL_TIMERS std::cout << t.time() << " sec. for #3" << std::endl; @@ -1385,11 +1384,10 @@ void autorefine_soup_output(const PointRange& input_points, ); } else -#else - for (std::size_t ti = 0; ti < triangles.size(); ++ti) { - refine_triangles(ti); - } #endif + for (std::size_t ti = 0; ti < triangles.size(); ++ti) { + refine_triangles(ti); + } #ifdef USE_DEBUG_PARALLEL_TIMERS t.stop(); From 45c7b0015f8f54e8f2fb517b6f5bc54181979467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 12 Jun 2023 10:55:56 +0200 Subject: [PATCH 256/943] add stop --- .../examples/Polygon_mesh_processing/soup_autorefinement.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index 823c50974dcc..9e4999287f7b 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -37,6 +37,7 @@ int main(int argc, char** argv) PMP::autorefine_soup_output(input_points, input_triangles, output_points, output_triangles, CGAL::parameters::concurrency_tag(CGAL::Parallel_if_available_tag())); + t.stop(); std::cout << "#points = " << output_points.size() << " and #triangles = " << output_triangles.size() << " in " << t.time() << " sec." << std::endl; CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); From 41449d71cd3c3d7b8be578f0e3f56a3a14fc5842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 12 Jun 2023 11:05:11 +0200 Subject: [PATCH 257/943] fix bug when setting the ids of points 2 options, one with mutex and one without. As this section is not critical, we do not really see a runtime difference (without mutex seems faster so I pick that one as default) --- .../Polygon_mesh_processing/autorefinement.h | 127 ++++++++++++++---- 1 file changed, 102 insertions(+), 25 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 11b15fa4ec47..9bbc67efb487 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -43,6 +43,9 @@ #include #include #include +#ifdef SET_POINT_IDS_USING_MUTEX +#include +#endif #endif #include @@ -1242,12 +1245,17 @@ void autorefine_soup_output(const PointRange& input_points, } } #ifdef USE_DEBUG_PARALLEL_TIMERS + t.stop(); std::cout << t.time() << " sec. for #2" << std::endl; + t.reset(); #endif #ifdef DEDUPLICATE_SEGMENTS +#ifdef USE_DEBUG_PARALLEL_TIMERS + t.start(); +#endif + // deduplicate inserted segments - //TODO: PARALLEL_FOR #3 std::vector>> all_segments_ids(all_segments.size()); auto deduplicate_inserted_segments = [&](std::size_t ti) @@ -1313,7 +1321,9 @@ void autorefine_soup_output(const PointRange& input_points, } #ifdef USE_DEBUG_PARALLEL_TIMERS + t.stop(); std::cout << t.time() << " sec. for #3" << std::endl; + t.reset(); #endif #endif @@ -1370,7 +1380,6 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef USE_DEBUG_PARALLEL_TIMERS - t.reset(); t.start(); #endif #ifdef CGAL_LINKED_WITH_TBB @@ -1427,8 +1436,7 @@ void autorefine_soup_output(const PointRange& input_points, return insert_res.first->second; }; - - + // TODO: parallel_for? std::vector input_point_ids; input_point_ids.reserve(input_points.size()); for (const auto& p : input_points) @@ -1451,9 +1459,7 @@ void autorefine_soup_output(const PointRange& input_points, } // import refined triangles - //TODO: PARALLEL_FOR #4 #ifdef USE_DEBUG_PARALLEL_TIMERS - t.reset(); t.start(); #endif @@ -1466,37 +1472,108 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef CGAL_LINKED_WITH_TBB if(parallel_execution && new_triangles.size() > 100) { - tbb::concurrent_vector concurrent_soup_points; + +#ifdef SET_POINT_IDS_USING_MUTEX + //option 1 (using a mutex) + CGAL_MUTEX point_container_mutex; /// Lambda concurrent_get_point_id() - auto concurrent_get_point_id = [&](const typename EK::Point_3& pt) + auto concurrent_get_point_id = [&](const typename EK::Point_3 pt) { - auto insert_res = point_id_map.insert(std::make_pair(pt, concurrent_soup_points.size())); - if (insert_res.second) - { - concurrent_soup_points.push_back(to_input(pt)); + auto insert_res = point_id_map.insert(std::make_pair(pt, -1)); + + if (insert_res.second) + { + CGAL_SCOPED_LOCK(point_container_mutex); + insert_res.first->second=soup_points.size(); + soup_points.push_back(to_input(pt)); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.push_back(pt); + exact_soup_points.push_back(pt); #endif - } - return insert_res.first->second; + } + return insert_res.first; }; + soup_triangles.resize(offset + new_triangles.size()); + //use map iterator triple for triangles to create them concurrently and safely + std::vector::iterator, 3>> triangle_buffer(new_triangles.size()); + tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) { + const std::array& t = new_triangles[ti]; + triangle_buffer[ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); + } + } + ); + tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + { + soup_triangles[offset + ti] = + CGAL::make_array(triangle_buffer[ti][0]->second, + triangle_buffer[ti][1]->second, + triangle_buffer[ti][2]->second); + } + } + ); +#else + //option 2 (without mutex) + /// Lambda concurrent_get_point_id() + tbb::concurrent_vector::iterator> iterators; + auto concurrent_get_point_id = [&](const typename EK::Point_3 pt) + { + auto insert_res = point_id_map.insert(std::make_pair(pt, -1)); + if (insert_res.second) + iterators.push_back(insert_res.first); + return insert_res.first; + }; + //use map iterator triple for triangles to create them concurrently and safely soup_triangles.resize(offset + new_triangles.size()); + std::vector::iterator, 3>> triangle_buffer(new_triangles.size()); tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), - [&](const tbb::blocked_range& r) { - for (size_t ti = r.begin(); ti != r.end(); ++ti) { - if (offset + ti > soup_triangles.size()) { - std::cout << "ti = " << ti << std::endl; - } - const std::array& t = new_triangles[ti]; - soup_triangles[offset + ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); - } + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) { + if (offset + ti > soup_triangles.size()) { + std::cout << "ti = " << ti << std::endl; + } + const std::array& t = new_triangles[ti]; + triangle_buffer[ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); + } + } + ); + + // the map is now filled we can safely set the point ids + std::size_t pid_offset=soup_points.size(); + soup_points.resize(pid_offset+iterators.size()); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.resize(soup_points.size()); +#endif + + tbb::parallel_for(tbb::blocked_range(0, iterators.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + { + soup_points[pid_offset+ti] = to_input(iterators[ti]->first); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points[pid_offset+ti] = iterators[ti]->first; +#endif + iterators[ti]->second=pid_offset+ti; } + } ); - soup_points.reserve(soup_points.size() + concurrent_soup_points.size()); - soup_points.insert(soup_points.end(), concurrent_soup_points.begin(), concurrent_soup_points.end()); + tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), + [&](const tbb::blocked_range& r) { + for (size_t ti = r.begin(); ti != r.end(); ++ti) + { + soup_triangles[offset + ti] = + CGAL::make_array(triangle_buffer[ti][0]->second, + triangle_buffer[ti][1]->second, + triangle_buffer[ti][2]->second); + } + } + ); +#endif } else #endif From aa0d50b84c40d7962ad5c8e7aade3189aefadb0d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 26 Jun 2023 15:08:05 +0100 Subject: [PATCH 258/943] Fix Arrangement_on_surface_2 examples --- .../examples/Arrangement_on_surface_2/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/CMakeLists.txt b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/CMakeLists.txt index bd3e707c4b45..a7d1965c8cd4 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/CMakeLists.txt +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Arrangement_on_surface_2_Examples) -find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt5) +find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6) # create a target per cppfile file( @@ -15,7 +15,7 @@ foreach(cppfile ${cppfiles}) create_single_source_cgal_program("${cppfile}") endforeach() -if(CGAL_Qt5_FOUND) +if(CGAL_Qt6_FOUND) target_link_libraries(draw_arr PUBLIC CGAL::CGAL_Basic_viewer) target_link_libraries(linear_conics PUBLIC CGAL::CGAL_Basic_viewer) target_link_libraries(parabolas PUBLIC CGAL::CGAL_Basic_viewer) From 1066af14f4c04f827a27d288792eb03597f2ff15 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 26 Jun 2023 15:09:10 +0100 Subject: [PATCH 259/943] Add #include --- Polyhedron/demo/Polyhedron/MainWindow.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index ea43c7a482f6..b58fa02912fc 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -9,6 +9,7 @@ #include #include #include +#include #include From a015b1de233e2bbf5fba397833c60f041dd67c76 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 26 Jun 2023 15:37:44 +0100 Subject: [PATCH 260/943] Fix Straight_skeleton_extrusion test --- .../test/Straight_skeleton_extrusion_2/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Straight_skeleton_extrusion_2/test/Straight_skeleton_extrusion_2/CMakeLists.txt b/Straight_skeleton_extrusion_2/test/Straight_skeleton_extrusion_2/CMakeLists.txt index f29dcb4e9296..8dd920fdf64f 100644 --- a/Straight_skeleton_extrusion_2/test/Straight_skeleton_extrusion_2/CMakeLists.txt +++ b/Straight_skeleton_extrusion_2/test/Straight_skeleton_extrusion_2/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Straight_skeleton_extrusion_2_Tests) -find_package(CGAL REQUIRED COMPONENTS Qt5 Core) +find_package(CGAL REQUIRED COMPONENTS Qt6 Core) include_directories(BEFORE "include") @@ -17,6 +17,6 @@ foreach(cppfile ${cppfiles}) create_single_source_cgal_program("${cppfile}") endforeach() -if(CGAL_Qt5_FOUND) +if(CGAL_Qt6_FOUND) target_link_libraries(test_sls_extrude PUBLIC CGAL::CGAL_Basic_viewer) endif() From 63bf2a85b92f559e09c08ceacc9742fc3612ee9d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 29 Jun 2023 09:54:50 +0100 Subject: [PATCH 261/943] Fix for deprecated warning --- .../include/CGAL/Qt/manipulatedFrame_impl.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/manipulatedFrame_impl.h b/GraphicsView/include/CGAL/Qt/manipulatedFrame_impl.h index dbf263c30d49..c1cd449d0016 100644 --- a/GraphicsView/include/CGAL/Qt/manipulatedFrame_impl.h +++ b/GraphicsView/include/CGAL/Qt/manipulatedFrame_impl.h @@ -93,10 +93,10 @@ illustration. */ CGAL_INLINE_FUNCTION void ManipulatedFrame::checkIfGrabsMouse(int x, int y, const Camera *const camera) { - const int thresold = 10; + const int threshold = 10; const Vec proj = camera->projectedCoordinatesOf(position()); - setGrabsMouse(keepsGrabbingMouse_ || ((fabs(x - proj.x) < thresold) && - (fabs(y - proj.y) < thresold))); + setGrabsMouse(keepsGrabbingMouse_ || ((fabs(x - proj.x) < threshold) && + (fabs(y - proj.y) < threshold))); } @@ -219,8 +219,8 @@ int ManipulatedFrame::mouseOriginalDirection(const QMouseEvent *const e) { CGAL_INLINE_FUNCTION qreal ManipulatedFrame::deltaWithPrevPos(QMouseEvent *const event, Camera *const camera) const { - qreal dx = qreal(event->x() - prevPos_.x()) / camera->screenWidth(); - qreal dy = qreal(event->y() - prevPos_.y()) / camera->screenHeight(); + qreal dx = qreal(event->position().x() - prevPos_.x()) / camera->screenWidth(); + qreal dy = qreal(event->position().y() - prevPos_.y()) / camera->screenHeight(); qreal value = fabs(dx) > fabs(dy) ? dx : dy; return value * zoomSensitivity(); @@ -319,7 +319,7 @@ void ManipulatedFrame::mouseMoveEvent(QMouseEvent *const event, const qreal prev_angle = atan2(prevPos_.y() - trans[1], prevPos_.x() - trans[0]); - const qreal angle = atan2(event->y() - trans[1], event->x() - trans[0]); + const qreal angle = atan2(event->position().y() - trans[1], event->position().x() - trans[0]); const Vec axis = transformOf(camera->frame()->inverseTransformOf(Vec(0.0, 0.0, -1.0))); @@ -336,9 +336,9 @@ void ManipulatedFrame::mouseMoveEvent(QMouseEvent *const event, Vec trans; int dir = mouseOriginalDirection(event); if (dir == 1) - trans.setValue(event->x() - prevPos_.x(), 0.0, 0.0); + trans.setValue(event->position().x() - prevPos_.x(), 0.0, 0.0); else if (dir == -1) - trans.setValue(0.0, prevPos_.y() - event->y(), 0.0); + trans.setValue(0.0, prevPos_.y() - event->position().y(), 0.0); switch (camera->type()) { case Camera::PERSPECTIVE: @@ -367,7 +367,7 @@ void ManipulatedFrame::mouseMoveEvent(QMouseEvent *const event, case ROTATE: { Vec trans = camera->projectedCoordinatesOf(position()); - Quaternion rot = deformedBallQuaternion(event->x(), event->y(), trans[0], + Quaternion rot = deformedBallQuaternion(event->position().x(), event->position().y(), trans[0], trans[1], camera); trans = Vec(-rot[0], -rot[1], -rot[2]); trans = camera->frame()->orientation().rotate(trans); From 41e8a11e6531d61b7509606befb88940e57a5dbf Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 29 Jun 2023 15:15:34 +0100 Subject: [PATCH 262/943] Fix warnings in Arrangement_on_surface --- .../examples/Arrangement_on_surface_2/draw_arr.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp index ea99cca39a85..b62ba6aadc17 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp @@ -22,8 +22,8 @@ std::tuple hsv_to_rgb(float hue, float sat, float value) { float red, green, blue; float fc = value * sat; // Chroma - float hue_prime = fmod(hue / 60.0, 6); - float fx = fc * (1.0 - fabs(fmod(hue_prime, 2) - 1.0)); + float hue_prime = fmod(hue / 60.0f, 6); + float fx = fc * (1.0f - fabs(fmod(hue_prime, 2) - 1.0)); float fm = value - fc; if(0 <= hue_prime && hue_prime < 1) { @@ -98,12 +98,13 @@ int main() { std::size_t id(0); CGAL::draw(arr, [&] (Arrangement_2::Face_const_handle) -> CGAL::IO::Color { - float h = 360.0 * id++ / arr.number_of_faces(); + float h = 360.0f * id++ / arr.number_of_faces(); float s = 0.5; float v = 0.5; float r, g, b; + typedef unsigned char uchar; std::tie(r, g, b) = hsv_to_rgb(h, s, v); - return CGAL::IO::Color(r, g, b); + return CGAL::IO::Color(uchar(r*255), uchar(g*255), uchar(b*255)); }, "hsv colors", true); return EXIT_SUCCESS; From a6330295a6817038712b4de6fd3da23706a7a16c Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 30 Jun 2023 07:56:10 +0100 Subject: [PATCH 263/943] Fix for deprecated warning --- .../CGAL/Qt/manipulatedCameraFrame_impl.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/manipulatedCameraFrame_impl.h b/GraphicsView/include/CGAL/Qt/manipulatedCameraFrame_impl.h index 885ce76c7c20..6acb02247465 100644 --- a/GraphicsView/include/CGAL/Qt/manipulatedCameraFrame_impl.h +++ b/GraphicsView/include/CGAL/Qt/manipulatedCameraFrame_impl.h @@ -193,7 +193,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, } case MOVE_FORWARD: { - Quaternion rot = pitchYawQuaternion(event->x(), event->y(), camera); + Quaternion rot = pitchYawQuaternion(event->position().x(), event->position().y(), camera); rotate(rot); //#CONNECTION# wheelEvent MOVE_FORWARD case // actual translation is made in flyUpdate(). @@ -202,7 +202,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, } case MOVE_BACKWARD: { - Quaternion rot = pitchYawQuaternion(event->x(), event->y(), camera); + Quaternion rot = pitchYawQuaternion(event->position().x(), event->position().y(), camera); rotate(rot); // actual translation is made in flyUpdate(). // translate(inverseTransformOf(Vec(0.0, 0.0, flySpeed()))); @@ -210,10 +210,10 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, } case DRIVE: { - Quaternion rot = turnQuaternion(event->x(), camera); + Quaternion rot = turnQuaternion(event->position().x(), camera); rotate(rot); // actual translation is made in flyUpdate(). - driveSpeed_ = 0.01 * (event->y() - pressPos_.y()); + driveSpeed_ = 0.01 * (event->position().y() - pressPos_.y()); break; } @@ -223,7 +223,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, } case LOOK_AROUND: { - Quaternion rot = pitchYawQuaternion(event->x(), event->y(), camera); + Quaternion rot = pitchYawQuaternion(event->position().x(), event->position().y(), camera); rotate(rot); break; } @@ -233,9 +233,9 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, if (rotatesAroundUpVector_) { // Multiply by 2.0 to get on average about the same speed as with the // deformed ball - qreal dx = 2.0 * rotationSensitivity() * (prevPos_.x() - event->x()) / + qreal dx = 2.0 * rotationSensitivity() * (prevPos_.x() - event->position().x()) / camera->screenWidth(); - qreal dy = 2.0 * rotationSensitivity() * (prevPos_.y() - event->y()) / + qreal dy = 2.0 * rotationSensitivity() * (prevPos_.y() - event->position().y()) / camera->screenHeight(); if (constrainedRotationIsReversed_) dx = -dx; @@ -243,7 +243,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, rot = Quaternion(verticalAxis, dx) * Quaternion(Vec(1.0, 0.0, 0.0), dy); } else { Vec trans = camera->projectedCoordinatesOf(pivotPoint()); - rot = deformedBallQuaternion(event->x(), event->y(), trans[0], trans[1], + rot = deformedBallQuaternion(event->position().x(), event->position().y(), trans[0], trans[1], camera); } //#CONNECTION# These two methods should go together (spinning detection and @@ -257,7 +257,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, case SCREEN_ROTATE: { Vec trans = camera->projectedCoordinatesOf(pivotPoint()); - const qreal angle = atan2(event->y() - trans[1], event->x() - trans[0]) - + const qreal angle = atan2(event->position().y() - trans[1], event->position().x() - trans[0]) - atan2(prevPos_.y() - trans[1], prevPos_.x() - trans[0]); Quaternion rot(Vec(0.0, 0.0, 1.0), angle); @@ -272,7 +272,7 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, case ROLL: { const qreal angle = - CGAL_PI * (event->x() - prevPos_.x()) / camera->screenWidth(); + CGAL_PI * (event->position().x() - prevPos_.x()) / camera->screenWidth(); Quaternion rot(Vec(0.0, 0.0, 1.0), angle); rotate(rot); setSpinningQuaternion(rot); @@ -284,9 +284,9 @@ void ManipulatedCameraFrame::mouseMoveEvent(QMouseEvent *const event, Vec trans; int dir = mouseOriginalDirection(event); if (dir == 1) - trans.setValue(prevPos_.x() - event->x(), 0.0, 0.0); + trans.setValue(prevPos_.x() - event->position().x(), 0.0, 0.0); else if (dir == -1) - trans.setValue(0.0, event->y() - prevPos_.y(), 0.0); + trans.setValue(0.0, event->position().y() - prevPos_.y(), 0.0); switch (camera->type()) { case Camera::PERSPECTIVE: From 75a03661609a04949cf81adfbd0f1b30281cfc4e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 5 Jul 2023 08:44:38 +0100 Subject: [PATCH 264/943] Surface_mesh_approximation: Deal with boundary edges --- .../internal/parameters_interface.h | 1 + .../CGAL/Variational_shape_approximation.h | 119 ++++++++++-------- 2 files changed, 68 insertions(+), 52 deletions(-) diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 7792ad5cdb60..d88c06a5f5ea 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -222,6 +222,7 @@ CGAL_add_named_parameter(number_of_relaxations_t, number_of_relaxations, number_ CGAL_add_named_parameter(use_convex_hull_t, use_convex_hull, use_convex_hull) // meshing parameters +CGAL_add_named_parameter(boundary_subdivision_ratio_t, boundary_subdivision_ratio, boundary_subdivision_ratio) CGAL_add_named_parameter(subdivision_ratio_t, subdivision_ratio, subdivision_ratio) CGAL_add_named_parameter(relative_to_chord_t, relative_to_chord, relative_to_chord) CGAL_add_named_parameter(with_dihedral_angle_t, with_dihedral_angle, with_dihedral_angle) diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index 566aec602d73..e7c4a2a8a318 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -795,6 +795,12 @@ class Variational_shape_approximation { * \cgalParamDefault{`5.0`} * \cgalParamNEnd * + * \cgalParamNBegin{boundary_subdivision_ratio} + * \cgalParamDescription{the chord subdivision ratio threshold to the chord length or average edge length for boundary edges} + * \cgalParamType{`geom_traits::FT`} + * \cgalParamDefault{`5.0`} + * \cgalParamNEnd + * * \cgalParamNBegin{relative_to_chord} * \cgalParamDescription{If `true`, the `subdivision_ratio` is the ratio of the furthest vertex distance * to the chord length, otherwise is the average edge length} @@ -827,6 +833,7 @@ class Variational_shape_approximation { using parameters::choose_parameter; const FT subdivision_ratio = choose_parameter(get_parameter(np, internal_np::subdivision_ratio), FT(5.0)); + const FT boundary_subdivision_ratio = choose_parameter(get_parameter(np, internal_np::boundary_subdivision_ratio), FT(5.0)); const bool relative_to_chord = choose_parameter(get_parameter(np, internal_np::relative_to_chord), false); const bool with_dihedral_angle = choose_parameter(get_parameter(np, internal_np::with_dihedral_angle), false); const bool optimize_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_anchor_location), true); @@ -848,7 +855,7 @@ class Variational_shape_approximation { // generate anchors find_anchors(); - find_edges(subdivision_ratio, relative_to_chord, with_dihedral_angle); + find_edges(subdivision_ratio, boundary_subdivision_ratio, relative_to_chord, with_dihedral_angle); add_anchors(); // discrete constrained Delaunay triangulation @@ -1519,6 +1526,7 @@ class Variational_shape_approximation { * @param with_dihedral_angle if set to `true`, add dihedral angle weight to the distance. */ void find_edges(const FT subdivision_ratio, + const FT boundary_subdivision_ratio, const bool relative_to_chord, const bool with_dihedral_angle) { // collect candidate halfedges in a set @@ -1550,7 +1558,7 @@ class Variational_shape_approximation { Boundary_chord chord; walk_to_next_anchor(he_start, chord); m_bcycles.back().num_anchors += subdivide_chord(chord.begin(), chord.end(), - subdivision_ratio, relative_to_chord, with_dihedral_angle); + subdivision_ratio, boundary_subdivision_ratio, relative_to_chord, with_dihedral_angle); #ifdef CGAL_SURFACE_MESH_APPROXIMATION_DEBUG std::cerr << "#chord_anchor " << m_bcycles.back().num_anchors << std::endl; @@ -1846,6 +1854,7 @@ class Variational_shape_approximation { const Boundary_chord_iterator &chord_begin, const Boundary_chord_iterator &chord_end, const FT subdivision_ratio, + const FT boundary_subdivision_ratio, const bool relative_to_chord, const bool with_dihedral_angle) { const std::size_t chord_size = std::distance(chord_begin, chord_end); @@ -1854,6 +1863,8 @@ class Variational_shape_approximation { const std::size_t anchor_first = get(m_vanchor_map, source(he_first, *m_ptm)); const std::size_t anchor_last = get(m_vanchor_map, target(he_last, *m_ptm)); + bool is_boundary = is_border_edge(he_first, *m_ptm); + // do not subdivide trivial non-circular chord if ((anchor_first != anchor_last) && (chord_size < 4)) return 1; @@ -1879,67 +1890,71 @@ class Variational_shape_approximation { if_subdivide = true; } else { - FT dist_max(0.0); - Vector_3 chord_vec = vector_functor(pt_begin, pt_end); - const FT chord_len = CGAL::approximate_sqrt(chord_vec.squared_length()); - bool degenerate_chord = false; - if (chord_len > FT(0.0)) { - chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); - for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); - vec = cross_product_functor(chord_vec, vec); - const FT dist = CGAL::approximate_sqrt(vec.squared_length()); - if (dist > dist_max) { - chord_max = citr; - dist_max = dist; - } + FT dist_max(0.0); + Vector_3 chord_vec = vector_functor(pt_begin, pt_end); + const FT chord_len = CGAL::approximate_sqrt(chord_vec.squared_length()); + bool degenerate_chord = false; + if (chord_len > FT(0.0)) { + chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); + for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { + Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); + vec = cross_product_functor(chord_vec, vec); + const FT dist = CGAL::approximate_sqrt(vec.squared_length()); + if (dist > dist_max) { + chord_max = citr; + dist_max = dist; + } + } } - } - else { - degenerate_chord = true; - for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance( - pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); - if (dist > dist_max) { - chord_max = citr; - dist_max = dist; - } + else { + degenerate_chord = true; + for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { + const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance( + pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); + if (dist > dist_max) { + chord_max = citr; + dist_max = dist; + } + } } - } - FT criterion = dist_max; - if (relative_to_chord && !degenerate_chord) - criterion /= chord_len; - else - criterion /= m_average_edge_length; - - if (with_dihedral_angle) { - // suppose the proxy normal angle is acute - std::size_t px_left = get(m_fproxy_map, face(he_first, *m_ptm)); - std::size_t px_right = px_left; - if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) - px_right = get(m_fproxy_map, face(opposite(he_first, *m_ptm), *m_ptm)); - FT norm_sin(1.0); - if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) { - Vector_3 vec = cross_product_functor( - m_px_planes[px_left].normal, m_px_planes[px_right].normal); - norm_sin = CGAL::approximate_sqrt(vec.squared_length()); + FT criterion = dist_max; + if (relative_to_chord && !degenerate_chord) + criterion /= chord_len; + else + criterion /= m_average_edge_length; + + if (with_dihedral_angle) { + // suppose the proxy normal angle is acute + std::size_t px_left = get(m_fproxy_map, face(he_first, *m_ptm)); + std::size_t px_right = px_left; + if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) + px_right = get(m_fproxy_map, face(opposite(he_first, *m_ptm), *m_ptm)); + FT norm_sin(1.0); + if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) { + Vector_3 vec = cross_product_functor( + m_px_planes[px_left].normal, m_px_planes[px_right].normal); + norm_sin = CGAL::approximate_sqrt(vec.squared_length()); + } + criterion *= norm_sin; + } + if (is_boundary) { + if (criterion > boundary_subdivision_ratio) + if_subdivide = true; + } + else { + if (criterion > subdivision_ratio) + if_subdivide = true; } - criterion *= norm_sin; - } - - if (criterion > subdivision_ratio) - if_subdivide = true; } - if (if_subdivide) { // subdivide at the most remote vertex attach_anchor(*chord_max); const std::size_t num_left = subdivide_chord(chord_begin, chord_max + 1, - subdivision_ratio, relative_to_chord, with_dihedral_angle); + subdivision_ratio, boundary_subdivision_ratio, relative_to_chord, with_dihedral_angle); const std::size_t num_right = subdivide_chord(chord_max + 1, chord_end, - subdivision_ratio, relative_to_chord, with_dihedral_angle); + subdivision_ratio, boundary_subdivision_ratio, relative_to_chord, with_dihedral_angle); return num_left + num_right; } From a8a3d8ab36cf3ad0880aa21dc49c2d29c96df656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Jul 2023 15:39:08 +0200 Subject: [PATCH 265/943] add functor to compute the intersection of 3 independant planes --- .../include/CGAL/Kernel/function_objects.h | 36 +++++++++++++++++++ .../include/CGAL/Kernel/interface_macros.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/Kernel_23/include/CGAL/Kernel/function_objects.h b/Kernel_23/include/CGAL/Kernel/function_objects.h index e307e28ae1f5..438dc0de14be 100644 --- a/Kernel_23/include/CGAL/Kernel/function_objects.h +++ b/Kernel_23/include/CGAL/Kernel/function_objects.h @@ -2192,6 +2192,42 @@ namespace CommonKernelFunctors { } }; + template + class Construct_planes_intersection_point_3 + { + typedef typename K::Plane_3 Plane; + typedef typename K::Point_3 Point; + typename K::Construct_plane_3 construct_plane; + public: + typedef Point result_type; + + Point + operator()(const Point& p1, const Point& q1, const Point& r1, + const Point& p2, const Point& q2, const Point& r2, + const Point& p3, const Point& q3, const Point& r3) const + { + Plane plane1 = construct_plane(p1, q1, r1); + Plane plane2 = construct_plane(p2, q2, r2); + Plane plane3 = construct_plane(p3, q3, r3); + + const auto res = typename K::Intersect_3()(plane1, plane2, plane3); + CGAL_assertion(res!=boost::none); + const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(e_pt!=nullptr); + return *e_pt; + } + + Point + operator()(const Plane& plane1, const Plane& plane2, const Plane& plane3) const + { + const auto res = typename K::Intersect_3()(plane1, plane2, plane3); + CGAL_assertion(res!=boost::none); + const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(e_pt!=nullptr); + return *e_pt; + } + }; + template class Compute_alpha_for_coplanar_triangle_intersection_3 { diff --git a/Kernel_23/include/CGAL/Kernel/interface_macros.h b/Kernel_23/include/CGAL/Kernel/interface_macros.h index 1360aa1bbcdf..0acc0a4c6909 100644 --- a/Kernel_23/include/CGAL/Kernel/interface_macros.h +++ b/Kernel_23/include/CGAL/Kernel/interface_macros.h @@ -398,6 +398,8 @@ CGAL_Kernel_cons(Construct_plane_3, construct_plane_3_object) CGAL_Kernel_cons(Construct_plane_line_intersection_point_3, construct_plane_line_intersection_point_3_object) +CGAL_Kernel_cons(Construct_planes_intersection_point_3, + construct_planes_intersection_point_3_object) CGAL_Kernel_cons(Compute_alpha_for_coplanar_triangle_intersection_3, compute_alpha_for_coplanar_triangle_intersection_3_object) CGAL_Kernel_cons(Construct_point_on_2, From a0658b6423c95f108868f6ce5c65ad1b7b1149ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Jul 2023 15:51:04 +0200 Subject: [PATCH 266/943] track coplanar triangles and use direct point construction --- .../Polygon_mesh_processing/autorefinement.h | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 9bbc67efb487..68241773f374 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -167,9 +167,7 @@ do_coplanar_segments_intersect(std::size_t pi, std::size_t qi, } } - // supporting_line intersects: points are coplanar - // TODO: check if we can write a dedicated predicate taking advantage of p,q being shared ::CGAL::Orientation pqr = cpl_orient(p, q, r); ::CGAL::Orientation pqs = cpl_orient(p, q, s); @@ -609,7 +607,7 @@ void test_edge(const typename K::Point_3& p, const typename K::Point_3& q, } template -void collect_intersections(const std::array& t1, +bool collect_intersections(const std::array& t1, const std::array& t2, std::vector& inter_pts) { @@ -626,7 +624,7 @@ void collect_intersections(const std::array& t1, if (depth(p)>2) throw std::runtime_error("Depth is not 4: "+std::to_string(depth(p))); #endif - return; + return true; } for (int i=0; i<3; ++i) @@ -653,6 +651,8 @@ void collect_intersections(const std::array& t1, for (auto p : inter_pts) if (depth(p)>2) throw std::runtime_error("Depth is not 2: "+std::to_string(depth(p))); #endif + + return false; } ////////////////////////////////// @@ -672,6 +672,7 @@ void generate_subtriangles(std::size_t ti, std::vector& points, const std::vector& in_triangle_ids, const std::set >& intersecting_triangles, + const std::set >& coplanar_triangles, const std::vector>& triangles, PointVector& new_triangles ) @@ -789,11 +790,6 @@ void generate_subtriangles(std::size_t ti, { std::size_t nbs = segments.size(); - auto supporting_plane = [](const std::array& t) - { - return typename EK::Plane_3(t[0], t[1], t[2]); - }; - std::vector< std::vector > points_on_segments(nbs); COUNTER_INSTRUCTION(counter.timer1.start();) @@ -868,17 +864,19 @@ void generate_subtriangles(std::size_t ti, } case POINT_INTERSECTION: { - // TODO: use version with no variant - COUNTER_INSTRUCTION(counter.timer6.start();) - auto res = CGAL::intersection(supporting_plane(triangles[in_triangle_ids[i]]), - supporting_plane(triangles[in_triangle_ids[j]]), - supporting_plane(triangles[ti])); - COUNTER_INSTRUCTION(counter.timer6.stop();) - - if (const typename EK::Point_3* pt_ptr = boost::get(&(*res))) + if ( coplanar_triangles.count(CGAL::make_sorted_pair(in_triangle_ids[i], in_triangle_ids[j])) == 0 + && coplanar_triangles.count(CGAL::make_sorted_pair(ti, in_triangle_ids[j])) == 0 + && coplanar_triangles.count(CGAL::make_sorted_pair(in_triangle_ids[i], ti)) == 0) { + COUNTER_INSTRUCTION(counter.timer6.start();) + typename EK::Point_3 pt = typename EK::Construct_planes_intersection_point_3()( + triangles[in_triangle_ids[i]][0], triangles[in_triangle_ids[i]][1],triangles[in_triangle_ids[i]][2], + triangles[in_triangle_ids[j]][0], triangles[in_triangle_ids[j]][1],triangles[in_triangle_ids[j]][2], + triangles[ti][0], triangles[ti][1],triangles[ti][2]); + COUNTER_INSTRUCTION(counter.timer6.stop();) + COUNTER_INSTRUCTION(++counter.c1;) - std::size_t pid = get_point_id(*pt_ptr); + std::size_t pid = get_point_id(pt); points_on_segments[i].push_back(pid); points_on_segments[j].push_back(pid); } @@ -1198,7 +1196,8 @@ void autorefine_soup_output(const PointRange& input_points, Real_timer t; t.start(); #endif - std::set > intersecting_triangles; + std::set > intersecting_triangles; // TODO replace with vector>> + std::set > coplanar_triangles; // TODO replace with vector>> //TODO: PARALLEL_FOR #2 for (const Pair_of_triangle_ids& p : si_pairs) { @@ -1211,7 +1210,7 @@ void autorefine_soup_output(const PointRange& input_points, const std::array& t2 = triangles[i2]; std::vector inter_pts; - autorefine_impl::collect_intersections(t1, t2, inter_pts); + bool triangles_are_coplanar = autorefine_impl::collect_intersections(t1, t2, inter_pts); CGAL_assertion( CGAL::do_intersect(typename EK::Triangle_3(t1[0], t1[1], t1[2]), typename EK::Triangle_3(t2[0], t2[1], t2[2])) @@ -1242,6 +1241,8 @@ void autorefine_soup_output(const PointRange& input_points, } } intersecting_triangles.insert(CGAL::make_sorted_pair(i1, i2)); + if (triangles_are_coplanar) + coplanar_triangles.insert(CGAL::make_sorted_pair(i1, i2)); } } #ifdef USE_DEBUG_PARALLEL_TIMERS @@ -1369,7 +1370,7 @@ void autorefine_soup_output(const PointRange& input_points, autorefine_impl::generate_subtriangles(ti, all_segments[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); } #else - autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, triangles, new_triangles); + autorefine_impl::generate_subtriangles(ti, all_segments_ids[ti], all_points[ti], all_in_triangle_ids[ti], intersecting_triangles, coplanar_triangles, triangles, new_triangles); #endif } From bab2c72674903679a632566debb595c34505efe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Jul 2023 16:53:51 +0200 Subject: [PATCH 267/943] add functor to compute intersection point of coplanar segments --- .../include/CGAL/Kernel/function_objects.h | 34 +++++++++++++++++++ .../include/CGAL/Kernel/interface_macros.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/Kernel_23/include/CGAL/Kernel/function_objects.h b/Kernel_23/include/CGAL/Kernel/function_objects.h index 438dc0de14be..6917a06edcf3 100644 --- a/Kernel_23/include/CGAL/Kernel/function_objects.h +++ b/Kernel_23/include/CGAL/Kernel/function_objects.h @@ -2228,6 +2228,40 @@ namespace CommonKernelFunctors { } }; + template + class Construct_coplanar_segments_intersection_point_3 + { + typedef typename K::Segment_3 Segment; + typedef typename K::Point_3 Point; + typename K::Construct_segment_3 construct_segment; + public: + typedef Point result_type; + + Point + operator()(const Point& p1, const Point& q1, + const Point& p2, const Point& q2) const + { + Segment s1 = construct_segment(p1, q1); + Segment s2 = construct_segment(p2, q2); + + const auto res = typename K::Intersect_3()(s1, s2); + CGAL_assertion(res!=boost::none); + const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(e_pt!=nullptr); + return *e_pt; + } + + Point + operator()(const Segment& s1, const Segment& s2) const + { + const auto res = typename K::Intersect_3()(s1, s2); + CGAL_assertion(res!=boost::none); + const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(e_pt!=nullptr); + return *e_pt; + } + }; + template class Compute_alpha_for_coplanar_triangle_intersection_3 { diff --git a/Kernel_23/include/CGAL/Kernel/interface_macros.h b/Kernel_23/include/CGAL/Kernel/interface_macros.h index 0acc0a4c6909..a2314aef1b79 100644 --- a/Kernel_23/include/CGAL/Kernel/interface_macros.h +++ b/Kernel_23/include/CGAL/Kernel/interface_macros.h @@ -400,6 +400,8 @@ CGAL_Kernel_cons(Construct_plane_line_intersection_point_3, construct_plane_line_intersection_point_3_object) CGAL_Kernel_cons(Construct_planes_intersection_point_3, construct_planes_intersection_point_3_object) +CGAL_Kernel_cons(Construct_coplanar_segments_intersection_point_3, + construct_coplanar_segments_intersection_point_3_object) CGAL_Kernel_cons(Compute_alpha_for_coplanar_triangle_intersection_3, compute_alpha_for_coplanar_triangle_intersection_3_object) CGAL_Kernel_cons(Construct_point_on_2, From e7490ee31fe90b243c558b3742614bd0785f9796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Jul 2023 16:54:37 +0200 Subject: [PATCH 268/943] use direct construction of coplanar segment intersection --- .../Polygon_mesh_processing/autorefinement.h | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 68241773f374..693c00676f05 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -884,20 +884,13 @@ void generate_subtriangles(std::size_t ti, { COUNTER_INSTRUCTION(++counter.c2;) COUNTER_INSTRUCTION(counter.timer4.start();) - //TODO find better! - typename EK::Segment_3 s1(points[segments[i].first], points[segments[i].second]); - typename EK::Segment_3 s2(points[segments[j].first], points[segments[j].second]);// TODO: avoid this construction - auto inter = CGAL::intersection(s1, s2); - if (inter == boost::none) throw std::runtime_error("Unexpected case #2"); - if (const typename EK::Point_3* pt_ptr = boost::get(&(*inter))) - { - std::size_t pid = get_point_id(*pt_ptr); - points_on_segments[i].push_back(pid); - points_on_segments[j].push_back(pid); - break; - } - else - throw std::runtime_error("Unexpected case 1"); + typename EK::Point_3 pt = typename EK::Construct_coplanar_segments_intersection_point_3()( + points[segments[i].first], points[segments[i].second], + points[segments[j].first], points[segments[j].second]); + + std::size_t pid = get_point_id(pt); + points_on_segments[i].push_back(pid); + points_on_segments[j].push_back(pid); COUNTER_INSTRUCTION(counter.timer4.stop();) //~ std::ofstream debug ("/tmp/triangles.polylines.txt"); //~ debug << "4 " << triangles[ti][0] << " " << triangles[ti][1] << " " << triangles[ti][2] << " " << triangles[ti][0] << "\n"; From 806ffa9385e985216b34f870ad21b32982c2272e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Jul 2023 17:40:28 +0200 Subject: [PATCH 269/943] remove TODO I don't think a predicate sorting planes along a ray would be faster than directly using intersection coordinates --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 693c00676f05..122c595b13e8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -959,7 +959,6 @@ void generate_subtriangles(std::size_t ti, { if(!points_on_segments[i].empty()) { - // TODO: predicate on input triangles int coord = 0; std::size_t src_id = segments[i].first, tgt_id = segments[i].second; typename EK::Point_3 src = points[src_id], tgt=points[tgt_id]; From e5ec58b9207368f5b29e1f7c7e75736b48331f2e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 17 Jul 2023 16:43:12 +0100 Subject: [PATCH 270/943] Enable to fix the coordinates of boundary vertices --- .../internal/parameters_interface.h | 1 + .../CGAL/Variational_shape_approximation.h | 43 +- .../Surface_mesh_approximation/CMakeLists.txt | 3 + .../Surface_mesh_approximation/data/patch.ply | 7242 +++++++++++++++++ .../vsa_border_test.cpp | 131 + 5 files changed, 7410 insertions(+), 10 deletions(-) create mode 100644 Surface_mesh_approximation/test/Surface_mesh_approximation/data/patch.ply create mode 100644 Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index d88c06a5f5ea..7a4a174f19ab 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -227,6 +227,7 @@ CGAL_add_named_parameter(subdivision_ratio_t, subdivision_ratio, subdivision_rat CGAL_add_named_parameter(relative_to_chord_t, relative_to_chord, relative_to_chord) CGAL_add_named_parameter(with_dihedral_angle_t, with_dihedral_angle, with_dihedral_angle) CGAL_add_named_parameter(optimize_anchor_location_t, optimize_anchor_location, optimize_anchor_location) +CGAL_add_named_parameter(optimize_boundary_anchor_location_t, optimize_boundary_anchor_location, optimize_boundary_anchor_location) CGAL_add_named_parameter(pca_plane_t, pca_plane, pca_plane) // tetrahedral remeshing parameters diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index e7c4a2a8a318..d24ecb93ffa5 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -123,6 +123,7 @@ class Variational_shape_approximation { typedef typename Geom_traits::FT FT; typedef typename Geom_traits::Point_3 Point_3; typedef typename Geom_traits::Vector_3 Vector_3; + typedef typename Geom_traits::Segment_3 Segment_3; typedef typename Geom_traits::Plane_3 Plane_3; typedef typename Geom_traits::Construct_vector_3 Construct_vector_3; typedef typename Geom_traits::Construct_point_3 Construct_point_3; @@ -820,6 +821,12 @@ class Variational_shape_approximation { * \cgalParamDefault{`true`} * \cgalParamNEnd * + * \cgalParamNBegin{optimize_boundary_anchor_location} + * \cgalParamDescription{If `true`, optimize the anchor locations of boundary vertices} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * * \cgalParamNBegin{pca_plane} * \cgalParamDescription{If `true`, use PCA plane fitting, otherwise use the default area averaged plane parameters} * \cgalParamType{`Boolean`} @@ -837,6 +844,7 @@ class Variational_shape_approximation { const bool relative_to_chord = choose_parameter(get_parameter(np, internal_np::relative_to_chord), false); const bool with_dihedral_angle = choose_parameter(get_parameter(np, internal_np::with_dihedral_angle), false); const bool optimize_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_anchor_location), true); + const bool optimize_boundary_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_boundary_anchor_location), true); const bool pca_plane = choose_parameter(get_parameter(np, internal_np::pca_plane), false); // compute averaged edge length, used in chord subdivision @@ -862,7 +870,7 @@ class Variational_shape_approximation { pseudo_cdt(); if (optimize_anchor_location) - this->optimize_anchor_location(); + this->optimize_anchor_location(optimize_boundary_anchor_location); // check manifold-oriented return Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh(m_tris); @@ -1353,7 +1361,7 @@ class Variational_shape_approximation { const Proxy px = m_metric->fit_proxy(fvec, *m_ptm); const FT err = m_metric->compute_error(f, *m_ptm, px); - // original proxy map should always be falid + // original proxy map should always be valid const std::size_t prev_px_idx = get(m_fproxy_map, f); CGAL_assertion(prev_px_idx != CGAL_VSA_INVALID_TAG); // update the proxy error and proxy map @@ -1520,7 +1528,7 @@ class Variational_shape_approximation { /*! * @brief finds and approximates the chord connecting the anchors. - * @param subdivision_ratio boundary chord approximation recursive split creterion + * @param subdivision_ratio boundary chord approximation recursive split criterion * @param relative_to_chord set `true` if the subdivision_ratio is relative to the chord length (relative sense), * otherwise it's relative to the average edge length (absolute sense). * @param with_dihedral_angle if set to `true`, add dihedral angle weight to the distance. @@ -1845,8 +1853,8 @@ class Variational_shape_approximation { * @param chord_begin begin iterator of the chord * @param chord_end end iterator of the chord * @param subdivision_ratio the chord recursive split error threshold - * @param relative_to_chord set `true` if the subdivision_ratio is relative to the chord length (relative sense), - * otherwise it's relative to the average edge length (absolute sense). + * @param relative_to_chord set `true` if the `subdivision_ratio` is relative to the chord length (relative sense), + * otherwise it is relative to the average edge length (absolute sense). * @param with_dihedral_angle if set to `true` add dihedral angle weight to the distance. * @return the number of anchors of the chord apart from the first one */ @@ -1865,8 +1873,14 @@ class Variational_shape_approximation { bool is_boundary = is_border_edge(he_first, *m_ptm); + if(is_boundary && boundary_subdivision_ratio == 0){ + for (Boundary_chord_iterator citr = chord_begin; *citr != he_last; ++citr) { + attach_anchor(*citr); + } + } + // do not subdivide trivial non-circular chord - if ((anchor_first != anchor_last) && (chord_size < 4)) + if ((anchor_first != anchor_last) && (chord_size < 2)) return 1; bool if_subdivide = false; @@ -1895,11 +1909,13 @@ class Variational_shape_approximation { const FT chord_len = CGAL::approximate_sqrt(chord_vec.squared_length()); bool degenerate_chord = false; if (chord_len > FT(0.0)) { + Segment_3 seg(pt_begin, pt_end); chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); - vec = cross_product_functor(chord_vec, vec); - const FT dist = CGAL::approximate_sqrt(vec.squared_length()); + //Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); + //vec = cross_product_functor(chord_vec, vec); + //const FT dist = CGAL::approximate_sqrt(vec.squared_length()); + const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance(m_vpoint_map[target(*citr, *m_ptm)], seg)); if (dist > dist_max) { chord_max = citr; dist_max = dist; @@ -2007,9 +2023,15 @@ class Variational_shape_approximation { * @brief optimizes the anchor location by averaging the projection points of * the anchor vertex to the incident proxy plane. */ - void optimize_anchor_location() { + void optimize_anchor_location(bool optimize_boundary_anchor_location) { for(Anchor& a : m_anchors) { const vertex_descriptor v = a.vtx; + + if(! optimize_boundary_anchor_location && is_border(v,*m_ptm)){ + a.pos = m_vpoint_map[v]; + continue; + } + // incident proxy set std::set px_set; for(halfedge_descriptor h : halfedges_around_target(v, *m_ptm)) { @@ -2018,6 +2040,7 @@ class Variational_shape_approximation { } // projection + // todo: replace averaging by qem/svd ? Mael? FT sum_area(0.0); Vector_3 vec = CGAL::NULL_VECTOR; const Point_3 vtx_pt = m_vpoint_map[v]; diff --git a/Surface_mesh_approximation/test/Surface_mesh_approximation/CMakeLists.txt b/Surface_mesh_approximation/test/Surface_mesh_approximation/CMakeLists.txt index 0c2696006689..565c4480010a 100644 --- a/Surface_mesh_approximation/test/Surface_mesh_approximation/CMakeLists.txt +++ b/Surface_mesh_approximation/test/Surface_mesh_approximation/CMakeLists.txt @@ -15,6 +15,9 @@ if(NOT TARGET CGAL::Eigen3_support) return() endif() +create_single_source_cgal_program("vsa_border_test.cpp") +target_link_libraries(vsa_border_test PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("vsa_class_interface_test.cpp") target_link_libraries(vsa_class_interface_test PUBLIC CGAL::Eigen3_support) diff --git a/Surface_mesh_approximation/test/Surface_mesh_approximation/data/patch.ply b/Surface_mesh_approximation/test/Surface_mesh_approximation/data/patch.ply new file mode 100644 index 000000000000..364b5f9aabbb --- /dev/null +++ b/Surface_mesh_approximation/test/Surface_mesh_approximation/data/patch.ply @@ -0,0 +1,7242 @@ +ply +format ascii 1.0 +comment Generated by the CGAL library +element vertex 2447 +property double x +property double y +property double z +property double nx +property double ny +property double nz +element face 4782 +property list uchar int vertex_indices +end_header +-0.75826000000000005 0.54113988888888898 0.36264583333333333 -0.75622976135463471 0.54684065776048973 0.35927961681897197 +-0.78766433333333341 0.51201688888888897 0.34165722222222228 -0.79001324215789526 0.50665328567126411 0.34522677377874855 +-0.77195166666666681 0.50529522222222223 0.38479933333333333 -0.77420418144639147 0.49978933334325654 0.38835358593326552 +-0.99941161111111121 3.4232277777777774e-20 0.021995049999999999 -0.99958446617462626 -2.0523682663206295e-15 0.028825249042943129 +-0.99882022222222233 0.040796122222222224 4.3368086899420177e-19 -0.99914193989515954 0.040847444046735917 0.0068461856084904736 +-0.99941161111111121 -3.4232277777777774e-20 -0.021995049999999999 -0.99958446617462626 2.0523682663206295e-15 -0.028825249042943129 +-0.80174361111111114 0.51750016666666665 0.29783744444444449 -0.79978164904250193 0.5231015439045873 0.29447256004506339 +-0.7732636111111113 0.54721044444444444 0.31926572222222216 -0.77115959471535744 0.55276167927063702 0.31585978757725908 +-0.81533755555555576 0.4819113888888889 0.3198327777777778 -0.81758917689195121 0.47647000112002424 0.32330214329915274 +-0.82846038888888895 0.48680316666666668 0.27564744444444444 -0.83086036960663368 0.48141377280591013 0.27912689868571872 +-0.81533755555555576 0.4819113888888889 -0.31983277777777774 -0.81758917689195076 0.47647000112002419 -0.3233021432991538 +-0.82846038888888895 0.48680316666666668 -0.27564744444444444 -0.8308603696066339 0.4814137728059108 -0.27912689868571705 +-0.80174361111111114 0.51750016666666665 -0.29783744444444449 -0.79978164904250193 0.52310154390458719 -0.29447256004506345 +-0.78766433333333341 0.51201688888888897 -0.34165722222222222 -0.7900132421578957 0.50665328567126289 -0.34522677377874939 +-0.99916700000000003 -0.040814099999999999 -6.1618700000000003e-19 -0.99916825377459861 -0.040777452703906501 1.2600130267877126e-15 +-0.93117244444444447 0.19398261111111118 -0.3076140555555556 -0.92938877700071298 0.19325624268883035 -0.3144654604991064 +-0.93226716666666665 0.15455455555555558 -0.32609811111111114 -0.93246959373151495 0.14840348705326067 -0.32935825752000836 +-0.94538383333333342 0.15677755555555556 -0.2846197777777778 -0.94569372795329421 0.15056734547377298 -0.28808479200884973 +-0.5612852777777777 0.77439555555555573 0.29087622222222226 -0.55808340102141651 0.77882581579776655 0.28630973813566335 +-0.57617288888888907 0.77771266666666694 0.25007472222222227 -0.57289159414568047 0.78195748497442719 0.24563736085882676 +-0.59849038888888884 0.75140127777777788 0.27666483333333336 -0.60078098363085097 0.7524378919901541 0.26999894148859221 +-0.75526788888888907 0.65450761111111122 -0.022994172222222223 -0.75133876107007358 0.65938852075399312 -0.026397818310375531 +-0.7795405555555559 0.62581566666666677 4.7704895589362195e-18 -0.7759503976758112 0.63078461022977483 0.003428679632378061 +-0.75526788888888907 0.65450761111111122 0.022994172222222223 -0.75133876107007358 0.65938852075399301 0.026397818310375489 +-0.74804966666666672 0.65319355555555558 0.1144236777777778 -0.7435687042883129 0.65820381141759288 0.11778507816507716 +-0.76921911111111108 0.62333266666666676 0.1381342888888889 -0.76481502020556891 0.62851062850378847 0.14153577189434507 +-0.74111677777777796 0.65159588888888886 0.15967583333333338 -0.7463954459564115 0.64681512694105325 0.15660150004313131 +-0.284632 0.945716 0.156864 -0.30545461554927217 0.93936774136294965 0.15583877670951099 +-0.32609811111111114 0.93226716666666665 0.15455455555555558 -0.32935825752000947 0.93246959373151428 0.14840348705326251 +-0.30765300000000001 0.93148799999999998 0.19411200000000001 -0.32162863465033936 0.92711583618108895 0.19238307533460075 +-0.71130488888888888 0.6788725000000001 0.18030416666666668 -0.70824252605277271 0.68351288304227864 0.1766427553159764 +-0.67984705555555558 0.70512544444444458 0.19986166666666666 -0.68162419148185194 0.70592110047367851 0.19251976909590959 +-0.68933433333333338 0.70698838888888893 0.15598661111111109 -0.69503727204225418 0.70247712477229041 0.15313092321186222 +-0.58315799999999995 0.74718649999999998 0.31775344444444448 -0.58012540746335661 0.751811250547471 0.31342360339598258 +-0.61224105555555552 0.75451727777777799 0.23497366666666666 -0.61433218032304737 0.75533943219617827 0.228162911949085 +-0.58949688888888896 0.77990294444444463 0.20883044444444449 -0.591506012150673 0.78052499673159581 0.20224086398834004 +-0.94538383333333342 0.15677755555555556 0.2846197777777778 -0.94569372795329287 0.15056734547377257 0.28808479200885445 +-0.93226716666666665 0.15455455555555558 0.32609811111111114 -0.93246959373151428 0.14840348705326251 0.32935825752000947 +-0.93117244444444447 0.19398261111111118 0.30761405555555554 -0.92938877700071298 0.19325624268883038 0.31446546049910601 +-0.60117361111111123 0.78098961111111131 0.16742283333333338 -0.59535801362678342 0.78518859080253556 0.17037521088438706 +-0.61107305555555569 0.78110516666666663 0.12596880555555556 -0.60556810884364143 0.78527442750862131 0.12896254903088239 +-0.63459266666666669 0.75765061111111098 0.15045633333333333 -0.62911940905975205 0.76199464803136552 0.15353476972941263 +-0.75140127777777788 0.27666483333333336 0.59849038888888884 -0.7524378919901541 0.26999894148859221 0.60078098363085097 +-0.74718649999999998 0.31775344444444448 0.58315799999999995 -0.751811250547471 0.31342360339598258 0.58012540746335661 +-0.77439555555555573 0.29087622222222226 0.5612852777777777 -0.77882581579776655 0.28630973813566341 0.55808340102141663 +-0.92968266666666677 0.35567749999999998 -0.092067066666666683 -0.93196779945019714 0.34965588491567462 -0.095795526679452389 +-0.94505249999999996 0.31850488888888884 -0.068722372222222231 -0.94487952639231221 0.31840610421006571 -0.07629045422861673 +-0.93279822222222231 0.3564471111111111 -0.046091599999999996 -0.9352783456551762 0.35038106966600985 -0.049875065596141063 +-0.77771266666666694 0.25007472222222227 0.57617288888888885 -0.78195748497442552 0.24563736085882876 0.5728915941456818 +-0.73072755555555569 0.68219300000000016 5.6378512969246231e-18 -0.72681013668366656 0.6868299749905763 -0.0034074430757136684 +-0.5612852777777777 0.7743955555555555 -0.29087622222222226 -0.55808340102141885 0.77882581579776478 -0.28630973813566368 +-0.58315800000000007 0.74718650000000009 -0.31775344444444453 -0.58012540746335517 0.75181125054747355 -0.31342360339597947 +-0.59849038888888895 0.75140127777777788 -0.27666483333333336 -0.60078098363085142 0.75243789199015432 -0.26999894148859066 +-0.57617288888888896 0.77771266666666694 -0.25007472222222227 -0.57289159414568036 0.78195748497442719 -0.24563736085882737 +-0.94356911111111119 0.19638261111111116 -0.26540377777777785 -0.94420750341940884 0.19027795367498715 -0.26882427500459549 +-0.94356911111111119 0.19638261111111113 0.26540377777777779 -0.94420750341940818 0.19027795367498926 0.2688242750045966 +-0.50936000000000003 0.71579222222222227 0.47696161111111113 -0.51277920220439133 0.71781220424093606 0.47095979576753355 +-0.46877138888888903 0.73594822222222223 0.48778372222222227 -0.47224458307062456 0.73804828671333833 0.48194375215366986 +-0.48942533333333338 0.74676500000000012 0.44956438888888894 -0.49266984128746649 0.74863058746933697 0.44365377378209919 +-0.37778600000000001 0.67791999999999997 0.63063599999999997 -0.40136180945431438 0.66376634383374467 0.63112830605602033 +-0.40173900000000001 0.69467100000000004 0.59668900000000002 -0.40171258809428867 0.69470270790359101 0.59667004633885057 +-0.41935794444444441 0.66016838888888907 0.62258750000000007 -0.4155867519106578 0.65774418987695715 0.62821989169354919 +-0.97496966666666673 0.2015737777777778 0.09000205 -0.97466028087315248 0.20147411345876459 0.097188057364433172 +-0.98414455555555547 0.16200311111111113 0.067180683333333324 -0.98399619015928708 0.16196416334314798 0.074290696218046348 +-0.98016833333333342 0.16149394444444445 0.11177085555555555 -0.97972447345757396 0.16136488341997382 0.11874902318393063 +-0.98016833333333331 0.16149394444444445 -0.11177085555555555 -0.97972447345757363 0.16136488341997368 -0.11874902318393306 +-0.98414455555555558 0.16200311111111113 -0.067180683333333338 -0.98399619015928652 0.16196416334315189 -0.074290696218046404 +-0.97496966666666673 0.2015737777777778 -0.09000205 -0.97466028087315248 0.20147411345876462 -0.097188057364433103 +-0.71579222222222227 0.47696161111111113 0.50936000000000003 -0.71781220424093606 0.47095979576753355 0.51277920220439133 +-0.73594822222222223 0.48778372222222227 0.46877138888888903 -0.73804828671333833 0.48194375215366986 0.47224458307062456 +-0.74676500000000012 0.44956438888888894 0.48942533333333338 -0.74863058746933697 0.44365377378209908 0.49266984128746644 +-0.67768672222222215 0.63041288888888891 0.37765505555555556 -0.67523547363985215 0.63580255343595515 0.37391465360785747 +-0.69442822222222234 0.59648461111111117 0.40159044444444447 -0.69213285028072336 0.60215091308302471 0.39795275528077639 +-0.66016838888888907 0.62258750000000007 0.41935794444444441 -0.65774418987695715 0.62821989169354919 0.4155867519106578 +-0.54506144444444449 0.76974894444444453 0.33124288888888898 -0.54190948364204006 0.77435972940169828 0.32665137535260158 +-0.56648211111111113 0.74160044444444451 0.35839366666666667 -0.56349687759284506 0.74644575354313181 0.35396328335088706 +-0.86174150000000005 0.49800805555555555 0.093204683333333357 -0.85921887787391815 0.50370123562967883 0.089599024158859564 +-0.85643122222222223 0.49636094444444451 0.13946366111111111 -0.85409111315639963 0.50205646360201817 0.13589583430958266 +-0.83918061111111109 0.53060388888888887 0.11635206111111114 -0.83660195728872988 0.5360652123901426 0.11283285481533098 +-0.54858188888888881 0.73454266666666679 0.39851677777777783 -0.54563674223181935 0.73959227525466842 0.3940606703418521 +-0.52952149999999998 0.72595138888888888 0.43806994444444453 -0.52661743606786326 0.73121205036954717 0.43359314273137761 +-0.50905750000000005 0.75598850000000006 0.41067372222222226 -0.5059964478844069 0.76101382125491979 0.4059871409137828 +-0.90825894444444466 0.34975538888888891 0.22812300000000002 -0.90998987808509801 0.34392612395842415 0.23158852096251026 +-0.89795138888888903 0.38766055555555556 0.20664461111111113 -0.90000506801376501 0.38184952843487757 0.21019470779160887 +-0.91736605555555562 0.35238222222222232 0.18320683333333337 -0.91928685361828566 0.34644372502988785 0.1867844376601222 +-0.47696161111111113 0.50936000000000003 0.71579222222222227 -0.4709597957675335 0.51277920220439122 0.71781220424093595 +-0.48796200000000001 0.46893600000000002 0.73620099999999999 -0.48795816122222951 0.46889694247011066 0.73622855842381074 +-0.44971800000000001 0.48959900000000001 0.74702500000000005 -0.46156499534407014 0.50616100802206843 0.72853194098207674 +-0.86615722222222247 0 0.49935283333333336 -0.86528710791410368 0.0058161984086357926 0.50124284804246111 +-0.87306355555555581 0.033121194444444439 0.485991888888889 -0.87575003239765592 0.028044417257714328 0.48194957352007262 +-0.88327516666666672 6.8184444444444446e-20 0.46833050000000009 -0.88229182417334762 -0.0059344385625642428 0.4706654007209512 +-0.63041288888888891 0.37765505555555556 0.67768672222222215 -0.63580255343595515 0.37391465360785747 0.67523547363985215 +-0.59648461111111117 0.40159044444444447 0.69442822222222234 -0.60215091308302471 0.39795275528077645 0.69213285028072336 +-0.62258750000000007 0.41935794444444441 0.66016838888888907 -0.62821989169354919 0.4155867519106578 0.65774418987695715 +-0.76974894444444453 0.33124288888888898 0.54506144444444449 -0.77435972940169828 0.32665137535260158 0.54190948364204006 +-0.74160044444444451 0.35839366666666667 0.56648211111111113 -0.74644575354313181 0.35396328335088706 0.56349687759284506 +-0.91736605555555562 0.35238222222222232 -0.18320683333333337 -0.91928685361828599 0.34644372502988552 -0.1867844376601244 +-0.89795138888888903 0.38766055555555556 -0.20664461111111113 -0.90000506801376357 0.3818495284348809 -0.21019470779160895 +-0.90825894444444466 0.34975538888888896 -0.22812300000000002 -0.90998987808509779 0.34392612395842459 -0.2315885209625107 +-0.73454266666666679 0.39851677777777783 0.54858188888888881 -0.73959227525466853 0.3940606703418521 0.54563674223181946 +-0.72595138888888888 0.43806994444444453 0.52952149999999998 -0.73121205036954706 0.43359314273137756 0.52661743606786326 +-0.75598850000000006 0.41067372222222226 0.50905750000000005 -0.76101382125491979 0.40598714091378285 0.5059964478844069 +-0.83918061111111109 0.53060388888888899 -0.11635206111111113 -0.83660195728873032 0.53606521239014215 -0.11283285481532941 +-0.85643122222222223 0.49636094444444451 -0.13946366111111108 -0.85409111315639796 0.5020564636020215 -0.13589583430958052 +-0.86174150000000005 0.49800805555555561 -0.093204683333333344 -0.85921887787391704 0.50370123562968006 -0.089599024158862728 +-0.66016838888888896 0.62258750000000007 -0.41935794444444441 -0.65774418987695826 0.6282198916935483 -0.41558675191065736 +-0.69442822222222234 0.59648461111111117 -0.40159044444444447 -0.69213285028072413 0.60215091308302537 -0.39795275528077395 +-0.67768672222222215 0.6304128888888888 -0.37765505555555556 -0.6752354736398527 0.6358025534359546 -0.37391465360785703 +-0.39497500000000002 0.64293699999999998 0.65622199999999997 -0.40546874587029513 0.64313488021939214 0.64959419791709827 +-0.438226 0.52970399999999995 0.72620399999999996 -0.44885899031823706 0.52953232505707337 0.71980630973209914 +-0.68793472222222229 0.36971155555555557 0.62399500000000008 -0.68945393975167257 0.36307230281365693 0.62676292798033717 +-0.71182900000000005 0.38485688888888897 0.58693700000000004 -0.71337613272082079 0.37843274998841775 0.58981619764168025 +-0.71834377777777791 0.34402016666666668 0.6041117222222222 -0.71971741204167938 0.33745518253232804 0.60673787304411819 +-0.78059327777777765 0.084315716666666679 0.61885927777777783 -0.78075466757073098 0.077163358696741069 0.620054808175177 +-0.75790999999999997 0.064948400000000003 0.64911799999999997 -0.773267268887874 0.070998529113733264 0.63009280247466304 +-0.758131 0.107887 0.64311600000000002 -0.76613576512856874 0.11369176635172877 0.63254262437774611 +-0.76982988888888892 0.58579227777777787 -0.25202805555555563 -0.76737501432410749 0.59109138934630023 -0.24848854466903775 +-0.78042783333333343 0.5893477222222222 -0.20715500000000001 -0.7778237708586162 0.59457880230514903 -0.20363258417222282 +-0.75165261111111115 0.61818911111111108 -0.22841961111111114 -0.74897430910137763 0.62329215032836771 -0.22482077227238875 +-0.48243316666666669 0.86490927777777793 0.13642550000000001 -0.48886245747926188 0.86183697576672835 0.1350945034729267 +-0.50608016666666666 0.84599500000000005 0.16607305555555557 -0.51265896621158669 0.84269657284665989 0.16444838240421003 +-0.46843350000000006 0.8657556666666667 0.17444783333333336 -0.46461967977246371 0.8692030998374678 0.16915828209422798 +-0.72114805555555561 0.64606572222222236 -0.24872233333333338 -0.71841774753894727 0.65102987947107616 -0.24502252153004503 +-0.68898294444444441 0.67292155555555566 -0.26795866666666662 -0.69113884282724725 0.6740463509068223 -0.26074626893708508 +-0.70832122222222216 0.64198 -0.29233105555555561 -0.70571237059887948 0.64705626737509536 -0.28859701459703097 +-0.64288133333333342 0.75794099999999998 0.10781466666666668 -0.64419850158019154 0.75821722222775967 0.10057303057508137 +-0.61885927777777783 0.78059327777777765 0.084315716666666679 -0.620054808175177 0.78075466757073086 0.077163358696741069 +-0.61992855555555559 0.72347883333333352 -0.30264644444444444 -0.62233405661673513 0.72465725446077855 -0.29592597981982743 +-0.60411172222222231 0.71834377777777791 -0.34402016666666668 -0.60673787304411997 0.71971741204167827 -0.33745518253232731 +-0.84349833333333335 0.53190250000000006 -0.0699548888888889 -0.84005222422363224 0.53749486054694662 -0.073563139292357874 +-0.62399500000000008 0.68793472222222229 -0.36971155555555552 -0.62676292798033872 0.68945393975167202 -0.36307230281365543 +-0.64271094444444454 0.65599627777777791 -0.3948356111111111 -0.6456309694623823 0.65766065101669202 -0.38812771013593611 +-0.65963700000000003 0.6629248333333333 -0.35315727777777778 -0.66230302078762193 0.66440626695153993 -0.3462932588011351 +-0.84349833333333335 0.53190250000000006 0.0699548888888889 -0.84005222422363046 0.53749486054694962 0.073563139292355778 +-0.48243316666666669 0.86490927777777793 -0.13642550000000001 -0.48886245747925988 0.86183697576672935 -0.13509450347292715 +-0.44500061111111117 0.88374388888888911 -0.1427423888888889 -0.44112116187999789 0.88691040801339915 -0.13712056264159139 +-0.46843350000000006 0.86575566666666681 -0.17444783333333336 -0.46461967977246255 0.86920309983746857 -0.16915828209422626 +-0.36061883333333339 0.93238900000000013 4.6784453566086847e-19 -0.36405373418237241 0.93135569614837044 -0.0064378474550659346 +-0.3801107777777778 0.92384822222222251 -0.037749188888888889 -0.38369927692104505 0.92239862108724591 -0.044222717087653116 +-0.39811761111111116 0.9170195000000001 6.8184444444444446e-20 -0.40146208978194359 0.91585374040706513 -0.0063337706228314035 +-0.38011077777777785 0.92384822222222251 0.037749188888888889 -0.3836992769210455 0.92239862108724568 0.044222717087653053 +-0.44500061111111117 0.88374388888888911 0.1427423888888889 -0.44112116187999745 0.88691040801339915 0.13712056264159253 +-0.64271094444444454 0.6559962777777778 0.3948356111111111 -0.64563096946238119 0.65766065101669124 0.38812771013593905 +-0.9170195000000001 6.8184444444444446e-20 0.39811761111111116 -0.91585374040706513 -0.0063337706228314035 0.40146208978194359 +-0.92384822222222251 0.037749188888888889 0.3801107777777778 -0.9223986210872458 0.044222717087652651 0.38369927692104522 +-0.93238900000000013 4.6784453566086847e-19 0.36061883333333339 -0.93135569614837044 -0.0064378474550659346 0.36405373418237241 +-0.8657556666666667 0.17444783333333336 0.46843350000000006 -0.8692030998374678 0.16915828209422798 0.46461967977246371 +-0.88374388888888911 0.1427423888888889 0.44500061111111117 -0.88691040801339915 0.13712056264159253 0.44112116187999745 +-0.86490927777777793 0.13642550000000001 0.48243316666666669 -0.86183697576672835 0.1350945034729267 0.48886245747926188 +-0.6559962777777778 0.3948356111111111 0.64271094444444454 -0.65766065101669136 0.38812771013593905 0.64563096946238119 +-0.84599500000000005 0.16607305555555557 0.50608016666666666 -0.84269657284665989 0.16444838240421003 0.51265896621158669 +-0.78110516666666663 0.12596880555555556 0.61107305555555569 -0.78527442750862131 0.12896254903088239 0.60556810884364143 +-0.4064782222222223 0.90131850000000013 -0.1476015 -0.40247103169275317 0.90439818266630434 -0.14170743042641382 +-0.38394200000000006 0.91612616666666669 -0.11263961111111111 -0.37990979769417682 0.91886656680883383 -0.10654941584502785 +-0.3668042222222222 0.91753444444444443 -0.15149372222222224 -0.37332295099127566 0.91536790224266062 -0.15076994994705148 +-0.64882261111111128 0.75777511111111118 0.064889444444444444 -0.64977268161939916 0.75795713656690133 0.057414644024313226 +-0.34437449999999997 0.93139666666666665 -0.11520171666666668 -0.34755386944931183 0.93129562037784253 -0.10906317112508719 +-0.326102 0.93259400000000003 -0.15467700000000001 -0.33904627376153867 0.93013909011883433 -0.14102800176320596 +-0.64288133333333342 0.75794099999999998 -0.10781466666666668 -0.64419850158019087 0.75821722222775967 -0.10057303057508492 +-0.64882261111111128 0.75777511111111118 -0.064889444444444444 -0.64977268161940149 0.75795713656689923 -0.057414644024313087 +-0.61885927777777783 0.78059327777777765 -0.084315716666666679 -0.62005480817517589 0.78075466757073186 -0.077163358696740084 +-0.61107305555555558 0.78110516666666663 -0.12596880555555559 -0.60556810884364132 0.78527442750862131 -0.12896254903088247 +-0.50608016666666666 0.84599500000000016 -0.16607305555555554 -0.51265896621159002 0.84269657284665833 -0.16444838240420778 +-0.96997316666666666 0.20078738888888892 -0.13468594444444443 -0.97109442398983969 0.19442173929857137 -0.1384767380608021 +-0.92673877777777802 0.31397677777777783 -0.20464033333333337 -0.92563509877677597 0.31343256958455351 -0.21203699732860798 +-0.92417300000000002 -0.037807500000000001 0.38009900000000002 -0.92435072542991981 -0.037682359749136002 0.3796785168546119 +-0.92673877777777802 0.31397677777777777 0.20464033333333337 -0.92563509877677597 0.3134325695845534 0.21203699732860795 +-0.96997316666666678 0.20078738888888892 0.13468594444444443 -0.97109442398983981 0.19442173929856951 0.13847673806080318 +-0.38442366666666661 0.81182961111111129 0.43869994444444455 -0.38774561949271991 0.81374584068554534 0.43297926201052844 +-0.40474005555555553 0.82153555555555569 0.40071994444444453 -0.40790672687203389 0.82320169950934685 0.39490639915993631 +-0.42688794444444444 0.79472077777777772 0.43068905555555559 -0.4301031812234084 0.79652791157639247 0.4249170973039974 +-0.99527699999999997 -0.040669700000000003 0.088143899999999997 -0.99528282312395366 -0.040659635914069105 0.088084595712009217 +-0.99446699999999999 -0.0813691 0.066442200000000007 -0.9962881829039385 -0.055094892576294616 0.066139318245466691 +-0.99054699999999996 -0.0811172 0.11062 -0.99240482996690904 -0.05487374096346978 0.11009780202631003 +-0.99492755555555568 0.04065623888888889 0.088165211111111114 -0.99464326804763692 0.040620881509268507 0.095051108951587859 +-0.99006766666666679 0.040503216666666675 0.13204949444444447 -0.98948701311988685 0.040438854590617142 0.13885297946563416 +-0.99020283333333337 0.081089350000000004 0.11059171666666666 -0.98977266867453773 0.080998057719492325 0.11742818652501494 +-0.85248605555555579 0.41357311111111106 0.31864050000000005 -0.85436606501290713 0.40787184350474653 0.32202358023970945 +-0.86546133333333342 0.41817277777777767 0.27461266666666667 -0.86749023845332152 0.41249033814465857 0.27805108725826738 +-0.87581005555555569 0.38057250000000004 0.29568288888888894 -0.87753026609894647 0.37486538870813074 0.29902603971730363 +-0.81182961111111129 0.43869994444444449 0.38442366666666661 -0.81374584068554534 0.43297926201052894 0.38774561949271963 +-0.82153555555555569 0.40071994444444453 0.40474005555555553 -0.82320169950934685 0.39490639915993631 0.40790672687203389 +-0.79472077777777772 0.43068905555555559 0.42688794444444444 -0.79652791157639247 0.4249170973039974 0.43010318122340846 +-0.75734050000000008 0.58135438888888902 0.29625844444444449 -0.75499804760571387 0.5867730154058064 0.29270356421324539 +-0.74305750000000004 0.57594661111111112 0.33978666666666668 -0.74080593120528204 0.58149597524355834 0.33625734648720751 +-0.72637127777777788 0.60962966666666674 0.3162962222222222 -0.7239594587653938 0.61490789988900629 0.3126835088683283 +-0.79799688888888887 0.55622755555555559 0.23047522222222222 -0.79562365876447649 0.56166610731031885 0.22696734900223225 +-0.78042783333333343 0.5893477222222222 0.20715500000000001 -0.77782377085861565 0.59457880230515014 0.20363258417222183 +-0.80746050000000003 0.55951377777777778 0.18509111111111115 -0.80496185827090283 0.564848097364122 0.18161231685429893 +-0.81182961111111129 0.43869994444444449 -0.38442366666666661 -0.81374584068554534 0.43297926201052889 -0.38774561949271963 +-0.78411972222222215 0.46844483333333348 -0.40622622222222227 -0.78616289348646995 0.46275805394282821 -0.40963750855607428 +-0.79472077777777772 0.43068905555555559 -0.42688794444444444 -0.79652791157639247 0.42491709730399746 -0.43010318122340835 +-0.85248605555555579 0.41357311111111106 -0.31864050000000005 -0.85436606501290757 0.40787184350474476 -0.32202358023971051 +-0.86203900000000011 0.37568711111111114 -0.33920450000000008 -0.86363598405927289 0.36991552503825786 -0.34248414762385898 +-0.87581005555555569 0.38057250000000004 -0.29568288888888894 -0.87753026609894536 0.37486538870813008 -0.29902603971730735 +-0.79799688888888887 0.55622755555555559 -0.23047522222222222 -0.79562365876447716 0.56166610731031941 -0.22696734900222931 +-0.82439899999999999 0.52567461111111113 -0.20817311111111111 -0.82213680993551586 0.53122525675781385 -0.20467240246708424 +-0.80746050000000014 0.55951377777777789 -0.18509111111111115 -0.80496185827090005 0.56484809736412722 -0.18161231685429535 +-0.75734050000000008 0.58135438888888902 -0.29625844444444444 -0.75499804760571654 0.58677301540580296 -0.29270356421324539 +-0.73992438888888878 0.61438050000000011 -0.27269055555555555 -0.7373851635856109 0.61957725465031477 -0.26904859420521215 +-0.72637127777777788 0.60962966666666674 -0.31629622222222226 -0.72395945876539358 0.61490789988900663 -0.31268350886832808 +-0.99492755555555568 0.04065623888888889 -0.088165211111111114 -0.99464326804763692 0.040620881509270568 -0.095051108951586624 +-0.99411955555555553 0.081341644444444444 -0.066439672222222232 -0.9939826873272527 0.081323487946983117 -0.073381929668208432 +-0.99020283333333337 0.081089350000000004 -0.11059171666666667 -0.98977266867453773 0.080998057719492339 -0.11742818652501491 +-0.91074705555555568 0.26913238888888896 -0.31214399999999998 -0.90890151067891412 0.26821257009591476 -0.3193118556022182 +-0.92338244444444451 0.27248327777777775 -0.26913955555555558 -0.92184936072310708 0.27174562074120029 -0.27631155195246321 +-0.904893611111111 0.30796461111111118 -0.29264711111111108 -0.9031732541248243 0.30710578259799209 -0.29994017958328018 +-0.89979483333333332 0.22554461111111115 -0.37261611111111104 -0.89751437565627668 0.22449112923450024 -0.37956775203557902 +-0.880473888888889 0.25920594444444445 -0.39612783333333335 -0.87799809680948748 0.25797190334318099 -0.40319950283254852 +-0.88349500000000003 0.22000400000000001 -0.41356399999999999 -0.88533382153477225 0.23437433605922856 -0.4015628158127092 +-0.89642250000000001 0.26474783333333335 -0.35449605555555552 -0.89426493531171236 0.26368231627218103 -0.36161009603891953 +-0.89129144444444464 0.30374238888888888 -0.33565233333333344 -0.8892663730069581 0.30269216918684994 -0.34290343910787618 +-0.87603155555555556 0.29838466666666674 -0.37797294444444451 -0.87886765169052439 0.3000127490976619 -0.37092317424346305 +-0.5057854444444444 0.79106966666666656 0.34309711111111119 -0.50254310485627729 0.79565803923597878 0.33819921992897944 +-0.52762177777777775 0.76363150000000002 0.37121527777777791 -0.52452973876924802 0.76844646073764278 0.36654957390025034 +-0.48765905555555555 0.78436955555555554 0.38245261111111117 -0.48444028196230066 0.78914488875012312 0.3775817233021781 +-0.50003249999999999 0.82104761111111113 0.27421316666666667 -0.49656662413084585 0.82520664647669439 0.26917573889558338 +-0.46030505555555562 0.84081005555555555 0.28371927777777783 -0.45672953304210201 0.84491246075498017 0.27842605357277111 +-0.47681055555555563 0.84404622222222236 0.2441187222222222 -0.47005080436070795 0.8475535991229256 0.24638412678909866 +-0.72557644444444458 0.68165338888888904 -0.090725516666666672 -0.72105509486109332 0.6864659302599132 -0.094042951714903678 +-0.70192883333333345 0.70862072222222239 -0.067195216666666668 -0.69751095274066943 0.71309750342112921 -0.070501215743817208 +-0.69672588888888898 0.70813105555555556 -0.11171258333333335 -0.69195648437214297 0.71271269042737062 -0.11505148690531221 +-0.77491783333333331 0.62473655555555563 -0.092368477777777791 -0.77075970402626304 0.62988728399471605 -0.095767886637991601 +-0.76921911111111108 0.62333266666666665 -0.1381342888888889 -0.76481502020556702 0.62851062850379158 -0.14153577189434138 +-0.79562366666666662 0.59403655555555568 -0.11584435555555558 -0.79155085388212953 0.59934077256701879 -0.11932260497173411 +-0.98331377777777784 0.040291861111111112 0.17546994444444444 -0.98244224734962893 0.040209691007927671 0.18218235746541839 +-0.97666327777777773 0.080235722222222222 0.19751805555555557 -0.97674161450646324 0.073679922287240324 0.20136307393127884 +-0.98436877777777798 0.080723238888888896 0.1543238333333333 -0.983642780484002 0.080574270691352937 0.16110452291682575 +-0.37261611111111104 0.89979483333333332 -0.22554461111111115 -0.37956775203557896 0.89751437565627668 -0.22449112923450021 +-0.39622099999999999 0.88076600000000005 -0.25934699999999999 -0.40223368750987282 0.88179261970450562 -0.24627187510325857 +-0.41344566666666671 0.8832078333333333 -0.21991544444444447 -0.41723471972029164 0.88019420978770013 -0.22621525526837433 +-0.95679477777777788 0.15844944444444448 0.24241494444444445 -0.957253922897494 0.15217835599473808 0.24598104614806704 +-0.95421688888888889 0.19824288888888891 0.22246183333333336 -0.95499795117042818 0.19203700464703574 0.22605464407191181 +-0.37261611111111104 0.89979483333333343 0.22554461111111115 -0.37956775203558119 0.8975143756562759 0.22449112923449988 +-0.38997550000000003 0.9014186666666667 0.18635077777777784 -0.39662205137890139 0.89905867934786887 0.18543041673160823 +-0.41344566666666666 0.8832078333333333 0.21991544444444447 -0.41723471972029319 0.88019420978770058 0.22621525526836977 +-0.96303733333333352 0.19968938888888893 0.17887027777777781 -0.96398392948964662 0.19340360573393062 0.18256513625228218 +-0.97425194444444441 0.16074688888888888 0.15589966666666666 -0.97502829927251367 0.15431448972348011 0.15970865311288363 +-0.31221199999999999 0.91105000000000003 0.26928099999999999 -0.32644642938062607 0.90667395833593711 0.26716111622031236 +-0.33565233333333339 0.89129144444444464 0.30374238888888888 -0.34290343910787563 0.88926637300695821 0.30269216918685032 +-0.29273399999999999 0.90520199999999995 0.30808400000000002 -0.31787609208756495 0.89960107400996148 0.29945399933756389 +-0.95535638888888885 0.27982527777777777 0.091030027777777786 -0.95716518902486225 0.27355642833602034 0.094877191331949579 +-0.96771327777777782 0.24127177777777781 0.067924161111111117 -0.96755210126393731 0.24120310120227606 0.075259519731021504 +-0.96367061111111119 0.24053788888888891 0.11303783333333334 -0.96513735744308149 0.23420596052008855 0.11686509027356488 +-0.64682927777777766 0.73032194444444454 0.21814144444444444 -0.64874952367319583 0.73115312556584411 0.2110430347324887 +-0.624302388888889 0.7565968333333335 0.19279794444444445 -0.62615345904453856 0.75720239315206705 0.18594725470235343 +-0.65756433333333342 0.73233366666666677 0.17507683333333332 -0.66362446493949456 0.72791769497020165 0.17244824986945503 +-0.65524111111111105 0.698701388888889 0.28600988888888895 -0.65750678879361879 0.6998853090603091 0.27900784371027831 +-0.68898294444444441 0.67292155555555566 0.26795866666666662 -0.69113884282724714 0.6740463509068223 0.2607462689370853 +-0.67509966666666676 0.66852522222222233 0.31085699999999999 -0.67752075050682159 0.6698155557091281 0.30383013998407898 +-0.94321855555555578 0.27717322222222224 -0.18115188888888892 -0.94228341902634183 0.27673948951092475 -0.188460110297273 +-0.9496837222222223 0.23785461111111114 -0.20207944444444448 -0.9486123289692856 0.23743102670925037 -0.20919167498554797 +-0.95764555555555553 0.23940283333333337 -0.15780855555555556 -0.95893043882721785 0.23316254644213033 -0.16151668776711828 +-0.96783372222222241 0.11967674444444446 0.21977572222222225 -0.96809524945160674 0.11324714670983058 0.2235322610973938 +-0.96644272222222227 0.15975088888888891 0.19946677777777783 -0.96704939341641916 0.15340151281042119 0.20318328317164736 +-0.97648983333333361 0.12052398888888888 0.17680266666666669 -0.97692227895306438 0.11401913169306778 0.18061699392114211 +-0.96303733333333341 0.19968938888888893 -0.17887027777777781 -0.96398392948964651 0.19340360573393262 -0.18256513625228082 +-0.95586661111111115 0.07874741111111111 0.28189122222222224 -0.95564244532252396 0.072305702707574748 0.28551602766561218 +-0.96433138888888892 0.039663483333333339 0.2604433333333333 -0.96389875161482486 0.033073058984768144 0.26420705782543358 +-0.95224977777777786 0.039161361111111119 0.30173377777777782 -0.95413490889433772 0.032630324035701881 0.29759340984389904 +-0.9764898333333335 0.12052398888888889 -0.17680266666666669 -0.97692227895306427 0.1140191316930719 -0.1806169939211397 +-0.98330661111111117 0.12116736666666666 -0.13317721111111111 -0.98272289727136297 0.12101573129925847 -0.14003892300601276 +-0.97425194444444441 0.16074688888888891 -0.15589966666666666 -0.97502829927251478 0.15431448972347411 -0.15970865311288251 +-0.73032194444444454 0.21814144444444444 0.64682927777777766 -0.73115312556584411 0.21104303473248867 0.64874952367319594 +-0.7565968333333335 0.19279794444444445 0.624302388888889 -0.75720239315206705 0.18594725470235343 0.62615345904453856 +-0.73233366666666688 0.17507683333333332 0.65756433333333342 -0.72791769497020065 0.17244824986945431 0.66362446493949578 +-0.698701388888889 0.28600988888888895 0.65524111111111105 -0.6998853090603091 0.27900784371027831 0.65750678879361879 +-0.67292155555555566 0.26795866666666662 0.68898294444444441 -0.6740463509068223 0.2607462689370853 0.69113884282724714 +-0.66852522222222233 0.31085699999999999 0.67509966666666676 -0.6698155557091281 0.30383013998407898 0.67752075050682159 +-0.79106966666666656 0.34309711111111119 0.5057854444444444 -0.79565803923597878 0.33819921992897944 0.50254310485627729 +-0.76363150000000002 0.37121527777777791 0.52762177777777775 -0.76844646073764267 0.36654957390025034 0.52452973876924791 +-0.78436955555555554 0.38245261111111117 0.48765905555555555 -0.78914488875012312 0.37758172330217804 0.4844402819623006 +-0.82104761111111113 0.27421316666666667 0.50003249999999999 -0.82520664647669439 0.26917573889558338 0.49656662413084585 +-0.84081005555555555 0.28371927777777783 0.46030505555555562 -0.84491246075498005 0.27842605357277106 0.45672953304210206 +-0.84404622222222236 0.2441187222222222 0.47681055555555563 -0.8475535991229256 0.2463841267890986 0.4700508043607079 +-0.77491783333333342 0.62473655555555563 0.092368477777777805 -0.77075970402626226 0.62988728399471738 0.095767886637989297 +-0.80010511111111116 0.59522733333333333 0.069672705555555561 -0.79627330233989702 0.60049897379372186 0.073142398466292349 +-0.79562366666666673 0.59403655555555568 0.11584435555555558 -0.79155085388212976 0.59934077256701879 0.11932260497173314 +-0.72557644444444447 0.68165338888888904 0.090725516666666672 -0.72105509486109276 0.68646593025991431 0.094042951714899278 +-0.71951088888888892 0.6806121666666668 0.1356845388888889 -0.71470545688293907 0.68547533361676682 0.13899524058301874 +-0.69672588888888898 0.70813105555555556 0.11171258333333335 -0.69195648437214397 0.71271269042736951 0.11505148690531325 +-0.78656727777777768 0.55215255555555565 0.2752216111111111 -0.78432765572944318 0.55767059215724202 0.27172346071133968 +-0.50003249999999999 0.82104761111111102 -0.27421316666666667 -0.49656662413084851 0.82520664647669129 -0.26917573889558782 +-0.51557805555555547 0.82379161111111121 -0.23432688888888892 -0.51207498812294594 0.82770762440957035 -0.22951970510862521 +-0.47681055555555563 0.84404622222222236 -0.2441187222222222 -0.47005080436070662 0.84755359912292727 -0.24638412678909538 +-0.65524111111111105 0.69870138888888889 -0.28600988888888895 -0.65750678879361957 0.69988530906030799 -0.27900784371027976 +-0.64035427777777787 0.69395927777777788 -0.32815500000000003 -0.64287001300191338 0.69530483951625921 -0.32135545199698878 +-0.67509966666666676 0.66852522222222233 -0.31085699999999999 -0.67752075050682214 0.66981555570912832 -0.30383013998407749 +-0.64682927777777777 0.73032194444444454 -0.21814144444444444 -0.64874952367319727 0.73115312556584311 -0.21104303473248823 +-0.67984705555555558 0.70512544444444458 -0.19986166666666666 -0.68162419148185194 0.70592110047367851 -0.19251976909590984 +-0.65756433333333331 0.73233366666666677 -0.17507683333333332 -0.66362446493949456 0.72791769497020165 -0.17244824986945492 +-0.99819400000000003 -0.0407719 0.044118600000000001 -0.99819601042639627 -0.040749912700656421 0.044092736178590025 +-0.99747061111111113 4.3368086899420177e-19 0.066027105555555562 -0.99733709501384338 0 0.072929547573996431 +-0.95620099999999997 -0.078785400000000005 0.28190999999999999 -0.95817725084869765 -0.053265830875932035 0.28117451381149139 +-0.94326100000000002 -0.077663399999999994 0.32284400000000002 -0.94534774934638066 -0.052625365478896312 0.32178906711376221 +-0.95256300000000005 -0.0391817 0.30181000000000002 -0.95266087931704746 -0.039145135259636005 0.30150440694022168 +-0.96783372222222241 0.11967674444444446 -0.21977572222222225 -0.9680952494516063 0.11324714670983051 -0.22353226109739607 +-0.97666327777777784 0.080235722222222236 -0.19751805555555557 -0.97674161450646313 0.073679922287236382 -0.20136307393128111 +-0.89979483333333343 0.22554461111111115 0.37261611111111104 -0.8975143756562759 0.22449112923449988 0.37956775203558119 +-0.9014186666666667 0.18635077777777784 0.38997550000000003 -0.89905867934786887 0.18543041673160823 0.39662205137890139 +-0.8832078333333333 0.21991544444444447 0.41344566666666666 -0.88019420978770058 0.2262152552683698 0.41723471972029325 +-0.91074705555555568 0.26913238888888891 0.31214400000000003 -0.90890151067891423 0.26821257009591437 0.31931185560221842 +-0.89129144444444464 0.30374238888888888 0.33565233333333339 -0.88926637300695821 0.30269216918685032 0.34290343910787563 +-0.90489361111111111 0.30796461111111118 0.29264711111111108 -0.90317325412482385 0.30710578259799148 0.29994017958328173 +-0.93984338888888896 0.23587238888888892 -0.2457178888888889 -0.93848222466552245 0.23528226001218033 -0.2527713830923361 +-0.93423205555555544 0.27510183333333332 -0.22547750000000003 -0.93299691132387008 0.27452654359661416 -0.23270569464672533 +-0.56711966666666669 0.66111644444444462 0.49050405555555554 -0.56452772540213347 0.6668985735573979 0.48636893387571661 +-0.58730288888888893 0.67152450000000008 0.45102994444444444 -0.59056908713658951 0.67344595022976195 0.44463322574655667 +-0.60485722222222216 0.63779350000000001 0.4760900555555555 -0.60826718780552425 0.6398682649724019 0.46965905902086796 +-0.50647611111111113 0.67072122222222219 0.54121055555555564 -0.51023515849226175 0.67307634610093736 0.53537679755270284 +-0.52353366666666667 0.6358801111111112 0.56644616666666658 -0.52745385244712384 0.63835601474096837 0.56061932894140942 +-0.4838222777777777 0.65672061111111113 0.57786500000000007 -0.48025504911159195 0.65454711840138768 0.58388625398724892 +-0.95027572222222223 0.27875183333333337 0.13627303888888889 -0.95190385015274304 0.2725334103925558 0.1400164286224547 +-0.94094172222222217 0.31756222222222219 0.11435316111111113 -0.94045905207604241 0.31729857015080781 0.12189499066198242 +-0.96973972222222227 0.24163083333333338 0.022653605555555557 -0.96989002921873224 0.24169057243838762 0.029983302294629699 +-0.95944188888888882 0.28064922222222222 -8.6736173798840355e-19 -0.95974596445858973 0.28077100056951243 0.0074383428696254261 +-0.96973972222222227 0.24163083333333335 -0.022653605555555557 -0.96989002921873124 0.24169057243839118 -0.029983302294631926 +-0.96644272222222238 0.15975088888888891 -0.19946677777777783 -0.96704939341641927 0.15340151281041914 -0.2031832831716486 +-0.99006766666666668 0.040503216666666675 -0.13204949444444447 -0.98948701311988696 0.04043885459061921 -0.1388529794656328 +-0.66111644444444462 0.49050405555555554 0.56711966666666669 -0.6668985735573979 0.48636893387571667 0.56452772540213347 +-0.67152450000000008 0.45102994444444444 0.58730288888888893 -0.67344595022976195 0.44463322574655667 0.59056908713658951 +-0.63779350000000001 0.4760900555555555 0.60485722222222216 -0.6398682649724019 0.46965905902086791 0.60826718780552425 +-0.67072122222222219 0.54121055555555564 0.50647611111111113 -0.67307634610093725 0.53537679755270273 0.51023515849226175 +-0.6358801111111112 0.56644616666666658 0.52353366666666667 -0.63835601474096826 0.56061932894140942 0.52745385244712384 +-0.65672061111111113 0.57786500000000007 0.4838222777777777 -0.65454711840138768 0.58388625398724892 0.48025504911159195 +-0.64035427777777787 0.69395927777777788 0.32815499999999997 -0.64287001300191315 0.6953048395162591 0.32135545199698912 +-0.73992438888888878 0.61438050000000011 0.27269055555555555 -0.7373851635856099 0.6195772546503151 0.26904859420521371 +-0.80235455555555568 0.59582316666666668 -0.023256572222222223 -0.79877755276154783 0.60103244931884436 -0.026728562813277134 +-0.8247917777777779 0.56482677777777779 3.4694469519536142e-18 -0.82151047318435655 0.57018244527269668 -0.0035385804022389994 +-0.80235455555555568 0.59582316666666668 0.023256572222222223 -0.79877755276154783 0.60103244931884436 0.026728562813277141 +-0.88468250000000004 0.46485238888888897 0.023322827777777777 -0.88182388447972637 0.47080328419964923 0.027035242701159701 +-0.86605422222222228 0.49924655555555564 0 -0.86311060816384377 0.50500169952881668 0.0036553451337094441 +-0.88468250000000004 0.46485238888888897 -0.023322827777777777 -0.88182388447972548 0.47080328419965073 -0.027035242701160731 +-0.82368444444444444 0.56451983333333344 0.046607672222222223 -0.82016277944795324 0.56992861274242324 0.050143709333325626 +-0.89835083333333332 0.42852916666666674 0.092856011111111122 -0.89623954506098191 0.4345120044881825 0.089185177157113285 +-0.91652922222222222 0.3929955 0.069433894444444436 -0.91913774448605823 0.38708765318025906 0.073136553217121647 +-0.91235211111111114 0.39187466666666665 0.11550940000000001 -0.91477173011535795 0.38599423501553781 0.11916850387801492 +-0.81494088888888883 0.56195327777777782 0.13924307777777778 -0.81227206434124521 0.56726128730849124 0.13575244164259204 +-0.82038388888888891 0.56357805555555562 0.093063277777777786 -0.81661364964159788 0.56904227675642394 0.096607631597587007 +-0.92338244444444451 0.27248327777777781 0.26913955555555563 -0.92184936072310664 0.27174562074120051 0.27631155195246443 +-0.86203900000000011 0.37568711111111114 0.33920450000000002 -0.86363598405927311 0.36991552503825798 0.34248414762385859 +-0.49050405555555554 0.56711966666666669 0.66111644444444451 -0.48636893387571756 0.56452772540213403 0.66689857355739679 +-0.45102994444444444 0.58730288888888893 0.67152450000000008 -0.44463322574655667 0.59056908713658951 0.67344595022976195 +-0.4760900555555555 0.60485722222222216 0.63779350000000001 -0.46965905902086791 0.60826718780552425 0.6398682649724019 +-0.54121055555555564 0.50647611111111113 0.67072122222222219 -0.53537679755270284 0.51023515849226175 0.67307634610093725 +-0.56644616666666658 0.52353366666666667 0.6358801111111112 -0.56061932894140942 0.52745385244712384 0.63835601474096826 +-0.57786500000000007 0.4838222777777777 0.65672061111111113 -0.58388625398724892 0.48025504911159195 0.65454711840138768 +-0.69395927777777788 0.32815499999999997 0.64035427777777787 -0.6953048395162591 0.32135545199698912 0.64287001300191315 +-0.94094172222222217 0.31756222222222225 -0.11435316111111113 -0.94045905207604263 0.31729857015080559 -0.12189499066198595 +-0.95027572222222234 0.27875183333333331 -0.13627303888888889 -0.95190385015274481 0.27253341039255036 -0.14001642862245339 +-0.95535638888888885 0.27982527777777777 -0.091030027777777786 -0.95716518902486247 0.27355642833602062 -0.0948771913319474 +-0.91235211111111125 0.39187466666666665 -0.11550940000000001 -0.91477173011535851 0.38599423501553598 -0.1191685038780165 +-0.91652922222222233 0.3929955 -0.069433894444444436 -0.91913774448605945 0.38708765318025523 -0.073136553217128294 +-0.89835083333333332 0.42852916666666674 -0.092856011111111122 -0.89623954506098191 0.43451200448818261 -0.089185177157113285 +-0.80010511111111116 0.59522733333333344 -0.069672705555555561 -0.79627330233989702 0.60049897379372186 -0.073142398466292322 +-0.4358711111111111 0.62442638888888902 0.64761527777777772 -0.42928358067523403 0.62760205669194258 0.64948538536189837 +-0.82153555555555557 0.40071994444444453 -0.40474005555555553 -0.82320169950934585 0.39490639915993836 -0.40790672687203405 +-0.99041400000000002 -0.040517699999999997 0.132054 -0.99042909148993497 -0.04051431091004682 0.13194243192357052 +-0.56133844444444447 0.42479211111111115 0.70975300000000008 -0.56719427102722186 0.42132562890847369 0.70765484053935324 +-0.53398199999999996 0.40546199999999999 0.74193200000000004 -0.53397837221050581 0.40543538767229781 0.74194962391959751 +-0.52507777777777787 0.44720294444444453 0.72360344444444447 -0.51941111443434562 0.45085647129555212 0.72590669957852993 +-0.46609872222222221 0.69092183333333346 0.5519736111111111 -0.46989818633218622 0.69334219789485718 0.54632617647340553 +-0.49740499999999999 0.42735899999999999 0.75495199999999996 -0.51763609454963999 0.43389420237286375 0.73742029722988534 +-0.5153523333333333 0.58407477777777783 0.62654744444444443 -0.50911507635325803 0.58771939724963429 0.62879865547434399 +-0.82239377777777778 0.077432127777777776 0.56315938888888883 -0.82613650039064546 0.080398337452212434 0.55770475168965261 +-0.82425750000000009 0.11595597777777779 0.55371011111111113 -0.82053882523414667 0.11428260274874391 0.56004957190621907 +-0.84287483333333346 0.090090038888888904 0.5300206111111111 -0.83941259596801754 0.088609226336890029 0.53622280699184321 +-0.47306938888888894 0.87807233333333345 0.068336577777777782 -0.46908926454127209 0.88090318231058062 0.062967017455332425 +-0.43775477777777783 0.89592177777777793 0.071664577777777794 -0.43362364391765301 0.8986751481339238 0.065981160660045099 +-0.45258822222222228 0.89073005555555573 0.035197772222222222 -0.45581496567353391 0.88910748916776128 0.041479992452199257 +-0.53002061111111121 0.84287483333333346 0.09009003888888889 -0.53622280699184433 0.83941259596801687 0.088609226336889613 +-0.53958305555555564 0.83994238888888895 0.053591199999999999 -0.53429480758391557 0.84339957803099685 0.056623408286707637 +-0.56315938888888883 0.82239377777777778 0.077432127777777776 -0.55770475168965272 0.82613650039064557 0.080398337452212448 +-0.70192883333333345 0.70862072222222239 0.067195216666666668 -0.69751095274066921 0.7130975034211291 0.070501215743818985 +-0.8931122777777778 0.42701350000000005 -0.13894826111111114 -0.89564957242998078 0.42129340791696046 -0.14256124245988541 +-0.90257966666666678 0.42970011111111112 8.6736173798840355e-19 -0.90005851818586091 0.43575291050450649 0.0037503103770103233 +-0.82439899999999999 0.52567461111111113 0.20817311111111114 -0.82213680993551475 0.53122525675781596 0.20467240246708407 +-0.5300206111111111 0.84287483333333346 -0.09009003888888889 -0.53622280699184521 0.8394125959680161 -0.088609226336890765 +-0.55371011111111124 0.82425750000000009 -0.11595597777777779 -0.56004957190622195 0.82053882523414523 -0.11428260274874001 +-0.56315938888888895 0.82239377777777778 -0.077432127777777776 -0.55770475168965028 0.82613650039064712 -0.080398337452213448 +-0.47306938888888894 0.87807233333333345 -0.068336577777777782 -0.46908926454127453 0.88090318231057907 -0.062967017455336172 +-0.48599188888888895 0.87306355555555581 -0.033121194444444439 -0.48194957352007178 0.87575003239765647 -0.028044417257712936 +-0.45258822222222228 0.89073005555555573 -0.035197772222222215 -0.45581496567353269 0.88910748916776217 -0.041479992452193047 +-0.43775477777777777 0.89592177777777793 -0.071664577777777794 -0.43362364391764874 0.89867514813392568 -0.06598116066004614 +-0.485991888888889 0.87306355555555581 0.033121194444444439 -0.48194957352007262 0.87575003239765581 0.028044417257714328 +-0.51557805555555547 0.82379161111111132 0.23432688888888892 -0.51207498812294627 0.82770762440957002 0.2295197051086256 +-0.39612783333333335 0.880473888888889 0.25920594444444445 -0.40319950283254841 0.87799809680948804 0.25797190334317915 +-0.69092183333333346 0.5519736111111111 0.46609872222222221 -0.69334219789485718 0.54632617647340553 0.46989818633218622 +-0.58407477777777783 0.62654744444444443 0.5153523333333333 -0.5877193972496344 0.62879865547434399 0.50911507635325792 +-0.40622622222222227 0.78411972222222215 0.46844483333333348 -0.40963750855607428 0.78616289348646995 0.46275805394282826 +-0.46547666666666665 0.81105588888888891 0.35333055555555559 -0.46212227964670521 0.81558482025617562 0.34823038296770442 +-0.711168388888889 0.60370305555555559 -0.35928411111111108 -0.70881159047278552 0.60918489551154165 -0.35564011625804004 +-0.69377355555555564 0.63683855555555546 -0.33529638888888891 -0.6912585790657676 0.64204640936345925 -0.33156897486264497 +-0.89073005555555573 -0.035197772222222215 0.45258822222222228 -0.88910748916776217 -0.041479992452193047 0.45581496567353269 +-0.89619499999999996 -0.071726300000000007 0.43782399999999999 -0.89067417773946056 -0.052628282973310257 0.45158584227078807 +-0.87835700000000005 -0.0685534 0.47306399999999998 -0.88774953587747929 -0.053226208668133886 0.45723925056816422 +-0.89073005555555573 0.035197772222222222 0.45258822222222228 -0.88910748916776128 0.041479992452199257 0.45581496567353391 +-0.87807233333333345 0.068336577777777782 0.47306938888888894 -0.88090318231058062 0.062967017455332425 0.46908926454127209 +-0.82379161111111132 0.23432688888888892 0.51557805555555547 -0.82770762440957002 0.2295197051086256 0.51207498812294627 +-0.880473888888889 0.25920594444444445 0.39612783333333335 -0.87799809680948804 0.25797190334317915 0.40319950283254841 +-0.5519736111111111 0.46609872222222221 0.69092183333333346 -0.54632617647340553 0.46989818633218622 0.69334219789485718 +-0.62654744444444443 0.5153523333333333 0.58407477777777783 -0.62879865547434399 0.50911507635325803 0.58771939724963429 +-0.78411972222222215 0.46844483333333348 0.40622622222222227 -0.78616289348646995 0.46275805394282826 0.40963750855607428 +-0.81105588888888891 0.35333055555555559 0.46547666666666665 -0.81558482025617562 0.34823038296770442 0.46212227964670521 +-0.89592177777777793 0.071664577777777794 0.43775477777777783 -0.8986751481339238 0.065981160660045099 0.43362364391765301 +-0.83994238888888895 0.053591199999999999 0.53958305555555564 -0.84339957803099685 0.056623408286707637 0.53429480758391557 +-0.70512544444444458 0.19986166666666666 0.67984705555555558 -0.70592110047367851 0.19251976909590959 0.68162419148185194 +-0.83973833333333325 0.49078361111111107 -0.23081177777777778 -0.83775605369134032 0.49646004234455926 -0.22735923306246128 +-0.86369744444444452 0.45838005555555555 -0.20788044444444445 -0.86616824898877942 0.45283443719162664 -0.21140845994674545 +-0.84908077777777791 0.49396133333333336 -0.1853765 -0.84692766994819901 0.49963695682834108 -0.18186927516056414 +-0.55371011111111113 0.82425750000000009 0.11595597777777779 -0.56004957190621907 0.82053882523414667 0.11428260274874391 +-0.87200361111111102 0.46106205555555557 -0.16226505555555554 -0.86995444403255973 0.46689328756781862 -0.15871333696987769 +-0.59835688888888905 0.80064005555555551 0.020480877777777781 -0.5991896414003286 0.80049706100696916 0.013275125526715529 +-0.57270422222222228 0.81947233333333336 -8.6736173798840355e-19 -0.5735872855835541 0.81911495734337958 -0.0069507174625364045 +-0.59835688888888883 0.80064005555555551 -0.020480877777777781 -0.59918964140033348 0.80049706100696572 -0.013275125526717843 +-0.8825426666666667 0.46425161111111113 -0.069884822222222226 -0.88011186107951001 0.47012486878554144 -0.066224766791123171 +-0.87829933333333354 0.46300900000000006 -0.11622905 -0.87607134551440624 0.46884628063085088 -0.1126151086985905 +-0.624302388888889 0.7565968333333335 -0.19279794444444445 -0.62615345904453978 0.75720239315206739 -0.1859472547023478 +-0.71951088888888892 0.68061216666666668 -0.1356845388888889 -0.7147054568829414 0.68547533361676471 -0.13899524058301724 +-0.83280549999999987 0.52852688888888888 0.16247072222222222 -0.83037664881265683 0.53405020478723775 0.15894967717290617 +-0.74305750000000004 0.57594661111111112 -0.33978666666666668 -0.74080593120528382 0.58149597524355545 -0.33625734648720862 +-0.62537444444444457 0.77996644444444463 0 -0.62603508949674114 0.7797587322640509 -0.0075090729632497711 +-0.53958305555555564 0.83994238888888895 -0.053591199999999992 -0.53429480758391767 0.8433995780309953 -0.056623408286708275 +-0.38997550000000003 0.9014186666666667 -0.18635077777777784 -0.39662205137890161 0.89905867934786865 -0.18543041673160862 +-0.46030505555555556 0.84081005555555555 -0.28371927777777778 -0.45672953304209885 0.84491246075498116 -0.27842605357277289 +-0.90171000000000001 0.186445 -0.39007399999999998 -0.9038809409702484 0.20048051156713187 -0.37789788175182909 +-0.97898699999999994 0.20218977777777783 -4.3368086899420177e-19 -0.97929648237017142 0.20230232976455795 0.0072226718906903053 +-0.86546133333333342 0.41817277777777773 -0.27461266666666667 -0.86749023845332174 0.41249033814465791 -0.27805108725826749 +-0.87339500000000003 -0.033321999999999997 0.48587200000000003 -0.87367088892648037 -0.033743519155176947 0.48534580739657968 +-0.94294766666666674 0.077626622222222233 0.32278083333333335 -0.94262834940122764 0.07135509696899317 0.32612918459049767 +-0.96466700000000005 -0.039690499999999997 0.26046599999999998 -0.96472569046805723 -0.039644748009948889 0.26025494444132652 +-0.89311227777777791 0.42701350000000005 0.13894826111111114 -0.89564957242998122 0.42129340791695913 0.14256124245988619 +-0.94505249999999996 0.31850488888888884 0.068722372222222217 -0.9448795263923121 0.31840610421006571 0.076290454228617133 +-0.99411955555555553 0.081341644444444444 0.066439672222222232 -0.99398268732725292 0.081323487946983145 0.073381929668205947 +-0.45955061111111112 0.8816102222222223 -0.10493664999999999 -0.45553358346714973 0.88463172112154209 -0.099578473171240856 +-0.99642699999999995 -0.0815086 0.022148600000000001 -0.9982313602512044 -0.055201045773037569 0.022067984878397 +-0.81401994444444459 0.52202088888888898 0.2533192222222222 -0.81193152544177405 0.52755677138547286 0.24990208274268105 +-0.83973833333333325 0.49078361111111107 0.23081177777777778 -0.83775605369134021 0.49646004234455948 0.22735923306246097 +-0.85343011111111111 0.45493894444444438 0.25296472222222222 -0.85573175535963186 0.44940153143522182 0.25643990799561706 +-0.84128666666666674 0.45063644444444445 0.29743761111111111 -0.84342171315466552 0.44511058846660512 0.30085939874659323 +-0.54250855555555544 0.82523066666666689 -0.15520044444444447 -0.5490152625132082 0.82162400177332173 -0.1533500610940399 +-0.56619688888888908 0.8034865555555557 -0.18225488888888894 -0.56010282149941726 0.80750215514867851 -0.18500026696908106 +-0.57758122222222219 0.80355477777777773 -0.14180361111111112 -0.57172393337095639 0.80758849978511515 -0.14468088687062031 +-0.36350300000000002 0.80080300000000004 0.47600300000000001 -0.37709824426838934 0.80251597899346994 0.46234729114579093 +-0.38492900000000002 0.77221600000000001 0.50548199999999999 -0.39921854218209168 0.76702783163088317 0.50228762784049441 +-0.66640616666666674 0.73343161111111121 -0.13171617222222221 -0.6678451032873397 0.73382922312113597 -0.12440895992070952 +-0.63459266666666669 0.75765061111111109 -0.15045633333333333 -0.62911940905974673 0.76199464803136974 -0.15353476972941341 +-0.80052966666666681 0.47582533333333332 0.36338350000000003 -0.80265774097767739 0.47030346706533316 0.36681766548918965 +-0.45328572222222224 0.86514772222222236 -0.21312050000000002 -0.46005659684907169 0.86225232066584634 -0.21182271644470294 +-0.42970200000000003 0.88428033333333345 -0.18106466666666671 -0.42581966140360406 0.88764058984003402 -0.17541892494983652 +-0.7732636111111113 0.54721044444444444 -0.31926572222222227 -0.77115959471535711 0.55276167927063913 -0.31585978757725619 +-0.75826000000000005 0.54113988888888886 -0.36264583333333333 -0.75622976135463549 0.54684065776048796 -0.35927961681897308 +-0.77195166666666681 0.50529522222222234 -0.38479933333333333 -0.77420418144639258 0.49978933334325532 -0.38835358593326469 +-0.80052966666666681 0.47582533333333338 -0.36338349999999997 -0.8026577409776775 0.4703034670653331 -0.36681766548918937 +-0.84128666666666674 0.45063644444444445 -0.29743761111111111 -0.84342171315466585 0.44511058846660456 -0.30085939874659323 +-0.85343011111111111 0.45493894444444438 -0.25296472222222222 -0.85573175535963197 0.44940153143522266 -0.25643990799561533 +-0.81401994444444459 0.52202088888888898 -0.2533192222222222 -0.81193152544177405 0.52755677138547252 -0.24990208274268152 +-0.99784694444444455 0.040756905555555556 0.044118144444444451 -0.99786818088871454 0.040763292286846671 0.050965160372401994 +-0.9960796666666667 0.081478161111111114 0.022153288888888897 -0.99624697878379498 0.081522902500506297 0.029085625866631565 +-0.99607966666666681 0.081478161111111114 -0.022153288888888893 -0.99624697878379476 0.081522902500508282 -0.029085625866632773 +-0.99784694444444455 0.040756905555555563 -0.044118144444444445 -0.99786818088871432 0.040763292286850716 -0.050965160372404512 +-0.95679477777777766 0.15844944444444448 -0.24241494444444445 -0.957253922897494 0.15217835599473786 -0.24598104614806679 +-0.954216888888889 0.19824288888888889 -0.22246183333333336 -0.95499795117042829 0.19203700464703405 -0.22605464407191309 +-0.92819838888888895 0.23331588888888891 -0.28868505555555557 -0.92653611314773354 0.23259507848721434 -0.29568625347928651 +-0.6199285555555557 0.7234788333333334 0.30264644444444444 -0.62233405661673558 0.72465725446077867 0.29592597981982599 +-0.6041117222222222 0.71834377777777791 0.34402016666666668 -0.60673787304411819 0.71971741204167938 0.33745518253232804 +-0.72937694444444445 0.68212288888888883 0.045444011111111113 -0.7251653919144494 0.68684049960043503 0.048839353785526264 +-0.70469933333333346 0.70870400000000022 0.022429688888888889 -0.70056916549628245 0.71311852774715345 0.02578390466113795 +-0.70469933333333346 0.70870400000000011 -0.022429688888888886 -0.70056916549628256 0.71311852774715345 -0.025783904661137932 +-0.72937694444444456 0.68212288888888895 -0.045444011111111113 -0.72516539191444929 0.68684049960043514 -0.048839353785527999 +-0.30377100000000001 0.94550800000000002 0.117211 -0.32105083824403247 0.93915655663412101 0.12211192158812767 +-0.32284400000000002 0.94326100000000002 0.077663399999999994 -0.33612594684296987 0.93866728579618708 0.076961512686122849 +-0.34437450000000003 0.93139666666666665 0.11520171666666668 -0.34755386944931477 0.93129562037784208 0.1090631711250817 +-0.97798022222222236 0.20204100000000003 0.045058005555555565 -0.97798063649741107 0.2020444956319952 0.052267546536367566 +-0.3668042222222222 0.91753444444444443 0.15149372222222224 -0.37332295099127616 0.91536790224266051 0.15076994994705142 +-0.34918150000000003 0.91709716666666674 0.19066583333333337 -0.35599575378580972 0.91500169554972122 0.18983919623620527 +-0.53871111111111103 0.79996133333333364 0.26305961111111109 -0.53532151268631545 0.80417342765022815 0.25833307244044129 +-0.55320488888888897 0.8023326666666668 0.22269266666666671 -0.54979059721433254 0.80630565401481535 0.2181776604477379 +-0.92819838888888895 0.23331588888888891 0.28868505555555551 -0.92653611314773454 0.23259507848721248 0.29568625347928484 +-0.93984338888888908 0.23587238888888895 0.2457178888888889 -0.93848222466552222 0.23528226001218258 0.25277138309233488 +-0.79996133333333364 0.26305961111111109 0.53871111111111103 -0.80417342765022815 0.25833307244044129 0.53532151268631545 +-0.8023326666666668 0.22269266666666671 0.55320488888888897 -0.80630565401481535 0.2181776604477379 0.54979059721433254 +-0.77990294444444475 0.20883044444444446 0.58949688888888896 -0.78052499673159592 0.20224086398833821 0.59150601215067355 +-0.75451727777777788 0.23497366666666666 0.61224105555555552 -0.75533943219617805 0.22816291194908692 0.61433218032304682 +-0.7234788333333334 0.30264644444444444 0.6199285555555557 -0.72465725446077867 0.29592597981982599 0.62233405661673558 +-0.77837733333333348 0.62555188888888902 -0.046270227777777784 -0.77450865557375925 0.63060662611129537 -0.049715445747341026 +-0.77837733333333337 0.62555188888888902 0.046270227777777784 -0.77450865557375959 0.63060662611129514 0.049715445747339361 +-0.61224105555555552 0.75451727777777788 -0.23497366666666666 -0.61433218032304682 0.75533943219617805 -0.22816291194908686 +-0.58949688888888896 0.77990294444444463 -0.20883044444444446 -0.59150601215067311 0.7805249967315957 -0.20224086398834018 +-0.55320488888888897 0.8023326666666668 -0.22269266666666671 -0.54979059721433254 0.80630565401481535 -0.2181776604477379 +-0.53871111111111114 0.79996133333333352 -0.26305961111111109 -0.53532151268631711 0.80417342765022692 -0.25833307244044157 +-0.54506144444444438 0.76974894444444464 -0.33124288888888892 -0.54190948364203873 0.77435972940169739 -0.3266513753526053 +-0.52779399999999999 0.76387899999999997 -0.37137900000000001 -0.5396206568579901 0.76298284461056509 -0.35590269108581013 +-0.56648211111111113 0.74160044444444451 -0.35839366666666667 -0.56349687759284484 0.7464457535431317 -0.35396328335088789 +-0.34923799999999999 0.917408 -0.190778 -0.36295919339829508 0.9124818649282449 -0.18877889210590018 +-0.32284400000000002 0.94326100000000002 -0.077663399999999994 -0.33612594684296643 0.93866728579618819 -0.076961512686125153 +-0.30377100000000001 0.94550800000000002 -0.117211 -0.32417934117557873 0.93881742394656642 -0.11631680553256618 +-0.91709716666666674 0.19066583333333337 -0.34918149999999998 -0.91500169554972055 0.18983919623620713 -0.35599575378581039 +-0.91784500000000002 0.15160399999999999 -0.36684600000000001 -0.92290412972690916 0.15945187513042228 -0.35046122018050518 +-0.94518311111111109 0.11713587777777779 0.30373750000000005 -0.94517851330077696 0.11083824185051343 0.30716845889189226 +-0.93139666666666665 0.11520171666666668 0.34437450000000003 -0.93129562037784208 0.1090631711250817 0.34755386944931477 +-0.91753444444444443 0.15149372222222224 0.3668042222222222 -0.91536790224266051 0.15076994994705142 0.37332295099127616 +-0.91709716666666674 0.19066583333333337 0.34918150000000003 -0.91500169554972122 0.18983919623620527 0.35599575378580972 +-0.56851399999999996 0.70381577777777782 0.42513244444444448 -0.56570987441492659 0.70912983566843601 0.42084107945197674 +-0.54890888888888878 0.69428805555555562 0.46471572222222218 -0.54614778938415753 0.69982807056515794 0.46039468263637262 +-0.410862 0.60649699999999995 0.680701 -0.42136567169173189 0.60657147442589543 0.67418248058857977 +-0.88585416666666672 0.4248007222222222 -0.18467527777777779 -0.88820631455867338 0.41910872685926326 -0.18824828777045036 +-0.87661705555555558 0.42187050000000004 -0.22993105555555557 -0.87879755235776458 0.41620240027572308 -0.23343184010483425 +-0.95764555555555553 0.23940283333333337 0.15780855555555556 -0.95893043882721862 0.2331625464421283 0.16151668776711708 +-0.89724905555555567 0.3464673333333334 -0.27242100000000002 -0.89882246463749604 0.34067182429932968 -0.27579137983545454 +-0.88781094444444453 0.38452083333333342 -0.25147144444444447 -0.88969484040035252 0.37874946869363357 -0.25493515043885479 +-0.96367061111111119 0.24053788888888891 -0.11303783333333334 -0.96513735744308149 0.23420596052008852 -0.11686509027356483 +-0.89947383333333342 0.10931593333333332 0.42238088888888892 -0.90236353428698479 0.10344279183327305 0.41837739041066713 +-0.91612616666666669 0.11263961111111111 0.38394200000000006 -0.91886656680883305 0.10654941584502681 0.37990979769417871 +-0.91287011111111127 0.074242938888888887 0.40070494444444449 -0.91103886545158841 0.080736581472007338 0.40433870708713571 +-0.92859111111111126 0.076199844444444456 0.36234955555555559 -0.92689685591902893 0.082802957133127394 0.36606814772310975 +-0.70381577777777782 0.42513244444444448 0.56851399999999996 -0.70912983566843601 0.42084107945197674 0.56570987441492659 +-0.69428805555555562 0.46471572222222218 0.54890888888888878 -0.69982807056515794 0.46039468263637262 0.54614778938415753 +-0.94655277777777791 8.6736173798840355e-19 0.3215696111111111 -0.9456570726767769 -0.0065172944522050528 0.32510033185066461 +-0.93871544444444444 0.03855203888888889 0.3416245555555556 -0.93740915282173265 0.045125010304282447 0.34529380772188761 +-0.62442638888888902 0.64761527777777772 0.4358711111111111 -0.62760205669194258 0.64948538536189837 0.42928358067523403 +-0.60628444444444429 0.68047233333333346 0.4107060555555555 -0.60930378779273198 0.68218770964937192 0.40418909310466744 +-0.62399500000000008 0.68793472222222229 0.36971155555555557 -0.62676292798033717 0.68945393975167257 0.36307230281365693 +-0.65963700000000003 0.66292483333333341 0.35315727777777778 -0.66230302078762238 0.66440626695154015 0.34629325880113365 +-0.44720294444444453 0.72360344444444447 0.52507777777777787 -0.45085647129555212 0.72590669957852993 0.51941111443434562 +-0.40531733333333336 0.74167483333333351 0.53379438888888886 -0.4019788435156959 0.73972208925562644 0.53965196194684129 +-0.42721033333333341 0.75469172222222214 0.49722505555555557 -0.43072346248779858 0.75686579003687127 0.49156024527455899 +-0.84568794444444451 0.5325131111111111 0.023343438888888894 -0.84245686591734525 0.53808947533701124 0.026947088901479895 +-0.86496422222222225 0.49895488888888889 0.046672377777777788 -0.86180051139229774 0.5047430257743023 0.050342392634600892 +-0.93482588888888907 0.31605533333333335 0.15971061111111112 -0.9340282709467429 0.3156486955681746 0.16720373817097367 +-0.94321855555555567 0.27717322222222224 0.18115188888888892 -0.9422834190263415 0.27673948951092692 0.18846011029727186 +-0.93423205555555544 0.27510183333333332 0.22547750000000003 -0.93299691132386953 0.27452654359661405 0.23270569464672752 +-0.91673538888888906 0.31132633333333337 0.24896333333333337 -0.91532388527674813 0.31061812165517827 0.25631731806744401 +-0.42529400000000001 0.56871099999999997 0.70405399999999996 -0.43584136078128521 0.56866322048988804 0.69761339572458492 +-0.46471572222222218 0.54890888888888878 0.69428805555555562 -0.46039468263637262 0.54614778938415753 0.69982807056515794 +-0.64761527777777772 0.4358711111111111 0.62442638888888902 -0.64948538536189837 0.42928358067523403 0.62760205669194258 +-0.68047233333333346 0.4107060555555555 0.60628444444444429 -0.68218770964937192 0.40418909310466744 0.60930378779273198 +-0.66292483333333341 0.35315727777777778 0.65963700000000003 -0.66440626695154015 0.34629325880113365 0.66230302078762238 +-0.91673538888888906 0.31132633333333343 -0.24896333333333337 -0.91532388527674802 0.31061812165517827 -0.25631731806744434 +-0.93482588888888907 0.31605533333333341 -0.15971061111111112 -0.93402827094674179 0.31564869556817543 -0.16720373817097822 +-0.86496422222222225 0.49895488888888889 -0.046672377777777781 -0.86180051139229819 0.50474302577430152 -0.050342392634600462 +-0.84568794444444451 0.5325131111111111 -0.023343438888888891 -0.84245686591734625 0.53808947533700968 -0.026947088901478889 +-0.82368444444444444 0.56451983333333344 -0.046607672222222229 -0.82016277944795324 0.56992861274242324 -0.050143709333323697 +-0.82038388888888891 0.56357805555555562 -0.093063277777777773 -0.81661364964159877 0.56904227675642238 -0.096607631597588006 +-0.60628444444444451 0.68047233333333335 -0.4107060555555555 -0.60930378779273187 0.68218770964937325 -0.40418909310466544 +-0.58750899999999995 0.67174800000000001 -0.451208 -0.59712328610831344 0.67644013040989115 -0.43112936707937061 +-0.62464600000000003 0.64783599999999997 -0.43603399999999998 -0.63056376625946575 0.65114486100355962 -0.42237389439847339 +-0.42479211111111115 0.70975300000000008 0.56133844444444447 -0.42132562890847369 0.70765484053935324 0.56719427102722186 +-0.44313827777777781 0.67625838888888889 0.58787722222222216 -0.43953860770040559 0.67402691765197176 0.59371165275861892 +-0.96771327777777782 0.24127177777777781 -0.067924161111111117 -0.96755210126393754 0.24120310120227617 -0.075259519731019187 +-0.5149719444444445 0.488196388888889 0.70410561111111114 -0.50913871292513224 0.49181063499169769 0.70632858522786901 +-0.75765061111111109 0.15045633333333333 0.63459266666666669 -0.76199464803136652 0.1535347697294133 0.62911940905975061 +-0.78098961111111131 0.16742283333333338 0.60117361111111101 -0.785188590802534 0.17037521088438604 0.59535801362678575 +-0.78904427777777775 0.59209005555555561 0.16171811111111109 -0.78629297372174234 0.59725247015776106 0.15821771824379238 +-0.80355477777777784 0.14180361111111112 0.57758122222222219 -0.80758849978511771 0.14468088687062342 0.57172393337095218 +-0.80277855555555566 0.10144869444444445 0.5871036111111112 -0.80666135127872451 0.10456041474826064 0.58169114143233591 +-0.42970200000000003 0.88428033333333345 0.18106466666666671 -0.4258196614036035 0.88764058984003447 0.17541892494983571 +-0.40647822222222235 0.90131850000000013 0.14760150000000002 -0.40247103169275233 0.90439818266630467 0.14170743042641337 +-0.42238088888888892 0.89947383333333342 0.10931593333333332 -0.41837739041066713 0.90236353428698479 0.10344279183327305 +-0.45955061111111112 0.8816102222222223 0.10493664999999999 -0.45553358346714756 0.88463172112154309 0.09957847317124123 +-0.68933433333333349 0.70698838888888893 -0.15598661111111112 -0.69503727204225441 0.70247712477229041 -0.15313092321186206 +-0.62369722222222224 0.78016216666666671 0.042238155555555559 -0.62470401263738684 0.78007890288869608 0.034954282466044873 +-0.65182450000000014 0.75766966666666669 0.021676222222222225 -0.65246590588010478 0.75768815115089549 0.014032365074783662 +-0.67737388888888894 0.73389566666666672 0.044128638888888891 -0.67815638521793087 0.73401541893978217 0.036404422077621408 +-0.67314488888888901 0.73382466666666668 0.088077566666666662 -0.67424393756459622 0.73410544350889673 0.08052521634863645 +-0.34162455555555554 0.93871544444444444 -0.038552038888888897 -0.34529380772188994 0.93740915282173187 -0.045125010304281565 +-0.32164100000000001 0.94686199999999998 6.1494599999999998e-19 -0.33473155310488784 0.94231352922262013 3.6267044291985801e-16 +-0.30181000000000002 0.95256300000000005 -0.0391817 -0.3218068857110214 0.94600646206740269 -0.038885756205703864 +-0.83280549999999987 0.52852688888888899 -0.1624707222222222 -0.83037664881265649 0.53405020478723886 -0.15894967717290423 +-0.87829933333333354 0.46300900000000006 0.11622905000000001 -0.87607134551440624 0.46884628063085082 0.11261510869859052 +-0.87200361111111102 0.46106205555555557 0.16226505555555554 -0.86995444403255928 0.46689328756782017 0.15871333696987613 +-0.84908077777777791 0.49396133333333336 0.1853765 -0.84692766994820057 0.49963695682833859 0.18186927516056392 +-0.4920802222222222 0.84572811111111124 -0.20489072222222227 -0.49882332570160443 0.84252034648128082 -0.20330950666669181 +-0.52977233333333329 0.82511827777777791 -0.19469544444444445 -0.53644658705687587 0.82159577007534734 -0.19288714272684607 +-0.51876055555555556 0.84501666666666675 -0.12755305555555557 -0.52512962998216928 0.84161907351186538 -0.12615944996637979 +-0.41731183333333338 0.90771522222222234 0.036593988888888894 -0.42057737025126773 0.90623645146983989 0.04301359854604659 +-0.40070494444444449 0.91287011111111127 0.074242938888888887 -0.40433870708713571 0.91103886545158841 0.080736581472007338 +-0.36234955555555559 0.92859111111111126 0.076199844444444456 -0.36606814772310975 0.92689685591902893 0.082802957133127394 +-0.34162455555555554 0.93871544444444444 0.038552038888888897 -0.34529380772188739 0.93740915282173276 0.045125010304282079 +-0.36234955555555565 0.92859111111111126 -0.076199844444444428 -0.36606814772311413 0.92689685591902726 -0.082802957133126492 +-0.40070494444444454 0.91287011111111127 -0.074242938888888901 -0.40433870708713487 0.91103886545158896 -0.080736581472005825 +-0.41731183333333344 0.90771522222222234 -0.036593988888888894 -0.42057737025126812 0.90623645146983978 -0.043013598546047055 +-0.51876055555555556 0.84501666666666675 0.12755305555555557 -0.52512962998216917 0.84161907351186538 0.12615944996637982 +-0.54250855555555555 0.82523066666666689 0.15520044444444447 -0.54901526251321164 0.82162400177331962 0.15335006109403856 +-0.5297723333333334 0.8251182777777778 0.19469544444444445 -0.53644658705687598 0.82159577007534701 0.19288714272684732 +-0.4920802222222222 0.84572811111111124 0.20489072222222227 -0.49882332570160387 0.84252034648128127 0.2033095066666914 +-0.71116838888888889 0.60370305555555559 0.35928411111111114 -0.70881159047278919 0.60918489551153832 0.35564011625803871 +-0.72715611111111123 0.56931522222222219 0.38265566666666667 -0.72499878648104932 0.57499148324182692 0.3791590085971448 +-0.70975300000000008 0.56133844444444447 0.42479211111111115 -0.70765484053935324 0.56719427102722186 0.42132562890847369 +-0.67625838888888889 0.58787722222222216 0.44313827777777781 -0.67402691765197176 0.59371165275861892 0.43953860770040559 +-0.488196388888889 0.70410561111111114 0.5149719444444445 -0.49181063499169769 0.70632858522786901 0.50913871292513224 +-0.44828472222222226 0.76617377777777773 0.45969711111111117 -0.45162717142033804 0.76813183917485439 0.45387925231356441 +-0.93903499999999995 -0.038584800000000002 0.34165000000000001 -0.93916432755198997 -0.038521172133807798 0.34130116488411827 +-0.92890300000000003 -0.076266500000000001 0.36238399999999998 -0.93114137455847357 -0.051749775504558296 0.36096772891850654 +-0.91318200000000005 -0.074313500000000005 0.40071899999999999 -0.91559703367523992 -0.050328370179532594 0.39893499104512464 +-0.90800400000000003 -0.036630599999999999 0.41735699999999998 -0.90827198726026925 -0.036570306899743228 0.41677885000505965 +-0.84501666666666675 0.12755305555555557 0.51876055555555545 -0.84161907351186604 0.12615944996638023 0.52512962998216806 +-0.82523066666666689 0.15520044444444447 0.54250855555555555 -0.82162400177331962 0.15335006109403856 0.54901526251321164 +-0.82511827777777791 0.19469544444444442 0.52977233333333329 -0.82159577007534679 0.19288714272684712 0.53644658705687642 +-0.84572811111111124 0.20489072222222227 0.4920802222222222 -0.84252034648128127 0.2033095066666914 0.49882332570160387 +-0.60370305555555559 0.35928411111111114 0.71116838888888889 -0.6091848955115382 0.35564011625803865 0.70881159047278919 +-0.57613099999999995 0.33991500000000002 0.74332399999999998 -0.58437886466715772 0.3538406033072346 0.73027266824214099 +-0.56931522222222219 0.38265566666666667 0.72715611111111123 -0.57499148324182692 0.37915900859714474 0.72499878648104932 +-0.58787722222222216 0.44313827777777781 0.67625838888888889 -0.59371165275861892 0.43953860770040559 0.67402691765197176 +-0.70410561111111114 0.5149719444444445 0.488196388888889 -0.7063285852278689 0.50913871292513235 0.49181063499169764 +-0.72360344444444447 0.52507777777777787 0.44720294444444453 -0.72590669957852993 0.51941111443434562 0.45085647129555212 +-0.75469172222222214 0.49722505555555557 0.42721033333333341 -0.75686579003687127 0.49156024527455899 0.43072346248779858 +-0.76617377777777773 0.45969711111111117 0.44828472222222226 -0.76813183917485439 0.45387925231356441 0.45162717142033804 +-0.88428033333333345 0.18106466666666671 0.42970200000000003 -0.88764058984003447 0.17541892494983571 0.4258196614036035 +-0.90131850000000013 0.14760150000000002 0.40647822222222235 -0.90439818266630467 0.14170743042641337 0.40247103169275233 +-0.8816102222222223 0.10493664999999999 0.45955061111111112 -0.8846317211215432 0.099578473171241258 0.45553358346714756 +-0.76617377777777773 0.45969711111111117 -0.44828472222222226 -0.76813183917485228 0.45387925231356635 -0.45162717142033981 +-0.75469172222222214 0.49722505555555557 -0.42721033333333341 -0.75686579003687093 0.49156024527456066 -0.43072346248779714 +-0.72360344444444447 0.52507777777777775 -0.44720294444444453 -0.72590669957852894 0.51941111443434651 -0.45085647129555251 +-0.69116500000000003 0.55216799999999999 -0.46626299999999998 -0.70308750497874417 0.55099997577739757 -0.44951861700720658 +-0.70435000000000003 0.515158 -0.48836800000000002 -0.7120720291689725 0.52656277906578286 -0.46441906181562093 +-0.57758122222222219 0.80355477777777784 0.14180361111111112 -0.57172393337095206 0.80758849978511771 0.14468088687062342 +-0.5871036111111112 0.80277855555555566 0.10144869444444445 -0.58169114143233602 0.80666135127872463 0.10456041474826065 +-0.58710361111111109 0.80277855555555566 -0.10144869444444445 -0.58169114143233625 0.80666135127872363 -0.104560414748266 +-0.60117361111111123 0.78098961111111131 -0.16742283333333338 -0.59535801362678342 0.78518859080253534 -0.17037521088438701 +-0.67649599999999999 0.58808099999999996 -0.443299 -0.68237595213215929 0.59152889609279979 -0.42948413828564469 +-0.70975300000000008 0.56133844444444447 -0.42479211111111115 -0.70765484053935468 0.56719427102721987 -0.42132562890847386 +-0.72715611111111123 0.56931522222222231 -0.38265566666666667 -0.72499878648104976 0.57499148324182858 -0.37915900859714147 +-0.6731448888888889 0.73382466666666668 -0.088077566666666676 -0.67424393756459777 0.73410544350889573 -0.080525216348634021 +-0.67737388888888894 0.73389566666666672 -0.044128638888888891 -0.67815638521793198 0.73401541893978095 -0.036404422077624073 +-0.65182450000000014 0.7576696666666668 -0.021676222222222225 -0.65246590588010245 0.75768815115089749 -0.014032365074781672 +-0.62369722222222235 0.78016216666666671 -0.042238155555555559 -0.6247040126373884 0.78007890288869486 -0.034954282466040557 +-0.42238088888888892 0.89947383333333342 -0.10931593333333332 -0.4183773904106684 0.90236353428698401 -0.10344279183327446 +-0.98822399999999999 0.12163718333333334 -0.089000511111111125 -0.98793174163105957 0.12156932709869499 -0.095977979696344612 +-0.99118644444444448 0.12192531666666667 -0.04455446111111111 -0.99119702566678813 0.12194147397569161 -0.051562905600327391 +-0.98613916666666668 0.16225061111111114 -0.022410494444444446 -0.9862979151151543 0.16230832589795582 -0.029536925765944418 +-0.97798022222222225 0.20204100000000003 -0.045058005555555565 -0.97798063649741085 0.20204449563199528 -0.052267546536372299 +-0.90614733333333342 0.39010305555555563 -0.16128705555555556 -0.90837866366013453 0.38426438939936985 -0.16489112300714548 +-0.90771522222222234 0.036593988888888894 0.41731183333333338 -0.90623645146983989 0.04301359854604659 0.42057737025126773 +-0.88781094444444464 0.38452083333333342 0.25147144444444441 -0.88969484040035385 0.37874946869362897 0.25493515043885739 +-0.87661705555555558 0.42187049999999998 0.2299310555555556 -0.87879755235776325 0.41620240027572614 0.23343184010483348 +-0.88585416666666672 0.4248007222222222 0.18467527777777779 -0.8882063145586736 0.41910872685926281 0.18824828777045061 +-0.90614733333333342 0.39010305555555563 0.16128705555555559 -0.90837866366013442 0.38426438939936991 0.16489112300714623 +-0.98613916666666668 0.16225061111111114 0.022410494444444446 -0.98629791511515463 0.16230832589795385 0.02953692576594321 +-0.99118644444444448 0.12192531666666667 0.044554461111111124 -0.99119702566678813 0.12194147397569156 0.051562905600327384 +-0.98822399999999999 0.12163718333333334 0.089000511111111125 -0.98793174163105957 0.12156932709869497 0.095977979696344612 +-0.31613200000000002 0.88471900000000003 0.34254000000000001 -0.3294211315812311 0.88512215672951233 0.32869512581454269 +-0.35899861111111109 0.86988683333333339 0.33724750000000009 -0.36215323660106347 0.87121174907206966 0.33141382212901033 +-0.38206200000000001 0.84660888888888897 0.36959116666666669 -0.3852110923041957 0.84810814993773809 0.36376500707873988 +-0.36214800000000003 0.83810200000000001 0.40796199999999999 -0.37649389839740721 0.83315715797455803 0.40509442675168977 +-0.64198000000000011 0.29233105555555561 0.70832122222222216 -0.64705626737509614 0.28859701459703146 0.70571237059887859 +-0.64625299999999997 0.248833 0.721414 -0.65455064680951669 0.26288318719723591 0.70884122386488391 +-0.98471200000000003 -0.080752400000000002 0.154339 -0.98659498098831921 -0.054652534041547601 0.15376424815767611 +-0.97700299999999995 -0.080266400000000002 0.19753899999999999 -0.97891707379046766 -0.054331382555824669 0.19689962801153485 +-0.983657 -0.0403062 0.175484 -0.9836808891515797 -0.040307589169763014 0.17534881400590965 +-0.98778033333333348 3.4218388888888886e-20 0.1536423888888889 -0.98705222481230426 8.1539385375779995e-17 0.16039920664729113 +-0.99358272222222233 0 0.11001133333333335 -0.99315324794551874 -9.5418526886554624e-18 0.11681877458382654 +-0.28874899999999998 0.92851300000000003 0.23342599999999999 -0.31360689215868431 0.91930464452193628 0.23775972693239647 +-0.33097694444444448 0.91482127777777766 0.22998205555555556 -0.3379838335060848 0.91284890386869511 0.22907161979226712 +-0.88442177777777797 0.34238933333333338 0.31604200000000005 -0.88585844674484926 0.33657981943799542 0.3193255979057889 +-0.86988683333333339 0.33724750000000009 0.35899861111111109 -0.87121174907206966 0.33141382212901033 0.36215323660106347 +-0.35449605555555552 0.89642250000000001 0.26474783333333329 -0.36161009603891914 0.89426493531171247 0.26368231627218108 +-0.84660888888888897 0.36959116666666669 0.38206200000000001 -0.84810814993773809 0.36376500707873988 0.3852110923041957 +-0.83782038888888899 0.40779044444444446 0.36203938888888892 -0.83957573606046731 0.40206922864807892 0.36531208410462301 +-0.70832122222222216 0.64198000000000011 0.29233105555555561 -0.70571237059887848 0.64705626737509603 0.28859701459703141 +-0.72114805555555561 0.64606572222222214 0.24872233333333338 -0.71841774753895082 0.65102987947107138 0.24502252153004747 +-0.75165261111111104 0.61818911111111119 0.22841961111111117 -0.74897430910137541 0.6232921503283716 0.22482077227238603 +-0.76982988888888892 0.58579227777777787 0.25202805555555563 -0.7673750143241086 0.59109138934629735 0.24848854466904122 +-0.80396599999999996 0.39244699999999999 -0.44679200000000002 -0.80393341593672984 0.39250190306445421 -0.44680344541093547 +-0.81132199999999999 0.353493 -0.465617 -0.81955619222806575 0.36445707030167734 -0.44215233990984587 +-0.82959505555555568 0.36214950000000001 -0.42419233333333339 -0.83100516247629708 0.35626101820597383 -0.42721014365834731 +-0.84660888888888908 0.36959116666666669 -0.38206200000000001 -0.84810814993773953 0.36376500707873649 -0.3852110923041957 +-0.83782038888888899 0.40779044444444446 -0.36203938888888892 -0.83957573606046787 0.40206922864807976 -0.3653120841046209 +-0.78904427777777775 0.59209005555555561 -0.16171811111111112 -0.78629297372174378 0.59725247015775862 -0.15821771824379466 +-0.76144050000000019 0.62116427777777772 -0.18352861111111116 -0.75861571935303307 0.62618704465993646 -0.17997770820447423 +-0.98436877777777787 0.08072323888888891 -0.15432383333333335 -0.98364278048400244 0.080574270691353006 -0.16110452291682351 +-0.98331377777777784 0.040291861111111112 -0.17546994444444447 -0.98244224734962848 0.040209691007927609 -0.18218235746542072 +-0.98778033333333348 0 -0.15364238888888887 -0.98705222481230426 -8.0671945105824872e-17 -0.16039920664729104 +-0.99041400000000002 -0.040517699999999997 -0.132054 -0.99152557490792936 -0.020252671590080776 -0.12832327768945359 +-0.99358272222222233 0 -0.11001133333333335 -0.99315324794551874 9.5418526886554624e-18 -0.11681877458382654 +-0.99642699999999995 -0.0815086 -0.022148600000000001 -0.9982313602512044 -0.055201045773037596 -0.022067984878397 +-0.99819400000000003 -0.0407719 -0.044118600000000001 -0.99819300715063164 -0.040789101676862317 -0.044124479146768286 +-0.88442177777777786 0.34238933333333343 -0.31604200000000005 -0.88585844674484893 0.33657981943799731 -0.31932559790578779 +-0.86988683333333339 0.33724750000000003 -0.35899861111111109 -0.87121174907206944 0.3314138221290106 -0.36215323660106363 +-0.44665483333333333 0.80369816666666671 0.39227866666666672 -0.44970367922441068 0.80527512270279777 0.38639174117470765 +-0.42419233333333334 0.82959505555555557 0.36214950000000001 -0.42721014365834631 0.83100516247629663 0.35626101820597622 +-0.44273205555555556 0.83600788888888899 0.32312066666666667 -0.44638955238374878 0.83223041013000265 0.32882960933815558 +-0.48330188888888903 0.81681627777777799 0.3139468333333334 -0.47988631979275509 0.82116637706339168 0.30886065022328313 +-0.71130488888888888 0.6788725000000001 -0.18030416666666671 -0.70824252605277271 0.68351288304227853 -0.17664275531597648 +-0.74111677777777785 0.65159588888888897 -0.15967583333333338 -0.74639544595641349 0.64681512694105092 -0.15660150004313161 +-0.74804966666666672 0.65319355555555558 -0.1144236777777778 -0.74356870428831068 0.6582038114175951 -0.11778507816507858 +-0.43694288888888888 0.86297505555555565 0.25239211111111109 -0.44071750665220449 0.85965498700960707 0.25838224133979565 +-0.41956622222222228 0.85917744444444455 0.29173877777777779 -0.42243889058002065 0.86015098722300531 0.28580703788537215 +-0.37797294444444451 0.87603155555555556 0.29838466666666669 -0.37092317424346333 0.87886765169052439 0.30001274909766174 +-0.70109299999999997 0.67633188888888884 0.22443494444444448 -0.69976957442665277 0.67563076924838528 0.23204656074067639 +-0.66844344444444448 0.70239261111111118 0.24322949999999999 -0.6704755154537877 0.70337765391720541 0.23605605085848952 +-0.9747165555555557 0.040023405555555551 0.21829649999999998 -0.97564673422962944 0.046633488357808936 0.21433330994187721 +-0.96714038888888898 0.079606161111111115 0.24007305555555558 -0.96706196112010012 0.073091910347299713 0.24382111474671009 +-0.67651799999999995 0.22455 0.70135599999999998 -0.68558156780852908 0.23046660937039454 0.69055271764472348 +-0.70239261111111118 0.24322949999999999 0.66844344444444448 -0.70337765391720541 0.23605605085848952 0.6704755154537877 +-0.80369816666666671 0.39227866666666672 0.44665483333333333 -0.80527512270279777 0.38639174117470765 0.44970367922441068 +-0.82959505555555557 0.36214950000000001 0.42419233333333334 -0.83100516247629663 0.35626101820597622 0.42721014365834631 +-0.83600788888888899 0.32312066666666667 0.44273205555555556 -0.83223041013000265 0.32882960933815564 0.44638955238374883 +-0.81681627777777799 0.3139468333333334 0.48330188888888903 -0.82116637706339168 0.30886065022328313 0.47988631979275509 +-0.86325200000000002 0.25254199999999999 -0.43705699999999997 -0.87163704405386422 0.26276284123388716 -0.41376871885116795 +-0.85945800000000006 0.29188900000000001 -0.419682 -0.85941443531440198 0.29199352621521846 -0.41969823566656811 +-0.76144050000000019 0.62116427777777772 0.18352861111111116 -0.75861571935303673 0.62618704465993091 0.17997770820447828 +-0.43694288888888888 0.86297505555555565 -0.25239211111111109 -0.44071750665220349 0.85965498700960763 -0.25838224133979565 +-0.419682 0.85945800000000006 -0.29188900000000001 -0.43177312969396969 0.85828531658181317 -0.27734144986700265 +-0.442859 0.83627799999999997 -0.32328800000000002 -0.45494640996596902 0.83536956825498132 -0.30851490805561188 +-0.465617 0.81132199999999999 -0.353493 -0.47464490896675166 0.81439497295494379 -0.33387578291583303 +-0.48330188888888898 0.81681627777777777 -0.31394683333333334 -0.47988631979275559 0.82116637706338969 -0.30886065022328768 +-0.70109299999999997 0.67633188888888895 -0.22443494444444448 -0.69976957442665344 0.67563076924838428 -0.23204656074067737 +-0.66844344444444448 0.70239261111111118 -0.24322949999999999 -0.67047551545378914 0.70337765391720486 -0.23605605085848697 +-0.95937994444444441 0 0.28095566666666666 -0.96085676206659554 0.0065582045306799433 0.27696799949494438 +-0.97061122222222218 0 0.23926188888888891 -0.96932056651415255 0 0.24579999864255986 +-0.97505799999999998 -0.040042599999999998 0.218308 -0.97509522330038212 -0.040025946394139041 0.21814497269483782 +-0.967476 -0.079646999999999996 0.24009800000000001 -0.96942691840980122 -0.053878969775750629 0.23939195157394144 +-0.9747165555555557 0.040023405555555558 -0.2182965 -0.97564673422962911 0.04663348835781083 -0.21433330994187852 +-0.96714038888888898 0.079606161111111115 -0.24007305555555558 -0.9670619611200999 0.073091910347297881 -0.24382111474671148 +-0.86297505555555565 0.25239211111111109 0.43694288888888888 -0.85965498700960719 0.25838224133979559 0.44071750665220455 +-0.85917744444444455 0.29173877777777779 0.41956622222222228 -0.86015098722300531 0.28580703788537215 0.42243889058002065 +-0.87603155555555556 0.29838466666666669 0.37797294444444451 -0.87886765169052439 0.30001274909766174 0.37092317424346333 +-0.89642250000000001 0.26474783333333329 0.35449605555555552 -0.89426493531171247 0.26368231627218108 0.36161009603891914 +-0.98010588888888872 4.3368086899420177e-19 0.1967632777777778 -0.97908421922976396 0 0.20345538001056468 +-0.62107088888888895 0.60274027777777772 0.50026811111111114 -0.61877736315263288 0.60874303996824886 0.49653447628547387 +-0.59966827777777776 0.59066877777777782 0.53925861111111106 -0.59741459813788345 0.59687346323979396 0.53557246644304424 +-0.5621827777777777 0.61383599999999994 0.55357633333333334 -0.56605121403024439 0.61625528820697695 0.54755405473051 +-0.54583999999999988 0.64923588888888883 0.52900327777777778 -0.54954262438316082 0.65153458369801109 0.52297761924534369 +-0.92968266666666677 0.35567750000000004 0.092067066666666683 -0.93196779945019781 0.3496558849156724 0.095795526679453735 +-0.93279822222222231 0.35644711111111105 0.046091599999999996 -0.9352783456551782 0.35038106966600463 0.049875065596139731 +-0.94711666666666661 0.3189622222222222 0.022924433333333334 -0.94725645751782217 0.31902218302947039 0.030496728117906807 +-0.95841855555555544 0.28044677777777777 0.045571827777777782 -0.95841050964196206 0.28042718858919063 0.053008366394346244 +-0.96466700000000005 0.039690499999999997 -0.26046599999999998 -0.96892922577271623 0.045846580963139705 -0.2430519418920056 +-0.60274027777777772 0.50026811111111114 0.62107088888888895 -0.60874303996824886 0.49653447628547387 0.61877736315263288 +-0.59066877777777782 0.53925861111111106 0.59966827777777776 -0.59687346323979396 0.53557246644304424 0.59741459813788333 +-0.61383599999999994 0.55357633333333334 0.5621827777777777 -0.61625528820697695 0.54755405473051 0.56605121403024439 +-0.64923588888888883 0.52900327777777778 0.54583999999999988 -0.65153458369801109 0.52297761924534369 0.54954262438316082 +-0.33930199999999999 0.86232799999999998 0.37585200000000002 -0.35256896037494789 0.86296550392388838 0.36191942089022794 +-0.90151755555555568 0.42941455555555563 -0.046495144444444449 -0.89920982393635296 0.43542010849590124 -0.042790438812549764 +-0.91862983333333359 0.39353955555555559 -0.023167105555555557 -0.91643561588954847 0.39971262560386789 -0.019379857120373559 +-0.91862983333333359 0.39353955555555559 0.02316710555555556 -0.91643561588954847 0.39971262560386783 0.019379857120373566 +-0.90151755555555568 0.42941455555555563 0.046495144444444449 -0.89920982393635229 0.43542010849590285 0.042790438812548647 +-0.50026811111111114 0.62107088888888895 0.60274027777777772 -0.49653447628547387 0.61877736315263288 0.60874303996824886 +-0.53925861111111106 0.59966827777777776 0.59066877777777782 -0.53557246644304413 0.59741459813788333 0.59687346323979396 +-0.55357633333333334 0.5621827777777777 0.61383599999999994 -0.54755405473051 0.56605121403024439 0.61625528820697695 +-0.52900327777777778 0.54583999999999999 0.64923588888888895 -0.52297761924534136 0.54954262438316215 0.65153458369801176 +-0.61456200000000005 0.27280700000000002 0.74019599999999997 -0.63363861960554047 0.2788075266793878 0.72164289147147254 +-0.95841855555555544 0.28044677777777777 -0.045571827777777775 -0.95841050964196184 0.28042718858919063 -0.053008366394348617 +-0.94711666666666661 0.31896222222222215 -0.022924433333333334 -0.94725645751782228 0.31902218302947044 -0.030496728117904132 +-0.73620099999999999 0.48796200000000001 -0.46893600000000002 -0.74232876685044913 0.49170561551355418 -0.45516325596287777 +-0.577145388888889 0.57714538888888889 0.577145388888889 -0.57734500093273466 0.57731947200996159 0.5773863326544193 +-0.5034616666666667 0.52819516666666666 0.68325033333333329 -0.49742892855923659 0.53176094050308254 0.68541575936630394 +-0.94550800000000002 0.117211 -0.30377100000000001 -0.94554466769646617 0.11706332799948686 -0.30371278970182325 +-0.93171599999999999 0.115289 -0.34440199999999999 -0.93014279430922731 0.14108392131289296 -0.33901284539320919 +-0.85930705555555564 0.062750183333333334 0.50711255555555568 -0.85626429280438865 0.062198335626752338 0.51277951198684013 +-0.85504466666666668 0.029093672222222228 0.5173335 -0.85201161052788332 0.028918895615988958 0.52272355313495678 +-0.83706338888888898 0.017980883333333333 0.54642727777777778 -0.83636135974086612 0.012055903437396466 0.54804592063504842 +-0.81947899999999996 -1.22661e-18 0.57311000000000001 -0.8253666319708961 0.018516726600117047 0.56429341097077834 +-0.82052500000000006 0.038781744444444446 0.56986272222222223 -0.82376026015320847 0.042106213689287089 0.56537253254917719 +-0.46833050000000004 0.88327516666666683 0 -0.47066540072095209 0.88229182417334717 -0.0059344385625658648 +-0.49935283333333336 0.86615722222222247 1.4870710116376754e-19 -0.501242848042461 0.86528710791410357 -0.0058161984086358212 +-0.51733350000000011 0.85504466666666679 0.029093672222222228 -0.52272355313496044 0.8520116105278811 0.028918895615987737 +-0.50711255555555568 0.85930705555555564 0.062750183333333334 -0.51277951198684013 0.85626429280438865 0.062198335626752338 +-0.56986272222222223 0.82052500000000006 -0.038781744444444446 -0.56537253254917963 0.82376026015320714 -0.042106213689281344 +-0.54642727777777778 0.83706338888888898 -0.017980883333333336 -0.54804592063505209 0.83636135974086356 -0.012055903437399117 +-0.5173335 0.85504466666666668 -0.029093672222222228 -0.52272355313495689 0.85201161052788332 -0.028918895615988951 +-0.50711255555555557 0.85930705555555564 -0.062750183333333334 -0.51277951198683769 0.85626429280439009 -0.062198335626753108 +-0.67906 0.180397 0.71157099999999995 -0.69693841025922532 0.18631004100784529 0.69250662157484011 +-0.70717300000000005 0.156079 0.68959800000000004 -0.71537942770753027 0.17007047089356156 0.67772288536162684 +-0.9496837222222223 0.23785461111111114 0.20207944444444448 -0.94861232896928716 0.23743102670924657 0.20919167498554567 +-0.54642727777777778 0.83706338888888898 0.017980883333333333 -0.54804592063504842 0.83636135974086612 0.012055903437396466 +-0.56986272222222223 0.82052500000000006 0.038781744444444446 -0.56537253254917719 0.82376026015320847 0.042106213689287089 +-0.95737461111111111 0.11857641111111111 0.26212472222222222 -0.95748924261049206 0.112208717044104 0.26575092493630686 +-0.8034865555555557 0.18225488888888891 0.56619688888888897 -0.80750215514867785 0.18500026696908062 0.56010282149941859 +-0.72739255555555571 0.26071327777777775 0.63424300000000011 -0.72841863240722293 0.25377752315238072 0.63639866805692946 +-0.796244888888889 0.30326661111111114 0.52283733333333338 -0.80064340072457874 0.29842502974182072 0.51953117952609418 +-0.99747061111111113 -4.3368086899420177e-19 -0.066027105555555562 -0.99733709501384338 0 -0.072929547573996431 +-0.82737416666666685 0.44531800000000005 0.3412486111111111 -0.82939663789348583 0.43966966189157797 0.34466187120586389 +-0.78656727777777768 0.55215255555555565 -0.27522161111111115 -0.78432765572944274 0.55767059215724279 -0.2717234607113394 +-0.82737416666666685 0.44531800000000005 -0.3412486111111111 -0.82939663789348594 0.43966966189157802 -0.3446618712058635 +-0.95737461111111111 0.11857641111111111 -0.26212472222222222 -0.95748924261049195 0.11220871704410373 -0.26575092493630714 +-0.63424300000000011 0.72739255555555571 0.26071327777777775 -0.63639866805692946 0.72841863240722293 0.25377752315238078 +-0.7528193333333334 0.65410794444444442 0.068852516666666669 -0.74860458609881297 0.65907084566498109 0.072227377539764298 +-0.73211922222222225 0.64923744444444442 0.20448750000000002 -0.72922160028600269 0.65414251623789987 0.20083183544017655 +-0.66640616666666663 0.7334316111111111 0.13171617222222221 -0.66784510328733937 0.73382922312113563 0.12440895992071306 +-0.52283733333333338 0.796244888888889 0.30326661111111114 -0.51953117952609429 0.80064340072457885 0.29842502974182078 +-0.56619688888888886 0.80348655555555559 0.18225488888888888 -0.56010282149942148 0.80750215514867607 0.18500026696907951 +-0.91482127777777766 0.22998205555555556 0.33097694444444448 -0.91284890386869511 0.22907161979226712 0.3379838335060848 +-0.93384100000000014 0.35669555555555549 2.1684043449710089e-19 -0.93415927591642067 0.35685633736846878 4.122220386358486e-05 +-0.7528193333333334 0.65410794444444453 -0.068852516666666669 -0.74860458609881209 0.65907084566498175 -0.072227377539766546 +-0.63424300000000011 0.72739255555555571 -0.26071327777777775 -0.63639866805692902 0.72841863240722293 -0.25377752315238217 +-0.52283733333333349 0.796244888888889 -0.3032666111111112 -0.51953117952609296 0.80064340072457829 -0.29842502974182439 +-0.91482127777777777 0.22998205555555556 -0.33097694444444448 -0.91284890386869444 0.22907161979226678 -0.33798383350608691 +-0.46847355555555559 0.77608166666666667 0.42135327777777787 -0.47160061355993166 0.77780808754094399 0.41546051586859017 +-0.46027055555555552 0.64127100000000004 0.6133656666666667 -0.45650201705245275 0.63890559189202323 0.61919750732391166 +-0.98330661111111117 0.12116736666666666 0.13317721111111114 -0.9827228972713633 0.12101573129925849 0.14003892300601037 +-0.77608166666666667 0.42135327777777787 0.46847355555555559 -0.77780808754094399 0.41546051586859017 0.47160061355993166 +-0.64127100000000004 0.6133656666666667 0.46027055555555552 -0.63890559189202323 0.61919750732391166 0.45650201705245275 +-0.58693700000000004 0.71182900000000005 0.38485688888888897 -0.58981619764168025 0.71337613272082079 0.37843274998841775 +-0.92452216666666687 0.35434750000000009 0.13780929444444445 -0.92662540228961998 0.34835515406796136 0.14147102341429091 +-0.90050594444444454 4.3368086899420177e-19 0.43422022222222229 -0.89935744418860264 0.00608774762538173 0.43717173617629285 +-0.6133656666666667 0.46027055555555552 0.64127100000000004 -0.61919750732391166 0.45650201705245269 0.63890559189202312 +-0.73211922222222225 0.64923744444444453 -0.20448749999999999 -0.72922160028600247 0.65414251623789943 -0.20083183544017855 +-0.45328572222222219 0.86514772222222236 0.21312049999999999 -0.46005659684907113 0.86225232066584678 0.21182271644470307 +-0.59434344444444454 0.80154466666666668 0.061161461111111114 -0.59555205960658975 0.80147246699299546 0.054402471915442736 +-0.58693699999999993 0.71182900000000005 -0.38485688888888897 -0.58981619764167759 0.71337613272082068 -0.37843274998842213 +-0.81494088888888883 0.5619532777777777 -0.13924307777777778 -0.81227206434124688 0.56726128730848824 -0.13575244164259401 +-0.8825426666666667 0.46425161111111113 0.069884822222222226 -0.88011186107951078 0.47012486878553988 0.066224766791124254 +-0.43422022222222229 0.90050594444444454 4.3368086899420177e-19 -0.43717173617629279 0.89935744418860253 0.0060877476253817292 +-0.49538216666666668 0.86270588888888911 0.098961244444444443 -0.49157165050389362 0.86573472660895023 0.094131267728656903 +-0.69377355555555564 0.63683855555555557 0.33529638888888891 -0.69125857906576693 0.64204640936346036 0.33156897486264408 +-0.52819516666666666 0.68325033333333329 0.5034616666666667 -0.53176094050308254 0.68541575936630394 0.49742892855923659 +-0.86270588888888911 0.098961244444444443 0.49538216666666668 -0.86573472660895023 0.094131267728656903 0.49157165050389362 +-0.63683855555555557 0.33529638888888891 0.69377355555555564 -0.64204640936346036 0.33156897486264408 0.69125857906576693 +-0.68325033333333329 0.5034616666666667 0.52819516666666666 -0.68541575936630394 0.49742892855923659 0.53176094050308254 +-0.86514772222222236 0.21312049999999999 0.45328572222222219 -0.86225232066584678 0.21182271644470307 0.46005659684907113 +-0.80154466666666668 0.061161461111111114 0.59434344444444454 -0.80147246699299546 0.054402471915442736 0.59555205960658975 +-0.78033200000000003 0.042275100000000003 0.62393500000000002 -0.78407127489047468 0.059746338909362595 0.61778848393163921 +-0.74702500000000005 0.44971800000000001 -0.48959900000000001 -0.75508871558387747 0.46124764935000617 -0.46593093647769734 +-0.59434344444444454 0.80154466666666668 -0.061161461111111121 -0.59555205960658975 0.80147246699299557 -0.054402471915442729 +-0.64150099999999999 0.61357099999999998 -0.46044200000000002 -0.65673447269235907 0.61424222388299454 -0.43750008317343481 +-0.49538216666666668 0.86270588888888911 -0.098961244444444443 -0.49157165050389273 0.8657347266089509 -0.09413126772865571 +-0.92452216666666687 0.35434750000000004 -0.13780929444444445 -0.92662540228961932 0.34835515406796236 -0.14147102341429241 +-0.89724905555555579 0.34646733333333335 0.27242099999999997 -0.89882246463749638 0.34067182429932835 0.27579137983545515 +-0.60983299999999996 0.316411 0.72662700000000002 -0.61932455774524731 0.32238657214267979 0.71589384008786283 +-0.77634800000000004 0.42150300000000002 -0.46863500000000002 -0.77588152683094125 0.43625185329312871 -0.45573257160400304 +-0.85372577777777792 0.33086838888888892 0.40125088888888893 -0.85496615637444284 0.32494888289771667 0.40427848688476831 +-0.85372577777777781 0.33086838888888898 -0.40125088888888893 -0.85496615637444262 0.32494888289771789 -0.40427848688476786 +-0.86369744444444452 0.4583800555555555 0.20788044444444445 -0.86616824898877876 0.45283443719162808 0.2114084599467447 +-0.30181000000000002 0.95256300000000005 0.0391817 -0.32180688571102561 0.94600646206740135 0.038885756205701984 +-0.73364399999999996 0.131776 0.66663399999999995 -0.74151199518419464 0.14566234621322263 0.65493697551261676 +-0.50593500000000002 0.79132199999999997 -0.343277 -0.51143821345764495 0.79346878547286259 -0.32990641141916699 +-0.95620099999999997 0.078785400000000005 -0.28190999999999999 -0.96053907952743656 0.085293134523931863 -0.26474470325894617 +-0.99527699999999997 -0.040669700000000003 -0.088143899999999997 -0.99621899529180924 -0.02031637445214958 -0.084468682651608992 +-0.34134199999999998 0.82764800000000005 0.44551600000000002 -0.36647338809820029 0.82188399531177481 0.43612378296325494 +-0.97094899999999995 0 -0.239285 -0.97492814521969429 0.020036039453891236 -0.22161603908898064 +-0.331038 0.915126 -0.230126 -0.35532110021242136 0.90819294791581795 -0.22120688302991567 +-0.35457899999999998 0.89672200000000002 -0.26488299999999998 -0.36371084954020677 0.89862402582053635 -0.2453350324450892 +-0.80071099999999995 0.020565699999999999 0.59869700000000003 -0.80746719704491621 0.039892119918317308 0.58856209907268831 +-0.74167483333333351 0.53379438888888886 0.40531733333333336 -0.73972208925562632 0.53965196194684129 0.40197884351569579 +-0.74167483333333351 0.53379438888888897 -0.40531733333333336 -0.7397220892556251 0.53965196194684439 -0.40197884351569385 +-0.99217522222222232 0.12202262222222222 -1.3010426069826053e-18 -0.99248982549914533 0.12212601651507285 0.0070130143901431068 +-0.67883666666666675 0.73387122222222234 1.951563910473908e-18 -0.67924929250052091 0.73386636530991478 0.0077818059829597485 +-0.38394200000000006 0.91612616666666669 0.11263961111111111 -0.37990979769417871 0.91886656680883305 0.10654941584502681 +-0.54876899999999995 0.73479000000000005 -0.39866800000000002 -0.56076995279975261 0.73401997436425093 -0.38308189368758688 +-0.56871099999999997 0.70405399999999996 -0.42529400000000001 -0.58091329232488209 0.70342033053508191 -0.4095602341416732 +-0.36277999999999999 0.75852699999999995 0.54131899999999999 -0.38795830027020761 0.75270719006440567 0.53190247534374024 +-0.382795 0.72741100000000003 0.56950999999999996 -0.39701899662445073 0.7299388794828412 0.55638579110060737 +-0.52563517762968126 0.85049595564708425 -8.6736173798840355e-19 -0.53286827537195869 0.84619820438365057 6.5053341907911413e-18 +-0.54131899999999999 0.36277999999999999 0.75852699999999995 -0.56127687658847891 0.3691653923107075 0.74073286745436295 +-0.40125088888888893 0.85372577777777792 0.33086838888888892 -0.40427848688476836 0.85496615637444284 0.32494888289771673 +-0.83627799999999997 0.32328800000000002 -0.442859 -0.83690830869121813 0.33795646325074835 -0.43054606233323084 +-0.98045000000000004 -6.1593100000000002e-19 -0.196769 -0.98045994040191098 -5.4896080364669229e-05 -0.19671884061650372 +-0.983657 -0.0403062 -0.175484 -0.98733141454440743 -0.020272978151031067 -0.15737116702441764 +-0.85049595564708425 -2.1684043449710089e-19 0.52563517762968126 -0.84619820438365057 6.5053341907911413e-18 0.53286827537195869 +-0.83699800000000002 -0.018297399999999998 0.54689900000000002 -0.84109901036312684 -0.0006223010203983729 0.54088082560542738 +-0.85529599999999995 -0.029605800000000002 0.517293 -0.85793680498015401 -0.011019552948905177 0.5136370392731151 +-0.77289299999999994 0.51966566666666669 0.36316266666666669 -0.77525724683632291 0.5142765787888488 0.36673669265155534 +-0.99956166666666668 0.013604699999999999 0 -0.99988372058015584 0.013629673108110113 -0.0068393954229029521 +-0.78783499999999995 0.52574633333333332 0.31970700000000002 -0.78586803119594739 0.53135648596864626 0.31634114870382823 +-0.80185966666666664 0.50398500000000002 0.31988800000000001 -0.80422451138794693 0.49861910324694281 0.32342220882313033 +-0.81546433333333335 0.49557666666666661 0.297875 -0.81785066340747914 0.49020047591881771 0.30136984881190576 +-0.81546433333333335 0.49557666666666672 -0.297875 -0.81785066340747914 0.4902004759188176 -0.30136984881190587 +-0.80185966666666664 0.50398500000000002 -0.31988800000000001 -0.80422451138794648 0.49861910324694259 -0.32342220882313183 +-0.99956166666666668 -0.013604699999999999 0 -0.99996783263413735 -0.0068216811251523412 -0.0042188106869880991 +-0.93659933333333323 0.16855100000000001 -0.30612900000000004 -0.93692474218610955 0.16240931835947478 -0.30950806255977042 +-0.57885033333333336 0.7680486666666666 0.27272099999999999 -0.57567345520774471 0.77242629943301855 0.26824929620297133 +-0.76366033333333327 0.64510233333333333 2.3129646346357427e-18 -0.75994660362472921 0.64997687859126629 0.0033491694482402413 +-0.75307866666666667 0.64288299999999998 0.13748199999999999 -0.74853514111358355 0.64796557746314509 0.14083945803971382 +-0.30612900000000004 0.93659933333333323 0.16855100000000001 -0.32042629145449342 0.93229701962588485 0.16777740891256079 +-0.69375566666666666 0.69718433333333341 0.1788173333333333 -0.69272430128514717 0.69666909427137036 0.18650795022227099 +-0.5811776666666667 0.7578826666666667 0.29526266666666667 -0.58354064449288279 0.75900226565195095 0.28878344301575909 +-0.59284466666666669 0.77091966666666656 0.231459 -0.59490829083334629 0.77172429004474563 0.224779326568704 +-0.93659933333333323 0.16855100000000001 0.30612900000000004 -0.93692474218610955 0.16240931835947478 0.30950806255977042 +-0.61583966666666667 0.77343700000000004 0.14808233333333334 -0.61020748195835961 0.77769021399991445 0.15114483124078501 +-0.7578826666666667 0.29526266666666667 0.5811776666666667 -0.75900226565195095 0.28878344301575909 0.58354064449288279 +-0.93617499999999998 0.34366800000000003 -0.068979233333333334 -0.93602631680507398 0.34349602657608669 -0.076584684988368859 +-0.7680486666666666 0.27272099999999999 0.57885033333333336 -0.77242629943302044 0.26824929620296939 0.57567345520774327 +-0.74740133333333336 0.66387866666666662 2.3129646346357427e-18 -0.74354807872366546 0.66867393047994539 0.0033807281533855069 +-0.58117766666666659 0.7578826666666667 -0.29526266666666667 -0.5835406444928789 0.7590022656519525 -0.28878344301576314 +-0.57885033333333336 0.7680486666666666 -0.27272099999999999 -0.5756734552077426 0.77242629943301921 -0.26824929620297372 +-0.94036500000000001 0.18248266666666665 -0.28591433333333333 -0.93876161227415711 0.18183151327891484 -0.29268402091526075 +-0.94036500000000001 0.18248266666666668 0.28591433333333333 -0.938761612274157 0.181831513278917 0.29268402091526002 +-0.48935600000000007 0.73308833333333334 0.47160733333333332 -0.4927127487950147 0.73512444694758228 0.4656459971640175 +-0.39967966666666666 0.67766533333333323 0.61670666666666663 -0.4057082751091835 0.66658297433696267 0.62535424667305106 +-0.9801036666666666 0.17508766666666667 0.089676533333333322 -0.97980797925647178 0.17494393426128732 0.096803634490300355 +-0.9801036666666666 0.17508766666666667 -0.089676533333333322 -0.97980797925647156 0.17494393426128724 -0.096803634490302715 +-0.73308833333333334 0.47160733333333332 0.48935600000000007 -0.73512444694758217 0.46564599716401744 0.49271274879501464 +-0.67766533333333323 0.61670666666666663 0.39967966666666666 -0.67529430507839372 0.62228451488397507 0.39590350347566416 +-0.56508966666666671 0.75308399999999998 0.33594766666666659 -0.5620912979229169 0.75773911645994707 0.33148876932081661 +-0.85275266666666683 0.50849633333333333 0.11638163333333335 -0.85023870611270813 0.51416078857641512 0.11283982505421924 +-0.52923299999999995 0.73907899999999993 0.41591 -0.52632608030381212 0.74415674792463482 0.41135336598872835 +-0.90817599999999998 0.36339733333333335 0.20605833333333332 -0.91006734464879224 0.35752579751229385 0.2096490694400874 +-0.47160733333333332 0.48935600000000007 0.73308833333333334 -0.4682734800155286 0.50279225411793382 0.72658096390777638 +-0.87451599999999996 0.011107333333333332 0.484402 -0.87327349468882909 0.017454459367511759 0.48691759602847318 +-0.61670666666666663 0.39967966666666666 0.67766533333333323 -0.62228451488397507 0.39590350347566416 0.67529430507839372 +-0.75308399999999998 0.33594766666666659 0.56508966666666671 -0.75773911645994707 0.33148876932081667 0.5620912979229169 +-0.90817600000000009 0.36339733333333335 -0.20605833333333332 -0.91006734464879269 0.35752579751229241 -0.20964906944008832 +-0.73907899999999993 0.41591 0.52923299999999995 -0.74415674792463482 0.41135336598872835 0.52632608030381212 +-0.8527526666666666 0.50849633333333333 -0.11638163333333333 -0.85023870611270924 0.5141607885764129 -0.11283982505422124 +-0.67766533333333323 0.61670666666666663 -0.39967966666666666 -0.67529430507839383 0.62228451488397507 -0.39590350347566428 +-0.39742499999999997 0.66042066666666666 0.63655099999999998 -0.4057082751091835 0.66658297433696267 0.62535424667305106 +-0.45502866666666669 0.50961199999999995 0.72975599999999996 -0.4682734800155286 0.50279225411793382 0.72658096390777638 +-0.70626633333333333 0.36633966666666667 0.60522599999999993 -0.70779537966296246 0.35975178512851885 0.60795094672564387 +-0.76558033333333331 0.085767633333333329 0.63713500000000001 -0.77323281423122159 0.077653387717214403 0.62934963761974561 +-0.76758566666666661 0.59794999999999998 -0.22930300000000001 -0.76500174879047678 0.60316909560327436 -0.2257418137090256 +-0.48575733333333332 0.85913700000000004 0.15916633333333333 -0.49236164203072019 0.85597689550574485 0.15774526242382089 +-0.70640999999999998 0.65384799999999998 -0.26978799999999997 -0.70479467267294238 0.65296399002289907 -0.27731299483654781 +-0.62453233333333336 0.77336900000000008 0.10615883333333336 -0.61921792024752453 0.77757536492117973 0.10929647346563649 +-0.60260966666666671 0.72989533333333334 -0.32161633333333334 -0.60506997784073069 0.73117473379442233 -0.31507749931798262 +-0.84843866666666656 0.52034900000000006 -0.093204899999999993 -0.84495153855592087 0.52601430444535291 -0.096777316613210582 +-0.64234066666666667 0.66917433333333332 -0.37270666666666669 -0.64507244158114818 0.67076762158679837 -0.36599500398683832 +-0.84843866666666667 0.52034900000000006 0.093204899999999993 -0.84495153855591643 0.52601430444536001 0.096777316613210984 +-0.465366 0.87173933333333331 -0.15137733333333334 -0.46147336445081139 0.87506756832444721 -0.14594205963048348 +-0.37959833333333332 0.92474699999999999 -0.012602500000000001 -0.38307647295871616 0.9235192143889186 -0.019096505439074183 +-0.37959833333333332 0.92474699999999999 0.012602500000000001 -0.38307647295871666 0.92351921438891849 0.019096505439074183 +-0.465366 0.87173933333333331 0.15137733333333334 -0.46147336445081139 0.87506756832444721 0.14594205963048348 +-0.66042066666666666 0.63655099999999998 0.39742499999999997 -0.66331585323080933 0.63827653991955358 0.39065987436772392 +-0.50961199999999995 0.72975599999999996 0.45502866666666669 -0.50673295418397113 0.73504735835047963 0.45047429907372849 +-0.92474699999999999 0.012602500000000001 0.37959833333333332 -0.92351921438891826 0.019096505439074589 0.38307647295871694 +-0.87173933333333331 0.15137733333333334 0.465366 -0.87506756832444721 0.14594205963048346 0.46147336445081144 +-0.63655099999999998 0.39742499999999997 0.66042066666666666 -0.63827653991955358 0.39065987436772392 0.66331585323080933 +-0.72975599999999996 0.45502866666666669 0.50961199999999995 -0.73504735835047952 0.45047429907372849 0.50673295418397124 +-0.85913700000000004 0.15916633333333333 0.48575733333333332 -0.85597689550574485 0.15774526242382092 0.49236164203072025 +-0.77336900000000008 0.10615883333333336 0.62453233333333336 -0.78103480899705635 0.10543516307432657 0.61552258571267882 +-0.38578466666666666 0.91196566666666667 -0.13735133333333335 -0.38170698678408682 0.91489615052823081 -0.1313956239333629 +-0.63713500000000001 0.76558033333333331 0.085767633333333329 -0.63830921052516987 0.76577763557673062 0.078396202773134777 +-0.34578333333333333 0.92738500000000013 -0.14052333333333333 -0.35526703821093636 0.92513910167343838 -0.13380199593314146 +-0.63713500000000012 0.76558033333333331 -0.085767633333333329 -0.63830921052516876 0.76577763557673173 -0.078396202773132015 +-0.66042066666666666 0.63655099999999998 -0.39742499999999997 -0.66331585323081155 0.63827653991955335 -0.39065987436772048 +-0.62453233333333336 0.77336900000000008 -0.10615883333333333 -0.61921792024752453 0.7775753649211794 -0.10929647346563828 +-0.48575733333333332 0.85913700000000004 -0.15916633333333333 -0.49236164203071847 0.85597689550574585 -0.15774526242382142 +-0.97537799999999997 0.18801833333333332 -0.11218733333333335 -0.9764931715377293 0.18163303536640046 -0.11606259691982868 +-0.91777433333333336 0.33882699999999999 -0.20539200000000002 -0.91668255996789427 0.33821761363490599 -0.2128425006379534 +-0.92474699999999999 -0.012602500000000001 0.37959833333333332 -0.92527214855994633 0 0.37930390335357811 +-0.91777433333333336 0.33882699999999999 0.20539200000000002 -0.91668255996789394 0.33821761363490749 0.21284250063795271 +-0.97537799999999997 0.18801833333333332 0.11218733333333332 -0.97649317153772908 0.18163303536640471 0.11606259691982385 +-0.40547466666666665 0.80963433333333334 0.42354566666666665 -0.408691595668839 0.81144548502237668 0.41776477169150822 +-0.94234466666666672 0.30424066666666666 0.13681299999999999 -0.94173031487740799 0.30386966027528961 0.14424716151480435 +-0.99207933333333331 0.054101533333333333 0.11027263333333333 -0.99164764746382228 0.054013020860459802 0.11712188888928619 +-0.86487900000000006 0.40426999999999996 0.29640233333333338 -0.86674451897969007 0.3985820613477869 0.29981040540717491 +-0.80963433333333334 0.42354566666666665 0.40547466666666665 -0.81144548502237668 0.41776477169150827 0.408691595668839 +-0.74252466666666672 0.58916000000000002 0.31757133333333337 -0.74020590226045235 0.59456587600237154 0.31398509734113539 +-0.7955836666666668 0.56853366666666671 0.20766399999999999 -0.79307922087067428 0.5738800737666252 0.20417397081111258 +-0.79716033333333325 0.44612266666666667 -0.4059733333333333 -0.79909671055864817 0.44039401856273125 -0.40926465225880038 +-0.86373599999999995 0.39010866666666666 -0.3179366666666667 -0.86545918830920177 0.38438648650835755 -0.32129024628976516 +-0.81024333333333332 0.54730766666666664 -0.20800033333333334 -0.80785581446410626 0.55275547300632644 -0.20452474201936535 +-0.74148199999999997 0.60197033333333339 -0.29520200000000002 -0.73906234222990586 0.60726071395459069 -0.29158408664569857 +-0.9934303333333333 0.067718666666666663 -0.088402033333333338 -0.99314918002006447 0.067643366773000799 -0.095284212528030668 +-0.91331600000000002 0.2833236666666667 -0.29138366666666671 -0.91162683613135609 0.28243667588778676 -0.29860682470196653 +-0.88811699999999993 0.235012 -0.39416099999999998 -0.890681142321188 0.24272715970079453 -0.38440945443239094 +-0.88821033333333332 0.289103 -0.35613033333333338 -0.88604481153509118 0.28797485361117353 -0.36331126550021547 +-0.5071836666666667 0.77994399999999997 0.36575233333333329 -0.50403015322344324 0.78467004695978271 0.36089683019622731 +-0.47919333333333336 0.83556433333333324 0.26749133333333336 -0.47564586046431578 0.83961015499386216 0.26232766353235332 +-0.7083356666666667 0.69966133333333325 -0.089924799999999985 -0.7038151510559455 0.70424258900951187 -0.09320197942788723 +-0.78020833333333339 0.6142103333333333 -0.1155074 -0.77599904496904304 0.61942346543754434 -0.11891195344655786 +-0.98179066666666659 0.067108333333333339 0.17578733333333332 -0.98236697934278294 0.073740260498035559 0.17180655365444594 +-0.39416099999999998 0.88811699999999993 -0.235012 -0.39029244070833502 0.89169613543267312 -0.22923745937426254 +-0.95185399999999998 0.18443866666666667 0.24347300000000002 -0.95246277304167826 0.17830859445972633 0.24702370556599079 +-0.39211200000000002 0.89509833333333333 0.21071133333333333 -0.39886049622107295 0.89271516295955666 0.20969011034469823 +-0.96942466666666649 0.18714233333333333 0.156526 -0.97035780623413448 0.18083800786474119 0.16032262096157779 +-0.31356300000000004 0.90261333333333338 0.29375033333333334 -0.32141623142252845 0.89646988933045202 0.30501367789328204 +-0.96258599999999994 0.25397200000000003 0.09068166666666666 -0.96227939571058341 0.25377396032399235 0.098067026325627263 +-0.64312566666666671 0.73996333333333342 0.195437 -0.64494437574753827 0.74062748064621042 0.18846136766792621 +-0.96987800000000002 0.21437700000000001 0.112605 -0.96942041966637416 0.214167697613143 0.11981755811631437 +-0.67335333333333336 0.68025100000000005 0.28840266666666664 -0.67561848758426213 0.68146714538505249 0.28132221560890297 +-0.95051299999999994 0.25157233333333334 -0.1803963333333333 -0.9495936030701162 0.25112435222994195 -0.18763941143961896 +-0.97059266666666666 0.13337166666666667 0.19870833333333335 -0.97101274551131977 0.12695397055556645 0.20252638695919456 +-0.96388766666666659 0.21337133333333336 -0.15716566666666668 -0.96498961593619315 0.20708100103663879 -0.16097360077038111 +-0.95781033333333332 0.052552533333333339 0.28139533333333333 -0.95740639511441361 0.046056106024188338 0.28504706574864452 +-0.97835466666666659 0.13419600000000001 -0.15533166666666667 -0.97838757513424479 0.14084256474460208 -0.15139724164955903 +-0.73996333333333342 0.195437 0.64312566666666671 -0.74062748064621031 0.18846136766792798 0.64494437574753793 +-0.97513733333333319 0.174405 -0.134158 -0.97481076842484271 0.18106185771060812 -0.13023275104731188 +-0.68025100000000005 0.28840266666666664 0.67335333333333336 -0.68146714538505249 0.28132221560890297 0.67561848758426213 +-0.77994399999999997 0.36575233333333329 0.5071836666666667 -0.78467004695978271 0.36089683019622731 0.50403015322344324 +-0.83556433333333324 0.26749133333333336 0.47919333333333336 -0.83961015499386216 0.26232766353235332 0.47564586046431578 +-0.79050733333333334 0.60483999999999993 0.092675333333333332 -0.78646561875409737 0.61011351204287267 0.096090233324964344 +-0.71420500000000009 0.69031900000000002 0.11276623333333331 -0.70950505689328325 0.69507800521822616 0.11605662800852996 +-0.78747599999999995 0.53911566666666666 0.29756199999999999 -0.78538004564948849 0.54467029029810388 0.29413000316558424 +-0.49762466666666666 0.82988799999999996 -0.25101366666666663 -0.49412565227007843 0.83384124532456627 -0.2460662865250868 +-0.65713566666666667 0.68726900000000002 -0.30847566666666665 -0.65950617715867399 0.68858179013179976 -0.30150741382002177 +-0.6616523333333334 0.72279800000000005 -0.197798 -0.66344152060850281 0.72354710316866455 -0.19059102347411691 +-0.99859100000000012 -0.013590633333333333 0.044029100000000009 -0.9988128753081037 -0.0068038108128106942 0.048234306019492121 +-0.92589466666666664 0.3410583333333333 0.16028966666666666 -0.92729951609022887 0.34172478535605449 0.15277361857397345 +-0.97400100000000001 0.10685479999999999 -0.19805566666666666 -0.97425477158224116 0.10036775147702315 -0.20187608702538642 +-0.89509833333333333 0.21071133333333333 0.39211200000000002 -0.89271516295955666 0.20969011034469823 0.39886049622107295 +-0.90261333333333338 0.29375033333333334 0.31356300000000004 -0.90075490292340932 0.29279158384639536 0.32080164165440095 +-0.94157666666666662 0.24970966666666664 -0.22448566666666667 -0.94036205292087072 0.24911249832849999 -0.23165097151313302 +-0.58663266666666669 0.65703199999999995 0.47272399999999998 -0.58998962692897738 0.65911767202191729 0.46634336549865762 +-0.93505400000000005 0.28885866666666665 -0.203819 -0.93397663141277909 0.28826917001433544 -0.2111599810430089 +-0.50478966666666658 0.65467133333333327 0.56203933333333334 -0.50864425512068367 0.65717775549865221 0.55623593861820786 +-0.94919133333333328 0.29215933333333338 0.11390889999999999 -0.95098005149307741 0.28595536523492054 0.11775597970203884 +-0.96664833333333344 0.25472800000000001 0 -0.9669663063002002 0.25479681426981771 -0.0073990484590429539 +-0.97059266666666666 0.13337166666666667 -0.19870833333333335 -0.97101274551132022 0.12695397055556867 -0.20252638695919101 +-0.99207933333333331 0.054101533333333333 -0.11027263333333333 -0.99164764746382206 0.054013020860459747 -0.11712188888928872 +-0.65703199999999995 0.47272399999999998 0.58663266666666669 -0.65911767202191718 0.46634336549865757 0.58998962692897738 +-0.65467133333333327 0.56203933333333334 0.50478966666666658 -0.65717775549865221 0.55623593861820786 0.50864425512068367 +-0.65713566666666667 0.68726900000000002 0.30847566666666665 -0.65950617715867343 0.68858179013179954 0.30150741382002344 +-0.74148199999999997 0.60197033333333339 0.29520200000000002 -0.73906234222990685 0.60726071395458969 0.2915840866456984 +-0.81012700000000004 0.58566899999999988 1.1564823173178713e-18 -0.80672946273972779 0.59091102649086835 -0.0034253057058179774 +-0.87879200000000013 0.47646799999999995 0 -0.87594527869572436 0.48239666909390189 0.0036499832572823737 +-0.80900833333333333 0.5853666666666667 0.046535400000000005 -0.80536664437786765 0.59066725196862824 0.049967645285347626 +-0.90939900000000007 0.404609 0.092631633333333338 -0.90740336917538711 0.41073675447775659 0.088963161647027986 +-0.825125 0.55223 0.11626180000000001 -0.82132486405654326 0.55774163148492695 0.11979040108052387 +-0.91331600000000002 0.2833236666666667 0.29138366666666665 -0.91162683613135653 0.28243667588778471 0.29860682470196687 +-0.80566133333333345 0.58445933333333333 0.092900399999999994 -0.80177649552426944 0.58980757151104324 0.09634043706080414 +-0.86373599999999995 0.39010866666666666 0.3179366666666667 -0.86545918830920299 0.38438648650835555 0.32129024628976438 +-0.47272399999999998 0.58663266666666669 0.65703199999999995 -0.46634336549865762 0.58998962692897738 0.65911767202191718 +-0.56203933333333334 0.50478966666666658 0.65467133333333327 -0.55623593861820786 0.50864425512068367 0.65717775549865221 +-0.68726900000000002 0.30847566666666665 0.65713566666666667 -0.68858179013179954 0.30150741382002344 0.65950617715867343 +-0.94919133333333328 0.29215933333333333 -0.11390890000000002 -0.95098005149307707 0.28595536523492232 -0.11775597970203766 +-0.90939899999999996 0.404609 -0.092631633333333338 -0.907403369175387 0.41073675447775648 -0.088963161647030178 +-0.79050733333333334 0.60484000000000004 -0.092675333333333332 -0.78646561875409549 0.61011351204287456 -0.096090233324967592 +-0.7955836666666668 0.56853366666666671 -0.20766399999999999 -0.79307922087067173 0.57388007376662842 -0.20417397081111341 +-0.41684100000000002 0.64266266666666672 0.64228433333333335 -0.42399511837129866 0.63996385947581835 0.64083882385676638 +-0.80963433333333334 0.42354566666666665 -0.40547466666666665 -0.81144548502237734 0.41776477169150611 -0.40869159566884011 +-0.99207933333333331 -0.054101533333333333 0.11027263333333333 -0.99240482996690904 -0.05487374096346978 0.11009780202631003 +-0.54026033333333323 0.42592233333333329 0.72526299999999999 -0.5452962766935473 0.42914770675804437 0.72005848124195149 +-0.48563733333333331 0.67302499999999998 0.55721300000000007 -0.48216266629032711 0.67100777744573958 0.56326523578428966 +-0.50354433333333326 0.44788500000000003 0.73833599999999999 -0.51615957150728675 0.44054448209603864 0.73450653913777197 +-0.49416866666666664 0.58555666666666661 0.64203733333333324 -0.49014431522370427 0.58311474774123595 0.64787015768636913 +-0.83002100000000001 0.094685866666666674 0.5491476666666667 -0.82633832091363435 0.093151227236951961 0.55541680587994924 +-0.45446199999999998 0.88853966666666662 0.058519000000000009 -0.45770120718577129 0.88673026138413047 0.064954202991948873 +-0.54445066666666675 0.83522233333333329 0.07397256666666667 -0.55071371438576 0.83154149343230865 0.072478614003066502 +-0.7083356666666667 0.69966133333333325 0.089924799999999985 -0.70381515105594539 0.70424258900951187 0.093201979427887216 +-0.6616523333333334 0.72279800000000005 0.197798 -0.66344152060850248 0.72354710316866433 0.19059102347411849 +-0.90159 0.41595233333333331 -0.11581156666666666 -0.9041258793861191 0.41022123517546549 -0.11947774870406765 +-0.89096966666666655 0.45328200000000002 0 -0.88829956329805226 0.45925001961072781 0.0036476474659192515 +-0.81024333333333332 0.54730766666666664 0.20800033333333334 -0.80785581446410548 0.55275547300632821 0.20452474201936305 +-0.78020833333333339 0.61421033333333341 0.1155074 -0.77599904496904393 0.61942346543754312 0.11891195344655889 +-0.5491476666666667 0.83002100000000001 -0.094685866666666674 -0.55541680587994735 0.8263383209136359 -0.093151227236949824 +-0.47047800000000001 0.88093966666666679 -0.045717566666666674 -0.47367208159418261 0.87915537869836757 -0.052159172002283656 +-0.45446199999999998 0.88853966666666684 -0.058519000000000009 -0.45770120718577312 0.88673026138412925 -0.064954202991952745 +-0.47047800000000001 0.88093966666666679 0.045717566666666674 -0.47367208159417801 0.87915537869837013 0.05215917200228512 +-0.49762466666666666 0.82988799999999996 0.25101366666666663 -0.49412565227007543 0.83384124532456649 0.24606628652509174 +-0.39416099999999998 0.88811699999999993 0.235012 -0.40111014452966087 0.88567646916365717 0.2338543220152067 +-0.67302499999999998 0.55721300000000007 0.48563733333333331 -0.67100777744573958 0.56326523578428966 0.48216266629032711 +-0.58555666666666661 0.64203733333333324 0.49416866666666664 -0.58311474774123651 0.64787015768636802 0.49014431522370522 +-0.4059733333333333 0.79716033333333325 0.44612266666666667 -0.40926465225880088 0.79909671055864806 0.44039401856273114 +-0.486458 0.79575833333333323 0.35979033333333338 -0.48320205370506963 0.80038418386237031 0.35482521544863521 +-0.69445199999999996 0.62386399999999997 -0.35754099999999994 -0.69203077337497509 0.62922690351361499 -0.35378936190437066 +-0.88853966666666684 -0.058519000000000009 0.45446199999999998 -0.89280395272116786 -0.047483374616635085 0.44793574443269779 +-0.66024299999999991 0.64999866666666672 -0.37535166666666669 -0.65786067131660375 0.64872408443505769 -0.38259168758451034 +-0.88093966666666679 0.045717566666666674 0.47047800000000001 -0.87915537869837013 0.05215917200228512 0.47367208159417801 +-0.82988799999999996 0.25101366666666663 0.49762466666666666 -0.83384124532456649 0.24606628652509174 0.49412565227007543 +-0.88811699999999993 0.235012 0.39416099999999998 -0.88567646916365717 0.2338543220152067 0.40111014452966087 +-0.55721300000000007 0.48563733333333331 0.67302499999999998 -0.56326523578428966 0.48216266629032711 0.67100777744573958 +-0.64203733333333324 0.49416866666666664 0.58555666666666661 -0.64787015768636802 0.49014431522370522 0.58311474774123639 +-0.79716033333333325 0.44612266666666667 0.4059733333333333 -0.79909671055864828 0.44039401856273125 0.40926465225880038 +-0.79575833333333323 0.35979033333333338 0.486458 -0.80038418386237031 0.35482521544863521 0.48320205370506963 +-0.88853966666666662 0.058519000000000009 0.45446199999999998 -0.88673026138413047 0.064954202991948873 0.45770120718577129 +-0.83522233333333329 0.07397256666666667 0.54445066666666675 -0.83154149343230854 0.072478614003066488 0.55071371438576 +-0.72279800000000005 0.197798 0.6616523333333334 -0.72354710316866433 0.19059102347412032 0.66344152060850214 +-0.85113933333333336 0.48120366666666664 -0.20809633333333333 -0.84913149454651216 0.48691927864691631 -0.20465903608483363 +-0.5491476666666667 0.83002100000000001 0.094685866666666674 -0.55541680587994913 0.82633832091363435 0.093151227236951961 +-0.8594763333333334 0.48395833333333332 -0.16242533333333334 -0.85729015236698847 0.4896869529383035 -0.1589348381462842 +-0.59016800000000003 0.80696699999999988 0 -0.5909612291105667 0.80666632059680043 -0.007367014520702893 +-0.886714 0.45208100000000001 -0.093025999999999998 -0.88445594026952357 0.45797227380334932 -0.089437610373616749 +-0.64312566666666671 0.73996333333333342 -0.195437 -0.6449443757475386 0.74062748064621053 -0.1884613676679246 +-0.86579899999999999 0.48595499999999997 -0.11634196666666667 -0.86342620828191075 0.49170321319073101 -0.11279686604614993 +-0.71420500000000009 0.69031900000000002 -0.11276623333333331 -0.70950505689328547 0.69507800521822405 -0.11605662800853019 +-0.81869099999999995 0.55018 0.16232933333333333 -0.81615883216746976 0.5555569967244075 0.15887474332186538 +-0.74252466666666672 0.58916000000000002 -0.31757133333333332 -0.7402059022604538 0.59456587600237121 -0.31398509734113256 +-0.84310399999999996 0.51867133333333337 0.13947866666666667 -0.84064736639470805 0.52423280975073394 0.13598517034769717 +-0.67335333333333336 0.68025100000000005 -0.28840266666666664 -0.67561848758426168 0.68146714538505226 -0.28132221560890458 +-0.60766633333333331 0.79385399999999995 0 -0.60841673740322078 0.79358332414804944 -0.0073879145739746722 +-0.54445066666666664 0.83522233333333329 -0.07397256666666667 -0.55071371438575767 0.8315414934323101 -0.072478614003067404 +-0.39211200000000002 0.89509833333333333 -0.21071133333333333 -0.3988604962210725 0.89271516295955677 -0.20969011034469831 +-0.47919333333333336 0.83556433333333346 -0.26749133333333336 -0.47564586046431373 0.83961015499386371 -0.26232766353235182 +-0.89509833333333333 0.21071133333333333 -0.39211200000000002 -0.8945836430607591 0.22441838558653693 -0.38646667874329416 +-0.97316533333333333 0.22856499999999999 0 -0.97348482854419649 0.2286362961356681 0.0072617273178821875 +-0.94745033333333328 0.30541266666666672 -0.091388200000000017 -0.94714630499905217 0.30518549098693637 -0.098872104345486891 +-0.86487900000000006 0.40426999999999996 -0.29640233333333338 -0.86674451897969018 0.39858206134778706 -0.29981040540717457 +-0.90261333333333338 0.29375033333333334 -0.31356299999999998 -0.90075490292340965 0.29279158384639542 -0.32080164165440017 +-0.88093966666666679 -0.045717566666666674 0.47047800000000001 -0.88556582162034936 -0.035138373824508899 0.46318297708664202 +-0.95067500000000005 0.065210166666666666 0.30218800000000001 -0.95032134560726178 0.058869783707050996 0.30565288915612826 +-0.95781033333333332 -0.052552533333333339 0.28139533333333333 -0.95817725084869765 -0.053265830875932035 0.28117451381149139 +-0.90159 0.41595233333333331 0.11581156666666666 -0.90412587938612021 0.41022123517546238 0.11947774870406962 +-0.94745033333333328 0.30541266666666667 0.091388199999999989 -0.94714630499905228 0.30518549098693631 0.098872104345486558 +-0.99343033333333342 0.067718666666666663 0.088402033333333338 -0.99314918002006425 0.067643366773000743 0.095284212528033194 +-0.97400099999999989 0.10685479999999999 0.19805566666666666 -0.97425477158224116 0.10036775147702312 0.20187608702538648 +-0.46239333333333338 0.87702533333333343 -0.12820000000000001 -0.4584930575925823 0.88016659891075499 -0.12284491972108266 +-0.95071200000000011 0.2652113333333333 0.15845133333333333 -0.94995293871590381 0.26481784541564923 0.16571337596715502 +-0.82634566666666665 0.512992 0.23085599999999998 -0.82422732983832869 0.51857550385034679 0.22743956461868695 +-0.85368566666666668 0.44141599999999998 0.27509233333333333 -0.85582148664388757 0.43586295898178562 0.2785553158464012 +-0.56228400000000001 0.81096399999999991 -0.15991200000000003 -0.55631566138132926 0.81488320691282745 -0.1627213691969196 +-0.38492966666666667 0.78580233333333338 0.48337000000000002 -0.39192762437768786 0.7902768238673411 0.47101515783232467 +-0.65308166666666667 0.74134766666666663 -0.152499 -0.64779101941242789 0.74574375744789889 -0.15566966112925465 +-0.78580233333333338 0.48337000000000002 0.38492966666666667 -0.78795806538569857 0.47780772978512109 0.38835790265065528 +-0.62975100000000006 0.76574933333333328 -0.12819266666666668 -0.62439601093608088 0.76998727876036943 -0.13133625574954749 +-0.75846266666666662 0.55494633333333321 0.34069333333333335 -0.75635608685024946 0.56052363866255128 0.33725171665251996 +-0.43225599999999997 0.87782600000000011 -0.20480499999999999 -0.42840399148712766 0.88133427653309726 -0.19929855264346252 +-0.75846266666666662 0.55494633333333343 -0.34069333333333329 -0.75635608685024736 0.56052363866255428 -0.3372517166525198 +-0.44779533333333332 0.87820433333333325 -0.16621833333333333 -0.44389085236663067 0.88154577838886183 -0.16074187939053641 +-0.78580233333333338 0.48337000000000002 -0.38492966666666667 -0.78795806538569824 0.47780772978512143 -0.38835790265065567 +-0.85368566666666668 0.44141599999999998 -0.27509233333333333 -0.85582148664388724 0.4358629589817859 -0.27855531584640186 +-0.82634566666666665 0.512992 -0.23085599999999998 -0.82422732983832858 0.51857550385034701 -0.22743956461868695 +-0.99636266666666662 0.067883199999999991 0.044236466666666668 -0.9963838699098394 0.067863492853656962 0.051124652773333792 +-0.99636266666666662 0.067883200000000005 -0.044236466666666668 -0.9963838699098394 0.067863492853656962 -0.05112465277333382 +-0.95948299999999997 0.17222033333333334 -0.22148599999999999 -0.96008295290377954 0.16594163099917869 -0.22517570616052571 +-0.93079100000000004 0.24733633333333335 -0.26791033333333331 -0.92927996516300548 0.24659535849110642 -0.27500813718376799 +-0.62168500000000004 0.71214633333333344 0.32508266666666669 -0.62416619523254113 0.71348946815858938 0.31835411031696542 +-0.54656866666666659 0.75857066666666662 0.35377466666666663 -0.54351793677866556 0.76333618881165943 0.34915056243740034 +-0.71228033333333329 0.69998833333333332 0.045047166666666666 -0.70806005434928998 0.70449501035845985 0.048350179057723187 +-0.71228033333333329 0.69998833333333332 -0.045047166666666666 -0.70806005434928787 0.70449501035846218 -0.048350179057721307 +-0.96912566666666666 0.22787766666666665 0.090339766666666668 -0.96827388382743496 0.23444795137290469 0.086486091337179799 +-0.32367233333333334 0.94016166666666656 0.10338779999999999 -0.3311736036703527 0.93644996227835042 0.11569577512108319 +-0.97937533333333338 0.18860866666666665 0.067428199999999994 -0.97923504472179479 0.18851326331064888 0.074575309216083394 +-0.36871933333333334 0.91232100000000005 0.17627566666666664 -0.37532063667939408 0.91014157955069441 0.1754329639934904 +-0.5360043333333333 0.80893300000000001 0.240173 -0.53261569555775756 0.81292932223895054 0.23551313740351429 +-0.60889233333333337 0.76388599999999995 0.21233233333333335 -0.6108394290685476 0.76458305805533811 0.205640315186391 +-0.93079100000000004 0.24733633333333335 0.26791033333333336 -0.92927996516300448 0.24659535849110747 0.27500813718377004 +-0.95948299999999997 0.17222033333333334 0.22148599999999999 -0.96008295290377987 0.16594163099918297 0.22517570616052096 +-0.80893300000000001 0.240173 0.5360043333333333 -0.81292932223895054 0.23551313740351432 0.53261569555775756 +-0.76388599999999995 0.21233233333333335 0.60889233333333337 -0.76458305805533711 0.20564031518639039 0.61083942906854904 +-0.71214633333333344 0.32508266666666669 0.62168500000000004 -0.71348946815858938 0.31835411031696542 0.62416619523254113 +-0.75857066666666662 0.35377466666666663 0.54656866666666659 -0.76333618881165943 0.34915056243740034 0.54351793677866567 +-0.79390499999999997 0.60570833333333329 -0.046424566666666667 -0.79011515187319126 0.61092791490957399 -0.049851073856478557 +-0.79390499999999997 0.60570833333333329 0.046424566666666667 -0.79011515187319092 0.61092791490957432 0.04985107385648023 +-0.60889233333333337 0.76388599999999995 -0.21233233333333335 -0.6108394290685476 0.76458305805533811 -0.205640315186391 +-0.5360043333333333 0.80893300000000001 -0.240173 -0.53261569555775667 0.81292932223895165 -0.2355131374035126 +-0.54656866666666659 0.75857066666666662 -0.35377466666666663 -0.55359415410163071 0.75489485576016901 -0.35166357401831322 +-0.62168500000000004 0.71214633333333344 -0.32508266666666669 -0.62416619523254091 0.7134894681585896 -0.31835411031696542 +-0.36871933333333334 0.91232100000000005 -0.17627566666666664 -0.37816637595496666 0.9101077339310748 -0.16939334324562666 +-0.32367233333333334 0.94016166666666656 -0.10338779999999999 -0.33117360367035303 0.9364499622783502 -0.11569577512108313 +-0.91232100000000005 0.17627566666666664 -0.36871933333333334 -0.91226504142130083 0.18997715828638431 -0.36287900673643603 +-0.94016166666666656 0.10338779999999999 0.32367233333333334 -0.94001455110956655 0.097221136438832331 0.32698729995493991 +-0.91232100000000005 0.17627566666666664 0.36871933333333334 -0.91014157955069441 0.1754329639934904 0.37532063667939408 +-0.52859633333333333 0.75163733333333338 0.39362766666666671 -0.52558986975230082 0.75661146373700161 0.38896578481340915 +-0.56844033333333321 0.69010933333333335 0.44713033333333335 -0.56573110516150704 0.69560424707062685 0.44281265576996143 +-0.43270133333333333 0.60621733333333339 0.66676166666666659 -0.43959342241024213 0.60343563223279073 0.66529922645788675 +-0.8741593333333334 0.448237 -0.18500266666666665 -0.87226383732852786 0.4540904957276336 -0.18154233605069528 +-0.96824666666666659 0.1734623333333333 0.17811533333333332 -0.96901160014443299 0.16710050047550851 0.18191740303324516 +-0.88711800000000007 0.41159166666666663 -0.20715033333333333 -0.8892894466046567 0.40591117468182031 -0.21071402047801255 +-0.9575326666666667 0.25299433333333332 0.13573933333333332 -0.95898012037253266 0.24673191513420487 0.13957252876010487 +-0.88726233333333349 0.37065766666666672 -0.27328033333333329 -0.88896961193760038 0.36493619269398281 -0.2766850272666237 +-0.9575326666666667 0.25299433333333332 -0.13573933333333332 -0.95898012037253266 0.24673191513420484 -0.13957252876010484 +-0.89832000000000001 0.37411466666666665 -0.22882 -0.90018936382514625 0.36834417313747281 -0.23233957771277344 +-0.96824666666666681 0.1734623333333333 -0.17811533333333332 -0.96901160014443299 0.16710050047550642 -0.18191740303324644 +-0.90979499999999991 0.098831166666666651 0.40237200000000001 -0.90779782046843382 0.10529195624222863 0.40597625682229971 +-0.75163733333333338 0.39362766666666671 0.52859633333333333 -0.75661146373700161 0.38896578481340915 0.52558986975230071 +-0.92208600000000007 0.062795833333333342 0.38106733333333337 -0.92045209254229532 0.069331913553990904 0.3846570304796883 +-0.69010933333333335 0.44713033333333335 0.56844033333333321 -0.69560424707062685 0.44281265576996143 0.56573110516150704 +-0.94615333333333329 0.025922166666666666 0.32170033333333331 -0.94504816080489829 0.032492402180593086 0.32531249216686087 +-0.60621733333333339 0.66676166666666659 0.43270133333333333 -0.60933963695998472 0.66864974072821837 0.42616045224018656 +-0.93196800000000002 0.0254641 0.36080433333333334 -0.93072619151734903 0.031991211980968173 0.36431486214482056 +-0.64155600000000002 0.68182433333333325 0.35048066666666666 -0.64417761721265054 0.68331502799398403 0.34367974918492489 +-0.42672700000000002 0.74024633333333334 0.51888433333333328 -0.43031481624311191 0.74257141516746727 0.51324151458922507 +-0.81501833333333329 0.57461866666666672 0.069812933333333341 -0.81127669562692939 0.58004985260737885 0.073295918186543962 +-0.40621499999999999 0.77051866666666669 0.49050400000000005 -0.41370749673404611 0.76793922060792985 0.4889943359571095 +-0.8592116666666666 0.51040266666666667 0.023347500000000004 -0.85606910857888263 0.51615839539286479 0.026947953585021549 +-0.94310333333333329 0.29077133333333333 0.15908700000000001 -0.94232903316217553 0.29032128949182034 0.16652189684076446 +-0.38479733333333338 0.79909666666666668 0.46117466666666668 -0.39236710167654804 0.79667676969368395 0.45973272904197526 +-0.92509966666666665 0.28642166666666663 0.24792833333333333 -0.92371401298963163 0.28569149297949875 0.25521127139242045 +-0.44713033333333335 0.56844033333333321 0.69010933333333335 -0.4517678401305939 0.57156411753670577 0.68499655339879262 +-0.66676166666666659 0.43270133333333333 0.60621733333333339 -0.66864974072821837 0.42616045224018656 0.60933963695998472 +-0.68182433333333325 0.35048066666666666 0.64155600000000002 -0.68331502799398403 0.34367974918492483 0.64417761721265043 +-0.92509966666666665 0.28642166666666663 -0.24792833333333333 -0.92371401298963063 0.28569149297950008 -0.25521127139242233 +-0.94310333333333352 0.29077133333333333 -0.15908700000000001 -0.9423290331621752 0.29032128949181979 -0.1665218968407669 +-0.8592116666666666 0.51040266666666667 -0.023347500000000004 -0.85606910857888263 0.51615839539286479 -0.026947953585021542 +-0.81501833333333329 0.57461866666666672 -0.069812933333333341 -0.81127669562693017 0.58004985260737785 -0.073295918186543282 +-0.64155600000000002 0.68182433333333325 -0.35048066666666666 -0.64417761721264988 0.68331502799398358 -0.34367974918492672 +-0.60621733333333327 0.66676166666666659 -0.43270133333333333 -0.60010626624401753 0.67813792847666066 -0.42426574122364386 +-0.95071200000000011 0.2652113333333333 -0.15845133333333333 -0.94995293871590447 0.26481784541564529 -0.16571337596715754 +-0.44483566666666663 0.69255433333333338 0.56726066666666652 -0.44132178373940228 0.69047027427160068 0.57313688028635257 +-0.96912566666666666 0.22787766666666665 -0.090339766666666654 -0.96827388382743562 0.23444795137290286 -0.086486091337178675 +-0.530864 0.46733033333333335 0.70645666666666662 -0.52516150273427764 0.47097737860154382 0.70879172179949557 +-0.81060299999999996 0.57337433333333332 0.11609513333333334 -0.81516384919802187 0.56816097492600415 0.11269873793347107 +-0.76528366666666681 0.17033933333333337 0.62024233333333345 -0.76955908667167139 0.17342408363417988 0.61457538132983147 +-0.78491366666666673 0.60333300000000001 0.13862866666666665 -0.78977294646896079 0.5982768684989791 0.13536425541771033 +-0.81039466666666671 0.11985033333333334 0.57299266666666671 -0.81426104685283174 0.12297498202123427 0.56732363019268606 +-0.67640700000000009 0.6563119999999999 -0.33322933333333332 -0.67432926819011041 0.65519559013053941 -0.34058593149994354 +-0.40879966666666667 0.89596266666666668 0.17178266666666667 -0.4047855585152268 0.89921363051880443 0.16602258372494677 +-0.69105033333333343 0.66134433333333331 -0.29050300000000001 -0.68928038046168461 0.66038496798852575 -0.29796686252902188 +-0.43996133333333337 0.89261233333333323 0.095399433333333339 -0.43580085237525801 0.89554756027352977 0.089845335756103872 +-0.67133866666666664 0.72445833333333332 -0.15433566666666665 -0.66617006348422581 0.728967499909568 -0.15755580152129087 +-0.63388266666666671 0.77276233333333322 0.0213279 -0.63476764166231714 0.7725789567217396 0.013849069615263583 +-0.63904300000000003 0.74907166666666669 -0.17287133333333335 -0.64073927206007164 0.7496386400507864 -0.16581644846859134 +-0.68441399999999997 0.72562366666666678 0.066507233333333332 -0.68541061871691356 0.72577596020978963 0.058834847936028105 +-0.32170033333333337 0.94615333333333329 -0.025922166666666666 -0.3348955198491228 0.94191163998673666 -0.025445102524491871 +-0.83572600000000008 0.51622199999999996 -0.18541133333333334 -0.83343328548439544 0.52181054957140371 -0.18194149884695324 +-0.88145000000000007 0.45051700000000006 -0.13919633333333334 -0.87937670074054175 0.45639309314145032 -0.13565383417898386 +-0.88145000000000007 0.450517 0.13919633333333334 -0.87937670074054197 0.45639309314144993 0.13565383417898408 +-0.83572600000000008 0.51622200000000007 0.18541133333333334 -0.83343328548439399 0.52181054957140682 0.18194149884695118 +-0.51263133333333333 0.83179066666666657 -0.21144266666666667 -0.51937906437705672 0.82838944494361133 -0.20980065536796771 +-0.53848333333333331 0.83172233333333334 -0.13303166666666669 -0.54492004699198227 0.82810678224403889 -0.13153440457796517 +-0.41863333333333336 0.90579366666666672 0.060890133333333339 -0.42194873846513697 0.90410814445318599 0.067436824073323215 +-0.34229266666666663 0.93706633333333345 0.064171566666666666 -0.35165294100359623 0.93435161769751562 0.057682437444657918 +-0.34229266666666663 0.93706633333333345 -0.064171566666666666 -0.35165294100359606 0.93435161769751574 -0.057682437444657626 +-0.41863333333333336 0.90579366666666672 -0.060890133333333339 -0.42194873846513786 0.90410814445318555 -0.06743682407332359 +-0.53848333333333331 0.83172233333333334 0.13303166666666666 -0.54492004699198604 0.82810678224403678 0.13153440457796253 +-0.51263133333333333 0.83179066666666668 0.21144266666666667 -0.51937906437705927 0.82838944494361066 0.20980065536796388 +-0.72738566666666671 0.5831803333333333 0.3607103333333333 -0.72515901134339633 0.58873065737464669 0.35712829814323638 +-0.69255433333333338 0.56726066666666652 0.44483566666666663 -0.69047027427160068 0.57313688028635257 0.44132178373940228 +-0.46733033333333335 0.70645666666666662 0.530864 -0.47097737860154382 0.70879172179949557 0.52516150273427764 +-0.42738333333333339 0.76859166666666656 0.47530133333333335 -0.43077019257902827 0.77066937243953504 0.4695804079910918 +-0.957121 0.22573400000000002 0.17963466666666669 -0.95821518598554145 0.21958206357096252 0.18332314285057411 +-0.91984566666666667 0.38031999999999999 0.092365500000000003 -0.92226052033247408 0.37443368855343678 0.096098623883706893 +-0.83172233333333334 0.13303166666666666 0.53848333333333331 -0.82810678224403689 0.13153440457796253 0.54492004699198604 +-0.83179066666666668 0.21144266666666667 0.51263133333333333 -0.828389444943611 0.20980065536796402 0.51937906437705861 +-0.5831803333333333 0.3607103333333333 0.72738566666666671 -0.58830324750178309 0.36394911437863414 0.72210825443410054 +-0.56726066666666652 0.44483566666666663 0.69255433333333338 -0.57313688028635257 0.44132178373940228 0.69047027427160068 +-0.70645666666666662 0.530864 0.46733033333333335 -0.70879172179949557 0.52516150273427764 0.47097737860154382 +-0.76859166666666656 0.47530133333333335 0.42738333333333339 -0.77066937243953504 0.4695804079910918 0.43077019257902827 +-0.89596266666666668 0.17178266666666667 0.40879966666666667 -0.89921363051880443 0.16602258372494677 0.4047855585152268 +-0.89261233333333323 0.095399433333333339 0.43996133333333337 -0.89554756027352977 0.089845335756103872 0.43580085237525801 +-0.76859166666666656 0.47530133333333335 -0.42738333333333339 -0.77066937243953615 0.46958040799109052 -0.43077019257902743 +-0.70645666666666662 0.530864 -0.46733033333333335 -0.71299010291467446 0.53421515880298542 -0.45415776691676535 +-0.62024233333333345 0.76528366666666681 0.17033933333333337 -0.61457538132983391 0.76955908667166983 0.1734240836341788 +-0.57299266666666671 0.81039466666666671 0.11985033333333334 -0.56732363019268606 0.81426104685283163 0.12297498202123427 +-0.57299266666666659 0.81039466666666671 -0.11985033333333332 -0.56732363019269194 0.81426104685282774 -0.12297498202123396 +-0.62024233333333334 0.76528366666666658 -0.17033933333333331 -0.61457538132983835 0.76955908667166673 -0.17342408363417691 +-0.69255433333333338 0.56726066666666652 -0.44483566666666663 -0.70358514576365794 0.55884114687399777 -0.4389356618244718 +-0.72738566666666671 0.5831803333333333 -0.3607103333333333 -0.72515901134339766 0.58873065737464292 -0.35712829814324015 +-0.68441399999999997 0.72562366666666678 -0.066507233333333332 -0.68541061871691122 0.72577596020979185 -0.05883484793602782 +-0.63388266666666659 0.77276233333333322 -0.0213279 -0.63476764166231425 0.77257895672174193 -0.013849069615265221 +-0.43996133333333337 0.89261233333333323 -0.095399433333333339 -0.43580085237525779 0.89554756027353 -0.089845335756103428 +-0.40879966666666667 0.89596266666666668 -0.17178266666666667 -0.40478555851522569 0.89921363051880498 -0.16602258372494683 +-0.99152333333333331 0.1083407 -0.066672933333333337 -0.99138998769079067 0.10827560874102048 -0.073636165423080657 +-0.98138033333333341 0.18889533333333333 -0.022494500000000001 -0.98154734302435331 0.18890534802977815 -0.02965776268670366 +-0.89535266666666669 0.41411966666666666 -0.16169066666666668 -0.89770291975186667 0.4084110330386006 -0.16531756095864961 +-0.87693233333333342 0.40834266666666669 -0.2520843333333333 -0.87894504702395804 0.40265962781541953 -0.25557939752570047 +-0.90579366666666672 0.060890133333333339 0.41863333333333336 -0.90410814445318599 0.067436824073323215 0.42194873846513697 +-0.93706633333333345 0.064171566666666666 0.34229266666666663 -0.93557127087762915 0.070833179066782742 0.34596106406893684 +-0.87693233333333342 0.40834266666666669 0.25208433333333335 -0.87894504702395693 0.40265962781542119 0.25557939752570163 +-0.89535266666666669 0.41411966666666666 0.16169066666666668 -0.89770291975186667 0.40841103303860016 0.16531756095865036 +-0.98138033333333341 0.18889533333333333 0.022494500000000001 -0.98154734302435265 0.18890534802978196 0.029657762686698959 +-0.99152333333333331 0.1083407 0.066672933333333337 -0.99138998769079067 0.10827560874102046 0.073636165423080657 +-0.33699166666666663 0.88216099999999997 0.32794299999999998 -0.34739504234236873 0.88112360434592474 0.32083933427868566 +-0.38305933333333336 0.83560033333333339 0.39287366666666662 -0.39050299487623924 0.83320247888691223 0.39151122610902539 +-0.448243 0.75252933333333327 0.48174699999999998 -0.45166981585712235 0.75464015189833467 0.47593341822827639 +-0.65384799999999998 0.26978799999999997 0.70640999999999998 -0.65882563641033198 0.27298298335787707 0.70102002225724913 +-0.93204233333333331 0.34265900000000005 0.11477476666666668 -0.93314089294629388 0.34314701905525424 0.1072296471358853 +-0.99082366666666655 0.0135059 0.13190333333333334 -0.99024265399362199 0.013486538246426618 0.13869967374797831 +-0.98819733333333326 0.13523933333333332 0.066924399999999995 -0.98805584750948217 0.13516985978345639 0.073991561738076916 +-0.99792933333333345 0.054364866666666671 0.022089066666666667 -0.99809991255386388 0.054369697504552846 0.028991387569981084 +-0.31066633333333332 0.91822966666666661 0.24427766666666664 -0.31708091584157094 0.91986749040706861 0.23087549220580375 +-0.88216099999999997 0.32794299999999998 0.33699166666666663 -0.88471295825504714 0.32939739480348468 0.32981864379122122 +-0.33417800000000003 0.89978666666666662 0.27934999999999999 -0.33808910550904386 0.89668911896521064 0.28573480828469072 +-0.83560033333333339 0.39287366666666662 0.38305933333333336 -0.83724221359370155 0.38707866519608619 0.38625844033073886 +-0.75252933333333327 0.48174699999999998 0.448243 -0.75464015189833467 0.47593341822827639 0.45166981585712235 +-0.78698500000000005 0.49789366666666668 0.36340366666666668 -0.78925240999627411 0.49239401663173693 0.36691792774452714 +-0.70640999999999998 0.65384799999999998 0.26978799999999997 -0.70479467267294227 0.65296399002290029 0.27731299483654515 +-0.76758566666666661 0.59795000000000009 0.22930300000000003 -0.76500174879047633 0.60316909560327592 0.22574181370902247 +-0.84640700000000002 0.50645033333333334 0.16249633333333333 -0.84406979811615768 0.5121238262359693 0.15898227105428958 +-0.82769799999999993 0.50003500000000001 0.25335033333333334 -0.82570502810573576 0.50570450234366338 0.24994832039894552 +-0.81505266666666676 0.36941800000000002 -0.44557533333333338 -0.82130042010977755 0.37231878741567836 -0.43225494845614176 +-0.8491063333333333 0.3845263333333333 -0.36120633333333335 -0.85072491442126907 0.37874348378578099 -0.36444546021693586 +-0.88776866666666665 0.39816433333333334 -0.22942100000000001 -0.88979840505496688 0.39240147024361355 -0.23298043804639001 +-0.84134999999999993 0.46429433333333331 -0.27543933333333337 -0.84362348998201264 0.45879542369625348 -0.27893756711125228 +-0.7735186666666668 0.61237266666666668 -0.16120433333333331 -0.77853690347198579 0.60738391140291692 -0.15800339901769681 +-0.75407966666666659 0.60629733333333335 -0.25115599999999999 -0.75151765294156647 0.61150609282538182 -0.2475510366664517 +-0.71116800000000013 0.59003299999999992 -0.38131833333333337 -0.70890793280855779 0.59565965362480766 -0.37767594554680267 +-0.77333333333333332 0.53363466666666659 -0.34131466666666666 -0.77133226789601028 0.53930071204673635 -0.33793679066991283 +-0.98179066666666659 0.067108333333333339 -0.17578733333333332 -0.98236697934278339 0.073740260498037474 -0.17180655365444233 +-0.99082366666666655 -0.0135059 -0.13190333333333334 -0.99178517435877034 -0.0067661867722486049 -0.12773561225714034 +-0.99792933333333345 -0.054364866666666671 -0.022089066666666667 -0.9982313602512044 -0.055201045773037596 -0.022067984878397 +-0.87240766666666669 0.3519316666666667 -0.33817800000000003 -0.87385423840641729 0.34611912009617785 -0.34143861047483776 +-0.88460299999999992 0.27425666666666665 -0.37628966666666663 -0.88227808718678835 0.27306946667847437 -0.38342984135035107 +-0.92261566666666672 0.16568633333333335 -0.34739533333333333 -0.92529999561685483 0.17297997398064335 -0.33748755045646417 +-0.42532333333333333 0.8185486666666667 0.38521833333333327 -0.42839710847502843 0.82010513309657784 0.37934613233678682 +-0.46225066666666664 0.83147599999999999 0.30709066666666668 -0.4587511241532331 0.83572586903813284 0.30184379720080817 +-0.50945999999999991 0.83918366666666666 0.18871566666666664 -0.51617476502425097 0.83580172950210074 0.18708041296046063 +-0.55621733333333334 0.7935566666666668 0.24544933333333332 -0.55288852066134253 0.79769549250502214 0.24082397089592744 +-0.69375566666666666 0.69718433333333341 -0.17881733333333336 -0.69272430128514695 0.69666909427137036 -0.18650795022227129 +-0.75307866666666679 0.64288299999999998 -0.13748199999999999 -0.74853514111358521 0.64796557746314287 -0.14083945803971601 +-0.82948300000000008 0.55351399999999995 -0.069904266666666673 -0.82591243697637506 0.55900058124443752 -0.073396162134857681 +-0.78704799999999997 0.61590633333333333 -0.02318863333333333 -0.78338299412773948 0.62097108768282216 -0.026570524523818553 +-0.42712433333333338 0.89007000000000003 -0.15726633333333331 -0.42314614003084272 0.89330010217195965 -0.15153307109857209 +-0.34739533333333333 0.92261566666666672 -0.16568633333333335 -0.3534082431497419 0.92298813249420142 -0.15230075820126199 +-0.43906033333333339 0.8545950000000001 0.27610266666666666 -0.4428134935284937 0.85112219891836305 0.28197023328263054 +-0.35613033333333338 0.88821033333333332 0.289103 -0.36331126550021559 0.88604481153509118 0.28797485361117314 +-0.36137766666666665 0.93070366666666671 0.050886266666666659 -0.36502863962319798 0.92921846382396145 0.057507727684847861 +-0.32475833333333332 0.93660599999999994 0.12905900000000001 -0.32867094192977053 0.93463255466382789 0.13578438678126564 +-0.706986 0.68900766666666657 0.15741033333333332 -0.71253214023460698 0.6844258919168752 0.15446406574501442 +-0.68642633333333336 0.68407633333333318 0.24532733333333331 -0.68844469340977232 0.68510252344690936 0.23807233455948076 +-0.64234066666666667 0.66917433333333332 0.37270666666666669 -0.64507244158114729 0.67076762158679903 0.36599500398683876 +-0.60260966666666671 0.72989533333333334 0.32161633333333334 -0.60506997784072791 0.73117473379442421 0.31507749931798351 +-0.98626099999999994 0.053858766666666669 0.15395899999999998 -0.98553329470949724 0.053751240861339394 0.16073247688289261 +-0.96906700000000001 0.053126699999999999 0.23962399999999998 -0.96880100156939641 0.046540654298456517 0.24343086668622338 +-0.93070366666666671 0.050886266666666659 0.36137766666666665 -0.92921846382396134 0.057507727684847416 0.3650286396231982 +-0.93660599999999994 0.12905900000000001 0.32475833333333332 -0.93661097008373928 0.1228748323020797 0.32811837239863972 +-0.68407633333333318 0.24532733333333331 0.68642633333333336 -0.68890344475793097 0.24846438758447367 0.6809386843930435 +-0.66917433333333332 0.37270666666666669 0.64234066666666667 -0.67076762158679903 0.36599500398683876 0.64507244158114729 +-0.72989533333333334 0.32161633333333334 0.60260966666666671 -0.73117473379442421 0.31507749931798351 0.60506997784072791 +-0.8185486666666667 0.38521833333333327 0.42532333333333333 -0.82010513309657784 0.37934613233678677 0.42839710847502843 +-0.83147599999999999 0.30709066666666668 0.46225066666666664 -0.83572586903813284 0.30184379720080817 0.4587511241532331 +-0.83918366666666666 0.18871566666666664 0.50945999999999991 -0.83580172950210108 0.1870804129604608 0.51617476502425041 +-0.7935566666666668 0.24544933333333332 0.55621733333333334 -0.79769549250502214 0.24082397089592744 0.55288852066134253 +-0.86782533333333334 0.26792600000000005 -0.41765333333333327 -0.87489911065577086 0.25764841568228636 -0.41008394271191495 +-0.77725566666666668 0.60104266666666673 0.18421899999999999 -0.77452027865281281 0.6061889964652234 0.18070207115596243 +-0.73650733333333329 0.66197633333333339 0.13666566666666666 -0.73182174996875138 0.66695967107811682 0.14000615496486118 +-0.66672633333333342 0.74198800000000009 0.065746466666666656 -0.66770622348079367 0.74215319872214924 0.058112208282758662 +-0.72190399999999999 0.69115666666666664 0.022636933333333335 -0.71778099415599816 0.69578410488358966 0.025979295982935562 +-0.41765333333333327 0.86782533333333334 -0.26792600000000005 -0.42334462759604402 0.86943171170077949 -0.25469162721734612 +-0.46397566666666673 0.82155833333333328 -0.33029600000000003 -0.46971916764604105 0.82386469499442905 -0.31719216239946213 +-0.56508966666666671 0.75308399999999998 -0.3359476666666667 -0.56209129792291423 0.75773911645994829 -0.33148876932081817 +-0.72339666666666658 0.6343293333333333 -0.27136433333333337 -0.72077251091362049 0.63941435217610454 -0.26764953529286678 +-0.68338033333333337 0.69481033333333331 -0.22262666666666664 -0.68528096861268695 0.69572320105804475 -0.21531191691777071 +-0.61583966666666667 0.77343700000000004 -0.14808233333333334 -0.61020748195836316 0.77769021399991123 -0.15114483124078729 +-0.59284466666666669 0.77091966666666656 -0.231459 -0.59490829083334729 0.77172429004474452 -0.22477932656870506 +-0.96511000000000002 0.013230166666666666 0.26024266666666662 -0.96639424395002105 0.019804902525625792 0.25630047033943903 +-0.92297966666666653 0.38112833333333329 0.046245866666666663 -0.92558692684680421 0.37521515029816055 0.050024312459218692 +-0.97317900000000002 0.066652000000000003 -0.21864833333333333 -0.97308297863106963 0.060095725620956525 -0.22248150588436777 +-0.96942466666666671 0.18714233333333333 -0.15652599999999997 -0.97035780623413459 0.18083800786474347 -0.1603226209615741 +-0.95185399999999998 0.18443866666666667 -0.24347300000000002 -0.95246277304167848 0.17830859445972211 -0.24702370556599276 +-0.8545950000000001 0.27610266666666666 0.43906033333333339 -0.85112219891836305 0.28197023328263054 0.4428134935284937 +-0.88821033333333332 0.289103 0.35613033333333338 -0.88604481153509118 0.28797485361117314 0.36331126550021559 +-0.92622133333333334 0.30024966666666669 0.22642999999999999 -0.92499859936706652 0.29958638636084534 0.23372117635382444 +-0.93752266666666673 0.22195833333333334 0.26666133333333336 -0.93604786651851102 0.22128896037937598 0.27357921631651538 +-0.9754856666666667 0.013347533333333333 0.21812066666666666 -0.97432715951755866 0.013302101343303454 0.2247434989633699 +-0.61909166666666671 0.58682400000000001 0.52120766666666662 -0.61690317697310926 0.59298236445217278 0.51749626635290347 +-0.97022466666666674 -0.026577699999999999 0.23935300000000001 -0.9686335278347431 -0.026915953275993328 0.2470316178420576 +-0.54404466666666662 0.63320566666666667 0.54987266666666679 -0.5478502093490385 0.63565620846605242 0.54387621087410787 +-0.4233276666666666 0.69372299999999998 0.58210099999999987 -0.43057847532739385 0.69102569647357381 0.58059078824758248 +-0.92402866666666661 0.38139066666666666 0 -0.92180623590250022 0.38763288722182038 -0.003742752374870731 +-0.46822133333333332 0.72146866666666665 0.50946199999999997 -0.47178022136037795 0.72371471387138386 0.50364713407227257 +-0.92666433333333342 0.3685053333333333 0.069218666666666664 -0.92911799838312503 0.36249943800450635 0.073033571232359887 +-0.95533000000000001 0.2934586666666667 0.022837133333333332 -0.95549324395593516 0.29344660324575023 0.030360365579072277 +-0.98309933333333321 0.17549666666666663 -0.044893366666666663 -0.98310986548934121 0.17545399672639003 -0.05206618298152426 +-0.98309933333333321 0.17549666666666663 0.044893366666666663 -0.98310986548934154 0.17545399672638801 0.052066182981523088 +-0.9690669999999999 0.053126699999999992 -0.23962399999999998 -0.97155742118613653 0.059919872423214671 -0.22909776565241713 +-0.98626099999999994 0.053858766666666669 -0.15395899999999998 -0.98553329470949724 0.053751240861341337 -0.16073247688289144 +-0.99792933333333345 0.054364866666666657 -0.022089066666666667 -0.9980999125538641 0.054369697504548758 -0.028991387569981035 +-0.98819733333333326 0.13523933333333332 -0.066924399999999995 -0.98805584750948228 0.13516985978345439 -0.073991561738078152 +-0.58682400000000001 0.52120766666666662 0.61909166666666671 -0.59298236445217278 0.51749626635290347 0.61690317697310926 +-0.63320566666666667 0.54987266666666679 0.54404466666666662 -0.63565620846605242 0.54387621087410787 0.5478502093490385 +-0.69372299999999998 0.58210099999999987 0.4233276666666666 -0.69153626177537608 0.58789561778403399 0.41970982981110611 +-0.72146866666666665 0.50946199999999997 0.46822133333333332 -0.72371471387138386 0.50364713407227257 0.47178022136037795 +-0.68338033333333337 0.69481033333333331 0.22262666666666667 -0.68528096861268906 0.69572320105804253 0.21531191691777093 +-0.72339666666666658 0.63432933333333341 0.27136433333333332 -0.72077251091361894 0.63941435217610787 0.26764953529286273 +-0.77333333333333332 0.53363466666666659 0.34131466666666666 -0.77133226789600973 0.53930071204673902 0.33793679066991 +-0.71116800000000013 0.59003300000000003 0.38131833333333337 -0.70890793280855735 0.59565965362480866 0.37767594554680212 +-0.37628966666666663 0.88460299999999992 0.27425666666666665 -0.38342984135034897 0.88227808718678913 0.27306946667847509 +-0.33817800000000003 0.87240766666666669 0.3519316666666667 -0.34473359131040449 0.87539952177230762 0.33887228907517075 +-0.91254999999999997 0.40545666666666663 -0.046381466666666669 -0.91035533692556203 0.41162135449004122 -0.042673423332679219 +-0.91254999999999997 0.40545666666666663 0.046381466666666669 -0.91035533692556214 0.41162135449004122 0.042673423332679233 +-0.89696566666666666 0.40099866666666667 0.18426133333333336 -0.89916619954909283 0.39521794737259502 0.18789071201907198 +-0.86921966666666661 0.473638 0.13936799999999999 -0.8669867281394934 0.47946617526273372 0.13581678839120653 +-0.88460299999999992 0.27425666666666665 0.37628966666666663 -0.88227808718678913 0.27306946667847509 0.38342984135034897 +-0.87240766666666669 0.3519316666666667 0.33817800000000003 -0.87385423840641674 0.34611912009617762 0.34143861047483937 +-0.84134999999999993 0.46429433333333331 0.27543933333333331 -0.84362348998201164 0.45879542369625476 0.27893756711125273 +-0.88776866666666676 0.39816433333333334 0.22942099999999999 -0.88979840505496699 0.39240147024361327 0.23298043804638979 +-0.52120766666666662 0.61909166666666671 0.58682400000000001 -0.51749626635290347 0.61690317697310926 0.59298236445217278 +-0.54987266666666679 0.54404466666666662 0.63320566666666667 -0.54387621087411042 0.54785020934903716 0.63565620846605164 +-0.58210099999999987 0.4233276666666666 0.69372299999999998 -0.58789561778403399 0.41970982981110611 0.69153626177537608 +-0.50946199999999997 0.46822133333333332 0.72146866666666665 -0.51444356399800606 0.47146469876576047 0.71628825013310127 +-0.69481033333333331 0.22262666666666667 0.68338033333333337 -0.69958676724384505 0.22576650097074502 0.67794383405761049 +-0.63432933333333341 0.27136433333333332 0.72339666666666658 -0.64329553737755441 0.27792264981404191 0.71339319614814445 +-0.59003300000000003 0.38131833333333337 0.71116800000000013 -0.59565965362480855 0.37767594554680212 0.70890793280855735 +-0.95533000000000001 0.2934586666666667 -0.022837133333333332 -0.95549324395593505 0.29344660324575045 -0.030360365579072079 +-0.9266643333333332 0.3685053333333333 -0.069218666666666664 -0.92911799838312392 0.36249943800450973 -0.073033571232358319 +-0.86921966666666661 0.473638 -0.13936800000000002 -0.86698672813949351 0.479466175262734 -0.13581678839120431 +-0.89696566666666666 0.40099866666666673 -0.18426133333333336 -0.89916619954909283 0.39521794737259475 -0.18789071201907209 +-0.7365073333333334 0.66197633333333339 -0.13666566666666666 -0.7318217499687496 0.66695967107811915 -0.14000615496485952 +-0.77725566666666668 0.60104266666666673 -0.18421899999999999 -0.77452027865281448 0.60618899646522062 -0.18070207115596457 +-0.82769799999999993 0.50003500000000001 -0.25335033333333329 -0.82570502810573598 0.50570450234366304 -0.24994832039894563 +-0.84640700000000002 0.50645033333333334 -0.16249633333333333 -0.84406979811615801 0.51212382623596819 -0.15898227105429136 +-0.46225066666666664 0.83147599999999999 -0.30709066666666668 -0.46936902125113544 0.82849236639082535 -0.30543922590571398 +-0.72146866666666665 0.50946199999999997 -0.46822133333333332 -0.71722232079543291 0.52228627623649215 -0.4613124626625989 +-0.69372299999999998 0.58210099999999987 -0.4233276666666666 -0.69968377873390342 0.57754182821501188 -0.4205806063511579 +-0.81854866666666659 0.38521833333333327 -0.42532333333333333 -0.82170604611030551 0.38720105801141941 -0.41818000246377873 +-0.78698499999999993 0.49789366666666668 -0.36340366666666668 -0.78925240999627422 0.49239401663173787 -0.36691792774452564 +-0.75252933333333338 0.48174699999999998 -0.448243 -0.75580479793942767 0.48384356982241633 -0.44119667649840871 +-0.9690669999999999 -0.053126699999999992 0.23962399999999998 -0.96942691840980122 -0.053878969775750629 0.23939195157394144 +-0.98626099999999994 -0.053858766666666669 0.15395899999999998 -0.98659498098831921 -0.054652534041547601 0.15376424815767611 +-0.99792933333333345 -0.054364866666666657 0.022089066666666667 -0.9982313602512044 -0.055201045773037569 0.022067984878397 +-0.559728 0.5970939999999999 0.57400033333333333 -0.55994620037192888 0.59735900477779025 0.57412757476011167 +-0.56423166666666669 0.63009233333333325 0.53283766666666665 -0.56704658136215702 0.62444740471079663 0.53714394096502771 +-0.53625699999999998 0.58218099999999995 0.61056333333333335 -0.5365278179115468 0.58231563453184998 0.61077524703187092 +-0.51848166666666662 0.60181733333333343 0.60686300000000004 -0.52511565719112763 0.59853198481846182 0.6049900905981872 +-0.524752 0.52701999999999993 0.66796766666666674 -0.51874676577863232 0.53067049118758136 0.67029144614633118 +-0.442803 0.54917199999999999 0.7082613333333333 -0.45630557666652244 0.54261329906249511 0.70523473282556615 +-0.51180999999999999 0.56587633333333331 0.64585599999999999 -0.50559691531690243 0.56946362135064565 0.64813805873458907 +-0.41395699999999996 0.62469333333333332 0.66158633333333328 -0.42253729274034357 0.63102572869157736 0.65059108968147195 +-0.93660599999999994 0.12905900000000001 -0.32475833333333332 -0.93265246963949344 0.14159484160179467 -0.33182867824694795 +-0.99082366666666666 0.0135059 -0.13190333333333334 -0.99024265399362199 0.01348653824642662 -0.13869967374797831 +-0.86274066666666671 0.041936266666666666 0.50345533333333337 -0.86568807684060856 0.037305954185398463 0.49919176615637961 +-0.82571500000000009 0.019053333333333332 0.56336366666666671 -0.82872041913392602 0.028888500372300327 0.55891673928835739 +-0.484402 0.87451599999999996 -0.011107333333333332 -0.48691759602847123 0.8732734946888302 -0.017454459367512616 +-0.52142733333333335 0.85163333333333335 0.048800966666666667 -0.52744699324391919 0.84822554935274741 0.048094560432330069 +-0.59213633333333338 0.79599699999999995 0.12320566666666666 -0.58650905296908507 0.80003949953512854 0.12626927563302187 +-0.52259766666666663 0.83897433333333327 0.14976733333333334 -0.52914679883788596 0.83549373783461456 0.14816841538857795 +-0.90789966666666666 0.41769333333333331 -0.023229066666666669 -0.9053476049192074 0.42381623217034836 -0.026935397082356281 +-0.85168633333333332 0.52129700000000001 0.046674766666666666 -0.84841767537666091 0.52693800205961572 0.05023733764724303 +-0.85168633333333332 0.52129700000000001 -0.046674766666666666 -0.84841767537666168 0.52693800205961483 -0.050237337647241621 +-0.7540796666666667 0.60629733333333335 0.25115600000000005 -0.75151765294156436 0.61150609282538471 0.24755103666645098 +-0.77351866666666658 0.61237266666666668 0.16120433333333331 -0.77853690347198412 0.60738391140291847 0.15800339901769919 +-0.78704799999999997 0.61590633333333333 0.023188633333333333 -0.78338299412773749 0.62097108768282461 0.026570524523820194 +-0.82948300000000008 0.55351399999999995 0.069904266666666673 -0.82591243697637595 0.55900058124443597 0.073396162134858695 +-0.56336366666666671 0.82571499999999987 -0.019053333333333332 -0.56474952199137984 0.82517112931182202 -0.012271298250802436 +-0.50345533333333337 0.86274066666666671 -0.041936266666666666 -0.49919176615637934 0.86568807684060878 -0.037305954185397922 +-0.39939166666666664 0.91511966666666666 -0.049583866666666671 -0.40288215829790114 0.91352935046269079 -0.056125683679036524 +-0.44236933333333334 0.88855800000000007 -0.11912266666666665 -0.43833872652535383 0.89161673536432962 -0.11348461590183041 +-0.32475833333333332 0.93660599999999994 -0.12905900000000001 -0.33870737283028768 0.93207372228690832 -0.12851416969592108 +-0.36137766666666665 0.93070366666666671 -0.050886266666666673 -0.36502863962319804 0.92921846382396145 -0.057507727684847132 +-0.52142733333333335 0.85163333333333335 -0.048800966666666667 -0.52744699324391708 0.84822554935274896 -0.048094560432325448 +-0.484402 0.87451599999999996 0.011107333333333332 -0.48691759602847329 0.8732734946888292 0.017454459367511763 +-0.44236933333333334 0.88855800000000007 0.11912266666666667 -0.43833872652535377 0.89161673536432973 0.11348461590183041 +-0.39939166666666664 0.91511966666666666 0.049583866666666664 -0.40288215829790164 0.91352935046269046 0.056125683679036448 +-0.46397566666666662 0.82155833333333339 0.33029599999999998 -0.4605655564218808 0.82594164087883659 0.32511501672512499 +-0.41765333333333338 0.86782533333333334 0.26792600000000005 -0.41075562274117583 0.8709359943737891 0.26972265772576098 +-0.34739533333333333 0.92261566666666661 0.16568633333333335 -0.35408080159719629 0.92056554615304842 0.16488135484713429 +-0.42712433333333327 0.89007000000000003 0.15726633333333331 -0.42314614003084344 0.8933001021719591 0.15153307109857345 +-0.63009233333333325 0.53283766666666665 0.56423166666666669 -0.62444740471079663 0.53714394096502771 0.56704658136215702 +-0.60181733333333343 0.60686300000000004 0.51848166666666662 -0.59853198481846182 0.6049900905981872 0.52511565719112763 +-0.54917199999999999 0.7082613333333333 0.442803 -0.54640906653262145 0.71359351338641641 0.43843064407472682 +-0.62469333333333332 0.66158633333333328 0.41395699999999996 -0.62767902678650844 0.66336490189426844 0.40738930553850972 +-0.36120633333333335 0.8491063333333333 0.38452633333333336 -0.36777664094370871 0.85243758053438257 0.37160531975316291 +-0.44557533333333338 0.81505266666666676 0.36941800000000002 -0.44913041287985422 0.81096811994909945 0.3749834405045035 +-0.88855800000000007 0.11912266666666667 0.44236933333333334 -0.89161673536432962 0.11348461590183043 0.43833872652535383 +-0.91511966666666666 0.049583866666666664 0.39939166666666664 -0.91352935046269046 0.056125683679036448 0.40288215829790164 +-0.82155833333333339 0.33029599999999998 0.46397566666666662 -0.82594164087883648 0.32511501672512494 0.46056555642188074 +-0.86782533333333334 0.26792600000000005 0.41765333333333338 -0.8709359943737891 0.26972265772576098 0.41075562274117583 +-0.92261566666666661 0.16568633333333335 0.34739533333333333 -0.92056554615304842 0.16488135484713429 0.35408080159719629 +-0.89007000000000003 0.15726633333333331 0.42712433333333327 -0.8933001021719591 0.15153307109857345 0.42314614003084344 +-0.53283766666666665 0.56423166666666669 0.63009233333333325 -0.53714394096502771 0.56704658136215702 0.62444740471079663 +-0.60686300000000004 0.51848166666666662 0.60181733333333343 -0.6049900905981872 0.52511565719112763 0.59853198481846182 +-0.7082613333333333 0.442803 0.54917199999999999 -0.71359351338641641 0.43843064407472682 0.54640906653262145 +-0.66158633333333328 0.41395699999999996 0.62469333333333332 -0.66336490189426844 0.40738930553850972 0.62767902678650844 +-0.8491063333333333 0.38452633333333336 0.36120633333333335 -0.8507249144212693 0.37874348378577949 0.36444546021693713 +-0.81505266666666676 0.36941800000000002 0.44557533333333338 -0.81096811994909945 0.37498344050450355 0.44913041287985428 +-0.87451599999999996 -0.011107333333333332 0.484402 -0.87546534326900227 0 0.48328090458333656 +-0.85163333333333335 0.048800966666666667 0.52142733333333335 -0.84822554935274896 0.048094560432326988 0.52744699324391675 +-0.79599699999999995 0.12320566666666666 0.59213633333333338 -0.80003949953512854 0.12626927563302187 0.58650905296908507 +-0.83897433333333327 0.14976733333333334 0.52259766666666663 -0.83549373783461522 0.14816841538857692 0.52914679883788518 +-0.69718433333333341 0.1788173333333333 0.69375566666666666 -0.70570543814547382 0.18530327643778483 0.68384393710358127 +-0.77091966666666656 0.231459 0.59284466666666669 -0.7717242900447443 0.22477932656870703 0.59490829083334673 +-0.77343700000000004 0.14808233333333334 0.61583966666666667 -0.77769021399991622 0.15114483124078609 0.61020748195835717 +-0.9754856666666667 -0.013347533333333333 0.21812066666666666 -0.97679511352946191 -0.0066794954721203581 0.21407169482489635 +-0.94157666666666662 0.24970966666666664 0.22448566666666667 -0.94036205292087083 0.24911249832849996 0.23165097151313285 +-0.50345533333333337 0.86274066666666671 0.041936266666666666 -0.499191766156376 0.86568807684061067 0.037305954185399184 +-0.97857266666666654 -0.053538400000000007 0.19711033333333336 -0.97891707379046766 -0.054331382555824669 0.19689962801153485 +-0.94620066666666658 0.21025733333333332 0.24458033333333337 -0.94697438464037487 0.20412201729289686 0.2481405184391732 +-0.56336366666666671 0.82571500000000009 0.019053333333333332 -0.56474952199138351 0.82517112931181968 0.012271298250800073 +-0.96100333333333332 0.13229433333333332 0.241457 -0.96127411794910778 0.12594081216775527 0.24513462014103787 +-0.64172033333333334 0.7653523333333333 -0.042977366666666662 -0.6426250462957882 0.7653603228425917 -0.035448922291373072 +-0.94891033333333341 0.17061899999999999 0.26418166666666665 -0.94936299928170276 0.16442848172763883 0.26771845284102713 +-0.64172033333333334 0.76535233333333341 0.042977366666666676 -0.64262504629578698 0.76536032284259281 0.03544892229137158 +-0.81053333333333333 0.20004 0.54990566666666663 -0.80686525433351086 0.19816170544713413 0.55650732236296963 +-0.68642633333333336 0.68407633333333318 -0.24532733333333334 -0.68844469340977232 0.68510252344690903 -0.23807233455948226 +-0.78686166666666668 0.22737200000000002 0.57315533333333335 -0.79088056821078456 0.22302929594463317 0.5698823211655436 +-0.706986 0.68900766666666657 -0.15741033333333332 -0.7125321402346092 0.68442589191687297 -0.15446406574501459 +-0.73761066666666675 0.23808166666666666 0.63133833333333333 -0.73851835051376802 0.23115459264988453 0.63337050787930538 +-0.72190399999999999 0.69115666666666664 -0.022636933333333331 -0.71778099415599472 0.69578410488359299 -0.025979295982934563 +-0.7614169999999999 0.25407399999999997 0.59584766666666666 -0.76233057365141144 0.24744053744883177 0.59801778978835018 +-0.6667263333333332 0.74198800000000009 -0.06574646666666667 -0.66770622348079334 0.74215319872214913 -0.058112208282762021 +-0.78593499999999994 0.32604033333333332 0.52472299999999994 -0.79047081147777842 0.32123464889336234 0.52150186629773509 +-0.62469333333333343 0.66158633333333328 -0.41395699999999996 -0.62488537760230467 0.6685102547388766 -0.40325215953270166 +-0.55225633333333335 0.83257966666666661 0.037025366666666663 -0.54729575317202273 0.83595829826741441 0.040510271755655997 +-0.55225633333333335 0.83257966666666672 -0.037025366666666663 -0.54729575317202073 0.83595829826741552 -0.040510271755656801 +-0.52259766666666663 0.83897433333333327 -0.14976733333333334 -0.52914679883788662 0.835493737834614 -0.14816841538857897 +-0.59213633333333326 0.79599699999999995 -0.12320566666666666 -0.58650905296908373 0.80003949953512954 -0.12626927563302098 +-0.43906033333333333 0.8545950000000001 -0.27610266666666666 -0.44613821149444965 0.8517840206616758 -0.27463553737628993 +-0.55621733333333323 0.7935566666666668 -0.24544933333333332 -0.55288852066134297 0.79769549250502136 -0.24082397089592902 +-0.50946000000000002 0.83918366666666666 -0.18871566666666664 -0.51617476502425286 0.83580172950209886 -0.18708041296046374 +-0.83257966666666661 0.037025366666666663 0.55225633333333335 -0.8359582982674143 0.04051027175565599 0.54729575317202273 +-0.95053166666666655 0.30608266666666667 0.045750099999999995 -0.95267325633349931 0.2999141427284871 0.049650515187289822 +-0.95053166666666655 0.30608266666666667 -0.045750100000000009 -0.95267325633349931 0.29991414272848715 -0.049650515187289843 +-0.93525400000000003 0.30251400000000001 -0.18189 -0.93433465145714811 0.30200242947475098 -0.18924400037464209 +-0.96410033333333323 0.2269926666666667 -0.13521533333333333 -0.96537328610346762 0.22074824340540278 -0.13901306237624433 +-0.83560033333333339 0.39287366666666673 -0.38305933333333336 -0.83724221359369977 0.38707866519609063 -0.38625844033073792 +-0.88216099999999997 0.32794300000000004 -0.33699166666666663 -0.8847129582550477 0.32939739480348551 -0.32981864379121911 +-0.93752266666666662 0.22195833333333334 -0.26666133333333336 -0.93604786651851213 0.22128896037937723 -0.27357921631651044 +-0.92622133333333334 0.30024966666666669 -0.22643000000000002 -0.92499859936706652 0.29958638636084506 -0.23372117635382425 +-0.91511966666666666 -0.049583866666666671 0.39939166666666664 -0.91559703367523992 -0.050328370179532594 0.39893499104512464 +-0.97317900000000002 0.066651999999999989 0.21864833333333333 -0.9730829786310693 0.060095725620958447 0.22248150588436871 +-0.96511000000000002 -0.013230166666666666 0.26024266666666662 -0.9665950348576382 -0.0066277061296098868 0.25622277826145901 +-0.93070366666666671 -0.050886266666666673 0.36137766666666665 -0.93114137455847357 -0.051749775504558296 0.36096772891850654 +-0.90789966666666666 0.41769333333333331 0.023229066666666669 -0.90534760491920652 0.42381623217035008 0.026935397082357385 +-0.93617499999999998 0.34366800000000003 0.068979233333333334 -0.9360263168050752 0.34349602657608297 0.076584684988370705 +-0.96410033333333323 0.2269926666666667 0.13521533333333333 -0.96537328610346729 0.2207482434054048 0.1390130623762432 +-0.93525400000000003 0.30251400000000001 0.18189 -0.93433465145714889 0.30200242947474887 0.18924400037464159 +-0.99082366666666666 -0.0135059 0.13190333333333334 -0.99178517435877078 -0.0067661867722445448 0.12773561225713778 +-0.99859100000000012 0.013590633333333333 -0.044029100000000009 -0.99861153173989281 0.013589455871418216 -0.050895337362313081 +-0.99904000000000004 -0.027195333333333332 -0.022029699999999999 -0.9991629923347658 -0.027631906953648543 -0.030162766231593224 +-0.81503000000000003 0.50893833333333338 0.27570366666666662 -0.81305737281356072 0.51455838411771748 0.27233688301013181 +-0.82827800000000007 0.4594753333333334 0.31960099999999997 -0.8304139645378581 0.45393507348914425 0.32304116851714432 +-0.80145 0.49010133333333333 0.34173666666666663 -0.8037056196105522 0.48464651299618527 0.34521737274803649 +-0.80106633333333332 0.53071599999999997 -0.27557166666666666 -0.79897191617966434 0.53626565764556022 -0.27214522150162823 +-0.78783499999999995 0.52574633333333332 -0.31970700000000002 -0.78586803119594784 0.53135648596864515 -0.31634114870382884 +-0.81468733333333343 0.46787466666666666 -0.34159099999999998 -0.81682318175526458 0.46233366051553559 -0.34503257252252501 +-0.82864533333333334 0.47329366666666667 -0.29773366666666662 -0.83090030398783732 0.4678449865199103 -0.30120716030848999 +-0.99904000000000004 0.027195333333333332 0.022029699999999999 -0.99921308916777873 0.02719535532663734 0.0288723931194266 +-0.94964533333333334 0.13090333333333334 -0.28351199999999999 -0.95200289488640144 0.13790605895656843 -0.27326252401487244 +-0.94891033333333341 0.17061899999999999 -0.2641816666666667 -0.94936299928170409 0.16442848172763477 -0.26771845284102513 +-0.61521733333333328 0.74463999999999997 0.25760333333333335 -0.61737720596625711 0.74562370031847525 0.2507801488887873 +-0.60073866666666664 0.74090699999999998 0.29917166666666667 -0.60310957117011399 0.74208291099934232 0.29252657719554881 +-0.76245399999999997 0.64488299999999998 0.046073400000000007 -0.75844767523465428 0.64985474643003283 0.049456369392688278 +-0.73876500000000001 0.67308933333333343 0.022829233333333337 -0.73476307479340197 0.67781810829049682 0.026188470624263417 +-0.53430833333333327 0.83759833333333333 0.11136133333333335 -0.54073640577352522 0.83398268268268572 0.1098955160892395 +-0.30483500000000002 0.94127266666666676 0.14291733333333334 -0.3125814579923708 0.93714717110982948 0.1550742138468155 +-0.74517200000000006 0.6408423333333334 0.18265566666666666 -0.74224043434855891 0.64576760458469762 0.17906238713645095 +-0.32930966666666667 0.92134066666666659 0.20500533333333334 -0.33328886111515593 0.91877258032363729 0.21160217556066777 +-0.67133866666666675 0.72445833333333332 0.15433566666666665 -0.66617006348422658 0.72896749990956811 0.15755580152128734 +-0.54323266666666659 0.78036933333333325 0.30863433333333329 -0.54003468947667688 0.78483938517234197 0.3039566969884519 +-0.70211766666666664 0.6987686666666667 0.13452966666666666 -0.70143880438084616 0.69836613739573827 0.14236692680438723 +-0.55890933333333326 0.78424633333333338 0.26818333333333338 -0.55566098937893771 0.78851015439986138 0.2636144937038305 +-0.5698266666666667 0.79545466666666664 0.20475399999999999 -0.5718381831134367 0.79603524377618096 0.19831536249045315 +-0.92134066666666659 0.20500533333333334 0.32930966666666667 -0.91939394482786763 0.20415305190362681 0.33620872328404433 +-0.60520099999999999 0.77270733333333341 0.18981166666666668 -0.60701838370830541 0.77331676655313386 0.18305698677723931 +-0.93463066666666661 0.20800333333333332 0.28728666666666669 -0.93299278306842348 0.20727921075590988 0.29421046128689032 +-0.64819233333333337 0.74987199999999998 0.13007733333333335 -0.64294891754529637 0.75422846516416497 0.13325206101010117 +-0.78036933333333325 0.30863433333333329 0.54323266666666659 -0.78483938517234197 0.3039566969884519 0.54003468947667677 +-0.63904300000000003 0.74907166666666669 0.17287133333333335 -0.6407392720600753 0.74963864005078429 0.16581644846858651 +-0.78424633333333338 0.26818333333333338 0.55890933333333326 -0.78851015439986005 0.26361449370382972 0.55566098937893993 +-0.93825066666666668 0.34415833333333334 -0.023011 -0.9407270663819467 0.33809798042240319 -0.0268764248126237 +-0.74463999999999997 0.25760333333333335 0.61521733333333328 -0.74562370031847547 0.25078014888878547 0.61737720596625767 +-0.92297966666666664 0.38112833333333329 -0.046245866666666663 -0.92558692684680688 0.37521515029815367 -0.050024312459220746 +-0.74090699999999998 0.29917166666666667 0.60073866666666664 -0.74208291099934232 0.29252657719554881 0.60310957117011399 +-0.74612066666666665 0.66373700000000002 -0.045797666666666674 -0.74198240659208958 0.66861355370751485 -0.049173408529602648 +-0.77135733333333334 0.63545900000000011 -0.02310496666666666 -0.76753243870691357 0.64046221897630851 -0.026497199787162678 +-0.61778100000000002 0.73429599999999995 -0.28015933333333337 -0.62004007182029175 0.73539666254061686 -0.27338993774681891 +-0.59584766666666666 0.7614169999999999 -0.25407399999999997 -0.59801778978835129 0.76233057365141077 -0.24744053744883129 +-0.54111533333333328 0.79043766666666659 -0.285908 -0.53782883589854569 0.79478643964980389 -0.28116660296842483 +-0.56335400000000002 0.76401200000000002 -0.3134513333333333 -0.56025037874058548 0.76856706053370527 -0.3089080552261631 +-0.9250423333333333 0.21922133333333335 -0.30914666666666668 -0.92324824765135227 0.21840485990216033 -0.31608857995793671 +-0.92716333333333323 0.17985566666666666 -0.32766433333333334 -0.92525904843422724 0.17910077093038035 -0.33439289337952693 +-0.95351733333333344 0.14467333333333335 0.26307333333333333 -0.95380451865368532 0.13841331687968292 0.26664338339095522 +-0.94127266666666676 0.14291733333333334 0.30483500000000002 -0.94143256773237549 0.13675142777156432 0.30822681164244103 +-0.46888933333333332 0.76326933333333324 0.44369833333333336 -0.47210024090889563 0.76515024679936405 0.43779728454689493 +-0.50950966666666664 0.74315733333333345 0.43292666666666668 -0.51283621984455163 0.73835079283231242 0.43799214415266191 +-0.441085 0.65946733333333329 0.60814899999999994 -0.43731684113983749 0.65714368989187133 0.61393497317775447 +-0.98424200000000006 0.13481499999999999 0.11134860000000001 -0.98380455546183188 0.13465699226458813 0.1183050763357274 +-0.97513733333333341 0.174405 0.134158 -0.97481076842484138 0.1810618577106119 0.13023275104731649 +-0.97389733333333328 0.21503999999999998 -0.067673766666666677 -0.97374709075627186 0.2149376029675775 -0.074956187698206111 +-0.96987800000000002 0.21437700000000001 -0.112605 -0.96942041966637382 0.21416769761314297 -0.11981755811631678 +-0.76326933333333324 0.44369833333333336 0.46888933333333332 -0.76515024679936416 0.43779728454689493 0.47210024090889557 +-0.74315733333333345 0.43292666666666668 0.50950966666666664 -0.73835079283231253 0.43799214415266186 0.51283621984455152 +-0.65946733333333329 0.60814899999999994 0.441085 -0.65714368989187133 0.61393497317775447 0.43731684113983749 +-0.64266266666666672 0.64228433333333335 0.41684100000000002 -0.64016870646839363 0.64782790771205845 0.41292012453742261 +-0.58604533333333331 0.72415899999999989 0.36257199999999995 -0.58874408788405008 0.7256335018984903 0.35614101126395381 +-0.82926700000000009 0.54054366666666664 0.13940533333333335 -0.82668447040560356 0.54600115691594608 0.13592469619850284 +-0.54774466666666666 0.7468366666666667 0.37619833333333336 -0.54478613472164339 0.75171303266381928 0.37166595746505388 +-0.83464799999999995 0.54221033333333335 0.093158400000000016 -0.83892675353125234 0.53681230026146576 0.0896351298180975 +-0.48915333333333333 0.75987199999999999 0.42735233333333333 -0.48610025123081052 0.76492383199278635 0.42260865703723388 +-0.91633200000000004 0.36574833333333334 0.16081700000000002 -0.91841129259366272 0.359810916179994 0.16448952013472135 +-0.50828066666666671 0.76825099999999991 0.38827200000000001 -0.50520740867948521 0.77309568655942207 0.38352122971039732 +-0.92663333333333331 0.32759366666666667 0.18257666666666669 -0.92838638141934415 0.32159180386994679 0.18621879195926977 +-0.89181766666666673 0.0117591 0.45166433333333328 -0.89054752003018423 0.01789422989084084 0.45453812942887695 +-0.60814899999999994 0.441085 0.65946733333333329 -0.61393497317775447 0.43731684113983749 0.65714368989187133 +-0.88267033333333333 -0.022866433333333335 0.46890266666666669 -0.88784400135689723 -0.017561216450396246 0.45980934411053048 +-0.64228433333333335 0.41684100000000002 0.64266266666666672 -0.64782790771205845 0.41292012453742261 0.64016870646839352 +-0.72415899999999989 0.36257199999999995 0.58604533333333331 -0.7256335018984903 0.35614101126395381 0.58874408788405008 +-0.89808433333333326 0.36037766666666665 -0.2507543333333333 -0.89979701339302987 0.35458216684466864 -0.25423772663537425 +-0.7468366666666667 0.37619833333333336 0.54774466666666666 -0.75171303266381928 0.37166595746505388 0.54478613472164339 +-0.91756233333333326 0.32513833333333336 -0.22731633333333331 -0.91941515130072438 0.32608678172641165 -0.21987084923194705 +-0.75987199999999999 0.42735233333333333 0.48915333333333333 -0.76492383199278646 0.42260865703723388 0.48610025123081058 +-0.87450700000000003 0.47524699999999998 -0.093143066666666663 -0.87208010639908595 0.48110197469553623 -0.089538695361360499 +-0.76825099999999991 0.38827200000000001 0.50828066666666671 -0.77309568655942207 0.38352122971039737 0.50520740867948533 +-0.85703933333333338 0.50979199999999991 -0.069971700000000012 -0.85433531332205415 0.51546247378909904 -0.066404898359457662 +-0.48189433333333337 0.52900333333333338 0.698017 -0.48662321822659543 0.53213040109363308 0.69284563916843744 +-0.49342066666666667 0.48894566666666667 0.7188633333333333 -0.49159291960562052 0.49606095366247921 0.71572336251172752 +-0.52627699999999988 0.83234166666666665 -0.17215800000000001 -0.53285688470931336 0.82885946709064051 -0.17045681045973168 +-0.76574933333333339 0.12819266666666668 0.62975100000000006 -0.76965126444640275 0.13845016904563748 0.62327239777427013 +-0.74868333333333348 0.62970633333333337 -0.20557800000000001 -0.74587853360328304 0.63471859439677691 -0.20198395737482688 +-0.47139533333333333 0.85913866666666661 0.19760733333333333 -0.47812770940072241 0.85609518430535281 0.19620124595017835 +-0.73784766666666657 0.62639233333333333 -0.25005566666666668 -0.7352000916415915 0.63148093086238055 -0.24639938962460284 +-0.44779533333333332 0.87820433333333325 0.16621833333333333 -0.44389085236663006 0.88154577838886228 0.16074187939053561 +-0.69264300000000001 0.64932366666666663 -0.31294899999999998 -0.69072853248152899 0.64827777600392777 -0.3203592039497456 +-0.60036900000000004 0.79510999999999987 0.082435966666666666 -0.59527376626746664 0.79895366475196572 0.085569765531694444 +-0.72513433333333344 0.62218933333333337 -0.29389033333333336 -0.72262666059799807 0.62736747502042201 -0.29020813337927986 +-0.63074133333333338 0.77298066666666665 0.063896999999999995 -0.63181107752023669 0.77305026458344028 0.056639657045134385 +-0.58604533333333342 0.72415899999999989 -0.36257199999999995 -0.58874408788404908 0.72563350189849096 -0.35614101126395376 +-0.82512499999999989 0.55223 -0.11626180000000001 -0.82132486405654359 0.55774163148492639 -0.11979040108052352 +-0.62304033333333331 0.70030133333333333 -0.3474376666666667 -0.62562797974048445 0.70174682321566095 -0.34079469930233341 +-0.84310399999999996 0.51867133333333337 -0.13947866666666667 -0.84064736639471094 0.52423280975072994 -0.13598517034769472 +-0.67726866666666663 0.6436099999999999 -0.35549866666666663 -0.67992113861011727 0.64513514255461479 -0.34857982315699021 +-0.87006133333333324 0.48723133333333335 0.069949533333333327 -0.87384599637596228 0.4816605514985991 0.066304507748473213 +-0.65859666666666661 0.67535066666666665 -0.33085633333333336 -0.66108855667488864 0.67675086734308265 -0.32399102423353954 +-0.86579899999999999 0.48595499999999997 0.11634196666666667 -0.86342620828191208 0.49170321319072813 0.11279686604615173 +-0.45058500000000001 0.87200033333333327 -0.18965866666666664 -0.44674844745016046 0.87548910974200123 -0.18421358099778984 +-0.48899699999999996 0.85274033333333332 -0.18195600000000001 -0.49563977507792206 0.84956016905265141 -0.18052349575591853 +-0.41651533333333335 0.90873766666666667 -0.012210199999999999 -0.41964790472394231 0.90749867578179033 -0.018487550273144752 +-0.39849599999999996 0.91651633333333338 0.024812700000000004 -0.40185500805245689 0.91517158930468778 0.031201196013799441 +-0.34131833333333333 0.93953100000000001 0.012861600000000001 -0.35091742712315827 0.93620857053337636 0.019247644040630722 +-0.36080433333333328 0.93196800000000002 -0.0254641 -0.36431486214481984 0.93072619151734937 -0.031991211980967806 +-0.47919499999999998 0.86999933333333335 0.11362733333333334 -0.4752986044653133 0.8731031569668547 0.10854544618655242 +-0.50254100000000002 0.852213 0.14353533333333332 -0.50896696988675261 0.84897311065938175 0.14211713809963503 +-0.67726866666666663 0.6436099999999999 0.35549866666666663 -0.67992113861011749 0.64513514255461435 0.3485798231569906 +-0.69467100000000004 0.61040833333333333 0.37964866666666669 -0.69233584091762568 0.61589682358755138 0.37595503198607233 +-0.52900333333333338 0.698017 0.48189433333333337 -0.53213040109363308 0.69284563916843744 0.48662321822659543 +-0.48894566666666667 0.7188633333333333 0.49342066666666667 -0.49240149666548411 0.72100417654973248 0.48753845333412765 +-0.93953100000000001 0.012861600000000001 0.34131833333333333 -0.93844557099972203 0.019390301721954061 0.344882482115484 +-0.93196800000000002 -0.0254641 0.36080433333333328 -0.92954913454932664 -0.02588889188244841 0.36778821587388683 +-0.86999933333333335 0.11362733333333334 0.47919499999999998 -0.87310315696685459 0.10854544618655243 0.4752986044653133 +-0.852213 0.14353533333333332 0.50254100000000002 -0.84897311065938108 0.14211713809963467 0.50896696988675361 +-0.6436099999999999 0.35549866666666663 0.67726866666666663 -0.64513514255461435 0.3485798231569906 0.67992113861011749 +-0.61040833333333333 0.37964866666666669 0.69467100000000004 -0.61589682358755138 0.37595503198607233 0.69233584091762568 +-0.698017 0.48189433333333337 0.52900333333333338 -0.69284563916843733 0.48662321822659543 0.53213040109363308 +-0.7188633333333333 0.49342066666666667 0.48894566666666667 -0.72100417654973248 0.48753845333412765 0.49240149666548411 +-0.85913866666666661 0.19760733333333333 0.47139533333333333 -0.85609518430535281 0.19620124595017835 0.47812770940072241 +-0.87820433333333325 0.16621833333333333 0.44779533333333332 -0.88154577838886228 0.16074187939053561 0.44389085236663017 +-0.79510999999999987 0.082435966666666666 0.60036900000000004 -0.79895366475196572 0.085569765531694458 0.59527376626746664 +-0.77298066666666665 0.063896999999999995 0.63074133333333338 -0.77323281423122159 0.077653387717214403 0.62934963761974561 +-0.74988699999999986 0.46585133333333334 -0.46898966666666669 -0.75642902312566274 0.46912920648369566 -0.45577727082110359 +-0.66105400000000003 0.74192333333333327 0.10926669999999999 -0.66233944891874696 0.74224522874824861 0.10187479966346263 +-0.62975100000000006 0.76574933333333339 0.12819266666666668 -0.62439601093608177 0.76998727876036854 0.13133625574954899 +-0.6125790000000001 0.78756366666666666 -0.062679333333333337 -0.6137547143550246 0.78753263737851731 -0.055655149542688249 +-0.60592866666666667 0.78831566666666664 -0.10404483333333332 -0.60062596472725593 0.79232113178228503 -0.107124575269599 +-0.64218399999999998 0.62806733333333331 -0.43866333333333335 -0.65399110933731253 0.62014958554441335 -0.43325526016061694 +-0.67719066666666672 0.60252166666666662 -0.4215173333333333 -0.68023889131423854 0.60441069962000604 -0.4146839241258703 +-0.64819233333333337 0.74987199999999998 -0.13007733333333335 -0.64294891754529637 0.75422846516416486 -0.13325206101010131 +-0.65521533333333337 0.75001200000000001 -0.086990833333333337 -0.65638577782881635 0.75021718069676468 -0.079573189275395501 +-0.4989513333333333 0.8577893333333334 -0.12117366666666667 -0.5052029824723937 0.85462177736693645 -0.11996484548056813 +-0.97958233333333344 0.14785633333333334 -0.13365466666666667 -0.98035278201893195 0.14140532735560526 -0.13752438395860767 +-0.98452266666666655 0.14843300000000001 -0.089341133333333336 -0.98423575270793717 0.14831702844712863 -0.096343355578130993 +-0.92589466666666675 0.34105833333333341 -0.16028966666666669 -0.92729951609022954 0.34172478535605538 -0.15277361857396751 +-0.90747233333333333 0.37685399999999997 -0.18377033333333337 -0.90952132795887308 0.3710265809997233 -0.18737724029236821 +-0.90873766666666667 -0.012210199999999999 0.41651533333333335 -0.90934223419047444 0 0.4160489167363331 +-0.91651633333333338 0.024812700000000004 0.39849599999999996 -0.915171589304688 0.031201196013799483 0.40185500805245644 +-0.90772833333333336 0.33597166666666672 0.24991700000000003 -0.90631973075464956 0.33521978385738732 0.25731739574973539 +-0.89832000000000001 0.37411466666666665 0.22882000000000002 -0.90018936382514747 0.36834417313747186 0.23233957771277039 +-0.44748599999999999 0.79176933333333332 0.41493233333333329 -0.45061332446283259 0.79349252796515179 0.40904430063261704 +-0.42727399999999999 0.78193899999999994 0.45311533333333331 -0.430581048544244 0.78390150597746155 0.44732358484748719 +-0.6169296666666666 0.33708266666666664 0.71068766666666672 -0.62192838064627531 0.34030277240478712 0.70526527806231698 +-0.62218933333333337 0.29389033333333336 0.72513433333333344 -0.63303145558615448 0.28565938067324992 0.71949280362756229 +-0.9863019999999999 0.094360200000000005 0.13272599999999998 -0.98571899316339417 0.094201848958944151 0.13958537949821576 +-0.99119466666666656 0.094722766666666666 0.088691666666666669 -0.99090868604521254 0.094624458621767243 0.095635703326153149 +-0.88726233333333326 0.37065766666666672 0.27328033333333335 -0.88896961193759916 0.36493619269398758 0.27668502726662181 +-0.874386 0.36636833333333335 0.3170716666666667 -0.87595825287420626 0.36061491813226637 0.3203966604726507 +-0.79176933333333332 0.41493233333333329 0.44748599999999999 -0.79349252796515179 0.40904430063261704 0.45061332446283259 +-0.78193899999999994 0.45311533333333331 0.42727399999999999 -0.78390150597746155 0.44732358484748719 0.430581048544244 +-0.71068766666666672 0.6169296666666666 0.33708266666666664 -0.70828943337678341 0.62222522892875454 0.33340942255934247 +-0.72513433333333344 0.62218933333333337 0.29389033333333336 -0.72262666059799929 0.6273674750204199 0.29020813337928147 +-0.80410033333333342 0.57136966666666666 0.16208199999999998 -0.80143539604984149 0.57666967522085277 0.15859820818379325 +-0.82184699999999999 0.53807933333333324 0.18531766666666669 -0.81942233900340899 0.54358437755329736 0.1818324911069982 +-0.77925900000000003 0.43740800000000002 -0.44803333333333334 -0.78253142168665979 0.43953278842596183 -0.44097108972307208 +-0.80692333333333333 0.40806266666666663 -0.426228 -0.8100798920731852 0.41006499600079527 -0.41906713962510156 +-0.8861296666666667 0.35661433333333337 -0.29480833333333334 -0.88770117086706313 0.35082964097389813 -0.2981697406769685 +-0.87666166666666667 0.39457300000000001 -0.27400933333333333 -0.87853054159162047 0.3888378086398766 -0.27746936058396188 +-0.81869099999999995 0.55018 -0.16232933333333333 -0.81615883216746876 0.55555699672441039 -0.15887474332186036 +-0.79259666666666673 0.58049499999999998 -0.18473399999999998 -0.78996515049353166 0.58574870889565644 -0.18125537518320203 +-0.70974033333333342 0.62968733333333338 -0.31475999999999998 -0.70722940200759754 0.63488697783600945 -0.31103874085109451 +-0.72712433333333337 0.59662133333333334 -0.33858233333333332 -0.72479541496417166 0.60206985994653273 -0.33493803933097333 +-0.98758800000000002 0.10800340000000001 -0.11095060000000001 -0.98715914492012036 0.10787007612224336 -0.11781710095719652 +-0.98855766666666656 0.067462433333333335 -0.13233766666666666 -0.98797921534951982 0.067333270144889143 -0.13915207784629885 +-0.86683433333333326 0.32232633333333333 0.37950966666666663 -0.86803909017894487 0.31643882890730773 0.38258934313579762 +-0.90660333333333332 0.32204199999999999 -0.2714273333333333 -0.90873512286034941 0.323188913161296 -0.26410112246941708 +-0.85979766666666668 0.36100666666666664 0.36019033333333333 -0.86126810731236048 0.35519573860579451 0.3633912968177257 +-0.89383633333333334 0.31817000000000001 -0.31486966666666666 -0.89624801139507837 0.31951953619145407 -0.30764714863356918 +-0.86683433333333326 0.32232633333333333 -0.37950966666666663 -0.86803909017894409 0.3164388289073089 -0.38258934313579851 +-0.48856099999999997 0.77240733333333333 0.40497999999999995 -0.49197364065418669 0.76790205989716254 0.41022964703585213 +-0.87218166666666663 0.28325866666666671 -0.39799066666666666 -0.87607180848325805 0.2775774859553693 -0.39427011764977882 +-0.46674366666666667 0.79997300000000005 0.37618033333333334 -0.47024319525858183 0.79575607140413507 0.38163282371470164 +-0.45581200000000005 0.85766166666666666 0.23665966666666663 -0.46266802420794434 0.85473908320643366 0.23528578158261582 +-0.87583766666666663 0.24396433333333331 -0.41561399999999998 -0.87489911065577086 0.25764841568228636 -0.41008394271191495 +-0.49497200000000002 0.83811233333333324 0.22790133333333332 -0.49139120814526044 0.84194317261708751 0.22285954016154341 +-0.67900399999999994 0.72532733333333332 -0.11055603333333335 -0.68027853678687678 0.72566683621403716 -0.10309585445698435 +-0.70211766666666675 0.6987686666666667 -0.13452966666666666 -0.70143880438084738 0.69836613739573716 -0.14236692680438653 +-0.80015433333333341 0.58287766666666663 -0.13899133333333333 -0.79603261649985269 0.58825410186115246 -0.14244011061469714 +-0.80566133333333345 0.58445933333333333 -0.092900400000000008 -0.801776495524269 0.58980757151104346 -0.096340437060805764 +-0.98172833333333331 0.10751146666666667 0.15480099999999999 -0.98194615561011633 0.11412882569379844 0.15085210846477298 +-0.78508733333333325 0.56488433333333332 0.25268700000000005 -0.78272032264096847 0.57031709890135784 0.24917323938488453 +-0.43467933333333336 0.87072233333333326 -0.22858766666666666 -0.43088521647762923 0.8743817691807968 -0.22314670498415706 +-0.98855766666666656 0.067462433333333335 0.13233766666666666 -0.98797921534951993 0.06733327014489128 0.13915207784629779 +-0.75597633333333336 0.59401533333333334 0.27377633333333334 -0.7535386475279815 0.59930919532716653 0.27019991687268247 +-0.41114166666666668 0.88992266666666664 -0.195881 -0.41786869262231569 0.88738043930629418 -0.19478632308939195 +-0.948241 0.22408166666666665 0.223473 -0.94705214190253939 0.22354254211107116 0.23047987414161 +-0.86189800000000005 0.47129566666666661 0.18523800000000001 -0.85984579511114412 0.47710763815943419 0.18175123174166055 +-0.43225599999999997 0.87782599999999988 0.20480499999999999 -0.42840399148712965 0.88133427653309548 0.19929855264346644 +-0.96156533333333327 0.18596799999999999 0.20030700000000001 -0.96232941502860847 0.17973451672552807 0.20400392267830808 +-0.83803666666666665 0.50363800000000003 0.20819866666666664 -0.83588006029070838 0.50930193747238395 0.20473412342664751 +-0.41561399999999998 0.87583766666666663 0.24396433333333334 -0.41941007178318773 0.87267008058923645 0.25008423007298353 +-0.32210133333333335 0.94495299999999993 0.051809966666666672 -0.33563562018755949 0.94056367924667894 0.051852634872905853 +-0.51888433333333328 0.42672700000000002 0.74024633333333334 -0.51615957150728675 0.44054448209603864 0.73450653913777197 +-0.65308166666666667 0.74134766666666663 0.15249900000000002 -0.64779101941242556 0.74574375744790089 0.15566966112925437 +-0.67582666666666669 0.71501700000000001 0.177069 -0.68169635280687602 0.71056893393307707 0.17430396638921783 +-0.69264300000000001 0.64932366666666663 0.31294899999999998 -0.69072853248152954 0.64827777600392789 0.32035920394974421 +-0.65859666666666661 0.67535066666666665 0.33085633333333336 -0.66108855667488819 0.67675086734308298 0.32399102423353965 +-0.97835466666666671 0.13419600000000001 0.15533166666666667 -0.97838757513424468 0.1408425647446043 0.15139724164955778 +-0.97951366666666662 0.093863266666666667 0.17624100000000001 -0.97990967194526468 0.10047745418984398 0.17228266316623886 +-0.95304633333333333 0.013060566666666667 0.30147600000000002 -0.95211762277351153 0.019636084690587727 0.30510073186103814 +-0.94495299999999993 0.051809966666666672 0.32210133333333335 -0.94442659522160821 0.045436616153804496 0.32556707473362934 +-0.74134766666666663 0.15249900000000002 0.65308166666666667 -0.745743757447901 0.15566966112925251 0.64779101941242589 +-0.71501700000000001 0.177069 0.67582666666666669 -0.71963846434385925 0.18023885039700835 0.67054786364910368 +-0.64932366666666663 0.31294899999999998 0.69264300000000001 -0.64827777600392789 0.32035920394974421 0.69072853248152943 +-0.67535066666666665 0.33085633333333336 0.65859666666666661 -0.67675086734308298 0.32399102423353965 0.66108855667488819 +-0.77240733333333333 0.40497999999999995 0.48856099999999997 -0.76790205989716254 0.41022964703585213 0.49197364065418669 +-0.79997300000000005 0.37618033333333334 0.46674366666666667 -0.79575607140413507 0.38163282371470164 0.47024319525858183 +-0.85766166666666666 0.23665966666666663 0.45581200000000005 -0.85473908320643366 0.23528578158261582 0.46266802420794434 +-0.83811233333333324 0.22790133333333332 0.49497200000000002 -0.84194317261708751 0.22285954016154338 0.49139120814526044 +-0.68439933333333336 0.71638666666666673 0.13320333333333331 -0.68580719655212852 0.71683146040090073 0.12578213918049705 +-0.69085300000000005 0.71705166666666675 0.089040933333333336 -0.68617271066798247 0.72155909310713462 0.092301063314365661 +-0.47419900000000004 0.85190366666666673 -0.22082566666666667 -0.48098951346609453 0.84883685748693116 -0.21937428588456115 +-0.45815366666666674 0.84954666666666678 -0.26021299999999997 -0.45135840117965048 0.85292378671556901 -0.26229107445607874 +-0.94615333333333329 -0.025922166666666666 0.32170033333333337 -0.94397703845306957 -0.026307601627811733 0.32896088060735168 +-0.95898133333333335 -0.026290733333333333 0.28108433333333332 -0.95709449513028511 -0.026632624785899603 0.28854952900380587 +-0.98172833333333331 0.10751146666666667 -0.15480099999999999 -0.981946155610116 0.11412882569380053 -0.15085210846477418 +-0.97273166666666666 0.14706466666666665 -0.17742433333333332 -0.97332507116728262 0.14069236473595439 -0.18122903835260357 +-0.87782599999999988 0.20480499999999999 0.43225599999999997 -0.88133427653309548 0.19929855264346644 0.42840399148712965 +-0.87583766666666663 0.24396433333333334 0.41561399999999998 -0.87267008058923645 0.25008423007298353 0.41941007178318773 +-0.89582666666666666 0.33240466666666668 0.29379266666666665 -0.89809633511602072 0.33366106968666331 0.28651921999531493 +-0.91531566666666675 0.29738066666666668 0.27032499999999998 -0.91378580324676062 0.29657279985040441 0.2775609485744791 +-0.62374033333333345 0.63313766666666671 0.45758233333333331 -0.62130991858177487 0.63889319899966468 0.45364023779189083 +-0.60354833333333335 0.62257333333333331 0.49742099999999995 -0.60117770770604406 0.62853566622266566 0.49348584583890137 +-0.48163 0.63991533333333328 0.59819433333333327 -0.47788134256101816 0.6376657568736942 0.60416206844089237 +-0.46451999999999999 0.67487200000000003 0.57277033333333327 -0.46093836374565439 0.67274682997459456 0.57874651410320621 +-0.93375666666666668 0.32944800000000002 0.13732900000000001 -0.93569239277978311 0.32338590283165725 0.14107198142720662 +-0.93888933333333335 0.33070500000000003 0.091738066666666673 -0.94101246637268166 0.32459334718907901 0.095575609293337277 +-0.9656313333333334 0.25454166666666667 -0.045389633333333339 -0.96563827865214946 0.25447243147524917 -0.052787275178668158 +-0.97591266666666676 0.2153643333333333 -0.022573899999999997 -0.97607441993813893 0.21537615737539612 -0.029863649754073556 +-0.96100333333333332 0.13229433333333332 -0.24145700000000003 -0.96127411794910678 0.12594081216775918 -0.24513462014104029 +-0.97088433333333324 0.093213466666666675 -0.21914 -0.97096749167518448 0.08671304054432924 -0.222941648665201 +-0.99567566666666674 0.013556566666666667 -0.088052033333333335 -0.99539188988286775 0.013538437507782957 -0.094929954520481544 +-0.99597933333333322 0.054270233333333334 -0.066234899999999999 -0.99584388442193805 0.054237984373482914 -0.073165558226036542 +-0.63313766666666671 0.45758233333333331 0.62374033333333345 -0.63889319899966468 0.45364023779189083 0.62130991858177487 +-0.62257333333333331 0.49742099999999995 0.60354833333333335 -0.62853566622266566 0.49348584583890132 0.60117770770604417 +-0.63991533333333328 0.59819433333333327 0.48163 -0.6376657568736942 0.60416206844089237 0.47788134256101816 +-0.67487200000000003 0.57277033333333327 0.46451999999999999 -0.67274682997459456 0.57874651410320621 0.46093836374565439 +-0.63670666666666664 0.71672566666666659 0.28326633333333334 -0.63896671989407416 0.71787542780718239 0.27636280686529158 +-0.67113733333333325 0.69153466666666663 0.26586133333333334 -0.6732775017358622 0.69264770558930877 0.25872101112623663 +-0.7715306666666667 0.57326266666666681 0.27462199999999998 -0.76918116629283839 0.57868388027417383 0.27108172223743615 +-0.75816133333333335 0.56834533333333337 0.31856266666666666 -0.7559183990567766 0.57388445654331877 0.31503016443734316 +-0.87771233333333321 0.47617466666666663 -0.046646866666666668 -0.87508176244014069 0.48205910673977859 -0.043022397119455921 +-0.89658166666666672 0.44146866666666668 -0.023282399999999998 -0.89406335609088294 0.44751152718113657 -0.019599702434321454 +-0.92250933333333329 0.36743666666666669 0.11516276666666668 -0.92477192156992416 0.36146431664713069 0.11891358571119123 +-0.90418833333333337 0.40314233333333332 0.13862700000000003 -0.9065768482451545 0.39732242461037337 0.14231412132187085 +-0.91822966666666661 0.24427766666666664 0.31066633333333332 -0.91640693651043736 0.24339426256520144 0.3177381935900957 +-0.89978666666666662 0.27934999999999999 0.33417800000000003 -0.89777797192039677 0.27832123447044738 0.34136784203750858 +-0.83950633333333335 0.42241299999999998 0.34073899999999996 -0.84139072144433436 0.41671320306238946 0.34411009903934264 +-0.85336699999999999 0.42763400000000001 0.29698633333333335 -0.85538338322748853 0.42197135721665069 0.30043209114046554 +-0.45758233333333331 0.62374033333333345 0.63313766666666671 -0.45364023779189083 0.62130991858177487 0.63889319899966468 +-0.49742099999999995 0.60354833333333335 0.62257333333333331 -0.49348584583890132 0.60117770770604417 0.62853566622266566 +-0.59819433333333327 0.48163 0.63991533333333328 -0.60416206844089237 0.47788134256101816 0.6376657568736942 +-0.57277033333333327 0.46451999999999999 0.67487200000000003 -0.57874651410320621 0.46093836374565439 0.67274682997459456 +-0.71672566666666659 0.28326633333333334 0.63670666666666664 -0.71787542780718239 0.27636280686529158 0.63896671989407416 +-0.69153466666666663 0.26586133333333334 0.67113733333333325 -0.69264770558930877 0.25872101112623663 0.6732775017358622 +-0.96258599999999994 0.25397200000000003 -0.09068166666666666 -0.96227939571058341 0.25377396032399235 -0.098067026325627235 +-0.95327899999999988 0.29303333333333331 -0.068455500000000002 -0.95312415703736431 0.29288506573994283 -0.075978151716945649 +-0.89445666666666668 0.44087900000000002 -0.069773099999999991 -0.89214714856246369 0.44687846223520744 -0.066129458656195669 +-0.8902363333333333 0.439668 -0.11605323333333334 -0.88812183032546255 0.44564102421677082 -0.11244417296764594 +-0.76900066666666655 0.63496300000000006 -0.069209533333333337 -0.76490472969328582 0.64003908894182793 -0.072599718452320161 +-0.764351 0.63392533333333334 -0.11503839999999999 -0.75999418759787019 0.63905202783527082 -0.11841174155075003 +-0.78508733333333336 0.56488433333333343 -0.25268699999999999 -0.78272032264096647 0.57031709890135995 -0.24917323938488595 +-0.81243133333333339 0.53480433333333333 -0.23075133333333331 -0.81017001123674981 0.54034534738107565 -0.22726957221825625 +-0.54633266666666669 0.8181653333333333 0.17754333333333336 -0.55294580946744776 0.81448691874194057 0.17567581219578418 +-0.52472299999999994 0.78593499999999994 -0.32604033333333332 -0.53177567977925 0.7824376384018038 -0.32404624424227568 +-0.53302133333333324 0.81731666666666669 0.21738166666666667 -0.52957076434678341 0.82117934975840678 0.21264825670464324 +-0.48500100000000002 0.8065730000000001 -0.33695900000000001 -0.49134209471296303 0.80858606522459509 -0.3236842923091644 +-0.82594966666666669 0.4307913333333333 -0.362674 -0.82785431066039616 0.42508009428749394 -0.36601113884899122 +-0.79909666666666668 0.46117466666666668 -0.38479733333333338 -0.8011452716929367 0.45549482658489687 -0.38818902173869535 +-0.99567566666666674 -0.013556566666666667 0.088052033333333335 -0.99645037790286128 -0.0067825110210987917 0.083908533067223873 +-0.99597933333333322 -0.054270233333333334 0.066234899999999999 -0.9962881829039385 -0.055094892576294616 0.066139318245466691 +-0.8632616666666667 0.30715500000000001 -0.39970366666666662 -0.86624744389763897 0.30889953120125169 -0.39267855246302108 +-0.50779833333333335 0.68626366666666672 0.52007300000000001 -0.51139416315246811 0.68853826500749427 0.51418971937802915 +-0.52546799999999994 0.65217366666666665 0.54575033333333334 -0.52920366945247455 0.65458239889410585 0.53987531828754109 +-0.50784666666666667 0.54724133333333336 0.66476333333333326 -0.51235096103056466 0.55021305309491264 0.65936491333330116 +-0.46893000000000001 0.56797500000000001 0.67587200000000003 -0.46472565032621649 0.56535557010136861 0.68147131215057888 +-0.96046299999999996 0.092355800000000002 -0.26138033333333333 -0.96288732747543226 0.099270327172423373 -0.2509848535874219 +-0.99709700000000012 -0.0271472 -0.066086900000000004 -0.99815958682132622 -0.013995937504594413 -0.059004686000748076 +-0.99320699999999995 -0.027062466666666663 -0.11007063333333333 -0.99458728947142871 -0.013929184287532797 -0.1029665064327249 +-0.85042666666666678 0.10573533333333333 0.51483299999999999 -0.84714907157637986 0.10444750790748693 0.52098864538413248 +-0.84756133333333328 0.069051033333333345 0.52571099999999993 -0.84415555467171699 0.068173181494397148 0.53174600782875447 +-0.43467066666666665 0.8999693333333334 0.023969299999999999 -0.43778575898804434 0.89857223759622595 0.030192102420558857 +-0.46890266666666669 0.88267033333333345 0.022866433333333335 -0.47156638030224995 0.88134786990201952 0.029173295799524861 +-0.57604433333333327 0.81494699999999998 0.059267866666666669 -0.57105803285634871 0.81853487189697505 0.062397007931789775 +-0.56820133333333334 0.81665133333333328 0.098415533333333319 -0.56255375688704268 0.8204999119066646 0.10155375509270882 +-0.73621533333333333 0.67279266666666671 0.068386966666666674 -0.7319069708828525 0.67762015021244859 0.071715535270580819 +-0.73132766666666671 0.67199433333333347 0.11367523333333333 -0.72672368166859569 0.6768932282846396 0.11699678629962637 +-0.65008199999999994 0.72023166666666671 0.24082699999999999 -0.6520932499745713 0.72120350456889648 0.23375178787582127 +-0.6280163333333334 0.74735400000000007 0.21542566666666665 -0.62994672096641147 0.74812731929989174 0.2085009421101596 +-0.91466100000000006 0.37891566666666665 -0.13824433333333333 -0.91689163039086197 0.37305445430029122 -0.14191586326376221 +-0.91984566666666667 0.38031999999999999 -0.092365500000000003 -0.92226052033247541 0.3744336885534349 -0.096098623883701606 +-0.88990066666666667 0.45298833333333333 0.046587499999999997 -0.89337034382634739 0.44727048685379228 0.042878203800596357 +-0.87221566666666661 0.48784099999999997 0.023341766666666666 -0.86923108705951135 0.49367090573163469 0.026950957746388671 +-0.79981999999999998 0.54362500000000002 0.25311366666666663 -0.79757193557747619 0.54914166848935986 0.24964461842371102 +-0.78303900000000004 0.5772896666666667 0.22998833333333335 -0.78055969213023035 0.58261180697286685 0.22647306550089111 +-0.75888966666666668 0.644177 0.091938833333333345 -0.7546117333897282 0.64921606847318503 0.095287083420421345 +-0.78476100000000004 0.61534100000000003 0.069477033333333327 -0.78081027126240721 0.62050512688950044 0.072860879729598649 +-0.58178533333333327 0.8090480000000001 -0.080161999999999997 -0.57657935871746036 0.81279318645478205 -0.083207446503567165 +-0.55776333333333328 0.82775166666666655 -0.056808099999999993 -0.55271151938785956 0.83119822272984056 -0.060162204636450917 +-0.45166433333333339 0.89181766666666673 -0.0117591 -0.45453812942887795 0.89054752003018356 -0.0178942298908456 +-0.43589300000000003 0.89842200000000005 -0.047878066666666663 -0.43918072250599538 0.89674879877906211 -0.054423201554310061 +-0.47605000000000003 0.87439566666666657 -0.090921466666666673 -0.4721374721391981 0.87734060758261045 -0.085788493917213979 +-0.48871233333333336 0.87042766666666671 -0.054918800000000011 -0.48452607356091065 0.87333859322127783 -0.050141655636071245 +-0.49190599999999995 0.8669473333333334 0.076870800000000003 -0.48798175061253013 0.86987752165419474 0.072020194319970227 +-0.45684033333333329 0.88547600000000004 0.081770899999999994 -0.45266532689738559 0.88841440347642964 0.076249259147239679 +-0.52068599999999998 0.80599766666666672 0.28034733333333334 -0.51732881626734262 0.81023565728700075 0.27547971889075962 +-0.48135633333333333 0.82648499999999991 0.29078700000000002 -0.47787127089349962 0.83068865576298123 0.28564909529232324 +-0.35277166666666665 0.90397933333333336 0.24023133333333332 -0.35979822748454249 0.90184935426715085 0.23919234458256466 +-0.37067 0.90640266666666669 0.20096933333333333 -0.37747602561803351 0.90416256080953616 0.20000478422766657 +-0.68626366666666672 0.52007300000000001 0.50779833333333335 -0.68853826500749427 0.51418971937802904 0.51139416315246822 +-0.65217366666666665 0.54575033333333334 0.52546799999999994 -0.65458239889410585 0.53987531828754109 0.52920366945247455 +-0.54724133333333336 0.66476333333333326 0.50784666666666667 -0.55021305309491297 0.6593649133332985 0.51235096103056765 +-0.56797500000000001 0.67587200000000003 0.46893000000000001 -0.56535557010136861 0.68147131215057888 0.46472565032621654 +-0.36312566666666662 0.81351666666666667 0.45347166666666666 -0.37000798690410153 0.81773970594077883 0.44090346217178061 +-0.38384699999999999 0.82400366666666669 0.41591733333333331 -0.39132827451862362 0.82160558708182385 0.41451953010468423 +-0.50412633333333334 0.80162933333333342 0.32027699999999998 -0.50082642609276529 0.80606359017420337 0.31533217330716817 +-0.52632333333333337 0.77506433333333336 0.34868433333333337 -0.5232122967623275 0.77971086918769328 0.34394745672451499 +-0.8669473333333334 0.076870800000000003 0.49190599999999995 -0.86987752165419474 0.072020194319970227 0.48798175061253013 +-0.88547600000000004 0.081770899999999994 0.45684033333333329 -0.88841440347642964 0.076249259147239679 0.45266532689738559 +-0.80599766666666672 0.28034733333333334 0.52068599999999998 -0.81023565728700075 0.27547971889075962 0.51732881626734262 +-0.82648499999999991 0.29078700000000002 0.48135633333333333 -0.83068865576298123 0.28564909529232324 0.47787127089349962 +-0.90397933333333336 0.24023133333333332 0.35277166666666665 -0.90184935426715085 0.23919234458256466 0.35979822748454249 +-0.90640266666666669 0.20096933333333333 0.37067 -0.90416256080953616 0.20000478422766657 0.37747602561803351 +-0.52007300000000001 0.50779833333333335 0.68626366666666672 -0.51418971937802904 0.51139416315246822 0.68853826500749427 +-0.97022466666666674 0.026577699999999999 -0.23935300000000001 -0.97401232856293862 0.026285001833126275 -0.22496462496587019 +-0.54575033333333334 0.52546799999999994 0.65217366666666665 -0.53987531828754354 0.52920366945247321 0.65458239889410497 +-0.96445399999999992 0.106003 -0.24067133333333335 -0.96454988640168204 0.099589396198537586 -0.24438794734461219 +-0.66476333333333326 0.50784666666666667 0.54724133333333336 -0.6593649133332985 0.51235096103056776 0.55021305309491297 +-0.96278133333333338 0.066040966666666659 -0.26082466666666665 -0.96690146277194322 0.066004433072404931 -0.246464959181355 +-0.67587200000000003 0.46893000000000001 0.56797500000000001 -0.68147131215057877 0.46472565032621649 0.56535557010136861 +-0.957121 0.22573400000000002 -0.17963466666666669 -0.95821518598554112 0.21958206357096466 -0.18332314285057291 +-0.81351666666666667 0.45347166666666666 0.36312566666666662 -0.81555497642591224 0.44781837438072558 0.36650891393516466 +-0.96156533333333327 0.18596799999999999 -0.20030700000000001 -0.96232941502860792 0.17973451672552798 -0.2040039226783105 +-0.82400366666666669 0.41591733333333331 0.38384699999999999 -0.82578576083367272 0.4101701368210342 0.38708957111315512 +-0.95351733333333322 0.14467333333333332 -0.26307333333333333 -0.95380451865368532 0.13841331687968719 -0.26664338339095306 +-0.80162933333333342 0.32027699999999998 0.50412633333333334 -0.80606359017420326 0.31533217330716812 0.50082642609276529 +-0.96402533333333329 0.14602166666666669 -0.22057833333333332 -0.96445393035568028 0.13971873759203532 -0.22429286789188932 +-0.77506433333333336 0.34868433333333337 0.52632333333333337 -0.77971086918769328 0.34394745672451499 0.5232122967623275 +-0.8999693333333334 0.023969299999999999 0.43467066666666665 -0.89857223759622595 0.030192102420558857 0.43778575898804434 +-0.88267033333333345 0.022866433333333335 0.46890266666666669 -0.88134786990201952 0.029173295799524861 0.47156638030224995 +-0.81494699999999998 0.059267866666666669 0.57604433333333327 -0.81853487189697505 0.062397007931789775 0.57105803285634871 +-0.81665133333333328 0.098415533333333319 0.56820133333333334 -0.8204999119066646 0.10155375509270882 0.56255375688704268 +-0.72023166666666671 0.24082699999999999 0.65008199999999994 -0.72120350456889648 0.23375178787582127 0.6520932499745713 +-0.74735400000000007 0.21542566666666665 0.6280163333333334 -0.74812731929989174 0.2085009421101596 0.62994672096641147 +-0.51483299999999999 0.85042666666666678 0.10573533333333333 -0.5209886453841317 0.84714907157638042 0.10444750790748585 +-0.52571099999999993 0.84756133333333328 0.069051033333333345 -0.53174600782875492 0.84415555467171688 0.068173181494395704 +-0.58780333333333334 0.8076793333333333 -0.040241233333333327 -0.58895650236746122 0.80747253922186379 -0.033441541855636171 +-0.61607900000000004 0.7870609999999999 -0.020946933333333334 -0.61698063728776309 0.78686277614210864 -0.013485723336907495 +-0.63133833333333333 0.73761066666666675 -0.23808166666666666 -0.63337050787930427 0.73851835051376891 -0.23115459264988511 +-0.66528666666666669 0.71280966666666667 -0.22053199999999998 -0.66719302095845834 0.71368475232804796 -0.21332497996901115 +-0.74243766666666666 0.66315266666666661 -0.091391999999999987 -0.7380201623109951 0.66809911774214903 -0.094709075038321697 +-0.71923599999999999 0.69097666666666679 -0.067828766666666665 -0.71484071533694593 0.69565931898028532 -0.07113974706483786 +-0.77267300000000005 0.56040299999999998 -0.297039 -0.7704440950769551 0.56591681206609912 -0.29352011546399231 +-0.75597633333333336 0.59401533333333345 -0.27377633333333334 -0.75353864752797994 0.59930919532716931 -0.27019991687268052 +-0.65288666666666673 0.70969066666666658 -0.2634556666666667 -0.65501968417060397 0.71076863277450397 -0.25643159714221031 +-0.63873966666666671 0.70558766666666661 -0.30574499999999999 -0.64109301993334888 0.70685708038104433 -0.29891940001934414 +-0.60575433333333339 0.794234 0.041378733333333334 -0.60677526245756896 0.79413092226005166 0.034349078298377002 +-0.58062966666666671 0.81361933333333314 0.019809433333333331 -0.58189096904843229 0.81316353437949684 0.012960188861322341 +-0.51093266666666659 0.85518833333333344 -0.084138333333333329 -0.51693773592267367 0.85198203848343912 -0.083078175718678079 +-0.53430833333333327 0.83759833333333333 -0.11136133333333333 -0.54073640577352322 0.83398268268268716 -0.10989551608923878 +-0.35099133333333327 0.91087466666666661 -0.21552966666666665 -0.35884953293333854 0.90540314548384249 -0.22687476030067502 +-0.3744993333333333 0.89252600000000004 -0.24997166666666668 -0.38084706248225925 0.893707995900477 -0.23715297396867541 +-0.50220666666666669 0.81162366666666674 -0.29731033333333334 -0.49883260789314426 0.81591989161692013 -0.29230251412938263 +-0.51826699999999992 0.8151826666666665 -0.25734633333333334 -0.51483738173931926 0.81927210874247725 -0.25245926839879929 +-0.794234 0.041378733333333334 0.60575433333333339 -0.79454065758969872 0.055064809309266098 0.60470902937914139 +-0.81361933333333314 0.019809433333333331 0.58062966666666671 -0.81388635643554741 0.032944592837174359 0.5800893488169403 +-0.91087466666666661 0.21552966666666665 -0.35099133333333327 -0.90877103811651916 0.21458513885150093 -0.3578944236289609 +-0.89252600000000004 0.24997166666666668 -0.3744993333333333 -0.89022513035931738 0.24884721390097977 -0.3815419785691429 +-0.97215366666666669 0.22839699999999999 0.045218333333333333 -0.9721645112054107 0.22834695483901848 0.052476960358735447 +-0.96287333333333336 0.26767199999999997 0.022745200000000004 -0.9630414023662548 0.26766477827048935 0.030113515268850533 +-0.93204233333333342 0.34265900000000005 -0.11477476666666668 -0.93314089294629399 0.34314701905525469 -0.10722964713588243 +-0.94234466666666672 0.30424066666666666 -0.13681300000000002 -0.94173031487740755 0.30386966027529327 -0.14424716151479927 +-0.84066399999999997 0.43669399999999997 -0.31920066666666663 -0.84267139385309486 0.43105936514427184 -0.32263407399575722 +-0.85106633333333326 0.39919166666666667 -0.34005899999999994 -0.8528049708060641 0.39346996082837327 -0.34337307945467493 +-0.90763266666666664 0.25476333333333329 -0.33260966666666664 -0.9056496374377796 0.25378156646779038 -0.339696409651284 +-0.92108633333333334 0.25843766666666668 -0.29005533333333333 -0.91942952058264082 0.25759897198975035 -0.29713991033013243 +-0.89181766666666673 -0.0117591 0.45166433333333339 -0.89054752003018323 -0.01789422989084398 0.45453812942887872 +-0.89842200000000005 -0.047878066666666663 0.43589300000000003 -0.89280395272116786 -0.047483374616635085 0.44793574443269779 +-0.95314033333333337 0.10487713333333333 0.28260466666666667 -0.95309693783712679 0.098541461164222813 0.28617443547094124 +-0.96278133333333338 0.066040966666666659 0.26082466666666665 -0.96253563407545095 0.059527485851090023 0.26454041574628634 +-0.886714 0.45208100000000001 0.093025999999999998 -0.88445594026952357 0.45797227380334937 0.089437610373616722 +-0.90578799999999993 0.4171226666666667 0.069620399999999999 -0.90364636568419621 0.42316551543616399 0.065986304119790631 +-0.96083533333333337 0.26727899999999999 0.068186966666666668 -0.95963829897183539 0.27377530970840092 0.064353826152851415 +-0.95677066666666677 0.26647300000000002 0.1134709 -0.95838768851164724 0.26025483249547893 0.11730498997081132 +-0.99709700000000012 0.0271472 0.066086900000000004 -0.99696424547661711 0.027116700704621275 0.072986147892153908 +-0.99320699999999995 0.027062466666666663 0.11007063333333333 -0.99277645957187444 0.027023373377348354 0.11689584514106012 +-0.96445399999999992 0.106003 0.24067133333333332 -0.96454988640168204 0.099589396198537947 0.24438794734461197 +-0.96402533333333329 0.14602166666666669 0.22057833333333332 -0.96445393035568139 0.13971873759203135 0.22429286789188704 +-0.88396799999999998 0.4377786666666667 -0.16201833333333335 -0.88647153569422021 0.43211376507175508 -0.16566807308423348 +-0.94495300000000004 -0.051809966666666672 0.32210133333333335 -0.94534774934638066 -0.052625365478896312 0.32178906711376221 +-0.91633200000000004 0.36574833333333334 -0.16081700000000002 -0.91841129259366205 0.35981091617999666 -0.16448952013471924 +-0.99709700000000012 -0.0271472 0.066086900000000004 -0.99686240587570329 -0.027533312668726877 0.074210918638638296 +-0.90418833333333337 0.40314233333333327 -0.138627 -0.90657684824515439 0.39732242461037326 -0.14231412132187304 +-0.99903999999999993 -0.027195333333333332 0.022029699999999999 -0.9991629923347658 -0.027631906953650604 0.030162766231589453 +-0.85258733333333325 0.46819666666666665 -0.23063066666666668 -0.8507180361980079 0.47398585102273699 -0.22719206834230982 +-0.85113933333333336 0.48120366666666664 0.20809633333333333 -0.84913149454651216 0.48691927864691648 0.20465903608483363 +-0.83803666666666665 0.50363800000000003 -0.20819866666666667 -0.83588006029070772 0.50930193747238528 -0.20473412342664679 +-0.84083699999999995 0.47767399999999999 0.25322733333333336 -0.83898811193120493 0.48339456538053766 0.2498572436385891 +-0.82926700000000009 0.54054366666666664 -0.13940533333333335 -0.82668447040560145 0.54600115691594953 -0.13592469619850162 +-0.84066399999999997 0.43669399999999997 0.31920066666666669 -0.84267139385309497 0.43105936514427146 0.32263407399575739 +-0.82184699999999999 0.53807933333333335 -0.18531766666666669 -0.81942233900340922 0.54358437755329658 -0.18183249110699973 +-0.82864533333333323 0.47329366666666672 0.29773366666666662 -0.83090030398783732 0.46784498651991108 0.30120716030848904 +-0.4059166666666667 0.75636666666666663 0.51228966666666664 -0.41333439577222858 0.75381219132502608 0.51080510714103955 +-0.75636666666666663 0.51228966666666664 0.4059166666666667 -0.75865329835647777 0.50674725822349365 0.4094537692778133 +-0.77267300000000005 0.56040299999999998 0.297039 -0.77044409507695688 0.56591681206609601 0.2935201154639932 +-0.74262333333333341 0.5482703333333333 -0.38367900000000005 -0.74061277632469213 0.55398308333902235 -0.38025709581652961 +-0.77289299999999994 0.51966566666666669 -0.36316266666666669 -0.77525724683632413 0.51427657878884769 -0.3667366926515549 +-0.81351666666666667 0.45347166666666666 -0.36312566666666662 -0.81555497642591224 0.44781837438072558 -0.36650891393516466 +-0.80145 0.49010133333333333 -0.34173666666666663 -0.80370561961055131 0.48464651299618633 -0.34521737274803704 +-0.86488299999999996 0.4452226666666666 -0.23033366666666666 -0.86718072358672149 0.43967029351048392 -0.23385385531142125 +-0.84083699999999995 0.47767399999999999 -0.2532273333333333 -0.83898811193120471 0.48339456538053771 -0.24985724363858919 +-0.79981999999999998 0.54362500000000002 -0.25311366666666668 -0.79757193557747719 0.54914166848935786 -0.24964461842371205 +-0.81503000000000003 0.50893833333333338 -0.27570366666666662 -0.81305737281356072 0.51455838411771748 -0.27233688301013143 +-0.9934940000000001 0.10851619999999999 0.022237466666666667 -0.99366413966331857 0.10853012501892693 0.029202559999646965 +-0.99734033333333338 0.067943766666666669 0 -0.99766335663096273 0.067974332085518785 0.0068787363205835943 +-0.99709700000000012 0.0271472 -0.066086900000000004 -0.99696424547661722 0.027116700704621279 -0.072986147892153894 +-0.99903999999999993 0.027195333333333332 -0.022029699999999999 -0.99921308916777885 0.027195355326637367 -0.028872393119419037 +-0.95597666666666681 0.21201066666666668 -0.20118666666666665 -0.95690704317590225 0.20579936405970423 -0.20487931196920114 +-0.94620066666666658 0.21025733333333332 -0.24458033333333332 -0.94697438464037365 0.20412201729289914 -0.24814051843917612 +-0.91822966666666661 0.24427766666666664 -0.31066633333333332 -0.91640693651043803 0.24339426256520186 -0.31773819359009342 +-0.93463066666666672 0.20800333333333335 -0.28728666666666669 -0.93299278306842304 0.20727921075590922 -0.29421046128689254 +-0.60522599999999993 0.70626633333333333 0.36633966666666667 -0.60795094672564387 0.70779537966296246 0.35975178512851885 +-0.58478433333333335 0.7359429999999999 0.34020366666666663 -0.58183870110532376 0.74073627898260386 0.33581764530035613 +-0.52472299999999994 0.78593499999999994 0.32604033333333332 -0.52150186629773509 0.79047081147777842 0.32123464889336234 +-0.56335399999999991 0.76401200000000002 0.3134513333333333 -0.56025037874058581 0.76856706053370394 0.30890805522616588 +-0.68725733333333328 0.72564533333333336 0.022199266666666665 -0.68790368117368894 0.72565832946336029 0.014440024519819183 +-0.71367933333333333 0.70001333333333327 2.3129646346357427e-18 -0.70976920859764492 0.70442647167853822 0.003319115122790968 +-0.73621533333333333 0.67279266666666659 -0.068386966666666674 -0.7319069708828545 0.67762015021244637 -0.07171553527058093 +-0.73876500000000001 0.67308933333333332 -0.022829233333333327 -0.73476307479340419 0.6778181082904946 -0.026188470624260104 +-0.75755833333333333 0.52692766666666668 -0.38439033333333333 -0.75563435731375361 0.53275084065322775 -0.38104233338345717 +-0.36358533333333326 0.92568533333333336 0.10143216666666666 -0.36726950130505531 0.923820067450836 0.1080259060886271 +-0.77051866666666669 0.490504 -0.40621499999999999 -0.77270320478273291 0.48485766119619861 -0.40968622834780039 +-0.34578333333333333 0.92738500000000013 0.14052333333333333 -0.34890169435207236 0.92745409669571854 0.13452325524080155 +-0.76326933333333324 0.44369833333333331 -0.46888933333333332 -0.759812345142579 0.45689772793499878 -0.46252531430914168 +-0.35099133333333327 0.91087466666666661 0.21552966666666665 -0.35789442362895907 0.90877103811651971 0.21458513885150166 +-0.78193899999999994 0.45311533333333331 -0.42727399999999999 -0.78390150597746155 0.44732358484748719 -0.430581048544244 +-0.32766433333333334 0.92716333333333323 0.17985566666666666 -0.33748755045646722 0.92529999561685417 0.17297997398064061 +-0.54990566666666663 0.81053333333333333 0.20004 -0.55650732236297251 0.80686525433350909 0.19816170544713305 +-0.57315533333333335 0.78686166666666668 0.22737200000000002 -0.56988232116554505 0.79088056821078367 0.22302929594463261 +-0.63133833333333333 0.73761066666666675 0.23808166666666666 -0.63337050787930682 0.73851835051376702 0.23115459264988383 +-0.59584766666666666 0.7614169999999999 0.25407399999999997 -0.59801778978835185 0.76233057365140977 0.24744053744883268 +-0.7359429999999999 0.34020366666666663 0.58478433333333335 -0.74073627898260386 0.33581764530035613 0.58183870110532376 +-0.76401200000000002 0.3134513333333333 0.56335399999999991 -0.76856706053370394 0.30890805522616588 0.56025037874058581 +-0.81723666666666661 0.57523666666666662 -0.023299466666666661 -0.81373864287838304 0.58061392593956729 -0.026774803295075186 +-0.79504166666666665 0.60599700000000001 2.3129646346357427e-18 -0.79150624842317008 0.61115147527147917 -0.0034253438620977824 +-0.76900066666666655 0.63496299999999994 0.069209533333333337 -0.76490472969328482 0.64003908894182915 0.072599718452319176 +-0.77135733333333334 0.635459 0.023104966666666671 -0.76753243870691568 0.64046221897630617 0.026497199787162903 +-0.58582466666666677 0.78833399999999998 -0.18632033333333334 -0.57988023189536386 0.79241984688079392 -0.18923451832685864 +-0.57315533333333335 0.78686166666666668 -0.22737200000000002 -0.56988232116554483 0.79088056821078345 -0.22302929594463394 +-0.52068599999999998 0.80599766666666672 -0.28034733333333334 -0.51732881626734317 0.81023565728700142 -0.27547971889075634 +-0.55890933333333337 0.78424633333333327 -0.26818333333333338 -0.55566098937893804 0.78851015439986161 -0.26361449370382906 +-0.56752666666666662 0.72956600000000005 -0.38073966666666664 -0.57445758132119618 0.7257323266893434 -0.37856449550991078 +-0.58478433333333335 0.7359429999999999 -0.34020366666666674 -0.58183870110532543 0.74073627898260141 -0.33581764530035857 +-0.63670666666666664 0.71672566666666671 -0.28326633333333334 -0.63896671989407539 0.71787542780718161 -0.2763628068652913 +-0.60073866666666664 0.74090699999999998 -0.29917166666666667 -0.60310957117011221 0.74208291099934309 -0.29252657719555042 +-0.92738500000000013 0.14052333333333333 -0.34578333333333333 -0.93265246963949344 0.14159484160179467 -0.33182867824694795 +-0.95314033333333337 0.10487713333333333 -0.28260466666666667 -0.9575696903435692 0.10517623583484231 -0.26832489178407298 +-0.94127266666666676 0.14291733333333334 -0.30483500000000002 -0.93928466319806303 0.14964084471225736 -0.30879109293291357 +-0.92568533333333336 0.10143216666666666 0.36358533333333326 -0.923820067450836 0.1080259060886271 0.36726950130505531 +-0.92738500000000013 0.14052333333333333 0.34578333333333333 -0.92745409669571854 0.13452325524080155 0.34890169435207236 +-0.91087466666666661 0.21552966666666665 0.35099133333333327 -0.90877103811651971 0.21458513885150166 0.35789442362895907 +-0.92716333333333323 0.17985566666666666 0.32766433333333334 -0.92525904843422668 0.17910077093038013 0.33439289337952871 +-0.56752666666666673 0.72956600000000005 0.38073966666666664 -0.56463019666820546 0.7345672394300764 0.37630268636630887 +-0.54906133333333329 0.72168266666666658 0.42072933333333334 -0.54621533469650274 0.72689965048017446 0.4162519744988456 +-0.54826399999999997 0.67978466666666681 0.48641133333333331 -0.55170269878735689 0.68190885068557827 0.48023374673946079 +-0.52944599999999997 0.71225633333333338 0.46008566666666662 -0.53274155487270891 0.71422300523490279 0.45395146712510209 +-0.95597666666666659 0.21201066666666665 0.20118666666666665 -0.95690704317590158 0.20579936405970636 0.20487931196920214 +-0.96388766666666659 0.21337133333333336 0.15716566666666665 -0.96498961593619303 0.20708100103663682 0.16097360077038458 +-0.72956600000000005 0.38073966666666664 0.56752666666666673 -0.7345672394300764 0.37630268636630887 0.56463019666820546 +-0.72168266666666658 0.42072933333333334 0.54906133333333329 -0.72689965048017446 0.41625197449884566 0.54621533469650274 +-0.67978466666666681 0.48641133333333331 0.54826399999999997 -0.68190885068557827 0.48023374673946079 0.55170269878735689 +-0.71225633333333338 0.46008566666666662 0.52944599999999997 -0.71422300523490267 0.45395146712510204 0.5327415548727088 +-0.58744933333333327 0.69894066666666665 0.40705300000000005 -0.59041897341165617 0.70066437394497161 0.40059314886780978 +-0.62454900000000002 0.67502866666666661 0.39189600000000002 -0.6274157295105669 0.67671755114831234 0.38523091559550915 +-0.67640700000000009 0.6563119999999999 0.33322933333333332 -0.67432926819010985 0.65519559013054052 0.3405859314999426 +-0.66024300000000002 0.64999866666666672 0.37535166666666669 -0.65786067131660153 0.64872408443505791 0.3825916875845139 +-0.81723666666666672 0.57523666666666662 0.023299466666666668 -0.81373864287838205 0.58061392593956873 0.026774803295076158 +-0.83792066666666665 0.54315766666666665 0.046653833333333332 -0.83448744125968655 0.5487362569508325 0.05019193847074753 +-0.87771233333333332 0.47617466666666663 0.046646866666666668 -0.87508176244013969 0.48205910673978014 0.043022397119454811 +-0.85703933333333326 0.50979200000000002 0.069971699999999998 -0.85433531332205448 0.5154624737890986 0.066404898359456094 +-0.95051300000000005 0.25157233333333334 0.18039633333333335 -0.94959360307011542 0.25112435222994373 0.18763941143962024 +-0.93505400000000005 0.28885866666666665 0.203819 -0.93397663141277909 0.28826917001433577 0.21115998104300893 +-0.90660333333333332 0.32204199999999999 0.2714273333333333 -0.90873512286035008 0.32318891316129489 0.26410112246941597 +-0.91756233333333326 0.32513833333333331 0.22731633333333334 -0.91941515130072438 0.32608678172641187 0.21987084923194722 +-0.48641133333333331 0.54826399999999997 0.67978466666666681 -0.48023374673946173 0.55170269878735756 0.68190885068557705 +-0.46008566666666662 0.52944599999999997 0.71225633333333338 -0.46497084928401095 0.53268824672673931 0.70713884146983341 +-0.69894066666666665 0.40705300000000005 0.58744933333333327 -0.70066437394497161 0.40059314886780972 0.59041897341165606 +-0.67502866666666661 0.39189600000000002 0.62454900000000002 -0.67671755114831245 0.3852309155955092 0.6274157295105669 +-0.6563119999999999 0.33322933333333332 0.67640700000000009 -0.65519559013054052 0.3405859314999426 0.67432926819010985 +-0.64999866666666672 0.37535166666666669 0.66024300000000002 -0.64872408443505791 0.3825916875845139 0.65786067131660153 +-0.93375666666666657 0.32944800000000002 -0.13732900000000001 -0.93569239277978344 0.32338590283165708 -0.1410719814272042 +-0.92663333333333331 0.32759366666666662 -0.18257666666666669 -0.92838638141934404 0.3215918038699474 -0.18621879195926974 +-0.83902233333333331 0.54346033333333332 1.1564823173178713e-18 -0.83581239393805806 0.54900373123283785 0.0035419248939295113 +-0.83792066666666676 0.54315766666666665 -0.046653833333333339 -0.83448744125968544 0.54873625695083406 -0.050191938470748536 +-0.81060299999999996 0.57337433333333332 -0.11609513333333332 -0.81516384919802287 0.56816097492600259 -0.11269873793347154 +-0.83464800000000006 0.54221033333333335 -0.093158400000000016 -0.83892675353125457 0.53681230026146276 -0.089635129818094392 +-0.58744933333333327 0.69894066666666665 -0.40705300000000005 -0.59423116751119709 0.69500052876707574 -0.4048006726424313 +-0.60522600000000004 0.70626633333333333 -0.36633966666666667 -0.60795094672564576 0.70779537966296169 -0.35975178512851724 +-0.62454900000000002 0.67502866666666661 -0.39189600000000002 -0.62741572951056634 0.67671755114831378 -0.38523091559550776 +-0.64266266666666672 0.64228433333333335 -0.41684100000000002 -0.64904701109747098 0.63801410392828295 -0.41433800281174993 +-0.38367900000000005 0.74262333333333341 0.5482703333333333 -0.39116371642590253 0.74786225232639714 0.5363702065711371 +-0.40315966666666664 0.71069466666666659 0.57591066666666657 -0.4108886401027837 0.71616865610076674 0.56415687663389058 +-0.46257966666666661 0.65831733333333331 0.59323799999999993 -0.4589162595376976 0.6561049344014962 0.59910114487116173 +-0.42151733333333335 0.67719066666666661 0.60252166666666662 -0.42456563876750142 0.67153860466225002 0.60727252599324932 +-0.78833399999999998 0.18632033333333334 0.58582466666666677 -0.79241984688079592 0.18923451832685775 0.57988023189536142 +-0.78873800000000005 0.14520933333333333 0.59682866666666667 -0.79283859219124986 0.14819581080877822 0.59113870486623177 +-0.80904799999999988 0.080161999999999997 0.58178533333333327 -0.81279318645478138 0.083207446503565236 0.57657935871746147 +-0.78831566666666664 0.10404483333333332 0.60592866666666667 -0.79232113178228425 0.10712457526959689 0.60062596472725738 +-0.38578466666666666 0.91196566666666667 0.13735133333333335 -0.38170698678408727 0.91489615052823059 0.13139562393336282 +-0.42467100000000002 0.89513766666666672 0.13334799999999999 -0.42068224010972921 0.8981888517078197 0.12760579737632846 +-0.47605000000000003 0.87439566666666668 0.090921466666666673 -0.47213747213919743 0.87734060758261101 0.085788493917212008 +-0.46239333333333338 0.87702533333333343 0.12820000000000001 -0.45849305759258224 0.88016659891075488 0.12284491972108272 +-0.66111533333333339 0.7498826666666667 1.1564823173178713e-18 -0.66161565731528682 0.74980409650499436 -0.0076510691795381152 +-0.65962500000000002 0.74992800000000004 0.043603633333333336 -0.66045762513433848 0.74999913909909399 0.036014118794267365 +-0.67900399999999994 0.72532733333333332 0.11055603333333335 -0.68027853678687666 0.72566683621403705 0.10309585445698602 +-0.65521533333333337 0.7500119999999999 0.086990833333333337 -0.65638577782881369 0.75021718069676646 0.079573189275400455 +-0.8741593333333334 0.448237 0.18500266666666665 -0.87226383732852775 0.45409049572763344 0.18154233605069586 +-0.85947633333333329 0.48395833333333332 0.16242533333333331 -0.85729015236698924 0.48968695293830161 0.15893483814628531 +-0.54990566666666663 0.81053333333333333 -0.20004 -0.55650732236296829 0.80686525433351164 -0.19816170544713457 +-0.51483299999999999 0.85042666666666678 -0.10573533333333333 -0.52098864538413292 0.84714907157637964 -0.10444750790748547 +-0.50254100000000002 0.852213 -0.14353533333333332 -0.50896696988675449 0.84897311065938064 -0.14211713809963461 +-0.60594999999999999 0.69364366666666666 -0.38857199999999997 -0.60878046227242755 0.69527367312307187 -0.38207442758881577 +-0.40237200000000001 0.90979499999999991 0.098831166666666651 -0.40597625682229971 0.90779782046843382 0.10529195624222863 +-0.58757233333333325 0.68550100000000003 -0.4291213333333333 -0.60010626624401753 0.67813792847666066 -0.42426574122364386 +-0.38106733333333337 0.92208600000000007 0.062795833333333342 -0.3846570304796883 0.92045209254229532 0.069331913553990904 +-0.32170033333333331 0.94615333333333329 0.025922166666666666 -0.33489551984912225 0.94191163998673699 0.025445102524492232 +-0.36080433333333334 0.93196800000000002 0.0254641 -0.36431486214481984 0.93072619151734937 0.031991211980967785 +-0.52997433333333333 0.84764833333333334 0.015967733333333334 -0.53582528751528857 0.84418786852804661 0.015430615322529994 +-0.36358533333333337 0.92568533333333336 -0.10143216666666667 -0.36726950130505548 0.92382006745083589 -0.10802590608862792 +-0.55563600000000002 0.83115833333333333 0 -0.56493884084547652 0.82513278089297204 -4.8139625934572138e-15 +-0.38106733333333337 0.92208600000000007 -0.062795833333333329 -0.38465703047968858 0.92045209254229521 -0.069331913553990418 +-0.57604433333333327 0.81494699999999998 -0.059267866666666662 -0.57105803285634704 0.81853487189697649 -0.062397007931786277 +-0.43467066666666665 0.8999693333333334 -0.023969299999999999 -0.43778575898804439 0.89857223759622595 -0.030192102420559901 +-0.58062966666666671 0.81361933333333336 -0.019809433333333331 -0.58189096904843107 0.81316353437949784 -0.012960188861321678 +-0.39849600000000002 0.91651633333333338 -0.024812700000000004 -0.40185500805245644 0.915171589304688 -0.031201196013799438 +-0.54633266666666669 0.8181653333333333 -0.17754333333333336 -0.55294580946744287 0.81448691874194379 -0.17567581219578471 +-0.56228400000000001 0.81096399999999991 0.15991200000000003 -0.55631566138133393 0.81488320691282423 0.1627213691969199 +-0.55811400000000011 0.81788833333333333 -0.137791 -0.55215961732090557 0.82177650837133309 -0.14072358469372334 +-0.52627699999999999 0.83234166666666665 0.17215800000000001 -0.53285688470931325 0.82885946709064051 0.17045681045973243 +-0.60036900000000004 0.79510999999999987 -0.082435966666666666 -0.59527376626746875 0.79895366475196428 -0.085569765531693417 +-0.47419900000000004 0.85190366666666673 0.22082566666666667 -0.48098951346609398 0.84883685748693138 0.21937428588456132 +-0.56820133333333334 0.81665133333333328 -0.098415533333333347 -0.56255375688704445 0.82049991190666305 -0.10155375509271103 +-0.48899699999999996 0.85274033333333332 0.18195600000000001 -0.49563977507792489 0.84956016905264986 0.18052349575591767 +-0.74262333333333341 0.5482703333333333 0.38367900000000005 -0.74061277632469169 0.55398308333902357 0.38025709581652889 +-0.71069466666666659 0.57591066666666657 0.40315966666666664 -0.708546009052897 0.58161318657068906 0.39961062831498956 +-0.45581200000000005 0.85766166666666666 -0.23665966666666663 -0.46266802420794495 0.85473908320643333 -0.23528578158261554 +-0.65831733333333331 0.59323799999999993 0.46257966666666661 -0.6561049344014962 0.59910114487116173 0.4589162595376976 +-0.41561399999999998 0.87583766666666663 -0.24396433333333331 -0.42522044230301215 0.87361769644806653 -0.23660028719425635 +-0.67719066666666661 0.60252166666666662 0.42151733333333335 -0.67491424805509503 0.60820598850026464 0.41782320821687419 +-0.5698266666666667 0.79545466666666664 -0.20475399999999999 -0.57183818311343537 0.79603524377618062 -0.19831536249045836 +-0.42592233333333329 0.72526299999999999 0.54026033333333323 -0.42958194071176437 0.72767861204289574 0.53473656485192689 +-0.53302133333333324 0.81731666666666669 -0.21738166666666667 -0.52957076434678196 0.82117934975840745 -0.21264825670464432 +-0.44788500000000003 0.73833599999999999 0.50354433333333326 -0.45138676422756718 0.74054950290021937 0.49783172140232762 +-0.47139533333333333 0.85913866666666661 -0.19760733333333333 -0.47812770940072347 0.85609518430535181 -0.19620124595017999 +-0.44803333333333334 0.77925900000000003 0.43740800000000002 -0.45122962594317989 0.78110031861947005 0.43159485275399229 +-0.49497199999999997 0.83811233333333324 -0.22790133333333332 -0.49139120814526255 0.84194317261708629 -0.22285954016154333 +-0.46898966666666669 0.74988700000000008 0.46585133333333334 -0.47230309114310021 0.75188318294279199 0.46000159706732352 +-0.93953100000000001 -0.012861600000000001 0.34131833333333333 -0.94005100311840917 0 0.34103388619911745 +-0.8999693333333334 -0.023969299999999999 0.43467066666666665 -0.89641650563157604 -0.017885401699656269 0.4428516239524436 +-0.91651633333333338 -0.024812700000000004 0.39849600000000002 -0.91389284750939048 -0.025174534648851492 0.40517416758277142 +-0.81096399999999991 0.15991200000000003 0.56228400000000001 -0.81488320691282601 0.16272136919691735 0.55631566138133204 +-0.83234166666666665 0.17215800000000001 0.52627699999999999 -0.82885946709064051 0.17045681045973182 0.53285688470931347 +-0.85190366666666673 0.22082566666666667 0.47419900000000004 -0.84883685748693138 0.21937428588456132 0.48098951346609398 +-0.85274033333333332 0.18195600000000001 0.48899699999999996 -0.84956016905264986 0.18052349575591767 0.49563977507792489 +-0.5482703333333333 0.38367900000000005 0.74262333333333341 -0.56022334572548227 0.37591850110522268 0.7381294489660668 +-0.57591066666666657 0.40315966666666664 0.71069466666666659 -0.58161318657068917 0.39961062831498956 0.708546009052897 +-0.59323799999999993 0.46257966666666661 0.65831733333333331 -0.59910114487116184 0.45891625953769766 0.65610493440149631 +-0.60252166666666662 0.42151733333333335 0.67719066666666661 -0.60820598850026475 0.41782320821687419 0.67491424805509515 +-0.72526299999999999 0.54026033333333323 0.42592233333333329 -0.72767861204289574 0.53473656485192689 0.42958194071176437 +-0.73833599999999999 0.50354433333333326 0.44788500000000003 -0.74054950290021926 0.49783172140232762 0.45138676422756718 +-0.77925900000000003 0.43740800000000002 0.44803333333333334 -0.78110031861947005 0.43159485275399234 0.45122962594317989 +-0.74988700000000008 0.46585133333333334 0.46898966666666669 -0.75188318294279199 0.46000159706732352 0.47230309114310021 +-0.91196566666666667 0.13735133333333335 0.38578466666666666 -0.91489615052823059 0.13139562393336282 0.38170698678408727 +-0.89513766666666672 0.13334799999999999 0.42467100000000002 -0.8981888517078197 0.12760579737632846 0.42068224010972921 +-0.87439566666666668 0.090921466666666673 0.47605000000000003 -0.87734060758261101 0.085788493917212008 0.47213747213919743 +-0.87702533333333343 0.12820000000000001 0.46239333333333338 -0.88016659891075488 0.12284491972108273 0.4584930575925823 +-0.75636666666666663 0.51228966666666664 -0.4059166666666667 -0.75865329835647843 0.5067472582234922 -0.40945376927781429 +-0.73833599999999999 0.50354433333333326 -0.44788500000000003 -0.74158633826808484 0.50561065077724099 -0.4409167412502597 +-0.58582466666666677 0.78833399999999998 0.18632033333333334 -0.57988023189535964 0.7924198468807967 0.18923451832686014 +-0.59682866666666667 0.78873800000000005 0.14520933333333333 -0.5911387048662301 0.79283859219125141 0.14819581080877617 +-0.58178533333333327 0.80904799999999988 0.080161999999999997 -0.57657935871746147 0.81279318645478138 0.083207446503565236 +-0.60592866666666667 0.78831566666666664 0.10404483333333332 -0.60062596472725738 0.79232113178228425 0.1071245752695969 +-0.59682866666666667 0.78873800000000005 -0.14520933333333333 -0.59113870486622888 0.79283859219125252 -0.14819581080877534 +-0.72526299999999999 0.54026033333333334 -0.42592233333333329 -0.72767861204289241 0.53473656485192844 -0.42958194071176797 +-0.71069466666666659 0.57591066666666668 -0.40315966666666664 -0.70854600905289511 0.58161318657069216 -0.39961062831498856 +-0.71068766666666672 0.6169296666666666 -0.33708266666666664 -0.70828943337678218 0.62222522892875576 -0.33340942255934275 +-0.69467099999999993 0.61040833333333333 -0.37964866666666669 -0.69233584091762446 0.61589682358755293 -0.37595503198607222 +-0.68725733333333328 0.72564533333333336 -0.022199266666666665 -0.68790368117369138 0.72565832946335795 -0.0144400245198193 +-0.65962500000000002 0.74992800000000004 -0.043603633333333336 -0.66045762513433692 0.7499991390990951 -0.036014118794271847 +-0.60575433333333339 0.794234 -0.041378733333333334 -0.60677526245756808 0.79413092226005266 -0.03434907829837075 +-0.63074133333333338 0.77298066666666665 -0.063896999999999995 -0.6318110775202368 0.77305026458344039 -0.056639657045134018 +-0.40237200000000001 0.90979500000000002 -0.098831166666666678 -0.4059762568223006 0.90779782046843327 -0.10529195624223014 +-0.42467100000000002 0.89513766666666672 -0.13334799999999999 -0.42068224010972916 0.89818885170781948 -0.12760579737632941 +-0.99349399999999999 0.10851619999999999 -0.022237466666666667 -0.99366413966331857 0.10853012501892692 -0.029202559999646969 +-0.98750233333333337 0.148782 -0.044724966666666664 -0.98751754500301114 0.14875603742522206 -0.051775859633345515 +-0.97215366666666669 0.22839699999999996 -0.045218333333333333 -0.97216451120541103 0.22834695483901651 -0.052476960358736502 +-0.97937533333333315 0.18860866666666665 -0.067428200000000008 -0.97923504472179446 0.18851326331065299 -0.074575309216078592 +-0.86488299999999996 0.44522266666666671 0.23033366666666666 -0.86718072358672216 0.43967029351048176 0.23385385531142255 +-0.88711800000000007 0.41159166666666663 0.20715033333333333 -0.88928944660465614 0.4059111746818222 0.21071402047801124 +-0.91466100000000006 0.37891566666666671 0.13824433333333333 -0.91689163039086208 0.37305445430029116 0.14191586326376218 +-0.90747233333333333 0.37685399999999997 0.18377033333333334 -0.90952132795887353 0.37102658099972141 0.18737724029236921 +-0.98849733333333323 0.14889633333333332 -1.1564823173178713e-18 -0.98881853925647345 0.14895675499016464 -0.0070556052535643982 +-0.98750233333333337 0.148782 0.044724966666666664 -0.98751754500301092 0.14875603742522195 0.051775859633347958 +-0.98758800000000002 0.10800340000000001 0.11095060000000001 -0.98715914492012036 0.10787007612224334 0.1178171009571965 +-0.98452266666666655 0.14843300000000001 0.089341133333333336 -0.98423575270793739 0.14831702844712868 0.096343355578128551 +-0.37950966666666663 0.86683433333333326 0.32232633333333333 -0.38258934313579762 0.86803909017894487 0.31643882890730773 +-0.36019033333333333 0.85979766666666668 0.36100666666666664 -0.3675745341215505 0.85758746356507642 0.35976756969096546 +-0.362674 0.82594966666666669 0.4307913333333333 -0.37670864323402198 0.82110212139525307 0.42881453374739692 +-0.97972166666666671 -0.026782933333333332 0.19685366666666668 -0.97844680898053793 -0.027139122204929943 0.20470786511941458 +-0.9873993333333333 -0.026941300000000001 0.15372666666666668 -0.98646689731815052 -0.027323269255811418 0.16166786771859171 +-0.99567566666666674 0.013556566666666667 0.088052033333333335 -0.99539188988286775 0.013538437507782957 0.094929954520481544 +-0.99320699999999995 -0.027062466666666663 0.11007063333333333 -0.99262536964779458 -0.027448998744322078 0.11807382436219034 +-0.99017999999999995 0.13544999999999999 0.022326099999999998 -0.99034549974472819 0.13546610395069736 0.029406220698746464 +-0.99414233333333335 0.094949566666666665 0.044384866666666668 -0.99415826351618952 0.09492444190745418 0.051368252949006939 +-0.9985909999999999 0.013590633333333333 0.044029100000000009 -0.99861153173989292 0.01358945587142231 0.050895337362310569 +-0.99597933333333322 0.054270233333333334 0.066234899999999999 -0.99584388442193827 0.054237984373482949 0.073165558226034058 +-0.82594966666666669 0.4307913333333333 0.362674 -0.82785431066039616 0.42508009428749394 0.36601113884899122 +-0.85106633333333337 0.39919166666666667 0.34005899999999994 -0.85280497080606454 0.39346996082837155 0.34337307945467582 +-0.74024633333333334 0.51888433333333328 0.42672700000000002 -0.74257141516746727 0.51324151458922507 0.43031481624311191 +-0.77051866666666669 0.49050400000000005 0.40621499999999999 -0.77270320478273313 0.48485766119619816 0.40968622834780072 +-0.81468733333333343 0.46787466666666666 0.34159100000000003 -0.8168231817552648 0.46233366051553543 0.34503257252252489 +-0.79909666666666668 0.46117466666666668 0.38479733333333338 -0.80114527169293681 0.45549482658489687 0.38818902173869541 +-0.9840779999999999 -0.0134354 0.17529833333333333 -0.98521551962444398 -0.0067284410507964494 0.17118734758200649 +-0.71838866666666679 0.65739499999999995 0.22599133333333332 -0.71553780893610663 0.66226771662737915 0.22227711419773558 +-0.9873993333333333 0.026941300000000001 0.15372666666666665 -0.98667240814492363 0.026890596352768442 0.16048194550568526 +-0.73784766666666657 0.62639233333333333 0.25005566666666668 -0.73520009164158984 0.63148093086238388 0.24639938962459892 +-0.97958233333333344 0.14785633333333334 0.13365466666666667 -0.98035278201893183 0.14140532735560749 0.13752438395860647 +-0.80106633333333332 0.53071599999999997 0.27557166666666671 -0.7989719161796639 0.536265657645561 0.27214522150162812 +-0.97273166666666666 0.14706466666666665 0.17742433333333332 -0.97332507116728162 0.14069236473595817 0.18122903835260593 +-0.81243133333333339 0.53480433333333333 0.23075133333333331 -0.8101700112367497 0.54034534738107576 0.22726957221825661 +-0.84005133333333337 0.33887933333333331 -0.42284533333333335 -0.84320163302342188 0.34078478283065056 -0.4157844848689054 +-0.83285633333333342 0.37765766666666667 -0.4037823333333333 -0.8343824500435969 0.37181688618420933 -0.40688835103443721 +-0.83950633333333335 0.42241299999999998 -0.34073899999999996 -0.84139072144433491 0.41671320306238774 -0.3441100990393437 +-0.82400366666666669 0.41591733333333331 -0.38384699999999999 -0.82578576083367294 0.41017013682103337 -0.38708957111315551 +-0.87569633333333341 0.43517099999999997 -0.207564 -0.87802007925767067 0.42952993482460028 -0.21115107271792039 +-0.86546833333333328 0.43182166666666671 -0.25258333333333333 -0.86762894089824827 0.42618611131614031 -0.25609650414835899 +-0.82827800000000007 0.4594753333333334 -0.31960100000000002 -0.8304139645378581 0.45393507348914391 -0.32304116851714487 +-0.85336699999999999 0.42763400000000001 -0.29698633333333335 -0.8553833832274883 0.42197135721665091 -0.30043209114046621 +-0.74517200000000006 0.6408423333333334 -0.18265566666666666 -0.74224043434856068 0.64576760458469673 -0.17906238713644693 +-0.76478933333333332 0.60974166666666674 -0.20646366666666668 -0.76208480428307168 0.61485905697699661 -0.20291646343801342 +-0.77153066666666659 0.5732626666666667 -0.27462199999999998 -0.7691811662928385 0.57868388027417195 -0.27108172223744026 +-0.78303900000000004 0.5772896666666667 -0.22998833333333332 -0.7805596921302298 0.58261180697286785 -0.22647306550089036 +-0.72644833333333336 0.55500833333333321 -0.40440066666666663 -0.72439943030853671 0.56081299478492408 -0.40091676224502282 +-0.74308733333333332 0.56231999999999993 -0.36183000000000004 -0.74095857789011721 0.56796520450867349 -0.35832375349462364 +-0.78747599999999995 0.53911566666666666 -0.29756200000000005 -0.78538004564948882 0.54467029029810377 -0.29413000316558346 +-0.75816133333333335 0.56834533333333326 -0.31856266666666672 -0.75591839905677671 0.57388445654331854 -0.31503016443734327 +-0.97972166666666671 0.026782933333333332 -0.19685366666666668 -0.97903891595984682 0.033539917629471783 -0.2008926951423978 +-0.9873993333333333 0.026941300000000001 -0.15372666666666668 -0.98667240814492363 0.026890596352768366 -0.1604819455056852 +-0.99567566666666674 -0.013556566666666667 -0.088052033333333335 -0.99645037790286128 -0.0067825110210987917 -0.083908533067223873 +-0.99320699999999995 0.027062466666666663 -0.11007063333333333 -0.99277645957187444 0.027023373377348336 -0.11689584514106015 +-0.9985909999999999 -0.013590633333333333 -0.044029100000000009 -0.99881287530810392 -0.0068038108128188786 -0.048234306019487111 +-0.85702366666666663 0.34606799999999999 -0.38087633333333332 -0.85837763506900822 0.3402100303585775 -0.38398563886785186 +-0.8793616666666666 0.31327633333333332 -0.35763733333333336 -0.88205972540034017 0.31481725442731096 -0.35051495993969534 +-0.90397933333333336 0.24023133333333332 -0.35277166666666665 -0.90184935426715007 0.23919234458256397 -0.35979822748454465 +-0.89978666666666662 0.27934999999999999 -0.33417800000000003 -0.89777797192039699 0.2783212344704471 -0.34136784203750853 +-0.92134066666666659 0.20500533333333334 -0.32930966666666667 -0.91939394482786752 0.20415305190362462 -0.33620872328404577 +-0.90640266666666669 0.20096933333333333 -0.37067 -0.9090221925572588 0.20849605940253854 -0.36084352100599926 +-0.40261533333333333 0.84358833333333338 0.3543716666666667 -0.40567559458008401 0.84497406496934002 0.34849123588877379 +-0.44426433333333337 0.82582333333333324 0.34636500000000003 -0.44788120365419287 0.82188455470053834 0.35200597460550193 +-0.50220666666666669 0.81162366666666663 0.29731033333333334 -0.49883260789314809 0.81591989161691847 0.29230251412938058 +-0.48500100000000002 0.80657299999999987 0.33695900000000001 -0.48167303761240987 0.81106618862543955 0.33190770178746504 +-0.54111533333333328 0.79043766666666659 0.285908 -0.53782883589854502 0.79478643964980356 0.28116660296842705 +-0.51826699999999992 0.8151826666666665 0.25734633333333329 -0.51483738173932114 0.81927210874247614 0.25245926839879901 +-0.71510766666666681 0.66833066666666652 -0.20317933333333335 -0.71214652401015688 0.67309545366944323 -0.19947390453334365 +-0.72425300000000004 0.67053999999999991 -0.15863733333333332 -0.7296647789377706 0.66585752370229223 -0.15563761918876087 +-0.75888966666666668 0.644177 -0.091938833333333345 -0.75461173338973031 0.64921606847318236 -0.095287083420423052 +-0.73132766666666671 0.67199433333333325 -0.11367523333333333 -0.72672368166859569 0.67689322828463949 -0.11699678629962644 +-0.83168433333333336 0.55413233333333334 -0.023326566666666663 -0.82834740396313333 0.55957288650226811 -0.026809756415478874 +-0.80900833333333333 0.5853666666666667 -0.046535399999999998 -0.80536664437786842 0.59066725196862724 -0.049967645285346952 +-0.76245399999999997 0.64488299999999998 -0.046073400000000007 -0.75844767523465539 0.64985474643003172 -0.049456369392685988 +-0.78476100000000004 0.61534100000000003 -0.069477033333333341 -0.78081027126240599 0.62050512688950177 -0.072860879729599884 +-0.35277166666666665 0.90397933333333336 -0.24023133333333332 -0.35884953293333854 0.90540314548384249 -0.22687476030067502 +-0.40431166666666668 0.90593933333333332 -0.12329633333333334 -0.40021859160024631 0.90887682535716718 -0.11733710097915648 +-0.38781933333333335 0.90705666666666662 -0.16191933333333333 -0.39436940024219586 0.90473780623552025 -0.1610039692701673 +-0.37067 0.90640266666666669 -0.20096933333333333 -0.37452548842842248 0.90371268663343907 -0.20744647149378848 +-0.42130033333333339 0.84991400000000006 0.31540433333333334 -0.42422166270159223 0.85104278700009928 0.3094546099023251 +-0.39799066666666666 0.87218166666666674 0.28325866666666671 -0.39102043340789627 0.87515194316742995 0.28497736230755671 +-0.33260966666666664 0.90763266666666664 0.25476333333333329 -0.34273989784634673 0.90618364900595938 0.24771063097598361 +-0.3744993333333333 0.89252600000000004 0.24997166666666668 -0.38154197856914401 0.8902251303593165 0.2488472139009815 +-0.30914666666666668 0.9250423333333333 0.21922133333333335 -0.31708091584157094 0.91986749040706861 0.23087549220580375 +-0.38235766666666665 0.91950733333333334 0.08777366666666668 -0.38603366980132137 0.91764343429393269 0.094385026762517532 +-0.34321000000000002 0.93462666666666661 0.089739633333333332 -0.34697098790484687 0.9329023422143834 0.096459076520834311 +-0.72845533333333334 0.66008133333333341 0.18158266666666667 -0.72544745530847643 0.66487474133902336 0.17795383647402202 +-0.69767499999999993 0.68696599999999997 0.20164099999999999 -0.69650390892021663 0.68635276333029871 0.20928972532764595 +-0.65288666666666673 0.70969066666666658 0.26345566666666664 -0.65501968417060419 0.71076863277450397 0.25643159714220903 +-0.66528666666666669 0.71280966666666679 0.22053199999999998 -0.66719302095845745 0.71368475232804907 0.21332497996900987 +-0.60594999999999999 0.69364366666666666 0.38857199999999997 -0.60878046227242899 0.69527367312307142 0.38207442758881438 +-0.62304033333333342 0.70030133333333333 0.3474376666666667 -0.62562797974048401 0.70174682321566206 0.34079469930233214 +-0.61778100000000002 0.73429599999999995 0.28015933333333337 -0.62004007182029142 0.73539666254061653 0.27338993774682063 +-0.63873966666666671 0.70558766666666661 0.30574499999999999 -0.64109301993334877 0.70685708038104444 0.29891940001934414 +-0.9840779999999999 0.0134354 0.17529833333333333 -0.98320307150509523 0.013404506121270485 0.1820220849199112 +-0.97857266666666665 0.053538400000000007 0.1971103333333333 -0.979324934656573 0.060177193173974249 0.19313564606669897 +-0.96046299999999996 0.092355799999999988 0.26138033333333338 -0.9603910423236186 0.08592826281060327 0.26507617673964096 +-0.97088433333333324 0.093213466666666675 0.21914 -0.97096749167518503 0.086713040544329462 0.22294164866519872 +-0.91950733333333334 0.08777366666666668 0.38235766666666665 -0.91764343429393269 0.094385026762517532 0.38603366980132137 +-0.93462666666666661 0.089739633333333332 0.34321000000000002 -0.93431304332940213 0.083562648426005665 0.34652044795737857 +-0.94964533333333334 0.13090333333333334 0.28351199999999999 -0.94977514119533712 0.12461157419779904 0.28705249823564311 +-0.9483233333333333 0.091219933333333336 0.30284166666666668 -0.94812943316726528 0.084897429891930984 0.30633805568303907 +-0.68696599999999997 0.20164099999999999 0.69767499999999993 -0.69662025032073494 0.19323465497063358 0.69092734419869128 +-0.70969066666666658 0.26345566666666664 0.65288666666666673 -0.71076863277450408 0.25643159714220909 0.6550196841706043 +-0.71280966666666679 0.22053199999999998 0.66528666666666669 -0.71368475232804918 0.21332497996900987 0.66719302095845745 +-0.69364366666666666 0.38857199999999997 0.60594999999999999 -0.69527367312307142 0.38207442758881438 0.60878046227242899 +-0.70030133333333333 0.3474376666666667 0.62304033333333342 -0.70174682321566206 0.34079469930233214 0.62562797974048401 +-0.73429599999999995 0.28015933333333337 0.61778100000000002 -0.73539666254061653 0.27338993774682063 0.62004007182029142 +-0.70558766666666661 0.30574499999999999 0.63873966666666671 -0.70685708038104444 0.29891940001934414 0.64109301993334866 +-0.84358833333333338 0.3543716666666667 0.40261533333333333 -0.84497406496934002 0.34849123588877379 0.40567559458008401 +-0.82582333333333324 0.34636500000000003 0.44426433333333337 -0.82188455470053834 0.35200597460550193 0.44788120365419287 +-0.81162366666666663 0.29731033333333334 0.50220666666666669 -0.81591989161691847 0.29230251412938058 0.49883260789314809 +-0.80657299999999987 0.33695900000000001 0.48500100000000002 -0.81106618862543955 0.33190770178746498 0.48167303761240993 +-0.8181653333333333 0.17754333333333336 0.54633266666666669 -0.81448691874194223 0.17567581219578526 0.55294580946744487 +-0.81731666666666669 0.21738166666666667 0.53302133333333324 -0.82117934975840645 0.21264825670464366 0.52957076434678363 +-0.79043766666666659 0.285908 0.54111533333333328 -0.79478643964980356 0.2811666029684271 0.53782883589854502 +-0.8151826666666665 0.25734633333333329 0.51826699999999992 -0.81927210874247614 0.25245926839879901 0.51483738173932114 +-0.74868333333333326 0.62970633333333337 0.20557800000000001 -0.74587853360328382 0.63471859439677514 0.20198395737482966 +-0.75754100000000013 0.63220766666666661 0.16052666666666668 -0.76269529192907415 0.62731830658435561 0.15737736143855202 +-0.74243766666666655 0.66315266666666661 0.091391999999999987 -0.7380201623109971 0.66809911774214681 0.094709075038321919 +-0.76435100000000011 0.63392533333333334 0.11503839999999999 -0.75999418759786697 0.63905202783527448 0.11841174155075082 +-0.66962899999999992 0.74196399999999996 0.021954166666666667 -0.67028755876104185 0.74196595278651578 0.014181448295595584 +-0.69494100000000003 0.71724500000000013 0.044609500000000003 -0.69058513447234893 0.72166551516255684 0.047864979588098266 +-0.74612066666666665 0.66373699999999991 0.045797666666666674 -0.74198240659209025 0.66861355370751385 0.049173408529605271 +-0.71923599999999999 0.69097666666666668 0.067828766666666665 -0.71484071533694804 0.69565931898028299 0.071139747064838055 +-0.44099433333333332 0.84560366666666675 -0.29968466666666665 -0.44669675023868344 0.847564540632879 -0.28652462858884598 +-0.50412633333333334 0.80162933333333319 -0.32027700000000003 -0.50335093264587394 0.8069158784614664 -0.30907054808132195 +-0.48135633333333333 0.82648499999999991 -0.29078700000000002 -0.47787127089350295 0.83068865576297879 -0.28564909529232502 +-0.56820666666666664 0.71697033333333327 -0.40298833333333334 -0.58093846961652296 0.70982246495114332 -0.39832469515496399 +-0.54774466666666666 0.7468366666666667 -0.37619833333333336 -0.56066025968805722 0.73992724229620144 -0.37170922683524893 +-0.54323266666666659 0.78036933333333336 -0.30863433333333329 -0.54003468947667976 0.78483938517234042 -0.30395669698845057 +-0.52632333333333337 0.77506433333333324 -0.34868433333333332 -0.53939307913484291 0.76838593694752411 -0.34443890326545362 +-0.73524766666666663 0.6380096666666667 -0.22731699999999999 -0.73247878998148919 0.64299905357400278 -0.22366725135832943 +-0.70400200000000002 0.66529633333333327 -0.24715366666666663 -0.70252952126911361 0.66450329097410654 -0.25473054004177048 +-0.65008200000000005 0.72023166666666671 -0.24082699999999999 -0.65209324997457174 0.72120350456889659 -0.23375178787581957 +-0.67113733333333325 0.69153466666666663 -0.26586133333333334 -0.67327750173586243 0.69264770558930855 -0.25872101112623663 +-0.58185500000000001 0.79621133333333338 -0.16397500000000001 -0.5759024890943909 0.80029787243831818 -0.16691206794473051 +-0.60520099999999999 0.77270733333333341 -0.18981166666666668 -0.60701838370830674 0.7733167665531343 -0.18305698677723373 +-0.61521733333333328 0.74463999999999997 -0.25760333333333335 -0.61737720596625756 0.74562370031847547 -0.25078014888878547 +-0.6280163333333334 0.74735400000000007 -0.21542566666666665 -0.62994672096641058 0.74812731929989273 -0.20850094211015854 +-0.9840779999999999 -0.0134354 -0.17529833333333333 -0.98691241345678504 -0.013902770097773812 -0.16065678058679073 +-0.84991400000000006 0.31540433333333334 0.42130033333333339 -0.85104278700009928 0.3094546099023251 0.42422166270159223 +-0.87218166666666674 0.28325866666666671 0.39799066666666666 -0.87515194316742995 0.28497736230755671 0.39102043340789627 +-0.90763266666666664 0.25476333333333329 0.33260966666666664 -0.90564963743778037 0.2537815664677886 0.33969640965128323 +-0.89252600000000004 0.24997166666666668 0.3744993333333333 -0.8902251303593165 0.2488472139009815 0.38154197856914401 +-0.94270433333333337 0.26347700000000002 0.20296099999999997 -0.94165092030341868 0.26294319089648543 0.21012953779252261 +-0.93280466666666662 0.26126333333333335 0.24684200000000001 -0.93145059669590613 0.26058069002973927 0.25396356017835581 +-0.9250423333333333 0.21922133333333335 0.30914666666666668 -0.92324824765135183 0.21840485990215974 0.31608857995793876 +-0.92108633333333334 0.25843766666666668 0.29005533333333333 -0.91942952058264094 0.25759897198975035 0.2971399103301321 +-0.5970939999999999 0.57400033333333333 0.559728 -0.59735900477779025 0.57412757476011167 0.55994620037192899 +-0.58218099999999995 0.61056333333333335 0.53625699999999998 -0.58231563453184998 0.61077524703187103 0.5365278179115468 +-0.52701999999999993 0.66796766666666674 0.524752 -0.53067049118758236 0.67029144614632918 0.51874676577863399 +-0.56587633333333331 0.64585599999999999 0.51180999999999999 -0.56946362135064477 0.64813805873458874 0.50559691531690387 +-0.40440066666666663 0.72644833333333336 0.55500833333333333 -0.41178317764580941 0.72388693021211736 0.55355426732705892 +-0.44618933333333333 0.70834066666666684 0.54632233333333335 -0.44274739014690234 0.70634826733897726 0.55231048672402683 +-0.50875899999999996 0.70129166666666676 0.49865066666666663 -0.51227314734642249 0.70346879484043656 0.49265391218738364 +-0.48709399999999997 0.68882333333333323 0.53624499999999997 -0.49079818955949378 0.69119748274502613 0.53043677942999268 +-0.38439033333333333 0.75755833333333333 0.52692766666666657 -0.3984138134810481 0.7523341244104359 0.52465207373560541 +-0.92875233333333329 0.36902433333333334 0.023093466666666663 -0.92909577934043552 0.36911258269415131 0.023171838697909626 +-0.94198866666666659 0.33142500000000003 0.04592396666666667 -0.94233057969160439 0.33150388176605172 0.046024503822688481 +-0.9656313333333334 0.25454166666666667 0.045389633333333339 -0.96563827865214957 0.25447243147524934 0.052787275178665882 +-0.95327899999999988 0.29303333333333331 0.068455500000000016 -0.95312415703736364 0.29288506573994472 0.075978151716947218 +-0.99018000000000006 0.13544999999999999 -0.022326100000000001 -0.99034549974472841 0.13546610395069533 -0.029406220698747692 +-0.98410066666666662 0.17562699999999998 0 -0.98442075068827462 0.17568207852183432 -0.0071828198210750361 +-0.97389733333333339 0.21503999999999998 0.067673766666666663 -0.97374709075627075 0.21493760296758127 0.07495618769821083 +-0.97591266666666654 0.21536433333333335 0.022573899999999997 -0.97607441993813926 0.21537615737539617 0.029863649754066537 +-0.9754856666666667 0.013347533333333333 -0.21812066666666666 -0.97401232856293862 0.026285001833126275 -0.22496462496587019 +-0.97857266666666654 0.053538400000000007 -0.19711033333333336 -0.97932493465657278 0.060177193173970425 -0.19313564606670133 +-0.9863019999999999 0.094360200000000005 -0.13272600000000001 -0.98571899316339384 0.094201848958944151 -0.13958537949821809 +-0.97951366666666662 0.093863266666666667 -0.17624100000000001 -0.97990967194526546 0.10047745418984431 -0.17228266316623408 +-0.9951253333333332 0.095028733333333337 -1.1564823173178713e-18 -0.9954450963919369 0.095080919327119623 -0.0069770229437209307 +-0.99414233333333335 0.094949566666666665 -0.044384866666666668 -0.99415826351618952 0.094924441907454235 -0.051368252949006959 +-0.98424200000000006 0.13481499999999999 -0.11134860000000001 -0.98380455546183165 0.13465699226459019 -0.11830507633572626 +-0.99119466666666656 0.094722766666666666 -0.088691666666666669 -0.99090868604521276 0.094624458621765259 -0.095635703326151886 +-0.57400033333333333 0.559728 0.5970939999999999 -0.57412757476011167 0.55994620037192899 0.59735900477779025 +-0.61056333333333335 0.53625699999999998 0.58218099999999995 -0.61077524703187092 0.53652781791154669 0.58231563453184998 +-0.66796766666666674 0.524752 0.52701999999999993 -0.67029144614632918 0.51874676577863399 0.53067049118758236 +-0.64585599999999999 0.51180999999999999 0.56587633333333331 -0.64813805873458874 0.50559691531690387 0.56946362135064477 +-0.72644833333333336 0.55500833333333333 0.40440066666666663 -0.72439943030853515 0.56081299478492752 0.40091676224502076 +-0.70834066666666684 0.54632233333333335 0.44618933333333333 -0.70634826733897726 0.55231048672402683 0.44274739014690234 +-0.70129166666666676 0.49865066666666663 0.50875899999999996 -0.70346879484043656 0.49265391218738364 0.51227314734642249 +-0.68882333333333323 0.53624499999999997 0.48709399999999997 -0.69119748274502602 0.53043677942999257 0.49079818955949372 +-0.71510766666666659 0.66833066666666652 0.20317933333333335 -0.7121465240101571 0.67309545366944168 0.19947390453334798 +-0.70400200000000002 0.66529633333333327 0.24715366666666669 -0.70252952126911561 0.66450329097410477 0.25473054004176948 +-0.70974033333333342 0.62968733333333338 0.31475999999999998 -0.70722940200759854 0.63488697783600867 0.31103874085109395 +-0.69105033333333343 0.66134433333333342 0.29050300000000001 -0.68928038046168305 0.66038496798852653 0.29796686252902399 +-0.75755833333333333 0.52692766666666657 0.38439033333333333 -0.75563435731375406 0.5327508406532252 0.38104233338345961 +-0.74308733333333332 0.56232000000000004 0.36183000000000004 -0.74095857789011776 0.56796520450867294 0.35832375349462325 +-0.69445200000000007 0.62386399999999986 0.35754100000000005 -0.69203077337497576 0.62922690351361477 0.35378936190436955 +-0.72712433333333326 0.59662133333333323 0.33858233333333332 -0.72479541496417221 0.60206985994653062 0.33493803933097638 +-0.39970366666666668 0.8632616666666667 0.30715500000000001 -0.40269359976225672 0.86434752812370608 0.3012328257958527 +-0.35763733333333336 0.8793616666666666 0.31327633333333332 -0.35051495993969434 0.88205972540034061 0.31481725442731084 +-0.31486966666666666 0.89383633333333334 0.31817000000000001 -0.32141623142252845 0.89646988933045202 0.30501367789328204 +-0.92875233333333329 0.36902433333333334 -0.023093466666666663 -0.92909577934043563 0.36911258269415131 -0.023171838697907406 +-0.91360566666666665 0.40573133333333339 0 -0.91395529702109868 0.40581487056505949 -7.6650762202989397e-05 +-0.89445666666666668 0.44087900000000002 0.069773100000000005 -0.8921471485624638 0.44687846223520744 0.066129458656195655 +-0.89658166666666661 0.44146866666666668 0.023282399999999998 -0.89406335609088383 0.44751152718113485 0.019599702434322533 +-0.87569633333333341 0.43517099999999997 0.207564 -0.87802007925767123 0.42952993482459917 0.21115107271792008 +-0.88396799999999998 0.4377786666666667 0.16201833333333335 -0.88647153569421999 0.43211376507175492 0.16566807308423559 +-0.87450700000000003 0.47524699999999998 0.093143066666666663 -0.87208010639908573 0.48110197469553667 0.089538695361360249 +-0.8902363333333333 0.439668 0.11605323333333334 -0.88812183032546255 0.44564102421677071 0.11244417296764649 +-0.8632616666666667 0.30715500000000001 0.39970366666666668 -0.86434752812370608 0.3012328257958527 0.40269359976225672 +-0.8793616666666666 0.31327633333333332 0.35763733333333336 -0.88205972540034072 0.3148172544273109 0.35051495993969439 +-0.8861296666666667 0.35661433333333337 0.29480833333333334 -0.88770117086706257 0.35082964097389946 0.298169740676969 +-0.89383633333333334 0.31817000000000001 0.31486966666666666 -0.89624801139507848 0.31951953619145285 0.30764714863357029 +-0.85258733333333325 0.46819666666666665 0.23063066666666665 -0.85071803619800823 0.47398585102273655 0.22719206834230932 +-0.86546833333333328 0.4318216666666666 0.25258333333333333 -0.86762894089824816 0.42618611131614109 0.25609650414835827 +-0.89808433333333326 0.36037766666666671 0.25075433333333336 -0.89979701339302798 0.35458216684467231 0.25423772663537536 +-0.87666166666666667 0.39457300000000001 0.27400933333333338 -0.87853054159162092 0.38883780863987261 0.27746936058396582 +-0.55500833333333333 0.40440066666666663 0.72644833333333336 -0.560105432184139 0.40765908089184932 0.72117680121051542 +-0.54632233333333335 0.44618933333333333 0.70834066666666684 -0.55231048672402683 0.44274739014690234 0.70634826733897726 +-0.49865066666666663 0.50875899999999996 0.70129166666666676 -0.49265391218738364 0.51227314734642249 0.70346879484043656 +-0.53624499999999997 0.48709399999999997 0.68882333333333323 -0.53043677942999268 0.49079818955949367 0.69119748274502613 +-0.66529633333333327 0.24715366666666669 0.70400200000000002 -0.67400167013189838 0.2536091376418031 0.69383294384454874 +-0.62968733333333338 0.31475999999999998 0.70974033333333342 -0.63469905587766706 0.31800651135779723 0.70429323949761236 +-0.66134433333333342 0.29050300000000001 0.69105033333333343 -0.66038496798852653 0.29796686252902399 0.68928038046168305 +-0.56232000000000004 0.36183000000000004 0.74308733333333332 -0.57161008136831104 0.36848181702340249 0.7331323655392965 +-0.62386399999999986 0.35754100000000005 0.69445200000000007 -0.62922690351361477 0.35378936190436955 0.69203077337497576 +-0.59662133333333323 0.33858233333333332 0.72712433333333326 -0.60573461278917862 0.3451074417932965 0.71692847097045209 +-0.94302533333333327 0.33165866666666671 0 -0.94332079023156645 0.33188233866370914 -2.0645674448368696e-16 +-0.9419886666666667 0.33142500000000003 -0.04592396666666667 -0.9423305796916045 0.33150388176605133 -0.046024503822688273 +-0.92250933333333329 0.36743666666666669 -0.11516276666666668 -0.92477192156992361 0.36146431664713258 -0.11891358571119012 +-0.93888933333333335 0.33070500000000003 -0.091738066666666673 -0.94101246637268221 0.32459334718907801 -0.095575609293335778 +-0.86189800000000005 0.47129566666666661 -0.18523799999999999 -0.85984579511114489 0.4771076381594323 -0.18175123174166177 +-0.72845533333333334 0.6600813333333333 -0.18158266666666667 -0.7254474553084781 0.66487474133902225 -0.17795383647401947 +-0.75754099999999991 0.63220766666666661 -0.16052666666666668 -0.76269529192907126 0.62731830658435828 -0.15737736143855552 +-0.80410033333333331 0.57136966666666666 -0.16208199999999998 -0.80143539604984326 0.57666967522084989 -0.15859820818379541 +-0.78491366666666673 0.60333300000000001 -0.13862866666666665 -0.7897729464689609 0.59827686849897932 -0.1353642554177088 +-0.74024633333333334 0.51888433333333339 -0.42672700000000002 -0.74257141516746672 0.51324151458922485 -0.43031481624311307 +-0.70834066666666662 0.54632233333333324 -0.44618933333333333 -0.71156848987857446 0.5483828868857894 -0.43925675132288244 +-0.65946733333333329 0.60814899999999994 -0.441085 -0.65399110933731253 0.62014958554441335 -0.43325526016061694 +-0.84991400000000006 0.31540433333333334 -0.42130033333333339 -0.84801861201595774 0.3289341025018061 -0.41553193606010613 +-0.82582333333333324 0.34636500000000003 -0.44426433333333337 -0.82355866817668288 0.35984158015639028 -0.43848050955726697 +-0.79176933333333332 0.41493233333333329 -0.44748600000000005 -0.78860909795809553 0.42820671089368856 -0.44128755178831852 +-0.57987066666666665 0.59409199999999995 0.55685966666666664 -0.57765607108327444 0.60032566082443639 0.55310267084542164 +-0.54185133333333335 0.6166786666666666 0.5704326666666667 -0.53827283249171476 0.61459058224575014 0.57666348420562952 +-0.4790543333333333 0.62262166666666674 0.61817566666666668 -0.48585593822267048 0.61959051746381588 0.61648325035047735 +-0.50272266666666665 0.6381163333333334 0.58255299999999999 -0.49909043067144071 0.6359748331968218 0.58859557724508138 +-0.4291213333333333 0.58757233333333325 0.68550100000000003 -0.44287025493391391 0.58129621282282395 0.68261310436631106 +-0.43866333333333335 0.64218399999999998 0.6280673333333332 -0.44564628559022512 0.63939888485503282 0.62655283431309761 +-0.45450433333333334 0.60574300000000003 0.65252999999999994 -0.44805947938148183 0.60897952160709901 0.65451252486074274 +-0.9840779999999999 0.0134354 -0.17529833333333333 -0.98502511365736167 0.020132858611957922 -0.17123140327758998 +-0.9873993333333333 -0.026941300000000001 -0.15372666666666665 -0.98908856318175531 -0.013855941447276254 -0.14666910741413983 +-0.85751700000000008 0.0098685999999999999 0.51400666666666661 -0.85625815419931606 0.016157371151246901 0.51629537352629973 +-0.84412233333333331 0.033939766666666669 0.53466000000000002 -0.84211831054466535 0.044479445379375336 0.53745542139245528 +-0.8076793333333333 0.040241233333333327 0.58780333333333334 -0.81112166378311712 0.05030456718831848 0.58271013125026749 +-0.82775166666666655 0.0568081 0.55776333333333328 -0.8311982227298389 0.060162204636448988 0.55271151938786212 +-0.78756366666666666 0.062679333333333337 0.6125790000000001 -0.79125242395262319 0.07298140215876496 0.60711886523813341 +-0.51400666666666661 0.85751700000000008 -0.0098685999999999999 -0.51629537352629973 0.85625815419931606 -0.016157371151246894 +-0.50072033333333332 0.86509833333333341 0.020975933333333335 -0.49296150071514128 0.86961675129264893 0.027489355829028849 +-0.51093266666666659 0.85518833333333344 0.084138333333333329 -0.51693773592267456 0.85198203848343856 0.083078175718679162 +-0.48871233333333336 0.87042766666666671 0.054918800000000011 -0.48452607356091093 0.8733385932212776 0.050141655636071814 +-0.58185500000000001 0.79621133333333338 0.16397500000000001 -0.57590248909438635 0.80029787243832073 0.16691206794473423 +-0.55811399999999989 0.81788833333333333 0.137791 -0.55215961732090924 0.82177650837133109 0.14072358469372062 +-0.4989513333333333 0.85778933333333329 0.12117366666666667 -0.5052029824723917 0.85462177736693767 0.11996484548056872 +-0.72425300000000004 0.67053999999999991 0.15863733333333332 -0.72966477893777271 0.66585752370229023 0.15563761918875957 +-0.88990066666666667 0.45298833333333333 -0.046587500000000004 -0.89337034382634639 0.447270486853794 -0.042878203800597439 +-0.90578799999999993 0.4171226666666667 -0.069620399999999999 -0.90364636568419621 0.42316551543616404 -0.065986304119790604 +-0.83168433333333336 0.55413233333333334 0.02332656666666667 -0.82834740396313544 0.55957288650226511 0.026809756415478912 +-0.8527840000000001 0.5215913333333333 0 -0.84973445502635048 0.52719896939347977 -0.0035500157075229735 +-0.87006133333333324 0.48723133333333335 -0.069949533333333327 -0.87384599637596316 0.48166055149859732 -0.066304507748472158 +-0.87221566666666661 0.48784099999999997 -0.023341766666666666 -0.86923108705951235 0.49367090573163303 -0.026950957746389739 +-0.73524766666666663 0.63800966666666659 0.22731699999999999 -0.73247878998149196 0.64299905357399878 0.22366725135833215 +-0.76478933333333332 0.60974166666666674 0.20646366666666668 -0.76208480428306991 0.6148590569769995 0.20291646343801162 +-0.8001543333333333 0.58287766666666674 0.13899133333333333 -0.7960326164998518 0.58825410186115357 0.1424401106146978 +-0.79259666666666673 0.58049500000000009 0.18473399999999998 -0.78996515049352989 0.58574870889565889 0.18125537518320203 +-0.53984299999999996 0.84154899999999999 0 -0.54126728154096593 0.8408245345172658 0.00662058056941108 +-0.53466000000000002 0.84412233333333331 -0.033939766666666669 -0.5374554213924535 0.84211831054466646 -0.044479445379376113 +-0.49190600000000001 0.8669473333333334 -0.076870800000000003 -0.48798175061253019 0.86987752165419463 -0.072020194319971698 +-0.52571100000000004 0.84756133333333328 -0.069051033333333345 -0.53174600782875692 0.84415555467171544 -0.068173181494396301 +-0.38235766666666665 0.91950733333333334 -0.08777366666666668 -0.38603366980132092 0.91764343429393302 -0.094385026762516006 +-0.42032333333333333 0.90304766666666669 -0.085159600000000002 -0.41617644228351275 0.90581916016022268 -0.079302067910407864 +-0.47919499999999998 0.86999933333333335 -0.11362733333333332 -0.47529860446531208 0.87310315696685536 -0.10854544618655068 +-0.45684033333333329 0.88547600000000004 -0.081770899999999994 -0.45266532689738775 0.88841440347642819 -0.076249259147242968 +-0.36507266666666666 0.92199933333333328 -0.12654466666666667 -0.36813562611791661 0.92192917094125182 -0.12051043336718012 +-0.34321000000000002 0.93462666666666683 -0.089739633333333346 -0.3469709879048487 0.93290234221438229 -0.096459076520838058 +-0.34131833333333333 0.93953100000000001 -0.012861600000000001 -0.35091742712315899 0.93620857053337614 -0.019247644040631104 +-0.32210133333333335 0.94495300000000004 -0.051809966666666672 -0.33563562018756299 0.9405636792466775 -0.051852634872907685 +-0.52997433333333333 0.84764833333333334 -0.015967733333333334 -0.53582528751528857 0.84418786852804661 -0.015430615322529999 +-0.50072033333333332 0.86509833333333341 -0.020975933333333335 -0.49296150071514033 0.86961675129264948 -0.027489355829029644 +-0.45166433333333328 0.89181766666666673 0.0117591 -0.45453812942887611 0.89054752003018456 0.017894229890842432 +-0.46890266666666669 0.88267033333333333 -0.022866433333333335 -0.47156638030224901 0.88134786990202008 -0.029173295799523435 +-0.40431166666666662 0.90593933333333332 0.12329633333333334 -0.40021859160024531 0.90887682535716774 0.11733710097915501 +-0.42032333333333333 0.90304766666666669 0.085159600000000002 -0.41617644228351086 0.90581916016022335 0.079302067910409682 +-0.41651533333333335 0.90873766666666667 0.012210199999999999 -0.41964790472394209 0.90749867578179044 0.018487550273145244 +-0.43589300000000003 0.89842200000000005 0.047878066666666663 -0.43918072250599738 0.89674879877906088 0.054423201554313565 +-0.42284533333333335 0.84005133333333337 0.33887933333333331 -0.42581416515119525 0.84132826838267238 0.3329399969616218 +-0.44099433333333332 0.84560366666666675 0.29968466666666665 -0.44469314238938989 0.84198036091321582 0.30547844596354201 +-0.43467933333333336 0.87072233333333326 0.22858766666666663 -0.43088521647762756 0.87438176918079857 0.22314670498415323 +-0.45815366666666663 0.84954666666666678 0.26021300000000003 -0.4513584011796512 0.8529237867155689 0.26229107445607774 +-0.36507266666666666 0.92199933333333328 0.12654466666666667 -0.3681356261179175 0.9219291709412516 0.12051043336717922 +-0.38781933333333329 0.90705666666666662 0.16191933333333333 -0.39436940024219491 0.90473780623552069 0.1610039692701675 +-0.45058500000000001 0.87200033333333327 0.18965866666666664 -0.44674844745016062 0.87548910974200045 0.18421358099779367 +-0.41114166666666668 0.88992266666666664 0.195881 -0.41786869262231946 0.88738043930629251 0.19478632308939156 +-0.59409199999999995 0.55685966666666664 0.57987066666666665 -0.60032566082443639 0.55310267084542153 0.57765607108327455 +-0.6166786666666666 0.5704326666666667 0.54185133333333335 -0.61459058224575014 0.57666348420562952 0.53827283249171476 +-0.62262166666666674 0.61817566666666668 0.4790543333333333 -0.61959051746381599 0.61648325035047724 0.48585593822267054 +-0.6381163333333334 0.58255299999999999 0.50272266666666665 -0.6359748331968218 0.58859557724508138 0.49909043067144071 +-0.56820666666666664 0.71697033333333327 0.40298833333333334 -0.56540437180381287 0.72207728506901026 0.39865058727224167 +-0.58757233333333325 0.68550100000000003 0.4291213333333333 -0.58490583753810721 0.69088009372313097 0.42493512129613731 +-0.64218399999999998 0.6280673333333332 0.43866333333333335 -0.63939888485503282 0.62655283431309761 0.44564628559022512 +-0.60574300000000003 0.65252999999999994 0.45450433333333334 -0.60897952160709889 0.65451252486074285 0.44805947938148183 +-0.38087633333333332 0.85702366666666663 0.34606799999999999 -0.38398563886785148 0.85837763506900788 0.340210030358579 +-0.4037823333333333 0.83285633333333331 0.37765766666666667 -0.40688835103443466 0.83438245004359879 0.37181688618420783 +-0.46774966666666667 0.78831499999999999 0.39885033333333331 -0.46455272967201505 0.79312039629702813 0.39389186121564468 +-0.42622800000000005 0.80692333333333333 0.40806266666666663 -0.42935517525091482 0.8086226951209774 0.40222315997533387 +-0.84764833333333334 -0.015967733333333334 0.52997433333333333 -0.8464364298536603 -0.0057590455486603749 0.53245864028200174 +-0.86509833333333341 -0.020975933333333335 0.50072033333333332 -0.86901663114224359 -0.01137033516809954 0.49465221143380211 +-0.90593933333333332 0.12329633333333334 0.40431166666666662 -0.90887682535716774 0.11733710097915501 0.40021859160024531 +-0.90304766666666669 0.085159600000000002 0.42032333333333333 -0.90581916016022335 0.079302067910409682 0.41617644228351086 +-0.90873766666666667 0.012210199999999999 0.41651533333333335 -0.90749867578179044 0.018487550273145244 0.41964790472394209 +-0.89842200000000005 0.047878066666666663 0.43589300000000003 -0.89674879877906088 0.054423201554313565 0.43918072250599738 +-0.84005133333333337 0.33887933333333331 0.42284533333333335 -0.84132826838267238 0.33293999696162185 0.4258141651511953 +-0.84560366666666675 0.29968466666666665 0.44099433333333332 -0.84198036091321582 0.30547844596354201 0.44469314238938989 +-0.87072233333333326 0.22858766666666663 0.43467933333333336 -0.87438176918079857 0.22314670498415323 0.43088521647762756 +-0.84954666666666678 0.26021300000000003 0.45815366666666663 -0.8529237867155689 0.2622910744560778 0.45135840117965115 +-0.92199933333333328 0.12654466666666667 0.36507266666666666 -0.9219291709412516 0.12051043336717922 0.3681356261179175 +-0.90705666666666662 0.16191933333333333 0.38781933333333329 -0.90473780623552069 0.1610039692701675 0.39436940024219491 +-0.87200033333333327 0.18965866666666664 0.45058500000000001 -0.87548910974200045 0.18421358099779367 0.44674844745016062 +-0.88992266666666664 0.195881 0.41114166666666668 -0.88738043930629251 0.19478632308939156 0.41786869262231946 +-0.55685966666666664 0.57987066666666665 0.59409199999999995 -0.55310267084542153 0.57765607108327455 0.60032566082443639 +-0.5704326666666667 0.54185133333333335 0.6166786666666666 -0.57666348420562941 0.53827283249171476 0.61459058224575003 +-0.61817566666666668 0.4790543333333333 0.62262166666666674 -0.61648325035047735 0.48585593822267048 0.61959051746381588 +-0.58255299999999999 0.50272266666666665 0.6381163333333334 -0.58859557724508138 0.49909043067144071 0.6359748331968218 +-0.71697033333333327 0.40298833333333334 0.56820666666666664 -0.72207728506901026 0.39865058727224173 0.56540437180381276 +-0.68550100000000003 0.4291213333333333 0.58757233333333325 -0.69088009372313097 0.42493512129613731 0.58490583753810721 +-0.6280673333333332 0.43866333333333335 0.64218399999999998 -0.62655283431309761 0.44564628559022518 0.63939888485503282 +-0.65252999999999994 0.45450433333333334 0.60574300000000003 -0.65451252486074285 0.44805947938148183 0.60897952160709889 +-0.85702366666666663 0.34606799999999999 0.38087633333333332 -0.85837763506900788 0.340210030358579 0.38398563886785148 +-0.83285633333333331 0.37765766666666667 0.4037823333333333 -0.83438245004359879 0.37181688618420783 0.40688835103443466 +-0.78831499999999999 0.39885033333333331 0.46774966666666667 -0.79312039629702813 0.39389186121564468 0.46455272967201505 +-0.80692333333333333 0.40806266666666663 0.42622800000000005 -0.8086226951209774 0.40222315997533387 0.42935517525091482 +-0.85751700000000008 -0.0098685999999999999 0.51400666666666661 -0.85874886791504967 0 0.51239670359460787 +-0.86509833333333341 0.020975933333333335 0.50072033333333332 -0.86961675129264893 0.027489355829028846 0.49296150071514122 +-0.85518833333333344 0.084138333333333329 0.51093266666666659 -0.8519820384834379 0.083078175718678801 0.51693773592267567 +-0.87042766666666671 0.054918800000000011 0.48871233333333336 -0.8733385932212776 0.050141655636071814 0.48452607356091093 +-0.79621133333333338 0.16397500000000001 0.58185500000000001 -0.80029787243831885 0.16691206794473312 0.57590248909438913 +-0.81788833333333333 0.137791 0.55811399999999989 -0.82177650837133098 0.14072358469372062 0.55215961732090935 +-0.85778933333333329 0.12117366666666667 0.4989513333333333 -0.85462177736693701 0.11996484548056841 0.50520298247239281 +-0.83759833333333333 0.11136133333333335 0.53430833333333327 -0.83398268268268638 0.10989551608923845 0.54073640577352444 +-0.72445833333333332 0.15433566666666665 0.67133866666666675 -0.73253178521168572 0.16072018555629511 0.66148787260941588 +-0.79545466666666664 0.20475399999999999 0.5698266666666667 -0.79603524377618162 0.19831536249045545 0.57183818311343493 +-0.77270733333333341 0.18981166666666668 0.60520099999999999 -0.77331676655313408 0.18305698677723631 0.60701838370830619 +-0.74987199999999998 0.13007733333333335 0.64819233333333337 -0.75759326223656376 0.13635543653030713 0.63832565665371033 +-0.74907166666666669 0.17287133333333335 0.63904300000000003 -0.7496386400507854 0.16581644846858723 0.64073927206007386 +-0.51400666666666661 0.85751700000000008 0.0098685999999999999 -0.51629537352629751 0.85625815419931739 0.01615737115124348 +-0.53466000000000002 0.84412233333333331 0.033939766666666669 -0.53745542139245528 0.84211831054466535 0.044479445379375329 +-0.58780333333333334 0.8076793333333333 0.040241233333333327 -0.58895650236746133 0.80747253922186379 0.033441541855634895 +-0.55776333333333328 0.82775166666666655 0.0568081 -0.55271151938786212 0.83119822272983901 0.060162204636448981 +-0.66962900000000003 0.74196399999999996 -0.021954166666666667 -0.67028755876104318 0.74196595278651467 -0.014181448295592964 +-0.64327366666666663 0.7652566666666667 0 -0.64387049393386275 0.76509611382071685 -0.0076631362900813427 +-0.6125790000000001 0.78756366666666666 0.062679333333333337 -0.61375471435502471 0.7875326373785172 0.055655149542686619 +-0.61607900000000004 0.78706100000000001 0.020946933333333334 -0.6169806372877642 0.78686277614210776 0.013485723336902991 +-0.71838866666666668 0.65739499999999995 -0.22599133333333332 -0.71553780893610874 0.66226771662737516 -0.22227711419774049 +-0.69767499999999993 0.68696599999999997 -0.20164099999999999 -0.69650390892021441 0.68635276333030104 -0.20928972532764573 +-0.68439933333333336 0.71638666666666673 -0.13320333333333334 -0.68580719655213007 0.71683146040089973 -0.12578213918049458 +-0.67582666666666669 0.71501700000000001 -0.177069 -0.68169635280687368 0.71056893393307941 -0.17430396638921761 +-0.69637199999999988 0.7172453333333334 1.1564823173178713e-18 -0.69234621949170561 0.72155779384027363 -0.0033260342602416627 +-0.69494100000000003 0.71724500000000002 -0.044609499999999996 -0.69058513447235004 0.72166551516255584 -0.047864979588097448 +-0.66105400000000003 0.74192333333333327 -0.10926670000000001 -0.66233944891874685 0.74224522874824861 -0.10187479966346287 +-0.69085300000000005 0.71705166666666675 -0.089040933333333336 -0.68617271066798124 0.72155909310713584 -0.092301063314366424 +-0.84764833333333334 0.015967733333333334 0.52997433333333333 -0.84418786852804661 0.015430615322529994 0.53582528751528857 +-0.83115833333333333 0 0.55563600000000002 -0.83118293250477737 0.012010130877733973 0.55586930970243209 +-0.93825066666666668 0.34415833333333334 0.023011 -0.94072706638194714 0.33809798042240197 0.026876424812624835 +-0.95156166666666664 0.30630133333333331 0 -0.95188345307616529 0.30636892878051097 0.0074813927632506189 +-0.96083533333333326 0.26727899999999999 -0.068186966666666668 -0.95963829897183583 0.27377530970839897 -0.064353826152852608 +-0.96287333333333336 0.26767199999999997 -0.022745200000000004 -0.9630414023662548 0.26766477827048918 -0.030113515268850449 +-0.94270433333333337 0.26347699999999996 -0.20296100000000003 -0.94165092030341868 0.26294319089648543 -0.21012953779252252 +-0.95677066666666677 0.26647300000000002 -0.1134709 -0.95838768851164768 0.26025483249547726 -0.11730498997081033 +-0.84358833333333338 0.3543716666666667 -0.40261533333333333 -0.84497406496934158 0.34849123588877046 -0.40567559458008356 +-0.85979766666666668 0.36100666666666664 -0.36019033333333333 -0.86126810731236148 0.35519573860579262 -0.36339129681772486 +-0.89582666666666666 0.33240466666666668 -0.29379266666666665 -0.89809633511602149 0.33366106968666159 -0.28651921999531477 +-0.874386 0.36636833333333335 -0.3170716666666667 -0.8759582528742067 0.36061491813226465 -0.32039666047265142 +-0.948241 0.22408166666666665 -0.223473 -0.94705214190253806 0.22354254211107258 -0.23047987414161372 +-0.93280466666666673 0.26126333333333335 -0.24684200000000001 -0.93145059669590613 0.26058069002973705 -0.25396356017835792 +-0.90772833333333336 0.33597166666666672 -0.24991700000000003 -0.906319730754649 0.33521978385738815 -0.25731739574973655 +-0.91531566666666675 0.29738066666666668 -0.27032499999999998 -0.9137858032467604 0.29657279985040358 -0.27756094857448055 +-0.84154899999999999 0 0.53984299999999996 -0.84390703655177146 0.0091679865187050871 0.53641109392107089 +-0.97972166666666671 0.026782933333333332 0.19685366666666668 -0.978702710039696 0.026709634801937603 0.20353771338428125 +-0.97022466666666674 0.026577699999999999 0.23935300000000001 -0.97133408884613925 0.033163093219784313 0.23539391898164305 +-0.95304633333333333 -0.013060566666666667 0.30147600000000002 -0.95472755866232628 -0.0065581929231745221 0.29740927832913455 +-0.95898133333333335 0.026290733333333333 0.28108433333333332 -0.96065419082266401 0.019735355545147864 0.277045197389089 +3 2251 0 853 +3 860 3 854 +3 974 6 855 +3 857 8 856 +3 856 6 857 +3 859 10 858 +3 858 12 859 +3 854 5 860 +3 877 15 861 +3 867 18 862 +3 874 21 863 +3 1287 24 864 +3 27 865 29 +3 1270 30 866 +3 862 20 867 +3 1106 34 868 +3 878 36 869 +3 1204 39 870 +3 873 42 871 +3 1347 45 872 +3 871 44 873 +3 863 23 874 +3 876 50 875 +3 875 52 876 +3 861 17 877 +3 869 38 878 +3 914 56 879 +3 897 59 880 +3 932 62 881 +3 928 65 882 +3 918 68 883 +3 913 71 884 +3 1098 74 885 +3 908 76 886 +3 1124 79 887 +3 931 82 888 +3 898 85 889 +3 1418 88 890 +3 917 91 891 +3 1112 94 892 +3 929 96 893 +3 1136 99 894 +3 906 102 895 +3 925 105 896 +3 880 61 897 +3 889 87 898 +3 2171 110 899 +3 920 113 900 +3 1247 116 901 +3 912 119 902 +3 1293 122 903 +3 922 125 904 +3 1118 127 905 +3 895 104 906 +3 1157 130 907 +3 886 78 908 +3 927 134 909 +3 911 137 910 +3 910 139 911 +3 902 121 912 +3 884 73 913 +3 879 58 914 +3 930 143 915 +3 919 146 916 +3 891 93 917 +3 883 70 918 +3 916 148 919 +3 900 115 920 +3 2142 152 921 +3 904 126 922 +3 2339 156 923 +3 926 158 924 +3 896 107 925 +3 924 160 926 +3 909 136 927 +3 882 67 928 +3 893 98 929 +3 915 145 930 +3 888 84 931 +3 881 64 932 +3 1034 168 933 +3 1694 313 934 +3 1075 174 935 +3 1002 177 936 +3 1044 180 937 +3 994 183 938 +3 1024 186 939 +3 1011 189 940 +3 1068 192 941 +3 1009 195 942 +3 1058 198 943 +3 990 201 944 +3 1069 204 945 +3 1065 207 946 +3 1254 210 947 +3 1035 213 948 +3 1030 216 949 +3 1056 219 950 +3 1008 222 951 +3 1274 225 952 +3 1063 228 953 +3 1108 231 954 +3 1031 233 955 +3 1128 236 956 +3 238 957 240 +3 1852 241 958 +3 1021 244 959 +3 1101 62 960 +3 993 247 961 +3 1159 250 962 +3 1076 253 963 +3 1799 256 964 +3 1071 257 965 +3 1685 260 966 +3 1048 263 967 +3 1601 65 968 +3 1005 266 969 +3 1045 269 970 +3 1040 272 971 +3 1025 275 972 +3 1020 278 973 +3 855 7 974 +3 1064 282 975 +3 1060 285 976 +3 1054 288 977 +3 1862 291 978 +3 1534 84 979 +3 989 296 980 +3 1041 298 981 +3 1000 301 982 +3 2439 304 983 +3 1033 306 984 +3 2432 250 985 +3 1014 309 986 +3 1074 241 987 +3 1066 314 988 +3 980 260 989 +3 944 203 990 +3 1043 319 991 +3 1032 322 992 +3 961 249 993 +3 938 185 994 +3 1913 327 995 +3 1023 330 996 +3 1945 333 997 +3 1073 334 998 +3 1530 78 999 +3 982 303 1000 +3 1163 277 1001 +3 936 179 1002 +3 1016 341 1003 +3 1042 344 1004 +3 969 268 1005 +3 1067 348 1006 +3 1022 351 1007 +3 951 224 1008 +3 942 197 1009 +3 2304 355 1010 +3 940 191 1011 +3 173 1012 171 +3 2275 358 1013 +3 986 311 1014 +3 1661 362 1015 +3 1003 343 1016 +3 1047 364 1017 +3 1029 367 1018 +3 1050 370 1019 +3 973 280 1020 +3 959 246 1021 +3 1007 353 1022 +3 996 332 1023 +3 939 188 1024 +3 972 277 1025 +3 1062 377 1026 +3 1028 380 1027 +3 1027 382 1028 +3 1018 369 1029 +3 949 218 1030 +3 955 235 1031 +3 992 324 1032 +3 984 308 1033 +3 933 170 1034 +3 948 215 1035 +3 2055 391 1036 +3 1070 393 1037 +3 1563 132 1038 +3 1046 396 1039 +3 971 274 1040 +3 981 300 1041 +3 1004 346 1042 +3 991 321 1043 +3 937 182 1044 +3 970 271 1045 +3 1039 397 1046 +3 1017 366 1047 +3 967 265 1048 +3 1865 407 1049 +3 1019 372 1050 +3 2288 411 1051 +3 1061 412 1052 +3 1727 353 1053 +3 977 290 1054 +3 1544 104 1055 +3 950 221 1056 +3 1622 188 1057 +3 943 200 1058 +3 1528 78 1059 +3 976 287 1060 +3 1052 414 1061 +3 1026 379 1062 +3 953 230 1063 +3 975 284 1064 +3 946 209 1065 +3 988 316 1066 +3 1006 350 1067 +3 941 194 1068 +3 945 206 1069 +3 1037 395 1070 +3 965 259 1071 +3 295 1072 293 +3 998 336 1073 +3 987 313 1074 +3 935 176 1075 +3 963 255 1076 +3 2337 434 1077 +3 1949 530 1078 +3 1241 436 1079 +3 1337 438 1080 +3 2006 440 1081 +3 443 1082 444 +3 1173 290 1083 +3 1237 447 1084 +3 1598 158 1085 +3 1327 0 1086 +3 1653 230 1087 +3 1249 450 1088 +3 1567 136 1089 +3 1358 452 1090 +3 1245 454 1091 +3 1352 407 1092 +3 1231 457 1093 +3 1319 459 1094 +3 1301 461 1095 +3 1459 304 1096 +3 1273 464 1097 +3 885 75 1098 +3 1289 466 1099 +3 1440 468 1100 +3 960 243 1101 +3 1269 470 1102 +3 2229 473 1103 +3 1398 474 1104 +3 1259 476 1105 +3 868 35 1106 +3 1305 478 1107 +3 954 232 1108 +3 1284 480 1109 +3 1423 482 1110 +3 1280 484 1111 +3 892 95 1112 +3 1263 485 1113 +3 1384 329 1114 +3 1296 487 1115 +3 1450 489 1116 +3 1292 491 1117 +3 905 128 1118 +3 1265 494 1119 +3 1390 156 1120 +3 1255 497 1121 +3 1277 499 1122 +3 1410 501 1123 +3 887 81 1124 +3 1402 503 1125 +3 1370 355 1126 +3 1857 411 1127 +3 956 237 1128 +3 2103 507 1129 +3 1467 508 1130 +3 1626 194 1131 +3 1456 511 1132 +3 1540 98 1133 +3 1300 256 1134 +3 2374 512 1135 +3 894 101 1136 +3 2163 515 1137 +3 1414 516 1138 +3 1669 259 1139 +3 1403 520 1140 +3 1579 145 1141 +3 1272 522 1142 +3 2021 524 1143 +3 1385 338 1144 +3 1871 444 1145 +3 1380 527 1146 +3 1468 529 1147 +3 1782 168 1148 +3 1304 531 1149 +3 1368 533 1150 +3 1415 535 1151 +3 1279 110 1152 +3 1460 538 1153 +3 1455 250 1154 +3 1381 540 1155 +3 1262 542 1156 +3 907 132 1157 +3 1444 544 1158 +3 962 252 1159 +3 1310 547 1160 +3 1522 67 1161 +3 1342 550 1162 +3 1001 338 1163 +3 1424 551 1164 +3 2329 553 1165 +3 1420 554 1166 +3 1565 132 1167 +3 1399 556 1168 +3 1555 124 1169 +3 1394 558 1170 +3 2421 560 1171 +3 1434 561 1172 +3 1083 446 1173 +3 1288 563 1174 +3 2342 565 1175 +3 1353 568 1176 +3 1348 411 1177 +3 1334 569 1178 +3 1240 571 1179 +3 1451 572 1180 +3 1447 440 1181 +3 1395 575 1182 +3 1268 577 1183 +3 1391 565 1184 +3 1388 580 1185 +3 1378 582 1186 +3 1258 584 1187 +3 1328 586 1188 +3 1323 588 1189 +3 1312 590 1190 +3 1226 526 1191 +3 1936 236 1192 +3 1712 336 1193 +3 1421 596 1194 +3 1283 598 1195 +3 1345 600 1196 +3 1341 358 1197 +3 1324 604 1198 +3 1236 606 1199 +3 1411 608 1200 +3 1406 512 1201 +3 1359 611 1202 +3 1355 613 1203 +3 870 41 1204 +3 1377 616 1205 +3 1448 618 1206 +3 1295 619 1207 +3 1356 620 1208 +3 1248 622 1209 +3 1442 623 1210 +3 1432 625 1211 +3 1389 434 1212 +3 1264 152 1213 +3 1320 628 1214 +3 1315 630 1215 +3 1349 632 1216 +3 1244 507 1217 +3 1407 633 1218 +3 1276 515 1219 +3 1338 634 1220 +3 1333 636 1221 +3 1316 473 1222 +3 1230 639 1223 +3 1330 641 1224 +3 1404 643 1225 +3 1191 591 1226 +3 1344 645 1227 +3 1695 313 1228 +3 1469 650 1229 +3 1223 640 1230 +3 1093 458 1231 +3 652 1232 238 +3 1336 654 1233 +3 2146 656 1234 +3 1416 657 1235 +3 1199 607 1236 +3 1084 2 1237 +3 1326 659 1238 +3 1382 661 1239 +3 1179 419 1240 +3 1079 437 1241 +3 1357 663 1242 +3 1457 666 1243 +3 1217 510 1244 +3 1091 455 1245 +3 1351 668 1246 +3 901 118 1247 +3 1209 391 1248 +3 1088 451 1249 +3 1318 670 1250 +3 1372 672 1251 +3 675 1252 676 +3 1458 677 1253 +3 947 212 1254 +3 1121 498 1255 +3 1405 679 1256 +3 1396 681 1257 +3 1187 585 1258 +3 1105 477 1259 +3 1438 560 1260 +3 1350 684 1261 +3 1156 543 1262 +3 1113 327 1263 +3 1213 449 1264 +3 1119 154 1265 +3 1397 686 1266 +3 1329 688 1267 +3 1183 578 1268 +3 1102 472 1269 +3 866 32 1270 +3 1325 689 1271 +3 1142 523 1272 +3 1097 465 1273 +3 952 227 1274 +3 1462 691 1275 +3 1219 519 1276 +3 1122 500 1277 +3 1343 693 1278 +3 1152 537 1279 +3 1111 112 1280 +3 1417 695 1281 +3 1408 697 1282 +3 1195 599 1283 +3 1109 481 1284 +3 699 1285 700 +3 1383 553 1286 +3 864 26 1287 +3 1174 564 1288 +3 1099 467 1289 +3 1449 702 1290 +3 1354 704 1291 +3 1117 493 1292 +3 903 124 1293 +3 1436 707 1294 +3 1207 446 1295 +3 1115 488 1296 +3 1463 709 1297 +3 2223 725 1298 +3 1317 713 1299 +3 1134 262 1300 +3 1095 462 1301 +3 1409 715 1302 +3 1335 717 1303 +3 1149 532 1304 +3 1107 479 1305 +3 2444 691 1306 +3 1401 720 1307 +3 1425 711 1308 +3 1364 722 1309 +3 1160 548 1310 +3 2259 735 1311 +3 1190 524 1312 +3 1466 724 1313 +3 1453 726 1314 +3 1215 631 1315 +3 1222 638 1316 +3 1299 714 1317 +3 1250 671 1318 +3 1094 460 1319 +3 1214 629 1320 +3 1413 729 1321 +3 1400 731 1322 +3 1189 589 1323 +3 1198 605 1324 +3 1271 690 1325 +3 1238 660 1326 +3 1086 7 1327 +3 1188 587 1328 +3 1267 656 1329 +3 1224 642 1330 +3 1379 734 1331 +3 1465 736 1332 +3 1221 637 1333 +3 1178 570 1334 +3 1303 718 1335 +3 1233 655 1336 +3 1080 439 1337 +3 1220 635 1338 +3 1366 738 1339 +3 1412 740 1340 +3 1197 603 1341 +3 1162 360 1342 +3 1278 694 1343 +3 1227 646 1344 +3 1196 602 1345 +3 1454 743 1346 +3 872 47 1347 +3 1177 416 1348 +3 1216 506 1349 +3 1261 685 1350 +3 1246 669 1351 +3 1092 456 1352 +3 1176 409 1353 +3 1291 706 1354 +3 1203 615 1355 +3 1208 621 1356 +3 1242 665 1357 +3 1090 453 1358 +3 1202 612 1359 +3 712 1360 711 +3 649 1361 647 +3 291 1362 435 +3 2300 722 1363 +3 1309 723 1364 +3 2385 740 1365 +3 1339 739 1366 +3 1794 344 1367 +3 1150 534 1368 +3 1743 341 1369 +3 1126 505 1370 +3 748 1371 749 +3 1251 674 1372 +3 1419 750 1373 +3 1452 752 1374 +3 1393 755 1375 +3 1427 757 1376 +3 1205 617 1377 +3 1186 583 1378 +3 1331 735 1379 +3 1146 528 1380 +3 1155 541 1381 +3 1239 662 1382 +3 1286 701 1383 +3 1114 486 1384 +3 1144 333 1385 +3 1446 759 1386 +3 1392 761 1387 +3 1185 581 1388 +3 1212 627 1389 +3 1120 496 1390 +3 1184 579 1391 +3 1387 762 1392 +3 1375 756 1393 +3 1170 559 1394 +3 1182 576 1395 +3 1257 682 1396 +3 1266 687 1397 +3 1104 475 1398 +3 1168 557 1399 +3 1322 732 1400 +3 1307 721 1401 +3 1125 504 1402 +3 1140 521 1403 +3 1225 644 1404 +3 1256 680 1405 +3 1201 610 1406 +3 1218 514 1407 +3 1282 698 1408 +3 1302 716 1409 +3 1123 502 1410 +3 1200 609 1411 +3 1340 741 1412 +3 1321 730 1413 +3 1138 517 1414 +3 1151 536 1415 +3 1235 658 1416 +3 1281 696 1417 +3 890 90 1418 +3 1373 751 1419 +3 1166 555 1420 +3 1194 597 1421 +3 763 1422 764 +3 1110 483 1423 +3 1164 552 1424 +3 1308 710 1425 +3 2211 531 1426 +3 1376 758 1427 +3 2077 649 1428 +3 1654 232 1429 +3 1445 766 1430 +3 1856 253 1431 +3 1211 626 1432 +3 1514 36 1433 +3 1172 562 1434 +3 2179 598 1435 +3 1294 708 1436 +3 2406 482 1437 +3 1260 683 1438 +3 1812 263 1439 +3 1100 469 1440 +3 1503 42 1441 +3 1210 624 1442 +3 1806 269 1443 +3 1158 546 1444 +3 1430 767 1445 +3 1386 760 1446 +3 1181 574 1447 +3 1206 442 1448 +3 1290 703 1449 +3 1116 490 1450 +3 1180 573 1451 +3 1374 754 1452 +3 1314 727 1453 +3 1346 744 1454 +3 1154 539 1455 +3 1132 252 1456 +3 1243 667 1457 +3 1253 678 1458 +3 1096 463 1459 +3 1153 305 1460 +3 595 1461 594 +3 1275 692 1462 +3 1297 710 1463 +3 593 1464 592 +3 1332 737 1465 +3 1313 725 1466 +3 1130 243 1467 +3 1147 530 1468 +3 1229 651 1469 +3 1885 460 1470 +3 2119 676 1471 +3 2096 436 1472 +3 1870 439 1473 +3 2089 447 1474 +3 1881 456 1475 +3 2113 450 1476 +3 1877 453 1477 +3 2105 454 1478 +3 2083 457 1479 +3 1926 748 1480 +3 1803 461 1481 +3 1909 34 1482 +3 2157 464 1483 +3 1915 486 1484 +3 2188 466 1485 +3 1813 370 1486 +3 470 1487 27 +3 2183 701 1488 +3 1905 475 1489 +3 1663 246 1490 +3 1893 74 1491 +3 1678 280 1492 +3 2130 476 1493 +3 1907 477 1494 +3 1930 502 1495 +3 2047 39 1496 +3 2212 478 1497 +3 1593 125 1498 +3 1911 94 1499 +3 1662 246 1500 +3 2180 480 1501 +3 2285 744 1502 +3 1441 483 1503 +3 2258 735 1504 +3 2172 484 1505 +3 1897 469 1506 +3 2138 485 1507 +3 1923 127 1508 +3 2203 487 1509 +3 1919 490 1510 +3 2195 491 1511 +3 1889 463 1512 +3 2124 497 1513 +3 1433 231 1514 +3 2165 499 1515 +3 2025 591 1516 +3 1531 81 1517 +3 1972 548 1518 +3 2073 640 1519 +3 2095 237 1520 +3 2065 631 1521 +3 1161 511 1522 +3 2040 607 1523 +3 1543 101 1524 +3 2017 589 1525 +3 2365 520 1526 +3 1891 465 1527 +3 1059 419 1528 +3 1931 79 1529 +3 999 338 1530 +3 1517 58 1531 +3 2069 637 1532 +3 1638 215 1533 +3 979 529 1534 +3 1808 396 1535 +3 2036 603 1536 +3 1845 393 1537 +3 2391 535 1538 +3 1910 112 1539 +3 1133 510 1540 +3 1937 99 1541 +3 2440 538 1542 +3 1524 70 1543 +3 1055 416 1544 +3 1674 271 1545 +3 2325 540 1546 +3 1954 534 1547 +3 2276 550 1548 +3 2004 440 1549 +3 2408 551 1550 +3 2108 669 1551 +3 2011 585 1552 +3 2197 122 1553 +3 2357 556 1554 +3 1169 287 1555 +3 2050 617 1556 +3 1629 200 1557 +3 2416 561 1558 +3 1921 493 1559 +3 1964 543 1560 +3 1966 130 1561 +3 1867 568 1562 +3 1038 107 1563 +3 1948 528 1564 +3 1167 287 1565 +3 2264 569 1566 +3 1089 449 1567 +3 2022 572 1568 +3 2003 581 1569 +3 2349 575 1570 +3 1995 578 1571 +3 2341 565 1572 +3 1980 559 1573 +3 2319 582 1574 +3 1944 523 1575 +3 2253 586 1576 +3 1934 504 1577 +3 2220 590 1578 +3 1141 519 1579 +3 2026 592 1580 +3 2044 610 1581 +3 2403 596 1582 +3 1958 537 1583 +3 2282 600 1584 +3 1940 517 1585 +3 2245 604 1586 +3 2032 599 1587 +3 2383 608 1588 +3 1976 555 1589 +3 2312 813 1590 +3 1902 611 1591 +3 1984 564 1592 +3 1498 41 1593 +3 2059 626 1594 +3 2008 618 1595 +3 1968 546 1596 +3 2295 620 1597 +3 1085 446 1598 +3 2424 623 1599 +3 1989 574 1600 +3 968 262 1601 +3 2237 628 1602 +3 1960 539 1603 +3 1859 632 1604 +3 2028 595 1605 +3 2375 633 1606 +3 1952 532 1607 +3 2272 634 1608 +3 2370 679 1609 +3 2023 591 1610 +3 2283 600 1611 +3 2279 645 1612 +3 1651 227 1613 +3 2072 640 1614 +3 2273 634 1615 +3 2268 654 1616 +3 2396 695 1617 +3 2039 607 1618 +3 2254 586 1619 +3 2249 659 1620 +3 2330 553 1621 +3 1057 419 1622 +3 1904 611 1623 +3 2298 663 1624 +3 2437 677 1625 +3 1131 510 1626 +3 1869 568 1627 +3 2291 668 1628 +3 1557 124 1629 +3 2054 391 1630 +3 2238 628 1631 +3 2233 670 1632 +3 2267 717 1633 +3 2441 538 1634 +3 2393 657 1635 +3 2436 677 1636 +3 2121 678 1637 +3 1533 81 1638 +3 1740 700 1639 +3 2369 679 1640 +3 2354 686 1641 +3 209 1642 699 +3 2009 585 1643 +3 2425 623 1644 +3 2420 560 1645 +3 2292 668 1646 +3 1963 543 1647 +3 1667 255 1648 +3 1763 186 1649 +3 2016 702 1650 +3 1613 176 1651 +3 1708 183 1652 +3 1087 449 1653 +3 1429 479 1654 +3 1986 570 1655 +3 2358 556 1656 +3 1935 236 1657 +3 1864 437 1658 +3 2353 686 1659 +3 1994 578 1660 +3 1015 360 1661 +3 1500 41 1662 +3 1490 32 1663 +3 2250 659 1664 +3 1943 523 1665 +3 2097 237 1666 +3 1648 227 1667 +3 2446 709 1668 +3 1139 519 1669 +3 2409 551 1670 +3 2405 764 1671 +3 2280 645 1672 +3 1957 537 1673 +3 1545 101 1674 +3 2395 695 1675 +3 2380 715 1676 +3 2031 599 1677 +3 1492 32 1678 +3 1983 564 1679 +3 2024 572 1680 +3 2014 702 1681 +3 1858 592 1682 +3 2445 709 1683 +3 2234 670 1684 +3 966 262 1685 +3 2384 608 1686 +3 2379 715 1687 +3 2269 654 1688 +3 1951 532 1689 +3 2366 520 1690 +3 2361 720 1691 +3 2302 738 1692 +3 1971 548 1693 +3 934 529 1694 +3 1228 724 1695 +3 2431 743 1696 +3 2064 631 1697 +3 1805 461 1698 +3 1795 714 1699 +3 2118 674 1700 +3 1884 460 1701 +3 2392 535 1702 +3 2387 729 1703 +3 2362 720 1704 +3 2015 589 1705 +3 2158 464 1706 +3 2153 690 1707 +3 1652 662 1708 +3 1873 7 1709 +3 2326 540 1710 +3 2321 734 1711 +3 1193 724 1712 +3 2068 637 1713 +3 2213 478 1714 +3 2208 718 1715 +3 2086 658 1716 +3 1868 439 1717 +3 2305 355 1718 +3 2301 738 1719 +3 2388 729 1720 +3 2035 603 1721 +3 2173 484 1722 +3 2168 694 1723 +3 2433 511 1724 +3 2430 743 1725 +3 2322 734 1726 +3 1053 416 1727 +3 2139 485 1728 +3 2134 685 1729 +3 2110 116 1730 +3 1880 456 1731 +3 2007 583 1732 +3 2196 491 1733 +3 1906 477 1734 +3 2191 706 1735 +3 2102 667 1736 +3 1876 453 1737 +3 2080 651 1738 +3 1860 291 1739 +3 1639 212 1740 +3 2221 590 1741 +3 2216 723 1742 +3 1369 741 1743 +3 1953 534 1744 +3 1797 714 1745 +3 676 1746 829 +3 2117 674 1747 +3 2404 596 1748 +3 2399 750 1749 +3 2350 575 1750 +3 2345 755 1751 +3 2413 767 1752 +3 2049 617 1753 +3 2189 466 1754 +3 2184 24 1755 +3 2154 690 1756 +3 1908 34 1757 +3 1861 632 1758 +3 2286 45 1759 +3 2261 737 1760 +3 1947 528 1761 +3 2098 436 1762 +3 1649 662 1763 +3 2185 24 1764 +3 1914 486 1765 +3 2010 618 1766 +3 2000 759 1767 +3 2346 755 1768 +3 2001 581 1769 +3 2338 434 1770 +3 2333 762 1771 +3 2316 758 1772 +3 1979 559 1773 +3 2131 476 1774 +3 2128 682 1775 +3 2147 656 1776 +3 1903 475 1777 +3 2246 604 1778 +3 2241 732 1779 +3 2217 723 1780 +3 1933 504 1781 +3 1148 443 1782 +3 2076 644 1783 +3 2129 682 1784 +3 1892 74 1785 +3 2400 750 1786 +3 2043 610 1787 +3 2181 480 1788 +3 2176 698 1789 +3 2209 718 1790 +3 1929 502 1791 +3 2277 550 1792 +3 2231 713 1793 +3 1367 741 1794 +3 1699 296 1795 +3 2242 732 1796 +3 1745 828 1797 +3 1939 517 1798 +3 964 252 1799 +3 2090 447 1800 +3 1886 462 1801 +3 2085 658 1802 +3 1481 17 1803 +3 2177 698 1804 +3 1698 296 1805 +3 1443 94 1806 +3 2376 633 1807 +3 1535 90 1808 +3 2311 754 1809 +3 1975 555 1810 +3 2169 694 1811 +3 1439 483 1812 +3 1486 582 1813 +3 2315 758 1814 +3 2002 759 1815 +3 2058 626 1816 +3 2204 487 1817 +3 2199 708 1818 +3 2135 685 1819 +3 1896 469 1820 +3 2114 450 1821 +3 2109 116 1822 +3 2200 708 1823 +3 1922 127 1824 +3 2417 561 1825 +3 2412 767 1826 +3 2334 762 1827 +3 1988 574 1828 +3 2143 494 1829 +3 2140 833 1830 +3 2192 706 1831 +3 1918 490 1832 +3 813 1833 834 +3 2310 754 1834 +3 2125 497 1835 +3 2122 210 1836 +3 2230 473 1837 +3 2225 727 1838 +3 2287 45 1839 +3 1959 539 1840 +3 2106 454 1841 +3 2101 667 1842 +3 2123 210 1843 +3 1888 463 1844 +3 1537 90 1845 +3 2027 595 1846 +3 2166 499 1847 +3 2161 692 1848 +3 2265 569 1849 +3 2260 737 1850 +3 2226 727 1851 +3 958 243 1852 +3 2084 457 1853 +3 2079 651 1854 +3 2162 692 1855 +3 1431 231 1856 +3 1127 506 1857 +3 1682 295 1858 +3 1604 96 1859 +3 1739 171 1860 +3 1758 351 1861 +3 978 3 1862 +3 1879 455 1863 +3 1658 571 1864 +3 1049 409 1865 +3 2270 438 1866 +3 1562 102 1867 +3 1717 177 1868 +3 1627 197 1869 +3 1473 8 1870 +3 1145 526 1871 +3 2088 606 1872 +3 1709 183 1873 +3 2112 622 1874 +3 1898 452 1875 +3 1737 189 1876 +3 1477 10 1877 +3 2104 507 1878 +3 1863 407 1879 +3 1731 195 1880 +3 1475 12 1881 +3 2082 639 1882 +3 2235 459 1883 +3 1701 201 1884 +3 1470 5 1885 +3 1801 256 1886 +3 2438 304 1887 +3 1844 204 1888 +3 1512 15 1889 +3 2156 522 1890 +3 1527 75 1891 +3 1785 213 1892 +3 1491 18 1893 +3 2187 563 1894 +3 2422 468 1895 +3 1820 219 1896 +3 1506 21 1897 +3 1875 451 1898 +3 2150 577 1899 +3 2045 612 1900 +3 2355 474 1901 +3 1591 814 1902 +3 1777 233 1903 +3 1623 191 1904 +3 1489 29 1905 +3 1734 584 1906 +3 1494 35 1907 +3 1757 244 1908 +3 1482 20 1909 +3 1539 95 1910 +3 1499 44 1911 +3 2137 542 1912 +3 995 329 1913 +3 1765 275 1914 +3 1484 23 1915 +3 2202 619 1916 +3 2018 489 1917 +3 1832 282 1918 +3 1510 50 1919 +3 2194 840 1920 +3 1559 128 1921 +3 1824 285 1922 +3 1508 52 1923 +3 749 1924 498 +3 828 1925 748 +3 1480 17 1926 +3 2164 515 1927 +3 2381 501 1928 +3 1791 298 1929 +3 1495 38 1930 +3 1529 75 1931 +3 2363 503 1932 +3 1781 306 1933 +3 1577 56 1934 +3 1657 232 1935 +3 1192 508 1936 +3 1541 95 1937 +3 2389 516 1938 +3 1798 319 1939 +3 1585 68 1940 +3 2364 503 1941 +3 2155 522 1942 +3 1665 249 1943 +3 1575 71 1944 +3 997 329 1945 +3 2323 527 1946 +3 1761 330 1947 +3 1564 76 1948 +3 1078 508 1949 +3 2210 531 1950 +3 1689 303 1951 +3 1607 82 1952 +3 1744 341 1953 +3 1547 85 1954 +3 2390 516 1955 +3 2170 110 1956 +3 1673 268 1957 +3 1583 91 1958 +3 1840 348 1959 +3 1603 96 1960 +3 2324 527 1961 +3 2136 542 1962 +3 1647 224 1963 +3 1560 102 1964 +3 1992 544 1965 +3 1561 128 1966 +3 1990 544 1967 +3 1596 105 1968 +3 842 1969 843 +3 2218 547 1970 +3 1693 311 1971 +3 1518 61 1972 +3 2407 482 1973 +3 2401 554 1974 +3 1810 364 1975 +3 1589 113 1976 +3 2356 474 1977 +3 2347 558 1978 +3 1773 367 1979 +3 1573 119 1980 +3 2415 625 1981 +3 2186 563 1982 +3 1679 280 1983 +3 1592 125 1984 +3 2263 636 1985 +3 1655 571 1986 +3 2020 489 1987 +3 1828 377 1988 +3 1600 134 1989 +3 1967 130 1990 +3 2348 558 1991 +3 1965 841 1992 +3 2149 577 1993 +3 1660 825 1994 +3 1571 137 1995 +3 2411 757 1996 +3 2340 156 1997 +3 2331 760 1998 +3 2335 580 1999 +3 1767 379 2000 +3 1769 382 2001 +3 1815 414 2002 +3 1569 139 2003 +3 1549 573 2004 +3 2318 616 2005 +3 1081 442 2006 +3 1732 584 2007 +3 1595 160 2008 +3 1643 218 2009 +3 1766 379 2010 +3 1552 121 2011 +3 2252 0 2012 +3 2243 588 2013 +3 1681 284 2014 +3 1705 324 2015 +3 1650 230 2016 +3 1525 73 2017 +3 1917 488 2018 +3 2219 547 2019 +3 1987 573 2020 +3 1143 526 2021 +3 1568 136 2022 +3 1610 170 2023 +3 1680 284 2024 +3 1516 58 2025 +3 1580 145 2026 +3 1846 393 2027 +3 1605 143 2028 +3 2402 554 2029 +3 2178 598 2030 +3 1677 274 2031 +3 1587 146 2032 +3 2281 845 2033 +3 2274 358 2034 +3 1721 346 2035 +3 1536 93 2036 +3 2244 588 2037 +3 2087 606 2038 +3 1618 182 2039 +3 1523 70 2040 +3 2382 501 2041 +3 2373 512 2042 +3 1787 397 2043 +3 1581 148 2044 +3 1900 452 2045 +3 2293 613 2046 +3 1496 35 2047 +3 2317 616 2048 +3 1753 372 2049 +3 1556 126 2050 +3 2201 619 2051 +3 2294 613 2052 +3 2111 622 2053 +3 1630 200 2054 +3 1036 107 2055 +3 2423 468 2056 +3 2414 625 2057 +3 1816 414 2058 +3 1594 160 2059 +3 2336 580 2060 +3 2141 152 2061 +3 2236 459 2062 +3 2227 630 2063 +3 1697 316 2064 +3 1521 67 2065 +3 2271 438 2066 +3 2262 636 2067 +3 1713 336 2068 +3 1532 84 2069 +3 2228 630 2070 +3 2081 639 2071 +3 1614 176 2072 +3 1519 64 2073 +3 2256 688 2074 +3 2367 643 2075 +3 1783 168 2076 +3 1428 711 2077 +3 2091 650 2078 +3 1854 174 2079 +3 1738 171 2080 +3 2071 638 2081 +3 1882 458 2082 +3 1479 3 2083 +3 1853 174 2084 +3 1802 180 2085 +3 1716 177 2086 +3 2038 605 2087 +3 1872 2 2088 +3 1474 8 2089 +3 1800 180 2090 +3 2078 649 2091 +3 2248 689 2092 +3 2159 225 2093 +3 2327 661 2094 +3 1520 64 2095 +3 1472 6 2096 +3 1666 255 2097 +3 1762 186 2098 +3 2297 847 2099 +3 2434 666 2100 +3 1842 192 2101 +3 1736 189 2102 +3 1129 506 2103 +3 1878 455 2104 +3 1478 10 2105 +3 1841 192 2106 +3 2290 684 2107 +3 1551 118 2108 +3 1822 198 2109 +3 1730 195 2110 +3 2053 621 2111 +3 1874 451 2112 +3 1476 12 2113 +3 1821 198 2114 +3 2232 713 2115 +3 2306 672 2116 +3 1747 829 2117 +3 1700 201 2118 +3 1471 5 2119 +3 2435 666 2120 +3 1637 212 2121 +3 1836 207 2122 +3 1843 204 2123 +3 1513 15 2124 +3 1835 207 2125 +3 2368 643 2126 +3 2351 681 2127 +3 1775 216 2128 +3 1784 213 2129 +3 1493 18 2130 +3 1774 216 2131 +3 2419 707 2132 +3 2289 684 2133 +3 1729 222 2134 +3 1819 219 2135 +3 1962 541 2136 +3 1912 327 2137 +3 1507 21 2138 +3 1728 222 2139 +3 1830 228 2140 +3 2061 627 2141 +3 921 154 2142 +3 1829 228 2143 +3 2352 681 2144 +3 2255 688 2145 +3 1234 238 2146 +3 1776 233 2147 +3 29 2148 652 +3 1993 576 2149 +3 1899 472 2150 +3 2320 26 2151 +3 2247 689 2152 +3 1707 247 2153 +3 1756 244 2154 +3 1942 521 2155 +3 1890 465 2156 +3 1483 20 2157 +3 1706 247 2158 +3 2093 650 2159 +3 2443 691 2160 +3 1848 257 2161 +3 1855 253 2162 +3 1137 514 2163 +3 1927 500 2164 +3 1515 36 2165 +3 1847 257 2166 +3 693 2167 763 +3 1723 266 2168 +3 1811 263 2169 +3 1956 536 2170 +3 899 112 2171 +3 1505 42 2172 +3 1722 266 2173 +3 2394 657 2174 +3 2377 697 2175 +3 1789 272 2176 +3 1804 269 2177 +3 2030 597 2178 +3 1435 481 2179 +3 1501 44 2180 +3 1788 272 2181 +3 2328 661 2182 +3 1488 26 2183 +3 1755 278 2184 +3 1764 275 2185 +3 1982 562 2186 +3 1894 467 2187 +3 1485 23 2188 +3 1754 278 2189 +3 704 2190 703 +3 1735 827 2191 +3 1831 282 2192 +3 841 2193 840 +3 1920 493 2194 +3 1511 50 2195 +3 1733 827 2196 +3 1553 118 2197 +3 2418 707 2198 +3 1818 288 2199 +3 1823 285 2200 +3 2051 442 2201 +3 1916 488 2202 +3 1509 52 2203 +3 1817 288 2204 +3 2307 672 2205 +3 2378 697 2206 +3 2266 717 2207 +3 1715 301 2208 +3 1790 298 2209 +3 1950 530 2210 +3 1426 479 2211 +3 1497 38 2212 +3 1714 301 2213 +3 2360 731 2214 +3 2299 722 2215 +3 1742 309 2216 +3 1780 306 2217 +3 1970 843 2218 +3 2019 524 2219 +3 1578 56 2220 +3 1741 309 2221 +3 444 2222 842 +3 1298 736 2223 +3 2428 726 2224 +3 1838 314 2225 +3 1851 241 2226 +3 2063 629 2227 +3 2070 638 2228 +3 1103 62 2229 +3 1837 314 2230 +3 1793 831 2231 +3 2115 671 2232 +3 1632 203 2233 +3 1684 260 2234 +3 1883 458 2235 +3 2062 629 2236 +3 1602 65 2237 +3 1631 203 2238 +3 2386 740 2239 +3 2359 731 2240 +3 1779 322 2241 +3 1796 319 2242 +3 2013 587 2243 +3 2037 605 2244 +3 1586 68 2245 +3 1778 322 2246 +3 2152 30 2247 +3 2092 660 2248 +3 1620 185 2249 +3 1664 249 2250 +3 853 2 2251 +3 2012 587 2252 +3 1576 71 2253 +3 1619 185 2254 +3 2145 687 2255 +3 2074 642 2256 +3 240 2257 641 +3 1504 47 2258 +3 1311 736 2259 +3 1850 334 2260 +3 1760 330 2261 +3 2067 635 2262 +3 1985 570 2263 +3 1566 76 2264 +3 1849 334 2265 +3 2207 716 2266 +3 1633 655 2267 +3 1616 179 2268 +3 1688 303 2269 +3 1866 437 2270 +3 2066 635 2271 +3 1608 82 2272 +3 1615 179 2273 +3 2034 602 2274 +3 1013 360 2275 +3 1548 85 2276 +3 1792 344 2277 +3 646 2278 693 +3 1612 820 2279 +3 1672 268 2280 +3 2033 602 2281 +3 1584 91 2282 +3 1611 820 2283 +3 2429 726 2284 +3 1502 47 2285 +3 1759 351 2286 +3 1839 348 2287 +3 1051 409 2288 +3 2133 683 2289 +3 2107 669 2290 +3 1628 197 2291 +3 1646 224 2292 +3 2046 612 2293 +3 2052 621 2294 +3 1597 105 2295 +3 700 2296 847 +3 2099 665 2297 +3 1624 191 2298 +3 2215 721 2299 +3 1363 739 2300 +3 1719 343 2301 +3 1692 311 2302 +3 505 2303 533 +3 1010 61 2304 +3 1718 343 2305 +3 2116 671 2306 +3 2205 849 2307 +3 2398 88 2308 +3 2426 752 2309 +3 1834 834 2310 +3 1809 364 2311 +3 1590 113 2312 +3 2344 761 2313 +3 2410 757 2314 +3 1814 370 2315 +3 1772 367 2316 +3 2048 39 2317 +3 2005 583 2318 +3 1574 119 2319 +3 2151 30 2320 +3 1711 332 2321 +3 1726 353 2322 +3 1946 333 2323 +3 1961 541 2324 +3 1546 104 2325 +3 1710 332 2326 +3 2094 660 2327 +3 2182 701 2328 +3 1165 277 2329 +3 1621 188 2330 +3 1998 766 2331 +3 2343 761 2332 +3 1771 380 2333 +3 1827 377 2334 +3 1999 579 2335 +3 2060 627 2336 +3 1077 134 2337 +3 1770 380 2338 +3 923 154 2339 +3 1997 579 2340 +3 1572 137 2341 +3 1175 567 2342 +3 2332 760 2343 +3 2313 756 2344 +3 1751 369 2345 +3 1768 382 2346 +3 1978 557 2347 +3 1991 576 2348 +3 1570 139 2349 +3 1750 369 2350 +3 2127 680 2351 +3 2144 687 2352 +3 1659 235 2353 +3 1641 218 2354 +3 1901 472 2355 +3 1977 557 2356 +3 1554 121 2357 +3 1656 235 2358 +3 2240 730 2359 +3 2214 721 2360 +3 1691 308 2361 +3 1704 324 2362 +3 1932 79 2363 +3 1941 521 2364 +3 1526 73 2365 +3 1690 308 2366 +3 2075 642 2367 +3 2126 680 2368 +3 1640 215 2369 +3 1609 170 2370 +3 851 2371 852 +3 2397 88 2372 +3 2042 609 2373 +3 1135 514 2374 +3 1606 143 2375 +3 1807 396 2376 +3 2175 696 2377 +3 2206 716 2378 +3 1687 300 2379 +3 1676 274 2380 +3 1928 500 2381 +3 2041 609 2382 +3 1588 146 2383 +3 1686 300 2384 +3 1365 739 2385 +3 2239 730 2386 +3 1703 321 2387 +3 1720 346 2388 +3 1938 99 2389 +3 1955 536 2390 +3 1538 93 2391 +3 1702 321 2392 +3 1635 655 2393 +3 2174 696 2394 +3 1675 271 2395 +3 1617 182 2396 +3 2372 852 2397 +3 2308 751 2398 +3 1749 366 2399 +3 1786 397 2400 +3 1974 552 2401 +3 2029 597 2402 +3 1582 148 2403 +3 1748 366 2404 +3 1671 265 2405 +3 1437 481 2406 +3 1973 552 2407 +3 1550 115 2408 +3 1670 265 2409 +3 2314 756 2410 +3 1996 766 2411 +3 1826 412 2412 +3 1752 372 2413 +3 2057 624 2414 +3 1981 562 2415 +3 1558 126 2416 +3 1825 412 2417 +3 2198 122 2418 +3 2132 683 2419 +3 1645 221 2420 +3 1171 290 2421 +3 1895 467 2422 +3 2056 624 2423 +3 1599 158 2424 +3 1644 221 2425 +3 2309 751 2426 +3 2442 851 2427 +3 2224 725 2428 +3 2284 744 2429 +3 1725 350 2430 +3 1696 316 2431 +3 985 305 2432 +3 1724 350 2433 +3 2100 665 2434 +3 2120 678 2435 +3 1636 206 2436 +3 1625 194 2437 +3 1887 462 2438 +3 983 305 2439 +3 1542 98 2440 +3 1634 206 2441 +3 2427 752 2442 +3 2160 225 2443 +3 1306 710 2444 +3 1683 295 2445 +3 1668 259 2446 +3 1327 1 853 +3 1237 2 853 +3 1479 4 854 +3 1885 5 854 +3 856 1 855 +3 1327 7 855 +3 1474 1 856 +3 855 6 856 +3 1472 9 857 +3 1870 8 857 +3 1478 11 858 +3 1881 12 858 +3 1476 13 859 +3 1877 10 859 +3 1471 14 860 +3 1862 3 860 +3 1513 16 861 +3 1926 17 861 +3 1493 19 862 +3 1909 20 862 +3 1507 22 863 +3 1915 23 863 +3 2185 25 864 +3 2183 26 864 +3 1487 28 865 +3 1905 29 865 +3 2152 31 866 +3 1663 32 866 +3 1483 33 867 +3 1893 18 867 +3 1909 19 868 +3 1907 35 868 +3 1515 37 869 +3 1930 38 869 +3 2048 40 870 +3 1593 41 870 +3 1505 43 871 +3 1911 44 871 +3 2287 46 872 +3 2285 47 872 +3 1501 48 873 +3 1441 42 873 +3 1485 49 874 +3 1897 21 874 +3 1511 51 875 +3 1923 52 875 +3 1509 53 876 +3 1919 50 876 +3 1481 54 877 +3 1889 15 877 +3 1497 55 878 +3 1433 36 878 +3 1578 57 879 +3 2025 58 879 +3 60 880 59 +3 1972 61 880 +3 1103 63 881 +3 2073 64 881 +3 1602 66 882 +3 2065 67 882 +3 1586 69 883 +3 2040 70 883 +3 1576 72 884 +3 2017 73 884 +3 1893 33 885 +3 1891 75 885 +3 1566 77 886 +3 1059 78 886 +3 1932 80 887 +3 1517 81 887 +3 1608 83 888 +3 2069 84 888 +3 1548 86 889 +3 87 889 86 +3 2398 89 890 +3 1808 90 890 +3 1584 92 891 +3 2036 93 891 +3 1911 43 892 +3 1910 95 892 +3 1604 97 893 +3 1133 98 893 +3 1938 100 894 +3 1524 101 894 +3 1562 103 895 +3 1055 104 895 +3 1597 106 896 +3 2055 107 896 +3 1010 108 897 +3 59 897 108 +3 109 898 87 +3 1954 85 898 +3 2170 111 899 +3 1539 112 899 +3 1590 114 900 +3 115 900 114 +3 2110 117 901 +3 2108 118 901 +3 1574 120 902 +3 2011 121 902 +3 2198 123 903 +3 1169 124 903 +3 1593 40 904 +3 2050 126 904 +3 1923 51 905 +3 1921 128 905 +3 1546 129 906 +3 1964 102 906 +3 1967 131 907 +3 1038 132 907 +3 1530 133 908 +3 1948 76 908 +3 1077 135 909 +3 1089 136 909 +3 1572 138 910 +3 2003 139 910 +3 1570 140 911 +3 1995 137 911 +3 1554 141 912 +3 1980 119 912 +3 1526 142 913 +3 1944 71 913 +3 1517 80 914 +3 1934 56 914 +3 1606 144 915 +3 1141 145 915 +3 1588 147 916 +3 2044 148 916 +3 1538 149 917 +3 1958 91 917 +3 1524 100 918 +3 1940 68 918 +3 1582 150 919 +3 2032 146 919 +3 1550 151 920 +3 1976 113 920 +3 2141 153 921 +3 2339 154 921 +3 1558 155 922 +3 1984 125 922 +3 1390 157 923 +3 1265 154 923 +3 1599 159 924 +3 2059 160 924 +3 1038 131 925 +3 1968 105 925 +3 1595 161 926 +3 1085 158 926 +3 1568 162 927 +3 1989 134 927 +3 1522 163 928 +3 968 65 928 +3 1542 164 929 +3 1960 96 929 +3 1580 165 930 +3 2028 143 930 +3 1534 166 931 +3 1952 82 931 +3 1520 167 932 +3 960 62 932 +3 1783 169 933 +3 2370 170 933 +3 987 312 934 +3 1147 529 934 +3 1854 175 935 +3 1651 176 935 +3 1717 178 936 +3 2273 179 936 +3 1802 181 937 +3 2396 182 937 +3 1709 184 938 +3 2254 185 938 +3 1763 187 939 +3 2330 188 939 +3 1737 190 940 +3 1904 191 940 +3 1842 193 941 +3 2437 194 941 +3 1731 196 942 +3 1869 197 942 +3 1822 199 943 +3 1557 200 943 +3 1701 202 944 +3 2238 203 944 +3 1844 205 945 +3 2441 206 945 +3 1836 208 946 +3 1642 209 946 +3 2123 211 947 +3 2121 212 947 +3 1785 214 948 +3 1533 215 948 +3 1775 217 949 +3 2354 218 949 +3 1820 220 950 +3 2425 221 950 +3 1729 223 951 +3 2292 224 951 +3 2160 226 952 +3 1667 227 952 +3 1830 229 953 +3 2016 230 953 +3 1433 55 954 +3 1429 232 954 +3 1777 234 955 +3 2358 235 955 +3 1936 167 956 +3 1520 237 956 +3 1234 239 957 +3 2257 240 957 +3 1851 242 958 +3 1101 243 958 +3 1757 245 959 +3 1500 246 959 +3 932 167 960 +3 1467 243 960 +3 1707 248 961 +3 2250 249 961 +3 2432 251 962 +3 1799 252 962 +3 1856 254 963 +3 2097 255 963 +3 1300 163 964 +3 1456 252 964 +3 1848 258 965 +3 2446 259 965 +3 1684 261 966 +3 1601 262 966 +3 1812 264 967 +3 2409 265 967 +3 928 163 968 +3 1300 262 968 +3 1723 267 969 +3 2280 268 969 +3 1806 270 970 +3 1545 271 970 +3 1789 273 971 +3 2380 274 971 +3 1765 276 972 +3 1001 277 972 +3 1755 279 973 +3 1492 280 973 +3 1873 281 974 +3 2096 6 974 +3 1832 283 975 +3 2024 284 975 +3 1824 286 976 +3 1565 287 976 +3 1818 289 977 +3 2421 290 977 +3 1860 292 978 +3 2083 3 978 +3 1532 795 979 +3 1694 529 979 +3 1699 297 980 +3 2234 260 980 +3 1791 299 981 +3 2384 300 981 +3 1715 302 982 +3 2269 303 982 +3 2438 251 983 +3 2432 305 983 +3 1781 307 984 +3 2366 308 984 +3 1455 164 985 +3 1460 305 985 +3 1742 310 986 +3 2302 311 986 +3 1852 312 987 +3 934 313 987 +3 1838 315 988 +3 2431 316 988 +3 1685 317 989 +3 1805 296 989 +3 1632 318 990 +3 2118 201 990 +3 1798 320 991 +3 2392 321 991 +3 1779 323 992 +3 2362 324 992 +3 1665 325 993 +3 2158 247 993 +3 1620 326 994 +3 1652 183 994 +3 1912 328 995 +3 1945 329 995 +3 1761 331 996 +3 2326 332 996 +3 1144 276 997 +3 1114 329 997 +3 1850 335 998 +3 1193 336 998 +3 1528 337 999 +3 1163 338 999 +3 1689 339 1000 +3 2213 301 1000 +3 972 276 1001 +3 1144 338 1001 +3 1616 340 1002 +3 2086 177 1002 +3 1744 342 1003 +3 2305 343 1003 +3 1794 345 1004 +3 2388 346 1004 +3 1673 347 1005 +3 2173 266 1005 +3 1840 349 1006 +3 2433 350 1006 +3 1759 352 1007 +3 2322 353 1007 +3 1647 354 1008 +3 2139 222 1008 +3 1628 117 1009 +3 2110 195 1009 +3 1370 108 1010 +3 897 61 1010 +3 1624 356 1011 +3 2102 189 1011 +3 357 1012 173 +3 2080 171 1012 +3 2274 359 1013 +3 1661 360 1013 +3 1693 361 1014 +3 2221 309 1014 +3 86 1015 362 +3 1342 360 1015 +3 1719 363 1016 +3 1369 341 1016 +3 1810 365 1017 +3 2404 366 1017 +3 1773 368 1018 +3 2350 369 1018 +3 1814 371 1019 +3 2413 372 1019 +3 1679 373 1020 +3 2189 278 1020 +3 1663 31 1021 +3 2154 244 1021 +3 1727 374 1022 +3 1861 351 1022 +3 1711 375 1023 +3 2261 330 1023 +3 1622 376 1024 +3 2098 186 1024 +3 1165 25 1025 +3 2185 275 1025 +3 1828 378 1026 +3 2010 379 1026 +3 1771 381 1027 +3 2346 382 1027 +3 1769 383 1028 +3 2338 380 1028 +3 1751 384 1029 +3 2316 367 1029 +3 1643 385 1030 +3 2131 216 1030 +3 1659 386 1031 +3 2147 233 1031 +3 1705 387 1032 +3 2246 322 1032 +3 1691 388 1033 +3 2217 306 1033 +3 1610 389 1034 +3 1148 168 1034 +3 1640 390 1035 +3 2129 213 1035 +3 2054 392 1036 +3 1563 107 1036 +3 1846 394 1037 +3 395 1037 394 +3 907 131 1038 +3 925 107 1038 +3 1808 89 1039 +3 2400 397 1039 +3 1677 398 1040 +3 2181 272 1040 +3 1687 399 1041 +3 2209 298 1041 +3 1721 400 1042 +3 2277 344 1042 +3 1703 401 1043 +3 2242 319 1043 +3 1618 402 1044 +3 2090 180 1044 +3 1675 403 1045 +3 2177 269 1045 +3 1787 404 1046 +3 2376 396 1046 +3 1749 405 1047 +3 2311 364 1047 +3 1671 406 1048 +3 2169 263 1048 +3 1863 408 1049 +3 2288 409 1049 +3 1753 410 1050 +3 1486 370 1050 +3 1348 103 1051 +3 1353 409 1051 +3 1826 413 1052 +3 2002 414 1052 +3 1726 415 1053 +3 1544 416 1053 +3 1173 417 1054 +3 2204 288 1054 +3 895 103 1055 +3 1348 416 1055 +3 1645 418 1056 +3 2135 219 1056 +3 1621 337 1057 +3 1528 419 1057 +3 1630 420 1058 +3 2114 198 1058 +3 886 77 1059 +3 1240 419 1059 +3 1169 123 1060 +3 2200 285 1060 +3 1816 421 1061 +3 2417 412 1061 +3 1767 422 1062 +3 2334 377 1062 +3 1653 423 1063 +3 2143 228 1063 +3 1681 424 1064 +3 2192 282 1064 +3 425 1065 209 +3 2125 207 1065 +3 1697 426 1066 +3 2230 314 1066 +3 1725 46 1067 +3 2287 348 1067 +3 1626 427 1068 +3 2106 192 1068 +3 1636 211 1069 +3 2123 204 1069 +3 428 1070 395 +3 1537 393 1070 +3 1669 429 1071 +3 2166 257 1071 +3 1683 430 1072 +3 293 1072 430 +3 1713 431 1073 +3 2265 334 1073 +3 1695 432 1074 +3 2226 241 1074 +3 1614 433 1075 +3 2084 174 1075 +3 1667 226 1076 +3 2162 253 1076 +3 1389 135 1077 +3 909 134 1077 +3 1147 312 1078 +3 1130 508 1078 +3 2098 376 1079 +3 1658 437 1079 +3 2271 178 1080 +3 1717 439 1080 +3 2004 441 1081 +3 2201 442 1081 +3 1148 389 1082 +3 1145 444 1082 +3 1171 445 1083 +3 1598 446 1083 +3 2090 402 1084 +3 2088 2 1084 +3 926 161 1085 +3 1295 446 1085 +3 2252 184 1086 +3 1709 7 1086 +3 1650 448 1087 +3 1567 449 1087 +3 2114 420 1088 +3 2112 451 1088 +3 909 135 1089 +3 1264 449 1089 +3 1900 190 1090 +3 1737 453 1090 +3 2106 427 1091 +3 2104 455 1091 +3 1865 196 1092 +3 1731 456 1092 +3 2084 433 1093 +3 2082 458 1093 +3 2236 202 1094 +3 1701 460 1094 +3 1805 317 1095 +3 1801 462 1095 +3 2439 205 1096 +3 1844 463 1096 +3 2158 325 1097 +3 2156 465 1097 +3 1529 214 1098 +3 1785 74 1098 +3 2189 373 1099 +3 2187 467 1099 +3 2423 220 1100 +3 1820 469 1100 +3 958 242 1101 +3 2229 62 1101 +3 471 1102 470 +3 2150 472 1102 +3 1316 63 1103 +3 881 62 1103 +3 2356 234 1104 +3 1777 475 1104 +3 2131 385 1105 +3 1734 477 1105 +3 1496 245 1106 +3 1757 34 1106 +3 2213 339 1107 +3 2211 479 1107 +3 1657 254 1108 +3 1856 231 1108 +3 2181 398 1109 +3 2179 481 1109 +3 2407 264 1110 +3 1812 483 1110 +3 2173 347 1111 +3 2171 112 1111 +3 1541 270 1112 +3 1806 94 1112 +3 2139 354 1113 +3 2137 327 1113 +3 997 276 1114 +3 1765 486 1114 +3 2204 417 1115 +3 2202 488 1115 +3 2020 283 1116 +3 1832 490 1116 +3 2196 492 1117 +3 2194 493 1117 +3 1561 286 1118 +3 1824 127 1118 +3 2143 423 1119 +3 2142 154 1119 +3 2340 495 1120 +3 496 1120 495 +3 2125 425 1121 +3 498 1121 425 +3 2166 429 1122 +3 2164 500 1122 +3 2382 299 1123 +3 1791 502 1123 +3 1533 214 1124 +3 1529 79 1124 +3 2364 307 1125 +3 1781 504 1125 +3 2305 342 1126 +3 2303 505 1126 +3 2288 408 1127 +3 2103 506 1127 +3 2097 254 1128 +3 1657 236 1128 +3 1244 97 1129 +3 1349 506 1129 +3 1078 312 1130 +3 1852 243 1130 +3 1625 509 1131 +3 1540 510 1131 +3 2433 349 1132 +3 1159 252 1132 +3 893 97 1133 +3 1244 510 1133 +3 1801 317 1134 +3 1685 262 1134 +3 2373 513 1135 +3 2163 514 1135 +3 1545 270 1136 +3 1541 99 1136 +3 1276 144 1137 +3 1407 514 1137 +3 2390 320 1138 +3 1798 517 1138 +3 1668 518 1139 +3 1579 519 1139 +3 2366 307 1140 +3 2364 521 1140 +3 915 144 1141 +3 1276 519 1141 +3 2156 325 1142 +3 1665 523 1142 +3 2019 525 1143 +3 1871 526 1143 +3 1001 276 1144 +3 997 333 1144 +3 1082 389 1145 +3 1191 526 1145 +3 2324 331 1146 +3 1761 528 1146 +3 934 312 1147 +3 1078 530 1147 +3 1034 389 1148 +3 1082 443 1148 +3 2211 339 1149 +3 1689 532 1149 +3 2303 342 1150 +3 1744 534 1150 +3 2392 320 1151 +3 2390 536 1151 +3 2171 347 1152 +3 1673 537 1152 +3 2441 205 1153 +3 2439 305 1153 +3 1159 349 1154 +3 1840 539 1154 +3 2326 331 1155 +3 2324 541 1155 +3 2137 354 1156 +3 1647 543 1156 +3 1565 286 1157 +3 1561 130 1157 +3 1992 545 1158 +3 546 1158 545 +3 1132 349 1159 +3 1154 250 1159 +3 2219 361 1160 +3 1693 548 1160 +3 1521 549 1161 +3 1724 511 1161 +3 2277 400 1162 +3 2275 360 1162 +3 999 337 1163 +3 2329 277 1163 +3 2409 264 1164 +3 2407 552 1164 +3 1383 25 1165 +3 1025 277 1165 +3 2402 365 1166 +3 1810 555 1166 +3 1563 392 1167 +3 1555 287 1167 +3 2358 234 1168 +3 2356 557 1168 +3 903 123 1169 +3 1060 287 1169 +3 2348 368 1170 +3 1773 559 1170 +3 2420 445 1171 +3 1083 290 1171 +3 2417 421 1172 +3 2415 562 1172 +3 1207 417 1173 +3 1054 290 1173 +3 2187 373 1174 +3 1679 564 1174 +3 2341 566 1175 +3 567 1175 566 +3 1869 196 1176 +3 1865 409 1176 +3 1857 374 1177 +3 1727 416 1177 +3 2265 431 1178 +3 2263 570 1178 +3 1658 376 1179 +3 1622 419 1179 +3 2024 283 1180 +3 2020 573 1180 +3 2006 378 1181 +3 1828 574 1181 +3 2350 368 1182 +3 2348 576 1182 +3 2150 471 1183 +3 1660 578 1183 +3 2342 495 1184 +3 2340 579 1184 +3 2336 383 1185 +3 1769 581 1185 +3 1486 410 1186 +3 2318 583 1186 +3 1734 385 1187 +3 1643 585 1187 +3 2254 184 1188 +3 2252 587 1188 +3 2244 387 1189 +3 1705 589 1189 +3 2221 361 1190 +3 2219 524 1190 +3 1145 389 1191 +3 1610 591 1191 +3 1935 765 1192 +3 1949 508 1192 +3 998 335 1193 +3 1313 724 1193 +3 2404 365 1194 +3 2402 597 1194 +3 2179 398 1195 +3 1677 599 1195 +3 2283 601 1196 +3 2281 602 1196 +3 2275 400 1197 +3 1721 603 1197 +3 2246 387 1198 +3 2244 605 1198 +3 2088 402 1199 +3 1618 607 1199 +3 2384 299 1200 +3 2382 609 1200 +3 2374 404 1201 +3 1787 610 1201 +3 1904 190 1202 +3 1900 612 1202 +3 2294 614 1203 +3 615 1203 614 +3 1500 245 1204 +3 1496 39 1204 +3 2318 410 1205 +3 1753 617 1205 +3 2010 378 1206 +3 2006 442 1206 +3 2202 417 1207 +3 1173 446 1207 +3 614 1208 620 +3 2294 621 1208 +3 2112 420 1209 +3 1630 391 1209 +3 2425 220 1210 +3 2423 624 1210 +3 2415 421 1211 +3 1816 626 1211 +3 2338 383 1212 +3 2336 627 1212 +3 2142 423 1213 +3 1653 449 1213 +3 2238 202 1214 +3 2236 629 1214 +3 2228 426 1215 +3 1697 631 1215 +3 1861 374 1216 +3 1857 506 1216 +3 2104 427 1217 +3 1626 510 1217 +3 2376 404 1218 +3 2374 514 1218 +3 2164 429 1219 +3 1669 519 1219 +3 2273 178 1220 +3 2271 635 1220 +3 2263 431 1221 +3 1713 637 1221 +3 2230 426 1222 +3 2228 638 1222 +3 2082 433 1223 +3 1614 640 1223 +3 2257 239 1224 +3 2256 642 1224 +3 2368 169 1225 +3 1783 644 1225 +3 2025 57 1226 +3 2021 526 1226 +3 2280 267 1227 +3 2278 646 1227 +3 1694 795 1228 +3 1712 724 1228 +3 2093 175 1229 +3 1854 651 1229 +3 2073 63 1230 +3 2071 639 1230 +3 1883 4 1231 +3 1479 457 1231 +3 2148 653 1232 +3 2146 238 1232 +3 2269 302 1233 +3 2267 655 1233 +3 1267 239 1234 +3 957 238 1234 +3 2394 181 1235 +3 1802 658 1235 +3 2040 69 1236 +3 2038 606 1236 +3 853 1 1237 +3 1474 447 1237 +3 2250 248 1238 +3 2248 660 1238 +3 2328 187 1239 +3 1763 662 1239 +3 1059 77 1240 +3 1986 571 1240 +3 1866 9 1241 +3 1472 436 1241 +3 664 1242 663 +3 2297 665 1242 +3 2435 193 1243 +3 1842 667 1243 +3 1133 97 1244 +3 1129 507 1244 +3 1879 11 1245 +3 1478 454 1245 +3 2292 223 1246 +3 2290 669 1246 +3 1553 199 1247 +3 1822 116 1247 +3 2055 106 1248 +3 2053 622 1248 +3 1875 13 1249 +3 1476 450 1249 +3 2234 297 1250 +3 2232 671 1250 +3 2307 673 1251 +3 1747 674 1251 +3 14 1252 675 +3 1471 676 1252 +3 2437 193 1253 +3 2435 678 1253 +3 1639 208 1254 +3 1836 210 1254 +3 1924 16 1255 +3 1513 497 1255 +3 2370 169 1256 +3 2368 680 1256 +3 2352 217 1257 +3 1775 682 1257 +3 2011 120 1258 +3 2007 584 1258 +3 1907 19 1259 +3 1493 476 1259 +3 2421 289 1260 +3 2419 683 1260 +3 2290 223 1261 +3 1729 685 1261 +3 1964 129 1262 +3 1962 542 1262 +3 1913 22 1263 +3 1507 485 1263 +3 1089 135 1264 +3 2061 152 1264 +3 923 157 1265 +3 494 1265 157 +3 2354 217 1266 +3 2352 687 1266 +3 2256 239 1267 +3 1234 656 1267 +3 1995 140 1268 +3 1993 577 1268 +3 1901 28 1269 +3 1487 470 1269 +3 1492 279 1270 +3 2320 30 1270 +3 2248 248 1271 +3 1707 690 1271 +3 1944 142 1272 +3 1942 522 1272 +3 1891 33 1273 +3 1483 464 1273 +3 1651 175 1274 +3 2093 225 1274 +3 2444 258 1275 +3 1848 692 1275 +3 1141 144 1276 +3 1137 515 1276 +3 1928 37 1277 +3 1515 499 1277 +3 2278 267 1278 +3 1723 694 1278 +3 1958 149 1279 +3 1956 110 1279 +3 1910 43 1280 +3 1505 484 1280 +3 2396 181 1281 +3 2394 696 1281 +3 2378 273 1282 +3 1789 698 1282 +3 2032 150 1283 +3 2030 598 1283 +3 1437 48 1284 +3 1501 480 1284 +3 1642 208 1285 +3 1639 700 1285 +3 2330 187 1286 +3 2328 701 1286 +3 2320 279 1287 +3 1755 24 1287 +3 1984 155 1288 +3 1982 563 1288 +3 1895 49 1289 +3 1485 466 1289 +3 2016 229 1290 +3 703 1290 229 +3 705 1291 704 +3 1735 706 1291 +3 1921 51 1292 +3 1511 491 1292 +3 1557 199 1293 +3 1553 122 1293 +3 2419 289 1294 +3 1818 708 1294 +3 1085 161 1295 +3 2051 619 1295 +3 1917 53 1296 +3 1509 487 1296 +3 2446 258 1297 +3 2444 710 1297 +3 1313 335 1298 +3 1332 736 1298 +3 2232 297 1299 +3 1699 714 1299 +3 968 163 1300 +3 964 256 1300 +3 1887 54 1301 +3 1481 461 1301 +3 2380 273 1302 +3 2378 716 1302 +3 2267 302 1303 +3 1715 718 1303 +3 1952 166 1304 +3 1950 531 1304 +3 1429 55 1305 +3 1497 478 1305 +3 2443 719 1306 +3 1425 710 1306 +3 2362 323 1307 +3 2360 721 1307 +3 1360 430 1308 +3 1463 710 1308 +3 2300 310 1309 +3 1742 723 1309 +3 1972 60 1310 +3 1970 547 1310 +3 2258 784 1311 +3 2223 736 1311 +3 2021 57 1312 +3 1578 590 1312 +3 1193 335 1313 +3 1298 725 1313 +3 2429 315 1314 +3 1838 727 1314 +3 2065 66 1315 +3 2063 630 1315 +3 2071 63 1316 +3 1103 473 1316 +3 1797 728 1317 +3 1793 713 1317 +3 2116 318 1318 +3 1632 670 1318 +3 1885 4 1319 +3 1883 459 1319 +3 2063 66 1320 +3 1602 628 1320 +3 2388 345 1321 +3 2386 730 1321 +3 2360 323 1322 +3 1779 732 1322 +3 2017 72 1323 +3 2013 588 1323 +3 2038 69 1324 +3 1586 604 1324 +3 2154 31 1325 +3 2152 689 1325 +3 2094 326 1326 +3 1620 659 1326 +3 855 1 1327 +3 853 0 1327 +3 2013 72 1328 +3 1576 586 1328 +3 2147 386 1329 +3 2145 688 1329 +3 2075 733 1330 +3 641 1330 733 +3 2322 352 1331 +3 1504 735 1331 +3 1298 335 1332 +3 1850 737 1332 +3 2069 83 1333 +3 2067 636 1333 +3 1986 77 1334 +3 1566 569 1334 +3 2209 399 1335 +3 2207 717 1335 +3 1635 340 1336 +3 1616 654 1336 +3 1870 9 1337 +3 1866 438 1337 +3 2067 83 1338 +3 1608 634 1338 +3 2302 310 1339 +3 2300 739 1339 +3 2386 345 1340 +3 1794 741 1340 +3 2036 92 1341 +3 2034 358 1341 +3 1015 86 1342 +3 1548 550 1342 +3 2169 406 1343 +3 2167 693 1343 +3 742 1344 646 +3 1612 645 1344 +3 2034 92 1345 +3 1584 600 1345 +3 2431 315 1346 +3 2429 744 1346 +3 1504 352 1347 +3 1759 45 1347 +3 1055 103 1348 +3 1051 411 1348 +3 1129 97 1349 +3 1604 632 1349 +3 2135 418 1350 +3 2133 684 1350 +3 2108 117 1351 +3 1628 668 1351 +3 1881 11 1352 +3 1879 407 1352 +3 1051 103 1353 +3 1562 568 1353 +3 2192 424 1354 +3 2190 704 1354 +3 745 1355 615 +3 2046 613 1355 +3 2053 106 1356 +3 1597 620 1356 +3 2100 356 1357 +3 1624 663 1357 +3 1877 13 1358 +3 1875 452 1358 +3 2046 745 1359 +3 1591 611 1359 +3 430 1360 712 +3 1308 711 1360 +3 2078 357 1361 +3 647 1361 357 +3 1862 14 1362 +3 435 1362 14 +3 2299 746 1363 +3 2385 739 1363 +3 2217 388 1364 +3 2215 722 1364 +3 1412 363 1365 +3 1366 739 1365 +3 1365 363 1366 +3 1719 738 1366 +3 1792 747 1367 +3 1743 741 1367 +3 1954 109 1368 +3 533 1368 109 +3 1016 363 1369 +3 1412 741 1369 +3 108 1370 505 +3 1010 355 1370 +3 1926 16 1371 +3 1924 749 1371 +3 2118 318 1372 +3 2116 672 1372 +3 2400 89 1373 +3 2398 751 1373 +3 2427 753 1374 +3 1834 754 1374 +3 2346 381 1375 +3 2344 756 1375 +3 2411 371 1376 +3 1814 758 1376 +3 2050 40 1377 +3 2048 616 1377 +3 2007 120 1378 +3 1574 582 1378 +3 2259 375 1379 +3 1711 734 1379 +3 1948 133 1380 +3 1946 527 1380 +3 1962 129 1381 +3 1546 540 1381 +3 1652 326 1382 +3 2094 661 1382 +3 2183 25 1383 +3 1165 553 1383 +3 1915 22 1384 +3 1913 329 1384 +3 1946 133 1385 +3 1530 338 1385 +3 2002 413 1386 +3 1998 760 1386 +3 2344 381 1387 +3 1771 762 1387 +3 2003 138 1388 +3 1999 580 1388 +3 2061 135 1389 +3 1077 434 1389 +3 157 1390 496 +3 923 156 1390 +3 1999 138 1391 +3 1572 565 1391 +3 2334 422 1392 +3 2332 761 1392 +3 2314 384 1393 +3 1751 755 1393 +3 1980 141 1394 +3 1978 558 1394 +3 1993 140 1395 +3 1570 575 1395 +3 2129 390 1396 +3 2127 681 1396 +3 2145 386 1397 +3 1659 686 1397 +3 1905 28 1398 +3 1901 474 1398 +3 1978 141 1399 +3 1554 556 1399 +3 2242 401 1400 +3 2240 731 1400 +3 2215 388 1401 +3 1691 720 1401 +3 1934 80 1402 +3 1932 503 1402 +3 1942 142 1403 +3 1526 520 1403 +3 733 1404 644 +3 2075 643 1404 +3 2127 390 1405 +3 1640 679 1405 +3 2044 147 1406 +3 2042 512 1406 +3 1137 144 1407 +3 1606 633 1407 +3 2177 403 1408 +3 2175 697 1408 +3 2207 399 1409 +3 1687 715 1409 +3 1930 37 1410 +3 1928 501 1410 +3 2042 147 1411 +3 1588 608 1411 +3 1369 363 1412 +3 1365 740 1412 +3 2240 401 1413 +3 1703 729 1413 +3 1940 100 1414 +3 1938 516 1414 +3 1956 149 1415 +3 1538 535 1415 +3 2086 340 1416 +3 1635 657 1416 +3 2175 403 1417 +3 1675 695 1417 +3 1537 428 1418 +3 2372 88 1418 +3 2309 405 1419 +3 1749 750 1419 +3 1976 151 1420 +3 1974 554 1420 +3 2030 150 1421 +3 1582 596 1421 +3 2167 406 1422 +3 1671 764 1422 +3 1441 48 1423 +3 1437 482 1423 +3 1974 151 1424 +3 1550 551 1424 +3 1306 719 1425 +3 2077 711 1425 +3 2210 765 1426 +3 1654 479 1426 +3 2316 384 1427 +3 2314 757 1427 +3 648 1428 649 +3 711 1428 648 +3 954 55 1429 +3 1305 479 1429 +3 1998 413 1430 +3 1826 767 1430 +3 1855 768 1431 +3 1514 231 1431 +3 2059 159 1432 +3 2057 625 1432 +3 878 55 1433 +3 954 231 1433 +3 1982 155 1434 +3 1558 561 1434 +3 2178 769 1435 +3 2406 481 1435 +3 2200 123 1436 +3 2198 707 1436 +3 1423 48 1437 +3 1284 481 1437 +3 2133 418 1438 +3 1645 560 1438 +3 1811 770 1439 +3 1503 483 1439 +3 1897 49 1440 +3 1895 468 1440 +3 873 48 1441 +3 1423 483 1441 +3 2057 159 1442 +3 1599 623 1442 +3 1804 771 1443 +3 1499 94 1443 +3 1968 131 1444 +3 1967 544 1444 +3 2413 371 1445 +3 2411 766 1445 +3 2332 422 1446 +3 1767 759 1446 +3 1989 162 1447 +3 1549 440 1447 +3 2051 161 1448 +3 1595 618 1448 +3 2190 424 1449 +3 1681 702 1449 +3 1919 53 1450 +3 1917 489 1450 +3 1549 162 1451 +3 1568 572 1451 +3 2311 405 1452 +3 2309 752 1452 +3 2226 432 1453 +3 2224 726 1453 +3 2285 46 1454 +3 1725 743 1454 +3 1960 164 1455 +3 985 250 1455 +3 964 163 1456 +3 1522 511 1456 +3 2102 356 1457 +3 2100 666 1457 +3 2121 211 1458 +3 1636 677 1458 +3 1889 54 1459 +3 1887 304 1459 +3 985 164 1460 +3 1542 538 1460 +3 2028 165 1461 +3 594 1461 165 +3 2162 226 1462 +3 2160 691 1462 +3 1308 430 1463 +3 1683 709 1463 +3 165 1464 593 +3 1580 592 1464 +3 2261 375 1465 +3 2259 736 1465 +3 2224 432 1466 +3 1695 724 1466 +3 960 167 1467 +3 1936 508 1467 +3 1950 166 1468 +3 1534 529 1468 +3 2080 357 1469 +3 2078 650 1469 +3 1884 772 1470 +3 2119 5 1470 +3 1252 14 1471 +3 860 5 1471 +3 1241 9 1472 +3 857 6 1472 +3 1868 773 1473 +3 2089 8 1473 +3 1237 1 1474 +3 856 8 1474 +3 1880 774 1475 +3 2113 12 1475 +3 1249 13 1476 +3 859 12 1476 +3 1876 775 1477 +3 2105 10 1477 +3 1245 11 1478 +3 858 10 1478 +3 1231 4 1479 +3 854 3 1479 +3 1925 776 1480 +3 1803 17 1480 +3 1301 54 1481 +3 877 17 1481 +3 1908 777 1482 +3 2157 20 1482 +3 1273 33 1483 +3 867 20 1483 +3 1914 778 1484 +3 2188 23 1484 +3 1289 49 1485 +3 874 23 1485 +3 1050 410 1486 +3 1186 582 1486 +3 1269 28 1487 +3 865 27 1487 +3 2182 779 1488 +3 2151 26 1488 +3 1903 653 1489 +3 2148 29 1489 +3 1662 780 1490 +3 1678 32 1490 +3 1892 781 1491 +3 2130 18 1491 +3 973 279 1492 +3 1270 32 1492 +3 1259 19 1493 +3 862 18 1493 +3 1906 782 1494 +3 2047 35 1494 +3 1929 783 1495 +3 2212 38 1495 +3 1204 245 1496 +3 1106 35 1496 +3 1305 55 1497 +3 878 38 1497 +3 1592 780 1498 +3 1662 41 1498 +3 1443 771 1499 +3 2180 44 1499 +3 959 245 1500 +3 1204 41 1500 +3 1284 48 1501 +3 873 44 1501 +3 2284 784 1502 +3 2258 47 1502 +3 1439 770 1503 +3 2172 42 1503 +3 1331 352 1504 +3 1347 47 1504 +3 1280 43 1505 +3 871 42 1505 +3 1896 785 1506 +3 2138 21 1506 +3 1263 22 1507 +3 863 21 1507 +3 1922 786 1508 +3 2203 52 1508 +3 1296 53 1509 +3 876 52 1509 +3 1918 787 1510 +3 2195 50 1510 +3 1292 51 1511 +3 875 50 1511 +3 1888 788 1512 +3 2124 15 1512 +3 1255 16 1513 +3 861 15 1513 +3 1431 768 1514 +3 2165 36 1514 +3 1277 37 1515 +3 869 36 1515 +3 2023 789 1516 +3 1531 58 1516 +3 887 80 1517 +3 914 58 1517 +3 1971 790 1518 +3 2304 61 1518 +3 2072 791 1519 +3 2095 64 1519 +3 956 167 1520 +3 932 64 1520 +3 2064 549 1521 +3 1161 67 1521 +3 1456 163 1522 +3 928 67 1522 +3 2039 792 1523 +3 1543 70 1523 +3 894 100 1524 +3 918 70 1524 +3 2015 793 1525 +3 2365 73 1525 +3 1403 142 1526 +3 913 73 1526 +3 1890 794 1527 +3 1931 75 1527 +3 1057 337 1528 +3 999 78 1528 +3 1124 214 1529 +3 1098 75 1529 +3 1385 133 1530 +3 908 78 1530 +3 1516 789 1531 +3 1638 81 1531 +3 2068 795 1532 +3 979 84 1532 +3 948 214 1533 +3 1124 81 1533 +3 1468 166 1534 +3 931 84 1534 +3 1807 796 1535 +3 1845 90 1535 +3 2035 797 1536 +3 2391 93 1536 +3 1070 428 1537 +3 1418 90 1537 +3 1415 149 1538 +3 917 93 1538 +3 899 111 1539 +3 1937 95 1539 +3 1131 509 1540 +3 2440 98 1540 +3 1136 270 1541 +3 1112 95 1541 +3 1460 164 1542 +3 929 98 1542 +3 1523 792 1543 +3 1674 101 1543 +3 1053 415 1544 +3 2325 104 1544 +3 970 270 1545 +3 1136 101 1545 +3 1381 129 1546 +3 906 104 1546 +3 1953 747 1547 +3 2276 85 1547 +3 1342 86 1548 +3 889 85 1548 +3 1447 162 1549 +3 1451 573 1549 +3 1424 151 1550 +3 920 115 1550 +3 2107 798 1551 +3 2197 118 1551 +3 2009 799 1552 +3 2357 121 1552 +3 1293 199 1553 +3 1247 118 1553 +3 1399 141 1554 +3 912 121 1554 +3 1167 392 1555 +3 1629 124 1555 +3 2049 800 1556 +3 2416 126 1556 +3 943 199 1557 +3 1293 124 1557 +3 1434 155 1558 +3 922 126 1558 +3 1920 801 1559 +3 1966 128 1559 +3 1963 802 1560 +3 1867 102 1560 +3 1157 286 1561 +3 1118 128 1561 +3 1353 103 1562 +3 895 102 1562 +3 1036 392 1563 +3 1167 132 1563 +3 1947 803 1564 +3 2264 76 1564 +3 976 286 1565 +3 1157 132 1565 +3 1334 77 1566 +3 886 76 1566 +3 1087 448 1567 +3 2022 136 1567 +3 1451 162 1568 +3 927 136 1568 +3 2001 804 1569 +3 2349 139 1569 +3 1395 140 1570 +3 911 139 1570 +3 1994 566 1571 +3 2341 137 1571 +3 1391 138 1572 +3 910 137 1572 +3 1979 805 1573 +3 2319 119 1573 +3 1378 120 1574 +3 902 119 1574 +3 1943 806 1575 +3 2253 71 1575 +3 1328 72 1576 +3 884 71 1576 +3 1933 807 1577 +3 2220 56 1577 +3 1312 57 1578 +3 879 56 1578 +3 1139 518 1579 +3 2026 145 1579 +3 1464 165 1580 +3 930 145 1580 +3 2043 808 1581 +3 2403 148 1581 +3 1421 150 1582 +3 919 148 1582 +3 1957 809 1583 +3 2282 91 1583 +3 1345 92 1584 +3 891 91 1584 +3 1939 810 1585 +3 2245 68 1585 +3 1324 69 1586 +3 883 68 1586 +3 2031 811 1587 +3 2383 146 1587 +3 1411 147 1588 +3 916 146 1588 +3 1975 812 1589 +3 2312 113 1589 +3 114 1590 813 +3 900 113 1590 +3 1359 745 1591 +3 814 1591 745 +3 1983 780 1592 +3 1498 125 1592 +3 870 40 1593 +3 904 125 1593 +3 2058 815 1594 +3 2008 160 1594 +3 1448 161 1595 +3 926 160 1595 +3 816 1596 546 +3 2295 105 1596 +3 1356 106 1597 +3 896 105 1597 +3 1083 445 1598 +3 2424 158 1598 +3 1442 159 1599 +3 924 158 1599 +3 1988 817 1600 +3 2337 134 1600 +3 966 261 1601 +3 2237 65 1601 +3 1320 66 1602 +3 882 65 1602 +3 1959 818 1603 +3 1859 96 1603 +3 1349 97 1604 +3 893 96 1604 +3 2027 796 1605 +3 2375 143 1605 +3 1407 144 1606 +3 915 143 1606 +3 1951 819 1607 +3 2272 82 1607 +3 1338 83 1608 +3 888 82 1608 +3 2369 789 1609 +3 2023 170 1609 +3 1191 389 1610 +3 1034 170 1610 +3 2282 809 1611 +3 2279 820 1611 +3 1344 742 1612 +3 820 1612 742 +3 1648 791 1613 +3 2072 176 1613 +3 1223 433 1614 +3 1075 176 1614 +3 2272 819 1615 +3 2268 179 1615 +3 1336 340 1616 +3 1002 179 1616 +3 2395 792 1617 +3 2039 182 1617 +3 1199 402 1618 +3 1044 182 1618 +3 2253 806 1619 +3 2249 185 1619 +3 1326 326 1620 +3 994 185 1620 +3 2329 337 1621 +3 1057 188 1621 +3 1179 376 1622 +3 1024 188 1622 +3 1902 821 1623 +3 2298 191 1623 +3 1357 356 1624 +3 1011 191 1624 +3 2436 509 1625 +3 1131 194 1625 +3 1217 427 1626 +3 1068 194 1626 +3 1867 802 1627 +3 2291 197 1627 +3 1351 117 1628 +3 1009 197 1628 +3 1555 392 1629 +3 2054 200 1629 +3 1209 420 1630 +3 1058 200 1630 +3 2237 261 1631 +3 2233 203 1631 +3 1318 318 1632 +3 990 203 1632 +3 2266 822 1633 +3 2393 655 1633 +3 2440 509 1634 +3 2436 206 1634 +3 1416 340 1635 +3 1336 655 1635 +3 1458 211 1636 +3 1069 206 1636 +3 2120 823 1637 +3 1740 212 1637 +3 1531 789 1638 +3 2369 215 1638 +3 1285 208 1639 +3 1254 212 1639 +3 1405 390 1640 +3 1035 215 1640 +3 2353 799 1641 +3 2009 218 1641 +3 946 208 1642 +3 1285 699 1642 +3 1187 385 1643 +3 1030 218 1643 +3 2424 445 1644 +3 2420 221 1644 +3 1438 418 1645 +3 1056 221 1645 +3 2291 802 1646 +3 1963 224 1646 +3 1156 354 1647 +3 1008 224 1647 +3 1666 791 1648 +3 1613 227 1648 +3 1762 281 1649 +3 1708 662 1649 +3 2014 448 1650 +3 1087 230 1650 +3 935 175 1651 +3 1274 227 1651 +3 994 326 1652 +3 1382 662 1652 +3 1213 423 1653 +3 1063 230 1653 +3 1426 765 1654 +3 1935 232 1654 +3 1985 824 1655 +3 1864 571 1655 +3 2357 799 1656 +3 2353 235 1656 +3 1128 254 1657 +3 1108 232 1657 +3 1079 376 1658 +3 1179 571 1658 +3 1397 386 1659 +3 1031 235 1659 +3 1183 471 1660 +3 825 1660 471 +3 1013 359 1661 +3 362 1661 359 +3 1498 780 1662 +3 1490 246 1662 +3 866 31 1663 +3 1021 246 1663 +3 2249 806 1664 +3 1943 249 1664 +3 1142 325 1665 +3 993 249 1665 +3 2095 791 1666 +3 1648 255 1666 +3 952 226 1667 +3 1076 255 1667 +3 2445 518 1668 +3 1139 259 1668 +3 1219 429 1669 +3 1071 259 1669 +3 2408 826 1670 +3 2405 265 1670 +3 1422 406 1671 +3 1048 265 1671 +3 2279 809 1672 +3 1957 268 1672 +3 1152 347 1673 +3 1005 268 1673 +3 1543 792 1674 +3 2395 271 1674 +3 1417 403 1675 +3 1045 271 1675 +3 2379 811 1676 +3 2031 274 1676 +3 1195 398 1677 +3 1040 274 1677 +3 1490 780 1678 +3 1983 280 1678 +3 1174 373 1679 +3 1020 280 1679 +3 2022 448 1680 +3 2014 284 1680 +3 1449 424 1681 +3 1064 284 1681 +3 2026 518 1682 +3 2445 295 1682 +3 1463 430 1683 +3 1072 295 1683 +3 2233 261 1684 +3 966 260 1684 +3 1134 317 1685 +3 989 260 1685 +3 2383 811 1686 +3 2379 300 1686 +3 1409 399 1687 +3 1041 300 1687 +3 2268 819 1688 +3 1951 303 1688 +3 1149 339 1689 +3 1000 303 1689 +3 2365 793 1690 +3 2361 308 1690 +3 1401 388 1691 +3 1033 308 1691 +3 2301 790 1692 +3 1971 311 1692 +3 1160 361 1693 +3 1014 311 1693 +3 979 795 1694 +3 1228 313 1694 +3 1466 432 1695 +3 1074 313 1695 +3 2430 549 1696 +3 2064 316 1696 +3 1215 426 1697 +3 1066 316 1697 +3 1803 776 1698 +3 1795 296 1698 +3 1299 297 1699 +3 980 296 1699 +3 2117 772 1700 +3 1884 201 1700 +3 1094 202 1701 +3 944 201 1701 +3 2391 797 1702 +3 2387 321 1702 +3 1413 401 1703 +3 1043 321 1703 +3 2361 793 1704 +3 2015 324 1704 +3 1189 387 1705 +3 1032 324 1705 +3 2157 777 1706 +3 2153 247 1706 +3 1271 248 1707 +3 961 247 1707 +3 1649 281 1708 +3 1873 183 1708 +3 1086 184 1709 +3 938 183 1709 +3 2325 415 1710 +3 2321 332 1710 +3 1379 375 1711 +3 1023 332 1711 +3 1228 795 1712 +3 2068 336 1712 +3 1221 431 1713 +3 1073 336 1713 +3 2212 783 1714 +3 2208 301 1714 +3 1303 302 1715 +3 982 301 1715 +3 2085 773 1716 +3 1868 177 1716 +3 1080 178 1717 +3 936 177 1717 +3 2304 790 1718 +3 2301 343 1718 +3 1366 363 1719 +3 1016 343 1719 +3 2387 797 1720 +3 2035 346 1720 +3 1197 400 1721 +3 1042 346 1721 +3 2172 770 1722 +3 2168 266 1722 +3 1278 267 1723 +3 969 266 1723 +3 1161 549 1724 +3 2430 350 1724 +3 1454 46 1725 +3 1067 350 1725 +3 2321 415 1726 +3 1053 353 1726 +3 1177 374 1727 +3 1022 353 1727 +3 2138 785 1728 +3 2134 222 1728 +3 1261 223 1729 +3 951 222 1729 +3 2109 774 1730 +3 1880 195 1730 +3 1092 196 1731 +3 942 195 1731 +3 2005 782 1732 +3 1906 584 1732 +3 2195 787 1733 +3 2191 827 1733 +3 1105 385 1734 +3 1187 584 1734 +3 1291 705 1735 +3 827 1735 705 +3 2101 775 1736 +3 1876 189 1736 +3 1090 190 1737 +3 940 189 1737 +3 2079 292 1738 +3 1860 171 1738 +3 172 1739 291 +3 171 1739 172 +3 1637 823 1740 +3 2296 700 1740 +3 2220 807 1741 +3 2216 309 1741 +3 1309 310 1742 +3 986 309 1742 +3 1367 747 1743 +3 1953 341 1743 +3 1150 342 1744 +3 1003 341 1744 +3 1795 776 1745 +3 1925 828 1745 +3 2119 772 1746 +3 2117 829 1746 +3 1251 673 1747 +3 829 1747 673 +3 2403 808 1748 +3 2399 366 1748 +3 1419 405 1749 +3 1047 366 1749 +3 2349 804 1750 +3 2345 369 1750 +3 1393 384 1751 +3 1029 369 1751 +3 2412 800 1752 +3 2049 372 1752 +3 1205 410 1753 +3 1050 372 1753 +3 2188 778 1754 +3 2184 278 1754 +3 1287 279 1755 +3 973 278 1755 +3 2153 777 1756 +3 1908 244 1756 +3 1106 245 1757 +3 959 244 1757 +3 1859 818 1758 +3 2286 351 1758 +3 1347 352 1759 +3 1007 351 1759 +3 2260 803 1760 +3 1947 330 1760 +3 1146 331 1761 +3 996 330 1761 +3 2096 281 1762 +3 1649 186 1762 +3 1239 187 1763 +3 939 186 1763 +3 2184 778 1764 +3 1914 275 1764 +3 1114 276 1765 +3 972 275 1765 +3 2008 815 1766 +3 2000 379 1766 +3 1446 422 1767 +3 1062 379 1767 +3 2345 804 1768 +3 2001 382 1768 +3 1185 383 1769 +3 1028 382 1769 +3 2337 817 1770 +3 2333 380 1770 +3 1387 381 1771 +3 1027 380 1771 +3 2315 805 1772 +3 1979 367 1772 +3 1170 368 1773 +3 1018 367 1773 +3 2130 781 1774 +3 2128 216 1774 +3 1257 217 1775 +3 949 216 1775 +3 2146 653 1776 +3 1903 233 1776 +3 1104 234 1777 +3 955 233 1777 +3 2245 810 1778 +3 2241 322 1778 +3 1322 323 1779 +3 992 322 1779 +3 2216 807 1780 +3 1933 306 1780 +3 1125 307 1781 +3 984 306 1781 +3 830 1782 443 +3 2076 168 1782 +3 1225 169 1783 +3 933 168 1783 +3 2128 781 1784 +3 1892 213 1784 +3 1098 214 1785 +3 948 213 1785 +3 2399 808 1786 +3 2043 397 1786 +3 1201 404 1787 +3 1046 397 1787 +3 2180 771 1788 +3 2176 272 1788 +3 1282 273 1789 +3 971 272 1789 +3 2208 783 1790 +3 1929 298 1790 +3 1123 299 1791 +3 981 298 1791 +3 2276 747 1792 +3 1367 344 1792 +3 1317 728 1793 +3 831 1793 728 +3 1340 345 1794 +3 1004 344 1794 +3 1698 776 1795 +3 1745 714 1795 +3 2241 810 1796 +3 1939 319 1796 +3 728 1797 828 +3 1317 714 1797 +3 1138 320 1798 +3 991 319 1798 +3 962 251 1799 +3 1886 256 1799 +3 2089 773 1800 +3 2085 180 1800 +3 1095 317 1801 +3 1134 256 1801 +3 1235 181 1802 +3 937 180 1802 +3 1480 776 1803 +3 1698 461 1803 +3 2176 771 1804 +3 1443 269 1804 +3 989 317 1805 +3 1095 461 1805 +3 1112 270 1806 +3 970 269 1806 +3 2375 796 1807 +3 1535 396 1807 +3 890 89 1808 +3 1039 396 1808 +3 2310 812 1809 +3 1975 364 1809 +3 1166 365 1810 +3 1017 364 1810 +3 2168 770 1811 +3 1439 263 1811 +3 1110 264 1812 +3 967 263 1812 +3 2319 805 1813 +3 2315 370 1813 +3 1376 371 1814 +3 1019 370 1814 +3 2000 815 1815 +3 2058 414 1815 +3 1211 421 1816 +3 1061 414 1816 +3 2203 786 1817 +3 2199 288 1817 +3 1294 289 1818 +3 977 288 1818 +3 2134 785 1819 +3 1896 219 1819 +3 1100 220 1820 +3 950 219 1820 +3 2113 774 1821 +3 2109 198 1821 +3 1247 199 1822 +3 943 198 1822 +3 2199 786 1823 +3 1922 285 1823 +3 1118 286 1824 +3 976 285 1824 +3 2416 800 1825 +3 2412 412 1825 +3 1430 413 1826 +3 1052 412 1826 +3 2333 817 1827 +3 1988 377 1827 +3 1181 378 1828 +3 1026 377 1828 +3 832 1829 494 +3 2140 228 1829 +3 229 1830 833 +3 953 228 1830 +3 2191 787 1831 +3 1918 282 1831 +3 1116 283 1832 +3 975 282 1832 +3 2312 812 1833 +3 2310 834 1833 +3 1374 753 1834 +3 834 1834 753 +3 2124 788 1835 +3 2122 207 1835 +3 1254 208 1836 +3 946 207 1836 +3 2229 242 1837 +3 2225 314 1837 +3 1314 315 1838 +3 988 314 1838 +3 2286 818 1839 +3 1959 348 1839 +3 1154 349 1840 +3 1006 348 1840 +3 2105 775 1841 +3 2101 192 1841 +3 1243 193 1842 +3 941 192 1842 +3 2122 788 1843 +3 1888 204 1843 +3 1096 205 1844 +3 945 204 1844 +3 1535 796 1845 +3 2027 393 1845 +3 394 1846 595 +3 1037 393 1846 +3 2165 768 1847 +3 2161 257 1847 +3 1275 258 1848 +3 965 257 1848 +3 2264 803 1849 +3 2260 334 1849 +3 1332 335 1850 +3 998 334 1850 +3 2225 242 1851 +3 958 241 1851 +3 1130 312 1852 +3 987 241 1852 +3 2083 292 1853 +3 2079 174 1853 +3 1229 175 1854 +3 935 174 1854 +3 2161 768 1855 +3 1431 253 1855 +3 1108 254 1856 +3 963 253 1856 +3 1216 374 1857 +3 1177 411 1857 +3 294 1858 295 +3 592 1858 294 +3 1603 818 1859 +3 1758 632 1859 +3 1738 292 1860 +3 978 291 1860 +3 1022 374 1861 +3 1216 632 1861 +3 860 14 1862 +3 1362 291 1862 +3 1878 408 1863 +3 1049 407 1863 +3 1655 824 1864 +3 2270 437 1864 +3 1176 196 1865 +3 1092 407 1865 +3 1337 9 1866 +3 1241 437 1866 +3 1560 802 1867 +3 1627 568 1867 +3 1716 773 1868 +3 1473 439 1868 +3 942 196 1869 +3 1176 568 1869 +3 857 9 1870 +3 1337 439 1870 +3 1143 525 1871 +3 2222 444 1871 +3 2087 835 1872 +3 2251 2 1872 +3 1708 281 1873 +3 974 7 1873 +3 2111 836 1874 +3 1898 451 1874 +3 1358 13 1875 +3 1249 451 1875 +3 1736 775 1876 +3 1477 453 1876 +3 859 13 1877 +3 1358 453 1877 +3 2103 408 1878 +3 1863 455 1878 +3 1352 11 1879 +3 1245 455 1879 +3 1730 774 1880 +3 1475 456 1880 +3 858 11 1881 +3 1352 456 1881 +3 2081 837 1882 +3 2235 458 1882 +3 1319 4 1883 +3 1231 458 1883 +3 1700 772 1884 +3 1470 460 1884 +3 854 4 1885 +3 1319 460 1885 +3 1799 251 1886 +3 2438 462 1886 +3 1459 54 1887 +3 1301 462 1887 +3 1843 788 1888 +3 1512 463 1888 +3 877 54 1889 +3 1459 463 1889 +3 2155 794 1890 +3 1527 465 1890 +3 885 33 1891 +3 1273 465 1891 +3 1784 781 1892 +3 1491 74 1892 +3 867 33 1893 +3 885 74 1893 +3 2186 838 1894 +3 2422 467 1894 +3 1440 49 1895 +3 1289 467 1895 +3 1819 785 1896 +3 1506 469 1896 +3 874 49 1897 +3 1440 469 1897 +3 1874 836 1898 +3 2045 452 1898 +3 2149 839 1899 +3 2355 472 1899 +3 1202 190 1900 +3 1090 452 1900 +3 1398 28 1901 +3 1269 472 1901 +3 821 1902 814 +3 1623 611 1902 +3 1776 653 1903 +3 1489 475 1903 +3 940 190 1904 +3 1202 611 1904 +3 865 28 1905 +3 1398 475 1905 +3 1732 782 1906 +3 1494 477 1906 +3 868 19 1907 +3 1259 477 1907 +3 1756 777 1908 +3 1482 34 1908 +3 862 19 1909 +3 868 34 1909 +3 892 43 1910 +3 1280 112 1910 +3 871 43 1911 +3 892 94 1911 +3 2136 328 1912 +3 995 327 1912 +3 1384 22 1913 +3 1263 327 1913 +3 1764 778 1914 +3 1484 486 1914 +3 863 22 1915 +3 1384 486 1915 +3 2201 441 1916 +3 2018 488 1916 +3 1450 53 1917 +3 1296 488 1917 +3 1831 787 1918 +3 1510 490 1918 +3 876 53 1919 +3 1450 490 1919 +3 2193 801 1920 +3 1559 493 1920 +3 905 51 1921 +3 1292 493 1921 +3 1823 786 1922 +3 1508 127 1922 +3 875 51 1923 +3 905 127 1923 +3 1371 16 1924 +3 1255 498 1924 +3 1745 776 1925 +3 1480 748 1925 +3 861 16 1926 +3 1371 748 1926 +3 2163 513 1927 +3 2381 500 1927 +3 1410 37 1928 +3 1277 500 1928 +3 1790 783 1929 +3 1495 502 1929 +3 869 37 1930 +3 1410 502 1930 +3 1527 794 1931 +3 2363 79 1931 +3 1402 80 1932 +3 887 79 1932 +3 1780 807 1933 +3 1577 504 1933 +3 914 80 1934 +3 1402 504 1934 +3 1654 765 1935 +3 1192 236 1935 +3 1467 167 1936 +3 956 236 1936 +3 1539 111 1937 +3 2389 99 1937 +3 1414 100 1938 +3 894 99 1938 +3 1796 810 1939 +3 1585 517 1939 +3 918 100 1940 +3 1414 517 1940 +3 2363 794 1941 +3 2155 521 1941 +3 1272 142 1942 +3 1403 521 1942 +3 1664 806 1943 +3 1575 523 1943 +3 913 142 1944 +3 1272 523 1944 +3 995 328 1945 +3 2323 333 1945 +3 1380 133 1946 +3 1385 333 1946 +3 1760 803 1947 +3 1564 528 1947 +3 908 133 1948 +3 1380 528 1948 +3 1192 765 1949 +3 2210 530 1949 +3 1304 166 1950 +3 1468 530 1950 +3 1688 819 1951 +3 1607 532 1951 +3 931 166 1952 +3 1304 532 1952 +3 1743 747 1953 +3 1547 534 1953 +3 898 109 1954 +3 1368 534 1954 +3 2389 111 1955 +3 2170 536 1955 +3 1279 149 1956 +3 1415 536 1956 +3 1672 809 1957 +3 1583 537 1957 +3 917 149 1958 +3 1279 537 1958 +3 1839 818 1959 +3 1603 539 1959 +3 929 164 1960 +3 1455 539 1960 +3 2323 328 1961 +3 2136 541 1961 +3 1262 129 1962 +3 1381 541 1962 +3 1646 802 1963 +3 1560 543 1963 +3 906 129 1964 +3 1262 543 1964 +3 1990 801 1965 +3 2193 841 1965 +3 1559 801 1966 +3 1990 130 1966 +3 1444 131 1967 +3 907 130 1967 +3 925 131 1968 +3 1444 546 1968 +3 2222 525 1969 +3 2218 843 1969 +3 1310 60 1970 +3 843 1970 60 +3 1692 790 1971 +3 1518 548 1971 +3 880 60 1972 +3 1310 548 1972 +3 2406 769 1973 +3 2401 552 1973 +3 1420 151 1974 +3 1424 552 1974 +3 1809 812 1975 +3 1589 555 1975 +3 920 151 1976 +3 1420 555 1976 +3 2355 839 1977 +3 2347 557 1977 +3 1394 141 1978 +3 1399 557 1978 +3 1772 805 1979 +3 1573 559 1979 +3 912 141 1980 +3 1394 559 1980 +3 2414 838 1981 +3 2186 562 1981 +3 1288 155 1982 +3 1434 562 1982 +3 1678 780 1983 +3 1592 564 1983 +3 922 155 1984 +3 1288 564 1984 +3 2262 824 1985 +3 1655 570 1985 +3 1240 77 1986 +3 1334 570 1986 +3 2018 441 1987 +3 2004 573 1987 +3 1827 817 1988 +3 1600 574 1988 +3 927 162 1989 +3 1447 574 1989 +3 1966 801 1990 +3 1965 544 1990 +3 2347 839 1991 +3 2149 576 1991 +3 545 1992 841 +3 1158 544 1992 +3 1268 140 1993 +3 1395 576 1993 +3 566 1994 825 +3 1571 578 1994 +3 911 140 1995 +3 1268 578 1995 +3 2410 844 1996 +3 2331 766 1996 +3 2339 153 1997 +3 2335 579 1997 +3 1386 413 1998 +3 1430 766 1998 +3 1388 138 1999 +3 1391 579 1999 +3 1766 815 2000 +3 1815 759 2000 +3 1768 804 2001 +3 1569 581 2001 +3 1052 413 2002 +3 1386 759 2002 +3 910 138 2003 +3 1388 581 2003 +3 1987 441 2004 +3 1081 440 2004 +3 2317 782 2005 +3 1732 583 2005 +3 1206 378 2006 +3 1181 440 2006 +3 1258 120 2007 +3 1378 583 2007 +3 1594 815 2008 +3 1766 618 2008 +3 1641 799 2009 +3 1552 585 2009 +3 1026 378 2010 +3 1206 618 2010 +3 902 120 2011 +3 1258 585 2011 +3 2251 835 2012 +3 2243 587 2012 +3 1323 72 2013 +3 1328 587 2013 +3 1680 448 2014 +3 1650 702 2014 +3 1704 793 2015 +3 1525 589 2015 +3 953 229 2016 +3 1290 702 2016 +3 884 72 2017 +3 1323 589 2017 +3 1916 441 2018 +3 1987 489 2018 +3 2218 525 2019 +3 1143 524 2019 +3 1180 283 2020 +3 1116 489 2020 +3 1226 57 2021 +3 1312 524 2021 +3 1567 448 2022 +3 1680 572 2022 +3 1609 789 2023 +3 1516 591 2023 +3 975 283 2024 +3 1180 572 2024 +3 879 57 2025 +3 1226 591 2025 +3 1579 518 2026 +3 1682 592 2026 +3 1845 796 2027 +3 1605 595 2027 +3 930 165 2028 +3 1461 595 2028 +3 2401 769 2029 +3 2178 597 2029 +3 1283 150 2030 +3 1421 597 2030 +3 1676 811 2031 +3 1587 599 2031 +3 919 150 2032 +3 1283 599 2032 +3 359 2033 845 +3 2274 602 2033 +3 1341 92 2034 +3 1345 602 2034 +3 1720 797 2035 +3 1536 603 2035 +3 891 92 2036 +3 1341 603 2036 +3 2243 835 2037 +3 2087 605 2037 +3 1236 69 2038 +3 1324 605 2038 +3 1617 792 2039 +3 1523 607 2039 +3 883 69 2040 +3 1236 607 2040 +3 2381 513 2041 +3 2373 609 2041 +3 1406 147 2042 +3 1411 609 2042 +3 1786 808 2043 +3 1581 610 2043 +3 916 147 2044 +3 1406 610 2044 +3 1898 836 2045 +3 2293 612 2045 +3 1355 745 2046 +3 1359 612 2046 +3 1494 782 2047 +3 2317 39 2047 +3 1377 40 2048 +3 870 39 2048 +3 1752 800 2049 +3 1556 617 2049 +3 904 40 2050 +3 1377 617 2050 +3 1295 161 2051 +3 1448 442 2051 +3 2293 836 2052 +3 2111 621 2052 +3 1248 106 2053 +3 1356 621 2053 +3 1629 392 2054 +3 1036 391 2054 +3 896 106 2055 +3 1248 391 2055 +3 2422 838 2056 +3 2414 624 2056 +3 1432 159 2057 +3 1442 624 2057 +3 1815 815 2058 +3 1594 626 2058 +3 924 159 2059 +3 1432 626 2059 +3 2335 153 2060 +3 2141 627 2060 +3 1264 135 2061 +3 1389 627 2061 +3 2235 837 2062 +3 2227 629 2062 +3 1315 66 2063 +3 1320 629 2063 +3 1696 549 2064 +3 1521 631 2064 +3 882 66 2065 +3 1315 631 2065 +3 2270 824 2066 +3 2262 635 2066 +3 1333 83 2067 +3 1338 635 2067 +3 1712 795 2068 +3 1532 637 2068 +3 888 83 2069 +3 1333 637 2069 +3 2227 837 2070 +3 2081 638 2070 +3 1230 63 2071 +3 1316 638 2071 +3 1613 791 2072 +3 1519 640 2072 +3 881 63 2073 +3 1230 640 2073 +3 2255 846 2074 +3 2367 642 2074 +3 1404 733 2075 +3 1330 642 2075 +3 1782 830 2076 +3 644 2076 830 +3 1425 719 2077 +3 2091 649 2077 +3 1469 357 2078 +3 1361 649 2078 +3 1853 292 2079 +3 1738 651 2079 +3 1012 357 2080 +3 1469 651 2080 +3 2070 837 2081 +3 1882 639 2081 +3 1093 433 2082 +3 1223 639 2082 +3 978 292 2083 +3 1853 457 2083 +3 1075 433 2084 +3 1093 457 2084 +3 1800 773 2085 +3 1716 658 2085 +3 1002 340 2086 +3 1416 658 2086 +3 2037 835 2087 +3 1872 606 2087 +3 1084 402 2088 +3 1199 606 2088 +3 1473 773 2089 +3 1800 447 2089 +3 1044 402 2090 +3 1084 447 2090 +3 2077 719 2091 +3 2159 650 2091 +3 2247 779 2092 +3 2327 660 2092 +3 1274 175 2093 +3 1229 650 2093 +3 1382 326 2094 +3 1326 660 2094 +3 1519 791 2095 +3 1666 237 2095 +3 974 281 2096 +3 1762 436 2096 +3 963 254 2097 +3 1128 237 2097 +3 1024 376 2098 +3 1079 436 2098 +3 2296 823 2099 +3 2434 665 2099 +3 1457 356 2100 +3 1357 665 2100 +3 1841 775 2101 +3 1736 667 2101 +3 1011 356 2102 +3 1457 667 2102 +3 1127 408 2103 +3 1878 507 2103 +3 1091 427 2104 +3 1217 507 2104 +3 1477 775 2105 +3 1841 454 2105 +3 1068 427 2106 +3 1091 454 2106 +3 2289 798 2107 +3 1551 669 2107 +3 901 117 2108 +3 1351 669 2108 +3 1821 774 2109 +3 1730 116 2109 +3 1009 117 2110 +3 901 116 2110 +3 2052 836 2111 +3 1874 622 2111 +3 1088 420 2112 +3 1209 622 2112 +3 1475 774 2113 +3 1821 450 2113 +3 1058 420 2114 +3 1088 450 2114 +3 2231 848 2115 +3 2306 671 2115 +3 1372 318 2116 +3 1318 671 2116 +3 1746 772 2117 +3 1700 674 2117 +3 990 318 2118 +3 1372 674 2118 +3 1470 772 2119 +3 1746 676 2119 +3 2434 823 2120 +3 1637 678 2120 +3 947 211 2121 +3 1458 678 2121 +3 1835 788 2122 +3 1843 210 2122 +3 1069 211 2123 +3 947 210 2123 +3 1512 788 2124 +3 1835 497 2124 +3 1065 425 2125 +3 1121 497 2125 +3 2367 846 2126 +3 2351 680 2126 +3 1396 390 2127 +3 1405 680 2127 +3 1774 781 2128 +3 1784 682 2128 +3 1035 390 2129 +3 1396 682 2129 +3 1491 781 2130 +3 1774 476 2130 +3 1030 385 2131 +3 1105 476 2131 +3 2418 798 2132 +3 2289 683 2132 +3 1350 418 2133 +3 1438 683 2133 +3 1728 785 2134 +3 1819 685 2134 +3 1056 418 2135 +3 1350 685 2135 +3 1961 328 2136 +3 1912 542 2136 +3 1113 354 2137 +3 1156 542 2137 +3 1506 785 2138 +3 1728 485 2138 +3 1008 354 2139 +3 1113 485 2139 +3 1829 832 2140 +3 833 2140 832 +3 2060 153 2141 +3 921 152 2141 +3 1119 423 2142 +3 1213 152 2142 +3 1063 423 2143 +3 1119 494 2143 +3 2351 846 2144 +3 2255 687 2144 +3 1329 386 2145 +3 1397 687 2145 +3 1232 653 2146 +3 1776 656 2146 +3 1031 386 2147 +3 1329 656 2147 +3 1489 653 2148 +3 1232 652 2148 +3 1991 839 2149 +3 1899 577 2149 +3 1102 471 2150 +3 1183 577 2150 +3 1488 779 2151 +3 2247 30 2151 +3 1325 31 2152 +3 866 30 2152 +3 1706 777 2153 +3 1756 690 2153 +3 1021 31 2154 +3 1325 690 2154 +3 1941 794 2155 +3 1890 522 2155 +3 1097 325 2156 +3 1142 522 2156 +3 1482 777 2157 +3 1706 464 2157 +3 993 325 2158 +3 1097 464 2158 +3 2091 719 2159 +3 2443 225 2159 +3 1462 226 2160 +3 952 225 2160 +3 1847 768 2161 +3 1855 692 2161 +3 1076 226 2162 +3 1462 692 2162 +3 1135 513 2163 +3 1927 515 2163 +3 1122 429 2164 +3 1219 515 2164 +3 1514 768 2165 +3 1847 499 2165 +3 1071 429 2166 +3 1122 499 2166 +3 1343 406 2167 +3 1422 763 2167 +3 1722 770 2168 +3 1811 694 2168 +3 1048 406 2169 +3 1343 694 2169 +3 1955 111 2170 +3 899 110 2170 +3 1111 347 2171 +3 1152 110 2171 +3 1503 770 2172 +3 1722 484 2172 +3 1005 347 2173 +3 1111 484 2173 +3 2393 822 2174 +3 2377 696 2174 +3 1408 403 2175 +3 1417 696 2175 +3 1788 771 2176 +3 1804 698 2176 +3 1045 403 2177 +3 1408 698 2177 +3 2029 769 2178 +3 1435 598 2178 +3 1109 398 2179 +3 1195 598 2179 +3 1499 771 2180 +3 1788 480 2180 +3 1040 398 2181 +3 1109 480 2181 +3 2327 779 2182 +3 1488 701 2182 +3 864 25 2183 +3 1383 701 2183 +3 1754 778 2184 +3 1764 24 2184 +3 1025 25 2185 +3 864 24 2185 +3 1981 838 2186 +3 1894 563 2186 +3 1099 373 2187 +3 1174 563 2187 +3 1484 778 2188 +3 1754 466 2188 +3 1020 373 2189 +3 1099 466 2189 +3 1354 424 2190 +3 1449 703 2190 +3 1733 787 2191 +3 1831 706 2191 +3 1064 424 2192 +3 1354 706 2192 +3 1965 801 2193 +3 1920 840 2193 +3 1117 492 2194 +3 840 2194 492 +3 1510 787 2195 +3 1733 491 2195 +3 492 2196 827 +3 1117 491 2196 +3 1551 798 2197 +3 2418 122 2197 +3 1436 123 2198 +3 903 122 2198 +3 1817 786 2199 +3 1823 708 2199 +3 1060 123 2200 +3 1436 708 2200 +3 1081 441 2201 +3 1916 619 2201 +3 1115 417 2202 +3 1207 619 2202 +3 1508 786 2203 +3 1817 487 2203 +3 1054 417 2204 +3 1115 487 2204 +3 2306 848 2205 +3 849 2205 848 +3 2377 822 2206 +3 2266 716 2206 +3 1335 399 2207 +3 1409 716 2207 +3 1714 783 2208 +3 1790 718 2208 +3 1041 399 2209 +3 1335 718 2209 +3 1949 765 2210 +3 1426 531 2210 +3 1107 339 2211 +3 1149 531 2211 +3 1495 783 2212 +3 1714 478 2212 +3 1000 339 2213 +3 1107 478 2213 +3 2359 746 2214 +3 2299 721 2214 +3 1364 388 2215 +3 1401 721 2215 +3 1741 807 2216 +3 1780 723 2216 +3 1033 388 2217 +3 1364 723 2217 +3 1969 525 2218 +3 2019 547 2218 +3 1190 361 2219 +3 1160 547 2219 +3 1577 807 2220 +3 1741 590 2220 +3 1014 361 2221 +3 1190 590 2221 +3 1871 525 2222 +3 1969 842 2222 +3 1311 784 2223 +3 2428 725 2223 +3 1453 432 2224 +3 1466 725 2224 +3 1837 242 2225 +3 1851 727 2225 +3 1074 432 2226 +3 1453 727 2226 +3 2062 837 2227 +3 2070 630 2227 +3 1222 426 2228 +3 1215 630 2228 +3 1101 242 2229 +3 1837 473 2229 +3 1066 426 2230 +3 1222 473 2230 +3 848 2231 831 +3 2115 713 2231 +3 1250 297 2232 +3 1299 713 2232 +3 1631 261 2233 +3 1684 670 2233 +3 980 297 2234 +3 1250 670 2234 +3 1882 837 2235 +3 2062 459 2235 +3 1214 202 2236 +3 1094 459 2236 +3 1601 261 2237 +3 1631 628 2237 +3 944 202 2238 +3 1214 628 2238 +3 2385 746 2239 +3 2359 730 2239 +3 1400 401 2240 +3 1413 730 2240 +3 1778 810 2241 +3 1796 732 2241 +3 1043 401 2242 +3 1400 732 2242 +3 2012 835 2243 +3 2037 588 2243 +3 1198 387 2244 +3 1189 588 2244 +3 1585 810 2245 +3 1778 604 2245 +3 1032 387 2246 +3 1198 604 2246 +3 2151 779 2247 +3 2092 689 2247 +3 1238 248 2248 +3 1271 689 2248 +3 1619 806 2249 +3 1664 659 2249 +3 961 248 2250 +3 1238 659 2250 +3 1872 835 2251 +3 2012 0 2251 +3 1188 184 2252 +3 1086 0 2252 +3 1575 806 2253 +3 1619 586 2253 +3 938 184 2254 +3 1188 586 2254 +3 2144 846 2255 +3 2074 688 2255 +3 1224 239 2256 +3 1267 688 2256 +3 957 239 2257 +3 1224 641 2257 +3 1502 784 2258 +3 1311 735 2258 +3 1465 375 2259 +3 1379 735 2259 +3 1849 803 2260 +3 1760 737 2260 +3 1023 375 2261 +3 1465 737 2261 +3 2066 824 2262 +3 1985 636 2262 +3 1178 431 2263 +3 1221 636 2263 +3 1564 803 2264 +3 1849 569 2264 +3 1073 431 2265 +3 1178 569 2265 +3 2206 822 2266 +3 1633 717 2266 +3 1233 302 2267 +3 1303 717 2267 +3 1615 819 2268 +3 1688 654 2268 +3 982 302 2269 +3 1233 654 2269 +3 1864 824 2270 +3 2066 438 2270 +3 1220 178 2271 +3 1080 438 2271 +3 1607 819 2272 +3 1615 634 2272 +3 936 178 2273 +3 1220 634 2273 +3 2033 359 2274 +3 1013 358 2274 +3 1162 400 2275 +3 1197 358 2275 +3 1547 747 2276 +3 1792 550 2276 +3 1042 400 2277 +3 1162 550 2277 +3 1227 267 2278 +3 1278 693 2278 +3 1611 809 2279 +3 1672 645 2279 +3 969 267 2280 +3 1227 645 2280 +3 1196 601 2281 +3 845 2281 601 +3 1583 809 2282 +3 1611 600 2282 +3 601 2283 820 +3 1196 600 2283 +3 2428 784 2284 +3 1502 744 2284 +3 872 46 2285 +3 1454 744 2285 +3 1758 818 2286 +3 1839 45 2286 +3 1067 46 2287 +3 872 45 2287 +3 1049 408 2288 +3 1127 411 2288 +3 2132 798 2289 +3 2107 684 2289 +3 1246 223 2290 +3 1261 684 2290 +3 1627 802 2291 +3 1646 668 2291 +3 951 223 2292 +3 1246 668 2292 +3 2045 836 2293 +3 2052 613 2293 +3 1208 614 2294 +3 1203 613 2294 +3 1596 816 2295 +3 620 2295 816 +3 1740 823 2296 +3 2099 847 2296 +3 1242 664 2297 +3 847 2297 664 +3 1623 821 2298 +3 663 2298 821 +3 2214 746 2299 +3 1363 722 2299 +3 1339 310 2300 +3 1309 722 2300 +3 1718 790 2301 +3 1692 738 2301 +3 986 310 2302 +3 1339 738 2302 +3 1126 342 2303 +3 1150 533 2303 +3 1518 790 2304 +3 1718 355 2304 +3 1003 342 2305 +3 1126 355 2305 +3 2115 848 2306 +3 2205 672 2306 +3 673 2307 849 +3 1251 672 2307 +3 2397 850 2308 +3 2426 751 2308 +3 1452 405 2309 +3 1419 751 2309 +3 1833 812 2310 +3 1809 754 2310 +3 1047 405 2311 +3 1452 754 2311 +3 1589 812 2312 +3 1833 813 2312 +3 2343 844 2313 +3 2410 756 2313 +3 1427 384 2314 +3 1393 756 2314 +3 1813 805 2315 +3 1772 758 2315 +3 1029 384 2316 +3 1427 758 2316 +3 2047 782 2317 +3 2005 616 2317 +3 1186 410 2318 +3 1205 616 2318 +3 1573 805 2319 +3 1813 582 2319 +3 1270 279 2320 +3 1287 26 2320 +3 1710 415 2321 +3 1726 734 2321 +3 1007 352 2322 +3 1331 734 2322 +3 1945 328 2323 +3 1961 527 2323 +3 1155 331 2324 +3 1146 527 2324 +3 1544 415 2325 +3 1710 540 2325 +3 996 331 2326 +3 1155 540 2326 +3 2092 779 2327 +3 2182 661 2327 +3 1286 187 2328 +3 1239 661 2328 +3 1163 337 2329 +3 1621 553 2329 +3 939 187 2330 +3 1286 553 2330 +3 1996 844 2331 +3 2343 760 2331 +3 1392 422 2332 +3 1446 760 2332 +3 1770 817 2333 +3 1827 762 2333 +3 1062 422 2334 +3 1392 762 2334 +3 1997 153 2335 +3 2060 580 2335 +3 1212 383 2336 +3 1185 580 2336 +3 1600 817 2337 +3 1770 434 2337 +3 1028 383 2338 +3 1212 434 2338 +3 921 153 2339 +3 1997 156 2339 +3 1184 495 2340 +3 1120 156 2340 +3 1571 566 2341 +3 1175 565 2341 +3 495 2342 567 +3 1184 565 2342 +3 2331 844 2343 +3 2313 761 2343 +3 1375 381 2344 +3 1387 761 2344 +3 1750 804 2345 +3 1768 755 2345 +3 1027 381 2346 +3 1375 755 2346 +3 1977 839 2347 +3 1991 558 2347 +3 1182 368 2348 +3 1170 558 2348 +3 1569 804 2349 +3 1750 575 2349 +3 1018 368 2350 +3 1182 575 2350 +3 2126 846 2351 +3 2144 681 2351 +3 1266 217 2352 +3 1257 681 2352 +3 1656 799 2353 +3 1641 686 2353 +3 949 217 2354 +3 1266 686 2354 +3 1899 839 2355 +3 1977 474 2355 +3 1168 234 2356 +3 1104 474 2356 +3 1552 799 2357 +3 1656 556 2357 +3 955 234 2358 +3 1168 556 2358 +3 2239 746 2359 +3 2214 731 2359 +3 1307 323 2360 +3 1322 731 2360 +3 1690 793 2361 +3 1704 720 2361 +3 992 323 2362 +3 1307 720 2362 +3 1931 794 2363 +3 1941 503 2363 +3 1140 307 2364 +3 1125 503 2364 +3 1525 793 2365 +3 1690 520 2365 +3 984 307 2366 +3 1140 520 2366 +3 2074 846 2367 +3 2126 643 2367 +3 1256 169 2368 +3 1225 643 2368 +3 1638 789 2369 +3 1609 679 2369 +3 933 169 2370 +3 1256 679 2370 +3 2442 850 2371 +3 2397 852 2371 +3 1418 428 2372 +3 852 2372 428 +3 2041 513 2373 +3 1135 512 2373 +3 1218 404 2374 +3 1201 512 2374 +3 1605 796 2375 +3 1807 633 2375 +3 1046 404 2376 +3 1218 633 2376 +3 2174 822 2377 +3 2206 697 2377 +3 1302 273 2378 +3 1282 697 2378 +3 1686 811 2379 +3 1676 715 2379 +3 971 273 2380 +3 1302 715 2380 +3 1927 513 2381 +3 2041 501 2381 +3 1200 299 2382 +3 1123 501 2382 +3 1587 811 2383 +3 1686 608 2383 +3 981 299 2384 +3 1200 608 2384 +3 1363 746 2385 +3 2239 740 2385 +3 1321 345 2386 +3 1340 740 2386 +3 1702 797 2387 +3 1720 729 2387 +3 1004 345 2388 +3 1321 729 2388 +3 1937 111 2389 +3 1955 516 2389 +3 1151 320 2390 +3 1138 516 2390 +3 1536 797 2391 +3 1702 535 2391 +3 991 320 2392 +3 1151 535 2392 +3 1633 822 2393 +3 2174 657 2393 +3 1281 181 2394 +3 1235 657 2394 +3 1674 792 2395 +3 1617 695 2395 +3 937 181 2396 +3 1281 695 2396 +3 2371 850 2397 +3 2308 88 2397 +3 1373 89 2398 +3 890 88 2398 +3 1748 808 2399 +3 1786 750 2399 +3 1039 89 2400 +3 1373 750 2400 +3 1973 769 2401 +3 2029 554 2401 +3 1194 365 2402 +3 1166 554 2402 +3 1581 808 2403 +3 1748 596 2403 +3 1017 365 2404 +3 1194 596 2404 +3 1670 826 2405 +3 764 2405 826 +3 1435 769 2406 +3 1973 482 2406 +3 1164 264 2407 +3 1110 482 2407 +3 826 2408 115 +3 1670 551 2408 +3 967 264 2409 +3 1164 551 2409 +3 2313 844 2410 +3 1996 757 2410 +3 1445 371 2411 +3 1376 757 2411 +3 1825 800 2412 +3 1752 767 2412 +3 1019 371 2413 +3 1445 767 2413 +3 2056 838 2414 +3 1981 625 2414 +3 1172 421 2415 +3 1211 625 2415 +3 1556 800 2416 +3 1825 561 2416 +3 1061 421 2417 +3 1172 561 2417 +3 2197 798 2418 +3 2132 707 2418 +3 1260 289 2419 +3 1294 707 2419 +3 1644 445 2420 +3 1171 560 2420 +3 977 289 2421 +3 1260 560 2421 +3 1894 838 2422 +3 2056 468 2422 +3 1210 220 2423 +3 1100 468 2423 +3 1598 445 2424 +3 1644 623 2424 +3 950 220 2425 +3 1210 623 2425 +3 2308 850 2426 +3 2442 752 2426 +3 753 2427 851 +3 1374 752 2427 +3 2223 784 2428 +3 2284 726 2428 +3 1346 315 2429 +3 1314 726 2429 +3 1724 549 2430 +3 1696 743 2430 +3 988 315 2431 +3 1346 743 2431 +3 983 251 2432 +3 962 250 2432 +3 1006 349 2433 +3 1132 511 2433 +3 2099 823 2434 +3 2120 666 2434 +3 1253 193 2435 +3 1243 666 2435 +3 1634 509 2436 +3 1625 677 2436 +3 941 193 2437 +3 1253 677 2437 +3 1886 251 2438 +3 983 304 2438 +3 1153 205 2439 +3 1096 304 2439 +3 1540 509 2440 +3 1634 538 2440 +3 945 205 2441 +3 1153 538 2441 +3 2426 850 2442 +3 2371 851 2442 +3 2159 719 2443 +3 1306 691 2443 +3 1297 258 2444 +3 1275 691 2444 +3 1682 518 2445 +3 1668 709 2445 +3 965 258 2446 +3 1297 709 2446 diff --git a/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp b/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp new file mode 100644 index 000000000000..554c50d2af65 --- /dev/null +++ b/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp @@ -0,0 +1,131 @@ +#include +#include +#include +#include + +#include +#include + +#include + +#include + +namespace PMP = CGAL::Polygon_mesh_processing; +using K = CGAL::Exact_predicates_inexact_constructions_kernel; +using SurfaceMesh = CGAL::Surface_mesh; + + +typedef boost::property_map::type VertexPointMap; +typedef typename CGAL::Kernel_traits< + typename boost::property_traits::value_type>::Kernel GeomTraits; +typedef CGAL::Surface_mesh_approximation:: + L21_metric_plane_proxy + L21_Metric; +typedef CGAL::Variational_shape_approximation + L21_MeshApproximation; + +struct PolygonSoup +{ + using PointType = K::Point_3; + std::vector points; + std::vector> faces; +}; + +auto meshArea = [](const SurfaceMesh& mesh) { + double area = 0; + for (const auto& f : mesh.faces()) + { + std::vector pts; + for (const auto& v : mesh.vertices_around_face(mesh.halfedge(f))) + { + pts.push_back(mesh.point(v)); + } + K::Triangle_3 tri(pts[0], pts[1], pts[2]); + area += std::sqrt(tri.squared_area()); + } + return area; +}; + +auto soupArea = [](const PolygonSoup& soup) { + double area = 0; + for (const auto& f : soup.faces) + { + std::vector pts = {soup.points[f[0]], soup.points[f[1]], soup.points[f[2]]}; + K::Triangle_3 tri(pts[0], pts[1], pts[2]); + area += std::sqrt(tri.squared_area()); + } + return area; +}; +auto soupToMesh = [](const PolygonSoup& soup) { + SurfaceMesh mesh; + std::vector vertices; + for (const auto& p : soup.points) + { + vertices.push_back(mesh.add_vertex(p)); + } + for (const auto& f : soup.faces) + { + mesh.add_face(vertices[f[0]], vertices[f[1]], vertices[f[2]]); + } + return mesh; +}; + +int main(int, char*[]) +{ + std::array subdivisionRatios = { 0.10 , 2.0 , 2.0 , 10.0 , 10.0 , 10.00 }; + std::array boundarySubdivisionRatios = { 0.01 , 2.0 , 0.1 , 10.0 , 1.0 , 0.01 }; + + for (int i = 0; i < subdivisionRatios.size(); ++i) + { + const auto subdivisionRatio = subdivisionRatios[i]; + const auto boundarySubdivisionRatio = boundarySubdivisionRatios[i]; + std::string filename = "./VSA-" + std::to_string(subdivisionRatio) + "-" + std::to_string(boundarySubdivisionRatio); + SurfaceMesh mesh; + + std::ifstream in("data/patch.ply"); + CGAL::IO::read_PLY(in, mesh); + std::cout << vertices(mesh).size() << std::endl; + const int maxProxies = 10; + const int defaultIterations = 20; + + VertexPointMap vpmap = get(boost::vertex_point, mesh); + L21_Metric metric(mesh, vpmap); + L21_MeshApproximation approx(mesh, vpmap, metric); + + const auto seedingParams = // + CGAL::parameters::seeding_method( + CGAL::Surface_mesh_approximation::Seeding_method::INCREMENTAL) + .max_number_of_proxies(maxProxies) + .min_error_drop(0.001) + .number_of_relaxations(5); + approx.initialize_seeds(seedingParams); + + approx.run(defaultIterations); + + const auto meshParams = CGAL::parameters::subdivision_ratio(subdivisionRatio) + .boundary_subdivision_ratio(boundarySubdivisionRatio) + .with_dihedral_angle(false) + .optimize_boundary_anchor_location(false) + .optimize_anchor_location(true) + .pca_plane(false); + const bool isOutputManifold = approx.extract_mesh(meshParams); + if (!isOutputManifold) + { + throw std::runtime_error("not manifold"); + } + + PolygonSoup soup; + const auto outputParams = CGAL::parameters::anchors(std::back_inserter(soup.points)) + .triangles(std::back_inserter(soup.faces)); + approx.output(outputParams); + + std::cerr << " Mesh area = " << meshArea(mesh) << " Soup area = " << soupArea(soup) + << std::endl; + { + std::ofstream f(filename + "soup.ply"); + CGAL::IO::write_PLY(f, soupToMesh(soup)); + } + } + + return 0; +} From 98fa0c089fd6f2e09622845fb7cea0ca8daa8593 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 18 Jul 2023 09:36:05 +0100 Subject: [PATCH 271/943] Fix for crash on Quit --- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index e1ead77a2276..e89577b1d1ae 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -186,6 +186,7 @@ CGAL::QGLViewer::~QGLViewer() { helpWidget()->close(); delete helpWidget_; } + disconnect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &CGAL::QGLViewer::contextIsDestroyed); } From fdb6b799a9f41d5cfea056801196504351b4da5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 21 Jul 2023 13:32:25 +0200 Subject: [PATCH 272/943] add doc + do the autorefine inplace for the soup --- .../PackageDescription.txt | 2 + .../soup_autorefinement.cpp | 11 +- .../Polygon_mesh_processing/autorefinement.h | 168 ++++++++++++------ 3 files changed, 116 insertions(+), 65 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index b17c41399d0b..95d8794cca1e 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -109,6 +109,8 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::surface_intersection()` - `CGAL::Polygon_mesh_processing::clip()` - `CGAL::Polygon_mesh_processing::split()` +- `CGAL::Polygon_mesh_processing::autorefine_triangle_soup()` +- `CGAL::Polygon_mesh_processing::autorefine()` \cgalCRPSection{Meshing Functions} - \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::isotropic_remeshing()` \endlink diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp index 9e4999287f7b..a44d47c8b6d1 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/soup_autorefinement.cpp @@ -32,14 +32,11 @@ int main(int argc, char** argv) CGAL::Real_timer t; t.start(); - std::vector output_points; - std::vector> output_triangles; - PMP::autorefine_soup_output(input_points, input_triangles, - output_points, output_triangles, - CGAL::parameters::concurrency_tag(CGAL::Parallel_if_available_tag())); + PMP::autorefine_triangle_soup(input_points, input_triangles, + CGAL::parameters::concurrency_tag(CGAL::Parallel_if_available_tag())); t.stop(); - std::cout << "#points = " << output_points.size() << " and #triangles = " << output_triangles.size() << " in " << t.time() << " sec." << std::endl; - CGAL::IO::write_polygon_soup("autorefined.off", output_points, output_triangles, CGAL::parameters::stream_precision(17)); + std::cout << "#points = " << input_points.size() << " and #triangles = " << input_triangles.size() << " in " << t.time() << " sec." << std::endl; + CGAL::IO::write_polygon_soup("autorefined.off", input_points, input_triangles, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 122c595b13e8..bfa65df1c73e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -31,10 +31,15 @@ #endif // output -#include +#include #include #include + +#ifdef CGAL_PMP_AUTOREFINE_USE_DEFAULT_VERBOSE +#define CGAL_PMP_AUTOREFINE_VERBOSE(X) std::cout << X << "\n"; +#endif + #ifndef CGAL_PMP_AUTOREFINE_VERBOSE #define CGAL_PMP_AUTOREFINE_VERBOSE(MSG) #endif @@ -1100,13 +1105,54 @@ void generate_subtriangles(std::size_t ti, } } // end of autorefine_impl +#endif -template -void autorefine_soup_output(const PointRange& input_points, - const TriIdsRange& id_triples, - std::vector& soup_points, - std::vector >& soup_triangles, - const NamedParameters& np = parameters::default_values()) +/** +* \ingroup PMP_corefinement_grp +* +* refines a soup of triangles so that no pair of triangles intersects in their interior. +* Note that points in `input_points` can only be added (intersection points) a the end of the container, with the initial order preserved. +* Note that if `input_points` contains two or more identical points and only the first copy (following the order in the `input_points`) +* will be used in `id_triples`. +* `id_triples` will be updated to contain both the input triangles and the new subdivides triangles. Degenerate triangles will be removed. +* Also triangles in `id_triples` will be triangles without intersection first, followed by triangles coming from a subdivision induced +* by an intersection. The named parameter `visitor()` can be used to track +* +* @tparam PointRange a model of the concept `RandomAccessContainer` +* whose value type is the point type +* @tparam TriIdsRange a model of the concepts `RandomAccessContainer`, `BackInsertionSequence` and `Swappable`, whose +* value type is a model of the concept `RandomAccessContainer` whose value type is convertible to `std::size_t` and that +* is constructible from an `std::initializer_list` of size 3. +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param input_points points of the soup of polygons +* @param id_triples each element in the range describes a triangle using the indexed position of the points in `input_points` +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{point_map} +* \cgalParamDescription{a property map associating points to the elements of the range `input_points`} +* \cgalParamType{a model of `ReadWritePropertyMap` whose value type is a point type} +* \cgalParamDefault{`CGAL::Identity_property_map`} +* \cgalParamNEnd +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the point type.} +* \cgalParamNEnd +* \cgalParamNBegin{visitor} +* \cgalParamDescription{a visitor used to track the creation of new faces} +* \cgalParamType{a class model of `PMPFooBar`} +* \cgalParamDefault{`Autorefinement::Default_visitor`} +* \cgalParamNEnd +* \cgalNamedParamsEnd +* +*/ +template +void autorefine_triangle_soup(PointRange& input_points, + TriIdsRange& id_triples, + const NamedParameters& np = parameters::default_values()) { using parameters::choose_parameter; using parameters::get_parameter; @@ -1121,14 +1167,13 @@ void autorefine_soup_output(const PointRange& input_points, Sequential_tag > ::type Concurrency_tag; - constexpr bool parallel_execution = std::is_same::value; + constexpr bool parallel_execution = std::is_same_v; #ifndef CGAL_LINKED_WITH_TBB - CGAL_static_assertion_msg (parallel_execution, - "Parallel_tag is enabled but TBB is unavailable."); + static_assert (!parallel_execution, + "Parallel_tag is enabled but TBB is unavailable."); #endif - typedef std::size_t Input_TID; typedef std::pair Pair_of_triangle_ids; @@ -1334,7 +1379,6 @@ void autorefine_soup_output(const PointRange& input_points, boost::timer::progress_display pd(triangles.size()); #endif - auto refine_triangles = [&](std::size_t ti) { if (all_segments[ti].empty() && all_points[ti].empty()) @@ -1371,7 +1415,6 @@ void autorefine_soup_output(const PointRange& input_points, #endif }; - #ifdef USE_DEBUG_PARALLEL_TIMERS t.start(); #endif @@ -1415,25 +1458,22 @@ void autorefine_soup_output(const PointRange& input_points, std::vector exact_soup_points; #endif - /// Lambda get_point_id() - auto get_point_id = [&](const typename EK::Point_3& pt) + // TODO: parallel_for? + // for input points, we on purpose keep duplicated points and isolated points + for (std::size_t pid = 0; pidsecond; - }; + point_id_map.insert( + std::make_pair(to_exact(get(pm,input_points[pid])), pid)); +#if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) + exact_soup_points.push_back(insert_res.first->first); +#endif + } - // TODO: parallel_for? - std::vector input_point_ids; - input_point_ids.reserve(input_points.size()); - for (const auto& p : input_points) - input_point_ids.push_back(get_point_id(to_exact(get(pm,p)))); + TriIdsRange soup_triangles; + soup_triangles.reserve(id_triples.size()); // TODO: remove #deg tri? // raw copy of input triangles with no intersection for (Input_TID f=0; fsecond; + }; + #ifdef USE_DEBUG_PARALLEL_TIMERS t.start(); #endif @@ -1465,7 +1518,6 @@ void autorefine_soup_output(const PointRange& input_points, #ifdef CGAL_LINKED_WITH_TBB if(parallel_execution && new_triangles.size() > 100) { - #ifdef SET_POINT_IDS_USING_MUTEX //option 1 (using a mutex) CGAL_MUTEX point_container_mutex; @@ -1477,8 +1529,8 @@ void autorefine_soup_output(const PointRange& input_points, if (insert_res.second) { CGAL_SCOPED_LOCK(point_container_mutex); - insert_res.first->second=soup_points.size(); - soup_points.push_back(to_input(pt)); + insert_res.first->second=input_points.size(); + input_points.push_back(to_input(pt)); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) exact_soup_points.push_back(pt); #endif @@ -1502,9 +1554,9 @@ void autorefine_soup_output(const PointRange& input_points, for (size_t ti = r.begin(); ti != r.end(); ++ti) { soup_triangles[offset + ti] = - CGAL::make_array(triangle_buffer[ti][0]->second, - triangle_buffer[ti][1]->second, - triangle_buffer[ti][2]->second); + { triangle_buffer[ti][0]->second, + triangle_buffer[ti][1]->second, + triangle_buffer[ti][2]->second }; } } ); @@ -1536,17 +1588,17 @@ void autorefine_soup_output(const PointRange& input_points, ); // the map is now filled we can safely set the point ids - std::size_t pid_offset=soup_points.size(); - soup_points.resize(pid_offset+iterators.size()); + std::size_t pid_offset=input_points.size(); + input_points.resize(pid_offset+iterators.size()); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.resize(soup_points.size()); + exact_soup_points.resize(input_points.size()); #endif tbb::parallel_for(tbb::blocked_range(0, iterators.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - soup_points[pid_offset+ti] = to_input(iterators[ti]->first); + input_points[pid_offset+ti] = to_input(iterators[ti]->first); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) exact_soup_points[pid_offset+ti] = iterators[ti]->first; #endif @@ -1560,9 +1612,9 @@ void autorefine_soup_output(const PointRange& input_points, for (size_t ti = r.begin(); ti != r.end(); ++ti) { soup_triangles[offset + ti] = - CGAL::make_array(triangle_buffer[ti][0]->second, - triangle_buffer[ti][1]->second, - triangle_buffer[ti][2]->second); + { triangle_buffer[ti][0]->second, + triangle_buffer[ti][1]->second, + triangle_buffer[ti][2]->second }; } } ); @@ -1576,7 +1628,7 @@ void autorefine_soup_output(const PointRange& input_points, #endif soup_triangles.reserve(offset + new_triangles.size()); for (const std::array& t : new_triangles) - soup_triangles.emplace_back(CGAL::make_array(get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2]))); + soup_triangles.push_back({ get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2])}); } @@ -1597,9 +1649,11 @@ void autorefine_soup_output(const PointRange& input_points, throw std::runtime_error("ERROR: invalid output, there is most probably a bug"); #endif #endif + using std::swap; + swap(id_triples, soup_triangles); + CGAL_PMP_AUTOREFINE_VERBOSE("done"); } -#endif /** * \ingroup PMP_corefinement_grp @@ -1639,22 +1693,20 @@ autorefine( TriangleMesh& tm, using parameters::get_parameter; typedef typename GetGeomTraits::type GT; - GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); + // GT traits = choose_parameter(get_parameter(np, internal_np::geom_traits)); - std::vector in_soup_points; - std::vector > in_soup_triangles; - std::vector out_soup_points; - std::vector > out_soup_triangles; + std::vector soup_points; + std::vector > soup_triangles; - polygon_mesh_to_polygon_soup(tm, in_soup_points, in_soup_triangles); + polygon_mesh_to_polygon_soup(tm, soup_points, soup_triangles, np); - autorefine_soup_output(in_soup_points, in_soup_triangles, - out_soup_points, out_soup_triangles); + autorefine_triangle_soup(soup_points, soup_triangles); clear(tm); - repair_polygon_soup(out_soup_points, out_soup_triangles); - orient_polygon_soup(out_soup_points, out_soup_triangles); - polygon_soup_to_polygon_mesh(out_soup_points, out_soup_triangles, tm); + repair_polygon_soup(soup_points, soup_triangles); + + duplicate_non_manifold_edges_in_polygon_soup(soup_points, soup_triangles); + polygon_soup_to_polygon_mesh(soup_points, soup_triangles, tm); } From d6fdc85be9bb5c95b4fdf59379a67033a98b2d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 21 Jul 2023 13:38:10 +0200 Subject: [PATCH 273/943] rename variables --- .../Polygon_mesh_processing/autorefinement.h | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index bfa65df1c73e..0054a9dcdb2d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1111,11 +1111,11 @@ void generate_subtriangles(std::size_t ti, * \ingroup PMP_corefinement_grp * * refines a soup of triangles so that no pair of triangles intersects in their interior. -* Note that points in `input_points` can only be added (intersection points) a the end of the container, with the initial order preserved. -* Note that if `input_points` contains two or more identical points and only the first copy (following the order in the `input_points`) -* will be used in `id_triples`. -* `id_triples` will be updated to contain both the input triangles and the new subdivides triangles. Degenerate triangles will be removed. -* Also triangles in `id_triples` will be triangles without intersection first, followed by triangles coming from a subdivision induced +* Note that points in `soup_points` can only be added (intersection points) a the end of the container, with the initial order preserved. +* Note that if `soup_points` contains two or more identical points and only the first copy (following the order in the `soup_points`) +* will be used in `soup_triangles`. +* `soup_triangles` will be updated to contain both the input triangles and the new subdivides triangles. Degenerate triangles will be removed. +* Also triangles in `soup_triangles` will be triangles without intersection first, followed by triangles coming from a subdivision induced * by an intersection. The named parameter `visitor()` can be used to track * * @tparam PointRange a model of the concept `RandomAccessContainer` @@ -1125,13 +1125,13 @@ void generate_subtriangles(std::size_t ti, * is constructible from an `std::initializer_list` of size 3. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * -* @param input_points points of the soup of polygons -* @param id_triples each element in the range describes a triangle using the indexed position of the points in `input_points` +* @param soup_points points of the soup of polygons +* @param soup_triangles each element in the range describes a triangle using the indexed position of the points in `soup_points` * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin * \cgalParamNBegin{point_map} -* \cgalParamDescription{a property map associating points to the elements of the range `input_points`} +* \cgalParamDescription{a property map associating points to the elements of the range `soup_points`} * \cgalParamType{a model of `ReadWritePropertyMap` whose value type is a point type} * \cgalParamDefault{`CGAL::Identity_property_map`} * \cgalParamNEnd @@ -1150,8 +1150,8 @@ void generate_subtriangles(std::size_t ti, * */ template -void autorefine_triangle_soup(PointRange& input_points, - TriIdsRange& id_triples, +void autorefine_triangle_soup(PointRange& soup_points, + TriIdsRange& soup_triangles, const NamedParameters& np = parameters::default_values()) { using parameters::choose_parameter; @@ -1181,12 +1181,12 @@ void autorefine_triangle_soup(PointRange& input_points, // collect intersecting pairs of triangles CGAL_PMP_AUTOREFINE_VERBOSE("collect intersecting pairs"); - triangle_soup_self_intersections(input_points, id_triples, std::back_inserter(si_pairs), np); + triangle_soup_self_intersections(soup_points, soup_triangles, std::back_inserter(si_pairs), np); if (si_pairs.empty()) return; // mark degenerate faces so that we can ignore them - std::vector is_degen(id_triples.size(), false); + std::vector is_degen(soup_triangles.size(), false); for (const Pair_of_triangle_ids& p : si_pairs) if (p.first==p.second) // bbox inter reports (f,f) for degenerate faces @@ -1194,7 +1194,7 @@ void autorefine_triangle_soup(PointRange& input_points, // assign an id per triangle involved in an intersection // + the faces involved in the intersection - std::vector tri_inter_ids(id_triples.size(), -1); + std::vector tri_inter_ids(soup_triangles.size(), -1); std::vector intersected_faces; int tiid=-1; for (const Pair_of_triangle_ids& p : si_pairs) @@ -1219,9 +1219,9 @@ void autorefine_triangle_soup(PointRange& input_points, for(Input_TID f : intersected_faces) { triangles[tri_inter_ids[f]]= CGAL::make_array( - to_exact( get(pm, input_points[id_triples[f][0]]) ), - to_exact( get(pm, input_points[id_triples[f][1]]) ), - to_exact( get(pm, input_points[id_triples[f][2]]) ) ); + to_exact( get(pm, soup_points[soup_triangles[f][0]]) ), + to_exact( get(pm, soup_points[soup_triangles[f][1]]) ), + to_exact( get(pm, soup_points[soup_triangles[f][2]]) ) ); } std::vector< std::vector > > all_segments(triangles.size()); @@ -1460,31 +1460,31 @@ void autorefine_triangle_soup(PointRange& input_points, // TODO: parallel_for? // for input points, we on purpose keep duplicated points and isolated points - for (std::size_t pid = 0; pidfirst); #endif } - TriIdsRange soup_triangles; - soup_triangles.reserve(id_triples.size()); // TODO: remove #deg tri? + TriIdsRange soup_triangles_out; + soup_triangles_out.reserve(soup_triangles.size()); // TODO: remove #deg tri? // raw copy of input triangles with no intersection - for (Input_TID f=0; fsecond=input_points.size(); - input_points.push_back(to_input(pt)); + insert_res.first->second=soup_points.size(); + soup_points.push_back(to_input(pt)); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) exact_soup_points.push_back(pt); #endif @@ -1538,7 +1538,7 @@ void autorefine_triangle_soup(PointRange& input_points, return insert_res.first; }; - soup_triangles.resize(offset + new_triangles.size()); + soup_triangles_out.resize(offset + new_triangles.size()); //use map iterator triple for triangles to create them concurrently and safely std::vector::iterator, 3>> triangle_buffer(new_triangles.size()); tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), @@ -1553,7 +1553,7 @@ void autorefine_triangle_soup(PointRange& input_points, [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - soup_triangles[offset + ti] = + soup_triangles_out[offset + ti] = { triangle_buffer[ti][0]->second, triangle_buffer[ti][1]->second, triangle_buffer[ti][2]->second }; @@ -1573,12 +1573,12 @@ void autorefine_triangle_soup(PointRange& input_points, }; //use map iterator triple for triangles to create them concurrently and safely - soup_triangles.resize(offset + new_triangles.size()); + soup_triangles_out.resize(offset + new_triangles.size()); std::vector::iterator, 3>> triangle_buffer(new_triangles.size()); tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - if (offset + ti > soup_triangles.size()) { + if (offset + ti > soup_triangles_out.size()) { std::cout << "ti = " << ti << std::endl; } const std::array& t = new_triangles[ti]; @@ -1588,17 +1588,17 @@ void autorefine_triangle_soup(PointRange& input_points, ); // the map is now filled we can safely set the point ids - std::size_t pid_offset=input_points.size(); - input_points.resize(pid_offset+iterators.size()); + std::size_t pid_offset=soup_points.size(); + soup_points.resize(pid_offset+iterators.size()); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) - exact_soup_points.resize(input_points.size()); + exact_soup_points.resize(soup_points.size()); #endif tbb::parallel_for(tbb::blocked_range(0, iterators.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - input_points[pid_offset+ti] = to_input(iterators[ti]->first); + soup_points[pid_offset+ti] = to_input(iterators[ti]->first); #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) exact_soup_points[pid_offset+ti] = iterators[ti]->first; #endif @@ -1611,7 +1611,7 @@ void autorefine_triangle_soup(PointRange& input_points, [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - soup_triangles[offset + ti] = + soup_triangles_out[offset + ti] = { triangle_buffer[ti][0]->second, triangle_buffer[ti][1]->second, triangle_buffer[ti][2]->second }; @@ -1626,9 +1626,9 @@ void autorefine_triangle_soup(PointRange& input_points, #ifdef USE_DEBUG_PARALLEL_TIMERS mode = "sequential"; #endif - soup_triangles.reserve(offset + new_triangles.size()); + soup_triangles_out.reserve(offset + new_triangles.size()); for (const std::array& t : new_triangles) - soup_triangles.push_back({ get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2])}); + soup_triangles_out.push_back({ get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2])}); } @@ -1641,16 +1641,16 @@ void autorefine_triangle_soup(PointRange& input_points, #ifndef CGAL_NDEBUG CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - CGAL_assertion( !does_triangle_soup_self_intersect(exact_soup_points, soup_triangles) ); + CGAL_assertion( !does_triangle_soup_self_intersect(exact_soup_points, soup_triangles_out) ); #else #ifdef CGAL_DEBUG_PMP_AUTOREFINE CGAL_PMP_AUTOREFINE_VERBOSE("check soup"); - if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles)) + if (does_triangle_soup_self_intersect(exact_soup_points, soup_triangles_out)) throw std::runtime_error("ERROR: invalid output, there is most probably a bug"); #endif #endif using std::swap; - swap(id_triples, soup_triangles); + swap(soup_triangles, soup_triangles_out); CGAL_PMP_AUTOREFINE_VERBOSE("done"); } From e1d7105c1cf58cabbd38d71cc3a5be8aa871ddf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 21 Jul 2023 16:47:03 +0200 Subject: [PATCH 274/943] add visitor + add calls to the visitor --- .../Concepts/PMPAutorefinementVisitor.h | 25 +++++++ .../Polygon_mesh_processing/autorefinement.h | 75 +++++++++++++++---- 2 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPAutorefinementVisitor.h diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPAutorefinementVisitor.h b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPAutorefinementVisitor.h new file mode 100644 index 000000000000..e3ef90e9be03 --- /dev/null +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPAutorefinementVisitor.h @@ -0,0 +1,25 @@ +/// \ingroup PkgPolygonMeshProcessingConcepts +/// \cgalConcept +/// +/// The concept `PMPAutorefinementVisitor` defines the requirements for the visitor +/// used in `CGAL::Polygon_mesh_processing::autorefine_triangle_soup()` to track +/// the creation of new triangles. +/// +/// \cgalRefines{CopyConstructible} +/// \cgalHasModel `CGAL::Polygon_mesh_processing::Autorefinement::Default_visitor`. + +class PMPAutorefinementVisitor{ +public: + +/// @name Functions called only if at least one intersection has been found +/// @{ + /// called when the final number of output triangles is known, `nbt` being the total number of triangles in the output. + void number_of_output_triangles(std::size_t nbt); + /// called for triangle with no intersection, `tgt_id` is the position in the triangle container after calling + /// `autorefine_triangle_soup()`, while `src_id` was its position before calling the function. + void verbatim_triangle_copy(std::size_t tgt_id, std::size_t src_id); + /// called for each subtriangle created from a triangle with intersection, `tgt_id` is the position in the triangle container after calling + /// `autorefine_triangle_soup()` of the subtriangle, while `src_id` was the position of the original support triangle before calling the function. + void new_subtriangle(std::size_t tgt_id, std::size_t src_id); +/// @} +}; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 0054a9dcdb2d..166c950a9830 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -77,6 +77,24 @@ namespace CGAL { namespace Polygon_mesh_processing { +namespace Autorefinement { + +/** \ingroup PMP_corefinement_grp + * %Default visitor model of `PMPAutorefinementVisitor`. + * All of its functions have an empty body. This class can be used as a + * base class if only some of the functions of the concept require to be + * overridden. + */ +struct Default_visitor +{ + inline void number_of_output_triangles(std::size_t /*nbt*/) {} + inline void verbatim_triangle_copy(std::size_t /*tgt_id*/, std::size_t /*src_id*/) {} + inline void new_subtriangle(std::size_t /*tgt_id*/, std::size_t /*src_id*/) {} +}; + +} // end of Autorefinement visitor + + #ifndef DOXYGEN_RUNNING namespace autorefine_impl { @@ -1079,13 +1097,13 @@ void generate_subtriangles(std::size_t ti, for (typename CDT::Face_handle fh : cdt.finite_face_handles()) { if (orientation_flipped) - new_triangles.push_back( CGAL::make_array(fh->vertex(0)->point(), - fh->vertex(cdt.cw(0))->point(), - fh->vertex(cdt.ccw(0))->point()) ); + new_triangles.push_back( { CGAL::make_array(fh->vertex(0)->point(), + fh->vertex(cdt.cw(0))->point(), + fh->vertex(cdt.ccw(0))->point()), ti } ); else - new_triangles.push_back( CGAL::make_array(fh->vertex(0)->point(), - fh->vertex(cdt.ccw(0))->point(), - fh->vertex(cdt.cw(0))->point()) ); + new_triangles.push_back( { CGAL::make_array(fh->vertex(0)->point(), + fh->vertex(cdt.ccw(0))->point(), + fh->vertex(cdt.cw(0))->point()), ti } ); #ifdef CGAL_DEBUG_PMP_AUTOREFINE_DUMP_TRIANGULATIONS ++nbt; buffer << fh->vertex(0)->point() << "\n"; @@ -1143,8 +1161,9 @@ void generate_subtriangles(std::size_t ti, * \cgalParamNEnd * \cgalParamNBegin{visitor} * \cgalParamDescription{a visitor used to track the creation of new faces} -* \cgalParamType{a class model of `PMPFooBar`} -* \cgalParamDefault{`Autorefinement::Default_visitor`} +* \cgalParamType{a class model of `PMPAutorefinementVisitor`} +* \cgalParamDefault{`Autorefinement::Default_visitor`} +* \cgalParamExtra{The visitor will be copied.} * \cgalParamNEnd * \cgalNamedParamsEnd * @@ -1167,6 +1186,15 @@ void autorefine_triangle_soup(PointRange& soup_points, Sequential_tag > ::type Concurrency_tag; + // visitor + typedef typename internal_np::Lookup_named_param_def < + internal_np::visitor_t, + NamedParameters, + Autorefinement::Default_visitor//default + > ::type Visitor; + Visitor visitor(choose_parameter(get_parameter(np, internal_np::visitor))); + + constexpr bool parallel_execution = std::is_same_v; #ifndef CGAL_LINKED_WITH_TBB @@ -1369,10 +1397,10 @@ void autorefine_triangle_soup(PointRange& soup_points, // now refine triangles #ifdef CGAL_LINKED_WITH_TBB std::conditional_t>, - std::vector>> new_triangles; + tbb::concurrent_vector, std::size_t>>, + std::vector, std::size_t>>> new_triangles; #else - std::vector> new_triangles; + std::vector, std::size_t>> new_triangles; #endif #ifdef USE_PROGRESS_DISPLAY @@ -1382,7 +1410,7 @@ void autorefine_triangle_soup(PointRange& soup_points, auto refine_triangles = [&](std::size_t ti) { if (all_segments[ti].empty() && all_points[ti].empty()) - new_triangles.push_back(triangles[ti]); + new_triangles.push_back({triangles[ti], ti}); else { #ifdef USE_FIXED_PROJECTION_TRAITS @@ -1475,7 +1503,10 @@ void autorefine_triangle_soup(PointRange& soup_points, TriIdsRange soup_triangles_out; soup_triangles_out.reserve(soup_triangles.size()); // TODO: remove #deg tri? + visitor.number_of_output_triangles(soup_triangles.size()+new_triangles.size()); + // raw copy of input triangles with no intersection + std::vector tri_inter_ids_inverse(triangles.size()); for (Input_TID f=0; f(0, new_triangles.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { - const std::array& t = new_triangles[ti]; + const std::array& t = new_triangles[ti].first; + visitor.new_subtriangle(offset+ti, tri_inter_ids_inverse[new_triangles[ti].second]); triangle_buffer[ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); } } @@ -1581,7 +1618,8 @@ void autorefine_triangle_soup(PointRange& soup_points, if (offset + ti > soup_triangles_out.size()) { std::cout << "ti = " << ti << std::endl; } - const std::array& t = new_triangles[ti]; + const std::array& t = new_triangles[ti].first; + visitor.new_subtriangle(offset+ti, tri_inter_ids_inverse[new_triangles[ti].second]); triangle_buffer[ti] = CGAL::make_array(concurrent_get_point_id(t[0]), concurrent_get_point_id(t[1]), concurrent_get_point_id(t[2])); } } @@ -1627,8 +1665,13 @@ void autorefine_triangle_soup(PointRange& soup_points, mode = "sequential"; #endif soup_triangles_out.reserve(offset + new_triangles.size()); - for (const std::array& t : new_triangles) - soup_triangles_out.push_back({ get_point_id(t[0]), get_point_id(t[1]), get_point_id(t[2])}); + for (const std::pair, std::size_t>& t_and_id : new_triangles) + { + visitor.new_subtriangle(soup_triangles_out.size(), tri_inter_ids_inverse[t_and_id.second]); + soup_triangles_out.push_back({ get_point_id(t_and_id.first[0]), + get_point_id(t_and_id.first[1]), + get_point_id(t_and_id.first[2]) }); + } } From 9822f371dded06a2538281c5f97b0d343a5c0939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 21 Jul 2023 16:54:21 +0200 Subject: [PATCH 275/943] doc precision --- .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 166c950a9830..6bbb5571e7a1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1702,6 +1702,9 @@ void autorefine_triangle_soup(PointRange& soup_points, * \ingroup PMP_corefinement_grp * refines a triangle mesh so that no triangles intersects in their interior. * + * Note that this function is only provided as a shortcut for calling `autorefine_triangle_soup()` + * with a mesh. For any advance usage the aforementioned function should be called directly. + * * @tparam TriangleMesh a model of `HalfedgeListGraph`, `FaceListGraph`, and `MutableFaceGraph` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * @@ -1745,7 +1748,7 @@ autorefine( TriangleMesh& tm, autorefine_triangle_soup(soup_points, soup_triangles); - clear(tm); + clear(tm); //TODO: keep properties repair_polygon_soup(soup_points, soup_triangles); duplicate_non_manifold_edges_in_polygon_soup(soup_points, soup_triangles); From d1779ca36d18ecc1be5d1fb50e9f66a66d47ea61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 21 Jul 2023 17:03:34 +0200 Subject: [PATCH 276/943] doc concurrency_tag --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 6bbb5571e7a1..0fb843c31c00 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1148,6 +1148,11 @@ void generate_subtriangles(std::size_t ti, * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin +* \cgalParamNBegin{concurrency_tag} +* \cgalParamDescription{a tag indicating if the task should be done using one or several threads.} +* \cgalParamType{Either `CGAL::Sequential_tag`, or `CGAL::Parallel_tag`, or `CGAL::Parallel_if_available_tag`} +* \cgalParamDefault{`CGAL::Sequential_tag`} +* \cgalParamNEnd * \cgalParamNBegin{point_map} * \cgalParamDescription{a property map associating points to the elements of the range `soup_points`} * \cgalParamType{a model of `ReadWritePropertyMap` whose value type is a point type} @@ -1712,6 +1717,11 @@ void autorefine_triangle_soup(PointRange& soup_points, * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin + * \cgalParamNBegin{concurrency_tag} + * \cgalParamDescription{a tag indicating if the task should be done using one or several threads.} + * \cgalParamType{Either `CGAL::Sequential_tag`, or `CGAL::Parallel_tag`, or `CGAL::Parallel_if_available_tag`} + * \cgalParamDefault{`CGAL::Sequential_tag`} + * \cgalParamNEnd * \cgalParamNBegin{geom_traits} * \cgalParamDescription{an instance of a geometric traits class} * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} @@ -1746,7 +1756,7 @@ autorefine( TriangleMesh& tm, polygon_mesh_to_polygon_soup(tm, soup_points, soup_triangles, np); - autorefine_triangle_soup(soup_points, soup_triangles); + autorefine_triangle_soup(soup_points, soup_triangles, np); clear(tm); //TODO: keep properties repair_polygon_soup(soup_points, soup_triangles); From c3b7214a1927966ee6cbe3faca72f0487fa11c22 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 26 Jul 2023 15:44:33 +0100 Subject: [PATCH 277/943] Fix the fix. The floats were already in the range [0,256] --- .../examples/Arrangement_on_surface_2/draw_arr.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp index b62ba6aadc17..8c3c9b4daf85 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp @@ -18,7 +18,7 @@ using Arrangement_2 = CGAL::Arrangement_2; * \param value Value component range: [0, 1] * \return tuple, where each component is in the range [0, 255] */ -std::tuple +std::tuple hsv_to_rgb(float hue, float sat, float value) { float red, green, blue; float fc = value * sat; // Chroma @@ -69,7 +69,10 @@ hsv_to_rgb(float hue, float sat, float value) { red *= 255; green *= 255; blue *= 255; - return std::make_tuple(red, green, blue); + unsigned char redc = (unsigned char)red; + unsigned char greenc = (unsigned char)green; + unsigned char bluec = (unsigned char)blue; + return std::make_tuple(redc, greenc, bluec); } int main() { @@ -104,7 +107,7 @@ int main() { float r, g, b; typedef unsigned char uchar; std::tie(r, g, b) = hsv_to_rgb(h, s, v); - return CGAL::IO::Color(uchar(r*255), uchar(g*255), uchar(b*255)); + return CGAL::IO::Color(r,g,b); }, "hsv colors", true); return EXIT_SUCCESS; From 92a434018ac1087aab8c02c1835a2a87a68e29e2 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 23 May 2023 00:09:18 +0200 Subject: [PATCH 278/943] Add sizing field calculation from curvature WIP: isotropic remeshing default overload is now broken --- .../Polygon_mesh_processing/CMakeLists.txt | 11 +- ...sotropic_remeshing_with_sizing_example.cpp | 15 +- .../Adaptive_sizing_field.h | 141 +++++++++++++----- .../Isotropic_remeshing/Sizing_field.h | 2 +- .../Uniform_sizing_field.h | 5 +- .../Isotropic_remeshing/remesh_impl.h | 9 +- .../CGAL/Polygon_mesh_processing/remesh.h | 10 +- 7 files changed, 140 insertions(+), 53 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 28d0550a31c4..3644cc490978 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -25,9 +25,8 @@ create_single_source_cgal_program("orient_polygon_soup_example.cpp") create_single_source_cgal_program("triangulate_polyline_example.cpp") create_single_source_cgal_program("mesh_slicer_example.cpp") #create_single_source_cgal_program( "remove_degeneracies_example.cpp") -create_single_source_cgal_program("isotropic_remeshing_example.cpp") -create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") -create_single_source_cgal_program("isotropic_remeshing_with_sizing_example.cpp") +#create_single_source_cgal_program("isotropic_remeshing_example.cpp") +#create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") create_single_source_cgal_program("tangential_relaxation_example.cpp") create_single_source_cgal_program("surface_mesh_intersection.cpp") create_single_source_cgal_program("corefinement_SM.cpp") @@ -70,6 +69,12 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(hole_filling_example_LCC PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("mesh_smoothing_example.cpp") target_link_libraries(mesh_smoothing_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("isotropic_remeshing_example.cpp") + target_link_libraries(isotropic_remeshing_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") + target_link_libraries(isotropic_remeshing_of_patch_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("isotropic_remeshing_with_sizing_example.cpp") + target_link_libraries(isotropic_remeshing_with_sizing_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("delaunay_remeshing_example.cpp") target_link_libraries(delaunay_remeshing_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("remesh_almost_planar_patches.cpp") diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index 1e1335ccfa6d..fd27430e056d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -11,7 +11,9 @@ namespace PMP = CGAL::Polygon_mesh_processing; int main(int argc, char* argv[]) { - const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/pig.off"); +// const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/pig.off"); +// const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/hand.off"); + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/nefertiti.off"); std::ifstream input(filename); Mesh mesh; @@ -20,16 +22,17 @@ int main(int argc, char* argv[]) return 1; } - //todo ip - update - const std::pair edge_min_max{0.1, 0.12}; - unsigned int nb_iter = 3; - std::cout << "Start remeshing of " << filename << " (" << num_faces(mesh) << " faces)..." << std::endl; + const double tol = 0.002; + const std::pair edge_min_max{0.001, 0.5}; + PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, mesh); + unsigned int nb_iter = 3; + PMP::isotropic_remeshing( faces(mesh), - edge_min_max, + sizing_field, mesh, PMP::parameters::number_of_iterations(nb_iter) ); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 1293577ad4f8..5724d26ba0df 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -17,6 +17,8 @@ #include +#include + #include namespace CGAL @@ -30,26 +32,37 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef CGAL::Sizing_field Base; public: + typedef typename Base::K K; typedef typename Base::FT FT; typedef typename Base::Point_3 Point_3; typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; - typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; + + typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; typedef typename boost::property_map::type VertexSizingMap; - Adaptive_sizing_field(const std::pair& edge_len_min_max + //todo ip: set a property map that can calculate curvature in one go. I think I'm generating constant maps (without put) + // try 1 + typedef Principal_curvatures_and_directions Principal_curvatures; +// typedef Constant_property_map Vertex_curvature_map; + + // try 2 + typedef Constant_property_map> Default_principal_map; + typedef typename internal_np::Lookup_named_param_def::type + Vertex_curvature_map; + + Adaptive_sizing_field(const double tol + , const std::pair& edge_len_min_max , PolygonMesh& pmesh) - : m_sq_short( CGAL::square(edge_len_min_max.first)) - , m_sq_long( CGAL::square(edge_len_min_max.second)) + : tol(tol) + , m_sq_short(CGAL::square(edge_len_min_max.first)) + , m_sq_long( CGAL::square(edge_len_min_max.second)) , m_pmesh(pmesh) { - //todo ip: initialize sizing map with default values - //todo ip: might end up using directly the property map of the curvature calculation (if mutable)? - vertex_sizing_map_ = get(Vertex_property_tag(), m_pmesh); - for(vertex_descriptor v : vertices(m_pmesh)){ - put(vertex_sizing_map_, v, m_sq_long); - } + m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); } private: @@ -69,21 +82,62 @@ class Adaptive_sizing_field : public CGAL::Sizing_field public: void calc_sizing_map() { - //todo ip - // calculate curvature - - // loop over curvature property field and calculate the target mesh size for a vertex - // don't forget to store squared length - +#ifdef CGAL_PMP_REMESHING_VERBOSE + int oversize = 0; + int undersize = 0; + int insize = 0; + std::cout << "Calculating sizing field..." << std::endl; +#endif + + //todo ip: how to make this work? +// Vertex_curvature_map vertex_curvature_map; +// interpolated_corrected_principal_curvatures_and_directions(m_pmesh +// , vertex_curvature_map); + + // calculate square vertex sizing field (L(x_i))^2 from curvature field + for(vertex_descriptor v : vertices(m_pmesh)) + { +// auto vertex_curv = get(vertex_curvature_map, v); //todo ip: how to make this work? + //todo ip: temp solution + const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); + const FT max_absolute_curv = std::max(std::abs(vertex_curv.max_curvature), std::abs(vertex_curv.min_curvature)); + const FT vertex_size_sq = 6 * tol / max_absolute_curv - 3 * CGAL::square(tol); + if (vertex_size_sq > m_sq_long) + { + put(m_vertex_sizing_map, v, m_sq_long); +#ifdef CGAL_PMP_REMESHING_VERBOSE + ++oversize; +#endif + } + else if (vertex_size_sq < m_sq_short) + { + put(m_vertex_sizing_map, v, m_sq_short); +#ifdef CGAL_PMP_REMESHING_VERBOSE + ++undersize; +#endif + } + else + { + put(m_vertex_sizing_map, v, vertex_size_sq); +#ifdef CGAL_PMP_REMESHING_VERBOSE + ++insize; +#endif + } + } +#ifdef CGAL_PMP_REMESHING_VERBOSE + std::cout << " done (" << insize << " from curvature, " + << oversize << " set to max, " + << undersize << " set to min)" << std::endl; +#endif } boost::optional is_too_long(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = std::min(get(vertex_sizing_map_, source(h, m_pmesh)), - get(vertex_sizing_map_, target(h, m_pmesh))); - CGAL_assertion(get(vertex_sizing_map_, source(h, m_pmesh))); - CGAL_assertion(get(vertex_sizing_map_, target(h, m_pmesh))); + FT sqtarg_len = std::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); if(sqlen > sqtarg_len) return sqlen; else @@ -94,11 +148,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field const vertex_descriptor& vb) const { const FT sqlen = sqlength(va, vb); - FT sqtarg_len = std::min(get(vertex_sizing_map_, va), - get(vertex_sizing_map_, vb)); - CGAL_assertion(get(vertex_sizing_map_, va)); - CGAL_assertion(get(vertex_sizing_map_, vb)); - if (sqlen > sqtarg_len) + FT sqtarg_len = std::min(get(m_vertex_sizing_map, va), + get(m_vertex_sizing_map, vb)); + CGAL_assertion(get(m_vertex_sizing_map, va)); + CGAL_assertion(get(m_vertex_sizing_map, vb)); + if (sqlen > 16./9. * sqtarg_len) return sqlen; else return boost::none; @@ -107,11 +161,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_short(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = std::min(get(vertex_sizing_map_, source(h, m_pmesh)), - get(vertex_sizing_map_, target(h, m_pmesh))); - CGAL_assertion(get(vertex_sizing_map_, source(h, m_pmesh))); - CGAL_assertion(get(vertex_sizing_map_, target(h, m_pmesh))); - if (sqlen < sqtarg_len) + FT sqtarg_len = std::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); + if (sqlen < 16./25. * sqtarg_len) return sqlen; else return boost::none; @@ -125,18 +179,31 @@ class Adaptive_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } - void update_sizing_map(const vertex_descriptor& vnew) + void update_sizing_map(const vertex_descriptor& v) { - //todo ip: calculate curvature for the vertex - //dummy - put(vertex_sizing_map_, vnew, m_sq_short); + // calculating it as the average of two vertices on other ends + // of halfedges as updating is done during an edge split + int i = 0; + FT vertex_size_sq = 0; + CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh) == 2); + for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, m_pmesh)) + { + vertex_size_sq += get(m_vertex_sizing_map, source(ha, m_pmesh)); + ++i; + } + vertex_size_sq /= i; + + put(m_vertex_sizing_map, v, vertex_size_sq); } + //todo ip: is_protected_constraint_too_long() from PR + private: - FT m_sq_short; - FT m_sq_long; + const FT tol; + const FT m_sq_short; + const FT m_sq_long; PolygonMesh& m_pmesh; - VertexSizingMap vertex_sizing_map_; + VertexSizingMap m_vertex_sizing_map; }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index fc6b14a984f5..7f1a8a2abbea 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -30,9 +30,9 @@ class Sizing_field typedef PolygonMesh PM; typedef typename boost::property_map::const_type VPMap; typedef typename boost::property_traits::value_type Point; - typedef typename CGAL::Kernel_traits::Kernel K; public: + typedef typename CGAL::Kernel_traits::Kernel K; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef Point Point_3; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index fbb522b7c787..ce523b30a8a9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -56,6 +56,10 @@ class Uniform_sizing_field : public CGAL::Sizing_field } public: + //todo ip: rewrite to remove this? + void calc_sizing_map() const {} + void update_sizing_map(const vertex_descriptor& vnew) const {} + boost::optional is_too_long(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); @@ -92,7 +96,6 @@ class Uniform_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } - void update_sizing_map(const vertex_descriptor& vnew) const {} //todo ip- rewrite to remove this? private: FT m_sq_short; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 19651ded9ae5..20647a91cb77 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -55,6 +55,9 @@ #include #include +//todo ip: temp +#define CGAL_PMP_REMESHING_VERBOSE + #ifdef CGAL_PMP_REMESHING_DEBUG #include #define CGAL_DUMP_REMESHING_STEPS @@ -536,8 +539,6 @@ namespace internal { //move refinement point vertex_descriptor vnew = target(hnew, mesh_); put(vpmap_, vnew, refinement_point); - //todo ip-add - sizing.update_sizing_map(vnew); #ifdef CGAL_PMP_REMESHING_VERY_VERBOSE std::cout << " Refinement point : " << refinement_point << std::endl; #endif @@ -547,6 +548,9 @@ namespace internal { halfedge_added(hnew, status(he)); halfedge_added(hnew_opp, status(opposite(he, mesh_))); + //todo ip-add: already updating sizing here because of is_too_long checks below + sizing.update_sizing_map(vnew); + //check sub-edges //if it was more than twice the "long" threshold, insert them boost::optional sqlen_new = sizing.is_too_long(hnew); @@ -2014,7 +2018,6 @@ namespace internal { VertexIsConstrainedMap vcmap_; FaceIndexMap fimap_; CGAL_assertion_code(bool input_mesh_is_valid_;) - //todo ip: maybe make sizing field member (reference) here? easier to handle updates };//end class Incremental_remesher }//end namespace internal diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 858f34958109..33f382ac4639 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -212,18 +212,22 @@ void isotropic_remeshing(const FaceRange& faces , const NamedParameters& np = parameters::default_values()) { typedef Uniform_sizing_field Default_sizing; + Default_sizing sizing(target_edge_length, pmesh); isotropic_remeshing( faces, - Default_sizing(target_edge_length, pmesh), + sizing, pmesh, np); } +//todo ip: should I have the overload here? +/* template void isotropic_remeshing(const FaceRange& faces - , const std::pair& edge_len_min_max //todo add defaults? + , const double& tol + , const std::pair& edge_len_min_max , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { @@ -235,6 +239,7 @@ void isotropic_remeshing(const FaceRange& faces pmesh, np); } + */ template Date: Wed, 24 May 2023 20:10:00 +0200 Subject: [PATCH 279/943] Refactor sizing map update --- .../internal/Isotropic_remeshing/Adaptive_sizing_field.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 5724d26ba0df..64ac1ddf5613 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -183,15 +183,13 @@ class Adaptive_sizing_field : public CGAL::Sizing_field { // calculating it as the average of two vertices on other ends // of halfedges as updating is done during an edge split - int i = 0; FT vertex_size_sq = 0; CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh) == 2); for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, m_pmesh)) { vertex_size_sq += get(m_vertex_sizing_map, source(ha, m_pmesh)); - ++i; } - vertex_size_sq /= i; + vertex_size_sq /= CGAL::halfedges_around_target(v, m_pmesh).size(); put(m_vertex_sizing_map, v, vertex_size_sq); } From 52df5ae86eeddea3ae0a08fa79bce3afb668c64c Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 26 May 2023 11:03:27 +0200 Subject: [PATCH 280/943] Fix default remeshing overload --- .../include/CGAL/Polygon_mesh_processing/remesh.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 33f382ac4639..2c31cf4c65f6 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -207,7 +207,7 @@ template void isotropic_remeshing(const FaceRange& faces - , const double& target_edge_length + , const double target_edge_length , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { @@ -355,13 +355,15 @@ void isotropic_remeshing(const FaceRange& faces t.reset(); t.start(); #endif +// sizing.calc_sizing_map(); for (unsigned int i = 0; i < nb_iterations; ++i) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " * Iteration " << (i + 1) << " *" << std::endl; #endif - sizing.calc_sizing_map(); + if (i < 2) + sizing.calc_sizing_map(); if(do_split) remesher.split_long_edges(sizing); if(do_collapse) From 947ab8f1255d7bedea2adb6be919f23f95f3fd7b Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 26 May 2023 18:20:11 +0200 Subject: [PATCH 281/943] Make a (temp) property map for curvature calculation --- .../isotropic_remeshing_with_sizing_example.cpp | 7 ++++--- .../Isotropic_remeshing/Adaptive_sizing_field.h | 14 +++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index fd27430e056d..cfbf7bfd9c77 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -11,9 +11,10 @@ namespace PMP = CGAL::Polygon_mesh_processing; int main(int argc, char* argv[]) { -// const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/pig.off"); +// const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/lion-head.off"); // const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/hand.off"); const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/nefertiti.off"); +// const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/cube.off"); std::ifstream input(filename); Mesh mesh; @@ -25,10 +26,10 @@ int main(int argc, char* argv[]) std::cout << "Start remeshing of " << filename << " (" << num_faces(mesh) << " faces)..." << std::endl; - const double tol = 0.002; + const double tol = 0.001; const std::pair edge_min_max{0.001, 0.5}; PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, mesh); - unsigned int nb_iter = 3; + unsigned int nb_iter = 5; PMP::isotropic_remeshing( faces(mesh), diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 64ac1ddf5613..1cbaf0bce8df 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -91,15 +91,19 @@ class Adaptive_sizing_field : public CGAL::Sizing_field //todo ip: how to make this work? // Vertex_curvature_map vertex_curvature_map; -// interpolated_corrected_principal_curvatures_and_directions(m_pmesh -// , vertex_curvature_map); + + //todo ip: temp workaround + auto vertex_curvature_map = + m_pmesh.template add_property_map>("v:curvature_map").first; + interpolated_corrected_principal_curvatures_and_directions(m_pmesh + , vertex_curvature_map); // calculate square vertex sizing field (L(x_i))^2 from curvature field for(vertex_descriptor v : vertices(m_pmesh)) { -// auto vertex_curv = get(vertex_curvature_map, v); //todo ip: how to make this work? - //todo ip: temp solution - const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); + auto vertex_curv = get(vertex_curvature_map, v); //todo ip: how to make this work? + //todo ip: alt solution - calculate curvature per vertex +// const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); const FT max_absolute_curv = std::max(std::abs(vertex_curv.max_curvature), std::abs(vertex_curv.min_curvature)); const FT vertex_size_sq = 6 * tol / max_absolute_curv - 3 * CGAL::square(tol); if (vertex_size_sq > m_sq_long) From c89bedb97faac6a194086ced0d3cdb063403b913 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 31 May 2023 22:26:23 +0200 Subject: [PATCH 282/943] Replace std with cgal where applicable, fix assertion --- .../Adaptive_sizing_field.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 1cbaf0bce8df..9027fa0e40f3 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -101,10 +101,10 @@ class Adaptive_sizing_field : public CGAL::Sizing_field // calculate square vertex sizing field (L(x_i))^2 from curvature field for(vertex_descriptor v : vertices(m_pmesh)) { - auto vertex_curv = get(vertex_curvature_map, v); //todo ip: how to make this work? + auto vertex_curv = get(vertex_curvature_map, v); //todo ip: alt solution - calculate curvature per vertex // const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); - const FT max_absolute_curv = std::max(std::abs(vertex_curv.max_curvature), std::abs(vertex_curv.min_curvature)); + const FT max_absolute_curv = CGAL::max(CGAL::abs(vertex_curv.max_curvature), CGAL::abs(vertex_curv.min_curvature)); const FT vertex_size_sq = 6 * tol / max_absolute_curv - 3 * CGAL::square(tol); if (vertex_size_sq > m_sq_long) { @@ -138,8 +138,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_long(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = std::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh))); + FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); if(sqlen > sqtarg_len) @@ -152,8 +152,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field const vertex_descriptor& vb) const { const FT sqlen = sqlength(va, vb); - FT sqtarg_len = std::min(get(m_vertex_sizing_map, va), - get(m_vertex_sizing_map, vb)); + FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, va), + get(m_vertex_sizing_map, vb)); CGAL_assertion(get(m_vertex_sizing_map, va)); CGAL_assertion(get(m_vertex_sizing_map, vb)); if (sqlen > 16./9. * sqtarg_len) @@ -165,8 +165,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_short(const halfedge_descriptor& h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = std::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh))); + FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); if (sqlen < 16./25. * sqtarg_len) @@ -188,7 +188,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field // calculating it as the average of two vertices on other ends // of halfedges as updating is done during an edge split FT vertex_size_sq = 0; - CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh) == 2); + CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh).size() == 2); for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, m_pmesh)) { vertex_size_sq += get(m_vertex_sizing_map, source(ha, m_pmesh)); From fa9769b908026cd63c4801ba34fb73b8d2f055c7 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 8 Jun 2023 23:08:40 +0200 Subject: [PATCH 283/943] Prep sizing for tangential relaxation (WIP) --- .../Isotropic_remeshing/remesh_impl.h | 18 +- .../CGAL/Polygon_mesh_processing/remesh.h | 8 +- .../tangential_relaxation.h | 210 ++++++++++++++++++ 3 files changed, 231 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 20647a91cb77..6b2fa17bb0b9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -1012,8 +1012,10 @@ namespace internal { // "applies an iterative smoothing filter to the mesh. // The vertex movement has to be constrained to the vertex tangent plane [...] // smoothing algorithm with uniform Laplacian weights" + template void tangential_relaxation_impl(const bool relax_constraints/*1d smoothing*/ - , const unsigned int nb_iterations) + , const unsigned int nb_iterations + , const SizingFunction& sizing) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << "Tangential relaxation (" << nb_iterations << " iter.)..."; @@ -1044,6 +1046,8 @@ namespace internal { auto constrained_vertices_pmap = boost::make_function_property_map(vertex_constraint); + //todo IP temp: I have to rewrite to include original implementation + /* tangential_relaxation( vertices(mesh_), mesh_, @@ -1054,6 +1058,18 @@ namespace internal { .vertex_is_constrained_map(constrained_vertices_pmap) .relax_constraints(relax_constraints) ); + */ + tangential_relaxation( + vertices(mesh_), + mesh_, + sizing, + CGAL::parameters::number_of_iterations(nb_iterations) + .vertex_point_map(vpmap_) + .geom_traits(gt_) + .edge_is_constrained_map(constrained_edges_pmap) + .vertex_is_constrained_map(constrained_vertices_pmap) + .relax_constraints(relax_constraints) + ); CGAL_assertion(!input_mesh_is_valid_ || is_valid_polygon_mesh(mesh_)); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 2c31cf4c65f6..4f5162482c29 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -355,22 +355,22 @@ void isotropic_remeshing(const FaceRange& faces t.reset(); t.start(); #endif -// sizing.calc_sizing_map(); + sizing.calc_sizing_map(); for (unsigned int i = 0; i < nb_iterations; ++i) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " * Iteration " << (i + 1) << " *" << std::endl; #endif - if (i < 2) - sizing.calc_sizing_map(); +// if (i < 2) +// sizing.calc_sizing_map(); if(do_split) remesher.split_long_edges(sizing); if(do_collapse) remesher.collapse_short_edges(sizing, collapse_constraints); if(do_flip) remesher.flip_edges_for_valence_and_shape(); - remesher.tangential_relaxation_impl(smoothing_1d, nb_laplacian); + remesher.tangential_relaxation_impl(smoothing_1d, nb_laplacian, sizing); if ( choose_parameter(get_parameter(np, internal_np::do_project), true) ) remesher.project_to_surface(get_parameter(np, internal_np::projection_functor)); #ifdef CGAL_PMP_REMESHING_VERBOSE diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index d14e513d347a..19ebdda8650e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -317,6 +317,208 @@ void tangential_relaxation(const VertexRange& vertices, #endif } +template +void tangential_relaxation(const VertexRange& vertices, + TriangleMesh& tm, + const SizingFunction& sizing, + const NamedParameters& np = parameters::default_values()) +{ + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor edge_descriptor; + + using parameters::get_parameter; + using parameters::choose_parameter; + + typedef typename GetGeomTraits::type GT; + GT gt = choose_parameter(get_parameter(np, internal_np::geom_traits), GT()); + + typedef typename GetVertexPointMap::type VPMap; + VPMap vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), + get_property_map(vertex_point, tm)); + + typedef Static_boolean_property_map Default_ECM; + typedef typename internal_np::Lookup_named_param_def < + internal_np::edge_is_constrained_t, + NamedParameters, + Static_boolean_property_map // default (no constraint) + > ::type ECM; + ECM ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), + Default_ECM()); + + typedef typename internal_np::Lookup_named_param_def < + internal_np::vertex_is_constrained_t, + NamedParameters, + Static_boolean_property_map // default (no constraint) + > ::type VCM; + VCM vcm = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), + Static_boolean_property_map()); + + const bool relax_constraints = choose_parameter(get_parameter(np, internal_np::relax_constraints), false); + const unsigned int nb_iterations = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 1); + + typedef typename GT::Vector_3 Vector_3; + typedef typename GT::Point_3 Point_3; + + auto check_normals = [&](vertex_descriptor v) + { + bool first_run = true; + Vector_3 prev = NULL_VECTOR, first = NULL_VECTOR; + halfedge_descriptor first_h = boost::graph_traits::null_halfedge(); + for (halfedge_descriptor hd : CGAL::halfedges_around_target(v, tm)) + { + if (is_border(hd, tm)) continue; + + Vector_3 n = compute_face_normal(face(hd, tm), tm, np); + if (n == CGAL::NULL_VECTOR) //for degenerate faces + continue; + + if (first_run) + { + first_run = false; + first = n; + first_h = hd; + } + else + { + if (!get(ecm, edge(hd, tm))) + if (to_double(n * prev) <= 0) + return false; + } + prev = n; + } + + if (first_run) + return true; //vertex incident only to degenerate faces + + if (!get(ecm, edge(first_h, tm))) + if (to_double(first * prev) <= 0) + return false; + + return true; + }; + + typedef typename internal_np::Lookup_named_param_def < + internal_np::allow_move_functor_t, + NamedParameters, + internal::Allow_all_moves// default + > ::type Shall_move; + Shall_move shall_move = choose_parameter(get_parameter(np, internal_np::allow_move_functor), + internal::Allow_all_moves()); + + for (unsigned int nit = 0; nit < nb_iterations; ++nit) + { +#ifdef CGAL_PMP_TANGENTIAL_RELAXATION_VERBOSE + std::cout << "\r\t(Tangential relaxation iteration " << (nit + 1) << " / "; + std::cout << nb_iterations << ") "; + std::cout.flush(); +#endif + + typedef std::tuple VNP; + std::vector< VNP > barycenters; + auto gt_barycenter = gt.construct_barycenter_3_object(); + + // at each vertex, compute vertex normal + std::unordered_map vnormals; + compute_vertex_normals(tm, boost::make_assoc_property_map(vnormals), np); + + // at each vertex, compute barycenter of neighbors + for(vertex_descriptor v : vertices) + { + if (get(vcm, v) || CGAL::internal::is_isolated(v, tm)) + continue; + + // collect hedges to detect if we have to handle boundary cases + std::vector interior_hedges, border_halfedges; + for(halfedge_descriptor h : halfedges_around_target(v, tm)) + { + if (is_border_edge(h, tm) || get(ecm, edge(h, tm))) + border_halfedges.push_back(h); + else + interior_hedges.push_back(h); + } + + if (border_halfedges.empty()) + { + const Vector_3& vn = vnormals.at(v); + Vector_3 move = CGAL::NULL_VECTOR; + unsigned int star_size = 0; + for(halfedge_descriptor h :interior_hedges) + { + move = move + Vector_3(get(vpm, v), get(vpm, source(h, tm))); + ++star_size; + } + CGAL_assertion(star_size > 0); //isolated vertices have already been discarded + move = (1. / static_cast(star_size)) * move; + + barycenters.emplace_back(v, vn, get(vpm, v) + move); + } + else + { + if (!relax_constraints) continue; + Vector_3 vn(NULL_VECTOR); + + if (border_halfedges.size() == 2)// corners are constrained + { + vertex_descriptor ph0 = source(border_halfedges[0], tm); + vertex_descriptor ph1 = source(border_halfedges[1], tm); + double dot = to_double(Vector_3(get(vpm, v), get(vpm, ph0)) + * Vector_3(get(vpm, v), get(vpm, ph1))); + // \todo shouldn't it be an input parameter? + //check squared cosine is < 0.25 (~120 degrees) + if (0.25 < dot*dot / ( squared_distance(get(vpm,ph0), get(vpm, v)) * + squared_distance(get(vpm,ph1), get(vpm, v))) ) + barycenters.emplace_back(v, vn, + gt_barycenter(get(vpm, ph0), 0.25, get(vpm, ph1), 0.25, get(vpm, v), 0.5)); + } + } + } + + // compute moves + typedef std::pair VP_pair; + std::vector< std::pair > new_locations; + new_locations.reserve(barycenters.size()); + for(const VNP& vnp : barycenters) + { + vertex_descriptor v = std::get<0>(vnp); + const Point_3& pv = get(vpm, v); + const Vector_3& nv = std::get<1>(vnp); + const Point_3& qv = std::get<2>(vnp); //barycenter at v + + new_locations.emplace_back(v, qv + (nv * Vector_3(qv, pv)) * nv); + } + + // perform moves + for(const VP_pair& vp : new_locations) + { + const Point_3 initial_pos = get(vpm, vp.first); // make a copy on purpose + const Vector_3 move(initial_pos, vp.second); + + put(vpm, vp.first, vp.second); + + //check that no inversion happened + double frac = 1.; + while (frac > 0.03 //5 attempts maximum + && ( !check_normals(vp.first) + || !shall_move(vp.first, initial_pos, get(vpm, vp.first)))) //if a face has been inverted + { + frac = 0.5 * frac; + put(vpm, vp.first, initial_pos + frac * move);//shorten the move by 2 + } + if (frac <= 0.02) + put(vpm, vp.first, initial_pos);//cancel move + } + }//end for loop (nit == nb_iterations) + +#ifdef CGAL_PMP_TANGENTIAL_RELAXATION_VERBOSE + std::cout << "\rTangential relaxation : " + << nb_iterations << " iterations done." << std::endl; +#endif +} + /*! * \ingroup PMP_meshing_grp * applies `tangential_relaxation()` to all the vertices of `tm`. @@ -328,6 +530,14 @@ void tangential_relaxation(TriangleMesh& tm, const CGAL_NP_CLASS& np = parameter tangential_relaxation(vertices(tm), tm, np); } +template +void tangential_relaxation(TriangleMesh& tm, const SizingFunction& sizing, const CGAL_NP_CLASS& np = parameters::default_values()) +{ + tangential_relaxation(vertices(tm), tm, sizing, np); +} + } } // CGAL::Polygon_mesh_processing #endif //CGAL_POLYGON_MESH_PROCESSING_TANGENTIAL_RELAXATION_H From 5629f7a04b642c2ca2ddfcc80aa1540088ab5232 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 13 Jun 2023 00:14:23 +0200 Subject: [PATCH 284/943] Add first code for tangential relaxation with sizing (WIP) --- .../Adaptive_sizing_field.h | 5 ++ .../Isotropic_remeshing/remesh_impl.h | 10 ++-- .../CGAL/Polygon_mesh_processing/remesh.h | 1 + .../tangential_relaxation.h | 46 +++++++++++++++---- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 9027fa0e40f3..d49ca57c8dce 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -80,6 +80,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } public: + FT get_sizing(const vertex_descriptor& v) const { + CGAL_assertion(get(m_vertex_sizing_map, v)); + return get(m_vertex_sizing_map, v); + } + void calc_sizing_map() { #ifdef CGAL_PMP_REMESHING_VERBOSE diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 6b2fa17bb0b9..581b9870778c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -1046,8 +1046,9 @@ namespace internal { auto constrained_vertices_pmap = boost::make_function_property_map(vertex_constraint); - //todo IP temp: I have to rewrite to include original implementation - /* + //todo IP temp: I have to rewrite to include original implementation, hardcoded for now + const bool use_sizing = true; + if (!use_sizing) tangential_relaxation( vertices(mesh_), mesh_, @@ -1058,8 +1059,9 @@ namespace internal { .vertex_is_constrained_map(constrained_vertices_pmap) .relax_constraints(relax_constraints) ); - */ - tangential_relaxation( + + else + tangential_relaxation_with_sizing( vertices(mesh_), mesh_, sizing, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 4f5162482c29..975ff7bbf9b0 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -371,6 +371,7 @@ void isotropic_remeshing(const FaceRange& faces if(do_flip) remesher.flip_edges_for_valence_and_shape(); remesher.tangential_relaxation_impl(smoothing_1d, nb_laplacian, sizing); +// remesher.tangential_relaxation_impl(smoothing_1d, nb_laplacian); if ( choose_parameter(get_parameter(np, internal_np::do_project), true) ) remesher.project_to_surface(get_parameter(np, internal_np::projection_functor)); #ifdef CGAL_PMP_REMESHING_VERBOSE diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index 19ebdda8650e..d4f5dd8157a5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -321,7 +321,7 @@ template -void tangential_relaxation(const VertexRange& vertices, +void tangential_relaxation_with_sizing(const VertexRange& vertices, TriangleMesh& tm, const SizingFunction& sizing, const NamedParameters& np = parameters::default_values()) @@ -363,6 +363,12 @@ void tangential_relaxation(const VertexRange& vertices, typedef typename GT::Vector_3 Vector_3; typedef typename GT::Point_3 Point_3; + //todo ip: alt calc + typename GT::Construct_vector_3 vector = gt.construct_vector_3_object(); + typename GT::Compute_scalar_product_3 scalar_product = gt.compute_scalar_product_3_object(); + typename GT::Compute_squared_length_3 squared_length = gt.compute_squared_length_3_object(); + typename GT::Construct_cross_product_vector_3 cross_product = gt.construct_cross_product_vector_3_object(); + auto check_normals = [&](vertex_descriptor v) { bool first_run = true; @@ -420,12 +426,15 @@ void tangential_relaxation(const VertexRange& vertices, typedef std::tuple VNP; std::vector< VNP > barycenters; auto gt_barycenter = gt.construct_barycenter_3_object(); + auto gt_centroid = gt.construct_centroid_3_object(); + auto gt_area = gt.compute_area_3_object(); // at each vertex, compute vertex normal std::unordered_map vnormals; compute_vertex_normals(tm, boost::make_assoc_property_map(vnormals), np); - // at each vertex, compute barycenter of neighbors + // at each vertex, compute centroids of neighbouring faces weighted by + // area and sizing field for(vertex_descriptor v : vertices) { if (get(vcm, v) || CGAL::internal::is_isolated(v, tm)) @@ -441,18 +450,37 @@ void tangential_relaxation(const VertexRange& vertices, interior_hedges.push_back(h); } + //todo ip: handle border edges with sizing field if (border_halfedges.empty()) { const Vector_3& vn = vnormals.at(v); Vector_3 move = CGAL::NULL_VECTOR; - unsigned int star_size = 0; + double weight = 0; +// unsigned int star_size = 0; for(halfedge_descriptor h :interior_hedges) { - move = move + Vector_3(get(vpm, v), get(vpm, source(h, tm))); - ++star_size; + // calculate weight + // need v0, v1 and v2 + const vertex_descriptor v1 = target(next(h, tm), tm); + const vertex_descriptor v2 = source(h, tm); + + //todo ip- alt calc + const Vector_3 vec0 = vector(get(vpm, v), get(vpm, v1)); + const Vector_3 vec1 = vector(get(vpm, v), get(vpm, v2)); + const double sqarea = squared_length(cross_product(vec0, vec1)); + const double face_weight = CGAL::approximate_sqrt(sqarea) + / pow(1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2)), 2); + + //todo ip- paper implementation + // const double tri_area = gt_area(get(vpm, v), get(vpm, v1), get(vpm, v2)); + // const double face_weight = tri_area + // / (1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2))); + weight += face_weight; + + const Point_3 centroid = gt_centroid(get(vpm, v), get(vpm, v1), get(vpm, v2)); + move = move + Vector_3(get(vpm, v), centroid) * face_weight; } - CGAL_assertion(star_size > 0); //isolated vertices have already been discarded - move = (1. / static_cast(star_size)) * move; + move = move / weight; //todo ip: what if weight ends up being close to 0? barycenters.emplace_back(v, vn, get(vpm, v) + move); } @@ -533,9 +561,9 @@ void tangential_relaxation(TriangleMesh& tm, const CGAL_NP_CLASS& np = parameter template -void tangential_relaxation(TriangleMesh& tm, const SizingFunction& sizing, const CGAL_NP_CLASS& np = parameters::default_values()) +void tangential_relaxation_with_sizing(TriangleMesh& tm, const SizingFunction& sizing, const CGAL_NP_CLASS& np = parameters::default_values()) { - tangential_relaxation(vertices(tm), tm, sizing, np); + tangential_relaxation_with_sizing(vertices(tm), tm, sizing, np); } } } // CGAL::Polygon_mesh_processing From cb779038f68d5622e564d8ba6dad5bb4a71e1b1d Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 13 Jun 2023 10:40:33 +0200 Subject: [PATCH 285/943] refs are not needed here Co-authored-by: Sebastien Loriot --- .../Adaptive_sizing_field.h | 18 +++++++++--------- .../Isotropic_remeshing/Sizing_field.h | 10 +++++----- .../Isotropic_remeshing/Uniform_sizing_field.h | 14 +++++++------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index d49ca57c8dce..7c86e1420499 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -66,8 +66,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } private: - FT sqlength(const vertex_descriptor& va, - const vertex_descriptor& vb) const + FT sqlength(const vertex_descriptor va, + const vertex_descriptor vb) const { typename boost::property_map::const_type vpmap = get(CGAL::vertex_point, m_pmesh); @@ -80,7 +80,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } public: - FT get_sizing(const vertex_descriptor& v) const { + FT get_sizing(const vertex_descriptor v) const { CGAL_assertion(get(m_vertex_sizing_map, v)); return get(m_vertex_sizing_map, v); } @@ -140,7 +140,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field #endif } - boost::optional is_too_long(const halfedge_descriptor& h) const + boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), @@ -153,8 +153,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_long(const vertex_descriptor& va, - const vertex_descriptor& vb) const + boost::optional is_too_long(const vertex_descriptor va, + const vertex_descriptor vb) const { const FT sqlen = sqlength(va, vb); FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, va), @@ -167,7 +167,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_short(const halfedge_descriptor& h) const + boost::optional is_too_short(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), @@ -180,7 +180,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor& h) const + virtual Point_3 split_placement(const halfedge_descriptor h) const { typename boost::property_map::const_type vpmap = get(CGAL::vertex_point, m_pmesh); @@ -188,7 +188,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } - void update_sizing_map(const vertex_descriptor& v) + void update_sizing_map(const vertex_descriptor v) { // calculating it as the average of two vertices on other ends // of halfedges as updating is done during an edge split diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index 7f1a8a2abbea..359a9fc6b562 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -39,11 +39,11 @@ class Sizing_field typedef typename K::FT FT; public: - virtual boost::optional is_too_long(const halfedge_descriptor& h) const = 0; - virtual boost::optional is_too_long(const vertex_descriptor& va, - const vertex_descriptor& vb) const = 0; - virtual boost::optional is_too_short(const halfedge_descriptor& h) const = 0; - virtual Point_3 split_placement(const halfedge_descriptor& h) const = 0; + virtual boost::optional is_too_long(const halfedge_descriptor h) const = 0; + virtual boost::optional is_too_long(const vertex_descriptor va, + const vertex_descriptor vb) const = 0; + virtual boost::optional is_too_short(const halfedge_descriptor h) const = 0; + virtual Point_3 split_placement(const halfedge_descriptor h) const = 0; }; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index ce523b30a8a9..cc229583b384 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -42,8 +42,8 @@ class Uniform_sizing_field : public CGAL::Sizing_field {} private: - FT sqlength(const vertex_descriptor& va, - const vertex_descriptor& vb) const + FT sqlength(const vertex_descriptor va, + const vertex_descriptor vb) const { typename boost::property_map::const_type vpmap = get(CGAL::vertex_point, m_pmesh); @@ -60,7 +60,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field void calc_sizing_map() const {} void update_sizing_map(const vertex_descriptor& vnew) const {} - boost::optional is_too_long(const halfedge_descriptor& h) const + boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); if(sqlen > m_sq_long) @@ -69,8 +69,8 @@ class Uniform_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_long(const vertex_descriptor& va, - const vertex_descriptor& vb) const + boost::optional is_too_long(const vertex_descriptor va, + const vertex_descriptor vb) const { const FT sqlen = sqlength(va, vb); if (sqlen > m_sq_long) @@ -79,7 +79,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_short(const halfedge_descriptor& h) const + boost::optional is_too_short(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); if (sqlen < m_sq_long) @@ -88,7 +88,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor& h) const + virtual Point_3 split_placement(const halfedge_descriptor h) const { typename boost::property_map::const_type vpmap = get(CGAL::vertex_point, m_pmesh); From ace36a2bb69388bfcab202e08dd0bd99f79aac8d Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 20 Jun 2023 18:08:20 +0200 Subject: [PATCH 286/943] Make tangential relaxation work with both uniform and adaptive sizing field --- .../Uniform_sizing_field.h | 1 + .../Isotropic_remeshing/remesh_impl.h | 53 ++++++++++--------- .../CGAL/Polygon_mesh_processing/remesh.h | 25 +-------- .../tangential_relaxation.h | 24 +++++---- 4 files changed, 43 insertions(+), 60 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index cc229583b384..8fd4bf2334c1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -59,6 +59,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field //todo ip: rewrite to remove this? void calc_sizing_map() const {} void update_sizing_map(const vertex_descriptor& vnew) const {} + double get_sizing(vertex_descriptor v) const {return 1.;} boost::optional is_too_long(const halfedge_descriptor h) const { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 581b9870778c..76e285176346 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -75,7 +75,11 @@ #endif namespace CGAL { + namespace Polygon_mesh_processing { + +template class Uniform_sizing_field; + namespace internal { enum Halfedge_status { @@ -1012,7 +1016,7 @@ namespace internal { // "applies an iterative smoothing filter to the mesh. // The vertex movement has to be constrained to the vertex tangent plane [...] // smoothing algorithm with uniform Laplacian weights" - template + template void tangential_relaxation_impl(const bool relax_constraints/*1d smoothing*/ , const unsigned int nb_iterations , const SizingFunction& sizing) @@ -1046,32 +1050,29 @@ namespace internal { auto constrained_vertices_pmap = boost::make_function_property_map(vertex_constraint); - //todo IP temp: I have to rewrite to include original implementation, hardcoded for now - const bool use_sizing = true; - if (!use_sizing) - tangential_relaxation( - vertices(mesh_), - mesh_, - CGAL::parameters::number_of_iterations(nb_iterations) - .vertex_point_map(vpmap_) - .geom_traits(gt_) - .edge_is_constrained_map(constrained_edges_pmap) - .vertex_is_constrained_map(constrained_vertices_pmap) - .relax_constraints(relax_constraints) - ); - + if (std::is_same>::value) + tangential_relaxation( + vertices(mesh_), + mesh_, + CGAL::parameters::number_of_iterations(nb_iterations) + .vertex_point_map(vpmap_) + .geom_traits(gt_) + .edge_is_constrained_map(constrained_edges_pmap) + .vertex_is_constrained_map(constrained_vertices_pmap) + .relax_constraints(relax_constraints) + ); else - tangential_relaxation_with_sizing( - vertices(mesh_), - mesh_, - sizing, - CGAL::parameters::number_of_iterations(nb_iterations) - .vertex_point_map(vpmap_) - .geom_traits(gt_) - .edge_is_constrained_map(constrained_edges_pmap) - .vertex_is_constrained_map(constrained_vertices_pmap) - .relax_constraints(relax_constraints) - ); + tangential_relaxation_with_sizing( + vertices(mesh_), + mesh_, + sizing, + CGAL::parameters::number_of_iterations(nb_iterations) + .vertex_point_map(vpmap_) + .geom_traits(gt_) + .edge_is_constrained_map(constrained_edges_pmap) + .vertex_is_constrained_map(constrained_vertices_pmap) + .relax_constraints(relax_constraints) + ); CGAL_assertion(!input_mesh_is_valid_ || is_valid_polygon_mesh(mesh_)); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 975ff7bbf9b0..787fe54b9930 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -220,27 +220,6 @@ void isotropic_remeshing(const FaceRange& faces np); } -//todo ip: should I have the overload here? -/* -template -void isotropic_remeshing(const FaceRange& faces - , const double& tol - , const std::pair& edge_len_min_max - , PolygonMesh& pmesh - , const NamedParameters& np = parameters::default_values()) -{ - typedef Adaptive_sizing_field Adaptive_sizing; - Adaptive_sizing sizing(edge_len_min_max, pmesh); - isotropic_remeshing( - faces, - sizing, - pmesh, - np); -} - */ - template +template void tangential_relaxation_with_sizing(const VertexRange& vertices, - TriangleMesh& tm, - const SizingFunction& sizing, - const NamedParameters& np = parameters::default_values()) + TriangleMesh& tm, + const SizingFunction& sizing, + const NamedParameters& np = parameters::default_values()) { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; @@ -558,10 +558,12 @@ void tangential_relaxation(TriangleMesh& tm, const CGAL_NP_CLASS& np = parameter tangential_relaxation(vertices(tm), tm, np); } -template -void tangential_relaxation_with_sizing(TriangleMesh& tm, const SizingFunction& sizing, const CGAL_NP_CLASS& np = parameters::default_values()) +template +void tangential_relaxation_with_sizing(TriangleMesh& tm, + const SizingFunction& sizing, + const CGAL_NP_CLASS& np = parameters::default_values()) { tangential_relaxation_with_sizing(vertices(tm), tm, sizing, np); } From 73fd72feb9933c6c556b691e747eb32918096df0 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 21 Jun 2023 16:45:42 +0200 Subject: [PATCH 287/943] Add constexpr to differentiate uniform and adaptive fields --- .../Adaptive_sizing_field.h | 2 +- .../Uniform_sizing_field.h | 5 --- .../Isotropic_remeshing/remesh_impl.h | 33 +++++++++++++------ .../CGAL/Polygon_mesh_processing/remesh.h | 1 + 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 7c86e1420499..bbc33ee21630 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -147,7 +147,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field get(m_vertex_sizing_map, target(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); - if(sqlen > sqtarg_len) + if(sqlen > 16./9. * sqtarg_len) return sqlen; else return boost::none; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h index 8fd4bf2334c1..a36c30aa712c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h @@ -56,11 +56,6 @@ class Uniform_sizing_field : public CGAL::Sizing_field } public: - //todo ip: rewrite to remove this? - void calc_sizing_map() const {} - void update_sizing_map(const vertex_descriptor& vnew) const {} - double get_sizing(vertex_descriptor v) const {return 1.;} - boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 76e285176346..aec9ca3b5d93 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -553,7 +553,8 @@ namespace internal { halfedge_added(hnew_opp, status(opposite(he, mesh_))); //todo ip-add: already updating sizing here because of is_too_long checks below - sizing.update_sizing_map(vnew); + if constexpr (!std::is_same>::value) + sizing.update_sizing_map(vnew); //check sub-edges //if it was more than twice the "long" threshold, insert them @@ -1050,18 +1051,29 @@ namespace internal { auto constrained_vertices_pmap = boost::make_function_property_map(vertex_constraint); - if (std::is_same>::value) + if constexpr (std::is_same>::value) + { +#ifdef CGAL_PMP_REMESHING_VERBOSE + std::cout << " using tangential relaxation with weights equal to 1"; + std::cout << std::endl; +#endif tangential_relaxation( - vertices(mesh_), - mesh_, - CGAL::parameters::number_of_iterations(nb_iterations) - .vertex_point_map(vpmap_) - .geom_traits(gt_) - .edge_is_constrained_map(constrained_edges_pmap) - .vertex_is_constrained_map(constrained_vertices_pmap) - .relax_constraints(relax_constraints) + vertices(mesh_), + mesh_, + CGAL::parameters::number_of_iterations(nb_iterations) + .vertex_point_map(vpmap_) + .geom_traits(gt_) + .edge_is_constrained_map(constrained_edges_pmap) + .vertex_is_constrained_map(constrained_vertices_pmap) + .relax_constraints(relax_constraints) ); + } else + { +#ifdef CGAL_PMP_REMESHING_VERBOSE + std::cout << " using tangential relaxation weighted with the sizing field"; + std::cout << std::endl; +#endif tangential_relaxation_with_sizing( vertices(mesh_), mesh_, @@ -1073,6 +1085,7 @@ namespace internal { .vertex_is_constrained_map(constrained_vertices_pmap) .relax_constraints(relax_constraints) ); + } CGAL_assertion(!input_mesh_is_valid_ || is_valid_polygon_mesh(mesh_)); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 787fe54b9930..e751a294445c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -334,6 +334,7 @@ void isotropic_remeshing(const FaceRange& faces t.reset(); t.start(); #endif + if constexpr (!std::is_same>::value) sizing.calc_sizing_map(); for (unsigned int i = 0; i < nb_iterations; ++i) From 0fbcb4175c40bf6561df5213e08753464daf732a Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 29 Jun 2023 19:52:25 +0200 Subject: [PATCH 288/943] Add UI support for adaptive remeshing in Polyhedron demo (WIP) --- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 19 +- .../Plugins/PMP/Isotropic_remeshing_dialog.ui | 225 +++++++++++++----- .../PMP/Isotropic_remeshing_plugin.cpp | 56 ++++- 3 files changed, 227 insertions(+), 73 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 6d5b6cf16d47..354e6641bd62 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -135,14 +135,19 @@ qt5_wrap_ui( repairUI_FILES RemoveNeedlesDialog.ui SelfSnapDialog.ui) polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin ${repairUI_FILES} KEYWORDS PMP) target_link_libraries(repair_polyhedron_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item) -qt5_wrap_ui(isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) -polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin - ${isotropicRemeshingUI_FILES} KEYWORDS PMP) -target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_surface_mesh_item - scene_selection_item) +if(TARGET CGAL::Eigen3_support) + qt5_wrap_ui(isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) + polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin + ${isotropicRemeshingUI_FILES} KEYWORDS PMP) + target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_surface_mesh_item + scene_selection_item CGAL::Eigen3_support) + + if(TARGET CGAL::TBB_support) + target_link_libraries(isotropic_remeshing_plugin PUBLIC CGAL::TBB_support) + endif() -if(TARGET CGAL::TBB_support) - target_link_libraries(isotropic_remeshing_plugin PUBLIC CGAL::TBB_support) +else() + message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Isotropic remeshing plugin will not be available.") endif() polyhedron_demo_plugin(distance_plugin Distance_plugin KEYWORDS PMP) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui index a35ec28d9669..540a52c1bff9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui @@ -9,8 +9,8 @@ 0 0 - 376 - 369 + 381 + 545 @@ -59,18 +59,117 @@ Isotropic remeshing - - - + + + + + -1 + + + QLayout::SetDefaultConstraint + + + 11 + + + 14 + + + + + Edge sizing + + + + + + + + 0 + 0 + + + + + 168 + 16777215 + + + + + Uniform + + + + + Adaptive + + + + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Maximum + + + + 20 + 24 + + + + + + - Preserve duplicated edges + Error tolerance - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + 0.00 - + + + + Minimum edge length + + + + + + + + + + + 0 @@ -83,24 +182,27 @@ - - + + + + true + - - + + - Target edge length + Number of Smoothing iterations Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + Protect borders/selected edges @@ -110,17 +212,34 @@ - - + + - Number of Smoothing iterations + + + + + + + + Allow 1D smoothing along borders Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + + + + Preserve duplicated edges + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + @@ -133,17 +252,7 @@ - - - - Allow 1D smoothing along borders - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - + Number of Main iterations @@ -156,40 +265,17 @@ - - - - - - - - - + + - + Target edge length - - true + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - Qt::Vertical - - - QSizePolicy::Maximum - - - - 20 - 40 - - - - - + Qt::ImhNone @@ -205,6 +291,27 @@ + + + + Maximum edge length + + + + + + + 0.00 + + + + + + + 0.00 + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index f1b138c16728..2022de8f9b81 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -825,6 +825,9 @@ public Q_SLOTS: bool edges_only_; double target_length_; + double error_tol_; + double min_length_; + double max_length_; unsigned int nb_iter_; bool protect_; bool smooth_features_; @@ -986,6 +989,32 @@ public Q_SLOTS: } } + void on_edgeSizing_type_combo_box_changed(int index) + { + if (index == 0) + { + ui.edgeLength_label->show(); + ui.edgeLength_dspinbox->show(); + ui.errorTol_label->hide(); + ui.errorTol_edit->hide(); + ui.minEdgeLength_label->hide(); + ui.minEdgeLength_edit->hide(); + ui.maxEdgeLength_label->hide(); + ui.maxEdgeLength_edit->hide(); + } + else if (index == 1) + { + ui.edgeLength_label->hide(); + ui.edgeLength_dspinbox->hide(); + ui.errorTol_label->show(); + ui.errorTol_edit->show(); + ui.minEdgeLength_label->show(); + ui.minEdgeLength_edit->show(); + ui.maxEdgeLength_label->show(); + ui.maxEdgeLength_edit->show(); + } + } + public: void initialize_remeshing_dialog(QDialog* dialog, @@ -1004,6 +1033,8 @@ public Q_SLOTS: connect(ui.protect_checkbox, SIGNAL(clicked(bool)), this, SLOT(update_after_protect_checkbox_click())); connect(ui.splitEdgesOnly_checkbox, SIGNAL(clicked(bool)), this, SLOT(update_after_splitEdgesOnly_click())); + connect(ui.edgeSizing_type_combo_box, SIGNAL(currentIndexChanged(int)), + this, SLOT(on_edgeSizing_type_combo_box_changed(int))); //Set default parameters Scene_interface::Bbox bbox = poly_item != nullptr ? poly_item->bbox() @@ -1025,17 +1056,29 @@ public Q_SLOTS: ui.edgeLength_dspinbox->setValue(0.05 * diago_length); - - std::ostringstream oss; - oss << "Diagonal length of the Bbox of the selection to remesh is "; - oss << diago_length << "." << std::endl; - oss << "Default is 5% of it" << std::endl; - ui.edgeLength_dspinbox->setToolTip(QString::fromStdString(oss.str())); + //todo ip - check and adjust these + ui.errorTol_edit->setValue(0.001 * diago_length); + ui.minEdgeLength_edit->setValue(0.001 * diago_length); + ui.maxEdgeLength_edit->setValue(0.5 * diago_length); + + std::string diag_general_info = "Diagonal length of the Bbox of the selection to remesh is " + + std::to_string(diago_length) + ".\n"; + std::string specific_info; + specific_info = "Default is 5% of it\n"; + ui.edgeLength_dspinbox->setToolTip(QString::fromStdString(diag_general_info + specific_info)); + specific_info = "Default is 0.1% of it\n"; + ui.errorTol_edit->setToolTip(QString::fromStdString(diag_general_info + specific_info)); + specific_info = "Default is 0.1% of it\n"; + ui.minEdgeLength_edit->setToolTip(QString::fromStdString(diag_general_info + specific_info)); + specific_info = "Default is 50% of it\n"; + ui.maxEdgeLength_edit->setToolTip(QString::fromStdString(diag_general_info + specific_info)); ui.nbIterations_spinbox->setSingleStep(1); ui.nbIterations_spinbox->setRange(1/*min*/, 1000/*max*/); ui.nbIterations_spinbox->setValue(1); + ui.edgeSizing_type_combo_box->setCurrentIndex(0); + on_edgeSizing_type_combo_box_changed(0); //todo ip otherwise it shows all remeshing variables ui.protect_checkbox->setChecked(false); ui.smooth1D_checkbox->setChecked(true); @@ -1047,7 +1090,6 @@ public Q_SLOTS: } } - private: QAction* actionIsotropicRemeshing_; Ui::Isotropic_remeshing_dialog ui; From 91216f7875062236e473e8154e7a0924bf88b86f Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 30 Jun 2023 21:15:37 +0200 Subject: [PATCH 289/943] Add adaptive remeshing to Polyhedorn demo, PMP plugin --- .../tangential_relaxation.h | 16 +- .../PMP/Isotropic_remeshing_plugin.cpp | 285 ++++++++++++++---- 2 files changed, 226 insertions(+), 75 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index deb21383c714..d2e955841f11 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -465,16 +465,16 @@ void tangential_relaxation_with_sizing(const VertexRange& vertices, const vertex_descriptor v2 = source(h, tm); //todo ip- alt calc - const Vector_3 vec0 = vector(get(vpm, v), get(vpm, v1)); - const Vector_3 vec1 = vector(get(vpm, v), get(vpm, v2)); - const double sqarea = squared_length(cross_product(vec0, vec1)); - const double face_weight = CGAL::approximate_sqrt(sqarea) - / pow(1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2)), 2); +// const Vector_3 vec0 = vector(get(vpm, v), get(vpm, v1)); +// const Vector_3 vec1 = vector(get(vpm, v), get(vpm, v2)); +// const double sqarea = squared_length(cross_product(vec0, vec1)); +// const double face_weight = CGAL::approximate_sqrt(sqarea) +// / pow(1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2)), 2); //todo ip- paper implementation - // const double tri_area = gt_area(get(vpm, v), get(vpm, v1), get(vpm, v2)); - // const double face_weight = tri_area - // / (1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2))); + const double tri_area = gt_area(get(vpm, v), get(vpm, v1), get(vpm, v2)); + const double face_weight = tri_area + / (1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2))); weight += face_weight; const Point_3 centroid = gt_centroid(get(vpm, v), get(vpm, v1), get(vpm, v2)); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 2022de8f9b81..813434a4c6ca 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -358,9 +358,13 @@ public Q_SLOTS: return; } + int edge_sizing_type = ui.edgeSizing_type_combo_box->currentIndex(); bool edges_only = ui.splitEdgesOnly_checkbox->isChecked(); bool preserve_duplicates = ui.preserveDuplicates_checkbox->isChecked(); double target_length = ui.edgeLength_dspinbox->value(); + double error_tol = ui.errorTol_edit->value(); + double min_length = ui.minEdgeLength_edit->value(); + double max_length = ui.maxEdgeLength_edit->value(); unsigned int nb_iter = ui.nbIterations_spinbox->value(); unsigned int nb_smooth = ui.nbSmoothing_spinbox->value(); bool protect = ui.protect_checkbox->isChecked(); @@ -457,28 +461,60 @@ public Q_SLOTS: } } - if (fpmap_valid) - CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) - , target_length - , *selection_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter) - .protect_constraints(protect) - .edge_is_constrained_map(selection_item->constrained_edges_pmap()) - .relax_constraints(smooth_features) - .number_of_relaxation_steps(nb_smooth) - .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) - .face_patch_map(fpmap)); - else - CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) - , target_length - , *selection_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter) - .protect_constraints(protect) - .edge_is_constrained_map(selection_item->constrained_edges_pmap()) - .relax_constraints(smooth_features) - .number_of_relaxation_steps(nb_smooth) - .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) - ); + if (edge_sizing_type == 0) + { + if (fpmap_valid) + CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) + , target_length + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + .face_patch_map(fpmap)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) + , target_length + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + ); + } + else if (edge_sizing_type == 1) + { + std::pair edge_min_max{min_length, max_length}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + , edge_min_max + , *selection_item->polyhedron()); + if (fpmap_valid) + CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) + , adaptive_sizing_field + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + .face_patch_map(fpmap)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) + , adaptive_sizing_field + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + ); + } } else //selected_facets not empty { @@ -507,27 +543,60 @@ public Q_SLOTS: } } - if (fpmap_valid) - CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets - , target_length - , *selection_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter) - .protect_constraints(protect) - .edge_is_constrained_map(selection_item->constrained_edges_pmap()) - .relax_constraints(smooth_features) - .number_of_relaxation_steps(nb_smooth) - .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) - .face_patch_map(fpmap)); - else - CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets - , target_length - , *selection_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter) - .protect_constraints(protect) - .edge_is_constrained_map(selection_item->constrained_edges_pmap()) - .relax_constraints(smooth_features) - .number_of_relaxation_steps(nb_smooth) - .vertex_is_constrained_map(selection_item->constrained_vertices_pmap())); + if (edge_sizing_type == 0) + { + if (fpmap_valid) + CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets + , target_length + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + .face_patch_map(fpmap)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets + , target_length + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + ); + } + else if (edge_sizing_type == 1) + { + std::pair edge_min_max{min_length, max_length}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + , edge_min_max + , *selection_item->polyhedron()); + if (fpmap_valid) + CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets + , adaptive_sizing_field + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + .face_patch_map(fpmap)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets + , adaptive_sizing_field + , *selection_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .edge_is_constrained_map(selection_item->constrained_edges_pmap()) + .relax_constraints(smooth_features) + .number_of_relaxation_steps(nb_smooth) + .vertex_is_constrained_map(selection_item->constrained_vertices_pmap()) + ); + } } } @@ -634,10 +703,40 @@ public Q_SLOTS: } } - if (fpmap_valid) + if (edge_sizing_type == 0) + { + if (fpmap_valid) + CGAL::Polygon_mesh_processing::isotropic_remeshing( + faces(*poly_item->polyhedron()) + , target_length + , *poly_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .number_of_relaxation_steps(nb_smooth) + .edge_is_constrained_map(ecm) + .relax_constraints(smooth_features) + .face_patch_map(fpmap)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing( + faces(*poly_item->polyhedron()) + , target_length + , *poly_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .number_of_relaxation_steps(nb_smooth) + .edge_is_constrained_map(ecm) + .relax_constraints(smooth_features)); + } + else if (edge_sizing_type == 1) + { + std::pair edge_min_max{min_length, max_length}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + , edge_min_max + , *poly_item->polyhedron()); + if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing( faces(*poly_item->polyhedron()) - , target_length + , adaptive_sizing_field , *poly_item->polyhedron() , CGAL::parameters::number_of_iterations(nb_iter) .protect_constraints(protect) @@ -645,16 +744,17 @@ public Q_SLOTS: .edge_is_constrained_map(ecm) .relax_constraints(smooth_features) .face_patch_map(fpmap)); - else - CGAL::Polygon_mesh_processing::isotropic_remeshing( - faces(*poly_item->polyhedron()) - , target_length - , *poly_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter) - .protect_constraints(protect) - .number_of_relaxation_steps(nb_smooth) - .edge_is_constrained_map(ecm) - .relax_constraints(smooth_features)); + else + CGAL::Polygon_mesh_processing::isotropic_remeshing( + faces(*poly_item->polyhedron()) + , adaptive_sizing_field + , *poly_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter) + .protect_constraints(protect) + .number_of_relaxation_steps(nb_smooth) + .edge_is_constrained_map(ecm) + .relax_constraints(smooth_features)); + } //recollect sharp edges for(edge_descriptor e : edges(pmesh)) @@ -687,7 +787,11 @@ public Q_SLOTS: { // Remeshing parameters bool edges_only = false, preserve_duplicates = false; + int edge_sizing_type = 0; double target_length = 0.; + double error_tol = 0.; + double min_length = 0.; + double max_length = 0.; unsigned int nb_iter = 1; bool protect = false; bool smooth_features = true; @@ -723,7 +827,11 @@ public Q_SLOTS: edges_only = ui.splitEdgesOnly_checkbox->isChecked(); preserve_duplicates = ui.preserveDuplicates_checkbox->isChecked(); + edge_sizing_type = ui.edgeSizing_type_combo_box->currentIndex(); target_length = ui.edgeLength_dspinbox->value(); + error_tol = ui.errorTol_edit->value(); + min_length = ui.minEdgeLength_edit->value(); + max_length = ui.maxEdgeLength_edit->value(); nb_iter = ui.nbIterations_spinbox->value(); protect = ui.protect_checkbox->isChecked(); smooth_features = ui.smooth1D_checkbox->isChecked(); @@ -785,8 +893,8 @@ public Q_SLOTS: #else - Remesh_polyhedron_item remesher(edges_only, - target_length, nb_iter, protect, smooth_features); + Remesh_polyhedron_item remesher(edges_only, edge_sizing_type, + target_length, error_tol, min_length, max_length, nb_iter, protect, smooth_features); for(Scene_facegraph_item* poly_item : selection) { QElapsedTimer time; @@ -823,6 +931,7 @@ public Q_SLOTS: typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef boost::graph_traits::face_descriptor face_descriptor; + int edge_sizing_type_; bool edges_only_; double target_length_; double error_tol_; @@ -859,15 +968,34 @@ public Q_SLOTS: std::cout << "Isotropic remeshing of " << poly_item->name().toStdString() << " started..." << std::endl; Scene_polyhedron_selection_item::Is_constrained_map ecm(&edges_to_protect); - CGAL::Polygon_mesh_processing::isotropic_remeshing( - faces(*poly_item->polyhedron()) - , target_length_ - , *poly_item->polyhedron() - , CGAL::parameters::number_of_iterations(nb_iter_) - .protect_constraints(protect_) - .edge_is_constrained_map(ecm) - .face_patch_map(get(CGAL::face_patch_id_t(), *poly_item->polyhedron())) - .relax_constraints(smooth_features_)); + if (edge_sizing_type_ == 0) + { + CGAL::Polygon_mesh_processing::isotropic_remeshing( + faces(*poly_item->polyhedron()) + , target_length_ + , *poly_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter_) + .protect_constraints(protect_) + .edge_is_constrained_map(ecm) + .face_patch_map(get(CGAL::face_patch_id_t(), *poly_item->polyhedron())) + .relax_constraints(smooth_features_)); + } + else + { + std::pair edge_min_max{min_length_, max_length_}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ + , edge_min_max + , *poly_item->polyhedron()); + CGAL::Polygon_mesh_processing::isotropic_remeshing( + faces(*poly_item->polyhedron()) + , target_length_ + , *poly_item->polyhedron() + , CGAL::parameters::number_of_iterations(nb_iter_) + .protect_constraints(protect_) + .edge_is_constrained_map(ecm) + .face_patch_map(get(CGAL::face_patch_id_t(), *poly_item->polyhedron())) + .relax_constraints(smooth_features_)); + } std::cout << "Isotropic remeshing of " << poly_item->name().toStdString() << " done." << std::endl; } @@ -876,12 +1004,20 @@ public Q_SLOTS: public: Remesh_polyhedron_item( const bool edges_only, + const int edge_sizing_type, const double target_length, + const double error_tol, + const double min_length, + const double max_length, const unsigned int nb_iter, const bool protect, const bool smooth_features) : edges_only_(edges_only) + , edge_sizing_type_(edge_sizing_type) , target_length_(target_length) + , error_tol_(error_tol) + , min_length_(min_length) + , max_length_(max_length) , nb_iter_(nb_iter) , protect_(protect) , smooth_features_(smooth_features) @@ -889,7 +1025,11 @@ public Q_SLOTS: Remesh_polyhedron_item(const Remesh_polyhedron_item& remesh) : edges_only_(remesh.edges_only_) + , edge_sizing_type_(remesh.edge_sizing_type_) , target_length_(remesh.target_length_) + , error_tol_(remesh.error_tol_) + , min_length_(remesh.min_length_) + , max_length_(remesh.max_length_) , nb_iter_(remesh.nb_iter_) , protect_(remesh.protect_) , smooth_features_(remesh.smooth_features_) @@ -916,11 +1056,17 @@ public Q_SLOTS: const std::vector& selection, std::map& edges_to_protect, const bool edges_only, + const int edge_sizing_type, const double target_length, + const double error_tol, + const double min_length, + const double max_length, const unsigned int nb_iter, const bool protect, const bool smooth_features) - : RemeshFunctor(edges_only, target_length, nb_iter, protect, smooth_features) + : RemeshFunctor(edges_only, edge_sizing_type, target_length + , error_tol, min_length, max_length + , nb_iter, protect, smooth_features) , selection_(selection), edges_to_protect_(edges_to_protect) {} @@ -973,6 +1119,9 @@ public Q_SLOTS: ui.smooth1D_label->setEnabled(false); ui.smooth1D_checkbox->setEnabled(false); ui.smooth1D_checkbox->setChecked(false); + + ui.edgeSizing_type_combo_box->setCurrentIndex(0); + ui.edgeSizing_type_combo_box->setEnabled(false); } else { @@ -986,6 +1135,8 @@ public Q_SLOTS: ui.smooth1D_label->setEnabled(true); ui.smooth1D_checkbox->setEnabled(true); + + ui.edgeSizing_type_combo_box->setEnabled(true); } } From c8a96328bd48746247b5c48911e1c5090dd60b0f Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 30 Jun 2023 21:26:10 +0200 Subject: [PATCH 290/943] Use C++17 CTAD in example --- .../isotropic_remeshing_with_sizing_example.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index cfbf7bfd9c77..bbb86c89692c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -27,8 +27,8 @@ int main(int argc, char* argv[]) << " (" << num_faces(mesh) << " faces)..." << std::endl; const double tol = 0.001; - const std::pair edge_min_max{0.001, 0.5}; - PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, mesh); + const std::pair edge_min_max{0.001, 0.5}; + PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, mesh); unsigned int nb_iter = 5; PMP::isotropic_remeshing( From 06db84f717720aafffdadea1c4e5286ebfe15505 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 3 Jul 2023 17:35:02 +0200 Subject: [PATCH 291/943] Fix sizing field calculation --- .../Adaptive_sizing_field.h | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index bbc33ee21630..4a343d5a22ff 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -58,8 +58,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field , const std::pair& edge_len_min_max , PolygonMesh& pmesh) : tol(tol) - , m_sq_short(CGAL::square(edge_len_min_max.first)) - , m_sq_long( CGAL::square(edge_len_min_max.second)) + , m_short(edge_len_min_max.first) + , m_long(edge_len_min_max.second) , m_pmesh(pmesh) { m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); @@ -111,23 +111,23 @@ class Adaptive_sizing_field : public CGAL::Sizing_field // const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); const FT max_absolute_curv = CGAL::max(CGAL::abs(vertex_curv.max_curvature), CGAL::abs(vertex_curv.min_curvature)); const FT vertex_size_sq = 6 * tol / max_absolute_curv - 3 * CGAL::square(tol); - if (vertex_size_sq > m_sq_long) + if (vertex_size_sq > CGAL::square(m_long)) { - put(m_vertex_sizing_map, v, m_sq_long); + put(m_vertex_sizing_map, v, m_long); #ifdef CGAL_PMP_REMESHING_VERBOSE ++oversize; #endif } - else if (vertex_size_sq < m_sq_short) + else if (vertex_size_sq < CGAL::square(m_short)) { - put(m_vertex_sizing_map, v, m_sq_short); + put(m_vertex_sizing_map, v, m_short); #ifdef CGAL_PMP_REMESHING_VERBOSE ++undersize; #endif } else { - put(m_vertex_sizing_map, v, vertex_size_sq); + put(m_vertex_sizing_map, v, CGAL::approximate_sqrt(vertex_size_sq)); #ifdef CGAL_PMP_REMESHING_VERBOSE ++insize; #endif @@ -143,11 +143,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh))); + FT sqtarg_len = CGAL::square(4./3. * CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh)))); CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); - if(sqlen > 16./9. * sqtarg_len) + if(sqlen > sqtarg_len) return sqlen; else return boost::none; @@ -157,11 +157,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field const vertex_descriptor vb) const { const FT sqlen = sqlength(va, vb); - FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, va), - get(m_vertex_sizing_map, vb)); + FT sqtarg_len = CGAL::square(4./3. * CGAL::min(get(m_vertex_sizing_map, va), + get(m_vertex_sizing_map, vb))); CGAL_assertion(get(m_vertex_sizing_map, va)); CGAL_assertion(get(m_vertex_sizing_map, vb)); - if (sqlen > 16./9. * sqtarg_len) + if (sqlen > sqtarg_len) return sqlen; else return boost::none; @@ -170,11 +170,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field boost::optional is_too_short(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); - FT sqtarg_len = CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh))); + FT sqtarg_len = CGAL::square(4./5. * CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), + get(m_vertex_sizing_map, target(h, m_pmesh)))); CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); - if (sqlen < 16./25. * sqtarg_len) + if (sqlen < sqtarg_len) return sqlen; else return boost::none; @@ -192,23 +192,23 @@ class Adaptive_sizing_field : public CGAL::Sizing_field { // calculating it as the average of two vertices on other ends // of halfedges as updating is done during an edge split - FT vertex_size_sq = 0; + FT vertex_size = 0; CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh).size() == 2); for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, m_pmesh)) { - vertex_size_sq += get(m_vertex_sizing_map, source(ha, m_pmesh)); + vertex_size += get(m_vertex_sizing_map, source(ha, m_pmesh)); } - vertex_size_sq /= CGAL::halfedges_around_target(v, m_pmesh).size(); + vertex_size /= CGAL::halfedges_around_target(v, m_pmesh).size(); - put(m_vertex_sizing_map, v, vertex_size_sq); + put(m_vertex_sizing_map, v, vertex_size); } //todo ip: is_protected_constraint_too_long() from PR private: const FT tol; - const FT m_sq_short; - const FT m_sq_long; + const FT m_short; + const FT m_long; PolygonMesh& m_pmesh; VertexSizingMap m_vertex_sizing_map; }; From 677bb04ee8c99035f4bc2f6dc40db9182fdd8e1a Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 5 Jul 2023 11:34:14 +0200 Subject: [PATCH 292/943] (WIP) figuring out FaceRange curvature calculation --- .../Adaptive_sizing_field.h | 70 ++++++++++--------- .../CGAL/Polygon_mesh_processing/remesh.h | 3 +- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 4a343d5a22ff..3cec50bdd17a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -37,33 +37,28 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename Base::Point_3 Point_3; typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; + //todo ip: send this over to Sizing_field to be consistent + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; typedef typename boost::property_map::type VertexSizingMap; + Vertex_property_tag>::type Vertex_sizing_map; - //todo ip: set a property map that can calculate curvature in one go. I think I'm generating constant maps (without put) - // try 1 typedef Principal_curvatures_and_directions Principal_curvatures; -// typedef Constant_property_map Vertex_curvature_map; - - // try 2 - typedef Constant_property_map> Default_principal_map; - typedef typename internal_np::Lookup_named_param_def::type - Vertex_curvature_map; + typedef typename CGAL::dynamic_vertex_property_t Vertex_curvature_tag; + typedef typename boost::property_map, + Vertex_curvature_tag>::type Vertex_curvature_map; Adaptive_sizing_field(const double tol , const std::pair& edge_len_min_max , PolygonMesh& pmesh) - : tol(tol) - , m_short(edge_len_min_max.first) - , m_long(edge_len_min_max.second) - , m_pmesh(pmesh) - { - m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); - } + : tol(tol) + , m_short(edge_len_min_max.first) + , m_long(edge_len_min_max.second) + , m_pmesh(pmesh) + { + m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); + } private: FT sqlength(const vertex_descriptor va, @@ -85,7 +80,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return get(m_vertex_sizing_map, v); } - void calc_sizing_map() + template + void calc_sizing_map(const FaceRange& faces) { #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; @@ -94,22 +90,32 @@ class Adaptive_sizing_field : public CGAL::Sizing_field std::cout << "Calculating sizing field..." << std::endl; #endif - //todo ip: how to make this work? -// Vertex_curvature_map vertex_curvature_map; + ////// IP: How to sort this out? + ///// FaceRange->expand->Face_filtered_graph->use ffg onwards +// CGAL::make_boolean_property_map(faces); // IP: this does not compile + std::vector selection; + auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); + for (face_descriptor f : faces) + put(is_selected, f, false); + + CGAL::expand_face_selection(selection, m_pmesh, 1, is_selected, std::back_inserter(selection)); + // IP: expand_face_selection is not happy with ffg either + + CGAL::Face_filtered_graph ffg(m_pmesh, selection); + /////// + + Vertex_curvature_map vertex_curvature_map; + vertex_curvature_map = get(Vertex_curvature_tag(), ffg); - //todo ip: temp workaround - auto vertex_curvature_map = - m_pmesh.template add_property_map>("v:curvature_map").first; - interpolated_corrected_principal_curvatures_and_directions(m_pmesh - , vertex_curvature_map); + interpolated_corrected_principal_curvatures_and_directions(ffg + , vertex_curvature_map); - // calculate square vertex sizing field (L(x_i))^2 from curvature field - for(vertex_descriptor v : vertices(m_pmesh)) + // calculate vertex sizing field L(x_i) from curvature field + for(vertex_descriptor v : vertices(ffg)) { auto vertex_curv = get(vertex_curvature_map, v); - //todo ip: alt solution - calculate curvature per vertex -// const Principal_curvatures vertex_curv = interpolated_corrected_principal_curvatures_and_directions_one_vertex(m_pmesh, v); - const FT max_absolute_curv = CGAL::max(CGAL::abs(vertex_curv.max_curvature), CGAL::abs(vertex_curv.min_curvature)); + const FT max_absolute_curv = CGAL::max(CGAL::abs(vertex_curv.max_curvature) + , CGAL::abs(vertex_curv.min_curvature)); const FT vertex_size_sq = 6 * tol / max_absolute_curv - 3 * CGAL::square(tol); if (vertex_size_sq > CGAL::square(m_long)) { @@ -210,7 +216,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field const FT m_short; const FT m_long; PolygonMesh& m_pmesh; - VertexSizingMap m_vertex_sizing_map; + Vertex_sizing_map m_vertex_sizing_map; }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index e751a294445c..0ea55b8bb59b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -334,8 +334,9 @@ void isotropic_remeshing(const FaceRange& faces t.reset(); t.start(); #endif + //todo ip: move calc_sizing_map to the sizing function constructor if constexpr (!std::is_same>::value) - sizing.calc_sizing_map(); + sizing.calc_sizing_map(faces); for (unsigned int i = 0; i < nb_iterations; ++i) { From 63e31805175af4407b7776ed0dcfcbfa66b7b484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Jul 2023 13:10:28 +0200 Subject: [PATCH 293/943] use vector option for selection --- .../Isotropic_remeshing/Adaptive_sizing_field.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 3cec50bdd17a..91524857764d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -81,7 +81,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } template - void calc_sizing_map(const FaceRange& faces) + void calc_sizing_map(const FaceRange& faces_) { #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; @@ -90,16 +90,12 @@ class Adaptive_sizing_field : public CGAL::Sizing_field std::cout << "Calculating sizing field..." << std::endl; #endif - ////// IP: How to sort this out? ///// FaceRange->expand->Face_filtered_graph->use ffg onwards -// CGAL::make_boolean_property_map(faces); // IP: this does not compile - std::vector selection; + std::vector selection(faces_.begin(), faces_.end()); auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); - for (face_descriptor f : faces) + for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); - CGAL::expand_face_selection(selection, m_pmesh, 1, is_selected, std::back_inserter(selection)); - // IP: expand_face_selection is not happy with ffg either CGAL::Face_filtered_graph ffg(m_pmesh, selection); /////// From 4a5283b22e5ec0b0dcfd4f085d1087ee104cd527 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 5 Jul 2023 20:29:59 +0200 Subject: [PATCH 294/943] Change selection option to set --- .../Adaptive_sizing_field.h | 23 +++++++------------ .../Isotropic_remeshing/Sizing_field.h | 1 + 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 91524857764d..450bb4c1ea4d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -35,10 +35,9 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename Base::K K; typedef typename Base::FT FT; typedef typename Base::Point_3 Point_3; + typedef typename Base::face_descriptor face_descriptor; typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; - //todo ip: send this over to Sizing_field to be consistent - typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; typedef typename boost::property_map } template - void calc_sizing_map(const FaceRange& faces_) + void calc_sizing_map(const FaceRange& face_range) { #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; @@ -90,22 +89,16 @@ class Adaptive_sizing_field : public CGAL::Sizing_field std::cout << "Calculating sizing field..." << std::endl; #endif - ///// FaceRange->expand->Face_filtered_graph->use ffg onwards - std::vector selection(faces_.begin(), faces_.end()); - auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); - for (face_descriptor f : faces(m_pmesh)) - put(is_selected, f, false); - CGAL::expand_face_selection(selection, m_pmesh, 1, is_selected, std::back_inserter(selection)); - + // expand face selection for curvature calculation + std::set selection(face_range.begin(), face_range.end()); + CGAL::expand_face_selection(selection, m_pmesh, 1 + , make_boolean_property_map(selection), Emptyset_iterator()); CGAL::Face_filtered_graph ffg(m_pmesh, selection); - /////// - - Vertex_curvature_map vertex_curvature_map; - vertex_curvature_map = get(Vertex_curvature_tag(), ffg); + // calculate curvature + Vertex_curvature_map vertex_curvature_map = get(Vertex_curvature_tag(), ffg); interpolated_corrected_principal_curvatures_and_directions(ffg , vertex_curvature_map); - // calculate vertex sizing field L(x_i) from curvature field for(vertex_descriptor v : vertices(ffg)) { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index 359a9fc6b562..3640e14c092d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -33,6 +33,7 @@ class Sizing_field public: typedef typename CGAL::Kernel_traits::Kernel K; + typedef typename boost::graph_traits::face_descriptor face_descriptor; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef Point Point_3; From a61ebb545e5076d0b291ebc9d5f6a50d64bf0516 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 6 Jul 2023 22:35:33 +0200 Subject: [PATCH 295/943] Change face subset back to working example with vector --- .../internal/Isotropic_remeshing/Adaptive_sizing_field.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 450bb4c1ea4d..0471f4fd3c0b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -90,16 +90,19 @@ class Adaptive_sizing_field : public CGAL::Sizing_field #endif // expand face selection for curvature calculation - std::set selection(face_range.begin(), face_range.end()); + std::vector selection(face_range.begin(), face_range.end()); + auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); + for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); + for (face_descriptor f : face_range) put(is_selected, f, true); CGAL::expand_face_selection(selection, m_pmesh, 1 - , make_boolean_property_map(selection), Emptyset_iterator()); + , is_selected, std::back_inserter(selection)); CGAL::Face_filtered_graph ffg(m_pmesh, selection); // calculate curvature Vertex_curvature_map vertex_curvature_map = get(Vertex_curvature_tag(), ffg); interpolated_corrected_principal_curvatures_and_directions(ffg , vertex_curvature_map); - // calculate vertex sizing field L(x_i) from curvature field + // calculate vertex sizing field L(x_i) from the curvature field for(vertex_descriptor v : vertices(ffg)) { auto vertex_curv = get(vertex_curvature_map, v); From 99661dfd73bd7c25d1f21cef339532830c1e8cd0 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 7 Jul 2023 18:33:03 +0200 Subject: [PATCH 296/943] Choose betwen curvature calc for selection and whole mesh --- .../Adaptive_sizing_field.h | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 0471f4fd3c0b..0e34893d7ef4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -81,6 +81,29 @@ class Adaptive_sizing_field : public CGAL::Sizing_field template void calc_sizing_map(const FaceRange& face_range) + { + if (face_range.size() == faces(m_pmesh).size()) + { + // calculate curvature from the whole mesh + calc_sizing_map(m_pmesh); + } + else + { + // expand face selection and calculate curvature from it + std::vector selection(face_range.begin(), face_range.end()); + auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); + for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); + for (face_descriptor f : face_range) put(is_selected, f, true); + CGAL::expand_face_selection(selection, m_pmesh, 1 + , is_selected, std::back_inserter(selection)); + CGAL::Face_filtered_graph ffg(m_pmesh, selection); + + calc_sizing_map(ffg); + } + } + + template + void calc_sizing_map(FaceGraph& face_graph) { #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; @@ -89,21 +112,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field std::cout << "Calculating sizing field..." << std::endl; #endif - // expand face selection for curvature calculation - std::vector selection(face_range.begin(), face_range.end()); - auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); - for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); - for (face_descriptor f : face_range) put(is_selected, f, true); - CGAL::expand_face_selection(selection, m_pmesh, 1 - , is_selected, std::back_inserter(selection)); - CGAL::Face_filtered_graph ffg(m_pmesh, selection); - - // calculate curvature - Vertex_curvature_map vertex_curvature_map = get(Vertex_curvature_tag(), ffg); - interpolated_corrected_principal_curvatures_and_directions(ffg + Vertex_curvature_map vertex_curvature_map = get(Vertex_curvature_tag(), face_graph); + interpolated_corrected_principal_curvatures_and_directions(face_graph , vertex_curvature_map); // calculate vertex sizing field L(x_i) from the curvature field - for(vertex_descriptor v : vertices(ffg)) + for(vertex_descriptor v : vertices(face_graph)) { auto vertex_curv = get(vertex_curvature_map, v); const FT max_absolute_curv = CGAL::max(CGAL::abs(vertex_curv.max_curvature) @@ -133,8 +146,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " done (" << insize << " from curvature, " - << oversize << " set to max, " - << undersize << " set to min)" << std::endl; + << oversize << " set to max, " + << undersize << " set to min)" << std::endl; #endif } From 573cc53e0a32147dbdd48486b9c4c9b53f6934df Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 10 Jul 2023 21:28:06 +0200 Subject: [PATCH 297/943] Move curvature map typedef to function --- .../Adaptive_sizing_field.h | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 0e34893d7ef4..071bc761414a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -43,21 +43,16 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename boost::property_map::type Vertex_sizing_map; - typedef Principal_curvatures_and_directions Principal_curvatures; - typedef typename CGAL::dynamic_vertex_property_t Vertex_curvature_tag; - typedef typename boost::property_map, - Vertex_curvature_tag>::type Vertex_curvature_map; - - Adaptive_sizing_field(const double tol - , const std::pair& edge_len_min_max - , PolygonMesh& pmesh) - : tol(tol) - , m_short(edge_len_min_max.first) - , m_long(edge_len_min_max.second) - , m_pmesh(pmesh) - { - m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); - } + Adaptive_sizing_field(const double tol + , const std::pair& edge_len_min_max + , PolygonMesh& pmesh) + : tol(tol) + , m_short(edge_len_min_max.first) + , m_long(edge_len_min_max.second) + , m_pmesh(pmesh) + { + m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); + } private: FT sqlength(const vertex_descriptor va, @@ -105,6 +100,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field template void calc_sizing_map(FaceGraph& face_graph) { + typedef Principal_curvatures_and_directions Principal_curvatures; + typedef typename CGAL::dynamic_vertex_property_t Vertex_curvature_tag; + typedef typename boost::property_map::type Vertex_curvature_map; + #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; int undersize = 0; @@ -145,7 +145,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } } #ifdef CGAL_PMP_REMESHING_VERBOSE - std::cout << " done (" << insize << " from curvature, " + std::cout << " done (" << insize << " from curvature, " << oversize << " set to max, " << undersize << " set to min)" << std::endl; #endif From 1c597a07cf5ad07742f1246f4a20bb05e5a8199b Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 11 Jul 2023 09:33:37 +0200 Subject: [PATCH 298/943] Move sizing map calculation to constructor --- ...sotropic_remeshing_with_sizing_example.cpp | 2 +- .../Adaptive_sizing_field.h | 69 ++++++++++++------- .../Isotropic_remeshing/remesh_impl.h | 2 +- .../CGAL/Polygon_mesh_processing/remesh.h | 6 -- .../PMP/Isotropic_remeshing_plugin.cpp | 4 ++ 5 files changed, 51 insertions(+), 32 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index bbb86c89692c..e0564d27178d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) const double tol = 0.001; const std::pair edge_min_max{0.001, 0.5}; - PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, mesh); + PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, faces(mesh), mesh); unsigned int nb_iter = 5; PMP::isotropic_remeshing( diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index 071bc761414a..dc14ae91d119 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -43,8 +43,10 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename boost::property_map::type Vertex_sizing_map; + template Adaptive_sizing_field(const double tol , const std::pair& edge_len_min_max + , const FaceRange& face_range , PolygonMesh& pmesh) : tol(tol) , m_short(edge_len_min_max.first) @@ -52,31 +54,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field , m_pmesh(pmesh) { m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); - } - -private: - FT sqlength(const vertex_descriptor va, - const vertex_descriptor vb) const - { - typename boost::property_map::const_type - vpmap = get(CGAL::vertex_point, m_pmesh); - return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); - } - - FT sqlength(const halfedge_descriptor& h) const - { - return sqlength(target(h, m_pmesh), source(h, m_pmesh)); - } - -public: - FT get_sizing(const vertex_descriptor v) const { - CGAL_assertion(get(m_vertex_sizing_map, v)); - return get(m_vertex_sizing_map, v); - } - template - void calc_sizing_map(const FaceRange& face_range) - { if (face_range.size() == faces(m_pmesh).size()) { // calculate curvature from the whole mesh @@ -97,6 +75,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field } } +private: template void calc_sizing_map(FaceGraph& face_graph) { @@ -151,6 +130,48 @@ class Adaptive_sizing_field : public CGAL::Sizing_field #endif } + FT sqlength(const vertex_descriptor va, + const vertex_descriptor vb) const + { + typename boost::property_map::const_type + vpmap = get(CGAL::vertex_point, m_pmesh); + return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); + } + + FT sqlength(const halfedge_descriptor& h) const + { + return sqlength(target(h, m_pmesh), source(h, m_pmesh)); + } + +public: + FT get_sizing(const vertex_descriptor v) const { + CGAL_assertion(get(m_vertex_sizing_map, v)); + return get(m_vertex_sizing_map, v); + } + + template + void calc_sizing_map(const FaceRange& face_range) + { + if (face_range.size() == faces(m_pmesh).size()) + { + // calculate curvature from the whole mesh + calc_sizing_map(m_pmesh); + } + else + { + // expand face selection and calculate curvature from it + std::vector selection(face_range.begin(), face_range.end()); + auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); + for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); + for (face_descriptor f : face_range) put(is_selected, f, true); + CGAL::expand_face_selection(selection, m_pmesh, 1 + , is_selected, std::back_inserter(selection)); + CGAL::Face_filtered_graph ffg(m_pmesh, selection); + + calc_sizing_map(ffg); + } + } + boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index aec9ca3b5d93..0e772b47cb58 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -553,7 +553,7 @@ namespace internal { halfedge_added(hnew_opp, status(opposite(he, mesh_))); //todo ip-add: already updating sizing here because of is_too_long checks below - if constexpr (!std::is_same>::value) + if constexpr (!std::is_same_v>) sizing.update_sizing_map(vnew); //check sub-edges diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 0ea55b8bb59b..ec443f179e58 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -334,18 +334,12 @@ void isotropic_remeshing(const FaceRange& faces t.reset(); t.start(); #endif - //todo ip: move calc_sizing_map to the sizing function constructor - if constexpr (!std::is_same>::value) - sizing.calc_sizing_map(faces); - for (unsigned int i = 0; i < nb_iterations; ++i) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " * Iteration " << (i + 1) << " *" << std::endl; #endif -// if (i < 2) -// sizing.calc_sizing_map(); if(do_split) remesher.split_long_edges(sizing); if(do_collapse) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 813434a4c6ca..679d2518666d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -491,6 +491,7 @@ public Q_SLOTS: std::pair edge_min_max{min_length, max_length}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max + , faces(*selection_item->polyhedron()) , *selection_item->polyhedron()); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) @@ -573,6 +574,7 @@ public Q_SLOTS: std::pair edge_min_max{min_length, max_length}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max + , faces(*selection_item->polyhedron()) , *selection_item->polyhedron()); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets @@ -732,6 +734,7 @@ public Q_SLOTS: std::pair edge_min_max{min_length, max_length}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max + , faces(*poly_item->polyhedron()) , *poly_item->polyhedron()); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing( @@ -985,6 +988,7 @@ public Q_SLOTS: std::pair edge_min_max{min_length_, max_length_}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ , edge_min_max + , faces(*poly_item->polyhedron()) , *poly_item->polyhedron()); CGAL::Polygon_mesh_processing::isotropic_remeshing( faces(*poly_item->polyhedron()) From cc0c46c7ef331af28422e37de79785473ceb8052 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 11 Jul 2023 10:08:21 +0200 Subject: [PATCH 299/943] Fix polyhedron demo with TBB --- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 679d2518666d..86d7844949a3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -890,7 +890,11 @@ public Q_SLOTS: tbb::parallel_for( tbb::blocked_range(0, selection.size()), Remesh_polyhedron_item_for_parallel_for( - selection, edges_to_protect, edges_only, target_length, nb_iter, protect, smooth_features)); + selection, edges_to_protect, edges_only + , edge_sizing_type, target_length, error_tol + , min_length , max_length, nb_iter + , protect, smooth_features) + ); total_time = time.elapsed(); From 4b1b04eb8d3542b3846e6d0bf091b34e3fff6173 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 1 Aug 2023 11:09:28 +0200 Subject: [PATCH 300/943] fix compilation --- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 86d7844949a3..406c032f6feb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -489,7 +489,7 @@ public Q_SLOTS: else if (edge_sizing_type == 1) { std::pair edge_min_max{min_length, max_length}; - PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*selection_item->polyhedron()) , *selection_item->polyhedron()); @@ -572,7 +572,7 @@ public Q_SLOTS: else if (edge_sizing_type == 1) { std::pair edge_min_max{min_length, max_length}; - PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*selection_item->polyhedron()) , *selection_item->polyhedron()); @@ -732,7 +732,7 @@ public Q_SLOTS: else if (edge_sizing_type == 1) { std::pair edge_min_max{min_length, max_length}; - PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*poly_item->polyhedron()) , *poly_item->polyhedron()); @@ -990,7 +990,7 @@ public Q_SLOTS: else { std::pair edge_min_max{min_length_, max_length_}; - PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ , edge_min_max , faces(*poly_item->polyhedron()) , *poly_item->polyhedron()); From 1f61a84e495f62b71570ad5962411adf4680eb54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 Aug 2023 10:30:05 +0200 Subject: [PATCH 301/943] add demo plugin that support refinement of one or several items (soup or mesh) --- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 6 +- .../Plugins/PMP/Repair_polyhedron_plugin.cpp | 105 +++++++++++++++++- 2 files changed, 105 insertions(+), 6 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 152d84952ae7..658458acaadf 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -119,7 +119,11 @@ target_link_libraries( qt5_wrap_ui( repairUI_FILES RemoveNeedlesDialog.ui SelfSnapDialog.ui) polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin ${repairUI_FILES} KEYWORDS PMP) -target_link_libraries(repair_polyhedron_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item) +target_link_libraries(repair_polyhedron_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item scene_polygon_soup_item) +if(TARGET CGAL::TBB_support) + target_link_libraries(repair_polyhedron_plugin PUBLIC CGAL::TBB_support) +endif() + qt5_wrap_ui(isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp index 5ecc8921433e..dd4acb434272 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp @@ -1,6 +1,7 @@ #include #include "Scene_surface_mesh_item.h" +#include "Scene_polygon_soup_item.h" #include "Scene_points_with_normal_item.h" #include #include @@ -19,6 +20,8 @@ #include #include #include +#include +#include #include "ui_RemoveNeedlesDialog.h" #include "ui_SelfSnapDialog.h" @@ -52,8 +55,9 @@ class Polyhedron_demo_repair_polyhedron_plugin : actionDuplicateNMVertices = new QAction(tr("Duplicate Non-Manifold Vertices"), mw); actionExtractNMVertices = new QAction(tr("Extract Non-Manifold Vertices"), mw); actionMergeDuplicatedVerticesOnBoundaryCycles = new QAction(tr("Merge Duplicated Vertices on Boundary Cycles"), mw); - actionAutorefine = new QAction(tr("Autorefine Mesh"), mw); - actionAutorefineAndRMSelfIntersections = new QAction(tr("Autorefine and Remove Self-Intersections"), mw); + actionAutorefine = new QAction(tr("Autorefine Mesh (Deprecated)"), mw); + actionNewAutorefine = new QAction(tr("Autorefine"), mw); + actionAutorefineAndRMSelfIntersections = new QAction(tr("Autorefine and Remove Self-Intersections (Deprecated)"), mw); actionRemoveNeedlesAndCaps = new QAction(tr("Remove Needles And Caps")); actionSnapBorders = new QAction(tr("Snap Boundaries")); @@ -65,6 +69,7 @@ class Polyhedron_demo_repair_polyhedron_plugin : actionExtractNMVertices->setObjectName("actionExtractNMVertices"); actionMergeDuplicatedVerticesOnBoundaryCycles->setObjectName("actionMergeDuplicatedVerticesOnBoundaryCycles"); actionAutorefine->setObjectName("actionAutorefine"); + actionNewAutorefine->setObjectName("actionNewAutorefine"); actionAutorefineAndRMSelfIntersections->setObjectName("actionAutorefineAndRMSelfIntersections"); actionRemoveNeedlesAndCaps->setObjectName("actionRemoveNeedlesAndCaps"); actionSnapBorders->setObjectName("actionSnapBorders"); @@ -77,6 +82,7 @@ class Polyhedron_demo_repair_polyhedron_plugin : actionExtractNMVertices->setProperty("subMenuName", "Polygon Mesh Processing/Repair"); actionMergeDuplicatedVerticesOnBoundaryCycles->setProperty("subMenuName", "Polygon Mesh Processing/Repair"); actionAutorefine->setProperty("subMenuName", "Polygon Mesh Processing/Repair/Experimental"); + actionNewAutorefine->setProperty("subMenuName", "Polygon Mesh Processing/Repair"); actionAutorefineAndRMSelfIntersections->setProperty("subMenuName", "Polygon Mesh Processing/Repair/Experimental"); actionSnapBorders->setProperty("subMenuName", "Polygon Mesh Processing/Repair/Experimental"); @@ -93,16 +99,29 @@ class Polyhedron_demo_repair_polyhedron_plugin : << actionExtractNMVertices << actionMergeDuplicatedVerticesOnBoundaryCycles << actionAutorefine + << actionNewAutorefine << actionAutorefineAndRMSelfIntersections << actionRemoveNeedlesAndCaps << actionSnapBorders; } - bool applicable(QAction*) const + bool applicable(QAction* action) const { - int item_id = scene->mainSelectionIndex(); - return qobject_cast(scene->item(item_id)); + if (action!=actionNewAutorefine) + { + int item_id = scene->mainSelectionIndex(); + return qobject_cast(scene->item(item_id)); + } + for (Scene_interface::Item_id index : scene->selectionIndices()) + { + if (qobject_cast(scene->item(index))) + return true; + if (qobject_cast(scene->item(index))) + return true; + } + return false; } + template void on_actionRemoveIsolatedVertices_triggered(Scene_interface::Item_id index); template @@ -120,6 +139,8 @@ class Polyhedron_demo_repair_polyhedron_plugin : template void on_actionAutorefine_triggered(Scene_interface::Item_id index); template + void on_actionNewAutorefine_triggered(const std::vector& indices); + template void on_actionAutorefineAndRMSelfIntersections_triggered(Scene_interface::Item_id index); public Q_SLOTS: @@ -131,6 +152,7 @@ public Q_SLOTS: void on_actionExtractNMVertices_triggered(); void on_actionMergeDuplicatedVerticesOnBoundaryCycles_triggered(); void on_actionAutorefine_triggered(); + void on_actionNewAutorefine_triggered(); void on_actionAutorefineAndRMSelfIntersections_triggered(); void on_actionRemoveNeedlesAndCaps_triggered(); void on_actionSnapBorders_triggered(); @@ -144,6 +166,7 @@ public Q_SLOTS: QAction* actionExtractNMVertices; QAction* actionMergeDuplicatedVerticesOnBoundaryCycles; QAction* actionAutorefine; + QAction* actionNewAutorefine; QAction* actionAutorefineAndRMSelfIntersections; QAction* actionRemoveNeedlesAndCaps; QAction* actionSnapBorders; @@ -421,6 +444,78 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionAutorefine_triggered() QApplication::restoreOverrideCursor(); } +template +void Polyhedron_demo_repair_polyhedron_plugin::on_actionNewAutorefine_triggered(const std::vector& indices) +{ + namespace PMP = CGAL::Polygon_mesh_processing; + Polygon_soup::Points points; + Polygon_soup::Polygons polygons; + + if (indices.size()==1) + { + if (Scene_surface_mesh_item* smi_ptr = qobject_cast(scene->item(indices[0]))) + PMP::polygon_mesh_to_polygon_soup(*smi_ptr->polyhedron(), points, polygons); + else if (Scene_polygon_soup_item* spi_ptr = qobject_cast(scene->item(indices[0]))) + { + points = spi_ptr->points(); + polygons = spi_ptr->polygons(); + } + } + else + { + for (Scene_interface::Item_id id : indices) + { + Polygon_soup::Points l_points; + Polygon_soup::Polygons l_polygons; + + if (Scene_surface_mesh_item* smi_ptr = qobject_cast(scene->item(id))) + PMP::polygon_mesh_to_polygon_soup(*smi_ptr->polyhedron(), l_points, l_polygons); + else if (Scene_polygon_soup_item* spi_ptr = qobject_cast(scene->item(id))) + { + l_points = spi_ptr->points(); + l_polygons = spi_ptr->polygons(); + } + std::size_t offset=points.size(); + points.insert(points.end(), l_points.begin(), l_points.end()); + std::size_t psize=polygons.size(); + polygons.insert(polygons.end(), l_polygons.begin(), l_polygons.end()); + for (std::size_t i=psize; iload(points, polygons); + QString name = scene->item(indices[0])->name(); + for (std::size_t k=1; kitem(indices[k])->name(); + new_item->setName(name+" autorefined"); + + scene->addItem(new_item); + new_item->invalidateOpenGLBuffers(); + Q_EMIT new_item->itemChanged(); +} + +void Polyhedron_demo_repair_polyhedron_plugin::on_actionNewAutorefine_triggered() +{ + std::vector indices; + for (Scene_interface::Item_id index : scene->selectionIndices()) + { + if (qobject_cast(scene->item(index))) + indices.push_back(index); + else if (qobject_cast(scene->item(index))) + indices.push_back(index); + } + QApplication::setOverrideCursor(Qt::WaitCursor); + on_actionNewAutorefine_triggered(indices); + QApplication::restoreOverrideCursor(); +} + template void Polyhedron_demo_repair_polyhedron_plugin::on_actionAutorefineAndRMSelfIntersections_triggered(Scene_interface::Item_id index) { From 9c63d3e57bbad4b1d0261892a826d6f92f97462e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 Aug 2023 17:31:13 +0200 Subject: [PATCH 302/943] fix warning --- .../test/Surface_mesh_approximation/vsa_border_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp b/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp index 554c50d2af65..6bafd27359f4 100644 --- a/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp +++ b/Surface_mesh_approximation/test/Surface_mesh_approximation/vsa_border_test.cpp @@ -75,7 +75,7 @@ int main(int, char*[]) std::array subdivisionRatios = { 0.10 , 2.0 , 2.0 , 10.0 , 10.0 , 10.00 }; std::array boundarySubdivisionRatios = { 0.01 , 2.0 , 0.1 , 10.0 , 1.0 , 0.01 }; - for (int i = 0; i < subdivisionRatios.size(); ++i) + for (std::size_t i = 0; i < subdivisionRatios.size(); ++i) { const auto subdivisionRatio = subdivisionRatios[i]; const auto boundarySubdivisionRatio = boundarySubdivisionRatios[i]; From 8076e20b71bc83407ec94d6e399d6e41f163c8de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 1 Aug 2023 13:07:55 +0200 Subject: [PATCH 303/943] Add debug code --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 14 ++++++++------ .../test_AW3_cavity_initializations.cpp | 1 + .../test/Alpha_wrap_3/test_AW3_manifoldness.cpp | 1 + .../test/Alpha_wrap_3/test_AW3_multiple_calls.cpp | 1 + .../test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index e88e00fafe0c..1e9674276fa8 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1362,7 +1362,12 @@ class Alpha_wrap_3 for(Vertex_handle v : m_dt.finite_vertex_handles()) { if(is_non_manifold(v)) + { +#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS_PP + std::cout << v->point() << " is non-manifold" << std::endl; +#endif non_manifold_vertices.push(v); + } } // Some lambdas for the comparer @@ -1412,23 +1417,19 @@ class Alpha_wrap_3 squared_distance(m_dt.point(c, 2), m_dt.point(c, 3)) }); }; -#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS +#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS_PP std::cout << non_manifold_vertices.size() << " initial NMV" << std::endl; #endif while(!non_manifold_vertices.empty()) { -#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS +#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS_PP std::cout << non_manifold_vertices.size() << " NMV in queue" << std::endl; #endif Vertex_handle v = non_manifold_vertices.top(); non_manifold_vertices.pop(); -#ifdef CGAL_AW3_DEBUG_MANIFOLDNESS - std::cout << "·"; -#endif - if(!is_non_manifold(v)) continue; @@ -1503,6 +1504,7 @@ class Alpha_wrap_3 void check_queue_sanity() { std::cout << "Check queue sanity..." << std::endl; + std::vector queue_gates; Gate previous_top_gate = m_queue.top(); while(!m_queue.empty()) diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp index d7567bab205b..c6591e000df1 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp @@ -1,5 +1,6 @@ #define CGAL_AW3_TIMER #define CGAL_AW3_DEBUG +#define CGAL_AW3_DEBUG_MANIFOLDNESS // #define CGAL_AW3_DEBUG_INITIALIZATION #include diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp index 928cade64959..8ac2e422d878 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp @@ -1,5 +1,6 @@ #define CGAL_AW3_TIMER #define CGAL_AW3_DEBUG +#define CGAL_AW3_DEBUG_MANIFOLDNESS //#define CGAL_AW3_DEBUG_STEINER_COMPUTATION //#define CGAL_AW3_DEBUG_INITIALIZATION //#define CGAL_AW3_DEBUG_QUEUE diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp index e2abc6f1f12f..eda64a8376a4 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp @@ -1,5 +1,6 @@ #define CGAL_AW3_TIMER #define CGAL_AW3_DEBUG +#define CGAL_AW3_DEBUG_MANIFOLDNESS #include diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp index 5091934b62f0..302494d8c304 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp @@ -1,6 +1,6 @@ #define CGAL_AW3_TIMER //#define CGAL_AW3_DEBUG -//#define CGAL_AW3_DEBUG_MANIFOLDNESS +#define CGAL_AW3_DEBUG_MANIFOLDNESS //#define CGAL_AW3_DEBUG_STEINER_COMPUTATION //#define CGAL_AW3_DEBUG_INITIALIZATION //#define CGAL_AW3_DEBUG_QUEUE From c7b9317a96117f874aa88b6ca9cd6b376f4d10cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 1 Aug 2023 13:16:18 +0200 Subject: [PATCH 304/943] Simplify choice of cells to un-carve while enforcing manifoldness This combinatorial choice seemed like a good idea, but it can have nasty cascading effects, adding very large tetrahedra. See this issue: https://github.com/CGAL/cgal/issues/7625 In the end, the only thing we care about is small volumes being added. I keep the artificial vertex for now, but I am not fully convinced these should be actually kept too. --- .../include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 1e9674276fa8..1b0a6968c092 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1445,11 +1445,6 @@ class Alpha_wrap_3 if(has_artificial_vertex(r)) return true; - const int l_bf_count = count_boundary_facets(l, v); - const int r_bf_count = count_boundary_facets(r, v); - if(l_bf_count != r_bf_count) - return l_bf_count > r_bf_count; - return sq_longest_edge(l) < sq_longest_edge(r); }; From b4e207ab00237bffbd221bc7f4bd4b0bb2e69c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 2 Aug 2023 10:00:34 +0200 Subject: [PATCH 305/943] Add some comments on AW3 manifoldness heuristics criteria --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 1b0a6968c092..a21925cdc6d8 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1380,25 +1380,27 @@ class Alpha_wrap_3 return false; }; - auto is_on_boundary = [](Cell_handle c, int i) -> bool - { - return (c->info().is_outside != c->neighbor(i)->info().is_outside); - }; - - auto count_boundary_facets = [&](Cell_handle c, Vertex_handle v) -> int - { - const int v_index_in_c = c->index(v); - int boundary_facets = 0; - for(int i=0; i<3; ++i) // also take into account the opposite facet? - { - if(i == v_index_in_c) - continue; - - boundary_facets += is_on_boundary(c, i); - } - - return boundary_facets; - }; + // This seemed like a good idea, but in the end it can have strong cascading issues, + // whereas some cells with much lower volume would have solved the non-manifoldness. +// auto is_on_boundary = [](Cell_handle c, int i) -> bool +// { +// return (c->info().is_outside != c->neighbor(i)->info().is_outside); +// }; +// +// auto count_boundary_facets = [&](Cell_handle c, Vertex_handle v) -> int +// { +// const int v_index_in_c = c->index(v); +// int boundary_facets = 0; +// for(int i=0; i<3; ++i) // also take into account the opposite facet? +// { +// if(i == v_index_in_c) +// continue; +// +// boundary_facets += is_on_boundary(c, i); +// } +// +// return boundary_facets; +// }; // longest edge works better // auto sq_circumradius = [&](Cell_handle c) -> FT @@ -1407,6 +1409,9 @@ class Alpha_wrap_3 // return geom_traits().compute_squared_distance_3_object()(m_dt.point(c, 0), cc); // }; + // the reasonning behind using longest edge rather than volume is that we want to avoid + // spikes (which would have a small volume), and can often happen since we do not spend + // any care on the quality of tetrahedra. auto sq_longest_edge = [&](Cell_handle c) -> FT { return (std::max)({ squared_distance(m_dt.point(c, 0), m_dt.point(c, 1)), From 330ff2e65776a9be1f7ca757a813e5055e0a1994 Mon Sep 17 00:00:00 2001 From: Mael Date: Wed, 2 Aug 2023 10:23:12 +0200 Subject: [PATCH 306/943] Fix spelling Thanks @albert-github! --- Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index a21925cdc6d8..6d544be058d6 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1409,7 +1409,7 @@ class Alpha_wrap_3 // return geom_traits().compute_squared_distance_3_object()(m_dt.point(c, 0), cc); // }; - // the reasonning behind using longest edge rather than volume is that we want to avoid + // the reasoning behind using longest edge rather than volume is that we want to avoid // spikes (which would have a small volume), and can often happen since we do not spend // any care on the quality of tetrahedra. auto sq_longest_edge = [&](Cell_handle c) -> FT From a0255568dd31824fef300eecee5a1e00339613e0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 21 Aug 2023 11:09:45 +0100 Subject: [PATCH 307/943] Update changes.md --- Installation/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 388f336227b9..0466359b82b1 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -10,6 +10,7 @@ Release date: October 2023 - **Breaking change**: C++17 is now required - Support for Visual `C++` 14.0 (Visual studio 2015) is dropped. +- The demos as well as the `draw()` functions using the `Basic_viewer` are based on Qt6 [Release 5.6](https://github.com/CGAL/cgal/releases/tag/v5.6) From 58e0bf13a685e5f0d88685a69a5e34350755b8bc Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Wed, 2 Aug 2023 10:41:21 +0200 Subject: [PATCH 308/943] reintroduce mean curvature and gaussian curvature in "display properties" broken for now --- .../Plugins/Display/Display_property.ui | 26 +++ .../Display/Display_property_plugin.cpp | 159 +++++++++++++++++- 2 files changed, 183 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index 656ec4827c55..d1e5e795e711 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -180,6 +180,32 @@ + + + + 0 + + + 100 + + + true + + + Qt::Horizontal + + + QSlider::TicksAbove + + + + + + + Expanding Radius: 0 + + +
    diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 994dcd2e8d9b..5b212d5a4703 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -85,6 +87,9 @@ class Display_property_plugin double gI = 1.; double bI = 0.; + double expand_radius = 0; + double maxEdgeLength = -1; + Color_ramp color_ramp; std::vector color_map; QPixmap legend; @@ -98,6 +103,11 @@ class Display_property_plugin MIN_VALUE, MAX_VALUE }; + enum CurvatureType + { + MEAN_CURVATURE, + GAUSSIAN_CURVATURE, + }; public: bool applicable(QAction*) const Q_DECL_OVERRIDE @@ -196,6 +206,8 @@ class Display_property_plugin this, &Display_property_plugin::on_zoomToMinButton_pressed); connect(dock_widget->zoomToMaxButton, &QPushButton::pressed, this, &Display_property_plugin::on_zoomToMaxButton_pressed); + connect(dock_widget->expandingRadiusSlider, SIGNAL(valueChanged(int)), + this, SLOT(setExpandingRadius(int))); } private Q_SLOTS: @@ -252,6 +264,20 @@ private Q_SLOTS: dock_widget->maxBox->setRange(-1000, 1000); dock_widget->maxBox->setValue(0); } + else if (property_name == "Interpolated Corrected Mean Curvature") + { + dock_widget->minBox->setRange(-99999999, 99999999); + dock_widget->minBox->setValue(0); + dock_widget->maxBox->setRange(-99999999, 99999999); + dock_widget->maxBox->setValue(0); + } + else if (property_name == "Interpolated Corrected Gaussian Curvature") + { + dock_widget->minBox->setRange(-99999999, 99999999); + dock_widget->minBox->setValue(0); + dock_widget->maxBox->setRange(-99999999, 99999999); + dock_widget->maxBox->setValue(0); + } else { dock_widget->minBox->setRange(-99999999, 99999999); @@ -432,11 +458,15 @@ private Q_SLOTS: dock_widget->propertyBox->addItems({"Smallest Angle Per Face", "Largest Angle Per Face", "Scaled Jacobian", - "Face Area"}); + "Face Area", + "Interpolated Corrected Mean Curvature", + "Interpolated Corrected Gaussian Curvature"}); property_simplex_types = { Property_simplex_type::FACE, Property_simplex_type::FACE, Property_simplex_type::FACE, - Property_simplex_type::FACE }; + Property_simplex_type::FACE, + Property_simplex_type::VERTEX, + Property_simplex_type::VERTEX }; detectSMScalarProperties(*(sm_item->face_graph())); } else if(ps_item) @@ -527,6 +557,16 @@ private Q_SLOTS: { displayArea(sm_item); } + else if(property_name == "Interpolated Corrected Mean Curvature") + { + displayInterpolatedCurvatureMeasure(sm_item, MEAN_CURVATURE); + sm_item->setRenderingMode(Gouraud); + } + else if(property_name == "Interpolated Corrected Gaussian Curvature") + { + displayInterpolatedCurvatureMeasure(sm_item, GAUSSIAN_CURVATURE); + sm_item->setRenderingMode(Gouraud); + } else { const int property_index = dock_widget->propertyBox->currentIndex(); @@ -629,6 +669,8 @@ private Q_SLOTS: removeDisplayPluginProperty(item, "f:display_plugin_largest_angle"); removeDisplayPluginProperty(item, "f:display_plugin_scaled_jacobian"); removeDisplayPluginProperty(item, "f:display_plugin_area"); + removeDisplayPluginProperty(item, "v:interpolated_corrected_mean_curvature"); + removeDisplayPluginProperty(item, "v:interpolated_corrected_Gaussian_curvature"); } void displayExtremumAnglePerFace(Scene_surface_mesh_item* sm_item, @@ -809,6 +851,119 @@ private Q_SLOTS: displaySMProperty("f:display_plugin_area", *sm); } + void setExpandingRadius(int val_int) + { + double sliderMin = dock_widget->expandingRadiusSlider->minimum(); + double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; + double val = val_int - sliderMin; + sliderMin = 0; + + SMesh& smesh = *(qobject_cast(scene->item(scene->mainSelectionIndex())))->face_graph(); + + auto vpm = get(CGAL::vertex_point, smesh); + + if (maxEdgeLength < 0) + { + auto edge_range = CGAL::edges(smesh); + + if (edge_range.begin() == edge_range.end()) + { + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + return; + } + + auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { + auto res = EPICK().compare_squared_distance_3_object()( + get(vpm, source((l), smesh)), + get(vpm, target((l), smesh)), + get(vpm, source((r), smesh)), + get(vpm, target((r), smesh))); + return res == CGAL::SMALLER; + }); + + // if edge_reference is not derefrenceble + if (edge_reference == edge_range.end()) + { + expand_radius = 0; + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + return; + } + + maxEdgeLength = sqrt( + (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) + .squared_length() + ); + + } + + double outMax = 5 * maxEdgeLength, base = 1.2; + + expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + + } + + void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, CurvatureType mu_index) + { + namespace PMP = CGAL::Polygon_mesh_processing; + + if (mu_index != MEAN_CURVATURE && mu_index != GAUSSIAN_CURVATURE) return; + + std::string tied_string = (mu_index == MEAN_CURVATURE)? + "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_Gaussian_curvature"; + SMesh& smesh = *item->face_graph(); + + const auto vnm = smesh.property_map("v:normal_before_perturbation").first; + const bool vnm_exists = smesh.property_map("v:normal_before_perturbation").second; + + //compute once and store the value per vertex + bool non_init; + SMesh::Property_map mu_i_map; + std::tie(mu_i_map, non_init) = + smesh.add_property_map(tied_string, 0); + if (non_init) + { + if (vnm_exists) { + if (mu_index == MEAN_CURVATURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + else + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); + } + else { + if (mu_index == MEAN_CURVATURE) + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + else + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + } + double res_min = ARBITRARY_DBL_MAX, + res_max = -ARBITRARY_DBL_MAX; + SMesh::Vertex_index min_index, max_index; + for (SMesh::Vertex_index v : vertices(smesh)) + { + if (mu_i_map[v] > res_max) + { + res_max = mu_i_map[v]; + max_index = v; + } + if (mu_i_map[v] < res_min) + { + res_min = mu_i_map[v]; + min_index = v; + } + } +// if (mu_index == MEAN_CURVATURE){ +// mean_curvature_max[item] = std::make_pair(res_max, max_index); +// mean_curvature_min[item] = std::make_pair(res_min, min_index); +// } +// else { +// gaussian_curvature_max[item] = std::make_pair(res_max, max_index); +// gaussian_curvature_min[item] = std::make_pair(res_min, min_index); +// } + } +// treat_sm_property(tied_string, item->face_graph()); + } + private: template bool call_on_PS_property(const std::string& name, From 41bddc72d6f3feebad57682345b80fcbe289eca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 2 Aug 2023 12:29:29 +0200 Subject: [PATCH 309/943] Display plugin fixes --- .../Display/Display_property_plugin.cpp | 141 +++++++++--------- 1 file changed, 69 insertions(+), 72 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 5b212d5a4703..037d5bb4982b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -47,6 +47,8 @@ #define ARBITRARY_DBL_MIN 1.0E-17 #define ARBITRARY_DBL_MAX 1.0E+17 +namespace PMP = CGAL::Polygon_mesh_processing; + using namespace CGAL::Three; Viewer_interface* (&getActiveViewer)() = Three::activeViewer; @@ -206,6 +208,7 @@ class Display_property_plugin this, &Display_property_plugin::on_zoomToMinButton_pressed); connect(dock_widget->zoomToMaxButton, &QPushButton::pressed, this, &Display_property_plugin::on_zoomToMaxButton_pressed); + connect(dock_widget->expandingRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setExpandingRadius(int))); } @@ -669,8 +672,8 @@ private Q_SLOTS: removeDisplayPluginProperty(item, "f:display_plugin_largest_angle"); removeDisplayPluginProperty(item, "f:display_plugin_scaled_jacobian"); removeDisplayPluginProperty(item, "f:display_plugin_area"); - removeDisplayPluginProperty(item, "v:interpolated_corrected_mean_curvature"); - removeDisplayPluginProperty(item, "v:interpolated_corrected_Gaussian_curvature"); + removeDisplayPluginProperty(item, "v:display_plugin_interpolated_corrected_mean_curvature"); + removeDisplayPluginProperty(item, "v:display_plugin_interpolated_corrected_Gaussian_curvature"); } void displayExtremumAnglePerFace(Scene_surface_mesh_item* sm_item, @@ -759,7 +762,7 @@ private Q_SLOTS: halfedge_descriptor local_border_h = opposite(halfedge(local_f, local_smesh), local_smesh); CGAL_assertion(is_border(local_border_h, local_smesh)); - CGAL::Polygon_mesh_processing::triangulate_faces(local_smesh); + PMP::triangulate_faces(local_smesh); double extremum_angle_in_face = ARBITRARY_DBL_MAX; halfedge_descriptor local_border_end_h = local_border_h; @@ -812,7 +815,7 @@ private Q_SLOTS: const SMesh& mesh) const { if(CGAL::is_triangle(halfedge(f, mesh), mesh)) - return CGAL::Polygon_mesh_processing::face_area(f, mesh); + return PMP::face_area(f, mesh); auto vpm = get(boost::vertex_point, mesh); @@ -828,8 +831,8 @@ private Q_SLOTS: } CGAL::Euler::add_face(local_vertices, local_smesh); - CGAL::Polygon_mesh_processing::triangulate_faces(local_smesh); - return CGAL::Polygon_mesh_processing::area(local_smesh); + PMP::triangulate_faces(local_smesh); + return PMP::area(local_smesh); } void displayArea(Scene_surface_mesh_item* sm_item) @@ -851,117 +854,105 @@ private Q_SLOTS: displaySMProperty("f:display_plugin_area", *sm); } - void setExpandingRadius(int val_int) + void setExpandingRadius(const int val_int) { double sliderMin = dock_widget->expandingRadiusSlider->minimum(); double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; - double val = val_int - sliderMin; + double val = val_int - sliderMin; sliderMin = 0; - SMesh& smesh = *(qobject_cast(scene->item(scene->mainSelectionIndex())))->face_graph(); + Scene_item* item = scene->item(scene->mainSelectionIndex()); + Scene_surface_mesh_item* sm_item = qobject_cast(item); + if(sm_item == nullptr) + return; + + SMesh& smesh = *(sm_item->face_graph()); auto vpm = get(CGAL::vertex_point, smesh); - if (maxEdgeLength < 0) + // @todo use the upcoming PMP::longest_edge + if(maxEdgeLength < 0) { auto edge_range = CGAL::edges(smesh); - if (edge_range.begin() == edge_range.end()) + if(num_edges(smesh) == 0) { expand_radius = 0; dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); return; } - auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) { - auto res = EPICK().compare_squared_distance_3_object()( - get(vpm, source((l), smesh)), - get(vpm, target((l), smesh)), - get(vpm, source((r), smesh)), - get(vpm, target((r), smesh))); - return res == CGAL::SMALLER; - }); - - // if edge_reference is not derefrenceble - if (edge_reference == edge_range.end()) - { - expand_radius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); - return; - } + auto eit = std::max_element(edge_range.begin(), edge_range.end(), + [&, vpm, smesh](auto l, auto r) + { + auto res = EPICK().compare_squared_distance_3_object()( + get(vpm, source((l), smesh)), + get(vpm, target((l), smesh)), + get(vpm, source((r), smesh)), + get(vpm, target((r), smesh))); + return (res == CGAL::SMALLER); + }); - maxEdgeLength = sqrt( - (get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh))) - .squared_length() - ); + CGAL_assertion(eit != edge_range.end()); + maxEdgeLength = PMP::edge_length(*eit, smesh); } double outMax = 5 * maxEdgeLength, base = 1.2; expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); - } - void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, CurvatureType mu_index) + void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, + CurvatureType mu_index) { - namespace PMP = CGAL::Polygon_mesh_processing; + if(mu_index != MEAN_CURVATURE && mu_index != GAUSSIAN_CURVATURE) + return; - if (mu_index != MEAN_CURVATURE && mu_index != GAUSSIAN_CURVATURE) return; + std::string tied_string = (mu_index == MEAN_CURVATURE) ? "v:display_plugin_interpolated_corrected_mean_curvature" + : "v:display_plugin_interpolated_corrected_Gaussian_curvature"; - std::string tied_string = (mu_index == MEAN_CURVATURE)? - "v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_Gaussian_curvature"; SMesh& smesh = *item->face_graph(); const auto vnm = smesh.property_map("v:normal_before_perturbation").first; const bool vnm_exists = smesh.property_map("v:normal_before_perturbation").second; - //compute once and store the value per vertex + // compute once and store the value per vertex bool non_init; SMesh::Property_map mu_i_map; - std::tie(mu_i_map, non_init) = - smesh.add_property_map(tied_string, 0); - if (non_init) + std::tie(mu_i_map, non_init) = smesh.add_property_map(tied_string, 0); + if(non_init) { - if (vnm_exists) { - if (mu_index == MEAN_CURVATURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); - else - PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius).vertex_normal_map(vnm)); - } - else { - if (mu_index == MEAN_CURVATURE) - PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + if(vnm_exists) + { + if(mu_index == MEAN_CURVATURE) + { + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, + CGAL::parameters::ball_radius(expand_radius) + .vertex_normal_map(vnm)); + } else - PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); + { + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, + CGAL::parameters::ball_radius(expand_radius) + .vertex_normal_map(vnm)); + } } - double res_min = ARBITRARY_DBL_MAX, - res_max = -ARBITRARY_DBL_MAX; - SMesh::Vertex_index min_index, max_index; - for (SMesh::Vertex_index v : vertices(smesh)) + else { - if (mu_i_map[v] > res_max) + if(mu_index == MEAN_CURVATURE) { - res_max = mu_i_map[v]; - max_index = v; + PMP::interpolated_corrected_mean_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); } - if (mu_i_map[v] < res_min) + else { - res_min = mu_i_map[v]; - min_index = v; + PMP::interpolated_corrected_Gaussian_curvature(smesh, mu_i_map, CGAL::parameters::ball_radius(expand_radius)); } } -// if (mu_index == MEAN_CURVATURE){ -// mean_curvature_max[item] = std::make_pair(res_max, max_index); -// mean_curvature_min[item] = std::make_pair(res_min, min_index); -// } -// else { -// gaussian_curvature_max[item] = std::make_pair(res_max, max_index); -// gaussian_curvature_min[item] = std::make_pair(res_min, min_index); -// } } -// treat_sm_property(tied_string, item->face_graph()); + + displaySMProperty(tied_string, smesh); } private: @@ -1119,6 +1110,10 @@ private Q_SLOTS: zoomToSimplexWithPropertyExtremum(faces(mesh), mesh, "f:display_plugin_scaled_jacobian", extremum); else if(property_name == "Face Area") zoomToSimplexWithPropertyExtremum(faces(mesh), mesh, "f:display_plugin_area", extremum); + else if(property_name == "Interpolated Corrected Mean Curvature") + zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, "v:display_plugin_interpolated_corrected_mean_curvature", extremum); + else if(property_name == "Interpolated Corrected Gaussian Curvature") + zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, "v:display_plugin_interpolated_corrected_Gaussian_curvature", extremum); else if(property_simplex_types.at(property_index) == Property_simplex_type::VERTEX) zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, property_name, extremum); else if(property_simplex_types.at(property_index) == Property_simplex_type::FACE) @@ -1401,7 +1396,7 @@ scaled_jacobian(const face_descriptor f, for(std::size_t i=0; i Date: Wed, 2 Aug 2023 13:26:02 +0200 Subject: [PATCH 310/943] Fix UI + fix connections --- .../Plugins/Display/Display_property.ui | 316 ++++++++++-------- .../Display/Display_property_plugin.cpp | 27 +- 2 files changed, 189 insertions(+), 154 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index d1e5e795e711..0a824308300d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -3,7 +3,7 @@ DisplayPropertyWidget - false + true @@ -39,9 +39,18 @@ + + true + Property + + false + + + false + 6 @@ -82,13 +91,114 @@ + + + + true + + + 0 + + + 100 + + + true + + + Qt::Horizontal + + + false + + + false + + + QSlider::TicksAbove + + + + + + + true + + + Expanding Radius: 0 + + + +
    + + + + + + false + + + Extreme Values + + + + + + Min Value + + + + + + + Max Value + + + + + + + 2.00 + + + true + + + + + + + Zoom to max value + + + + + + + Zoom to min value + + + + + + + 0.00 + + + true + + + true + + + - - - + + + Qt::Vertical @@ -100,7 +210,33 @@ - + + + + true + + + + + 0 + 0 + 236 + 335 + + + + + + + RAMP DISPLAYING + + + + + + + + Color Visualization @@ -118,10 +254,17 @@ 0 - - + + - Random colors + + + + + + + + Max color @@ -135,20 +278,6 @@ - - - - First color - - - - - - - Max color - - - @@ -159,58 +288,42 @@ - + - - + + - + Min color - - + + - Min color + First color + + + + + + + Random colors - - - - 0 - - - 100 - - - true - - - Qt::Horizontal - - - QSlider::TicksAbove - - - - - - - Expanding Radius: 0 - - - - - + + + + + Qt::Vertical @@ -222,97 +335,8 @@ - - - - true - - - - - 0 - 0 - 236 - 397 - - - - - - - RAMP DISPLAYING - - - - - - - - - - - false - - - Extreme Values - - - - - - Min Value - - - - - - - Max Value - - - - - - - 2.00 - - - true - - - - - - - Zoom to max value - - - - - - - Zoom to min value - - - - - - - 0.00 - - - true - - - true - - - - - - diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 037d5bb4982b..33a48a19e0ef 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -89,8 +89,8 @@ class Display_property_plugin double gI = 1.; double bI = 0.; - double expand_radius = 0; - double maxEdgeLength = -1; + double expand_radius = 0.; + double maxEdgeLength = -1.; Color_ramp color_ramp; std::vector color_map; @@ -209,8 +209,8 @@ class Display_property_plugin connect(dock_widget->zoomToMaxButton, &QPushButton::pressed, this, &Display_property_plugin::on_zoomToMaxButton_pressed); - connect(dock_widget->expandingRadiusSlider, SIGNAL(valueChanged(int)), - this, SLOT(setExpandingRadius(int))); + connect(dock_widget->expandingRadiusSlider, &QSlider::valueChanged, + this, &Display_property_plugin::setExpandingRadius); } private Q_SLOTS: @@ -512,6 +512,15 @@ private Q_SLOTS: { dock_widget->setEnabled(true); disableExtremeValues(); // only available after coloring + + // Curvature property-specific slider + const std::string& property_name = dock_widget->propertyBox->currentText().toStdString(); + const bool is_curvature_property = (property_name == "Interpolated Corrected Mean Curvature" || + property_name == "Interpolated Corrected Gaussian Curvature"); + dock_widget->expandingRadiusLabel->setVisible(is_curvature_property); + dock_widget->expandingRadiusSlider->setVisible(is_curvature_property); + dock_widget->expandingRadiusLabel->setEnabled(is_curvature_property); + dock_widget->expandingRadiusSlider->setEnabled(is_curvature_property); } else // no or broken property { @@ -854,11 +863,12 @@ private Q_SLOTS: displaySMProperty("f:display_plugin_area", *sm); } - void setExpandingRadius(const int val_int) +private Q_SLOTS: + void setExpandingRadius() { double sliderMin = dock_widget->expandingRadiusSlider->minimum(); double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin; - double val = val_int - sliderMin; + double val = dock_widget->expandingRadiusSlider->value() - sliderMin; sliderMin = 0; Scene_item* item = scene->item(scene->mainSelectionIndex()); @@ -878,7 +888,7 @@ private Q_SLOTS: if(num_edges(smesh) == 0) { expand_radius = 0; - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius: %1").arg(expand_radius)); return; } @@ -901,9 +911,10 @@ private Q_SLOTS: double outMax = 5 * maxEdgeLength, base = 1.2; expand_radius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1); - dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expand_radius)); + dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius: %1").arg(expand_radius)); } +private: void displayInterpolatedCurvatureMeasure(Scene_surface_mesh_item* item, CurvatureType mu_index) { From 15ad1f78eb521f66620f7f99792f4581ccf16db1 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 4 Aug 2023 11:20:52 +0200 Subject: [PATCH 311/943] Change example input to be analogous to uniform sizing --- .../isotropic_remeshing_with_sizing_example.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index e0564d27178d..cb4cdef20ac8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include @@ -15,10 +16,9 @@ int main(int argc, char* argv[]) // const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/hand.off"); const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/nefertiti.off"); // const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/cube.off"); - std::ifstream input(filename); Mesh mesh; - if (!input || !(input >> mesh) || !CGAL::is_triangle_mesh(mesh)) { + if (!PMP::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Not a valid input file." << std::endl; return 1; } From 1f2c0f2471e02ca8a20894927a4c480141adedc7 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 4 Aug 2023 13:15:32 +0200 Subject: [PATCH 312/943] Remove extra --- .../Adaptive_sizing_field.h | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index dc14ae91d119..dea4dc457282 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -149,29 +149,6 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return get(m_vertex_sizing_map, v); } - template - void calc_sizing_map(const FaceRange& face_range) - { - if (face_range.size() == faces(m_pmesh).size()) - { - // calculate curvature from the whole mesh - calc_sizing_map(m_pmesh); - } - else - { - // expand face selection and calculate curvature from it - std::vector selection(face_range.begin(), face_range.end()); - auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); - for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); - for (face_descriptor f : face_range) put(is_selected, f, true); - CGAL::expand_face_selection(selection, m_pmesh, 1 - , is_selected, std::back_inserter(selection)); - CGAL::Face_filtered_graph ffg(m_pmesh, selection); - - calc_sizing_map(ffg); - } - } - boost::optional is_too_long(const halfedge_descriptor h) const { const FT sqlen = sqlength(h); From 00b4b93d1cf613f91dfe9c4c8f815b08b86d1d1f Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sun, 6 Aug 2023 12:16:31 +0200 Subject: [PATCH 313/943] Remove the adaptive sizing field dependency in remesh.h --- .../examples/Polygon_mesh_processing/CMakeLists.txt | 8 ++------ .../isotropic_remeshing_with_sizing_example.cpp | 1 + .../internal/Isotropic_remeshing/Adaptive_sizing_field.h | 1 + .../include/CGAL/Polygon_mesh_processing/remesh.h | 1 - .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 3 +++ 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 3644cc490978..590305c0c8ad 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -25,8 +25,8 @@ create_single_source_cgal_program("orient_polygon_soup_example.cpp") create_single_source_cgal_program("triangulate_polyline_example.cpp") create_single_source_cgal_program("mesh_slicer_example.cpp") #create_single_source_cgal_program( "remove_degeneracies_example.cpp") -#create_single_source_cgal_program("isotropic_remeshing_example.cpp") -#create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") +create_single_source_cgal_program("isotropic_remeshing_example.cpp") +create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") create_single_source_cgal_program("tangential_relaxation_example.cpp") create_single_source_cgal_program("surface_mesh_intersection.cpp") create_single_source_cgal_program("corefinement_SM.cpp") @@ -69,10 +69,6 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(hole_filling_example_LCC PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("mesh_smoothing_example.cpp") target_link_libraries(mesh_smoothing_example PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("isotropic_remeshing_example.cpp") - target_link_libraries(isotropic_remeshing_example PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("isotropic_remeshing_of_patch_example.cpp") - target_link_libraries(isotropic_remeshing_of_patch_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("isotropic_remeshing_with_sizing_example.cpp") target_link_libraries(isotropic_remeshing_with_sizing_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("delaunay_remeshing_example.cpp") diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index cb4cdef20ac8..5d2ad63792ec 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h index dea4dc457282..2b56d6691392 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h @@ -79,6 +79,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field template void calc_sizing_map(FaceGraph& face_graph) { + //todo ip: please check if this is good enough to store curvature typedef Principal_curvatures_and_directions Principal_curvatures; typedef typename CGAL::dynamic_vertex_property_t Vertex_curvature_tag; typedef typename boost::property_map #include -#include #include #include diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 52076c1cc4c6..e495afc7e6e9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -405,6 +406,7 @@ public Q_SLOTS: else //not edges_only { if(protect && + edge_sizing_type == 0 && //todo ip: current solution for adaptive remeshing !CGAL::Polygon_mesh_processing::internal::constraints_are_short_enough( *selection_item->polyhedron(), selection_item->constrained_edges_pmap(), @@ -672,6 +674,7 @@ public Q_SLOTS: } if(protect && + edge_sizing_type == 0 && //todo ip: current solution for adaptive remeshing !CGAL::Polygon_mesh_processing::internal::constraints_are_short_enough( pmesh, ecm, From 64257b9c665fb538ca7bc66aef47de5413335d6e Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 7 Aug 2023 09:11:49 +0200 Subject: [PATCH 314/943] Add remeshing quality test --- .../Polygon_mesh_processing/CMakeLists.txt | 6 +- .../remeshing_quality_test.cpp | 106 ++++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 8ba77a7ff15e..6ec0f6e00139 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -80,10 +80,12 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(test_shape_smoothing PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("delaunay_remeshing_test.cpp") target_link_libraries(delaunay_remeshing_test PUBLIC CGAL::Eigen3_support) - create_single_source_cgal_program("test_interpolated_corrected_curvatures.cpp") - target_link_libraries(test_interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("test_decimation_of_planar_patches.cpp") target_link_libraries(test_decimation_of_planar_patches PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("test_interpolated_corrected_curvatures.cpp") + target_link_libraries(test_interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("remeshing_quality_test.cpp" ) + target_link_libraries(remeshing_quality_test PUBLIC CGAL::Eigen3_support) else() message(STATUS "NOTICE: Tests that use the Eigen library will not be compiled.") endif() diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp new file mode 100644 index 000000000000..6f04ffb07fb9 --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_3 Point_3; +typedef CGAL::Surface_mesh Mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int argc, char* argv[]) +{ + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/hand.off"); + + Mesh mesh; + if (!PMP::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) + { + std::cerr << "Not a valid input file." << std::endl; + return 1; + } + + std::cout << "Start remeshing of " << filename + << " (" << num_faces(mesh) << " faces)..." << std::endl; + + const double tol = 0.001; + const std::pair edge_min_max{0.001, 0.5}; + PMP::Adaptive_sizing_field sizing_field(tol, edge_min_max, faces(mesh), mesh); + const unsigned int nb_iter = 5; + + PMP::isotropic_remeshing( + faces(mesh), + sizing_field, + mesh, + PMP::parameters::number_of_iterations(nb_iter).number_of_relaxation_steps(3) + ); + + std::cout << "Remeshing done, checking triangle quality...\n" << std::endl; + double qmin = std::numeric_limits::max(); // minimum triangle quality + double qavg = 0.; // average quality + double min_angle = std::numeric_limits::max(); // minimum angle + double avg_min_angle = 0.; // average minimum angle + for (auto face : mesh.faces()) + { + if (PMP::is_degenerate_triangle_face(face, mesh)) + { + std::cout << "Found degenerate triangle!" << std::endl; + continue; //todo ip should something be done about this? + } + + // Calculate Q(t) triangle quality indicator + std::vector pts; pts.reserve(3); + for (auto vx : mesh.vertices_around_face(mesh.halfedge(face))) + pts.push_back(mesh.point(vx)); + + double half_perim = 0.; // half-perimeter + double lmax = 0.; // longest edge + for (int i = 0; i < 3; ++i) + { + const double length = CGAL::sqrt(CGAL::squared_distance(pts[i], pts[(i + 1) % 2])); + + half_perim += length; + if (length > lmax) lmax = length; + } + half_perim /= 2.; + const double area = CGAL::sqrt(CGAL::squared_area(pts[0], pts[1], pts[2])); + + const double face_quality = 6. / CGAL::sqrt(3.) * area / half_perim / lmax; + + qavg += face_quality; + if (face_quality < qmin) qmin = face_quality; + + // Calculate minimum angle + const auto v0 = pts[1] - pts[0]; + const auto v1 = pts[2] - pts[0]; + const auto v2 = pts[2] - pts[1]; + + const double dotp0 = CGAL::scalar_product(v0,v1); + const double angle0 = acos(dotp0 / (sqrt(v0.squared_length()) * sqrt(v1.squared_length()))); + const double dotp1 = CGAL::scalar_product(-v0, v2); + const double angle1 = acos(dotp1 / (sqrt(v0.squared_length()) * sqrt(v2.squared_length()))); + const double angle2 = CGAL_PI - (angle0 + angle1); + + double curr_min_angle = angle1; + if (angle1 < curr_min_angle) curr_min_angle = angle1; + if (angle2 < curr_min_angle) curr_min_angle = angle2; + + avg_min_angle += curr_min_angle; + if (curr_min_angle < min_angle) min_angle = curr_min_angle; + } + qavg /= mesh.number_of_faces(); + avg_min_angle /= mesh.number_of_faces(); + + std::cout << "Mesh size: " << mesh.number_of_faces() << std::endl; + std::cout << "Average quality: " << qavg << std::endl; + std::cout << "Minimum quality: " << qmin << std::endl; + std::cout << "Average minimum angle: " << avg_min_angle * 180. / CGAL_PI + << " deg" << std::endl; + std::cout << "Minimum angle: " << min_angle * 180. / CGAL_PI + << " deg" << std::endl; + + return 0; +} \ No newline at end of file From 36f8d39f92040b70d5f1d7d2f60d9c44ec4b81d4 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 7 Aug 2023 20:59:06 +0200 Subject: [PATCH 315/943] Remove extra code in tangential smoothing --- .../tangential_relaxation.h | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index d2e955841f11..c0103f943299 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -363,12 +363,6 @@ void tangential_relaxation_with_sizing(const VertexRange& vertices, typedef typename GT::Vector_3 Vector_3; typedef typename GT::Point_3 Point_3; - //todo ip: alt calc - typename GT::Construct_vector_3 vector = gt.construct_vector_3_object(); - typename GT::Compute_scalar_product_3 scalar_product = gt.compute_scalar_product_3_object(); - typename GT::Compute_squared_length_3 squared_length = gt.compute_squared_length_3_object(); - typename GT::Construct_cross_product_vector_3 cross_product = gt.construct_cross_product_vector_3_object(); - auto check_normals = [&](vertex_descriptor v) { bool first_run = true; @@ -450,28 +444,18 @@ void tangential_relaxation_with_sizing(const VertexRange& vertices, interior_hedges.push_back(h); } - //todo ip: handle border edges with sizing field if (border_halfedges.empty()) { const Vector_3& vn = vnormals.at(v); Vector_3 move = CGAL::NULL_VECTOR; double weight = 0; -// unsigned int star_size = 0; for(halfedge_descriptor h :interior_hedges) { // calculate weight - // need v0, v1 and v2 + // need v, v1 and v2 const vertex_descriptor v1 = target(next(h, tm), tm); const vertex_descriptor v2 = source(h, tm); - //todo ip- alt calc -// const Vector_3 vec0 = vector(get(vpm, v), get(vpm, v1)); -// const Vector_3 vec1 = vector(get(vpm, v), get(vpm, v2)); -// const double sqarea = squared_length(cross_product(vec0, vec1)); -// const double face_weight = CGAL::approximate_sqrt(sqarea) -// / pow(1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2)), 2); - - //todo ip- paper implementation const double tri_area = gt_area(get(vpm, v), get(vpm, v1), get(vpm, v2)); const double face_weight = tri_area / (1. / 3. * (sizing.get_sizing(v) + sizing.get_sizing(v1) + sizing.get_sizing(v2))); @@ -484,7 +468,7 @@ void tangential_relaxation_with_sizing(const VertexRange& vertices, barycenters.emplace_back(v, vn, get(vpm, v) + move); } - else + else //todo ip: do border edges need to be handled with the sizing field? { if (!relax_constraints) continue; Vector_3 vn(NULL_VECTOR); From 4a8974d256ccd06cc275990099cba8aba9d899ad Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 8 Aug 2023 10:17:52 +0200 Subject: [PATCH 316/943] Move sizing classes to 'public' headers --- .../isotropic_remeshing_with_sizing_example.cpp | 2 +- .../Isotropic_remeshing => }/Adaptive_sizing_field.h | 0 .../Isotropic_remeshing => }/Uniform_sizing_field.h | 0 .../include/CGAL/Polygon_mesh_processing/remesh.h | 2 +- .../test/Polygon_mesh_processing/remeshing_quality_test.cpp | 5 ++++- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 2 +- 6 files changed, 7 insertions(+), 4 deletions(-) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/{internal/Isotropic_remeshing => }/Adaptive_sizing_field.h (100%) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/{internal/Isotropic_remeshing => }/Uniform_sizing_field.h (100%) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp index 5d2ad63792ec..dacc3e02e1b2 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_with_sizing_example.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h similarity index 100% rename from Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Adaptive_sizing_field.h rename to Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h similarity index 100% rename from Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Uniform_sizing_field.h rename to Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index dc11e0d52a4a..ac815afa51ab 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp index 6f04ffb07fb9..01f97b210cb8 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include @@ -38,6 +38,9 @@ int main(int argc, char* argv[]) PMP::parameters::number_of_iterations(nb_iter).number_of_relaxation_steps(3) ); + /* + * More information on quality metrics can be found here: https://ieeexplore.ieee.org/document/9167456 + */ std::cout << "Remeshing done, checking triangle quality...\n" << std::endl; double qmin = std::numeric_limits::max(); // minimum triangle quality double qavg = 0.; // average quality diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index e495afc7e6e9..a63e88a69031 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include From 050c7f951235904b5a8251860f26000b18b68406 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 10 Aug 2023 21:33:27 +0200 Subject: [PATCH 317/943] Add split_long_edges functionality using adaptive sizing field as an input --- .../Isotropic_remeshing/remesh_impl.h | 36 ++++--- .../CGAL/Polygon_mesh_processing/remesh.h | 26 ++++- .../PMP/Isotropic_remeshing_plugin.cpp | 101 +++++++++++++++--- 3 files changed, 130 insertions(+), 33 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 80ab1f342a0c..bb65af3e2d10 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -383,19 +383,17 @@ namespace internal { } } - // split edges of edge_range that have their length > high // Note: only used to split a range of edges provided as input - template + template void split_long_edges(const EdgeRange& edge_range, - const double& high) + SizingFunction& sizing) { #ifdef CGAL_PMP_REMESHING_VERBOSE - std::cout << "Split long edges (" << high << ")..."; - std::cout.flush(); +// std::cout << "Split long edges (" << high << ")..."; +// std::cout.flush(); #endif - double sq_high = high*high; //collect long edges typedef std::pair H_and_sql; @@ -406,9 +404,9 @@ namespace internal { ); for(edge_descriptor e : edge_range) { - double sqlen = sqlength(e); - if (sqlen > sq_high) - long_edges.emplace(halfedge(e, mesh_), sqlen); + boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_)); + if(sqlen != boost::none) + long_edges.emplace(halfedge(e, mesh_), sqlen.get()); } //split long edges @@ -439,15 +437,19 @@ namespace internal { #ifdef CGAL_PMP_REMESHING_VERY_VERBOSE std::cout << " refinement point : " << refinement_point << std::endl; #endif + //update sizing field with the new point + if constexpr (!std::is_same_v>) + sizing.update_sizing_map(vnew); //check sub-edges - double sqlen_new = 0.25 * sqlen; - if (sqlen_new > sq_high) - { - //if it was more than twice the "long" threshold, insert them - long_edges.emplace(hnew, sqlen_new); - long_edges.emplace(next(hnew, mesh_), sqlen_new); - } + //if it was more than twice the "long" threshold, insert them + boost::optional sqlen_new = sizing.is_too_long(hnew); + if(sqlen_new != boost::none) + long_edges.emplace(hnew, sqlen_new.get()); + + sqlen_new = sizing.is_too_long(next(hnew, mesh_)); + if (sqlen_new != boost::none) + long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); //insert new edges to keep triangular faces, and update long_edges if (!is_border(hnew, mesh_)) @@ -552,7 +554,7 @@ namespace internal { halfedge_added(hnew, status(he)); halfedge_added(hnew_opp, status(opposite(he, mesh_))); - //todo ip-add: already updating sizing here because of is_too_long checks below + //update sizing field with the new point if constexpr (!std::is_same_v>) sizing.update_sizing_map(vnew); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index ac815afa51ab..7d88ad209f69 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -424,9 +424,10 @@ void isotropic_remeshing(const FaceRange& faces */ template void split_long_edges(const EdgeRange& edges - , const double& max_length + , SizingFunction& sizing , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { @@ -473,7 +474,28 @@ void split_long_edges(const EdgeRange& edges fimap, false/*need aabb_tree*/); - remesher.split_long_edges(edges, max_length); + // check if sizing field needs updating + if constexpr (!std::is_same_v>) + { + //todo ip: check if sizing field needs to be checked and updated here + } + + remesher.split_long_edges(edges, sizing); +} + +//todo ip: documentation +// overload when using max_length +template +void split_long_edges(const EdgeRange& edges + , const double max_length + , PolygonMesh& pmesh + , const NamedParameters& np = parameters::default_values()) +{ + // construct the uniform field, 3/4 as m_sq_long is stored with 4/3 of length + Uniform_sizing_field sizing(3. / 4. * max_length, pmesh); + split_long_edges(edges, sizing, pmesh, np); } } //end namespace Polygon_mesh_processing diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index a63e88a69031..00e34c5e63eb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -294,9 +294,13 @@ class Polyhedron_demo_isotropic_remeshing_plugin : PMP::triangulate_face(f_and_p.first, *f_and_p.second); } - void do_split_edges(Scene_polyhedron_selection_item* selection_item, + void do_split_edges(const int edge_sizing_type, + Scene_polyhedron_selection_item* selection_item, SMesh& pmesh, - double target_length) + const double target_length, + const double error_tol, + const double min_length, + const double max_length) { std::vector p_edges; for(edge_descriptor e : edges(pmesh)) @@ -314,12 +318,32 @@ class Polyhedron_demo_isotropic_remeshing_plugin : } } if (!p_edges.empty()) - CGAL::Polygon_mesh_processing::split_long_edges( - p_edges - , target_length - , *selection_item->polyhedron() - , CGAL::parameters::geom_traits(EPICK()) + { + if (edge_sizing_type == 0) + { + CGAL::Polygon_mesh_processing::split_long_edges( + p_edges + , target_length + , *selection_item->polyhedron() + , CGAL::parameters::geom_traits(EPICK()) + .edge_is_constrained_map(selection_item->constrained_edges_pmap())); + } + else if (edge_sizing_type == 1) + { + std::pair edge_min_max{min_length, max_length}; + CGAL::Polygon_mesh_processing::Adaptive_sizing_field adaptive_sizing( + error_tol + , edge_min_max + , faces(*selection_item->polyhedron()) + , *selection_item->polyhedron()); + CGAL::Polygon_mesh_processing::split_long_edges( + p_edges + , adaptive_sizing + , *selection_item->polyhedron() + , CGAL::parameters::geom_traits(EPICK()) .edge_is_constrained_map(selection_item->constrained_edges_pmap())); + } + } else std::cout << "No selected or boundary edges to be split" << std::endl; } @@ -401,7 +425,7 @@ public Q_SLOTS: { if (edges_only) { - do_split_edges(selection_item, pmesh, target_length); + do_split_edges(edge_sizing_type, selection_item, pmesh, target_length, error_tol, min_length, max_length); } else //not edges_only { @@ -438,7 +462,7 @@ public Q_SLOTS: } else { - do_split_edges(selection_item, pmesh, target_length); + do_split_edges(edge_sizing_type, selection_item, pmesh, target_length, error_tol, min_length, max_length); } } @@ -637,6 +661,9 @@ public Q_SLOTS: if (!edges_to_split.empty()) { if (fpmap_valid) + { + if (edge_sizing_type == 0) + { CGAL::Polygon_mesh_processing::split_long_edges( edges_to_split , target_length @@ -644,13 +671,49 @@ public Q_SLOTS: , CGAL::parameters::geom_traits(EPICK()) . edge_is_constrained_map(eif) . face_patch_map(fpmap)); + } + else if (edge_sizing_type == 1) + { + std::pair edge_min_max{min_length, max_length}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + , edge_min_max + , faces(pmesh) + , pmesh); + CGAL::Polygon_mesh_processing::split_long_edges( + edges_to_split + , target_length + , pmesh + , CGAL::parameters::geom_traits(EPICK()) + . edge_is_constrained_map(eif) + . face_patch_map(fpmap)); + } + } else + { + if (edge_sizing_type == 0) + { CGAL::Polygon_mesh_processing::split_long_edges( edges_to_split , target_length , pmesh , CGAL::parameters::geom_traits(EPICK()) . edge_is_constrained_map(eif)); + } + else if (edge_sizing_type = 1) + { + std::pair edge_min_max{min_length, max_length}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol + , edge_min_max + , faces(pmesh) + , pmesh); + CGAL::Polygon_mesh_processing::split_long_edges( + edges_to_split + , adaptive_sizing_field + , pmesh + , CGAL::parameters::geom_traits(EPICK()) + . edge_is_constrained_map(eif)); + } + } } else std::cout << "No border to be split" << std::endl; @@ -968,10 +1031,25 @@ public Q_SLOTS: for(halfedge_descriptor h : border) border_edges.push_back(edge(h, *poly_item->polyhedron())); + if (edge_sizing_type_ == 0) + { CGAL::Polygon_mesh_processing::split_long_edges( border_edges , target_length_ , *poly_item->polyhedron()); + } + else if (edge_sizing_type_ == 1) + { + std::pair edge_min_max{min_length_, max_length_}; + PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ + , edge_min_max + , faces(*poly_item->polyhedron()) + , *poly_item->polyhedron()); + CGAL::Polygon_mesh_processing::split_long_edges( + border_edges + , target_length_ + , *poly_item->polyhedron()); + } } else { @@ -1130,9 +1208,6 @@ public Q_SLOTS: ui.smooth1D_label->setEnabled(false); ui.smooth1D_checkbox->setEnabled(false); ui.smooth1D_checkbox->setChecked(false); - - ui.edgeSizing_type_combo_box->setCurrentIndex(0); - ui.edgeSizing_type_combo_box->setEnabled(false); } else { @@ -1146,8 +1221,6 @@ public Q_SLOTS: ui.smooth1D_label->setEnabled(true); ui.smooth1D_checkbox->setEnabled(true); - - ui.edgeSizing_type_combo_box->setEnabled(true); } } From 600f72fd0ecb521eeafba5f897e0b94548ebe72d Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 11 Aug 2023 15:09:23 +0200 Subject: [PATCH 318/943] Reintroduce constraints_are_short_enough for adaptive remeshing --- .../Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 00e34c5e63eb..940d576735e4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -430,7 +430,6 @@ public Q_SLOTS: else //not edges_only { if(protect && - edge_sizing_type == 0 && //todo ip: current solution for adaptive remeshing !CGAL::Polygon_mesh_processing::internal::constraints_are_short_enough( *selection_item->polyhedron(), selection_item->constrained_edges_pmap(), @@ -737,7 +736,6 @@ public Q_SLOTS: } if(protect && - edge_sizing_type == 0 && //todo ip: current solution for adaptive remeshing !CGAL::Polygon_mesh_processing::internal::constraints_are_short_enough( pmesh, ecm, @@ -1313,7 +1311,7 @@ public Q_SLOTS: ui.nbIterations_spinbox->setValue(1); ui.edgeSizing_type_combo_box->setCurrentIndex(0); - on_edgeSizing_type_combo_box_changed(0); //todo ip otherwise it shows all remeshing variables + on_edgeSizing_type_combo_box_changed(0); ui.protect_checkbox->setChecked(false); ui.smooth1D_checkbox->setChecked(true); From f589b054ed89d59e3554a416728d8ead6ab3f837 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 11 Aug 2023 15:46:21 +0200 Subject: [PATCH 319/943] Documentation update in remesh.h --- .../CGAL/Polygon_mesh_processing/remesh.h | 59 ++++++++----------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 7d88ad209f69..e22b48013068 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -31,16 +31,6 @@ namespace CGAL { namespace Polygon_mesh_processing { -/*! \todo document me or merge the doc with the original overload*/ -template -void isotropic_remeshing(const FaceRange& faces - , SizingFunction& sizing - , PolygonMesh& pmesh - , const NamedParameters& np); - /*! * \ingroup PMP_meshing_grp * @@ -54,12 +44,14 @@ void isotropic_remeshing(const FaceRange& faces * and `boost::graph_traits::%halfedge_descriptor` must be * models of `Hashable`. * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, - model of `Range`. Its iterator type is `ForwardIterator`. +* model of `Range`. Its iterator type is `ForwardIterator`. +* @tparam SizingFunction model of `Sizing_field` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh with triangulated surface patches to be remeshed * @param faces the range of triangular faces defining one or several surface patches to be remeshed -* @param target_edge_length the edge length that is targeted in the remeshed patch. +* @param sizing uniform or adaptive sizing field that determines a target length for individual edges. +* If a number is passed, it uses uniform sizing with the number as a target edge length. * If `0` is passed then only the edge-flip, tangential relaxation, and projection steps will be done. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @@ -202,23 +194,6 @@ void isotropic_remeshing(const FaceRange& faces * get a point which is exactly on the surface. * */ -template -void isotropic_remeshing(const FaceRange& faces - , const double target_edge_length - , PolygonMesh& pmesh - , const NamedParameters& np = parameters::default_values()) -{ - typedef Uniform_sizing_field Default_sizing; - Default_sizing sizing(target_edge_length, pmesh); - isotropic_remeshing( - faces, - sizing, - pmesh, - np); -} - template +void isotropic_remeshing(const FaceRange& faces + , const double target_edge_length + , PolygonMesh& pmesh + , const NamedParameters& np = parameters::default_values()) +{ + typedef Uniform_sizing_field Default_sizing; + Default_sizing sizing(target_edge_length, pmesh); + isotropic_remeshing( + faces, + sizing, + pmesh, + np); +} + /*! * \ingroup PMP_meshing_grp * @brief splits the edges listed in `edges` into sub-edges @@ -374,12 +367,13 @@ void isotropic_remeshing(const FaceRange& faces * has an internal property map for `CGAL::vertex_point_t`. * @tparam EdgeRange range of `boost::graph_traits::%edge_descriptor`, * model of `Range`. Its iterator type is `InputIterator`. +* @tparam SizingFunction model of `Sizing_field` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param edges the range of edges to be split if they are longer than given threshold -* @param max_length the edge length above which an edge from `edges` is split -* into to sub-edges +* @param sizing the sizing function that is used to split edges from 'edges' list. If a number is passed, +* all edges longer than the number are split into sub-edges. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin @@ -483,8 +477,7 @@ void split_long_edges(const EdgeRange& edges remesher.split_long_edges(edges, sizing); } -//todo ip: documentation -// overload when using max_length +// Convenience overload when using max_length for sizing template From 66721bbcd9ea9a4edd6423d2974b403a358a93c7 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sat, 12 Aug 2023 17:36:16 +0200 Subject: [PATCH 320/943] Add precondition 'remeshing mesh == sizing field mesh' --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 2 ++ .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 1 + .../internal/Isotropic_remeshing/Sizing_field.h | 1 + .../include/CGAL/Polygon_mesh_processing/remesh.h | 4 ++++ 4 files changed, 8 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 2b56d6691392..543d6645844a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -213,6 +213,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field put(m_vertex_sizing_map, v, vertex_size); } + const PolygonMesh& get_mesh() const { return m_pmesh; } + //todo ip: is_protected_constraint_too_long() from PR private: diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index a36c30aa712c..1cc96e883444 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -92,6 +92,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field get(vpmap, source(h, m_pmesh))); } + const PolygonMesh& get_mesh() const { return m_pmesh; } private: FT m_sq_short; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index 3640e14c092d..b60148c3e73d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -45,6 +45,7 @@ class Sizing_field const vertex_descriptor vb) const = 0; virtual boost::optional is_too_short(const halfedge_descriptor h) const = 0; virtual Point_3 split_placement(const halfedge_descriptor h) const = 0; + virtual const PolygonMesh& get_mesh() const = 0; }; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index e22b48013068..91a9ed2d6074 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -206,6 +206,10 @@ void isotropic_remeshing(const FaceRange& faces if (std::begin(faces)==std::end(faces)) return; + //todo ip: precondition or something else? + CGAL_precondition_msg(&(sizing.get_mesh()) == &pmesh, "Input mesh is not the same " + "as the one used for the sizing field!"); + typedef PolygonMesh PM; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::edge_descriptor edge_descriptor; From ee640c91dd6817ca8afc05086e4d4f282693f450 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sun, 13 Aug 2023 10:41:16 +0200 Subject: [PATCH 321/943] Handle the special case when target_edge_length is 0 --- .../CGAL/Polygon_mesh_processing/remesh.h | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 91a9ed2d6074..d146fb57597e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -339,22 +339,20 @@ void isotropic_remeshing(const FaceRange& faces #endif } -// Convenience overload when using target_edge_length for sizing +// Overload when using target_edge_length for sizing template + , typename FaceRange + , typename NamedParameters = parameters::Default_named_parameters> void isotropic_remeshing(const FaceRange& faces - , const double target_edge_length - , PolygonMesh& pmesh - , const NamedParameters& np = parameters::default_values()) + , const double target_edge_length + , PolygonMesh& pmesh + , const NamedParameters& np = parameters::default_values()) { - typedef Uniform_sizing_field Default_sizing; - Default_sizing sizing(target_edge_length, pmesh); - isotropic_remeshing( - faces, - sizing, - pmesh, - np); + Uniform_sizing_field sizing(target_edge_length, pmesh); + if (target_edge_length > 0) + isotropic_remeshing(faces, sizing, pmesh, np); + else + isotropic_remeshing(faces, sizing, pmesh, np.do_split(false).do_collapse(false)); } /*! From 6ee23c6fdddabbb95bdf1109b4f571f34f70966f Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 15 Aug 2023 20:07:58 +0200 Subject: [PATCH 322/943] Replace pmesh with vertex property maps in sizing field classes --- .../Adaptive_sizing_field.h | 78 +++++++++---------- .../Uniform_sizing_field.h | 45 +++++------ .../Isotropic_remeshing/Sizing_field.h | 16 ++-- .../Isotropic_remeshing/remesh_impl.h | 36 ++++----- .../CGAL/Polygon_mesh_processing/remesh.h | 8 +- .../PMP/Isotropic_remeshing_plugin.cpp | 2 +- 6 files changed, 89 insertions(+), 96 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 543d6645844a..1e8151c14b32 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -38,10 +38,11 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename Base::face_descriptor face_descriptor; typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; + typedef typename Base::DefaultVPMap DefaultVPMap; typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; typedef typename boost::property_map::type Vertex_sizing_map; + Vertex_property_tag>::type VertexSizingMap; template Adaptive_sizing_field(const double tol @@ -51,25 +52,24 @@ class Adaptive_sizing_field : public CGAL::Sizing_field : tol(tol) , m_short(edge_len_min_max.first) , m_long(edge_len_min_max.second) - , m_pmesh(pmesh) + , m_vpmap(get(CGAL::vertex_point, pmesh)) + , m_vertex_sizing_map(get(Vertex_property_tag(), pmesh)) { - m_vertex_sizing_map = get(Vertex_property_tag(), m_pmesh); - - if (face_range.size() == faces(m_pmesh).size()) + if (face_range.size() == faces(pmesh).size()) { // calculate curvature from the whole mesh - calc_sizing_map(m_pmesh); + calc_sizing_map(pmesh); } else { // expand face selection and calculate curvature from it std::vector selection(face_range.begin(), face_range.end()); - auto is_selected = get(CGAL::dynamic_face_property_t(), m_pmesh); - for (face_descriptor f : faces(m_pmesh)) put(is_selected, f, false); + auto is_selected = get(CGAL::dynamic_face_property_t(), pmesh); + for (face_descriptor f : faces(pmesh)) put(is_selected, f, false); for (face_descriptor f : face_range) put(is_selected, f, true); - CGAL::expand_face_selection(selection, m_pmesh, 1 + CGAL::expand_face_selection(selection, pmesh, 1 , is_selected, std::back_inserter(selection)); - CGAL::Face_filtered_graph ffg(m_pmesh, selection); + CGAL::Face_filtered_graph ffg(pmesh, selection); calc_sizing_map(ffg); } @@ -134,14 +134,12 @@ class Adaptive_sizing_field : public CGAL::Sizing_field FT sqlength(const vertex_descriptor va, const vertex_descriptor vb) const { - typename boost::property_map::const_type - vpmap = get(CGAL::vertex_point, m_pmesh); - return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); + return FT(CGAL::squared_distance(get(m_vpmap, va), get(m_vpmap, vb))); } - FT sqlength(const halfedge_descriptor& h) const + FT sqlength(const halfedge_descriptor& h, const PolygonMesh& pmesh) const { - return sqlength(target(h, m_pmesh), source(h, m_pmesh)); + return sqlength(target(h, pmesh), source(h, pmesh)); } public: @@ -150,13 +148,13 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return get(m_vertex_sizing_map, v); } - boost::optional is_too_long(const halfedge_descriptor h) const + boost::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - const FT sqlen = sqlength(h); - FT sqtarg_len = CGAL::square(4./3. * CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh)))); - CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); - CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); + const FT sqlen = sqlength(h, pmesh); + FT sqtarg_len = CGAL::square(4./3. * CGAL::min(get(m_vertex_sizing_map, source(h, pmesh)), + get(m_vertex_sizing_map, target(h, pmesh)))); + CGAL_assertion(get(m_vertex_sizing_map, source(h, pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, target(h, pmesh))); if(sqlen > sqtarg_len) return sqlen; else @@ -177,52 +175,46 @@ class Adaptive_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_short(const halfedge_descriptor h) const + boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - const FT sqlen = sqlength(h); - FT sqtarg_len = CGAL::square(4./5. * CGAL::min(get(m_vertex_sizing_map, source(h, m_pmesh)), - get(m_vertex_sizing_map, target(h, m_pmesh)))); - CGAL_assertion(get(m_vertex_sizing_map, source(h, m_pmesh))); - CGAL_assertion(get(m_vertex_sizing_map, target(h, m_pmesh))); + const FT sqlen = sqlength(h, pmesh); + FT sqtarg_len = CGAL::square(4./5. * CGAL::min(get(m_vertex_sizing_map, source(h, pmesh)), + get(m_vertex_sizing_map, target(h, pmesh)))); + CGAL_assertion(get(m_vertex_sizing_map, source(h, pmesh))); + CGAL_assertion(get(m_vertex_sizing_map, target(h, pmesh))); if (sqlen < sqtarg_len) return sqlen; else return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor h) const + virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - typename boost::property_map::const_type - vpmap = get(CGAL::vertex_point, m_pmesh); - return CGAL::midpoint(get(vpmap, target(h, m_pmesh)), - get(vpmap, source(h, m_pmesh))); + return CGAL::midpoint(get(m_vpmap, target(h, pmesh)), + get(m_vpmap, source(h, pmesh))); } - void update_sizing_map(const vertex_descriptor v) + void update_sizing_map(const vertex_descriptor v, const PolygonMesh& pmesh) { // calculating it as the average of two vertices on other ends // of halfedges as updating is done during an edge split FT vertex_size = 0; - CGAL_assertion(CGAL::halfedges_around_target(v, m_pmesh).size() == 2); - for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, m_pmesh)) + CGAL_assertion(CGAL::halfedges_around_target(v, pmesh).size() == 2); + for (halfedge_descriptor ha: CGAL::halfedges_around_target(v, pmesh)) { - vertex_size += get(m_vertex_sizing_map, source(ha, m_pmesh)); + vertex_size += get(m_vertex_sizing_map, source(ha, pmesh)); } - vertex_size /= CGAL::halfedges_around_target(v, m_pmesh).size(); + vertex_size /= CGAL::halfedges_around_target(v, pmesh).size(); put(m_vertex_sizing_map, v, vertex_size); } - const PolygonMesh& get_mesh() const { return m_pmesh; } - - //todo ip: is_protected_constraint_too_long() from PR - private: const FT tol; const FT m_short; const FT m_long; - PolygonMesh& m_pmesh; - Vertex_sizing_map m_vertex_sizing_map; + const DefaultVPMap m_vpmap; + VertexSizingMap m_vertex_sizing_map; }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 1cc96e883444..2e047548adaa 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -23,11 +23,12 @@ namespace CGAL { namespace Polygon_mesh_processing { -template -class Uniform_sizing_field : public CGAL::Sizing_field +template ::const_type> +class Uniform_sizing_field : public CGAL::Sizing_field { private: - typedef CGAL::Sizing_field Base; + typedef CGAL::Sizing_field Base; public: typedef typename Base::FT FT; @@ -35,30 +36,34 @@ class Uniform_sizing_field : public CGAL::Sizing_field typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; - Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + Uniform_sizing_field(const FT size, const VPMap& vpmap) : m_sq_short( CGAL::square(4./5. * size)) , m_sq_long( CGAL::square(4./3. * size)) - , m_pmesh(pmesh) + , m_vpmap(vpmap) + {} + + Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + : m_sq_short( CGAL::square(4./5. * size)) + , m_sq_long( CGAL::square(4./3. * size)) + , m_vpmap(get(CGAL::vertex_point, pmesh)) {} private: FT sqlength(const vertex_descriptor va, const vertex_descriptor vb) const { - typename boost::property_map::const_type - vpmap = get(CGAL::vertex_point, m_pmesh); - return FT(CGAL::squared_distance(get(vpmap, va), get(vpmap, vb))); + return FT(CGAL::squared_distance(get(m_vpmap, va), get(m_vpmap, vb))); } - FT sqlength(const halfedge_descriptor& h) const + FT sqlength(const halfedge_descriptor& h, const PolygonMesh& pmesh) const { - return sqlength(target(h, m_pmesh), source(h, m_pmesh)); + return sqlength(target(h, pmesh), source(h, pmesh)); } public: - boost::optional is_too_long(const halfedge_descriptor h) const + boost::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - const FT sqlen = sqlength(h); + const FT sqlen = sqlength(h, pmesh); if(sqlen > m_sq_long) return sqlen; else @@ -75,29 +80,25 @@ class Uniform_sizing_field : public CGAL::Sizing_field return boost::none; } - boost::optional is_too_short(const halfedge_descriptor h) const + boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - const FT sqlen = sqlength(h); + const FT sqlen = sqlength(h, pmesh); if (sqlen < m_sq_long) return sqlen; else return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor h) const + virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - typename boost::property_map::const_type - vpmap = get(CGAL::vertex_point, m_pmesh); - return CGAL::midpoint(get(vpmap, target(h, m_pmesh)), - get(vpmap, source(h, m_pmesh))); + return CGAL::midpoint(get(m_vpmap, target(h, pmesh)), + get(m_vpmap, source(h, pmesh))); } - const PolygonMesh& get_mesh() const { return m_pmesh; } - private: FT m_sq_short; FT m_sq_long; - const PolygonMesh& m_pmesh; + const VPMap m_vpmap; }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index b60148c3e73d..d4109708352b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -23,14 +23,17 @@ namespace CGAL /*! * Sizing field virtual class */ -template +template ::const_type> class Sizing_field { private: typedef PolygonMesh PM; - typedef typename boost::property_map::const_type VPMap; typedef typename boost::property_traits::value_type Point; +protected: + typedef typename boost::property_map::const_type DefaultVPMap; + public: typedef typename CGAL::Kernel_traits::Kernel K; typedef typename boost::graph_traits::face_descriptor face_descriptor; @@ -40,12 +43,13 @@ class Sizing_field typedef typename K::FT FT; public: - virtual boost::optional is_too_long(const halfedge_descriptor h) const = 0; + virtual boost::optional is_too_long(const halfedge_descriptor h, + const PolygonMesh& pmesh) const = 0; virtual boost::optional is_too_long(const vertex_descriptor va, const vertex_descriptor vb) const = 0; - virtual boost::optional is_too_short(const halfedge_descriptor h) const = 0; - virtual Point_3 split_placement(const halfedge_descriptor h) const = 0; - virtual const PolygonMesh& get_mesh() const = 0; + virtual boost::optional is_too_short(const halfedge_descriptor h, + const PolygonMesh& pmesh) const = 0; + virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const = 0; }; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index bb65af3e2d10..27ea3cd29271 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -78,7 +78,7 @@ namespace CGAL { namespace Polygon_mesh_processing { -template class Uniform_sizing_field; +template class Uniform_sizing_field; namespace internal { @@ -404,7 +404,7 @@ namespace internal { ); for(edge_descriptor e : edge_range) { - boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_)); + boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); if(sqlen != boost::none) long_edges.emplace(halfedge(e, mesh_), sqlen.get()); } @@ -438,16 +438,16 @@ namespace internal { std::cout << " refinement point : " << refinement_point << std::endl; #endif //update sizing field with the new point - if constexpr (!std::is_same_v>) - sizing.update_sizing_map(vnew); + if constexpr (!std::is_same_v>) + sizing.update_sizing_map(vnew, mesh_); //check sub-edges //if it was more than twice the "long" threshold, insert them - boost::optional sqlen_new = sizing.is_too_long(hnew); + boost::optional sqlen_new = sizing.is_too_long(hnew, mesh_); if(sqlen_new != boost::none) long_edges.emplace(hnew, sqlen_new.get()); - sqlen_new = sizing.is_too_long(next(hnew, mesh_)); + sqlen_new = sizing.is_too_long(next(hnew, mesh_), mesh_); if (sqlen_new != boost::none) long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); @@ -504,7 +504,7 @@ namespace internal { { if (!is_split_allowed(e)) continue; - boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_)); + boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); if(sqlen != boost::none) long_edges.emplace(halfedge(e, mesh_), sqlen.get()); } @@ -535,7 +535,7 @@ namespace internal { Patch_id patch_id_opp = get_patch_id(face(opposite(he, mesh_), mesh_)); //split edge - Point refinement_point = sizing.split_placement(he); + Point refinement_point = sizing.split_placement(he, mesh_); halfedge_descriptor hnew = CGAL::Euler::split_edge(he, mesh_); CGAL_assertion(he == next(hnew, mesh_)); put(ecmap_, edge(hnew, mesh_), get(ecmap_, edge(he, mesh_)) ); @@ -555,16 +555,16 @@ namespace internal { halfedge_added(hnew_opp, status(opposite(he, mesh_))); //update sizing field with the new point - if constexpr (!std::is_same_v>) - sizing.update_sizing_map(vnew); + if constexpr (!std::is_same_v>) + sizing.update_sizing_map(vnew, mesh_); //check sub-edges //if it was more than twice the "long" threshold, insert them - boost::optional sqlen_new = sizing.is_too_long(hnew); + boost::optional sqlen_new = sizing.is_too_long(hnew, mesh_); if(sqlen_new != boost::none) long_edges.emplace(hnew, sqlen_new.get()); - sqlen_new = sizing.is_too_long(next(hnew, mesh_)); + sqlen_new = sizing.is_too_long(next(hnew, mesh_), mesh_); if (sqlen_new != boost::none) long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); @@ -585,7 +585,7 @@ namespace internal { if (snew == PATCH) { - boost::optional sql = sizing.is_too_long(hnew2); + boost::optional sql = sizing.is_too_long(hnew2, mesh_); if(sql != boost::none) long_edges.emplace(hnew2, sql.get()); } @@ -608,7 +608,7 @@ namespace internal { if (snew == PATCH) { - boost::optional sql = sizing.is_too_long(hnew2); + boost::optional sql = sizing.is_too_long(hnew2, mesh_); if (sql != boost::none) long_edges.emplace(hnew2, sql.get()); } @@ -653,7 +653,7 @@ namespace internal { Boost_bimap short_edges; for(edge_descriptor e : edges(mesh_)) { - boost::optional sqlen = sizing.is_too_short(halfedge(e, mesh_)); + boost::optional sqlen = sizing.is_too_short(halfedge(e, mesh_), mesh_); if(sqlen != boost::none && is_collapse_allowed(e, collapse_constraints)) short_edges.insert(short_edge(halfedge(e, mesh_), sqlen.get())); @@ -818,7 +818,7 @@ namespace internal { //insert new/remaining short edges for (halfedge_descriptor ht : halfedges_around_target(vkept, mesh_)) { - boost::optional sqlen = sizing.is_too_short(ht); + boost::optional sqlen = sizing.is_too_short(ht, mesh_); if (sqlen != boost::none && is_collapse_allowed(edge(ht, mesh_), collapse_constraints)) short_edges.insert(short_edge(ht, sqlen.get())); @@ -1053,7 +1053,7 @@ namespace internal { auto constrained_vertices_pmap = boost::make_function_property_map(vertex_constraint); - if constexpr (std::is_same>::value) + if constexpr (std::is_same>::value) { #ifdef CGAL_PMP_REMESHING_VERBOSE std::cout << " using tangential relaxation with weights equal to 1"; @@ -1768,7 +1768,7 @@ namespace internal { //insert new edges in 'short_edges' if (is_collapse_allowed(edge(hf, mesh_), collapse_constraints)) { - boost::optional sqlen = sizing.is_too_short(hf); + boost::optional sqlen = sizing.is_too_short(hf, mesh_); if (sqlen != boost::none) short_edges.insert(typename Bimap::value_type(hf, sqlen.get())); } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index d146fb57597e..70771b6c81bf 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -206,10 +206,6 @@ void isotropic_remeshing(const FaceRange& faces if (std::begin(faces)==std::end(faces)) return; - //todo ip: precondition or something else? - CGAL_precondition_msg(&(sizing.get_mesh()) == &pmesh, "Input mesh is not the same " - "as the one used for the sizing field!"); - typedef PolygonMesh PM; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::edge_descriptor edge_descriptor; @@ -348,7 +344,7 @@ void isotropic_remeshing(const FaceRange& faces , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { - Uniform_sizing_field sizing(target_edge_length, pmesh); + Uniform_sizing_field sizing(target_edge_length, pmesh); if (target_edge_length > 0) isotropic_remeshing(faces, sizing, pmesh, np); else @@ -471,7 +467,7 @@ void split_long_edges(const EdgeRange& edges false/*need aabb_tree*/); // check if sizing field needs updating - if constexpr (!std::is_same_v>) + if constexpr (!std::is_same_v>) { //todo ip: check if sizing field needs to be checked and updated here } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 940d576735e4..1185567f05ab 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -698,7 +698,7 @@ public Q_SLOTS: , CGAL::parameters::geom_traits(EPICK()) . edge_is_constrained_map(eif)); } - else if (edge_sizing_type = 1) + else if (edge_sizing_type == 1) { std::pair edge_min_max{min_length, max_length}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol From ff4bbaa1554bd33233a08dcd6a35ffa4b0583e64 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 15 Aug 2023 20:10:39 +0200 Subject: [PATCH 323/943] Target length fix --- .../include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 2e047548adaa..0a259d3ef31a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -83,7 +83,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const { const FT sqlen = sqlength(h, pmesh); - if (sqlen < m_sq_long) + if (sqlen < m_sq_short) return sqlen; else return boost::none; From e3727e4a88c318bdd97b20e6fd55f8ebd750587d Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Tue, 15 Aug 2023 20:14:11 +0200 Subject: [PATCH 324/943] Remove todos --- .../test/Polygon_mesh_processing/remeshing_quality_test.cpp | 2 +- .../demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp index 01f97b210cb8..69b2afaaca01 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_quality_test.cpp @@ -51,7 +51,7 @@ int main(int argc, char* argv[]) if (PMP::is_degenerate_triangle_face(face, mesh)) { std::cout << "Found degenerate triangle!" << std::endl; - continue; //todo ip should something be done about this? + continue; } // Calculate Q(t) triangle quality indicator diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 1185567f05ab..3f1816d7ce31 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -1289,7 +1289,6 @@ public Q_SLOTS: ui.edgeLength_dspinbox->setValue(0.05 * diago_length); - //todo ip - check and adjust these ui.errorTol_edit->setValue(0.001 * diago_length); ui.minEdgeLength_edit->setValue(0.001 * diago_length); ui.maxEdgeLength_edit->setValue(0.5 * diago_length); From 98a3f14c7382cf23e26f0cc8fb8e5ab46b2dc6cf Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 16 Aug 2023 18:55:15 +0200 Subject: [PATCH 325/943] Add PMPSizingField concept to docs --- .../Concepts/PMPSizingField.h | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h new file mode 100644 index 000000000000..5304beb32205 --- /dev/null +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h @@ -0,0 +1,59 @@ +/// \ingroup PkgPolygonMeshProcessingConcepts +/// \cgalConcept +/// +/// The concept `PMPSizingField` defines the requirements for the sizing field +/// used in `CGAL::Polygon_mesh_processing::isotropic_remeshing()` to define +/// the target length for every individual edge during the remeshing process. + +class PMPSizingField{ +public: + +/// @name Types +/// @{ + +/// Vertex descriptor type +typedef unspecified_type vertex_descriptor; + +/// Halfedge descriptor type +typedef unspecified_type halfedge_descriptor; + +/// 3D point type +typedef unspecified_type Point_3; + +/// Polygon mesh type +typedef unspecified_type PolygonMesh; + +/// Numerical type +typedef unspecified_type FT; + +/// @} + +/// @name Functions +/// @{ + +/// called to check whether the halfedge 'h' is longer than the target edge size +/// and as such should be split. If the halfedge is longer, it returns the squared +/// length of the edge. +boost::optional is_too_long(const halfedge_descriptor h, + const PolygonMesh& pmesh) const; + +/// called to check whether the halfedge with end vertices 'va' and 'vb' is longer +/// than the target edge size and as such should be split. If the halfedge is longer, +/// it returns the squared length of the edge. +boost::optional is_too_long(const vertex_descriptor va, + const vertex_descriptor vb) const; + +/// called to check whether the halfedge 'h' should be collapsed in case it is +/// shorter than the target edge size +boost::optional is_too_short(const halfedge_descriptor h, + const PolygonMesh& pmesh) const; + +/// called to define the location of the halfedge 'h' split in case 'is_too_long' +/// returns a value +Point_3 split_placement(const halfedge_descriptor h, + const PolygonMesh& pmesh) const; + +/// @} +}; + + From 9e91abb5398fe9a94ac08ced0fdc4c80f7213142 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 16 Aug 2023 20:18:22 +0200 Subject: [PATCH 326/943] First attempt at sizing field docs --- .../Adaptive_sizing_field.h | 33 ++++++++++++++ .../Uniform_sizing_field.h | 45 +++++++++++++++++-- .../tangential_relaxation.h | 1 + 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 1e8151c14b32..1c6915b4c96d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -25,6 +25,22 @@ namespace CGAL { namespace Polygon_mesh_processing { +/*! +* \ingroup PMP_meshing_grp +* provides a set of instructions for isotropic remeshing to achieve variable +* mesh edge lengths as a function of local discrete curvatures. +* +* Edges longer than the local target edge length are split in half, while +* edges shorter than the local target edge length are collapsed. +* +* \cgalModels PMPSizingField +* +* \sa `isotropic_remeshing` +* \sa `Uniform_sizing_field` +* +* @tparam PolygonMesh model of `MutableFaceGraph` that +* has an internal property map for `CGAL::vertex_point_t`. +*/ template class Adaptive_sizing_field : public CGAL::Sizing_field { @@ -44,6 +60,22 @@ class Adaptive_sizing_field : public CGAL::Sizing_field typedef typename boost::property_map::type VertexSizingMap; + /// \name Creation + /// @{ + /*! + * Returns an object to serve as criteria for adaptive curvature-based edge lengths. + * + * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, + * model of `Range`. Its iterator type is `ForwardIterator`. + * + * @param tol the error tolerance, the maximum deviation of an edge from the original + * mesh. Lower tolerance values will result in shorter mesh edges. + * @param edge_len_min_max is the stopping criterion for minimum and maximum allowed + * edge length. + * @param face_range the range of triangular faces defining one or several surface patches + * to be remeshed. + * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. + */ template Adaptive_sizing_field(const double tol , const std::pair& edge_len_min_max @@ -74,6 +106,7 @@ class Adaptive_sizing_field : public CGAL::Sizing_field calc_sizing_map(ffg); } } + ///@} private: template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 0a259d3ef31a..956ebeb21706 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -23,6 +23,25 @@ namespace CGAL { namespace Polygon_mesh_processing { +/*! +* \ingroup PMP_meshing_grp +* provides a set of instructions for isotropic remeshing to achieve uniform +* mesh edge lengths. +* +* Edges longer than the 4/3 of the target edge length will be split in half, while +* edges shorter than the 4/5 of the target edge length will be collapsed. +* +* \cgalModels PMPSizingField +* +* \sa `isotropic_remeshing` +* \sa `Adaptive_sizing_field` +* +* @tparam PolygonMesh model of `MutableFaceGraph` that +* has an internal property map for `CGAL::vertex_point_t`. +* @tparam VPMap a property map associating points to the vertices of `pmesh`. +* It is a a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type. Default is `boost::get(CGAL::vertex_point, pmesh)`. +*/ template ::const_type> class Uniform_sizing_field : public CGAL::Sizing_field @@ -36,18 +55,36 @@ class Uniform_sizing_field : public CGAL::Sizing_field typedef typename Base::halfedge_descriptor halfedge_descriptor; typedef typename Base::vertex_descriptor vertex_descriptor; - Uniform_sizing_field(const FT size, const VPMap& vpmap) + /// \name Creation + /// @{ + /*! + * Returns an object to serve as criterion for uniform edge lengths. + * + * @param size is the target edge length for the isotropic remeshing. If set to 0, + * the criterion for edge length is ignored and edges are neither split nor collapsed. + * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. + */ + Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) : m_sq_short( CGAL::square(4./5. * size)) , m_sq_long( CGAL::square(4./3. * size)) - , m_vpmap(vpmap) + , m_vpmap(get(CGAL::vertex_point, pmesh)) {} - Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + /*! + * Returns an object to serve as criterion for uniform edge lengths. + * \param size is the target edge length for the isotropic remeshing. If set to 0, + * the criterion for edge length is ignored and edges are neither split nor collapsed. + * \param vpmap is the input vertex point map that associates points to the vertices of + * an input mesh. + */ + Uniform_sizing_field(const FT size, const VPMap& vpmap) : m_sq_short( CGAL::square(4./5. * size)) , m_sq_long( CGAL::square(4./3. * size)) - , m_vpmap(get(CGAL::vertex_point, pmesh)) + , m_vpmap(vpmap) {} + /// @} + private: FT sqlength(const vertex_descriptor va, const vertex_descriptor vb) const diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index c0103f943299..54b614304e19 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -317,6 +317,7 @@ void tangential_relaxation(const VertexRange& vertices, #endif } +//todo ip: doc here? template Date: Thu, 17 Aug 2023 00:29:19 +0200 Subject: [PATCH 327/943] Fix templating error in isotropic remeshing overload --- .../include/CGAL/Polygon_mesh_processing/remesh.h | 9 ++++++++- .../Plugins/PMP/Isotropic_remeshing_plugin.cpp | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 70771b6c81bf..bee2a645b2c4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -344,7 +344,14 @@ void isotropic_remeshing(const FaceRange& faces , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { - Uniform_sizing_field sizing(target_edge_length, pmesh); + using parameters::choose_parameter; + using parameters::get_parameter; + + typedef typename GetVertexPointMap::type VPMap; + VPMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point), + get_property_map(vertex_point, pmesh)); + + Uniform_sizing_field sizing(target_edge_length, vpmap); if (target_edge_length > 0) isotropic_remeshing(faces, sizing, pmesh, np); else diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 3f1816d7ce31..a819c2c22943 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -435,7 +435,7 @@ public Q_SLOTS: selection_item->constrained_edges_pmap(), get(CGAL::vertex_point, *selection_item->polyhedron()), CGAL::Constant_property_map(1), - CGAL::Polygon_mesh_processing::Uniform_sizing_field( 4. / 3. * target_length, pmesh))) + CGAL::Polygon_mesh_processing::Uniform_sizing_field( 4. / 3. * target_length, pmesh))) { QApplication::restoreOverrideCursor(); //If facets are selected, splitting edges will add facets that won't be selected, and it will mess up the rest. @@ -741,7 +741,7 @@ public Q_SLOTS: ecm, get(CGAL::vertex_point, pmesh), CGAL::Constant_property_map(1), - CGAL::Polygon_mesh_processing::Uniform_sizing_field(4. / 3. * target_length, pmesh))) + CGAL::Polygon_mesh_processing::Uniform_sizing_field(4. / 3. * target_length, pmesh))) { QApplication::restoreOverrideCursor(); QMessageBox::warning(mw, tr("Error"), From f5d23db40a57b816024edb19ee483aaf7f40ae37 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 17 Aug 2023 08:03:37 +0200 Subject: [PATCH 328/943] Add template argument to constructor --- .../include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 956ebeb21706..ce80e3edd0a6 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -64,7 +64,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field * the criterion for edge length is ignored and edges are neither split nor collapsed. * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. */ - Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) : m_sq_short( CGAL::square(4./5. * size)) , m_sq_long( CGAL::square(4./3. * size)) , m_vpmap(get(CGAL::vertex_point, pmesh)) From 1f9142bfc2e116623c364c1ff884e4533dfaf284 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 17 Aug 2023 18:19:03 +0200 Subject: [PATCH 329/943] Try to fix failing test --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 5 +++-- .../internal/Isotropic_remeshing/Sizing_field.h | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 1c6915b4c96d..2914a1c36053 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -41,8 +41,9 @@ namespace Polygon_mesh_processing * @tparam PolygonMesh model of `MutableFaceGraph` that * has an internal property map for `CGAL::vertex_point_t`. */ -template -class Adaptive_sizing_field : public CGAL::Sizing_field +template ::const_type> +class Adaptive_sizing_field : public CGAL::Sizing_field { private: typedef CGAL::Sizing_field Base; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index d4109708352b..331e2ab922d0 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -16,6 +16,8 @@ #include #include +#include + #include namespace CGAL From 46b50511a70fdd06405344128ba9fc63cfb9fad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 18 Aug 2023 10:16:45 +0200 Subject: [PATCH 330/943] add missing include directive detected by the CI --- .../Adaptive_sizing_field.h | 16 ++++++++++------ .../internal/Isotropic_remeshing/Sizing_field.h | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 2914a1c36053..06b662afbe04 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -16,11 +16,15 @@ #include #include - #include +#include +#include + #include + + namespace CGAL { namespace Polygon_mesh_processing @@ -100,9 +104,9 @@ class Adaptive_sizing_field : public CGAL::Sizing_field auto is_selected = get(CGAL::dynamic_face_property_t(), pmesh); for (face_descriptor f : faces(pmesh)) put(is_selected, f, false); for (face_descriptor f : face_range) put(is_selected, f, true); - CGAL::expand_face_selection(selection, pmesh, 1 - , is_selected, std::back_inserter(selection)); - CGAL::Face_filtered_graph ffg(pmesh, selection); + expand_face_selection(selection, pmesh, 1, + is_selected, std::back_inserter(selection)); + Face_filtered_graph ffg(pmesh, selection); calc_sizing_map(ffg); } @@ -224,8 +228,8 @@ class Adaptive_sizing_field : public CGAL::Sizing_field virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - return CGAL::midpoint(get(m_vpmap, target(h, pmesh)), - get(m_vpmap, source(h, pmesh))); + return midpoint(get(m_vpmap, target(h, pmesh)), + get(m_vpmap, source(h, pmesh))); } void update_sizing_map(const vertex_descriptor v, const PolygonMesh& pmesh) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h index 331e2ab922d0..8267df50f556 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h @@ -16,7 +16,7 @@ #include #include -#include +#include #include From e845b07bab5a8d3d11dd1a574385bc2658276869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 18 Aug 2023 10:51:56 +0200 Subject: [PATCH 331/943] using Koening lookup --- .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index ce80e3edd0a6..fb88321d6a2c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -89,7 +89,7 @@ class Uniform_sizing_field : public CGAL::Sizing_field FT sqlength(const vertex_descriptor va, const vertex_descriptor vb) const { - return FT(CGAL::squared_distance(get(m_vpmap, va), get(m_vpmap, vb))); + return FT(squared_distance(get(m_vpmap, va), get(m_vpmap, vb))); } FT sqlength(const halfedge_descriptor& h, const PolygonMesh& pmesh) const @@ -128,8 +128,8 @@ class Uniform_sizing_field : public CGAL::Sizing_field virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { - return CGAL::midpoint(get(m_vpmap, target(h, pmesh)), - get(m_vpmap, source(h, pmesh))); + return midpoint(get(m_vpmap, target(h, pmesh)), + get(m_vpmap, source(h, pmesh))); } private: From b69a2671fe9b0d040fc6123993d5622a2a6d357f Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 18 Aug 2023 17:45:59 +0200 Subject: [PATCH 332/943] Rename Sizing_field to Sizing_field_base --- .../Polygon_mesh_processing/Adaptive_sizing_field.h | 11 ++++------- .../Polygon_mesh_processing/Uniform_sizing_field.h | 6 +++--- .../{Sizing_field.h => Sizing_field_base.h} | 2 +- .../include/CGAL/Polygon_mesh_processing/remesh.h | 4 ++-- 4 files changed, 10 insertions(+), 13 deletions(-) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/{Sizing_field.h => Sizing_field_base.h} (98%) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 06b662afbe04..60b5e3a8855f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -15,7 +15,7 @@ #include -#include +#include #include #include @@ -23,8 +23,6 @@ #include - - namespace CGAL { namespace Polygon_mesh_processing @@ -45,12 +43,11 @@ namespace Polygon_mesh_processing * @tparam PolygonMesh model of `MutableFaceGraph` that * has an internal property map for `CGAL::vertex_point_t`. */ -template ::const_type> -class Adaptive_sizing_field : public CGAL::Sizing_field +template +class Adaptive_sizing_field : public CGAL::Sizing_field_base { private: - typedef CGAL::Sizing_field Base; + typedef CGAL::Sizing_field_base Base; public: typedef typename Base::K K; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index fb88321d6a2c..d22e0079d7fd 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -15,7 +15,7 @@ #include -#include +#include #include @@ -44,10 +44,10 @@ namespace Polygon_mesh_processing */ template ::const_type> -class Uniform_sizing_field : public CGAL::Sizing_field +class Uniform_sizing_field : public CGAL::Sizing_field_base { private: - typedef CGAL::Sizing_field Base; + typedef CGAL::Sizing_field_base Base; public: typedef typename Base::FT FT; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h similarity index 98% rename from Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h rename to Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 8267df50f556..81afe3af21fa 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -27,7 +27,7 @@ namespace CGAL */ template ::const_type> -class Sizing_field +class Sizing_field_base { private: typedef PolygonMesh PM; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index bee2a645b2c4..842d980eae80 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -45,7 +45,7 @@ namespace Polygon_mesh_processing { * models of `Hashable`. * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, * model of `Range`. Its iterator type is `ForwardIterator`. -* @tparam SizingFunction model of `Sizing_field` +* @tparam SizingFunction model of `PMPSizingField` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh with triangulated surface patches to be remeshed @@ -372,7 +372,7 @@ void isotropic_remeshing(const FaceRange& faces * has an internal property map for `CGAL::vertex_point_t`. * @tparam EdgeRange range of `boost::graph_traits::%edge_descriptor`, * model of `Range`. Its iterator type is `InputIterator`. -* @tparam SizingFunction model of `Sizing_field` +* @tparam SizingFunction model of `Sizing_field_base` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh From 35153d509d2efc054be9a3ec67069d1a105b12de Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 18 Aug 2023 19:07:07 +0200 Subject: [PATCH 333/943] Update documentation --- .../Concepts/PMPSizingField.h | 13 ++- .../CGAL/Polygon_mesh_processing/remesh.h | 2 +- .../tangential_relaxation.h | 85 ++++++++++++++++++- 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h index 5304beb32205..da58562c5577 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h @@ -31,28 +31,27 @@ typedef unspecified_type FT; /// @name Functions /// @{ -/// called to check whether the halfedge 'h' is longer than the target edge size +/// called to check whether the halfedge `h` is longer than the target edge size /// and as such should be split. If the halfedge is longer, it returns the squared /// length of the edge. boost::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const; -/// called to check whether the halfedge with end vertices 'va' and 'vb' is longer +/// called to check whether the halfedge with end vertices `va` and `vb` is longer /// than the target edge size and as such should be split. If the halfedge is longer, /// it returns the squared length of the edge. boost::optional is_too_long(const vertex_descriptor va, const vertex_descriptor vb) const; -/// called to check whether the halfedge 'h' should be collapsed in case it is -/// shorter than the target edge size +/// called to check whether the halfedge `h` should be collapsed in case it is +/// shorter than the target edge size. boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const; -/// called to define the location of the halfedge 'h' split in case 'is_too_long' -/// returns a value +/// called to define the location of the halfedge `h` split in case `is_too_long` +/// returns a value. Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const; - /// @} }; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 842d980eae80..db036a4be6ac 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -372,7 +372,7 @@ void isotropic_remeshing(const FaceRange& faces * has an internal property map for `CGAL::vertex_point_t`. * @tparam EdgeRange range of `boost::graph_traits::%edge_descriptor`, * model of `Range`. Its iterator type is `InputIterator`. -* @tparam SizingFunction model of `Sizing_field_base` +* @tparam SizingFunction model of `PMPSizingField` * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h index 54b614304e19..db4c3f9955d9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/tangential_relaxation.h @@ -317,7 +317,90 @@ void tangential_relaxation(const VertexRange& vertices, #endif } -//todo ip: doc here? +/*! +* \ingroup PMP_meshing_grp +* applies an iterative area-based tangential smoothing to the given range of vertices based on the +* underlying sizing field. +* Each vertex `v` is relocated to its weighted centroid, where weights depend on the area of the +* adjacent triangle and its averaged vertex sizing values. +* The relocation vector is projected back to the tangent plane to the surface at `v`, iteratively. +* The connectivity remains unchanged. +* +* @tparam TriangleMesh model of `FaceGraph` and `VertexListGraph`. +* The descriptor types `boost::graph_traits::%face_descriptor` +* and `boost::graph_traits::%halfedge_descriptor` must be +* models of `Hashable`. +* @tparam VertexRange range of `boost::graph_traits::%vertex_descriptor`, +* model of `Range`. Its iterator type is `ForwardIterator`. +* @tparam SizingFunction model of `PMPSizingField` +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" +* +* @param vertices the range of vertices which will be relocated by relaxation +* @param tm the triangle mesh to which `vertices` belong +* @param sizing a map containing sizing field for individual vertices. +* Used to derive smoothing weights. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below +* +* \cgalNamedParamsBegin +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `tm`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `TriangleMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the `Point_3` type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex `Point_3` type.} +* \cgalParamExtra{Exact constructions kernels are not supported by this function.} +* \cgalParamNEnd +* +* \cgalParamNBegin{number_of_iterations} +* \cgalParamDescription{the number of smoothing iterations} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`. +* The endpoints of a constrained edge cannot be moved by relaxation.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no edges are constrained} +* \cgalParamExtra{Boundary edges are always considered as constrained edges.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `tm`. +* A constrained vertex cannot be modified during relaxation.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no vertices are constrained} +* \cgalParamNEnd +* +* \cgalParamNBegin{relax_constraints} +* \cgalParamDescription{If `true`, the end vertices of the edges set as constrained +* in `edge_is_constrained_map` and boundary edges move along the +* constrained polylines they belong to.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`false`} +* \cgalParamNEnd +* +* \cgalParamNBegin{allow_move_functor} +* \cgalParamDescription{A function object used to determinate if a vertex move should be allowed or not} +* \cgalParamType{Unary functor that provides `bool operator()(vertex_descriptor v, Point_3 src, Point_3 tgt)` returning `true` +* if the vertex `v` can be moved from `src` to `tgt`; `Point_3` being the value type of the vertex point map } +* \cgalParamDefault{If not provided, all moves are allowed.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd +* +* \todo check if it should really be a triangle mesh or if a polygon mesh is fine +*/ template Date: Fri, 18 Aug 2023 20:17:38 +0200 Subject: [PATCH 334/943] Add precondition that sizing field and remeshing vpmap must be the same --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 4 +++- .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 4 +++- .../internal/Isotropic_remeshing/Sizing_field_base.h | 2 ++ .../include/CGAL/Polygon_mesh_processing/remesh.h | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 60b5e3a8855f..36f714dab6ef 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -223,12 +223,14 @@ class Adaptive_sizing_field : public CGAL::Sizing_field_base return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const + Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { return midpoint(get(m_vpmap, target(h, pmesh)), get(m_vpmap, source(h, pmesh))); } + const DefaultVPMap& get_vpmap() const { return m_vpmap; } + void update_sizing_map(const vertex_descriptor v, const PolygonMesh& pmesh) { // calculating it as the average of two vertices on other ends diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index d22e0079d7fd..46ca4c5acedc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -126,12 +126,14 @@ class Uniform_sizing_field : public CGAL::Sizing_field_base return boost::none; } - virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const + Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const { return midpoint(get(m_vpmap, target(h, pmesh)), get(m_vpmap, source(h, pmesh))); } + const VPMap& get_vpmap() const { return m_vpmap; } + private: FT m_sq_short; FT m_sq_long; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 81afe3af21fa..13661883b2aa 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -53,6 +53,8 @@ class Sizing_field_base const PolygonMesh& pmesh) const = 0; virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const = 0; + virtual const VPMap& get_vpmap() const = 0; + }; }//end namespace CGAL diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index db036a4be6ac..a36c3248db12 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -277,6 +277,9 @@ void isotropic_remeshing(const FaceRange& faces } #endif + CGAL_precondition_msg((sizing.get_vpmap()) == vpmap, "Input mesh/vertex point map is not the same as the " + "one used for sizing field. Remeshing aborted."); + #ifdef CGAL_PMP_REMESHING_VERBOSE t.stop(); std::cout << "\rRemeshing parameters done ("<< t.time() <<" sec)" << std::endl; From a96054a05151983dcd7a00b7afe681cf75768b01 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Fri, 18 Aug 2023 21:43:36 +0200 Subject: [PATCH 335/943] Place Sizing_field_base under PMP namespace as Uniform and Adaptive classes --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 4 ++-- .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 4 ++-- .../internal/Isotropic_remeshing/Sizing_field_base.h | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 36f714dab6ef..b2444f258c9b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -44,10 +44,10 @@ namespace Polygon_mesh_processing * has an internal property map for `CGAL::vertex_point_t`. */ template -class Adaptive_sizing_field : public CGAL::Sizing_field_base +class Adaptive_sizing_field : public Sizing_field_base { private: - typedef CGAL::Sizing_field_base Base; + typedef Sizing_field_base Base; public: typedef typename Base::K K; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 46ca4c5acedc..1b3c3b3f60b1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -44,10 +44,10 @@ namespace Polygon_mesh_processing */ template ::const_type> -class Uniform_sizing_field : public CGAL::Sizing_field_base +class Uniform_sizing_field : public Sizing_field_base { private: - typedef CGAL::Sizing_field_base Base; + typedef Sizing_field_base Base; public: typedef typename Base::FT FT; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 13661883b2aa..2ab66f8532a1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -22,6 +22,8 @@ namespace CGAL { +namespace Polygon_mesh_processing +{ /*! * Sizing field virtual class */ @@ -57,6 +59,7 @@ class Sizing_field_base }; +}//end namespace Polygon_mesh_processing }//end namespace CGAL #endif //CGAL_PMP_REMESHING_SIZING_FIELD_H From 8cd75d86f7ea01a8efc94c35d3f07994e8fa3380 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sun, 20 Aug 2023 21:24:38 +0200 Subject: [PATCH 336/943] Fix vpmap return error --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 2 +- .../include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 2 +- .../internal/Isotropic_remeshing/Sizing_field_base.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index b2444f258c9b..236ac2fb6a14 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -229,7 +229,7 @@ class Adaptive_sizing_field : public Sizing_field_base get(m_vpmap, source(h, pmesh))); } - const DefaultVPMap& get_vpmap() const { return m_vpmap; } + DefaultVPMap get_vpmap() const { return m_vpmap; } void update_sizing_map(const vertex_descriptor v, const PolygonMesh& pmesh) { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 1b3c3b3f60b1..0b45fecb7689 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -132,7 +132,7 @@ class Uniform_sizing_field : public Sizing_field_base get(m_vpmap, source(h, pmesh))); } - const VPMap& get_vpmap() const { return m_vpmap; } + VPMap get_vpmap() const { return m_vpmap; } private: FT m_sq_short; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 2ab66f8532a1..89337716c94f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -55,7 +55,7 @@ class Sizing_field_base const PolygonMesh& pmesh) const = 0; virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const = 0; - virtual const VPMap& get_vpmap() const = 0; + virtual VPMap get_vpmap() const = 0; }; From a00509ea477e52494a7bb97985aa8c3bda4fa70e Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 21 Aug 2023 20:05:06 +0200 Subject: [PATCH 337/943] Remove precondition for vpmap --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 2 -- .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 2 -- .../internal/Isotropic_remeshing/Sizing_field_base.h | 2 -- .../include/CGAL/Polygon_mesh_processing/remesh.h | 3 --- 4 files changed, 9 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 236ac2fb6a14..a5783d811019 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -229,8 +229,6 @@ class Adaptive_sizing_field : public Sizing_field_base get(m_vpmap, source(h, pmesh))); } - DefaultVPMap get_vpmap() const { return m_vpmap; } - void update_sizing_map(const vertex_descriptor v, const PolygonMesh& pmesh) { // calculating it as the average of two vertices on other ends diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 0b45fecb7689..aebf1d43f4ed 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -132,8 +132,6 @@ class Uniform_sizing_field : public Sizing_field_base get(m_vpmap, source(h, pmesh))); } - VPMap get_vpmap() const { return m_vpmap; } - private: FT m_sq_short; FT m_sq_long; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 89337716c94f..9b8c545c1d32 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -55,8 +55,6 @@ class Sizing_field_base const PolygonMesh& pmesh) const = 0; virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const = 0; - virtual VPMap get_vpmap() const = 0; - }; }//end namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index a36c3248db12..db036a4be6ac 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -277,9 +277,6 @@ void isotropic_remeshing(const FaceRange& faces } #endif - CGAL_precondition_msg((sizing.get_vpmap()) == vpmap, "Input mesh/vertex point map is not the same as the " - "one used for sizing field. Remeshing aborted."); - #ifdef CGAL_PMP_REMESHING_VERBOSE t.stop(); std::cout << "\rRemeshing parameters done ("<< t.time() <<" sec)" << std::endl; From 9dff62200795f9e5074aa37b1688e1a3191861f4 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 21 Aug 2023 21:10:44 +0200 Subject: [PATCH 338/943] Changes for documentation --- .../Adaptive_sizing_field.h | 18 ++++++------- .../Uniform_sizing_field.h | 27 ++++++++++--------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index a5783d811019..5b3b8c398932 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -48,6 +48,9 @@ class Adaptive_sizing_field : public Sizing_field_base { private: typedef Sizing_field_base Base; + typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; + typedef typename boost::property_map::type VertexSizingMap; public: typedef typename Base::K K; @@ -58,25 +61,22 @@ class Adaptive_sizing_field : public Sizing_field_base typedef typename Base::vertex_descriptor vertex_descriptor; typedef typename Base::DefaultVPMap DefaultVPMap; - typedef typename CGAL::dynamic_vertex_property_t Vertex_property_tag; - typedef typename boost::property_map::type VertexSizingMap; - /// \name Creation /// @{ /*! - * Returns an object to serve as criteria for adaptive curvature-based edge lengths. + * returns an object to serve as criteria for adaptive curvature-based edge lengths. * * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, * model of `Range`. Its iterator type is `ForwardIterator`. * - * @param tol the error tolerance, the maximum deviation of an edge from the original - * mesh. Lower tolerance values will result in shorter mesh edges. + * @param tol the error tolerance, used together with curvature to derive target edge length. + * Lower tolerance values will result in shorter mesh edges. * @param edge_len_min_max is the stopping criterion for minimum and maximum allowed * edge length. * @param face_range the range of triangular faces defining one or several surface patches - * to be remeshed. - * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. + * to be remeshed. It should be the same as the range of faces used for `isotropic_remeshing()`. + * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. It should be the + * same mesh as the one used in `isotropic_remeshing()`. */ template Adaptive_sizing_field(const double tol diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index aebf1d43f4ed..05f3736f961b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -57,21 +57,9 @@ class Uniform_sizing_field : public Sizing_field_base /// \name Creation /// @{ - /*! - * Returns an object to serve as criterion for uniform edge lengths. - * - * @param size is the target edge length for the isotropic remeshing. If set to 0, - * the criterion for edge length is ignored and edges are neither split nor collapsed. - * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. - */ - Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) - : m_sq_short( CGAL::square(4./5. * size)) - , m_sq_long( CGAL::square(4./3. * size)) - , m_vpmap(get(CGAL::vertex_point, pmesh)) - {} /*! - * Returns an object to serve as criterion for uniform edge lengths. + * returns an object to serve as criterion for uniform edge lengths. * \param size is the target edge length for the isotropic remeshing. If set to 0, * the criterion for edge length is ignored and edges are neither split nor collapsed. * \param vpmap is the input vertex point map that associates points to the vertices of @@ -83,6 +71,19 @@ class Uniform_sizing_field : public Sizing_field_base , m_vpmap(vpmap) {} + /*! + * returns an object to serve as criterion for uniform edge lengths. It calls the first + * constructor using default values for the vertex point map of the input polygon mesh. + * + * @param size is the target edge length for the isotropic remeshing. If set to 0, + * the criterion for edge length is ignored and edges are neither split nor collapsed. + * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. The default + * vertex point map of pmesh is used to construct the class. + */ + Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + : Uniform_sizing_field(size, get(CGAL::vertex_point, pmesh)) + {} + /// @} private: From 039b02710ebba36e8c7049b55c9e4a5aca90e9ee Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 21 Aug 2023 22:01:49 +0200 Subject: [PATCH 339/943] boost::optional to std::optional C++ 17 update --- .../Concepts/PMPSizingField.h | 6 +- .../Adaptive_sizing_field.h | 12 ++-- .../Uniform_sizing_field.h | 12 ++-- .../Isotropic_remeshing/Sizing_field_base.h | 12 ++-- .../Isotropic_remeshing/remesh_impl.h | 70 +++++++++---------- 5 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h index da58562c5577..8f89b3a88967 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h @@ -34,18 +34,18 @@ typedef unspecified_type FT; /// called to check whether the halfedge `h` is longer than the target edge size /// and as such should be split. If the halfedge is longer, it returns the squared /// length of the edge. -boost::optional is_too_long(const halfedge_descriptor h, +std::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const; /// called to check whether the halfedge with end vertices `va` and `vb` is longer /// than the target edge size and as such should be split. If the halfedge is longer, /// it returns the squared length of the edge. -boost::optional is_too_long(const vertex_descriptor va, +std::optional is_too_long(const vertex_descriptor va, const vertex_descriptor vb) const; /// called to check whether the halfedge `h` should be collapsed in case it is /// shorter than the target edge size. -boost::optional is_too_short(const halfedge_descriptor h, +std::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const; /// called to define the location of the halfedge `h` split in case `is_too_long` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 5b3b8c398932..fcc96deb9baf 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -183,7 +183,7 @@ class Adaptive_sizing_field : public Sizing_field_base return get(m_vertex_sizing_map, v); } - boost::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const + std::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const { const FT sqlen = sqlength(h, pmesh); FT sqtarg_len = CGAL::square(4./3. * CGAL::min(get(m_vertex_sizing_map, source(h, pmesh)), @@ -193,10 +193,10 @@ class Adaptive_sizing_field : public Sizing_field_base if(sqlen > sqtarg_len) return sqlen; else - return boost::none; + return std::nullopt; } - boost::optional is_too_long(const vertex_descriptor va, + std::optional is_too_long(const vertex_descriptor va, const vertex_descriptor vb) const { const FT sqlen = sqlength(va, vb); @@ -207,10 +207,10 @@ class Adaptive_sizing_field : public Sizing_field_base if (sqlen > sqtarg_len) return sqlen; else - return boost::none; + return std::nullopt; } - boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const + std::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const { const FT sqlen = sqlength(h, pmesh); FT sqtarg_len = CGAL::square(4./5. * CGAL::min(get(m_vertex_sizing_map, source(h, pmesh)), @@ -220,7 +220,7 @@ class Adaptive_sizing_field : public Sizing_field_base if (sqlen < sqtarg_len) return sqlen; else - return boost::none; + return std::nullopt; } Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 05f3736f961b..7e8c24f3dd22 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -99,32 +99,32 @@ class Uniform_sizing_field : public Sizing_field_base } public: - boost::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const + std::optional is_too_long(const halfedge_descriptor h, const PolygonMesh& pmesh) const { const FT sqlen = sqlength(h, pmesh); if(sqlen > m_sq_long) return sqlen; else - return boost::none; + return std::nullopt; } - boost::optional is_too_long(const vertex_descriptor va, + std::optional is_too_long(const vertex_descriptor va, const vertex_descriptor vb) const { const FT sqlen = sqlength(va, vb); if (sqlen > m_sq_long) return sqlen; else - return boost::none; + return std::nullopt; } - boost::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const + std::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const { const FT sqlen = sqlength(h, pmesh); if (sqlen < m_sq_short) return sqlen; else - return boost::none; + return std::nullopt; } Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 9b8c545c1d32..d433a4c16d61 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -47,12 +47,12 @@ class Sizing_field_base typedef typename K::FT FT; public: - virtual boost::optional is_too_long(const halfedge_descriptor h, - const PolygonMesh& pmesh) const = 0; - virtual boost::optional is_too_long(const vertex_descriptor va, - const vertex_descriptor vb) const = 0; - virtual boost::optional is_too_short(const halfedge_descriptor h, - const PolygonMesh& pmesh) const = 0; + virtual std::optional is_too_long(const halfedge_descriptor h, + const PolygonMesh& pmesh) const = 0; + virtual std::optional is_too_long(const vertex_descriptor va, + const vertex_descriptor vb) const = 0; + virtual std::optional is_too_short(const halfedge_descriptor h, + const PolygonMesh& pmesh) const = 0; virtual Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const = 0; }; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 27ea3cd29271..895083fbbcd3 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -43,7 +43,6 @@ #include #include #include -#include #include #include @@ -54,6 +53,7 @@ #include #include #include +#include //todo ip: temp #define CGAL_PMP_REMESHING_VERBOSE @@ -404,9 +404,9 @@ namespace internal { ); for(edge_descriptor e : edge_range) { - boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); - if(sqlen != boost::none) - long_edges.emplace(halfedge(e, mesh_), sqlen.get()); + std::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); + if(sqlen != std::nullopt) + long_edges.emplace(halfedge(e, mesh_), sqlen.value()); } //split long edges @@ -443,13 +443,13 @@ namespace internal { //check sub-edges //if it was more than twice the "long" threshold, insert them - boost::optional sqlen_new = sizing.is_too_long(hnew, mesh_); - if(sqlen_new != boost::none) - long_edges.emplace(hnew, sqlen_new.get()); + std::optional sqlen_new = sizing.is_too_long(hnew, mesh_); + if(sqlen_new != std::nullopt) + long_edges.emplace(hnew, sqlen_new.value()); sqlen_new = sizing.is_too_long(next(hnew, mesh_), mesh_); - if (sqlen_new != boost::none) - long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); + if (sqlen_new != std::nullopt) + long_edges.emplace(next(hnew, mesh_), sqlen_new.value()); //insert new edges to keep triangular faces, and update long_edges if (!is_border(hnew, mesh_)) @@ -504,9 +504,9 @@ namespace internal { { if (!is_split_allowed(e)) continue; - boost::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); - if(sqlen != boost::none) - long_edges.emplace(halfedge(e, mesh_), sqlen.get()); + std::optional sqlen = sizing.is_too_long(halfedge(e, mesh_), mesh_); + if(sqlen != std::nullopt) + long_edges.emplace(halfedge(e, mesh_), sqlen.value()); } //split long edges @@ -560,13 +560,13 @@ namespace internal { //check sub-edges //if it was more than twice the "long" threshold, insert them - boost::optional sqlen_new = sizing.is_too_long(hnew, mesh_); - if(sqlen_new != boost::none) - long_edges.emplace(hnew, sqlen_new.get()); + std::optional sqlen_new = sizing.is_too_long(hnew, mesh_); + if(sqlen_new != std::nullopt) + long_edges.emplace(hnew, sqlen_new.value()); sqlen_new = sizing.is_too_long(next(hnew, mesh_), mesh_); - if (sqlen_new != boost::none) - long_edges.emplace(next(hnew, mesh_), sqlen_new.get()); + if (sqlen_new != std::nullopt) + long_edges.emplace(next(hnew, mesh_), sqlen_new.value()); //insert new edges to keep triangular faces, and update long_edges if (!is_on_border(hnew)) @@ -585,9 +585,9 @@ namespace internal { if (snew == PATCH) { - boost::optional sql = sizing.is_too_long(hnew2, mesh_); - if(sql != boost::none) - long_edges.emplace(hnew2, sql.get()); + std::optional sql = sizing.is_too_long(hnew2, mesh_); + if(sql != std::nullopt) + long_edges.emplace(hnew2, sql.value()); } } @@ -608,9 +608,9 @@ namespace internal { if (snew == PATCH) { - boost::optional sql = sizing.is_too_long(hnew2, mesh_); - if (sql != boost::none) - long_edges.emplace(hnew2, sql.get()); + std::optional sql = sizing.is_too_long(hnew2, mesh_); + if (sql != std::nullopt) + long_edges.emplace(hnew2, sql.value()); } } } @@ -653,10 +653,10 @@ namespace internal { Boost_bimap short_edges; for(edge_descriptor e : edges(mesh_)) { - boost::optional sqlen = sizing.is_too_short(halfedge(e, mesh_), mesh_); - if(sqlen != boost::none + std::optional sqlen = sizing.is_too_short(halfedge(e, mesh_), mesh_); + if(sqlen != std::nullopt && is_collapse_allowed(e, collapse_constraints)) - short_edges.insert(short_edge(halfedge(e, mesh_), sqlen.get())); + short_edges.insert(short_edge(halfedge(e, mesh_), sqlen.value())); } #ifdef CGAL_PMP_REMESHING_VERBOSE_PROGRESS std::cout << "done." << std::endl; @@ -752,8 +752,8 @@ namespace internal { for(halfedge_descriptor ha : halfedges_around_target(va, mesh_)) { vertex_descriptor va_i = source(ha, mesh_); - boost::optional sqha = sizing.is_too_long(vb, va_i); - if (sqha != boost::none) + std::optional sqha = sizing.is_too_long(vb, va_i); + if (sqha != std::nullopt) { collapse_ok = false; break; @@ -818,10 +818,10 @@ namespace internal { //insert new/remaining short edges for (halfedge_descriptor ht : halfedges_around_target(vkept, mesh_)) { - boost::optional sqlen = sizing.is_too_short(ht, mesh_); - if (sqlen != boost::none + std::optional sqlen = sizing.is_too_short(ht, mesh_); + if (sqlen != std::nullopt && is_collapse_allowed(edge(ht, mesh_), collapse_constraints)) - short_edges.insert(short_edge(ht, sqlen.get())); + short_edges.insert(short_edge(ht, sqlen.value())); } } }//end if(collapse_ok) @@ -1768,9 +1768,9 @@ namespace internal { //insert new edges in 'short_edges' if (is_collapse_allowed(edge(hf, mesh_), collapse_constraints)) { - boost::optional sqlen = sizing.is_too_short(hf, mesh_); - if (sqlen != boost::none) - short_edges.insert(typename Bimap::value_type(hf, sqlen.get())); + std::optional sqlen = sizing.is_too_short(hf, mesh_); + if (sqlen != std::nullopt) + short_edges.insert(typename Bimap::value_type(hf, sqlen.value())); } if(!is_border(hf, mesh_) && @@ -1986,7 +1986,7 @@ namespace internal { bool check_normals(const HalfedgeRange& hedges) const { std::size_t nb_patches = patch_id_to_index_map.size(); - //std::vector > normal_per_patch(nb_patches,boost::none); + //std::vector > normal_per_patch(nb_patches,std::nullopt); std::vector initialized(nb_patches,false); std::vector normal_per_patch(nb_patches); From 4ca59942bf63bbde8df5850f5eb34e287ba793f0 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Mon, 21 Aug 2023 22:09:38 +0200 Subject: [PATCH 340/943] Document Sizing_field_base --- .../Isotropic_remeshing/Sizing_field_base.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index d433a4c16d61..55cdfceff24e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -25,7 +25,21 @@ namespace CGAL namespace Polygon_mesh_processing { /*! -* Sizing field virtual class +* \ingroup PMP_meshing_grp +* pure virtual class serving as a base for sizing field classes utilized in isotropic +* remeshing. +* +* \cgalModels PMPSizingField +* +* \sa `isotropic_remeshing` +* \sa `Uniform_sizing_field` +* \sa `Adaptive_sizing_field` +* +* @tparam PolygonMesh model of `MutableFaceGraph` that +* has an internal property map for `CGAL::vertex_point_t`. +* @tparam VPMap a property map associating points to the vertices of `pmesh`. +* It is a a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type. Default is `boost::get(CGAL::vertex_point, pmesh)`. */ template ::const_type> From 4187e40c2551780dbe3823b5db36fc38ba5d97db Mon Sep 17 00:00:00 2001 From: David Coeurjolly Date: Wed, 23 Aug 2023 15:56:58 +0200 Subject: [PATCH 341/943] (WIP) documentation update --- .../Polygon_mesh_processing.txt | 36 +++++++++++++----- .../fig/bimba-dmax0.040000-0.000000.jpg | Bin 0 -> 140843 bytes .../fig/bimba-dmin0.040000-0.000000.jpg | Bin 0 -> 167482 bytes .../fig/bimba-gaussian0.040000-0.000000.jpg | Bin 0 -> 48609 bytes .../fig/bimba-mean0.020000-0.000000.jpg | Bin 0 -> 53722 bytes .../fig/bimba-mean0.020000-0.002000.jpg | Bin 0 -> 78071 bytes .../fig/bimba-mean0.030000-0.000000.jpg | Bin 0 -> 51750 bytes .../fig/bimba-mean0.030000-0.002000.jpg | Bin 0 -> 75293 bytes .../fig/bimba-mean0.040000-0.000000.jpg | Bin 0 -> 50398 bytes .../fig/bimba-mean0.040000-0.002000.jpg | Bin 0 -> 73835 bytes .../fig/bimba-mean0.050000-0.000000.jpg | Bin 0 -> 49763 bytes .../fig/bimba-mean0.050000-0.002000.jpg | Bin 0 -> 72992 bytes 12 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-dmax0.040000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-dmin0.040000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-gaussian0.040000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.020000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.020000-0.002000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.002000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.040000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.040000-0.002000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.000000.jpg create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.002000.jpg diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 6b6f979ba59f..9baee74449b5 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -969,20 +969,38 @@ Similarly, we can use the following functions to compute curvatures on a specifi **To be updated** -\cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on -the named parameter `ball_radius`, which can be set to a value > 0 to get a smoother -distribution of values and "diffuses" the extreme values of curvatures across the mesh. +First, \cgalFigureRef{icc_measures} first illustrates various curvature measure on a triangular mesh. -\cgalFigureAnchor{icc_diff_radius} +\cgalFigureAnchor{icc_measures}
    - + + + +
    -\cgalFigureCaptionBegin{icc_diff_radius} -The mean curvature on a mesh with different values for the ball radius -parameter: (a) R = 0, (b) R = 0.025, (c) R = 0.05, (d) R = 0.16. Note that the max -edge length is 0.031 and the size of the bounding box of the mesh is 1 x .7 x .8. +\cgalFigureCaptionBegin{icc_measures} +Mean curvature, Gaussian curvature, minimal principal curvature direction and minimal principal curvature direction on a mesh (ball radius set to 0.04). \cgalFigureCaptionEnd +\cgalFigureAnchor{icc_various_ball_radii} +
    + + + +
    + + + + +
    +\cgalFigureCaptionBegin{icc_various_ball_radii} +When changing the integration ball radius, we obtain a scale space of curvature measure that can be used to tackle possible noise in the input as illustrated in the second row (mean curvature only with fixed colormap ranges and ball radii in {0.02,0.03,0.04,0.05}). +\cgalFigureCaptionEnd + + + + + \ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate a curvature value to each vertex. diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-dmax0.040000-0.000000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-dmax0.040000-0.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a878efff69fcd973fc96180c5bde195b7736486 GIT binary patch literal 140843 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�IPIg4fx`?Gqtl&gFA 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

    {sYyCzV&4_(M(Umr#!n5s`wnph{G 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

    p4%RkLT}k0`nQ{ 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

    u* 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 M_y42q{BPy|10gqObpQYW literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-gaussian0.040000-0.000000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-gaussian0.040000-0.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cde52f1122656974259b90793a511aa67c278c4b GIT binary patch literal 48609 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 z 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 )$4h=I2S_u$GLJ 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

    ~tCZ)>5QIRj&xFBV%F}wu^^%iBEo&@yF zc$So1#qM{6{$TBUCQOVh#Pi61lg{dco%4V}4Ot73AAEvuv{dw}MOi6&CLILJ_Qj3K zTX@m^^5%bM>i^x3Use=d|MY&I=)R8_^b@#dDL=m^l9{kA`t9!=7Pf?kNi1ys*URPQ zk!juI-^KAj#qf6y`!j(70Mrse*dj4mU^i+qOeNa0^YW*A0CjUe^a zX?S$WDk?v3Hg{sNmq~U-_+VM>?XX!_mmkye(5uDEC}^7iLUfXCCBkzM+&%7Q_>A_6 zM3}LQ8dt*s&kB=Cy7e&ZJo5b#>`AhmK<=JNGqE;gr}X=M{`292aUpG$wg`0d<~K?7e#E;NU(=EAL0;Gs7WC z#mJ7#Xxq7b^GPmts54)Bnm?aAWsTT+*eSgu1U$pC1{v~~2Y+P3*rHwiK@}c*3cY$&c=cQ-Yd60QP5Dd({$?=Cp?&uVrRlUU8$E z!;WQ4u6}Jpn_(-tO)_rVF z#^$fc1cf3hC0ly8r5N~#=z+CyQp)VMaWA~0Fn-mi?nd)G>rU~nX)z840;kwyBY0@R zb#eF1p*PS~Jnq!B{6SCfJ0CwQcgCHV4gkyu(VVpqyL%N7Ly6(2_y0tvApd`t@c;c^ zH+p@l|5Oq9_;Ze(rCrZd{5)=r2N~9jSCqpaYD~vwos5^qM6I>$zq#gYy1=@ds`fMm zr$pPHY(#sG`Z3vr$2TT_&4*6qoF_&pMO=?F>FWZvafuC)b zQtylFtDd-^F}SoK%}p8K3ZTfG@$mZvXR+}wDJ8N_tr}vyIoCGgy9Y@nuQ2Ya2#+5LI4mA21A(~7P+<5p2W&op*WQtv}KuHbgBCOKfOWcsvP4Ua{-N4)p~oT zkV1oiT`v;&d316eh_Q4qD>T>4x&q_889hQa5%tt4SoRg6l$fpJT~^FAqY{i>Q-&2i z#_nVQMB!0w^8F9tR2Mk~8trH{E-4phO;-tj3|sW?`(WB)U^kjCz)%i8^S2qEM{V(I~CzDbvGW|2|y z+u7EYg>ohUdgsOF>66jX4;=4H{%ln+v>dj$mo#Mlre<_SJjDXzmv@za^4N3%wysi$ zzi+DL>Y4rihjA22<)T4A_hADem$1`$E9*e%jA~n3tV_QzT6z{HT{fg^($ElV_5N?Y zZ25fffvbsfI}A@Ry+nhr)5z=b(r?bD*TeEJPZK&z#A*X7om0Oy0-?%mSnp?0xr7sj zmka_HCMMe2yuCFub$)k1OzwRw(V%Lv>VYDfVy=1D)3vCx$lJzuTiUkB(WN*lkTzC1 zMSp6=7O3|@&;2~z>&SXi`8Un}6mQ`2xvXdDm|=naGbQSyFvZ4jb%*%0DqEc2F8>&( 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 z≧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 bQ)2ohE#`kJOaC??{JTB<=Tav27xBLU4;%j; literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.000000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e19a87475ab6c387e9632b005d94492617a22a3e GIT binary patch literal 51750 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 literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.002000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.030000-0.002000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a54258caef14f705cf10977646e8bb94034d32ca GIT binary patch literal 75293 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 literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.040000-0.000000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.040000-0.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e0d19d1fcd3aa04701ac55f670dc470804645c1 GIT binary patch literal 50398 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 Q*8ewS;s5!b=W6yp0IAjW_5c6? literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.000000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ff6410b764337e731bcdf61d6f17da288a4798e GIT binary patch literal 49763 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 K7kcTRx&H%N)ZRt_ literal 0 HcmV?d00001 diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.002000.jpg b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/bimba-mean0.050000-0.002000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e1274ae6d6d231dbedcc627fc2caf541da33e9d GIT binary patch literal 72992 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

    1idj5|XDIA1GcCtEY2|GT+V@Ifa`a~% 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%0Ap}`1{tPJYb+YF{^?4k-#E9h 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 GOZpE8(TG(5 literal 0 HcmV?d00001 From 48bd7cc0c73da80550675643b92117025b675e12 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 10:26:13 +0200 Subject: [PATCH 342/943] fix deprecation warnings from Qt6 --- GraphicsView/include/CGAL/Qt/qglviewer.h | 24 +++---- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 62 ++++++++----------- Polyhedron/demo/Polyhedron/MainWindow.cpp | 8 +-- Polyhedron/demo/Polyhedron/Viewer.cpp | 4 +- 4 files changed, 40 insertions(+), 58 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer.h b/GraphicsView/include/CGAL/Qt/qglviewer.h index 2cf5b7faf342..a89a66a4b744 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer.h @@ -32,7 +32,7 @@ #include #include #include - +#include class QTabWidget; class QImage; @@ -839,33 +839,27 @@ compatible with raster mode): use \c glRasterPos3fv() instead. */ /*! @name Keyboard customization */ //@{ public: - unsigned int shortcut(qglviewer::KeyboardAction action) const; + QKeyCombination shortcut(qglviewer::KeyboardAction action) const; ::Qt::Key pathKey(unsigned int index) const; ::Qt::KeyboardModifiers addKeyFrameKeyboardModifiers() const; ::Qt::KeyboardModifiers playPathKeyboardModifiers() const; public Q_SLOTS: - void setShortcut(qglviewer::KeyboardAction action, unsigned int key); + void setShortcut(qglviewer::KeyboardAction action, QKeyCombination key); void setShortcut(qglviewer::KeyboardAction action, ::Qt::Modifier modifier, ::Qt::Key key) { - setShortcut(action, - static_cast(modifier)+ - static_cast(key)); + setShortcut(action, QKeyCombination{modifier, key}); } - void setKeyDescription(unsigned int key, QString description); + void setKeyDescription(QKeyCombination key, QString description); void setKeyDescription(::Qt::KeyboardModifier modifier, ::Qt::Key key, QString description) { - setKeyDescription(static_cast(modifier) + - static_cast(key), - description); + setKeyDescription(QKeyCombination{modifier, key}, description); } void setKeyDescription(::Qt::Modifier modifier, ::Qt::Key key, QString description) { - setKeyDescription(static_cast(modifier) + - static_cast(key), - description); + setKeyDescription(QKeyCombination{modifier, key}, description); } void clearShortcuts(); @@ -1075,8 +1069,8 @@ private Q_SLOTS: void setDefaultShortcuts(); QString cameraPathKeysString() const; QMap keyboardActionDescription_; - QMap keyboardBinding_; - QMap keyDescription_; + QMap keyboardBinding_; + QHash keyDescription_; // K e y F r a m e s s h o r t c u t s QMap< ::Qt::Key, unsigned int> pathIndex_; diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index e89577b1d1ae..0611fcf92bac 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -1204,7 +1204,7 @@ CGAL_INLINE_FUNCTION void Viewer::mouseMoveEvent(QMouseEvent *e) { if (myMouseBehavior) - // Use e->x() and e->y() as you want... + // Use e->position().x() and e->position().y() as you want... else CGAL::QGLViewer::mouseMoveEvent(e); } @@ -1221,7 +1221,7 @@ else CGAL_INLINE_FUNCTION void CGAL::QGLViewer::mouseMoveEvent(QMouseEvent *e) { if (mouseGrabber()) { - mouseGrabber()->checkIfGrabsMouse(e->x(), e->y(), camera()); + mouseGrabber()->checkIfGrabsMouse(e->position().x(), e->position().y(), camera()); if (mouseGrabber()->grabsMouse()) if (mouseGrabberIsAManipulatedCameraFrame_) (dynamic_cast(mouseGrabber())) @@ -1249,7 +1249,7 @@ void CGAL::QGLViewer::mouseMoveEvent(QMouseEvent *e) { manipulatedFrame()->mouseMoveEvent(e, camera()); else if (hasMouseTracking()) { Q_FOREACH (qglviewer::MouseGrabber *mg, qglviewer::MouseGrabber::MouseGrabberPool()) { - mg->checkIfGrabsMouse(e->x(), e->y(), camera()); + mg->checkIfGrabsMouse(e->position().x(), e->position().y(), camera()); if (mg->grabsMouse()) { setMouseGrabber(mg); // Check that MouseGrabber is not disabled @@ -1278,7 +1278,7 @@ void CGAL::QGLViewer::mouseReleaseEvent(QMouseEvent *e) { ->qglviewer::ManipulatedFrame::mouseReleaseEvent(e, camera()); else mouseGrabber()->mouseReleaseEvent(e, camera()); - mouseGrabber()->checkIfGrabsMouse(e->x(), e->y(), camera()); + mouseGrabber()->checkIfGrabsMouse(e->position().x(), e->position().y(), camera()); if (!(mouseGrabber()->grabsMouse())) setMouseGrabber(nullptr); // update(); @@ -1510,18 +1510,14 @@ QString CGAL::QGLViewer::clickActionString(CGAL::qglviewer::ClickAction ca) { return QString(); } -static QString keyString(unsigned int key) { -#if QT_VERSION >= 0x040100 - return QKeySequence(int(key)).toString(QKeySequence::NativeText); -#else - return QString(QKeySequence(key)); -#endif +static QString keyString(QKeyCombination key) { + return QKeySequence(key).toString(QKeySequence::NativeText); } CGAL_INLINE_FUNCTION QString CGAL::QGLViewer::formatClickActionPrivate(ClickBindingPrivate cbp) { bool buttonsBefore = cbp.buttonsBefore != ::Qt::NoButton; - QString keyModifierString = keyString(cbp.modifiers + cbp.key); + QString keyModifierString = keyString(QKeyCombination(cbp.modifiers, cbp.key)); if (!keyModifierString.isEmpty()) { #ifdef Q_OS_MAC // modifiers never has a '+' sign. Add one space to clearly separate @@ -1767,7 +1763,7 @@ QString CGAL::QGLViewer::mouseString() const { /*! Defines a custom keyboard shortcut description, that will be displayed in the help() window \c Keyboard tab. -The \p key definition is given as an \c int using Qt enumerated values. Set an +The \p key definition is given as an \c QKeyCombination using Qt enumerated values. Set an empty \p description to remove a shortcut description: \code setKeyDescription(::Qt::Key_W, "Toggles wireframe display"); setKeyDescription(::Qt::CTRL+::Qt::Key_L, "Loads a new scene"); @@ -1779,7 +1775,7 @@ See the keyboardAndMouse example for illustration and the keyboard page for details. */ CGAL_INLINE_FUNCTION -void CGAL::QGLViewer::setKeyDescription(unsigned int key, QString description) { +void CGAL::QGLViewer::setKeyDescription(QKeyCombination key, QString description) { if (description.isEmpty()) keyDescription_.remove(key); else @@ -1871,17 +1867,15 @@ QString CGAL::QGLViewer::keyboardString() const { "Description", "Description column header in help window mouse tab")); - QMap keyDescription; + QHash keyDescription; // 1 - User defined key descriptions - for (QMap::ConstIterator kd = keyDescription_.begin(), - kdend = keyDescription_.end(); + for (auto kd = keyDescription_.begin(), kdend = keyDescription_.end(); kd != kdend; ++kd) keyDescription[kd.key()] = kd.value(); // Add to text in sorted order - for (QMap::ConstIterator kb = keyDescription.begin(), - endb = keyDescription.end(); + for (auto kb = keyDescription.begin(), endb = keyDescription.end(); kb != endb; ++kb) text += tableLine(keyString(kb.key()), kb.value()); @@ -1894,18 +1888,15 @@ QString CGAL::QGLViewer::keyboardString() const { } // 3 - KeyboardAction bindings description - for (QMap::ConstIterator - it = keyboardBinding_.begin(), - end = keyboardBinding_.end(); + for (auto it = keyboardBinding_.begin(), end = keyboardBinding_.end(); it != end; ++it) - if ((it.value() != 0) && + if ((it.value() != QKeyCombination{}) && ((!cameraIsInRotateMode()) || ((it.key() != qglviewer::INCREASE_FLYSPEED) && (it.key() != qglviewer::DECREASE_FLYSPEED)))) keyDescription[it.value()] = keyboardActionDescription_[it.key()]; // Add to text in sorted order - for (QMap::ConstIterator kb2 = keyDescription.begin(), - endb2 = keyDescription.end(); + for (auto kb2 = keyDescription.begin(), endb2 = keyDescription.end(); kb2 != endb2; ++kb2) text += tableLine(keyString(kb2.key()), kb2.value()); @@ -1919,15 +1910,15 @@ QString CGAL::QGLViewer::keyboardString() const { .arg(cpks) + "\n"; text += tableLine( - keyString(playPathKeyboardModifiers()) + "" + + keyString(QKeyCombination(playPathKeyboardModifiers())) + "" + CGAL::QGLViewer::tr("Fx", "Generic function key (F1..F12)") + "", CGAL::QGLViewer::tr("Plays path (or resets saved position)")); text += tableLine( - keyString(addKeyFrameKeyboardModifiers()) + "" + + keyString(QKeyCombination(addKeyFrameKeyboardModifiers())) + "" + CGAL::QGLViewer::tr("Fx", "Generic function key (F1..F12)") + "", CGAL::QGLViewer::tr("Adds a key frame to path (or defines a position)")); text += tableLine( - keyString(addKeyFrameKeyboardModifiers()) + "" + + keyString(QKeyCombination(addKeyFrameKeyboardModifiers())) + "" + CGAL::QGLViewer::tr("Fx", "Generic function key (F1..F12)") + "+" + CGAL::QGLViewer::tr("Fx", "Generic function key (F1..F12)") + "", CGAL::QGLViewer::tr("Deletes path (or saved position)")); @@ -2071,11 +2062,8 @@ void CGAL::QGLViewer::keyPressEvent(QKeyEvent *e) { _first_tick = true; } const ::Qt::KeyboardModifiers modifiers = e->modifiers(); - QMap::ConstIterator it = keyboardBinding_ - .begin(), - end = - keyboardBinding_.end(); - const unsigned int target = key | modifiers; + auto it = keyboardBinding_.begin(), end = keyboardBinding_.end(); + const QKeyCombination target{modifiers, key}; while ((it != end) && (it.value() != target)) ++it; @@ -2238,17 +2226,17 @@ Here are some examples: setShortcut(EXIT_VIEWER, ::Qt::Key_Q); // Alt+M toggles camera mode -setShortcut(CAMERA_MODE, ::Qt::ALT + ::Qt::Key_M); +setShortcut(CAMERA_MODE, ::Qt::ALT | ::Qt::Key_M); // The DISPLAY_FPS action is disabled setShortcut(DISPLAY_FPS, 0); \endcode Only one shortcut can be assigned to a given CGAL::QGLViewer::KeyboardAction (new -bindings replace previous ones). If several KeyboardAction are binded to the +bindings replace previous ones). If several KeyboardAction are bound to the same shortcut, only one of them is active. */ CGAL_INLINE_FUNCTION -void CGAL::QGLViewer::setShortcut(qglviewer::KeyboardAction action, unsigned int key) { +void CGAL::QGLViewer::setShortcut(qglviewer::KeyboardAction action, QKeyCombination key) { keyboardBinding_[action] = key; } @@ -2270,11 +2258,11 @@ See the keyboard page for details and default values and the keyboardAndMouse example for a practical illustration. */ CGAL_INLINE_FUNCTION -unsigned int CGAL::QGLViewer::shortcut(qglviewer::KeyboardAction action) const { +QKeyCombination CGAL::QGLViewer::shortcut(qglviewer::KeyboardAction action) const { if (keyboardBinding_.contains(action)) return keyboardBinding_[action]; else - return 0; + return {}; } diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index c5b6a3c7abbe..bc57849f7a75 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -820,12 +820,12 @@ void MainWindow::addAction(QAction* action) action->setVisible(true); action->setEnabled(true); - Q_FOREACH(QWidget* widget, action->associatedWidgets()) + for(auto object: action->associatedObjects()) { // qDebug() << QString("%1 (%2)\n") // .arg(widget->objectName()) // .arg(widget->metaObject()->className()); - QMenu* menu = qobject_cast(widget); + QMenu* menu = qobject_cast(object); if(menu) { addAction(menu->menuAction()); @@ -1030,7 +1030,7 @@ void MainWindow::reloadItem() { // Can use foreach: int mate_id = 0; - Q_FOREACH(const QVariant &v, iterable) + for(const QVariant &v: iterable) { Scene_item* mate = v.value(); Scene_item* new_item = new_items[mate_id]; @@ -2770,7 +2770,7 @@ void MainWindow::exportStatistics() } QString str; - Q_FOREACH(Scene_item* sit, items) + for(Scene_item* sit: items) { CGAL::Three::Scene_item::Header_data data = sit->header(); if(data.titles.size()>0) diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index 83182e00bf2e..53a6f3c86261 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -304,7 +304,7 @@ void Viewer::doBindings() connect( d->textRenderer, SIGNAL(sendMessage(QString,int)), this, SLOT(printMessage(QString,int)) ); connect(&d->messageTimer, SIGNAL(timeout()), SLOT(hideMessage())); - setShortcut(CGAL::qglviewer::EXIT_VIEWER, 0); + setShortcut(CGAL::qglviewer::EXIT_VIEWER, QKeyCombination{}); setKeyDescription(Qt::Key_T, tr("Turn the camera by 180 degrees")); setKeyDescription(Qt::Key_M, @@ -624,7 +624,7 @@ void Viewer::mousePressEvent(QMouseEvent* event) event->modifiers().testFlag(Qt::ShiftModifier)) { select(event->pos()); - requestContextMenu(event->globalPos()); + requestContextMenu(event->globalPosition().toPoint()); event->accept(); } else if(!event->modifiers() From 79a563bfbc682818e6964717dfe3977e08dc2d29 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 15:17:17 +0200 Subject: [PATCH 343/943] fix more deprecation warnings --- .../Plugins/AABB_tree/Cut_plugin.cpp | 2 +- .../AABB_tree/Do_trees_intersect_plugin.cpp | 2 +- .../Plugins/IO/Polylines_io_plugin.cpp | 4 ++-- .../Scene_aff_transformed_surface_mesh_item.h | 4 ++-- .../Plugins/PCA/Scene_edit_box_item.cpp | 2 +- .../Scene_facegraph_item_k_ring_selection.h | 2 +- .../demo/Polyhedron/Primitive_container.cpp | 8 +++---- .../Scene_item_rendering_helper.cpp | 18 +++++++------- .../Scene_polyhedron_selection_item.cpp | 24 +++++++++---------- .../demo/Polyhedron/Scene_polylines_item.cpp | 4 ++-- .../demo/Polyhedron/include/id_printing.h | 12 ++++------ 11 files changed, 40 insertions(+), 42 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index 5c14416d9291..f72ebe5a7bd1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -123,7 +123,7 @@ class FillGridSize { Simple_kernel::Vector_3 offset(v_offset.x, v_offset.y, v_offset.z); Point query = transfo( Point(x,y,z))-offset; FT min = DBL_MAX; - Q_FOREACH(SM_Tree *tree, sm_trees) + for(SM_Tree *tree: sm_trees) { FT dist = CGAL::sqrt( tree->squared_distance(query) ); if(dist < min) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Do_trees_intersect_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Do_trees_intersect_plugin.cpp index 08a8ef803e43..5f9eeed58388 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Do_trees_intersect_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Do_trees_intersect_plugin.cpp @@ -131,7 +131,7 @@ private Q_SLOTS: this, &DoTreesIntersectplugin::update_trees); col_det = new CGAL::Rigid_triangle_mesh_collision_detection(); col_det->reserve(items.size()); - Q_FOREACH(Scene_movable_sm_item* item, items) + for(Scene_movable_sm_item* item: items) { col_det->add_mesh(*item->getFaceGraph()); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp index 0e4b1167f5a9..2f61bd32aa82 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp @@ -266,7 +266,7 @@ void Polyhedron_demo_polylines_io_plugin::split() scene->addItem(group); group->setColor(item->color()); int i=0; - Q_FOREACH(Scene_polylines_item::Polyline polyline, item->polylines) + for(Scene_polylines_item::Polyline polyline: item->polylines) { Scene_polylines_item::Polylines_container container; container.push_back(polyline); @@ -372,7 +372,7 @@ void Polyhedron_demo_polylines_io_plugin::join() Scene_polylines_item* new_polyline= new Scene_polylines_item(); Scene_polylines_item::Polylines_container container; - Q_FOREACH(Scene_polylines_item* item, items) + for(Scene_polylines_item* item: items) { for(Scene_polylines_item::Polylines_container::iterator it = item->polylines.begin(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_aff_transformed_surface_mesh_item.h b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_aff_transformed_surface_mesh_item.h index 64d2cfe40a58..38ad5b0b124a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_aff_transformed_surface_mesh_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_aff_transformed_surface_mesh_item.h @@ -59,8 +59,8 @@ struct Scene_aff_transformed_surface_mesh_item_priv positions_lines.resize(0); for(auto e : edges(*sm_ptr)) { - const Point& a = get(vpm, target(halfedge(e, *sm_ptr), *sm_ptr)); - const Point& b = get(vpm, target(opposite(halfedge(e, *sm_ptr), *sm_ptr), *sm_ptr)); + const Point a = get(vpm, target(halfedge(e, *sm_ptr), *sm_ptr)); + const Point b = get(vpm, target(opposite(halfedge(e, *sm_ptr), *sm_ptr), *sm_ptr)); positions_lines.push_back(a.x() - center_.x); positions_lines.push_back(a.y() - center_.y); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp index 6dea656ae705..0d1130e70dd5 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp @@ -938,7 +938,7 @@ void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir) { CGAL::qglviewer::AxisPlaneConstraint::Type prev_cons = constraint.translationConstraintType(); constraint.setTranslationConstraintType(CGAL::qglviewer::AxisPlaneConstraint::FREE); - Q_FOREACH(Scene_edit_box_item::vertex* selected_vertex, selected_vertices ) + for(Scene_edit_box_item::vertex* selected_vertex: selected_vertices ) { int id = selected_vertex->id; CGAL_assume(id<8); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h index 8370faf5e352..46d4c02ac9d6 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h @@ -623,7 +623,7 @@ public Q_SLOTS: CGAL::QGLViewer* viewer = getViewerUnderCursor(); is_ready_to_highlight = !cut_highlighting; - hl_pos = viewer->mapFromGlobal(mouse_event->globalPos()); + hl_pos = viewer->mapFromGlobal(mouse_event->globalPosition()).toPoint(); QTimer::singleShot(0, this, SLOT(highlight())); }//end MouseMove return false; diff --git a/Polyhedron/demo/Polyhedron/Primitive_container.cpp b/Polyhedron/demo/Polyhedron/Primitive_container.cpp index 6d7250f5763b..245d0059b9ca 100644 --- a/Polyhedron/demo/Polyhedron/Primitive_container.cpp +++ b/Polyhedron/demo/Polyhedron/Primitive_container.cpp @@ -43,10 +43,10 @@ Primitive_container::Primitive_container(int program, bool indexed) Primitive_container::~Primitive_container() { - Q_FOREACH(Vbo* vbo, d->VBOs) + for(Vbo* vbo: d->VBOs) if(vbo) delete vbo; - Q_FOREACH(CGAL::Three::Viewer_interface*viewer, d->VAOs.keys()) + for(CGAL::Three::Viewer_interface*viewer: d->VAOs.keys()) { removeViewer(viewer); } @@ -72,7 +72,7 @@ void Primitive_container::initializeBuffers(CGAL::Three::Viewer_interface* viewe return; viewer->makeCurrent(); d->VAOs[viewer]->bind(); - Q_FOREACH(CGAL::Three::Vbo* vbo, d->VAOs[viewer]->vbos) + for(CGAL::Three::Vbo* vbo: d->VAOs[viewer]->vbos) { vbo->bind(); if(vbo->dataSize !=0) @@ -136,7 +136,7 @@ void Primitive_container::removeViewer(CGAL::Three::Viewer_interface* viewer) void Primitive_container::reset_vbos(Scene_item_rendering_helper::Gl_data_names name) { - Q_FOREACH(CGAL::Three::Vbo* vbo, d->VBOs) + for(CGAL::Three::Vbo* vbo: d->VBOs) { if(!vbo) continue; diff --git a/Polyhedron/demo/Polyhedron/Scene_item_rendering_helper.cpp b/Polyhedron/demo/Polyhedron/Scene_item_rendering_helper.cpp index 27bb13524126..0af18b2450ce 100644 --- a/Polyhedron/demo/Polyhedron/Scene_item_rendering_helper.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_item_rendering_helper.cpp @@ -101,17 +101,17 @@ void Scene_item_rendering_helper::initGL(CGAL::Three::Viewer_interface* viewer) priv->alphaSlider->setValue(255); } - Q_FOREACH(Triangle_container* tc, priv->triangle_containers) + for(Triangle_container* tc: priv->triangle_containers) { if(!tc->isGLInit(viewer)) tc->initGL(viewer); } - Q_FOREACH(Edge_container* ec, priv->edge_containers) + for(Edge_container* ec: priv->edge_containers) { if(!ec->isGLInit(viewer)) ec->initGL(viewer); } - Q_FOREACH(Point_container* pc, priv->point_containers) + for(Point_container* pc: priv->point_containers) { if(!pc->isGLInit(viewer)) pc->initGL(viewer); @@ -255,15 +255,15 @@ void Scene_item_rendering_helper::setBuffersInit(Viewer_interface* viewer, bool void Scene_item_rendering_helper::removeViewer(Viewer_interface *viewer) { - Q_FOREACH(Triangle_container* tc, priv->triangle_containers) + for(Triangle_container* tc: priv->triangle_containers) { tc->removeViewer(viewer); } - Q_FOREACH(Edge_container* ec, priv->edge_containers) + for(Edge_container* ec: priv->edge_containers) { ec->removeViewer(viewer); } - Q_FOREACH(Point_container* pc, priv->point_containers) + for(Point_container* pc: priv->point_containers) { pc->removeViewer(viewer); } @@ -272,17 +272,17 @@ void Scene_item_rendering_helper::removeViewer(Viewer_interface *viewer) void Scene_item_rendering_helper::newViewer(Viewer_interface *viewer) { viewer->makeCurrent(); - Q_FOREACH(Triangle_container* tc, priv->triangle_containers) + for(Triangle_container* tc: priv->triangle_containers) { if(!tc->isGLInit(viewer)) tc->initGL(viewer); } - Q_FOREACH(Edge_container* ec, priv->edge_containers) + for(Edge_container* ec: priv->edge_containers) { if(!ec->isGLInit(viewer)) ec->initGL(viewer); } - Q_FOREACH(Point_container* pc, priv->point_containers) + for(Point_container* pc: priv->point_containers) { if(!pc->isGLInit(viewer)) pc->initGL(viewer); diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index a6669cb35c18..b986582fa00c 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -345,7 +345,7 @@ void Scene_polyhedron_selection_item_priv::compute_any_elements(std::vectorpolylines = polylines; QVariant metadata_variant = property("polylines metadata"); - if(metadata_variant.type() == QVariant::StringList) + if(metadata_variant.typeId() == QMetaType::QStringList) { item->setProperty("polylines metadata", metadata_variant); } @@ -686,7 +686,7 @@ Scene_polylines_item::merge(Scene_polylines_item* other_item) { other_item->polylines.end(), std::back_inserter(polylines)); QVariant other_metadata_variant = other_item->property("polylines metadata"); - if(other_metadata_variant.type() == QVariant::StringList) + if(other_metadata_variant.typeId() == QMetaType::QStringList) { QStringList metadata = property("polylines metadata").toStringList(); metadata.append(other_metadata_variant.toStringList()); diff --git a/Polyhedron/demo/Polyhedron/include/id_printing.h b/Polyhedron/demo/Polyhedron/include/id_printing.h index 91be6e8f2246..2bf10a371c09 100644 --- a/Polyhedron/demo/Polyhedron/include/id_printing.h +++ b/Polyhedron/demo/Polyhedron/include/id_printing.h @@ -437,7 +437,6 @@ bool printVertexIds(const Mesh& mesh, TextListItem* vitems) { using Ppmap = typename boost::property_map::const_type; - using Point = typename boost::property_traits::value_type; using IDmap = typename boost::property_map::type; Ppmap ppmap = get(boost::vertex_point, mesh); @@ -452,7 +451,7 @@ bool printVertexIds(const Mesh& mesh, // fills textItems for(typename boost::graph_traits::vertex_descriptor vh : vertices(mesh)) { - const Point& p = get(ppmap, vh); + const auto p = get(ppmap, vh); vitems->append(new TextItem(float(p.x() + offset.x), float(p.y() + offset.y), float(p.z() + offset.z), @@ -479,7 +478,6 @@ bool printEdgeIds(const Mesh& mesh, TextListItem* eitems) { using Ppmap = typename boost::property_map::const_type; - using Point = typename boost::property_traits::value_type; using IDmap = typename boost::property_map::type; Ppmap ppmap = get(boost::vertex_point, mesh); @@ -493,8 +491,8 @@ bool printEdgeIds(const Mesh& mesh, for(typename boost::graph_traits::edge_descriptor e : edges(mesh)) { - const Point& p1 = get(ppmap, source(e, mesh)); - const Point& p2 = get(ppmap, target(e, mesh)); + const auto p1 = get(ppmap, source(e, mesh)); + const auto p2 = get(ppmap, target(e, mesh)); eitems->append(new TextItem(float((p1.x() + p2.x()) / 2 + offset.x), float((p1.y() + p2.y()) / 2 + offset.y), float((p1.z() + p2.z()) / 2 + offset.z), @@ -631,8 +629,8 @@ int zoomToId(const Mesh& mesh, if(get(eidmap, halfedge(e, mesh))/2 == id) { typename boost::graph_traits::halfedge_descriptor hf = halfedge(e, mesh); - const Point& p1 = get(ppmap, source(e, mesh)); - const Point& p2 = get(ppmap, target(e, mesh)); + const auto p1 = get(ppmap, source(e, mesh)); + const auto p2 = get(ppmap, target(e, mesh)); p = Point((float)(p1.x() + p2.x()) / 2 + offset.x, (float)(p1.y() + p2.y()) / 2 + offset.y, (float)(p1.z() + p2.z()) / 2 + offset.z ); From da0b65d7c9acf0b3842501e47a5c6c988dbbbb45 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 15:29:23 +0200 Subject: [PATCH 344/943] fix QSJ/C++ exceptions handling The javascript testsuite passes. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 88 +++++-------------- Polyhedron/demo/Polyhedron/MainWindow.h | 3 + .../demo/Polyhedron/Polyhedron_demo.cpp | 4 +- Polyhedron/demo/Polyhedron/javascript/lib.js | 8 +- .../bad/catch_and_retrow_cpp_exception.js | 4 +- .../tests/good/catch_missing_file.js | 2 +- .../caught_cpp_exception_in_an_include.js | 4 +- .../javascript/tests/good/cpp_exception.js | 4 +- .../good/cpp_exception_from_a_function.js | 6 +- .../tests/good/cpp_exception_in_an_include.js | 4 +- Three/include/CGAL/Three/exceptions.h | 59 +++++-------- 11 files changed, 59 insertions(+), 127 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 02a6a8cf0791..5829ffb5e22c 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -85,30 +85,16 @@ void myScene_itemFromScriptValue(const QJSValue &object, out = qobject_cast(object.toQObject()); } - - -#if 0 -QJSValue myPrintFunction(QScriptContext *context, QJSEngine *engine) +void MainWindow::print(QString message) { - MainWindow* mw = qobject_cast(engine->parent()); - QString result; - for (int i = 0; i < context->argumentCount(); ++i) { - if (i > 0) - result.append(" "); - result.append(context->argument(i).toString()); - } - - if(mw) mw->message(QString("QtScript: ") + result, ""); - QTextStream (stdout) << (QString("QtScript: ") + result) << "\n"; - - return engine->undefinedValue(); + this->message(QString("Script message: ") + message, ""); + QTextStream (stdout) << (QString("Script message: ") + message) << "\n"; } -#endif inline QKeySequence combine(Qt::Modifier m, Qt::Key k) { - return QKeySequence(static_cast(m)+static_cast(k)); + return QKeySequence(QKeyCombination(m, k)); } MainWindow::~MainWindow() @@ -287,8 +273,8 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren // Reset the "Operation menu" clearMenu(ui->menuOperations); - std::cerr << "Enable scripts.\n"; script_engine = new QJSEngine(this); + script_engine->installExtensions(QJSEngine::ConsoleExtension); #if 0 qScriptRegisterMetaType(script_engine, @@ -473,42 +459,25 @@ void MainWindow::filterOperations(bool) void MainWindow::evaluate_script(QString script, const QString& filename, const bool quiet) { -#if 0 - QScriptContext* context = script_engine->currentContext(); - QJSValue object = context->activationObject(); + QJSValue object = script_engine->globalObject(); QJSValue former_current_filename = object.property("current_filename");; object.setProperty("current_filename", filename); -#endif - - QJSValue value = script_engine->evaluate(script, filename); - if (value.isError()) + QStringList error_bt; + QJSValue value = script_engine->evaluate(script, filename, 1, &error_bt); + if (!error_bt.isEmpty()) { if(! quiet){ - qDebug() << "Uncaught exception at line" - << value.property("lineNumber").toInt() - << ":" << value.toString(); - } -#if 0 - - if(script_engine->hasUncaughtException()) { - QJSValue js_exception = script_engine->uncaughtException(); - QJSValue js_bt =js_exception.property("backtrace"); - QStringList bt = script_engine->uncaughtExceptionBacktrace(); - if(js_bt.isValid()) { - QStringList other_bt; - qJSValueToSequence(js_bt, other_bt); - if(!other_bt.isEmpty()) bt = other_bt; - } - if(!quiet) { - QTextStream err(stderr); - err << "Qt Script exception:\n" - << js_exception.toString() + QString err_str; + QTextStream err(&err_str); + err << tr("Qt Script exception at %1:%2").arg(value.property("fileName").toString()) + .arg(value.property("lineNumber").toInt()) + << ":" << value.toString() << "\nBacktrace:\n"; - Q_FOREACH(QString line, bt) { + for(auto line: error_bt) { err << " " << line << "\n"; } + qWarning().noquote() << err_str; } - throw CGAL::Three::Script_exception - (script_engine->uncaughtException().toString(), bt); + throw CGAL::Three::Script_exception(value.toString(), error_bt); } else if(!quiet && !value.isNull() && !value.isUndefined()) { QTextStream(stderr) << "Qt Script evaluated to \"" @@ -516,7 +485,6 @@ void MainWindow::evaluate_script(QString script, } object.setProperty("current_filename", former_current_filename); -#endif } void MainWindow::evaluate_script_quiet(QString script, @@ -1193,7 +1161,6 @@ void MainWindow::open(QString filename) bool MainWindow::open(QString filename, QString loader_name) { QFileInfo fileinfo(filename); std::optional item_opt; -#if 0 // AF try { item_opt = wrap_a_call_to_cpp ([this, fileinfo, loader_name]() @@ -1210,11 +1177,7 @@ bool MainWindow::open(QString filename, QString loader_name) { std::cerr << e.what() << std::endl; return false; } -#else - bool ok; - loadItem(fileinfo, findLoader(loader_name), ok); - return ok; -#endif + return true; } @@ -1818,20 +1781,14 @@ void MainWindow::closeEvent(QCloseEvent *event) } -bool MainWindow::loadScript(QString filename) -{ -#if 0 +bool MainWindow::loadScript(QString filename){ QFileInfo fileinfo(filename); std::optional opt = wrap_a_call_to_cpp ([this, fileinfo] { return loadScript(fileinfo); - }, this, __FILE__, __LINE__, CGAL::Three::PARENT_CONTEXT); + }, this, __FILE__, __LINE__); if(!opt) return false; else return *opt; -#else - QFileInfo fileinfo(filename); - return loadScript(fileinfo); -#endif } bool MainWindow::loadScript(QFileInfo info) @@ -1858,15 +1815,10 @@ bool MainWindow::loadScript(QFileInfo info) void MainWindow::throw_exception() { -#if 0 // AF wrap_a_call_to_cpp([]() { throw std::runtime_error("Exception thrown in " "MainWindow::throw_exception()"); }, this, __FILE__, __LINE__); -#else - throw std::runtime_error("Exception thrown in " - "MainWindow::throw_exception()"); -#endif } void MainWindow::on_actionLoadScript_triggered() diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index b58fa02912fc..542cc40ea75d 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -256,6 +256,9 @@ public Q_SLOTS: void message(QString, QString, QString = QString("normal")); + //! Function `print` used by Javascript scripts. + void print(QString message); + //!Returns true if the target plugin is present. If not, returns false. bool hasPlugin(const QString&) const; diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp index 6348c203eab8..7b6e5225dfe3 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp @@ -129,10 +129,10 @@ Polyhedron_demo::Polyhedron_demo(int& argc, char **argv, } #endif - // mainWindow.loadScript(":/cgal/Polyhedron_3/javascript/lib.js"); + mainWindow.loadScript(":/cgal/Polyhedron_3/javascript/lib.js"); QFileInfo autostart_js("autostart.js"); if(!parser.isSet(no_autostart) && autostart_js.exists()) { - // mainWindow.loadScript(autostart_js); + mainWindow.loadScript(autostart_js); } Q_FOREACH(QString filename, parser.positionalArguments()) { mainWindow.open(filename); diff --git a/Polyhedron/demo/Polyhedron/javascript/lib.js b/Polyhedron/demo/Polyhedron/javascript/lib.js index bf3638484150..38b3fbba299f 100644 --- a/Polyhedron/demo/Polyhedron/javascript/lib.js +++ b/Polyhedron/demo/Polyhedron/javascript/lib.js @@ -12,11 +12,15 @@ print_backtrace = function(bt, prefix) { print_exception_and_bt = function(e) { print("Caught exception in " + current_filename + ": " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + if(typeof e.backtrace !== 'undefined') { +console.log("ICI") + print("Backtrace:") + print_backtrace(e.backtrace) + } } quit = main_window.quit +print = main_window.print noop = function () {} diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/bad/catch_and_retrow_cpp_exception.js b/Polyhedron/demo/Polyhedron/javascript/tests/bad/catch_and_retrow_cpp_exception.js index 6ae030b02204..7c745c672155 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/bad/catch_and_retrow_cpp_exception.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/bad/catch_and_retrow_cpp_exception.js @@ -9,9 +9,7 @@ f = function() { try { f() } catch(e) { - print("Caught exception in catch_and_retrow_cpp_exception.js:\n " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + print_exception_and_bt(e) print("Rethrow the exception...") throw e } diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/good/catch_missing_file.js b/Polyhedron/demo/Polyhedron/javascript/tests/good/catch_missing_file.js index 7d947404ea08..a24acf986753 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/good/catch_missing_file.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/good/catch_missing_file.js @@ -8,5 +8,5 @@ try { throw "Wrong exception!" good = true } -if(!good) throw "The exception was not caugth!" +if(!good) throw "The exception was not caught!" print("OK in catch_missing_file") diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/good/caught_cpp_exception_in_an_include.js b/Polyhedron/demo/Polyhedron/javascript/tests/good/caught_cpp_exception_in_an_include.js index 628a9d9ff31f..1cdc6b35d997 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/good/caught_cpp_exception_in_an_include.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/good/caught_cpp_exception_in_an_include.js @@ -2,9 +2,7 @@ var good = false try { include("../bad/catch_and_retrow_cpp_exception.js") } catch(e) { - print("Caught exception in caught_cpp_exception_in_an_include.js:\n " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + print_exception_and_bt(e) if(!e.toString().match(/Exception thrown in MainWindow::throw_exception/)) throw "Wrong exception!" good = true diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception.js b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception.js index df91fa781464..43204ff0e465 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception.js @@ -2,9 +2,7 @@ var good = false try { main_window.throw_exception() } catch(e) { - print("Exception caught in cpp_exception.js: " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + print_exception_and_bt(e) if(!e.toString().match(/Exception thrown in MainWindow::throw_exception/)) throw "Wrong exception!" good = true diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_from_a_function.js b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_from_a_function.js index 4b889937ef3c..cde7f159e84a 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_from_a_function.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_from_a_function.js @@ -6,13 +6,11 @@ function throw_cpp_exception() { try { throw_cpp_exception() } catch(e) { - print("Exception caught in cpp_exception_from_a_function.js: " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + print_exception_and_bt(e) if(!e.toString().match(/Exception thrown in MainWindow::throw_exception/)) throw "Wrong exception!" good = true } -if(!good) throw "The exception was not caugth!" +if(!good) throw "The exception was not caught!" print("OK at the end of cpp_exception.js") diff --git a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_in_an_include.js b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_in_an_include.js index 3e61637989fd..507583abf0c0 100644 --- a/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_in_an_include.js +++ b/Polyhedron/demo/Polyhedron/javascript/tests/good/cpp_exception_in_an_include.js @@ -2,9 +2,7 @@ var good = false try { include("../bad/uncaught_cpp_exception.js") } catch(e) { - print("Exception caught in cpp_exception_in_an_include.js: " + e) - print("Backtrace:") - print_backtrace(e.backtrace) + print_exception_and_bt(e) if(!e.toString().match(/Exception thrown in MainWindow::throw_exception/)) throw "Wrong exception!" good = true diff --git a/Three/include/CGAL/Three/exceptions.h b/Three/include/CGAL/Three/exceptions.h index 6953e16885db..927489b4f203 100644 --- a/Three/include/CGAL/Three/exceptions.h +++ b/Three/include/CGAL/Three/exceptions.h @@ -58,9 +58,6 @@ struct Optional_or_bool { static type invoke(Callable f) { f(); return true; } }; -enum Context { CURRENT_CONTEXT, PARENT_CONTEXT }; - -#if 1 // AF @todo scripting has changed /// This function template wraps a `Callable` that can be called without /// any argument (such as a lambda expression without arguments), and in /// case the function call is in a Qt Script context, wraps the call in a @@ -70,40 +67,34 @@ enum Context { CURRENT_CONTEXT, PARENT_CONTEXT }; template typename Optional_or_bool::type>::type wrap_a_call_to_cpp(Callable f, - // QScriptable* qs = 0, + QObject* object = 0, const char* file = 0, - int line = -1, - Context c = CURRENT_CONTEXT) { - typedef typename cpp11::result_of::type Callable_RT; + int line = -1) { + typedef decltype(f()) Callable_RT; typedef Optional_or_bool O_r_b; - typedef typename O_r_b::type Return_type; - + QJSEngine* script_engine = qjsEngine(object); const bool no_try_catch = qApp->property("no-try-catch").toBool(); - if(no_try_catch /* || qs == 0 || !qs->context() */ ) return O_r_b::invoke(f); + if(no_try_catch || script_engine == 0) return O_r_b::invoke(f); else try { return O_r_b::invoke(f); } catch(const std::exception& e) { -#if 0 const Script_exception* se = dynamic_cast(&e); - QScriptContext* context = qs->context(); - QStringList qt_bt = context->backtrace(); - if(se) qt_bt = se->backtrace(); - std::cerr << "Backtrace:\n"; - Q_FOREACH(QString s, qt_bt) - { - std::cerr << " " << qPrintable(s) << std::endl; + QStringList qt_bt; + if(se) { + qt_bt = se->backtrace(); + if(qt_bt.size() != 0) std::cerr << "Backtrace:\n"; } - context = context->parentContext(); - if(c == PARENT_CONTEXT) { - std::cerr << "> parent"; - context = context->parentContext(); - } else { - std::cerr << "> current"; + QJSValue js_bt = script_engine->newArray(qt_bt.size()); + if(qt_bt.size() != 0) { + quint32 i = 0; + for(auto s: qt_bt) + { + std::cerr << " " << qPrintable(s) << std::endl; + js_bt.setProperty(i++, s); + } } - std::cerr << " context: " - << qPrintable(context->toString()) << std::endl; QString error; if(se) { error = se->what(); @@ -112,22 +103,14 @@ wrap_a_call_to_cpp(Callable f, QString context; if(file != 0) context += QObject::tr(" at file %1").arg(file); if(line != -1) context += QString(":%1").arg(line); - if(!context.isNull()) { - error += context; - qt_bt.push_front(QObject::tr("") + context); - } error += QString(": %1").arg(e.what()); } - QScriptValue v = context->throwError(error); - v.setProperty("backtrace", - qScriptValueFromSequence(context->engine(), qt_bt)); - std::cerr << "result after throwError: " - << qPrintable(v.toString()) << std::endl; -#endif - return Return_type(); + QJSValue error_value = script_engine->newErrorObject(QJSValue::GenericError, error); + error_value.setProperty("backtrace", js_bt); + script_engine->throwError(error_value); + return {}; } } -#endif } // end namespace Three } // end namespace CGAL From a12a0fafa9a7d9f716874c0d910b74ab2aa2dd0c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 15:29:47 +0200 Subject: [PATCH 345/943] TBB is a SYSTEM library --- Installation/cmake/modules/CGAL_TBB_support.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Installation/cmake/modules/CGAL_TBB_support.cmake b/Installation/cmake/modules/CGAL_TBB_support.cmake index 372f3208578a..8a99682f0fe7 100644 --- a/Installation/cmake/modules/CGAL_TBB_support.cmake +++ b/Installation/cmake/modules/CGAL_TBB_support.cmake @@ -7,4 +7,7 @@ if(TBB_FOUND AND NOT TARGET CGAL::TBB_support) INTERFACE_COMPILE_DEFINITIONS "CGAL_LINKED_WITH_TBB;NOMINMAX" INTERFACE_INCLUDE_DIRECTORIES "${TBB_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "TBB::tbb;TBB::tbbmalloc;Threads::Threads") + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.25) + set_target_properties(CGAL::TBB_support PROPERTIES SYSTEM TRUE) + endif() endif() From 9f68b1a0bed10e502a281adb71dfd480f2972880 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 15:29:47 +0200 Subject: [PATCH 346/943] TBB is a SYSTEM library, and CGAL::CGAL is not --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 6bc023bdf65d..abd23a6e7fe0 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -124,7 +124,9 @@ include(${CGAL_MODULES_DIR}/CGAL_target_use_TBB.cmake) if( CGAL_DEV_MODE OR RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE ) # Do not use -isystem for CGAL include paths - set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) + if(CMAKE_VERSION VERSION_LESS 3.25) + set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) + endif() endif() foreach(comp ${CGAL_FIND_COMPONENTS}) @@ -179,6 +181,12 @@ foreach(cgal_lib ${CGAL_LIBRARIES}) set(WITH_${cgal_lib} TRUE) if(${cgal_lib}_FOUND AND NOT TARGET ${cgal_lib}) add_library(${cgal_lib} INTERFACE IMPORTED GLOBAL) + if( CGAL_DEV_MODE OR RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE ) + # Do not use -isystem for CGAL include paths + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.25) + set_target_properties(${cgal_lib} PROPERTIES SYSTEM FALSE) + endif() + endif() if(NOT TARGET CGAL::${cgal_lib}) add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) endif() From d8583c93d59b054c8dcc5278a183b88c1c102305 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 16:47:12 +0200 Subject: [PATCH 347/943] replace deprecated QMatrix4x4*QVector3D by map --- .../Plugins/PCA/Affine_transform_plugin.cpp | 18 +++++++++--------- .../Polyhedron/Plugins/PMP/Extrude_plugin.cpp | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp index 1061b04536ba..d9fbc5a094b4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp @@ -616,9 +616,9 @@ endPointSet(const QMatrix4x4& transform_matrix) for(Point_set::Index idx : *new_ps) { - QVector3D vec = transform_matrix * QVector3D(new_ps->point(idx).x() - c.x, - new_ps->point(idx).y() - c.y, - new_ps->point(idx).z() - c.z); + QVector3D vec = transform_matrix.map(QVector3D(new_ps->point(idx).x() - c.x, + new_ps->point(idx).y() - c.y, + new_ps->point(idx).z() - c.z)); new_ps->point(idx) = Kernel::Point_3(vec.x(), vec.y(), vec.z()); } @@ -643,9 +643,9 @@ endPolygonSoup(const QMatrix4x4& transform_matrix) for(Point_3& p : new_points) { - QVector3D vec = transform_matrix * QVector3D(p.x() - c.x, - p.y() - c.y, - p.z() - c.z); + QVector3D vec = transform_matrix.map(QVector3D(p.x() - c.x, + p.y() - c.y, + p.z() - c.z)); p = Kernel::Point_3(vec.x(), vec.y(), vec.z()); } @@ -670,9 +670,9 @@ endPolygonMesh(const QMatrix4x4& transform_matrix) const CGAL::qglviewer::Vec& c = aff_transformed_item->center(); auto transformation = [&c, &transform_matrix](const Kernel::Point_3& p) -> Kernel::Point_3 { - QVector3D vec = transform_matrix * QVector3D(p.x() - c.x, - p.y() - c.y, - p.z() - c.z); + QVector3D vec = transform_matrix.map(QVector3D(p.x() - c.x, + p.y() - c.y, + p.z() - c.z)); return { vec.x(), vec.y(), vec.z() }; }; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp index caea10065a9c..da2089147d30 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp @@ -447,7 +447,7 @@ private Q_SLOTS: transform_matrix.data()[i] = (float)matrix[i]; rotate_matrix = transform_matrix; rotate_matrix.setColumn(3, QVector4D(0,0,0,1)); - QVector3D dir = rotate_matrix * QVector3D(0,1,0); + QVector3D dir = rotate_matrix.map(QVector3D(0,1,0)); dir.normalize(); dir = length * dir; From dc7f6af55d1c6840d2ae72384a3f5c9dc7a21336 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 16:47:40 +0200 Subject: [PATCH 348/943] check that we have an exact match (whole string) --- Polyhedron/demo/Polyhedron/Scene_plane_item.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp b/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp index ba455ac0cc22..f2175e4271b0 100644 --- a/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_plane_item.cpp @@ -329,13 +329,13 @@ void Scene_plane_item::setPlaneOrientation() if(!ok) return; - match = rx.match(eq); // AF: exact? - // does_match = rx.exactMatch(eq); - if(! match.hasMatch()) + match = rx.match(eq); + does_match = match.hasMatch() && match.capturedLength(0) == eq.size(); + if(!does_match) { QMessageBox::warning(CGAL::Three::Three::mainWindow(),"Error","The input must be of the form a*x+b*y+c*z+d=0"); } - }while(! match.hasMatch()); + }while(!does_match); double a(match.captured(1).toDouble()), b(match.captured(2).toDouble()), c(match.captured(3).toDouble()), d(match.captured(4).toDouble()); Kernel_epic::Point_3 sure_point(0,0,0); From f9c213735bb6e157a60442590cb263a7fbad397b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 17:53:32 +0200 Subject: [PATCH 349/943] last deprecation warning in a full build of demo/Polyhedron --- .../Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp index 724ed194fc51..3e94a0adea31 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp @@ -116,7 +116,7 @@ void Polyhedron_demo_edit_polyhedron_plugin::init(QMainWindow* mainWindow, CGAL: actionDeformation->setObjectName("actionDeformation"); actionDeformation->setShortcutContext(Qt::ApplicationShortcut); autoConnectActions(); - e_shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_E), mw); + e_shortcut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_E), mw); connect(e_shortcut, &QShortcut::activated, this, &Polyhedron_demo_edit_polyhedron_plugin::dispatchAction); connect(e_shortcut, &QShortcut::activatedAmbiguously, this, &Polyhedron_demo_edit_polyhedron_plugin::dispatchAction); From abb9080102af1f6d2cbbb642820bafda2aa98a7c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 18:19:53 +0200 Subject: [PATCH 350/943] cleanup demo/AABB_tree --- AABB_tree/demo/AABB_tree/CMakeLists.txt | 28 ++----------------- AABB_tree/demo/AABB_tree/MainWindow.cpp | 24 +--------------- AABB_tree/demo/AABB_tree/MainWindow.h | 37 ------------------------- AABB_tree/demo/AABB_tree/Scene.h | 2 -- AABB_tree/demo/AABB_tree/Viewer.cpp | 3 -- AABB_tree/demo/AABB_tree/init.js | 2 -- 6 files changed, 3 insertions(+), 93 deletions(-) delete mode 100644 AABB_tree/demo/AABB_tree/init.js diff --git a/AABB_tree/demo/AABB_tree/CMakeLists.txt b/AABB_tree/demo/AABB_tree/CMakeLists.txt index f455cae3f06a..b66e3f468771 100644 --- a/AABB_tree/demo/AABB_tree/CMakeLists.txt +++ b/AABB_tree/demo/AABB_tree/CMakeLists.txt @@ -8,52 +8,28 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - -# Include this package's headers first -include_directories(BEFORE ./ ./include) # Find CGAL and CGAL Qt6 find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Widgets OpenGL Qml) +find_package(Qt6 QUIET COMPONENTS Gui) if(CGAL_Qt6_FOUND AND Qt6_FOUND) qt6_wrap_ui(UI_FILES MainWindow.ui) - include(AddFileDependencies) - qt6_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") - add_file_dependencies(MainWindow_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h") - qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") - add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h") - qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") - add_file_dependencies(Scene_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Scene.h") qt6_add_resources(CGAL_Qt6_RESOURCE_FILES AABB_demo.qrc) - add_file_dependencies( - AABB_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp" - "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp" - "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") - add_executable( AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} - #${CGAL_Qt6_MOC_FILES} ) # Link with Qt libraries - target_link_libraries(AABB_demo PRIVATE Qt6::OpenGLWidgets Qt6::Widgets Qt6::OpenGL Qt6::Qml + target_link_libraries(AABB_demo PRIVATE Qt6::Gui CGAL::CGAL CGAL::CGAL_Qt6) add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo) diff --git a/AABB_tree/demo/AABB_tree/MainWindow.cpp b/AABB_tree/demo/AABB_tree/MainWindow.cpp index cd1444b9968c..63e4a0fe5965 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.cpp +++ b/AABB_tree/demo/AABB_tree/MainWindow.cpp @@ -13,10 +13,8 @@ #include "ui_MainWindow.h" - - MainWindow::MainWindow(QWidget* parent) - : CGAL::Qt::DemosMainWindow(parent), myEngine(new QJSEngine(this)) + : CGAL::Qt::DemosMainWindow(parent) { ui = new Ui::MainWindow; ui->setupUi(this); @@ -40,25 +38,12 @@ MainWindow::MainWindow(QWidget* parent) connect(this, SIGNAL(openRecentFile(QString)), this, SLOT(open(QString))); - QJSValue mainWindow = myEngine->newQObject(this); - myEngine->globalObject().setProperty("main_window", mainWindow); readSettings(); - std::ifstream script("init.js"); - if(script.good()){ - std::string line; - while(getline(script, line)){ - myEngine->evaluate(line.c_str()); - } - } } MainWindow::~MainWindow() { m_pViewer->makeCurrent(); - // AF I thought this helps to avoid the exception when the program - // terminates, but it does not - myEngine->globalObject().setProperty("main_window", QJSValue()); - myEngine->collectGarbage(); delete ui; } @@ -80,13 +65,6 @@ void MainWindow::dropEvent(QDropEvent *event) event->acceptProposedAction(); } - -void MainWindow::hello() const -{ - std::cout << "Hhello world" << std::endl; -} - - void MainWindow::updateViewerBBox() { m_pScene->update_bbox(); diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index 87f6de0c76c9..d220dec44003 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -1,8 +1,6 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include -#include #include class QDragEnterEvent; @@ -13,38 +11,6 @@ namespace Ui { class MainWindow; } -#if 0 - -struct Foo : public QObject -{ - - Q_OBJECT -public: - QJSEngine* myEngine; - - Foo() - : myEngine(new QJSEngine(this)) - { - QJSValue baz = myEngine->newQObject(this); - myEngine->.globalObject().setProperty("baz", baz); - } - - void bar() - { - std::cout << "bar()" << std::endl; - myEngine->evaluate("baz.hello()"); - } - -public slots: - void hello() const // if not a slot it must be - { - std::cout << "called hello()" << std::endl; - } - -}; -#endif - - class MainWindow : public CGAL::Qt::DemosMainWindow { @@ -54,8 +20,6 @@ class MainWindow : ~MainWindow(); public slots: - - void hello() const; void updateViewerBBox(); void open(QString filename); void setAddKeyFrameKeyboardModifiers(Qt::KeyboardModifiers); @@ -113,7 +77,6 @@ class MainWindow : void on_actionView_cutting_plane_triggered(); private: - QJSEngine* myEngine; Scene* m_pScene; Viewer* m_pViewer; Ui::MainWindow* ui; diff --git a/AABB_tree/demo/AABB_tree/Scene.h b/AABB_tree/demo/AABB_tree/Scene.h index cc109a433fdf..74309b25ef35 100644 --- a/AABB_tree/demo/AABB_tree/Scene.h +++ b/AABB_tree/demo/AABB_tree/Scene.h @@ -1,7 +1,6 @@ #ifndef SCENE_H #define SCENE_H -#include #include #include @@ -77,7 +76,6 @@ class Scene : public QObject }; public: - QOpenGLContext* context; void draw(CGAL::QGLViewer*); void update_bbox(); Bbox bbox() { return m_bbox; } diff --git a/AABB_tree/demo/AABB_tree/Viewer.cpp b/AABB_tree/demo/AABB_tree/Viewer.cpp index 6f5eac006797..9e5cf22bdb74 100644 --- a/AABB_tree/demo/AABB_tree/Viewer.cpp +++ b/AABB_tree/demo/AABB_tree/Viewer.cpp @@ -1,9 +1,6 @@ #include "Viewer.h" #include "Scene.h" #include -#include -#include - Viewer::Viewer(QWidget* parent) : CGAL::QGLViewer(parent), m_pScene(nullptr), diff --git a/AABB_tree/demo/AABB_tree/init.js b/AABB_tree/demo/AABB_tree/init.js deleted file mode 100644 index e7f08e266c68..000000000000 --- a/AABB_tree/demo/AABB_tree/init.js +++ /dev/null @@ -1,2 +0,0 @@ -main_window.hello(); -main_window.hello(); From 3869a4a6c3a9b38431a8aabba1a49575fdb36c80 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 24 Aug 2023 18:41:03 +0200 Subject: [PATCH 351/943] cleanup Alpha_sphare_3 demo --- AABB_tree/demo/AABB_tree/CMakeLists.txt | 8 ++------ .../demo/Alpha_shapes_3/CMakeLists.txt | 19 ++++--------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/CMakeLists.txt b/AABB_tree/demo/AABB_tree/CMakeLists.txt index b66e3f468771..7411a48f67e0 100644 --- a/AABB_tree/demo/AABB_tree/CMakeLists.txt +++ b/AABB_tree/demo/AABB_tree/CMakeLists.txt @@ -13,23 +13,19 @@ set(CMAKE_AUTOMOC ON) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Gui) +find_package(Qt6 QUIET COMPONENTS Gui OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) qt6_wrap_ui(UI_FILES MainWindow.ui) - qt6_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") - qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") - qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp") - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES AABB_demo.qrc) add_executable( AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} ) # Link with Qt libraries - target_link_libraries(AABB_demo PRIVATE Qt6::Gui + target_link_libraries(AABB_demo PRIVATE Qt6::Gui Qt6::OpenGL CGAL::CGAL CGAL::CGAL_Qt6) add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo) diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt index 6f08193da63f..65b4e7febfea 100644 --- a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt @@ -9,38 +9,27 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGL OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) - # include(${QT_USE_FILE}) - include_directories(BEFORE ./) - # ui file, created with Qt Designer qt6_wrap_ui(uis MainWindow.ui) # qrc files (resources files, that contain icons, at least) qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Alpha_shape_3.qrc) - add_executable( - Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp ${uis} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + add_executable(Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp ${uis}) + add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shape_3) target_link_libraries(Alpha_shape_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 - Qt6::Widgets Qt6::OpenGL Qt6::OpenGLWidgets) + Qt6::Widgets Qt6::OpenGL) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Alpha_shape_3) From df06d29dd1efa1eb1c1aea1c6344541f20b7e608 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 25 Aug 2023 11:33:28 +0200 Subject: [PATCH 352/943] fix/cleanup AABB_tree and Alpha_shape_3 demos --- AABB_tree/demo/AABB_tree/AABB_demo.cpp | 9 - AABB_tree/demo/AABB_tree/CMakeLists.txt | 15 +- AABB_tree/demo/AABB_tree/MainWindow.cpp | 4 + AABB_tree/demo/AABB_tree/MainWindow.h | 4 +- AABB_tree/demo/AABB_tree/Scene.h | 4 +- AABB_tree/demo/AABB_tree/benchmarks.cpp | 1 + .../demo/Alpha_shapes_3/CMakeLists.txt | 15 +- .../demo/Alpha_shapes_3/data/README | 14 + .../demo/Alpha_shapes_3/data/bunny1000.pts | 1001 + .../demo/Alpha_shapes_3/data/bunny5000.pts | 35948 ++++++++++++++++ .../demo/Alpha_shapes_3/data/bunny_ran.pts | 35948 ++++++++++++++++ .../demo/Alpha_shapes_3/data/cube_ran.pts | 582 + Alpha_shapes_3/demo/Alpha_shapes_3/data/fin | 8 + Alpha_shapes_3/demo/Alpha_shapes_3/data/fout | 17 + .../demo/Alpha_shapes_3/data/head_ran.pts | 857 + .../demo/Alpha_shapes_3/data/skull.pts | 27088 ++++++++++++ .../demo/Alpha_shapes_3/data/thom1249.pts | 1249 + .../demo/Alpha_shapes_3/data/thom384.pts | 384 + .../demo/Alpha_shapes_3/data/torus_ran.pts | 500 + 19 files changed, 103619 insertions(+), 29 deletions(-) create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/README create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny1000.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny5000.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny_ran.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/cube_ran.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/fin create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/fout create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/head_ran.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/skull.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/thom1249.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/thom384.pts create mode 100644 Alpha_shapes_3/demo/Alpha_shapes_3/data/torus_ran.pts diff --git a/AABB_tree/demo/AABB_tree/AABB_demo.cpp b/AABB_tree/demo/AABB_tree/AABB_demo.cpp index 018e0f69c14d..9727327004f0 100644 --- a/AABB_tree/demo/AABB_tree/AABB_demo.cpp +++ b/AABB_tree/demo/AABB_tree/AABB_demo.cpp @@ -49,12 +49,3 @@ int main(int argc, char **argv) return app.exec(); } - -# include "Scene.cpp" -# include "Scene_moc.cpp" -# include "benchmarks.cpp" -# include "Viewer.cpp" -# include "Viewer_moc.cpp" -# include "MainWindow.cpp" -# include "MainWindow_moc.cpp" - diff --git a/AABB_tree/demo/AABB_tree/CMakeLists.txt b/AABB_tree/demo/AABB_tree/CMakeLists.txt index 7411a48f67e0..46b13f3b1c66 100644 --- a/AABB_tree/demo/AABB_tree/CMakeLists.txt +++ b/AABB_tree/demo/AABB_tree/CMakeLists.txt @@ -6,9 +6,6 @@ project(AABB_tree_Demo) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) - # Find CGAL and CGAL Qt6 find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) @@ -17,12 +14,16 @@ find_package(Qt6 QUIET COMPONENTS Gui OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) - qt6_wrap_ui(UI_FILES MainWindow.ui) + add_definitions(-DQT_NO_KEYWORDS) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES AABB_demo.qrc) + # Instruct CMake to run moc/ui/rcc automatically when needed. + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - add_executable( - AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} + qt_add_executable( + AABB_demo AABB_demo.cpp Scene.cpp benchmarks.cpp Viewer.cpp MainWindow.cpp + MainWindow.ui AABB_demo.qrc ) # Link with Qt libraries target_link_libraries(AABB_demo PRIVATE Qt6::Gui Qt6::OpenGL diff --git a/AABB_tree/demo/AABB_tree/MainWindow.cpp b/AABB_tree/demo/AABB_tree/MainWindow.cpp index 63e4a0fe5965..1c68338bcf44 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.cpp +++ b/AABB_tree/demo/AABB_tree/MainWindow.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "ui_MainWindow.h" @@ -19,6 +20,9 @@ MainWindow::MainWindow(QWidget* parent) ui = new Ui::MainWindow; ui->setupUi(this); + this->addAboutDemo(":/cgal/AABB_demo/about.html"); + this->addAboutCGAL(); + // saves some pointers from ui, for latter use. m_pViewer = ui->viewer; diff --git a/AABB_tree/demo/AABB_tree/MainWindow.h b/AABB_tree/demo/AABB_tree/MainWindow.h index d220dec44003..3138efd4202a 100644 --- a/AABB_tree/demo/AABB_tree/MainWindow.h +++ b/AABB_tree/demo/AABB_tree/MainWindow.h @@ -19,12 +19,12 @@ class MainWindow : MainWindow(QWidget* parent = nullptr); ~MainWindow(); - public slots: + public Q_SLOTS: void updateViewerBBox(); void open(QString filename); void setAddKeyFrameKeyboardModifiers(Qt::KeyboardModifiers); - protected slots: + protected Q_SLOTS: // settings void quit(); diff --git a/AABB_tree/demo/AABB_tree/Scene.h b/AABB_tree/demo/AABB_tree/Scene.h index 74309b25ef35..ae898f43daa4 100644 --- a/AABB_tree/demo/AABB_tree/Scene.h +++ b/AABB_tree/demo/AABB_tree/Scene.h @@ -171,7 +171,7 @@ class Scene : public QObject void attrib_buffers(CGAL::QGLViewer*); void compile_shaders(); void compute_texture(int, int, Color_ramp, Color_ramp); -private slots: +private Q_SLOTS: void updateCutPlane(); public: @@ -253,7 +253,7 @@ private slots: -public slots: +public Q_SLOTS: // cutting plane void cutting_plane(bool override = false); void changed(); diff --git a/AABB_tree/demo/AABB_tree/benchmarks.cpp b/AABB_tree/demo/AABB_tree/benchmarks.cpp index c337e43efe76..1b68d80bcde0 100644 --- a/AABB_tree/demo/AABB_tree/benchmarks.cpp +++ b/AABB_tree/demo/AABB_tree/benchmarks.cpp @@ -1,4 +1,5 @@ #include "Scene.h" +#include "Refiner.h" #include #include diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt index 65b4e7febfea..7c3b54b8424b 100644 --- a/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/CMakeLists.txt @@ -7,9 +7,6 @@ project(Alpha_shapes_3_Demo) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) @@ -18,13 +15,13 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) - # ui file, created with Qt Designer - qt6_wrap_ui(uis MainWindow.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Alpha_shape_3.qrc) + # Instruct CMake to run moc/ui/rcc automatically when needed. + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - add_executable(Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp ${uis}) + qt_add_executable(Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp + MainWindow.ui Alpha_shape_3.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shape_3) diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/README b/Alpha_shapes_3/demo/Alpha_shapes_3/data/README new file mode 100644 index 000000000000..74384edcd03d --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/README @@ -0,0 +1,14 @@ +The purpose of this repository is to make some range data +and detailed reconstructions available to the public. Currently, this repository only contains models that were scanned and reconstructed +at the Stanford Computer Graphics Laboratory . In the future, we hope to include data sets and reconstructions from other sources. + +The models in this repository were all scanned with a Cyberware 3030MS optical triangulation scanner. +Please acknowledge .... + +http://www-graphics.stanford.edu/data/3Dscanrep/ +e-mail: 3Dscanrep@graphics.stanford.edu +file://www-graphics.stanford.edu/pub/zippack/data/ + +http://www.hs.washington.edu/locke/vislab/ +http://biocomp.arc.nasa.gov/3dreconstruction/data/ +medical data \ No newline at end of file diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny1000.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny1000.pts new file mode 100644 index 000000000000..ff22c3612dd9 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny1000.pts @@ -0,0 +1,1001 @@ +1000 +-0.0164722 0.0382453 0.0209318 +-0.0641407 0.171114 -0.0471776 +0.023086 0.119339 0.0317977 +0.00506037 0.0347021 0.0393176 +-0.066143 0.143958 0.0413147 +-0.0445017 0.163753 0.00542301 +-0.0689729 0.181022 -0.0546459 +-0.0931085 0.131006 0.0192314 +0.000506827 0.0489752 0.0512269 +-0.0615935 0.160001 -0.0315914 +-0.0245032 0.0960169 0.0442753 +-0.0258992 0.0891655 0.049535 +-0.000499367 0.0456802 0.0470389 +-0.0171808 0.0654583 0.0528522 +0.00116916 0.131228 0.00582139 +-0.0356565 0.122935 -0.00798984 +-0.0701892 0.156285 0.021569 +-0.0173569 0.038443 0.0259817 +-0.0716413 0.0763478 -0.0132577 +0.0528545 0.0568172 0.0288563 +-0.0325067 0.0732308 0.0407775 +-0.0760686 0.150008 -0.00987485 +-0.030561 0.0774145 0.0410957 +-0.0833901 0.0762729 0.00451303 +-0.000492618 0.0925258 0.0556594 +-0.0358778 0.159506 0.00240863 +0.0115111 0.114076 0.0384616 +-0.0877889 0.0887187 0.00347532 +-0.0261028 0.115949 -0.0147279 +-0.0682913 0.165205 -0.0539869 +-0.0225512 0.0933694 -0.0331106 +-0.0538783 0.0999149 -0.0214389 +0.0435587 0.0959151 0.0211557 +-0.0167991 0.0388632 -0.0107644 +-0.0569142 0.0548839 0.00364185 +0.00749229 0.091015 0.0542708 +-0.065316 0.0625169 -0.002419 +-0.00749647 0.119689 0.0375376 +-0.0772165 0.0934484 -0.0125951 +-0.029008 0.0478606 -0.0250513 +0.00934189 0.0553527 -0.0303034 +-0.0578677 0.104042 -0.0186102 +0.0405495 0.0999198 -0.00379356 +-0.0894314 0.137929 0.0371779 +0.00710731 0.126603 -0.00643182 +0.058913 0.070492 0.0108657 +-0.0922485 0.120133 0.0292903 +0.0395325 0.105566 0.0221621 +-0.0376065 0.0365426 0.0444186 +-0.0550158 0.128128 -0.00563226 +-0.0561672 0.0336533 0.0186553 +0.0123436 0.0351165 0.0296251 +-0.0899184 0.131005 0.0413145 +0.0065365 0.100373 0.0469448 +-0.0502879 0.133796 0.0278403 +-0.0716838 0.0351362 0.00880221 +0.0579126 0.0523842 0.0101848 +-0.0639212 0.154791 0.00385831 +-0.0654795 0.0384216 -0.00684663 +-0.0615513 0.0624603 0.0259481 +-0.0368013 0.0842007 -0.0223672 +0.0522757 0.0574291 -0.0035048 +-0.0764972 0.123179 0.0527664 +0.0302998 0.0694384 -0.019812 +-0.0334269 0.0486094 0.0413091 +-0.00450651 0.0689184 0.0565193 +0.0425976 0.0887597 -0.00680771 +-0.0707351 0.156208 0.0228366 +0.0548799 0.0492406 0.0202107 +-0.00962948 0.168316 -0.023669 +-0.0313363 0.11605 -0.0148117 +-0.0225249 0.125571 0.0012278 +0.0122871 0.124953 0.0313975 +-0.0343047 0.125361 0.0205265 +-0.038499 0.0747376 0.0420783 +0.0292349 0.0759579 -0.0220376 +-0.0255784 0.0477093 -0.0263526 +-0.0750958 0.151313 -0.0258791 +0.0057743 0.0347896 0.0375885 +-0.0926124 0.120126 0.0272917 +-0.0366664 0.175138 -0.00407486 +-0.00549337 0.088417 0.0570387 +-0.0711473 0.17507 -0.0540267 +-0.0776118 0.0739521 0.0284675 +0.0376746 0.104662 0.0282621 +-0.0634881 0.121359 0.0469409 +0.0233296 0.0564006 -0.0254415 +-0.0399361 0.123254 0.0259269 +-0.000577398 0.0341134 -0.0181551 +-0.000496894 0.0520342 0.0541515 +-0.0701023 0.177167 -0.0478719 +-0.0641167 0.143926 0.0389732 +-0.0679369 0.165269 -0.0197719 +-0.0681029 0.138305 0.0455026 +-0.00280426 0.0384802 0.0198949 +-0.0628273 0.0924874 -0.0189476 +0.0084946 0.0869435 0.0558386 +0.00910286 0.0348066 0.0183719 +-0.0195983 0.126231 0.0213862 +-0.0584949 0.143878 0.0330085 +-0.0218343 0.0553077 0.0451067 +-0.0645685 0.147457 -0.0230581 +0.0426227 0.0691122 -0.00279622 +-0.035813 0.0842739 -0.0225525 +-0.0819685 0.0791215 0.0284136 +0.0328852 0.113087 -0.00384394 +-0.0677123 0.168615 -0.0283035 +-0.0556635 0.140996 0.0299986 +-0.0764958 0.131682 0.0526442 +0.0421796 0.0832522 0.0293553 +-0.0848653 0.0855483 0.0264341 +-0.0329445 0.121338 0.0269922 +-0.0320197 0.058187 -0.0133973 +-0.0322785 0.0421631 -0.0296986 +0.0401757 0.067497 -0.00878165 +-0.0904989 0.148452 0.0245146 +-0.00947974 0.0561444 0.0530127 +-0.0310333 0.0383692 -0.000250742 +-0.0780713 0.150403 0.0367551 +-0.0872126 0.146051 0.00824907 +-0.0735722 0.148626 -0.0268487 +-0.00548676 0.116904 0.0394711 +-0.0599006 0.132533 0.037981 +-0.093479 0.129659 0.0212406 +-0.0639063 0.120904 -0.00875525 +-0.028606 0.0356961 0.0524615 +-0.0652024 0.153998 -0.041972 +-0.0262134 0.0765572 0.0473962 +-0.0774721 0.155387 0.0234212 +-0.0628707 0.0345025 0.0358026 +0.0434964 0.0555926 0.0322399 +-0.0618022 0.142496 0.0370478 +-0.0638273 0.0910291 -0.0188305 +-0.0636286 0.0672101 0.0337087 +-0.0842132 0.092522 0.0298256 +0.0185123 0.115397 0.0365584 +-0.0666269 0.131204 0.0458398 +-0.0653475 0.165775 -0.0260007 +-0.0182573 0.181629 -0.0177335 +-0.0142757 0.185348 -0.0257883 +0.0485082 0.0624718 0.0300814 +-0.0254927 0.0974122 0.0441083 +-0.0446561 0.0349999 0.0427486 +-0.0616719 0.0410515 0.0160296 +-0.0179307 0.0931593 -0.0348763 +-0.00828798 0.130102 0.00662088 +-0.0525878 0.149334 0.020403 +-0.0102534 0.128943 0.0232512 +0.0445378 0.0959706 0.0101622 +-0.0465291 0.0335268 -0.00814027 +0.00437534 0.131145 0.0198749 +-0.0394369 0.03436 0.0321562 +-0.0107155 0.127812 0.0260097 +-0.0273383 0.17123 -0.0098418 +-0.0037118 0.0655569 -0.0347446 +-0.0630689 0.150547 -0.0265942 +-0.0776846 0.16386 -0.0329461 +-0.0728796 0.151218 -0.0388899 +0.038172 0.0967289 0.0325586 +-0.058907 0.0983413 -0.0195805 +-0.00549542 0.0965711 0.0536823 +0.00650609 0.0503877 0.0517539 +-0.0847722 0.113367 0.0459387 +0.0309512 0.0822193 0.0430727 +-0.0159859 0.0984773 0.0464357 +0.0361586 0.0781359 0.0382445 +0.0417308 0.0422749 0.000248643 +-0.0631435 0.175042 -0.061564 +-0.0251041 0.0945178 -0.0276305 +0.018776 0.122594 -0.0061273 +0.0173125 0.0726566 0.0514253 +-0.0377229 0.0724783 -0.0174913 +0.0173872 0.0432828 -0.0228623 +0.0416262 0.0912615 0.0286616 +-0.050567 0.0474222 -0.00850865 +-0.0150865 0.162585 -0.00969001 +0.0143357 0.0566765 -0.0290221 +-0.0309078 0.065095 -0.0224325 +0.045522 0.0805737 0.00219452 +-0.0725374 0.138625 0.0483183 +-0.0476365 0.150675 0.00992423 +-0.0799103 0.125126 -0.00560703 +-0.051025 0.159915 -0.00453945 +0.00139766 0.0419298 -0.0244976 +-0.0664219 0.0352675 0.015055 +-0.00832508 0.130422 0.0138058 +-0.00366678 0.0481589 -0.0301707 +-0.0738566 0.161044 -0.0339379 +0.0319703 0.0475137 0.0318758 +0.0188215 0.126955 0.00377584 +-0.0309617 0.044825 -0.0281993 +0.0456484 0.0875951 0.00518134 +-0.0521074 0.0583062 0.0285239 +-0.0171825 0.0382402 0.011747 +-0.0692976 0.0615474 0.00912978 +-0.0232044 0.175652 -0.0207635 +-0.0406662 0.0592305 -0.0118049 +0.0572429 0.0508905 0.0121849 +-0.0488285 0.0416917 0.0446681 +0.0455301 0.0677752 0.0254231 +-0.0846369 0.110251 0.00429821 +-0.0754652 0.163196 -0.0162299 +-0.0247271 0.0564997 0.0408849 +-0.0639975 0.0601011 0.00610183 +-0.0741599 0.155538 0.00126713 +-0.0728899 0.122329 -0.00823917 +0.010861 0.0360066 0.0447493 +0.0150176 0.0355797 0.04239 +-0.0437155 0.0710509 -0.0175901 +0.0271589 0.093209 -0.0206672 +-0.00592646 0.12418 0.0336126 +-0.0810295 0.0895599 -0.00769505 +-0.0920663 0.121362 0.00826874 +-0.0862277 0.0832671 0.00749085 +-0.085371 0.127983 -0.0026626 +-0.081815 0.108922 0.02836 +-0.0491537 0.135503 0.0034228 +0.00885847 0.0887054 -0.0320419 +-0.0673146 0.0446682 0.00602001 +0.0152697 0.128852 0.0195703 +0.0231834 0.0422122 0.040252 +-0.0286261 0.0463451 -0.0269667 +0.0449154 0.0763231 0.00019353 +-0.0387296 0.0739178 -0.0177449 +0.0212191 0.0819428 -0.0266321 +-0.00126307 0.039726 0.0470556 +-0.0261021 0.0379463 0.0228342 +-0.0448562 0.101383 -0.0214692 +-0.0014827 0.0390261 -0.00225591 +-0.0648948 0.103911 -0.0165942 +-0.0624902 0.155293 -0.0145941 +0.000436968 0.130385 0.0227651 +-0.0219738 0.059501 0.0451263 +-0.0502789 0.129408 -0.00267456 +-0.0216757 0.065257 0.0474751 +-0.0621482 0.16155 -0.0395978 +0.0427418 0.0916392 0.0261768 +0.00967962 0.127274 0.0289934 +-0.0728707 0.168003 -0.0450202 +-0.0305611 0.179398 -0.00755573 +0.0341402 0.0902832 0.0407178 +-0.0491119 0.0361611 0.0459929 +0.0392087 0.0739776 0.0338431 +-0.0897017 0.151503 0.0171224 +0.0407967 0.105643 0.0101649 +-0.023633 0.0478399 -0.0272396 +-0.0504958 0.0862332 0.0455716 +-0.0451092 0.153606 0.00834539 +-0.0616087 0.146812 0.0373554 +0.0280342 0.0346822 0.009507 +0.0565861 0.0685555 0.00335277 +-0.027568 0.0674298 0.0392602 +-0.0926576 0.117463 0.0373027 +-0.0334278 0.124984 0.0208436 +-0.0602518 0.034678 0.0430709 +-0.0574989 0.107052 0.0398301 +-0.091226 0.128161 0.00727002 +0.0400022 0.0913669 0.0315547 +-0.0656743 0.138242 0.0419702 +-0.0852141 0.0805923 0.0204766 +-0.0444957 0.111173 0.0370595 +-0.044489 0.0803636 0.042222 +-0.00648998 0.122405 0.0354776 +0.00602348 0.111527 -0.0200414 +-0.0860119 0.132159 0.00027761 +0.0521231 0.0734583 0.0172399 +-0.0155403 0.0446621 0.0510487 +-0.0397503 0.0768521 -0.0186787 +-0.0682155 0.0787029 0.0404793 +-0.0813927 0.0758934 0.0225084 +-0.010188 0.0386565 4.14997e-05 +-0.00149609 0.0912323 -0.0347548 +-0.0294974 0.111128 0.0367729 +-0.0503924 0.0501648 0.0186468 +-0.0104698 0.070299 0.0557764 +0.0327323 0.0809002 0.0421262 +-0.0328911 0.122131 -0.00712262 +-0.0861948 0.1005 0.0258994 +-0.0319282 0.178722 -0.00808101 +-0.050675 0.140101 0.0024044 +-0.0346788 0.0636729 -0.0139354 +-0.00820144 0.0344928 -0.0181278 +-0.0830162 0.0939316 0.0314035 +0.0438286 0.0611702 -0.00330591 +-0.0162799 0.127645 0.0211086 +-0.0615233 0.0354132 0.043881 +-0.0755937 0.0809959 -0.0116148 +-0.0632393 0.166259 -0.0385929 +-0.0156738 0.0511142 -0.0317767 +0.000751147 0.0339678 -0.0215355 +-0.0534027 0.0336932 0.022744 +0.0102837 0.0348658 -0.0091814 +-0.0285082 0.0874866 -0.0336017 +-0.0849712 0.111906 0.0292041 +-0.0732162 0.169408 -0.0460252 +-0.00746424 0.110009 0.0430329 +-0.0587154 0.0723411 -0.016523 +-0.00333145 0.0968513 -0.0305901 +0.0385608 0.0713011 0.0346329 +-0.0463734 0.133247 0.0130756 +-0.0474986 0.104275 0.0408376 +-0.0714849 0.147284 -0.0260827 +-0.0404433 0.0461446 -0.0193164 +0.000709469 0.125628 -0.00726116 +0.028516 0.117882 -0.00302906 +-0.00249354 0.0746702 0.0587588 +0.0463101 0.0806468 0.00818141 +-0.0245515 0.114015 0.0358596 +-0.0396488 0.0563195 -0.0111963 +-0.0236961 0.0607746 0.0425604 +-0.0336359 0.0548461 -0.0105101 +-0.0585033 0.0337545 0.0163089 +0.0212208 0.126407 0.0160623 +-0.0729862 0.15207 0.0354642 +-0.085378 0.128494 0.0496125 +0.00429457 0.122356 -0.0118056 +0.0203517 0.0672611 0.0487139 +-0.0452845 0.0395903 -0.0182935 +-0.0211124 0.182965 -0.0210132 +-0.0295465 0.0819132 0.0441437 +-0.0777488 0.07493 0.029356 +0.00824435 0.0966482 -0.0263491 +-0.0588066 0.0854157 -0.0208208 +-0.0718999 0.113582 -0.00821597 +-0.0893735 0.0901981 0.0104595 +0.032603 0.0835706 0.0419526 +-0.0230608 0.0594124 0.0433799 +0.0284544 0.121423 0.0116324 +-0.0832785 0.12444 0.0504652 +-0.0396241 0.0520021 -0.0108773 +0.00721225 0.0837864 -0.0330068 +-0.046713 0.131987 0.00556897 +-0.0663702 0.157999 -0.00906779 +-0.067736 0.0779793 -0.0166569 +-0.0508692 0.102779 -0.0209206 +-0.0828958 0.151378 0.00422572 +-0.0346622 0.118788 -0.0116368 +-0.0726425 0.0716156 -0.00744076 +-0.059725 0.0469427 0.0326718 +-0.0468444 0.033579 -0.0045851 +-0.0384976 0.100064 0.0415702 +-0.050989 0.121022 -0.0119137 +-0.0624226 0.152205 -0.0125757 +-0.085741 0.151793 0.0266482 +-0.0826468 0.144713 0.0407672 +-0.0685649 0.0705046 -0.00966184 +-0.0734033 0.167233 -0.0217479 +-0.0455099 0.155064 0.0077969 +0.022652 0.0862116 0.0486888 +0.043364 0.0547822 -0.00644446 +-0.054457 0.14621 0.0274041 +-0.0639777 0.155958 0.0237716 +-0.0882347 0.0861347 0.011472 +0.00545294 0.1216 -0.0129959 +-0.0334673 0.174268 -0.00177832 +-0.00402179 0.129762 0.0240423 +-0.0185051 0.0711438 0.0540217 +-0.0872329 0.150111 0.00920897 +-0.090033 0.147105 0.0269347 +-0.0141936 0.0419832 0.0511586 +-0.0335873 0.154463 -0.00838872 +0.0441357 0.083266 -0.000805736 +-0.0528842 0.102762 -0.0205636 +-0.0125091 0.0815143 0.0575917 +0.0197435 0.125962 0.0226458 +-0.067993 0.0619274 0.01978 +-0.0216083 0.039391 -0.0287125 +-0.0767116 0.165247 -0.022942 +-0.0861936 0.111308 0.0401352 +-0.0238165 0.0854111 -0.0376407 +-0.0442161 0.123225 0.0243959 +-0.0175443 0.0460366 0.0510389 +-0.0272334 0.0902723 -0.0326005 +-0.0459359 0.168402 -0.00594095 +0.0355423 0.0512597 0.0315836 +0.0451079 0.0636949 -0.00183531 +-0.0368834 0.125578 -0.00482073 +0.0196258 0.0457587 -0.0217227 +-0.00773224 0.109619 -0.0221011 +-0.0514957 0.0876341 0.0455102 +-0.00269376 0.0613003 -0.0344696 +-0.0512049 0.147808 0.0143958 +0.0266901 0.106496 -0.0148024 +0.0383861 0.0476151 -0.00591592 +-0.0136895 0.0952904 -0.0330103 +0.0368491 0.0767795 0.0374896 +-0.029592 0.0522946 -0.0203629 +0.0482309 0.0500295 -0.00369862 +0.0381363 0.0794306 0.0358549 +-0.0677271 0.155796 -0.00229118 +0.026043 0.0392404 0.0305576 +0.0208388 0.126564 0.0173475 +0.0159735 0.0448127 0.0438765 +-0.0681757 0.118633 0.0523539 +-0.065068 0.136793 0.0410949 +-0.0454458 0.168254 0.00168996 +-0.0715222 0.142818 0.0455702 +-0.0604912 0.112522 0.03629 +-0.00074702 0.0712329 -0.0350931 +-0.0894331 0.150114 0.0121902 +-0.0185746 0.0381525 0.0151621 +0.0291213 0.0348096 0.00960912 +0.0404448 0.0985503 0.0271661 +0.0134712 0.0936014 0.0511282 +-0.021496 0.103017 0.0435858 +0.00918856 0.0342345 -0.00132638 +-0.0508332 0.0956285 -0.0221275 +-0.0613646 0.0394268 0.0439671 +0.0264379 0.0968548 0.0436578 +-0.0646669 0.0405364 0.0387423 +0.0125029 0.0475354 0.045933 +0.0412949 0.104257 0.00416372 +-0.00222052 0.117102 -0.0161156 +-0.00995662 0.169734 -0.0198047 +0.0200755 0.0399795 -0.0157069 +-0.0839165 0.110514 0.0395089 +-0.0546435 0.116042 -0.0146857 +0.0268767 0.0854059 -0.022529 +-0.0543926 0.0337363 0.0224962 +-0.049781 0.0841032 -0.0216622 +0.0431463 0.100109 0.00616795 +0.0393814 0.0780345 0.0341058 +-0.0162612 0.17862 -0.0260128 +-0.0335093 0.0676035 0.0406399 +-0.0176483 0.0352702 -0.0188352 +-0.031463 0.0519033 0.0373773 +-0.0803572 0.0803552 0.0319871 +-0.0320868 0.159267 -0.0129293 +0.0132853 0.0589897 0.0507165 +-0.0103631 0.180289 -0.0277342 +-0.0144925 0.0559441 0.0511232 +-0.0246444 0.0381166 0.0247786 +0.0170669 0.0871276 -0.028336 +0.00372554 0.105196 -0.0213905 +-0.0777857 0.156925 -0.0179137 +0.0578227 0.0710073 0.0178627 +-0.0582482 0.0336534 0.0128901 +-0.0520861 0.0545712 0.0266312 +0.0269849 0.113053 -0.00983991 +0.0429421 0.0467386 0.030224 +0.00548112 0.11414 0.0405028 +0.0607975 0.0637336 0.0101416 +-0.0895137 0.135181 0.0391853 +-0.0822803 0.139383 0.0462108 +0.00350363 0.0883757 0.0563643 +-0.0599112 0.109712 -0.0163845 +-0.0699244 0.107994 -0.0118147 +-0.073438 0.145781 -0.0138542 +-0.0702694 0.156361 0.0186365 +0.0365208 0.0713424 0.036933 +-0.0764811 0.141399 0.0471717 +-0.0338378 0.0943788 -0.02372 +-0.0185768 0.055451 0.0489119 +-0.0294962 0.107041 0.0398129 +0.0351663 0.0783387 -0.0157415 +-0.0823976 0.095314 0.0321564 +0.0458052 0.08902 0.00916777 +0.00466954 0.0341296 0.0180802 +0.012258 0.0751733 -0.0308354 +-0.0176564 0.0480544 -0.0295902 +-0.0487658 0.0811872 -0.020682 +-0.0375125 0.045091 0.0407522 +0.00960807 0.0375632 0.0322947 +0.0522688 0.0462249 0.00921199 +-0.0452834 0.0395877 -0.019291 +-0.0396931 0.126183 0.0200311 +-0.0903381 0.144712 0.0141544 +-0.0430213 0.0450576 -0.0153284 +-0.0539191 0.129665 -0.00510771 +-0.0384876 0.108386 0.0375357 +-0.0496388 0.0605583 -0.0113235 +-0.034501 0.115223 0.0328885 +-0.0540284 0.131061 -0.00500164 +-0.0147028 0.0389017 0.0333119 +-0.0207376 0.0641563 -0.0358205 +0.00590682 0.131658 0.0132863 +-0.0819436 0.154696 0.0145801 +0.0526661 0.0660937 -0.000184776 +-0.0526201 0.14007 0.0244025 +-0.0752504 0.177839 -0.0529463 +-0.0574955 0.0946379 0.0447737 +0.0456129 0.0904097 0.00518194 +-0.0282629 0.122524 0.022734 +-0.0680338 0.142566 0.0438693 +-0.0643033 0.0426016 0.0312522 +-0.0314971 0.102929 0.041974 +-0.00589664 0.0980966 0.0519993 +-0.0542782 0.132533 0.0338047 +-0.0911122 0.11473 0.0343167 +-0.0493972 0.140141 0.00739907 +-0.0577664 0.0485104 0.00767417 +-0.0629684 0.139576 0.0370615 +-0.0122087 0.128137 0.0240139 +0.00116984 0.129366 -0.00128907 +-0.039496 0.0634667 0.0415276 +-0.0427066 0.0696149 -0.0170299 +-0.0721201 0.149786 -0.0402916 +-0.0637423 0.168365 -0.0426884 +-0.0228169 0.0383283 0.0285633 +-0.0894925 0.143336 0.0131803 +-0.0408822 0.128708 0.0107294 +-0.043783 0.147719 0.00491206 +0.00912223 0.0833108 0.0554277 +-0.0543042 0.0335497 0.00301212 +-0.0544171 0.0333785 -0.00775516 +0.0295237 0.0727272 0.042682 +-0.0504982 0.112495 0.0358796 +-0.0240218 0.119915 -0.0108978 +-0.0535232 0.0556038 0.0117195 +-0.0480175 0.133707 0.00490199 +0.00583381 0.129313 0.0261699 +-0.0405566 0.149165 -0.00293165 +-0.0286765 0.0690744 -0.0314836 +0.0453693 0.0693828 0.00245115 +0.0581659 0.056561 0.00517446 +0.0192888 0.0651078 -0.0282476 +-0.0228892 0.0739252 0.0512281 +-0.0217183 0.113234 -0.017904 +0.0365187 0.0526805 0.0315096 +0.0490482 0.0539975 0.0303486 +0.0175085 0.114012 0.0373101 +-0.0328107 0.126843 0.0122027 +-0.0687814 0.0336983 0.00353162 +0.0220892 0.0906332 -0.0239505 +-0.0460528 0.122513 0.026245 +0.0381409 0.109688 0.00657231 +0.0368421 0.0742334 -0.0127504 +-0.0657975 0.0340784 0.0127357 +-0.0706216 0.146831 -0.0255714 +-0.0468292 0.091298 -0.0217206 +-0.0914681 0.144718 0.0171554 +-0.0624908 0.0343254 0.0238098 +0.0543739 0.0477987 0.0161989 +-0.0195403 0.1757 -0.0161256 +0.0224671 0.0343921 0.00678503 +-0.0654707 0.155271 0.00728456 +-0.0897135 0.12265 0.00431103 +-0.0501651 0.0361307 0.0461721 +-0.0901888 0.139114 0.0151891 +-0.0726107 0.156829 -0.0349095 +-0.0334964 0.0718545 0.0411869 +0.0106165 0.0644536 0.0539383 +0.0274263 0.0491525 0.0376576 +-0.0157908 0.169796 -0.0160148 +-0.0608326 0.17151 -0.0610901 +0.0136156 0.126814 -0.00267762 +0.0293325 0.0535401 0.0386956 +-0.0652579 0.153012 -0.0402459 +0.0264019 0.036087 0.0225582 +0.0101281 0.105858 -0.0202342 +-0.0674046 0.0833115 0.0429955 +-0.0312435 0.0538841 -0.0143722 +0.0424267 0.0441756 -0.00158684 +-0.0305089 0.0760274 0.0408429 +-0.0849899 0.127963 -0.0030064 +-0.0223249 0.0386602 -0.0135496 +0.0216012 0.112963 -0.0137495 +-0.0224297 0.0552774 0.0442986 +-0.093152 0.121537 0.0362834 +-0.0384463 0.166779 0.00239389 +0.0317419 0.0667553 -0.0187125 +-0.0127135 0.100022 -0.0239701 +0.0204112 0.0371925 -0.00568428 +0.0383001 0.0969495 -0.00880451 +-0.0500528 0.150184 -0.0037815 +-0.0578783 0.106898 -0.0179862 +0.0485378 0.0682762 0.00156381 +-0.0708965 0.0341323 0.00629169 +-0.0871174 0.110466 0.0103621 +-0.0235739 0.0944939 0.0470656 +-0.0164815 0.0515035 0.0485835 +0.0325428 0.0380502 1.57112e-05 +0.0385774 0.0888011 0.0348199 +-0.0628692 0.0445185 0.0382675 +-0.0572856 0.125533 0.0399888 +-0.0780066 0.0940671 0.0362827 +-0.0361012 0.160724 -0.0132118 +0.0200495 0.124902 -0.000599563 +0.0101263 0.107276 -0.0197522 +0.0224877 0.0961643 0.0466342 +-0.077715 0.0852782 -0.0115916 +-0.0164955 0.105778 0.0423459 +-0.0725318 0.101313 0.038599 +-0.0663565 0.0783826 0.0411592 +-0.0644378 0.17995 -0.0588828 +-0.0645973 0.171184 -0.0458828 +0.0111199 0.129735 0.0223368 +-0.018333 0.172741 -0.0161594 +-0.0864925 0.10492 0.00639597 +-0.0144943 0.0500942 0.0487331 +-0.0855601 0.095177 0.0282718 +1.67787e-05 0.0386604 0.0239291 +0.0109499 0.0344084 0.00259617 +-0.0270041 0.168274 -0.00938266 +-0.0378811 0.107099 -0.0200653 +0.060304 0.0664655 0.0101406 +-0.0478845 0.108472 -0.0188663 +0.0181085 0.0591163 0.0489014 +-0.0260899 0.0522789 0.0395517 +0.0049437 0.0984176 -0.0242128 +-0.0623314 0.0357831 0.0433788 +0.0110403 0.0725847 0.0546235 +-0.0864956 0.084691 0.0204775 +-0.00849993 0.0787667 0.0579153 +-0.0260008 0.0382709 0.000860974 +-0.06937 0.145758 -0.0234859 +-0.0314168 0.117929 -0.0127586 +-0.0261669 0.0378674 0.0174813 +-0.0832309 0.120353 0.049216 +-0.0617814 0.16156 -0.0355923 +-0.0779669 0.165862 -0.0278956 +-0.0698398 0.0922797 -0.0162924 +0.0483255 0.0503286 -0.00380134 +0.0451716 0.0889782 0.0181643 +0.0329815 0.112282 -0.00498623 +0.0279206 0.0916217 -0.0209795 +0.0155 0.11402 0.0377783 +-0.0105379 0.0431327 0.0497176 +0.0606167 0.0609422 0.00915424 +-0.0181983 0.18599 -0.0174024 +0.0189716 0.115037 -0.0139804 +-0.0590849 0.0644137 0.0318252 +-0.0819254 0.12582 0.0519232 +-0.0588398 0.0954803 -0.0203334 +-0.0674426 0.148384 -0.0326115 +0.0387628 0.10462 0.0262683 +0.00841723 0.129272 0.0256623 +-0.0196119 0.0364667 -0.0278852 +-0.0376923 0.162356 -0.000243841 +1.88808e-05 0.115368 -0.0182789 +0.0393962 0.0505525 -0.00668347 +-0.0116788 0.0555838 -0.0339192 +0.0363865 0.0713868 -0.0138007 +-0.0821651 0.110069 0.034903 +0.022728 0.117081 -0.0101857 +-0.0515389 0.0417461 -0.0105815 +0.0219588 0.123501 -0.00109075 +0.00735928 0.0960033 -0.0276522 +-0.00349428 0.119696 0.0379021 +-0.0470844 0.151656 -0.00519447 +-0.0242296 0.0941248 -0.0298734 +0.0152433 0.0658912 0.0518711 +-0.021804 0.0376594 -0.0181241 +-0.0133966 0.121962 -0.00916065 +0.0365536 0.108655 0.0265769 +-0.0668098 0.0880715 -0.0180091 +-0.0665181 0.171112 -0.0407548 +0.0493343 0.0532247 -0.0043679 +0.0423933 0.0901635 -0.00682346 +-0.0624126 0.150651 -0.0115734 +0.0373944 0.0505276 -0.00658166 +-0.0411461 0.162173 -0.0113613 +-0.065916 0.0662086 0.0305519 +-0.0289729 0.083488 0.0456837 +-0.000642523 0.0347913 0.0398677 +-0.0738147 0.065744 0.00631032 +0.00351431 0.0938625 0.0544725 +-0.0467733 0.12389 0.0269319 +0.0246632 0.123785 0.00595837 +-0.0715256 0.0958228 0.0413941 +0.00252922 0.0362636 0.0463395 +0.00948792 0.0963424 0.0500581 +0.0292035 0.0400739 0.0286474 +-0.0309481 0.0706991 -0.0284733 +-0.054091 0.152763 0.0215579 +0.0118527 0.105542 -0.0197545 +-0.0404793 0.0832528 0.0431634 +-0.0448438 0.0985036 -0.0215544 +-0.032014 0.0567822 -0.0123897 +0.00040853 0.0356817 0.00488121 +0.0447245 0.0861403 0.0231669 +-0.0426307 0.0338188 -0.00946517 +-0.0710495 0.141325 -0.00813095 +-0.0255896 0.182763 -0.0105092 +-0.0838169 0.107636 0.0253505 +-0.0796245 0.0859561 0.0353266 +0.0240034 0.0449703 0.0396985 +0.00450108 0.0716864 0.0560951 +-0.0676894 0.0750921 -0.0153176 +-0.0466572 0.0369109 -0.0172699 +-0.016529 0.0558872 0.0508401 +-0.087831 0.103641 0.0093887 +0.0272256 0.10745 0.0377741 +-0.0670064 0.0337953 0.0073865 +-0.0866888 0.0833263 0.0124872 +0.0152687 0.0779357 -0.0299953 +-0.0851819 0.152725 0.0105454 +0.000352424 0.0511166 -0.0306262 +0.0518495 0.0464359 0.0201911 +0.0554005 0.0553511 0.0254886 +-0.0886141 0.0928486 0.00844707 +0.0129712 0.130228 0.0115965 +-0.085549 0.104961 0.0233427 +0.0515991 0.0496316 0.0251833 +0.0131946 0.0878791 -0.0305989 +-0.0693376 0.131255 0.0489674 +-0.0660205 0.167997 -0.0305503 +-0.0666146 0.174697 -0.0480375 +-0.0293346 0.0347045 0.0427947 +-0.0553259 0.126836 -0.00601308 +-0.058583 0.0460291 0.0113967 +-0.0416277 0.0337441 -0.014735 +-0.0446642 0.0621749 -0.0132201 +0.0295862 0.120365 0.0134787 +-0.0697163 0.064282 0.022673 +-0.0805487 0.0789662 0.0306236 +-0.0787564 0.154933 0.00983696 +-0.0662707 0.14708 -0.0258685 +-0.0248167 0.0949702 -0.0267501 +-0.0407693 0.0826515 -0.0208197 +0.000514101 0.0346343 0.00952105 +-0.0533361 0.138123 0.0280776 +-0.0689277 0.115103 -0.00892086 +-0.0865224 0.0913375 0.0024428 +0.0232602 0.0790529 -0.0256674 +0.0296786 0.0679688 -0.0198342 +-0.0331127 0.123309 0.0239558 +0.0276403 0.118218 0.0284429 +0.00238303 0.0449286 -0.0261957 +-0.0928278 0.124236 0.0382657 +-0.0868685 0.11045 0.00936714 +-0.0254875 0.0959781 0.0438332 +0.0132252 0.0808221 -0.0308314 +0.035265 0.0591791 0.0368077 +-0.00944135 0.168135 -0.0197365 +0.0011864 0.12951 0.0259323 +-0.0139593 0.0967237 -0.0305143 +-0.00848922 0.0385737 0.0258802 +0.0562981 0.0619429 0.0011209 +0.0322546 0.0987343 -0.0145759 +-0.0268707 0.103016 -0.0234914 +-0.00655639 0.0384205 0.0209905 +-0.0296666 0.0774462 0.0418826 +-0.0626586 0.0676213 -0.0103966 +0.0374569 0.0904362 -0.0137042 +-0.0712181 0.161 -0.0439365 +0.0243668 0.0889213 0.0476805 +-0.0336134 0.0408899 -0.0298935 +-0.0404969 0.0916505 0.0425962 +0.0443454 0.0903358 0.0221636 +-0.0435232 0.163746 0.00524284 +-0.0649943 0.0623954 0.0235277 +-0.0613093 0.0593276 0.0181457 +-0.0717978 0.155398 -0.0409076 +-0.00868753 0.0584178 -0.0339256 +-0.0904383 0.119966 0.00529664 +-0.0601615 0.0333995 -0.00165181 +-0.0612252 0.0407891 0.0437895 +-0.0537348 0.0738508 -0.0172852 +-0.0709057 0.10512 -0.0125462 +-0.00333997 0.039253 0.0353398 +-0.0469903 0.145002 0.00194161 +-0.0250386 0.0659034 -0.0335362 +-0.023273 0.0382876 0.00502865 +0.0111228 0.0960826 -0.0257288 +0.0198113 0.0954368 -0.0230239 +0.038476 0.104075 -0.00282883 +-0.0843581 0.0883713 0.0286614 +-0.0930341 0.118841 0.0362969 +-0.0646767 0.146003 -0.0179612 +0.0284626 0.102127 0.0395666 +-0.0435018 0.113907 0.034675 +-0.0604863 0.0790224 0.042794 +-0.089042 0.112536 0.0205154 +-0.0524675 0.0344946 0.0345461 +-0.0848716 0.119101 -0.00207765 +-0.0120923 0.11442 -0.0172013 +-0.079929 0.151371 0.00121035 +-0.0920085 0.116136 0.0393096 +0.0361533 0.112569 0.0130564 +-0.0196629 0.125034 -0.00230889 +0.000499429 0.115573 0.0406664 +-0.0560183 0.147198 -0.00168648 +-0.0873616 0.110481 0.0113565 +-0.0416844 0.0636674 -0.0137203 +-0.0651889 0.153592 -0.00278678 +0.0471599 0.07398 0.0153485 +0.0404106 0.0873775 0.0321991 +-0.019434 0.184905 -0.0153275 +-0.0438294 0.0913555 -0.0224139 +-0.0527613 0.0797578 -0.020501 +-0.0314155 0.0651435 -0.021432 +0.00948509 0.0950229 0.0512669 +0.0346346 0.107297 -0.007625 +-0.0870053 0.0954387 0.00242783 +-0.0617312 0.142927 -0.00565867 +-0.0538929 0.14622 0.0244012 +0.0339044 0.115273 0.00366751 +0.049575 0.0693171 0.00251779 +-0.0861009 0.106274 0.00635995 +-0.00751182 0.075985 0.0578234 +-0.0761849 0.0933719 -0.0135017 +0.0266626 0.0672707 0.0437593 +-0.0314925 0.0932138 0.0444288 +0.0112937 0.0680868 -0.0307505 +-0.086045 0.141863 0.00720055 +0.000490707 0.111422 0.0424934 +-0.0516022 0.0502173 -0.00741774 +-0.0709386 0.131124 -0.00852217 +-0.0291841 0.125368 0.0164845 +-0.0012258 0.095852 -0.0315171 +-0.000697567 0.0641196 -0.0342689 +-0.0797379 0.0738711 0.0228323 +-0.0705682 0.0382102 0.00943236 +-0.0558807 0.102663 -0.0193944 +0.0262875 0.0835737 0.0468767 +-0.0206175 0.0364922 -0.0281092 +0.0306136 0.0779431 -0.0207534 +0.037492 0.0983062 -0.0097724 +-0.0861064 0.0806138 0.0174966 +-0.0488748 0.105594 -0.0196597 +-0.0499497 0.0724883 0.0409516 +-0.060435 0.131107 0.0389542 +-0.0197383 0.108898 -0.0213322 +-0.0328414 0.0943934 -0.0238538 +0.0071329 0.104451 -0.0211019 +-0.0904392 0.125398 0.00528343 +0.0579573 0.0676391 0.00414749 +-0.0890486 0.0915916 0.0214249 +0.0544885 0.0716156 0.00618127 +0.037936 0.0901639 0.0356574 +-0.0631289 0.155254 0.0269868 +0.0280038 0.120349 0.024295 +0.00325461 0.0697315 -0.0336623 +0.0198002 0.0768324 0.0515324 +0.0135718 0.0504901 0.0475195 +-0.0220331 0.041681 0.0538782 +-0.0322365 0.126297 0.00653811 +-0.020497 0.0855906 0.0563403 +0.0100844 0.123139 0.0340691 +-0.0917617 0.141982 0.0191718 +-0.00665267 0.0526646 -0.0325345 +0.0325469 0.0922927 -0.0176842 +-0.00490321 0.0383839 0.0141185 +0.0393963 0.049102 -0.00636122 +-0.0468295 0.0927337 -0.0216687 +0.0393484 0.0561243 -0.00568756 +0.0381042 0.0392738 0.00134927 +-0.02061 0.0653432 0.0492306 +-0.0644858 0.152894 -0.00250698 +0.0316363 0.118365 0.0113851 +-0.0625842 0.162383 -0.0563311 +-0.0126137 0.180121 -0.0236267 +-0.0562637 0.142432 0.0309288 +0.0389203 0.10838 0.0161659 +0.0468209 0.0708789 0.021127 +0.0153317 0.060873 -0.028643 +-0.067208 0.0447917 0.00368814 +-0.0638714 0.15469 -0.0385902 +-0.0624126 0.161536 -0.0416011 +-0.011049 0.124435 -0.00785173 +0.0143712 0.0493733 -0.0267066 +-0.0374862 0.0931566 0.0438456 +-0.0278525 0.0807805 0.0474761 +0.0573848 0.0670309 0.00292365 +-0.0304938 0.0960556 0.0449536 +0.0182602 0.127523 0.0192457 +0.0182204 0.080645 -0.0282763 +-0.00275795 0.0740872 -0.0359501 +-0.072697 0.155649 0.00759319 +-0.0857527 0.0792184 0.0135098 +-0.0604443 0.0456013 0.0296807 +-0.0528198 0.0927332 -0.0219739 +-0.0457202 0.0709417 -0.0164642 +-0.054497 0.0889964 0.0448823 +-0.0541353 0.147754 0.0254132 +0.05074 0.0503045 -0.00171178 +-0.0926993 0.124215 0.0352716 +0.00850767 0.0786 0.0556334 +-0.0141847 0.0405865 0.0511605 +-0.0500491 0.0345412 0.0367666 +-0.0744234 0.156022 0.0128056 +-0.0148381 0.0386367 -0.0157684 +-0.0896535 0.0916031 0.0184402 +-0.0279306 0.125506 0.00666413 +-0.0249827 0.0918474 0.0485489 +-0.0247746 0.0385687 -0.0102357 +-0.0718755 0.10648 -0.0114758 +0.0303733 0.115414 -0.00438737 +0.0390771 0.099844 -0.00681802 +-0.0601235 0.0447437 0.0425684 +0.0559507 0.0508031 0.00520531 +-0.087948 0.102288 0.00840013 +-0.0802939 0.0732789 0.00250413 +-0.00347452 0.114725 -0.0175669 +-0.0780015 0.155773 0.018849 +-0.0868392 0.0873072 0.00147849 +0.0114304 0.0346172 0.0371012 +-0.0154945 0.0925097 0.0555061 +0.0207547 0.10431 -0.0184628 +-0.0805113 0.153427 0.0283513 +-0.0133702 0.0343611 -0.0190243 +0.045363 0.0932019 0.00717004 +-0.0517619 0.079747 -0.0203928 +-0.011137 0.171308 -0.0197957 +-0.0797359 0.0706327 0.0105539 +-0.0435047 0.116629 0.0323741 +0.0461192 0.0786876 0.0190773 +0.0257679 0.0349257 0.0180133 +-0.0377436 0.127354 0.000111554 +0.0455391 0.0875946 0.0141649 +-0.0115776 0.0962625 -0.032007 +-0.0304054 0.0580102 -0.0194062 +-0.0519213 0.118323 0.0336042 +-0.0615165 0.15114 0.0355512 +-0.0268549 0.175688 -0.00910606 +0.0291872 0.0462618 0.034893 +-0.0828817 0.143196 0.00216401 +-0.0229243 0.0972075 0.044901 +-0.0420606 0.0344689 0.0332688 +0.00840712 0.0404044 -0.0234014 +-0.0584986 0.100161 0.0428821 +0.0267286 0.0521731 -0.0207566 +-0.0343564 0.043282 -0.028737 +0.035312 0.0840703 -0.0177861 +0.0167493 0.0874098 0.0506847 +-0.0706375 0.156126 0.0126907 +0.0395317 0.0596774 0.0306966 +0.0160357 0.0807986 0.0531419 +-0.0719071 0.105086 -0.0120336 +0.057752 0.0523416 0.0181873 +-0.0705862 0.166615 -0.0490027 +-0.069998 0.157611 -0.0031485 +-0.0629727 0.118457 0.044154 +-0.0098895 0.107351 -0.0224128 +-0.0668287 0.169972 -0.0351376 +-0.0538607 0.152062 0.0231076 +0.0286155 0.0795328 0.044942 +0.00747725 0.131195 0.0181386 +0.0525355 0.0678367 0.0261828 +-0.069983 0.033931 0.00665746 +-0.00449526 0.10588 0.044033 +-0.0647467 0.143415 -0.011401 +-0.0242451 0.0337053 -0.0224295 +0.0405945 0.102819 0.0221712 +-0.0253936 0.106122 -0.0223873 +-0.031866 0.126076 0.00521848 +-0.0903832 0.132413 0.0312232 +0.0270423 0.0648893 -0.0216756 +-0.0416036 0.125525 0.0208631 +-0.0642885 0.148287 -0.0250747 +0.043249 0.0705728 -0.00179391 +0.00750831 0.0772509 0.056126 +-0.0360471 0.125746 -0.0036679 +-0.0534999 0.0820142 0.0450601 +-0.0268076 0.0782799 -0.0366273 +-0.0630392 0.0336157 0.00836468 +0.00450283 0.0924607 0.0546761 +-0.0794816 0.0846149 0.0352279 +-0.0354976 0.116636 0.0319301 +0.0590094 0.0552651 0.0101755 +0.0177618 0.100614 -0.0224544 +0.0141872 0.0347155 0.0357788 +-0.0626395 0.0644043 -0.00619313 +-0.0472223 0.168222 -0.000777409 +-0.0688709 0.156258 0.0147705 +-0.00209707 0.130745 0.0203917 +0.0438165 0.0959355 0.0191615 +0.0272253 0.120021 -0.000250724 +-0.0623918 0.152158 -0.026581 +-0.0619803 0.153737 -0.02558 +-0.0110119 0.122536 -0.00980812 +-0.00845767 0.100229 0.0476033 +-0.053626 0.1255 0.0365054 +0.029243 0.0872327 -0.0208644 +-0.0561028 0.133503 -0.00512832 +-0.0536146 0.150855 0.0243962 +-0.0729449 0.0805494 0.0386997 +-0.0113093 0.0384672 0.00547553 +0.013929 0.0392001 0.0444158 +-0.0743245 0.179234 -0.0539852 +-0.0670834 0.168031 -0.0569976 +0.0269196 0.0418157 0.0333163 +-0.0261604 0.114813 -0.0155316 +0.054979 0.06227 -0.000302264 +0.0447631 0.0931576 0.00318223 +-0.028552 0.159576 0.000695282 +-0.0196334 0.0906851 0.0545345 +-0.0681661 0.173216 -0.0428508 +-0.0670035 0.166617 -0.0570134 +-0.00170857 0.0641356 -0.0344906 +-0.0302923 0.115032 -0.0157497 +-0.017789 0.0998203 0.0439009 +0.0575984 0.0711737 0.0088801 +-0.0559485 0.119826 0.0383628 +-0.0508832 0.106998 -0.0191626 +-0.0856518 0.096702 -0.000561949 +0.0433856 0.0475038 -0.0047769 +-0.0141839 0.177168 -0.0206609 +-0.0318261 0.0623615 -0.0184459 +-0.0694684 0.158126 -0.0509379 +-0.059088 0.0445923 -0.00517311 +-0.0680469 0.0887699 0.043444 +0.0413366 0.0588699 -0.00449648 +-0.0108613 0.16611 -0.0209706 +-0.0810695 0.111472 -0.000645954 +0.0236683 0.0535376 0.0428398 +-0.0525009 0.104252 0.0406803 +0.0178265 0.128119 0.0148069 +-0.0833287 0.0817012 -0.000498118 \ No newline at end of file diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny5000.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny5000.pts new file mode 100644 index 000000000000..b9c0cbdc12bd --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny5000.pts @@ -0,0 +1,35948 @@ +1500 +-0.0164722 0.0382453 0.0209318 +-0.0641407 0.171114 -0.0471776 +0.023086 0.119339 0.0317977 +0.00506037 0.0347021 0.0393176 +-0.066143 0.143958 0.0413147 +-0.0445017 0.163753 0.00542301 +-0.0689729 0.181022 -0.0546459 +-0.0931085 0.131006 0.0192314 +0.000506827 0.0489752 0.0512269 +-0.0615935 0.160001 -0.0315914 +-0.0245032 0.0960169 0.0442753 +-0.0258992 0.0891655 0.049535 +-0.000499367 0.0456802 0.0470389 +-0.0171808 0.0654583 0.0528522 +0.00116916 0.131228 0.00582139 +-0.0356565 0.122935 -0.00798984 +-0.0701892 0.156285 0.021569 +-0.0173569 0.038443 0.0259817 +-0.0716413 0.0763478 -0.0132577 +0.0528545 0.0568172 0.0288563 +-0.0325067 0.0732308 0.0407775 +-0.0760686 0.150008 -0.00987485 +-0.030561 0.0774145 0.0410957 +-0.0833901 0.0762729 0.00451303 +-0.000492618 0.0925258 0.0556594 +-0.0358778 0.159506 0.00240863 +0.0115111 0.114076 0.0384616 +-0.0877889 0.0887187 0.00347532 +-0.0261028 0.115949 -0.0147279 +-0.0682913 0.165205 -0.0539869 +-0.0225512 0.0933694 -0.0331106 +-0.0538783 0.0999149 -0.0214389 +0.0435587 0.0959151 0.0211557 +-0.0167991 0.0388632 -0.0107644 +-0.0569142 0.0548839 0.00364185 +0.00749229 0.091015 0.0542708 +-0.065316 0.0625169 -0.002419 +-0.00749647 0.119689 0.0375376 +-0.0772165 0.0934484 -0.0125951 +-0.029008 0.0478606 -0.0250513 +0.00934189 0.0553527 -0.0303034 +-0.0578677 0.104042 -0.0186102 +0.0405495 0.0999198 -0.00379356 +-0.0894314 0.137929 0.0371779 +0.00710731 0.126603 -0.00643182 +0.058913 0.070492 0.0108657 +-0.0922485 0.120133 0.0292903 +0.0395325 0.105566 0.0221621 +-0.0376065 0.0365426 0.0444186 +-0.0550158 0.128128 -0.00563226 +-0.0561672 0.0336533 0.0186553 +0.0123436 0.0351165 0.0296251 +-0.0899184 0.131005 0.0413145 +0.0065365 0.100373 0.0469448 +-0.0502879 0.133796 0.0278403 +-0.0716838 0.0351362 0.00880221 +0.0579126 0.0523842 0.0101848 +-0.0639212 0.154791 0.00385831 +-0.0654795 0.0384216 -0.00684663 +-0.0615513 0.0624603 0.0259481 +-0.0368013 0.0842007 -0.0223672 +0.0522757 0.0574291 -0.0035048 +-0.0764972 0.123179 0.0527664 +0.0302998 0.0694384 -0.019812 +-0.0334269 0.0486094 0.0413091 +-0.00450651 0.0689184 0.0565193 +0.0425976 0.0887597 -0.00680771 +-0.0707351 0.156208 0.0228366 +0.0548799 0.0492406 0.0202107 +-0.00962948 0.168316 -0.023669 +-0.0313363 0.11605 -0.0148117 +-0.0225249 0.125571 0.0012278 +0.0122871 0.124953 0.0313975 +-0.0343047 0.125361 0.0205265 +-0.038499 0.0747376 0.0420783 +0.0292349 0.0759579 -0.0220376 +-0.0255784 0.0477093 -0.0263526 +-0.0750958 0.151313 -0.0258791 +0.0057743 0.0347896 0.0375885 +-0.0926124 0.120126 0.0272917 +-0.0366664 0.175138 -0.00407486 +-0.00549337 0.088417 0.0570387 +-0.0711473 0.17507 -0.0540267 +-0.0776118 0.0739521 0.0284675 +0.0376746 0.104662 0.0282621 +-0.0634881 0.121359 0.0469409 +0.0233296 0.0564006 -0.0254415 +-0.0399361 0.123254 0.0259269 +-0.000577398 0.0341134 -0.0181551 +-0.000496894 0.0520342 0.0541515 +-0.0701023 0.177167 -0.0478719 +-0.0641167 0.143926 0.0389732 +-0.0679369 0.165269 -0.0197719 +-0.0681029 0.138305 0.0455026 +-0.00280426 0.0384802 0.0198949 +-0.0628273 0.0924874 -0.0189476 +0.0084946 0.0869435 0.0558386 +0.00910286 0.0348066 0.0183719 +-0.0195983 0.126231 0.0213862 +-0.0584949 0.143878 0.0330085 +-0.0218343 0.0553077 0.0451067 +-0.0645685 0.147457 -0.0230581 +0.0426227 0.0691122 -0.00279622 +-0.035813 0.0842739 -0.0225525 +-0.0819685 0.0791215 0.0284136 +0.0328852 0.113087 -0.00384394 +-0.0677123 0.168615 -0.0283035 +-0.0556635 0.140996 0.0299986 +-0.0764958 0.131682 0.0526442 +0.0421796 0.0832522 0.0293553 +-0.0848653 0.0855483 0.0264341 +-0.0329445 0.121338 0.0269922 +-0.0320197 0.058187 -0.0133973 +-0.0322785 0.0421631 -0.0296986 +0.0401757 0.067497 -0.00878165 +-0.0904989 0.148452 0.0245146 +-0.00947974 0.0561444 0.0530127 +-0.0310333 0.0383692 -0.000250742 +-0.0780713 0.150403 0.0367551 +-0.0872126 0.146051 0.00824907 +-0.0735722 0.148626 -0.0268487 +-0.00548676 0.116904 0.0394711 +-0.0599006 0.132533 0.037981 +-0.093479 0.129659 0.0212406 +-0.0639063 0.120904 -0.00875525 +-0.028606 0.0356961 0.0524615 +-0.0652024 0.153998 -0.041972 +-0.0262134 0.0765572 0.0473962 +-0.0774721 0.155387 0.0234212 +-0.0628707 0.0345025 0.0358026 +0.0434964 0.0555926 0.0322399 +-0.0618022 0.142496 0.0370478 +-0.0638273 0.0910291 -0.0188305 +-0.0636286 0.0672101 0.0337087 +-0.0842132 0.092522 0.0298256 +0.0185123 0.115397 0.0365584 +-0.0666269 0.131204 0.0458398 +-0.0653475 0.165775 -0.0260007 +-0.0182573 0.181629 -0.0177335 +-0.0142757 0.185348 -0.0257883 +0.0485082 0.0624718 0.0300814 +-0.0254927 0.0974122 0.0441083 +-0.0446561 0.0349999 0.0427486 +-0.0616719 0.0410515 0.0160296 +-0.0179307 0.0931593 -0.0348763 +-0.00828798 0.130102 0.00662088 +-0.0525878 0.149334 0.020403 +-0.0102534 0.128943 0.0232512 +0.0445378 0.0959706 0.0101622 +-0.0465291 0.0335268 -0.00814027 +0.00437534 0.131145 0.0198749 +-0.0394369 0.03436 0.0321562 +-0.0107155 0.127812 0.0260097 +-0.0273383 0.17123 -0.0098418 +-0.0037118 0.0655569 -0.0347446 +-0.0630689 0.150547 -0.0265942 +-0.0776846 0.16386 -0.0329461 +-0.0728796 0.151218 -0.0388899 +0.038172 0.0967289 0.0325586 +-0.058907 0.0983413 -0.0195805 +-0.00549542 0.0965711 0.0536823 +0.00650609 0.0503877 0.0517539 +-0.0847722 0.113367 0.0459387 +0.0309512 0.0822193 0.0430727 +-0.0159859 0.0984773 0.0464357 +0.0361586 0.0781359 0.0382445 +0.0417308 0.0422749 0.000248643 +-0.0631435 0.175042 -0.061564 +-0.0251041 0.0945178 -0.0276305 +0.018776 0.122594 -0.0061273 +0.0173125 0.0726566 0.0514253 +-0.0377229 0.0724783 -0.0174913 +0.0173872 0.0432828 -0.0228623 +0.0416262 0.0912615 0.0286616 +-0.050567 0.0474222 -0.00850865 +-0.0150865 0.162585 -0.00969001 +0.0143357 0.0566765 -0.0290221 +-0.0309078 0.065095 -0.0224325 +0.045522 0.0805737 0.00219452 +-0.0725374 0.138625 0.0483183 +-0.0476365 0.150675 0.00992423 +-0.0799103 0.125126 -0.00560703 +-0.051025 0.159915 -0.00453945 +0.00139766 0.0419298 -0.0244976 +-0.0664219 0.0352675 0.015055 +-0.00832508 0.130422 0.0138058 +-0.00366678 0.0481589 -0.0301707 +-0.0738566 0.161044 -0.0339379 +0.0319703 0.0475137 0.0318758 +0.0188215 0.126955 0.00377584 +-0.0309617 0.044825 -0.0281993 +0.0456484 0.0875951 0.00518134 +-0.0521074 0.0583062 0.0285239 +-0.0171825 0.0382402 0.011747 +-0.0692976 0.0615474 0.00912978 +-0.0232044 0.175652 -0.0207635 +-0.0406662 0.0592305 -0.0118049 +0.0572429 0.0508905 0.0121849 +-0.0488285 0.0416917 0.0446681 +0.0455301 0.0677752 0.0254231 +-0.0846369 0.110251 0.00429821 +-0.0754652 0.163196 -0.0162299 +-0.0247271 0.0564997 0.0408849 +-0.0639975 0.0601011 0.00610183 +-0.0741599 0.155538 0.00126713 +-0.0728899 0.122329 -0.00823917 +0.010861 0.0360066 0.0447493 +0.0150176 0.0355797 0.04239 +-0.0437155 0.0710509 -0.0175901 +0.0271589 0.093209 -0.0206672 +-0.00592646 0.12418 0.0336126 +-0.0810295 0.0895599 -0.00769505 +-0.0920663 0.121362 0.00826874 +-0.0862277 0.0832671 0.00749085 +-0.085371 0.127983 -0.0026626 +-0.081815 0.108922 0.02836 +-0.0491537 0.135503 0.0034228 +0.00885847 0.0887054 -0.0320419 +-0.0673146 0.0446682 0.00602001 +0.0152697 0.128852 0.0195703 +0.0231834 0.0422122 0.040252 +-0.0286261 0.0463451 -0.0269667 +0.0449154 0.0763231 0.00019353 +-0.0387296 0.0739178 -0.0177449 +0.0212191 0.0819428 -0.0266321 +-0.00126307 0.039726 0.0470556 +-0.0261021 0.0379463 0.0228342 +-0.0448562 0.101383 -0.0214692 +-0.0014827 0.0390261 -0.00225591 +-0.0648948 0.103911 -0.0165942 +-0.0624902 0.155293 -0.0145941 +0.000436968 0.130385 0.0227651 +-0.0219738 0.059501 0.0451263 +-0.0502789 0.129408 -0.00267456 +-0.0216757 0.065257 0.0474751 +-0.0621482 0.16155 -0.0395978 +0.0427418 0.0916392 0.0261768 +0.00967962 0.127274 0.0289934 +-0.0728707 0.168003 -0.0450202 +-0.0305611 0.179398 -0.00755573 +0.0341402 0.0902832 0.0407178 +-0.0491119 0.0361611 0.0459929 +0.0392087 0.0739776 0.0338431 +-0.0897017 0.151503 0.0171224 +0.0407967 0.105643 0.0101649 +-0.023633 0.0478399 -0.0272396 +-0.0504958 0.0862332 0.0455716 +-0.0451092 0.153606 0.00834539 +-0.0616087 0.146812 0.0373554 +0.0280342 0.0346822 0.009507 +0.0565861 0.0685555 0.00335277 +-0.027568 0.0674298 0.0392602 +-0.0926576 0.117463 0.0373027 +-0.0334278 0.124984 0.0208436 +-0.0602518 0.034678 0.0430709 +-0.0574989 0.107052 0.0398301 +-0.091226 0.128161 0.00727002 +0.0400022 0.0913669 0.0315547 +-0.0656743 0.138242 0.0419702 +-0.0852141 0.0805923 0.0204766 +-0.0444957 0.111173 0.0370595 +-0.044489 0.0803636 0.042222 +-0.00648998 0.122405 0.0354776 +0.00602348 0.111527 -0.0200414 +-0.0860119 0.132159 0.00027761 +0.0521231 0.0734583 0.0172399 +-0.0155403 0.0446621 0.0510487 +-0.0397503 0.0768521 -0.0186787 +-0.0682155 0.0787029 0.0404793 +-0.0813927 0.0758934 0.0225084 +-0.010188 0.0386565 4.14997e-05 +-0.00149609 0.0912323 -0.0347548 +-0.0294974 0.111128 0.0367729 +-0.0503924 0.0501648 0.0186468 +-0.0104698 0.070299 0.0557764 +0.0327323 0.0809002 0.0421262 +-0.0328911 0.122131 -0.00712262 +-0.0861948 0.1005 0.0258994 +-0.0319282 0.178722 -0.00808101 +-0.050675 0.140101 0.0024044 +-0.0346788 0.0636729 -0.0139354 +-0.00820144 0.0344928 -0.0181278 +-0.0830162 0.0939316 0.0314035 +0.0438286 0.0611702 -0.00330591 +-0.0162799 0.127645 0.0211086 +-0.0615233 0.0354132 0.043881 +-0.0755937 0.0809959 -0.0116148 +-0.0632393 0.166259 -0.0385929 +-0.0156738 0.0511142 -0.0317767 +0.000751147 0.0339678 -0.0215355 +-0.0534027 0.0336932 0.022744 +0.0102837 0.0348658 -0.0091814 +-0.0285082 0.0874866 -0.0336017 +-0.0849712 0.111906 0.0292041 +-0.0732162 0.169408 -0.0460252 +-0.00746424 0.110009 0.0430329 +-0.0587154 0.0723411 -0.016523 +-0.00333145 0.0968513 -0.0305901 +0.0385608 0.0713011 0.0346329 +-0.0463734 0.133247 0.0130756 +-0.0474986 0.104275 0.0408376 +-0.0714849 0.147284 -0.0260827 +-0.0404433 0.0461446 -0.0193164 +0.000709469 0.125628 -0.00726116 +0.028516 0.117882 -0.00302906 +-0.00249354 0.0746702 0.0587588 +0.0463101 0.0806468 0.00818141 +-0.0245515 0.114015 0.0358596 +-0.0396488 0.0563195 -0.0111963 +-0.0236961 0.0607746 0.0425604 +-0.0336359 0.0548461 -0.0105101 +-0.0585033 0.0337545 0.0163089 +0.0212208 0.126407 0.0160623 +-0.0729862 0.15207 0.0354642 +-0.085378 0.128494 0.0496125 +0.00429457 0.122356 -0.0118056 +0.0203517 0.0672611 0.0487139 +-0.0452845 0.0395903 -0.0182935 +-0.0211124 0.182965 -0.0210132 +-0.0295465 0.0819132 0.0441437 +-0.0777488 0.07493 0.029356 +0.00824435 0.0966482 -0.0263491 +-0.0588066 0.0854157 -0.0208208 +-0.0718999 0.113582 -0.00821597 +-0.0893735 0.0901981 0.0104595 +0.032603 0.0835706 0.0419526 +-0.0230608 0.0594124 0.0433799 +0.0284544 0.121423 0.0116324 +-0.0832785 0.12444 0.0504652 +-0.0396241 0.0520021 -0.0108773 +0.00721225 0.0837864 -0.0330068 +-0.046713 0.131987 0.00556897 +-0.0663702 0.157999 -0.00906779 +-0.067736 0.0779793 -0.0166569 +-0.0508692 0.102779 -0.0209206 +-0.0828958 0.151378 0.00422572 +-0.0346622 0.118788 -0.0116368 +-0.0726425 0.0716156 -0.00744076 +-0.059725 0.0469427 0.0326718 +-0.0468444 0.033579 -0.0045851 +-0.0384976 0.100064 0.0415702 +-0.050989 0.121022 -0.0119137 +-0.0624226 0.152205 -0.0125757 +-0.085741 0.151793 0.0266482 +-0.0826468 0.144713 0.0407672 +-0.0685649 0.0705046 -0.00966184 +-0.0734033 0.167233 -0.0217479 +-0.0455099 0.155064 0.0077969 +0.022652 0.0862116 0.0486888 +0.043364 0.0547822 -0.00644446 +-0.054457 0.14621 0.0274041 +-0.0639777 0.155958 0.0237716 +-0.0882347 0.0861347 0.011472 +0.00545294 0.1216 -0.0129959 +-0.0334673 0.174268 -0.00177832 +-0.00402179 0.129762 0.0240423 +-0.0185051 0.0711438 0.0540217 +-0.0872329 0.150111 0.00920897 +-0.090033 0.147105 0.0269347 +-0.0141936 0.0419832 0.0511586 +-0.0335873 0.154463 -0.00838872 +0.0441357 0.083266 -0.000805736 +-0.0528842 0.102762 -0.0205636 +-0.0125091 0.0815143 0.0575917 +0.0197435 0.125962 0.0226458 +-0.067993 0.0619274 0.01978 +-0.0216083 0.039391 -0.0287125 +-0.0767116 0.165247 -0.022942 +-0.0861936 0.111308 0.0401352 +-0.0238165 0.0854111 -0.0376407 +-0.0442161 0.123225 0.0243959 +-0.0175443 0.0460366 0.0510389 +-0.0272334 0.0902723 -0.0326005 +-0.0459359 0.168402 -0.00594095 +0.0355423 0.0512597 0.0315836 +0.0451079 0.0636949 -0.00183531 +-0.0368834 0.125578 -0.00482073 +0.0196258 0.0457587 -0.0217227 +-0.00773224 0.109619 -0.0221011 +-0.0514957 0.0876341 0.0455102 +-0.00269376 0.0613003 -0.0344696 +-0.0512049 0.147808 0.0143958 +0.0266901 0.106496 -0.0148024 +0.0383861 0.0476151 -0.00591592 +-0.0136895 0.0952904 -0.0330103 +0.0368491 0.0767795 0.0374896 +-0.029592 0.0522946 -0.0203629 +0.0482309 0.0500295 -0.00369862 +0.0381363 0.0794306 0.0358549 +-0.0677271 0.155796 -0.00229118 +0.026043 0.0392404 0.0305576 +0.0208388 0.126564 0.0173475 +0.0159735 0.0448127 0.0438765 +-0.0681757 0.118633 0.0523539 +-0.065068 0.136793 0.0410949 +-0.0454458 0.168254 0.00168996 +-0.0715222 0.142818 0.0455702 +-0.0604912 0.112522 0.03629 +-0.00074702 0.0712329 -0.0350931 +-0.0894331 0.150114 0.0121902 +-0.0185746 0.0381525 0.0151621 +0.0291213 0.0348096 0.00960912 +0.0404448 0.0985503 0.0271661 +0.0134712 0.0936014 0.0511282 +-0.021496 0.103017 0.0435858 +0.00918856 0.0342345 -0.00132638 +-0.0508332 0.0956285 -0.0221275 +-0.0613646 0.0394268 0.0439671 +0.0264379 0.0968548 0.0436578 +-0.0646669 0.0405364 0.0387423 +0.0125029 0.0475354 0.045933 +0.0412949 0.104257 0.00416372 +-0.00222052 0.117102 -0.0161156 +-0.00995662 0.169734 -0.0198047 +0.0200755 0.0399795 -0.0157069 +-0.0839165 0.110514 0.0395089 +-0.0546435 0.116042 -0.0146857 +0.0268767 0.0854059 -0.022529 +-0.0543926 0.0337363 0.0224962 +-0.049781 0.0841032 -0.0216622 +0.0431463 0.100109 0.00616795 +0.0393814 0.0780345 0.0341058 +-0.0162612 0.17862 -0.0260128 +-0.0335093 0.0676035 0.0406399 +-0.0176483 0.0352702 -0.0188352 +-0.031463 0.0519033 0.0373773 +-0.0803572 0.0803552 0.0319871 +-0.0320868 0.159267 -0.0129293 +0.0132853 0.0589897 0.0507165 +-0.0103631 0.180289 -0.0277342 +-0.0144925 0.0559441 0.0511232 +-0.0246444 0.0381166 0.0247786 +0.0170669 0.0871276 -0.028336 +0.00372554 0.105196 -0.0213905 +-0.0777857 0.156925 -0.0179137 +0.0578227 0.0710073 0.0178627 +-0.0582482 0.0336534 0.0128901 +-0.0520861 0.0545712 0.0266312 +0.0269849 0.113053 -0.00983991 +0.0429421 0.0467386 0.030224 +0.00548112 0.11414 0.0405028 +0.0607975 0.0637336 0.0101416 +-0.0895137 0.135181 0.0391853 +-0.0822803 0.139383 0.0462108 +0.00350363 0.0883757 0.0563643 +-0.0599112 0.109712 -0.0163845 +-0.0699244 0.107994 -0.0118147 +-0.073438 0.145781 -0.0138542 +-0.0702694 0.156361 0.0186365 +0.0365208 0.0713424 0.036933 +-0.0764811 0.141399 0.0471717 +-0.0338378 0.0943788 -0.02372 +-0.0185768 0.055451 0.0489119 +-0.0294962 0.107041 0.0398129 +0.0351663 0.0783387 -0.0157415 +-0.0823976 0.095314 0.0321564 +0.0458052 0.08902 0.00916777 +0.00466954 0.0341296 0.0180802 +0.012258 0.0751733 -0.0308354 +-0.0176564 0.0480544 -0.0295902 +-0.0487658 0.0811872 -0.020682 +-0.0375125 0.045091 0.0407522 +0.00960807 0.0375632 0.0322947 +0.0522688 0.0462249 0.00921199 +-0.0452834 0.0395877 -0.019291 +-0.0396931 0.126183 0.0200311 +-0.0903381 0.144712 0.0141544 +-0.0430213 0.0450576 -0.0153284 +-0.0539191 0.129665 -0.00510771 +-0.0384876 0.108386 0.0375357 +-0.0496388 0.0605583 -0.0113235 +-0.034501 0.115223 0.0328885 +-0.0540284 0.131061 -0.00500164 +-0.0147028 0.0389017 0.0333119 +-0.0207376 0.0641563 -0.0358205 +0.00590682 0.131658 0.0132863 +-0.0819436 0.154696 0.0145801 +0.0526661 0.0660937 -0.000184776 +-0.0526201 0.14007 0.0244025 +-0.0752504 0.177839 -0.0529463 +-0.0574955 0.0946379 0.0447737 +0.0456129 0.0904097 0.00518194 +-0.0282629 0.122524 0.022734 +-0.0680338 0.142566 0.0438693 +-0.0643033 0.0426016 0.0312522 +-0.0314971 0.102929 0.041974 +-0.00589664 0.0980966 0.0519993 +-0.0542782 0.132533 0.0338047 +-0.0911122 0.11473 0.0343167 +-0.0493972 0.140141 0.00739907 +-0.0577664 0.0485104 0.00767417 +-0.0629684 0.139576 0.0370615 +-0.0122087 0.128137 0.0240139 +0.00116984 0.129366 -0.00128907 +-0.039496 0.0634667 0.0415276 +-0.0427066 0.0696149 -0.0170299 +-0.0721201 0.149786 -0.0402916 +-0.0637423 0.168365 -0.0426884 +-0.0228169 0.0383283 0.0285633 +-0.0894925 0.143336 0.0131803 +-0.0408822 0.128708 0.0107294 +-0.043783 0.147719 0.00491206 +0.00912223 0.0833108 0.0554277 +-0.0543042 0.0335497 0.00301212 +-0.0544171 0.0333785 -0.00775516 +0.0295237 0.0727272 0.042682 +-0.0504982 0.112495 0.0358796 +-0.0240218 0.119915 -0.0108978 +-0.0535232 0.0556038 0.0117195 +-0.0480175 0.133707 0.00490199 +0.00583381 0.129313 0.0261699 +-0.0405566 0.149165 -0.00293165 +-0.0286765 0.0690744 -0.0314836 +0.0453693 0.0693828 0.00245115 +0.0581659 0.056561 0.00517446 +0.0192888 0.0651078 -0.0282476 +-0.0228892 0.0739252 0.0512281 +-0.0217183 0.113234 -0.017904 +0.0365187 0.0526805 0.0315096 +0.0490482 0.0539975 0.0303486 +0.0175085 0.114012 0.0373101 +-0.0328107 0.126843 0.0122027 +-0.0687814 0.0336983 0.00353162 +0.0220892 0.0906332 -0.0239505 +-0.0460528 0.122513 0.026245 +0.0381409 0.109688 0.00657231 +0.0368421 0.0742334 -0.0127504 +-0.0657975 0.0340784 0.0127357 +-0.0706216 0.146831 -0.0255714 +-0.0468292 0.091298 -0.0217206 +-0.0914681 0.144718 0.0171554 +-0.0624908 0.0343254 0.0238098 +0.0543739 0.0477987 0.0161989 +-0.0195403 0.1757 -0.0161256 +0.0224671 0.0343921 0.00678503 +-0.0654707 0.155271 0.00728456 +-0.0897135 0.12265 0.00431103 +-0.0501651 0.0361307 0.0461721 +-0.0901888 0.139114 0.0151891 +-0.0726107 0.156829 -0.0349095 +-0.0334964 0.0718545 0.0411869 +0.0106165 0.0644536 0.0539383 +0.0274263 0.0491525 0.0376576 +-0.0157908 0.169796 -0.0160148 +-0.0608326 0.17151 -0.0610901 +0.0136156 0.126814 -0.00267762 +0.0293325 0.0535401 0.0386956 +-0.0652579 0.153012 -0.0402459 +0.0264019 0.036087 0.0225582 +0.0101281 0.105858 -0.0202342 +-0.0674046 0.0833115 0.0429955 +-0.0312435 0.0538841 -0.0143722 +0.0424267 0.0441756 -0.00158684 +-0.0305089 0.0760274 0.0408429 +-0.0849899 0.127963 -0.0030064 +-0.0223249 0.0386602 -0.0135496 +0.0216012 0.112963 -0.0137495 +-0.0224297 0.0552774 0.0442986 +-0.093152 0.121537 0.0362834 +-0.0384463 0.166779 0.00239389 +0.0317419 0.0667553 -0.0187125 +-0.0127135 0.100022 -0.0239701 +0.0204112 0.0371925 -0.00568428 +0.0383001 0.0969495 -0.00880451 +-0.0500528 0.150184 -0.0037815 +-0.0578783 0.106898 -0.0179862 +0.0485378 0.0682762 0.00156381 +-0.0708965 0.0341323 0.00629169 +-0.0871174 0.110466 0.0103621 +-0.0235739 0.0944939 0.0470656 +-0.0164815 0.0515035 0.0485835 +0.0325428 0.0380502 1.57112e-05 +0.0385774 0.0888011 0.0348199 +-0.0628692 0.0445185 0.0382675 +-0.0572856 0.125533 0.0399888 +-0.0780066 0.0940671 0.0362827 +-0.0361012 0.160724 -0.0132118 +0.0200495 0.124902 -0.000599563 +0.0101263 0.107276 -0.0197522 +0.0224877 0.0961643 0.0466342 +-0.077715 0.0852782 -0.0115916 +-0.0164955 0.105778 0.0423459 +-0.0725318 0.101313 0.038599 +-0.0663565 0.0783826 0.0411592 +-0.0644378 0.17995 -0.0588828 +-0.0645973 0.171184 -0.0458828 +0.0111199 0.129735 0.0223368 +-0.018333 0.172741 -0.0161594 +-0.0864925 0.10492 0.00639597 +-0.0144943 0.0500942 0.0487331 +-0.0855601 0.095177 0.0282718 +1.67787e-05 0.0386604 0.0239291 +0.0109499 0.0344084 0.00259617 +-0.0270041 0.168274 -0.00938266 +-0.0378811 0.107099 -0.0200653 +0.060304 0.0664655 0.0101406 +-0.0478845 0.108472 -0.0188663 +0.0181085 0.0591163 0.0489014 +-0.0260899 0.0522789 0.0395517 +0.0049437 0.0984176 -0.0242128 +-0.0623314 0.0357831 0.0433788 +0.0110403 0.0725847 0.0546235 +-0.0864956 0.084691 0.0204775 +-0.00849993 0.0787667 0.0579153 +-0.0260008 0.0382709 0.000860974 +-0.06937 0.145758 -0.0234859 +-0.0314168 0.117929 -0.0127586 +-0.0261669 0.0378674 0.0174813 +-0.0832309 0.120353 0.049216 +-0.0617814 0.16156 -0.0355923 +-0.0779669 0.165862 -0.0278956 +-0.0698398 0.0922797 -0.0162924 +0.0483255 0.0503286 -0.00380134 +0.0451716 0.0889782 0.0181643 +0.0329815 0.112282 -0.00498623 +0.0279206 0.0916217 -0.0209795 +0.0155 0.11402 0.0377783 +-0.0105379 0.0431327 0.0497176 +0.0606167 0.0609422 0.00915424 +-0.0181983 0.18599 -0.0174024 +0.0189716 0.115037 -0.0139804 +-0.0590849 0.0644137 0.0318252 +-0.0819254 0.12582 0.0519232 +-0.0588398 0.0954803 -0.0203334 +-0.0674426 0.148384 -0.0326115 +0.0387628 0.10462 0.0262683 +0.00841723 0.129272 0.0256623 +-0.0196119 0.0364667 -0.0278852 +-0.0376923 0.162356 -0.000243841 +1.88808e-05 0.115368 -0.0182789 +0.0393962 0.0505525 -0.00668347 +-0.0116788 0.0555838 -0.0339192 +0.0363865 0.0713868 -0.0138007 +-0.0821651 0.110069 0.034903 +0.022728 0.117081 -0.0101857 +-0.0515389 0.0417461 -0.0105815 +0.0219588 0.123501 -0.00109075 +0.00735928 0.0960033 -0.0276522 +-0.00349428 0.119696 0.0379021 +-0.0470844 0.151656 -0.00519447 +-0.0242296 0.0941248 -0.0298734 +0.0152433 0.0658912 0.0518711 +-0.021804 0.0376594 -0.0181241 +-0.0133966 0.121962 -0.00916065 +0.0365536 0.108655 0.0265769 +-0.0668098 0.0880715 -0.0180091 +-0.0665181 0.171112 -0.0407548 +0.0493343 0.0532247 -0.0043679 +0.0423933 0.0901635 -0.00682346 +-0.0624126 0.150651 -0.0115734 +0.0373944 0.0505276 -0.00658166 +-0.0411461 0.162173 -0.0113613 +-0.065916 0.0662086 0.0305519 +-0.0289729 0.083488 0.0456837 +-0.000642523 0.0347913 0.0398677 +-0.0738147 0.065744 0.00631032 +0.00351431 0.0938625 0.0544725 +-0.0467733 0.12389 0.0269319 +0.0246632 0.123785 0.00595837 +-0.0715256 0.0958228 0.0413941 +0.00252922 0.0362636 0.0463395 +0.00948792 0.0963424 0.0500581 +0.0292035 0.0400739 0.0286474 +-0.0309481 0.0706991 -0.0284733 +-0.054091 0.152763 0.0215579 +0.0118527 0.105542 -0.0197545 +-0.0404793 0.0832528 0.0431634 +-0.0448438 0.0985036 -0.0215544 +-0.032014 0.0567822 -0.0123897 +0.00040853 0.0356817 0.00488121 +0.0447245 0.0861403 0.0231669 +-0.0426307 0.0338188 -0.00946517 +-0.0710495 0.141325 -0.00813095 +-0.0255896 0.182763 -0.0105092 +-0.0838169 0.107636 0.0253505 +-0.0796245 0.0859561 0.0353266 +0.0240034 0.0449703 0.0396985 +0.00450108 0.0716864 0.0560951 +-0.0676894 0.0750921 -0.0153176 +-0.0466572 0.0369109 -0.0172699 +-0.016529 0.0558872 0.0508401 +-0.087831 0.103641 0.0093887 +0.0272256 0.10745 0.0377741 +-0.0670064 0.0337953 0.0073865 +-0.0866888 0.0833263 0.0124872 +0.0152687 0.0779357 -0.0299953 +-0.0851819 0.152725 0.0105454 +0.000352424 0.0511166 -0.0306262 +0.0518495 0.0464359 0.0201911 +0.0554005 0.0553511 0.0254886 +-0.0886141 0.0928486 0.00844707 +0.0129712 0.130228 0.0115965 +-0.085549 0.104961 0.0233427 +0.0515991 0.0496316 0.0251833 +0.0131946 0.0878791 -0.0305989 +-0.0693376 0.131255 0.0489674 +-0.0660205 0.167997 -0.0305503 +-0.0666146 0.174697 -0.0480375 +-0.0293346 0.0347045 0.0427947 +-0.0553259 0.126836 -0.00601308 +-0.058583 0.0460291 0.0113967 +-0.0416277 0.0337441 -0.014735 +-0.0446642 0.0621749 -0.0132201 +0.0295862 0.120365 0.0134787 +-0.0697163 0.064282 0.022673 +-0.0805487 0.0789662 0.0306236 +-0.0787564 0.154933 0.00983696 +-0.0662707 0.14708 -0.0258685 +-0.0248167 0.0949702 -0.0267501 +-0.0407693 0.0826515 -0.0208197 +0.000514101 0.0346343 0.00952105 +-0.0533361 0.138123 0.0280776 +-0.0689277 0.115103 -0.00892086 +-0.0865224 0.0913375 0.0024428 +0.0232602 0.0790529 -0.0256674 +0.0296786 0.0679688 -0.0198342 +-0.0331127 0.123309 0.0239558 +0.0276403 0.118218 0.0284429 +0.00238303 0.0449286 -0.0261957 +-0.0928278 0.124236 0.0382657 +-0.0868685 0.11045 0.00936714 +-0.0254875 0.0959781 0.0438332 +0.0132252 0.0808221 -0.0308314 +0.035265 0.0591791 0.0368077 +-0.00944135 0.168135 -0.0197365 +0.0011864 0.12951 0.0259323 +-0.0139593 0.0967237 -0.0305143 +-0.00848922 0.0385737 0.0258802 +0.0562981 0.0619429 0.0011209 +0.0322546 0.0987343 -0.0145759 +-0.0268707 0.103016 -0.0234914 +-0.00655639 0.0384205 0.0209905 +-0.0296666 0.0774462 0.0418826 +-0.0626586 0.0676213 -0.0103966 +0.0374569 0.0904362 -0.0137042 +-0.0712181 0.161 -0.0439365 +0.0243668 0.0889213 0.0476805 +-0.0336134 0.0408899 -0.0298935 +-0.0404969 0.0916505 0.0425962 +0.0443454 0.0903358 0.0221636 +-0.0435232 0.163746 0.00524284 +-0.0649943 0.0623954 0.0235277 +-0.0613093 0.0593276 0.0181457 +-0.0717978 0.155398 -0.0409076 +-0.00868753 0.0584178 -0.0339256 +-0.0904383 0.119966 0.00529664 +-0.0601615 0.0333995 -0.00165181 +-0.0612252 0.0407891 0.0437895 +-0.0537348 0.0738508 -0.0172852 +-0.0709057 0.10512 -0.0125462 +-0.00333997 0.039253 0.0353398 +-0.0469903 0.145002 0.00194161 +-0.0250386 0.0659034 -0.0335362 +-0.023273 0.0382876 0.00502865 +0.0111228 0.0960826 -0.0257288 +0.0198113 0.0954368 -0.0230239 +0.038476 0.104075 -0.00282883 +-0.0843581 0.0883713 0.0286614 +-0.0930341 0.118841 0.0362969 +-0.0646767 0.146003 -0.0179612 +0.0284626 0.102127 0.0395666 +-0.0435018 0.113907 0.034675 +-0.0604863 0.0790224 0.042794 +-0.089042 0.112536 0.0205154 +-0.0524675 0.0344946 0.0345461 +-0.0848716 0.119101 -0.00207765 +-0.0120923 0.11442 -0.0172013 +-0.079929 0.151371 0.00121035 +-0.0920085 0.116136 0.0393096 +0.0361533 0.112569 0.0130564 +-0.0196629 0.125034 -0.00230889 +0.000499429 0.115573 0.0406664 +-0.0560183 0.147198 -0.00168648 +-0.0873616 0.110481 0.0113565 +-0.0416844 0.0636674 -0.0137203 +-0.0651889 0.153592 -0.00278678 +0.0471599 0.07398 0.0153485 +0.0404106 0.0873775 0.0321991 +-0.019434 0.184905 -0.0153275 +-0.0438294 0.0913555 -0.0224139 +-0.0527613 0.0797578 -0.020501 +-0.0314155 0.0651435 -0.021432 +0.00948509 0.0950229 0.0512669 +0.0346346 0.107297 -0.007625 +-0.0870053 0.0954387 0.00242783 +-0.0617312 0.142927 -0.00565867 +-0.0538929 0.14622 0.0244012 +0.0339044 0.115273 0.00366751 +0.049575 0.0693171 0.00251779 +-0.0861009 0.106274 0.00635995 +-0.00751182 0.075985 0.0578234 +-0.0761849 0.0933719 -0.0135017 +0.0266626 0.0672707 0.0437593 +-0.0314925 0.0932138 0.0444288 +0.0112937 0.0680868 -0.0307505 +-0.086045 0.141863 0.00720055 +0.000490707 0.111422 0.0424934 +-0.0516022 0.0502173 -0.00741774 +-0.0709386 0.131124 -0.00852217 +-0.0291841 0.125368 0.0164845 +-0.0012258 0.095852 -0.0315171 +-0.000697567 0.0641196 -0.0342689 +-0.0797379 0.0738711 0.0228323 +-0.0705682 0.0382102 0.00943236 +-0.0558807 0.102663 -0.0193944 +0.0262875 0.0835737 0.0468767 +-0.0206175 0.0364922 -0.0281092 +0.0306136 0.0779431 -0.0207534 +0.037492 0.0983062 -0.0097724 +-0.0861064 0.0806138 0.0174966 +-0.0488748 0.105594 -0.0196597 +-0.0499497 0.0724883 0.0409516 +-0.060435 0.131107 0.0389542 +-0.0197383 0.108898 -0.0213322 +-0.0328414 0.0943934 -0.0238538 +0.0071329 0.104451 -0.0211019 +-0.0904392 0.125398 0.00528343 +0.0579573 0.0676391 0.00414749 +-0.0890486 0.0915916 0.0214249 +0.0544885 0.0716156 0.00618127 +0.037936 0.0901639 0.0356574 +-0.0631289 0.155254 0.0269868 +0.0280038 0.120349 0.024295 +0.00325461 0.0697315 -0.0336623 +0.0198002 0.0768324 0.0515324 +0.0135718 0.0504901 0.0475195 +-0.0220331 0.041681 0.0538782 +-0.0322365 0.126297 0.00653811 +-0.020497 0.0855906 0.0563403 +0.0100844 0.123139 0.0340691 +-0.0917617 0.141982 0.0191718 +-0.00665267 0.0526646 -0.0325345 +0.0325469 0.0922927 -0.0176842 +-0.00490321 0.0383839 0.0141185 +0.0393963 0.049102 -0.00636122 +-0.0468295 0.0927337 -0.0216687 +0.0393484 0.0561243 -0.00568756 +0.0381042 0.0392738 0.00134927 +-0.02061 0.0653432 0.0492306 +-0.0644858 0.152894 -0.00250698 +0.0316363 0.118365 0.0113851 +-0.0625842 0.162383 -0.0563311 +-0.0126137 0.180121 -0.0236267 +-0.0562637 0.142432 0.0309288 +0.0389203 0.10838 0.0161659 +0.0468209 0.0708789 0.021127 +0.0153317 0.060873 -0.028643 +-0.067208 0.0447917 0.00368814 +-0.0638714 0.15469 -0.0385902 +-0.0624126 0.161536 -0.0416011 +-0.011049 0.124435 -0.00785173 +0.0143712 0.0493733 -0.0267066 +-0.0374862 0.0931566 0.0438456 +-0.0278525 0.0807805 0.0474761 +0.0573848 0.0670309 0.00292365 +-0.0304938 0.0960556 0.0449536 +0.0182602 0.127523 0.0192457 +0.0182204 0.080645 -0.0282763 +-0.00275795 0.0740872 -0.0359501 +-0.072697 0.155649 0.00759319 +-0.0857527 0.0792184 0.0135098 +-0.0604443 0.0456013 0.0296807 +-0.0528198 0.0927332 -0.0219739 +-0.0457202 0.0709417 -0.0164642 +-0.054497 0.0889964 0.0448823 +-0.0541353 0.147754 0.0254132 +0.05074 0.0503045 -0.00171178 +-0.0926993 0.124215 0.0352716 +0.00850767 0.0786 0.0556334 +-0.0141847 0.0405865 0.0511605 +-0.0500491 0.0345412 0.0367666 +-0.0744234 0.156022 0.0128056 +-0.0148381 0.0386367 -0.0157684 +-0.0896535 0.0916031 0.0184402 +-0.0279306 0.125506 0.00666413 +-0.0249827 0.0918474 0.0485489 +-0.0247746 0.0385687 -0.0102357 +-0.0718755 0.10648 -0.0114758 +0.0303733 0.115414 -0.00438737 +0.0390771 0.099844 -0.00681802 +-0.0601235 0.0447437 0.0425684 +0.0559507 0.0508031 0.00520531 +-0.087948 0.102288 0.00840013 +-0.0802939 0.0732789 0.00250413 +-0.00347452 0.114725 -0.0175669 +-0.0780015 0.155773 0.018849 +-0.0868392 0.0873072 0.00147849 +0.0114304 0.0346172 0.0371012 +-0.0154945 0.0925097 0.0555061 +0.0207547 0.10431 -0.0184628 +-0.0805113 0.153427 0.0283513 +-0.0133702 0.0343611 -0.0190243 +0.045363 0.0932019 0.00717004 +-0.0517619 0.079747 -0.0203928 +-0.011137 0.171308 -0.0197957 +-0.0797359 0.0706327 0.0105539 +-0.0435047 0.116629 0.0323741 +0.0461192 0.0786876 0.0190773 +0.0257679 0.0349257 0.0180133 +-0.0377436 0.127354 0.000111554 +0.0455391 0.0875946 0.0141649 +-0.0115776 0.0962625 -0.032007 +-0.0304054 0.0580102 -0.0194062 +-0.0519213 0.118323 0.0336042 +-0.0615165 0.15114 0.0355512 +-0.0268549 0.175688 -0.00910606 +0.0291872 0.0462618 0.034893 +-0.0828817 0.143196 0.00216401 +-0.0229243 0.0972075 0.044901 +-0.0420606 0.0344689 0.0332688 +0.00840712 0.0404044 -0.0234014 +-0.0584986 0.100161 0.0428821 +0.0267286 0.0521731 -0.0207566 +-0.0343564 0.043282 -0.028737 +0.035312 0.0840703 -0.0177861 +0.0167493 0.0874098 0.0506847 +-0.0706375 0.156126 0.0126907 +0.0395317 0.0596774 0.0306966 +0.0160357 0.0807986 0.0531419 +-0.0719071 0.105086 -0.0120336 +0.057752 0.0523416 0.0181873 +-0.0705862 0.166615 -0.0490027 +-0.069998 0.157611 -0.0031485 +-0.0629727 0.118457 0.044154 +-0.0098895 0.107351 -0.0224128 +-0.0668287 0.169972 -0.0351376 +-0.0538607 0.152062 0.0231076 +0.0286155 0.0795328 0.044942 +0.00747725 0.131195 0.0181386 +0.0525355 0.0678367 0.0261828 +-0.069983 0.033931 0.00665746 +-0.00449526 0.10588 0.044033 +-0.0647467 0.143415 -0.011401 +-0.0242451 0.0337053 -0.0224295 +0.0405945 0.102819 0.0221712 +-0.0253936 0.106122 -0.0223873 +-0.031866 0.126076 0.00521848 +-0.0903832 0.132413 0.0312232 +0.0270423 0.0648893 -0.0216756 +-0.0416036 0.125525 0.0208631 +-0.0642885 0.148287 -0.0250747 +0.043249 0.0705728 -0.00179391 +0.00750831 0.0772509 0.056126 +-0.0360471 0.125746 -0.0036679 +-0.0534999 0.0820142 0.0450601 +-0.0268076 0.0782799 -0.0366273 +-0.0630392 0.0336157 0.00836468 +0.00450283 0.0924607 0.0546761 +-0.0794816 0.0846149 0.0352279 +-0.0354976 0.116636 0.0319301 +0.0590094 0.0552651 0.0101755 +0.0177618 0.100614 -0.0224544 +0.0141872 0.0347155 0.0357788 +-0.0626395 0.0644043 -0.00619313 +-0.0472223 0.168222 -0.000777409 +-0.0688709 0.156258 0.0147705 +-0.00209707 0.130745 0.0203917 +0.0438165 0.0959355 0.0191615 +0.0272253 0.120021 -0.000250724 +-0.0623918 0.152158 -0.026581 +-0.0619803 0.153737 -0.02558 +-0.0110119 0.122536 -0.00980812 +-0.00845767 0.100229 0.0476033 +-0.053626 0.1255 0.0365054 +0.029243 0.0872327 -0.0208644 +-0.0561028 0.133503 -0.00512832 +-0.0536146 0.150855 0.0243962 +-0.0729449 0.0805494 0.0386997 +-0.0113093 0.0384672 0.00547553 +0.013929 0.0392001 0.0444158 +-0.0743245 0.179234 -0.0539852 +-0.0670834 0.168031 -0.0569976 +0.0269196 0.0418157 0.0333163 +-0.0261604 0.114813 -0.0155316 +0.054979 0.06227 -0.000302264 +0.0447631 0.0931576 0.00318223 +-0.028552 0.159576 0.000695282 +-0.0196334 0.0906851 0.0545345 +-0.0681661 0.173216 -0.0428508 +-0.0670035 0.166617 -0.0570134 +-0.00170857 0.0641356 -0.0344906 +-0.0302923 0.115032 -0.0157497 +-0.017789 0.0998203 0.0439009 +0.0575984 0.0711737 0.0088801 +-0.0559485 0.119826 0.0383628 +-0.0508832 0.106998 -0.0191626 +-0.0856518 0.096702 -0.000561949 +0.0433856 0.0475038 -0.0047769 +-0.0141839 0.177168 -0.0206609 +-0.0318261 0.0623615 -0.0184459 +-0.0694684 0.158126 -0.0509379 +-0.059088 0.0445923 -0.00517311 +-0.0680469 0.0887699 0.043444 +0.0413366 0.0588699 -0.00449648 +-0.0108613 0.16611 -0.0209706 +-0.0810695 0.111472 -0.000645954 +0.0236683 0.0535376 0.0428398 +-0.0525009 0.104252 0.0406803 +0.0178265 0.128119 0.0148069 +-0.0833287 0.0817012 -0.000498118 +-0.0582078 0.148218 0.0334722 +0.0469627 0.0735494 0.00823046 +0.0348898 0.0889372 0.0400127 +0.0544139 0.0478718 0.0102055 +-0.0519767 0.0343446 0.0277664 +-0.0526872 0.144684 0.0193835 +-0.0654577 0.0403952 0.0367257 +-0.0632766 0.146612 -0.0147592 +-0.0756638 0.0968147 0.0380937 +-0.0121766 0.169774 -0.0245851 +-0.0313173 0.115081 -0.0157968 +0.00550009 0.105744 0.0419393 +0.0170456 0.0808203 0.0528345 +0.00997537 0.129323 0.0247881 +-0.000565033 0.0348667 0.0451983 +-0.0170398 0.124093 -0.00535053 +0.0359746 0.112738 0.007259 +-0.0264982 0.112519 0.0362632 +-0.0108141 0.0841239 -0.038537 +-0.0464922 0.097353 0.0431423 +0.0456344 0.0820067 0.0201819 +-0.00765915 0.0388225 0.0294318 +0.00952232 0.057476 0.0527668 +-0.0114724 0.180094 -0.0295969 +-0.0324762 0.0778813 -0.0295332 +-0.0515001 0.0465582 0.0417907 +-0.0716564 0.0639047 0.0190638 +-0.00648988 0.10728 0.0440126 +0.0517118 0.048146 0.0235716 +-0.00973422 0.0712867 -0.0371391 +-0.0311873 0.0499402 0.0418672 +-0.0652548 0.0380623 0.0267185 +-0.0353491 0.0346157 0.0221204 +-0.00455763 0.115688 -0.0165869 +-0.0158711 0.0941172 -0.0338261 +-0.0307264 0.0510087 -0.0163552 +-0.0674749 0.0861001 0.0436947 +-0.00549495 0.0456998 0.0471564 +-0.0127624 0.0742651 -0.0384156 +-0.0667813 0.0354951 0.0323861 +-0.0650934 0.040468 0.0377689 +0.00949782 0.11825 0.0371477 +0.042476 0.0986857 0.0211679 +0.0134353 0.0833572 0.0528968 +-0.006265 0.0381462 0.0486516 +0.019505 0.108463 0.0397034 +-0.0531501 0.13113 0.0336749 +-0.0169066 0.174228 -0.0176024 +-0.0877346 0.144562 0.0345528 +-0.0620052 0.131132 -0.00795604 +0.00350354 0.0967589 -0.0284524 +-0.0379926 0.15214 0.00278328 +-0.0250008 0.0678945 0.0436439 +0.013488 0.120719 -0.0120957 +-0.0546814 0.0342953 0.0289953 +-0.0493523 0.128134 -0.0033313 +-0.00536457 0.0387134 0.026395 +-0.0301008 0.162274 -0.0148279 +-0.0520761 0.153139 -0.00390728 +-0.0312974 0.120401 0.0276066 +-0.072708 0.173064 -0.0373345 +-0.0634981 0.0847405 0.0443851 +-0.00748204 0.123738 0.0339317 +0.0398166 0.0726016 0.0329349 +-0.0204571 0.159751 -0.0120682 +-0.0398664 0.104215 -0.0203975 +0.006345 0.0351555 0.0445736 +-0.0295025 0.0974144 0.0445077 +-0.00148646 0.0489421 0.0507365 +-0.0158009 0.0813621 -0.039398 +-0.0661715 0.0383371 0.0290301 +-0.0520592 0.0517918 0.0296489 +0.0132683 0.0765435 -0.0305058 +0.0357248 0.113154 0.00859849 +0.0452751 0.0847797 0.0211588 +0.0408906 0.0942563 -0.00676992 +-0.0621992 0.16466 -0.0525894 +-0.0704991 0.101365 0.0396906 +-0.0514936 0.0959907 0.0439844 +-0.0738976 0.0662178 0.00410027 +-0.0308753 0.104365 -0.0222089 +-0.0454852 0.0411575 0.0440424 +0.0264018 0.0591975 -0.0228202 +-0.0372554 0.154082 -0.00855912 +-0.0104302 0.175693 -0.0238578 +-0.0581296 0.0583212 0.0178996 +-0.0237002 0.0610797 -0.032726 +-0.0366248 0.127943 0.00786237 +-0.00749367 0.0605601 0.0556586 +-0.0317091 0.0749949 -0.0294856 +-0.0617882 0.138121 0.0352393 +-0.0764283 0.117143 0.0518912 +-0.0476607 0.120291 -0.0131944 +-0.0617261 0.158412 -0.0335949 +-0.0794782 0.106106 0.0317497 +-0.00127622 0.127442 0.029403 +-0.0850735 0.0819457 0.0214598 +-0.088151 0.137836 0.0407884 +-0.0622605 0.152178 -0.0225796 +-0.0896207 0.132365 0.0409732 +-0.0392773 0.153597 0.0044688 +-0.0477636 0.0797421 -0.0198355 +0.0475024 0.06248 0.0300852 +0.0137309 0.0344041 -0.00431645 +-0.0864106 0.136323 0.00223079 +-0.0622483 0.0470201 0.00467011 +-0.0218601 0.0893132 0.0539604 +-0.0404866 0.0390699 -0.027317 +-0.0563767 0.0650155 0.0336358 +-0.022785 0.0727991 -0.0382731 +0.00745846 0.0952014 -0.0287983 +-0.0728877 0.143976 -0.0119757 +-0.0485361 0.130681 1.6802e-05 +-0.08227 0.0830732 0.0310042 +-0.0458007 0.0884477 -0.0220772 +-0.0674901 0.102816 0.040307 +-0.0295082 0.0987895 0.0437091 +0.0266247 0.0591987 0.0436528 +-0.0166425 0.0970062 0.0498004 +-0.0754488 0.151352 -0.0128993 +-0.0561187 0.04231 0.0196965 +-0.0125561 0.107483 -0.0218463 +-0.0258638 0.0987461 -0.0241399 +-0.0150968 0.0965608 -0.0303463 +0.0403869 0.0505617 -0.00671315 +-0.0618596 0.135275 0.0369058 +-0.00853806 0.120181 -0.0133625 +0.0152242 0.123558 0.0310525 +-0.0669104 0.112326 -0.011534 +-0.00121369 0.0389243 -0.000247464 +0.0599261 0.0581121 0.0171753 +-0.0104999 0.0842933 0.0575891 +0.0236959 0.120687 0.0298434 +0.0407626 0.105627 0.00616707 +-0.0204813 0.10165 0.0438784 +-0.0497999 0.0884036 -0.0217208 +0.0455191 0.0847794 0.00419259 +-0.0113995 0.128605 0.00179072 +-0.0808762 0.0733317 0.00350919 +-0.0634956 0.0804499 0.0432131 +-0.0737877 0.170302 -0.0290826 +-0.00649113 0.0718493 0.0579775 +-0.0445186 0.0533636 0.0386768 +0.0320623 0.104555 -0.0127247 +-0.0491177 0.138604 0.00740359 +0.0459251 0.0848195 0.0121712 +0.0423718 0.0547731 -0.00653415 +-0.0505603 0.0417939 -0.0107632 +-0.0551112 0.0477166 -0.00539308 +-0.0492183 0.150688 0.0111503 +-0.0868019 0.0886457 0.00149241 +-0.0414982 0.166749 0.00369508 +-0.00533161 0.123249 -0.0106624 +0.00612795 0.107304 -0.0203065 +0.023391 0.0605296 0.0460187 +-0.0778945 0.102117 0.0345146 +-0.0177322 0.108689 -0.0211068 +-0.0341359 0.168185 -0.0152479 +-0.0364811 0.0931828 0.0441998 +-0.0645148 0.15586 0.0250316 +-0.0133496 0.124356 0.0309811 +-0.053528 0.131291 -0.0047694 +0.0236875 0.0373106 0.0299772 +0.00806894 0.0972917 -0.0250353 +0.0518069 0.0518147 -0.00170668 +-0.0580149 0.0675718 0.0363481 +-0.0916942 0.124053 0.00727726 +0.0143227 0.0344255 0.0215932 +-0.0828034 0.0762521 0.011522 +-0.0523769 0.119775 0.034728 +-0.0380638 0.174118 -0.00995608 +-0.0515288 0.0559219 0.0167726 +-0.0665225 0.10009 0.04154 +0.0449219 0.0497223 0.0313654 +-0.00374083 0.069852 -0.0355987 +-0.0448162 0.12956 0.0195798 +0.00318984 0.0852564 -0.0341139 +-0.0901249 0.125637 0.04453 +0.0248625 0.12099 -0.00239034 +-0.0357073 0.03405 0.0117511 +-0.0461509 0.05879 0.0381434 +0.0389649 0.108275 0.00542368 +-0.0857362 0.141867 0.00617644 +-0.0755097 0.135846 0.0506323 +0.0384382 0.0954258 0.0328906 +0.00385238 0.131766 0.0125385 +-0.0277181 0.0382234 0.00237012 +0.0554262 0.0714159 0.00640835 +-0.0707971 0.168292 -0.02371 +-0.0131917 0.169758 -0.0239616 +-0.0344904 0.0661905 0.0406967 +-0.00154364 0.130277 0.00186507 +-0.0647696 0.148087 -0.0261392 +-0.0577571 0.0334518 0.000595927 +-0.0334995 0.0618586 0.0392638 +-0.0657123 0.171986 -0.0448274 +-0.0254896 0.049863 0.0466034 +-0.0207287 0.058287 -0.0332963 +-0.040488 0.088839 0.0428058 +0.00826686 0.0681716 -0.0316571 +-0.0382076 0.0431174 -0.0263315 +-0.0192007 0.0392753 0.0392298 +0.0446778 0.0701888 0.00161208 +-0.0681688 0.0340999 0.0104427 +-0.0891956 0.099693 0.0183885 +0.00250408 0.0856622 0.0573274 +0.00673484 0.0364109 -0.0131882 +-0.0273112 0.0917698 0.0451953 +0.0360152 0.072737 0.038003 +-0.0174841 0.0910963 0.0554741 +-0.0882831 0.114383 0.0443189 +-0.0562701 0.0534697 0.00668599 +0.0184737 0.104403 0.0439338 +0.0591195 0.067343 0.0203999 +-0.0464971 0.107057 0.0400682 +0.0224712 0.125479 0.00796738 +-0.00281596 0.0896133 -0.0355773 +-0.0892259 0.113441 0.0323782 +-0.0532781 0.0476794 0.0246524 +0.00120832 0.0811183 -0.0353756 +-0.0820812 0.0748515 0.0115294 +-0.0344414 0.153644 0.000910386 +-0.0915313 0.147463 0.0171482 +-0.0778811 0.12224 -0.00662917 +0.00275904 0.130985 0.0207146 +0.0333375 0.115599 0.0220283 +-0.0925663 0.116874 0.0234322 +-0.0461657 0.168264 0.000998904 +-0.0608088 0.148246 0.0367611 +-0.0740333 0.13404 0.0510058 +0.046183 0.0806404 0.0141758 +-0.0177485 0.0700027 -0.0382786 +-0.05252 0.0490121 0.0379722 +-0.0142459 0.168321 -0.0155387 +-0.0894247 0.0996886 0.0153976 +-0.0654783 0.0861634 0.0444498 +0.0323217 0.116577 0.0230638 +-0.0676059 0.141897 -0.00935244 +-0.0514978 0.10289 0.0412322 +-0.00575874 0.0741425 -0.036638 +-0.0913439 0.11607 0.03131 +-0.0313824 0.0877015 -0.0265568 +0.0373688 0.102607 -0.00785264 +-0.0106393 0.169838 -0.0190633 +-0.0716387 0.0675256 0.0265031 +-0.0396636 0.0340515 0.0270767 +-0.0779219 0.0717107 0.00150831 +0.0451585 0.0670735 0.000845212 +-0.045692 0.126639 0.0237789 +-0.0914166 0.131046 0.0292353 +-0.0845601 0.0832447 0.0254813 +-0.00465613 0.0540645 -0.0324247 +-0.0573264 0.15429 0.0261567 +-0.0776607 0.0817583 -0.0102119 +-0.0614708 0.165833 -0.0590275 +-0.0866007 0.129822 0.0479412 +-0.0751026 0.155922 -0.00200459 +0.0292911 0.0364248 0.021021 +0.0168648 0.0958851 -0.0235234 +0.0566532 0.0608369 0.0255651 +-0.0447794 0.128887 0.00190497 +-0.024583 0.0635737 0.0419612 +-0.0534745 0.0360014 0.0464895 +-0.0488506 0.0999451 -0.0218934 +0.00224668 0.0740592 -0.0351433 +-0.0223056 0.126998 0.0101726 +-0.0907871 0.14608 0.0151486 +-0.0506704 0.0680761 0.0375114 +-0.0689054 0.113678 -0.00975253 +-0.032497 0.0917926 0.0443017 +0.0282492 0.102359 -0.0164093 +0.0375206 0.0540908 0.0314327 +-0.00566586 0.0555015 -0.0328252 +-0.0896969 0.139298 0.033185 +-0.0707473 0.127025 0.0521985 +-0.0455052 0.162274 0.00622301 +-0.0188243 0.0868874 -0.0382929 +0.00890069 0.0988547 -0.0226736 +0.0103725 0.130878 0.016344 +-0.0568151 0.142191 -0.00256359 +-0.0576833 0.0660478 -0.00944709 +-0.0394154 0.128541 0.00978788 +-0.0112757 0.0392934 0.0501019 +-0.0875442 0.11045 0.0133403 +0.0108543 0.128955 0.0251156 +-0.0306705 0.0692801 -0.0274547 +0.0193368 0.0460939 -0.0219388 +0.0280428 0.0928381 -0.0202889 +0.0101954 0.0879315 -0.0314901 +-0.0425303 0.153621 0.00682011 +0.046342 0.0671736 0.000660587 +0.0133755 0.0508647 -0.0275026 +-0.0815821 0.0803018 0.0303913 +-0.059075 0.137911 -0.00597298 +0.0419587 0.0958192 0.0261617 +0.0444321 0.0482656 0.0306384 +-0.0444939 0.0519693 0.038747 +0.0141421 0.107244 -0.018655 +-0.0258198 0.0880859 -0.0357275 +0.0511643 0.0525875 0.0281258 +-0.0838035 0.0884157 -0.00457068 +-0.0075843 0.111951 -0.0206051 +0.020155 0.0344845 0.00437508 +-0.0141697 0.038751 -0.00641336 +0.0160515 0.039741 -0.0214719 +-0.0627129 0.161593 -0.024579 +-0.0329051 0.0359381 0.0496011 +-0.0738068 0.0892836 -0.0151913 +0.0299737 0.0934986 -0.0189639 +-0.0618436 0.129703 0.0404325 +0.0117043 0.110341 -0.0188996 +0.013386 0.0576661 0.0508541 +-0.0636966 0.117092 0.044917 +-0.0634835 0.0890243 0.0452141 +-0.0874124 0.136542 0.0428952 +-0.0391888 0.168166 -0.0121398 +0.0376532 0.101954 -0.00791483 +-0.0708338 0.143978 -0.0149516 +-0.0135013 0.0687469 0.0541774 +-0.0671166 0.134015 0.0451603 +-0.0645196 0.148285 0.0383203 +-0.0216796 0.18469 -0.0188168 +-0.00148992 0.070365 0.0570874 +-0.0291401 0.0875323 -0.0325902 +0.0251009 0.122815 0.00327552 +-0.0111221 0.0980696 -0.0279124 +-0.0635024 0.0918143 0.0447779 +-0.0887995 0.0901451 0.00746775 +0.0164935 0.0962515 0.0477962 +0.046272 0.0806446 0.00718674 +0.038459 0.094268 -0.00974763 +0.0100793 0.0873522 0.0550703 +0.0183745 0.0874107 0.0495162 +-0.0547819 0.0840722 -0.0215429 +0.0249849 0.0576546 -0.0237943 +0.0262469 0.11849 0.0293617 +0.0187045 0.0462587 0.0425837 +-0.0433933 0.123406 -0.0104784 +-0.0615139 0.0385816 -0.00827445 +-0.0234882 0.104381 0.0428298 +0.0334188 0.115464 0.00204907 +-0.0251305 0.0810774 0.0532367 +-0.0661661 0.0431586 -0.00127362 +-0.0689806 0.138464 -0.0078252 +0.0324954 0.0484967 0.0321634 +-0.0650217 0.154743 0.00396393 +-0.0615004 0.0818818 0.0435978 +0.0289072 0.10744 0.0367037 +-0.0720417 0.156813 -0.0379146 +-0.0232564 0.171248 -0.0127378 +0.0211195 0.109025 -0.0155233 +-0.0668614 0.150018 -0.036632 +0.0204284 0.122662 -0.00423372 +-0.0628194 0.162004 -0.0576316 +-0.0641553 0.168532 -0.0413683 +0.0278158 0.0649933 -0.0208789 +-0.0788364 0.0742331 0.0262211 +0.0527925 0.0505032 0.000257908 +-0.0738772 0.107826 -0.00969763 +-0.0819791 0.08171 0.030761 +-0.0904343 0.136488 0.021207 +-0.0584473 0.145323 0.0330944 +0.00225674 0.0697235 -0.0336823 +-0.0228155 0.081267 -0.0385568 +0.0290261 0.106116 0.036871 +0.0121361 0.105839 -0.0196306 +-0.0365486 0.12125 -0.0102225 +-0.070219 0.146984 -0.026659 +0.00749947 0.122404 0.035106 +-0.0234912 0.107132 0.0414501 +0.0116034 0.0355849 -0.021581 +-0.0896067 0.0902304 0.0134498 +0.0274272 0.0781922 -0.0230908 +-0.0228318 0.114095 -0.016802 +-0.0510675 0.0598803 0.0316706 +0.0525281 0.0730706 0.0188626 +-0.0503624 0.128323 -0.00347306 +-0.0758088 0.0906346 -0.0139136 +0.0428831 0.0902351 0.0261862 +-0.00171604 0.131316 0.0104838 +-0.0845537 0.143232 0.00516668 +0.0183451 0.0551894 -0.0280076 +-0.0914715 0.128331 0.0382421 +-0.0654644 0.148292 0.0388168 +0.025254 0.122206 0.00192061 +0.0102154 0.0850922 -0.0315035 +-0.0913446 0.12833 0.0392393 +-0.0282035 0.125211 0.0168448 +0.0435793 0.0677809 0.0261624 +-0.014506 0.114132 0.0394731 +0.0146525 0.0927004 0.0511905 +-0.0777124 0.0900603 0.0375253 +0.0426104 0.0723991 0.0281081 +-0.0165087 0.10859 0.0417725 +-0.0293809 0.118905 0.0298455 +-0.0747355 0.161794 -0.0126957 +-0.0194977 0.103001 0.0433214 +-0.0774975 0.111156 0.045792 +-0.0235187 0.0551838 0.0425567 +0.00826699 0.0696219 -0.0321852 +-0.0671246 0.042281 0.0101216 +0.0443577 0.0547836 -0.00632411 +-0.0771697 0.152833 -0.00289126 +-0.0455143 0.0335109 0.00302189 +-0.0154906 0.0744572 0.0558178 +0.0390604 0.0575755 -0.00514174 +-0.0300453 0.0861604 -0.0315778 +0.0243112 0.0999667 -0.0198415 +0.0337476 0.0534432 0.0345417 +-0.0207506 0.0685447 -0.0377382 +-0.0883977 0.0983242 0.022387 +-0.043533 0.162269 0.00566221 +-0.0580451 0.047259 0.00941407 +-0.0435244 0.129538 0.0127129 +-0.0129572 0.163516 -0.016687 +-0.018238 0.0985224 -0.0244062 +-0.0468429 0.132502 0.00641278 +-0.012834 0.128656 0.00349339 +-0.00949586 0.0938956 0.0554931 +0.0405174 0.0829825 -0.0107762 +-0.0306755 0.0409906 0.0514223 +-0.0887381 0.139163 0.03848 +-0.0639163 0.105371 -0.0163736 +0.0319159 0.0876168 0.0427503 +-0.0165553 0.128252 0.0064647 +-0.0695817 0.168848 -0.0261289 +-0.0702082 0.141157 0.0460159 +0.0179624 0.0489942 0.0433049 +0.0363477 0.102053 0.0316389 +-0.029898 0.0385093 -0.0112051 +-0.0687619 0.169445 -0.0540038 +-0.0726588 0.143932 -0.0130219 +0.0162319 0.0849386 -0.0291053 +-0.0620358 0.136971 -0.00707833 +0.0166416 0.0740317 0.0522091 +0.0213347 0.0607071 -0.0262571 +-0.0576194 0.143675 -0.00218012 +-0.0913297 0.148826 0.016141 +-0.0751782 0.152724 -0.0149145 +-0.062838 0.153641 -0.0115615 +-0.0579073 0.152669 0.031812 +-0.0401847 0.173392 -0.00391542 +0.0166876 0.0475243 0.0432195 +-0.0393167 0.0432044 -0.0243027 +0.00658649 0.0945677 -0.0301242 +-0.00883076 0.130134 0.0179537 +-0.0248377 0.0867614 -0.0367865 +0.0135609 0.0343729 -0.0176058 +-0.0367327 0.0739624 -0.0182558 +-0.0891756 0.088886 0.0174542 +-0.0869535 0.131154 0.0468504 +0.00298644 0.131511 0.0079308 +-0.0116778 0.0541503 -0.0336719 +-0.00992638 0.128404 -5.81123e-05 +-0.0544374 0.131586 -0.00508481 +-0.0384968 0.104212 0.0394832 +-0.074384 0.0726496 -0.00763941 +-0.0530656 0.150158 -0.00286677 +-0.0166345 0.0465837 -0.0289175 +0.0567453 0.0707667 0.0204115 +0.0381172 0.0659142 -0.0117557 +0.00256341 0.131601 0.00920655 +0.0391019 0.106936 0.00217583 +-0.0480338 0.0685335 0.039429 +-0.0794876 0.0745597 -0.0035364 +-0.0248661 0.101609 -0.0237851 +-0.0647841 0.0448471 0.00913709 +-0.0446647 0.117939 -0.0147658 +-0.0152743 0.180101 -0.0270399 +-0.0859599 0.106341 0.0203569 +0.0111873 0.0893276 -0.0308633 +-0.0922566 0.126816 0.00926569 +-0.0618365 0.166237 -0.0545929 +0.0181719 0.0795251 0.0527143 +-0.0684871 0.120374 0.0527878 +-0.0476953 0.0723623 -0.0159721 +-0.0472614 0.125357 0.0280089 +-0.0494961 0.113894 0.0347794 +-0.0374992 0.0847101 0.0439351 +-0.0404923 0.0620428 0.0412639 +0.0609826 0.0637492 0.0111528 +-0.0849504 0.136625 0.0461206 +0.0337121 0.104741 0.0331059 +-0.00864132 0.0907031 -0.0362798 +0.00988706 0.0373676 0.0450724 +-0.024511 0.0782394 0.0527049 +-0.0716377 0.0368114 0.00909586 +-0.0832904 0.111663 0.0440643 +-0.0156647 0.109623 -0.0201068 +-0.0766606 0.163806 -0.0339802 +0.0165486 0.0631544 0.0502063 +-0.0753023 0.155004 0.00375308 +0.039051 0.0380783 0.00858362 +0.0420573 0.0943632 -0.00379153 +-0.0924935 0.124207 0.0332695 +-0.0745678 0.155931 0.022959 +-0.0348878 0.0336855 0.0122448 +-0.0755817 0.14859 -0.0148673 +-0.0712419 0.0628661 0.0147709 +-0.0722512 0.170824 -0.0490235 +-0.044945 0.146638 -0.00064718 +-0.0327132 0.0383899 -0.00426549 +-0.0656128 0.0626699 -0.00283823 +-0.0615924 0.156857 -0.0275883 +-0.0306139 0.051126 0.0398517 +-0.0552831 0.0478834 0.0286656 +-0.0825962 0.0869865 -0.00556699 +-0.0743429 0.0777095 0.0359578 +-0.00912413 0.125328 0.0309758 +-0.0877256 0.112462 0.0226926 +-0.0624682 0.148372 0.0373168 +-0.0772099 0.0954309 0.0368548 +-0.0657805 0.04031 0.0356744 +0.0390337 0.102562 -0.00454148 +-0.0218167 0.0770677 -0.0388569 +-0.013694 0.165443 -0.0129401 +-0.0242656 0.0588495 -0.0313753 +-0.0201769 0.16108 -0.00474531 +-0.0746468 0.151291 -0.0288803 +-0.0870878 0.147265 0.0324302 +-0.0667973 0.0823343 -0.0181512 +-0.0894818 0.137913 0.0311948 +0.0410937 0.100015 0.0241739 +0.0260496 0.0420955 0.0353242 +-0.0497977 0.134944 0.0250398 +-0.0824554 0.0748386 0.00652396 +-0.0420037 0.0449364 -0.0183222 +-0.00587956 0.107379 -0.0226761 +-0.0298783 0.0719759 -0.0315267 +-0.0649016 0.118019 -0.00923352 +-0.0461849 0.131841 0.0072241 +-0.0384968 0.066293 0.0418062 +-0.0375363 0.128085 0.0104763 +-0.0684218 0.173931 -0.0443685 +-0.0921191 0.131045 0.0262423 +-0.0269088 0.0720784 0.0425891 +-0.0318614 0.109962 -0.0183828 +-0.0576346 0.139576 0.0324737 +-0.0582272 0.151065 0.033498 +-0.0824187 0.0788859 0.0267668 +-0.0386191 0.0474546 -0.0163861 +0.0266281 0.0902434 0.0456585 +-0.00674435 0.0340208 -0.0192827 +0.0167681 0.0348096 -0.0116543 +0.00555478 0.102979 0.0445124 +0.0101351 0.0346886 0.0403762 +-0.0715049 0.147007 0.0421623 +0.0583177 0.0551766 0.00716644 +-0.0774854 0.142838 0.0458543 +-0.0630637 0.0343143 0.0307056 +-0.00979508 0.122843 -0.0101629 +-0.0497184 0.0723081 -0.0156401 +0.0463136 0.0660623 -0.000202599 +-0.0455839 0.0490621 -0.0101677 +-0.0746807 0.110131 0.0436879 +-0.0107636 0.0728162 -0.0377336 +-0.0155087 0.105817 0.0426846 +-0.0419504 0.0338103 -0.0111665 +0.0243299 0.0661738 -0.0239819 +0.0195943 0.041435 -0.0196763 +0.0590873 0.0566489 0.0191831 +-0.0828908 0.120639 -0.00384458 +0.0299951 0.111426 0.0329993 +-0.0685146 0.033856 -0.00470573 +-0.0492135 0.140151 0.00839688 +-0.0489146 0.121146 0.0309679 +-0.00870224 0.0627847 -0.0356447 +-0.086772 0.140601 0.0407491 +-0.0293203 0.0381642 0.0309659 +-0.0330003 0.0497903 -0.0153502 +-0.0425517 0.127843 -0.00110505 +0.0328934 0.0381571 -2.41096e-05 +-0.0525195 0.0426931 0.0456595 +0.021748 0.0349954 0.0225893 +0.00827474 0.123868 -0.00945393 +-0.029563 0.0377844 -0.01791 +-0.0370175 0.163827 -0.00102436 +-0.0664999 0.101466 0.0412188 +0.0064937 0.048929 0.05087 +0.0287604 0.121079 0.0103057 +0.0252285 0.11379 -0.0106368 +-0.0599544 0.0581084 0.014112 +-0.062196 0.154993 0.0273195 +-0.0901963 0.136492 0.0222062 +0.0243441 0.0535282 0.0420575 +-0.0779175 0.0954136 0.0361479 +0.0233436 0.112218 -0.0129499 +-0.0707139 0.0721775 0.0349299 +-0.0640765 0.0658063 0.0313225 +-0.012499 0.112778 0.04085 +0.00184795 0.0345666 0.017115 +-0.0706528 0.0621972 0.0100461 +-0.0885678 0.139164 0.0111992 +-0.0188224 0.0347384 0.0467634 +-0.0867734 0.103584 0.00638913 +0.0585617 0.0692487 0.0195963 +-0.0597919 0.0868174 -0.0202685 +0.00547344 0.0964656 -0.0281399 +0.0206378 0.123881 0.0271063 +-0.0699457 0.0641869 0.00125597 +-0.0625615 0.156051 0.017016 +-0.0417544 0.0339701 -0.0279962 +-0.0649712 0.129694 -0.00875388 +-0.0862104 0.107661 0.0103578 +-0.0932554 0.121405 0.0112928 +-0.0354965 0.0533413 0.0383699 +-0.0288938 0.0821008 0.0456772 +-0.0504899 0.115263 0.0337703 +0.0589314 0.0635744 0.022157 +-0.0186162 0.0391183 0.0377018 +-0.00206852 0.0346139 0.0433223 +-0.0274904 0.108416 0.0392888 +0.0114791 0.0353993 0.0291949 +0.0231094 0.1217 -0.00313916 +-0.0577454 0.0767844 -0.0191155 +-0.00909377 0.175718 -0.0267745 +0.0517415 0.0673755 0.000499527 +-0.0128851 0.164546 -0.0183954 +-0.0673534 0.170861 -0.0570311 +-0.0929853 0.13101 0.0212315 +0.0234643 0.0889079 0.0481435 +-0.088271 0.126713 0.00126975 +-0.0657845 0.0809163 -0.0181411 +-0.0623578 0.139562 0.0361839 +0.0537838 0.0608937 0.0284739 +-0.0417084 0.0681156 -0.0160245 +0.0391698 0.101249 -0.00580082 +0.0314319 0.059214 0.0400505 +-0.0609535 0.135292 0.0364528 +-0.000337321 0.0338454 -0.0216338 +-0.0194278 0.169807 -0.0142312 +-0.0348191 0.0886631 -0.024431 +0.0343015 0.0925788 -0.0159761 +-0.0484766 0.166987 4.90724e-06 +-0.0665297 0.149283 -0.0337543 +-0.0801184 0.0845811 0.0344552 +-0.0728936 0.109289 -0.00959602 +-0.0631344 0.177233 -0.0567528 +-0.0405211 0.16525 0.00379284 +-0.0231365 0.166757 -0.0180638 +0.00733914 0.0539337 -0.0304234 +-0.0448725 0.105637 -0.0203982 +-0.0120489 0.177175 -0.0228491 +-0.0935183 0.117402 0.0193034 +-0.0218743 0.178667 -0.0141782 +0.0371376 0.0728556 -0.0127896 +0.00251304 0.0828672 0.0572444 +-0.0659599 0.128235 -0.00885739 +0.0572369 0.0523165 0.0201815 +0.00234985 0.1177 -0.0168004 +0.0136405 0.0534411 0.0494225 +0.0440001 0.081852 -0.00180195 +-0.0352323 0.0337248 0.00491425 +-0.0852903 0.152844 0.0238067 +-0.0841107 0.0938743 -0.00455389 +-0.0327087 0.156604 0.00170747 +-0.0136478 0.0384232 0.0249573 +0.0203982 0.126887 0.0157559 +-0.0256832 0.0878506 0.050771 +-0.0859766 0.117044 0.000228439 +-0.0275277 0.0660102 0.0388181 +0.0386899 0.0941002 0.0332667 +-0.0072203 0.0994662 -0.0253456 +-0.0387089 0.068094 -0.0155018 +-0.0447414 0.149173 0.00704529 +-0.037003 0.126393 0.0195465 +-0.0691196 0.118603 0.052746 +0.0126876 0.0376693 0.0445214 +0.00235997 0.0496442 -0.0301148 +-0.0852421 0.0804972 0.00551565 +-0.0315104 0.105689 0.0403731 +0.045017 0.0410596 0.00889517 +-0.0645229 0.0335011 -0.00443342 +-0.0237309 0.092173 -0.0338912 +-0.0696939 0.158144 -0.0499358 +-0.00649106 0.116924 0.0392844 +0.0203532 0.0579488 -0.0270415 +0.0454669 0.0761165 0.0216249 +-0.0776599 0.103464 0.0342449 +-0.0732 0.113624 0.050147 +-0.0760799 0.147225 -0.00886324 +0.0300894 0.118197 0.0250757 +0.0134949 0.103141 0.0462202 +-0.0890108 0.142042 0.0341592 +-0.0804084 0.0719394 0.00662383 +-0.0695221 0.143851 -0.0150076 +-0.0608967 0.108264 -0.0166058 +0.024601 0.0954054 -0.0210454 +-0.022965 0.108799 -0.0212234 +-0.0611808 0.060116 0.0210055 +0.0302694 0.104198 -0.014346 +-0.0556068 0.119255 -0.0119973 +0.0521834 0.0709362 0.0231159 +-0.0314011 0.159502 0.00180977 +-0.0393243 0.172677 -0.00992732 +-0.0273795 0.0859709 -0.0356537 +-0.0158141 0.084157 -0.0391976 +-0.0748503 0.150353 0.0378605 +-0.0898842 0.145774 0.0282412 +-0.0830081 0.135296 -0.00152379 +0.00239673 0.0404932 -0.0244502 +0.0427154 0.0482477 0.0316879 +-0.0266384 0.166791 -0.00886205 +0.0140069 0.0433574 0.0445182 +-0.0554949 0.102938 0.0419937 +-0.0535677 0.121244 0.0365515 +-0.091536 0.147482 0.0221363 +-0.0926871 0.118696 0.0103064 +-0.0944412 0.121464 0.0182801 +-0.0562674 0.0521079 0.00770249 +0.0268173 0.0563551 0.0421393 +0.0126767 0.102031 -0.0220157 +-0.0753389 0.14722 -0.0108566 +-0.0856054 0.119006 0.0487694 +-0.0533885 0.122494 -0.00938247 +0.0431078 0.0438619 0.0262578 +-0.0605291 0.0337655 0.01588 +-0.0126252 0.045057 -0.0279244 +-0.045035 0.131096 0.00921538 +-0.0885624 0.127032 0.0457658 +0.040497 0.0569389 0.0314027 +0.0364907 0.111851 0.00455337 +-0.0834729 0.144593 0.00316535 +0.0433385 0.080395 -0.00378638 +-0.0318429 0.0944059 -0.023975 +-0.0484939 0.0747239 0.0424157 +-0.0110217 0.175722 -0.0231509 +0.000137104 0.104495 -0.0221519 +-0.0521218 0.0553341 0.025863 +0.0390662 0.103279 0.0267541 +-0.0365034 0.105591 0.0389607 +0.0135363 0.0347941 0.0319644 +-0.0857201 0.113489 0.0456231 +-0.0225205 0.114038 0.037332 +-0.0424861 0.107068 0.0398635 +-0.0498903 0.161248 0.00701432 +-0.0261589 0.0660162 -0.0325063 +-0.061193 0.167783 -0.0585846 +-0.0153476 0.186173 -0.0245951 +-0.0220085 0.0386415 -0.0116054 +-0.0746541 0.0660086 0.0112783 +-0.0857094 0.107615 0.00636703 +-0.000110081 0.106984 -0.0213197 +-0.0293764 0.039648 0.0531021 +0.028771 0.0495105 -0.0157345 +-0.0168713 0.184583 -0.0192109 +-0.0517714 0.14934 0.0163945 +-0.059475 0.0776368 0.0428908 +-0.0109445 0.0385116 0.00732721 +-0.0636281 0.177112 -0.0556446 +-0.074576 0.0901236 0.0400162 +0.0161292 0.0604031 0.0495734 +0.022982 0.114019 0.0351746 +0.0259399 0.098006 -0.0197455 +-0.0097165 0.0698878 -0.0366754 +-0.069561 0.132665 0.0486469 +-0.0530949 0.0350628 -0.012244 +-0.0680607 0.153823 -0.0498908 +-0.0135439 0.125168 0.0294386 +-0.00340282 0.12679 -0.00651364 +-0.0391911 0.149452 0.000405422 +-0.0764653 0.177807 -0.0519745 +-0.0287178 0.121983 -0.00700749 +-0.0619687 0.155933 0.0215789 +-0.0411389 0.0448599 -0.0213399 +-0.0553956 0.0560936 -0.00341211 +-0.0930152 0.116045 0.0163142 +-0.0538732 0.0634525 0.0320061 +-0.0265911 0.123944 0.0203778 +0.0521155 0.073659 0.0142686 +-0.0733241 0.158247 -0.0319134 +-0.0109096 0.167211 -0.0224966 +-0.0387656 0.0459335 -0.0222844 +-0.0438685 0.104239 -0.0209341 +-0.0404958 0.0464911 0.0408136 +-0.0546568 0.133929 0.033262 +-0.0875345 0.0914089 0.00446769 +0.0213976 0.0505253 -0.0237217 +0.00734362 0.0524803 -0.0298755 +0.0300864 0.0686462 0.0416997 +0.0343005 0.110021 0.028645 +0.0541591 0.0648613 0.0272743 +-0.0267629 0.124714 0.018819 +-0.084006 0.130916 -0.00261237 +-0.032464 0.126152 0.0167563 +0.0411083 0.0816433 -0.00876203 +0.0569799 0.0538694 0.0224893 +-0.0104937 0.0502816 0.0505289 +-0.0809192 0.0899278 0.0336764 +-0.0706578 0.10688 0.0373417 +-0.0634399 0.160562 -0.0195565 +-0.0491873 0.165537 -0.00392571 +-0.0506864 0.137014 0.00141591 +0.0414602 0.0985756 -0.00280597 +-0.0725308 0.161023 -0.0389355 +-0.0593508 0.0339548 0.0212701 +-0.0724089 0.155986 0.0106072 +0.0454654 0.0819915 0.0211715 +-0.0231673 0.169718 -0.0195033 +0.014393 0.129494 0.0163965 +-0.0185111 0.0499058 0.0467842 +-0.0180519 0.128104 0.0102643 +-0.0161793 0.169751 -0.0220442 +0.0178585 0.0957539 -0.0234025 +0.0277062 0.122023 0.0113437 +-0.0356288 0.0533886 -0.010251 +-0.00862621 0.0394649 0.0376552 +-0.0708134 0.0624523 0.0134268 +-0.0338786 0.104305 -0.0212068 +-0.0471517 0.160622 -0.00754132 +-0.0925898 0.124211 0.034269 +-0.0584616 0.0717087 0.039721 +-0.0146591 0.0511639 -0.0318396 +-0.0607891 0.0597911 0.00342454 +0.0222547 0.0819067 -0.0260667 +0.0230644 0.109683 -0.0142211 +-0.0844174 0.110829 0.0409213 +-0.0687289 0.0779401 -0.0161359 +-0.0752643 0.0941545 0.0391883 +-0.0876028 0.105024 0.0163629 +-0.077844 0.114867 -0.00473455 +-0.0325542 0.0341026 -0.0206973 +-0.0589604 0.0340153 0.0230639 +-0.00211759 0.125578 0.0320366 +0.0126989 0.0342761 -0.010037 +0.013184 0.0740073 0.0542309 +-0.0477691 0.130137 0.000614804 +-0.0718381 0.155405 -0.0399144 +-0.0622568 0.148888 -0.00391238 +-0.0159434 0.0385311 0.027994 +0.0373005 0.103362 0.0294506 +-0.02276 0.093942 -0.0316991 +-0.0520122 0.14159 0.0203687 +-0.082015 0.110886 0.0432009 +-0.0745865 0.0720219 0.0307608 +-0.00953059 0.096141 -0.0318625 +-0.0495789 0.046041 -0.00928879 +-0.00423381 0.0382248 0.0479393 +-0.0382126 0.169665 -0.0124129 +0.0318584 0.0981802 0.0392129 +-0.0314643 0.126198 0.0141678 +-0.0622546 0.152185 -0.0195775 +-0.0424907 0.0831788 0.0422885 +-0.0205087 0.18589 -0.0190712 +-0.00369262 0.0366899 0.0482034 +-0.0197122 0.0583602 -0.0339067 +-0.0106092 0.0434444 -0.026227 +0.0245832 0.0562081 -0.0237654 +-0.0891532 0.121635 0.0465292 +-0.0629277 0.161435 -0.0535909 +0.047295 0.0711844 0.0046334 +-0.0417522 0.0782987 -0.0193601 +-0.000496629 0.0828922 0.0574621 +-0.0320822 0.0335961 -0.0276233 +-0.0571072 0.154583 -0.000558004 +0.0584978 0.0634546 0.0229811 +-0.0581231 0.149655 0.0336366 +-0.0619701 0.160031 -0.0245798 +-0.0800787 0.0980611 0.0339873 +-0.0219645 0.0403079 0.0539432 +-0.0699065 0.110817 -0.0106385 +-0.0725366 0.154032 -0.0369032 +-0.0224974 0.0498852 0.046496 +0.00485548 0.0339942 -0.0207847 +-0.0614772 0.0338873 0.0155724 +0.00946392 0.0472926 0.0483305 +-0.019502 0.109944 0.0407387 +-0.0539465 0.0486826 0.012352 +-0.0355502 0.175589 -0.0109785 +-0.0784832 0.155333 0.0128492 +0.0266099 0.122879 0.0123678 +-0.0472066 0.134653 0.0142236 +-0.0078767 0.103255 -0.023393 +-0.0504989 0.101536 0.0421291 +-0.0266231 0.0450263 -0.028096 +-0.0916243 0.131038 0.0282288 +0.0125747 0.0445985 0.0442752 +-0.0196537 0.0480066 -0.0290701 +0.0172432 0.108764 -0.0171862 +-0.0295071 0.0635474 -0.0264265 +-0.0620034 0.040777 0.0431481 +-0.00243593 0.113721 -0.0185019 +-0.0630177 0.135513 -0.00745136 +0.0433285 0.0874073 -0.00479371 +-0.0154888 0.0688106 0.054717 +-0.0882956 0.116235 0.0458325 +-0.0494969 0.0946343 0.044743 +-0.0619637 0.147832 -0.00431835 +-0.092816 0.124239 0.0392636 +-0.0629366 0.147438 -0.0146052 +-0.0782928 0.163856 -0.0319501 +-0.064798 0.174285 -0.0502768 +-0.0112267 0.038611 -0.000125945 +-0.0820175 0.148708 0.00217249 +0.0401192 0.0979552 0.0282751 +-0.0877344 0.132461 0.0447656 +-0.050513 0.143196 0.0143929 +0.0136958 0.0672461 0.0531523 +-0.0608764 0.033777 0.0140174 +0.00552563 0.0813962 0.0561869 +-0.0768476 0.148423 0.040238 +-0.0306152 0.0552238 -0.0173804 +-0.0567885 0.123073 -0.00794084 +-0.0255089 0.119394 0.0308336 +0.0223261 0.116663 0.0342169 +-0.0475261 0.0335634 -0.00837623 +-0.0582936 0.157998 0.00361947 +0.0051303 0.105879 -0.0208781 +-0.00896496 0.0383664 0.01874 +-0.0444005 0.0336982 -0.00787213 +-0.00659427 0.0391448 -0.0257394 +-0.0414965 0.0424145 0.0425934 +-0.0846517 0.135301 0.0472783 +-0.0634992 0.0973124 0.0426152 +-0.0488679 0.135513 0.00441971 +0.037597 0.0883595 -0.0147642 +-0.00186878 0.0388962 0.0287527 +-0.028023 0.0380941 0.0277005 +-0.0474992 0.0718408 0.0410603 +-0.0899231 0.113261 0.00935255 +0.044663 0.094574 0.0141596 +-0.0613242 0.174126 -0.0596453 +0.0131192 0.0913894 0.0524895 +0.0569982 0.0642691 0.00177262 +0.029911 0.120086 0.0121698 +-0.0341992 0.124637 -0.00378015 +-0.0714932 0.121802 0.0535223 +-0.060211 0.120578 -0.00928669 +0.0514409 0.0718132 0.00596213 +-0.0055446 0.0384588 0.0102869 +0.0401137 0.0933035 -0.00871241 +-0.077868 0.12372 -0.00684832 +-0.0438994 0.148485 -0.00356582 +-0.0478093 0.0898718 -0.0219802 +-0.050356 0.0501549 0.0156949 +-0.044116 0.168361 -0.0078879 +0.0274031 0.12156 0.0212208 +-0.0198084 0.119865 -0.0108751 +-0.00808629 0.0392239 0.0361848 +-0.074679 0.177203 -0.0452121 +-0.0717079 0.162415 -0.0429474 +-0.0817249 0.153192 0.027965 +-0.0830361 0.0952877 0.0313817 +-0.0410879 0.12806 0.000341883 +-0.0268762 0.104433 -0.0231038 +-0.028867 0.0620809 -0.0264195 +0.0400441 0.0834026 0.0333734 +0.00148401 0.0427923 0.0460657 +-0.021597 0.124211 0.0236359 +-0.0493581 0.0389276 0.0456407 +-0.0251636 0.119759 -0.0107128 +-0.0305455 0.0776911 -0.0335901 +0.0434944 0.0719976 -0.00179535 +-0.0730641 0.148297 -0.027137 +-0.0403032 0.0335749 -0.0236075 +-0.0838696 0.117633 -0.00194246 +-0.0183958 0.0360837 -0.0274195 +0.0306925 0.119003 0.0181751 +-0.0287719 0.0876257 0.045371 +-0.0150862 0.116786 -0.0157023 +-0.0226105 0.0393974 -0.0288175 +-0.00549593 0.114185 0.0409403 +0.0172148 0.0820814 -0.0286624 +0.0204946 0.0878829 0.0490965 +0.0144377 0.119508 -0.0127985 +0.0084105 0.0389663 -0.0233493 +0.042717 0.0705281 -0.00378792 +-0.0721585 0.0349122 0.00711943 +-0.0700117 0.176166 -0.0463861 +-0.0559881 0.0594067 0.0225062 +-0.0934924 0.121416 0.0122906 +0.0386755 0.101225 -0.00680717 +-0.00386806 0.105937 -0.0224388 +-0.0104995 0.091174 0.0564817 +-0.0012394 0.131315 0.00922853 +-0.0497873 0.0855205 -0.0216876 +-0.0168713 0.104463 -0.0227606 +0.0101956 0.0865002 -0.0314726 +-0.0534959 0.108443 0.038977 +-0.0548951 0.0610993 0.0270145 +-0.0755046 0.137255 0.0498073 +-0.0485754 0.0489523 -0.00913959 +-0.0331264 0.163719 -0.0148995 +-0.00945074 0.100225 0.0471086 +-0.0342862 0.0340473 0.0246456 +-0.0294128 0.0335741 -0.023325 +-0.026685 0.0349864 0.0500364 +-0.061923 0.12237 -0.00883821 +0.0501668 0.0567787 0.0302284 +-0.011856 0.127622 0.0255897 +-0.0429498 0.0338754 -0.00590515 +-0.000398209 0.131157 0.00667235 +-0.0163397 0.112374 -0.0190184 +-0.0651151 0.138224 0.0409979 +0.0355326 0.0544702 -0.00765701 +0.0264528 0.0348348 0.00531809 +-0.0438555 0.101385 -0.0214526 +-0.0234974 0.0498976 0.0468652 +-0.0436816 0.0651561 -0.0146099 +-0.00750789 0.0386054 0.00429878 +-0.0494719 0.0643044 0.0356628 +-0.0857911 0.0847131 0.0234468 +0.0202388 0.0735294 -0.0276011 +-0.0826135 0.153724 0.024657 +0.0377117 0.0799594 -0.0137509 +-0.0629014 0.0384346 0.017326 +-0.0564952 0.112508 0.0359017 +-0.00450514 0.0647631 0.0563697 +0.0228849 0.0849076 0.049031 +-0.0136101 0.17129 -0.0181213 +-0.0659308 0.168025 -0.05906 +0.00616007 0.130231 0.0233995 +0.0200475 0.0355684 0.0326031 +0.0207235 0.0355731 0.0309275 +-0.0914203 0.133738 0.0192152 +-0.0894168 0.0942943 0.0184246 +-0.0486795 0.137079 0.00840446 +-0.0268516 0.0981872 -0.024073 +-0.0296061 0.0499557 0.0431146 +-0.0645444 0.136771 0.0400377 +0.00960463 0.0369501 0.029234 +-0.0077992 0.0826766 -0.0378216 +-0.0705096 0.145613 0.0431794 +0.038042 0.109981 0.0137429 +-0.0323904 0.0346717 0.0421656 +0.0166765 0.12456 0.0286792 +0.0496183 0.0673428 0.0005193 +-0.0256005 0.175695 -0.0107936 +-0.0178219 0.0896296 -0.0373512 +-0.010186 0.0339025 -0.0217341 +-0.047823 0.0912927 -0.0217091 +0.0214379 0.121585 -0.00505488 +-0.063535 0.0741856 0.0400495 +-0.0175015 0.119559 0.0348485 +0.0378045 0.0701003 -0.0128173 +-0.06064 0.140962 -0.00527103 +-0.0745647 0.162191 -0.0132518 +0.0175747 0.0931801 -0.024649 +-0.0413443 0.159411 0.00325579 +-0.0692325 0.161954 -0.0115912 +-0.0598828 0.104039 -0.0184233 +-0.0275135 0.111195 0.0372083 +0.017284 0.0435398 0.0440147 +-0.043478 0.0633766 0.0405033 +0.0234516 0.0389975 0.0363054 +-0.0705331 0.144185 0.0442754 +-0.00248752 0.0897873 0.0564419 +-0.0728742 0.149812 -0.0379734 +0.0462595 0.0834414 0.00917612 +0.00549045 0.0459551 0.048539 +0.038562 0.0568882 0.0311978 +-0.0404973 0.10005 0.041322 +-0.0633155 0.125546 0.0454063 +-0.0425091 0.0520201 0.0393163 +0.00748602 0.041302 0.0454759 +-0.0652746 0.0378654 0.0394026 +-0.0208078 0.081314 -0.039065 +0.00735987 0.131518 0.0123881 +-0.0507686 0.0812185 -0.0210302 +0.0289317 0.0369927 0.000264038 +-0.0895362 0.119938 0.00329723 +0.0339261 0.0564017 0.0366181 +0.0387571 0.0780554 0.0349576 +-0.00249465 0.111426 0.042426 +0.0312166 0.0814571 -0.0197537 +0.00710696 0.112707 -0.0194319 +0.0182552 0.0736117 -0.028651 +-0.0747384 0.149908 -0.0288721 +-0.0142729 0.16729 -0.0212151 +-0.0796554 0.0776931 0.0301108 +-0.0308995 0.0385461 -0.0114399 +-0.0135011 0.162185 -0.0138332 +-0.062358 0.172308 -0.0618736 +-0.0779551 0.131028 -0.00606492 +0.0053093 0.0610791 -0.0314051 +-0.0622044 0.163118 -0.0415929 +-0.0875561 0.0900472 0.00346813 +-0.0693763 0.0627096 0.00438827 +0.0577316 0.0594186 0.0235899 +-0.076964 0.0686471 0.0102516 +-0.068516 0.156454 -0.00263594 +-0.0116226 0.0389602 0.0338935 +-0.053617 0.0500325 0.0119809 +0.0600963 0.059514 0.00816569 +-0.0667396 0.168684 -0.03081 +0.0461456 0.0820314 0.0061875 +-0.0433217 0.0391871 0.0438385 +0.0426589 0.0598822 -0.00401987 +-0.0496436 0.132456 0.0281905 +0.0526393 0.0635217 0.0285801 +0.0276786 0.107363 -0.0137282 +0.0429561 0.100122 0.0141624 +0.0420203 0.102869 0.0111608 +0.0352633 0.113355 0.0198926 +-0.0527821 0.0840792 -0.0215781 +-0.0731314 0.179106 -0.0550054 +-0.0772542 0.116219 0.0507045 +-0.0448961 0.131042 0.0121815 +-0.0659423 0.149401 -0.0328697 +-0.00381497 0.0882175 -0.036071 +-0.00434542 0.130565 0.019581 +0.0267602 0.0365817 2.43485e-05 +0.0169695 0.107204 -0.0175448 +-0.062502 0.0625858 0.0256444 +-0.00350098 0.0815126 0.05747 +0.000251433 0.0712294 -0.0349609 +-0.0113059 0.174226 -0.0217772 +-0.0348319 0.0943645 -0.0236767 +-0.0786972 0.0940445 0.0355566 +0.0177903 0.112808 -0.0155711 +-0.0318198 0.0887354 -0.0251772 +-0.0198038 0.0827175 -0.0390158 +-0.0190696 0.126125 0.000571573 +-0.0793168 0.102079 0.0331119 +0.021502 0.109802 0.0384228 +-0.0927296 0.124224 0.0362665 +-0.0209485 0.0682779 0.0508919 +0.041224 0.101389 -0.000814438 +-0.0468126 0.0898791 -0.022022 +-0.0348994 0.124334 -0.00549397 +-0.0341879 0.127198 0.0131711 +-0.049291 0.131272 -0.000642386 +-0.0359021 0.0337218 0.00658675 +-0.0837824 0.091132 -0.00556609 +-0.0335134 0.101547 0.0420338 +0.0210931 0.0429808 -0.0187308 +0.0424902 0.0555855 0.0321183 +-0.0557185 0.0570014 0.011057 +-0.0194912 0.112675 0.0392933 +-0.025189 0.156576 -0.00769163 +0.0400265 0.10701 0.00816505 +-0.0540901 0.153118 -0.00271435 +-0.00486253 0.101638 -0.0232055 +-0.0436472 0.0338067 0.00674466 +-0.0211436 0.168262 -0.0193322 +-0.0763578 0.141673 -0.00573846 +0.0465682 0.041911 0.0139236 +-0.0534989 0.109802 0.0378386 +-0.0811057 0.0748245 0.0195385 +0.0366496 0.0848209 0.0372394 +0.0520606 0.0608742 0.0294954 +-0.0810176 0.109646 0.0372868 +0.0260062 0.121547 0.0249766 +-0.0134941 0.0773082 0.0569169 +-0.0759274 0.108411 0.0376421 +0.0131577 0.0548631 0.0504935 +-0.0556243 0.0335264 0.0117574 +-0.0445311 0.119183 -0.0140568 +-0.0651138 0.155569 0.0262833 +0.0254608 0.100767 0.0422505 +-0.0354939 0.101471 0.0414493 +-0.0526525 0.152155 0.0150192 +-0.0578899 0.111162 -0.0167182 +-0.050471 0.0571806 0.032579 +-0.0881725 0.103664 0.0113862 +-0.0124346 0.0985527 -0.0264295 +0.0459022 0.0876188 0.00817319 +-0.0598831 0.0337324 0.0142605 +0.0420206 0.092566 0.0274869 +-0.0622887 0.152203 -0.0145776 +-0.0483961 0.150684 0.0105827 +0.00023463 0.0985537 -0.0263753 +-0.0719091 0.107919 -0.010771 +0.0379248 0.0575872 0.0318029 +-0.0684803 0.169194 -0.0285889 +-0.0388617 0.099995 -0.0218283 +-0.0776097 0.0796169 0.0342011 +0.00633113 0.0553726 -0.0306713 +0.0163088 0.048977 0.0444188 +-0.0838449 0.0817176 0.00149669 +-0.0216263 0.0341828 -0.0204844 +-0.0187634 0.0728738 -0.0388715 +-0.0626025 0.0388129 0.0247151 +-0.0373475 0.0347779 0.0107604 +-0.00558664 0.0376733 -0.0253626 +0.0599615 0.0678313 0.0171716 +-0.0295401 0.0904607 -0.0275932 +0.0284451 0.114053 0.0325229 +0.0418253 0.0830818 -0.00779351 +0.00746772 0.0343056 0.0166757 +-0.0865698 0.0833108 0.0104907 +-0.0729271 0.151083 0.037025 +-0.0781924 0.155673 0.0158655 +-0.0788514 0.116332 -0.0048797 +0.00512317 0.107303 -0.0203142 +-0.0103272 0.0383585 0.0166568 +-0.0348025 0.040194 -0.0297923 +-0.000491404 0.0814979 0.0573536 +-0.0290382 0.16386 -0.00530596 +-0.0694805 0.121794 0.053195 +-0.0704544 0.150585 -0.0434585 +-0.0639717 0.0459278 0.00771742 +-0.03056 0.124009 -0.00164624 +0.0144021 0.0780973 0.054252 +-0.0808546 0.140749 0.0461596 +0.0103353 0.0581557 -0.0299403 +-0.00949578 0.084298 0.0576062 +-0.0249013 0.0382346 0.0282196 +-0.0316389 0.0409999 0.051064 +0.0387381 0.0381712 0.0065938 +-0.0580729 0.0345066 0.0402882 +-0.0663198 0.150167 -0.0356652 +-0.064292 0.168172 -0.0605879 +-0.0314424 0.0679449 -0.0244554 +0.0603913 0.0595429 0.0161691 +0.0102649 0.129908 0.00205228 +-0.0440813 0.0336392 -0.0114358 +0.0309277 0.0497348 -0.00874 +-0.0267697 0.0750695 0.0452054 +-0.0791015 0.170034 -0.0382691 +-0.0864283 0.0954013 0.00141653 +0.00852849 0.0646614 0.0551736 +0.0473561 0.0503594 -0.00438005 +0.039601 0.107391 0.00564087 +-0.0861267 0.0833147 0.0194823 +-0.0786738 0.10815 0.0335843 +0.043481 0.0832455 0.0271768 +0.0281352 0.0915776 0.0443357 +-0.0298099 0.0677811 -0.0284707 +-0.0229012 0.115018 -0.0157633 +-0.0270064 0.0808968 0.0494715 +0.0404227 0.0885874 -0.0107894 +-0.087216 0.0937177 0.0257149 +-0.0690509 0.0654544 -0.0025414 +-0.0695527 0.04187 0.00402445 +0.00429234 0.0668529 -0.0329804 +-0.046755 0.0336866 -0.0157033 +0.0576125 0.0580597 0.0234109 +-0.000994561 0.129288 -0.0011666 +0.0454245 0.0904044 0.0131633 +-0.0438081 0.0899046 -0.0222231 +0.0199328 0.127154 0.0141603 +0.0114882 0.0963254 0.0495798 +0.0218142 0.117368 -0.0105004 +-0.0438465 0.0359346 0.00839642 +-0.0714426 0.0632696 0.00712846 +-0.0759079 0.150006 -0.00888842 +-0.06794 0.126772 -0.00890268 +-0.0343726 0.127227 0.0072164 +0.0578211 0.0537494 0.00717652 +-0.0483087 0.135537 0.00740851 +-0.0568342 0.0666429 0.0356476 +0.0481112 0.0431114 0.00725444 +-0.0425043 0.117982 0.0312159 +0.0144699 0.0976455 0.0479677 +0.0563061 0.0508424 0.00620646 +-0.0300578 0.163895 -0.00500569 +0.0102245 0.0823018 -0.0318649 +0.0598453 0.0608733 0.0191849 +-0.0620027 0.172528 -0.0545971 +-0.0197571 0.0971344 0.046022 +-0.0611783 0.167226 -0.0592729 +-0.00613038 0.0999315 0.0488982 +0.0488619 0.047436 -0.000620948 +-0.0208111 0.118967 -0.0119295 +0.00352005 0.0786345 0.0561775 +-0.071061 0.15959 -0.0439233 +-0.0765957 0.161076 -0.0289322 +0.0259255 0.123359 0.0149571 +-0.0746094 0.14858 -0.0188631 +0.0569296 0.058069 0.024171 +-0.0338241 0.152569 -0.00489392 +-0.0455023 0.0615609 0.0388319 +-0.0654625 0.143948 0.0405383 +-0.0560519 0.0345032 0.0407254 +-0.0709341 0.162789 -0.0122264 +-0.078067 0.144487 -0.00381208 +-0.094099 0.121442 0.0152795 +-0.00327736 0.0410332 0.0476549 +-0.0500433 0.165539 -0.00195268 +-0.0774288 0.0712256 0.0238415 +-0.00725841 0.0408714 0.048906 +-0.0833667 0.142023 0.0429747 +-0.0692361 0.153199 0.0337122 +-0.0360543 0.0398378 -0.0294769 +-0.0403231 0.0344611 0.0371557 +-0.0207576 0.069984 -0.0381379 +0.0122374 0.0737871 -0.031159 +-0.0241603 0.0665253 0.044272 +0.0399369 0.0860773 0.0331939 +-0.0809073 0.123633 -0.00507492 +-0.00964827 0.166616 -0.0197629 +-0.00664529 0.1307 0.0129838 +-0.0209361 0.0381808 0.0128466 +-0.0538563 0.0970443 -0.0219059 +-0.0662078 0.0723697 0.0374848 +-0.0398566 0.099981 -0.0216989 +-0.0494761 0.0600183 0.034326 +-0.0157667 0.0742966 -0.0389627 +-0.0875711 0.0977385 0.0245274 +-0.0529166 0.0566407 0.0191372 +0.000745542 0.0955759 -0.0312149 +-0.0688619 0.10089 -0.0150284 +-0.0130273 0.178658 -0.0225027 +-0.00548585 0.118301 0.0387556 +-0.063934 0.169417 -0.04458 +0.00224686 0.131192 0.0191047 +-0.0526917 0.0662141 -0.0112413 +0.0316126 0.104759 0.0353509 +0.0222548 0.0776918 -0.0264111 +-0.0685061 0.105552 0.0384458 +-0.0576201 0.135609 -0.00546838 +-0.00760577 0.128788 -0.000526473 +-0.0262755 0.0383516 -0.00662702 +0.0096904 0.0344726 -0.0051827 +0.0183649 0.0355244 -0.0106716 +-0.0892922 0.0996701 0.0134013 +-0.0748707 0.116421 -0.00675171 +-0.054019 0.0333099 0.015848 +-0.0927402 0.125562 0.0292626 +-0.00859312 0.0384098 0.0205847 +-0.0574617 0.0399955 0.0466824 +-0.0890962 0.0996533 0.0114017 +-0.0393675 0.120945 -0.0119262 +-0.0498057 0.144755 0.010389 +-0.0800056 0.108388 0.0313605 +-0.0694061 0.153071 -0.0482738 +-0.0529002 0.0701503 0.0387731 +-0.00979568 0.178776 -0.0277733 +-0.0749384 0.177982 -0.0467773 +-0.080224 0.0913049 0.0343483 +0.0274404 0.0399547 -0.00370609 +0.0064659 0.11274 0.0407332 +-0.0218179 0.0350986 -0.0195001 +-0.0723907 0.151114 -0.0412874 +0.00590733 0.0340449 -0.020637 +0.0460177 0.0800284 0.0189631 +-0.0576496 0.0629466 -0.00612077 +-0.0519433 0.0503866 0.0326949 +0.0377573 0.0757194 -0.0117756 +0.0434133 0.0930689 -0.00182579 +-0.0445007 0.165214 0.00483168 +-0.0196553 0.063928 0.0497256 +-0.0766812 0.154876 -0.00631355 +-0.0344859 0.0335245 -0.0299041 +0.0132509 0.0349689 -0.0195966 +-0.0264467 0.0459901 0.0505652 +-0.00131456 0.122836 -0.0102349 +0.0122169 0.129551 0.00276868 +-0.0137494 0.0383366 0.00873382 +-0.0445005 0.116602 0.0322264 +-0.0346258 0.0408721 -0.0296689 +-0.0706305 0.0401508 0.00122659 +-0.0765009 0.0716493 0.0271716 +-0.0708234 0.155869 0.0257344 +-0.0311277 0.0566897 -0.0153882 +-0.0896944 0.133694 0.0395953 +0.000231967 0.0783204 -0.0356621 +0.0338144 0.115724 0.00791606 +-0.0300912 0.15662 0.000215848 +0.0464982 0.0677769 0.0257597 +-0.0214151 0.0595466 0.0459898 +-0.0572298 0.0696188 0.0382761 +0.0366123 0.064635 0.0370437 +-0.0264937 0.0973851 0.0437224 +0.0404949 0.0513767 0.0324659 +-0.0350844 0.107815 -0.0201106 +-0.0205025 0.0486482 0.0489372 +-0.0610181 0.13697 -0.00676267 +-0.0906044 0.135075 0.015212 +-0.0194066 0.174211 -0.0159442 +-0.0394983 0.0719214 0.0419294 +-0.0883414 0.120307 0.04718 +-0.00748928 0.0978336 0.0520944 +-0.0846404 0.107661 0.0233457 +-0.0214945 0.10716 0.0418366 +0.0181073 0.0398088 -0.0196993 +0.0190777 0.0384168 -0.0157069 +-0.0636502 0.159498 -0.051954 +0.0283128 0.0754542 0.0444772 +-0.054074 0.15164 -0.0027148 +-0.083614 0.154208 0.0184012 +-0.056485 0.0343785 0.0390076 +0.0337482 0.102096 0.0349353 +-0.0782584 0.1764 -0.0490322 +0.0136057 0.0460076 0.0440344 +-0.00550326 0.0801395 0.0576107 +0.0334132 0.0849144 0.041374 +-0.0113988 0.126257 0.0287047 +-0.0655972 0.169628 -0.0389928 +-0.0832568 0.154212 0.0141255 +-0.0820934 0.0898659 0.0320222 +-0.067283 0.17966 -0.0595334 +-0.062529 0.150617 -0.0195776 +-0.0299377 0.0847457 -0.0326018 +0.0607552 0.0664989 0.0131533 +-0.0228597 0.101618 -0.023963 +-0.0618668 0.165619 -0.0600772 +-0.081854 0.0937329 -0.00756112 +-0.0679516 0.170855 -0.0560296 +-0.0295118 0.108456 0.0388793 +0.0482509 0.0539799 0.0309574 +0.00823122 0.079605 -0.0335706 +-0.0526044 0.041455 0.0460966 +-0.0496802 0.165544 -0.00294037 +-0.0910152 0.129688 0.0372352 +-0.0404973 0.0972715 0.0419896 +0.00850648 0.0772375 0.0559821 +-0.0717922 0.153989 -0.0428988 +-0.0507334 0.147965 -0.00270623 +0.0127323 0.0860509 0.0536553 +0.0565626 0.0508082 0.0192018 +-0.047499 0.10845 0.0392246 +-0.00917487 0.0875708 -0.0370938 +-0.0783316 0.0788746 0.032897 +-0.0896787 0.135012 0.00721892 +0.00550113 0.0883518 0.0561015 +-0.0423419 0.0335706 -0.0240051 +0.0405574 0.104219 0.0191648 +0.00286437 0.130486 0.00148286 +-0.0643911 0.133918 0.0402655 +-0.0620868 0.139878 -0.00655442 +-0.0557051 0.12209 -0.00891575 +0.0589396 0.0566475 0.0201757 +0.0386112 0.0603508 -0.0077511 +-0.0806595 0.0855046 -0.00754297 +-0.0718229 0.0965348 -0.0152102 +0.0459498 0.0806271 0.0191734 +-0.0515557 0.141366 0.000880581 +-0.0859779 0.0910726 0.0273961 +-0.0194809 0.0757644 0.0547346 +-0.0526104 0.0335154 0.00699108 +-0.080479 0.155159 0.0180021 +-0.0500595 0.117739 -0.014504 +-0.0638596 0.0939187 -0.018635 +-0.0469776 0.034208 0.0289371 +0.0315208 0.0994913 0.038731 +0.0444927 0.0610909 0.0304355 +0.0212529 0.1262 0.0189269 +-0.0254692 0.0509386 0.0434079 +0.0476579 0.0715472 0.019969 +0.022698 0.118017 -0.00920048 +-0.0384222 0.125448 0.0219859 +-0.038314 0.170034 -0.0122167 +-0.0530543 0.14469 0.0223994 +-0.00492317 0.0389099 -0.00470281 +0.0373499 0.0533605 -0.00643641 +-0.0696712 0.171569 -0.0347594 +0.0436954 0.0959268 0.0201595 +0.0285253 0.065965 0.0429423 +-0.0466394 0.0345455 0.0392313 +0.0412883 0.0886287 0.0299331 +-0.0251747 0.0383636 -0.0175696 +-0.0674763 0.168038 -0.0560148 +-0.0634115 0.166723 -0.0396505 +-0.0443984 0.0671335 0.0404051 +-0.0524987 0.100127 0.0423619 +-0.0837023 0.110333 0.0361338 +-0.0757541 0.0819089 0.037226 +-0.0475033 0.0973719 0.0436212 +-0.0418104 0.0899475 -0.0227382 +-0.0308563 0.174216 -0.00433975 +-0.00771604 0.130016 0.0212618 +-0.0691125 0.156051 0.011784 +-0.049655 0.0664173 -0.0130805 +0.0212145 0.0401172 -0.0107008 +-0.0418108 0.128972 0.0103834 +-0.0623408 0.164683 -0.0455908 +-0.0776167 0.145877 -0.00384676 +0.0294578 0.079544 0.0444105 +-0.052057 0.15088 0.0153954 +0.0551015 0.0521065 0.00221795 +-0.0568769 0.116868 -0.0135067 +-0.0856284 0.151402 0.00824006 +-0.0512523 0.116429 -0.0151143 +-0.0568623 0.0941345 -0.0215512 +-0.0153943 0.099814 0.0443638 +0.0368805 0.101462 -0.00941022 +-0.0293998 0.0355494 -0.0195486 +-0.040872 0.105663 -0.0204372 +-0.0279821 0.0821961 0.0475971 +-0.0106963 0.176084 -0.0292514 +-0.00933224 0.038323 0.0168951 +-0.0792032 0.10313 -0.00756064 +-0.0540718 0.118333 0.0357708 +0.00450074 0.0938217 0.0540732 +-0.0746595 0.15617 0.0170913 +-0.0708414 0.0994113 -0.0147342 +-0.0516111 0.0530832 -0.00753985 +-0.0486234 0.0532712 -0.0094518 +-0.031704 0.172718 -0.00384226 +-0.00272576 0.130091 0.00149765 +-0.092388 0.120024 0.00928585 +-0.037643 0.153612 0.00331291 +0.0356049 0.0577583 0.0355158 +-0.0668801 0.103821 -0.0153002 +0.0379456 0.10977 0.0171703 +0.0191769 0.0959952 -0.0230407 +0.0391807 0.0658814 0.0336832 +-0.0690863 0.0666121 0.0278101 +-0.089106 0.114375 0.0298659 +-0.0216155 0.0436703 -0.028439 +-0.0266188 0.0490904 -0.0254391 +0.000108091 0.0340814 -0.0198793 +-0.0171613 0.159788 -0.00903074 +0.041574 0.0397142 0.0168995 +0.019656 0.0347604 0.000281692 +0.00764804 0.128583 -0.00254334 +-0.0553782 0.151032 0.0287496 +-0.0528315 0.0558373 -0.00742005 +0.0115037 0.109883 0.0397133 +0.03545 0.105907 -0.00815474 +-0.0629114 0.115341 -0.0117985 +-0.0234208 0.172725 -0.0129655 +-0.0890673 0.101028 0.0173829 +0.0236359 0.056409 0.0445932 +-0.0187325 0.0374026 0.0529482 +-0.0394792 0.105608 0.0388858 +0.0151319 0.0603601 0.0498992 +-0.080949 0.137599 -0.00280806 +-0.0546196 0.0345652 0.0426785 +-0.0465281 0.033544 -0.0026564 +0.0395657 0.0998694 -0.00580754 +0.0101223 0.108705 -0.0195083 +-0.0104988 0.09255 0.056119 +0.0330296 0.116688 0.0147767 +-0.0910722 0.141959 0.0151878 +-0.00849613 0.0703395 0.0565554 +-0.0574961 0.0904385 0.0452768 +-0.0530142 0.0490552 0.0256583 +-0.0294931 0.0717523 0.039896 +-0.0311676 0.0348856 0.0474529 +-0.00876366 0.0347363 0.0436201 +-0.0666703 0.0612745 0.0188657 +0.0173575 0.0940342 0.0480767 +0.0284806 0.111435 0.0343318 +-0.0468308 0.0941893 -0.021914 +-0.0265985 0.0562164 -0.027412 +-0.0871843 0.135176 0.0441499 +-0.063207 0.06374 0.0280276 +-0.0345021 0.0647803 0.0405279 +0.0597837 0.0567045 0.0121686 +-0.0474843 0.0818872 0.0439119 +-0.0589237 0.11399 -0.014753 +-0.0490056 0.122549 0.0307687 +0.0548584 0.0611516 -0.00113589 +-0.0458004 0.0353434 -0.021332 +0.00134052 0.0539375 -0.0306386 +-0.0278278 0.177181 -0.00696301 +-0.0427537 0.0783105 -0.0194623 +0.00651372 0.089712 0.0551929 +-0.0494951 0.0819134 0.044146 +0.0305588 0.055351 -0.0157687 +0.0297469 0.0929269 0.0431563 +0.0125099 0.0519837 0.0495237 +0.0459653 0.0806289 0.018177 +-0.053548 0.149321 0.0244145 +-0.0317948 0.0651814 -0.020436 +-0.019834 0.0868717 -0.0379507 +-0.0119886 0.038466 0.00715809 +-0.0770198 0.170132 -0.03325 +-0.0269539 0.17866 -0.00745161 +-0.0756616 0.0695139 0.0239361 +-0.0474944 0.116586 0.0319739 +-0.0671319 0.0355924 0.0145398 +-0.0783661 0.108548 -0.00557568 +-0.0284012 0.0860445 -0.0346283 +0.0257301 0.0379057 0.0280361 +0.00740689 0.0389878 -0.0235836 +-0.0629696 0.131105 0.0405653 +-0.0380606 0.157756 -0.011216 +-0.0361107 0.0459963 0.0412564 +-0.053455 0.0625326 0.0304805 +-0.0731839 0.178324 -0.0475338 +0.0137018 0.0888713 -0.0301465 +-0.0894038 0.140678 0.0331776 +-0.0114925 0.06602 0.0547394 +-0.0853984 0.0872002 -0.00151975 +-0.00957697 0.128995 0.00181181 +0.0571986 0.0536922 0.00517882 +0.0181761 0.0974249 -0.0228373 +0.0414526 0.0425673 -0.000513932 +-0.0423634 0.121318 -0.0123099 +-0.0854479 0.0898939 -0.00155092 +-0.0136017 0.0392183 -0.0267222 +-0.0353577 0.174409 -0.00212011 +-0.0930586 0.122743 0.0102788 +0.0208421 0.0882147 -0.0254487 +0.000267595 0.0697483 -0.0342392 +0.0443612 0.0458824 -0.00271937 +-0.0794062 0.147442 0.0402641 +0.0285362 0.120755 0.0202147 +-0.0354498 0.0346389 0.0415402 +0.0189212 0.0875932 -0.0268145 +-0.0326685 0.0478014 -0.0229356 +0.0213046 0.0374522 0.0382518 +0.0119628 0.111848 -0.018535 +-0.0754368 0.114522 0.050709 +-0.0575342 0.0415089 -0.00843308 +-0.0289002 0.0348381 0.0445217 +-0.0558188 0.0336396 0.0205147 +-0.0294901 0.0946648 0.0450535 +0.0140142 0.0519753 0.0481823 +-0.0499383 0.162625 -0.0047964 +-0.0285131 0.111188 0.0369648 +-0.0777024 0.176292 -0.0501047 +-0.0458377 0.0970756 -0.021885 +-0.0647866 0.167644 -0.0344082 +-0.08472 0.111015 0.033569 +-0.0624074 0.1491 -0.0095736 +0.0455563 0.078849 0.0217954 +0.0386173 0.0673644 -0.0117551 +-0.0516941 0.147804 0.0164166 +-0.0638593 0.0953482 -0.0183667 +-0.0887889 0.117194 0.003272 +-0.0667452 0.0342007 0.0124321 +-0.0921816 0.132336 0.0152245 +-0.0790475 0.168047 -0.0349702 +-0.0445079 0.0424992 0.043443 +-0.0914924 0.12135 0.00727423 +0.00205109 0.0347195 0.0440743 +-0.0757523 0.0687815 0.0210323 +0.0254197 0.0394349 0.0320923 +0.0445209 0.095967 0.011159 +0.00418461 0.0908826 -0.0329329 +-0.0447434 0.0753343 -0.0181391 +0.0465277 0.0497043 0.0301725 +-0.0231678 0.124994 -0.000333927 +-0.0261386 0.0359205 -0.0192491 +0.000314733 0.0597904 -0.0332055 +-0.0664067 0.0336797 0.00582425 +-0.0179785 0.068344 0.053543 +0.0128834 0.035495 0.00385056 +-0.064012 0.0432207 0.0306772 +0.0356112 0.0942094 0.0375896 +0.0433586 0.0589158 -0.00469925 +-0.0741431 0.153026 0.0335308 +-0.0366764 0.0421455 0.0447176 +-0.0616357 0.158429 -0.0245888 +-0.0777899 0.164478 -0.0251991 +-0.0774203 0.177255 -0.0472003 +-0.0723466 0.0663158 0.0221054 +-0.00945876 0.0366145 -0.0165831 +-0.00782909 0.0896438 -0.0364286 +-0.0483458 0.0338972 -0.0143683 +-0.0548931 0.111218 -0.0174922 +0.0263272 0.0545944 -0.0208638 +-0.078467 0.147461 0.0407301 +0.0472196 0.0430325 0.00527833 +0.0313294 0.118714 0.0127065 +-0.00880796 0.0868775 -0.037347 +-0.054028 0.0344996 0.0411656 +-0.00639115 0.121199 -0.012466 +0.0300864 0.0564003 0.0398351 +-0.0790124 0.0782686 0.0315155 +-0.0134683 0.0964232 0.0523159 +-0.0763221 0.159003 -0.0110053 +-0.0600876 0.0367271 0.0456071 +0.0364957 0.049851 0.0316154 +0.00849848 0.0402756 0.0453316 +0.0205837 0.0754832 0.0508919 +-0.071014 0.148895 -0.037822 +0.0170761 0.115474 -0.0144429 +-0.063767 0.0615586 0.0227478 +0.0437965 0.0987467 0.00816432 +-0.0513326 0.0542594 0.0137993 +-0.0414552 0.0341096 -0.00949275 +0.0395669 0.101281 -0.00480928 +-0.0918243 0.128307 0.0322434 +-0.0474749 0.0945717 0.0440635 +-0.0704486 0.16924 -0.0264473 +0.027192 0.101376 -0.017349 +-0.0895884 0.114751 0.0258504 +-0.0713206 0.156784 -0.042915 +0.0384501 0.0914717 0.0346309 +0.0214747 0.0996539 -0.0214946 +-0.0106582 0.0527176 -0.0332954 +0.00773558 0.128847 0.0268569 +0.0202904 0.0912514 -0.02462 +0.00332905 0.0553943 -0.0309954 +-0.0921247 0.116117 0.0353113 +-0.0146765 0.0526113 -0.0325234 +-0.0657759 0.0410192 0.0130518 +0.0587274 0.0538199 0.013179 +0.0291394 0.102042 -0.0160578 +-0.0701142 0.0625797 0.0062174 +0.0457389 0.0876049 0.0111625 +0.00224905 0.118538 -0.0156887 +0.0520156 0.0596733 -0.00368903 +-0.0891532 0.136419 0.0102028 +-0.0400348 0.0344619 0.0337052 +-0.0461887 0.0335082 0.00469546 +-0.0923435 0.115998 0.0113188 +-0.00713141 0.127357 0.0287426 +0.0252624 0.0747714 -0.0251152 +-0.0453044 0.0587827 0.038737 +0.03635 0.0368836 0.00917982 +-0.0527446 0.0753599 -0.0182797 +-0.0728584 0.132623 0.0509226 +-0.00672844 0.0698676 -0.0361675 +0.0413912 0.0459759 -0.00421898 +-0.0201655 0.0348026 0.0446658 +-0.0641545 0.0391804 0.0263583 +-0.00246627 0.111608 -0.0202454 +-0.0134033 0.110892 -0.0194483 +0.043074 0.0401669 0.0073914 +0.0192967 0.0693907 -0.0288221 +-0.0619039 0.16157 -0.0305885 +0.00333358 0.0341967 0.0104872 +0.0421258 0.100042 0.000179811 +-0.0386776 0.11516 -0.0158482 +-0.00807178 0.0386982 0.0276584 +-0.0756134 0.163772 -0.0350068 +-0.0672387 0.155112 0.00519073 +0.0276118 0.053509 0.0397341 +-0.0779406 0.158305 -0.0189233 +-0.00470743 0.0627772 -0.0352137 +0.0325643 0.0981766 0.0384761 +0.0296733 0.0481683 -0.00874324 +0.0113105 0.059545 -0.0296135 +-0.0653574 0.0733073 0.0386226 +-0.0120884 0.101067 0.0439606 +-0.0268179 0.0735627 0.0438663 +-0.0513902 0.0530791 0.0216216 +-0.0678614 0.042287 0.00944731 +-0.0899071 0.133806 0.0352156 +-0.0122404 0.0385117 0.0269697 +-0.0719375 0.16298 -0.0125698 +0.0473212 0.0533258 -0.00537345 +-0.030503 0.0588732 0.0373493 +-0.0905557 0.120241 0.0451196 +0.0219406 0.0388423 0.0393076 +-0.0672891 0.178209 -0.0595336 +0.0302182 0.0535528 0.0382346 +-0.0815406 0.110006 0.0333062 +-0.0477684 0.0811966 -0.0205178 +-0.048671 0.138621 0.0113976 +-0.0562999 0.0506286 -0.00237306 +-0.0854189 0.0791501 0.00750351 +0.000105856 0.117482 -0.0165473 +-0.0624071 0.149633 -0.00268499 +-0.0682914 0.172271 -0.0560251 +-0.0642448 0.0333797 -0.00245942 +0.0203456 0.053671 -0.0267089 +-0.0711203 0.163576 -0.0137477 +-0.0126641 0.0511309 -0.0317686 +-0.066211 0.180426 -0.0565833 +0.0266688 0.0892152 -0.0224539 +0.01736 0.128384 0.0132094 +-0.0541813 0.154195 0.0142529 +-0.0799749 0.0710714 0.0163832 +-0.0379044 0.0336424 -0.0213286 +-0.0747588 0.0669346 0.0175421 +-0.0221189 0.12668 0.005878 +-0.0623544 0.152149 -0.0255836 +0.0137867 0.0377633 0.0443361 +0.0469104 0.0589185 -0.00506663 +-0.0188119 0.0964492 -0.0282644 +-0.000384494 0.130522 0.00237337 +-0.0647338 0.0418755 0.0296857 +-0.0418518 0.0999485 -0.0214177 +-0.0135206 0.0432479 0.0507363 +0.0314548 0.113206 0.0298812 +0.0211096 0.0343656 0.00467028 +0.0493524 0.0516707 -0.00371978 +0.0324504 0.0916248 0.0417895 +-0.0405477 0.118695 -0.0135582 +-0.0421609 0.128746 0.00435225 +0.00852878 0.034888 0.0362651 +-0.0599768 0.12527 -0.00809043 +-0.0624255 0.16468 -0.0465913 +0.0305387 0.114047 0.0302625 +-0.0209297 0.158088 -0.00822134 +-0.00449554 0.0633716 0.0561592 +0.00751849 0.0440876 0.0454461 +-0.0617319 0.160008 -0.0275856 +-0.00111302 0.130629 0.0207594 +-0.000792652 0.0894877 -0.0349748 +-0.0534886 0.0862338 0.0454573 +0.0102426 0.0752832 -0.032327 +-0.0866178 0.151117 0.0269024 +0.00586712 0.0991316 -0.0229749 +-0.018487 0.0772258 0.0557066 +-0.0220963 0.0623062 0.0451655 +-0.0263156 0.124827 0.00142734 +0.00449781 0.0519669 0.0532713 +-0.0318681 0.105727 -0.021166 +-0.034171 0.0822565 -0.0245355 +-0.0160192 0.104518 -0.0227486 +-0.0336086 0.0394857 -0.0301589 +0.0179261 0.0900567 0.048881 +0.028994 0.0915879 0.0438177 +0.0419459 0.0625408 -0.0027477 +-0.0623435 0.161536 -0.0425937 +0.0521127 0.0595383 0.0295528 +0.00603967 0.0344425 -0.0152712 +-0.0200036 0.0384998 -0.0166705 +0.0335055 0.0549395 0.0359782 +0.0413899 0.0475369 -0.00516876 +0.0571049 0.0594437 0.0244408 +-0.0642323 0.124186 0.0475964 +-0.0104933 0.0952299 0.0545267 +0.0183283 0.0593891 -0.0275077 +0.0556724 0.0698728 0.00398853 +0.02895 0.086199 0.0437135 +-0.00575467 0.1008 0.0460186 +-0.0117555 0.0969094 -0.0306933 +-0.0570352 0.129621 -0.00626418 +-0.06396 0.034704 0.0249317 +-0.0269668 0.0674701 -0.0325423 +0.00372222 0.0941665 -0.0317421 +-0.0708312 0.0951391 -0.0158707 +0.0351494 0.0633173 0.038442 +0.0303372 0.119206 0.0194646 +-0.0174811 0.118153 0.0357243 +-0.0928105 0.116053 0.0203106 +-0.012498 0.078722 0.0572931 +0.0102589 0.100444 -0.0223447 +0.0311369 0.0982118 0.0399163 +-0.0870966 0.0995146 0.0044219 +0.0372771 0.100696 0.0312566 +-0.0464652 0.16842 -0.00496016 +-0.0340766 0.172586 -0.0145127 +-0.0632966 0.144361 -0.00960502 +-0.00396533 0.128634 -0.00247998 +-0.0810179 0.0964125 -0.00756981 +-0.0296304 0.159454 -0.0131553 +0.0323433 0.0592178 0.0396143 +0.0171685 0.0490344 0.0439112 +-0.0798847 0.0706373 0.0145533 +0.00550249 0.0758881 0.0564988 +-0.0285046 0.0588067 0.036767 +-0.054422 0.152991 0.0228754 +-0.0663081 0.150341 0.0377708 +-0.0409099 0.173193 -0.0056112 +-0.00259587 0.0391262 -0.0253465 +0.0394316 0.0807401 0.0342345 +0.048793 0.049707 0.0281736 +-0.0225905 0.0365035 -0.0286129 +-0.0185117 0.0387718 -0.0147573 +-0.0889514 0.121274 0.00229944 +0.0255827 0.034587 0.0128177 +-0.0258582 0.100162 -0.023852 +-0.0317095 0.0382098 0.0512104 +-0.0608875 0.104029 -0.0182853 +-0.0577034 0.0591273 0.0216745 +-0.0316861 0.0553325 -0.0133983 +-0.0579004 0.0336435 0.0147513 +-0.050636 0.0604891 -0.0105672 +-0.0484979 0.101507 0.0419588 +-0.0735846 0.159652 -0.032921 +-0.0596849 0.136693 0.0347693 +-0.0527883 0.0490273 0.0246529 +-0.00587038 0.038496 0.0083708 +0.0443161 0.095966 0.0141619 +-0.0355281 0.0832646 0.0432735 +-0.0552893 0.160933 0.00328411 +-0.0694051 0.177621 -0.0490523 +0.0553162 0.0608807 0.0271604 +-0.0115038 0.082913 0.0576973 +0.00149573 0.118307 0.0388892 +-0.0643923 0.178295 -0.0607754 +-0.0696234 0.0702067 -0.00731499 +-0.0684446 0.156174 0.0134711 +-0.0631402 0.158352 -0.0425984 +-0.028277 0.0807444 0.0465032 +-0.0851037 0.143224 0.00618561 +-0.0701909 0.171451 -0.0335218 +-0.0542038 0.149302 0.0263885 +-0.0230864 0.0416339 0.0540702 +-0.0848397 0.124371 0.0492354 +-0.0509437 0.0349503 0.0448676 +0.0147035 0.0490065 0.0456198 +-0.059742 0.156334 0.00641085 +-0.07522 0.0688188 0.0015368 +-0.0196569 0.0390707 0.0375255 +0.0459174 0.0834201 0.0141703 +-0.0785236 0.0894249 -0.0105705 +-0.0200463 0.0893341 0.0549931 +-0.0173075 0.11558 -0.0164072 +0.000516136 0.0760027 0.0580883 +0.042165 0.0859172 -0.00778247 +0.0203197 0.0664896 -0.0280597 +-0.0604906 0.0959808 0.043977 +-0.00180047 0.0840422 -0.0369301 +0.0106204 0.119324 -0.014581 +0.000242427 0.128645 -0.00250259 +-0.0544918 0.0876045 0.0451014 +-0.081252 0.0993542 0.0322994 +0.0225815 0.0632207 0.0466294 +-0.0528036 0.129718 0.0341858 +0.0388075 0.10554 0.0251669 +-0.071237 0.156366 0.0212013 +-0.0419921 0.0349859 0.0415962 +0.0319555 0.0413937 0.028007 +-0.0465003 0.112564 0.0357108 +0.00310161 0.111606 -0.0202814 +0.0306552 0.102095 0.0374778 +0.0158981 0.0576764 0.0492073 +-0.036508 0.127508 0.00348399 +0.0403284 0.0574912 -0.00511853 +-0.06805 0.157495 -0.00534926 +-0.0870566 0.0847034 0.0124776 +-0.0785035 0.127443 0.053282 +0.0093755 0.0479282 -0.0271091 +-0.00151782 0.111398 -0.0200294 +-0.0386619 0.0336282 0.00792475 +-0.0321818 0.0666221 -0.0204419 +-0.0516478 0.0334795 -0.00363494 +-0.0505323 0.0346392 0.0434961 +-0.0871097 0.129792 0.0470428 +-0.00115829 0.0378141 0.0044798 +0.00250327 0.0351261 0.00210209 +0.0232927 0.0720269 -0.0262872 +0.0386441 0.0772022 -0.0107761 +0.00730214 0.0624461 -0.0313742 +-0.0601285 0.0334799 -0.007174 +-0.0311809 0.165241 -0.0158459 +-0.0456556 0.126096 -0.00729728 +0.01482 0.0920349 -0.0274402 +-0.0578658 0.154169 0.0274197 +-0.0766831 0.148629 -0.00786722 +-0.0548976 0.0574275 -0.00541424 +-0.0213746 0.0936314 -0.0333712 +-0.0795038 0.127439 0.0531413 +-0.0719602 0.0381531 0.00797803 +0.0465231 0.0539629 0.0319545 +-0.0327551 0.126411 0.00489661 +-0.0907403 0.135093 0.0162106 +-0.0798437 0.119249 -0.00499812 +-0.0195891 0.186548 -0.0163318 +-0.0336818 0.0474202 0.0430149 +0.0387003 0.0847793 0.034951 +0.005123 0.108732 -0.0201833 +-0.0355723 0.127236 0.00383072 +-0.0593755 0.0706339 0.0387044 +-0.0701237 0.0337481 0.00141754 +-0.0596389 0.0645563 -0.0073211 +-0.0247044 0.0349045 0.050534 +-0.0698349 0.155896 0.010068 +-0.00664542 0.0496313 -0.030799 +-0.0560508 0.049202 -0.00336342 +-0.0846449 0.0777798 0.00851725 +0.0428444 0.0958802 0.0241636 +0.0226208 0.0505695 0.0412719 +-0.0421939 0.165153 -0.0106292 +-0.0530779 0.153128 -0.00337034 +-0.0183995 0.128105 0.0144964 +0.0110096 0.125946 -0.00574203 +0.0135498 0.109816 -0.0183273 +0.0246987 0.1167 0.0323736 +-0.0323986 0.169744 -0.00487272 +0.0414995 0.0513848 0.032599 +-0.0820948 0.0748388 0.0105311 +-0.0771842 0.102138 0.0352151 +-0.0627985 0.161541 -0.0235962 +0.0203907 0.0490438 0.0415331 +-0.0284862 0.120462 -0.00941436 +0.00850898 0.0990197 0.0481875 +0.0181919 0.0781799 0.0527467 +-0.0323958 0.0383608 -0.00233468 +-0.0198811 0.121697 -0.00881459 +-0.0289402 0.154865 -0.00285823 +-0.055522 0.0600566 -0.00554029 +-0.0446949 0.0680713 -0.0159309 +-0.0505296 0.0657745 0.0361047 +0.0251595 0.0995713 -0.0194056 +0.0456643 0.0876028 0.0121678 +-0.0533672 0.143136 0.0253913 +-0.05283 0.138085 0.0270749 +-0.0324865 0.0974182 0.0443398 +0.00543862 0.118556 -0.0157347 +-0.0704807 0.1602 -0.00768602 +0.00476485 0.0378127 -0.0129945 +0.0453303 0.0875809 0.0171699 +0.00844159 0.109753 0.0403226 +0.0199305 0.0645206 0.0480779 +-0.0865012 0.0967606 0.00143514 +0.0239407 0.0433254 -0.00969837 +-0.0464991 0.0818806 0.0436011 +-0.0365053 0.0832925 0.043701 +-0.0511539 0.144707 0.0143676 +-0.0354688 0.0973337 0.0432864 +0.0315086 0.0361416 0.0180806 +-0.0620392 0.152203 -0.0175795 +-0.00174908 0.0726707 -0.0356483 +0.0482658 0.0482112 0.0273759 +0.0205204 0.0686316 0.0489712 +0.0055446 0.129937 0.0246284 +-0.0509363 0.126898 0.0333376 +0.0503401 0.0525815 0.0286903 +-0.0663805 0.0356243 0.0152158 +-0.0631059 0.039729 0.0160762 +-0.0794629 0.0702542 0.0118898 +-0.0440204 0.0437247 -0.0153148 +-0.0258047 0.0811626 -0.0373791 +-0.0654527 0.156561 -0.05302 +-0.0801896 0.0926573 0.034266 +-0.0226625 0.0493576 -0.0281762 +-0.076512 0.15561 -0.00689633 +-0.0316228 0.0384779 -0.00967109 +0.0073096 0.0609801 -0.0307365 +-0.036779 0.0827886 -0.0223365 +-0.0454595 0.0846983 0.0440929 +-0.0310517 0.0636961 -0.0214339 +0.044971 0.0748214 0.0226935 +-0.0245671 0.182966 -0.016053 +-0.0343794 0.125292 -0.00246071 +0.0260218 0.0493062 -0.0196675 +0.00451349 0.0786214 0.0559314 +-0.0272596 0.0409813 0.0537728 +-0.0865558 0.105007 0.0203641 +-0.0427952 0.0347556 0.00787321 +-0.0294944 0.0889496 0.044252 +-0.0691615 0.0832998 0.0419252 +-0.077704 0.175863 -0.0450747 +-0.0595653 0.0407951 0.0449735 +-0.0118194 0.129824 0.0125318 +-0.0304269 0.169744 -0.0072967 +0.00750596 0.0674413 0.055134 +-0.0895098 0.0942825 0.014433 +0.0566953 0.0550372 0.00319006 +0.0358581 0.0995241 -0.0113664 +-0.0541815 0.15229 0.0244282 +-0.0924737 0.125588 0.0362608 +-0.0750911 0.110634 0.0449752 +-0.0272685 0.0368017 0.0538626 +-0.0614955 0.104283 0.0410789 +-0.0721148 0.067315 0.0248191 +0.034236 0.094243 0.0391072 +-0.0724407 0.178857 -0.0487083 +-0.06691 0.033448 -0.00125687 +-0.0660379 0.0349778 0.0329828 +-0.0701097 0.156012 0.00122102 +-0.0157478 0.0352634 0.050467 +-0.0465076 0.160794 0.0071118 +-0.0156218 0.0365183 -0.0177136 +-0.00687536 0.0389886 0.0330493 +0.0201949 0.0959886 -0.0227072 +0.00536718 0.125777 0.0317922 +-0.0689036 0.105186 -0.0135662 +-0.0576505 0.0508003 0.0036576 +-0.0372877 0.0353832 0.0246264 +-0.0766222 0.0824671 -0.0115781 +-0.0570813 0.0344654 0.0405363 +0.0284042 0.0431456 -0.00552671 +-0.078005 0.151454 -0.00188508 +0.00274784 0.0953419 -0.0309592 +-0.0764328 0.147234 -0.00786196 +-0.0187399 0.0656914 -0.0372373 +-0.0626784 0.0670893 0.0340154 +-0.066213 0.0377522 0.0375383 +0.00946024 0.0346841 0.0420404 +-0.00763703 0.046711 -0.0299661 +0.0217664 0.106013 0.0404033 +0.0159395 0.0900955 0.0512828 +-0.0714939 0.126019 0.0527835 +-0.035368 0.122868 0.0260927 +0.0397669 0.0885289 -0.0117744 +-0.0235296 0.159196 -0.00227474 +-0.0299919 0.0383903 -0.00556396 +0.00840449 0.0360838 -0.0229864 +-0.0688351 0.0951745 -0.0162656 +0.0188202 0.124811 0.0265908 +-0.0542034 0.0477679 0.0266683 +-0.00718512 0.0384992 0.0226001 +0.0191993 0.0352366 0.0345338 +-0.0486962 0.13553 0.00541025 +0.0065027 0.0533154 0.0528127 +-0.064997 0.0410349 0.013689 +0.0235192 0.107033 0.0392433 +-0.0526101 0.0632972 -0.0100113 +0.0288769 0.120252 0.0217702 +-0.00882418 0.0896578 -0.0365764 +-0.0563459 0.0335397 0.00260276 +0.0287652 0.114389 -0.00726895 +0.0564669 0.0577845 0.00118215 +-0.0623836 0.163016 -0.0556039 +-0.0235351 0.118111 0.0331575 +0.0443232 0.0889197 0.0231574 +0.0349753 0.114037 0.00545779 +0.0269837 0.108749 0.0374141 +-0.000496913 0.056284 0.0547664 +-0.0889882 0.115854 0.0042936 +-0.0688144 0.0851338 -0.0175228 +-0.0304795 0.0746468 0.0405648 +-0.0616784 0.0692367 -0.0132074 +-0.0554108 0.0334149 -0.00799207 +-0.0610813 0.0342293 0.0311986 +-0.0655517 0.155937 0.0246661 +-0.0767597 0.163153 -0.0191399 +-0.0140741 0.0388251 0.0317136 +-0.02858 0.0731702 0.040795 +-0.0480086 0.134685 0.0198054 +-0.00949027 0.107257 0.0434611 +-0.0224071 0.0510134 0.0440995 +0.0026516 0.0341771 0.00670019 +-0.00282121 0.086807 -0.0363939 +0.00461042 0.092806 -0.0323339 +0.0444404 0.0425371 0.0222477 +-0.0251232 0.0838362 0.0531591 +-0.0711154 0.155676 0.00670049 +-0.0144639 0.0977101 -0.0275565 +-0.0176152 0.0407641 -0.0279656 +-0.0273216 0.038344 -0.00129213 +-0.0781679 0.14865 -0.00288263 +-0.071113 0.171733 -0.033865 +-0.0362701 0.0365605 0.0458807 +-0.0245074 0.0384654 -0.0082311 +-0.0768529 0.106269 -0.00826114 +0.0173624 0.088714 0.0498122 +-0.0872512 0.106353 0.0133638 +-0.0647985 0.124215 0.0485 +0.0274255 0.0686124 0.0431235 +-0.0275944 0.0717748 -0.0345689 +-0.00449702 0.0590031 0.0543234 +-0.00869265 0.0598566 -0.0344628 +-0.0624896 0.106999 0.0393995 +0.00296819 0.0986498 -0.0244883 +-0.0716108 0.0701594 -0.00639514 +-0.0454969 0.0733342 0.042072 +0.0217583 0.0505253 0.0417779 +0.0599479 0.0692188 0.0141571 +0.0159709 0.0859869 -0.0291978 +0.0474137 0.0671743 0.000684928 +0.045537 0.0890033 0.0131643 +0.025235 0.0690602 -0.0242719 +-0.0140104 0.117853 -0.0148385 +-0.0417786 0.156522 0.00614116 +0.0529468 0.0608894 0.0290245 +-0.0623778 0.167137 -0.0608155 +-0.043781 0.0422821 -0.0183128 +0.0194047 0.0727279 0.0509389 +-0.025431 0.180214 -0.00870569 +0.00163035 0.0962275 -0.0299038 +-0.0609057 0.119508 -0.00974426 +-0.0265539 0.180361 -0.00771033 +-0.00586693 0.104511 -0.0229142 +-0.0446124 0.0534121 -0.0108089 +-0.0607974 0.125499 0.0419374 +-0.0676844 0.160922 -0.0559942 +-0.0718937 0.0376106 0.00231258 +-0.0769618 0.103489 0.0349575 +-0.0136243 0.0450811 -0.0280269 +-0.0656393 0.145367 0.0403005 +-0.067848 0.0994807 -0.015636 +-0.0674005 0.156127 0.0138467 +-0.0814089 0.141772 -0.000809353 +0.0343092 0.113032 0.0252402 +-0.0378129 0.0900392 -0.0237743 +0.0410972 0.0779427 0.031296 +-0.0594968 0.104294 0.0413247 +-0.045045 0.0657131 0.0396946 +0.0424943 0.0569701 0.0318321 +0.0380924 0.0618152 0.0338774 +-0.0181385 0.038277 0.0223668 +-0.0680503 0.114246 0.0489904 +-0.089636 0.0902445 0.0164491 +-0.0259323 0.124597 0.000115117 +-0.0341212 0.124555 0.022076 +-0.0117695 0.075665 -0.0382916 +-0.0666005 0.156329 0.0184798 +0.0143467 0.0580862 -0.0289605 +0.00620145 0.0832401 0.0564613 +-0.07299 0.158232 -0.0339184 +0.0179038 0.0866718 -0.0278625 +-0.0447879 0.085543 -0.0216723 +0.0240528 0.0347605 0.00303304 +0.0471472 0.0437632 0.0216364 +-0.0254743 0.105723 0.0415881 +-0.0914335 0.120003 0.00730918 +-0.0381624 0.035793 0.0434599 +-0.0470742 0.127422 -0.00463291 +0.000501079 0.0620074 0.0565701 +-0.0488714 0.104198 -0.020417 +-0.00949444 0.063336 0.0558203 +-0.0227837 0.0742285 -0.0385317 +-0.00949145 0.115547 0.0400498 +-0.0665386 0.0804536 0.042224 +0.00148883 0.121012 0.0365952 +-0.024281 0.069418 0.0457102 +0.019893 0.114777 -0.0136897 +-0.0904011 0.115144 0.0307537 +-0.00370938 0.0627709 -0.0350699 +-0.00367406 0.0555102 -0.0326331 +-0.0125077 0.0773203 0.0572074 +-0.0574951 0.093265 0.0451928 +-0.0942113 0.120123 0.0212925 +-0.0213358 0.165379 -0.00997448 +-0.0615068 0.0789665 0.042503 +0.00239149 0.0343213 0.0156312 +-0.0639126 0.11101 -0.0139478 +0.0381439 0.103967 -0.00387277 +-0.0816033 0.101897 -0.00556882 +-0.0582639 0.12123 0.0402958 +-0.0729322 0.156105 0.0220745 +-0.0514974 0.086244 0.0456131 +-0.0876158 0.137864 0.0416648 +0.0120082 0.0967361 -0.024421 +0.0147782 0.0929392 -0.0263979 +-0.0510555 0.150177 -0.00351578 +-0.0165661 0.163924 -0.0100865 +-0.00519498 0.0390091 -0.00671136 +-0.021716 0.0641363 -0.0354017 +-0.0523357 0.136679 0.027812 +0.0335961 0.0633113 0.0397473 +-0.0384865 0.0492045 0.0394845 +-0.0339969 0.152567 -0.000573454 +0.0175453 0.0645325 0.0499023 +-0.0895247 0.139293 0.0351741 +-0.0870044 0.115772 0.00228167 +-0.0852267 0.0792333 0.0184927 +-0.0927665 0.116031 0.013321 +-0.0240588 0.111793 -0.0183639 +0.0191819 0.123133 0.0296014 +0.0163312 0.0767998 0.0535416 +-0.0834123 0.0856961 -0.00454328 +-0.0614974 0.0904473 0.0454009 +-0.0648003 0.0370671 0.0164284 +-0.0102366 0.125327 0.0306172 +-0.0512935 0.0556822 0.0305914 +-0.0674962 0.0930678 0.0426016 +-0.0707247 0.156767 -0.045914 +-0.0611468 0.0584317 0.0117762 +0.0152753 0.0680849 -0.0302874 +-0.0638387 0.163409 -0.0592654 +0.030267 0.0496887 -0.0107252 +-0.0227695 0.0684387 -0.0367377 +0.0216497 0.065881 0.0470485 +-0.0849335 0.125015 -0.00321773 +-0.0364959 0.0562316 0.0392716 +-0.0132153 0.0406258 0.0508237 +0.00695506 0.0982177 -0.0239936 +0.00047843 0.12713 -0.00487855 +0.0354045 0.046148 -0.00604177 +-0.0913848 0.129679 0.0322355 +-0.0924762 0.124198 0.0322659 +-0.0057025 0.12744 -0.00517306 +0.032332 0.110047 0.0311032 +-0.0374975 0.0662835 0.0416878 +-0.0306651 0.155159 -0.000638202 +0.0161 0.12839 0.0198796 +-0.0392376 0.124806 0.0231803 +0.00131504 0.0597888 -0.0330641 +-0.0445007 0.0931064 0.043109 +-0.0174373 0.0336888 -0.022956 +-0.0536509 0.0343311 0.0291848 +0.0348249 0.110986 -0.0028353 +0.0280633 0.100998 -0.0169482 +0.0423903 0.0490515 -0.00589339 +0.0306614 0.119205 0.0153072 +-0.0604957 0.0876028 0.045161 +-0.0137303 0.0699989 -0.0380502 +-0.00750341 0.130405 0.00835201 +-0.0494799 0.116621 0.0323892 +-0.058737 0.075302 -0.0183386 +-0.0518764 0.0550741 0.0228473 +-0.0293899 0.118762 -0.0116358 +-0.0743199 0.158257 -0.0279194 +-0.0265758 0.0533991 -0.0263925 +-0.047508 0.0903548 0.0442194 +-0.0104972 0.0815462 0.0580111 +-0.0356136 0.0408304 -0.0293778 +-0.0622824 0.159968 -0.0396048 +-0.0727292 0.0730957 -0.00887693 +0.0252321 0.0889244 0.0471615 +0.0362811 0.0443655 0.0298564 +-0.0583717 0.138143 0.0331568 +0.0516174 0.0711387 0.00464104 +0.00649466 0.0427198 0.0454361 +-0.0187116 0.0598792 -0.0350421 +-0.0603468 0.0339987 0.0210215 +0.0310626 0.107429 0.0345663 +-0.0153967 0.0384283 -0.000805549 +0.0390675 0.0617702 -0.00778266 +-0.0718188 0.0907915 -0.0158595 +-0.0066784 0.0569449 -0.0331859 +0.00738229 0.0448872 -0.0251556 +0.0193881 0.0506007 -0.0247336 +-0.0171345 0.165288 -0.0183426 +0.0172728 0.0694422 -0.0295359 +0.0518225 0.072596 0.0200635 +-0.085483 0.140457 0.00319222 +-0.049383 0.140141 0.0133936 +-0.076884 0.155644 0.0221655 +-0.0584972 0.111135 0.0367864 +-0.0264895 0.102963 0.0427118 +-0.016526 0.0387631 -0.00875803 +-0.060493 0.107007 0.0395303 +-0.0133132 0.0385196 -0.000466347 +0.027107 0.0406036 0.0313674 +-0.0852773 0.137655 0.00128094 +-0.0776954 0.16804 -0.0399638 +-0.0465214 0.0505047 0.038174 +-0.0251912 0.178602 -0.0188241 +-0.0524991 0.101502 0.0417298 +-0.0142894 0.184628 -0.0268303 +0.00710791 0.110158 -0.019992 +-0.0766628 0.155608 -0.00789132 +-0.0814761 0.0734707 0.0145404 +-0.0644951 0.0789605 0.0422031 +0.0403539 0.105584 0.00317596 +-0.0633486 0.0371336 0.0178291 +-0.0808831 0.117721 -0.00384392 +-0.0265027 0.10847 0.0397156 +0.0236097 0.121674 0.028372 +-0.0623736 0.164689 -0.0415928 +-0.0495545 0.0404082 -0.0113965 +-0.0562131 0.054804 -0.00139993 +-0.0418518 0.098529 -0.0215916 +0.0133351 0.058103 -0.0291864 +-0.0594448 0.063179 0.0293052 +0.0113019 0.0652847 -0.0308368 +-0.0783582 0.0994351 0.0350546 +-0.0715439 0.0376425 0.00026118 +-0.0154996 0.112736 0.0400881 +0.0417289 0.0704356 -0.00679567 +-0.0406463 0.127804 0.0152535 +-0.0627661 0.170921 -0.0616075 +-0.0923057 0.12017 0.0426167 +-0.00727442 0.0422617 0.0488857 +0.0350851 0.0848737 -0.0178837 +-0.01578 0.128598 0.00819831 +-0.03217 0.0735917 -0.0275208 +-0.0673634 0.110954 0.0392365 +-0.0271001 0.0779439 0.0468281 +-0.0765081 0.156243 -0.00790412 +0.0277565 0.117474 -0.00457839 +-0.0113381 0.0986434 -0.0265191 +-0.0330823 0.0695155 -0.0204574 +-0.0652177 0.144322 -0.0140816 +-0.0094303 0.0379372 -0.0159242 +-0.0245144 0.0945317 -0.028309 +-0.05375 0.0560385 0.0116204 +-0.0679678 0.0383221 0.0123903 +0.00399334 0.0399971 0.0458959 +-0.0841715 0.0870272 0.0285556 +-0.0274573 0.0734015 0.0426855 +-0.0626773 0.153684 -0.0325991 +-0.0741408 0.105214 0.0369385 +-0.0134986 0.081495 0.0573009 +0.0463327 0.0421886 0.017365 +-0.0644937 0.108375 0.0384047 +-0.0653695 0.151233 0.0366147 +-0.018937 0.178659 -0.0169738 +-0.0820692 0.0748107 0.00351555 +-0.0841353 0.146019 0.0379782 +-0.0148578 0.163977 -0.0174595 +-0.0817263 0.0747702 0.00249857 +0.000235601 0.0740952 -0.0356038 +0.000940682 0.0357179 -0.0155776 +-0.0719363 0.129668 -0.0086833 +0.0301411 0.102934 -0.0150039 +-0.0651961 0.0334974 -0.00275965 +-0.0185844 0.16399 -0.00948536 +-0.0592125 0.042121 0.0445708 +7.57538e-05 0.0369473 0.00366537 +0.0152945 0.0666369 -0.0299356 +0.0410157 0.0739041 0.031202 +-0.0577153 0.0344512 0.0421091 +-0.0920793 0.129683 0.0282033 +-0.0497426 0.0753235 -0.0177986 +-0.0484934 0.047761 0.0395051 +-0.0809803 0.104706 0.0304576 +-0.0746935 0.111142 -0.00760178 +0.0204806 0.109788 0.0388648 +-0.0734977 0.128836 0.0522844 +-0.0426178 0.0520018 -0.0109441 +0.0112198 0.0932651 -0.0287439 +-0.0119274 0.182669 -0.0262872 +0.0145534 0.0347576 0.0376203 +-0.0810222 0.100509 -0.00657927 +-0.0033633 0.038102 0.0128662 +-0.0937861 0.128264 0.0182441 +0.0084061 0.0949783 -0.0285638 +-0.0695902 0.113495 0.0492959 +0.000169576 0.131258 0.0183392 +-0.0931626 0.117374 0.0143043 +-0.0195343 0.112367 -0.0190097 +-0.0524215 0.162453 0.00456363 +0.0184901 0.0879016 0.0492476 +-0.0685433 0.170852 -0.0550244 +-0.087182 0.130813 0.00128919 +0.00130454 0.0641388 -0.0343264 +-0.000757317 0.075519 -0.0359212 +0.0308776 0.0902792 0.0430757 +-0.00578939 0.0386518 0.00278679 +-0.076212 0.155059 0.00635026 +-0.0248315 0.0881388 -0.0362597 +-0.0222598 0.160103 -0.0129456 +-0.00877699 0.0770434 -0.0377883 +-0.06674 0.0383979 0.0141071 +-0.00350265 0.0689326 0.0566398 +-0.0295614 0.0861399 -0.0326125 +-0.0286647 0.125711 0.0122564 +-0.0699648 0.0791315 0.0398469 +0.0142764 0.128727 0.0220636 +-0.0638003 0.110914 0.037425 +-0.0719625 0.135504 -0.00769556 +-0.0527869 0.124083 0.0359567 +-0.0467161 0.0738381 -0.0169211 +-0.0117423 0.070003 -0.0378791 +-0.0517809 0.138537 0.023394 +-0.00482205 0.130969 0.0150835 +0.034711 0.0383001 0.0222555 +-0.00127486 0.120883 -0.0121504 +0.0112227 0.0850587 -0.0310098 +-0.0506063 0.0369029 -0.0119734 +0.0433147 0.0831895 0.0275132 +0.0112941 0.127457 0.0281604 +0.0151622 0.122267 0.032438 +0.0400834 0.082061 0.0334038 +-0.0745622 0.152707 -0.0248951 +-0.0528479 0.141625 0.0244146 +0.0245482 0.035172 0.0211866 +-0.0325075 0.11115 0.0364446 +0.0417109 0.0957641 -0.00380547 +-0.00538241 0.130597 0.0192035 +-0.0649174 0.0364897 0.025021 +-0.0770334 0.158982 -0.013085 +-0.0760388 0.148613 -0.0118618 +0.0283559 0.116347 0.030146 +-0.088594 0.121257 0.00130017 +-0.0268076 0.122539 -0.00562189 +-0.0346629 0.0607102 -0.0125376 +0.0413795 0.0505691 -0.00672382 +-0.0906746 0.1365 0.0201946 +0.00951942 0.100425 0.0477045 +-0.0642867 0.172466 -0.0611328 +-0.0242433 0.172722 -0.0123976 +0.00950564 0.0990636 0.0482467 +0.0101664 0.120462 0.0359466 +-0.0187755 0.107692 -0.0220397 +0.0335012 0.0795469 0.0414506 +-0.0834882 0.14321 0.00316117 +-0.0530161 0.141613 0.0254095 +-0.0395373 0.172163 -0.000837254 +0.0387477 0.0589461 -0.0057234 +-0.0647673 0.0795072 -0.0181104 +-0.00140393 0.0361018 0.00962515 +-0.00524162 0.0395598 0.0483202 +0.0236373 0.103743 -0.0178545 +-0.000477761 0.0760312 0.0584165 +-0.0210492 0.0348694 0.0496408 +-0.00244654 0.131114 0.00878185 +-0.033711 0.0384262 -0.00450177 +-0.0745333 0.152696 -0.0258905 +0.055409 0.0509629 0.0218922 +-0.0134774 0.127753 0.000758007 +-0.0120362 0.0388366 0.0321214 +-0.0278604 0.0487672 0.0470543 +0.0327952 0.0713854 0.0403707 +-0.0728362 0.0979301 -0.0143404 +-0.0367225 0.125751 0.02112 +0.0198232 0.0385183 -0.0126921 +-0.0377749 0.150712 0.00133662 +-0.0665966 0.180807 -0.0581921 +-0.0215095 0.114043 0.0376946 +-0.0620515 0.035927 0.0204607 +-0.0584945 0.150006 -0.0011129 +-0.0335992 0.1188 -0.0116562 +0.0196457 0.116633 0.0356159 +0.0248522 0.0685926 0.0446792 +-0.0164926 0.0544756 0.0504072 +-0.051136 0.140067 0.0203692 +-0.089139 0.139182 0.0122002 +0.0163249 0.0580554 -0.0285 +-0.0621816 0.0342254 0.0257179 +-0.0188821 0.0387745 -0.0111028 +-0.053388 0.034491 0.0395762 +-0.000472072 0.130948 0.0195451 +-0.0634988 0.173693 -0.0615446 +-0.054487 0.0452173 0.0438312 +-0.0202902 0.0906146 -0.0362948 +-0.0725702 0.17984 -0.0501722 +-0.0707759 0.162402 -0.0459559 +-0.0463694 0.113628 -0.0162147 +-0.0523573 0.0345285 0.0397607 +-0.0136632 0.0511316 -0.0317578 +-0.00948303 0.0703233 0.0561585 +-0.0852113 0.0869359 0.026743 +-0.0745333 0.0805197 0.0374668 +0.00349251 0.118288 0.0385113 +0.0493697 0.0693787 0.0250272 +0.029581 0.0736246 -0.0217333 +-0.0400646 0.156235 -0.00986121 +-0.0818113 0.136716 0.048659 +-0.0809364 0.129495 -0.00494346 +-0.0875459 0.110452 0.0143395 +0.0253164 0.112728 0.0350367 +-0.0852858 0.0845126 -0.000515374 +0.00212883 0.120316 -0.0135831 +-0.0192664 0.0381478 0.0114056 +0.0493315 0.0589269 -0.00474568 +-0.0183092 0.162495 -0.00732366 +-0.00730789 0.12834 -0.00208974 +-0.0286194 0.180015 -0.014033 +0.0255963 0.0648009 -0.0228004 +-0.00925832 0.177251 -0.027731 +-0.0485485 0.0432385 -0.0107358 +-0.0600861 0.14609 -0.00280453 +-0.026172 0.174158 -0.0190728 +-0.059111 0.0686528 0.0369372 +-0.0434854 0.0944868 0.0426487 +-0.0216341 0.038095 0.0200103 +-0.0670537 0.071446 0.0363402 +-0.0348255 0.0915164 -0.024068 +-0.0202598 0.174222 -0.0154191 +0.0344662 0.114921 0.00815778 +-0.0686919 0.0750175 -0.0147112 +0.026272 0.0789381 -0.0240124 +0.0202522 0.0805604 -0.0270674 +-0.0432329 0.156565 0.00586077 +-0.00650833 0.0787624 0.0577507 +-0.0335034 0.0774945 0.0414157 +-0.0606769 0.0676671 -0.0113119 +-0.0656284 0.162324 -0.0174746 +0.00729944 0.0639619 -0.0320669 +-0.00448657 0.0898027 0.0567005 +-0.0584972 0.0918588 0.045399 +0.00218731 0.0852799 -0.0344916 +-0.0417916 0.0869783 -0.0214259 +0.0463392 0.0489694 -0.00446687 +-0.0389761 0.128486 0.00847309 +0.00727028 0.11232 0.040519 +-0.0234564 0.0680424 0.0463484 +-0.0797185 0.0803984 0.0327643 +0.0232549 0.0645506 0.0458531 +0.0198821 0.0449543 0.0425235 +-0.0394974 0.0902763 0.0431118 +-0.0662858 0.172388 -0.0591199 +0.0259452 0.0364961 0.0239139 +-0.0714148 0.0386609 0.00057855 +-0.0638254 0.0924713 -0.0188016 +-0.0584874 0.112515 0.0360801 +-0.0623619 0.166253 -0.047591 +0.0452758 0.0875665 0.00218329 +-0.0244115 0.0379996 0.0159179 +0.0452209 0.0659646 -0.000116442 +-0.0707693 0.176767 -0.0466577 +-0.0650223 0.156803 -0.0519494 +0.0354173 0.0414682 -0.003097 +-0.0416808 0.0622091 -0.0130274 +0.0326595 0.114633 -0.00147403 +-0.0495274 0.14168 0.00739502 +0.0388579 0.0970015 -0.00784 +-0.00249575 0.0389742 0.0303561 +0.0070795 0.101453 -0.021277 +0.0291938 0.0754716 0.043989 +0.00502464 0.126695 -0.00649713 +-0.016158 0.0884114 -0.0380198 +0.0115883 0.102988 -0.0210311 +0.0576451 0.0661396 0.0235216 +0.0317192 0.118031 0.0171382 +-0.0116954 0.175688 -0.0223293 +0.00121183 0.0853285 -0.0350521 +-0.0158308 0.0883117 -0.038067 +-0.0686258 0.0846974 0.0427491 +0.00833511 0.0595736 -0.0302453 +0.0450509 0.0423962 0.0206492 +-0.027467 0.0793682 0.0471485 +-0.0679777 0.0716192 0.0360049 +-0.0718018 0.158195 -0.0399213 +-0.0114987 0.0856547 0.0572923 +0.0131441 0.0346685 0.0356066 +-0.0620328 0.156862 -0.0185851 +-0.0607717 0.113836 0.03657 +-0.0764751 0.146968 0.0421376 +-0.0207673 0.117009 -0.0138783 +0.0416942 0.0655359 -0.00371801 +-0.0306051 0.0524133 -0.0153638 +0.0107636 0.130209 0.0207729 +-0.0902734 0.133771 0.0282153 +-0.0235934 0.0383252 0.00311252 +-0.012672 0.0526484 -0.0327744 +-0.0309385 0.0622798 -0.0204312 +-0.0337803 0.122942 0.0251825 +-0.0598823 0.146825 0.0363335 +-0.0447526 0.0336781 0.00121434 +-0.0540428 0.0334293 -0.000440359 +0.0119421 0.123166 0.0332435 +0.0105328 0.103079 0.0462759 +-0.00696577 0.0389018 -0.00510709 +-0.033478 0.0632761 0.0395519 +-0.0386238 0.0519962 -0.0107523 +-0.0778526 0.159695 -0.0239243 +-0.0154805 0.109966 0.0416657 +-0.0688005 0.087996 -0.0171065 +-0.0428494 0.0999447 -0.0214282 +0.02441 0.101163 -0.0191142 +-0.0630974 0.160042 -0.0195595 +-0.0591899 0.154851 0.0254882 +-0.0694874 0.100005 0.0406788 +-0.063101 0.150495 -0.0266018 +-0.000774843 0.0783346 -0.0358957 +-0.0335129 0.112536 0.0351002 +0.00348618 0.11278 0.041408 +0.0454091 0.0918015 0.00517469 +-0.030521 0.0636541 -0.0224277 +-0.0564983 0.108415 0.0389345 +-0.0454982 0.045182 0.0420491 +0.0366564 0.089932 -0.0151793 +-0.00318743 0.0350129 0.0463208 +0.0397193 0.0787183 -0.00974279 +-0.0456155 0.165496 -0.00783315 +-0.0401614 0.110268 -0.0187071 +-0.0607836 0.171276 -0.0609166 +-0.0849643 0.0885105 -0.00254627 +0.000663768 0.131541 0.0142252 +-0.0773558 0.163115 -0.0213545 +-0.00442024 0.118937 -0.0140576 +0.029367 0.1045 -0.0146741 +-0.0767078 0.176155 -0.0445645 +-0.087862 0.117151 0.00226309 +-0.0674561 0.1652 -0.0559896 +0.0417828 0.101446 0.0181564 +-0.0504972 0.0465484 0.0414292 +0.0334855 0.0808915 0.0414362 +-0.0640951 0.0700461 0.0364211 +-0.0500004 0.121197 0.0329094 +-0.0640156 0.0344353 0.0303981 +0.0161688 0.0407187 0.0441528 +-0.0175288 0.165418 -0.0114925 +-0.0156111 0.0407209 -0.0274801 +-0.0136265 0.129395 0.0133241 +-0.060628 0.0588072 0.00794551 +0.0064803 0.0977098 0.0499318 +0.0439772 0.079046 -0.00278888 +0.0418428 0.0986036 -0.00180869 +-0.0225444 0.178667 -0.0133919 +-0.0606264 0.0336734 0.0105944 +-0.0434 0.0336807 -0.00215159 +-0.0886031 0.143176 0.0340326 +-0.0849284 0.107666 0.0223625 +0.0592303 0.0580467 0.0201933 +-0.0540206 0.147182 -0.0016614 +-0.00601913 0.126314 0.0306279 +-0.0686207 0.149674 -0.0393499 +-0.0919325 0.130933 0.0102425 +-0.0568299 0.143897 0.0319274 +-0.0354984 0.115235 0.0327878 +-0.0174958 0.0701523 0.0542792 +0.0270421 0.0862601 0.0462384 +-0.0488595 0.101383 -0.02158 +-0.0733679 0.152652 -0.0338969 +-0.0750934 0.159541 -0.00936327 +-0.0374543 0.155389 -0.00975319 +-0.0381729 0.166677 -0.0130206 +-0.087877 0.0990467 0.0233782 +-0.00160432 0.0405525 -0.0251988 +-0.0903048 0.139241 0.0221876 +-0.00139541 0.0385701 0.0219096 +-0.0221672 0.0839099 0.0558332 +-0.000827607 0.0389424 0.0289209 +-0.0177093 0.0385258 -0.00321073 +-0.0221552 0.169733 -0.0198584 +-0.0574718 0.156359 0.0101234 +0.0162407 0.0793143 -0.0294472 +0.0309621 0.0953572 -0.0169293 +-0.0167051 0.126576 2.44266e-05 +-0.0210968 0.161053 -0.00432438 +-0.0244887 0.100244 0.0443393 +-0.0637376 0.15365 0.0326508 +0.0154945 0.115387 0.0371086 +-0.0110238 0.098585 0.0502027 +-0.0466991 0.122484 0.0270727 +0.015569 0.110589 -0.0172093 +-0.0540772 0.146211 0.0253916 +0.0117081 0.0589891 0.0519593 +-0.0289244 0.033884 -0.0216457 +-0.08784 0.105023 0.0143674 +0.0262802 0.123151 0.0136687 +0.0122982 0.128768 0.0241985 +0.0428587 0.0803554 -0.00479839 +-0.0249679 0.0851951 0.0529639 +0.0259953 0.123127 0.0078705 +-0.000612836 0.0356605 0.0156316 +0.0462948 0.0820457 0.00817944 +-0.0179779 0.15947 -0.0103936 +-0.0237993 0.184341 -0.0145966 +-0.0300075 0.0337589 -0.0217484 +0.0233024 0.124378 0.00401489 +-0.0457643 0.0811616 -0.0200148 +-0.0786005 0.174957 -0.0470491 +0.00992987 0.0806149 0.0548353 +-0.036507 0.0464425 0.0402005 +-0.0229776 0.0681076 0.0472951 +0.0359077 0.111056 0.0244077 +-0.0691331 0.0612207 0.0112337 +-0.0653605 0.174136 -0.0490346 +-0.0246777 0.0366811 0.0541279 +0.00549638 0.115538 0.0397987 +-0.0512593 0.128575 -0.00377835 +-0.0227541 0.0889021 -0.0365754 +-0.052801 0.144689 0.0203903 +-0.0373724 0.0344314 0.0325332 +0.0302609 0.0461225 0.032895 +-0.0668934 0.119448 -0.00885989 +-0.0781478 0.107183 -0.00659237 +-0.0262448 0.109573 -0.0200299 +-0.0930011 0.116069 0.0193086 +0.0199447 0.104671 0.0430468 +-0.0902973 0.114585 0.00733567 +-0.0597131 0.0708022 -0.0154129 +0.011503 0.0909852 0.0534706 +-0.0601621 0.0433793 -0.00606772 +-0.0690356 0.068492 0.0314599 +-0.0662201 0.0390045 0.0360529 +0.0111444 0.104428 -0.02004 +-0.0620602 0.155611 0.00849054 +0.038029 0.105425 -0.00179734 +0.00952421 0.0346423 -0.0128865 +-0.0475328 0.0338333 0.0273813 +0.0275059 0.121239 0.00414409 +-0.0713739 0.162409 -0.0439557 +-0.0388285 0.0339925 0.000319116 +0.0209713 0.0966458 -0.0223043 +-0.0117867 0.0798822 -0.0383021 +-0.00231276 0.123919 -0.0094032 +-0.0623035 0.158393 -0.0375989 +-0.0498834 0.108435 -0.0190271 +-0.0450959 0.122461 0.0255697 +-0.086583 0.1077 0.0153543 +-0.0640141 0.128346 0.0443555 +-0.0910616 0.140621 0.0211716 +0.0222184 0.122028 -0.00352468 +-0.0197563 0.0685528 -0.0378978 +-0.0747315 0.0809443 -0.0125955 +0.0381487 0.056188 -0.00571384 +0.0310862 0.0808926 0.0432566 +-0.0418955 0.0336683 0.02694 +0.0454971 0.0861837 0.00419421 +-0.0515955 0.0575054 -0.00888629 +-0.0923422 0.120143 0.0302906 +-0.0388134 0.0900157 -0.0235053 +-0.0678286 0.139237 -0.00787376 +-0.0500776 0.136736 0.0219567 +-0.0524826 0.132311 -0.00383544 +-0.0725073 0.154019 -0.0378993 +-0.0164965 0.114086 0.0389356 +-0.0266334 0.0505574 -0.0257305 +0.0285947 0.0646316 0.0430307 +-0.050498 0.10288 0.0412159 +-0.0147348 0.0348101 0.0475803 +-0.0147627 0.0728806 -0.0387608 +-0.0425799 0.160887 0.00499665 +-0.0516371 0.0334814 0.00180973 +-0.0574972 0.0973516 0.04313 +-0.0294813 0.179959 -0.00726258 +-0.0696084 0.159782 -0.00738408 +-0.00175707 0.0783385 -0.0360812 +-0.0778906 0.0797955 -0.00863863 +0.0383322 0.0928141 0.0344469 +-0.0459579 0.0368224 -0.0202942 +0.0126438 0.130236 0.0157508 +0.0370668 0.109719 0.0231776 +-0.0650007 0.0600171 0.0167571 +-0.0294928 0.0931993 0.044345 +-0.0849548 0.0952071 0.0290738 +-0.0314917 0.0660582 0.0391556 +0.0283827 0.10475 0.0376855 +0.0125555 0.034405 -0.0178251 +0.0407099 0.0684593 0.0306869 +-0.0321086 0.163743 -0.0150961 +0.00529533 0.064011 -0.0326857 +0.0428516 0.0972538 0.000192155 +0.0475361 0.0451237 0.0241502 +-0.0188094 0.0382725 0.0240343 +-0.0242622 0.0650295 0.043001 +-0.0247852 0.0783802 -0.0377363 +0.0104929 0.0923225 0.0529394 +-0.0684671 0.140894 -0.00832284 +-0.013606 0.0435021 -0.0266802 +-0.0324058 0.05963 -0.0134049 +-0.0709313 0.156768 -0.044906 +-0.0794975 0.113845 0.0467655 +0.0215945 0.126233 0.0147739 +-0.0653369 0.0416124 0.0352199 +0.0546053 0.0733755 0.0137165 +-0.0893171 0.0996957 0.0173941 +-0.0835863 0.0817078 0.00050138 +0.029436 0.039931 -0.00313898 +-0.0614917 0.0661812 0.0332998 +-0.0923901 0.114734 0.0183133 +0.030053 0.0567138 -0.0167759 +-0.00342912 0.0915905 -0.0351346 +-0.0758824 0.100651 -0.0113429 +-0.0457293 0.0348843 0.042622 +0.00615023 0.0385922 -0.00780619 +-0.0547458 0.0768339 -0.0193157 +-0.0356142 0.0493225 -0.0125317 +0.024593 0.0345639 0.00705834 +-0.0892328 0.114145 0.0245988 +0.0348936 0.0586201 -0.0127038 +-0.0828513 0.138047 0.046826 +0.0569539 0.0508846 0.00918952 +-0.0797103 0.0711205 0.00752586 +-0.092065 0.118755 0.0273051 +-0.0103683 0.0388061 0.0306894 +-0.0431813 0.165147 -0.00997877 +-0.0813565 0.109598 0.0300528 +0.0477122 0.0511499 0.0301456 +-0.0678831 0.155252 0.000581516 +0.0349362 0.113582 0.0211925 +0.0280387 0.0549866 0.0403705 +-0.0615433 0.125505 0.042614 +0.0450739 0.0427888 0.00232236 +-0.0544975 0.121335 -0.0101688 +0.0117318 0.0833298 0.0539432 +-0.0144997 0.103011 0.0432504 +-0.0752992 0.149965 -0.0228671 +0.0196742 0.0686359 0.0495084 +-0.0394722 0.107013 0.0383007 +-0.0321381 0.0435397 -0.0289857 +0.0231687 0.0915577 0.0477207 +-0.0480905 0.156132 -0.00685995 +0.00882114 0.0589209 0.053036 +0.000540453 0.0731645 0.0574875 +-0.0842824 0.0818436 0.0235004 +-0.072066 0.0353469 0.00817017 +-0.0548518 0.122696 0.0382478 +-0.0283817 0.123518 -0.00261643 +-0.0178271 0.0855379 -0.0388455 +-0.00772146 0.0656018 -0.0354736 +0.0230836 0.12416 0.0238853 +-0.0125037 0.0730609 0.0559849 +0.0551355 0.0581678 0.0268835 +-0.0288448 0.124881 0.0180835 +-0.0566945 0.126945 0.0390945 +-0.0491155 0.0337431 -0.0125383 +-0.0100076 0.130157 0.0146359 +-0.0114787 0.0934019 -0.0350786 +-0.012503 0.0856552 0.057236 +-0.00822614 0.0384527 0.0224267 +-0.0288615 0.0353967 0.01735 +-0.035527 0.115134 -0.015836 +-0.085501 0.0791776 0.00851156 +0.0457594 0.0890174 0.0101642 +-0.0775133 0.126 0.0528602 +-0.0598229 0.0911123 -0.0198104 +0.0349018 0.0698502 -0.0158378 +-0.00371064 0.0641813 -0.0350983 +-0.0232497 0.0336668 -0.0221987 +-0.0337721 0.121485 -0.00843946 +0.0123855 0.0603174 0.0511841 +-0.0454994 0.0804154 0.0426755 +0.00893209 0.124393 0.0330753 +-0.00403191 0.0987119 0.0511654 +-0.0481285 0.0573264 0.0358964 +-0.0166099 0.0407431 -0.0277394 +-0.0440479 0.169839 -0.00695693 +0.0412738 0.0872408 -0.00977382 +-0.0604546 0.071762 0.0392488 +0.0529297 0.0581906 0.02898 +-0.0521631 0.138551 0.0244099 +-0.0366167 0.15106 0.000396988 +0.0417493 0.0611977 -0.0033567 +-0.070996 0.0683351 -0.00354604 +-0.0356709 0.0621736 -0.0130441 +-0.0170991 0.0383232 0.0225362 +-0.0487856 0.0573034 0.0351442 +0.022412 0.0372285 0.0333476 +-0.0249633 0.0931679 0.047071 +0.018008 0.0349409 0.0291289 +-0.0796085 0.154132 0.0271276 +-0.0406237 0.0336557 -0.0200198 +0.0169165 0.123099 -0.00667688 +0.0210051 0.0618768 0.0478546 +-0.0427644 0.0812202 -0.0203472 +-0.0672645 0.175508 -0.0482636 +-0.0639988 0.121381 0.0479339 +-0.0622266 0.158391 -0.0366041 +-0.0261802 0.161053 -0.0142499 +0.0186318 0.0821747 0.0516425 +-0.00531922 0.0961442 -0.0318294 +0.00250665 0.0341604 -0.0175888 +0.0167477 0.0563074 0.0486799 +-0.0106808 0.0555967 -0.0338825 +0.00925016 0.0724976 -0.0328208 +0.0123553 0.0552818 -0.0294499 +0.0212602 0.0735043 -0.0271352 +-0.0845249 0.129883 0.0501389 +-0.0764965 0.154899 -0.0050946 +-0.0621627 0.163132 -0.0395927 +-0.0144955 0.0701698 0.0547379 +-0.0084766 0.0489124 0.0500846 +-0.000135712 0.0381648 -0.0142912 +-0.0503963 0.1183 0.0322871 +-0.0761087 0.083292 0.0375324 +-0.0736943 0.094184 0.0404336 +-0.0691138 0.0763852 0.0387083 +-0.0290376 0.038297 0.000217512 +-0.0348553 0.0342935 0.020715 +-0.0220444 0.0384934 -0.0170721 +-0.0114987 0.0471911 0.0478612 +0.0375264 0.0714822 -0.0127977 +-0.0282394 0.087664 0.0462444 +-0.0757136 0.107486 0.0366393 +-0.0610115 0.134041 -0.00711168 +-0.0797372 0.0717415 0.00518109 +-0.0658978 0.147832 -0.0279808 +-0.00653882 0.110902 -0.0214831 +0.0296673 0.0591775 0.0410177 +-0.0217889 0.0696447 0.0502694 +0.0234089 0.0418644 -0.00766906 +-0.0364935 0.0888766 0.0431732 +0.0306541 0.0520995 0.0370911 +-0.060098 0.0687043 0.0366734 +0.0187338 0.0862153 -0.0273821 +-0.0839692 0.148747 0.00414299 +-0.0354821 0.0561791 0.038801 +-0.0481382 0.0376145 0.0455768 +-0.0676248 0.117206 0.0513943 +-0.0281854 0.174153 -0.0178233 +0.0359289 0.0386712 0.0221633 +-0.0256851 0.0824232 0.052338 +-0.0145953 0.0363242 -0.0264317 +-0.0303622 0.055196 -0.0183802 +-0.00165167 0.0525486 -0.0310164 +-0.0132125 0.168083 -0.022507 +-0.00949762 0.078776 0.0580091 +-0.0361357 0.127268 0.00216052 +0.048778 0.0525636 0.0299433 +-0.0256526 0.0520956 -0.0269974 +-0.0603733 0.0335628 0.0071663 +-0.0426157 0.035917 -0.0271302 +-0.0144999 0.162187 -0.0103051 +-0.0384864 0.0548303 0.0394681 +-0.0831442 0.107611 0.0263767 +-0.00111933 0.100971 -0.0229536 +-0.0548742 0.10693 -0.0184788 +-0.0218282 0.127027 0.00889322 +-0.0174982 0.111166 -0.0197324 +-0.0652616 0.0722487 0.0377992 +-0.0576238 0.145329 0.032529 +-0.0184507 0.117417 -0.0143314 +-0.081937 0.128034 -0.00496911 +0.0195332 0.12729 0.0154357 +-0.0293484 0.0705264 -0.0315108 +-0.00525979 0.0409541 0.0483014 +0.0555717 0.0706847 0.00515518 +-0.048428 0.0531039 0.036022 +-0.00279611 0.0826469 -0.0371795 +-0.0287124 0.0382592 0.00213562 +-0.0574984 0.0959784 0.0439666 +-0.091525 0.133725 0.0172151 +-0.016864 0.128415 0.0107007 +-0.0636978 0.164648 -0.0286005 +-0.0829735 0.127181 0.0515051 +-0.0488321 0.0956358 -0.0221459 +0.0400863 0.0899903 -0.0108207 +-0.0619683 0.12268 0.0437909 +0.0605435 0.0650981 0.0101416 +-0.0665542 0.169448 -0.0580509 +-0.0891009 0.0902275 0.0204481 +-0.0825815 0.112383 0.0454387 +0.0104883 0.0936688 0.0521003 +0.0142529 0.0765304 -0.0302113 +0.0165164 0.126586 0.0257514 +-0.0283423 0.118847 0.030216 +0.0142697 0.034212 -0.000289798 +-0.0478723 0.105599 -0.0198923 +-0.0739256 0.098177 0.0391323 +-0.049674 0.141672 0.0123895 +-0.0475977 0.15214 0.0100027 +-0.0424553 0.128377 0.00131486 +0.0224361 0.0645464 0.046427 +-0.0885609 0.087538 0.0184581 +0.0147132 0.0897404 -0.0290836 +-0.054132 0.143048 0.0274248 +0.00550441 0.0575487 0.0534334 +-0.0772682 0.155563 -0.0118971 +-0.0677628 0.079419 -0.0170759 +-0.0464924 0.159333 0.00779524 +0.0261579 0.0768253 0.0466356 +-0.0552963 0.0473377 0.0123212 +-0.0298441 0.0972531 -0.0235715 +-0.00563259 0.0974901 -0.0292726 +-0.0261993 0.095287 -0.0250572 +-0.0716941 0.0684125 -0.00254325 +0.00127365 0.0682996 -0.0335875 +0.0575871 0.0523587 0.0191771 +-0.00134429 0.0361889 0.0150058 +-0.0715096 0.1041 0.0379435 +-0.0921823 0.117455 0.0412015 +-0.0384872 0.0337149 -0.0296051 +-0.0287365 0.0475545 0.0479663 +-0.0257999 0.0422849 0.0537317 +-0.0230963 0.124618 -0.00175855 +-0.0924128 0.11471 0.0173177 +-0.00492025 0.0362041 0.048453 +-0.0186551 0.184576 -0.0164922 +-0.0802253 0.0772741 0.0285988 +0.0463015 0.0806481 0.0121762 +-0.0304105 0.0861968 -0.0305753 +-0.0346214 0.0348242 0.0450553 +-0.0652339 0.0355811 0.0395373 +-0.0788426 0.0825957 -0.0096075 +-0.0127163 0.038878 -0.00996632 +-0.0624916 0.166267 -0.0445898 +-0.0746075 0.156859 -0.0239292 +-0.0773753 0.161145 -0.0179242 +-0.0883931 0.1336 0.00326444 +-0.0661323 0.162373 -0.0581655 +-0.0510928 0.12386 -0.00885828 +-0.0384971 0.0705176 0.0419076 +-0.0723264 0.176481 -0.0540086 +-0.0271072 0.11707 -0.0138992 +-0.0591735 0.11954 -0.0102201 +0.0222809 0.11936 0.0323905 +-0.0302503 0.17123 -0.00702025 +-0.0809167 0.107332 -0.00361395 +-0.0627188 0.046051 0.00845692 +-0.00639449 0.0347093 0.0459249 +-0.0877048 0.0873692 0.00346654 +-0.0410427 0.15478 -0.00878846 +-0.069373 0.0655009 0.0252048 +-0.0270649 0.0689032 -0.0335294 +0.00976243 0.126251 0.030462 +-0.002483 0.114172 0.0414823 +-0.0532846 0.152692 0.0160461 +-0.0190668 0.12797 0.0127969 +-0.0645056 0.0818668 0.0436415 +-0.0144784 0.0645279 0.0535035 +-0.0598098 0.08825 -0.0201729 +-0.0614957 0.105649 0.0403113 +-0.0278003 0.174225 -0.00868668 +-0.0525152 0.0439969 0.0448982 +-0.00749319 0.0503553 0.0512463 +-0.0786706 0.0853441 -0.0105854 +-0.0447185 0.0709976 -0.0171011 +-0.0635722 0.0753573 0.0407707 +-0.0124985 0.0603974 0.0541523 +0.0344134 0.0655586 -0.0158419 +0.0196499 0.124334 0.0268969 +-0.0627763 0.0614875 0.0230054 +0.0416143 0.102832 0.00217563 +-0.0552881 0.147721 0.0283494 +-0.0143864 0.174216 -0.0192271 +0.0144149 0.0343798 -0.00603429 +-0.0101902 0.177186 -0.0254506 +0.0284808 0.120403 0.0230436 +-0.0149461 0.0384961 0.0282276 +-0.0778803 0.0710945 0.0220932 +-0.042083 0.168351 -0.00985967 +-0.056782 0.043535 0.0167171 +0.0143083 0.122234 -0.00973054 +-0.0266054 0.0916781 -0.031606 +-0.00249278 0.121064 0.0370013 +-0.0199096 0.0382242 0.00758286 +-0.0135056 0.0842656 0.0572305 +-0.0720125 0.148777 -0.0357596 +0.0251623 0.118606 -0.00580398 +-0.0618325 0.0334319 -0.000212632 +-0.0855476 0.136296 0.00125685 +-0.032605 0.0408975 -0.030074 +0.0426847 0.0986805 0.020158 +-0.00736899 0.0366982 -0.0162506 +0.00250252 0.0590979 0.0551087 +-0.0674921 0.106947 0.0382762 +-0.0289938 0.16114 -0.00164375 +-0.0509402 0.0584984 0.0315938 +-0.0350845 0.124972 -0.00417237 +-0.0686385 0.0435335 0.00569826 +0.0441509 0.0959467 0.0161545 +0.0131317 0.10725 -0.0189993 +0.0358259 0.0928903 0.0378885 +-0.0154981 0.060248 0.0524646 +0.0276762 0.118315 -0.00350857 +-0.0683312 0.0833327 0.042485 +0.033847 0.106899 -0.00922375 +0.048317 0.0466984 0.0256626 +-0.0570131 0.128126 -0.00643112 +-0.0788672 0.111379 -0.00271807 +0.0115311 0.122019 -0.0114981 +0.0275945 0.106191 -0.0144774 +-0.0591334 0.0584459 0.00677121 +-0.0780191 0.149419 0.0383262 +-0.0559631 0.0464314 -0.00541258 +-0.0192836 0.0894928 -0.0371367 +-0.033131 0.166707 -0.0157536 +-0.0495065 0.107045 0.0392662 +-0.073496 0.147014 0.0424214 +-0.0404833 0.111172 0.036485 +0.0284708 0.0565571 -0.0188308 +0.0511996 0.0711486 0.0227866 +-0.0681397 0.0738079 0.0376094 +-0.0905331 0.135117 0.0212107 +-0.0733037 0.155556 0.00591793 +0.0500217 0.0446984 0.00624267 +-0.00949805 0.0815484 0.0580308 +0.0211117 0.124199 0.0260136 +-0.0611133 0.149657 0.036321 +-0.0635959 0.153475 0.00125628 +0.0344187 0.0994578 0.0359067 +-0.0734442 0.163812 -0.0389777 +-0.0852938 0.0858468 -0.00152115 +-0.0559297 0.13815 0.0313829 +-0.0870302 0.13217 0.00132034 +0.0204036 0.0474506 -0.0212729 +-0.076548 0.0954614 0.0376104 +-0.0855527 0.153551 0.0192298 +-0.0729125 0.0928513 0.0411123 +-0.0404958 0.0478428 0.0400733 +-0.0121854 0.0980546 -0.0279084 +-0.0464966 0.108432 0.0393098 +-0.0177034 0.0569685 -0.0340386 +-0.0908687 0.135097 0.0172074 +-0.0862565 0.0846802 0.0214754 +-0.0297808 0.0348722 0.0494682 +-0.0764922 0.155931 0.0149956 +-0.0618119 0.115344 0.0386033 +-0.0487475 0.0767781 -0.0183253 +-0.0907804 0.150219 0.0191245 +-0.0524535 0.0335708 0.023045 +-0.0384946 0.0577019 0.0400515 +-0.074873 0.151297 -0.0278802 +0.00653661 0.120619 -0.0139577 +-0.0483957 0.0389613 0.0452757 +-0.0779524 0.165292 -0.0269536 +-0.0536531 0.0334694 0.00682116 +-0.0561549 0.118392 0.0380484 +-0.0201622 0.0337128 -0.0216346 +-0.0794073 0.0772395 -0.00557672 +-0.0135947 0.071631 0.0548042 +-0.0382622 0.0335792 -0.0232089 +-0.0183288 0.115615 -0.0164437 +-0.0507515 0.0768088 -0.0186854 +-0.0176367 0.181628 -0.0186063 +0.001434 0.0980064 0.0516014 +0.00449684 0.131467 0.00706378 +-0.0839655 0.111209 0.0317911 +-0.0769529 0.128149 -0.00749249 +0.0471199 0.0728094 0.00697834 +0.0460243 0.0737836 0.00392327 +-0.00149572 0.0505531 0.0529099 +-0.0431936 0.0363833 0.0440447 +-0.054345 0.151005 0.0266856 +0.00514071 0.12498 -0.00862525 +-0.0729614 0.112778 0.0490933 +0.0152498 0.0348445 0.0304622 +-0.0111539 0.0386404 0.0270766 +-0.0431779 0.113636 -0.0162215 +-0.0754447 0.164601 -0.0189193 +-0.0685657 0.0346013 0.0116976 +0.036686 0.110763 0.0218417 +-0.058015 0.128168 -0.00680186 +-0.0805084 0.121673 0.0499202 +-0.0750852 0.174913 -0.0410877 +-0.0394764 0.081876 0.0433844 +-0.01065 0.0383969 0.0147482 +-0.0236788 0.0551648 -0.029679 +-0.0207747 0.0728486 -0.0387932 +0.00733312 0.0553775 -0.0306811 +-0.0497252 0.137033 0.00342407 +-0.0650198 0.154365 0.0307072 +0.00051428 0.0383337 0.0225142 +-0.0625323 0.1568 -0.0366082 +-0.00383551 0.130671 0.00539431 +0.0310854 0.118732 0.00690653 +-0.0699388 0.131128 -0.00863643 +-0.023911 0.123885 -0.00309916 +-0.0495628 0.0402984 0.0453668 +-0.0639487 0.168098 -0.0606895 +-0.0706835 0.155594 0.0053992 +-0.0686442 0.156175 0.0235781 +-0.0572185 0.0575347 0.00867749 +-0.0788442 0.154658 0.0259054 +-0.0721793 0.15961 -0.0389315 +-0.0545051 0.119806 0.0369329 +-0.0254081 0.182912 -0.0140439 +-0.0729406 0.0676849 0.0243239 +-0.0353285 0.0851433 -0.0237512 +-0.0478735 0.104217 -0.0205651 +-0.0558395 0.0589131 -0.0044052 +0.0448613 0.0903726 0.0191701 +0.0576189 0.0719687 0.0133447 +-0.0511061 0.129858 -0.00316533 +-0.00880359 0.113633 -0.0183799 +-0.0618121 0.09105 -0.0190303 +0.0313027 0.114101 -0.00492854 +-0.042497 0.0874008 0.0424798 +-0.0508473 0.0970748 -0.0222124 +-0.0654906 0.102864 0.0410679 +-0.00458022 0.0347745 -0.0240516 +0.0553581 0.0524903 0.0236336 +0.00626754 0.071137 -0.0337471 +-0.0135115 0.118298 0.0374588 +-0.0604029 0.0342918 0.0295439 +0.0406411 0.0462159 0.0309092 +-0.0278584 0.0385169 -0.0108032 +0.0266728 0.0713177 0.0438181 +0.0101968 0.116422 0.0377394 +0.0446411 0.0959729 0.00816419 +-0.0597937 0.0334415 0.000190139 +-0.0210999 0.0811322 0.0562803 +-0.0474593 0.0559824 0.0367034 +0.0340242 0.115407 0.0165889 +0.0416569 0.0832977 0.0303966 +0.0340782 0.100772 0.035418 +-0.0604756 0.0747304 0.0414998 +0.0147905 0.128825 0.0208219 +-0.00109958 0.115152 -0.0180337 +-0.0237291 0.0650733 0.0438813 +-0.0261862 0.17712 -0.0185723 +-0.0381348 0.0338853 -0.0178771 +-0.0323789 0.115075 -0.0157884 +0.0168479 0.0856792 -0.0288312 +0.0383914 0.0390949 0.00219016 +0.0192558 0.0721931 -0.0285132 +-0.0837506 0.0776431 0.00349824 +0.00549734 0.0937843 0.053579 +0.0381875 0.10978 0.0131678 +-0.0707773 0.0822058 -0.016572 +-0.0623556 0.0337533 -0.00969501 +-0.0657944 0.0348418 0.0348835 +0.029813 0.0605585 0.0412449 +-0.067274 0.142559 0.0431983 +-0.00437946 0.039206 0.0351678 +-0.091267 0.130919 0.00823808 +0.056791 0.0717301 0.0086079 +-0.088725 0.0942104 0.00844208 +-0.0527517 0.076824 -0.0190661 +-0.075716 0.071204 0.0277224 +-0.0296574 0.175524 -0.0164728 +0.0201633 0.0535759 0.04656 +0.00320624 0.036422 0.0229702 +0.0192058 0.0834241 -0.02764 +-0.0918136 0.129556 0.00925121 +0.0276788 0.117119 0.0298812 +-0.0251464 0.0824617 0.0532115 +-0.0728771 0.154609 0.0294193 +0.00904539 0.03456 0.0402645 +-0.0534903 0.102908 0.0413848 +0.00940878 0.0389595 -0.0232113 +-0.0859627 0.109007 0.009354 +-0.0484951 0.0903851 0.0445307 +0.00263147 0.0345612 0.0425417 +-0.0770465 0.161776 -0.0174081 +0.0134975 0.104436 0.0449316 +-0.0388918 0.123217 0.0263098 +-0.0364947 0.112507 0.0349484 +-0.0629025 0.103986 -0.017642 +-0.0678178 0.0923118 -0.0167386 +-0.0689104 0.122371 -0.00889897 +-0.0255023 0.125351 0.00317915 +-0.000607228 0.0419595 -0.0248688 +0.0460131 0.0820178 0.0051921 +-0.0223034 0.0381733 0.0107634 +-0.0861005 0.10314 0.0243088 +-0.0674874 0.0958602 0.0421807 +-0.0538319 0.138205 -0.00152003 +-0.0199623 0.0624791 0.0486773 +-0.0187732 0.0946942 0.0521396 +0.0415957 0.0859827 0.0303559 +-0.0405006 0.0562797 0.0399754 +-0.0396087 0.0392284 -0.0278507 +-0.0203015 0.124709 0.0241059 +-0.0667178 0.127063 0.0492263 +-0.0727925 0.0893223 -0.0156729 +0.0370031 0.104683 0.029035 +0.0279524 0.103456 0.0388242 +-0.0186121 0.038597 0.0291868 +-0.0776508 0.152845 -0.000892884 +-0.0334818 0.0987718 0.0435747 +0.0329891 0.092935 0.0408139 +0.0391956 0.0712805 0.0337887 +-0.0631802 0.0590341 0.0144269 +-0.0537547 0.143134 0.0264016 +-0.0301924 0.153974 -0.00357072 +-0.0448379 0.0970765 -0.0217835 +0.00941817 0.0340541 0.000745803 +-0.0432126 0.168352 -0.00885275 +0.0554664 0.0549257 0.00120797 +-0.0225677 0.0932815 0.0503229 +-0.0524989 0.157892 0.00946562 +0.0390425 0.0953983 0.0320312 +0.04296 0.0817702 -0.00479044 +0.00635062 0.0510121 -0.0292209 +-0.0543105 0.149562 0.0267072 +0.0221931 0.100779 0.0445472 +0.0329366 0.0724958 -0.0177814 +0.0248886 0.114037 0.0344109 +-0.0550232 0.14424 -0.00134547 +0.0163915 0.04625 -0.0239163 +0.0177475 0.036867 -0.0166881 +-0.0617992 0.0867358 -0.0192812 +-0.0893599 0.133717 0.0406984 +-0.039718 0.0695625 -0.0162922 +-0.0089161 0.0389771 0.0326408 +-0.0245194 0.0879123 0.052427 +-0.0855508 0.0883229 0.0270467 +-0.0419398 0.0356984 0.00899705 +-0.0715816 0.0791203 0.0388191 +-0.0444898 0.0690526 0.0411578 +-0.070025 0.173518 -0.0406121 +-0.0628508 0.0981808 -0.0176907 +-0.0750322 0.144421 -0.00688246 +-0.0499825 0.0544896 0.033589 +-0.065333 0.177827 -0.0606985 +-0.0316114 0.123192 0.0229888 +-0.0760927 0.0805105 0.0361956 +-0.0370838 0.0486029 -0.013278 +-0.0785283 0.124553 0.0522615 +-0.0708435 0.0731956 0.0357937 +-0.0403104 0.0336344 -0.0180813 +-0.0609885 0.0628534 0.0274979 +-0.0323315 0.0624018 -0.0174393 +-0.0368547 0.100015 -0.0221726 +-0.0783796 0.172116 -0.0450441 +-0.0633655 0.139636 -0.00706655 +0.00173262 0.13137 0.0174841 +-0.0105091 0.0646847 0.0553841 +0.0266795 0.122765 0.0152477 +-0.0360635 0.034528 0.0238485 +-0.0541027 0.122637 0.0375656 +-0.0544908 0.0344999 0.0341095 +0.0176998 0.103348 0.0450658 +-0.0685644 0.145677 -0.0229009 +-0.0356468 0.0577276 -0.0110125 +-0.0696054 0.110911 0.0424293 +-0.0584669 0.0577494 0.0129387 +-0.0398029 0.0870085 -0.0218621 +-0.00967624 0.104885 -0.0231041 +0.00669982 0.0383228 -0.00932299 +-0.0609169 0.109692 -0.0160089 +-0.0646221 0.122809 0.0487379 +0.0174813 0.0865744 0.0503122 +-0.0067878 0.0386876 0.00254936 +-0.0628956 0.119461 -0.00917238 +-0.0404347 0.128451 0.0123721 +0.0304082 0.04464 -0.00596234 +0.00950687 0.0785812 0.0553914 +-0.0185636 0.161122 -0.00592394 +-0.0407009 0.066639 -0.0151117 +-0.0638844 0.0392942 0.0408356 +0.00208256 0.0392848 0.0328214 +-0.0891635 0.0901786 0.00945748 +-0.0714603 0.0390724 0.00325296 +0.0396909 0.105526 0.00119339 +-0.092918 0.118828 0.0342968 +-0.0809093 0.0912865 0.0336272 +0.0106278 0.12033 -0.0136749 +-0.079254 0.149169 0.0379325 +-0.0700516 0.177913 -0.0570165 +-0.0584973 0.0875674 0.0446281 +0.0363875 0.037641 0.0177175 +-0.0266625 0.178341 -0.0176816 +-0.0257516 0.0380733 0.00834253 +-0.0514727 0.147804 0.0154008 +-0.0475605 0.047528 -0.00960427 +0.0464078 0.0756596 0.0165703 +-0.0659757 0.132606 -0.00839654 +-0.0795255 0.0953936 0.0349279 +-0.0512091 0.118302 0.0328718 +-0.00441308 0.12096 -0.0123131 +-0.0322918 0.0358193 0.0288559 +-0.0907178 0.142015 0.0241681 +-0.0555193 0.152453 0.0283051 +-0.044345 0.152142 0.00768226 +0.0241695 0.0809229 0.0490966 +-0.0528659 0.0999263 -0.0216782 +-0.0669331 0.125307 -0.0088761 +-0.0303567 0.119073 0.029499 +0.025846 0.107916 -0.0143268 +-0.0617056 0.1325 0.0388812 +-0.0185965 0.0364224 -0.0275796 +-0.0207908 0.0384714 -0.00378381 +-0.0617181 0.0598008 0.019418 +-0.0474373 0.120726 0.0283448 +0.0366967 0.103968 -0.00783268 +0.0303183 0.0797251 -0.0205953 +-0.0317074 0.0436869 0.0496355 +-0.0623412 0.156794 -0.0356173 +-0.0765015 0.121776 0.0527715 +-0.0184879 0.122208 0.0309285 +0.0230909 0.103393 0.0423419 +0.0609018 0.0651278 0.0131549 +0.00916248 0.0355108 0.0268151 +0.0313289 0.0554154 -0.0147753 +-0.0025035 0.108652 0.0433127 +0.0546992 0.0478618 0.0141962 +-0.0620154 0.0689049 0.0360997 +-0.0388626 0.102809 -0.0208006 +-0.0555708 0.142434 0.0301615 +-0.0688026 0.146519 -0.0258522 +0.0194777 0.0878818 0.0491927 +-0.0228793 0.110931 -0.0194728 +-0.0324125 0.0849398 -0.0275574 +-0.0438855 0.03574 0.0440005 +-0.0917791 0.117463 0.0421754 +-0.0690116 0.129833 0.0494501 +-0.0743362 0.15411 -0.0219057 +-0.0638117 0.0867138 -0.0190744 +-0.045027 0.168395 -0.00690925 +0.0270479 0.080882 0.0462053 +-0.0114995 0.164138 -0.0150087 +-0.0325011 0.058955 0.0382451 +-0.0606931 0.0692955 -0.0138548 +-0.0566913 0.0572662 0.0137312 +-0.00649633 0.0488329 0.050181 +0.0223101 0.120965 0.030775 +-0.0805231 0.0993639 0.0329828 +-0.0644795 0.0959078 0.0429389 +-0.075154 0.17882 -0.048244 +0.00607351 0.0358936 0.0456569 +-0.035492 0.0648204 0.0410644 +-0.0576415 0.155076 0.0216791 +-0.0762945 0.152787 -0.0118902 +-0.00761327 0.0434711 -0.0261832 +-0.0814624 0.13163 0.0517276 +-0.0743185 0.067053 0.0192856 +-0.0842709 0.104792 0.000381661 +-0.0374161 0.12162 -0.0106267 +0.0282004 0.082909 -0.0218038 +-0.0538885 0.131144 0.0343613 +0.0268226 0.046511 -0.0137061 +-0.0500801 0.151654 -0.00422617 +-0.0843259 0.153929 0.0166903 +-0.0840259 0.124392 0.0498267 +-0.0906893 0.11752 0.0439252 +-0.0636773 0.162484 -0.0225185 +0.0362915 0.0534119 -0.00658438 +-0.0733102 0.0700068 0.0292571 +0.0432125 0.0858656 0.0273897 +0.0392299 0.108358 0.0101653 +-0.0357967 0.0383351 -0.00483874 +-0.0645865 0.0628123 -0.00359236 +-0.0838768 0.108986 0.0253683 +-0.0538875 0.139905 -0.00121756 +0.0463511 0.0764838 0.0150474 +0.0180384 0.119266 -0.0105437 +-0.0812898 0.0735018 0.0165324 +-0.0437426 0.076832 -0.018848 +-0.0489995 0.126854 0.0308899 +0.00913686 0.107291 -0.0199257 +0.0413467 0.0718054 -0.00779903 +-0.0407607 0.126285 -0.00553285 +-0.0564807 0.113914 0.0357075 +-0.0477527 0.149202 0.00972608 +-0.0737025 0.144377 -0.00986626 +-0.0237128 0.058121 -0.0313582 +-0.0884618 0.142054 0.0361609 +-0.00450592 0.0661541 0.056364 +-0.0448888 0.108464 -0.0189265 +-0.0531399 0.13506 -0.0028018 +0.0308728 0.114122 0.0296728 +-0.0120858 0.0382274 0.0182274 +0.045976 0.0820209 0.01617 +-0.0474955 0.0344671 0.0303636 +0.0116443 0.129846 0.0210966 +0.0429126 0.0775596 -0.00475805 +-0.0639176 0.122377 -0.00881224 +-0.0219078 0.0581082 0.0451165 +-0.0185957 0.118181 -0.0131167 +-0.0381658 0.165183 -0.0131497 +-0.0445045 0.0438483 0.042919 +-0.0464974 0.074738 0.042075 +-0.0819901 0.133862 -0.00285904 +-0.0633534 0.0445301 0.031682 +-0.0314905 0.0960436 0.0448087 +-0.0575997 0.0574661 0.0133658 +-0.0303698 0.154176 -0.00601441 +0.0133009 0.0666579 -0.0304883 +0.0108109 0.0819726 0.0543646 +-0.068057 0.178404 -0.0514469 +-0.0806807 0.0760273 -0.00253172 +0.0394926 0.0541437 0.0318453 +-0.00450121 0.0675415 0.056336 +-0.019491 0.0387907 0.0342254 +0.0147818 0.0631153 0.0511723 +-0.0291704 0.172664 -0.0174314 +0.0262968 0.070421 -0.0238548 +-0.0421212 0.159153 -0.0103433 +-0.0367588 0.172073 -0.0125043 +-0.0196292 0.117165 -0.0140584 +-0.042525 0.149193 0.00498605 +-0.0175612 0.186044 -0.0184493 +0.0221884 0.0973608 -0.0216774 +-0.0197019 0.0568866 -0.0331333 +-0.045504 0.0832988 0.0437099 +-0.0212803 0.0387041 -0.0133833 +-0.0770943 0.154164 -0.0118975 +-0.0484907 0.0833394 0.0445457 +-0.0238036 0.0798229 -0.0381557 +-0.0372926 0.0394674 -0.0291193 +-0.00273038 0.0683735 -0.0347173 +-0.0659296 0.14253 0.0416232 +0.0452769 0.0467388 0.0283148 +-0.0898014 0.11587 0.00528404 +0.0263587 0.0577877 0.0432503 +-0.0486968 0.067904 -0.0141574 +-0.0893812 0.113196 0.0217139 +-0.0841444 0.110242 0.00330414 +-0.0631329 0.17411 -0.0535854 +0.0348962 0.0387881 -4.46661e-05 +0.0431163 0.0888383 0.0261767 +-0.0444887 0.166716 0.00379579 +-0.0235591 0.0953745 -0.0271663 +0.0455985 0.0918132 0.00816712 +-0.0917403 0.12555 0.0418871 +-0.0890224 0.136404 0.0092064 +-0.0364114 0.175555 -0.00996795 +-0.0345906 0.0727451 -0.0199624 +0.0429111 0.040977 0.0196984 +0.00148534 0.0385845 0.0464325 +-0.0585016 0.0973698 0.0431908 +-0.0484982 0.0819185 0.0441136 +0.00821862 0.116409 0.0384227 +0.0456517 0.0413562 0.00923967 +-0.0769167 0.0873975 0.0382106 +-0.061867 0.101123 -0.0184855 +0.0202898 0.124676 0.0257091 +-0.0101432 0.130124 0.0117041 +-0.0138894 0.183111 -0.0237643 +-0.0707552 0.0792696 -0.0152786 +0.0465284 0.0761532 0.0136843 +-0.0888827 0.140531 0.0122011 +-0.0659605 0.110851 0.0377691 +-0.0638988 0.109582 -0.0144399 +0.0445103 0.0541956 0.0324876 +-0.0545376 0.0335773 0.0172858 +0.0156666 0.0726831 0.0525311 +-0.0224929 0.0448955 0.0530527 +0.00250097 0.0897336 0.0558646 +-0.0427601 0.128938 0.0129983 +-0.0749067 0.100837 0.0372176 +0.0100662 0.0792875 0.0550109 +0.031592 0.0738009 -0.0197207 +-0.0295595 0.111353 -0.0178807 +-0.0265381 0.155425 -0.00506198 +0.0110253 0.0793101 0.0546505 +0.0455932 0.0834007 0.019176 +-0.00963497 0.0389293 -0.00939263 +-0.0740278 0.157006 -0.00316778 +0.026879 0.121193 0.00250168 +-0.0840153 0.1376 0.000355984 +0.00144074 0.0344391 0.0153316 +-0.062494 0.0746373 0.0407954 +-0.0714338 0.100882 0.0394174 +-0.0511894 0.0558131 0.0154354 +0.0142545 0.0887312 0.0523539 +-0.0217647 0.0699552 -0.0378816 +0.042865 0.0958458 -0.000810373 +-0.0225278 0.18149 -0.0200273 +-0.0516224 0.0545433 -0.00792825 +-0.0894416 0.0943032 0.0194238 +-0.0450754 0.033637 -0.0171737 +-0.0189216 0.122512 -0.00768052 +-0.0278603 0.101566 -0.0234492 +0.0273313 0.094554 -0.020088 +-0.0568394 0.145329 0.0319256 +0.0299199 0.11779 -0.000781916 +0.0345811 0.0368089 0.0162808 +0.0130795 0.0927597 -0.0282037 +0.0239979 0.0768543 0.0488301 +-0.0560741 0.15232 0.0295584 +-0.0713082 0.165213 -0.0459899 +0.0214853 0.0948038 0.0473574 +-0.0124976 0.0472007 0.0479814 +0.0101747 0.096292 -0.0259611 +-0.0424942 0.0916602 0.0426604 +-0.000674255 0.10997 -0.0204918 +-0.0731036 0.0721584 0.0326952 +-0.0863191 0.0806349 0.0164939 +-0.0174959 0.0984963 0.0451272 +-0.0516134 0.0334804 0.007228 +0.0210892 0.0521114 0.044364 +-0.0767842 0.155599 0.0119802 +-0.0737106 0.0699801 -0.00251138 +0.0277999 0.0727164 0.0436883 +0.0605691 0.0637105 0.0171755 +-0.0720961 0.156364 0.000513559 +-0.0818934 0.154016 0.0102104 +-0.0184806 0.169783 -0.0146335 +-0.073631 0.173473 -0.03767 +-0.0385075 0.0888951 0.0435504 +-0.056184 0.0374619 -0.0105738 +-0.0164629 0.0616668 0.0525376 +-0.0214965 0.0525299 0.044709 +-0.0324599 0.0722556 -0.0254696 +-0.0781568 0.167257 -0.0305864 +-0.0633087 0.117017 0.0436447 +-0.084428 0.138004 0.0455627 +0.0287818 0.0480764 -0.0117305 +-0.0706135 0.175903 -0.0451833 +-0.0430742 0.0335089 -0.0222312 +0.0203664 0.0506236 -0.0244327 +-0.0807714 0.153393 0.00628177 +-0.0784635 0.138605 0.0489019 +-0.0754126 0.068174 0.019879 +-0.0105025 0.0773598 0.0576687 +-0.0399608 0.0418525 -0.0253044 +-0.0880973 0.137764 0.00820327 +-0.0862825 0.106347 0.0193454 +-0.0114851 0.123708 0.0326887 +-0.00700917 0.0348727 0.042072 +-0.0760973 0.0851761 -0.013541 +0.0421377 0.0912242 0.0276147 +0.0298218 0.119509 0.00500708 +-0.0550443 0.148674 -0.00204704 +-0.0107558 0.0386486 -0.0149703 +0.00849857 0.118254 0.0373924 +0.0373294 0.0848074 0.0364738 +0.0506886 0.0511228 0.0274131 +-0.0538924 0.106961 -0.0186698 +-0.0735555 0.105459 0.0371635 +-0.0532563 0.0343869 0.0309731 +-0.015483 0.0938222 0.0546278 +0.0454513 0.052559 0.0321398 +0.032601 0.100801 0.0367685 +-0.0688527 0.142579 0.0444582 +-0.0908832 0.150197 0.0161314 +-0.0811312 0.129963 0.0524484 +0.00846909 0.111301 0.0401143 +-0.0622744 0.0344133 0.0342699 +-0.0343155 0.0340522 0.0192395 +-0.0869096 0.111745 0.0223587 +0.0507656 0.0446256 0.0152142 +-0.0767707 0.151403 -0.00690852 +-0.00150011 0.103045 0.0440564 +-0.051019 0.147224 -0.00224048 +-0.025918 0.122982 0.0235755 +-0.0527617 0.0461943 0.0216742 +-0.0178184 0.0841429 -0.0390768 +-0.0345091 0.0461323 0.043875 +-0.0623881 0.149093 -0.0125752 +-0.0809179 0.0761444 0.0241516 +-0.00945917 0.175708 -0.0257473 +-0.0334992 0.0704401 0.0410454 +-0.0886682 0.141939 0.0121971 +-0.0120612 0.0383071 0.0127308 +-0.0853843 0.0980412 -0.000554198 +-0.0325205 0.0646875 0.0393461 +0.0503466 0.0615208 -0.00363326 +0.00449283 0.103624 -0.0217086 +-0.0698084 0.085099 -0.0171261 +0.0438316 0.0832073 0.0263179 +-0.0486418 0.0576652 -0.0108452 +0.0123248 0.0609207 -0.0293142 +0.0429772 0.0902337 -0.00478341 +-0.0619824 0.166238 -0.0535924 +0.0140441 0.0406072 0.0445814 +0.00249558 0.116934 0.0396534 +0.018473 0.0989902 0.0468145 +-0.0169827 0.0385945 -0.00497776 +0.0309161 0.0955754 0.0413413 +-0.0735982 0.110276 0.0438156 +-0.0903629 0.11521 0.0252935 +-0.0566835 0.124286 -0.00724626 +-0.0620082 0.134045 -0.00734981 +0.00521493 0.0852237 -0.0334342 +-0.0903999 0.124268 0.0448512 +0.0114719 0.1182 0.0365719 +0.0344326 0.0414166 -0.00330414 +-0.0403754 0.124077 -0.00919956 +0.0484547 0.0702338 0.00359645 +-0.0285016 0.113902 0.0349068 +-0.0526285 0.0596472 0.0276152 +-0.0325191 0.174119 -0.0148634 +-0.0204902 0.108532 0.041306 +0.010276 0.076623 0.0552854 +0.0133781 0.0537725 -0.0285433 +0.0402901 0.0698645 0.0318359 +0.0401742 0.0671588 0.0316675 +-0.0866887 0.120341 0.0484058 +0.0245253 0.0875975 0.0479106 +-0.050498 0.0890212 0.0452499 +-0.0598028 0.0853759 -0.0202992 +0.0354525 0.106753 -0.0069512 +0.0111874 0.0630268 0.0529412 +-0.0416003 0.12872 0.00602836 +0.0443487 0.0533892 -0.00643258 +-0.0229394 0.0985982 0.0448104 +-0.0678177 0.0894605 -0.0172539 +-0.0826703 0.0762102 0.00250991 +-0.0152189 0.172708 -0.0246075 +-0.0748382 0.0978559 -0.0133191 +0.0284295 0.0955564 0.0430179 +-0.04802 0.136068 0.0153684 +-0.0475691 0.0489734 -0.00936479 +-0.0813576 0.0734641 0.0155425 +-0.07594 0.14997 -0.0178724 +-0.0649871 0.152354 -0.0372683 +-0.0229947 0.122243 0.0275866 +-0.0108296 0.0855471 -0.0384547 +-0.0447583 0.0336472 -0.00973579 +-0.041838 0.0942787 -0.0228038 +-0.038857 0.101401 -0.0214118 +0.00839351 0.0342854 -0.0184828 +0.0436422 0.0748109 -0.00280304 +0.00409443 0.101828 -0.021842 +-0.0194474 0.054231 0.0477027 +0.0410346 0.0752467 0.03121 +0.0588047 0.0677091 0.00614939 +0.021598 0.10091 -0.0208238 +-0.0696323 0.156261 0.0232204 +-0.086966 0.0846591 0.00747852 +-0.0660124 0.176151 -0.0507054 +0.0425261 0.101486 0.00616657 +0.0305131 0.0418181 0.0291512 +-0.0554982 0.113948 0.0354054 +-0.0763852 0.108818 0.0389983 +-0.0785959 0.152697 0.00118419 +0.0184567 0.127794 0.00934393 +0.0105917 0.043143 0.0448676 +-0.0719858 0.0346482 0.00381826 +-0.0341243 0.0335931 -0.0280196 +-0.0564439 0.115317 0.036137 +-0.0928438 0.126838 0.0112559 +-0.0661071 0.164936 -0.0219713 +-0.0665376 0.142546 0.0425061 +-0.0167827 0.0388081 0.0329676 +-0.0614351 0.156032 0.020314 +0.0388231 0.106965 0.0221712 +0.0247856 0.0449735 0.0390757 +-0.0324984 0.0788891 0.0412743 +-0.068331 0.155325 0.0280685 +0.0267262 0.114038 0.0335472 +-0.0888783 0.111909 0.0103621 +-0.0772308 0.0920788 -0.012603 +0.0457689 0.0431024 0.0219801 +0.0474981 0.0737139 0.0139878 +-0.061487 0.0746791 0.0411579 +-0.0861526 0.148758 0.00721004 +0.0341879 0.0913684 -0.0166968 +-0.0200728 0.100101 -0.0240875 +-0.0286491 0.125506 0.0152069 +-0.0268606 0.0378639 0.0137313 +-0.0352216 0.0346633 0.0327857 +-0.0444613 0.12936 0.0182577 +0.0373383 0.0740435 0.0363986 +0.00751373 0.0869673 0.0561316 +-0.0888328 0.0942898 0.0224093 +0.00897858 0.127106 -0.00499333 +0.0363106 0.0994119 0.033375 +-0.0448194 0.0913346 -0.0221278 +0.000368669 0.0466323 -0.0286891 +-0.0606782 0.0639978 0.0300882 +-0.0735086 0.078138 -0.0125733 +-0.0358361 0.11045 -0.0189078 +0.0300578 0.0632721 0.0416198 +0.0173543 0.0349384 0.0362289 +-0.0104845 0.10863 0.0429333 +-0.0265155 0.115287 0.0336658 +0.0257868 0.0967214 -0.0203669 +0.0255714 0.119263 0.0291067 +-0.0404457 0.119913 -0.0128413 +-0.0596429 0.0622343 0.0265494 +-0.0522074 0.122732 -0.00965468 +0.00419216 0.0340885 -0.0190827 +-0.0614977 0.108395 0.0385563 +-0.0154933 0.0392591 0.0382209 +0.0568425 0.0592039 0.0011688 +0.033494 0.0619462 0.0395497 +0.0378948 0.0699732 0.0354084 +-0.0643687 0.155314 0.00767719 +-0.017163 0.124753 -0.00408239 +-0.0892062 0.128127 0.00426293 +-0.058497 0.101559 0.0426268 +-0.00170163 0.130406 0.0219933 +0.0258358 0.123453 0.0120756 +0.0200283 0.102079 0.0449293 +-0.0034976 0.0965806 0.0535793 +-0.0805988 0.090913 -0.0086158 +0.0307316 0.091606 0.0428217 +0.0293141 0.095566 0.0425395 +0.011103 0.0779768 0.0547588 +-0.0912353 0.14886 0.0211316 +0.0484812 0.0443317 0.021366 +-0.00581925 0.0868408 -0.0369183 +-0.0454559 0.0902978 0.0432333 +-0.0346794 0.119765 -0.0106544 +-0.00349323 0.113677 -0.0184484 +-0.0434907 0.101526 0.0420227 +-0.0385061 0.0986889 0.0419871 +-0.0599081 0.112539 -0.0152225 +-0.0242322 0.124794 -0.000701199 +0.0400813 0.104202 0.0221684 +-0.0828121 0.0830332 0.030132 +0.0159137 0.128436 0.00413586 +-0.0645186 0.0597262 0.00993302 +-0.0324512 0.0353306 -0.0309147 +-0.0484861 0.137101 0.00939484 +-0.0304745 0.0860755 0.0433189 +0.0188415 0.121733 -0.00718615 +-0.0643746 0.145275 -0.0151376 +0.0208541 0.11855 -0.00976629 +0.037465 0.0434297 0.0291248 +0.0517879 0.0461689 0.0072143 +-0.0837871 0.0829476 0.0282971 +-0.0917215 0.129668 0.0302355 +-0.0261628 0.0674202 -0.0335157 +-0.0631555 0.156855 -0.014582 +0.043463 0.077603 -0.00378219 +-0.0602407 0.058232 0.0121428 +-0.0458636 0.102811 -0.0213024 +-0.038884 0.108506 -0.019659 +-0.0705258 0.142815 0.0451961 +-0.0781039 0.070111 0.0193756 +-0.0758474 0.109198 0.0406016 +-0.0318501 0.0986369 -0.02282 +-0.038215 0.0471675 -0.018189 +-0.0134374 0.0516868 0.0502089 +0.0151412 0.0754034 0.0535569 +-0.043493 0.105703 0.0408668 +-0.0822959 0.0773319 0.0228488 +0.0452717 0.0903987 0.0151606 +0.0159567 0.120613 0.0338084 +-0.0623049 0.142641 -0.00633906 +0.000467241 0.105823 0.0432483 +-0.0177409 0.0671746 -0.0379913 +-0.0891252 0.0889064 0.0184472 +-0.0678748 0.125664 0.0510849 +-0.0337468 0.127104 0.0118588 +-0.0518684 0.102767 -0.0207881 +0.00221584 0.0364728 0.00081639 +-0.0296253 0.0759773 0.0411397 +0.00226876 0.0682822 -0.0333186 +-0.0542457 0.0574384 0.01981 +-0.0659991 0.136994 -0.00799651 +-0.00357593 0.127459 -0.0052112 +0.0103564 0.0538895 -0.0297771 +0.0272815 0.0718243 -0.0235929 +-0.0123281 0.0344052 -0.018857 +0.0416155 0.0404142 0.0199255 +-0.0106878 0.0598858 -0.0348312 +-0.0305006 0.116618 0.0322439 +0.0427332 0.084569 0.0284544 +-0.0712328 0.151001 -0.0437008 +0.0423623 0.0944394 0.0261744 +-0.000687654 0.0583509 -0.0327859 +-0.0779789 0.136876 -0.0051311 +-0.0657518 0.0780369 -0.0174491 +-0.0789069 0.155396 0.0141592 +-0.0701046 0.156748 -0.048906 +0.0281353 0.0593598 -0.0207767 +-0.066567 0.147777 -0.0287654 +-0.0167976 0.0383562 0.00264497 +-0.0708835 0.160996 -0.0449446 +0.0230988 0.111339 0.037076 +-0.0237033 0.091176 -0.0348871 +-0.0477118 0.073839 -0.0167643 +-0.0540526 0.0334248 -0.00589512 +-0.0535445 0.0389126 -0.0111352 +0.00251277 0.0675114 0.055914 +-0.0324736 0.0532348 0.0372028 +-0.0416459 0.056333 -0.0114534 +-0.0460476 0.0363198 0.0451262 +-0.0215027 0.163915 -0.00845889 +-0.0530817 0.139518 0.0266624 +-0.00971954 0.0656257 -0.0358484 +-0.0175293 0.038199 0.0153321 +-0.0388176 0.128112 0.00411022 +-0.0579212 0.120852 -0.00959233 +-0.0215953 0.03793 -0.0285032 +0.00849245 0.0473031 0.0488481 +-0.045123 0.157633 -0.00869072 +-0.0845016 0.0911794 -0.00456302 +-0.0130394 0.0384127 0.00153612 +-0.0054932 0.111405 0.0422861 +-0.00614297 0.0385457 0.0227705 +-0.0588822 0.108299 -0.017343 +-0.0647452 0.0766241 -0.0174472 +0.0333079 0.0768384 0.0411622 +-0.0345058 0.0704863 0.0415356 +-0.00385823 0.0988046 -0.0266644 +-0.0940576 0.125561 0.0242759 +-0.0406606 0.156554 0.00601794 +0.0458479 0.0724092 0.00333418 +-0.0536298 0.0345249 0.0429297 +0.0422446 0.0760949 -0.00580476 +0.0305908 0.106106 0.0356297 +-0.0744956 0.13026 0.0524093 +-0.060795 0.0853339 -0.0197774 +-0.0659276 0.123847 -0.00897257 +-0.0587952 0.0334058 0.000425547 +-0.0355002 0.111108 0.0360398 +0.0106562 0.0589179 0.0524466 +0.0220342 0.108737 -0.0152173 +0.0414017 0.104253 0.00516521 +-0.0487319 0.132909 0.0254731 +-0.073147 0.0648981 0.0178865 +-0.0655672 0.149686 0.0379738 +-0.0866855 0.14466 0.00818677 +-0.0690156 0.163795 -0.0519803 +0.0474899 0.0664975 0.0274045 +-0.0693729 0.175081 -0.056043 +-0.0811978 0.140383 -0.00182247 +-0.0609117 0.111106 -0.0154828 +-0.027448 0.125478 0.0053817 +-0.0601827 0.0460596 0.0101722 +-0.0116048 0.0377441 -0.0259987 +-0.0623577 0.147557 -0.00658086 +-0.0635933 0.167459 -0.0411888 +-0.0420303 0.153306 -0.00761985 +0.0045298 0.102977 0.0440255 +-0.0571296 0.124118 0.0402058 +-0.010491 0.0487865 0.0492904 +-0.00149595 0.0911539 0.0561263 +-0.0644925 0.0903995 0.0447493 +-0.0621097 0.156825 -0.0345957 +-0.0626845 0.0455625 -0.000282658 +-0.054778 0.0344845 0.0375447 +-0.0704967 0.156763 -0.0469167 +-0.0501084 0.0429877 0.0445637 +-0.074873 0.120838 -0.00772479 +0.0354301 0.112103 0.00127449 +-0.0218649 0.103029 -0.0235712 +-0.09096 0.148814 0.0141536 +-0.0645626 0.0459512 0.00669838 +0.0314584 0.111437 -0.00809824 +-0.022876 0.0362943 -0.0189473 +-0.0428901 0.0435976 -0.0193145 +-0.0746823 0.0663852 0.00625465 +-0.0476209 0.0547841 -0.0103184 +-0.0197585 0.171251 -0.0147167 +-0.0705035 0.0901829 0.0418541 +0.0494272 0.0628335 -0.00296645 +0.0266028 0.105322 -0.0155495 +0.0202061 0.126966 0.0100746 +0.013717 0.127103 0.0275992 +0.00956448 0.122301 -0.0117968 +-0.0846111 0.084433 -0.00253466 +-0.0889485 0.13651 0.0272017 +-0.000398103 0.0385343 0.0221462 +0.0428913 0.0402636 0.016655 +-0.0531156 0.156084 -0.00339606 +-0.0586999 0.141645 -0.00399496 +0.0175889 0.0549386 0.0481228 +0.0242735 0.0576737 -0.0247443 +-0.0435028 0.0548283 0.0392794 +-0.0509876 0.0343016 0.0280109 +-0.0371778 0.128019 0.00618657 +-0.067159 0.152634 -0.0476967 +-0.0524481 0.115128 -0.0157418 +-0.00787248 0.0390234 0.0328097 +-0.0368889 0.109941 -0.0191779 +0.0473251 0.0497353 0.0295737 +-0.0155015 0.10721 0.0425067 +-0.0607907 0.0609394 -0.0015406 +0.0214998 0.0358071 0.0181694 +-0.0152794 0.114388 -0.017154 +-0.0618553 0.153745 -0.0235803 +-0.00541506 0.100313 0.0476265 +0.0438051 0.0987511 0.0101628 +-0.0274965 0.0973724 0.0435854 +0.0448746 0.0601039 -0.00424277 +0.031559 0.0460718 0.0312637 +-0.0615188 0.0448284 0.0115308 +-0.0397761 0.115072 -0.015742 +-0.0918654 0.131039 0.0272344 +-0.0646035 0.156332 -0.00986181 +0.0383993 0.0413521 -0.00190432 +-0.026722 0.0386646 -0.0162927 +-0.0736148 0.0995067 0.0387799 +0.006499 0.119638 0.036869 +0.0405971 0.101404 0.0241737 +-0.0944613 0.121476 0.0212834 +-0.0105851 0.0337493 -0.0235512 +-0.0799934 0.136838 -0.00393652 +0.0529009 0.0462649 0.0122044 +-0.0539028 0.11125 -0.0176614 +0.00874316 0.130156 0.0228898 +0.0260633 0.114349 -0.00924148 +0.0113837 0.0449118 -0.0251572 +-0.0461015 0.150679 0.0086365 +0.00236523 0.128663 -0.00254763 +-0.0158845 0.0910066 -0.0366604 +0.0456174 0.0890068 0.0121612 +-0.0634393 0.144588 -0.0113838 +0.0175304 0.120577 0.0333463 +-0.0256229 0.0463679 -0.0270847 +-0.0606463 0.0343588 0.0329219 +-0.0622926 0.149098 -0.0115749 +-0.0266239 0.0463597 -0.0270834 +0.0142234 0.0864184 -0.0301272 +-0.0242795 0.0383175 -0.000652306 +-0.0599506 0.0340585 0.0228145 +-0.031899 0.0595768 -0.0154053 +0.0335035 0.0686838 0.0396083 +-0.00350655 0.105885 0.0441283 +-0.00849376 0.0576353 0.0542501 +-0.0596861 0.0693591 -0.0143393 +-0.0246408 0.0382637 -0.00251941 +0.0142384 0.0723592 -0.0308856 +0.0360996 0.112682 0.0101589 +0.00650478 0.0989998 0.0481043 +-0.0406764 0.0344836 0.0353061 +0.0208126 0.114503 -0.0133998 +-0.0664042 0.0385079 0.0306689 +-0.00851871 0.0471234 0.047663 +-0.0607941 0.143953 0.0367655 +-0.0469959 0.06153 0.0374819 +-0.0566078 0.0521283 0.00668717 +-0.0117953 0.0827249 -0.0387188 +-0.0651684 0.0346977 0.0334093 +0.0334291 0.0781951 0.0413414 +-0.00319773 0.0384234 0.00715593 +-0.0255204 0.115294 0.0339151 +-0.070852 0.100833 -0.0142398 +-0.0647775 0.0824087 -0.0188685 +0.0351918 0.0673501 0.0385292 +-0.0201767 0.0929008 -0.0346271 +-0.0292631 0.0351386 0.0510616 +-0.0487306 0.0345868 0.0335095 +-0.0909618 0.13376 0.0242167 +-0.0399614 0.0343338 -0.0130933 +0.0409886 0.0643095 0.0292691 +-0.0656099 0.0655077 0.0295065 +0.0113576 0.0509388 -0.0282254 +-0.0831709 0.101988 -0.00359129 +-0.0345055 0.113874 0.0339275 +0.0308648 0.0460986 0.0320207 +-0.023595 0.180085 -0.0196757 +0.056025 0.0493916 0.0151904 +-0.0805557 0.0977534 -0.00758611 +0.0084218 0.0346373 0.0418695 +-0.0774116 0.159696 -0.0249188 +0.0602932 0.0636878 0.00814035 +-0.0302474 0.125253 0.00290344 +-0.0741812 0.074527 0.0339368 +-0.0636646 0.15831 -0.045603 +-0.0332687 0.15271 -0.00392746 +0.0267163 0.0450608 -0.00869474 +0.0351226 0.0921155 -0.0154837 +-0.0278275 0.158128 -8.54892e-06 +-0.0771542 0.152814 -0.00588992 +0.00726262 0.0682112 -0.0321527 +-0.0590296 0.0424919 -0.00727859 +-0.0604873 0.0987275 0.0428004 +-0.0916073 0.128323 0.0352449 +0.0474407 0.0661575 -0.000283122 +0.03984 0.106962 0.00517391 +-0.0609078 0.155801 0.00889681 +-0.00849418 0.114178 0.0409373 +0.00894357 0.0819404 0.0551438 +-0.0767684 0.0756527 -0.0076025 +-0.0670227 0.0607355 0.00842954 +-0.0186908 0.0510113 -0.0307584 +-0.0706351 0.0733936 -0.01149 +-0.026674 0.0382695 0.00254021 +0.0585127 0.0649229 0.00410871 +0.0241246 0.0605253 0.0453245 +0.0172623 0.073643 -0.0290458 +-0.0564969 0.111123 0.0367634 +0.0543584 0.0674371 0.0258007 +-0.0511173 0.128308 0.0330935 +-0.075231 0.151315 -0.0248804 +-0.0492462 0.132382 0.000177088 +-0.0694944 0.11756 0.0525327 +-0.0721635 0.113702 0.0503204 +-0.0647819 0.0809531 -0.0185144 +0.00336694 0.130688 0.00234495 +0.0243671 0.0699418 0.0457082 +-0.000607851 0.0448652 -0.0263872 +-0.0506782 0.141637 0.0173818 +-0.0618089 0.0881716 -0.0191682 +-0.0886021 0.087516 0.0174642 +0.011433 0.034701 0.0261941 +-0.0405676 0.171048 0.000226569 +0.0111139 0.110132 -0.0191278 +0.0136046 0.121889 0.0339065 +-0.0107442 0.0742291 -0.0379783 +0.0438711 0.0959127 0.00218342 +-0.0299153 0.155169 -0.001314 +-0.0469317 0.0369443 -0.0162782 +-0.0887949 0.142048 0.03516 +-0.0459209 0.0346888 0.0375199 +-0.0022788 0.119988 -0.0131916 +0.00522675 0.0768423 -0.034472 +-0.0277078 0.0725313 -0.0348614 +-0.0679296 0.125304 -0.00887173 +-0.0528849 0.101359 -0.0212107 +0.0356786 0.076967 -0.014745 +-0.0567974 0.0854612 -0.0213212 +0.00206285 0.121236 -0.012553 +-0.0659186 0.159142 -0.0118027 +-0.0857862 0.0939971 -0.00056361 +-0.0318889 0.124978 0.0199371 +0.0110379 0.0712445 0.0546046 +-0.043282 0.147753 0.00390043 +0.0142589 0.0737441 -0.0304465 +-0.037534 0.168232 0.00175297 +0.0421124 0.0467315 0.0307997 +-0.0195242 0.0336044 -0.023287 +-0.0581683 0.0606896 -0.00283185 +-0.0892904 0.149814 0.024685 +-0.0328117 0.0335416 -0.0258378 +-0.0534094 0.150878 0.0234093 +0.0224588 0.120521 -0.00588511 +0.0297724 0.0549903 0.0393628 +-0.0689711 0.136995 -0.00816407 +0.0327608 0.11383 -0.00261931 +-0.0138771 0.164812 -0.0186885 +0.00401259 0.0341521 0.00329327 +-0.0776837 0.154812 0.0263001 +-0.0617213 0.0781294 -0.0185002 +0.0405341 0.105626 0.00416435 +-0.033143 0.157873 -0.0118064 +-0.0244152 0.0723023 0.0471532 +0.000983167 0.0373381 0.00163376 +-0.0227666 0.126779 0.0143916 +-0.0151278 0.128803 0.00988702 +0.000514565 0.0717586 0.0570729 +0.0202169 0.0591906 0.0484605 +-0.0591321 0.0334434 -0.0069378 +-0.0338188 0.0345795 0.040191 +-0.000499113 0.11695 0.0400287 +-0.0463678 0.13079 0.00400616 +0.0171482 0.0349466 -0.009792 +-0.064905 0.0607648 0.0196679 +-0.0624362 0.150651 -0.0105777 +-0.0354607 0.154847 -0.00919588 +-0.0211471 0.0377711 0.0538261 +-0.0691709 0.147293 -0.0286567 +-0.0360974 0.127648 0.0124754 +-0.0776508 0.151441 -0.00388634 +0.0365033 0.0512847 0.031619 +0.0193623 0.0370952 -0.00967348 +0.0153438 0.0522442 -0.0271619 +-0.0174947 0.0815257 0.0576296 +-0.0629203 0.122369 -0.00879811 +0.0168951 0.128644 0.0116162 +0.0397845 0.0699028 0.0328672 +0.00847616 0.0963576 0.0505263 +-0.0532837 0.0454354 0.0434394 +-0.0154326 0.0388218 -0.0141873 +0.058968 0.0691324 0.00813536 +-0.0155327 0.116851 0.0372458 +-0.0261049 0.0632214 -0.0314499 +-0.0580383 0.122682 0.0406302 +-0.0153478 0.0972963 0.0501876 +-0.0480268 0.116533 -0.0152488 +-0.0440293 0.0378087 0.0445145 +0.0122229 0.0822322 -0.030844 +-0.00477881 0.0390844 -0.0104359 +-0.0106511 0.0496684 -0.0311061 +-0.0197213 0.123533 0.0272668 +-0.000499702 0.119705 0.0381547 +-0.0497662 0.165331 0.00186024 +0.0034577 0.0989815 0.0493164 +-0.0623164 0.153672 -0.0306063 +-0.0676947 0.134039 0.046063 +-0.0536041 0.0588172 -0.00776341 +-0.0774688 0.144183 0.0446652 +-0.054123 0.064196 0.0330627 +-0.0515128 0.0452783 0.043411 +-0.0216106 0.0422609 -0.0287762 +-0.0721201 0.0655088 0.0210948 +-0.0214414 0.0682091 0.0499624 +0.0246691 0.103387 0.0411037 +-0.0584632 0.0480819 0.000648377 +-0.0193941 0.113623 -0.0183331 +-0.0642327 0.0431706 0.0367918 +-0.0673041 0.044774 0.00468689 +0.00124491 0.0726488 -0.0351082 +0.0293752 0.0646271 0.0424024 +0.0334188 0.0399387 -0.00226403 +-0.0648162 0.092445 -0.0185198 +-0.0588392 0.0371017 0.0463605 +-0.0464973 0.113852 0.0344899 +-0.0253214 0.158135 -0.00165461 +0.0565751 0.0564133 0.00219071 +-0.0628971 0.106793 -0.0162163 +-0.0672273 0.135447 0.0449702 +-0.0874127 0.118983 0.0477049 +0.0264339 0.0415833 -0.00518191 +-0.0649816 0.114139 0.0429675 +-0.087689 0.0861087 0.0184696 +-0.0759388 0.151364 -0.016882 +-0.00938485 0.0992897 -0.0251913 +-0.0906583 0.12815 0.00627512 +0.0420818 0.101483 0.016165 +-0.0366993 0.124957 -0.00615077 +0.0344101 0.0633165 0.0391255 +0.0312208 0.0578184 0.0397344 +-0.0245116 0.0679611 0.0445844 +-0.0494967 0.0932039 0.0445022 +-0.0762012 0.149986 -0.0138757 +-0.0469178 0.060141 0.0374462 +-0.0939221 0.128285 0.0202478 +-0.0488103 0.0898531 -0.0217755 +-0.013542 0.129298 0.0162538 +0.0557083 0.0616421 0.000366134 +0.0340796 0.0848941 0.0405554 +0.0303873 0.0525299 -0.0147333 +0.0173214 0.127268 0.00181685 +-0.0623602 0.164675 -0.0475927 +-0.0633366 0.0613129 -0.000511486 +-0.0663574 0.0370366 0.0151548 +-0.0567588 0.053509 0.00466959 +-0.082746 0.0802849 -0.00049163 +-0.00173892 0.0697883 -0.0347021 +-0.0444708 0.0888726 0.0431834 +-0.0676524 0.0720092 -0.0120172 +0.0578262 0.0552267 0.0219335 +-0.0418656 0.104235 -0.0206965 +0.0300166 0.0708304 -0.0207823 +-0.0533336 0.128311 0.0351755 +-0.0275965 0.0836272 0.048557 +-0.0894883 0.139285 0.0301857 +0.0461177 0.0511569 0.0313544 +0.0505588 0.0711508 0.00463977 +-0.0653079 0.154958 0.0291369 +-0.0185448 0.0460852 0.0515079 +-0.0843685 0.105877 0.0253348 +-0.0875722 0.151019 0.0254764 +-0.0711952 0.0805577 0.0397762 +0.0367726 0.100261 -0.0101361 +0.0280869 0.0432543 0.0332457 +0.000487446 0.041412 0.0465786 +-0.0266388 0.038336 -0.00299264 +-0.00342216 0.0391144 -0.00832149 +-0.0611289 0.0344725 0.039662 +-0.0517362 0.0738243 -0.0167692 +-0.0804236 0.104574 -0.00559216 +-0.0319013 0.0525534 -0.0124561 +-0.0616634 0.0612417 -0.00198952 +-0.0659473 0.151954 -0.0393992 +0.0336372 0.112962 -0.00230707 +-0.0699642 0.138462 -0.00776795 +0.00139789 0.0405023 -0.0245871 +-0.059508 0.0890036 0.0450344 +-0.0550222 0.141298 -0.00203484 +-0.0720681 0.0805547 0.0392361 +0.0126182 0.0846922 0.0534757 +0.0593665 0.0622129 0.00511321 +-0.0924363 0.118744 0.0263157 +-0.0166806 0.0510876 -0.0315182 +0.0119118 0.0342207 -0.00263798 +-0.0646486 0.156189 0.0162701 +-0.022872 0.104437 -0.0231879 +-0.0799264 0.129511 -0.00520384 +0.0394641 0.063132 0.032359 +-0.0114897 0.0951792 0.0542781 +-0.0474976 0.111158 0.0371638 +-0.0683525 0.155277 0.00186884 +-0.000867993 0.104495 -0.0223762 +-0.0462686 0.12794 -0.00315273 +-0.0306198 0.11135 -0.017885 +-0.0420238 0.0464078 -0.0143471 +-0.0115071 0.0801438 0.0578104 +-0.00552471 0.130134 0.0220582 +0.0553699 0.0651884 0.000788532 +0.000971023 0.0370418 -0.0149189 +-0.0695999 0.162389 -0.0499627 +-0.0593254 0.0447426 0.0431798 +-0.0163529 0.16023 -0.0109161 +-0.0074892 0.108662 0.0435531 +-1.59767e-05 0.130672 0.0211571 +-0.0414957 0.0762285 0.0430404 +-0.00181283 0.0854279 -0.036655 +-0.0573252 0.157131 0.000943525 +-0.0582662 0.0597287 0.0219286 +-0.0158083 0.0827626 -0.0393641 +-0.0636754 0.156752 -0.0416076 +-0.0399677 0.0461402 -0.0203282 +-0.025156 0.16972 -0.0189618 +-0.0527747 0.0826622 -0.0215537 +0.0251411 0.10209 0.0417928 +-0.043632 0.0462886 -0.0112814 +-0.0620154 0.164635 -0.0555847 +0.0104502 0.0343141 -0.0181143 +-0.0391566 0.162183 -0.0124024 +-0.0483573 0.129635 0.0282843 +0.00538744 0.0448871 -0.0255741 +-0.0054947 0.0533903 0.0535249 +-0.00732851 0.0942973 -0.033961 +-0.0241934 0.0388427 0.0350005 +-0.0181599 0.0393223 0.0394029 +0.0346554 0.10439 -0.0105413 +-0.0459466 0.0345121 -0.0200076 +-0.0409396 0.168342 -0.0108401 +0.0103005 0.0624571 -0.0307796 +-0.0681652 0.158429 -0.00684039 +-0.00243741 0.0385239 0.0217416 +0.060795 0.0623425 0.0151668 +-0.0927217 0.128206 0.0112525 +-0.0740576 0.168348 -0.0248615 +-0.0345432 0.114978 -0.015669 +-0.0591204 0.0334451 -0.00148219 +-0.0599836 0.043576 0.0142711 +-0.0568374 0.0898133 -0.021762 +-0.0727774 0.16869 -0.0244081 +-0.00877695 0.169647 -0.023748 +-0.0733702 0.171289 -0.0318245 +-0.0533609 0.033209 0.01963 +-0.012858 0.0386932 -0.00424091 +0.0446984 0.0804984 -0.000780025 +-0.0604981 0.105663 0.0403307 +-0.0437727 0.082626 -0.0206932 +-0.0251898 0.0388783 0.0347661 +-0.00550353 0.0561986 0.0539335 +-0.0649478 0.164181 -0.0229827 +-0.0145881 0.165422 -0.0124907 +-0.0415058 0.0577139 0.0401965 +0.0385298 0.0631329 -0.0097765 +-0.0643222 0.166215 -0.0313693 +-0.0769851 0.0690914 0.0187275 +-0.013127 0.120519 -0.0116431 +-0.0624813 0.156041 0.0199412 +-0.0475747 0.0390527 -0.0120963 +0.0154157 0.0433241 -0.0236953 +-0.00124361 0.130098 0.0236021 +-0.00149237 0.118319 0.0391398 +-0.0454304 0.130382 0.00608349 +0.0094151 0.117047 -0.0161127 +-0.0370213 0.0344129 0.0343812 +-0.0266349 0.121939 -0.00696588 +-0.0514954 0.0833657 0.0447762 +-0.0661547 0.1622 -0.0162285 +0.0354074 0.0446129 -0.00524037 +-0.0839561 0.144602 0.00415973 +-0.0114934 0.104435 0.0434539 +-0.0811445 0.153633 0.00754624 +0.0416181 0.0637615 0.0286411 +0.0336503 0.0646637 0.0398008 +0.00904657 0.129598 0.024451 +-0.075728 0.151337 -0.0208826 +-0.047856 0.132056 0.00259359 +-0.0635915 0.15525 -0.0109401 +-0.025528 0.0383109 0.0298198 +-0.0664625 0.145705 -0.0206681 +-0.0675712 0.139722 0.0445155 +-0.0630199 0.134039 -0.00765574 +-0.0859393 0.101835 0.0256124 +-0.0530219 0.147196 -0.00187885 +-0.00620458 0.038993 0.0313778 +0.0378425 0.10835 0.0231802 +-0.0877357 0.0860979 0.0084778 +0.0064767 0.115498 0.0396093 +-0.027105 0.162286 -0.015104 +-0.0801261 0.144525 -0.00183492 +-0.0858754 0.148602 0.0326009 +-0.060661 0.155018 0.0264156 +-0.0104794 0.0575747 0.0533869 +-0.0433 0.0336903 -0.024306 +-0.0668671 0.0980924 -0.0163226 +-0.0682097 0.171724 -0.0385204 +0.049328 0.0615911 -0.00371844 +-0.059497 0.0861573 0.0445009 +-0.0875265 0.087486 0.0224433 +-0.0660555 0.0600044 0.0111686 +-0.0578054 0.142438 0.0322424 +0.00123277 0.0783068 -0.0354173 +-0.0916354 0.132395 0.0252256 +-0.0117599 0.104933 -0.0231377 +-0.0346346 0.0548282 -0.01038 +-0.0222409 0.0383275 -0.000251248 +0.00824961 0.0725345 -0.0333305 +0.0313861 0.0740897 0.0418701 +0.0164934 0.100411 0.0468922 +-0.0719809 0.156292 0.0165776 +-0.0221908 0.175658 -0.0213821 +-0.00588737 0.108814 -0.0225516 +0.0336337 0.112484 -0.0031866 +-0.0393568 0.123991 -0.00912015 +-0.00841793 0.0387705 -0.00155909 +-0.0431088 0.0347881 0.0415217 +-0.0281377 0.171231 -0.00924208 +0.0317135 0.0955631 0.0407455 +0.0166807 0.124611 -0.00431903 +-0.0923991 0.132355 0.0192227 +0.0141807 0.0900592 0.0522594 +-0.0553478 0.054711 -0.00338754 +-0.0742948 0.147166 -0.0148659 +-0.0210322 0.0623911 0.0469253 +-0.0808524 0.0720445 0.00954101 +0.0185494 0.0379494 0.0423026 +-0.0841291 0.0817203 0.00248105 +0.0309459 0.0700081 0.0411857 +-0.0394974 0.0705046 0.0418138 +-0.0762918 0.169333 -0.0300921 +-0.0537237 0.0477139 0.0256667 +0.0448999 0.0861351 0.000186186 +-0.0313094 0.0384531 -0.00773361 +-0.0305219 0.0474445 0.0454913 +-0.0809514 0.0882189 -0.0076035 +0.0546575 0.0706779 0.0225865 +-0.0414965 0.0986758 0.0418571 +-0.0484435 0.0628471 0.0360579 +0.0594927 0.066407 0.020186 +-0.0627925 0.0838575 -0.0191674 +-0.0214511 0.184864 -0.013038 +-0.0935392 0.129637 0.0202382 +-0.0799546 0.100457 -0.00758867 +-0.0552688 0.126926 0.0376418 +0.0378584 0.0645918 0.0353403 +-0.0361046 0.0383233 -0.0122787 +-0.049226 0.14015 0.0123965 +-0.0164997 0.0938314 0.054193 +-0.0746007 0.0914774 0.0400082 +-0.0791205 0.0709783 0.00599758 +0.0253641 0.0347082 0.00521179 +-0.0594957 0.0918578 0.0453847 +0.0136708 0.0820393 0.0532361 +-0.0193315 0.182966 -0.0230088 +-0.000544127 0.127196 -0.00494172 +-0.030476 0.0664272 -0.0264734 +-0.0734051 0.0674458 0.022683 +-0.0136727 0.0337044 -0.0241151 +0.0214461 0.036336 0.0158614 +0.0583506 0.0662943 0.00413175 +-0.0639059 0.118033 -0.00945272 +-0.0454908 0.0987379 0.0426533 +-0.0318359 0.0344957 0.0406866 +-0.0657843 0.167288 -0.0290298 +0.0181885 0.053509 0.04724 +-0.0610973 0.169393 -0.058599 +-0.0167464 0.108538 -0.0209441 +-0.0826184 0.0802381 0.0286257 +-0.0731223 0.134062 0.0505767 +-0.0135829 0.03702 0.0510108 +0.0354665 0.0768048 0.0390018 +0.0499493 0.051169 0.0281186 +-0.00858939 0.0389741 -0.00922854 +-0.0482262 0.166987 -0.00394405 +0.000506781 0.0605965 0.0560209 +-0.0571262 0.0333733 -0.00101401 +-0.0527176 0.0611373 0.029069 +-0.0225206 0.0919822 0.0517607 +-0.0727584 0.158224 -0.0349231 +0.0221671 0.123584 -0.0006811 +-0.0697019 0.142554 0.0449861 +-0.0890361 0.146068 0.0101777 +0.0300144 0.0389449 0.0261617 +0.0457459 0.0834058 0.0171675 +-0.0828165 0.0790258 0.0245191 +-0.0216847 0.180158 -0.0138785 +-0.0260473 0.11708 -0.0139183 +-0.0263102 0.123352 0.021955 +-0.026277 0.0795343 0.0501986 +-0.04015 0.0473434 -0.014266 +-0.0911404 0.129685 0.035237 +-0.0376719 0.114063 -0.0167039 +-0.0138183 0.0855391 -0.0388001 +-0.0574963 0.111121 0.0367615 +-0.0459611 0.149058 -0.0040494 +-0.06359 0.153594 -0.035633 +0.0294595 0.116659 -0.00368699 +-0.0465112 0.0491437 0.0387964 +-0.0476612 0.135572 0.0133995 +-0.0122712 0.0385653 -0.000297189 +0.0438612 0.0930832 -0.000804157 +-0.00849948 0.0911907 0.056727 +-0.0554517 0.0444829 -0.0071986 +0.0112279 0.0808839 -0.0317275 +-0.0364414 0.0346808 0.041293 +-0.0768829 0.108524 0.037335 +-0.0212115 0.177139 -0.0220322 +-0.0498078 0.0898419 -0.0216876 +0.00832653 0.130915 0.00561741 +-0.0834391 0.153089 0.025871 +-0.0797915 0.0746069 -0.00248195 +0.0162926 0.0348913 0.030635 +-0.0720312 0.141354 -0.00781974 +-0.0640613 0.0606361 0.00380817 +-0.0616877 0.169385 -0.0545934 +-0.0180884 0.184586 -0.0174536 +-0.083714 0.0804887 0.0254979 +-0.0378459 0.0971527 -0.0224307 +-0.048763 0.120209 -0.0131018 +0.0257432 0.120365 -0.00224906 +0.0155215 0.0490175 0.0450471 +-0.0516538 0.162634 -0.00285466 +-0.00249513 0.0774404 0.0585569 +-0.0676995 0.0606833 0.0155957 +-0.0530523 0.0333885 -0.00566149 +0.00632209 0.0596079 -0.030662 +-0.075813 0.0681115 0.0180714 +0.0416741 0.0642804 0.0284921 +-0.04591 0.132311 0.0103278 +-0.0266282 0.0932643 0.045173 +-0.0409763 0.128303 0.0136557 +-0.0295455 0.0745738 0.040676 +-0.0236123 0.0408478 -0.0290846 +-0.062999 0.13114 -0.0082084 +-0.0282657 0.0357556 -0.0195136 +0.0383138 0.109087 0.0181423 +-0.0225227 0.0903335 -0.0360154 +-0.00581332 0.0840953 -0.0378871 +-0.0560848 0.155673 0.012015 +-0.0384894 0.0436513 0.0409963 +0.0250684 0.0912521 -0.0226015 +0.0327251 0.116757 0.0189485 +-0.00849679 0.081545 0.0579523 +0.00549376 0.116905 0.0389072 +-0.0684642 0.035536 0.0130279 +-0.0274333 0.0808284 0.0484505 +-0.0892338 0.0888828 0.0134587 +0.040773 0.0858024 -0.0107788 +-0.018787 0.0654231 0.0516453 +-0.057411 0.0334884 -0.00846165 +-0.0515646 0.0516091 -0.00736491 +-0.0341101 0.171131 -0.0149349 +0.0224908 0.0672402 0.0465227 +0.00748827 0.048894 0.0505047 +-0.0891497 0.139122 0.0375101 +-0.0324992 0.033739 0.00907408 +-0.00547868 0.112944 -0.019663 +-0.00364368 0.038223 0.0108877 +-0.00888297 0.175714 -0.027834 +-0.0616908 0.156845 -0.0305919 +-0.0454927 0.0747515 0.0421648 +-0.0628753 0.0333858 -0.000385113 +0.0200484 0.122759 0.029923 +-0.0624127 0.150637 -0.0175763 +-0.0772056 0.0717509 -0.00044869 +-0.070203 0.179305 -0.0507979 +-0.021805 0.0812974 -0.0389167 +0.00417139 0.0894659 -0.0333631 +-0.00354618 0.035584 0.0475305 +-0.0881296 0.100997 0.0213597 +-0.0344927 0.0803488 0.0420944 +-0.0142597 0.180104 -0.0279187 +-0.0772012 0.161073 -0.0279344 +0.0267764 0.0373043 0.025139 +-0.0764984 0.127442 0.0532158 +0.0305998 0.0741029 0.0424942 +-0.0429656 0.115061 -0.0157138 +-0.0569157 0.131148 0.0370227 +-0.087746 0.09368 0.0248353 +-0.0282695 0.0620042 -0.0284458 +-0.026741 0.0877745 0.0490115 +-0.0141005 0.0382966 0.0123251 +-0.040335 0.124745 0.0227896 +-0.0176742 0.109826 -0.020315 +0.0100598 0.0371564 0.0309489 +0.0330284 0.116174 0.0204895 +0.0194916 0.111179 0.0380087 +-0.0468321 0.144886 0.00412892 +0.00432629 0.0568097 -0.0310178 +0.0172994 0.0665713 -0.0290602 +-0.0776345 0.165887 -0.0268309 +-0.0754949 0.117024 0.0522099 +0.0129986 0.124708 -0.00640366 +-0.0551543 0.0561755 0.00960447 +0.0258384 0.0659192 0.0443144 +-0.0892157 0.0956404 0.0184193 +-0.062275 0.152174 -0.0245791 +-0.0712276 0.159591 -0.0429327 +-0.0468614 0.102797 -0.0212675 +-0.0888687 0.0942285 0.0104297 +0.00705483 0.113673 0.0402142 +-0.0846088 0.10754 0.00337493 +-0.0567766 0.0840541 -0.0213935 +0.0291103 0.0713139 0.0420683 +-0.0416245 0.172695 -0.00500345 +0.0467254 0.0741323 0.0166809 +0.0182946 0.123502 0.0292701 +-0.032545 0.0821172 -0.0295502 +0.0405942 0.0847142 0.0324234 +-0.063874 0.0967575 -0.0177619 +-0.0200635 0.0385408 -0.00554998 +-0.0617567 0.139364 -0.00656769 +-0.0151158 0.0388065 -0.0122456 +0.0258671 0.111418 0.0358303 +-0.0323169 0.126646 0.013854 +0.0128496 0.0432822 0.0446281 +0.0410596 0.104249 0.0151631 +0.0413114 0.0661977 -0.00477755 +-0.0524783 0.0442541 0.0446515 +-0.00534534 0.0423344 0.0481709 +-0.0154906 0.0587868 0.0517337 +-0.0768702 0.122267 -0.00710647 +0.018318 0.0607989 -0.0274966 +-0.0414689 0.101488 0.0411988 +-0.03948 0.109789 0.0371385 +-0.071689 0.171513 -0.0326505 +-0.0562412 0.0479891 0.0306662 +0.0198041 0.103539 -0.0196351 +-0.06089 0.146655 -0.00344226 +-0.0625194 0.150622 -0.0185752 +0.0162788 0.0421207 0.0443108 +-0.0926435 0.13098 0.0162303 +-0.0102744 0.0864318 -0.0379838 +0.0437196 0.0846401 -0.00379782 +-0.0575438 0.119835 0.0395668 +-0.0312754 0.118165 0.0306394 +-0.0384168 0.120732 -0.0116964 +-0.0133826 0.1039 0.0435877 +0.0232434 0.0804535 -0.0255191 +-0.0102585 0.0379591 0.0497745 +-0.0427371 0.0753968 -0.0185868 +0.0223381 0.0606785 -0.0258752 +-0.0124978 0.122374 0.0339942 +0.00450508 0.0688823 0.055725 +0.0471561 0.0614873 -0.00363177 +-0.0496676 0.0649029 -0.0122308 +-0.0360083 0.0485228 -0.0153235 +0.0255211 0.116701 0.0317994 +0.000516492 0.101662 0.0444028 +0.00434751 0.121547 -0.0129175 +-0.0374873 0.0959326 0.0432114 +0.0252705 0.0346338 0.0163557 +-0.0124579 0.0545987 0.0514221 +-0.0889602 0.131049 0.0432066 +-0.0372423 0.152141 0.00211029 +-0.0892956 0.0942653 0.013432 +-0.0518302 0.0344778 0.0329457 +-0.0187757 0.0756949 -0.0390019 +-0.0719603 0.0681626 0.0276375 +-0.0847959 0.147297 0.0357863 +-0.0683786 0.160357 -0.00982452 +-0.0326605 0.0863757 -0.0255732 +0.0456643 0.0848033 0.01617 +0.0560044 0.0608622 0.0263962 +0.0242808 0.034582 0.00510919 +-0.0255484 0.0414464 0.0539815 +0.0584482 0.0538047 0.0101717 +-0.0507323 0.0738128 -0.0166527 +-0.0145896 0.101524 -0.0235873 +0.00379349 0.0393361 0.0313217 +-0.060041 0.155524 0.0222725 +0.0330115 0.107346 -0.00970764 +-0.0356538 0.120932 -0.00987931 +0.0252334 0.114772 -0.00969056 +-0.0560291 0.051292 0.00869383 +0.039494 0.0484532 0.0321483 +0.0260206 0.095556 0.0448127 +-0.0144952 0.092498 0.0556089 +-0.0745303 0.0887706 0.0400356 +-0.0427423 0.0768225 -0.0188988 +-0.0254944 0.0348465 0.0469921 +0.0115755 0.104003 -0.020168 +0.0177398 0.128218 0.01192 +-0.0537709 0.0460941 0.0150722 +-0.0260174 0.0351047 -0.0290083 +0.0146321 0.0460649 0.043757 +-0.0725348 0.149777 -0.0387435 +-0.067793 0.0851703 -0.0179862 +-0.0345051 0.0491976 0.0390013 +-0.0575351 0.0727864 0.0407731 +-0.0902562 0.135043 0.0112131 +-0.0341019 0.0350895 0.0466468 +0.0354707 0.0862229 0.039086 +-0.0635111 0.15292 -0.0340962 +0.000752728 0.131478 0.01712 +0.0415962 0.101461 0.0191676 +0.0199544 0.117871 -0.0110405 +0.0125 0.0341066 0.00131673 +-0.0104877 0.105844 0.0434252 +0.000625364 0.130997 0.01994 +-0.00947876 0.108641 0.0432746 +0.0427329 0.0747306 -0.00479562 +0.0175177 0.121695 0.0318921 +-0.0724967 0.123205 0.0535111 +-0.0217998 0.0826894 -0.0387559 +-0.0474379 0.0384277 -0.0132876 +-0.0453217 0.127718 -0.00291517 +0.00149278 0.115548 0.0405079 +-0.00268673 0.0598311 -0.0338297 +-0.0282466 0.0410133 0.0533665 +-0.084979 0.0912122 -0.0035611 +-0.00188052 0.0377314 0.00623396 +-0.0719012 0.152408 -0.0434229 +0.0297667 0.100164 -0.016062 +-0.0446553 0.0615526 0.0394256 +-0.0935168 0.125484 0.0132627 +0.00892319 0.0349264 0.0435129 +-0.0906919 0.142015 0.0231619 +-0.0362968 0.126232 -0.00232089 +-0.0581074 0.0494572 0.00366497 +0.0584743 0.0538121 0.0171841 +0.0453685 0.090397 0.014157 +0.0451698 0.0903876 0.0161628 +-0.0648504 0.099576 -0.0170426 +-0.0336174 0.0385515 -0.0101375 +-0.0818746 0.144748 0.0414084 +-0.0921915 0.114676 0.0133297 +-0.0735116 0.140055 0.0477493 +-0.0625074 0.0334277 0.00145514 +0.0301634 0.0659717 0.0417895 +-0.0313891 0.0338671 0.0146006 +-0.0524964 0.0876231 0.0453765 +-0.0763164 0.155546 0.0238171 +0.0473804 0.0650284 -0.00116263 +-0.0203751 0.165368 -0.0103486 +-0.074953 0.131092 -0.00759533 +-0.0200723 0.0361973 0.0530852 +-0.0623326 0.164687 -0.0445921 +-0.0432796 0.127517 -0.00276726 +-0.0794589 0.155317 0.0154304 +0.0484584 0.0430177 0.0142199 +0.0516914 0.0635003 0.0289607 +0.0124992 0.111251 0.0392691 +-0.00916969 0.168123 -0.0207225 +-0.0624966 0.0987153 0.0424769 +0.0403564 0.0602895 0.0300713 +0.000529964 0.0745913 0.0578265 +-0.00430704 0.037991 -0.0149598 +-0.0458025 0.0336244 -0.00441422 +0.0244543 0.124393 0.0172632 +-0.0566778 0.0485827 0.00942267 +0.0118497 0.0354401 0.0310392 +-0.0460906 0.156154 -0.00788178 +0.0200436 0.125383 0.0241901 +-0.0110606 0.128229 0.000136123 +-0.0680155 0.149781 -0.0384715 +-0.0340535 0.158097 0.00328753 +-0.063246 0.0709836 0.037551 +0.00837353 0.0479453 -0.0272176 +-0.0704921 0.0944433 0.0420805 +0.0271048 0.0835778 0.0462962 +-0.0814225 0.0858535 0.0328878 +-0.0311244 0.126183 0.00987945 +0.00420219 0.0866314 -0.0335404 +-0.0160918 0.0359549 0.0514785 +-0.0387772 0.152061 -0.00669739 +-0.0394877 0.095879 0.0424449 +-0.0556734 0.0645255 -0.00818248 +-0.0721186 0.0637108 0.0173676 +-0.00866441 0.055565 -0.0335626 +0.034399 0.0476191 -0.006288 +0.0184894 0.03497 -0.0076507 +-0.0208903 0.0376209 0.05361 +-0.0721389 0.12842 0.0519775 +-0.0135421 0.093873 0.0547462 +-0.0114977 0.038716 -0.00213082 +-0.0444942 0.0761733 0.0424299 +-0.0162113 0.0387427 -0.00681752 +-0.0632795 0.162306 -0.0238202 +-0.0678999 0.11945 -0.00879052 +-0.0624555 0.163099 -0.0465902 +-0.0197676 0.0376635 -0.0177276 +-0.00982564 0.0339746 -0.0198462 +-0.0334993 0.115969 -0.0147052 +0.0241258 0.0914782 -0.0228484 +0.0393714 0.104176 0.025187 +-0.0877422 0.114422 0.00426669 +0.0169437 0.0346991 -0.00395051 +-0.0659364 0.0364202 0.0386491 +0.0236414 0.0741206 0.0482553 +0.0360643 0.108191 -0.003826 +-0.0498837 0.0340852 -0.0133065 +0.0109544 0.0459934 0.0454216 +0.0232194 0.06778 -0.026032 +0.0407755 0.0675587 -0.00776366 +0.0164452 0.127885 0.0214354 +0.0306214 0.073711 -0.0207585 +0.0310665 0.0768618 0.0431993 +-0.0326395 0.0549161 -0.0112709 +-0.0264479 0.0721314 0.0435447 +0.0185916 0.116689 0.0359263 +0.0210399 0.118016 0.0341276 +-0.0910253 0.115214 0.0323598 +0.000420695 0.0340758 -0.0179207 +0.011475 0.115421 0.0379758 +0.0558934 0.0728505 0.0127047 +-0.0168011 0.0813465 -0.0393174 +-0.0884013 0.103686 0.0143755 +0.00687166 0.100046 -0.0219438 +0.00938176 0.0463536 -0.0257255 +-0.0376115 0.11722 -0.0140038 +-0.0454999 0.102932 0.0417867 +-0.0638509 0.0597328 0.00826283 +-0.0626761 0.0691812 -0.0125769 +-0.0654105 0.124234 0.0493774 +-0.0585036 0.0790577 0.0434985 +0.025387 0.103408 0.0403826 +0.0322433 0.0896617 -0.0189276 +-0.0875821 0.0909427 0.0247332 +-0.0855607 0.103501 0.00239284 +-0.0436971 0.0419128 0.0432773 +-0.0946145 0.122826 0.0212791 +0.0282404 0.0858422 -0.0216043 +0.00524711 0.0726037 -0.0343433 +0.00348793 0.114165 0.0408953 +-0.0345349 0.108408 0.0380462 +-0.053757 0.152473 0.0202331 +-0.0684765 0.061182 0.0096252 +-0.0653795 0.17033 -0.0418012 +0.0335191 0.0398635 0.0260657 +0.00150101 0.0647986 0.0566673 +-0.0386685 0.0621637 -0.0127302 +0.0514753 0.0731205 0.0184716 +-0.0475108 0.159316 0.00812402 +-0.0418554 0.101378 -0.0213767 +0.059111 0.0580409 0.00617531 +-0.0235023 0.105779 0.0421282 +-0.0564932 0.0861648 0.0446121 +0.0463019 0.07925 0.0141776 +-0.037115 0.160706 -0.0129903 +-0.0454732 0.0917007 0.0431865 +-0.08762 0.143285 0.0101199 +0.0294825 0.0348729 0.0114843 +0.0351631 0.0941496 -0.0136388 +0.0169892 0.122251 -0.00777586 +-0.0286955 0.175698 -0.00647862 +-0.0586479 0.0629437 -0.00583333 +-0.0799097 0.0706493 0.0132254 +0.0440384 0.0959414 0.0171588 +0.00466861 0.0365644 -0.00250089 +-0.0368263 0.0929138 -0.0236695 +-0.0126068 0.0392015 -0.0264338 +0.014095 0.041997 0.0446638 +0.00757449 0.035092 0.025056 +-0.0564565 0.03337 -0.00815977 +-0.0774971 0.128861 0.0533302 +0.0348978 0.0613787 -0.0138096 +-0.0348784 0.10713 -0.0202183 +0.0074278 0.117326 -0.0164147 +-0.0416698 0.0345261 0.0350582 +-0.0711528 0.180791 -0.0525602 +-0.0633069 0.0343768 0.0340823 +-0.0795725 0.091329 0.0351135 +-0.00149388 0.0787876 0.0581499 +-0.0838841 0.12062 -0.00343109 +-0.0017512 0.0769296 -0.0360915 +0.00921045 0.0851252 -0.032 +0.0528986 0.056075 -0.00272531 +-0.088793 0.0888086 0.00747102 +0.0367516 0.061565 -0.0117718 +-0.00560731 0.0389273 -0.00299633 +-0.0145783 0.0348246 -0.0259715 +-0.0668255 0.162993 -0.016474 +0.0537671 0.0492093 0.00323447 +0.0164968 0.0990289 0.0471605 +0.0350254 0.0533499 0.0328505 +-0.0502577 0.127427 -0.00458948 +-0.0354996 0.0605317 0.0401535 +-0.0445094 0.0832466 0.0430632 +-0.061134 0.11687 0.0396165 +0.0288023 0.0594063 -0.0198054 +-0.0345743 0.120058 0.0294165 +-0.00577775 0.0812461 -0.0375203 +-0.0271582 0.125819 0.00840694 +-0.00487894 0.130442 0.0208375 +-0.0485449 0.165375 0.00344343 +0.00426734 0.0682596 -0.032922 +-0.0887148 0.12811 0.00328264 +-0.0688911 0.0610594 0.0132079 +-0.0845844 0.121705 0.0490448 +0.0086501 0.130656 0.00430717 +-0.0694892 0.109539 0.0380952 +-0.0883053 0.149858 0.0265188 +-0.0556122 0.136727 0.0318764 +0.00753471 0.0632773 0.055432 +-0.0675754 0.0334584 0.000400215 +0.0390555 0.064539 0.0335561 +0.00752021 0.073081 0.0562837 +-0.0898786 0.113438 0.0340422 +-0.0729585 0.134037 -0.00770509 +-0.0713317 0.151217 -0.0439201 +0.00350232 0.123774 0.0338316 +-0.0682244 0.142863 -0.0118107 +-0.0110454 0.113378 -0.0180964 +0.0539053 0.0478505 0.00821457 +-0.0614468 0.141404 -0.00570472 +-0.0113089 0.0383954 0.0218511 +-0.0281079 0.177558 -0.016771 +0.012409 0.0418787 -0.0238148 +-0.00282516 0.102957 -0.0229221 +0.0254031 0.123772 0.0104796 +-0.0305987 0.0803029 0.0419758 +-0.0750181 0.0761727 0.0341343 +-0.0144519 0.166922 -0.0140569 +0.00338055 0.0465728 -0.0280809 +-0.0162255 0.177147 -0.0257279 +0.0131167 0.108671 -0.0187213 +0.0272829 0.121723 0.00548626 +-0.0883907 0.115479 0.0451949 +-0.0879259 0.102339 0.0203636 +-0.0548201 0.128324 0.0365339 +-0.0820753 0.129944 0.0519532 +0.00724365 0.07823 -0.0340312 +-0.0819891 0.0923793 -0.00757573 +-0.0303556 0.168269 -0.0071929 +-0.00250456 0.0562401 0.0542942 +-0.0616678 0.143939 0.037247 +-0.0776245 0.151441 -0.00287924 +0.0374138 0.110303 0.0192381 +0.0348067 0.0902706 0.0399059 +-0.0127063 0.0671038 -0.0370425 +0.0160068 0.0347306 -0.00980024 +-0.0372246 0.0368821 -0.0130308 +0.0340234 0.0585319 -0.0137143 +0.0541559 0.0477549 0.017206 +-0.0405048 0.15944 0.00272423 +-0.0015963 0.0981039 -0.0279083 +-0.092935 0.117416 0.0233037 +-0.0832007 0.119017 0.0492012 +0.00140058 0.0348342 -0.0234319 +-0.0868724 0.106357 0.0173489 +-0.0166991 0.0570076 -0.034416 +-0.0907644 0.142021 0.0271708 +-0.0822477 0.106043 -0.00262262 +-0.0929753 0.11876 0.0253083 +-0.0263289 0.0434924 0.0526862 +-0.0374936 0.0733328 0.0420467 +-0.0355255 0.0818589 0.0431427 +-0.0650055 0.136996 -0.00788185 +-0.0705444 0.0712752 0.0339991 +-0.0549513 0.0339195 0.0239841 +-0.00779971 0.114512 -0.0173201 +0.0213851 0.0754916 0.050294 +0.0297243 0.0538559 -0.0167895 +-0.00746204 0.125196 -0.00874293 +-0.0385113 0.0973107 0.0424108 +0.0437641 0.0599949 -0.00412714 +0.00932784 0.0581716 -0.0301717 +-0.07404 0.148543 -0.0208687 +-0.067363 0.177688 -0.0512074 +-0.00213372 0.123188 0.0349488 +-0.0180211 0.168338 -0.0139614 +-0.0254657 0.0678395 0.0426887 +-0.0266217 0.0436536 -0.0288174 +-0.0498332 0.0956322 -0.0221283 +-0.0772795 0.155549 -0.0169029 +0.0369068 0.0799159 -0.0147176 +-0.0788489 0.119288 -0.00581129 +-0.0101059 0.171125 -0.0207965 +-0.0324932 0.0774699 0.0412179 +-0.0434937 0.0705308 0.0420517 +-0.0158265 0.0869335 -0.0385904 +-0.00548754 0.123746 0.0343085 +0.0610091 0.0623122 0.0111052 +-0.00962571 0.0451144 -0.0282927 +-0.0687445 0.160961 -0.0529537 +-0.00991099 0.115578 -0.0164445 +0.0199768 0.126969 0.0170274 +-0.0827793 0.0771313 0.0211566 +-0.0119077 0.0894805 -0.0370977 +0.0238643 0.100811 0.0434608 +-0.0130347 0.166801 -0.0212915 +-0.0934989 0.122762 0.0122811 +-0.0667245 0.0765676 -0.016644 +-0.0391998 0.0351247 -0.0118182 +-0.0445637 0.128075 -0.00132731 +-0.0258871 0.0377455 0.0194558 +-0.093776 0.124126 0.0142628 +-0.0698753 0.117966 -0.00835455 +-0.0515005 0.100157 0.0426446 +-0.0404873 0.112547 0.0355988 +-0.0674682 0.0382926 -0.00574154 +-0.0624974 0.0876076 0.0451456 +-0.0367451 0.0768715 -0.019149 +-0.00349748 0.0870382 0.0570453 +0.0243264 0.0591823 -0.0248233 +-0.0604582 0.154406 0.00215902 +-0.0742084 0.067281 0.00145303 +0.0461952 0.0834391 0.00817714 +-0.0246581 0.0664552 0.0433381 +0.0223219 0.0402539 -0.00770693 +-0.0269495 0.0511315 0.0418642 +-0.0426785 0.060742 -0.0126195 +-0.0470567 0.069722 0.0403886 +-0.057499 0.0889744 0.0446686 +-0.0925962 0.126825 0.0102659 +-0.0627541 0.166279 -0.0425846 +0.00227655 0.0655175 -0.0339267 +-0.0152717 0.181584 -0.0271612 +-0.0527991 0.0578707 0.0222512 +0.0181983 0.0768373 0.0527356 +-0.020287 0.0445184 0.0528933 +-0.0230546 0.0388523 0.0540611 +-0.0591948 0.0603156 -0.00052226 +-0.0356179 0.0505976 -0.0108834 +-0.0125985 0.0420542 -0.026434 +-0.0457346 0.0337173 0.00640665 +-0.0271239 0.117991 -0.0128729 +-0.0287901 0.105845 -0.0221143 +-0.0791947 0.116328 0.04948 +-0.037475 0.126933 -0.001254 +-0.0652274 0.172558 -0.0603808 +0.0249025 0.0659023 0.0447242 +0.0444853 0.062436 0.0294527 +-0.0584017 0.0411488 0.0207065 +-0.0637308 0.0380192 0.0421186 +-0.0224637 0.0768447 0.053535 +-0.0472049 0.132217 0.00449629 +-0.055985 0.033885 0.0237996 +-0.0637704 0.158563 -0.0153492 +-0.0889154 0.0875162 0.0124615 +-0.0630601 0.155204 -0.0366146 +-0.0858283 0.1008 0.00139713 +-0.00849876 0.0884233 0.057199 +-0.0464295 0.156494 0.00819518 +-0.0875333 0.0927687 0.0054156 +-0.0555067 0.053407 0.0086882 +-0.0319429 0.0346356 0.0246022 +-0.0532414 0.127751 -0.00500041 +-0.0324852 0.0946249 0.0445277 +-0.0652259 0.166727 -0.0597961 +0.0318258 0.090298 0.0426417 +0.0227624 0.0959793 -0.0216236 +0.0453464 0.0791637 0.00120688 +-0.00148178 0.0718081 0.0578063 +0.0484981 0.0664872 0.0276228 +-0.0638124 0.0339885 0.0132249 +0.0378702 0.100686 0.0303226 +0.0423416 0.0718943 -0.00578991 +0.0449549 0.0889654 0.0201657 +-0.0505604 0.0431885 -0.0101401 +0.0305345 0.113708 -0.00653825 +0.0175297 0.092684 0.048312 +-0.0405439 0.0338701 -0.0146326 +-0.0151193 0.0387785 0.0315419 +0.0425177 0.0660617 -0.00221978 +-0.0261619 0.0381432 0.054147 +-0.0435068 0.0576714 0.0396679 +-0.0531482 0.161241 0.00587596 +-0.0897425 0.0915834 0.0134432 +0.00549953 0.119637 0.0367537 +-0.00877042 0.130092 0.00788453 +-0.0417274 0.0725105 -0.0179617 +-0.0534984 0.0776159 0.0431279 +-0.0290767 0.121891 0.0239314 +0.0583737 0.0676977 0.00512132 +-0.0647358 0.157148 -0.0507072 +0.0435656 0.0945094 0.0231538 +-0.0220003 0.181634 -0.0125756 +-0.0298816 0.0621837 -0.0234188 +-0.0460097 0.127427 -0.00464706 +-0.0136152 0.0982979 -0.0261721 +-0.0662958 0.0637695 -0.0035905 +-0.0920915 0.118829 0.0424602 +-0.0157421 0.0686009 -0.0381423 +-0.063492 0.0819119 0.043822 +0.0519248 0.0461654 0.00821164 +-0.0528781 0.0490838 0.0346622 +-0.0896974 0.137929 0.0351902 +-0.0502406 0.140114 0.00340131 +-0.0460575 0.131197 0.00582383 +-0.0398248 0.0928735 -0.0232663 +-0.0287922 0.165339 -0.00670006 +-0.0017304 0.0712031 -0.0351875 +-0.0386191 0.118326 -0.013151 +0.0193849 0.126884 0.00540105 +0.0309645 0.0363887 0.0195722 +-0.0314998 0.155167 -8.72409e-05 +-0.000786782 0.0826169 -0.0366787 +-0.0771272 0.155133 0.00894547 +-0.00248977 0.112799 0.0419964 +-0.0279028 0.160261 -0.0136941 +-0.0431979 0.129461 0.00840104 +-0.0208217 0.0854768 -0.038298 +-0.01776 0.0714448 -0.0386564 +0.00624218 0.039472 0.0335072 +-0.0639011 0.119458 -0.00893676 +-0.0667029 0.176899 -0.0509708 +-0.0245413 0.0349941 -0.0287041 +-0.0487364 0.0753122 -0.0176891 +-0.0669945 0.169371 -0.0323347 +-0.00928822 0.0393788 0.0494849 +-0.0239808 0.0936155 -0.0313592 +0.0224894 0.0906371 0.0481279 +0.0242369 0.0748124 -0.0257049 +-0.0243462 0.1625 -0.00551798 +-0.0625942 0.153749 -0.0125838 +-0.0486891 0.137066 0.0163891 +-0.0679674 0.0350577 0.0131968 +-0.0626161 0.12969 0.0410793 +-0.0263812 0.120789 0.0279195 +-0.0802896 0.144766 0.0426469 +0.0132183 0.0794258 -0.0310561 +-0.0415045 0.0548576 0.0396938 +-0.00948994 0.0952069 0.0546127 +-0.0903261 0.135124 0.0222174 +-0.0574953 0.153709 0.0290191 +-0.0428742 0.10707 -0.020141 +0.057983 0.0674087 0.022273 +-0.0297438 0.0593588 -0.0214043 +-0.0562018 0.0589495 -0.00340637 +-0.0230647 0.0402418 0.0541248 +-0.062019 0.17397 -0.0618399 +-0.0412895 0.149153 -0.00363446 +-0.0485728 0.0503685 -0.00899002 +-0.00748812 0.10728 0.0439222 +-0.0336555 0.0709359 -0.0204834 +-0.0407158 0.171931 -0.00126808 +-0.0610791 0.151413 0.0351388 +-0.0221494 0.0384504 -0.005885 +0.00439305 0.11559 -0.018534 +-0.0241215 0.0944713 0.0461972 +-0.0547672 0.0812274 -0.0214088 +-0.0846583 0.0777659 0.00751712 +-0.0574282 0.0507609 0.000628334 +-0.00874511 0.0976201 -0.0294139 +-0.022979 0.0380859 0.023348 +0.043448 0.0916342 -0.00278755 +0.0145196 0.123096 0.0322223 +-0.0415646 0.125825 -0.00703356 +-0.0726695 0.171671 -0.0330178 +-0.010471 0.0378949 -0.0160892 +-0.0488368 0.0970812 -0.0221898 +-0.0586032 0.141 0.0328315 +-0.0117815 0.0347775 0.0429519 +0.0116378 0.0603198 0.0518663 +-0.0459594 0.0560107 0.0380589 +0.0399446 0.107028 0.0121641 +0.00710547 0.0893998 -0.032814 +0.0410678 0.10142 0.0221661 +-0.0244452 0.181836 -0.00961144 +-0.013259 0.121231 -0.0103976 +-0.0454789 0.123431 0.0251209 +0.0285377 0.0523356 -0.0187697 +0.0588289 0.0691072 0.0191593 +0.0125005 0.1007 -0.0226033 +-0.0595569 0.153648 0.0312116 +-0.00403867 0.0994311 -0.025339 +0.00148661 0.108625 0.0426664 +-0.0327389 0.0482896 -0.0213368 +-0.0380117 0.0344553 0.0341354 +-0.072467 0.0968801 0.0405541 +0.0151781 0.0847217 0.0519158 +-0.0425055 0.108838 -0.0192163 +-0.00749309 0.114174 0.0409291 +-0.0434968 0.119301 0.0295385 +0.0363932 0.0476439 -0.00624826 +-0.079546 0.0719865 0.0195582 +-0.0564882 0.042714 0.0457133 +-0.0113851 0.0383094 0.011049 +-0.0865431 0.106355 0.0183534 +-0.0313759 0.0553098 -0.0143786 +0.0515215 0.0651377 0.0281771 +0.0253513 0.0605347 -0.0238887 +-0.0627683 0.164709 -0.0355885 +-0.0520878 0.0489475 0.0226481 +-0.0371717 0.165191 -0.0136726 +0.0421423 0.0738117 0.0292393 +0.0499661 0.0451421 0.0208878 +-0.0394943 0.116662 0.0325452 +-0.085625 0.079203 0.01151 +-0.0716025 0.135501 0.0492566 +-0.00270958 0.0391757 0.033738 +-0.0911953 0.143381 0.0241598 +0.0418026 0.102869 0.0141608 +-0.0319458 0.0708051 -0.0254622 +-0.0626184 0.145978 -0.00858061 +0.0207857 0.0994851 0.0460447 +0.0275851 0.114088 0.0330397 +-0.040502 0.120714 0.028794 +-0.0853944 0.101863 0.0264831 +0.00328879 0.0668715 -0.0332298 +-0.0446453 0.0577855 -0.0118043 +0.0188777 0.03558 -0.00867348 +-0.064488 0.156133 0.0221359 +-0.00921165 0.172686 -0.0275682 +-0.0426232 0.0362716 0.0437883 +-0.0246131 0.0422659 -0.0289978 +-0.0766564 0.0773474 -0.00857073 +0.0281325 0.121698 0.0129367 +-0.00471394 0.0641886 -0.0352179 +-0.0274456 0.0382197 0.0539829 +-0.0417615 0.03357 0.00191851 +-0.0596536 0.0350995 0.0445384 +-0.0458215 0.091313 -0.0218951 +-0.00569643 0.0599053 -0.0346867 +-0.0728066 0.087878 -0.0157134 +0.00467021 0.0347458 0.0211501 +-0.0369631 0.0341718 -0.0179086 +-0.0700564 0.162427 -0.0118963 +-0.0938276 0.126933 0.0242666 +-0.0207424 0.110014 -0.0205123 +0.00150816 0.0911296 0.0556681 +-0.00874857 0.0727984 -0.0375275 +-0.0679476 0.156599 -0.00385029 +-0.076928 0.152806 -0.00788984 +-0.0860408 0.109124 0.0103593 +-0.0514909 0.0544833 0.0216233 +-0.0756545 0.151363 -0.0148873 +0.0423862 0.047532 -0.00502925 +-0.0895419 0.0916017 0.0194388 +-0.014074 0.128231 0.00303832 +-0.0747094 0.155646 0.00979649 +-0.0931712 0.117411 0.0223074 +-0.0548599 0.145302 0.0295141 +-0.058163 0.0467738 0.0296766 +0.00351191 0.0459363 0.0483003 +-0.091423 0.144753 0.0241539 +0.0174632 0.0948293 0.047857 +-0.0326373 0.119597 -0.0104942 +0.0206219 0.119357 0.0335278 +-0.0174992 0.0897364 0.0558751 +-0.00978193 0.0784455 -0.0377778 +0.0236993 0.12332 0.00130956 +-0.0792974 0.15265 0.00222093 +-0.0444956 0.102933 0.0417949 +0.0152822 0.129138 0.0167187 +0.0467013 0.0718392 0.0195936 +-0.0883363 0.112382 0.0405773 +-0.0515091 0.105631 0.0400498 +0.00121056 0.115576 -0.018509 +-0.0525671 0.0335472 0.0123651 +-0.0285962 0.0377287 0.0207135 +0.0043328 0.0341303 0.00522853 +-0.0914252 0.114627 0.0103302 +-0.0231203 0.163764 -0.0160465 +-0.0077447 0.0698983 -0.036343 +-0.0650951 0.162442 -0.0187197 +-0.0652725 0.0613084 0.02088 +0.0455972 0.0415054 0.0160287 +-0.0554928 0.148133 0.0286364 +-0.0709153 0.113624 -0.0087498 +-0.0390311 0.160893 0.00133569 +-0.0669712 0.156006 0.0125516 +-0.0607902 0.0334775 -4.36679e-05 +-0.0634989 0.108392 0.0384413 +-0.0239757 0.0768012 0.0522149 +-0.0671254 0.128435 0.0486555 +-0.0368355 0.153629 0.00272174 +-0.0280768 0.169745 -0.00916431 +0.00750786 0.0518308 0.0519822 +0.017486 0.112589 0.0378808 +-0.0694907 0.0930374 0.0422024 +-0.0457991 0.0336321 0.00104877 +0.0385285 0.0901386 0.0347352 +0.0154693 0.0976312 0.0477084 +-0.0134564 0.0347657 0.0443699 +0.0132374 0.123205 -0.00876652 +0.0204758 0.0975716 0.0468126 +-0.0702558 0.152263 -0.0463745 +-0.0361586 0.0382819 -0.0067057 +0.0546048 0.0478149 0.0122009 +-0.0455357 0.120317 -0.0132441 +-0.00750778 0.0828941 0.0575015 +-0.0338576 0.0347656 0.029445 +-0.0195033 0.118175 0.0352728 +0.0125203 0.0616669 0.0514026 +-0.0196496 0.0582641 0.0484904 +0.0383367 0.0910432 -0.012345 +-0.00538883 0.122125 -0.0114557 +-0.075455 0.0675485 0.016865 +-0.0362517 0.123246 0.0257763 +-0.0815948 0.123081 0.0504133 +-0.00479304 0.130806 0.0179661 +-0.0776418 0.158287 -0.0219264 +-0.0484803 0.117974 0.0310954 +-0.0386541 0.126132 0.0204051 +-0.0786087 0.102098 0.0338163 +0.0464344 0.0792618 0.0111808 +0.0289709 0.0848578 0.043728 +-0.0184969 0.10579 0.0426906 +-0.0245528 0.116739 0.0335827 +-0.0754858 0.146995 0.0422823 +-0.0528151 0.132539 0.0323863 +-0.00781365 0.086863 -0.0372016 +0.0145549 0.126574 -0.00243153 +-0.0834735 0.076324 0.00852235 +-0.0597355 0.0752692 -0.0179534 +-0.0853298 0.111023 0.0405559 +-0.0515948 0.137023 0.025408 +-0.0693375 0.168152 -0.0246084 +-0.0781507 0.115089 0.0495991 +-0.0468723 0.0587675 0.0374438 +0.0193537 0.0349459 0.0257791 +0.0243371 0.123621 0.0229269 +-0.0907106 0.133758 0.0262122 +-0.0542023 0.0435162 0.019691 +-0.036169 0.0335901 -0.0284162 +0.0196024 0.0858351 -0.0269873 +0.0084996 0.0488213 0.0500608 +-0.0308481 0.0664794 -0.025463 +0.0262324 0.0775308 -0.0242027 +0.0470911 0.0422949 0.0155431 +0.0315748 0.0605586 0.0402762 +-0.0722147 0.149455 -0.0385736 +-0.0695516 0.170347 -0.0304219 +-0.0404175 0.171209 -0.00987004 +0.0299365 0.0350356 0.00770058 +-0.0466417 0.133657 0.014443 +0.0130913 0.0937889 -0.0272955 +-0.0579449 0.059547 -0.000261977 +-0.0285818 0.121272 -0.00825717 +-0.0713326 0.0345571 0.00760774 +-0.0666503 0.135429 0.0440071 +-0.0303959 0.0762676 -0.0335676 +-0.00385838 0.101641 -0.0231016 +-0.0679568 0.13115 -0.00879393 +0.00350598 0.0870278 0.056972 +-0.0248582 0.0752289 0.048914 +-0.0588955 0.0336882 0.0145047 +-0.0563129 0.159837 0.00207063 +-0.064096 0.14766 -0.0219948 +-0.00992774 0.110288 -0.021044 +-0.0709029 0.110786 -0.0101311 +4.37647e-05 0.0392736 0.0324137 +0.0144567 0.0617415 0.0506755 +-0.0304982 0.117934 0.0308066 +-0.0124153 0.129138 0.0195683 +-0.0045458 0.042944 0.0478735 +-0.078629 0.155228 0.0230232 +-0.0793587 0.143462 0.044583 +-0.011946 0.163588 -0.0146751 +-0.0489654 0.138607 0.014392 +0.0130851 0.034266 -0.0137357 +0.0405023 0.0484755 0.0322215 +-0.0440255 0.0336276 -0.0225259 +-0.0185094 0.114097 0.0385959 +-0.0708508 0.173984 -0.0409178 +-0.0698895 0.170875 -0.0319754 +-0.0268752 0.105825 -0.0224483 +-0.0921157 0.118792 0.0303066 +-0.0715954 0.155396 -0.0419127 +0.0239203 0.108291 -0.0147313 +-0.0163998 0.119263 -0.0123023 +-0.0327198 0.0652554 -0.0184496 +0.0457714 0.0848094 0.0151676 +-0.062838 0.15526 0.00677387 +-0.0562712 0.146757 0.030967 +-0.00723161 0.0381024 0.0489495 +0.0208841 0.115302 0.0356376 +-0.0311112 0.162246 -0.0146263 +-0.0185025 0.0757876 0.0552584 +0.0369413 0.0993952 0.0325229 +-0.0597781 0.0668249 0.0348598 +-0.0676678 0.0697151 0.0342008 +-0.00507021 0.128586 -0.00238902 +0.035697 0.096801 0.0360155 +0.0179331 0.121039 -0.00844165 +0.00149286 0.100277 0.0469858 +0.0132581 0.0348304 0.0408908 +-0.0746487 0.0760382 -0.00984365 +-0.076866 0.0994719 0.0363813 +-0.00904748 0.0388121 -0.00544357 +-0.0378518 0.0985762 -0.0221892 +-0.0494929 0.0804959 0.044039 +0.0288964 0.120556 0.0189249 +0.0252898 0.0704815 -0.0246106 +-0.0831283 0.107448 0.000408412 +-0.0465019 0.129507 0.0239285 +-0.056621 0.0562362 0.00665228 +-0.00564116 0.0481924 -0.0303539 +-0.0944779 0.122838 0.0232837 +-0.0876178 0.105003 0.0113725 +0.0221833 0.125827 0.00929485 +-0.0376403 0.0562958 -0.0110081 +-0.027315 0.119916 0.0290701 +0.0347431 0.103404 0.0328426 +0.0317883 0.117354 0.00287906 +0.0203254 0.040014 -0.0146997 +-0.0780017 0.150056 -0.00287894 +-0.0106261 0.0451108 -0.0281505 +-0.0729498 0.156259 0.0191473 +0.0393029 0.10195 0.0270711 +0.0182702 0.0422045 0.0436952 +-0.0802626 0.147413 0.0397079 +-0.00132352 0.0966684 -0.0303753 +-0.015259 0.0984512 0.0471298 +0.0451952 0.0433405 0.023507 +-0.0438866 0.108471 -0.0191595 +-0.0159384 0.124168 -0.00545234 +-0.0654957 0.105611 0.0395613 +-0.0904683 0.135081 0.0142287 +0.025208 0.0874192 -0.0236148 +0.0366057 0.0954909 0.0355184 +-0.0887482 0.102363 0.0163794 +0.00249078 0.115545 0.0403845 +-0.0778809 0.0759658 0.0302027 +-0.045814 0.0898818 -0.0220292 +0.0125705 0.0658518 0.0532694 +-0.00597277 0.130385 0.0204408 +-0.0581881 0.125521 0.0404357 +-0.0307415 0.0374976 -0.017878 +-0.0742647 0.109022 0.03931 +0.0186443 0.123322 -0.00490878 +-0.0769902 0.154182 -0.00989517 +0.0130083 0.0956231 -0.0252421 +0.00953036 0.10442 0.0445691 +0.0186389 0.0520546 0.0461071 +-0.0463977 0.0397105 -0.0152844 +0.0444376 0.0959725 0.0121619 +-0.0216077 0.0350207 0.0511065 +0.0463433 0.054773 -0.00593764 +-0.0875696 0.115156 0.045661 +-0.00311195 0.130927 0.00709886 +-0.0627873 0.0335028 0.00493012 +-0.0894432 0.151569 0.0164701 +-0.0668923 0.109473 -0.0126504 +-0.053788 0.0854855 -0.0214384 +-0.00382944 0.108004 -0.0223654 +-0.0447162 0.0448943 -0.0112435 +0.0262334 0.121101 0.000829633 +0.0206734 0.0795401 0.0510479 +-0.0434655 0.127159 0.0186744 +-0.0273746 0.181651 -0.00921581 +-0.0045009 0.116806 -0.0157814 +-0.0529179 0.162663 -0.000927718 +0.0278575 0.109692 -0.0122334 +0.0114621 0.125412 0.0310862 +-0.055877 0.0984248 -0.0207921 +-0.0649536 0.0595166 0.0136311 +-0.0899789 0.116378 0.0441376 +-0.0344621 0.154617 -0.00886992 +-0.0641249 0.156393 -0.0431197 +0.0264267 0.0824949 -0.0235141 +-0.0699148 0.109401 -0.011164 +-0.0645122 0.0398643 -0.00676714 +-0.0927009 0.117475 0.0353038 +0.00812049 0.107282 -0.0201059 +0.0344124 0.0957227 -0.013333 +-0.0617126 0.170956 -0.0545977 +-0.0888439 0.150092 0.0112242 +-0.0600859 0.0421217 0.0440266 +-0.0535039 0.0805657 0.0446207 +0.00913683 0.0873343 0.0554698 +0.0318118 0.100781 0.0373962 +-0.0366211 0.124122 -0.00724685 +0.0255511 0.0463382 0.0384325 +-0.00473212 0.0386351 0.0247855 +-0.0857334 0.153425 0.016223 +3.04988e-05 0.11432 -0.019028 +-0.0622192 0.17721 -0.0606003 +-0.00533435 0.0930519 -0.0346806 +-0.0578363 0.0912193 -0.0212351 +-0.051575 0.132941 -0.0025104 +-0.0215094 0.0983521 -0.0242621 +-0.0663625 0.141125 0.0427387 +0.0411659 0.0952708 0.0280268 +-0.053497 0.0945663 0.0438533 +-0.0745177 0.171112 -0.0322615 +-0.0779361 0.129573 -0.00656407 +-0.0437814 0.0840812 -0.0212189 +0.00326914 0.0682665 -0.0330635 +-0.0739332 0.177709 -0.0464055 +0.0528574 0.0622185 0.0288955 +-0.0365021 0.101484 0.0413625 +-0.0445836 0.0476428 -0.0105653 +-0.0194973 0.101611 0.0435898 +-0.0137239 0.16215 -0.0118322 +-0.0287184 0.0806953 0.0455388 +-0.0933646 0.117392 0.0153085 +-0.0867701 0.113047 0.00428618 +-0.0052769 0.0941788 -0.0338289 +0.0134806 0.0976663 0.0482444 +-0.08743 0.111796 0.0214228 +0.00133097 0.0626915 -0.0339607 +0.0447988 0.0903457 0.000177034 +0.00183354 0.10009 0.0472603 +-0.0323685 0.0497273 -0.0163483 +-0.0848994 0.144621 0.00617242 +-0.0707871 0.0625817 0.00788057 +-0.0334706 0.0589721 0.0386927 +0.0458044 0.0834139 0.0161713 +-0.0638595 0.159101 -0.0532849 +-0.0169095 0.0379753 -0.0273392 +-0.0683614 0.15578 0.00913576 +-0.0841262 0.110345 0.0263651 +-0.0629048 0.1054 -0.0169977 +-0.00482937 0.038542 0.00854039 +0.00442082 0.039258 0.029719 +0.0287437 0.0416628 0.0306503 +-0.0480218 0.144366 0.00442748 +-0.0718881 0.109321 -0.0102252 +-0.0623027 0.153756 -0.0145815 +0.0312054 0.104936 -0.0131412 +-0.0502712 0.143189 0.0133798 +-0.0679015 0.120916 -0.00896008 +-0.0325574 0.126601 0.00788172 +0.00400981 0.0391328 0.0279405 +-0.0790033 0.16525 -0.0329555 +-0.0464892 0.117969 0.0304809 +-0.0171987 0.127433 0.00332106 +-0.0589607 0.145338 0.0340833 +-0.00576935 0.0346302 0.0443351 +-0.0894143 0.118584 0.00330542 +-0.0494955 0.0890237 0.0451636 +-0.0395958 0.118487 -0.0133369 +0.0256371 0.0346096 0.00722464 +0.0101261 0.0846794 0.0551401 +-0.000640169 0.0481947 -0.0300913 +0.00652044 0.0799801 0.0556018 +-0.0485004 0.157854 0.0090451 +-0.0674788 0.153589 0.0328337 +-0.0246191 0.0436702 -0.0286423 +-0.0380903 0.041957 -0.0274154 +-0.0592055 0.155872 0.0109493 +-0.0158317 0.0382446 0.00839116 +-0.0862834 0.141953 0.0402325 +-0.0178783 0.0381567 0.0189161 +-0.00165332 0.0511407 -0.0309868 +-0.0515122 0.0598238 0.030703 +0.0226361 0.118891 -0.00814073 +0.0433138 0.0902166 -0.00378785 +-0.0339799 0.0384942 -0.0120095 +-0.0424937 0.0748068 0.0427898 +-0.0640892 0.172567 -0.049571 +0.037431 0.0794424 0.0366005 +0.041759 0.0432404 0.0265421 +-0.0923571 0.121517 0.0426088 +0.0562687 0.0726263 0.0113628 +0.024692 0.100819 0.0429025 +-0.0729148 0.110726 -0.0089954 +-0.0295018 0.159581 0.00108834 +-0.0672997 0.0435653 0.00884843 +0.0172829 0.0651656 -0.0289948 +-0.0585687 0.0340745 0.0248573 +0.0320945 0.113613 -0.00441584 +-0.0726455 0.0655594 0.00286688 +0.0223162 0.0649555 -0.0263733 +-0.0636659 0.0691264 -0.011804 +-0.0495225 0.143222 0.00950726 +-0.0396922 0.156587 0.00568688 +0.00749975 0.089676 0.055015 +0.0495971 0.0465817 0.0239661 +-0.0390578 0.156263 -0.0100859 +-0.0708823 0.172457 -0.0366471 +0.0126883 0.0343606 -0.00448368 +-0.0454899 0.0690197 0.0407796 +-0.0413446 0.0335325 -0.0237744 +-0.0404379 0.124957 -0.00812413 +0.0440209 0.0945174 0.0011806 +-0.0627245 0.073729 -0.0165415 +-0.0286056 0.0475856 -0.0255224 +-0.0495036 0.153584 0.0107879 +-0.0896132 0.139307 0.0341845 +0.030074 0.119769 0.00796635 +-0.0517393 0.0517191 0.022632 +-0.023961 0.0723529 0.0481115 +-0.0309909 0.0384268 -0.00579914 +-0.00634516 0.0379873 -0.0153566 +-0.0547761 0.0333427 -0.00414144 +0.00202824 0.108029 -0.0204102 +0.0450661 0.0761937 0.0228711 +-0.084679 0.0869987 0.027663 +-0.0219636 0.0681726 0.0490783 +0.0226059 0.0375679 0.034289 +-0.0518654 0.101358 -0.0214215 +-0.0919525 0.126983 0.0392569 +-0.0663498 0.172859 -0.0450539 +0.00551307 0.0856288 0.0568655 +-0.0269831 0.0381412 0.0278748 +0.0430768 0.0411155 0.00329204 +0.0317014 0.117733 0.0199863 +-0.0326228 0.0506668 -0.0115219 +-0.0760639 0.155862 0.0136886 +-0.0581543 0.0337417 0.0181646 +0.0454926 0.0875897 0.015162 +-0.0197923 0.038435 -0.00354579 +-0.0461288 0.15913 -0.00829043 +-0.0235066 0.108523 0.0406075 +0.015525 0.127932 0.00115163 +0.00251501 0.0814623 0.0569927 +-0.0485603 0.131756 0.000870882 +-0.0909462 0.11476 0.0333322 +0.038369 0.0884214 -0.0137726 +0.0179084 0.127905 0.00771503 +0.0457915 0.0862101 0.0121678 +-0.0310416 0.0763051 -0.0325503 +-0.0584963 0.0946188 0.0448266 +-0.00142898 0.112626 -0.0193593 +0.0537506 0.0519895 0.000247391 +-0.00249736 0.0978288 0.0524276 +0.0474285 0.0692644 0.00256538 +-0.0157146 0.17719 -0.0193767 +-0.0688721 0.0369953 0.0119906 +0.0262296 0.0888085 -0.0227773 +-0.0876687 0.0981895 0.00443327 +-0.0435601 0.129686 0.00973169 +-0.0620348 0.146024 -0.00560988 +0.0228232 0.123119 -0.000681491 +0.0192101 0.0791931 -0.0277308 +-0.0285078 0.0348913 0.0463089 +-0.0295006 0.116619 0.032366 +0.00540344 0.040445 -0.0238712 +-0.0861937 0.0819823 0.0184808 +-0.0691313 0.170851 -0.0540166 +0.0232722 0.0691857 -0.0260989 +0.0346775 0.106404 -0.00868031 +-0.0626839 0.154165 0.00249175 +0.0203005 0.047637 0.041402 +0.0426083 0.0915862 -0.00481093 +-0.00121535 0.0394284 0.0356173 +-0.0290126 0.0606872 -0.0244213 +-0.0522249 0.152155 0.0138449 +0.0278367 0.0781921 0.0455692 +-0.0782715 0.168666 -0.0333616 +-0.0631194 0.0357147 0.0189543 +0.00237959 0.0976208 -0.0273765 +-0.0327796 0.0736593 -0.0265049 +-0.0590695 0.143884 0.0338908 +-0.0366032 0.0407784 -0.0289892 +-0.0564911 0.0400264 0.0468768 +-0.0891224 0.133627 0.00423095 +-0.00349883 0.095211 0.054715 +-0.0365564 0.0488017 -0.0133944 +-0.063603 0.0406323 0.0405017 +0.00388987 0.0987683 0.0495103 +-0.0341448 0.166698 -0.0152744 +0.0422984 0.0789118 -0.00576754 +-0.0821777 0.153468 0.0263012 +-0.0618022 0.0852922 -0.0192956 +-0.0825795 0.0937805 -0.00656944 +0.0526059 0.0476644 0.00422036 +-0.0617323 0.155315 -0.018581 +-0.0646798 0.158592 -0.0555006 +-0.0400438 0.127998 0.000725921 +-0.020826 0.0882193 -0.0372663 +-0.072774 0.083565 -0.0157894 +-0.0301375 0.0592681 -0.0204197 +0.053852 0.0700236 0.0237561 +-0.0192952 0.097132 0.0469462 +-0.0379042 0.0350553 0.0424096 +-0.0779467 0.170107 -0.0351609 +-0.0731753 0.162423 -0.0379582 +0.0293531 0.117442 -0.00254348 +0.00923639 0.0753581 -0.0333366 +-0.00523048 0.0381888 0.0482681 +0.0281109 0.0477624 0.0368744 +-0.00549683 0.095262 0.0547887 +0.016279 0.127286 0.0242335 +-0.000357095 0.0346671 0.0418309 +-0.0903031 0.113239 0.0103302 +-0.0435085 0.165227 0.00470373 +-0.000629686 0.0466337 -0.0288231 +-0.00267903 0.0583624 -0.0332032 +-0.0354553 0.163829 -0.00227816 +0.0329891 0.10525 -0.0114692 +-0.0511234 0.159083 -0.0045978 +-0.0738697 0.0672451 0.0209913 +-0.0513379 0.0345855 0.00988953 +0.0449495 0.041538 0.0177108 +0.0131716 0.128382 0.0245166 +-0.0119302 0.0975527 -0.0293786 +-0.0796395 0.11488 0.0476725 +-0.00554666 0.0429634 0.0481135 +0.0336755 0.115893 0.0150272 +-0.0865455 0.109036 0.0123603 +-0.0583287 0.0597422 0.0219213 +0.00142185 0.0361564 -0.0243567 +-0.0249379 0.182957 -0.0150514 +-0.00456935 0.0511652 -0.031379 +0.00983853 0.130485 0.0204326 +-0.020719 0.0739658 0.0533053 +-0.0922608 0.117447 0.0323019 +-0.0687753 0.15954 -0.0529632 +0.00943169 0.130854 0.0188531 +-0.0463671 0.133058 0.0160254 +0.0403868 0.0966272 0.0286723 +-0.0374342 0.125294 0.0223398 +-0.0254349 0.121225 -0.00822483 +-0.0287913 0.121291 0.025511 +-0.0275751 0.181449 -0.0130337 +-0.0292637 0.0364551 -0.0300736 +0.0333063 0.076755 -0.0177777 +-0.00838403 0.100228 -0.0241757 +-0.0917675 0.126924 0.040336 +0.0460105 0.0848241 0.0111686 +-0.0458316 0.03478 0.00723173 +0.0337176 0.0655129 -0.0167917 +-0.0900318 0.128311 0.0429434 +0.00340705 0.0404653 -0.0241388 +-0.0445167 0.0334752 0.00325528 +-0.0417025 0.170926 -0.000183345 +-0.0667272 0.0750614 -0.0156487 +-0.075008 0.0665773 0.0124915 +-0.0256788 0.0387085 -0.0161237 +0.0433708 0.0459415 -0.00338184 +-0.0333944 0.0420411 -0.0295771 +-0.0366574 0.173333 -0.0118804 +0.0279341 0.0376089 0.0251213 +-0.0591944 0.0589798 0.00447595 +-0.0117173 0.0642717 -0.0365887 +0.0284258 0.044601 -0.00619231 +0.0407559 0.0844033 -0.0107694 +-0.0149445 0.0386028 -0.00457425 +-0.0666364 0.150881 -0.0385507 +-0.0441588 0.156514 0.00623469 +-0.0338796 0.174703 -0.0134692 +-0.0700283 0.075334 0.0376711 +-0.0144851 0.120961 0.0347298 +-0.0394983 0.0690894 0.041721 +-0.0820593 0.0748753 0.013529 +-0.0262192 0.162456 -0.00472466 +-0.0573804 0.151726 0.0319973 +0.0238729 0.0463312 0.0395213 +-0.00887703 0.0985896 0.0509585 +-0.00180856 0.0881831 -0.0355551 +-0.0435257 0.128183 0.0171556 +-0.0137851 0.096091 -0.0318323 +-0.0776083 0.0770893 -0.00760024 +0.0515137 0.0637653 0.0289012 +0.0459041 0.087617 0.00917007 +-0.0946685 0.124165 0.0192665 +-0.0424078 0.0392874 -0.0253255 +0.0574465 0.0566575 0.0231489 +-0.0705315 0.0915903 0.0419348 +-0.062769 0.175495 -0.0615699 +-0.0614063 0.0419532 -0.0067475 +0.0222874 0.0635154 -0.025946 +-0.0325454 0.0624467 -0.016419 +0.0406665 0.105637 0.00516291 +0.00508145 0.125851 -0.00757191 +-0.0743566 0.148587 -0.0198592 +0.028537 0.0506236 0.0375191 +0.00550651 0.0897139 0.0554063 +-0.0165465 0.061194 0.0523676 +-0.0548344 0.113627 -0.016162 +-0.078421 0.120421 0.0514142 +0.0224472 0.0375897 0.0352799 +-0.0558038 0.116914 0.0367748 +0.0399293 0.104183 0.0231644 +0.00793957 0.0368635 -0.0077325 +-0.053287 0.119647 -0.012449 +0.0226022 0.1018 -0.0197774 +-0.0735157 0.102656 0.0375574 +-0.0544964 0.10974 0.0378742 +-0.0351154 0.127437 0.0128308 +-0.0759568 0.136911 -0.00615991 +-0.0228623 0.06956 0.0485197 +-0.00937118 0.0387712 0.0309279 +-0.0858362 0.103636 0.0243714 +-0.0777036 0.174395 -0.0426027 +0.0605358 0.0664822 0.0111446 +-0.0456637 0.0382067 -0.0202858 +-0.0494922 0.0833478 0.0446801 +-0.0717916 0.0893503 -0.0160567 +-0.0654224 0.156324 0.0217941 +0.0104303 0.128801 -0.000781749 +-0.0640931 0.122778 0.0478095 +0.012373 0.0343732 -0.00643255 +-0.00549358 0.0898053 0.0568842 +-0.0544984 0.0973596 0.0432594 +-0.0430782 0.154691 -0.00814248 +-0.058643 0.155634 0.0155202 +-0.0309118 0.10664 -0.0209245 +-0.0117675 0.0728437 -0.0380964 +-0.0685186 0.1456 0.0424246 +0.0168366 0.113017 -0.0157876 +-0.0567451 0.0768007 -0.0192338 +-0.0905785 0.121592 0.0451008 +-0.0564995 0.0889847 0.0448198 +-0.062649 0.164698 -0.0365908 +-0.0414211 0.0344456 0.0316667 +0.0235849 0.102638 -0.0186769 +0.0208761 0.115613 -0.0126037 +0.00135548 0.0496637 -0.030356 +0.0172645 0.0713208 0.051333 +0.0277553 0.0619298 0.0435605 +-0.0388696 0.105647 -0.0202518 +0.002402 0.041908 -0.0243037 +-0.00348806 0.11693 0.0398821 +-0.094215 0.120106 0.0172864 +-0.075338 0.161792 -0.0134783 +-0.0313944 0.0721215 -0.0285061 +-0.076236 0.178558 -0.0487103 +-0.0516597 0.0416063 0.0458402 +-0.0191702 0.169734 -0.0206461 +-0.0458479 0.0999438 -0.0215809 +-0.0608063 0.0939347 -0.0190005 +-0.0831639 0.108847 0.00132792 +0.0449523 0.0945963 0.00616781 +-0.089716 0.139255 0.0241831 +-0.0241715 0.165363 -0.00880477 +-0.0808978 0.121685 0.0496566 +-0.0776757 0.0873848 0.0375611 +-0.0575877 0.0343902 0.0335477 +0.0293569 0.0808765 0.0442663 +-0.0413959 0.1089 -0.0192706 +-0.0486555 0.0606014 -0.0118523 +-0.0263871 0.06465 -0.0314802 +-0.0479423 0.118344 0.0305757 +0.0368905 0.10997 0.023344 +0.00465961 0.0959425 -0.0295932 +-0.00250198 0.0647948 0.0567081 +0.0155008 0.0345049 -0.00593057 +-0.0414998 0.0944525 0.0421484 +-0.0425159 0.17187 -0.00332083 +-0.00662603 0.045146 -0.0285621 +-0.0728992 0.107873 -0.010241 +0.0162924 0.0680403 -0.0298148 +-0.058126 0.0494622 0.00265482 +-0.049929 0.0335244 -0.00515732 +-0.0592138 0.116352 -0.0129282 +-0.0876027 0.103683 0.0193632 +-0.0661658 0.170967 -0.0590604 +-0.00423283 0.0951855 -0.0328472 +-0.056711 0.153132 0.0293166 +0.0299135 0.0618945 0.0413957 +-0.0754312 0.179188 -0.0498593 +-0.0890756 0.0982905 0.00941744 +-0.0313333 0.114057 -0.0167329 +-0.0336201 0.0505969 -0.0107597 +0.0152428 0.0807565 -0.0298514 +0.000144172 0.129559 0.0255502 +-0.0166332 0.101644 -0.0236856 +0.0112856 0.0666869 -0.0306751 +-0.0719068 0.110755 -0.00961867 +-0.056773 0.082629 -0.0212703 +0.0224949 0.112674 0.0362232 +0.00494458 0.0356784 0.0456125 +-0.0401622 0.123949 0.0243503 +-0.0494029 0.0516267 0.0356191 +-0.000148869 0.0998138 -0.0237113 +-0.0494252 0.12902 -0.00225187 +-0.0351127 0.162221 -0.0139882 +-0.0801061 0.109977 -0.00253557 +-0.0583279 0.116979 0.0383609 +0.0214316 0.0768422 0.0503677 +-0.0637593 0.0357681 0.0182478 +-0.0679574 0.176267 -0.0485208 +-0.0466544 0.0636155 -0.0134601 +-0.018198 0.0896163 -0.0372798 +-0.0675078 0.167827 -0.0267933 +-0.0891218 0.136568 0.0391914 +-0.00634438 0.0961732 -0.0318818 +-0.0509131 0.144221 0.000402933 +0.020479 0.0822082 0.0508036 +0.0382522 0.0617095 -0.0097618 +0.0414447 0.0957847 0.0271584 +0.0495191 0.0624602 0.0299628 +-0.0525648 0.0515684 -0.00660684 +-0.0507038 0.0543653 0.0186143 +-0.0678764 0.117979 -0.00873338 +-0.0833731 0.0803286 0.00149951 +-0.0102345 0.169322 -0.0249254 +0.0161585 0.128774 0.0170439 +-0.0495011 0.0439447 0.0438293 +-0.0308936 0.0901442 -0.0248987 +-0.0380826 0.159224 -0.0120325 +-0.0684954 0.121776 0.0527683 +-0.0237994 0.178657 -0.0117033 +0.022476 0.125337 0.020807 +-0.0131867 0.0392232 0.050872 +-0.0828365 0.116201 -0.00217327 +-0.0792107 0.0760132 0.0281283 +-0.0418712 0.105657 -0.0205306 +-0.0265289 0.11806 0.03154 +-0.0485021 0.104259 0.0404773 +-0.0515007 0.164119 0.00202375 +-0.0628742 0.175671 -0.0555946 +-0.0385777 0.1595 0.00203018 +-0.0410438 0.162368 0.00371458 +-0.0683486 0.124257 0.0521552 +0.0311264 0.0469699 -0.00653546 +-0.0346775 0.127387 0.0115177 +0.0256926 0.105619 -0.0158649 +-0.0656817 0.0705232 -0.0118151 +-0.0889612 0.111861 0.0183359 +-0.027486 0.0646029 0.0384895 +0.0307322 0.108762 0.0340805 +-0.0647018 0.172123 -0.0473675 +-0.0914367 0.114681 0.021315 +-0.00481581 0.0882239 -0.0361964 +-0.0229882 0.0386094 0.0318708 +-0.0164825 0.0530314 0.0497852 +0.031763 0.0653471 -0.018741 +0.0313568 0.052068 0.0363454 +-0.0937998 0.118753 0.0153042 +-0.0460733 0.0336746 -0.01741 +0.00639772 0.0911374 -0.0325899 +-0.0665077 0.105605 0.0392145 +-0.037944 0.165312 0.00115508 +-0.0447719 0.0826286 -0.0206706 +0.015216 0.0849668 -0.0295884 +-0.00949197 0.121025 0.0361236 +-0.0728889 0.159628 -0.0359308 +-0.0212527 0.0696869 0.051144 +-0.0609844 0.0646638 0.031213 +-0.0787829 0.0926997 0.035689 +0.0098313 0.0644618 0.0545535 +-0.0435636 0.0476726 -0.0110362 +0.00292266 0.0383702 -0.00263564 +-0.0294982 0.0674485 0.03887 +-0.0594483 0.0590098 0.0188119 +-0.0331272 0.0335545 -0.0277881 +-0.0654135 0.17638 -0.0519366 +0.0381247 0.0827831 -0.0147803 +0.0274189 0.0834776 -0.02246 +-0.0754296 0.152593 -0.0138871 +-0.0626337 0.149615 -0.00617193 +0.0395378 0.100622 0.0273876 +-0.00317446 0.0951663 -0.0328247 +0.0284436 0.0721192 -0.0227379 +0.0256796 0.0353829 0.0212256 +-0.0100479 0.0388486 -0.00567581 +-0.0815042 0.149744 0.0353513 +0.0569923 0.0508892 0.0171854 +-0.0844404 0.100576 0.0283951 +-0.066663 0.0704664 -0.0109078 +0.011503 0.108488 0.0403225 +0.0346003 0.059954 -0.013776 +-0.00350072 0.0828956 0.0574459 +-0.0308908 0.0524482 -0.0143777 +0.0220365 0.0430228 -0.0147268 +-0.0499219 0.0558508 0.0334877 +-0.0315001 0.070354 0.040029 +0.0121741 0.0780107 0.0545179 +-0.040483 0.0423569 0.0419938 +-0.0438782 0.0343145 0.0294954 +-0.0243712 0.122748 0.0255975 +-0.013279 0.101966 -0.0239644 +-0.0635872 0.0445618 0.0346899 +-0.09116 0.146144 0.0251605 +0.0191385 0.125192 -0.000918824 +0.0439709 0.0776452 -0.00278508 +-0.034376 0.0448305 0.0451875 +-0.0292764 0.0508797 -0.0213979 +-0.0586802 0.148237 0.034554 +-0.0830867 0.0803012 0.027553 +0.0470243 0.0458757 -0.000608958 +-0.0124544 0.125711 -0.00519106 +-0.0316347 0.0511137 -0.0133654 +-0.0495769 0.126877 0.0317874 +0.0446953 0.0861142 -0.000824781 +-0.0164935 0.0744329 0.0555937 +-0.07397 0.135486 -0.00709777 +-0.0388049 0.0885478 -0.0231132 +-0.0738057 0.149865 -0.0338746 +-0.0612039 0.0347997 0.0427656 +-0.0248108 0.064983 0.0421327 +-0.0374965 0.120729 0.0294163 +-0.0773599 0.0940895 0.0370488 +-0.0221316 0.122996 0.0264112 +-0.0656835 0.180548 -0.0590311 +-0.0654403 0.114174 0.0440564 +-0.0576422 0.035457 -0.0105994 +0.0063341 0.0539359 -0.0303914 +-0.0624964 0.108382 0.0385383 +0.000507196 0.0474213 0.049671 +-0.0768403 0.0682209 0.0124564 +-0.0177152 0.0613627 -0.0358053 +-0.0708829 0.156323 0.0169624 +-0.0801272 0.0895173 -0.00861746 +-0.0681398 0.156014 0.0252192 +-0.0643944 0.0418449 0.0286723 +-0.0223108 0.122995 -0.00618559 +-0.0332179 0.0347336 0.0278325 +-0.0494838 0.129682 0.0301574 +-0.0874269 0.111566 0.0378689 +0.0078939 0.0373631 -0.01008 +-0.0556091 0.0372359 0.0469697 +-0.0495471 0.140136 0.00640196 +-0.0721891 0.0696552 -0.00460695 +-0.0645108 0.135348 0.0400634 +-0.00963836 0.0466527 -0.0295963 +-0.00450177 0.0856564 0.0572774 +-0.0726963 0.163825 -0.0409661 +-0.0831522 0.148677 0.0355101 +-0.0045943 0.109577 -0.0220661 +-0.0700292 0.14319 -0.0126949 +0.0170086 0.0672594 0.0509139 +-0.0184932 0.0842766 0.0574008 +0.0333985 0.0809938 -0.0187374 +-0.00658339 0.116828 -0.0157946 +-0.0830307 0.110356 0.0344756 +-0.0164574 0.11955 0.0353527 +-0.0437556 0.0335262 -0.0205177 +-0.0196754 0.180147 -0.0162801 +0.00748686 0.0427091 0.0452774 +0.047238 0.0525837 0.0312359 +-0.00150012 0.0842876 0.0575029 +-0.0647611 0.154265 0.00245101 +0.0385227 0.108358 0.00315989 +0.00616601 0.0343841 0.0199712 +0.0190967 0.127602 0.0138576 +0.0232916 0.104676 0.0408599 +-0.0209519 0.121676 -0.0087885 +-0.000475449 0.077417 0.0583222 +-0.0340577 0.0344858 -0.0194842 +-0.0449113 0.0342791 0.0293115 +-0.02963 0.125357 0.0045818 +-0.0442513 0.120873 0.0273959 +0.0233607 0.0713858 0.0478141 +0.0294074 0.0974659 -0.0171759 +-0.0251322 0.110719 -0.0192347 +-0.0168318 0.0883012 -0.0380546 +-0.0537516 0.078251 -0.0196488 +-0.0617185 0.155298 -0.026582 +0.0182327 0.0369462 -0.015679 +0.0204347 0.103384 0.043762 +-0.0271652 0.177189 -0.00775302 +-0.078183 0.161072 -0.0259393 +-0.000994284 0.0346324 -0.0168306 +-0.0369077 0.0407733 0.0449918 +-0.0117377 0.0685356 -0.0370961 +-0.0520176 0.136681 0.0271356 +-0.0244827 0.044849 0.0526821 +0.0122811 0.0490196 0.0473922 +-0.0310488 0.126128 0.0128475 +-0.0612252 0.0618413 0.0248018 +0.0110023 0.0872551 0.0546654 +0.0137177 0.0926941 0.0515916 +-0.050909 0.135812 0.0260882 +-0.0514988 0.090386 0.0447021 +-0.0776802 0.121779 0.0520726 +-0.0435045 0.0492094 0.0395536 +0.0427867 0.0445146 0.027427 +-0.0124587 0.0716774 0.0554083 +-0.0903482 0.115904 0.00630147 +-0.0676703 0.159658 -0.00956407 +-0.0534975 0.100135 0.0423919 +0.0299608 0.102103 0.0382304 +-0.0275896 0.0398384 -0.0294326 +-0.0354902 0.0576195 0.0391492 +-0.0365293 0.120277 -0.0112077 +0.000101878 0.111584 -0.0199068 +-0.0568115 0.11798 -0.012657 +-0.0134078 0.0383017 0.0160824 +-0.078485 0.131655 0.0526796 +-0.0630792 0.17626 -0.0613621 +0.00219436 0.0880897 -0.0340427 +-0.00664745 0.0511524 -0.0316637 +-0.0221856 0.122325 -0.00745001 +0.0517581 0.0684217 0.00143507 +-0.0206221 0.0450432 -0.0278804 +-0.0187788 0.181486 -0.0239544 +-0.0435029 0.119128 -0.0140097 +-0.0368374 0.0957548 -0.023046 +0.0360094 0.105316 -0.00780471 +-0.0310017 0.0339922 0.010953 +0.0468601 0.0467385 0.0270828 +-0.0800669 0.107282 -0.00460113 +0.0161405 0.0847501 0.0515574 +-0.0726437 0.152619 -0.0388965 +-0.030372 0.124909 0.019004 +-0.0532086 0.0387959 0.0470712 +-0.00947284 0.0717726 0.0568611 +-0.0417517 0.0449058 -0.0193246 +-0.0324319 0.159505 0.00208324 +-0.064273 0.0404086 0.0266782 +-0.0456914 0.0665681 -0.0150523 +-0.0317955 0.0901023 -0.0248195 +-0.0901544 0.148798 0.0121684 +-0.0448181 0.0898814 -0.0220536 +-0.00651 0.0385696 0.00453582 +-0.0505409 0.146308 0.012527 +-0.0736443 0.148637 -0.0247496 +0.0362923 0.0826461 -0.0167222 +-0.0582688 0.0380855 0.0465946 +0.0420736 0.0957824 -0.00279849 +0.059075 0.0677442 0.0201625 +-0.0118076 0.166362 -0.0213381 +-0.0293882 0.0593157 -0.02241 +-0.00750084 0.0688979 0.0559719 +-0.0834808 0.0763288 0.0055122 +0.0455463 0.0847945 0.0181695 +-0.0853379 0.139291 0.0436042 +-0.0127384 0.0714338 -0.0383051 +0.0288553 0.119043 0.000370228 +0.0382387 0.108322 0.00216703 +-0.0854254 0.147285 0.0350057 +-0.0290239 0.0918566 -0.0266024 +-0.089435 0.0996945 0.016394 +-0.0250572 0.0379934 0.0230062 +-0.0659224 0.108105 -0.0137141 +-0.0197383 0.064191 -0.0362126 +0.0332406 0.0828224 -0.0189128 +-0.050463 0.0627793 0.0338697 +-0.00332118 0.0928352 -0.0344367 +-0.0351624 0.0344214 0.0133327 +0.0337894 0.103744 -0.0118635 +-0.0685313 0.0435239 0.00368786 +-0.0915175 0.140609 0.0191776 +-0.0763247 0.0679089 0.0110614 +-0.0293662 0.0904135 -0.0285737 +-0.0268485 0.0931277 -0.028596 +-0.0493167 0.137038 0.00442458 +-0.0607789 0.121227 0.0419471 +-0.0167795 0.0984818 0.0458118 +-0.0218018 0.0947992 -0.0305488 +-0.0933659 0.118725 0.0133024 +-0.0263107 0.0780916 0.0488984 +-0.0689525 0.144454 -0.0174142 +-0.0698503 0.0980241 -0.015524 +0.0377251 0.0602627 -0.00973714 +-0.0616079 0.160003 -0.0285892 +-0.00362249 0.0451016 -0.0279234 +-0.0658161 0.0866791 -0.018673 +-0.0898976 0.132262 0.00523931 +-0.014426 0.0383347 0.0104075 +-0.0891789 0.14342 0.0311627 +-0.0516305 0.0633366 -0.0105425 +0.0421385 0.102872 0.00916356 +-0.073056 0.163825 -0.0399663 +0.0142799 0.0695538 -0.0310885 +-0.0191804 0.172724 -0.0156293 +-0.0111853 0.109046 -0.0214904 +-6.48961e-05 0.130222 0.00105503 +-0.037907 0.0368934 -0.0113278 +-0.0778791 0.116346 -0.00545689 +-0.0353032 0.042242 0.0460623 +-0.0732356 0.176411 -0.0530886 +0.0601048 0.0608967 0.00715985 +-0.052965 0.0595916 0.0265588 +-0.0564973 0.0762116 0.0428205 +-0.034872 0.104274 -0.0209307 +-0.058681 0.0336414 -0.0106847 +-0.082997 0.0883523 -0.00560613 +-0.0901456 0.140633 0.0231701 +0.059772 0.0594746 0.00715469 +0.0315129 0.0439606 0.0299133 +-0.0749354 0.108383 0.0378851 +-0.0718123 0.0950995 -0.0154446 +-0.017311 0.117579 -0.0145168 +-0.0492219 0.145089 -9.42983e-05 +-0.0492467 0.0335224 -0.00684693 +-0.077013 0.157587 -0.0116646 +-0.0395098 0.12077 0.029092 +-0.0676415 0.155906 0.0108585 +-0.0115046 0.0688083 0.054897 +0.00350877 0.068881 0.0557692 +-0.00832726 0.0349131 -0.024554 +0.00623924 0.0754282 -0.0343629 +-0.0601994 0.14968 0.0358889 +-0.0681006 0.0726203 0.0368546 +-0.0550659 0.154073 0.0197239 +0.0220423 0.0388246 -0.00567731 +-0.050633 0.0633988 -0.0111763 +0.0262673 0.0718723 -0.0242084 +0.00651709 0.084208 0.0565081 +-0.0508195 0.0927229 -0.0217389 +-0.0823617 0.110377 0.0328225 +-0.0443307 0.0345511 0.0362271 +-0.0664541 0.159015 -0.0105538 +-0.065725 0.180452 -0.0578644 +-0.00729397 0.0383333 0.0172997 +-0.083856 0.108875 0.00233606 +-0.0531754 0.160014 0.00733632 +-0.0617546 0.0335347 0.00511487 +-0.0436843 0.0666417 -0.0153695 +-0.0475053 0.16079 0.00736091 +0.0213151 0.0393899 0.0411211 +-0.0126085 0.0434839 -0.0264186 +-0.058072 0.135467 -0.00577889 +-0.0144744 0.0573903 0.0514423 +-0.0480757 0.15465 -0.00633475 +-0.0214326 0.158913 -0.0108411 +0.0317035 0.0927362 -0.0181479 +0.0258633 0.0505634 0.0389033 +-0.0916556 0.116096 0.0323166 +-0.0344737 0.0973629 0.0436701 +-0.0772898 0.158355 -0.013903 +0.00252455 0.078679 0.0567626 +-0.0768599 0.0852186 -0.0125783 +0.00638417 0.060281 0.0547831 +0.00351108 0.067509 0.0559028 +-0.0775506 0.172738 -0.0395384 +-0.0941076 0.120125 0.0222927 +0.0397169 0.0400457 0.0217023 +-0.00993012 0.125562 -0.00707028 +0.0207467 0.0387687 0.0412277 +-0.0770466 0.0947961 -0.0125384 +-0.0208658 0.163381 -0.0161046 +-0.0194871 0.0786419 0.0560662 +-0.00848562 0.0978428 0.0521021 +-0.00195749 0.0369571 0.00873581 +-0.0554658 0.14959 0.0286413 +-0.0613355 0.171315 -0.0617342 +-0.0405058 0.060576 0.0408455 +-0.019245 0.0381493 0.0168345 +0.0318352 0.0959581 -0.0155753 +-0.0894336 0.0956291 0.0144221 +-0.0562826 0.138192 -0.0042334 +-0.0587859 0.118384 0.0394982 +0.0557398 0.0577143 0.000186064 +0.021293 0.0347861 0.0208687 +-0.0521809 0.0564969 0.0230721 +-0.088994 0.140671 0.0361625 +-0.0626529 0.0336856 0.0101657 +-0.0346997 0.0808739 -0.0236048 +-0.0740754 0.0791322 0.0370556 +0.0424523 0.0958497 0.0251568 +0.0156501 0.129207 0.0125793 +-0.0758074 0.0766216 0.033593 +-0.053977 0.0335099 0.00491422 +-0.049617 0.115589 0.0334474 +-0.0151821 0.115592 -0.0164315 +0.0198002 0.113601 -0.0144182 +-0.0297803 0.0833036 -0.0335871 +-0.0888224 0.0929368 0.0224135 +-0.0255078 0.162179 -0.0150106 +-0.0468796 0.105628 -0.0200508 +0.0328144 0.0654355 -0.0177831 +0.0401246 0.0657991 0.0315825 +-0.0619246 0.161563 -0.0295917 +-0.0336612 0.0423072 0.0487868 +-0.0806782 0.140364 -0.00279029 +-0.0575747 0.034031 0.0251021 +-0.00250061 0.0856648 0.0572816 +-0.051497 0.0776631 0.0434639 +-0.0314085 0.177247 -0.00418119 +-0.0382796 0.035429 0.0243806 +-0.0273926 0.0381858 0.00428469 +-0.0590133 0.128179 -0.00718347 +-0.059761 0.058524 0.00837605 +-0.089717 0.142036 0.0301646 +-0.0708787 0.0634588 0.0196178 +0.017237 0.0368135 -0.0176915 +0.0283981 0.0848865 0.0446615 +0.042292 0.0669509 0.0276386 +-0.0400442 0.15362 -0.00816685 +-0.0666868 0.15458 -0.000433214 +0.00520355 0.0894816 -0.0332282 +-0.0438381 0.033833 0.0263899 +-0.0863798 0.100827 0.00341316 +-0.0560788 0.154579 -0.00133297 +-0.0130807 0.0387897 0.0319484 +0.0526374 0.0710929 0.00470311 +0.0114966 0.0923286 0.0527326 +-0.0637555 0.0336685 -0.00625178 +-0.0475689 0.0432884 -0.0109341 +-0.0725775 0.0367142 0.00725292 +-0.0374892 0.112529 0.0350998 +0.0350676 0.0395586 0.0248293 +-0.031508 0.0675059 0.0394967 +0.0422807 0.0831292 -0.00677447 +-0.0617624 0.0810326 -0.0192317 +-0.0601798 0.155861 0.0135147 +-0.0160151 0.185636 -0.0207096 +-0.0495589 0.141679 0.00640064 +0.0451001 0.0791381 0.000209359 +-0.00648871 0.115533 0.0401374 +-0.0179936 0.034905 0.0502652 +-0.0345243 0.0619374 0.0399691 +0.0253647 0.107408 0.0385761 +0.0241683 0.0795725 0.0490812 +-0.076883 0.154198 -0.00789596 +-0.022619 0.0436731 -0.0285417 +0.0302544 0.115002 0.0294335 +-0.0112354 0.0407042 0.0501624 +-0.0374964 0.118015 0.0312717 +-0.0264155 0.169752 -0.0102811 +-0.0325172 0.115309 0.0332233 +-0.0883434 0.0968836 0.00640652 +-0.0074894 0.104457 0.0437929 +-0.0122029 0.0391189 0.0354325 +0.0605626 0.0609358 0.0161739 +-0.0291057 0.0349617 0.0478282 +-0.00632683 0.0367419 -0.0160833 +0.0422139 0.06433 -0.00247442 +-0.0834639 0.0815548 0.0279962 +-0.091428 0.113787 0.018961 +-0.0164849 0.0911174 0.0558291 +-0.0521483 0.153554 0.0122178 +0.0344074 0.0446243 -0.00536213 +-0.09232 0.126938 0.0302595 +-0.0718881 0.12088 -0.00850233 +-0.0769692 0.155214 0.0250641 +-0.0847077 0.140411 0.00224002 +-0.0180254 0.171268 -0.0157212 +0.0102822 0.065327 -0.0312772 +-0.0271732 0.171194 -0.0185934 +-0.0475224 0.0587349 0.0366732 +-0.0815066 0.0980245 0.032594 +-0.0287322 0.0335484 -0.0250427 +0.000965074 0.0348235 0.00577003 +-0.0874433 0.114073 0.0447649 +-0.0745611 0.163685 -0.0159572 +-0.0504998 0.0931897 0.044287 +0.00144942 0.127679 0.0289378 +-0.0830551 0.128552 0.0515383 +-0.0537303 0.0473713 0.0135851 +-0.0226958 0.0380494 0.0144148 +-0.0698996 0.147518 -0.0298062 +-0.0374978 0.0833038 0.0438252 +0.0144108 0.118463 -0.013667 +-0.0810085 0.1097 0.0318734 +-0.0883068 0.151437 0.0121831 +0.0014962 0.114186 0.0411808 +-0.0457512 0.0782542 -0.0192962 +-0.0728503 0.107163 0.0374416 +-0.0546426 0.0335759 -0.00981752 +-0.0905935 0.133662 0.00922276 +-0.0777368 0.158322 -0.016916 +0.0333249 0.108715 0.0307644 +-0.0758319 0.0675199 0.00554661 +-0.0608714 0.0385134 0.0195368 +-0.0766234 0.167356 -0.0265012 +0.0324864 0.115764 0.0245556 +-0.051601 0.149349 0.0154046 +-0.0370133 0.1227 0.0269929 +-0.0556554 0.124247 -0.00722427 +-0.0272643 0.118767 -0.0116611 +-0.0284876 0.0660147 0.0384689 +-0.0890493 0.136506 0.0262024 +0.0455252 0.0918117 0.00617298 +-0.0739705 0.110854 0.0450522 +-0.054929 0.0378655 -0.0109689 +-0.0211646 0.0933284 0.0517404 +-0.00865087 0.0496719 -0.030975 +0.0599111 0.0692057 0.0151972 +0.0182222 0.0631608 0.0491228 +-0.0659867 0.134061 -0.00822741 +-0.0533518 0.117447 -0.0141574 +-0.0356207 0.0519761 -0.0103771 +-0.0674828 0.0383816 0.0133921 +-0.0179472 0.0391243 0.0360362 +-0.0353932 0.0352385 0.0143534 +-0.0381912 0.168168 -0.0127822 +0.0242439 0.0994852 0.044008 +-0.0331278 0.165217 -0.0153881 +0.0419441 0.102888 0.00516309 +-0.0744413 0.0833098 0.038687 +-0.0349807 0.177 -0.00919022 +0.00950876 0.0882899 0.055046 +0.0203114 0.0607424 -0.0267183 +-0.00473829 0.0684427 -0.0355801 +-0.0293549 0.0495451 -0.022456 +0.0213555 0.0521216 -0.0251867 +-0.0608025 0.132515 0.0384279 +-0.086306 0.0981081 0.00140707 +0.0124215 0.122685 -0.01021 +0.0534041 0.0547278 -0.00176167 +-0.0725172 0.105485 0.0374705 +-0.0925573 0.125589 0.0382552 +0.023685 0.124697 0.0198268 +0.0381226 0.0574698 -0.00591549 +-0.0358756 0.107103 -0.0202685 +-0.00445554 0.112864 -0.0195829 +-0.00333512 0.125963 -0.00760181 +0.0355639 0.058664 -0.0117324 +-0.0752743 0.171989 -0.0354168 +0.0264872 0.122262 0.00520712 +-0.0911855 0.114622 0.00933636 +-0.0888501 0.102361 0.0153809 +0.0303343 0.0358493 0.0181065 +0.0388945 0.108364 0.0171641 +0.0444906 0.0861036 -0.00180248 +-0.00457845 0.0388805 0.0300129 +-0.0689372 0.126774 -0.00892675 +0.0352594 0.113795 0.0141522 +0.0379749 0.0374097 0.0109015 +0.00640925 0.0404248 -0.023654 +-0.0569156 0.112617 -0.0162683 +-0.0161127 0.0388433 -0.0124778 +-0.0568734 0.0358081 0.0462717 +-0.0852004 0.111887 0.0434561 +-0.0393334 0.174116 -0.00798067 +-0.0335527 0.156609 0.00223348 +-0.06623 0.13826 0.0429445 +-0.029146 0.168214 -0.0173005 +0.0267233 0.0347365 0.00732658 +-0.0416725 0.0607151 -0.0124173 +-0.0304675 0.175749 -0.00423829 +-0.0888241 0.114444 0.00524771 +-0.00228102 0.038771 0.0269718 +-0.0353955 0.0337248 -0.0302701 +-0.0474965 0.0862056 0.045143 +-0.0615859 0.155307 -0.0235819 +0.0506383 0.0516722 -0.00273463 +0.0335552 0.036072 0.00748554 +-0.00436077 0.12603 -0.00766771 +-0.0239599 0.182991 -0.0170658 +-0.00549985 0.07185 0.0581365 +-0.0328429 0.0972178 -0.0231932 +-0.091474 0.148846 0.0181354 +0.0336134 0.0876336 0.0416906 +-0.0614982 0.101529 0.0422258 +-0.0495014 0.0464837 0.0411417 +-0.0551395 0.054088 0.00915623 +-0.0432223 0.147486 -0.00120685 +-0.0358825 0.108535 -0.0199213 +0.00990352 0.130871 0.0175976 +-0.00150184 0.0978367 0.052434 +-0.0334203 0.0667037 -0.0174892 +0.0289827 0.0467369 -0.00766304 +-0.0555362 0.0629843 -0.00681601 +-0.0758946 0.0992374 -0.0118631 +-0.0367472 0.127095 0.0166739 +-0.0571684 0.0576767 0.00966588 +-0.0823623 0.154598 0.0188308 +-0.0905142 0.129614 0.0405398 +-0.0677394 0.0764997 -0.0160371 +-0.0201192 0.163785 -0.0165508 +-0.0132881 0.113144 -0.01784 +0.0143956 0.046307 -0.0246969 +0.0117341 0.0390743 0.0447312 +-0.0746833 0.155701 -0.000366346 +-0.069527 0.156219 -3.70248e-05 +-0.0226679 0.0341396 -0.0206509 +-0.00924422 0.0344526 -0.0182921 +-0.0276907 0.0335904 -0.024878 +-0.00470812 0.0669686 -0.0349707 +-0.024291 0.106203 -0.0224613 +-0.0142085 0.0972199 -0.0290358 +-0.0465353 0.133196 0.0100953 +-0.0245088 0.108515 0.0403619 +-0.092997 0.116043 0.0153159 +-0.0517083 0.131123 0.0322407 +-0.0456135 0.053373 -0.0104441 +-0.0345226 0.0846315 0.0427551 +-0.00735617 0.0354566 -0.0169734 +-0.0865776 0.109066 0.0163469 +-0.0436408 0.0408205 -0.0223011 +-0.0526724 0.130856 -0.00431281 +-0.0516582 0.0647811 -0.0108241 +0.0182047 0.100313 -0.0224597 +0.0445886 0.0833307 0.0241696 +-0.0749819 0.151307 -0.0268775 +-0.0846364 0.0845811 0.0264985 +-0.0452001 0.165138 -0.00833108 +-0.0791947 0.168601 -0.0366432 +-0.0848581 0.120613 -0.00298955 +0.0319638 0.0780558 -0.0197042 +-0.0923737 0.128196 0.0102559 +0.0394261 0.0716433 -0.0107927 +0.0122035 0.115305 -0.0162457 +-0.0229162 0.0383263 0.00143492 +0.0428254 0.0986969 0.0191637 +0.0153612 0.0463061 -0.0243571 +-0.00764709 0.0511598 -0.0317878 +-0.0853621 0.135278 0.0465646 +-0.0829375 0.116994 0.0487646 +-0.085028 0.100559 0.0275605 +-0.0219183 0.0382906 0.00166561 +-0.0765591 0.0818865 0.0366215 +0.0417584 0.0971928 -0.00282344 +-0.064598 0.141073 0.0399979 +0.0464507 0.0764566 0.0101865 +-0.0788399 0.114858 -0.00418456 +-0.0825062 0.110166 0.000353593 +0.029005 0.0699505 0.0419019 +-0.0144969 0.0814706 0.0569355 +0.0278524 0.115393 0.0316598 +-0.0742949 0.17555 -0.0422185 +-0.0749686 0.158241 -0.0259415 +-0.0378653 0.102824 -0.0209313 +-0.0110297 0.11443 -0.0172182 +0.0092913 0.0739064 -0.0330363 +0.0274028 0.0416284 -0.00496361 +-0.0105374 0.130025 0.0158825 +-0.0530895 0.0530892 -0.00643833 +-0.0165413 0.0573347 0.0511714 +0.0165193 0.125294 -0.00303164 +-0.080526 0.109264 0.0359357 +-0.0639459 0.153257 -0.00670123 +0.0199666 0.126684 0.0198751 +0.0426813 0.101508 0.00916223 +0.0270307 0.0781852 0.0461538 +0.00819303 0.0342719 -0.00156322 +-0.0758021 0.154133 0.0299324 +0.0217183 0.114203 -0.013082 +-0.0761724 0.154401 0.00198863 +0.0253655 0.0814952 -0.0244829 +-0.0357817 0.0871994 -0.0240994 +-0.0181797 0.178658 -0.0176382 +-0.018211 0.0697307 0.0537615 +-0.0393811 0.154717 -0.00895732 +-0.014508 0.0659228 0.0537042 +-0.0294961 0.104302 0.0413374 +-0.0281692 0.171188 -0.018077 +-0.0564789 0.0833746 0.0446901 +-0.0817321 0.120346 0.0490739 +-0.0180945 0.124042 -0.00530863 +-0.0722448 0.0688588 0.0287217 +-0.064637 0.0404566 0.0276669 +-0.0642686 0.171043 -0.0609844 +-0.00150003 0.0520299 0.0541649 +0.0343966 0.0968432 0.0376227 +0.033587 0.0739599 -0.0167921 +-0.0916761 0.122705 0.00729331 +0.0435692 0.0691645 0.0259965 +-0.0583799 0.0342852 0.0299739 +0.0193411 0.0593649 -0.0271573 +-0.0630027 0.145885 -0.0118617 +-0.0492939 0.133961 0.00142725 +-0.0445641 0.0405033 0.0438121 +-0.0534909 0.101517 0.0419949 +-0.0137652 0.0728728 -0.0386088 +-0.000746952 0.0726633 -0.0355323 +-0.00426313 0.130924 0.016725 +-0.0833848 0.0776237 0.00250717 +0.0107457 0.127435 -0.00331768 +-0.0566099 0.136533 -0.00462162 +-0.0137664 0.0742812 -0.0386456 +-0.0253123 0.0865272 0.0518462 +0.0391332 0.0800655 -0.0117735 +-0.0595022 0.0987448 0.042776 +-0.031899 0.0792306 -0.0315346 +-0.074881 0.117904 -0.00727699 +-0.0755718 0.165165 -0.0201548 +0.0408155 0.0939721 0.0292858 +-0.0854938 0.096523 0.0281673 +-0.0644931 0.105621 0.039804 +-0.0196701 0.0554437 -0.0324495 +0.0139693 0.112639 -0.017366 +-0.00232624 0.124886 -0.00844394 +-0.0617679 0.0824635 -0.0193558 +-0.0599121 0.0588939 0.00621161 +-0.0826266 0.146034 0.0392943 +-0.0649084 0.165706 -0.0272764 +-0.0602113 0.0697286 0.0375341 +-0.00175042 0.0897209 -0.0353687 +-0.0275054 0.107176 -0.0215083 +-0.062122 0.0429616 0.0266943 +0.032428 0.0625798 -0.0177725 +-0.0663881 0.0677373 0.0326703 +-0.02076 0.0347198 -0.0277376 +-0.0519381 0.0597689 0.0297286 +-0.0595413 0.0582322 0.0158865 +-0.0445568 0.151229 -0.00569012 +-0.0210951 0.12531 -0.000542597 +-0.020213 0.178617 -0.0227863 +-0.00769265 0.0388371 -0.00333188 +-0.0344924 0.09037 0.0442186 +-0.0786032 0.107051 0.0327104 +-0.0434904 0.12843 0.000929671 +-0.058473 0.115363 0.0369711 +0.045085 0.0833373 0.00221176 +-0.0384977 0.0648621 0.0416261 +-0.0407478 0.0768336 -0.0187281 +-0.0578796 0.102621 -0.0187883 +-0.0846144 0.128516 0.0502768 +0.0170529 0.075444 0.0528157 +-0.018505 0.0786406 0.056357 +-0.0752579 0.0874199 0.0393733 +0.043967 0.0636126 -0.00172463 +-0.0914628 0.146095 0.0181484 +-0.0294715 0.117536 0.0312989 +-0.0581079 0.0480417 -0.000353036 +-0.0384621 0.172216 -0.000421117 +0.0412086 0.0684033 0.0296357 +-0.0332986 0.0384796 -0.0137148 +-0.0549774 0.0335456 0.00467992 +0.00953694 0.103082 0.0459273 +-0.048193 0.133027 0.0241926 +0.00364343 0.0960341 -0.0296841 +-0.0809226 0.0926448 0.0335946 +0.0316471 0.05126 -0.00972402 +-0.0622205 0.164668 -0.0515889 +0.0257137 0.0591918 0.0440938 +-0.0116637 0.0384284 0.00907266 +0.00758624 0.0341288 -0.016561 +-0.0732628 0.0731075 0.0335988 +0.0105031 0.0347322 0.0422156 +0.0273613 0.0592959 -0.0217662 +-0.0329323 0.126815 0.00921204 +-0.0462425 0.0615364 0.0381535 +0.00735972 0.130718 0.020957 +-0.0618449 0.152018 0.0348716 +-0.0311962 0.0475489 -0.0247586 +-0.0384898 0.113893 0.0344296 +-0.0268492 0.155368 -0.00477229 +0.0138974 0.0344287 -0.0156692 +-0.0374813 0.169748 0.00157136 +-0.0892091 0.137796 0.0122163 +-0.0705026 0.0958452 0.0418601 +-0.0862013 0.10903 0.0113533 +-0.0682521 0.15944 -0.00832765 +0.038441 0.100665 0.0293761 +-0.0639313 0.11526 -0.0113233 +-0.0664444 0.151761 -0.0404644 +0.0142088 0.034798 0.0302902 +-0.0244166 0.0931902 0.0479432 +-0.0714792 0.167875 -0.0225174 +-0.0161203 0.0383572 0.000963241 +0.0282773 0.0862159 0.0445154 +0.0375 0.107296 0.0262149 +-0.0891989 0.11586 0.044703 +0.00339178 0.0433892 -0.0247833 +-0.0790801 0.0704064 0.00826811 +-0.0237813 0.0756129 -0.0382516 +0.00190837 0.124868 -0.00847893 +0.0243137 0.119818 0.0300741 +-0.0758951 0.123764 -0.00763971 +0.052991 0.0735097 0.0116286 +-0.0175974 0.0393048 -0.0277532 +-0.013784 0.0799171 -0.0389774 +0.00451197 0.0619711 0.0562284 +-0.0331612 0.0342582 0.0246899 +0.0314823 0.114431 0.0284596 +-0.0530088 0.145722 -0.00115007 +-0.0684496 0.0369814 0.0129839 +-0.0203772 0.158233 -0.00725915 +0.0148967 0.0366228 -0.0205744 +-0.0250413 0.0925197 -0.0322644 +-0.0424949 0.168218 0.00285877 +-0.0414982 0.0719267 0.042103 +-0.0939163 0.120093 0.0142993 +-0.0164902 0.112704 0.0398029 +-0.000484486 0.0703477 0.056848 +0.060415 0.0678562 0.0151973 +-0.0550635 0.116914 0.036091 +0.0200483 0.0385661 -0.0116898 +-0.0250588 0.123734 -0.00291588 +0.0403936 0.0629925 0.0301493 +0.0379656 0.0874795 0.0356781 +-0.0548923 0.105518 -0.0186699 +-0.0311396 0.166714 -0.0162904 +0.0470624 0.0740285 0.0123586 +-0.0678676 0.100922 -0.0154166 +-0.0631629 0.124137 0.0456282 +-0.0731746 0.154066 -0.0319096 +-0.0307727 0.033545 -0.0254394 +-0.0890856 0.122978 0.0464209 +-0.0236634 0.123398 -0.00459221 +0.046259 0.0820395 0.0071847 +-0.000605347 0.130433 0.0223861 +0.0192013 0.0591556 0.0487522 +-0.0498987 0.124057 -0.00910218 +-0.0170638 0.168326 -0.0143421 +0.0265398 0.104204 -0.0163559 +-0.0938575 0.120136 0.0242923 +-0.0179474 0.100123 -0.0240926 +-0.058599 0.155538 0.0184341 +-0.0170777 0.0418831 0.0522589 +-0.0545484 0.0457621 -0.00683862 +0.00723985 0.076824 -0.0341303 +-0.0907031 0.148891 0.0231421 +-0.0174825 0.107148 0.0420092 +-0.0911131 0.129682 0.0362351 +-0.0499113 0.147776 0.0118822 +-0.0657818 0.152842 -0.0413063 +0.0528515 0.0592232 -0.00323634 +-0.0693828 0.0805427 0.0408087 +-0.060108 0.0423138 0.0158374 +0.0281616 0.0699505 0.0424355 +0.00679863 0.0347495 0.0432322 +-0.0458268 0.125298 0.0247658 +-0.0567225 0.043789 0.0226896 +-4.09913e-05 0.10064 0.0465907 +-0.0729374 0.129655 -0.00843737 +0.0415013 0.104244 0.010161 +0.0342459 0.0889575 0.0408509 +-0.0808289 0.138985 -0.00281163 +-0.0425095 0.171123 -0.00130836 +-0.0870569 0.137884 0.0425258 +0.00149552 0.116934 0.0397718 +-0.0158011 0.0388262 -0.0105326 +0.00549603 0.0413259 0.0457036 +-0.0325959 0.124521 0.0211556 +-0.058912 0.109738 -0.0167726 +-0.0772259 0.151416 -0.00590086 +-0.0077735 0.0770379 -0.0376668 +0.0385932 0.0436441 0.0291648 +-0.0778914 0.162484 -0.0299302 +-0.0641074 0.0639595 0.0276548 +0.0187103 0.0342934 0.0023932 +-0.0858293 0.151702 0.00893089 +0.0336067 0.0504819 0.0325279 +-0.0810076 0.10869 -0.00259876 +-0.0557401 0.0547516 -0.00240302 +-0.0335154 0.108413 0.0382413 +-0.00564795 0.049654 -0.0307584 +-0.0765497 0.0728479 -0.00560245 +-0.00214115 0.127727 0.0291435 +-0.0701217 0.159568 -0.0479252 +-0.0794787 0.104524 -0.00660043 +0.00849938 0.0366585 0.0454484 +-0.0305059 0.0889327 0.0438397 +-0.0638439 0.101082 -0.0177706 +-0.0045041 0.0801506 0.0577231 +0.013232 0.0835986 -0.0303791 +-0.0809796 0.0788834 0.0298322 +-0.0148841 0.0959887 -0.031739 +-0.0699437 0.0669048 0.0273786 +-0.0514117 0.134659 0.0288827 +0.0105257 0.123354 0.0336723 +0.0263222 0.107421 0.038207 +-0.0125183 0.095238 0.0536312 +-0.0634853 0.0904216 0.0451002 +0.0377424 0.110293 0.0150624 +-0.0700913 0.0419644 0.00613646 +-0.0565326 0.0401709 -0.00945456 +-0.0553504 0.0460785 0.0138247 +-0.0114916 0.0759418 0.0571389 +-0.0796666 0.0886389 0.0352895 +0.0338998 0.0888046 -0.0179815 +-0.0207237 0.0567772 0.0467736 +0.0293267 0.120376 0.00767428 +-0.0865466 0.137714 0.00320362 +-0.0815177 0.106 -0.00361682 +0.0360857 0.0784054 -0.0147648 +-0.0706254 0.129856 0.0506426 +0.0309103 0.088937 0.0430941 +0.0186908 0.127724 0.0151265 +0.0607002 0.0665033 0.01416 +-0.0347226 0.0711465 -0.0183854 +-0.0475247 0.0335798 -0.00289187 +0.00330662 0.0597508 -0.0323981 +0.0162777 0.117973 -0.0131407 +0.0260142 0.118212 -0.00538239 +-0.0524983 0.0477783 0.0397646 +0.00462528 0.109546 0.0419595 +-0.0848442 0.146005 0.0372765 +-0.0568876 0.0998079 -0.0197942 +-0.0478768 0.15504 0.00962757 +0.0236771 0.0956901 -0.0213272 +-0.0909699 0.113313 0.018324 +-0.0314956 0.0560344 0.0371147 +0.0419523 0.101425 0.00119033 +-0.0205212 0.118181 0.0347958 +0.00296971 0.0341513 0.00863676 +-0.0034922 0.0473569 0.0490622 +0.0168587 0.0347265 0.0236529 +-0.00422658 0.0396088 0.0480089 +0.0402871 0.104196 0.0211608 +-0.0211382 0.0985478 0.044502 +-0.0469324 0.0383628 -0.0152843 +0.0223386 0.0578809 -0.0262309 +-0.094679 0.122825 0.0202733 +-0.00649716 0.0619561 0.0561245 +-0.0530923 0.143138 0.0243879 +0.0586666 0.0690768 0.00715872 +-0.0632884 0.0444363 0.0372932 +-0.0584087 0.0421172 0.0451764 +0.0462769 0.0649494 -0.00109094 +-0.0892011 0.0983026 0.0104143 +-0.050311 0.033406 0.00395206 +-0.0171117 0.123425 0.0297114 +-0.0067867 0.0784694 -0.0378945 +-0.0413793 0.0448727 -0.0203291 +0.00613123 0.105885 -0.0208912 +-0.0209654 0.035527 0.0525237 +0.0515169 0.0664883 0.0274059 +-0.0186581 0.0985081 0.0446525 +0.00326552 0.127077 0.029619 +0.00950248 0.111292 0.0396928 +0.0420852 0.077848 0.0291974 +-0.0404715 0.0343242 0.0319689 +-0.0775002 0.156948 -0.0139048 +-0.0828255 0.0924347 -0.00656966 +-0.0256554 0.124701 0.019279 +0.00649798 0.107134 0.0414437 +-0.0067083 0.0613544 -0.0352012 +-0.0341277 0.165212 -0.0151261 +-0.0305288 0.0353431 -0.0195833 +0.00449494 0.105757 0.0421851 +-0.0313565 0.161046 -0.00157639 +0.00317447 0.0908801 -0.0331491 +-0.066706 0.0375681 0.0351923 +0.0146203 0.128223 0.0236197 +-0.0931816 0.121543 0.0372829 +-0.0390449 0.0344196 0.0339502 +0.0204938 0.0865196 0.0494812 +-0.0909512 0.147073 0.025026 +-0.0398753 0.149194 -0.00215183 +0.0371767 0.095465 0.0345819 +-0.0534525 0.116245 -0.0149003 +-0.00912597 0.168128 -0.0227626 +0.0103593 0.0509634 -0.0286117 +0.00839042 0.0434178 -0.024623 +0.012125 0.10869 -0.0190017 +-0.0749621 0.134014 -0.00721966 +-0.0789216 0.172194 -0.0440002 +-0.0258331 0.0561399 -0.0284181 +-0.0817922 0.143171 0.000171875 +0.0451306 0.0647669 -0.000900002 +-0.0514821 0.113924 -0.0164877 +0.00371763 0.0346901 0.0426483 +-0.0475701 0.0461114 -0.0100167 +0.0406981 0.104234 0.0181671 +-0.0453678 0.060156 0.0387657 +-0.0314314 0.0693522 -0.0254564 +-0.0154911 0.0702181 0.054969 +-0.0300755 0.123175 0.0220771 +-0.0216491 0.0479362 -0.0281524 +-0.0507589 0.144713 0.0133585 +-0.0670917 0.155954 0.0255845 +-0.0852375 0.1104 0.00532111 +-0.0573508 0.121267 0.0398601 +-0.0261065 0.0944666 -0.0262366 +-0.0897054 0.124293 0.0455762 +-0.000486036 0.047441 0.049521 +-0.0438029 0.167379 0.00334272 +0.0111963 0.0864748 -0.0310924 +0.0464517 0.0750534 0.00718936 +-0.036486 0.0619956 0.0409573 +-0.0314993 0.116609 0.0322344 +-0.0544997 0.117303 -0.0139925 +-0.0420673 0.0336103 0.00544111 +-0.0856626 0.0912736 -0.00055353 +-0.050495 0.0974075 0.0440057 +0.0309311 0.0355864 0.0055308 +0.0202177 0.109327 -0.0158556 +0.0249428 0.0968855 0.0450153 +-0.00751 0.070341 0.0568254 +-0.0604012 0.0335984 -0.00916237 +0.0245092 0.0406191 -0.00557292 +-0.0451779 0.152141 0.00822921 +-0.0607654 0.0668786 0.0346016 +-0.0593188 0.114075 -0.0145597 +-0.091214 0.143385 0.025163 +-0.0425978 0.0505652 -0.0109174 +-0.0423266 0.169779 -0.00887745 +-0.0224756 0.0348012 0.0476768 +0.0409735 0.0405135 0.0215425 +-0.0801239 0.110623 0.0438367 +-0.0138651 0.0987904 -0.0246748 +-0.043573 0.126043 -0.00725208 +-0.0208606 0.101617 -0.0238418 +-0.0425016 0.0605517 0.0404213 +-0.00249479 0.0590139 0.0541301 +0.0409984 0.102803 0.000176721 +0.0342014 0.0808856 0.0407312 +-0.0247835 0.166781 -0.00970724 +0.00931572 0.0725689 0.0556419 +-0.0642124 0.145356 0.038849 +-0.0716272 0.0748459 -0.0119866 +-0.012533 0.0458468 0.048979 +-0.0741728 0.15268 -0.0288898 +-0.0211868 0.174176 -0.0217698 +-0.054499 0.0761691 0.0426143 +-0.0851934 0.11068 0.0373035 +-0.00964195 0.120097 -0.0132573 +0.0149745 0.129329 0.00806984 +-0.0535552 0.0335918 0.0121227 +0.0387224 0.1084 0.018173 +-0.0858928 0.108988 0.00834067 +0.00426552 0.0697141 -0.0335935 +0.0304509 0.117992 0.000957505 +-0.0134723 0.0603845 0.0536243 +-0.0809665 0.133877 -0.00363658 +-0.0877284 0.0950339 0.0247524 +-0.0708769 0.155921 0.00969704 +-0.0388302 0.173903 -0.00342781 +0.0123125 0.0680946 -0.0309662 +-0.0540561 0.150161 -0.00256907 +-0.0662654 0.129803 0.0463681 +-0.0481341 0.0344887 0.0319692 +-0.0482356 0.137094 0.0133979 +-0.0638562 0.148524 -0.023921 +-0.0873971 0.140576 0.0399568 +-0.0920359 0.126943 0.0332532 +0.00766079 0.0616753 0.0549139 +-0.0820513 0.0882817 -0.00662822 +-0.0583711 0.0614813 0.0257087 +-0.046355 0.0345569 0.0357917 +0.0473411 0.0488863 -0.00367878 +0.0292435 0.0637114 -0.0199317 +-0.0250309 0.172718 -0.0117738 +0.0423872 0.0459654 -0.00393846 +-0.0484976 0.0805051 0.0439961 +-0.0497297 0.0737805 -0.0165746 +0.0463736 0.0682111 0.00160519 +-0.0334339 0.166782 -0.00461644 +-0.0772978 0.0685904 0.0138065 +-0.0645607 0.153661 0.00110457 +0.00849221 0.108496 0.0406568 +-0.0554287 0.1598 0.000101402 +-0.0412715 0.127285 -0.00254236 +-0.080968 0.0967089 0.0335048 +0.0225187 0.123964 0.0251042 +-0.0559057 0.0379831 0.047068 +-0.0594802 0.0716799 0.0395512 +-0.0618223 0.170491 -0.0617288 +-0.0564955 0.104323 0.0414899 +-0.0810442 0.152541 0.00426923 +-0.0435828 0.0345782 0.0398547 +0.0126008 0.128196 0.0257553 +-0.0526679 0.0579784 0.0235498 +0.0380115 0.110174 0.0108643 +0.0150842 0.114728 -0.0156323 +0.0148813 0.0348012 0.0286151 +-0.0479877 0.121051 0.028756 +-0.0883678 0.128089 0.00227451 +-0.0720422 0.15541 -0.0389078 +0.0112474 0.0724264 -0.0317987 +0.0267956 0.111385 0.0354031 +-0.0649586 0.160381 -0.0157887 +0.00550295 0.0702783 0.0558582 +-0.0238067 0.0899629 -0.0356649 +-0.090988 0.113988 0.0207121 +0.0194892 0.0934174 0.0476186 +-0.0655537 0.161293 -0.0160037 +-0.0625236 0.0609176 -2.19725e-05 +-0.0491589 0.162483 -0.00556124 +-0.042649 0.0378778 -0.0263104 +0.00374161 0.0952291 -0.0308324 +0.025598 0.0610493 -0.0236458 +0.00942462 0.0375116 -0.02327 +-0.00136682 0.125668 -0.00729488 +0.008486 0.0532759 0.0521458 +-0.00749086 0.0675042 0.0558082 +-0.092697 0.117351 0.0113077 +0.0251837 0.112665 -0.0114294 +-0.04997 0.140123 0.00440621 +-0.0534339 0.040168 0.0467985 +-0.0936376 0.124116 0.0132691 +-0.0222759 0.0382517 0.00526325 +0.0600635 0.0664445 0.00913698 +-0.0224559 0.092554 -0.0342812 +0.0582887 0.0538074 0.00917936 +0.046059 0.0834308 0.0121726 +-0.0619009 0.0678892 0.0352357 +-0.0566658 0.0473318 0.0108617 +-0.0457003 0.0694971 -0.0160523 +-0.0618544 0.174099 -0.0565963 +-0.0498016 0.128288 0.0314623 +-0.0225807 0.159177 -0.00302445 +-0.0623624 0.16436 -0.0595797 +0.0383958 0.0505315 -0.00659356 +-0.0332433 0.126938 0.0135159 +-0.0454819 0.0875316 0.0441596 +-0.0835389 0.110217 0.0023021 +0.0386074 0.0617702 0.0328492 +-0.0407686 0.0811968 -0.0203079 +-0.033827 0.0901076 -0.0243377 +0.0506567 0.0703381 0.00346635 +0.0228724 0.125195 0.0195238 +-0.0187529 0.0384803 -0.00337678 +0.0222732 0.12205 0.0293193 +-0.0294959 0.0645466 0.0380401 +-0.0689565 0.166538 -0.0215879 +-0.00506288 0.0387211 0.00101779 +-0.0647592 0.169439 -0.0415812 +0.00438439 0.037904 -0.00378653 +-0.0241621 0.125878 0.0168174 +0.0359934 0.0685324 -0.0147875 +-0.0182052 0.0381955 0.0170088 +-0.0753414 0.15612 0.015399 +0.0453867 0.0413474 0.00824507 +-0.00449218 0.123763 0.0343217 +0.0460213 0.0862262 0.00917159 +0.0346496 0.0972102 -0.0129196 +0.0196844 0.126554 0.00410284 +0.0202619 0.12651 0.00572713 +-0.00449958 0.0504123 0.0519892 +-0.0899789 0.133805 0.0362152 +0.00988218 0.0886651 0.0547874 +-0.00395268 0.131078 0.00966125 +0.00346471 0.0977538 0.051238 +-0.0236164 0.0422618 -0.0289626 +-0.0253603 0.124214 -0.00135534 +-0.00744498 0.124256 -0.00972454 +-0.0577765 0.0494102 0.000630355 +-0.0321623 0.172645 -0.015639 +-0.0661377 0.0669804 0.0316196 +-0.0240269 0.158277 -0.0107707 +-0.0762359 0.113613 0.0494664 +-0.0849952 0.141833 0.00418636 +-0.0569251 0.0366412 0.0466659 +-0.0283222 0.0749245 0.042497 +0.0216856 0.0878179 -0.0250022 +-0.0866951 0.0951098 0.0265657 +0.0296006 0.0982071 0.041203 +-0.0630317 0.060472 0.0203248 +-0.0304883 0.0574252 0.0370157 +-0.0638466 0.159519 -0.0168205 +-0.0544959 0.0848124 0.0452537 +0.0243406 0.113099 -0.011895 +-0.0900837 0.117534 0.0447346 +-0.00144097 0.0378708 0.018909 +-0.0699808 0.136988 -0.00795948 +-0.0823654 0.0815422 -0.00354068 +-0.00681555 0.0385421 0.0244437 +0.00431168 0.0611153 -0.0319161 +-0.0801269 0.10608 0.0309775 +0.0162329 0.0807169 -0.0293214 +-0.0158843 0.0377689 0.0515755 +-0.0829013 0.122118 -0.00412754 +0.0294673 0.106706 -0.01303 +-0.0534948 0.11254 0.0358256 +0.00150254 0.0605844 0.0560506 +-0.0234977 0.101642 0.0439992 +-0.0797566 0.074638 -0.000471413 +-0.00773143 0.0670178 -0.0355816 +-0.0705055 0.0342009 0.00809348 +0.0167377 0.0461846 0.0432665 +0.00646432 0.110948 0.0411124 +-0.0194753 0.160592 -0.0133076 +-0.00449865 0.115591 0.0404715 +0.0280707 0.046664 -0.00969251 +0.048051 0.0496945 0.0288529 +-0.0763852 0.114637 0.0504008 +-0.0886058 0.150235 0.0251076 +-0.0211531 0.0382979 0.0271326 +0.0408293 0.101363 -0.00180736 +-0.0203988 0.177179 -0.0155929 +-0.0718351 0.180364 -0.0513557 +0.00724322 0.0361893 0.0456372 +0.0124253 0.0374345 -0.0223624 +0.0378254 0.108706 0.0222481 +-0.0871672 0.127065 0.0471934 +-0.0686541 0.12565 0.0517171 +-0.0889642 0.136517 0.0281982 +-0.0304896 0.0559845 0.0366491 +-0.0839703 0.0843113 0.0284366 +-0.00895133 0.0384401 0.00779513 +-0.0942308 0.126903 0.0192529 +-0.0569855 0.0507747 0.00670607 +-0.063488 0.037094 -0.00797583 +0.0252887 0.122228 0.0247087 +-0.0433541 0.112279 -0.0167951 +-0.0255625 0.0532992 -0.0274025 +-0.00849647 0.0532799 0.0524507 +-0.0074932 0.0842694 0.0572981 +-0.0760467 0.0689134 0.00354542 +-0.0518697 0.144272 -0.000239851 +0.0302023 0.0808798 0.0437374 +-0.0276563 0.12199 -0.007026 +-0.0484978 0.100158 0.0428666 +-0.0654874 0.143443 -0.0120814 +-0.0308113 0.153953 -0.00248259 +0.0597604 0.0567164 0.0141707 +-0.0480122 0.0341726 0.0287503 +-0.0640462 0.0622661 0.0238361 +-0.0206969 0.0568414 -0.0326165 +0.0309722 0.116471 -0.00147933 +-0.0691516 0.0788347 0.0401452 +-0.058803 0.0883 -0.0207912 +0.00672447 0.0346721 0.0378883 +-0.0746893 0.154119 0.0302893 +-0.0529585 0.135327 0.0304274 +0.00863241 0.128438 -0.00238911 +-0.0478493 0.099947 -0.0217978 +-0.075086 0.0674684 0.00355063 +0.0326927 0.116394 0.0217802 +-0.0842229 0.144678 0.0395137 +-0.0166094 0.128602 0.0136868 +0.00411662 0.125005 -0.00865855 +-0.0754818 0.148362 0.0406222 +-0.065886 0.15405 -0.00011759 +-0.0425085 0.119367 0.0297171 +-0.0902093 0.131023 0.0402096 +0.0383601 0.0921445 -0.0115002 +-0.038495 0.0804525 0.0431634 +-0.0353039 0.0794833 -0.0226806 +0.0441637 0.0973591 0.0111613 +-0.0590115 0.153958 0.00054242 +0.0453728 0.0735622 0.00221503 +0.0569193 0.0710092 0.00714855 +-0.0114956 0.105842 0.0433599 +-0.0698279 0.181394 -0.0549266 +0.0375934 0.102015 0.0299178 +0.00590625 0.0356875 -0.00331654 +-0.0684622 0.16137 -0.0113077 +-0.0742229 0.109724 0.0423296 +-0.0202504 0.182971 -0.0220384 +-0.091455 0.148836 0.0171378 +0.0152238 0.0793568 -0.0300519 +-0.000512 0.107246 0.0433248 +-0.0428418 0.0971034 -0.0220359 +-0.0514947 0.0819216 0.0442721 +-0.00625132 0.0383797 0.0174726 +0.0252504 0.0789879 -0.0247523 +-0.0833347 0.0898073 0.030438 +-0.0509182 0.146274 0.0133981 +0.0202304 0.105998 0.0417108 +0.0571307 0.0508797 0.0151878 +-0.0330104 0.126012 0.0180287 +-0.0217816 0.0797281 0.0555871 +-0.00743438 0.120242 -0.0134406 +-0.0148225 0.086924 -0.0385597 +-0.0375897 0.174214 -0.00298303 +-0.00244861 0.0605864 0.0553645 +-0.00874133 0.128614 -0.000328304 +-0.00579055 0.0798611 -0.0376463 +-0.0096155 0.119132 -0.0142361 +0.000497149 0.0534577 0.0541163 +-0.0928025 0.131035 0.0222365 +0.0372258 0.108268 -0.000834485 +-0.0914674 0.129551 0.00825277 +-0.00149557 0.0675596 0.0566557 +0.0154848 0.0548588 0.0485877 +0.0396568 0.0815034 -0.0117853 +0.0174985 0.119533 0.0343583 +-0.0108678 0.0975625 -0.0293851 +0.0264007 0.116693 0.0313169 +0.005469 0.0964333 0.0520715 +-0.0455856 0.128182 -0.00140207 +-0.0175003 0.0499225 0.0470061 +-0.075934 0.0788992 0.0351468 +-0.0067913 0.0812637 -0.0377236 +-0.0769778 0.155918 0.0162848 +-0.0797877 0.0746142 -0.00147983 +-0.0599651 0.0469723 0.0336736 +0.0382386 0.084194 -0.0147697 +-0.0816947 0.113482 0.0465399 +0.00634478 0.0524665 -0.0299091 +-0.0112874 0.182441 -0.0284978 +-0.026226 0.178551 -0.0179991 +-0.0739945 0.1802 -0.0521965 +0.0105211 0.104445 0.0448284 +0.0580719 0.0523893 0.015182 +-0.0525108 0.0819776 0.0447141 +0.0148643 0.0961115 -0.0237665 +-0.00147854 0.0474532 0.049375 +0.00669444 0.0340637 0.00205518 +-0.0753884 0.151441 -0.0109145 +0.0413586 0.0394374 0.00625535 +-0.0196125 0.0381064 0.0149924 +-0.00986994 0.104508 -0.0232523 +-0.0720157 0.145244 -0.0182167 +0.0416371 0.0669849 0.0284796 +0.0284741 0.0381475 -0.00163189 +0.0474976 0.06778 0.0262203 +0.0259166 0.0434925 0.0371741 +0.0464333 0.0455453 -0.00066213 +-0.00640927 0.120163 -0.0133583 +-0.0236376 0.0387148 -0.0157231 +-0.092269 0.124069 0.00827163 +0.0144954 0.119572 0.0352389 +-0.0702988 0.15533 -0.0489684 +-0.0882036 0.143298 0.0111345 +-0.074863 0.0795889 -0.0115995 +-0.0174424 0.10313 -0.0232301 +-0.0686182 0.0628687 0.0026871 +-0.0620712 0.16624 -0.0525885 +0.058207 0.0538058 0.0191798 +-0.0333511 0.0463754 -0.0256604 +-0.0855025 0.0832965 0.0214753 +-0.0920057 0.11611 0.0343124 +-0.0227771 0.124071 -0.00329832 +-0.0610006 0.129721 0.0398956 +-0.0404973 0.0492165 0.0395965 +-0.0481836 0.0335793 0.00422402 +-0.0654948 0.160255 -0.0145439 +0.00736856 0.0479637 -0.0273222 +-0.0123571 0.12972 0.0137799 +0.0579783 0.0551346 0.00616127 +-0.0164763 0.064491 0.0530345 +-0.0608155 0.0896295 -0.0193008 +-0.0205289 0.0958269 0.048234 +-0.086716 0.132512 0.0465811 +-0.052836 0.095613 -0.0220115 +0.0406946 0.0647331 -0.00578164 +0.0121697 0.0950562 -0.0266386 +-0.00950093 0.0925586 0.0561384 +-0.0157375 0.0671877 -0.037968 +-0.0269293 0.0376983 0.0192799 +0.033595 0.0660055 0.039722 +-0.0481741 0.135565 0.0182752 +-0.0224128 0.163867 -0.00803238 +0.00810708 0.101446 -0.0211916 +-0.0458977 0.166944 -0.00688513 +-0.0238738 0.105835 -0.0226784 +0.0272653 0.121002 0.0240179 +-0.0701585 0.0623473 0.0172092 +0.0578867 0.0607943 0.0238444 +0.0565638 0.0695327 0.00435815 +0.012216 0.0753282 0.0545969 +-0.0583609 0.0339112 0.0215144 +-0.0664905 0.0861274 0.0441111 +-0.0514869 0.0987554 0.0433116 +0.0210708 0.0349944 0.0242708 +-0.0102986 0.126308 0.029096 +-0.0638201 0.089594 -0.0189434 +-0.0782747 0.174383 -0.0433933 +-0.0311143 0.16374 -0.0152454 +-0.0915885 0.128321 0.0362439 +-0.0379874 0.0336299 0.0062497 +-0.0854294 0.151325 0.0282936 +0.0124994 0.0909598 0.0531045 +-0.0434452 0.120253 -0.0131867 +0.0229768 0.0754886 0.0490742 +-0.0334786 0.100129 0.0429194 +-0.0741118 0.0819105 0.0384161 +0.0373216 0.0901862 0.036514 +-0.0565657 0.11693 0.0374284 +0.00334719 0.0481602 -0.0292882 +-0.0324526 0.0336078 -0.0239554 +0.0083446 0.116042 -0.0170347 +-0.00977658 0.0387467 -0.00366788 +-0.0206679 0.0509474 -0.0298149 +-0.0242736 0.181474 -0.0180054 +0.0160525 0.0350115 0.0395034 +-0.0543014 0.146215 0.0264084 +-0.00102573 0.0346607 0.0434939 +-0.0611888 0.155469 0.00589931 +-0.0406241 0.0520111 -0.0110025 +-0.0705109 0.148356 0.0407257 +0.0495286 0.0610841 0.0304744 +-0.019145 0.0893155 0.0554734 +0.00268229 0.12726 -0.0050686 +-0.0743228 0.155495 -0.0229079 +0.021268 0.0762952 -0.0266753 +-0.0239356 0.0374925 -0.0183912 +0.0262803 0.0660857 -0.0226574 +-0.0164998 0.0856439 0.0570811 +-0.0857415 0.120359 0.048887 +-0.0344903 0.0505305 0.0383369 +0.00230798 0.0346028 0.0406387 +-0.0929029 0.129672 0.0252445 +-0.0654938 0.0604629 0.00727621 +0.044722 0.0833037 0.0012072 +-0.0230106 0.0580182 0.0433839 +-0.0105663 0.0350401 0.0482738 +0.0582293 0.0690671 0.00613614 +-0.0600127 0.131125 -0.00733582 +-0.0321751 0.162395 -0.00280539 +-0.0555013 0.0623754 0.0293782 +-0.0252415 0.109687 -0.0201254 +-0.0560506 0.150155 -0.00188433 +-0.0600649 0.129705 0.039485 +0.0338293 0.0767952 -0.0167877 +0.01215 0.0919974 -0.0294248 +-0.0346452 0.0340944 0.0173387 +-0.050492 0.149246 0.012837 +-0.0550682 0.150156 -0.00218973 +-0.00881167 0.085499 -0.0379404 +-0.0780101 0.11134 -0.00369811 +-0.0795926 0.100727 0.0334268 +-0.0423449 0.122373 -0.0114097 +0.0248097 0.124191 0.0159771 +-0.0174692 0.0529782 0.0491698 +-0.0889728 0.101008 0.0133925 +0.00851959 0.0730626 0.056014 +-0.026729 0.159626 -0.000161004 +0.0222613 0.0720727 -0.026869 +0.0396492 0.0970274 -0.00677557 +-0.0301141 0.166809 -0.00684471 +-0.00834781 0.129635 0.0224773 +-0.0198097 0.0813191 -0.0390949 +-0.0489315 0.137078 0.0173942 +-0.0161123 0.0985355 -0.0244159 +0.0331161 0.0795687 -0.0187107 +-0.0365028 0.0761422 0.0420368 +-0.0315196 0.0834471 -0.0305496 +-0.0366299 0.0534085 -0.0105028 +-0.0844928 0.0979861 -0.00258986 +-0.049695 0.0693575 -0.0143663 +-0.0795053 0.148405 0.0389114 +-0.0143105 0.0338147 -0.022462 +-0.036834 0.0382539 -0.0105119 +-0.0528967 0.0476266 0.0236645 +-0.0431625 0.0436516 -0.0173214 +0.0442909 0.0959534 0.0041727 +-0.0499053 0.141681 0.0133989 +-0.084567 0.0897523 0.028848 +-0.035736 0.0740102 -0.0187661 +-0.0624191 0.163107 -0.0445959 +0.0553692 0.0711293 0.0213817 +-0.0384984 0.0634699 0.041507 +-0.0420929 0.156178 -0.00917116 +-0.0641565 0.166823 -0.0341745 +-0.0623968 0.162983 -0.056654 +0.0276466 0.0659543 0.0434322 +0.0454314 0.088986 0.0031764 +-0.0749519 0.164602 -0.018207 +-0.0345505 0.175605 -0.011982 +0.0363374 0.104678 0.0298648 +-0.00375231 0.128091 -0.0038931 +-0.0305006 0.100206 0.0434038 +-0.00849625 0.0547108 0.0528122 +-0.0485842 0.0517801 -0.00897412 +-0.00451507 0.0519264 0.0531932 +-0.0815948 0.0748474 0.0175368 +0.0572159 0.0648465 0.024658 +-0.0403921 0.162356 0.00287494 +-0.0749222 0.126715 -0.00818803 +-0.047238 0.0346371 0.0407654 +-0.0621416 0.141343 -0.00629843 +-0.0251564 0.113713 -0.0163747 +-0.00855727 0.119157 -0.0142712 +-0.074494 0.126019 0.0529923 +-0.0205102 0.0461853 0.0521703 +-0.084864 0.0789836 0.0191297 +-0.0187649 0.125661 -0.000995534 +-0.0218427 0.0567021 0.0450804 +-0.0622179 0.153696 -0.0295936 +-0.0364968 0.0576627 0.0395237 +-0.0368019 0.127806 0.00485952 +-0.0770975 0.0967852 0.0367 +-0.000433486 0.0366062 0.0184413 +0.0131024 0.123925 -0.00754958 +-0.0177683 0.0383192 0.0242073 +-0.0655356 0.0398001 0.0300899 +-0.0778591 0.161105 -0.0269202 +-0.0341012 0.162237 -0.0142117 +-0.017501 0.0842912 0.0575736 +-0.0280973 0.16079 -0.0140776 +-0.0421185 0.122004 0.0266511 +-0.0142563 0.178628 -0.0276625 +-0.0440063 0.0629698 0.0401358 +0.0128613 0.0347903 0.0336338 +-0.0248532 0.0348299 0.0453939 +-0.00152849 0.105863 0.0439958 +-0.0346038 0.123422 0.0248791 +-0.0346304 0.079471 -0.0235463 +-0.0639625 0.126764 -0.00871214 +0.0364026 0.0547846 -0.00674979 +-0.0064883 0.123768 0.0340789 +-0.0470974 0.168427 -0.00297818 +-0.0575443 0.0401418 -0.00909914 +0.0257874 0.0895854 -0.0228249 +0.0183006 0.0383341 -0.0177245 +-0.0524963 0.0848256 0.0453696 +0.0561175 0.0494119 0.0111925 +-0.0588172 0.123244 -0.00816875 +-0.00922198 0.0384881 0.0221926 +-0.0331235 0.126633 0.00621772 +-0.0119418 0.120727 -0.011899 +-0.0607049 0.145387 0.0368926 +-0.0306093 0.125854 0.0144859 +-0.0356146 0.127659 0.0111781 +-0.0776104 0.0802915 -0.00928059 +-0.0702074 0.0394853 -0.000301673 +0.0434891 0.0583702 0.0316051 +-0.0789513 0.128091 -0.00607242 +-0.042519 0.0534194 0.039352 +-0.00449744 0.0939058 0.0556112 +-0.0094927 0.0619497 0.0558121 +-0.0694824 0.0944579 0.0422945 +-0.0771177 0.0879695 -0.0126012 +0.014854 0.103191 -0.021265 +-0.043284 0.169832 -0.00794427 +-0.00983007 0.124748 -0.00821099 +0.048512 0.0692789 0.0025489 +-0.0620323 0.0343503 0.0308946 +-0.074493 0.145596 0.0437863 +-0.0375024 0.104216 0.0394845 +-0.047499 0.0451812 0.0421654 +-0.0836103 0.0769236 0.0176347 +-0.0636092 0.170093 -0.0469941 +-0.0483594 0.137097 0.0143972 +-0.087232 0.102325 0.0223672 +-0.035507 0.104243 0.0399833 +-0.0577119 0.0708497 -0.0156457 +-0.00436115 0.122059 -0.0113929 +0.0024069 0.037633 -0.0245625 +0.00251114 0.0911189 0.0554408 +-0.0357211 0.0710689 -0.0174927 +0.0183807 0.0432425 -0.0223469 +-0.0688327 0.09803 -0.0157395 +-0.0747491 0.155081 0.00248708 +0.0451476 0.0833704 0.0221542 +-0.0657925 0.14111 0.0417765 +-0.0365871 0.119162 -0.0120374 +0.0101976 0.131045 0.010577 +-0.0249388 0.183594 -0.0126758 +0.0330579 0.0598189 -0.0157593 +-0.0212823 0.0391811 0.0388836 +0.0144144 0.0403325 -0.0225056 +-0.0304932 0.104292 0.0413193 +0.0224755 0.0947811 0.0470955 +-0.0694247 0.0337382 0.00515427 +-0.00249301 0.118317 0.039019 +0.0288984 0.0924492 -0.0198656 +0.033052 0.0440867 0.029429 +-0.0616004 0.15843 -0.0275855 +-0.0438223 0.0615675 0.0400039 +-0.0452867 0.0410146 -0.0162976 +0.0314256 0.0991914 -0.015062 +-0.0524965 0.0833785 0.044899 +-0.0298946 0.0436977 0.0506861 +-0.076428 0.148619 -0.00986569 +-0.0761803 0.0914451 0.0387697 +-0.0730299 0.172199 -0.0345665 +-0.0274981 0.0960112 0.0443229 +0.0045023 0.13009 0.02428 +-0.0302254 0.162455 -0.00347789 +-0.0871035 0.11231 0.0319974 +0.00225053 0.0726262 -0.0348847 +-0.0748173 0.152727 -0.0208966 +-0.0354946 0.118017 0.0312708 +0.0436028 0.0973418 0.0171655 +-0.0754981 0.13448 0.0513067 +0.0513136 0.0574694 -0.00408483 +-0.0228193 0.0854366 -0.0379031 +-0.057217 0.0336859 0.0130711 +-0.0749012 0.110639 -0.0076926 +-0.00874782 0.125791 -0.00734235 +0.0343242 0.100732 -0.0126444 +-0.0155312 0.126827 -0.00025822 +0.0145856 0.0341976 0.00165401 +-0.0175043 0.114096 0.0387143 +0.0552517 0.0720728 0.0198735 +0.0406726 0.0731516 -0.00877611 +-0.0268119 0.082528 -0.0368734 +-0.0262156 0.0519422 -0.0264212 +-0.0464977 0.041126 -0.0122454 +-0.0711885 0.173044 -0.0381946 +0.0492058 0.0511603 0.0287949 +-0.00188013 0.105918 -0.0222309 +-0.046455 0.126722 0.0256927 +-0.0142526 0.181479 -0.0279552 +-0.0655009 0.0903733 0.0443899 +-0.0037337 0.131051 0.015481 +-0.0308026 0.0367564 0.0517774 +0.0277802 0.121908 0.0142262 +-0.0344815 0.0575696 0.0386716 +-0.0844149 0.0777754 0.0115138 +0.0294342 0.0383781 -0.00173395 +-0.0423644 0.120691 0.0280931 +-0.0350646 0.156323 -0.010574 +-0.0619093 0.0470515 0.00567882 +-0.00290933 0.0388493 0.0285794 +-0.059258 0.0467212 -0.00132733 +0.00450339 0.123789 0.033846 +-0.0229547 0.12614 0.0172488 +0.0410852 0.0394499 0.00526393 +0.0049695 0.0340349 0.00359293 +-0.0513689 0.0516822 0.0322144 +-0.0606335 0.122654 0.0421622 +-0.0645986 0.15064 0.0368964 +-0.0632078 0.143892 -0.00837073 +-0.0386435 0.0563025 -0.0111331 +-0.0658025 0.083802 -0.0186684 +-0.062835 0.128322 0.0425151 +-0.0715276 0.14003 0.0472238 +0.056383 0.0538774 0.0233551 +-0.0610939 0.0335153 0.00346695 +-0.00051118 0.0978394 0.0524335 +-0.0418663 0.0340021 -0.00580283 +-0.042485 0.0762268 0.0429934 +-0.0512844 0.138511 0.0223666 +0.0367682 0.0888721 0.037463 +0.00724928 0.0711363 -0.0334334 +-0.0505534 0.0543594 0.017626 +0.00614025 0.110185 -0.0202335 +-0.00850551 0.0561268 0.0532043 +-0.0295938 0.0789709 0.0427962 +-0.0287487 0.0349103 0.0496611 +-0.0584012 0.154047 0.0286827 +-0.0127037 0.064273 -0.0367671 +-0.0288624 0.0606727 -0.0254104 +-0.0376712 0.125956 0.0207679 +-0.0612726 0.0708854 0.0380779 +-0.0637251 0.155028 0.0282356 +0.0531328 0.0476715 0.00620176 +-0.00308571 0.124589 0.0331408 +-0.0186888 0.0352267 -0.0190015 +0.001497 0.119685 0.0377723 +-0.032734 0.120436 -0.00935257 +-0.054542 0.0631354 -0.00767633 +0.052054 0.0718585 0.0216053 +-0.00556188 0.116801 -0.0157696 +-0.0504949 0.138575 0.0203939 +-0.00542543 0.120041 -0.0132322 +0.0310541 0.0727142 0.0413756 +-0.0558801 0.045112 0.0236807 +-0.0167974 0.0382847 0.0190235 +0.0256741 0.0809122 0.047736 +-0.0199636 0.0668339 0.051351 +-0.0491191 0.159098 -0.00622225 +-0.0506725 0.0667938 0.036819 +-0.0492762 0.143079 0.00435473 +-0.0216794 0.0538141 -0.0303252 +0.0305352 0.10973 -0.0102674 +-0.0225945 0.157229 -0.0076361 +-0.0530851 0.151641 -0.00314317 +-0.0271151 0.122681 0.0231414 +-0.0134994 0.0884096 0.056966 +-0.0266886 0.0335519 -0.0246454 +-0.008499 0.12243 0.035017 +-0.0393069 0.033537 -0.0233717 +-0.033807 0.0461583 0.044586 +-0.0198183 0.158714 -0.00970491 +-0.0835554 0.0925405 0.0305699 +-0.0340008 0.0766042 -0.0254969 +0.00352334 0.12519 0.0325857 +-0.0424905 0.0424327 0.0427417 +0.0232877 0.123385 0.0253956 +0.0230237 0.100791 0.0439995 +0.0307365 0.117405 0.0253192 +-0.0772723 0.114862 0.0500033 +-0.0264336 0.0535943 0.0384453 +0.0177456 0.0350628 0.0325863 +-0.0121375 0.102128 -0.024127 +-0.000203909 0.130048 0.0239772 +0.00795806 0.127195 -0.00506697 +-0.0252695 0.156633 -0.00336931 +0.0179609 0.1201 -0.00942839 +-0.0769756 0.068555 0.0156381 +-0.0871021 0.111516 0.0397664 +-0.0544907 0.101557 0.0424048 +-0.0572843 0.0589766 -0.000464382 +-0.07902 0.0751794 0.0271309 +0.0102371 0.115602 -0.0165593 +-0.0105893 0.180273 -0.0272114 +-0.0528115 0.0913061 -0.0221889 +-0.064755 0.068231 0.0343382 +-0.0137258 0.125368 -0.00476898 +-0.0635922 0.178326 -0.0570781 +-0.0239683 0.126504 0.0139537 +-0.0600264 0.132579 -0.00719549 +0.044826 0.0791184 -0.000782084 +-0.00541885 0.0969111 -0.0306599 +-0.0301034 0.0537602 -0.0193727 +0.0409333 0.0900371 -0.0097907 +0.024446 0.115337 -0.010308 +-0.0283175 0.0963396 -0.0241496 +0.0299711 0.119398 0.020753 +-0.0265916 0.172718 -0.0105089 +-0.0586682 0.128313 0.0397417 +-0.0818638 0.147313 0.00119815 +-0.0254305 0.0357675 -0.0290845 +-0.038039 0.126372 -0.00365101 +-0.00149717 0.0815096 0.0574492 +-0.00738223 0.0931774 -0.0348179 +0.0558223 0.0493444 0.0161931 +0.0577347 0.0705061 0.0074689 +-0.0778727 0.096767 0.0360596 +0.0144985 0.11402 0.0378951 +0.00389123 0.0355229 -0.0148126 +0.0242948 0.124607 0.0114976 +0.0565412 0.0674698 0.002463 +-0.0308889 0.108768 -0.0191524 +0.011955 0.0349898 0.0332703 +-0.0129143 0.104805 -0.023047 +-0.0938592 0.11877 0.0212975 +0.0106595 0.0357626 0.0286983 +-0.0652684 0.163853 -0.0591668 +-0.0359879 0.0421738 0.0454409 +-0.0685089 0.100042 0.0409867 +0.03476 0.113033 0.0239837 +-0.0346506 0.126197 -0.000232823 +-0.0386758 0.0462873 -0.0214583 +0.0257808 0.10679 -0.0151172 +-0.0618601 0.153758 -0.0185818 +0.03067 0.0917687 -0.019137 +0.0275533 0.0672844 0.0433037 +-0.0414978 0.0748079 0.0427759 +-0.0218204 0.0840783 -0.0384285 +0.037815 0.0630498 -0.0108066 +-0.0602789 0.0617061 0.0251086 +-0.0768171 0.154199 -0.00689913 +0.00550054 0.0990386 0.0482677 +-0.0391759 0.16667 -0.0123913 +-0.0616525 0.116813 -0.0113459 +-0.0227683 0.0699063 -0.0373697 +-0.0825008 0.107588 0.0273509 +0.0253381 0.0418727 -0.00588506 +-0.014565 0.035318 -0.01827 +-0.00278761 0.0390101 -0.00997081 +-0.0895837 0.137934 0.0361877 +-0.0855599 0.112052 0.0307632 +-0.027858 0.0343176 -0.0296609 +-0.0325025 0.0675467 0.0400218 +0.0183334 0.0348857 0.00364336 +-0.0469365 0.0404762 -0.0121149 +-0.0777262 0.0825344 -0.0106004 +-0.00467074 0.0569349 -0.0330586 +-0.0194597 0.165415 -0.0107679 +-0.0210403 0.122456 -0.00761783 +-0.0388087 0.0446425 -0.0234233 +-0.0696543 0.0614896 0.0127042 +0.0440466 0.0931306 0.0221521 +-0.0647046 0.0352193 0.0243246 +-0.0166096 0.0435748 -0.0274243 +0.0441838 0.0712847 0.000450163 +-0.0285281 0.0522637 0.0377683 +-0.0599387 0.147394 -0.00221747 +-0.0440942 0.156163 -0.00853601 +0.0388076 0.0807597 0.0350812 +-0.0141543 0.161827 -0.01362 +-0.0210631 0.0385773 -0.00578617 +-0.0237266 0.161004 -0.00287357 +-0.0863431 0.0896619 0.0263909 +-0.0829431 0.0790271 0.0235207 +0.0268259 0.0605622 0.0439609 +-0.0224026 0.0384511 0.0303351 +-0.0635581 0.170962 -0.0485923 +-0.0456965 0.147701 -0.00292724 +-0.0532705 0.0373829 0.0469289 +0.0231843 0.0658868 0.0457612 +-0.0887459 0.132238 0.00325707 +0.00920248 0.0914355 -0.0308607 +-0.0298874 0.063588 -0.0244234 +0.00157852 0.12719 -0.00497022 +-0.0814436 0.153873 0.00890807 +-0.0624959 0.0607929 0.0219134 +-0.0680579 0.149988 0.0386907 +0.0166077 0.128469 0.0186355 +0.00550411 0.0731036 0.0564845 +-0.00249995 0.0661849 0.0567093 +-0.0735022 0.155469 -0.0279133 +-0.0851803 0.0899483 -0.00256663 +0.0394434 0.0585828 -0.00486619 +-0.0739433 0.134018 -0.00754124 +-0.038066 0.156257 -0.0102365 +0.00335185 0.118611 -0.0157819 +-0.00660848 0.0420213 -0.0257519 +-0.0639921 0.0605727 0.020032 +0.0252819 0.100786 -0.0187149 +-0.0820788 0.0765181 0.0218286 +-0.0167051 0.0584876 -0.0351851 +-0.023274 0.106158 -0.0224283 +-0.0878269 0.087472 0.021463 +-0.0786369 0.113551 0.047197 +0.0360644 0.0861926 0.0381664 +-0.082909 0.123594 -0.00426589 +-0.029497 0.177966 -0.015166 +-0.0170948 0.127006 0.022289 +0.0524062 0.0491022 0.00128138 +-0.0198015 0.10169 -0.0238258 +-0.0221328 0.166772 -0.0183109 +-0.00252234 0.038424 0.00547409 +-0.0255028 0.0606627 0.0401195 +-0.0385432 0.0337417 -0.0196892 +-0.0644389 0.0627719 0.0250864 +-0.0879688 0.113092 0.00628888 +0.000951329 0.10045 0.046938 +0.0386471 0.086118 0.0348681 +-0.0374734 0.0346441 0.0411075 +0.0233517 0.120203 -0.00555174 +0.0462175 0.0761811 0.0179689 +-0.0376403 0.0336717 0.00266115 +-0.0341867 0.172054 -0.0145892 +-0.0623617 0.0420762 0.0420515 +-0.0114712 0.0379322 -0.0163227 +-0.0177227 0.119786 -0.0108098 +-0.0801398 0.154387 0.00935749 +0.00187492 0.0398874 0.0463369 +-0.0730243 0.159629 -0.0349322 +0.0473276 0.0547587 -0.00564531 +-0.0376789 0.0636715 -0.0137557 +-0.0727421 0.180568 -0.051639 +-0.0616232 0.148175 -0.003118 +-0.0248231 0.0839948 -0.0375331 +-0.0652787 0.173897 -0.0604957 +-0.0740506 0.152673 -0.0298916 +-0.0571547 0.150227 -0.00146353 +-0.0903203 0.146073 0.0131505 +-0.0779569 0.132491 -0.00592536 +-0.0290048 0.0550494 -0.0223991 +-0.00849727 0.0898107 0.0570624 +-0.0324948 0.112838 -0.0174448 +-0.0523188 0.0518 0.026645 +0.0302802 0.0506319 0.0365295 +-0.0838507 0.103422 -0.00164978 +-0.0788492 0.100759 0.0340965 +-0.0874564 0.141909 0.0385732 +-0.0155155 0.115507 0.0382335 +-0.0777311 0.0887218 0.0375819 +-0.0730146 0.15545 -0.0319082 +-0.0523124 0.0360662 0.0464431 +-0.06188 0.164622 -0.0566003 +0.0367263 0.0794489 0.0373046 +-0.0734863 0.173577 -0.0500848 +0.00600107 0.0390612 0.028408 +-0.0278792 0.0339265 -0.0214795 +-0.000753868 0.0390895 -0.00403098 +-0.0578284 0.0450681 -0.00544742 +-0.0829344 0.129921 0.0513858 +-0.0111161 0.125335 -0.00680126 +-0.0679477 0.0860672 0.0434473 +-0.0705079 0.105505 0.0376955 +-0.0109443 0.0389825 -0.0115729 +-0.0399106 0.033865 0.000215963 +0.00351496 0.0924905 0.0549546 +-0.0424851 0.033913 -0.0262188 +-0.0792564 0.155246 0.0213567 +-0.0215304 0.127346 0.0119061 +-0.091259 0.117481 0.0430647 +-0.0404902 0.0790417 0.0431478 +-0.0945826 0.122834 0.0222802 +-0.0518346 0.0517811 0.0306554 +-0.0767129 0.161805 -0.0163426 +-0.0867595 0.107707 0.0143554 +-0.0693236 0.142228 -0.0102995 +-0.0204959 0.105781 0.0424626 +0.0438044 0.0987496 0.00916312 +-0.00281997 0.0854457 -0.0370162 +-0.00280088 0.0840687 -0.037315 +0.0293196 0.0632732 0.0423131 +0.00625559 0.0725849 -0.0341185 +0.0203077 0.0621778 -0.0269805 +0.0563556 0.0723446 0.0173318 +-0.0230123 0.107366 -0.0218426 +-0.00742046 0.035877 -0.0249268 +0.0374488 0.0402522 0.0247009 +0.0292061 0.055224 -0.0177993 +-0.0184858 0.127732 0.0173962 +-0.0921542 0.132321 0.0142287 +-0.0583136 0.145422 -0.00203607 +-0.0688478 0.0994593 -0.0152611 +-0.0615047 0.167821 -0.0555677 +-0.0915903 0.125424 0.00726612 +0.0199591 0.0564127 0.0480725 +0.0378679 0.0713179 0.0353865 +-0.000605671 0.129033 0.0267429 +0.0298673 0.0740916 0.0431977 +0.00443138 0.126024 0.0314422 +0.0239815 0.12134 -0.00278507 +-0.0246606 0.0521655 -0.0277657 +0.0146913 0.0820798 0.0529703 +0.0259518 0.075434 0.0462884 +-0.0332069 0.0609523 -0.0145937 +-0.0191994 0.0907344 -0.0364225 +0.0589179 0.0607855 0.00414854 +0.0361999 0.103252 -0.0093129 +-0.0498767 0.0529199 0.0166388 +-0.0681894 0.0774836 0.0397476 +-0.021626 0.038176 0.00908889 +-0.0723232 0.163826 -0.0419605 +0.0104934 0.109851 0.0397458 +-0.0177283 0.0627822 -0.0360863 +-0.0628376 0.161493 -0.0485893 +0.00323101 0.120377 -0.0136716 +0.0551973 0.0674594 0.0252672 +-0.0349319 0.127285 0.00554823 +0.0194228 0.125079 0.025397 +-0.00805064 0.130356 0.00959263 +-0.0314936 0.097435 0.044487 +-0.0557138 0.0342594 0.0288064 +0.0212843 0.0490624 0.0410711 +-0.0898642 0.114175 0.0316644 +-0.0868422 0.134936 0.00226938 +-0.0758819 0.156006 0.016671 +-0.00997005 0.175779 -0.0292074 +-0.0603522 0.0407823 0.0443369 +0.0416146 0.0598915 -0.00407392 +0.0165523 0.0922417 -0.0256623 +-0.0245975 0.0365494 -0.0290831 +-0.0381375 0.160902 0.00087141 +-0.0719085 0.064649 0.0201308 +0.0144227 0.0477589 -0.0252693 +0.0603421 0.0650847 0.0181826 +-0.0146479 0.0481463 -0.0303376 +0.00721829 0.131495 0.00948452 +0.0394741 0.102755 0.0261825 +-0.0127182 0.0685587 -0.0376659 +0.0338414 0.0392101 0.0249005 +-0.0639127 0.160548 -0.0182872 +-0.0885745 0.0901142 0.00646846 +-0.0497297 0.0416675 0.0451167 +-0.0695102 0.148387 0.0405048 +0.0369413 0.0618853 0.0357448 +-0.0614969 0.0987359 0.0427353 +0.0264406 0.0434552 0.0361928 +0.0457541 0.0497206 0.0308161 +-0.0184963 0.0486167 0.0482304 +-0.086692 0.140502 0.00718566 +-0.0116045 0.0420472 -0.0262702 +-0.0708693 0.149702 0.0392474 +-0.061676 0.0343224 0.032737 +-0.00749303 0.115552 0.0402888 +0.0603302 0.0678632 0.0121432 +-0.070517 0.146976 0.0420031 +0.0360463 0.0953891 -0.0118379 +0.0368862 0.0601656 -0.0107732 +0.0239184 0.116674 0.0330029 +-0.0804601 0.148683 0.000173633 +-0.0604926 0.0344653 0.0380756 +-0.0152525 0.177145 -0.0265204 +-0.0773226 0.108517 -0.00660544 +-0.0176381 0.0465514 -0.0286775 +0.0313677 0.11674 -0.000181085 +-0.0465999 0.111104 -0.0175509 +-0.0408947 0.172668 -0.00780492 +0.0241275 0.120631 -0.00401437 +-0.055903 0.111216 -0.0172629 +-0.0781607 0.0935055 -0.0115755 +0.0158369 0.105055 -0.0192576 +-0.0130717 0.0973914 -0.0292103 +0.00114663 0.103071 -0.022297 +-0.0545436 0.0443717 -0.00770843 +0.0381644 0.0887078 -0.0138852 +-0.0638458 0.0366675 0.0422565 +-0.0245954 0.122675 -0.00581505 +-0.0199502 0.0553853 0.0474489 +-0.0454976 0.13168 0.014882 +-0.0808086 0.113339 -0.00208766 +-0.0658194 0.154782 -0.0493821 +-0.0138747 0.104484 -0.023001 +-0.0293428 0.112771 -0.0173776 +0.0139014 0.0962996 -0.0239693 +-0.0834257 0.145967 0.00318768 +-0.0299391 0.175699 -0.00474628 +-0.00851553 0.0759427 0.057359 +-0.0679104 0.122376 -0.00896749 +-0.0104955 0.0731168 0.0565579 +-0.0480021 0.126873 0.0289133 +-0.052022 0.0561083 0.0186673 +-0.0627916 0.150662 -0.00757045 +-0.0667057 0.14638 -0.0236565 +-0.0714698 0.161004 -0.0429413 +-0.0459114 0.0657109 0.0391289 +-0.0127989 0.0827406 -0.0389623 +0.0240686 0.0436305 0.0398361 +0.00979486 0.0360464 0.02827 +-0.0144862 0.0715775 0.0549247 +-0.0798641 0.145899 -0.00181913 +-0.0607177 0.0335659 0.00529637 +-0.0635063 0.156747 -0.0406118 +-0.0171212 0.0383927 0.000728518 +0.02686 0.0646091 0.0440244 +0.0291243 0.117712 -0.00241857 +0.0411571 0.0846831 0.0314273 +0.0246298 0.0347052 0.0125163 +0.0376787 0.105425 -0.00281358 +-0.0520342 0.116871 0.0334143 +-0.0526315 0.0335173 0.00157493 +0.0103692 0.116852 -0.0159048 +-0.0299989 0.178534 -0.0140055 +0.0199608 0.126186 0.00277612 +-0.0226771 0.0567339 -0.0313199 +-0.0693087 0.165593 -0.0188405 +0.0435095 0.0527832 0.0325495 +-0.0292487 0.115981 -0.0147474 +0.0390778 0.105565 0.0241719 +-0.0449049 0.167415 0.00301648 +-0.0575339 0.0493779 -0.000368538 +-0.0396388 0.0548721 -0.0111311 +0.0314293 0.102107 0.036834 +0.000480507 0.104429 0.0436509 +-0.0299338 0.0468967 -0.0261593 +-0.0712424 0.155684 0.00373917 +0.0197271 0.0808668 0.051456 +-0.0761145 0.157637 -0.00836344 +-0.0144941 0.122325 0.033097 +-0.0597928 0.095429 -0.0195264 +0.0309421 0.0646254 0.0411415 +-0.0275054 0.104339 0.0416271 +-0.000516741 0.108636 0.04302 +-0.0777092 0.07194 0.024923 +0.0102045 0.0795083 -0.0323062 +-0.0379505 0.150881 -0.00456722 +-0.013105 0.0382607 0.0125563 +-0.0182317 0.187056 -0.0182936 +-0.0182699 0.166848 -0.0125771 +-0.0264587 0.0902029 -0.033595 +-0.0668807 0.112599 0.0436137 +-0.0537473 0.076818 -0.0192258 +-0.0306082 0.165302 -0.00581873 +-0.0796939 0.0873057 0.0353613 +0.0347714 0.100763 0.034674 +-0.035752 0.0415598 -0.0291214 +0.0289767 0.117846 0.0275093 +-0.000706682 0.0655468 -0.0343894 +-0.0610628 0.138403 -0.00654794 +-0.0625935 0.12412 0.0446596 +-0.0648295 0.14966 -0.0309451 +-0.0234815 0.0974495 0.044821 +-0.026575 0.0476865 -0.0258778 +-0.0528683 0.0367334 -0.0118941 +-0.0116753 0.0526919 -0.0331734 +-0.0615062 0.158429 -0.0265894 +0.0320656 0.117538 0.0186978 +-0.00988755 0.103466 -0.0236142 +0.0484958 0.0691068 0.025078 +0.0156548 0.128965 0.0154331 +-0.0665046 0.10698 0.0385746 +-0.0267998 0.0522633 0.0388472 +-0.058755 0.0782067 -0.0192512 +0.0211493 0.0672779 0.0481082 +-0.0288355 0.125617 0.00924976 +-0.0124826 0.0701993 0.05486 +0.0522007 0.0476683 0.00324556 +-0.0443004 0.130334 0.00946299 +-0.00241533 0.0389975 -0.0136337 +-0.0437474 0.0783133 -0.0194351 +-0.0629007 0.115475 0.040648 +-0.0311605 0.169689 -0.016551 +-0.0263193 0.0386673 0.0347214 +0.0366921 0.0807912 0.0372758 +-0.0395001 0.100068 0.0413695 +-0.0681116 0.112409 0.0451263 +0.0386091 0.0686148 0.0346703 +-0.0759482 0.152671 -0.0129066 +0.0145806 0.0953173 0.0493246 +-0.0385004 0.150676 0.00203305 +-0.0935499 0.129634 0.0192397 +-0.0619642 0.126755 -0.00826981 +-0.0537213 0.0709084 -0.0154466 +-0.0314688 0.175764 -0.00340966 +-0.046761 0.126023 -0.00719597 +0.0128678 0.128966 0.0229731 +-0.0721444 0.145534 -0.0189034 +-0.014649 0.0384586 0.0247211 +-0.0782079 0.165287 -0.027954 +-0.0738874 0.0695898 0.0277412 +-0.0880483 0.145895 0.0319999 +-0.00950131 0.0870429 0.0572309 +-0.082872 0.154403 0.0201091 +-0.0574419 0.0424556 0.0216968 +0.0432211 0.097315 0.0201647 +0.0484167 0.0567471 0.0312254 +-0.0899902 0.146067 0.012148 +-0.0384869 0.0860997 0.0437907 +-0.0677801 0.0837503 -0.017964 +-0.0304968 0.071744 0.0399232 +-0.0267649 0.0754486 -0.0363172 +0.0555795 0.068697 0.0240751 +-0.00326172 0.0994383 0.0499516 +-0.0539364 0.153495 0.0157968 +-0.0264808 0.0509031 0.0429156 +0.0477223 0.0435274 0.0201079 +-0.027646 0.071755 0.0409574 +-0.025483 0.0988427 0.0444451 +0.00433576 0.055339 -0.0305463 +-0.0809392 0.0721012 0.0145438 +-0.0859359 0.0980836 0.000413824 +-0.0660122 0.153896 -0.0475582 +-0.0275574 0.156658 -0.00139783 +-0.0134137 0.0581871 0.0521911 +-0.0774938 0.134462 0.0515018 +0.0104958 0.0560929 0.0526786 +-0.00951583 0.0848597 -0.0382215 +-0.0298676 0.0916468 -0.0252289 +-0.0751451 0.15577 0.0110973 +-0.0887521 0.0969152 0.00742291 +-0.00642846 0.119149 -0.0142793 +-0.0351305 0.127632 0.00987733 +-0.079479 0.1087 0.0330138 +-0.00387451 0.0384228 0.00884205 +-0.0794858 0.0940336 0.0349322 +-0.0809833 0.080323 0.0311985 +-0.0874477 0.148578 0.0299355 +0.015852 0.106086 -0.0183494 +-0.0799154 0.12806 -0.00573177 +-0.0810332 0.092317 -0.00857663 +-0.0428426 0.0956907 -0.0224311 +-0.0843197 0.0830919 -0.00150258 +0.0270369 0.0347621 0.0147774 +-0.0114905 0.108632 0.0428314 +-0.0298836 0.04486 -0.0282273 +-0.0675863 0.0915604 0.0429945 +-0.0858462 0.0806083 0.01849 +-0.0377888 0.0855996 -0.0220857 +-0.080296 0.0886098 0.0345053 +-0.0631283 0.163827 -0.0595262 +-0.0200798 0.0653829 0.0501099 +0.0101376 0.104418 -0.0202461 +0.00311717 0.113125 -0.0199945 +0.00740202 0.0404296 -0.0235788 +-0.0233436 0.179984 -0.0199453 +-0.0849416 0.153745 0.0179582 +-0.00950506 0.0660833 0.0554985 +-0.0149561 0.0997734 -0.0237179 +-0.0625045 0.160053 -0.0215634 +0.0134925 0.114016 0.0379994 +-0.0484084 0.144974 0.000471547 +-0.0765927 0.0770726 0.0330453 +-0.0522524 0.0566167 0.0245415 +-0.0446531 0.0607308 -0.0127894 +-0.077361 0.0729429 -0.00456158 +-0.0164852 0.0870004 0.0567616 +0.00917846 0.101539 -0.0214106 +-0.0114976 0.0883765 0.0564607 +-0.0365032 0.109752 0.0369592 +-0.0622101 0.169551 -0.0614764 +0.0134275 0.117615 -0.0147491 +-0.0194201 0.1246 -0.00382324 +0.000402662 0.121936 0.0359399 +0.0308218 0.101142 -0.0151148 +0.044544 0.0748845 0.0238506 +-0.0190349 0.0930706 -0.0347914 +-0.0284257 0.15795 -0.0115973 +-0.0835152 0.150011 0.0330149 +-0.0723608 0.0363259 0.00395733 +0.049239 0.0437392 0.0164633 +-0.0281399 0.0917982 -0.0286003 +-0.0894337 0.132252 0.00424863 +-0.0478863 0.033513 -0.0102384 +-0.0480003 0.126688 -0.00585567 +-0.0147076 0.0933085 -0.0349989 +-0.0344513 0.172765 -0.000813008 +-0.012881 0.107288 -0.0218461 +-0.0494996 0.111168 0.0370596 +0.0195435 0.100771 0.0459866 +0.0383256 0.0387198 0.0189634 +-0.0490718 0.151664 -0.00461846 +-0.0413062 0.123313 -0.010402 +-0.0764561 0.106685 0.0353026 +-0.0506178 0.0590261 -0.0100428 +-0.0085531 0.0385596 0.00412906 +-0.0510743 0.153146 -0.0044532 +-0.0168415 0.122494 -0.0076608 +-0.0724396 0.129821 0.051541 +-0.0447123 0.0336927 -0.0153017 +-0.0128672 0.038589 0.0285719 +-0.0769694 0.136896 -0.00565009 +-0.0204809 0.0526524 0.0459576 +-0.0190093 0.100114 -0.02409 +0.0491876 0.0602673 -0.00438234 +2.68966e-05 0.0991578 -0.0250032 +-0.0146066 0.0355634 0.0504427 +0.0437747 0.084485 0.0264379 +-0.0613665 0.0430534 -0.00574325 +0.0102029 0.0779579 0.0551886 +-0.0584973 0.109766 0.0377913 +0.0405117 0.0657145 0.0303349 +0.0123622 0.0523525 -0.0283928 +-0.0865442 0.107736 0.017365 +-0.0273471 0.0735222 0.0429845 +-0.076628 0.169808 -0.0316679 +-0.00310182 0.130332 0.00278812 +0.0456485 0.0904179 0.0101632 +0.0367704 0.109675 0.000243105 +-0.0088954 0.108786 -0.0222808 +-0.0722528 0.156819 -0.0369077 +-0.0343294 0.175491 -0.0032043 +-0.0612579 0.167808 -0.0576007 +-0.0225051 0.10854 0.0408657 +-0.0396128 0.0492137 -0.0115104 +-0.0528856 0.104156 -0.0198053 +-0.0114785 0.0965129 0.0526113 +-0.0493499 0.141685 0.00939558 +-0.053326 0.162717 0.00204741 +0.0382413 0.108427 0.0210592 +0.0250594 0.122946 0.0231962 +0.0436593 0.058746 -0.00488132 +-0.052188 0.0559056 0.0136207 +-0.0337241 0.163848 -0.00328844 +-0.0671575 0.17049 -0.0366968 +-0.0780353 0.0880327 -0.0115615 +-0.00752216 0.122122 -0.0114318 +-0.0578223 0.12834 0.0392194 +-0.0624397 0.16285 -0.0548313 +-0.00720215 0.0344571 -0.0178933 +0.0219696 0.0347867 0.0191885 +0.0134971 0.112635 0.0387508 +-0.0188778 0.168283 -0.0134663 +0.0418633 0.0718502 -0.00680416 +0.00188261 0.129936 0.0247306 +-0.0143909 0.0388658 -0.0140202 +-0.0866821 0.0819953 0.0154888 +0.0511122 0.059915 -0.00400422 +-0.0637796 0.0419038 0.0392448 +-0.0334673 0.0532523 0.0375728 +-0.0640539 0.142491 0.0390245 +-0.0197273 0.118003 -0.0129221 +-0.0739294 0.0686501 -0.000515794 +0.022253 0.0430673 -0.0137151 +0.0169102 0.120624 0.0334304 +-0.0533452 0.118341 0.0350731 +-0.0407313 0.0710722 -0.0172567 +-0.0444934 0.108473 0.0392485 +-0.0406946 0.0340162 0.0268873 +-0.0428689 0.104235 -0.0209095 +0.000289503 0.0391337 -0.00386275 +0.0202669 0.0819781 -0.0271085 +0.0339966 0.0363512 0.0147468 +-0.0623699 0.0366895 0.0436353 +0.0112859 0.0638878 -0.0308862 +0.044262 0.0945325 0.00218274 +0.0178069 0.0349979 -0.00592782 +0.00766772 0.130773 0.00395877 +-0.0518373 0.0337424 -0.0112411 +0.05138 0.0464792 0.0212617 +-0.054495 0.0932121 0.0445367 +0.0154864 0.0380581 -0.0207587 +0.0322412 0.0368006 0.00286913 +0.0226382 0.0714084 0.0485432 +-0.0474967 0.0761987 0.0428659 +-0.0433556 0.0337438 -0.00770024 +-0.0507933 0.0869468 -0.0215939 +-0.0428743 0.166323 -0.00997516 +0.0420989 0.0930078 0.0271705 +-0.0133438 0.11201 -0.0186315 +-0.0682581 0.156305 0.0164417 +-0.0709159 0.125294 -0.00875352 +-0.0758095 0.0920857 -0.0139153 +0.00691185 0.038861 0.0287775 +-0.0755745 0.0702081 -0.000465226 +0.0560342 0.0622175 0.0264602 +0.00750328 0.0532576 0.0522142 +-0.0557017 0.0693735 -0.0143448 +-0.0400399 0.0367774 -0.0284153 +0.0452718 0.0917995 0.0131601 +0.0113635 0.0534706 0.0514016 +-0.056641 0.0429978 -0.00777539 +-0.0163006 0.182966 -0.0260091 +-0.0724038 0.116078 0.0519992 +-0.0223961 0.161302 -0.0143028 +-0.016322 0.128515 0.00945034 +-0.0761998 0.14998 -0.0148766 +-0.084898 0.11701 -0.000772283 +0.0215009 0.111167 0.037529 +-0.0116746 0.164119 -0.0176003 +-0.0386977 0.0666031 -0.0147476 +-0.0475127 0.0411749 0.0444313 +-0.0741496 0.147181 -0.0158602 +0.0423699 0.0412112 0.0211935 +-0.0112343 0.126014 -0.00554296 +-0.0627796 0.16313 -0.0285907 +0.0598501 0.0664357 0.0191799 +0.0444747 0.0438727 0.000520461 +-0.0449903 0.16693 -0.00785376 +-0.0241862 0.125789 0.00366503 +0.0303543 0.0942493 0.0422823 +0.0385368 0.0800568 -0.0127167 +-0.0329258 0.120263 0.0285346 +-0.0277494 0.0764615 0.044728 +0.0072822 0.0344718 -0.00192729 +0.0164745 0.103092 0.0456772 +-0.000370674 0.0391495 0.0306363 +-0.0444932 0.109842 0.0382343 +-0.0228558 0.113062 -0.0177116 +-0.0323055 0.0384897 -0.00796454 +0.0330143 0.106332 -0.0106209 +-0.0905664 0.150208 0.0151282 +-0.0473203 0.122487 0.0279328 +-0.079976 0.076532 0.0275303 +-0.0185178 0.0383092 0.00415679 +-0.0400541 0.128036 0.0139949 +-0.0725037 0.079155 0.0383043 +-0.00705924 0.127865 -0.00358478 +-0.0474808 0.0518309 0.037336 +0.0281857 0.0888902 0.0443935 +-0.0325014 0.102916 0.0416129 +-0.0636379 0.131123 0.0413473 +-0.0194422 0.0952996 -0.0310527 +0.0343622 0.0673468 0.0390872 +0.00248248 0.0385592 0.0461627 +-0.0207428 0.0656176 -0.0364653 +-0.0354216 0.17545 -0.00362892 +-0.0186888 0.127303 0.00423263 +-0.0697675 0.129835 0.0501143 +-0.0645483 0.168715 -0.0400434 +0.0176026 0.0520233 0.0463575 +-0.0165066 0.11684 0.0369313 +-0.0539292 0.0475998 -0.00643542 +0.0206619 0.125677 0.022985 +0.0131 0.034428 -0.00821794 +-0.0884031 0.101017 0.0203758 +-0.089294 0.136502 0.0252035 +-0.0633961 0.0610267 0.0215327 +-0.0181382 0.0625693 0.0510808 +-0.0363013 0.0408102 0.0457892 +-0.0348891 0.0341588 0.0262022 +0.0321818 0.0994934 0.0379171 +-0.0650996 0.115729 0.046366 +-0.0446047 0.0505366 -0.0105481 +-0.0170833 0.0896859 -0.0373218 +-0.0135156 0.162506 -0.0153049 +-0.0264962 0.119343 0.030427 +0.053783 0.0561466 -0.00178141 +-0.0659739 0.131145 -0.00872206 +-0.022585 0.185119 -0.0131839 +-0.0902473 0.132271 0.00623314 +-0.0343818 0.038354 -0.0138166 +-0.087117 0.119846 -0.000719646 +-0.0514997 0.047729 0.0396118 +-0.0837154 0.0804764 0.0234959 +0.0452487 0.0681916 0.00167659 +0.0443433 0.0762807 -0.00178421 +0.0393871 0.0828883 -0.0127786 +0.0133395 0.0475307 0.0453837 +0.0393635 0.0445531 -0.00413158 +0.0464068 0.0778555 0.00918735 +0.0498828 0.0474685 0.000307011 +-0.0205115 0.114066 0.0379617 +-0.0795322 0.0826724 -0.00859002 +0.0277802 0.0692504 -0.0226951 +-0.0640511 0.139618 0.0390194 +-0.0622733 0.144309 -0.00616114 +-0.0598164 0.122657 0.0415831 +-0.039222 0.0363262 0.0107899 +-0.0476756 0.0694312 -0.0151035 +-0.0114975 0.12239 0.0342495 +-0.0759886 0.0701373 0.025079 +0.0247695 0.1047 0.0394768 +-0.0424955 0.0464529 0.0406301 +-0.0209812 0.0389557 0.0535988 +-0.0434801 0.0917165 0.0428888 +-0.0936604 0.128255 0.0172452 +-0.0319662 0.163855 -0.00423083 +-0.0864626 0.107749 0.0163884 +0.00261599 0.0960798 -0.0297441 +0.0192696 0.124452 -0.00213625 +-0.0635019 0.0945759 0.0438874 +-0.0434804 0.108484 0.0391565 +-0.0767016 0.15969 -0.0259195 +-0.0207953 0.0784993 -0.0390618 +-0.0168597 0.0382017 0.0136589 +-0.0128908 0.129601 0.0150315 +-0.063562 0.136724 0.0379539 +-0.0592557 0.146819 0.0355066 +-0.0102821 0.0421361 0.0498123 +0.00411674 0.108725 -0.0201726 +-0.0471696 0.16597 0.00363215 +-0.0324882 0.0560654 0.0375153 +0.016314 0.061771 0.0498607 +-0.0633808 0.154539 0.0298218 +0.0319993 0.108737 0.0323781 +0.0224822 0.0578106 0.0464363 +-0.0731478 0.0644323 0.00940567 +-0.0136846 0.0555659 -0.0339274 +-0.0485565 0.0335372 0.00238031 +-0.0485794 0.128753 -0.00187037 +-0.0761205 0.0927947 0.038671 +-0.00890397 0.114438 -0.0172305 +-0.0881957 0.146062 0.0092207 +-0.067835 0.0951999 -0.016639 +-0.0826594 0.0993103 0.0308836 +0.0194806 0.107063 0.040905 +-0.0755472 0.15139 -0.00989046 +-0.0619095 0.118087 -0.0102757 +-0.0770237 0.0716688 -0.00146855 +-0.0090472 0.129209 0.0236827 +0.0166896 0.0645037 0.050425 +-0.044493 0.0860963 0.0437549 +-0.0851043 0.10321 0.0261425 +-0.0929793 0.125561 0.0282631 +-0.0792446 0.0699823 0.0139682 +-0.0541984 0.150844 0.02639 +-0.0544369 0.147753 0.0264091 +0.029273 0.103313 -0.0154093 +-0.0661878 0.156038 -0.00610123 +0.0513324 0.0613858 -0.00348738 +-0.00765334 0.0905691 -0.0361471 +-0.0036313 0.046681 -0.0294588 +-0.0793953 0.154018 0.0066962 +0.0126509 0.103032 -0.0211055 +-0.0534982 0.0344579 0.0343548 +0.0254331 0.0400654 -0.00462996 +-0.0474929 0.163748 0.00542805 +-0.0174765 0.0514437 0.047967 +-0.023601 0.0379574 -0.0288347 +0.0380126 0.0687088 -0.0127776 +0.0454875 0.0624627 0.0298224 +-0.0929393 0.122846 0.0403052 +-0.0619477 0.0629617 0.0272004 +-0.0632548 0.171035 -0.0614506 +-0.062927 0.150005 -0.0233391 +-0.0539078 0.109837 -0.0181931 +-0.0143481 0.129147 0.0116153 +-0.00460956 0.130321 0.00366937 +0.00735598 0.0509889 -0.0291303 +-0.0480744 0.151666 -0.00489643 +-0.0220459 0.166878 -0.0109827 +-0.0178225 0.0869056 -0.0385387 +0.000268234 0.0669357 -0.034172 +-0.0454819 0.0861255 0.0441555 +-0.0606958 0.0340151 0.0191666 +0.0293305 0.049536 -0.0137505 +-0.0661283 0.153073 -0.0457545 +0.0127964 0.0685744 0.0536204 +-0.0806268 0.150792 0.0343829 +0.0338754 0.0626989 -0.015804 +-0.0415032 0.116675 0.0325492 +-0.00995367 0.16681 -0.0217203 +0.059153 0.0704954 0.0131546 +-0.084323 0.0804069 0.00350409 +-0.0217865 0.0742531 -0.0388026 +0.0333307 0.040756 0.0270424 +-0.00920453 0.175559 -0.0287981 +-0.0565093 0.148178 0.0306333 +-0.0476849 0.146264 0.00805502 +-0.0896679 0.144435 0.0294634 +0.028326 0.0882981 -0.0214817 +-0.0129215 0.129318 0.0179306 +-0.0275354 0.0822426 0.0485604 +-0.0727818 0.154043 -0.034905 +0.0264706 0.0430524 -0.00597567 +-0.0461097 0.129234 0.00159921 +0.00227538 0.0668963 -0.0335609 +-0.0869081 0.0847086 0.0134765 +-0.071509 0.105494 0.0375699 +-0.0564975 0.105681 0.0408231 +-0.0709683 0.136976 -0.00769814 +-0.0238604 0.0347884 0.0456435 +-0.0248096 0.123255 -0.00440954 +-0.0504992 0.0917781 0.0442368 +-0.0672114 0.120049 0.0520179 +-0.067142 0.163768 -0.057034 +-0.0628433 0.16149 -0.0495873 +-0.0851762 0.106326 0.0223754 +0.0111461 0.101633 -0.021979 +0.0319374 0.0568888 -0.0147656 +0.0282794 0.120663 0.00443205 +-0.0912918 0.116401 0.0420373 +-0.00467238 0.0555139 -0.0327809 +-0.0267099 0.0794912 0.0492298 +-0.0226371 0.0622591 0.0442913 +0.0496058 0.0730794 0.0103455 +0.0134712 0.0347114 0.0266012 +-0.027103 0.0633188 -0.0304321 +-0.00446177 0.12682 -0.00651375 +-0.0184963 0.10441 0.0431068 +0.0322846 0.110983 -0.00760517 +0.043549 0.0987325 0.00516762 +-0.0442869 0.166804 -0.00853834 +0.0150912 0.0940152 0.0500689 +-0.07081 0.110507 0.0424798 +-0.0141183 0.115602 -0.0164489 +-0.0567507 0.13816 0.0319811 +-0.0047515 0.0726952 -0.0359954 +-0.0647331 0.0606321 0.00547671 +0.0292295 0.102131 0.038919 +-0.0328692 0.104316 -0.0215625 +-0.0105189 0.165484 -0.0170149 +-0.062488 0.161561 -0.0255895 +-0.083006 0.110313 0.0398706 +0.00202549 0.0390793 -0.0109499 +0.0598509 0.0692231 0.0121425 +-0.0486599 0.0649886 -0.0131055 +0.0193632 0.0475344 -0.0219845 +-0.0505005 0.109789 0.0379415 +0.0227584 0.0942129 0.0471436 +-0.054587 0.123231 -0.00812744 +0.0595925 0.0636093 0.00613697 +-0.0304354 0.159526 0.00145329 +-0.0771836 0.152278 0.0340017 +-0.0641378 0.146153 -0.0169913 +-0.012496 0.0828987 0.0575341 +-0.062259 0.0636125 0.0283336 +-0.0543842 0.064934 0.034129 +-0.0580097 0.136726 0.0336791 +0.0431148 0.0723568 0.0271232 +-0.0719688 0.147362 0.0419058 +0.0324265 0.0414912 -0.00365574 +-0.0504972 0.083371 0.044762 +-0.0277551 0.121254 0.0258902 +0.0248126 0.0672364 0.0446067 +-0.0748658 0.148574 -0.0178655 +0.0199833 0.0422265 0.0426566 +0.00936651 0.0494737 -0.0282538 +-0.0209427 0.127053 0.0165011 +0.014824 0.0950266 -0.0246047 +0.0416966 0.0899224 0.0287651 +-0.0417723 0.0826397 -0.0208385 +-0.0228105 0.123961 0.023212 +-0.0701997 0.155611 0.00411308 +-0.0246949 0.0550734 -0.0288078 +-0.0220519 0.163768 -0.0162501 +-0.0324478 0.069454 -0.0224572 +-0.0827552 0.07629 0.0125227 +-0.0606527 0.151084 0.0352378 +-0.0798891 0.0706304 0.0135503 +0.0476495 0.073201 0.00955169 +-0.00859398 0.0391639 -0.0259828 +0.0142802 0.0873929 0.0523851 +-0.00841973 0.128157 0.0268439 +-0.0665531 0.160013 -0.0120422 +-0.029443 0.0834063 0.0447309 +-0.0564979 0.0776594 0.043476 +-0.0483279 0.119696 0.0300033 +0.0232683 0.0857035 -0.0248261 +0.0321971 0.112814 -0.0055615 +0.0190831 0.0713469 0.0504539 +-0.054494 0.0465534 0.0422647 +-0.0121699 0.165481 -0.0142428 +0.000511137 0.0814953 0.0573473 +-0.0115028 0.0730832 0.0562182 +-0.0401042 0.037954 0.0427598 +-0.0114161 0.0382303 0.016554 +0.0328182 0.0967204 -0.0144274 +-0.00449908 0.0732747 0.0586205 +0.00733671 0.115147 -0.0180672 +-0.0476206 0.111206 -0.0176722 +-0.0624082 0.147544 -0.00957064 +-0.0615795 0.156866 -0.0245858 +0.0175138 0.12671 0.0232635 +-0.0697118 0.0764164 -0.0147262 +-0.0543713 0.158326 -0.00178875 +0.00713327 0.105885 -0.0207766 +-0.033517 0.115303 0.0329858 +-0.0114926 0.0897634 0.0564161 +-0.0375058 0.171208 0.000818011 +0.00542741 0.0336773 0.0131964 +0.0379386 0.07401 0.0354837 +-0.0860277 0.0967286 0.000430639 +-0.0311614 0.0791685 -0.0325602 +-0.0541101 0.0531993 -0.0053725 +-0.0592659 0.0599215 0.0215991 +0.0586637 0.0709935 0.0122726 +-0.0792595 0.0894709 -0.0095871 +-0.026159 0.0918036 0.0468933 +-0.0249745 0.12528 0.0180213 +-0.0519836 0.0517496 0.0236325 +-0.0275449 0.178709 -0.00674077 +-0.0715237 0.165101 -0.0167379 +0.0256965 0.123446 0.00917645 +0.0235224 0.0727618 0.0480692 +-0.0144773 0.0603048 0.0528052 +0.0408807 0.0948081 -0.00628698 +-0.0515819 0.0344024 0.0295565 +0.0311435 0.0885162 -0.0196004 +-0.087234 0.0981695 0.00341761 +-0.0165631 0.165424 -0.0118502 +-0.0497796 0.0518319 0.0348836 +0.0296893 0.110128 -0.0107004 +-0.0212542 0.126244 0.0193308 +-0.0315215 0.0732244 0.0404306 +0.0265706 0.0535806 -0.0207269 +-0.0944184 0.12146 0.0172829 +-0.0780287 0.14129 -0.00491664 +-0.0653187 0.152492 0.0351215 +0.0369332 0.102635 -0.00864905 +-0.0100919 0.126182 -0.00573829 +-0.0589643 0.15508 0.0013052 +-0.00782857 0.0386419 0.00238313 +-0.0893654 0.145802 0.0291185 +-0.077209 0.110378 0.0446936 +-0.0127752 0.0770687 -0.0383028 +-0.060466 0.143311 -0.00379205 +-0.0907002 0.137837 0.017198 +-0.0553853 0.15628 0.0108911 +-0.0609254 0.0454597 -0.00231147 +0.041351 0.0574751 -0.0052144 +-0.0111235 0.0346639 0.0467191 +-0.0520649 0.148658 -0.00262972 +-0.0438434 0.0985095 -0.0215595 +-0.0678163 0.0866062 -0.0177767 +0.0287562 0.053781 -0.0187512 +0.0338991 0.057119 -0.0127141 +-0.0189243 0.181629 -0.0169471 +-0.0888863 0.113493 0.0234001 +-0.0456524 0.0621788 -0.0131898 +-0.0205797 0.0906821 0.0540574 +-0.0285047 0.059221 -0.0254142 +-0.0310985 0.154152 -0.00673494 +0.0362687 0.0941823 0.0368117 +0.0223945 0.0860763 -0.025219 +0.0228611 0.0741302 0.0488936 +-0.0274872 0.094655 0.0450969 +-0.0238248 0.0826344 -0.0380614 +-0.044527 0.0601701 0.0393419 +0.0160126 0.0658829 0.0512178 +-0.0663487 0.06206 0.00207137 +0.000401309 0.0390966 -0.0249339 +-0.027107 0.082291 0.0495314 +-0.0617626 0.0415173 0.0247032 +-0.093011 0.118839 0.0352993 +-0.0662787 0.168684 -0.0320741 +-0.000498287 0.0535066 0.0547347 +0.0431795 0.0737197 0.0272167 +-0.0565118 0.0454033 -0.00602573 +-0.0668006 0.086643 -0.0182518 +-0.0652487 0.163342 -0.0202167 +0.0392901 0.0766734 0.0339466 +-0.0619246 0.106845 -0.0166571 +-0.0611633 0.0334354 -0.00188959 +-0.0722746 0.15542 -0.0369062 +-0.0690618 0.110676 0.0409548 +0.0432493 0.100107 0.00716752 +0.0317499 0.0535218 0.0369319 +-0.0492036 0.131059 0.0288275 +-0.0693592 0.176521 -0.047588 +-0.0072207 0.0356289 0.0484876 +-0.0818563 0.150046 0.00220642 +-0.0435006 0.0534118 0.0391466 +-0.0714969 0.156283 0.0152923 +-0.0883581 0.0875191 0.0194553 +-0.0774993 0.127442 0.0532862 +0.0288434 0.0591735 0.0415864 +-0.053835 0.0329874 0.0179508 +-0.0855039 0.140637 0.0423198 +-0.0597327 0.156046 0.0093301 +-0.052462 0.0642313 0.0336351 +0.000500084 0.12107 0.0367737 +-0.0692573 0.169753 -0.0288779 +-0.0156709 0.0385345 -0.00280448 +-0.00949582 0.118295 0.0381649 +0.0330035 0.116489 0.00476188 +0.0153369 0.0552331 -0.0286287 +-0.0105333 0.0457993 0.0483516 +0.00652975 0.0380351 0.0455331 +-0.0714995 0.101334 0.0391804 +0.0236022 0.115739 -0.0107408 +-0.0580129 0.118724 -0.0113962 +-0.0543247 0.0500125 0.0112758 +0.0587422 0.0635506 0.00411936 +-0.0589036 0.112559 -0.0155981 +-0.0640258 0.15968 -0.0562568 +-0.00990982 0.175697 -0.0247542 +0.00695815 0.0340953 -0.0204902 +-0.0591465 0.152697 -5.16463e-05 +-0.00975768 0.167025 -0.0223761 +-0.0383481 0.0417109 -0.0273458 +0.0463963 0.0778578 0.0141787 +-0.0720541 0.0777606 0.0379027 +0.0259403 0.1091 -0.0135959 +-0.0758056 0.0891863 -0.013912 +0.0429603 0.0873797 -0.00580114 +-0.0676348 0.0704852 -0.0103532 +-0.066267 0.176761 -0.0601056 +-0.013866 0.129156 0.0103484 +-0.067642 0.150503 -0.040589 +-0.0180327 0.0404537 0.0526147 +0.0183116 0.0636834 -0.0282837 +-0.078386 0.154762 0.00850622 +0.030569 0.0491561 0.035175 +-0.0622212 0.169401 -0.0515858 +-0.0565139 0.0548538 0.00566103 +0.00623573 0.0382417 0.0273828 +-0.038479 0.0945169 0.0431902 +-0.00987706 0.108745 -0.0220853 +-0.0621803 0.161575 -0.027587 +-0.0176337 0.125847 -0.00119502 +0.0328914 0.0578172 0.038629 +-0.0414935 0.0776367 0.0431734 +0.0432388 0.0804742 0.027354 +-0.0137772 0.0770735 -0.0384143 +0.0572117 0.0509068 0.011186 +-0.0689532 0.132595 -0.00851473 +-0.0655849 0.0622273 0.00026904 +-0.0535585 0.062801 0.0308747 +-0.0779359 0.154614 0.00720975 +0.00448513 0.0964789 0.0523472 +-0.060329 0.11723 -0.0118118 +0.029915 0.0430998 0.0305942 +-0.0275027 0.115261 0.0337596 +-0.0635137 0.0412627 -0.00639269 +-0.0164929 0.11134 0.0406952 +0.0292409 0.0951488 -0.0187111 +0.0324104 0.0430965 -0.00468251 +0.0317605 0.08491 0.0425067 +0.0289099 0.0929198 0.0437028 +-0.0707001 0.15817 -0.0449161 +0.0551137 0.0732038 0.0153863 +-0.0823243 0.154364 0.0217732 +-0.0715111 0.145604 0.0434169 +-0.0325077 0.0632413 0.0389915 +-0.0696524 0.0680017 0.0300044 +0.0102276 0.0809104 -0.0321098 +-0.0244999 0.049902 0.0466266 +-0.0554111 0.0574706 -0.0044262 +-0.0628667 0.101101 -0.0182166 +-0.00650089 0.0661332 0.0560881 +-0.0330903 0.15925 -0.0128209 +0.042117 0.0792074 0.0292753 +-0.085793 0.0818712 0.00648437 +-0.0594817 0.0426754 0.0236965 +-0.0539359 0.0541543 0.0107637 +-0.00998113 0.12997 0.0175362 +-0.0633398 0.0410523 0.0148679 +0.0595186 0.0696512 0.0111197 +-0.0628106 0.0420167 0.0410925 +-0.0280399 0.038261 0.000453129 +-0.0314842 0.0386701 -0.0153847 +-0.0183396 0.183004 -0.0240946 +-0.0414917 0.0662628 0.0414077 +-0.0512875 0.0335238 -0.00177633 +-0.009723 0.0684621 -0.0362531 +-0.0736747 0.166615 -0.0419946 +-0.0678387 0.0966346 -0.0163917 +-0.0609822 0.170956 -0.0597011 +-0.0778143 0.0696403 0.00741827 +-0.00249339 0.0619776 0.0560364 +-0.0574944 0.0732758 0.0411576 +0.0174045 0.0834609 0.0516215 +0.0222999 0.0360441 0.0108303 +-0.0134047 0.0981882 0.0494032 +-0.0437579 0.0335748 -0.0150071 +0.0210813 0.123852 -0.00148905 +-0.0530498 0.14867 -0.00246875 +-0.00549096 0.105886 0.0440438 +0.0181231 0.0349865 -0.00397885 +0.011218 0.0822648 -0.0313395 +-0.0785671 0.172906 -0.0416992 +-0.0304948 0.094646 0.0448519 +-0.0315011 0.101567 0.0426346 +-0.0867319 0.116264 0.0471164 +-0.0745642 0.0928269 0.03994 +-0.0287411 0.0366033 0.0533099 +-0.0733382 0.158682 -0.00576511 +-0.011641 0.172783 -0.0205328 +-0.0261276 0.166758 -0.01752 +0.0323797 0.117481 0.0145242 +-0.073083 0.166616 -0.0429976 +0.00318323 0.0894801 -0.0335291 +-0.0592544 0.0696245 0.0378273 +0.00902499 0.0346466 0.0239397 +-0.0614627 0.0334736 0.00162861 +-0.081048 0.154699 0.0221975 +-0.0337735 0.0765809 -0.0265027 +-0.0440788 0.0336672 -0.00594116 +-0.0501186 0.0375352 0.0462556 +0.0383972 0.0931984 -0.0106151 +-0.0507798 0.0488052 0.0196439 +0.0480167 0.0525694 0.0306027 +-0.0715181 0.0657302 0.000515199 +-0.0584278 0.0383351 -0.00941724 +-0.0484961 0.0987927 0.0435149 +-0.00449408 0.088412 0.0569078 +0.00197552 0.0378956 -0.000532016 +-0.0538466 0.0665391 0.0363755 +-0.0736039 0.148578 -0.0278556 +-0.0406505 0.117474 -0.0142631 +-0.0354963 0.0690808 0.0415601 +-0.063566 0.148289 0.0378536 +0.0187266 0.0350257 0.0273865 +0.00460237 0.0388981 -0.00652166 +-0.0775459 0.0688051 0.0117853 +-0.0880987 0.13916 0.0101984 +-0.0871517 0.106348 0.0123653 +-0.0867616 0.0833332 0.0134846 +-0.053009 0.0343093 0.0275811 +-0.0793348 0.0980896 0.0346601 +-0.0751339 0.0669087 0.0157231 +0.0158163 0.0344928 -0.00398192 +-0.0754309 0.0981509 0.0378194 +-0.0695415 0.15615 0.0130838 +0.00196735 0.0370051 -0.0146847 +-0.0711264 0.142566 -0.0097279 +-0.0202009 0.17418 -0.0222934 +-0.0315791 0.125791 0.0170798 +-0.0460989 0.157633 -0.00826241 +-0.0164967 0.0701922 0.0547571 +0.0456793 0.0890097 0.00617442 +-0.0263303 0.0336202 -0.0227625 +0.0458885 0.0778077 0.00419775 +-0.0613708 0.044683 0.0409908 +0.00384566 0.0341227 -0.0209701 +-0.0771455 0.156966 -0.0119003 +0.0355806 0.113279 0.0157103 +-0.036902 0.0362143 0.0131672 +-0.0532397 0.146242 0.0224016 +-0.0474989 0.107059 0.0399589 +-0.0857477 0.109049 0.020349 +-0.0892569 0.122633 0.00330914 +0.054626 0.0562289 -0.00078591 +-0.0161012 0.16832 -0.0147108 +-0.0788763 0.0949177 -0.010577 +0.026592 0.0578126 -0.0217526 +-0.061825 0.164563 -0.0576805 +-0.0210306 0.180146 -0.0147237 +-0.0474984 0.0833402 0.0443799 +-0.0884317 0.131079 0.0440854 +-0.0591643 0.0341749 0.0263998 +0.0381002 0.078079 0.0357853 +-0.0515897 0.146262 0.0154112 +0.0121111 0.116449 0.0370148 +-0.0414388 0.033531 0.00382893 +-0.0200653 0.172726 -0.0151523 +-0.0170332 0.164657 -0.0177746 +-0.0212056 0.0336704 -0.0218021 +-0.0696662 0.0710058 0.0344116 +-0.0516682 0.152149 0.0128837 +-0.0125103 0.0687513 0.0543288 +0.0366353 0.0982561 -0.0107953 +-0.0789343 0.0700266 0.0104198 +-0.0897898 0.136552 0.0342 +-0.0127086 0.0383825 0.00890404 +-0.0624498 0.166273 -0.0455815 +0.0326592 0.0619445 0.0401066 +-0.0457467 0.132003 0.0161756 +-0.0886572 0.111878 0.019323 +-0.0532618 0.0335957 0.00317772 +-0.0164951 0.109966 0.0413377 +0.0543768 0.0731861 0.0106539 +-0.0174802 0.127364 0.0206736 +0.0567172 0.0621967 0.0256596 +0.0464307 0.0792576 0.0101822 +-0.0292965 0.0818454 -0.0346209 +0.0426284 0.0719164 -0.00480026 +0.0578503 0.0648244 0.0238145 +0.0430174 0.0637781 -0.0018983 +-0.0794408 0.0768726 0.0291038 +0.0545285 0.0622324 0.0277996 +0.0441819 0.0945484 0.0191589 +-0.0284244 0.119569 -0.0104891 +-0.0778403 0.10982 0.0432074 +0.0160506 0.0754058 0.0531341 +-0.0523159 0.0517943 0.0256431 +-0.0181754 0.17123 -0.0220272 +-0.049306 0.147765 0.0110054 +-0.0405044 0.166738 0.00354035 +0.0214342 0.0934308 -0.0229317 +0.0452295 0.0931909 0.0101587 +-0.0352058 0.126987 0.0025067 +-0.0177396 0.0642294 -0.0366219 +-0.0251728 0.1712 -0.0194857 +0.0122607 0.0538397 -0.0290819 +-0.0902417 0.133644 0.00722857 +-0.0815914 0.0767239 0.0235201 +-0.0534472 0.146228 0.0234079 +0.0235949 0.0875751 0.0483132 +-0.0647237 0.158466 -0.0128094 +-0.0260145 0.0688342 -0.034504 +-0.0770801 0.15139 0.0355785 +-0.0630768 0.0336712 -0.00794186 +-0.0574971 0.10156 0.0427298 +0.0435266 0.0664036 0.0265247 +-0.0500812 0.146304 0.0115954 +-0.0568525 0.0521385 0.00567837 +-0.0436626 0.0607395 -0.0127771 +-0.0426472 0.117732 -0.0145554 +-0.0805782 0.112389 0.0458728 +-0.0161125 0.127667 0.00290411 +-0.00749701 0.0576432 0.054379 +-0.0454968 0.0775542 0.0422104 +-0.0694956 0.0958583 0.0420894 +-0.0369639 0.0346855 -0.0305537 +-0.0640756 0.151735 -0.033508 +-0.00249095 0.0718247 0.0580407 +-0.0583644 0.065095 0.0331446 +-0.0748917 0.16378 -0.0359985 +-0.0710199 0.0662278 0.0242287 +0.035425 0.0754528 0.0389267 +-0.0547392 0.075379 -0.0185175 +0.0462455 0.0784487 0.0155769 +-0.0310503 0.155166 -0.00836756 +-0.0879532 0.117604 0.0468721 +-0.0630191 0.169374 -0.0476038 +-0.0445267 0.0423569 -0.0163056 +-0.0624997 0.0818785 0.0437679 +-0.0842794 0.115636 -0.000747849 +-0.0700345 0.0631474 0.0200567 +0.0125104 0.105746 0.0436503 +-0.0795696 0.0976882 -0.00856087 +-0.0495247 0.141678 0.0113921 +0.0166382 0.123302 0.0301317 +-0.0367737 0.0813353 -0.0218258 +0.0465043 0.0597504 0.0314309 +-0.0777677 0.0975799 -0.010556 +-0.0460219 0.166062 0.00401182 +0.0609087 0.0623561 0.0101482 +-0.0403969 0.033577 0.00400031 +0.0286533 0.0578113 0.0412965 +0.0447855 0.0917675 0.0181585 +-0.0238167 0.0929782 -0.0327062 +-0.0714891 0.129823 0.0511416 +-0.0235755 0.157761 -0.0033973 +-0.0525761 0.136549 0.0284096 +-0.0177757 0.0756957 -0.0389571 +-0.0184004 0.0383962 0.0258071 +-0.0162165 0.175672 -0.0252165 +-0.0326786 0.0835446 -0.0285522 +-0.0897198 0.135201 0.0382086 +0.0138704 0.12508 0.0305218 +-0.0334383 0.0383149 -0.00250434 +0.0173372 0.059408 -0.0277846 +0.02739 0.119413 -0.00163712 +-0.055795 0.129741 0.0368819 +-0.0124902 0.0560062 0.0517339 +0.00742257 0.034128 0.000278711 +0.0312441 0.0828649 -0.019558 +-0.0804968 0.149757 0.0362335 +0.0224909 0.107012 0.0395338 +-0.0282283 0.117946 -0.012805 +-0.0726553 0.180933 -0.0546755 +-0.0683563 0.134056 0.04686 +-0.0197453 0.163025 -0.0159769 +-0.0591933 0.155725 0.01387 +-0.0522733 0.13577 -0.00153662 +0.0413723 0.0971667 -0.00382246 +-0.0920493 0.125439 0.00826634 +-0.0522301 0.0388364 0.0467813 +0.0151427 0.107227 -0.0182666 +-0.0397192 0.03358 0.00232461 +0.0373971 0.049112 -0.00639066 +-0.0698932 0.120907 -0.00884856 +-0.0667865 0.156181 0.0155153 +-0.0865635 0.0819919 0.0164862 +-0.0276111 0.0476412 -0.0256716 +-0.050104 0.0515366 0.0156131 +-0.0466794 0.0620985 -0.0127944 +-0.0784369 0.170061 -0.0360578 +-0.0714268 0.173765 -0.0397048 +-0.0313808 0.0567165 -0.0143886 +-0.0309651 0.0347631 0.0441412 +0.0067865 0.130497 0.0221788 +-0.0524448 0.149335 0.0194038 +-0.0414976 0.0860064 0.0425981 +-0.0709701 0.155369 -0.0459101 +0.00322675 0.0810659 -0.0345434 +-0.0294909 0.0917678 0.0440939 +-0.0734658 0.151245 -0.0358847 +-0.079509 0.130274 0.0528999 +-0.00249263 0.0534855 0.0544759 +-0.070992 0.0395652 0.00837515 +-0.0868944 0.122556 -0.00173403 +-0.0574179 0.0608499 0.024689 +-0.0424855 0.09447 0.0423231 +-0.00342977 0.0386245 0.00511046 +-0.018769 0.037629 -0.017491 +-0.0527937 0.0869491 -0.0216809 +-0.0846182 0.106299 0.024344 +0.0443742 0.0818795 -0.000800454 +-0.0894613 0.148789 0.0111841 +-0.0867708 0.110409 0.0193573 +-0.0310025 0.176085 -0.0150686 +0.00863383 0.115058 0.0390007 +-0.0408994 0.163853 0.00394115 +-0.057289 0.0707546 0.0390509 +-0.0646832 0.0432745 0.0336962 +0.0205013 0.0892461 0.0486645 +-0.0625318 0.0662874 0.0329584 +-0.0608083 0.147764 -0.00265379 +0.00615212 0.112907 -0.0196236 +-0.0299927 0.0436118 -0.0290457 +-0.0158151 0.162561 -0.00896512 +0.00597686 0.130404 0.00157669 +0.0284244 0.0822003 0.0446831 +0.0211099 0.0605491 0.0480139 +-0.0234016 0.184697 -0.0149423 +0.00333349 0.0390305 -0.00876711 +-0.0635183 0.159851 -0.052592 +-0.0770983 0.150031 -0.00589737 +0.0214723 0.0878669 0.0490265 +-0.0679264 0.131258 0.0474463 +0.00194863 0.100763 -0.0227079 +0.00777681 0.0385776 0.0292039 +-0.022633 0.08929 0.0533197 +-0.00603192 0.127393 0.0291246 +-0.0911594 0.120221 0.0443019 +-0.0894985 0.121276 0.00330358 +-0.0368227 0.0914861 -0.023804 +-0.0530502 0.151987 0.0175947 +-0.0672887 0.121448 0.0519139 +-0.0568311 0.0912579 -0.0217399 +-0.0697681 0.0822532 -0.0170635 +-0.0874076 0.0990828 0.0243308 +-0.0355048 0.108366 0.0378272 +0.0287346 0.10342 0.0381993 +-0.0860991 0.0964962 0.0273389 +0.0321886 0.108821 -0.00928902 +-0.0781375 0.103077 -0.00856917 +-0.0630075 0.0458305 0.00872119 +-0.0737672 0.068042 0.0238437 +-0.0863239 0.111846 0.0325401 +-0.00949559 0.10164 0.0439977 +-0.0902184 0.117255 0.00530427 +-0.075404 0.0914629 0.0394057 +-0.0453927 0.0336614 -0.0191153 +-0.0827835 0.0790493 0.0255103 +-0.0912019 0.132413 0.0272298 +-0.0564798 0.081975 0.044689 +-0.072928 0.148723 -0.0327819 +-0.00163455 0.0466691 -0.0289171 +-0.0665675 0.0355377 -0.00701232 +-0.000953404 0.100702 0.0462281 +-0.00881786 0.169637 -0.0227487 +-0.0201288 0.165284 -0.0176913 +-0.0859703 0.127103 0.0488324 +0.0255102 0.106068 0.0387825 +0.0570523 0.0522954 0.00619533 +-0.0407044 0.0491484 -0.0113833 +-0.0394747 0.168236 0.00277528 +-0.0690053 0.160967 -0.0519594 +0.0161135 0.0534638 0.0477167 +0.0284604 0.079188 -0.0220838 +0.0113708 0.0523816 -0.0287924 +0.0393128 0.0955964 -0.00780286 +-0.020906 0.0387029 0.0322136 +-0.00871553 0.0642094 -0.0357226 +-0.0547883 0.08548 -0.0214211 +-0.0725291 0.0901409 0.0413911 +-0.0566631 0.0629472 -0.00640536 +0.00234532 0.0524899 -0.0301138 +-0.0938956 0.118755 0.0202995 +-0.0414996 0.0846033 0.0426094 +0.00904636 0.090083 -0.0314826 +0.00730102 0.131 0.00524198 +-0.0637681 0.0809918 -0.0188675 +-0.0414945 0.041025 0.0428519 +-0.087002 0.140499 0.00821758 +-0.0709364 0.151841 0.036169 +-0.0634902 0.106988 0.0392647 +-0.0628225 0.0910404 -0.0189489 +-0.0105509 0.165091 -0.0177492 +-0.00157082 0.0341515 -0.0183868 +-0.0378749 0.105661 -0.0201869 +-0.0689412 0.079144 0.0404114 +-0.0239658 0.0335277 -0.0259671 +-0.0732183 0.172207 -0.0490431 +-0.0205007 0.0971766 0.0453281 +-0.0778797 0.109167 0.0401678 +0.000488577 0.0965409 0.0535304 +-0.0172908 0.177187 -0.018141 +0.00409629 0.128905 0.0269756 +0.0212668 0.080528 -0.0265872 +-0.0484872 0.0931824 0.0442201 +-0.0703872 0.161044 -0.0469664 +-0.0556945 0.0334591 0.00641451 +0.043113 0.0972735 0.00118522 +-0.0465526 0.147719 0.00793526 +-0.0620051 0.0336477 0.00854436 +-0.0789484 0.130998 -0.00538086 +-0.0329884 0.0347673 0.0437059 +-0.011676 0.0389222 -0.00979553 +-0.0102112 0.168384 -0.01842 +-0.058489 0.0747585 0.0420339 +0.0115041 0.129313 0.00109395 +-0.0186879 0.0554617 -0.0328673 +-0.0198225 0.168315 -0.0130587 +-0.013087 0.0382629 0.0179922 +0.0130281 0.0916311 -0.029044 +0.0271142 0.0463333 0.0371793 +-0.0618303 0.167813 -0.0535931 +0.0164903 0.113991 0.0376096 +-0.0592845 0.0336203 0.0127024 +-0.0728419 0.0642516 0.016748 +-0.0527116 0.12267 0.0360612 +-0.091424 0.144749 0.0231531 +0.0225812 0.0946281 -0.0221802 +-0.073319 0.153662 0.0322986 +-0.0384844 0.109782 0.036904 +-0.0551177 0.156069 -0.00176933 +-0.0195075 0.0512747 0.046374 +0.0374508 0.109679 0.00217662 +-0.0624744 0.163093 -0.0485882 +-0.0482041 0.0335795 -0.00119996 +0.0115865 0.127977 -0.0019288 +0.00494704 0.131338 0.0186496 +0.00228726 0.131702 0.0133903 +-0.0890002 0.134996 0.00522535 +0.0114372 0.12283 -0.0103617 +-0.0719092 0.180772 -0.055937 +-0.0144633 0.051615 0.0495133 +0.0147782 0.034634 0.0233109 +-0.0647828 0.177875 -0.0546137 +-0.0882908 0.103675 0.012381 +-0.0631313 0.0343469 0.025414 +-0.0255881 0.169753 -0.0108444 +0.0323006 0.0361518 0.00522301 +-0.0682938 0.06404 -0.00150269 +-0.0705485 0.167591 -0.022181 +0.0271973 0.0508207 -0.0197147 +-0.01565 0.10151 -0.0235687 +-0.0233444 0.0380443 0.0215084 +-3.10615e-05 0.0346258 0.0437307 +-0.0391691 0.162354 0.00112683 +-0.0657552 0.0422954 0.0115704 +-0.0745006 0.142795 0.0461595 +0.0473913 0.0422357 0.0119475 +0.0144595 0.121944 0.0333941 +-0.00358089 0.036197 -0.0248262 +0.0394746 0.0459091 0.0309432 +-0.0744487 0.141666 -0.00675172 +-0.0615813 0.0380878 0.0442214 +-0.0393467 0.0392853 0.042122 +-0.0229052 0.0945537 0.0478017 +-0.0281182 0.0563778 -0.0244009 +-0.0325146 0.112544 0.0353443 +0.0114695 0.0949418 0.0507264 +-0.027899 0.0377311 0.0244577 +-0.0247344 0.0668597 -0.034525 +-0.0623338 0.163141 -0.0335899 +0.0341266 0.0993109 -0.0131459 +-0.0130965 0.169821 -0.0173751 +0.0250182 0.11137 0.036342 +-0.0513993 0.14316 0.0173798 +-0.0521465 0.121207 0.0350569 +0.0134264 0.0403382 -0.0227982 +-0.0919004 0.143349 0.0181646 +0.0256492 0.0831048 -0.024123 +-0.0614955 0.0973435 0.04311 +0.0110632 0.0360404 -0.022358 +-0.0702704 0.159573 -0.0469358 +-0.0135146 0.181607 -0.0231689 +0.0462675 0.0778418 0.00718957 +-0.057322 0.0452663 0.0256799 +-0.0473932 0.0337786 -0.0140697 +0.0180643 0.0577618 0.0488361 +-0.0840242 0.151932 0.0065796 +-0.0547337 0.0738545 -0.0174125 +-0.0647273 0.156687 -0.0474505 +-0.0184955 0.0513594 0.0472431 +0.0314014 0.0491212 -0.0073371 +-0.0336406 0.0339783 -0.0207966 +0.0302861 0.0722616 -0.0207987 +-0.0707237 0.135491 0.0487549 +0.0373244 0.0861524 0.0364715 +-0.0839874 0.129456 -0.00327263 +-0.0579656 0.0599816 -0.000771046 +-0.0374903 0.0917378 0.0437278 +-0.0421167 0.157651 -0.00983865 +-0.0774831 0.151439 -0.0048996 +-0.0664918 0.167987 -0.0292876 +-0.0348246 0.12664 0.0173665 +0.0288107 0.113482 -0.00830654 +-0.0939345 0.122834 0.0252963 +-0.0236453 0.0906062 0.0514725 +-0.0623453 0.151603 -0.000787959 +-0.0394885 0.0520168 0.0393574 +-0.0228668 0.103033 -0.0236969 +-0.0205005 0.115412 0.03703 +-0.0206187 0.158806 -0.0102834 +-0.00380864 0.0840797 -0.0375505 +-0.0846424 0.139002 0.00130344 +-0.0244403 0.0384399 0.0299279 +-0.0256136 0.0707601 0.0441795 +0.0431065 0.0733659 -0.00379081 +-0.0334964 0.0575473 0.0382542 +-0.0732341 0.100848 0.0383652 +-0.0417523 0.0392031 -0.0263092 +-0.0600247 0.0335577 0.00903367 +0.0319454 0.0782138 0.0427262 +-0.0478947 0.122501 0.0288841 +-0.0215102 0.0435311 0.0534788 +-0.0175036 0.0357848 -0.0270478 +-0.0659221 0.115196 -0.0104247 +-0.0452512 0.0574076 0.0387158 +-0.0318518 0.100063 -0.022678 +-0.062214 0.131105 0.0398962 +-0.0570307 0.151068 0.0316808 +-0.0390807 0.159219 -0.0117734 +-0.0575439 0.0421232 0.0457366 +-0.0434958 0.166715 0.00391556 +0.0435215 0.0973118 0.0181533 +0.0364745 0.0384289 0.0206775 +0.00783805 0.034796 0.0434029 +0.00550647 0.0519309 0.0530702 +-0.0452904 0.125307 0.0239255 +0.0384949 0.0469555 0.0314897 +-0.0344994 0.0860255 0.0426749 +-0.0604675 0.0334377 0.00185915 +0.00564306 0.109569 0.0416563 +-0.0341393 0.169665 -0.0151103 +0.0252174 0.115733 -0.00872379 +-0.0432318 0.0365168 -0.0263599 +-0.0648058 0.0881399 -0.0188881 +-0.0113055 0.0420913 0.0500945 +-0.0768733 0.0742923 -0.00658087 +-0.0718355 0.0757492 0.0369191 +-0.00552934 0.126815 -0.00649473 +-0.015298 0.113338 -0.0180384 +-0.0658513 0.168603 -0.0333515 +-0.0769239 0.160393 -0.0146649 +-0.0789031 0.0913518 0.0358575 +-0.0622512 0.175627 -0.0566298 +0.0427075 0.100107 0.0161639 +-0.0122664 0.0420539 0.0504523 +-0.0593768 0.116855 0.0386274 +-0.0207916 0.117992 -0.012906 +-0.0209967 0.0893299 0.0545201 +-0.0293388 0.0522666 -0.0213646 +0.042 0.102859 0.00616839 +-0.0915744 0.128321 0.0372423 +-0.0745556 0.104899 0.0367465 +-0.0874341 0.0860792 0.0144694 +-0.0893403 0.0983511 0.0184032 +0.0265834 0.0915781 0.0456097 +0.0111147 0.0359709 0.0304167 +-0.0251149 0.163764 -0.0159045 +0.0379525 0.0888235 0.0356698 +-0.0308593 0.102934 -0.0225503 +-0.0849458 0.0817985 0.00448942 +0.016843 0.101962 -0.021958 +-0.0602648 0.153206 0.0324327 +-0.00109974 0.118227 -0.0153259 +-0.0277867 0.0904111 0.0457123 +-0.0632329 0.149656 -0.0246848 +-0.0378318 0.0943285 -0.0232947 +0.00942926 0.0360304 0.00452751 +0.00308943 0.0346383 -0.0160359 +-0.0629538 0.164686 -0.0335942 +-0.0707579 0.0639499 0.00302292 +-0.0806378 0.0734203 0.0185511 +-0.0114878 0.0502762 0.0503958 +-0.051624 0.0589527 -0.00929309 +-0.0724662 0.156284 0.0178613 +-0.0755506 0.0791122 0.0357048 +-0.0599662 0.0605914 -0.00103222 +-0.0407972 0.128426 0.00338476 +-0.0685036 0.0972643 0.0418698 +0.0384545 0.081427 -0.0137424 +-0.0869304 0.137738 0.00419643 +-0.0915894 0.118845 0.0433559 +-0.0375104 0.0344317 -0.0164034 +0.0132714 0.0779991 -0.0309033 +-0.000460653 0.0717499 0.0573883 +-0.0689415 0.128234 -0.0091158 +-0.00449889 0.0389099 -0.0139692 +-0.00687105 0.104506 -0.0230032 +-0.0625734 0.0333471 -0.00389969 +-0.0466818 0.0680053 -0.0151447 +0.0325669 0.0564098 0.0381516 +-0.00676687 0.0770295 -0.0375725 +0.031043 0.0535582 0.0376713 +-0.0252324 0.0383969 -0.00646059 +-0.0781312 0.100777 0.0347873 +-0.0351912 0.0448435 0.0445858 +-0.0618482 0.0460583 0.00900481 +-0.0510378 0.148698 -0.00295565 +-0.0758068 0.170822 -0.0449998 +0.0228822 0.0407495 0.0397886 +-0.0556881 0.123137 -0.00801327 +0.041209 0.10285 0.0181659 +-0.057716 0.154704 0.0245626 +-0.0356589 0.0394362 0.046602 +-0.018436 0.0384553 -0.00144245 +-0.0725091 0.147853 -0.0287195 +0.0195403 0.0672509 0.0492981 +-0.00949487 0.11143 0.0422271 +0.0387128 0.0407096 0.0245464 +0.0274937 0.0354669 0.00307886 +0.0251817 0.0344441 0.0110044 +-0.0734653 0.11597 0.0519419 +-0.0517405 0.0367791 -0.0118947 +-0.0313584 0.0347088 0.042355 +-0.0271594 0.0577744 0.0376032 +0.0289959 0.083514 0.0437755 +-0.0609886 0.0421383 0.0435161 +-0.0642758 0.0379734 0.0412454 +-0.0669901 0.171097 -0.0394962 +0.00201718 0.0342688 0.0083365 +-0.0376227 0.0519888 -0.0106273 +-0.0604976 0.0761414 0.0420756 +0.0231651 0.0624431 -0.0251426 +-0.0444966 0.100126 0.0423688 +-0.0434704 0.0888362 0.0427012 +-0.0739012 0.112096 -0.00769672 +0.0113285 0.0381477 0.0446991 +0.0606492 0.0595518 0.0111602 +-0.0344028 0.0453249 -0.0266763 +-0.0238559 0.100178 -0.023968 +0.0124979 0.0363631 -0.0219171 +-0.0386629 0.0606634 -0.011982 +-0.0845122 0.0778323 0.0175087 +-0.0447652 0.0811738 -0.019998 +-0.0325802 0.0708663 -0.0234636 +-0.0428489 0.09852 -0.021578 +0.0343638 0.0491351 -0.00656846 +-0.00173319 0.108975 -0.0214067 +-0.0513914 0.0516798 0.0216239 +0.00608628 0.101527 -0.0214717 +-0.0746196 0.147202 -0.0138555 +-0.0464944 0.0733156 0.0418074 +0.0275533 0.0550749 -0.019815 +-0.0617588 0.0455326 -0.00130544 +-0.0627435 0.14749 -0.0135844 +0.0114636 0.0347788 0.020691 +0.0413154 0.0451948 0.0296022 +-0.0855482 0.149965 0.0308161 +0.045359 0.04899 -0.00489955 +0.000884291 0.038993 0.0274224 +-0.086804 0.0846773 0.00948205 +0.00217921 0.090906 -0.033534 +-0.0074916 0.0518487 0.0520774 +-0.000472995 0.0746288 0.0583091 +0.00707409 0.0348007 0.0234037 +0.0191098 0.127253 0.00673134 +-0.00312412 0.123427 0.0346626 +-0.0251492 0.0379137 0.0122303 +-0.030188 0.124116 0.0205603 +-0.0326284 0.178159 -0.00692862 +-0.0371849 0.0430027 -0.0273252 +0.000516139 0.0703294 0.0566091 +-0.061834 0.155291 -0.0275862 +0.0144787 0.103102 0.0461637 +-0.0601666 0.138122 0.0340792 +0.0447845 0.0903596 0.0201575 +-0.0175794 0.128153 0.00899134 +-0.0654784 0.133956 0.0422213 +-0.078379 0.0698242 0.00895098 +-0.0544145 0.0561001 0.0105768 +-0.0166845 0.0625881 0.0524778 +0.0283147 0.0712973 0.0426773 +0.00750546 0.105745 0.0420743 +-0.0365184 0.126747 -0.000928274 +-0.0297912 0.154227 -0.00467156 +0.0242356 0.0804257 -0.0251216 +-0.0507602 0.0797387 -0.0202693 +-0.0399713 0.112687 -0.0172474 +0.0170749 0.128355 0.00741174 +-0.0399375 0.150681 0.00347523 +-0.0608612 0.0435863 0.0137318 +-0.0365883 0.0485443 -0.0138981 +-0.0910601 0.132402 0.0282222 +-0.0795844 0.0759236 -0.00451678 +-0.0809274 0.12805 -0.00535084 +-0.0711513 0.132664 0.0498849 +0.0150413 0.120568 0.0342385 +0.00849911 0.119651 0.036768 +-0.0569109 0.033599 0.014995 +-0.0689033 0.0887623 0.0428815 +-0.020138 0.166773 -0.018707 +-0.0815894 0.0926183 0.0328436 +0.00319943 0.0866473 -0.0337836 +-0.0528475 0.140082 0.0254195 +0.0217844 0.118301 -0.00950952 +-0.0305318 0.0734349 -0.0315361 +-0.0355385 0.040818 0.0464546 +-0.0446309 0.0563208 -0.0114385 +-0.0779756 0.13395 -0.00568102 +-0.0924453 0.114684 0.0163206 +-0.0427865 0.0855262 -0.0214717 +-0.030041 0.0819074 -0.0335886 +-0.0350329 0.037518 0.0477355 +-0.0574727 0.0791252 0.0438951 +-0.0347822 0.124221 0.0233214 +0.0396853 0.0674479 -0.00978879 +-0.0280887 0.123076 -0.00418723 +-0.0357494 0.0383801 -0.010405 +-0.0896534 0.0983503 0.0154045 +-0.0393744 0.174134 -0.00504658 +-0.00548988 0.121033 0.0366102 +-0.0493281 0.143211 0.0074004 +-0.0618749 0.161566 -0.0365945 +-0.00486561 0.103096 -0.0233724 +-0.0158939 0.0387206 -0.00487532 +-0.0136298 0.0943834 -0.0340901 +-0.0708677 0.158014 -0.00345716 +-0.0679292 0.0674285 0.0308631 +-0.0698001 0.0894083 -0.0167108 +-0.0708742 0.117963 -0.00822963 +0.0544559 0.0679536 0.0254119 +0.0505447 0.0640078 -0.00213219 +-0.0328813 0.11004 -0.0184872 +-0.0329481 0.169751 -0.00390259 +-0.0730465 0.158091 -0.00419381 +-0.0642284 0.165303 -0.0599757 +-0.0393381 0.149359 -0.00118821 +0.027659 0.115893 0.031317 +0.00307915 0.03925 0.0330573 +-0.0268824 0.0338882 -0.0212482 +-0.076206 0.0892711 -0.0135327 +0.036558 0.0887304 -0.0159156 +-0.045503 0.0478046 0.0396725 +-0.00457894 0.0383459 0.0160278 +-0.014359 0.102532 0.0433738 +-0.0263218 0.038308 -0.00105771 +-0.0252694 0.0564528 0.0400125 +-0.0745038 0.137269 0.049596 +-0.0478639 0.102799 -0.0211716 +-0.0698236 0.144589 -0.0179026 +-0.00449355 0.112805 0.041803 +0.0395793 0.107012 0.0171684 +0.0320331 0.117177 0.0215305 +0.0319133 0.103439 0.0357737 +-0.0232571 0.160328 -0.0132723 +-0.0368559 0.101427 -0.0217814 +-0.0779001 0.105799 -0.00757653 +-0.0719733 0.155857 0.00930845 +-0.0667659 0.0664754 0.0301739 +-0.0116086 0.0384341 0.0253641 +-0.0828253 0.0815398 -0.00255091 +-0.00864403 0.0481881 -0.0304747 +-0.0695881 0.0687436 -0.00572614 +-0.053703 0.069339 -0.0141095 +-0.0875622 0.147255 0.0314849 +-0.060703 0.146825 0.0369155 +0.0559661 0.0563559 0.00119345 +-0.0899141 0.140577 0.0142032 +0.0290556 0.0480892 -0.0107335 +-0.0444676 0.0959215 0.0428438 +-0.0126944 0.0614008 -0.0362648 +-0.00712049 0.126279 0.0302479 +0.00717458 0.125139 0.032446 +0.0130051 0.123122 0.0330958 +-0.0658939 0.119442 -0.00885604 +-0.0535827 0.0550746 0.0114399 +0.00820634 0.0865719 -0.0325157 +-0.0358588 0.100033 -0.0223224 +-0.0816885 0.110103 -0.000571623 +-0.0517049 0.0693137 -0.014154 +-0.0304078 0.0499703 0.0425042 +0.0090211 0.0602846 0.0533569 +-0.0102692 0.126825 -0.00441849 +-0.0412575 0.123881 0.0239565 +-0.0304041 0.179805 -0.0103906 +-0.0119972 0.115638 -0.0165051 +0.0413233 0.102851 0.0171643 +-0.032272 0.0343596 0.0389523 +-0.0854712 0.0791996 0.00951147 +-0.0138083 0.082755 -0.0391488 +-0.0256473 0.0335939 -0.0244827 +0.0452831 0.0511563 0.0319003 +-0.0829803 0.153189 0.00837374 +-0.0435404 0.0351992 0.0428237 +0.0114184 0.0389206 -0.0228692 +0.0440394 0.0405103 0.0110966 +-0.0218345 0.0725147 0.0516294 +0.0173744 0.124995 0.027504 +-0.0771042 0.163136 -0.0202013 +0.0282746 0.0494546 -0.0167442 +-0.0703245 0.0805604 0.0403227 +-0.0558701 0.154311 0.0223113 +-0.0790495 0.0785612 -0.00658771 +0.0023439 0.122378 0.0350184 +-0.0220309 0.0609111 0.0451603 +-0.0853195 0.117662 0.0484974 +-0.0580048 0.0366442 0.0464062 +-0.00844255 0.0358982 -0.0250895 +0.0243113 0.119024 -0.0062727 +-0.0558892 0.141955 -0.00229647 +-0.0642262 0.115635 0.0441038 +-0.0719279 0.153998 -0.0419035 +0.0423481 0.0732982 -0.00579253 +0.0103113 0.0595614 -0.0298764 +-0.0818376 0.116236 -0.00283916 +0.0590795 0.0663557 0.00613696 +-0.039497 0.0436994 0.0413132 +-0.0702982 0.0846763 0.0415948 +-0.0167436 0.068615 -0.0382083 +-0.0690033 0.127063 0.0512206 +-0.0485018 0.102883 0.0409949 +-0.0541716 0.144673 0.0274046 +0.0243198 0.0564051 0.0438207 +-0.0308589 0.0382072 0.0517831 +-0.00548321 0.119649 0.0378412 +-0.0606463 0.0434636 0.0431332 +-0.008712 0.171156 -0.0257232 +-0.0444845 0.0846726 0.04342 +-0.0897848 0.135174 0.0342114 +-0.00690926 0.0349718 0.0473534 +-0.0808786 0.122166 -0.00503067 +-0.0779103 0.070378 0.00551561 +0.0134856 0.129689 0.00607818 +-0.0225837 0.0666453 0.0469216 +-0.0525012 0.046573 0.0420391 +-0.0444858 0.091688 0.0430295 +-0.0394965 0.0662956 0.0417788 +0.00897384 0.0364118 0.0277765 +-0.0782046 0.166684 -0.029962 +0.0192461 0.0777761 -0.0276631 +-0.0483417 0.137106 0.010396 +0.0258883 0.12226 0.00355652 +0.0398565 0.0384519 0.0122163 +-0.0408758 0.107069 -0.0201235 +-0.0315055 0.0689302 0.0397623 +-0.068912 0.148468 -0.034342 +-0.0496681 0.0705507 0.0391462 +0.00414266 0.131018 0.00407154 +0.0204354 0.100784 0.0455262 +-0.0587133 0.0708136 -0.0155469 +-0.00369415 0.0386815 0.0249596 +-0.0546088 0.0601814 -0.0071333 +0.0277597 0.0984362 -0.0181936 +0.00136992 0.128685 0.0274437 +-0.0166951 0.0555255 -0.0336624 +0.0054852 0.109984 0.0416767 +-0.079955 0.130987 -0.00485489 +-0.00265109 0.0497012 -0.030809 +-0.0697849 0.145343 0.0431021 +-0.0903934 0.12698 0.0433203 +-0.0409656 0.122163 0.0270528 +-0.056363 0.13673 0.0325483 +-0.00422605 0.0355815 -0.0164762 +-0.0158888 0.123338 -0.00654807 +0.0233356 0.0389315 -0.00470356 +-0.0377622 0.0797629 -0.0199128 +-0.0274204 0.12046 -0.00942796 +-0.0745042 0.0669844 0.00328572 +-0.0544992 0.0400332 0.0469658 +-0.022854 0.100181 -0.0240549 +-0.0748342 0.156367 -0.00257451 +0.00532997 0.0389553 -0.00830106 +-0.0591545 0.129731 0.0390508 +-0.0365933 0.117132 -0.0139142 +0.00710349 0.126169 0.0309735 +0.00420316 0.0838546 -0.0341295 +0.0424932 0.0541962 0.0323753 +-0.0447782 0.039524 -0.0212903 +0.0130456 0.0946785 -0.0262358 +0.0515873 0.047616 0.00226708 +-0.0226971 0.059684 -0.0328522 +-0.0489531 0.117804 -0.0145786 +-0.00521852 0.130779 0.0091953 +-0.0745798 0.155493 -0.021916 +-0.0211637 0.171222 -0.0207379 +-0.0681899 0.15036 -0.0415571 +-0.0645431 0.0356401 -0.00785526 +0.0444401 0.0776895 -0.00177282 +0.0191352 0.0356125 -0.00767677 +-0.0879901 0.0928029 0.00642738 +-0.0274823 0.0617236 0.037721 +0.0406194 0.104193 0.00117617 +-0.0205806 0.0342261 -0.0203167 +0.052283 0.0559902 -0.003254 +-0.0826845 0.0884898 0.0312484 +-0.0354914 0.0719062 0.0418497 +0.00222867 0.0810902 -0.0349213 +-0.0247631 0.123128 0.0239793 +0.00210157 0.111597 -0.0202587 +-0.029962 0.122606 -0.0056563 +-0.0642809 0.173904 -0.0612545 +0.0164873 0.128764 0.0128859 +-0.0290915 0.0334798 -0.0269263 +0.0563251 0.0686891 0.0234174 +0.0388229 0.0428364 0.0281231 +-0.0364553 0.171237 0.000642707 +-0.0695352 0.0422413 0.00168563 +0.0115865 0.119151 -0.014401 +-0.0445078 0.128204 0.0197407 +-0.0735439 0.101276 0.0379813 +-0.0842997 0.131249 0.0498733 +-0.0456134 0.0424471 -0.0132755 +0.00124079 0.0740793 -0.0353703 +-0.0590284 0.155612 0.0197248 +0.00626131 0.0696979 -0.0331897 +-0.0465413 0.123419 -0.0104793 +-0.0145087 0.0587885 0.0518852 +-0.0412993 0.127471 0.0164976 +-0.0621264 0.0457845 0.0326787 +0.00861617 0.0348422 -0.0132521 +-0.0699384 0.129684 -0.00901632 +-0.0174184 0.0961382 -0.0299203 +-0.0408477 0.0999502 -0.0215042 +-0.0629342 0.109643 -0.0151294 +-0.0588992 0.0593658 0.0203903 +-0.0622614 0.0594461 0.0178467 +0.0503092 0.0575099 -0.00459296 +0.0328071 0.0781213 -0.0187889 +0.0297936 0.0354746 0.0165125 +-0.0592597 0.0343664 0.034953 +-0.0736653 0.0761112 -0.0107553 +0.0358581 0.0686798 0.0377462 +-0.0814983 0.102013 0.0310531 +0.0072631 0.0968089 -0.0265119 +-0.0107695 0.0756601 -0.0381615 +-0.0665448 0.142647 -0.010737 +-0.0861837 0.0868588 0.0248974 +-0.0323987 0.114036 -0.016697 +-0.0526124 0.143167 0.0204083 +-0.00749979 0.118315 0.0383098 +-0.0366574 0.0591917 -0.011518 +-0.0854765 0.145991 0.0364919 +-0.0590102 0.131118 -0.0069845 +0.0099878 0.0342067 -0.0142754 +0.0406313 0.0833746 0.032449 +-0.0377389 0.0753784 -0.0182557 +-0.0265179 0.111211 0.0374625 +-0.0457781 0.109842 -0.0182449 +0.0106021 0.12463 0.0322012 +-0.0714609 0.172223 -0.0354286 +-0.0918002 0.143353 0.0191654 +0.009256 0.0681484 -0.0312392 +0.00426025 0.0352382 0.0224392 +-0.0497576 0.0782604 -0.019072 +-0.0628575 0.0953598 -0.0185102 +0.0594691 0.0677866 0.0081304 +0.0120479 0.124912 -0.00663019 +-0.0896003 0.111903 0.0133388 +-0.000572916 0.131478 0.0109076 +-0.0856485 0.103181 0.0252723 +-0.0825849 0.0762413 0.018536 +0.0357614 0.089262 -0.0164786 +-0.0853874 0.0978708 0.0280062 +-0.0250231 0.0373676 -0.0184933 +-0.0224668 0.0384735 -0.00782567 +-0.0215612 0.127036 0.0148264 +0.0375018 0.0527008 0.0316063 +0.0132903 0.0644915 0.0525417 +0.021025 0.0444507 -0.0197096 +-0.0230202 0.0380885 0.0125034 +-0.0190143 0.123258 -0.00649836 +-0.0634892 0.101502 0.0420523 +-0.0022961 0.120938 -0.0122094 +-0.0682754 0.155222 0.00480981 +-0.0105391 0.0444694 0.0492224 +-0.0314884 0.0988001 0.0440684 +-0.0162822 0.113495 -0.0182068 +0.0427502 0.0832247 0.0284671 +-0.0317184 0.124145 0.0214762 +-0.0228243 0.0868132 -0.0375213 +0.0112412 0.122679 0.0339481 +-0.0624726 0.093208 0.0448109 +-0.0195149 0.0474114 0.0506124 +-0.0305029 0.105682 0.0404793 +0.0297926 0.0510441 -0.0147439 +-0.0660587 0.0336733 0.00769062 +0.01375 0.126078 -0.00389468 +0.00623348 0.0768314 -0.0342539 +0.00723812 0.0725784 -0.0338132 +-0.0345032 0.0747169 0.0417978 +-0.0533429 0.0572662 -0.00744815 +-0.0588626 0.0344147 0.0367317 +-0.0597544 0.151092 0.0347772 +-0.066041 0.156288 0.0201296 +-0.0519452 0.0542248 0.0130044 +-0.0536545 0.154299 0.0129697 +-0.0553709 0.131821 -0.00535733 +-0.0165812 0.0355875 -0.0267111 +-0.0671293 0.149176 -0.0346332 +0.0364911 0.112064 0.0146153 +-0.0678122 0.0908837 -0.0169858 +-0.0433492 0.123979 0.0232099 +0.0233446 0.0489622 -0.0213372 +-0.0401353 0.162183 -0.0119788 +-0.0436993 0.0680874 -0.0160622 +-0.0575 0.0589785 0.0215704 +0.002504 0.0605716 0.0560843 +-0.0230753 0.078299 0.0540943 +-0.0532839 0.150877 0.0224035 +-0.0536299 0.144677 0.0243972 +0.0138044 0.129402 0.00474998 +0.0390959 0.0382591 0.0140545 +-0.0935248 0.128245 0.016248 +-0.017174 0.169749 -0.0215263 +-0.00210217 0.035143 0.0464295 +0.00913637 0.105871 -0.0204027 +-0.0861865 0.0926674 0.00242789 +-0.0615271 0.0344278 0.0378839 +0.0506397 0.0652197 -0.00133714 +-0.0859779 0.129848 0.0487451 +-0.0269007 0.0388242 0.0362546 +0.0349035 0.0987755 -0.0125611 +-0.0895593 0.13929 0.0311867 +0.0210026 0.126515 0.0102791 +0.0155029 0.119565 0.0348769 +-0.0660877 0.178333 -0.0536421 +-0.0134986 0.0911752 0.0564813 +-0.0462738 0.0671086 0.039469 +-0.0691002 0.0421453 0.000699576 +0.0106377 0.0658124 0.0539651 +-0.0372457 0.0381548 -0.00680953 +-0.0415057 0.0396254 0.0430594 +-0.0658022 0.0335619 0.00426403 +-0.0549779 0.135599 -0.00339213 +-0.0654711 0.157635 -0.0545345 +-0.0699145 0.135483 0.0481625 +-0.0647392 0.157599 -0.0538703 +-0.0405119 0.125571 0.0212459 +-0.0408461 0.0957242 -0.0225993 +-0.0211708 0.123144 -0.00636628 +0.0528302 0.048039 0.0216552 +0.0292509 0.119574 0.0033793 +0.0456488 0.0861985 0.00518381 +-0.0697746 0.169428 -0.052035 +-0.0583932 0.146765 0.0331817 +-0.0748301 0.174171 -0.0395847 +0.0397534 0.0685495 0.0327941 +0.0603506 0.0581587 0.0121666 +-0.0615125 0.0729203 0.0397926 +0.0320567 0.106099 0.0342281 +0.0259569 0.0632491 0.0444844 +-0.017781 0.12071 -0.00976707 +-0.00292868 0.129815 0.0244395 +0.042563 0.0650705 0.0275619 +0.051394 0.0726569 0.00804397 +-0.0147356 0.124887 0.0290085 +0.0124993 0.116805 0.0367613 +-0.0095857 0.128017 -0.00170998 +-0.0353912 0.0475494 -0.0206462 +-0.0197639 0.0714243 -0.0385337 +-0.0646745 0.0721957 -0.0143162 +-0.0418918 0.129001 0.00740866 +-0.0217734 0.0713925 -0.0382795 +-0.0493632 0.1301 -0.00139208 +0.0232238 0.0822541 0.0494986 +0.0449291 0.081953 0.02316 +0.0595997 0.0567108 0.0101713 +-0.0496185 0.140151 0.0144011 +-0.0524988 0.102874 0.0411998 +0.0342709 0.0876121 0.0408726 +-0.0295799 0.174217 -0.00600797 +-0.0251232 0.165382 -0.00841584 +0.0176002 0.124344 -0.00401113 +0.054323 0.064171 -0.000208879 +-0.0129906 0.0568055 0.0517595 +-0.0751884 0.153035 0.033144 +0.0124885 0.114028 0.0382457 +0.0104651 0.0444795 0.0447526 +-0.033472 0.124985 -0.00213286 +-0.0519318 0.0352921 -0.0124585 +-0.0621937 0.156854 -0.0175927 +-0.0755066 0.11755 0.0524265 +-0.0660809 0.135405 0.0431027 +0.0020291 0.0342762 0.0137843 +0.0320171 0.111398 0.0306261 +-0.0685791 0.147786 -0.0311476 +0.0139278 0.129741 0.0148027 +-0.075709 0.170829 -0.032719 +-0.0241819 0.175647 -0.0202251 +-0.0729646 0.147133 -0.0208616 +-0.0588824 0.0997395 -0.0190365 +-0.0396703 0.036174 -0.00733977 +-0.0195581 0.181635 -0.0160858 +-0.0449923 0.0381195 -0.0222607 +-0.0298707 0.101527 -0.0228594 +-0.0447239 0.169659 -0.000473292 +-0.0547075 0.153861 0.0184094 +-0.00344803 0.111769 -0.0204187 +-0.048864 0.162635 -0.0057974 +-0.0837218 0.154141 0.0154269 +-0.0709606 0.172226 -0.0520527 +-0.000498029 0.0505184 0.0529377 +-0.0916834 0.116094 0.0407438 +0.029535 0.0987313 -0.0165204 +-0.0649388 0.16711 -0.0315896 +-0.00669968 0.0599043 -0.0346663 +-0.0086066 0.042026 -0.0258639 +0.0380982 0.0589726 0.0320786 +0.0284966 0.0768217 0.0447581 +-0.0365356 0.155076 0.00317988 +0.0173692 0.0476632 -0.0235115 +0.0152466 0.0765161 -0.0298116 +-0.061679 0.175513 -0.061381 +-0.03626 0.0434916 0.0442696 +0.0033481 0.0346494 0.040814 +-0.0708559 0.177779 -0.0481346 +-0.0522853 0.153955 0.0120432 +-0.00577511 0.0770351 -0.037534 +-0.0279795 0.0577645 -0.0254 +-0.0474968 0.101477 0.0417865 +0.0418115 0.0872841 -0.00879032 +-0.0272728 0.0383881 -0.00686007 +-0.0828517 0.110648 0.028886 +-0.0677301 0.181168 -0.057983 +-0.0339959 0.0752105 -0.0234884 +0.0227878 0.0350417 0.0227582 +-0.0132511 0.177151 -0.0280569 +-0.0662758 0.159515 -0.0565111 +-0.0759663 0.179251 -0.0520449 +0.0494532 0.0710682 0.00472592 +-0.0158055 0.0931896 -0.0348885 +0.0506418 0.0475027 0.0012667 +-0.0220809 0.0348313 0.0494485 +-0.0681005 0.179488 -0.0529195 +-0.0457387 0.0767861 -0.0183415 +-0.0849611 0.0883696 0.0278927 +0.0410895 0.0670315 0.0294468 +0.0123862 0.0342845 -0.0119874 +-0.0861176 0.152173 0.0250218 +0.00146529 0.0341167 -0.0177588 +-0.0847663 0.132585 0.0488829 +0.041918 0.0732584 -0.00676718 +-0.0704834 0.174975 -0.0436743 +0.0101806 0.114501 -0.0173735 +-0.0274005 0.0647434 -0.0304718 +0.00306398 0.0374048 0.023868 +-0.0908043 0.122683 0.00627651 +-0.0126271 0.0337462 -0.0239473 +0.0294467 0.0623083 -0.0198501 +-0.031353 0.158667 -0.0125849 +-0.0600161 0.129661 -0.00742185 +0.0141451 0.0740257 0.0538731 +0.0348792 0.0378052 0.00236551 +-0.0223477 0.16248 -0.006155 +0.0184989 0.11258 0.037522 +-0.0107925 0.18028 -0.0267448 +0.0112772 0.0752122 -0.0313695 +-0.0481785 0.0341964 0.00728185 +-0.0564997 0.107064 0.0398466 +-0.0510086 0.119975 -0.0128249 +-0.0142596 0.175663 -0.0267921 +-0.028881 0.124884 0.00195054 +-0.0744184 0.069256 0.0261761 +-0.0527672 0.0812315 -0.0212685 +0.0424296 0.0696684 0.0278335 +-0.0272214 0.163934 -0.00616346 +0.0566888 0.0635446 0.0256358 +0.0446243 0.0959671 0.00617079 +-0.0160443 0.174209 -0.0181164 +-0.0310058 0.156198 -0.0100049 +-0.039513 0.166742 0.00312951 +-0.0651923 0.176525 -0.0608469 +-0.0649089 0.110873 0.0375872 +-0.0545067 0.0904158 0.0449797 +0.0328041 0.0682575 -0.0177764 +0.0296649 0.110072 0.0343033 +-0.00848516 0.121007 0.0363393 +-0.0284943 0.0674472 0.03888 +0.0207654 0.126697 0.0144664 +-0.0231479 0.0919482 0.0509374 +-0.0105985 0.0406145 -0.0262787 +0.0525369 0.0651172 0.0279377 +-0.0709498 0.165209 -0.0469921 +0.0101258 0.125306 -0.00703851 +-0.0198334 0.107697 -0.0220521 +0.0228667 0.107306 -0.0156684 +0.0410305 0.0422896 -0.000687891 +-0.0687631 0.080836 -0.0170666 +-0.0685062 0.142066 -0.00982847 +-0.0288706 0.171229 -0.00855169 +-0.0870246 0.129415 0.000309032 +-0.0367401 0.0754253 -0.0187666 +-0.0231137 0.159172 -0.011899 +-0.0445 0.113887 0.0346508 +-0.0617979 0.154608 0.0289232 +0.0322191 0.117688 0.00875184 +0.00258681 0.125467 0.0322572 +-0.0668846 0.117985 -0.00889164 +-0.0560239 0.144237 -0.00161522 +-0.0939473 0.122782 0.0142819 +-0.057663 0.155278 0.0187721 +-0.0653495 0.0459059 0.00467835 +-0.0838817 0.150077 0.00420446 +-0.0574972 0.100168 0.0430053 +0.0447715 0.070791 0.0233171 +0.0114258 0.129163 0.0238841 +-0.0415072 0.0605699 0.0406995 +-0.0495023 0.0862453 0.0455995 +-0.0309567 0.166794 -0.00630909 +-0.0310964 0.125815 0.0157855 +0.0577493 0.0579199 0.00320063 +-0.00748502 0.105882 0.0440003 +-0.0594987 0.0932573 0.0451741 +-0.0584823 0.080492 0.0436889 +0.0565518 0.0722252 0.0100192 +-0.0154726 0.123613 0.0307813 +-0.017794 0.0799068 -0.038901 +-0.0670193 0.0901061 0.04379 +-0.0506534 0.0619401 -0.0109597 +-0.0284985 0.0631152 0.0376198 +0.0405765 0.0793262 0.0323176 +0.0350622 0.0909926 -0.0162992 +-0.0679473 0.136882 0.0457212 +-0.0626008 0.160001 -0.0205855 +0.0143086 0.0623633 -0.0295361 +0.00349883 0.0605728 0.0559342 +0.0235231 0.0943993 -0.0219282 +0.0425314 0.0623712 0.0287546 +-0.0352518 0.156597 0.00331287 +-0.0807586 0.0950245 -0.00854945 +-0.085825 0.114595 0.0464925 +0.0420636 0.0915328 -0.00679501 +-0.0369296 0.0455099 -0.0248207 +-0.0610521 0.0460525 0.00962048 +-0.0476199 0.057734 -0.011287 +-0.0595357 0.0400627 -0.00844467 +-0.0604419 0.114971 -0.0134731 +-0.016194 0.128088 0.0051496 +-0.0365847 0.122192 -0.00920846 +-0.0464591 0.0345029 0.0305523 +-0.0644598 0.0432795 0.035714 +-0.0241405 0.168248 -0.0186857 +-0.0743787 0.145821 -0.0108474 +0.0173308 0.0566344 -0.0283721 +-0.0548894 0.136747 0.0311423 +-0.0579822 0.0343384 0.0317603 +-0.0262958 0.0634474 0.0394208 +-0.0183558 0.127798 0.00725695 +-0.0750251 0.152273 0.0347437 +-0.0648702 0.0334576 -0.000853911 +-0.0610584 0.138406 -0.00654552 +0.0224766 0.0920198 0.0478397 +0.044722 0.0945895 0.0131657 +-0.0873336 0.126682 -0.000726608 +-0.0880434 0.125329 0.00027907 +-0.0364509 0.174337 -0.00256774 +-0.053938 0.138144 0.0289679 +-0.00559979 0.114688 -0.0175182 +-0.00635915 0.0931082 -0.0347376 +-0.0861558 0.100815 0.00240792 +0.0184724 0.0934238 0.0476306 +-0.000245612 0.0350857 0.0144067 +-0.0547132 0.153591 0.0213081 +0.0445999 0.0931357 0.00219092 +-0.0649995 0.134056 -0.00807462 +-0.0360819 0.0351453 0.0214963 +0.0444988 0.0569914 0.0320977 +-0.0597101 0.0723346 -0.0163812 +-0.0468406 0.0985145 -0.021833 +-0.0397006 0.0666136 -0.0148744 +-0.0847301 0.0966436 -0.00257686 +-0.00176079 0.0741065 -0.0358743 +-0.0671962 0.0736816 0.0379285 +-0.0347085 0.169768 -0.00115359 +-0.0213445 0.0916844 -0.035421 +-0.0625559 0.150623 -0.0205762 +0.055585 0.0535517 0.00220948 +-0.0136228 0.128915 0.00609854 +-0.0654189 0.16417 -0.0217177 +-0.0613445 0.0434338 0.042412 +-0.0144732 0.096429 0.0522087 +-0.0707666 0.171245 -0.0323024 +-0.0713393 0.134067 0.0496215 +-0.0458732 0.104238 -0.0208285 +-0.0551833 0.07213 0.0401196 +0.0364832 0.0422343 0.0281778 +-0.0336503 0.0577563 -0.0112696 +-0.0810791 0.117571 0.0486733 +0.044724 0.0588042 -0.00496063 +-0.0568258 0.120959 -0.0097287 +-0.0257724 0.0797722 -0.0374309 +-0.0800654 0.121688 0.0502425 +-0.0569634 0.0335771 0.00964709 +-0.00939357 0.0354504 -0.0173725 +0.046214 0.0637709 -0.0019104 +0.00900714 0.0383394 0.0314785 +0.0457806 0.0890199 0.00717609 +-0.0524951 0.0747684 0.0423102 +0.0334058 0.0446363 -0.00548551 +-0.063072 0.0346346 0.0391063 +0.0073001 0.0907939 -0.0322622 +0.026147 0.0875952 0.0467145 +0.0130004 0.0419341 0.0448362 +0.0263999 0.0348437 0.0163952 +-0.0056357 0.0466988 -0.0297075 +-0.000747471 0.0987058 -0.0265343 +-0.0688283 0.0966095 -0.0161149 +0.00300687 0.0991424 0.049182 +-0.0154864 0.0814755 0.0571167 +-0.074497 0.120396 0.0533632 +-0.0748436 0.114924 -0.0060803 +-0.0168418 0.107354 -0.0217003 +-0.0459377 0.145792 0.000601046 +-0.0487849 0.0715634 0.0402545 +-0.0581679 0.154986 0.022946 +0.044397 0.0945546 0.0171571 +-0.0810292 0.0940061 0.0336494 +0.032953 0.0994589 0.0373001 +-0.0181454 0.0347978 0.0451006 +-0.0487902 0.0855221 -0.0217064 +-0.0776336 0.147268 -0.0038625 +-0.0891133 0.14743 0.0101992 +0.0134061 0.0767276 0.0545687 +-0.0451757 0.14769 0.00639824 +0.0340849 0.114614 0.00225198 +-0.0494981 0.105619 0.0396922 +-0.0291786 0.175627 -0.0167894 +0.0516271 0.0736236 0.0155669 +-0.0333156 0.0365169 -0.0174853 +-0.00225297 0.0388793 -0.00041461 +-0.0884617 0.14585 0.0310303 +-0.087958 0.12395 0.000268768 +-0.0637456 0.154158 0.00252195 +-0.0680618 0.0606588 0.013756 +0.00946449 0.0616923 0.0540126 +-0.00707285 0.12974 0.0027455 +-0.0190315 0.0389958 0.035931 +-0.00971778 0.0670387 -0.0360005 +0.0406669 0.102735 -0.000789188 +-0.085128 0.0845897 0.0244984 +0.00248558 0.111415 0.0422707 +0.00320889 0.0824712 -0.0345101 +-0.0467495 0.117966 -0.0147678 +0.0250223 0.110364 -0.0129553 +-0.044347 0.146755 0.000226372 +-0.0616655 0.144455 -0.00523057 +0.000474346 0.0977989 0.0522897 +0.0207702 0.036271 0.0339301 +0.0400498 0.0387801 0.0063192 +-0.0199993 0.185902 -0.0200623 +0.018427 0.0917703 -0.0251723 +-0.0354635 0.0860418 0.0431394 +-0.0475855 0.0518372 -0.00929506 +0.0429858 0.0691484 -0.00178958 +-0.0244489 0.052187 0.0413714 +-0.0500639 0.141673 0.0143962 +0.0144323 0.129298 0.0192627 +-0.0561449 0.04824 0.0383427 +0.0358665 0.0404526 0.0260172 +-0.0213253 0.0444675 0.0531428 +-0.0609289 0.112535 -0.0147528 +-0.0699845 0.139935 -0.00772138 +-0.0748631 0.106362 -0.00967707 +-0.0346028 0.0344648 0.0366099 +-0.0425153 0.118993 -0.0138741 +0.0153464 0.0537553 -0.0279934 +-0.0719831 0.170733 -0.0298702 +0.0460203 0.0848226 0.00718276 +-0.0760167 0.15688 -0.0219252 +-0.010059 0.109235 -0.0217082 +0.0010095 0.0346721 0.0439005 +-0.0198215 0.0841085 -0.0387066 +-0.020574 0.115387 -0.0161841 +-0.00203672 0.0345877 -0.0169988 +-0.0424883 0.0846004 0.0426298 +-0.0313435 0.0707327 -0.0274782 +-0.0490828 0.13552 0.0213898 +-0.0481015 0.157608 -0.00698963 +-0.0579692 0.0408152 0.0462221 +-0.0682257 0.127075 0.0505767 +-0.0434944 0.0733818 0.0425428 +-0.0905017 0.114314 0.0223543 +0.0242723 0.0647548 -0.0237835 +0.050682 0.0731977 0.010749 +0.0604945 0.0595549 0.015166 +-0.0490636 0.126668 -0.00583208 +0.00647697 0.0459611 0.0484012 +0.0279051 0.0395203 0.0288639 +-0.0314585 0.0335695 -0.0237257 +-0.0485262 0.0344313 0.0301756 +-0.0386172 0.0505956 -0.0110053 +-0.000657388 0.0511382 -0.0308268 +-0.0630072 0.0689485 0.0358468 +0.0316541 0.0351286 0.0116939 +-0.0517065 0.163863 0.00241874 +-0.0634695 0.0445577 0.0356919 +-0.0832566 0.147367 0.0370632 +0.02323 0.0762417 -0.0259573 +-0.0735922 0.0833012 0.0392631 +-0.00431736 0.130694 0.00665461 +-0.021599 0.0382532 0.00358087 +0.0465019 0.0778624 0.0111839 +0.0604451 0.0678689 0.0141533 +0.0213931 0.0489728 -0.0223035 +-0.0630692 0.153725 -0.0105955 +-0.0236572 0.0507797 -0.028024 +0.00430293 0.0625774 -0.0325544 +0.0421362 0.0845969 0.0293292 +0.010951 0.0562864 0.05258 +0.0369412 0.107321 0.0271722 +0.0502975 0.0560957 -0.00457555 +0.0410804 0.10284 0.0191681 +0.0102664 0.0739304 0.0552835 +-0.0397448 0.172952 -0.00234724 +-0.0829232 0.125068 -0.00442148 +-0.0284893 0.0903534 -0.0305816 +-0.0616586 0.172539 -0.056588 +0.0182369 0.0749953 -0.0283712 +-0.0168303 0.0382802 0.00815469 +0.0453551 0.0805854 0.0221747 +-0.0718567 0.0701514 0.0311867 +-0.0814119 0.152728 0.0295837 +0.0555021 0.0730293 0.0140468 +0.00650419 0.123782 0.0339598 +0.0422452 0.0986357 -0.000817871 +-0.072904 0.112135 -0.00834183 +-0.00786498 0.13001 0.00533674 +-0.0614753 0.15686 -0.0265876 +-0.0234913 0.103006 0.0434545 +-0.0093342 0.174192 -0.0247468 +0.048187 0.0717514 0.00605259 +-0.0554773 0.0820103 0.045038 +-0.091005 0.124034 0.00628346 +-0.0147917 0.0951887 -0.0329173 +-0.00125147 0.122854 0.0353 +-0.017497 0.0485942 0.047882 +0.0194854 0.0989751 0.0466096 +-0.0889579 0.0901579 0.00845534 +-0.065396 0.0605193 0.0180241 +-0.0469507 0.168415 -0.00396135 +0.0205156 0.111203 0.0377036 +-0.0928924 0.122885 0.0362699 +0.0213879 0.0686569 0.0484685 +0.0214143 0.0463213 0.0412437 +0.00882931 0.0373958 0.0286749 +0.0465562 0.0764652 0.0121829 +-0.0618529 0.153757 -0.0195806 +-0.0262234 0.119963 0.0294562 +-0.0354913 0.0889091 0.0432238 +0.037993 0.109314 0.0194453 +-0.0377299 0.0739307 -0.0178742 +-0.0184902 0.0815159 0.0575038 +-0.0314396 0.0637247 -0.0204391 +-0.0825513 0.110697 0.0307352 +-0.0728404 0.156111 0.0119063 +-0.0663982 0.164105 -0.0192035 +0.0062922 0.0654161 -0.0325779 +-0.0624759 0.0959475 0.043683 +-0.033686 0.0637452 -0.0146972 +0.0353693 0.102677 -0.0107148 +-0.0710479 0.166372 -0.0194754 +-0.059243 0.0367531 0.0461369 +-0.0908243 0.114994 0.023547 +-0.0650258 0.156351 -0.0487028 +-0.034444 0.159452 0.00265373 +0.0357616 0.0967769 -0.0118087 +0.044965 0.0903773 0.0181662 +0.0498767 0.0734333 0.0134213 +-0.031608 0.0496402 -0.0193495 +0.0404724 0.0408436 0.0229665 +-0.0473115 0.134637 0.0112388 +0.00743122 0.0352845 0.0446812 +-0.0297131 0.0509006 -0.0193584 +-0.0241845 0.177125 -0.0200954 +-0.0632603 0.157387 -0.0151607 +-0.0598965 0.0343774 0.0365453 +-0.0242309 0.0382399 0.0265535 +0.0433792 0.0972945 0.00218055 +-0.00691412 0.124317 0.0332409 +0.00451269 0.0561377 0.0533474 +-0.00250438 0.0842991 0.0575402 +-0.0903673 0.145762 0.0273033 +-0.0523714 0.143148 0.0193902 +0.0362345 0.0967824 0.0350211 +0.0264539 0.106068 0.0383874 +-0.0729303 0.131104 -0.00814819 +0.0116228 0.130194 0.0054038 +-0.0409771 0.113795 -0.0164017 +-0.0828306 0.150071 0.00319212 +-0.0676468 0.0338307 -0.00583252 +-0.0857374 0.0792227 0.0125087 +-0.0651015 0.0410328 0.0295625 +-0.0136795 0.0987823 0.0477955 +0.0258821 0.0794179 -0.0243188 +0.0449394 0.0734628 0.0226146 +-0.0694849 0.173671 -0.0550315 +0.0142482 0.127965 9.03059e-05 +0.0564285 0.0727253 0.0143999 +-0.0172735 0.180097 -0.0253788 +-0.0699136 0.162391 -0.0489495 +-0.09118 0.143373 0.022161 +-0.0644984 0.100116 0.0422372 +-0.0564709 0.0847764 0.0446514 +-0.043754 0.152254 -0.00662286 +-0.0547181 0.0708998 -0.0155975 +-0.0401471 0.163848 0.00326215 +-0.0814342 0.154656 0.0132857 +-0.0513196 0.0514695 0.0138904 +0.00680734 0.129132 0.0265205 +-0.0614938 0.0959769 0.0438595 +-0.0091676 0.171172 -0.0227371 +-0.0769695 0.154154 -0.0139015 +-0.0502302 0.126885 0.0326315 +0.00555777 0.034446 -0.000384949 +-0.0206136 0.0379294 -0.0283016 +0.00719386 0.0810104 -0.0336874 +0.0390033 0.0387188 0.0172773 +-0.0737727 0.0928414 0.040556 +-0.0829975 0.0763193 0.0155222 +0.0461381 0.0792322 0.00519228 +0.0313444 0.106098 0.0349666 +-0.0157326 0.0383302 0.0246146 +-0.0739329 0.072514 0.0322154 +-0.0287063 0.168278 -0.00832187 +-0.02709 0.0386639 -0.0126398 +-0.0689895 0.156345 -0.00130196 +-0.0622523 0.152181 -0.0215758 +-0.0408691 0.158042 0.00401656 +-0.0324935 0.0903869 0.0442776 +0.0156162 0.0904755 -0.0278196 +0.00543406 0.120555 -0.0138758 +-0.0874054 0.110457 0.012344 +-0.0534973 0.0903982 0.0447559 +-0.0007305 0.0683317 -0.0340878 +-0.0847135 0.152577 0.00925173 +0.0453586 0.0547792 -0.00610681 +-0.0513173 0.146268 0.0144074 +0.0146587 0.125796 -0.00358107 +-0.0790281 0.166651 -0.0329632 +-0.0519257 0.0563169 0.0201359 +-0.0206011 0.0382174 0.00381729 +-0.0499923 0.0342577 0.028256 +0.0222487 0.0365239 0.0303911 +-0.0762222 0.0981393 0.0371985 +-0.0381245 0.162196 -0.0129852 +-0.0462852 0.149202 0.00834502 +0.039774 0.0618507 -0.00575724 +0.0461841 0.0778325 0.00618859 +-0.0770439 0.154813 -0.0101321 +-0.0615001 0.152383 0.000341367 +-0.0665808 0.0334125 0.000644743 +-0.0212653 0.0381372 0.0218515 +-0.071123 0.111741 0.0467572 +-0.0265438 0.177186 -0.00862049 +-0.0523481 0.125498 -0.00654313 +-0.0522635 0.0343446 0.0312176 +0.0191745 0.060499 0.0487078 +-0.0855607 0.111744 0.0263451 +-0.0360977 0.156596 0.00383263 +-0.0479431 0.0356599 -0.0132734 +0.0366613 0.0821332 0.0372523 +-0.0478798 0.107016 -0.0192852 +-0.0356524 0.0460406 0.0421919 +0.00919662 0.0865327 -0.0319845 +-0.0808705 0.11922 -0.0043482 +-0.0335583 0.116878 -0.0136466 +-0.0112898 0.0395292 0.0388441 +-0.0194927 0.0814879 0.0571676 +0.0239403 0.124821 0.0127882 +-0.0444942 0.105717 0.0408954 +-0.0484929 0.162245 0.00645185 +-0.00849807 0.0801615 0.0580203 +-0.0487025 0.121311 -0.0122547 +0.00400584 0.0386131 0.0458842 +-0.00449485 0.0488681 0.0504112 +-0.0507263 0.122615 0.0336033 +-0.0801811 0.108648 -0.00360377 +0.029758 0.0352966 0.00556049 +-0.0236293 0.0665652 0.045154 +0.0470549 0.0602552 -0.00440662 +-0.059554 0.155543 0.0209921 +-0.00550703 0.0787847 0.0579843 +-0.0451509 0.0424209 -0.0143059 +-0.0674032 0.144345 -0.0161484 +-0.0621766 0.125515 0.0434733 +-0.0885651 0.0963045 0.0227197 +-0.0623911 0.154382 0.0301734 +-0.078298 0.0745267 0.0278337 +0.00377395 0.13125 0.00536065 +-0.0351573 0.0361738 0.0471926 +-0.0517432 0.0487299 0.0143843 +-0.0578034 0.0854472 -0.0211977 +0.0151488 0.10026 -0.0226403 +0.0225321 0.104677 0.0415312 +-0.0605798 0.155686 0.00466574 +-0.0891628 0.0942977 0.0214104 +0.0393896 0.106975 0.00316583 +0.00351619 0.0800296 0.056385 +0.0405703 0.105644 0.0131657 +-0.0507419 0.0753249 -0.0179378 +0.0269605 0.111014 -0.0116501 +0.0303852 0.098223 0.0405823 +0.0431361 0.0419917 0.0224684 +-0.0738026 0.1492 0.0397758 +-0.0725455 0.148857 -0.0337299 +-0.072371 0.0860632 0.0407672 +0.0158441 0.0475203 0.043749 +0.0104341 0.0346525 0.0368683 +0.0344146 0.0399125 -0.00185272 +-0.0764595 0.111219 0.0459768 +0.042138 0.101461 0.00217211 +-0.0213522 0.127058 0.00761225 +-0.0556879 0.0677603 -0.0123408 +0.00811587 0.129858 0.0241077 +-0.0637641 0.044271 -0.0022694 +-0.0104962 0.0897854 0.05669 +-0.0147283 0.0657495 -0.0376113 +-0.0881508 0.144556 0.0335371 +-0.0807759 0.0773963 -0.00349851 +-0.0388999 0.0345526 0.0391301 +0.0239365 0.0972468 -0.020928 +-0.0559996 0.126683 -0.00642409 +0.015329 0.118191 -0.013375 +-0.0894904 0.112329 0.0187618 +-0.0771865 0.153815 0.000183792 +0.00297917 0.0389607 -0.010651 +-0.0571826 0.122684 0.0401181 +0.0453844 0.091806 0.0121583 +-0.0908751 0.135104 0.0182068 +0.0216273 0.125269 0.00337714 +0.0572674 0.0722428 0.0147076 +-0.0417782 0.0473939 -0.012205 +-0.0658407 0.0938498 -0.0179236 +0.0102801 0.12364 -0.00922404 +0.00517588 0.113065 -0.0197995 +0.0139965 0.0343089 -0.00230394 +-0.0757024 0.160453 -0.0116926 +-0.0694905 0.10551 0.0380162 +0.0123252 0.0595168 -0.0292981 +0.00242842 0.0916453 -0.033159 +0.0363451 0.0519755 -0.00662669 +-0.0899083 0.121615 0.0458595 +-0.0569713 0.125238 -0.00711806 +-0.0616474 0.0458147 0.0384356 +-0.0816857 0.104685 0.0297488 +0.0417455 0.0760505 -0.00673474 +-0.0249373 0.175681 -0.0116247 +0.0233583 0.0592365 -0.0255115 +0.0296356 0.107455 0.0360045 +-0.0171544 0.0383178 0.00624466 +-0.0338857 0.12324 -0.00632922 +-0.0295434 0.168268 -0.00777595 +0.0237606 0.105983 -0.0162548 +-0.0636907 0.124164 0.0466174 +0.0299589 0.119939 0.0150519 +0.0387947 0.101959 0.0281808 +0.0346979 0.108688 0.0292348 +-0.00481267 0.108148 -0.0225124 +-0.0921162 0.126957 0.038246 +-0.0708767 0.0346286 -0.00100073 +-0.0434981 0.0803632 0.0422528 +-0.00776303 0.0742012 -0.03739 +-0.0164203 0.103082 -0.0232082 +-0.0368601 0.0336856 -0.0211611 +-0.0794788 0.13585 0.0504167 +-0.0622192 0.166249 -0.0495907 +-0.0632785 0.0347611 0.0232648 +-0.0678048 0.17421 -0.0455841 +-0.0292876 0.113893 -0.0165575 +-0.0116236 0.0451107 -0.0281433 +-0.0853661 0.0910995 0.0281927 +0.0152572 0.124805 0.0295869 +-0.0730257 0.141351 -0.00730576 +-0.0694123 0.111827 0.045291 +-0.048008 0.0642705 0.0370013 +-0.000600787 0.0405329 -0.0249772 +-0.0932444 0.124186 0.027283 +-0.050904 0.119772 0.0333476 +-0.00274076 0.0726647 -0.0356738 +-0.0635974 0.151927 -0.0324488 +0.025021 0.085012 -0.0240764 +-0.0749218 0.0661459 0.00857247 +0.0115292 0.119123 0.0361473 +0.0363972 0.0461521 -0.00588406 +0.0385505 0.0378908 0.0124577 +-0.0599745 0.14101 0.03437 +0.00637279 0.049483 -0.0283693 +-0.0896361 0.0969931 0.0144152 +0.0291455 0.0491758 0.0366259 +-0.013551 0.0588296 0.0525443 +-0.0381244 0.127641 0.0146907 +-0.00888364 0.107351 -0.0226177 +-0.0497129 0.165582 0.00102101 +0.0449595 0.0889486 0.000172046 +-0.0339085 0.177047 -0.0109944 +-0.0278445 0.0535534 0.0370258 +-0.0334735 0.0337737 0.0142583 +-0.0926366 0.121498 0.0312794 +-0.0298476 0.105726 -0.0219826 +-0.0771466 0.113816 0.049094 +0.0166749 0.0347919 -0.00596505 +-0.0767718 0.0716181 -0.00247133 +-0.0788159 0.0818529 0.0346403 +-0.0751616 0.0715622 0.0292788 +-0.0629391 0.12384 -0.00881569 +0.0155707 0.100538 -0.0224673 +0.0252284 0.116758 -0.00782512 +0.00112155 0.035712 0.0195623 +-0.0623204 0.0448503 0.0109236 +0.0577561 0.0565381 0.00419435 +-0.000697034 0.0626894 -0.03411 +-0.0739419 0.129646 -0.00820737 +-0.0552142 0.155428 0.0123927 +-0.0749344 0.128178 -0.00819506 +0.0183304 0.0579992 -0.0277502 +-0.0259227 0.123138 -0.0042558 +0.0130981 0.124462 0.0316831 +-0.0723893 0.172498 -0.0357772 +-0.015947 0.124632 0.0285893 +-0.0583387 0.0706756 0.0389009 +-0.0347052 0.0384254 -0.0102399 +-0.0149752 0.125602 0.0274605 +-0.0153278 0.0389782 0.0349161 +-0.0482032 0.131003 0.0267578 +0.0538412 0.0539826 0.0267309 +-0.0845696 0.12714 0.0502672 +0.0343613 0.111866 -0.00251995 +-0.0679623 0.16261 -0.0140168 +0.0251056 0.0902557 0.0469821 +-0.0373144 0.033633 0.00457247 +0.00149673 0.110036 0.0425823 +-0.0886162 0.100967 0.00940891 +-0.0734724 0.155984 0.0233451 +0.00740252 0.0402134 0.0455033 +0.0454345 0.0918112 0.0111626 +0.0252284 0.0420597 0.0372934 +0.026048 0.117275 -0.00637096 +-0.0768401 0.178514 -0.0509284 +-0.0719676 0.138437 -0.00730592 +0.00750673 0.0758763 0.0563548 +-0.0485658 0.0404434 -0.0115683 +-0.0402074 0.168164 -0.0113973 +-0.044494 0.0987314 0.042632 +-0.0530679 0.140053 0.026392 +0.0521064 0.0510719 0.0259326 +-0.0545309 0.0352136 0.0455493 +-0.0717133 0.0715245 -0.00752229 +-0.0899797 0.128138 0.00527223 +0.0045004 0.121001 0.0358516 +-0.0641393 0.143504 -0.0105249 +-0.0769685 0.156212 -0.0102521 +-0.0645952 0.155196 -0.0084031 +0.0323835 0.0460752 0.0307026 +-0.023205 0.178608 -0.0204967 +-0.042033 0.113762 -0.0163433 +-0.0512269 0.150712 0.0135153 +0.00120164 0.0839391 -0.0353946 +0.0300054 0.104778 0.0365239 +-0.00649214 0.0965537 0.0536631 +-0.0289152 0.0846603 -0.0346291 +0.0207024 0.0373647 0.039246 +-0.0386568 0.0577511 -0.0111914 +-0.0605191 0.153857 0.0308432 +0.0410047 0.0395957 0.0043142 +-0.0837262 0.151367 0.00522149 +-0.0378805 0.108506 -0.019759 +-0.0169176 0.183111 -0.0193016 +-0.0614849 0.0946016 0.0445824 +0.0332816 0.116574 0.0106008 +-0.0378618 0.101418 -0.0215553 +0.0383745 0.038179 0.01581 +0.010493 0.111264 0.0393941 +0.0353685 0.0600237 -0.0127796 +-0.0203175 0.0933679 0.052311 +-0.0434938 0.0619471 0.0402773 +-0.0393599 0.0418158 -0.0263353 +-0.0588856 0.105471 -0.0181522 +-0.0278953 0.124828 0.00229374 +-0.0894349 0.136561 0.0381888 +-0.0455406 0.124353 -0.00945534 +-0.0850289 0.111596 0.00326083 +0.01399 0.106595 -0.01887 +-0.0765357 0.0692333 0.0204809 +-0.0741239 0.165568 -0.0191297 +-0.056116 0.131133 0.036427 +-0.0715838 0.158191 -0.0409255 +-0.077037 0.111295 -0.0046823 +-0.0135016 0.0573891 0.0517499 +0.0374899 0.0469458 0.0313688 +-0.0297919 0.108873 -0.0192723 +-0.0616758 0.113831 0.0370124 +-0.0157188 0.0628375 -0.0366012 +-0.0879795 0.148554 0.029057 +-0.0890892 0.0955882 0.00942496 +-0.0709327 0.178806 -0.0496057 +0.0454967 0.0611109 0.0306935 +0.0193158 0.0835035 0.0508805 +0.000580692 0.131584 0.0113306 +-0.0615895 0.155312 -0.0215829 +-0.0134922 0.122339 0.0335983 +0.0458248 0.0806172 0.0201703 +-0.0225646 0.0983245 -0.0242201 +-0.0682478 0.066271 0.0282875 +0.0302092 0.117283 0.0265434 +-0.0829482 0.128017 -0.00457928 +-0.0715343 0.141411 0.0464325 +-0.0800761 0.0936246 -0.00957758 +-0.0851808 0.153525 0.0149377 +-0.0865771 0.124349 0.048115 +-0.0221188 0.100222 -0.0241961 +0.0224909 0.111137 0.037371 +0.00736705 0.0494733 -0.028237 +0.0432386 0.0750761 0.0273062 +-0.0564476 0.153922 0.0264803 +-0.0288608 0.0448354 -0.0281934 +-0.0776003 0.156937 -0.0149108 +-0.0784376 0.171472 -0.0389273 +-0.0178474 0.12806 0.016159 +-0.0284556 0.0472262 0.0488083 +-0.0677451 0.0629578 0.0224748 +-0.0567391 0.0576068 -0.000420382 +-0.0769537 0.132513 -0.00657383 +-0.0837476 0.0952109 -0.00455405 +-0.0427254 0.0358312 -0.0275925 +0.00623069 0.0782309 -0.0341321 +-0.0758642 0.117897 -0.00698249 +-0.0903736 0.13787 0.0221843 +-0.027962 0.155009 -0.00579987 +-0.0193391 0.0386082 -0.00732295 +-0.0237931 0.0698259 -0.0366341 +-0.015124 0.037267 -0.0266656 +0.0113671 0.0479427 -0.0268055 +0.0141489 0.0347135 0.0249225 +-0.0669549 0.160975 -0.0568649 +0.0208979 0.0359371 0.0087849 +-0.0570669 0.0493259 -0.00137722 +-0.0186112 0.0386738 -0.00909396 +-0.0055195 0.0443362 0.047543 +-0.0714237 0.153981 -0.0448933 +0.0119572 0.125728 -0.00550935 +-0.0310683 0.0679104 -0.0254551 +0.0514754 0.0531199 -0.00283685 +0.0135274 0.12988 0.0160733 +-0.0728856 0.148047 -0.0249504 +-0.0233454 0.122752 0.0259903 +-0.0578948 0.0983776 -0.0200563 +-0.0203263 0.0825295 0.0568715 +-0.0643532 0.142586 -0.00864957 +-0.0793976 0.151048 0.0347829 +0.0356609 0.104701 0.030636 +0.0063888 0.115364 -0.0182909 +-0.0289964 0.0383539 -0.00532847 +-0.0834239 0.0965619 -0.00458039 +0.019508 0.109842 0.0390589 +-0.0767379 0.10491 0.0348158 +-0.0825915 0.143398 0.0421649 +0.0182147 0.0834619 -0.0281698 +-0.0633435 0.060722 0.00207171 +0.0428335 0.076148 -0.00478426 +-0.0724349 0.0644357 0.0131399 +-0.0114637 0.165492 -0.0149909 +-0.0493961 0.033823 0.00737414 +0.0502518 0.0446339 0.0182039 +-0.0439305 0.0432632 0.0429545 +-0.0713305 0.0628284 0.00935991 +-0.0276378 0.158958 -0.0125395 +0.0600492 0.0581198 0.0161748 +0.00134506 0.0511101 -0.0304682 +-0.0692332 0.158118 -0.0519432 +-0.0133594 0.127978 0.0236019 +0.0292021 0.0619142 0.0421314 +-0.0667582 0.180263 -0.0553199 +-0.0197539 0.0671131 -0.0375162 +-0.0704746 0.040884 0.00781861 +-0.049499 0.112564 0.0357174 +-0.0322502 0.0367926 -0.0305484 +-0.00789583 0.129197 0.00105287 +-0.016169 0.117727 -0.0146898 +0.0295964 0.0580473 -0.0178274 +-0.0883598 0.0874311 0.00547496 +-0.0274913 0.101587 0.0432231 +-0.0768992 0.155831 0.0192356 +-0.0364902 0.0634253 0.0412069 +-0.0388025 0.125966 -0.00521606 +0.0196905 0.0550135 0.047657 +0.0571135 0.071717 0.0176058 +-0.0064991 0.0952675 0.0547927 +0.0174901 0.0346463 0.0220409 +-0.0024963 0.10305 0.0439671 +-0.0184804 0.0543192 0.0487134 +-0.0334418 0.0335662 -0.0297364 +-0.0620472 0.176838 -0.0608311 +-0.0308715 0.0522855 0.0371048 +-0.0367079 0.0695483 -0.0163464 +0.0158791 0.123986 0.0298499 +-0.0320536 0.0356449 0.0500425 +-0.0493943 0.14168 0.0103932 +-0.0558858 0.106922 -0.0182628 +0.059454 0.0647075 0.0208869 +0.0152596 0.125955 0.0281714 +0.038478 0.0980354 0.0312187 +-0.0744916 0.146991 0.0423999 +-0.0846211 0.0992422 0.0286106 +-0.0661191 0.156294 0.0171964 +-0.0794888 0.111206 0.0453002 +0.00519891 0.0880579 -0.0334439 +0.0153315 0.0346194 -0.0136599 +0.0395267 0.0632302 -0.00776648 +-0.0463407 0.0629206 0.0382092 +-0.0514201 0.121192 0.0343754 +-0.0528867 0.0334295 0.0213081 +-0.062446 0.163101 -0.0455941 +-0.0770308 0.167319 -0.027484 +-0.041999 0.126936 -0.00419358 +0.0289857 0.090239 0.0438092 +-0.0634397 0.158343 -0.0445972 +0.00692319 0.0630369 0.0555875 +-0.0294344 0.0381755 0.00387704 +0.0228628 0.0351973 0.0171792 +-0.0738758 0.0993275 -0.0132564 +-0.0668982 0.151542 -0.0415298 +-0.0629724 0.133897 0.038809 +-0.0928035 0.121507 0.0322842 +0.0305387 0.0609912 -0.0187852 +0.0385799 0.0739884 0.0346445 +-0.0814052 0.08555 -0.00656718 +-0.0621323 0.0602572 0.0206983 +-0.0294013 0.0804353 -0.034602 +0.0164763 0.0348375 -0.0136598 +-0.0659203 0.122383 -0.00896938 +-0.0328324 0.0929676 -0.0240794 +0.000521824 0.0801146 0.0573693 +0.0221547 0.0979182 -0.0216266 +-0.0649149 0.0392337 0.0390271 +0.0351689 0.0928995 0.0387113 +-0.0125327 0.0502379 0.050201 +-0.05553 0.12546 -0.00656458 +0.0330446 0.111446 -0.00610948 +0.0255618 0.120425 0.027665 +-0.0243325 0.126263 0.00798048 +-0.0654853 0.0944999 0.0429585 +-0.0478356 0.0970782 -0.0220591 +-0.0332116 0.0851655 -0.0254848 +0.00641089 0.036109 -0.0234066 +-0.0192798 0.0610993 0.0494354 +0.0363164 0.11089 0.0231265 +-0.0705311 0.0972485 0.0414142 +-0.0514267 0.135712 0.0273837 +-0.0564984 0.0918565 0.0453856 +-0.042499 0.113906 0.034677 +-0.0717955 0.156396 0.0195489 +-0.0215446 0.0942792 -0.0320343 +-0.0246821 0.177174 -0.0112336 +0.0177118 0.0944604 -0.0240064 +-0.0881735 0.15196 0.0139234 +-0.000296991 0.0392472 -0.00781836 +-0.00248723 0.115552 0.0407434 +-0.0147779 0.0756914 -0.0387415 +0.0503819 0.0717878 0.00597587 +-0.0396993 0.117276 -0.0140617 +-0.0628784 0.16149 -0.0515871 +-0.0769868 0.0713943 0.0255408 +-0.01852 0.115493 0.0376203 +-0.0632135 0.155458 0.00808821 +-0.0244921 0.103004 0.0433541 +-0.0392444 0.0481623 -0.0129943 +0.0317796 0.0647744 0.0406274 +-0.00516147 0.100957 0.0442706 +-0.0196118 0.040807 -0.0284935 +-0.0288146 0.0436325 0.0510094 +-0.0690473 0.0727409 0.0365464 +-0.0478629 0.125952 -0.00709772 +-0.0456346 0.123874 0.0250844 +-0.0214969 0.0498836 0.0466158 +0.0515378 0.0461489 0.00621743 +0.0472621 0.0627303 -0.00287883 +-0.0738666 0.0846755 0.0394915 +0.0247439 0.0490967 0.0390469 +0.0150281 0.097439 -0.0231662 +0.0456884 0.0904192 0.00716979 +0.0173787 0.046209 -0.0233857 +-0.00349533 0.123738 0.0342998 +-0.0905223 0.128294 0.0420009 +-0.0733752 0.0741466 0.034437 +-0.0106209 0.130105 0.0129711 +-0.0754549 0.158227 -0.0249553 +-0.0125993 0.0922824 -0.0359459 +-0.064348 0.0611447 0.0212332 +-0.0246221 0.0450443 -0.0281165 +-0.0383306 0.0379343 0.0437226 +-0.0423655 0.110099 -0.0185262 +-0.0750214 0.166563 -0.0400315 +-0.0338231 0.0915286 -0.0241849 +-0.0857793 0.088721 -0.000547834 +-0.00485752 0.103786 0.0439754 +-0.0334914 0.0960174 0.044365 +-0.040497 0.0705056 0.0418211 +0.0309495 0.065969 0.041175 +-0.0649024 0.119454 -0.00881631 +-0.0326689 0.0382268 0.0507498 +0.0366581 0.0727136 0.0371657 +0.0102886 0.13098 0.0134608 +0.0549839 0.0534895 0.00121219 +0.0229081 0.0608908 -0.0255785 +-0.0578484 0.0576892 0.00460939 +-0.0380707 0.123893 0.0251235 +0.0425051 0.049941 0.0324381 +-0.0208164 0.0797246 0.0560382 +-0.0600611 0.155861 0.0164593 +0.0128031 0.126304 -0.00413421 +0.0254584 0.0383883 -0.00303811 +-0.0782251 0.104799 0.0333593 +-0.011635 0.0466548 -0.0295721 +-0.0227746 0.0968676 -0.024693 +0.00330234 0.0626197 -0.0330565 +-0.00750217 0.0787518 0.0577101 +-0.043485 0.109867 0.0381531 +0.000280959 0.0655552 -0.0344559 +0.0303619 0.0982175 -0.0159971 +-0.0671228 0.150867 0.0375155 +-0.0251523 0.0635221 0.0411049 +-0.0732036 0.147141 -0.0198634 +-0.0403541 0.121097 -0.0120881 +0.0144177 0.0388354 -0.0218485 +-0.0912331 0.114706 0.0382141 +0.0261502 0.120654 0.0264581 +-0.0131682 0.0974746 0.0509922 +-0.0718669 0.115007 -0.00776782 +0.0425779 0.0929869 -0.00379718 +-0.0228308 0.0881946 -0.0369029 +-0.00860718 0.0361712 0.0494902 +-0.0685057 0.159542 -0.0539539 +-0.0864902 0.103559 0.00540359 +-0.0697818 0.16064 -0.00887941 +-0.05157 0.0657725 0.0357523 +0.036411 0.0430004 -0.00393346 +-0.0617308 0.0752409 -0.0175405 +-0.0384866 0.112537 0.0353486 +0.0446565 0.076299 -0.00080692 +-0.0444716 0.165339 -0.00887164 +0.0234256 0.0994865 0.0445818 +0.0411691 0.0899632 0.029736 +-0.0188353 0.12777 0.00853266 +-0.079023 0.172207 -0.0429929 +-0.0509196 0.141445 0.00173554 +-0.013506 0.0486161 0.0481837 +0.0193259 0.0665212 -0.0284749 +-0.0472913 0.128011 -0.00322004 +-0.0626481 0.167836 -0.0465871 +-0.0304696 0.0875178 0.0438182 +-0.0917743 0.120197 0.0434965 +-0.0648107 0.0617811 0.00082735 +0.000497836 0.114196 0.0414191 +0.0574118 0.0647963 0.00219725 +-0.0558676 0.0941545 -0.0217392 +-0.0336084 0.073768 -0.0234794 +0.00599322 0.131555 0.0161709 +0.00890036 0.0630937 0.0549611 +-0.062689 0.110949 0.0372761 +0.000505603 0.092515 0.0555251 +0.0223468 0.121292 -0.00473526 +-0.0486224 0.0562169 -0.0104362 +-0.00349838 0.0938964 0.0554871 +-0.0444734 0.111133 -0.0175908 +-0.0110869 0.111309 -0.0199045 +-0.0706182 0.161097 -0.00919138 +-0.0852334 0.0992128 0.0278144 +-0.0739196 0.15466 0.0290556 +0.0296062 0.0693912 -0.0207509 +-0.0310679 0.0435994 -0.0290446 +-0.0381696 0.0351458 0.0102677 +0.0601731 0.0664558 0.0181654 +-0.0779755 0.159708 -0.0199256 +-0.0656034 0.0619186 0.0220381 +-0.0875197 0.139142 0.00819442 +0.057949 0.0523838 0.0161799 +-0.0789979 0.165257 -0.0319521 +-0.0651299 0.139658 0.0409855 +-0.021445 0.0539977 0.0453008 +-0.0896519 0.136557 0.0371913 +-0.0534965 0.0890047 0.0449968 +-0.0534319 0.15708 0.0101259 +-0.0328837 0.0835575 -0.0275315 +-0.0164672 0.0659336 0.0534892 +-0.0354329 0.0383545 -0.00847377 +-0.0708675 0.102264 -0.0137609 +-0.023563 0.126621 0.00971624 +0.0103735 0.0460953 0.0463477 +-0.0660593 0.179544 -0.0550745 +-0.0527874 0.0854974 -0.0215293 +-0.0859388 0.0819759 0.019473 +0.0105508 0.12954 0.0235608 +-0.0103855 0.174149 -0.0227989 +-0.0669072 0.0448192 0.00702222 +-0.0284871 0.0932302 -0.0255941 +-0.0674877 0.041922 -0.00126982 +-0.0650925 0.142629 -0.00933509 +0.0420248 0.0845075 -0.00777453 +-0.0790747 0.0713835 0.0198308 +-0.0261077 0.0372445 -0.0185929 +-0.0370217 0.0410946 -0.0286549 +-0.0635554 0.166233 -0.0355972 +-0.0218769 0.105849 -0.0224625 +-0.0880158 0.125695 0.0466833 +-0.0621699 0.128298 0.0417254 +-0.0849635 0.115612 0.0476218 +-0.0132844 0.180127 -0.0228495 +-0.0282267 0.181005 -0.00798034 +-0.0312929 0.0665317 -0.0234435 +0.0182349 0.0355117 -0.0116753 +0.0151438 0.128336 0.0223847 +-0.0440686 0.0364096 0.0444754 +0.00518099 0.090879 -0.0329112 +-0.00712692 0.130239 0.0200248 +-0.00350074 0.0760658 0.0587997 +0.0285239 0.105924 -0.0141978 +-0.0560757 0.0486306 0.0102324 +-0.0647346 0.0751547 -0.0168067 +-0.0681413 0.163425 -0.0155251 +-0.0632877 0.151202 -0.0295741 +-0.0467953 0.0573798 0.0374139 +-0.0434795 0.10013 0.0422114 +0.0285718 0.0898068 -0.0210622 +0.0330592 0.116487 0.0176444 +-0.0241054 0.0348343 0.0490127 +-0.0124791 0.0354015 -0.0179384 +0.0405961 0.0624185 0.0297312 +-0.081387 0.11145 0.0446717 +0.00150869 0.0675259 0.0561223 +0.00629906 0.0381702 -0.0111411 +-0.0201579 0.171232 -0.0211109 +-0.0418025 0.1163 -0.0150397 +0.00651017 0.0786147 0.0558016 +-0.0940189 0.11877 0.0172997 +-0.0685972 0.0635876 0.000162346 +-0.0328398 0.0722904 -0.0244709 +-0.0455312 0.131052 0.00748081 +-0.023441 0.181825 -0.0105699 +0.0108694 0.130662 0.0179509 +0.0123886 0.0463398 -0.0252064 +-0.0652697 0.118619 0.0495916 +0.00206776 0.0348089 0.0386094 +-0.0298407 0.0705727 -0.0304857 +-0.0632339 0.164684 -0.0315914 +0.0353918 0.0491057 -0.00653987 +-0.0392946 0.123101 -0.0101877 +-0.0885378 0.137788 0.0102157 +-0.0234958 0.100256 0.0443804 +0.04037 0.0460545 -0.00454494 +-0.016752 0.0336597 -0.0246752 +0.0413281 0.0697537 0.029756 +-0.077268 0.161738 -0.0185704 +0.00995573 0.0897855 -0.0311748 +-0.0494127 0.0345257 0.0351696 +-0.00258654 0.0376582 -0.0251248 +-0.0538672 0.149311 0.025406 +0.0281029 0.0968693 0.0425418 +-0.0296256 0.0384042 -0.00919904 +-0.0659714 0.070335 0.0357803 +-0.0792849 0.109686 0.041215 +-0.0609581 0.142927 -0.00458074 +-0.064489 0.16418 -0.0242498 +-0.0585553 0.060477 0.023496 +-0.0851998 0.104954 0.024348 +0.0164098 0.126062 -0.00187701 +0.0235925 0.125057 0.0140956 +-0.00865281 0.123002 -0.0103525 +-0.0132305 0.174198 -0.0268981 +-0.0453894 0.130637 0.0193744 +0.0162761 0.0694793 -0.03005 +-0.0894525 0.128349 0.0437622 +-0.0562473 0.0708294 0.0392023 +0.0180456 0.044911 0.0433906 +-0.0626788 0.119898 0.0446407 +-0.0206698 0.116197 -0.0150314 +0.051506 0.0461707 0.0202521 +-0.0541367 0.13422 -0.00388726 +0.0303748 0.106409 -0.0127112 +0.0453408 0.0805541 0.00120995 +-0.00350137 0.0788045 0.0582113 +-0.052917 0.144693 0.0213981 +-0.0810085 0.136808 -0.00286908 +0.0435987 0.0482711 0.0311843 +-0.00549934 0.085642 0.0570911 +-0.0414264 0.125093 -0.00826982 +-0.0534716 0.0490986 0.0276613 +-0.0833044 0.10329 0.0285866 +-0.0394866 0.111153 0.0363447 +0.00954728 0.0389439 0.0451085 +-0.035694 0.0666325 -0.0153314 +-0.0301817 0.12316 -0.0042413 +-0.0383432 0.127011 0.0175779 +-0.0603252 0.0707596 0.0383929 +-0.0249438 0.0380891 0.0543244 +0.0144999 0.10985 0.0401157 +-0.0387789 0.0392857 0.0427431 +-0.0390181 0.126516 -0.0038056 +-0.0628844 0.116571 -0.0108779 +-0.0718222 0.0666154 0.0237319 +-0.0176233 0.0640054 0.0519373 +-0.0878362 0.112676 0.0422322 +-0.0661452 0.115702 0.0482687 +-0.0464951 0.116619 0.0318843 +-0.0501411 0.130626 -0.00198394 +-0.0497482 0.0767922 -0.0184367 +-0.0234881 0.0462034 0.0522022 +-0.0739006 0.162422 -0.0359639 +-0.0262017 0.0878115 0.0498853 +-0.0133444 0.0389099 -0.0138542 +0.040243 0.0970923 -0.00582991 +-0.011153 0.129981 0.0142184 +0.0309714 0.035145 0.0133989 +-0.0426252 0.0534503 -0.0112074 +-0.0538286 0.0338166 -0.0117099 +-0.0622047 0.0394245 0.0433885 +-0.0746849 0.14995 -0.0294029 +-0.0611865 0.0441212 -0.00432669 +-0.0182092 0.177147 -0.0243125 +0.0435018 0.0542009 0.0324922 +0.0364352 0.0371002 0.0145635 +-0.0321091 0.03378 0.0163326 +-0.0627516 0.145959 -0.00957815 +-0.0054968 0.061946 0.0559894 +-0.0738575 0.159643 -0.0319319 +-0.0640268 0.154208 0.0310565 +-0.0679826 0.0819454 0.0421862 +-0.0571357 0.158766 0.00595884 +0.0416081 0.101418 0.000182195 +-0.0235633 0.0565791 0.042552 +-0.0707052 0.0656331 -0.000502385 +0.0151645 0.126939 0.0266898 +0.0319146 0.0808971 0.042698 +0.0591439 0.0594194 0.00516163 +-0.0517306 0.164095 4.31123e-05 +-0.0802487 0.109228 0.032428 +-0.0124889 0.0964872 0.0522501 +0.0122905 0.06666 -0.0305971 +-0.00890819 0.0389895 -0.0111716 +-0.0414812 0.0634467 0.0412468 +0.0440882 0.090317 0.0231627 +-0.048759 0.14421 0.00252118 +-0.0240109 0.113853 -0.0165323 +-0.0863077 0.083293 0.0084931 +-0.0848578 0.117602 -0.00112226 +-0.0758939 0.107753 -0.00831552 +-0.0240922 0.0551393 0.0417051 +-0.048723 0.134043 0.0239744 +-0.075211 0.159631 -0.0279486 +-0.0458972 0.108476 -0.0187253 +-0.0827664 0.0789303 0.000509537 +-0.0413647 0.150284 -0.00509832 +0.00543597 0.131652 0.0145423 +-0.0567655 0.0797174 -0.020408 +-0.0314842 0.0875139 0.0436743 +-0.0272508 0.169746 -0.00972716 +-0.055503 0.0918468 0.0452512 +-0.0250407 0.11597 -0.0147569 +-0.0757456 0.155966 0.0196325 +0.0124869 0.0936385 0.0515089 +-0.0205861 0.122762 0.0284276 +-0.0807235 0.116228 0.0481624 +0.0260285 0.0450625 -0.0106845 +-0.0593728 0.0579489 0.0125735 +-0.049763 0.132774 0.0280532 +-0.0486523 0.128248 0.029602 +-0.0786364 0.0880738 -0.010561 +-0.0292743 0.157003 -0.0105584 +-0.0728269 0.0950692 -0.0149677 +-0.0571361 0.0333705 -0.00647115 +0.00471531 0.10507 -0.02128 +-0.0617504 0.158434 -0.0225881 +-0.044324 0.0573856 0.0392571 +-0.0231291 0.0608213 0.0434196 +-0.0736852 0.109489 0.0408578 +-0.0434867 0.102921 0.0416521 +-0.0745585 0.102629 0.0369846 +-0.00580621 0.0826794 -0.0377615 +-0.0293232 0.155967 -0.00892475 +-0.0785045 0.111148 0.0455755 +-0.0789041 0.126621 -0.00628203 +0.0387126 0.0984064 -0.00782785 +-0.00546749 0.0386155 0.00470576 +-0.00150095 0.0925253 0.0558525 +-0.0200678 0.0384268 0.0272406 +-0.0900294 0.114549 0.0240977 +-0.0775366 0.070359 0.00451989 +-0.0719896 0.139908 -0.00735583 +-0.0574975 0.0987515 0.0429871 +-0.0321271 0.107425 -0.0197503 +0.0188647 0.126347 0.0223312 +0.00641604 0.0962346 -0.0278978 +0.00311817 0.108714 -0.0201476 +-0.0160251 0.0375717 -0.0270066 +-0.0497158 0.140127 0.00540861 +-0.0603383 0.155998 0.00765284 +-0.0315045 0.100214 0.0434156 +-0.0865647 0.0978132 0.0263535 +0.030619 0.119354 0.0124235 +-0.0618449 0.153748 -0.0225793 +0.0357348 0.111877 0.0229152 +-0.0825172 0.108952 0.0273498 +-0.06497 0.156112 0.0234152 +-0.0141713 0.0391912 0.0511685 +0.0418096 0.0482673 0.0320498 +0.0293522 0.0768437 0.0442363 +-0.00664275 0.113752 -0.0185066 +-0.0339572 0.173519 -0.0141904 +-0.0868865 0.136539 0.0438118 +-0.0358508 0.0350331 0.0126434 +-0.0538363 0.0491492 0.0306601 +-0.0555251 0.040203 -0.0098178 +0.00654381 0.0340863 -0.0167284 +0.00392426 0.0984839 -0.0242888 +-0.0798351 0.078638 0.0310296 +-0.0520723 0.122646 0.0352105 +-0.0550812 0.153793 0.0226168 +0.014566 0.128157 0.000776346 +-0.0875094 0.103632 0.00838188 +0.0565843 0.0508466 0.00719292 +-0.0301736 0.0353405 0.0506988 +-0.054126 0.0491389 0.0369634 +-0.0213227 0.0927441 -0.0344661 +-0.0512299 0.133896 0.029412 +-0.0175551 0.0668893 0.0531861 +-0.0306537 0.125522 0.0174226 +0.00435638 0.0524337 -0.0297062 +-0.030037 0.0383331 -1.37538e-05 +-0.0748829 0.104948 -0.0102086 +0.0281452 0.12091 0.0214948 +-0.00129242 0.0339647 -0.0219341 +-0.0193753 0.114664 -0.0174341 +-0.0226586 0.185005 -0.0161016 +0.0333802 0.116202 0.0163348 +-0.0182505 0.0920203 0.0545129 +0.0291993 0.0821983 0.0440432 +0.040955 0.104188 0.00218636 +-0.0221399 0.16826 -0.0191908 +-0.0160775 0.128732 0.0124337 +-0.0494959 0.115246 0.0337414 +-0.0623926 0.155248 -0.0336012 +-0.0504873 0.0646576 0.0351978 +-0.0738463 0.114952 -0.00659368 +-0.0195012 0.0351765 0.0514244 +-0.0448823 0.107056 -0.0197924 +-0.0768765 0.119334 -0.00688293 +0.0107885 0.0345143 -0.0106366 +0.024237 0.0727429 0.0473317 +-0.00865103 0.0511695 -0.0319029 +-0.0877012 0.0963902 0.0247068 +-0.0518399 0.0559545 0.028629 +-0.00150749 0.0442279 0.0463824 +-0.066685 0.0361231 0.0351414 +-0.0298413 0.0511486 0.0404908 +-0.0104881 0.125079 0.0309157 +-0.0478366 0.0336224 0.000642732 +-0.0567073 0.152073 0.0307854 +-0.0772744 0.177812 -0.051035 +-0.0147745 0.0770701 -0.0384436 +-0.0929915 0.122891 0.0372721 +-0.0104786 0.116885 0.0389916 +0.0382147 0.0603208 -0.00873991 +-0.0754893 0.145614 0.0436847 +-0.0484504 0.134772 0.0211152 +0.013378 0.056283 0.0508299 +-0.00197361 0.0339973 -0.0202101 +0.0414332 0.100023 0.0231582 +0.0306311 0.076191 -0.0209647 +-0.0663516 0.155012 0.0287678 +-0.0710496 0.158811 -0.00499394 +-0.0554619 0.115432 0.0354757 +-0.0357408 0.0754574 -0.0191515 +0.000523827 0.0787529 0.057707 +-0.0189564 0.187079 -0.0195498 +-0.0849859 0.149949 0.0316738 +-0.0578691 0.0427244 -0.00751381 +-0.0739068 0.123785 -0.00803832 +-0.0355104 0.105608 0.0391036 +-0.0437169 0.0336921 -0.00956971 +0.0503986 0.0446075 0.0172106 +0.028338 0.0371627 0.023798 +-0.0835031 0.123045 0.0493423 +-0.051023 0.051637 0.0206282 +0.00799809 0.131294 0.0169006 +-0.0154642 0.0617228 0.0531313 +-0.0548148 0.0898539 -0.0222515 +0.0183688 0.0727072 0.0511848 +-0.0528816 0.143158 0.0234068 +0.0423208 0.0885482 0.027912 +-0.0489879 0.148715 -0.00337283 +0.0536516 0.0710277 0.00477709 +-0.0558317 0.154614 0.0193814 +-0.078074 0.0921324 -0.0116061 +-0.0138482 0.126055 -0.00351425 +-0.0484951 0.107035 0.0396855 +-0.0617568 0.113454 -0.0138737 +-0.0539631 0.0449066 0.021682 +-0.0323187 0.0763806 -0.0295323 +0.0441984 0.0917353 0.0221589 +-0.0830674 0.136771 -0.000769185 +-0.0741071 0.154101 -0.0239055 +-0.0686886 0.176906 -0.0487674 +-0.0561408 0.0460708 0.0131999 +-0.0685022 0.101419 0.0404594 +-0.0739688 0.0653923 0.0119616 +0.001175 0.0909253 -0.0339059 +0.0263146 0.0782009 0.0468843 +0.00192116 0.123969 -0.00948312 +-0.0587405 0.0737726 -0.0173801 +-0.0627949 0.167828 -0.0455908 +-0.0508006 0.0883889 -0.0215985 +-0.0481052 0.0559539 0.0359192 +0.0442623 0.0959503 0.0151546 +-0.0608758 0.0968112 -0.0186271 +-0.0345924 0.0485568 0.0396695 +-0.0618805 0.102572 -0.018381 +0.024797 0.0615121 -0.0241542 +0.0398079 0.0440192 0.0290809 +-0.0138249 0.0869198 -0.0385386 +-0.00950254 0.0801627 0.0580817 +-0.0893667 0.135016 0.00621309 +-0.0210328 0.0946153 0.0501685 +0.0124741 0.0347469 0.026362 +-0.0837947 0.100615 0.0291484 +-0.0677074 0.147127 -0.0273126 +-0.080936 0.0720826 0.0105433 +-0.0486367 0.0591511 -0.0114572 +-0.0856634 0.1104 0.0223511 +-0.0321401 0.16671 -0.0160336 +-0.0724955 0.174948 -0.0415233 +-0.0260317 0.0348457 -0.0200988 +-0.0274922 0.0497667 0.0454723 +-0.0394917 0.0534182 0.0393765 +0.0515114 0.0691441 0.0252354 +-0.0257438 0.12256 -0.00564443 +0.0437634 0.0832354 -0.00281017 +-0.0247629 0.0727034 -0.0370836 +-0.0655551 0.156269 0.0188465 +-0.0629848 0.136718 0.0370028 +0.0602499 0.0678328 0.0161531 +-0.0168173 0.0841632 -0.0392397 +-0.0683543 0.152019 -0.0462463 +-0.0567286 0.155485 0.0133042 +-0.0124895 0.119639 0.0367572 +-0.0620219 0.161552 -0.0385959 +-0.0485081 0.0504118 0.037253 +-0.0681426 0.159579 -0.055037 +-0.0339899 0.0738027 -0.0224777 +0.0187727 0.038419 -0.0166964 +-0.00951396 0.0647096 0.055646 +0.0373151 0.0659642 0.0362985 +-0.0697681 0.156742 -0.0499137 +-0.07512 0.161006 -0.0309706 +0.0445653 0.094573 0.0151616 +-0.0642545 0.154418 -0.039754 +0.0245051 0.108393 0.0385583 +-0.0423597 0.0337264 -0.0019814 +0.0111186 0.130773 0.0109156 +-0.0366056 0.0484481 -0.0142844 +-0.00762999 0.0387797 -0.0144679 +-0.0695561 0.0340783 0.00839793 +-0.0566909 0.0334951 0.00618234 +-0.0565711 0.159859 0.00306588 +0.000399482 0.0419381 -0.024642 +-0.0505546 0.0490872 0.0373101 +-0.0513639 0.0402537 0.0462611 +-0.0256858 0.0575487 -0.0293997 +-0.0524956 0.0890116 0.0451123 +0.044036 0.0973464 0.00517085 +-0.0774531 0.156901 -0.0199195 +0.0267966 0.0534918 0.0403155 +-0.0887231 0.0888754 0.0204484 +0.014348 0.0534071 0.0486823 +-0.0495075 0.0490436 0.0377607 +-0.0321324 0.154142 -0.000565596 +-0.0856354 0.143297 0.0395519 +-0.0344784 0.0932112 0.0445123 +-0.0688653 0.0860793 0.0429202 +-0.068567 0.167578 -0.0243154 +-0.0155024 0.084237 0.0568519 +-0.0768438 0.0975378 -0.0115852 +-0.054418 0.142404 0.0282888 +-0.00749562 0.091199 0.0567536 +0.0202715 0.077733 -0.0270961 +-0.0748613 0.102114 -0.0115761 +-0.0102609 0.0389601 -0.0132864 +-0.060805 0.0953608 -0.018741 +-0.0557308 0.0738305 -0.0174435 +-0.0789903 0.0900056 0.0359819 +0.0427074 0.0831548 -0.00579292 +-0.00549246 0.097843 0.0523265 +0.046038 0.0679968 0.0252834 +-0.0235521 0.116765 0.0343279 +0.0302394 0.0759037 -0.0212804 +-0.0212883 0.0638258 0.0471454 +0.0285217 0.0480557 -0.0127278 +-0.0326422 0.080708 -0.0295257 +-0.0545922 0.126915 0.0368606 +-0.07894 0.12954 -0.00577029 +-0.0871517 0.0874756 0.0234341 +0.0457525 0.0862068 0.0131643 +-0.0636848 0.163906 -0.0268361 +-0.01113 0.175691 -0.0290055 +-0.0644352 0.0424097 0.0302481 +0.00751322 0.0883379 0.0556646 +0.0450791 0.0411084 0.0144119 +-0.0801842 0.0990978 -0.00757647 +0.00942317 0.0752723 0.0558271 +-0.0720162 0.169175 -0.0255925 +-0.0706469 0.0749114 -0.0128891 +-0.0231537 0.124452 0.0216177 +-0.0354775 0.0932002 0.0444179 +-0.0467494 0.0782878 -0.0191673 +0.0402616 0.088708 0.0319407 +-0.0668021 0.0909191 -0.0174744 +-0.0798777 0.0922401 -0.00961163 +-0.00990791 0.168128 -0.0187599 +-0.0538472 0.144686 0.025416 +-0.0506923 0.0693793 -0.0143111 +-0.0628457 0.158366 -0.0406006 +-0.0472527 0.147738 0.00869118 +-0.0798492 0.140347 -0.0037915 +-0.0633595 0.155022 0.00583483 +0.0194938 0.0948135 0.0473832 +-0.0235952 0.03653 -0.0288249 +-0.0625329 0.155555 0.0257427 +-0.0293056 0.125075 0.00323421 +-0.0848075 0.100731 -0.000569426 +0.0362036 0.112389 0.0159326 +0.0148576 0.0726711 0.0531263 +-0.0648898 0.0353536 0.0257632 +-0.0225355 0.115413 0.0360839 +0.0344395 0.062733 -0.0148459 +-0.0404982 0.0548597 0.0396645 +0.0241838 0.0363666 0.0254891 +0.0185331 0.065881 0.0495848 +0.0124938 0.0589954 0.0513278 +0.00977817 0.131153 0.0118468 +0.0100829 0.0519948 0.0512903 +-0.0361503 0.127316 0.0154104 +-0.0482545 0.05323 0.0361705 +-0.0940988 0.124142 0.016266 +-0.0100812 0.168118 -0.0236136 +-0.00900002 0.1303 0.0121232 +0.044368 0.0832642 0.000211132 +-0.0417803 0.126317 0.0192991 +-0.0875576 0.0954908 0.0044419 +-0.0679508 0.168029 -0.055011 +-0.0131452 0.0346678 0.0462791 +0.00685606 0.0990064 -0.0228407 +0.0328304 0.0354201 0.0116657 +0.0278048 0.121695 0.017093 +0.0445188 0.0721805 0.0237826 +-0.0754994 0.115715 0.0515239 +-0.0115085 0.0815323 0.0578355 +-0.0530625 0.0625594 0.0307632 +-0.0510483 0.053037 0.0206135 +-0.0505791 0.0488657 -0.00826795 +-0.0426076 0.0338549 0.0069173 +0.0392521 0.0940728 0.0323259 +-0.0394892 0.0846821 0.0435801 +-0.0451321 0.0560164 0.0386443 +-0.00431394 0.0929621 -0.0345661 +-0.0559672 0.149602 0.0296453 +-0.0635672 0.159894 -0.0552656 +-0.0854828 0.0924603 0.0282645 +-0.000403311 0.102922 0.0441774 +-0.0728513 0.077742 0.0372898 +-0.0264927 0.0850795 0.0502634 +0.00748229 0.118415 -0.0155852 +-0.0301257 0.165235 -0.016018 +-0.00266679 0.0554838 -0.0324138 +0.0588141 0.0660698 0.0217199 +-0.0227042 0.0651451 0.0456598 +-0.0254758 0.0447668 0.0519525 +-0.0221249 0.165275 -0.017299 +-0.0673863 0.146352 -0.0244353 +0.0358297 0.112651 0.00431137 +-0.0600953 0.0345101 0.0398512 +-0.0315135 0.112545 0.0354646 +-0.0495533 0.0335732 0.00214603 +0.00748118 0.122397 -0.0118721 +-0.017033 0.0949215 -0.0326512 +-0.0465027 0.162256 0.00645028 +-0.0377072 0.0695284 -0.0160926 +0.0515389 0.0638758 -0.00198972 +-0.0406583 0.0577787 -0.0115563 +-0.078333 0.108337 0.035368 +-0.00970184 0.120973 -0.0121849 +0.0223756 0.0822421 0.0500191 +-0.0598969 0.0982824 -0.0189251 +-0.000418527 0.128183 0.0282442 +0.0398162 0.107019 0.0141667 +-0.0275139 0.118013 0.031246 +-0.0270215 0.0563432 0.0375362 +0.0105198 0.130786 0.00926843 +0.00339772 0.0418993 -0.0241367 +-0.0275013 0.113896 0.0350206 +0.0202412 0.0763232 -0.0271232 +-0.0919625 0.126955 0.0342506 +-0.0433008 0.0345877 0.0364134 +0.0433553 0.0860087 -0.00480358 +0.0208045 0.119446 -0.00872458 +-0.0930264 0.120177 0.0342925 +-0.0379377 0.157973 0.00463177 +-0.0253167 0.177183 -0.0103739 +-0.0366224 0.0519804 -0.0105023 +-0.0707047 0.079127 0.0393559 +-0.0260772 0.0606359 0.0392914 +-0.0238556 0.126292 0.00669874 +0.00550694 0.0561304 0.0532033 +-0.0537237 0.147766 0.0244131 +-0.0691531 0.167331 -0.0231015 +-0.0596786 0.0738084 0.0412039 +0.0326792 0.103442 0.0351236 +-0.0614661 0.174127 -0.0585981 +-0.0717687 0.0836085 -0.0162896 +-0.0457927 0.0869975 -0.0219586 +0.0105224 0.0990052 0.0483243 +-0.0829648 0.129479 -0.00406234 +-0.0356761 0.0343506 0.0364799 +-0.0884531 0.0888833 0.0214341 +-0.0627252 0.0416196 0.0257026 +-0.0564562 0.159872 0.00406757 +-0.0891671 0.0942549 0.0124334 +0.00850148 0.0561026 0.0528172 +-0.0897269 0.113038 0.0361809 +0.0510319 0.0481609 0.0243415 +-0.0355318 0.0341909 0.0278174 +0.0439268 0.0945301 0.0211547 +-0.0579061 0.0357757 0.046064 +-0.0154366 0.0383652 0.00473292 +-0.0175221 0.187321 -0.0198494 +-0.00549946 0.0842482 0.0569765 +0.0601999 0.0678503 0.0111396 +0.0144807 0.0658974 0.0525165 +0.0293268 0.0963357 -0.0179631 +-0.0397817 0.126122 -0.00537397 +0.0345713 0.109241 -0.00571538 +0.0142478 0.0846938 0.0523116 +-0.00151223 0.107257 0.0435513 +-0.0568094 0.0336832 0.0202688 +-0.00449913 0.108643 0.0435023 +0.0366018 0.0989128 -0.0107075 +-0.0520805 0.0552272 0.0244826 +-0.0564227 0.125779 -0.00685719 +-0.045508 0.0519257 0.0382686 +0.0321211 0.116144 0.000111339 +-0.0560271 0.142758 -0.00201441 +-0.0204991 0.12085 0.0318342 +-0.0572069 0.155002 0.0203881 +-0.0683862 0.0434928 0.00469407 +-0.0749362 0.167415 -0.0237916 +0.00950453 0.0758273 0.0557308 +0.0134626 0.0962698 0.0490469 +-0.0352581 0.0336435 0.0104036 +0.0033475 0.0524625 -0.0299019 +-0.0200406 0.0417644 0.0532372 +-0.020634 0.03806 0.0202475 +-0.0354822 0.0590569 0.0395591 +-0.0633421 0.145588 -0.0131138 +0.0560276 0.0714782 0.0201554 +-0.034079 0.157748 -0.0116645 +0.0430592 0.0871926 0.0271788 +-0.067061 0.0617728 0.0200983 +0.0054202 0.0385344 -0.0060218 +-0.0562382 0.115455 0.0360976 +0.0318915 0.0727133 0.0408308 +0.00701986 0.131464 0.0165435 +-0.00758439 0.038449 0.00988421 +-0.0401838 0.128459 0.00507702 +0.0467715 0.0482711 0.0287479 +-0.0918049 0.126804 0.00826817 +-0.0821184 0.0782385 0.0256306 +-0.0812562 0.103354 0.0307723 +-0.0639536 0.144435 -0.0123561 +-0.0108662 0.129871 0.00999779 +0.0155048 0.112635 0.0385412 +0.0182534 0.0792348 -0.0283217 +-0.0893331 0.0983151 0.0114073 +-0.00325216 0.0396403 0.0476826 +-0.0241255 0.089259 0.0519927 +-0.0858632 0.106258 0.00536057 +0.00408474 0.0346021 -0.0158016 +-0.0407936 0.0869784 -0.0214607 +-0.0166484 0.0480949 -0.029815 +-0.0157153 0.0613848 -0.0360938 +-0.0566239 0.0482507 0.0375737 +-0.0424946 0.0619914 0.040787 +-0.0676789 0.0735575 -0.0139417 +-0.00550026 0.0815011 0.0573318 +-0.0466697 0.166955 -0.00590454 +0.050335 0.0531616 -0.00370253 +-0.075448 0.162419 -0.0329687 +-0.0614914 0.089051 0.0454546 +-0.0467107 0.0709021 -0.0159388 +0.0485116 0.0611011 0.0306918 +0.0308141 0.0862286 0.0429136 +0.041033 0.0788113 -0.0077656 +-0.0332536 0.0434286 -0.0288825 +-0.0599631 0.0455474 0.028679 +-0.0106693 0.0383927 0.00930564 +0.00450171 0.04895 0.0512539 +-0.0567297 0.0738308 -0.0175741 +-0.0395016 0.128216 0.0127148 +-0.0236465 0.18441 -0.0150532 +-0.0541007 0.0517729 -0.00535724 +-0.00963566 0.0383633 0.0204127 +-0.072501 0.11898 0.053434 +-0.072483 0.0356257 0.00284128 +-0.0164962 0.0815146 0.0575151 +0.0321311 0.10568 -0.0119259 +-0.0628015 0.0867155 -0.0190743 +-0.0747157 0.155426 0.0258403 +-0.0655092 0.0986926 0.0420188 +-0.0621042 0.153787 0.0317461 +0.0075074 0.0702645 0.0557506 +-0.0873725 0.140519 0.00919988 +-0.0816979 0.073476 0.0105355 +-0.0251078 0.125921 0.00624226 +0.0143125 0.129601 0.0135477 +0.0537172 0.0701657 0.00367339 +-0.0658178 0.165764 -0.0247368 +-0.0706171 0.164859 -0.0164358 +-0.0268181 0.0385613 -0.0106363 +-0.0308492 0.121938 -0.00695618 +-0.0240991 0.0708914 0.0469009 +0.00836584 0.0509624 -0.0290525 +0.0146552 0.0361528 0.0436042 +-0.0759244 0.155422 0.00936737 +0.00291872 0.0383891 0.0247663 +-0.0483005 0.12541 0.0300666 +0.00749081 0.093253 -0.0307631 +-0.0441374 0.160646 -0.00957119 +-0.0454954 0.0945383 0.0433792 +0.0153865 0.0350801 0.00287497 +-0.0507565 0.078263 -0.0192091 +-0.014682 0.0540945 -0.0332776 +-0.0697195 0.0625059 0.018914 +-0.0850789 0.151288 0.0289026 +0.000998881 0.131517 0.0100563 +-0.0866192 0.111201 0.0383037 +-0.0257526 0.069725 -0.0351721 +-0.0832913 0.0938266 -0.00556456 +-0.00149798 0.121047 0.037107 +-0.0164922 0.103019 0.043564 +-0.00175716 0.0797524 -0.0362245 +-0.065193 0.165273 -0.0595568 +-0.00746087 0.0391472 0.0345828 +-0.0384976 0.0790115 0.0428361 +-0.00149834 0.095227 0.054625 +-0.00277478 0.078376 -0.0365291 +-0.0780329 0.155476 0.0217657 +-0.0632159 0.147647 -0.016402 +-0.0801569 0.0817921 0.0331577 +-0.0500022 0.16408 -0.00389251 +-0.0747874 0.0892505 -0.0147771 +-0.00949475 0.122405 0.0348735 +-0.0322196 0.0423712 0.0501883 +-0.00876131 0.174216 -0.0276966 +-0.0545091 0.161256 6.9518e-05 +0.0181832 0.102054 0.0457705 +-0.0604933 0.102915 0.04183 +0.0437773 0.0804492 0.0262342 +0.0388648 0.0842467 -0.0137667 +-0.00550336 0.0647558 0.0562438 +-0.0929299 0.122874 0.0352771 +-0.043447 0.0338958 0.0281851 +-0.0649274 0.155826 -0.0455264 +-0.00117719 0.0381217 -0.0144579 +-0.0146742 0.180146 -0.0213737 +-0.0911602 0.113316 0.0133388 +0.0114933 0.0990667 0.0482243 +-0.030492 0.093206 0.0443051 +-0.00885946 0.13031 0.0150517 +-0.073851 0.0979023 -0.0138506 +0.00349864 0.0505127 0.0525247 +0.0579498 0.0621469 0.0239372 +-0.0266127 0.121438 0.026306 +-0.0640364 0.138454 -0.00746704 +-0.0881537 0.0875035 0.020457 +-0.0693202 0.16097 -0.0509443 +-0.0258632 0.0384431 -0.0103374 +-0.0445084 0.162276 0.00597583 +0.002127 0.0994865 0.0488443 +-0.00523434 0.128086 0.0279795 +0.0441694 0.0706598 0.0245614 +0.00913312 0.10443 -0.020596 +-0.00849151 0.104452 0.0437135 +-0.0709552 0.134052 -0.00817596 +0.040546 0.0860518 0.0323351 +0.026933 0.109961 -0.012516 +0.0171797 0.119654 -0.0109592 +-0.0154871 0.10859 0.0421893 +-0.0544999 0.0945829 0.0441089 +-0.0942376 0.122836 0.024283 +0.0145822 0.10067 -0.0225932 +0.0416553 0.0900846 -0.00877196 +-0.0627089 0.0722313 -0.0153832 +-0.0265055 0.0946665 0.044662 +-0.0241067 0.108647 -0.0210644 +-0.0475093 0.0504634 0.0377677 +-0.0271626 0.0836755 0.0495254 +-0.0707023 0.155807 0.00247134 +0.0113316 0.0343299 -0.00659923 +0.0271512 0.0740976 0.0445232 +-0.00214312 0.101026 -0.0230018 +-0.0518271 0.094161 -0.0217872 +-0.0685768 0.0699128 0.0338326 +-0.0538957 0.0344051 0.0325721 +-0.0280624 0.17271 -0.00913079 +-0.0710555 0.148357 -0.0346175 +-0.0392482 0.165334 0.00281642 +-0.0494961 0.159354 0.00844009 +-0.0887346 0.0956375 0.0224045 +-0.0856504 0.126624 -0.00269798 +-0.0486707 0.147744 0.0101492 +-0.0735613 0.16372 -0.0149978 +0.0180716 0.0350245 0.0344937 +-0.0307362 0.053835 -0.015374 +-0.0887393 0.0928617 0.00944255 +-0.016725 0.0627999 -0.0362248 +-0.0190611 0.063953 0.0505398 +-0.0441816 0.0346721 0.0413945 +-0.0593157 0.126918 0.0405689 +-0.0111259 0.174182 -0.0282833 +-0.0436679 0.0621935 -0.0131864 +0.0275209 0.088828 -0.0220264 +-0.0297851 0.0890261 -0.0295849 +-0.0303849 0.154168 -0.00247422 +-0.0425281 0.128954 0.00568377 +0.0162787 0.126801 -0.0006607 +-0.0727179 0.0806647 -0.0147187 +-0.0753424 0.0928083 0.039305 +-0.0798316 0.111318 -0.00180655 +0.0192462 0.0346832 0.00400718 +-0.088108 0.129743 0.0452172 +-0.0103013 0.038437 0.0111565 +-0.0466082 0.166842 0.00289141 +-0.0459915 0.152139 0.00880917 +-0.02765 0.0504128 -0.0240838 +-0.00316977 0.101093 -0.0230747 +-0.081903 0.123614 -0.00465545 +0.0308134 0.104771 0.0359398 +-0.0649698 0.0444252 -0.000282601 +-0.0411724 0.128614 0.0047134 +-0.0566724 0.0661356 -0.00992741 +-0.0768027 0.1218 0.0526081 +0.0286707 0.0432432 0.0323583 +-0.0776442 0.112189 0.0467134 +-0.0599288 0.0595089 0.00385673 +-0.0751102 0.148577 -0.0168689 +-0.0422557 0.0435263 -0.021317 +-0.0109825 0.18157 -0.0273657 +0.0160657 0.128852 0.0141586 +0.0353395 0.113619 0.00703904 +-0.0746273 0.149901 -0.0298709 +-0.0108803 0.105927 -0.0227775 +-0.0134961 0.0472092 0.0480936 +0.0366578 0.0576635 0.0335112 +-0.019761 0.0984382 0.0445534 +-0.0662568 0.117183 0.0498756 +-0.0659606 0.17389 -0.0478108 +-0.0116079 0.0434695 -0.0263093 +-0.0926722 0.117507 0.0393006 +-0.0764843 0.145607 0.0435529 +-0.0467321 0.0337537 0.00617309 +-0.0558876 0.104087 -0.0189213 +-0.0920931 0.126941 0.031257 +-0.0204778 0.086949 0.0559493 +0.0205756 0.0550317 0.0471809 +0.0164894 0.10985 0.0397676 +-0.0639427 0.125311 -0.00880074 +-0.0233699 0.0380458 0.0160874 +0.00571651 0.037694 -0.0126956 +-0.0305064 0.059434 -0.0194047 +-0.0286182 0.0422955 -0.0294891 +-0.074262 0.155148 0.0274653 +-0.0780672 0.161102 -0.0219327 +-0.0710541 0.174778 -0.0424234 +-0.0641619 0.126957 0.0459503 +-0.0724375 0.0643068 0.0185598 +-0.0568864 0.106915 -0.0181412 +0.0293195 0.0995163 0.0407971 +-0.0644558 0.155894 0.01199 +0.00534877 0.131711 0.0116581 +-0.070964 0.169422 -0.0500317 +0.0101411 0.103018 -0.0207697 +0.0413802 0.0547717 -0.00646982 +-0.0385096 0.0776202 0.0427509 +-0.0239792 0.115969 -0.0147616 +-0.0225483 0.119525 0.0321637 +-0.060198 0.152175 0.0339452 +-0.0535114 0.0452153 0.0437642 +-0.0037319 0.0346421 0.0447442 +0.0102653 0.0944766 -0.0280245 +0.0270364 0.0347184 0.00926922 +-0.0660514 0.11246 0.0412419 +-0.0427238 0.072521 -0.0180673 +-0.057924 0.0453324 0.0266819 +0.0321473 0.0354374 0.0133726 +-0.0750002 0.0776536 0.0352037 +-0.0404922 0.11531 0.0337051 +-0.0201478 0.16826 -0.0196016 +-0.0263171 0.178663 -0.00829314 +0.0232364 0.0706221 -0.0263108 +-0.0228968 0.117028 -0.0138782 +-0.0477554 0.130992 0.0255865 +-0.05149 0.104281 0.0405196 +-0.00121687 0.120006 -0.0132177 +-0.0299396 0.0649723 -0.0274594 +-0.0187899 0.0784905 -0.0388371 +-0.0498267 0.109983 -0.0185775 +0.00334971 0.0510613 -0.029847 +0.0259096 0.0534724 0.0407837 +-0.0455367 0.111121 -0.0175743 +-0.0124237 0.0348026 0.0445556 +-0.0887181 0.123977 0.00228597 +-0.088156 0.151596 0.0228856 +-0.0530084 0.149326 0.0224058 +0.0191744 0.125775 0.0238749 +-0.0735068 0.118971 0.0531919 +-0.0585002 0.0987496 0.0428962 +-0.0310887 0.159271 -0.0130615 +0.000886159 0.12297 -0.0104051 +-0.0872227 0.0941086 0.00335062 +-0.0273424 0.0931435 -0.0275899 +0.0213306 0.126248 0.00896939 +0.0549036 0.0506667 0.00319831 +-0.0245658 0.115393 0.0346209 +-0.0908157 0.133668 0.01022 +0.011387 0.126452 0.0296316 +0.0342091 0.0430428 0.0288022 +-0.0759039 0.154928 -0.00089291 +-0.0834635 0.136224 -0.000676656 +-0.0242249 0.124407 -0.00155437 +-0.00949715 0.103034 0.0436292 +-0.0448632 0.102817 -0.0213129 +-0.0762912 0.162417 -0.0319674 +-0.087261 0.137734 0.00520439 +0.0359972 0.0915666 0.0381116 +0.0515419 0.0610093 0.0297195 +-0.0759846 0.168851 -0.0284951 +0.0192535 0.076364 -0.0276613 +0.00153258 0.130437 0.0231622 +-0.0552695 0.058846 -0.00542677 +-0.0478299 0.094184 -0.0219241 +0.0413096 0.0957202 -0.00478826 +0.00646546 0.131591 0.014917 +-0.0921802 0.132348 0.0172238 +-0.00096127 0.131397 0.0150615 +0.0373767 0.0519575 -0.00666499 +0.000499624 0.0661631 0.0564081 +-0.0624427 0.149095 -0.00857615 +-0.0158277 0.127263 0.00131837 +-0.0534778 0.0544994 -0.00645482 +-0.0393097 0.122071 -0.0111029 +-0.0552136 0.0346314 0.0441945 +-0.062546 0.0614527 -0.00215685 +0.0190515 0.0781917 0.0522129 +-0.00645816 0.122156 -0.0114796 +0.0547648 0.068691 0.024634 +-0.0165146 0.104417 0.0427511 +-0.0914381 0.133727 0.0162105 +-0.0621573 0.163143 -0.0375929 +-0.0927674 0.130992 0.0172311 +0.00308348 0.0981539 0.0507387 +0.0223728 0.0658814 0.0463438 +-0.039497 0.060614 0.0410267 +-0.0547684 0.0513541 0.0102674 +0.00252507 0.0561606 0.0537161 +-0.0427018 0.0681213 -0.0161497 +0.0102881 0.063916 -0.0312717 +-0.0443833 0.12939 0.00495951 +-0.0186027 0.160444 -0.0128213 +0.0371116 0.111176 0.0148387 +0.0282213 0.0875505 0.0444323 +-0.0274771 0.120676 0.0274866 +-0.0584936 0.0439589 0.0439647 +0.0240603 0.0822578 0.0489414 +0.0351443 0.071382 0.0384881 +-0.0164918 0.0897515 0.056205 +-0.0781864 0.161095 -0.0229348 +-0.0701455 0.111146 0.0439061 +-0.00742751 0.0346718 0.0457358 +-0.0757375 0.106056 0.0359296 +-0.0735163 0.138649 0.0485985 +-0.0786866 0.073183 -0.00146774 +-0.0425028 0.11664 0.0325093 +-0.0294965 0.105676 0.0405837 +-0.0253323 0.089221 0.0503626 +-0.00687638 0.105938 -0.022783 +-0.0680331 0.17369 -0.0570223 +-0.0709606 0.152484 -0.0460812 +-0.0145326 0.0386197 0.0300043 +-0.0284453 0.0903864 0.0448476 +-0.0688215 0.145351 0.0427408 +-0.0488146 0.109958 -0.0184987 +-0.0764868 0.144228 0.0448323 +-0.0204228 0.0384821 -0.0074254 +-0.050433 0.0505709 0.0355945 +0.00517866 0.131021 0.00445011 +-0.0697426 0.08081 -0.0166425 +-0.084857 0.0924919 0.0290512 +-0.00149439 0.0870302 0.0569025 +-0.072621 0.142849 -0.00891964 +0.0127783 0.105278 -0.0195273 +0.00375967 0.0343287 0.0177156 +-0.0724944 0.126022 0.052902 +-0.0520295 0.0429585 0.0453289 +-0.0373786 0.0478297 -0.016773 +-0.0165095 0.0446732 0.0513338 +0.0115347 0.118055 -0.0152175 +-0.0461946 0.0601644 0.0381445 +-0.0730192 0.156843 -0.0319176 +-0.0665818 0.173704 -0.0590137 +-0.0904622 0.133649 0.00822658 +-0.0661919 0.0387353 0.0332699 +0.0285711 0.0632767 0.0429905 +-0.0191373 0.0348399 0.0448528 +-0.0144945 0.115487 0.0386767 +-0.0885619 0.129493 0.00323888 +-0.00509715 0.039098 -0.012386 +0.00551873 0.0842341 0.0568816 +-0.0784525 0.0962411 -0.0105211 +-0.0126763 0.05824 0.052838 +-0.00571704 0.0642049 -0.0354496 +-0.0659809 0.169803 -0.037696 +0.00534315 0.0567731 -0.0307134 +-0.0104849 0.101611 0.0440429 +-0.0320291 0.108616 -0.01899 +0.0442879 0.0415947 0.0193873 +0.0261947 0.0449183 0.0375802 +-0.0626054 0.158425 -0.0185846 +-0.0321937 0.0694259 -0.0234551 +-0.0597828 0.0810723 -0.0197911 +-0.0274915 0.0602914 0.037483 +0.0278788 0.120142 0.00144262 +-0.00359535 0.0391334 -0.025473 +-0.0104902 0.0619157 0.0554492 +-0.0851123 0.133936 0.0477712 +0.0133897 0.0389058 -0.0222843 +-0.0778477 0.159718 -0.0189229 +-0.0817169 0.081448 -0.00456785 +0.00880568 0.131337 0.0114907 +-0.0885025 0.144515 0.032494 +0.00248318 0.0413744 0.0461608 +0.0393065 0.105567 0.023165 +0.0485408 0.0662379 -0.000364329 +-0.074114 0.159638 -0.0309374 +-0.0656277 0.0636798 0.0258038 +0.0326128 0.0934199 -0.0168733 +-0.0691845 0.152183 -0.0467119 +-0.0356328 0.0347409 0.0201566 +-0.067463 0.166618 -0.0559977 +0.0410852 0.0860175 0.0313838 +-0.0465484 0.0404249 0.0444582 +-0.0884823 0.147207 0.0295866 +-0.047064 0.168385 -0.0010022 +0.0204505 0.044377 -0.0207645 +-0.0460107 0.0426896 -0.0115747 +-0.0892694 0.136527 0.0301984 +-0.00170296 0.0612915 -0.034176 +0.016206 0.0927227 0.0499244 +-0.0816886 0.154881 0.0175845 +-0.0434863 0.0776041 0.0427475 +-0.0883068 0.098239 0.00641854 +-0.045625 0.056311 -0.011298 +-0.0524843 0.150872 0.017395 +-0.0641668 0.0334738 0.00287677 +0.0361211 0.0586877 -0.0107678 +0.0141254 0.0589894 0.0501816 +-0.0864962 0.112872 0.0280752 +-0.0863885 0.112851 0.0441987 +-0.0524922 0.0384865 -0.0115467 +-0.0776496 0.163935 -0.0239336 +-0.0554697 0.0345193 -0.0117205 +0.0176795 0.0740469 0.0519763 +-0.0728932 0.0642808 0.0113714 +0.0261658 0.0809584 -0.0239333 +0.058376 0.0713467 0.0136326 +0.0257313 0.0968616 0.0444005 +0.00516452 0.0344202 0.0197338 +-0.0686185 0.0687175 -0.00655491 +-0.0803464 0.147298 -0.000827063 +0.000190276 0.131527 0.0154789 +-0.0687909 0.0354139 0.0127136 +-0.05562 0.146743 0.0301728 +0.0240878 0.0645552 0.0452968 +0.0313304 0.0475675 0.0327114 +-0.0107396 0.0713653 -0.0375278 +-0.0444884 0.0733739 0.0424053 +-0.0892862 0.137904 0.0301929 +0.0430064 0.0930319 -0.00281527 +0.00152278 0.0688979 0.0560686 +0.02743 0.0663837 -0.0217206 +-0.0610765 0.167736 -0.0598039 +0.0469057 0.0738955 0.00933063 +0.010569 0.0630758 0.0538717 +-0.0636657 0.175908 -0.0542108 +-0.00887643 0.105922 -0.0227472 +0.0366768 0.0861722 0.0373065 +-0.00750518 0.0661146 0.0558703 +-0.0311481 0.174122 -0.0158676 +0.0165049 0.115408 0.0369209 +-0.0599957 0.135288 0.0360766 +0.023446 0.0385037 -0.00396461 +-0.0512658 0.0335234 0.00365116 +-0.0640041 0.0417908 0.0276702 +0.0505407 0.062451 0.0297568 +0.0381071 0.0767371 0.0357901 +0.0348186 0.114435 0.00971518 +-0.0808584 0.15153 0.0328055 +-0.0292731 0.0691492 -0.0304581 +-0.0482843 0.133992 0.00441773 +-0.0151264 0.0382524 0.0175843 +0.0457402 0.0749932 0.00321166 +-0.0514912 0.0529568 0.0308804 +-0.0841758 0.0777074 0.00551439 +-0.0724891 0.168081 -0.0228518 +-0.0578499 0.140998 0.0321632 +-0.0824678 0.0844329 0.0311552 +-0.035201 0.0380831 0.0475916 +-0.0225654 0.0336394 -0.0239171 +0.0463796 0.0792543 0.0131749 +0.0210505 0.125312 0.00175976 +-0.0835133 0.0843594 0.0293933 +-0.00767881 0.0555674 -0.03337 +-0.052489 0.159007 -0.00340529 +-0.0244459 0.156552 -0.00701262 +-0.0598434 0.0384999 0.0207227 +-0.0725078 0.160609 -0.0083559 +0.0429565 0.0986678 0.00218951 +-0.00967767 0.118026 -0.0150602 +0.038419 0.105512 0.0261645 +-0.00651495 0.0746355 0.058305 +0.0450144 0.0945871 0.00816469 +-0.0454802 0.123445 -0.0105099 +-0.00122028 0.0938312 -0.0334376 +-0.067038 0.143551 -0.013347 +0.043578 0.0888313 -0.0037919 +-0.0238161 0.078256 0.0534268 +-0.0455234 0.131922 0.0119481 +-0.0735087 0.137262 0.0493527 +-0.0183224 0.184952 -0.0232094 +-0.0148238 0.091051 -0.0367095 +-0.000496937 0.0620135 0.0565388 +-0.0217336 0.0611778 -0.0340471 +-0.0922703 0.125567 0.0322584 +0.0255559 0.0952317 -0.0208124 +-0.0748894 0.152721 -0.0218881 +-0.0770206 0.0981288 0.0365817 +-0.0262775 0.073604 0.0447421 +0.00842909 0.131472 0.01278 +-0.0815194 0.125984 0.0522053 +-0.0768497 0.156895 -0.0209209 +-0.0774933 0.0717304 0.000534742 +-0.0610597 0.172553 -0.0606091 +-0.00957846 0.178815 -0.0287373 +-0.062208 0.167823 -0.0505845 +-0.0225076 0.125867 0.0188793 +-0.0580565 0.0334897 0.00410791 +-0.00649004 0.112763 0.0415025 +-0.00176067 0.0755229 -0.0360316 +0.0456774 0.0904203 0.00916591 +0.0441351 0.0749462 0.0250125 +-0.0810675 0.11076 0.0435122 +0.00990869 0.048971 0.0492516 +-0.0728744 0.10362 -0.0122376 +0.0374772 0.106859 -0.00183322 +0.0151574 0.0988592 -0.0229537 +-0.016863 0.0640072 0.0526042 +-0.0418006 0.0462579 -0.0152948 +-0.0768234 0.0927696 0.0379671 +-0.0661935 0.155092 0.00556387 +-0.0810703 0.0752023 0.0214152 +-0.0235527 0.156826 -0.00518035 +-0.0194871 0.0883195 0.0557235 +-0.0716986 0.077793 -0.0140498 +-0.010631 0.0389663 -0.00962591 +-0.0570892 0.0602319 -0.00257411 +-0.0419839 0.128576 0.0133734 +-0.0151399 0.0382506 0.0121533 +-0.0759996 0.139851 -0.00609906 +-0.0506105 0.0694238 0.0381651 +-0.0658919 0.11864 0.0504465 +-0.0528899 0.106976 -0.018917 +-0.0521172 0.0545658 0.0256302 +-0.005498 0.103045 0.0437796 +-0.0524893 0.156469 0.0106374 +-0.0439563 0.147482 -0.0018962 +0.00349012 0.116915 0.0395094 +-0.0116538 0.0496371 -0.0310034 +-0.0360677 0.156277 -0.0104898 +0.0262747 0.0376552 0.0265482 +0.00369465 0.0390982 -0.00688719 +0.037401 0.0414131 -0.00242752 +-0.010004 0.0383201 0.0185669 +-0.0807853 0.0817556 0.0323751 +-0.00609738 0.037339 0.0487481 +-0.0254987 0.0945485 0.0446378 +-0.0446176 0.0345408 0.0396657 +-0.0522913 0.124591 -0.00759738 +-0.0244524 0.16187 -0.0148048 +-0.0144465 0.128429 0.00434765 +-0.0238211 0.0384511 -0.00993154 +0.0184111 0.122524 0.0307587 +-0.0815439 0.112456 0.0456165 +0.0549908 0.0567623 0.0266396 +0.0309112 0.0754873 0.0429619 +-0.0278697 0.103003 -0.0233536 +-0.0640545 0.149152 -0.0269946 +-0.0594536 0.133932 0.0368692 +0.0130152 0.130057 0.0144613 +0.0491953 0.0732159 0.0116573 +-0.0364993 0.0733348 0.0420574 +-0.0859116 0.107692 0.0193681 +0.0386236 0.109277 0.0110826 +0.00584547 0.0353648 -0.01428 +0.0198737 0.0358544 0.0359282 +-0.0174269 0.182963 -0.0250022 +0.0258436 0.0563286 -0.0217568 +0.0362122 0.112176 0.0188059 +-0.0564979 0.0805451 0.0445004 +0.0450117 0.0805305 0.000199058 +-0.043786 0.126623 -0.00583839 +0.0366462 0.100736 0.0320541 +-0.0198519 0.0357263 0.0525976 +-0.0872471 0.125707 0.0473263 +-0.0180735 0.0611876 0.0510587 +-0.0608049 0.0596005 0.019786 +0.0269735 0.121605 0.0224835 +0.033449 0.0380742 0.000639692 +-0.0174889 0.0856455 0.0572522 +-0.0298765 0.0607745 -0.022409 +-0.0371209 0.127449 0.0017956 +-0.0397839 0.0471068 -0.0160895 +-0.0245336 0.118082 0.0325274 +-0.0715136 0.0887445 0.0416191 +0.00419323 0.0880606 -0.0335488 +0.0353118 0.0520079 -0.00674902 +-0.00049849 0.101653 0.0443576 +-0.0570055 0.133804 -0.00545801 +-0.0215772 0.158162 -0.00503193 +-0.0640639 0.0351963 0.0227232 +-0.00287353 0.108795 -0.0218002 +0.0462936 0.0792458 0.00718673 +-0.00951316 0.0575536 0.0537045 +-0.0477812 0.0840973 -0.0215817 +-0.0526608 0.0504363 0.0276515 +-0.0340312 0.123966 -0.00509105 +0.00648697 0.11688 0.0387497 +0.0343069 0.0578226 0.0371782 +-0.0220745 0.169763 -0.0127977 +-0.0106374 0.0466553 -0.0295813 +0.0335656 0.114779 0.000629741 +-0.0269131 0.180109 -0.00739997 +0.0390081 0.105539 0.000161276 +-0.00175381 0.0993639 -0.0251444 +0.040909 0.0985658 0.0261474 +-0.0617277 0.159994 -0.0345941 +-0.0434138 0.111151 -0.0176174 +0.0319241 0.0700307 0.0408624 +-0.0349471 0.109117 -0.019515 +-0.0733885 0.111282 0.0466166 +0.0354121 0.0430461 -0.00417186 +-0.093028 0.117371 0.013308 +-0.0756832 0.149968 -0.01987 +0.0201512 0.0605237 0.0483852 +-0.0639979 0.158311 -0.048587 +0.0410638 0.0928718 -0.0077952 +-0.0845757 0.151155 0.0298105 +-0.0752762 0.167899 -0.0253615 +0.0587584 0.0580034 0.00517536 +-0.070971 0.166609 -0.0480118 +-0.0488701 0.10281 -0.0210946 +-0.0609926 0.128204 -0.00783795 +-0.0772884 0.155547 -0.0128979 +0.0120566 0.130535 0.0112565 +-0.0655484 0.039711 0.0142785 +-0.0465128 0.0438401 0.043121 +-0.0215234 0.0739469 0.0526909 +0.0238579 0.0490757 0.0395236 +-0.00446924 0.111373 0.0424038 +-0.0646993 0.150616 -0.0327557 +-0.0547216 0.118372 0.0366122 +0.055991 0.067441 0.024671 +-0.0164973 0.0485745 0.0476342 +-0.0243246 0.0415463 0.0540712 +-0.0679818 0.0653371 -0.00356488 +-0.0887934 0.125677 0.0460403 +-0.0672794 0.176766 -0.0591515 +-0.0201696 0.169725 -0.0202727 +0.0232197 0.0818757 -0.0256198 +-0.0521106 0.0503642 0.0236349 +-0.00378569 0.0826645 -0.03749 +0.0103848 0.03606 -0.0224393 +0.0144027 0.129384 0.00642559 +0.0154718 0.101771 0.0468044 +-0.0222044 0.174173 -0.0211642 +0.0605561 0.0664891 0.0161665 +-0.0110072 0.128401 0.0244439 +0.00979123 0.127622 -0.00353983 +-0.0586426 0.0335837 0.0110854 +-0.0324964 0.0518418 0.0373712 +0.0339681 0.114736 0.0222644 +-0.0278327 0.179989 -0.0150111 +0.0505141 0.0610459 0.0301699 +-0.084345 0.0818627 0.0244959 +-0.0780694 0.106243 0.0333548 +-0.0400434 0.149481 0.00241998 +0.0415851 0.0779004 0.0302476 +-0.0934884 0.117419 0.0203018 +0.0145324 0.0686382 0.0526166 +0.0105088 0.0546576 0.0523588 +-0.0166719 0.128014 0.0194984 +0.0111864 0.115382 -0.0163281 +0.0433489 0.0761902 -0.00378764 +0.00361131 0.0929227 -0.0324448 +0.0374765 0.0967619 0.0332563 +0.0118435 0.0418607 0.0449613 +0.00151372 0.070315 0.0563646 +-0.089555 0.092956 0.0194329 +-0.0309867 0.0458642 -0.0271867 +-0.0127025 0.0628523 -0.0366298 +-0.0211402 0.175693 -0.0149194 +-0.0410644 0.0466663 -0.0156422 +0.0229642 0.0564103 0.0453711 +-0.0689131 0.06155 0.0163724 +-0.0351956 0.0394954 0.0475468 +0.0545544 0.0478595 0.011201 +0.0307617 0.0848812 0.0428147 +-0.0854234 0.100771 0.000422318 +-0.00263926 0.0481807 -0.0301073 +0.0341204 0.0781827 0.0405841 +-0.0753485 0.151324 -0.0238793 +-0.040104 0.0359968 0.0427867 +0.00880995 0.127795 -0.00370552 +-0.0546717 0.0587861 -0.00643621 +-0.0527782 0.0338002 0.0103069 +-0.0644915 0.087588 0.0448694 +-0.0649403 0.125308 -0.00887181 +-0.0623267 0.035582 -0.00867786 +-0.0178682 0.127784 0.00598386 +-0.0477624 0.119115 -0.0139706 +-0.0272958 0.178509 -0.0169626 +-0.036773 0.0446897 0.0419462 +-0.0643144 0.0445281 -0.000908113 +0.0310215 0.117934 0.00259488 +-0.0657027 0.155342 0.0275329 +0.00812544 0.105869 -0.0206053 +-0.0845132 0.150109 0.0051703 +0.0147267 0.0343671 -0.00408399 +-0.0738652 0.150214 0.0382196 +-0.0396346 0.151103 -0.0056598 +-0.0548476 0.0665624 0.0361422 +-0.053656 0.116868 0.0345992 +0.0407085 0.0956949 -0.00580768 +-0.0407505 0.126266 0.0196745 +0.0327193 0.0632979 0.0402054 +-0.0423878 0.124291 -0.00941969 +0.0148847 0.0378033 0.0441286 +-0.0385893 0.036902 -0.00962928 +-0.0735502 0.095526 0.040254 +-0.0625469 0.169393 -0.0495927 +-0.0666556 0.0360676 0.0353877 +0.00702297 0.127188 0.0294846 +0.0123661 0.0479119 -0.026429 +0.00707963 0.0365612 -0.00575515 +0.00660499 0.0617786 0.0553203 +-0.056364 0.156406 0.0105108 +-0.02141 0.0511007 0.0448554 +-0.0417892 0.0855226 -0.0213401 +-0.0454873 0.0789625 0.0423892 +0.0541155 0.0731329 0.017974 +0.0124978 0.092313 0.0523832 +-0.0184886 0.0801089 0.0571361 +-0.0426749 0.0622014 -0.0131851 +-0.0711139 0.162407 -0.0449498 +-0.0234912 0.0474961 0.0510145 +-0.0722633 0.0367738 0.0082856 +-0.0207862 0.0638606 0.0480406 +-0.0570496 0.0562866 0.00362097 +0.023226 0.077646 -0.0258357 +0.00592655 0.0339685 0.0148513 +0.0327331 0.0942636 0.0404449 +0.0170625 0.0448711 0.043693 +0.0335588 0.0862851 0.0416032 +-0.0588111 0.0334057 -0.00501142 +-0.0718597 0.148728 0.0404251 +-0.0700765 0.0619608 0.0139832 +-0.0302069 0.174221 -0.00514504 +-0.088803 0.151599 0.0211964 +0.0155832 0.0893609 -0.0286847 +0.0270636 0.120631 0.00113345 +0.033576 0.0781814 -0.0177928 +-0.0894235 0.0942851 0.0164251 +-0.0386513 0.0344774 0.0357393 +-0.0348698 0.176878 -0.00628812 +-0.0102548 0.179004 -0.0295955 +-0.0708792 0.115031 -0.00817569 +0.0203316 0.0551325 -0.0272049 +-0.0942207 0.120117 0.0202902 +-0.0704743 0.121802 0.053345 +0.0441954 0.0847004 0.0251589 +-0.0662148 0.171945 -0.0435535 +-0.0579078 0.0494657 0.0056917 +-0.0364996 0.0789928 0.0425809 +0.00849936 0.0744764 0.056192 +-0.0263916 0.0563779 0.0383176 +-0.0556017 0.0336949 -0.0101219 +-0.0593537 0.140997 0.0335026 +-0.0941834 0.120103 0.0162919 +0.0184196 0.0442138 -0.0226321 +-0.0628603 0.033866 0.0135258 +-0.0229828 0.0566251 0.0433992 +-0.0295276 0.0383617 0.0343291 +-0.0439439 0.166904 -0.00881722 +-0.00750585 0.0633646 0.0562436 +-0.0553809 0.0486564 0.0109541 +0.0106398 0.0390088 0.044914 +0.0440071 0.0846602 -0.00280808 +-0.0184891 0.0743773 0.0548673 +0.0214529 0.0415824 -0.013701 +-0.0137336 0.0383402 0.0141683 +-0.0895155 0.0983259 0.0124123 +0.0129339 0.063079 0.0520141 +-0.0749499 0.112554 -0.00662315 +-0.0128237 0.0855345 -0.0387685 +-0.0175101 0.0381991 0.0207599 +-0.065046 0.0423247 0.012291 +-0.0570589 0.0507155 -0.000374425 +-0.0630045 0.132588 -0.00795426 +-0.0415001 0.0972709 0.0420669 +0.0313679 0.117954 0.0212794 +-0.00373539 0.0684024 -0.0350771 +-0.0896129 0.139294 0.0321884 +-0.0239769 0.0381215 0.0231095 +0.0347467 0.0670098 -0.0158076 +0.0178644 0.101883 -0.0218675 +-0.064813 0.0428917 0.034688 +-0.0618962 0.0443648 0.0286813 +0.0425837 0.100055 0.002186 +-0.056712 0.0708617 -0.0156392 +-0.066713 0.154086 0.0315791 +-0.0348246 0.0872331 -0.0245609 +-0.0155018 0.080076 0.0569734 +-0.0431381 0.128903 0.00398376 +0.0456202 0.0421608 0.019117 +-0.0637474 0.0766435 -0.0177206 +-0.070335 0.0339385 0.00479187 +-0.0452276 0.131073 0.0164666 +0.0175902 0.128186 0.00902123 +-0.0332219 0.0344808 0.0386469 +-0.000130337 0.0395577 0.0357254 +-0.0384117 0.12376 -0.00887525 +-0.0384745 0.0533908 0.0391471 +-0.0105486 0.0921685 -0.035821 +-0.0292627 0.125707 0.0105611 +-0.0740612 0.16798 -0.0430295 +-0.0794475 0.0732175 0.0216948 +-0.0525459 0.0430871 -0.00935537 +-0.0275149 0.0591111 -0.027433 +-0.0608279 0.0910686 -0.0191968 +0.0214831 0.0388585 0.0402401 +-0.0185078 0.0382343 0.0205228 +-0.0193476 0.0973552 -0.0251961 +-0.014626 0.03858 -0.00263697 +0.0364765 0.110061 0.0246179 +0.0394879 0.0499122 0.0322705 +-0.0738314 0.151256 -0.033887 +-0.0276072 0.0488225 -0.0246209 +0.0254616 0.0727112 0.0456024 +-0.054118 0.157553 -0.00229988 +-0.0100751 0.129607 0.0204184 +-0.0507271 0.115538 0.0335799 +-0.064203 0.176904 -0.0544031 +-0.0327997 0.0624741 -0.0154176 +-0.050486 0.0585567 0.0325562 +-0.0115057 0.0716604 0.0558672 +-0.041271 0.0338554 -0.00188008 +0.00149737 0.0969588 -0.0286791 +0.0222207 0.0833264 -0.0261432 +-0.0379669 0.0433397 0.0417712 +0.0433566 0.094461 -0.000803958 +-0.0485055 0.0490796 0.0381424 +-0.0398915 0.109923 -0.0189257 +-0.00650042 0.0533369 0.0530605 +-0.0902689 0.112791 0.0182006 +-0.0256204 0.0436547 -0.0287136 +-0.0432877 0.171276 -0.00598005 +0.00651867 0.0674599 0.0552944 +0.00755739 0.101711 0.046537 +0.0201484 0.0899648 -0.02526 +0.00621941 0.0351341 0.00654928 +-0.0641258 0.0611318 0.00140431 +-0.0841699 0.0979316 0.0296062 +-0.0893171 0.151601 0.0194969 +-0.0509112 0.0517382 0.0331779 +-0.0345095 0.0761212 0.0417709 +-0.0210879 0.0852798 0.0561484 +-0.0647084 0.033787 -0.00655215 +0.0485032 0.0638048 0.0293893 +0.0553414 0.0563023 0.000211666 +0.031191 0.0977616 -0.015509 +-0.0271419 0.168228 -0.0179326 +-0.0594934 0.0832968 0.0436941 +0.00712427 0.107292 -0.0202517 +-0.0670075 0.139964 -0.00790796 +-0.072631 0.169409 -0.0470274 +-0.0668128 0.0894987 -0.0177562 +-0.0638648 0.166212 -0.0336016 +-0.0305285 0.0348948 0.0458677 +-0.07494 0.0707543 0.0282709 +0.0217204 0.105135 -0.0173432 +0.0129112 0.111627 -0.0182976 +-0.0346615 0.0395406 0.0484261 +-0.0244963 0.105758 0.0419767 +-0.0275166 0.057436 0.037149 +-0.071563 0.151347 -0.0436244 +-0.00477478 0.0812297 -0.0373809 +-0.0544968 0.108447 0.0390956 +0.0191276 0.0370481 -0.0116797 +-0.0477678 0.125154 -0.0082648 +0.00907863 0.112423 -0.0191367 +-0.0148223 0.129108 0.012888 +-0.0685095 0.148391 0.0402581 +0.0438124 0.093116 0.0231537 +-0.0295173 0.175738 -0.0052542 +-0.0580932 0.155356 0.0200663 +-0.0140302 0.116852 -0.0157862 +-0.00427283 0.034883 0.0462122 +-0.0365117 0.0860935 0.0436284 +0.0428337 0.0789534 -0.0047828 +0.0143759 0.121374 -0.0108038 +-0.0478629 0.0335429 0.00613354 +0.0399096 0.0632641 -0.00677014 +0.0382182 0.0855917 -0.0147556 +-0.0586226 0.156199 0.00971481 +-0.0768739 0.0698402 0.0216311 +0.0359859 0.0660034 0.0379002 +-0.0517494 0.0782459 -0.0193853 +-0.0836382 0.0870656 -0.00453769 +0.0314216 0.0415146 -0.00377022 +-0.0633942 0.159878 -0.0495887 +-0.0762229 0.149992 -0.0128764 +0.0360298 0.0573371 -0.00970954 +-0.0378631 0.100009 -0.0219618 +-0.0631703 0.172516 -0.0516045 +-0.0893681 0.0902559 0.0194368 +0.0559048 0.0631077 0.000905369 +0.00350533 0.0758855 0.0563752 +0.0327662 0.0475454 0.0312717 +-0.0144964 0.104421 0.0432413 +-0.0925078 0.121485 0.0292837 +-0.0225266 0.123574 -0.00478676 +0.027859 0.114683 -0.0075901 +0.0336358 0.0725575 -0.0168317 +0.0133955 0.0900754 0.0528858 +-0.0320964 0.160758 -0.0138294 +-0.0665218 0.173689 -0.0465659 +-0.0314315 0.062325 -0.0194293 +0.0355057 0.0498307 0.031489 +0.0409937 0.0830284 -0.00976566 +-0.0484259 0.152144 0.0105657 +-0.0760489 0.0702549 0.00053996 +-0.0939567 0.121435 0.0142863 +0.0458128 0.0848143 0.0141708 +-0.088753 0.130866 0.00325856 +-0.0762076 0.0680671 0.0162505 +0.0295583 0.0594698 -0.0188239 +-0.0470685 0.0362699 0.0454096 +0.0515085 0.0678015 0.0264788 +0.0229945 0.0535474 0.0436214 +0.0102584 0.0738736 -0.0323425 +-0.0208293 0.0841002 -0.0385977 +0.013479 0.118711 -0.0139326 +-0.0577142 0.0723919 -0.0167433 +0.0343469 0.0740244 -0.0157906 +-0.0384895 0.050603 0.0393394 +-0.0411819 0.166655 -0.0111213 +-0.0314187 0.0525029 -0.0133876 +-0.0530781 0.119794 0.0354828 +0.0402398 0.0815675 -0.0107641 +-0.0334936 0.0817447 0.0419617 +-0.0284374 0.0381394 0.00411543 +-0.0669412 0.126769 -0.00883964 +-0.089797 0.129515 0.00524651 +-0.0607661 0.0796035 -0.0191344 +-0.0878523 0.0860961 0.00747941 +-0.00447426 0.0385132 0.0213354 +0.0222429 0.0463236 0.0406841 +-0.0167958 0.0799195 -0.0388883 +-0.0714505 0.16941 -0.0490283 +-0.00251639 0.0442645 0.0466529 +-0.0648891 0.0981501 -0.0170112 +0.00754987 0.100371 0.0472771 +-0.0694963 0.16803 -0.0520069 +-0.0920162 0.126943 0.0352547 +0.0233968 0.0355618 0.0133136 +-0.0660161 0.169448 -0.0590294 +-0.0555411 0.128344 0.0372391 +-0.0488244 0.0927169 -0.0215945 +0.0343104 0.114465 0.0209626 +-0.0501985 0.140132 0.0173988 +-0.0658096 0.0445087 0.000718728 +-0.0512856 0.136981 0.000438627 +-0.0269157 0.0703179 -0.0345192 +-0.0636699 0.112355 0.0376208 +-0.0754912 0.144221 0.0449451 +-0.062524 0.167829 -0.0475902 +0.030542 0.0511254 -0.0127382 +-0.0237052 0.0596068 -0.0321069 +-0.0547922 0.153188 0.0241866 +-0.0414961 0.0902351 0.0425692 +-0.0494981 0.0477699 0.0395132 +0.0289271 0.110086 0.0349831 +-0.0402206 0.0433137 -0.0233156 +-0.0246897 0.0560336 -0.0294195 +0.00733033 0.058195 -0.0305865 +-0.0633574 0.155908 0.0123853 +-0.0679376 0.162368 -0.0549778 +-0.0588165 0.0667309 0.0351477 +-0.0598716 0.0453976 -0.00333599 +-0.0238165 0.0812337 -0.0381734 +-0.047565 0.0370224 -0.0142792 +-0.010699 0.104948 -0.0231645 +0.0375184 0.0915609 -0.0128884 +-0.056974 0.0573893 0.011763 +-0.00401542 0.033994 -0.0206047 +0.0133173 0.0638081 -0.0300932 +-0.0402517 0.127178 -0.0024642 +0.00549546 0.0489597 0.051102 +-0.0755445 0.0668624 0.00857418 +-0.0465015 0.0643139 0.0383309 +0.00586085 0.130491 0.00185259 +-0.00908444 0.0392597 0.0359512 +-0.0724815 0.0696506 0.0297377 +-0.0588318 0.146817 0.0344225 +-0.0460118 0.126697 0.0245216 +-0.044079 0.0336811 -0.000461832 +-0.0565021 0.0946206 0.04473 +-0.0615844 0.155311 -0.0225818 +-0.0650869 0.155169 -0.00713868 +-0.089472 0.092961 0.0204149 +-0.0824758 0.0764829 0.0200121 +0.0429803 0.0916104 -0.003806 +-0.0914285 0.144743 0.0221537 +0.00329581 0.06408 -0.0335736 +-0.0554437 0.158541 0.0079523 +-0.0624977 0.0789785 0.042462 +0.00538842 0.0383711 -0.011506 +-0.0682947 0.162375 -0.0539731 +-0.0809901 0.135346 -0.00326263 +-0.0418435 0.0928469 -0.022966 +-0.0664939 0.0917254 0.0436166 +-0.0741328 0.170753 -0.0306566 +0.00842498 0.094018 -0.0295425 +-0.00912603 0.126983 -0.00460672 +-0.0144839 0.0911543 0.0563071 +-0.0247385 0.124904 0.000549003 +-0.064327 0.034541 0.0284972 +-0.0668589 0.156842 -0.00635476 +-0.0565065 0.0629707 0.0300974 +0.0567694 0.0522665 0.0211855 +0.0120332 0.0793354 0.0543348 +0.00749695 0.108523 0.0409368 +-0.0385157 0.0761871 0.0423388 +-0.0861163 0.11208 0.0430934 +-0.0554974 0.0776601 0.0434775 +-0.0519782 0.0531903 0.0286494 +0.00382899 0.0387567 -0.00467455 +-0.0437453 0.0348723 0.00757323 +-0.0876033 0.102265 0.00739801 +-0.0538689 0.152421 0.0214004 +0.0305964 0.0407785 0.0282841 +0.0465387 0.0750529 0.00819241 +-0.0664147 0.112558 0.0425241 +-0.0212669 0.123736 0.0252343 +-0.0144966 0.0485988 0.0478804 +-0.0270125 0.0891105 0.0478066 +-0.0328048 0.0886955 -0.0250147 +-0.0387676 0.0812185 -0.0204237 +-0.0179622 0.106228 -0.0225141 +-0.0121468 0.17267 -0.0267827 +-0.0155019 0.119619 0.0357771 +-0.0763961 0.0968047 0.0374195 +-0.00349611 0.0897823 0.0565938 +-0.0378917 0.0335733 -0.0268663 +-0.0464981 0.0451704 0.0419279 +0.0287219 0.115289 -0.00622497 +-0.0639806 0.135327 0.039077 +-0.045498 0.105695 0.0408472 +0.0546227 0.0668075 0.00110467 +-0.0690913 0.143 -0.0123014 +0.0356753 0.0619319 0.0374332 +-0.0141081 0.128922 0.00736661 +-0.0561495 0.0341243 0.0270787 +-0.038546 0.128369 0.00715642 +-0.0876142 0.116272 0.0465171 +-0.0722303 0.134063 0.0500963 +-0.0156039 0.0392636 -0.0272219 +-0.0361326 0.034299 0.0293707 +0.0285657 0.120967 0.00738594 +0.0111022 0.114226 -0.0170859 +-0.0218549 0.118022 -0.0129203 +0.0460721 0.0848306 0.00817735 +-0.0800935 0.138964 -0.00379173 +-0.0574953 0.0747475 0.0420563 +-0.00684325 0.130599 0.0100344 +0.020602 0.0768409 0.0509288 +0.0342103 0.0795441 0.0407378 +-0.0387822 0.0841715 -0.021953 +0.00854197 0.104373 0.044167 +0.0284181 0.0835438 0.0446794 +-0.0809789 0.0720684 0.0125422 +-0.0870329 0.152942 0.0187545 +0.0227098 0.105005 -0.0172062 +-0.0259693 0.156664 -0.00260696 +0.00630512 0.0970077 -0.026738 +-0.0293004 0.175699 -0.00559167 +-0.00764633 0.048167 -0.0303862 +-0.045682 0.0680577 -0.0156409 +-0.0545225 0.0645764 -0.00897215 +-0.0511988 0.137011 0.0243968 +-0.00714364 0.101607 -0.0236448 +0.00975279 0.123922 0.0333795 +-0.069363 0.163799 -0.0509746 +-0.000145407 0.0355938 -0.0156782 +0.0251101 0.0562501 -0.0227775 +0.047185 0.0692848 0.0242283 +-0.0610844 0.0335982 -0.00747508 +-0.0215973 0.0387212 -0.015323 +0.00621551 0.0824281 -0.0337654 +-0.0768656 0.120803 -0.0071099 +-0.072234 0.147352 -0.0242316 +-0.0251276 0.16525 -0.016804 +-0.00350994 0.110634 -0.0212045 +-0.051883 0.143128 0.0183637 +0.0388034 0.0687739 -0.0117998 +0.0522529 0.049588 0.0243549 +-0.0484974 0.0974063 0.0440017 +0.0292296 0.08295 -0.0208022 +0.0215976 0.121636 0.0305088 +-0.0576661 0.143885 0.0324483 +-0.062789 0.152113 -0.0295989 +-0.0686144 0.0632303 0.0220506 +-0.0812769 0.136213 -0.00276757 +-0.0898521 0.112924 0.020019 +0.0399617 0.0984844 -0.00581339 +-0.0197337 0.0627381 -0.0357065 +-0.0715197 0.0915892 0.0417662 +-0.0176796 0.037751 -0.0173923 +-0.0034931 0.0519852 0.0535284 +-0.0477302 0.0753108 -0.0175447 +-0.0720239 0.158203 -0.0389152 +0.012618 0.0562866 0.0514947 +-0.00341476 0.129699 0.000449344 +0.00761699 0.0345564 0.0219225 +0.0197796 0.101487 -0.0214363 +-0.0718751 0.150885 -0.0428436 +0.0226049 0.0994887 0.0451477 +-0.0275114 0.0379423 0.00991362 +0.0449899 0.0861501 0.00118902 +-0.0724942 0.0928706 0.0413391 +-0.0668563 0.151928 -0.044894 +-0.00758529 0.0395118 0.037828 +-0.0717266 0.143977 -0.0139286 +-0.0485566 0.0446478 -0.0101195 +-0.0498454 0.098516 -0.0220736 +-0.0687032 0.155739 0.000270534 +0.0305837 0.118921 0.00529549 +0.0181431 0.0408036 0.0434958 +-0.0644897 0.161538 -0.0184978 +-0.082117 0.127195 0.0520765 +0.0194801 0.0975854 0.0469408 +-0.0593004 0.0460479 0.0107053 +-0.051494 0.097382 0.0437255 +-0.0629042 0.151488 -0.0283316 +-0.0520794 0.132523 0.0317044 +-0.0086348 0.124041 -0.00947049 +-0.0408505 0.0971293 -0.022095 +-0.0501242 0.144161 0.00100252 +-0.0374501 0.127748 0.0031441 +-0.0242006 0.107431 -0.0217757 +-0.0185705 0.0597254 0.0501838 +0.0506634 0.0663167 -0.000433246 +-0.0778197 0.0981202 0.035968 +-0.0344836 0.0604651 0.0395531 +0.0141481 0.100268 -0.0227789 +-0.0201048 0.0920391 0.0535514 +0.0405223 0.0582848 0.0307512 +-0.0234669 0.126337 0.0156088 +-0.0879353 0.140547 0.0390784 +0.0495003 0.0691238 0.025332 +-0.0550177 0.034541 0.0409139 +-0.0558687 0.156831 -0.000812957 +-0.033113 0.162236 -0.0143657 +-0.0040053 0.127195 0.0298616 +0.00247063 0.0977635 0.0514765 +-0.0372934 0.126961 0.0179492 +0.00433485 0.120467 -0.0137766 +0.00930976 0.0595795 -0.0301167 +0.0437257 0.0902921 0.0241674 +-0.0363397 0.0344675 0.0327184 +0.000637516 0.0346318 0.0420689 +0.0283669 0.0563832 0.0408635 +-0.0890554 0.136524 0.0291987 +-0.0526322 0.0603614 -0.00917272 +-0.0555168 0.0610654 0.0262173 +-0.0398616 0.102806 -0.020798 +-0.0554959 0.0959795 0.0436611 +-0.0625279 0.0435825 0.012569 +-0.012539 0.0432081 0.0504383 +-0.0295399 0.0777526 0.042206 +0.0250153 0.0699448 0.0449142 +0.0418505 0.0929433 -0.00581175 +0.00749052 0.0923616 0.0534281 +-0.0508873 0.105589 -0.0194525 +-0.0577516 0.0752955 -0.0185275 +-0.0341251 0.166782 -0.00385534 +0.0204867 0.0961927 0.0470968 +-0.0860696 0.110951 0.0368762 +-0.0623929 0.0445563 0.039213 +0.0212831 0.0679005 -0.027755 +-0.0459741 0.03576 0.00812075 +-0.0128757 0.105895 -0.0226089 +-0.0713104 0.164383 -0.0152637 +-0.00570768 0.129479 0.0248833 +-0.0759611 0.0715461 -0.00349282 +-0.0154987 0.0485755 0.0476399 +-0.0271627 0.125166 0.0172175 +-0.052909 0.0559665 0.0126205 +0.0445771 0.0875296 0.0231612 +-0.0679602 0.132601 -0.00851511 +-0.0735016 0.14861 -0.0288774 +0.0321816 0.0968615 0.0396789 +-0.0617331 0.156868 -0.0205842 +-0.0310423 0.0467686 -0.0260418 +-0.0285615 0.0382432 0.0537594 +-0.0934477 0.121479 0.0262963 +-0.0220941 0.0710555 0.0505203 +-0.0299308 0.0348009 0.0443343 +-0.0161025 0.0382877 0.022773 +-0.0328698 0.101492 -0.0223548 +0.0454742 0.0412367 0.0106737 +-0.028101 0.0890412 0.0460663 +-0.0440047 0.127209 -0.00443148 +0.0593281 0.0649895 0.00613553 +0.0127896 0.130142 0.00867876 +0.0391468 0.0887707 0.0338836 +0.0223265 0.0535979 0.0444334 +-0.0897234 0.125377 0.0042981 +0.0287018 0.0447465 0.0341399 +-0.0924969 0.121493 0.0302824 +-0.0717492 0.0821807 -0.0161321 +-0.0756445 0.156326 -0.00458549 +0.00148921 0.104407 0.0433078 +-0.0361895 0.0355992 0.0192692 +-0.0662775 0.0734947 0.0382764 +-0.0730867 0.169281 -0.0259539 +-0.00640617 0.0386668 0.0262232 +-0.053287 0.0610602 0.0282137 +-0.0820828 0.0871799 0.032118 +-0.0474969 0.0477925 0.0396528 +0.0505278 0.0445977 0.0162148 +0.0314571 0.0378867 -6.50808e-05 +0.0244076 0.117212 -0.0083203 +0.0193833 0.052146 -0.0261511 +0.0213663 0.0593118 -0.0264401 +-0.0223265 0.0696009 0.0493961 +-0.0803036 0.100707 0.0327244 +0.0516025 0.0650498 -0.00116678 +-0.0572939 0.0597447 0.0223608 +0.0272121 0.088765 -0.0222319 +-0.0760712 0.152304 0.0343668 +0.0287584 0.0359201 0.00291435 +-0.00327774 0.125061 -0.00864173 +-0.0492123 0.134029 0.0252722 +-0.0157732 0.0799164 -0.0389165 +0.0137184 0.0699424 0.0531931 +0.0181521 0.124421 0.0277923 +0.0195548 0.127052 0.0182976 +-0.0788582 0.171448 -0.0399026 +-0.0820398 0.150272 0.03397 +0.0134064 0.0478115 -0.0258783 +-0.0637307 0.0344451 0.0269565 +0.00741391 0.0920665 -0.0315473 +0.0394368 0.0688303 -0.0107955 +-0.064416 0.154996 0.00586526 +-0.066663 0.144317 -0.015468 +0.0353499 0.042038 0.028119 +-0.00141558 0.03896 -0.0133998 +-0.0338581 0.0334994 -0.0260028 +0.0142608 0.0359816 -0.0203372 +-0.0776263 0.175005 -0.043567 +-0.0525965 0.0345626 0.0431188 +0.0335361 0.0372674 0.00265432 +0.0308902 0.0632769 0.0410591 +-0.0895335 0.144692 0.0121557 +-0.0612693 0.0337096 0.0122134 +-0.00661675 0.0976221 -0.0294208 +-0.0504448 0.128295 0.0323161 +-0.0571803 0.062383 0.0287138 +-0.0529076 0.136719 0.0287121 +-0.0247725 0.0390001 0.0365321 +-0.00277907 0.0769693 -0.0364873 +-0.0894255 0.0956236 0.0134235 +0.0183336 0.0566072 -0.0279953 +-0.0945117 0.124183 0.0222757 +-0.0670539 0.154574 0.0299913 +0.0377471 0.104052 -0.00484079 +-0.0277489 0.0877005 0.0471838 +-0.0465602 0.122394 -0.0114017 +0.0512982 0.0545874 -0.00353058 +-0.0255237 0.116678 0.0329121 +-0.0558854 0.0479468 0.0296668 +-0.0384602 0.127124 -0.00162988 +0.00941217 0.040392 -0.0233006 +-0.0788042 0.109939 0.0428886 +-0.00952807 0.0385271 0.0257083 +-0.0151514 0.041952 0.0515406 +-0.0896796 0.114349 0.0422656 +-0.0130415 0.0639857 0.0543784 +-0.0709434 0.168021 -0.0490096 +-0.042508 0.0562794 0.0398023 +-0.0723361 0.155599 0.00334302 +-0.0804662 0.0800422 -0.00555374 +-0.0320486 0.122707 -0.00572396 +0.0215589 0.120837 -0.00625561 +0.0181166 0.118416 -0.011621 +-0.0473179 0.0397941 -0.0120624 +-0.0797756 0.0706254 0.0155549 +0.00931098 0.130351 0.0216675 +-0.0082877 0.0388999 0.0310374 +-0.0475138 0.156385 0.00914965 +-0.000599084 0.0391028 -0.0250468 +-0.0114889 0.103024 0.0436761 +-0.0176179 0.0378672 -0.0275216 +-0.0423688 0.123346 -0.0104204 +-0.0387324 0.156611 0.00532643 +0.0047217 0.0940547 -0.0316305 +-0.0728512 0.152626 -0.0378881 +-0.00186255 0.103074 -0.0227526 +0.0529842 0.0692584 0.0249064 +-0.0792715 0.107765 0.0320009 +0.0324709 0.0353558 0.0097886 +-0.083008 0.154405 0.0171359 +0.0123335 0.0581189 -0.0294366 +-0.0570144 0.0335354 0.00427397 +-0.0520347 0.0349067 0.0446489 +0.0239781 0.084017 -0.0250643 +0.0450177 0.0875447 0.000184881 +-0.00260981 0.0434451 -0.0255195 +-0.00349422 0.0718336 0.0581766 +-0.0470698 0.154668 -0.0068409 +-0.0764224 0.152995 0.0327283 +-0.0382612 0.0345343 0.0375294 +-0.00240135 0.128537 0.0275513 +-0.0924704 0.117461 0.033305 +-0.0714888 0.127424 0.0521873 +-0.0439578 0.12961 0.0140149 +-0.0725837 0.0763091 -0.0123208 +-0.0595593 0.0341176 0.0246105 +-0.00343172 0.0385593 0.0215021 +0.0311358 0.0782102 0.04331 +-0.0494476 0.122586 0.0319364 +-0.0665119 0.0621274 0.0216726 +0.0544596 0.058178 0.0276568 +-0.0495972 0.118308 0.0316941 +-0.0314789 0.174225 -0.0034609 +-0.0728795 0.116451 -0.00740226 +0.00249754 0.108619 0.0424686 +0.0280724 0.0678498 -0.0217391 +-0.0278862 0.165359 -0.00713919 +-0.0117661 0.182389 -0.0287496 +-2.83383e-05 0.0370817 -0.0151505 +-0.0721646 0.155417 -0.0379087 +0.0297368 0.100819 0.0396604 +0.0224793 0.124852 0.00370943 +-0.0278708 0.104417 -0.0229648 +-0.0388092 0.0372561 -0.0289196 +0.0393949 0.0519685 -0.00680892 +-0.0114113 0.0387598 0.0305221 +-0.0668989 0.0372019 0.0312012 +-0.0634206 0.167809 -0.0425955 +-0.0738654 0.102167 -0.0123482 +0.000515293 0.09714 -0.0288497 +0.00321341 0.034575 0.0192003 +-0.0313524 0.158102 0.00192058 +-0.0879015 0.148743 0.00925863 +-0.0552908 0.158294 -0.000771282 +0.00144018 0.127924 -0.00374837 +-0.0374859 0.0491992 0.0393813 +0.0225251 0.100664 -0.0205487 +-0.0149527 0.0339242 -0.0208085 +0.00432828 0.0582523 -0.0314184 +0.0463488 0.0792498 0.00918224 +-0.0375014 0.105589 0.0387333 +-0.062506 0.149124 -0.0145611 +0.00329475 0.129383 -0.00133175 +-0.00689488 0.0384553 0.0136435 +-0.0384034 0.0343958 0.0323426 +-0.062465 0.163086 -0.0495893 +-0.0639661 0.0690471 0.0355624 +-0.0131121 0.0626059 0.0545133 +-0.0449324 0.0358062 0.00829108 +0.0406445 0.0871881 -0.0107716 +-0.0230795 0.0932192 0.0494322 +-0.0186385 0.0465274 -0.0284289 +-0.0571213 0.0576422 0.00058007 +-0.0705055 0.0343308 -0.00278598 +-0.0578994 0.112578 -0.0159728 +-0.0106785 0.0383169 0.0202432 +-0.0593417 0.119814 0.0404797 +-0.0505461 0.0403717 -0.011217 +-0.0453989 0.0342539 -0.0215146 +-0.011074 0.178648 -0.0249266 +-0.0523515 0.0582314 0.0273813 +-0.0254941 0.0486931 0.0489695 +0.0374187 0.0855245 -0.0157145 +0.0453002 0.0932088 0.00816687 +-0.0612769 0.133878 0.0377403 +0.00152786 0.0745369 0.0570999 +0.0245032 0.122816 0.00162459 +-0.00938967 0.130192 0.0162996 +-0.0703883 0.0339052 -0.000577152 +-0.0733601 0.156855 -0.0299134 +-0.0171472 0.166778 -0.0196136 +0.0116998 0.0819851 0.0538895 +-0.0502854 0.11522 -0.0158495 +0.050316 0.0546413 -0.00421167 +-0.0667548 0.115724 0.0491405 +-0.0609102 0.120922 -0.00906619 +-0.0866023 0.111811 0.0414218 +-0.0669546 0.128237 -0.00895731 +-0.0654028 0.177571 -0.0533847 +-0.0437352 0.0753785 -0.0184868 +-0.0329958 0.0793378 -0.0275102 +-0.00469334 0.101051 0.0441761 +-0.0137252 0.0671481 -0.0375067 +-0.0531289 0.138241 -0.000765665 +-0.0361236 0.163705 -0.0141169 +-0.0249029 0.0722756 0.0462509 +-0.0119797 0.0383916 0.0235247 +-0.0246067 0.157782 -0.00250374 +-0.0748771 0.109206 -0.00842538 +-0.0314894 0.0845774 0.0421902 +-0.0849159 0.123546 -0.00333555 +0.052731 0.0672551 0.000627241 +0.0453449 0.0710055 0.0220458 +-0.0665131 0.0419133 -0.00333369 +0.0194908 0.113962 0.0368661 +-0.0674148 0.142782 -0.0112266 +-0.0931203 0.121503 0.0403997 +-0.0084076 0.0932235 -0.0348708 +0.0125532 0.0900642 0.0534187 +0.0432399 0.0747788 -0.00379578 +0.00477967 0.130785 0.0214562 +0.0461172 0.0759623 0.0190037 +-0.0870553 0.118453 0.000244653 +0.00651257 0.056103 0.0529931 +-0.0623783 0.167824 -0.0485899 +-0.0258496 0.0864897 0.0509722 +0.0602482 0.0581464 0.0141691 +-0.0923082 0.120116 0.0282975 +0.00750533 0.0660627 0.0552439 +0.060666 0.0609482 0.0151682 +-0.0674289 0.114212 0.0481237 +-0.0514122 0.146842 -0.00193867 +-0.0768562 0.117877 -0.00659127 +-0.0825551 0.152911 0.00706582 +-0.0839745 0.0804809 0.0225006 +0.041166 0.0819934 0.0314416 +-0.0655442 0.155124 -0.0481259 +-0.0384965 0.0620329 0.0413169 +-0.0627141 0.159943 -0.0425974 +-0.0767176 0.159013 -0.0120318 +-0.0856607 0.0832001 0.00448541 +-0.0278526 0.181478 -0.0120494 +0.0114013 0.0419017 -0.0239008 +0.0243085 0.123343 0.00295625 +-0.0474528 0.119349 0.0293599 +-0.0304487 0.0334492 -0.0290445 +-0.0696417 0.0422524 0.0026904 +-0.0644028 0.146849 -0.019975 +0.0503218 0.0589081 -0.00447436 +0.0476236 0.0467222 0.0264254 +-0.0303554 0.117939 -0.0127791 +0.0338995 0.0591949 0.0383404 +-0.0746238 0.166812 -0.0222329 +-0.0186858 0.118957 -0.0119398 +0.0507854 0.0445928 0.0142166 +-0.0844285 0.0832425 0.0264792 +0.0593532 0.0636103 0.0211835 +-0.073524 0.16243 -0.0369561 +-0.0525841 0.0574366 -0.00812203 +0.0221795 0.040783 0.0405434 +0.0281375 0.0902298 0.0443276 +0.0214874 0.0892516 0.0486681 +-0.0702718 0.110271 0.0410027 +0.0386345 0.0753534 0.0347776 +-0.0646561 0.0344494 0.0319916 +-0.00663677 0.109707 -0.0221975 +-0.029185 0.0634891 -0.02746 +-0.0671416 0.145678 -0.0214457 +-0.0135214 0.0353632 -0.0181023 +-0.0376703 0.125135 -0.00632213 +0.0114179 0.0489704 0.047894 +-0.0923638 0.118682 0.00930083 +0.0483264 0.0430255 0.0152188 +0.00550628 0.0441375 0.0457857 +-0.0652333 0.0338884 0.0112389 +0.0482587 0.0460086 0.000382582 +0.0586626 0.0538435 0.0111779 +-0.000982862 0.0386959 0.0236934 +-0.0245147 0.119422 0.0312229 +-0.0155858 0.183111 -0.0209193 +-0.0867126 0.0819778 0.0134931 +-0.0785905 0.0980977 0.0353146 +-0.0907184 0.115992 0.0263684 +-0.0614986 0.158424 -0.0305881 +-0.090971 0.141997 0.0221703 +0.049023 0.0722611 0.00748575 +-0.0495658 0.0446328 -0.00989725 +0.000576288 0.0353387 0.0179719 +-0.00263978 0.131127 0.015882 +0.0260716 0.115341 -0.00830033 +-0.0571034 0.0535249 0.00264062 +-0.0471993 0.162132 -0.00733312 +-0.0750917 0.0664543 0.00723246 +-0.0617686 0.159987 -0.035592 +-0.0267825 0.079725 -0.0369434 +-0.061465 0.0438948 -0.0044823 +0.0457823 0.0862054 0.00618349 +-0.065804 0.0609905 0.0192925 +0.0197913 0.0781802 0.0515303 +0.0377275 0.0928421 0.0353087 +-0.0179367 0.12631 0.000372783 +0.0437374 0.0902563 -0.00280325 +-0.00792408 0.0384127 0.0189094 +0.0556221 0.0493651 0.00819776 +0.00641397 0.0375702 -0.0238447 +-0.0274537 0.0485303 0.0479606 +-0.0610187 0.152669 0.0336579 +-0.078775 0.170042 -0.0371202 +0.0527843 0.0462443 0.0112063 +0.0173793 0.0631583 0.049653 +-0.0359664 0.162375 -0.00125909 +-0.0559722 0.134715 -0.00446003 +-0.0484961 0.113915 0.0346796 +-0.00776872 0.0756191 -0.0375185 +-0.085947 0.104892 0.00437979 +-0.0866438 0.152376 0.0233632 +-0.0520552 0.0559741 0.0276222 +0.060777 0.0637293 0.0161648 +-0.0634196 0.15027 -0.0277557 +-0.0514307 0.12406 0.0344067 +-0.00747581 0.101243 0.0443796 +-0.0489909 0.133982 0.00241474 +-0.0174145 0.118412 -0.0133815 +0.0106556 0.0345311 0.0225637 +0.0207029 0.0950845 -0.0226908 +-0.000596635 0.0433605 -0.0249736 +-0.0628762 0.0967673 -0.0179048 +0.0102648 0.0752773 0.0552991 +-0.0281556 0.17562 -0.0175208 +-0.00541266 0.130784 0.0163058 +-0.0708319 0.0345819 -0.00103676 +-0.0204551 0.0879984 0.0554627 +-0.0640233 0.0347562 0.0388023 +-0.0255632 0.0589456 -0.0304089 +-0.0856596 0.0858717 -0.000523015 +0.000533962 0.0773889 0.0579724 +-0.0911932 0.147489 0.0241289 +-0.0536699 0.0338623 0.0207675 +-0.0330023 0.0807475 -0.0275162 +-0.0598207 0.148547 -0.00150215 +-0.0292722 0.116973 -0.0137779 +0.0389134 0.0603588 -0.00677348 +0.00149281 0.111426 0.0424095 +-0.0567184 0.0723883 -0.016755 +-0.0557727 0.0333786 -0.00437552 +-0.0514926 0.0503999 0.033682 +-0.00426203 0.129106 -0.000929037 +0.0209419 0.0535563 0.0459234 +-0.0665114 0.0931036 0.0430214 +-0.0313926 0.112895 -0.0174931 +-0.0358232 0.127618 0.00522677 +-0.0126066 0.128516 0.0224096 +0.0435838 0.0705579 0.0258591 +-0.00308793 0.0379842 0.0148477 +-0.0348769 0.105695 -0.0204457 +-0.0787914 0.0724652 0.0224838 +0.022277 0.0678419 -0.0269851 +0.021809 0.1242 0.000142479 +0.00528322 0.0682375 -0.0327226 +-0.0813944 0.0817284 0.031574 +0.0109283 0.0616839 0.0526314 +-0.0233033 0.0429927 0.0537933 +0.0135067 0.1196 0.0353985 +-0.0856435 0.0805169 0.00650219 +-0.0555634 0.0386377 0.0471443 +-0.0925953 0.129683 0.0262582 +-0.0908852 0.150208 0.0181276 +0.0274474 0.0591653 0.0430806 +-0.0143101 0.113201 -0.0178955 +-0.0695125 0.145609 0.0428052 +0.002489 0.103843 -0.0219556 +0.034067 0.0981569 0.0371457 +-0.0663951 0.140334 -0.00790584 +-0.0462961 0.162745 -0.00789878 +0.0286561 0.108194 -0.012625 +-0.0852651 0.14863 0.0333956 +-0.0290693 0.0677067 -0.0294879 +0.0414097 0.104256 0.00616512 +-0.0693963 0.0393871 -0.00132267 +0.0255358 0.0435625 -0.00763706 +0.0562825 0.0508178 0.0201866 +-0.0867977 0.144597 0.036443 +-0.0252829 0.0751884 0.0479421 +-0.0224834 0.0681349 0.0481925 +0.0575606 0.0537805 0.0213286 +0.00845802 0.129083 -0.00108013 +0.0113649 0.0538487 -0.0294289 +-0.0501252 0.138572 0.00341268 +-0.074971 0.152728 -0.0179063 +-0.0312043 0.0422041 -0.0297469 +-0.0846068 0.0791109 0.00453817 +-0.0536323 0.0602894 -0.00841331 +-0.0171387 0.171259 -0.0162017 +0.0409378 0.0397959 0.0185201 +-0.0781974 0.153502 0.00273811 +-0.0824089 0.107319 0.0275588 +-0.0723216 0.169832 -0.0271166 +-0.0716176 0.109058 0.0379622 +0.000146179 0.101649 -0.0227639 +-0.0522094 0.0517797 0.0246371 +0.0118426 0.0562933 0.0521284 +-0.0625131 0.11843 0.0430565 +0.00861514 0.0345206 0.0221572 +0.0244049 0.0741131 0.0475942 +0.00453562 0.128718 -0.00265628 +0.0138565 0.129875 0.0119166 +-0.070378 0.149076 -0.0386493 +0.0445575 0.0847276 0.0241575 +-0.0157056 0.0599572 -0.0358177 +-0.0558806 0.154815 0.016521 +0.000379078 0.127909 -0.00372478 +0.0266539 0.122169 0.0209401 +-0.0679962 0.167786 -0.0255431 +-0.0920426 0.126958 0.0362532 +-0.0594207 0.0398239 0.0196241 +0.0364837 0.0469104 0.0311466 +-0.0568261 0.139571 0.0318926 +-0.053019 0.141421 -0.000504477 +0.0435234 0.0433666 0.0249665 +-0.0277895 0.06758 -0.0314768 +0.0362342 0.0398741 0.0247937 +-0.0212837 0.0381384 0.0164325 +0.0257555 0.0994695 0.0426751 +0.0399676 0.101315 -0.00381805 +-0.0152962 0.0433291 0.0513434 +0.0573469 0.0674291 0.0231143 +-0.0520755 0.0475411 0.0216528 +0.0328365 0.0876935 -0.0188869 +0.0143568 0.0522918 -0.0274834 +-0.0725069 0.145589 0.0436497 +0.00651279 0.0647152 0.0557475 +0.00953758 0.128186 0.0275085 +-0.052193 0.119749 -0.012566 +-0.0686715 0.165205 -0.0529941 +-0.0896326 0.092928 0.0134378 +0.0289756 0.116666 0.0289439 +-0.0642519 0.118577 0.0476092 +-0.0257723 0.182903 -0.0115399 +-0.0844232 0.100698 -0.00156743 +-0.0206629 0.0479548 -0.0285983 +-0.0532393 0.0448331 0.0206817 +0.00230145 0.0612209 -0.0331693 +0.020878 0.117607 -0.0107498 +-0.0818428 0.103274 -0.0045788 +-0.0184976 0.101625 0.0435583 +-0.0305 0.0674574 0.0390127 +-0.0485029 0.0452121 0.0424266 +-0.0929791 0.124188 0.0282747 +-0.0302252 0.0523701 -0.0173649 +0.00350969 0.0897377 0.0556751 +-0.0219245 0.161037 -0.00376903 +-0.0619129 0.0458194 0.037691 +-0.00376935 0.0769928 -0.0369082 +0.0411698 0.0806497 0.0314486 +-0.0115592 0.100495 0.0448823 +-0.063251 0.15135 -0.00497603 +-0.0271171 0.059077 -0.028426 +0.0053978 0.0390279 -0.0240405 +-0.0676491 0.065582 -0.00407795 +-0.063925 0.0448804 0.0097039 +-0.00969446 0.0598719 -0.0345693 +-0.0860777 0.110355 0.00735249 +-0.0152136 0.174214 -0.0186712 +0.00434041 0.0596672 -0.031584 +0.0213842 0.125707 0.00472943 +-0.0835093 0.13127 0.0505027 +0.0165672 0.128654 0.015768 +0.0285444 0.0459645 -0.0070843 +-0.0721129 0.15894 -0.00533295 +-0.0525858 0.147787 0.0204037 +-0.0465092 0.0776139 0.042786 +-0.00623267 0.10133 -0.0233757 +0.0572046 0.0564633 0.00317356 +-0.0122436 0.112093 -0.0187249 +0.00624351 0.0810351 -0.0338384 +0.0462734 0.0764388 0.00619417 +-0.0168246 0.0855538 -0.0389836 +-0.0869607 0.111738 0.00633151 +-0.0370469 0.152854 -0.00726744 +0.0405338 0.105622 0.0141627 +-0.0164738 0.10119 0.0439603 +-0.0854876 0.0791977 0.0105097 +0.0272664 0.0760665 -0.0234764 +-0.0438604 0.102816 -0.0213031 +0.00350403 0.0533854 0.0535456 +0.0169167 0.127898 0.0201801 +0.0184941 0.0838333 0.0510457 +-0.00847869 0.123725 0.0338017 +0.0387498 0.0659721 -0.0107606 +-0.0437917 0.0422818 -0.0193111 +-0.0126098 0.0384695 0.0251301 +0.0135799 0.0887495 0.0531421 +0.00935699 0.131232 0.0131197 +0.0135065 0.109861 0.0400106 +-0.0850182 0.0831804 0.00149618 +-0.0740846 0.0657329 0.0152043 +-0.0265661 0.0706408 0.0422848 +-0.0847398 0.106178 0.00238203 +-0.0345218 0.0818067 0.0425242 +-0.0428232 0.12861 0.00263817 +0.0121427 0.100268 -0.0226753 +0.0447259 0.0749152 0.000215102 +0.0232974 0.0648673 -0.0252072 +-0.0822784 0.0951136 -0.0065238 +-0.0614844 0.158425 -0.031588 +-0.0521163 0.12407 0.0351298 +-0.0424777 0.104302 0.0409096 +-0.00407779 0.0345848 -0.0173958 +-0.0284243 0.0487716 0.0462084 +-0.0184625 0.0729785 0.0545802 +-0.015609 0.128774 0.0111587 +-0.0694586 0.153877 0.0321166 +-0.0484639 0.149215 0.0104667 +-0.0526002 0.146245 0.0194042 +-0.0263327 0.111444 -0.0179843 +-0.0331847 0.0445939 -0.0279862 +-0.0538972 0.104145 -0.0195691 +-0.0294956 0.124519 0.0193203 +0.0346714 0.0916012 0.0397133 +-0.0247788 0.0379568 0.0140716 +-0.0643494 0.153359 -0.00540282 +-0.00557634 0.0347311 -0.0241073 +-0.0258097 0.0766327 0.0484243 +-0.00867178 0.0387364 -0.0146344 +-0.0783855 0.0873596 0.0368663 +-0.0346878 0.0651683 -0.0148251 +0.0404983 0.0499404 0.0324741 +-0.0738591 0.0964804 -0.0142486 +0.0267717 0.107644 -0.0140409 +-0.0404701 0.104257 0.0399236 +-0.0381489 0.0448685 -0.0242105 +-0.0095211 0.045789 0.0480158 +-0.0311715 0.171175 -0.0164295 +-0.0695038 0.173637 -0.0418473 +-0.0823392 0.111551 0.0443764 +-0.0227424 0.0655154 -0.0353045 +-0.0508568 0.0999518 -0.0219402 +-0.0589296 0.1241 0.041105 +0.000488727 0.108629 0.0427903 +-0.0412638 0.110187 -0.018624 +-0.0147098 0.0613984 -0.0362354 +0.0459347 0.0413813 0.0124396 +0.00323976 0.128177 0.0281353 +-0.0743879 0.143042 -0.00684484 +-0.0264004 0.0577755 0.0382862 +-0.00692431 0.038377 0.0191445 +-0.0864209 0.080641 0.0154973 +-0.077237 0.0721326 0.0266059 +-0.0686311 0.136892 0.0464956 +-0.0792347 0.153789 0.0287725 +-0.0537819 0.0840761 -0.0215562 +-0.0117053 0.0909225 -0.0365538 +0.0365178 0.0541167 0.0317039 +-0.0616584 0.114654 -0.0131207 +0.0390548 0.0884875 -0.0128108 +-0.0887111 0.101017 0.0193703 +0.0162822 0.0666125 -0.0295206 +-0.064714 0.0600149 0.00783247 +-0.0175786 0.180143 -0.0185198 +-0.0408442 0.152602 -0.00723164 +0.0352097 0.0379704 0.0208298 +-0.0618294 0.0342021 0.0275686 +0.0185142 0.0412688 -0.0207398 +-0.0195264 0.159643 -0.00556617 +0.0318624 0.0768516 0.0425881 +0.0347681 0.0641816 -0.0148052 +-0.0479777 0.147732 0.00938552 +-0.0126851 0.0570335 -0.0344182 +0.00495057 0.130435 0.00152594 +-0.0486835 0.0664435 -0.0136416 +-0.0356438 0.0562686 -0.010631 +-0.084499 0.088474 -0.00355332 +-0.0503848 0.141583 0.00270968 +-0.0858587 0.125737 0.0487678 +-0.0426772 0.14763 -0.000244299 +-0.0378831 0.156583 0.00477982 +0.00350659 0.0388434 0.0262887 +-0.0887855 0.102363 0.0143842 +-0.0646755 0.142507 0.0398915 +-0.0909161 0.13091 0.00724248 +-0.055962 0.0343325 0.0321978 +-0.0723047 0.162425 -0.0409479 +-0.0696851 0.11012 0.0394623 +-0.083003 0.0803028 0.000504056 +0.0247589 0.0435818 0.039017 +-0.0218764 0.182954 -0.0200262 +0.0236525 0.124901 0.0169603 +0.0463445 0.0561751 -0.00589814 +-0.0218308 0.117001 -0.0138605 +-0.0747558 0.067415 0.00253432 +-0.0625552 0.176839 -0.0611671 +-0.0660641 0.0384249 0.0148213 +-0.000107958 0.12991 0.000141982 +-0.054081 0.071101 0.0394438 +-0.00558231 0.0361988 -0.024956 +-0.0684451 0.117201 0.0519481 +0.0333957 0.0461492 -0.00598528 +-0.0146115 0.03779 -0.0266447 +0.00133195 0.0385877 -0.00128958 +-0.0348901 0.0738831 -0.020486 +0.0373363 0.105992 0.0277645 +0.0084546 0.131034 0.0184964 +-0.0324996 0.0498708 0.0403614 +-0.0444999 0.0719382 0.0422118 +0.0369643 0.0405549 -0.00158789 +-0.0354954 0.0733233 0.0419636 +-0.0457735 0.0826328 -0.0207974 +0.00732527 0.0595899 -0.0304419 +-0.0874242 0.111776 0.00733879 +-0.0592783 0.115234 -0.0137669 +-0.0928043 0.11882 0.0332998 +-0.0116325 0.0385039 0.00355749 +-0.0398903 0.0344806 0.00870734 +-0.0722375 0.138308 0.048356 +0.0262204 0.0344897 0.0111735 +-0.0200589 0.0348282 0.0498878 +-0.0246346 0.0382795 0.00294393 +-0.0889887 0.147168 0.0287003 +-0.0574968 0.1584 0.00209189 +-0.0329778 0.0448862 0.0466174 +-0.0605914 0.0623502 0.0262507 +-0.0785506 0.0699758 0.0176232 +-0.0362833 0.17342 -0.00108904 +-0.0627087 0.161508 -0.0465953 +-0.0397898 0.0855606 -0.0217035 +-0.0064056 0.10047 0.0472751 +-0.0646908 0.166411 -0.0300665 +-0.0508247 0.0941547 -0.0216781 +0.00716942 0.125754 -0.00749941 +0.000702847 0.0392103 -0.00758345 +-0.0407154 0.0462046 -0.018322 +-0.0401921 0.166668 -0.0117758 +0.0124864 0.11785 -0.0149995 +-0.0887986 0.114294 0.0264066 +-0.0614886 0.156862 -0.0235899 +0.0301602 0.0673157 0.0417954 +-0.0697061 0.156309 0.0202886 +0.0512708 0.0700979 0.0242688 +-0.00208274 0.0390983 0.0321346 +-0.091649 0.146116 0.0221478 +-0.0423664 0.0392174 0.0434612 +-0.0288487 0.0944704 -0.0247187 +-0.0724483 0.148649 -0.034807 +0.0270658 0.12207 0.0196667 +-0.0370838 0.159234 -0.0122889 +-0.00750248 0.0619634 0.0561006 +-0.0533112 0.162693 5.53048e-05 +-0.00276518 0.0755391 -0.036261 +-0.0186814 0.0539839 -0.0321072 +-0.0875792 0.134961 0.00324767 +0.0120758 0.0363869 0.044646 +-0.0753955 0.0901087 0.0394375 +0.0338247 0.108829 -0.00728203 +-0.0444976 0.0789577 0.0421738 +0.0235632 0.0862591 0.0483322 +0.0465947 0.0750442 0.0151558 +-0.0733825 0.135448 0.0501828 +-0.0150618 0.0383341 0.0229424 +-0.00891681 0.0351082 0.0414685 +0.0315143 0.0525771 -0.0117816 +0.045527 0.0791773 0.00219591 +-0.0464963 0.076159 0.0423522 +-0.0708979 0.122353 -0.00862039 +-0.08595 0.110378 0.0213654 +-0.0783775 0.103446 0.0335489 +-0.0758029 0.111217 -0.00664466 +-0.0554837 0.0805968 0.0447827 +-0.0353516 0.166776 -0.00214363 +0.0562979 0.0633024 0.00123284 +0.0465716 0.0440008 0.0231655 +-0.0476369 0.0591928 -0.0118235 +-0.0288774 0.169748 -0.00856256 +0.0153133 0.121135 -0.0105519 +-0.0397313 0.072486 -0.017441 +-0.016397 0.0337307 -0.02279 +0.0603039 0.0650788 0.0091381 +-0.0878637 0.152463 0.0169978 +-0.0754938 0.127441 0.0530403 +-0.067202 0.162346 -0.0569974 +-0.0865386 0.147279 0.0332936 +-0.0535025 0.0440354 0.0449405 +-0.0735938 0.149845 -0.0348818 +-0.0728566 0.162156 -0.0114327 +0.0495045 0.0651553 0.0285253 +0.012555 0.130318 0.0128667 +0.0220735 0.113988 0.0356074 +0.0224569 0.125562 0.0179459 +-0.0810243 0.0936828 -0.00856919 +-0.0756675 0.155622 -0.00260296 +-0.0431622 0.0422126 -0.0213185 +-0.000694781 0.0597985 -0.0333207 +0.0271246 0.0849281 0.0463473 +0.0173609 0.0897252 -0.0270298 +-0.0358944 0.0334964 -0.0263993 +-0.0576531 0.0612704 -0.00372094 +-0.00707611 0.0386628 0.0278929 +-0.0560526 0.151627 -0.00172465 +-0.030326 0.045 0.0496314 +-0.00103499 0.117326 -0.0163697 +-0.0252491 0.162472 -0.00507229 +0.00208806 0.113117 -0.0199282 +-0.0939 0.124133 0.015262 +-0.0129795 0.0384272 0.0232864 +0.00120237 0.0867098 -0.0346725 +0.0353317 0.112044 0.0241962 +0.00450167 0.0459455 0.0484199 +-0.0863511 0.0872693 0.000483167 +-0.0164554 0.0963571 0.0512639 +0.0121283 0.11013 -0.0187853 +-0.0778795 0.103388 -0.00866618 +0.0245137 0.102392 -0.0184072 +0.0201875 0.0974057 -0.022456 +-0.0168907 0.0921233 -0.0358082 +-0.0691832 0.153837 -0.0495596 +0.0155185 0.129225 0.0096832 +-0.00814574 0.0386661 0.000442505 +-0.0927289 0.125458 0.0102641 +-0.0846445 0.0832051 0.023501 +-0.0527541 0.0782706 -0.0196088 +-0.0206459 0.171255 -0.0142383 +0.0273486 0.110085 0.0362063 +-0.0144833 0.105825 0.0431811 +-0.0295885 0.120405 -0.00932945 +-0.0914492 0.117418 0.0293041 +-0.0259115 0.159753 -0.0130913 +-0.0498456 0.123179 -0.0101809 +0.0474532 0.047084 -0.00164907 +0.0201466 0.0658754 0.0483972 +-0.0546819 0.0486825 0.0116705 +0.0366139 0.0573407 -0.00875458 +0.016382 0.0888799 -0.0281622 +-0.0128318 0.0653357 0.0541739 +-0.0495043 0.073253 0.0416255 +0.0380257 0.084795 0.0357219 +-0.055962 0.148162 0.0296522 +-0.00335679 0.11693 -0.0159223 +-0.0164885 0.0382449 0.0155037 +-0.0943085 0.12145 0.0162821 +-0.0604949 0.104288 0.0411949 +-0.0485787 0.153602 0.0103738 +0.0214629 0.119376 0.0329783 +-0.00921964 0.0390042 -0.0131222 +0.046038 0.044353 0.0245911 +0.00963825 0.115048 0.0386641 +-0.077742 0.161125 -0.0199262 +-0.0274983 0.0932247 0.0447643 +-0.0237144 0.062529 -0.0332478 +0.0256802 0.0685786 0.0440967 +-0.000627469 0.039269 0.0340794 +0.0387649 0.0834441 0.0350467 +-0.0144799 0.123658 0.0314246 +-0.0415001 0.0733705 0.042415 +0.0543119 0.0722872 0.00750454 +-0.0799536 0.133905 -0.00443135 +-0.0728995 0.10646 -0.0108772 +0.0465866 0.0714909 0.00427537 +-0.0734754 0.158245 -0.0309204 +-0.0217961 0.0784868 -0.0389208 +0.0328256 0.0611992 -0.0167775 +-0.00849082 0.119665 0.0373867 +-0.0345047 0.106995 0.0387065 +-0.0624367 0.153758 -0.0135798 +0.0343704 0.104711 0.0323207 +-0.0583832 0.0335298 0.00219999 +0.0202943 0.113982 0.0365633 +0.0149493 0.0344805 -0.015521 +0.0238985 0.104719 0.0399907 +-0.0270163 0.155641 -0.00359794 +-0.0207265 0.111071 -0.0196229 +0.00439792 0.0404664 -0.024069 +-0.0314988 0.165308 -0.00534483 +-0.0506374 0.0334455 0.00204379 +-0.0518913 0.130385 -0.00375074 +0.00347876 0.039945 0.0459765 +-0.0174912 0.108558 0.0415716 +-0.0618685 0.158412 -0.0345942 +-0.0509699 0.122064 -0.0109984 +-0.0801245 0.0746668 0.000525034 +0.0485976 0.0429932 0.0132228 +0.0202555 0.0707617 -0.0282449 +-0.086473 0.130788 0.000288786 +-0.0859798 0.13928 0.042828 +-0.0419021 0.157999 0.00424081 +0.0301266 0.0646197 0.0417292 +-0.0241332 0.0349697 0.043675 +-0.0554996 0.0466308 0.0421953 +0.0244135 0.114257 -0.0111426 +-0.0687634 0.168362 -0.025835 +-0.0212185 0.178615 -0.022031 +0.0451425 0.0775553 0.0229667 +0.0084768 0.116844 0.0380952 +-0.0619218 0.112503 -0.0143567 +0.0015045 0.0661578 0.0563313 +-0.0473123 0.0369901 -0.0152765 +0.0576745 0.0551294 0.00518333 +-0.0736262 0.148585 -0.0238576 +0.055706 0.0507437 0.0211984 +0.0038008 0.130941 0.0210967 +-0.0360463 0.0347343 0.0430826 +-0.0865396 0.139093 0.00420465 +-0.000664914 0.0539666 -0.0309917 +-0.0785368 0.0694183 0.0145853 +-0.0521695 0.144678 0.0173655 +0.0205519 0.0414936 -0.0177079 +-0.0764027 0.109871 -0.00664525 +-0.0455151 0.0533187 0.0381544 +-0.010362 0.0388675 -0.00761727 +-0.0465826 0.121367 -0.0123258 +0.060067 0.0636708 0.0191758 +-0.0214848 0.0347602 0.0479269 +0.0295458 0.115836 -0.00482165 +0.0188031 0.106638 -0.0169667 +-0.00873489 0.068452 -0.036144 +-0.0504955 0.0733248 0.0417999 +0.00250961 0.101617 0.0444387 +-0.0134598 0.0645734 0.0539775 +-0.0304851 0.038633 -0.015152 +-0.00443456 0.111901 -0.0205597 +-0.038606 0.0392918 -0.0284798 +-0.022624 0.0450535 -0.0281102 +0.0262273 0.117277 0.0307934 +0.0282585 0.063629 -0.0207965 +-0.0649158 0.115218 -0.010913 +-0.0197994 0.0799106 -0.0390737 +-0.042508 0.0930307 0.0424902 +-0.0683794 0.0434664 0.00169373 +-0.0648724 0.131147 0.0430922 +-0.00487539 0.105927 -0.0225105 +-0.0678583 0.112732 0.0457592 +0.00821621 0.124741 -0.00840458 +-0.0564446 0.0520481 -0.00138381 +-0.020896 0.107686 -0.0220438 +-0.0919111 0.120015 0.00829626 +-0.0188214 0.0841215 -0.0388306 +-0.00848834 0.10866 0.0434392 +-0.0674721 0.0639504 -0.00252382 +-0.0321962 0.0487152 0.0429222 +0.0422051 0.0972089 -0.00180239 +-0.0312857 0.125233 0.0186818 +0.0348151 0.0605689 0.0379285 +-0.07566 0.1555 -0.0199215 +-0.0582195 0.03947 0.0465299 +-0.0144966 0.0687907 0.0546395 +-0.0630713 0.173863 -0.0616798 +0.0398379 0.0874103 0.0331324 +0.0167269 0.0821369 0.052401 +0.0403742 0.101353 -0.00282827 +-0.0622911 0.150653 -0.0125749 +-0.0707931 0.0879477 -0.0165704 +0.048521 0.043083 0.00923259 +0.0132697 0.0603324 0.0507028 +-0.0230427 0.038006 0.0179945 +0.0585617 0.0538351 0.0161785 +-0.0548868 0.108372 -0.0183778 +-0.0712698 0.156094 0.0241098 +-0.0053845 0.126096 -0.00772897 +-0.076026 0.151346 0.0359505 +0.00881068 0.127643 0.0286728 +-0.0229191 0.119996 -0.0109969 +-0.0702091 0.156071 0.0113882 +-0.0285896 0.0704574 -0.0325207 +-0.0373694 0.173381 -0.00150317 +0.043508 0.0438731 -6.08517e-05 +-0.0434927 0.0747943 0.0426652 +-0.0817644 0.0758778 0.0206878 +-0.00439411 0.0968663 -0.0305974 +0.00748123 0.0937253 0.0527164 +0.0101565 0.0860282 0.0551829 +-0.0132478 0.039072 0.0352601 +-0.0786774 0.168631 -0.0343418 +-0.0500333 0.148713 -0.00320857 +0.00694939 0.128215 0.0280149 +0.0132662 0.0737717 -0.03084 +-0.089989 0.142041 0.0291697 +-0.0298412 0.0944347 -0.0243277 +-0.0866185 0.103641 0.022352 +0.0179014 0.114016 -0.0148856 +0.0537258 0.0735615 0.0163564 +-0.0413654 0.128702 0.0120304 +-0.0855876 0.0939777 -0.00157288 +-0.0828574 0.0764021 0.018249 +-0.0454932 0.0491469 0.0390026 +-0.0317045 0.0693753 -0.0244624 +-0.0587034 0.0579543 0.010904 +-0.0269178 0.034755 0.0450156 +-0.0520173 0.146257 0.0174096 +-0.0759561 0.112612 -0.00567952 +-0.0164906 0.0786958 0.056769 +-0.0778425 0.108614 0.0370385 +0.0422463 0.0403355 0.0183005 +-0.0845698 0.0831877 0.0245094 +0.00429984 0.0654625 -0.0332399 +-0.0572715 0.0482006 0.0365817 +0.0290027 0.0741128 0.0436952 +-0.0600502 0.143934 0.0360579 +0.0366467 0.0673305 0.0371158 +-0.0199983 0.126616 0.0197793 +-0.0728415 0.165906 -0.0186805 +-0.0634251 0.128316 0.0434644 +-0.0437757 0.12944 0.0066621 +0.000274533 0.0683164 -0.033854 +0.00152244 0.03707 0.0220484 +-0.0349517 0.151884 -0.00344832 +-0.0271199 0.0347243 -0.0201972 +0.0433938 0.0426486 0.00136855 +0.000501319 0.0576739 0.0545888 +-0.0636327 0.155181 -0.0386163 +-0.0884108 0.0928321 0.00744302 +-0.0495652 0.0614019 0.0343808 +-0.0434939 0.0930777 0.0427388 +-0.0662865 0.178231 -0.0601734 +-0.054498 0.111159 0.0367038 +-0.0460532 0.057401 0.0380948 +-0.0820259 0.0858257 0.0320864 +-0.0277337 0.0521019 -0.0243965 +-0.00442413 0.130145 0.0224484 +-0.00149759 0.0549023 0.0548542 +-0.035558 0.0430076 -0.0284728 +0.0593498 0.066038 0.0207029 +0.0515344 0.0624078 0.0294591 +-0.0197872 0.118912 -0.0118682 +-0.0168075 0.0827608 -0.0394117 +-0.0487872 0.0545643 0.0352206 +-0.0311424 0.174761 -0.015609 +-0.0326324 0.0534241 -0.0105104 +0.00577065 0.131636 0.0103849 +-0.0185368 0.123815 0.0276913 +-0.0454963 0.0818291 0.0431013 +-0.0634376 0.179008 -0.0598746 +-0.00652958 0.0443624 0.0478753 +-0.0308041 0.0566412 -0.01742 +0.0448472 0.0735234 0.00122364 +-0.00349567 0.0504603 0.052334 +-0.0298753 0.0537337 -0.0203803 +-0.00256734 0.0388997 -0.00235847 +-0.0502892 0.0334774 -0.00701976 +-0.00481396 0.0840888 -0.0377627 +0.0387801 0.058953 0.031306 +-0.0243507 0.0852386 0.0537426 +-0.077502 0.0785105 0.0333799 +-0.0695501 0.0378481 -0.00149869 +-0.0313945 0.0862693 -0.0285563 +-0.0759552 0.133992 -0.00682355 +-0.0783042 0.161088 -0.0239376 +0.0512217 0.0595245 0.030012 +0.0455105 0.0777762 0.00219892 +-0.0860997 0.0805682 0.0085045 +-0.0347118 0.121713 -0.00868145 +-0.0621446 0.0384632 0.0179813 +-0.0124987 0.115524 0.0391996 +-0.0407326 0.0341812 -0.0112599 +-0.0762949 0.0689313 0.00454567 +-0.0900211 0.137875 0.0231818 +0.0335661 0.0612752 -0.015761 +-0.0620569 0.121268 0.0436785 +0.0389827 0.104151 0.026189 +-0.0724692 0.135469 0.0497506 +0.0222613 0.0692548 -0.0269722 +-0.0614967 0.0876222 0.0452319 +-0.0694862 0.120387 0.0531587 +0.0384699 0.0786144 -0.011749 +-0.0225096 0.10992 0.040117 +0.0140839 0.123776 -0.0073928 +0.0455444 0.0774866 0.0217209 +0.0421217 0.0751567 0.0292241 +-0.0637125 0.165316 -0.0311513 +0.00714876 0.108764 -0.0200496 +-0.0613421 0.118288 0.041013 +0.0150763 0.0900809 0.0517899 +0.0392297 0.0926988 -0.0100859 +-0.0707648 0.0836514 -0.0167885 +0.0199669 0.107838 -0.0162613 +-0.0573264 0.0521522 0.00163442 +0.03817 0.0983612 -0.0088053 +-2.43522e-05 0.0348774 0.0110061 +-0.0647928 0.0346609 0.0159953 +-0.0765127 0.164562 -0.0208538 +-0.0398786 0.107079 -0.0200332 +-0.0315509 0.053914 -0.013393 +-0.0689152 0.109432 -0.0116742 +-0.0426992 0.0344898 0.0348747 +-0.0113643 0.182132 -0.0288209 +-0.0251052 0.162299 -0.0151004 +-0.0745879 0.156108 0.0200327 +-0.0686632 0.162379 -0.0529737 +-0.0867316 0.100467 0.0250232 +0.0335218 0.0499029 0.0322045 +0.0110844 0.0345718 0.0406762 +0.047975 0.0710438 0.0215578 +-0.0471313 0.132491 0.00541336 +0.0385464 0.0954957 -0.00890109 +-0.055495 0.154378 0.0181054 +-0.0486202 0.0403225 0.04496 +-0.0918049 0.121541 0.0434848 +-0.0427276 0.129253 0.0100405 +-0.0641572 0.150753 -0.03179 +0.0203307 0.08353 0.050588 +-0.0025157 0.127417 -0.00520554 +-0.0664375 0.153657 -0.0486366 +0.00823253 0.112336 0.0401545 +-0.0239671 0.075324 0.0508435 +-0.0519769 0.0340995 -0.0134375 +-0.0444607 0.0902688 0.0428496 +-0.043053 0.153237 -0.00732462 +-0.0520076 0.145723 -0.00116844 +-0.0587286 0.0620484 0.0269094 +-0.0876727 0.111787 0.0358475 +-0.0843489 0.0925325 -0.00454911 +-0.00849886 0.0856701 0.0574538 +-0.0681283 0.146379 -0.0251159 +-0.0800217 0.102057 0.0324029 +-0.0662458 0.167287 -0.027765 +0.0214869 0.0865002 0.0492244 +-0.0485551 0.129676 -0.000935313 +-0.021529 0.17126 -0.0137526 +0.0263623 0.0808978 0.0469671 +-0.00180556 0.0384438 0.0201303 +0.0199827 0.116932 -0.0120267 +0.000700235 0.0374335 0.0215506 +-0.0849215 0.130733 -0.00170191 +-0.0566837 0.0492811 -0.00237706 +0.013902 0.054865 0.0498147 +-0.0487235 0.0738176 -0.0166605 +-0.0588289 0.089737 -0.0207103 +-0.00415565 0.0996194 0.0496007 +0.00922789 0.0860105 0.0556146 +-0.052373 0.126911 0.0347775 +-0.0647638 0.0397203 0.0149016 +-0.0375028 0.102851 0.0403695 +0.012678 0.130036 0.0186174 +0.01582 0.0346802 0.0234839 +-0.0834012 0.146003 0.0386574 +-0.0855432 0.111388 0.0330811 +-0.0905559 0.1297 0.0402277 +0.0225 0.108418 0.039052 +-0.034538 0.033729 0.00866796 +0.0580527 0.0523859 0.0111812 +0.0489522 0.045877 0.023734 +-0.0741385 0.0703655 0.0287707 +-0.0261092 0.0409213 0.0540071 +-0.0124916 0.0801274 0.0575032 +-0.0480938 0.0362157 0.0456887 +0.0295798 0.047722 0.0354768 +-0.051366 0.129708 0.032749 +-0.0258406 0.0339312 -0.0210821 +-0.0627466 0.0751872 -0.0173542 +-0.0208698 0.104444 -0.0228641 +0.0391583 0.108387 0.0121653 +-0.0217873 0.0728206 -0.0385569 +-0.00162182 0.0363065 0.0130228 +-0.0125908 0.182249 -0.0250896 +-0.0463216 0.125305 0.0258345 +0.00739775 0.110951 0.0406753 +-0.0698286 0.0965949 -0.0159812 +0.0495953 0.0662964 -0.000416722 +0.0214 0.116687 0.0346491 +0.0355013 0.0605581 0.0371681 +0.0347485 0.0981702 0.0363481 +-0.0784998 0.130283 0.0530344 +-0.0139533 0.0338864 -0.0205741 +-0.0185901 0.128007 0.0115203 +-0.0538047 0.0884108 -0.022116 +0.0213383 0.0635548 -0.0266585 +-0.0194915 0.120861 0.0324568 +-0.0347476 0.127441 0.00854521 +-0.0126238 0.0952928 -0.0330113 +-0.00102634 0.107271 -0.0216101 +0.0225395 0.0352111 0.00978173 +0.0193228 0.0679612 -0.0287395 +0.00111873 0.0344764 0.0134191 +0.0375161 0.110639 0.00638069 +0.0222494 0.0762728 -0.0263867 +-0.0729386 0.0646873 0.0146181 +-0.0397368 0.0739371 -0.0178005 +-0.0543178 0.0387289 0.0471882 +0.016338 0.0566541 -0.0286494 +0.0299119 0.0491593 0.0359714 +0.0525507 0.0462401 0.0172033 +0.0138891 0.0942573 -0.0257865 +-0.00745761 0.0338748 -0.0230567 +-0.073507 0.121801 0.0535653 +-0.0771635 0.0705018 0.0227664 +0.014215 0.083589 -0.0300782 +0.0187635 0.105558 -0.0177865 +-0.0943455 0.121485 0.0232874 +-0.0190471 0.0582949 0.0492947 +-0.0482842 0.164088 -0.00583628 +0.00750123 0.074495 0.0564449 +0.0114903 0.0896115 0.0540357 +0.0111129 0.0739356 0.0547693 +-0.0243199 0.0387345 -0.0140132 +0.0343886 0.107359 0.0305696 +0.0280618 0.0416802 0.0314173 +0.01142 0.0374719 -0.022733 +0.0330999 0.114889 0.024788 +-0.0199406 0.122541 -0.00772092 +-0.0662581 0.15274 0.0347724 +0.00215199 0.101646 -0.0224127 +0.0164932 0.112605 0.0382483 +-0.06512 0.166493 -0.0287867 +-0.0848366 0.0898781 -0.00356125 +-0.0321536 0.0380399 -0.0168 +-0.000666067 0.037425 0.0194672 +-0.0009793 0.0356154 0.0137824 +-0.0338572 0.100054 -0.0225702 +-0.0466969 0.0694537 -0.0155404 +-0.0236112 0.0386852 0.0334692 +0.0506847 0.044695 0.00922239 +0.0143403 0.11733 -0.0144441 +0.0447757 0.0875223 -0.000814326 +0.0359341 0.0727624 -0.0138488 +-0.0526285 0.0588799 -0.00854194 +-0.090746 0.114598 0.00833305 +0.0454568 0.0819591 0.00221362 +-0.0191965 0.175667 -0.0232885 +-0.062765 0.0780997 -0.0182585 +0.0414338 0.0676164 -0.00577635 +-0.053491 0.113891 0.0350292 +0.0043588 0.0510132 -0.0293749 +-0.00874604 0.0713519 -0.0371122 +0.0193852 0.0915557 -0.024942 +-0.0944514 0.122808 0.0172688 +-0.00774122 0.115628 -0.0165086 +-0.0406319 0.0534345 -0.0110028 +0.0230588 0.0463265 0.0401038 +-0.0769246 0.0689689 0.00654258 +0.0278197 0.108769 0.0368873 +-0.078478 0.142827 0.0455967 +0.0339472 0.0368914 0.0179028 +0.0140143 0.0357038 0.00388789 +-0.0699623 0.155307 -0.0499609 +-0.0144161 0.0343188 -0.0191903 +-0.044261 0.122001 0.0258917 +-0.064466 0.170264 -0.0443864 +-0.0614851 0.112533 0.0365644 +-0.0649074 0.120907 -0.00883756 +0.0114806 0.097647 0.0487825 +0.00178793 0.0344587 0.00626566 +0.0404914 0.098527 -0.00482713 +-0.0714142 0.166619 -0.0469903 +0.0553639 0.0729653 0.0110394 +-0.00645384 0.126073 -0.0076982 +-0.042494 0.0676556 0.0412962 +-0.0328931 0.0486572 0.0421875 +-0.0218312 0.0882119 -0.0370399 +0.0433826 0.0987102 0.00417641 +-0.034498 0.0533048 0.037996 +-0.0749535 0.0823401 -0.0135889 +-0.0755022 0.131669 0.0524935 +-0.0118269 0.118985 -0.0140536 +-0.0698809 0.100876 -0.0145572 +-0.0920212 0.128183 0.00926455 +-0.0277533 0.155598 -0.00253083 +-0.0155991 0.0421323 -0.0272897 +0.0125549 0.119968 -0.0132874 +-0.0862929 0.15121 0.027304 +-0.0726068 0.147127 -0.0218633 +-0.0713282 0.0982044 0.0407618 +-0.023785 0.0621839 0.0426152 +-0.0294793 0.0446083 0.0503994 +0.050676 0.0693821 0.00244948 +-0.0520559 0.142894 8.38275e-05 +-0.085494 0.083212 0.00349969 +0.0219046 0.0892697 -0.0245066 +-0.0923861 0.125586 0.0352607 +-0.0578149 0.12313 -0.00798101 +-0.0630458 0.0345815 0.0177326 +-0.0890554 0.0888307 0.00946144 +-0.066735 0.167252 -0.0265095 +0.0143257 0.0594816 -0.0287805 +0.00349695 0.0519735 0.0532512 +-0.0658642 0.141582 -0.00840157 +0.014169 0.0603418 0.050255 +-0.0638047 0.152122 -0.00224548 +0.0332402 0.0814034 -0.0189012 +-0.0246071 0.0408479 -0.0291354 +-0.0320867 0.0651952 -0.0194497 +-0.0719291 0.0394019 0.00652921 +-0.0297834 0.0409697 0.0520218 +-0.035582 0.0336826 0.00849877 +-0.088744 0.0996845 0.0203875 +0.0516874 0.0662489 -0.000355134 +-0.0802571 0.096729 0.0342047 +-0.0669809 0.135535 -0.00827796 +-0.069479 0.0337046 -0.000209101 +-0.0675145 0.148386 0.0398761 +-0.0805311 0.123088 0.0509172 +-0.0084955 0.0503277 0.0510127 +0.00205693 0.129985 1.8398e-05 +-0.0172313 0.12808 0.0178394 +0.00170313 0.0343139 0.0118694 +-0.0773727 0.156953 -0.0129034 +-0.0717154 0.0632455 0.0160979 +0.00858548 0.0340902 -0.01633 +0.0124197 0.0403679 -0.0230567 +-0.0511271 0.116882 0.0329705 +-0.0728598 0.0355014 0.00645302 +-0.0791962 0.16801 -0.0379842 +-0.00268972 0.128069 -0.00389854 +0.0597918 0.0567046 0.013171 +0.0154995 0.111258 0.0392925 +-0.019299 0.0668878 0.052102 +-0.0233826 0.0866124 0.0541509 +0.0432138 0.091668 0.0251628 +-0.0396808 0.0636721 -0.0135815 +0.00652038 0.0518639 0.0525018 +0.0124104 0.0389053 -0.0225983 +-0.0119403 0.171322 -0.0192115 +-0.069435 0.0972593 0.0417284 +-0.0942583 0.125557 0.0232684 +0.030238 0.0814876 -0.0201701 +0.0449279 0.0945923 0.00916323 +-0.0553588 0.131132 0.0357618 +0.00929414 0.0653548 -0.0316941 +-0.0357484 0.0768864 -0.0192776 +-0.062693 0.156802 -0.0376031 +-0.0460193 0.128067 0.0236255 +0.0133301 0.0609017 -0.0290805 +0.00152141 0.0773467 0.0574533 +-0.0636035 0.156128 0.0166435 +-0.0361137 0.162217 -0.0137308 +-0.0595062 0.0386574 -0.00901889 +-0.0620309 0.153757 -0.0155846 +-0.0533723 0.122605 0.0368904 +-0.0264702 0.0676761 0.0408217 +-0.0147452 0.123455 -0.00671201 +-0.0703548 0.0643588 0.00158224 +-0.0814272 0.0752484 0.0195365 +0.0402499 0.0787503 -0.00875238 +-0.00644119 0.0828529 0.0570838 +0.0242228 0.0902502 0.0474811 +0.0336268 0.0557054 -0.0117007 +-0.0623153 0.13671 0.0362243 +0.0149059 0.124307 -0.00595517 +-0.0401601 0.165169 -0.0119868 +-0.077431 0.108115 0.0357399 +0.0402513 0.0940026 0.0302416 +0.0370616 0.0382621 0.0191175 +0.0225195 0.106011 0.0397482 +-0.0255993 0.037974 -0.029094 +-0.0759547 0.129619 -0.00760722 +-0.0360191 0.153642 0.00214438 +0.0596848 0.0566967 0.0151763 +-0.0264473 0.181471 -0.0150302 +-0.0346676 0.0359024 -0.017193 +0.0391135 0.0904981 -0.0117677 +0.00550174 0.0745058 0.0566062 +-0.0615874 0.117934 -0.0105067 +-0.0897323 0.115129 0.0291209 +0.0371127 0.037099 0.0128773 +0.000643571 0.127035 0.0301068 +0.04471 0.0789677 0.024116 +-0.0294983 0.0588236 0.0368769 +0.0243457 0.102123 0.0424029 +-0.0890326 0.125361 0.00330134 +-0.0671124 0.0618759 0.00376788 +0.0207378 0.105279 -0.0174962 +-0.0640597 0.156709 -0.043612 +-0.053836 0.112592 -0.0169505 +-0.0738585 0.0762694 0.0355202 +-0.00709045 0.130506 0.0171336 +-0.0735939 0.077695 0.036626 +-0.0453238 0.169855 -0.00399069 +-0.0609112 0.060145 0.00105228 +-0.0602298 0.119796 0.0409592 +-0.037803 0.0885803 -0.0235006 +0.0220645 0.0375334 0.0362702 +-5.6077e-05 0.112952 -0.0196345 +-0.0156034 0.097548 -0.0273897 +0.0330435 0.104766 0.033885 +0.0234619 0.0343557 0.00702041 +0.0309186 0.094253 -0.0177648 +-0.0406484 0.0563266 -0.0113192 +0.0305338 0.0929359 0.042541 +-0.0713282 0.155382 -0.0439108 +-0.0246656 0.0492403 -0.0269082 +-0.0344954 0.118007 0.0312549 +0.03264 0.0822319 0.0419892 +0.0393737 0.0381589 0.0105128 +0.00986741 0.131059 0.0147331 +-0.0521114 0.156091 -0.00406652 +0.0125143 0.121868 -0.0113432 +-0.019839 0.0610753 0.0486026 +-0.0714347 0.109953 0.0409933 +-0.0435006 0.115257 0.0335166 +-0.0700918 0.147968 0.0410511 +-0.0628279 0.151059 0.0360546 +-0.0269995 0.0383068 0.000625566 +-0.0459023 0.0546326 0.0380387 +-0.0705411 0.0860609 0.0417748 +-0.0360717 0.157766 -0.0114869 +0.018169 0.108481 -0.0169141 +-0.0656915 0.0720893 -0.0135891 +-0.0604976 0.0847283 0.0441029 +0.00648432 0.0413231 0.0455852 +-0.0757282 0.0754387 0.0328339 +0.00417753 0.0922823 -0.0325433 +-0.0272993 0.0381948 -0.0178418 +-0.0315044 0.0860003 0.0426216 +-0.00681874 0.0868473 -0.0370495 +0.0396972 0.0744788 -0.00980523 +0.0376515 0.0947835 -0.010301 +-0.078491 0.121738 0.0515581 +-0.0274838 0.105666 0.0409158 +-0.0202559 0.0365056 -0.0280118 +0.0201693 0.125674 0.00144037 +-0.0587501 0.0482189 0.00571238 +-0.013346 0.168342 -0.0159797 +-0.0683811 0.149044 -0.0363633 +-0.0558475 0.0343686 0.0374162 +-0.0590903 0.0626036 0.0281123 +-0.0331372 0.0336314 -0.0222436 +-0.0678611 0.0980605 -0.0159397 +-0.0472308 0.0334623 0.00452598 +-0.0167567 0.0714512 -0.0386579 +-0.0184671 0.10319 -0.0232847 +-0.0675365 0.0805511 0.0417814 +-0.0666009 0.15275 -0.0468174 +-0.00387787 0.10737 -0.022403 +-0.0300213 0.0579734 -0.0204069 +-0.00579466 0.103184 -0.0232761 +-0.0775304 0.143071 -0.00473432 +-0.00757151 0.0346922 -0.0244599 +-0.0355091 0.0676694 0.0413832 +-0.0185092 0.127137 0.00354165 +0.0289004 0.0650837 -0.0199869 +-0.0224914 0.04868 0.0491885 +-0.0194885 0.0856172 0.056795 +-0.0625301 0.147537 -0.0105732 +0.00324634 0.0726279 -0.0347233 +-0.0117444 0.129778 0.0154481 +0.0381223 0.106958 0.0251953 +0.0134297 0.0343278 -0.0118215 +0.00450615 0.0772491 0.0561317 +0.00914326 0.112364 0.0397506 +0.0165994 0.0933382 -0.024824 +-0.0530349 0.0448324 0.0176964 +-0.0861503 0.0818963 0.00748815 +-0.07574 0.144451 -0.00587632 +-0.0796195 0.104749 0.0319273 +0.0404835 0.052774 0.0322642 +0.0420568 0.0986443 0.0231563 +-0.0887511 0.102351 0.0133854 +0.0132668 0.0723896 -0.0312102 +-0.0507233 0.0723393 -0.0157137 +-0.00754786 0.039018 -0.00905888 +-0.0488259 0.138613 0.00940263 +0.0057745 0.128094 -0.00399317 +-0.0523396 0.147791 0.0193952 +-0.048265 0.136372 0.0159973 +-0.0604426 0.0470258 0.0346715 +0.0367367 0.0902141 0.03744 +-0.0895793 0.136441 0.0122186 +0.0376089 0.108292 0.000165208 +0.0353713 0.0915869 0.0389643 +-0.0211976 0.0347654 0.0444796 +0.00223085 0.129379 -0.00131325 +-0.0737831 0.0864021 -0.0154104 +-0.0127393 0.0700008 -0.0380391 +-0.0657273 0.0751276 -0.0164058 +0.00937487 0.0377648 0.0302588 +-0.035816 0.0448118 0.0437923 +-0.0549046 0.102722 -0.0198351 +0.0460481 0.046714 0.0276632 +0.00759173 0.131318 0.00819364 +-0.0721931 0.161015 -0.0399435 +0.0102622 0.0710503 -0.0323195 +0.0194745 0.0851519 0.050256 +-0.0399319 0.0345158 0.0389424 +-0.0616692 0.167812 -0.0545903 +-0.0056922 0.0584499 -0.034018 +-0.0203692 0.094546 -0.032294 +-0.070351 0.158156 -0.0469171 +-0.023866 0.103031 -0.0237009 +0.0528846 0.0533107 -0.0017243 +-0.0319516 0.077812 -0.0315646 +0.00951738 0.0660057 0.0546772 +0.0137336 0.122464 0.0333928 +-0.0199595 0.125484 -0.000738697 +0.00049871 0.116947 0.0399069 +-0.0359892 0.0344491 0.0345711 +-0.0443682 0.129764 0.015339 +0.0452819 0.0932028 0.00617084 +-0.00813465 0.0391286 -0.0130168 +0.0394097 0.0618135 -0.00677045 +-0.0701845 0.158483 -0.00465374 +0.0322675 0.102123 0.0362847 +-0.0374987 0.0819015 0.0436538 +0.0396969 0.0616754 0.0309066 +-0.0455673 0.0475992 -0.010259 +-0.0527627 0.115451 0.034109 +0.0208176 0.0631975 0.0476002 +-0.0618301 0.0924936 -0.0189652 +-0.053883 0.150856 0.0253998 +0.0245243 0.105615 0.0392344 +0.00385761 0.129628 0.0254511 +-0.00549072 0.0488848 0.0502608 +-0.0300389 0.036799 0.0524219 +-0.0580426 0.153536 0.0303048 +0.0220166 0.125337 0.0220596 +0.0312265 0.0393227 0.0260732 +-0.0171047 0.17569 -0.0178772 +0.016571 0.0940211 0.0486896 +-0.0505514 0.0338848 0.0267025 +-0.0625417 0.0410514 0.0154849 +0.0355348 0.112677 0.0214127 +0.00150774 0.0897546 0.056027 +-0.0190957 0.0968508 -0.0266962 +0.0511508 0.0608575 0.0299274 +0.0163905 0.0491901 -0.024833 +0.0345652 0.114846 0.0110543 +0.0581139 0.0523629 0.0131822 +-0.0417396 0.0754091 -0.018561 +-0.0814751 0.118981 0.0489466 +0.00013405 0.105909 -0.0216496 +-0.0908345 0.139239 0.02018 +-0.0424766 0.101515 0.0416909 +-0.0260624 0.0837492 0.0512652 +-0.0500875 0.0531258 0.0337221 +-0.0706477 0.0874116 0.0418374 +-0.0366978 0.0363155 -0.0300943 +0.00451245 0.064772 0.0563635 +-0.0753069 0.109577 0.0422017 +-0.0284025 0.119846 0.0286714 +0.033406 0.0822268 0.04133 +0.0595932 0.0608555 0.0201843 +-0.00204808 0.0983649 0.051847 +-0.0574847 0.0623327 0.0283417 +-0.0229389 0.126187 0.00412352 +0.0390327 0.0744186 -0.0107818 +-0.0855097 0.129367 -0.00169404 +-0.0647036 0.0653044 0.0298737 +-0.0064934 0.10867 0.043581 +-0.0685164 0.0669975 0.0293604 +-0.0705096 0.1624 -0.046948 +0.0125251 0.129483 0.0214195 +-0.0221845 0.172691 -0.0208918 +0.0153262 0.0767707 0.0538598 +-0.0905235 0.137837 0.0161933 +-0.0545439 0.0402656 -0.0102441 +-0.0688509 0.171089 -0.0344529 +-0.0884641 0.0887716 0.00547605 +-0.0903526 0.116014 0.0283099 +-0.0623807 0.147545 -0.00857398 +-0.061927 0.109672 -0.0156348 +-0.0579856 0.116646 -0.0132522 +0.0395731 0.0448559 0.0300931 +0.00658391 0.130753 0.00354793 +-0.0647804 0.153444 -0.00410741 +0.00522677 0.078235 -0.0342467 +-0.0495662 0.0335706 -0.0032948 +0.00181081 0.131692 0.0146438 +-0.0635975 0.15411 -0.00948093 +-0.0855227 0.133522 0.000289437 +-0.025262 0.107417 -0.0217613 +-0.0340021 0.0409714 0.0491624 +-0.0146057 0.0406867 -0.0271172 +-0.0174894 0.0687336 0.053904 +-0.01522 0.183001 -0.0269465 +-0.0500642 0.142991 0.00242772 +-0.0679313 0.0622594 0.0032802 +-0.0551811 0.133216 -0.00483226 +-0.0284216 0.0792864 0.045297 +0.00824429 0.0809884 -0.0331618 +0.00929618 0.123787 -0.00937811 +0.0228212 0.0889774 -0.0242065 +-0.0185099 0.0883573 0.0560195 +0.0282298 0.0717826 -0.0228933 +-0.0251238 0.125152 0.00185767 +0.019545 0.103378 0.0442321 +-0.0673703 0.122848 0.0518073 +0.0357587 0.067099 -0.014806 +0.00197653 0.0987575 -0.0246237 +-0.0655762 0.155146 -0.00586759 +0.012488 0.119576 0.0355898 +-0.0514967 0.101534 0.0419051 +-0.0095351 0.0444416 0.0488648 +-0.00470695 0.0982478 -0.0280611 +-0.05601 0.0575293 -0.00241387 +-0.0602761 0.139548 0.0339321 +-0.0517453 0.0753545 -0.0181561 +-0.038969 0.042042 0.0415955 +-0.0636896 0.064322 -0.00564195 +-0.0398457 0.0985451 -0.0219087 +-0.0191826 0.127252 0.0185952 +-0.0873123 0.0886781 0.00248146 +-0.0488082 0.0884112 -0.0217819 +-0.0498768 0.104205 -0.0203216 +-0.0409029 0.149467 0.00342301 +-0.069185 0.156032 0.0248455 +-0.0506717 0.0501974 0.0196351 +-0.0301161 0.0396403 0.0523893 +-0.000520242 0.104454 0.0440018 +-0.0290025 0.0578755 -0.022406 +-0.0610145 0.0336026 0.00878975 +-0.0917872 0.143341 0.0171661 +-0.0279974 0.0383174 -0.0050935 +-0.0913132 0.113305 0.0163255 +0.0313508 0.109263 -0.00976359 +-0.00332487 0.0387243 0.0268007 +0.0222104 0.125239 0.00503339 +-0.04503 0.129294 0.00327025 +-0.0176724 0.0933571 0.0538975 +-0.0234883 0.0487024 0.0493089 +0.0421092 0.0724515 0.0291612 +-0.0653912 0.159256 -0.0130566 +-0.00402317 0.0387663 0.0011878 +-0.0338313 0.0929547 -0.0239607 +0.00379004 0.0367184 0.046186 +-0.0186801 0.0525094 -0.0314832 +-0.0351354 0.165203 -0.0147634 +-0.0705038 0.108294 0.0372772 +0.0246817 0.0360382 0.0240669 +-0.0204805 0.0828473 0.0567838 +0.0326609 0.0673309 0.0401471 +-0.0296335 0.0635627 -0.0254272 +-0.0548571 0.0546624 -0.0043828 +0.00968485 0.0342244 -0.0162577 +-0.0810826 0.144759 0.0420272 +0.00767659 0.0346834 0.0054103 +-0.0830301 0.110196 0.00131843 +-0.00544058 0.119032 -0.0141551 +-0.0255852 0.0930492 -0.0306058 +-0.0714911 0.116102 0.0521112 +0.0318609 0.0710037 -0.0187224 +0.0280264 0.121739 0.0100361 +-0.0514799 0.0384723 -0.0115832 +-0.0764395 0.0988661 -0.011539 +-0.0186212 0.04503 -0.027692 +0.0334766 0.0519565 -0.00767966 +-0.0541438 0.151337 0.0259237 +-0.00148294 0.0606073 0.0558577 +0.0148272 0.0344434 -0.00977208 +-0.0391932 0.171233 -0.0109027 +-0.035755 0.0783248 -0.0195335 +0.0355134 0.0795005 0.0390801 +0.0603494 0.0609121 0.0171857 +0.0394635 0.075864 -0.00982057 +-0.0470363 0.0359078 0.0451061 +-0.0608634 0.154346 0.0292597 +-0.0748097 0.109257 0.0407877 +-0.0262745 0.0692227 0.0420449 +0.0243768 0.0533073 -0.022554 +-0.0530668 0.0348658 0.0444554 +0.0259946 0.0347155 0.014606 +-0.0591124 0.121234 0.0408265 +-0.0144894 0.112737 0.0404341 +-0.0838486 0.0803675 0.00250235 +-0.0582446 0.13534 0.0351018 +-0.0214986 0.100246 0.0444424 +-0.0713881 0.068562 0.0291565 +-0.0155474 0.160527 -0.0107791 +0.0215063 0.107058 0.0398344 +-0.0331542 0.158077 0.00281987 +-0.0863235 0.110381 0.0203696 +-0.0312005 0.162424 -0.00314295 +0.0384543 0.0395883 0.0218564 +0.0385307 0.0554981 0.0313684 +-0.0114896 0.0560578 0.0523304 +0.0593092 0.0622231 0.0211664 +-0.0648434 0.0339553 0.0130374 +0.0180082 0.0355585 0.00482766 +0.0399371 0.077993 0.0331058 +0.00160174 0.0351275 0.0454175 +-0.032718 0.0396362 0.0507617 +-0.0524899 0.0973506 0.0433264 +-0.032502 0.104286 0.0408563 +-0.00468764 0.0584239 -0.0337898 +-0.0672529 0.0760725 0.0393761 +0.0584714 0.0552095 0.0201836 +-0.0416396 0.0548863 -0.0113812 +0.014767 0.129313 0.0151085 +0.0271615 0.0578042 0.0426556 +-0.0133509 0.0384568 0.00507202 +-0.0770775 0.0703016 0.00351307 +-0.0514866 0.0748352 0.0426181 +-0.0882111 0.0936365 0.0238814 +-0.0906238 0.143032 0.0276653 +0.0233319 0.059176 0.0459237 +-0.036826 0.0446589 -0.0260242 +0.0332346 0.0955533 0.0394336 +-0.000484271 0.038989 -0.00201961 +0.0427221 0.101476 0.00816485 +0.0419002 0.102864 0.0131587 +-0.0208004 0.181643 -0.0143459 +0.0352424 0.0726953 -0.0147969 +-0.0234839 0.0509996 0.0435588 +0.0352381 0.0443124 0.029693 +0.000403091 0.0348316 -0.0232847 +-0.0684959 0.10279 0.039811 +0.019265 0.0708008 -0.0287723 +-0.0516068 0.0345225 0.0433683 +0.0391514 0.0617239 0.0318804 +0.0135008 0.111258 0.0394003 +0.0304359 0.108504 -0.0109544 +-0.038743 0.0768256 -0.018638 +-0.0223183 0.094515 0.0486399 +-0.0435018 0.0478421 0.040059 +-0.0727332 0.173623 -0.0510446 +-0.00349112 0.118315 0.0390164 +-0.0884421 0.133772 0.0426038 +-0.0454967 0.109818 0.0383281 +-0.0145 0.0392233 0.0384538 +-0.00466385 0.129429 0.0252614 +-0.00582274 0.088227 -0.0364178 +-0.0454902 0.0352033 -0.0224188 +-0.0348607 0.100046 -0.0224582 +-0.0792519 0.17071 -0.0410714 +-0.0376133 0.0393512 -0.0290006 +-0.0640598 0.170094 -0.0457055 +0.0303225 0.119467 0.0166127 +-0.0902791 0.116199 0.0435835 +0.0222032 0.0352055 0.0243097 +-0.073336 0.0968702 0.0400088 +-0.0376144 0.0393494 0.044329 +-0.0105011 0.0870252 0.0569814 +-0.0507332 0.161533 -0.00440491 +-0.0779412 0.162504 -0.0229403 +-0.0754919 0.128859 0.0530266 +-0.0541372 0.0344723 0.0359505 +0.0113242 0.0581457 -0.0297724 +-0.0442953 0.0391467 0.0441537 +0.0242713 0.035754 0.000294462 +-0.0615051 0.159991 -0.0325895 +-0.00166807 0.0568963 -0.03242 +-0.0119937 0.164096 -0.013967 +0.0166698 0.0900802 0.0505874 +0.0232051 0.0672264 0.0457926 +-0.0547028 0.0693497 -0.0142348 +-0.0645039 0.15312 0.03389 +-0.0344884 0.0918084 0.0445658 +0.0553932 0.0493283 0.0071983 +-0.047221 0.115086 -0.0157836 +-0.0737507 0.0835282 -0.0152437 +-0.00700363 0.0992954 0.0501023 +-0.0124605 0.0646213 0.0545516 +-0.0529942 0.0345374 0.0413527 +-0.0926054 0.122844 0.0302746 +-0.0652377 0.0419529 0.0337045 +0.0450967 0.0889619 0.00117113 +-0.0632063 0.0448721 0.0103941 +-0.0177692 0.074285 -0.0389303 +-0.0226723 0.0582322 -0.0321918 +-0.0233871 0.0380454 0.010662 +0.0144228 0.120472 -0.0118376 +-0.00758227 0.0362053 -0.0250795 +-0.0394882 0.0804267 0.0429074 +0.0505096 0.0651476 0.0284061 +0.0412879 0.0914659 -0.00877665 +-0.0613587 0.0343255 -0.00949544 +-0.0739143 0.148544 -0.0218644 +-0.0607701 0.0447346 0.0418038 +-0.0300938 0.0476999 -0.0248901 +-0.0666558 0.0720875 -0.0129051 +-0.0732714 0.156195 0.0132096 +-0.0340151 0.0498932 -0.013349 +-0.0484988 0.0762375 0.0432182 +-0.0614924 0.0384787 0.0187446 +-0.0572292 0.155416 0.0145778 +-0.0105966 0.0391805 -0.0262222 +0.00120442 0.117582 -0.0166604 +-0.070211 0.165211 -0.0489867 +0.0483875 0.0444574 0.00325794 +-0.0764978 0.13308 0.0521415 +-0.035201 0.0345651 0.0381519 +-0.00449959 0.107273 0.0439086 +-0.0266181 0.042276 -0.0292233 +-0.0364985 0.120712 0.0292752 +-0.0735593 0.15583 0.0102013 +-0.0554797 0.0848037 0.0450617 +-0.0845128 0.0817443 0.00347449 +-0.0169788 0.106067 -0.0223329 +-0.0699464 0.151677 0.0365135 +-0.0160243 0.0897174 -0.0373532 +-0.035698 0.0857595 -0.0237144 +-0.0308696 0.105755 -0.0215547 +-0.0475005 0.084795 0.044997 +0.00720445 0.088027 -0.0329216 +0.0388792 0.085648 -0.0137779 +-0.0451911 0.163637 -0.00858913 +-0.0752855 0.176467 -0.0519633 +-0.0568165 0.155074 0.0161832 +0.0369538 0.108295 0.0261877 +-0.0788782 0.172865 -0.0427748 +-0.0439777 0.0345259 0.038072 +0.0238242 0.0981836 0.0451545 +-0.0394936 0.0548399 0.0395943 +0.0242629 0.0790161 -0.0251629 +-0.0665084 0.0903473 0.0440273 +0.0291366 0.0495584 -0.0147305 +0.0191581 0.0357679 0.0376614 +-0.0278785 0.0535209 -0.0244081 +-0.00947834 0.12371 0.0334225 +-0.0570388 0.149629 0.0316784 +0.0117574 0.130329 0.0182774 +-0.00158005 0.131357 0.0134024 +-0.0657222 0.0431534 -0.00229362 +0.0404535 0.0689201 -0.00879299 +-0.0195496 0.161752 -0.0147401 +0.0435566 0.0695959 0.0259839 +-0.0893231 0.14203 0.0321578 +-0.0832597 0.10897 0.0263609 +0.00296745 0.0390391 -0.00510833 +0.0160439 0.0505074 0.0458237 +-0.0213985 0.181639 -0.0134576 +0.000249699 0.0347599 0.0129869 +-0.0138688 0.163706 -0.0171714 +-0.0787597 0.163865 -0.0299483 +-0.0321103 0.178539 -0.0110044 +-0.0062818 0.102371 0.0437669 +-0.0504236 0.113946 -0.0165184 +-0.0808373 0.0858965 0.0337281 +-0.0833697 0.0790868 0.0225099 +0.0174757 0.101745 0.0462033 +0.0562413 0.0521934 0.00418603 +-0.0386753 0.127489 0.0159666 +-0.0714887 0.0860678 0.0412957 +0.00930465 0.0639279 -0.0315779 +-0.038992 0.126654 0.0188148 +-0.0617292 0.0435742 0.0131822 +-0.0807044 0.109603 0.0338418 +0.01567 0.0343236 0.00175615 +-0.0151083 0.184586 -0.0219884 +-0.0792845 0.0704649 0.0170607 +-0.0611161 0.170955 -0.0586033 +-0.0656715 0.0684169 0.0339875 +-0.0346163 0.0505906 -0.0107587 +0.0292004 0.0566287 -0.0178044 +0.0402348 0.101386 0.0251818 +-0.0356488 0.118923 -0.0117804 +-0.00759062 0.117967 -0.0150103 +-0.0344873 0.0959942 0.0440904 +-0.0675456 0.035487 -0.00647 +-0.0177849 0.0784811 -0.0386843 +-0.0357813 0.0828042 -0.0224653 +-0.0217893 0.122494 0.0280004 +-0.040789 0.084093 -0.0212481 +-0.0448136 0.0629573 0.0395248 +-0.0851812 0.137956 0.0449006 +-0.0879612 0.103656 0.0103875 +-0.0558857 0.0998486 -0.020419 +0.017256 0.079507 0.0531399 +-0.0315382 0.178553 -0.0120253 +-0.06991 0.11224 -0.0100103 +-0.0512969 0.0556828 0.0150377 +0.0224682 0.0520683 0.0428376 +0.0143831 0.0448677 -0.0245168 +-0.0794364 0.144805 0.0432098 +-0.0638846 0.103946 -0.0172176 +-0.0284346 0.0849121 0.0465284 +0.0144928 0.11263 0.0387455 +-0.0860797 0.0882889 0.0261675 +-0.00931865 0.0862591 -0.0377315 +-0.0226749 0.0380487 0.0198364 +-0.0875543 0.0861148 0.0194651 +-0.0578317 0.0344516 0.0369209 +-0.0410907 0.157679 -0.0102957 +-0.0680436 0.0337635 0.00720288 +-0.0778811 0.104813 -0.00803583 +0.0518058 0.0553999 0.0290848 +-0.0504997 0.160817 0.00728082 +0.0241356 0.0632152 0.0453534 +-0.0268604 0.100151 -0.0237263 +0.0127955 0.0874066 0.0537621 +-0.0616261 0.155549 0.00719382 +-0.0593595 0.0336431 -0.00899455 +-0.065903 0.0643977 0.026882 +0.0278843 0.0536982 -0.0197695 +-0.0335041 0.0789099 0.0415331 +0.0414488 0.0873044 0.0301508 +-0.0627531 0.161513 -0.0475897 +0.0292606 0.0447502 0.0332372 +0.0105493 0.122164 -0.0116505 +-0.0908004 0.115922 0.00730178 +0.0306755 0.0581744 -0.0167704 +-0.0745653 0.158254 -0.0269305 +0.0417869 0.088692 -0.00877741 +-0.0765465 0.107865 0.0361429 +0.0291715 0.104768 0.0370747 +-0.0435198 0.0436724 -0.0163157 +-0.0639905 0.155091 0.00636862 +-0.0676976 0.156296 0.0180917 +0.0361371 0.0605355 0.0363255 +-0.0831336 0.135327 0.0485953 +-0.0205283 0.125395 0.0225414 +0.0218584 0.126105 0.0106 +-0.0573551 0.0335045 0.00783858 +-0.0766685 0.144473 -0.00485242 +0.0215827 0.0449804 0.0414892 +-0.0623027 0.152202 -0.0135791 +-0.0124889 0.118271 0.037774 +-0.058999 0.129653 -0.00698695 +0.0212269 0.035264 0.00760182 +-0.0558448 0.0533792 -0.00239414 +-0.042206 0.147853 0.000366775 +-0.0732213 0.156852 -0.0309091 +0.00482377 0.0349755 -0.00101746 +0.00553205 0.131427 0.00744951 +-0.0606157 0.0459479 0.0402046 +0.00228793 0.0626666 -0.0335374 +-0.00869718 0.172706 -0.0257786 +0.0265924 0.0466157 -0.0146569 +0.0293044 0.0481199 -0.00974071 +-0.0278981 0.0863323 0.047373 +0.029421 0.0461183 -0.00671048 +-0.058539 0.0588103 0.0191792 +-0.0577583 0.0479183 0.03595 +0.0299489 0.069977 0.0415097 +-0.0877683 0.149882 0.0273982 +-0.0403006 0.122206 -0.0112466 +-0.0731823 0.109139 0.039466 +0.00748061 0.115492 0.0392535 +-0.0323193 0.0339823 0.0197127 +-0.00249248 0.0911617 0.056251 +-0.0410706 0.0335739 0.0056728 +-0.0167629 0.120643 -0.00969861 +0.0170314 0.126681 0.0245104 +-0.0933703 0.118789 0.0242915 +-0.0167466 0.161131 -0.0135692 +-0.037714 0.0710075 -0.016855 +-0.0748306 0.094995 -0.0139518 +-0.0653015 0.169027 -0.0374543 +-0.0171592 0.0387994 -0.0126424 +-0.0649264 0.112407 -0.0127033 +0.0089357 0.131311 0.0143899 +-0.0695053 0.106913 0.0375568 +-0.0679519 0.129695 -0.00900682 +0.0196594 0.10025 -0.0221259 +0.0187375 0.0672729 0.0498973 +-0.0634922 0.0626336 0.0253957 +-0.0640428 0.0593154 0.0139941 +-0.0365043 0.0691064 0.0417512 +-0.0509946 0.0547172 0.0191515 +-0.0684996 0.106934 0.0379267 +-0.0391114 0.149509 -0.00165293 +0.00150153 0.0534013 0.0535077 +-0.0610153 0.131125 -0.0076807 +-0.015856 0.0980295 -0.0258983 +0.0549279 0.0723085 0.00788581 +0.0296197 0.117006 0.0277632 +0.00535242 0.130989 0.0202309 +-0.000691446 0.0612541 -0.0338404 +0.00150093 0.0441835 0.0459725 +-0.0611099 0.11531 0.0378549 +-0.0695161 0.108303 0.0373324 +-0.0543547 0.158623 0.00837339 +-0.0945603 0.124158 0.0182654 +-0.0535009 0.111177 0.0367213 +-0.0119534 0.0385403 0.00164014 +-0.0370531 0.166795 0.000693639 +0.0161005 0.115637 -0.0146217 +-0.0669681 0.132599 -0.00847972 +-0.0192376 0.0362049 0.0528295 +-0.0510947 0.138549 0.00140254 +0.0199501 0.126815 0.00703133 +-0.0280876 0.0511424 0.0415727 +0.0021184 0.108719 -0.0202691 +-0.0455158 0.0889126 0.0438293 +0.00898082 0.0376394 0.0339008 +-0.0913279 0.147458 0.016148 +-0.00573884 0.0712887 -0.036141 +0.0184912 0.0906471 0.0481735 +-0.0240484 0.159369 -0.0122932 +-0.00386335 0.103093 -0.0232514 +-0.0903131 0.126767 0.00528424 +-0.00141239 0.101018 0.0444401 +-0.0265472 0.0384572 -0.00862977 +-0.0461338 0.160629 -0.00828859 +0.0434078 0.0958974 0.0221477 +-0.0323682 0.0778417 -0.0305703 +-0.0104869 0.166942 -0.0170857 +0.0335642 0.11614 0.00925074 +-0.0679156 0.112303 -0.0110315 +0.0448529 0.0917799 0.0171662 +-0.0902457 0.140661 0.0271695 +0.0361358 0.102075 -0.0100705 +-0.0774559 0.158948 -0.0154272 +-0.0718839 0.142969 -0.00986002 +0.0254315 0.0862638 0.0474376 +0.0233509 0.0549381 -0.0249484 +0.0445042 0.0650854 0.0275412 +0.0472882 0.0731371 0.0168777 +0.0310703 0.0352449 0.00774073 +-0.0540072 0.144242 -0.000990452 +-0.0901845 0.132425 0.0322244 +-0.0305014 0.066031 0.0387492 +-0.0636396 0.163113 -0.0245909 +0.0265757 0.0754454 0.0454823 +0.0560761 0.0692634 0.0230866 +0.0323242 0.117657 0.0116569 +-0.0744896 0.128852 0.0526631 +-0.092535 0.126933 0.0292581 +-0.021881 0.107267 -0.0220871 +0.0216673 0.125834 0.0205048 +-0.0892808 0.140568 0.013241 +-0.0188177 0.0683045 0.0530002 +0.0181426 0.117476 -0.0126083 +-0.0562843 0.049932 0.00898241 +0.0271917 0.0858851 -0.0222975 +-0.0354636 0.172718 -0.000342918 +-0.0113055 0.0991708 0.0485876 +-0.0512476 0.149342 0.0143776 +0.0112062 0.129253 0.000760937 +-0.027273 0.123571 -0.00271305 +-0.0942867 0.122796 0.0162787 +-0.0731111 0.152638 -0.0358925 +-0.0630631 0.0351206 0.0420909 +-0.0638567 0.0981567 -0.0173229 +-0.0886136 0.0969805 0.0223931 +0.0376971 0.0381803 0.0174952 +-0.0389196 0.163835 0.00150184 +0.0470726 0.048551 -0.0036464 +-0.0195067 0.119545 0.0340058 +-0.0154952 0.101637 0.0439764 +-0.0615198 0.167807 -0.0565879 +0.000487515 0.110024 0.0426254 +0.0218587 0.0714183 0.0491823 +-0.0891206 0.0888853 0.014456 +0.00728906 0.0602827 0.0543511 +0.0159015 0.122788 0.0313235 +0.0287151 0.0982016 0.0416756 +-0.0515592 0.162515 0.00512403 +-0.0562626 0.0437454 0.0167126 +-0.0181312 0.0948304 -0.0325641 +-0.0375002 0.0337858 -0.019518 +-0.0283411 0.0368095 0.0535577 +0.0138368 0.126165 0.029064 +-0.0698832 0.115052 -0.00855978 +-0.0166197 0.126668 0.0238945 +-0.062914 0.11807 -0.00990368 +-0.0489018 0.129654 0.0292632 +-0.0524468 0.0489914 0.023647 +-0.0590382 0.132561 -0.00680716 +-0.0429798 0.150656 0.00610371 +-0.0708619 0.0368523 0.00979504 +0.0198172 0.102563 -0.0205962 +0.0416527 0.0846461 0.030449 +-0.0215106 0.119492 0.0328652 +-0.0144877 0.185446 -0.0257702 +0.0475192 0.0568404 0.0316921 +-0.0913388 0.115949 0.00831473 +0.0281313 0.0591962 0.0423168 +-0.035495 0.171374 -0.0137494 +-0.0736292 0.156748 -0.0014693 +-0.00249426 0.0505094 0.0526827 +-0.0909607 0.144377 0.0265412 +-0.0410851 0.123071 0.0255089 +-0.0226414 0.0961417 -0.0259441 +0.0264078 0.120534 -0.000510633 +-0.0193661 0.126578 0.00214409 +0.0465619 0.0568462 0.0320779 +0.0207007 0.040829 0.0419301 +-0.0564899 0.0440403 0.0448345 +0.000863008 0.0381264 -0.0140589 +-0.0418598 0.102811 -0.0210501 +-0.00158954 0.0376715 -0.025054 +-0.0723294 0.177884 -0.0550149 +-0.0544961 0.0732542 0.0409056 +-0.00649673 0.121064 0.0364033 +0.0504194 0.0446982 0.00822878 +-0.0153541 0.0337728 -0.0226273 +-0.0303696 0.0486908 0.0439216 +-0.0334968 0.033775 0.00883944 +-0.0685163 0.108328 0.0375372 +-0.0304988 0.0603029 0.0376116 +-0.0662971 0.0363734 0.0376513 +0.0311541 0.072342 -0.0197804 +0.016819 0.0860765 0.050782 +-0.067492 0.0944588 0.0423306 +-0.0187655 0.0714126 -0.0384549 +-0.0605051 0.128314 0.040613 +0.00838174 0.0449018 -0.0251393 +-0.0164768 0.122235 0.0319313 +0.0227625 0.125142 0.00666699 +-0.0528343 0.0337802 -0.0114802 +0.0451301 0.0903696 0.00218472 +-0.0576106 0.148673 -0.00161022 +0.00250457 0.100333 0.0462614 +-0.0262513 0.0350951 0.0517484 +-0.054684 0.067848 -0.0128124 +-0.0441291 0.159145 -0.00944971 +-0.0440467 0.0380432 -0.0230799 +-0.0447681 0.146394 0.00358641 +-0.0894274 0.0915536 0.0114438 +-0.0751139 0.0954949 0.0389973 +0.0383178 0.106879 0.000185785 +-0.0732998 0.0654414 0.00491231 +-0.00228741 0.13015 0.0232201 +-0.0372213 0.150899 -0.00386632 +-0.0261116 0.0809919 0.0513952 +0.0322341 0.112712 0.0291688 +-0.0690565 0.0338884 -0.00389811 +0.0101437 0.101615 -0.0217271 +0.0425651 0.10009 0.017161 +-0.0355201 0.16973 -0.000114667 +0.00176571 0.0954911 -0.0311224 +0.0373922 0.0461028 -0.00552229 +-0.0261166 0.163762 -0.0159025 +-0.0651006 0.0458549 0.00368955 +0.0212923 0.0982999 -0.0220426 +0.026467 0.0383015 -0.00253304 +-0.0231343 0.0383693 -0.0171708 +0.00758009 0.121578 -0.0129987 +-0.0491724 0.116402 -0.0151155 +-0.0174383 0.038419 -0.00120725 +-0.0368548 0.0985914 -0.0223265 +-0.0599288 0.145383 0.0362513 +0.00646924 0.0964123 0.0516046 +-0.0630484 0.138442 -0.00719818 +-0.0266978 0.0917701 0.0460149 +-0.0534968 0.0790911 0.0438637 +-0.0203653 0.0682964 0.0517114 +0.0203853 0.049027 -0.0227929 +-0.0539349 0.0527611 0.0108042 +0.0460422 0.0848268 0.0101717 +-0.0728228 0.148718 -0.0323717 +0.0337238 0.11401 0.0250189 +-0.0718098 0.0864713 -0.016231 +-0.000525817 0.0352062 0.0124275 +0.0044963 0.0605551 0.0556784 +0.0278498 0.045613 -0.00720046 +0.0242032 0.0987613 -0.0205495 +0.0133536 0.0359529 -0.0210721 +-0.00614443 0.0386147 0.00639011 +-0.091603 0.144731 0.0191577 +-0.00870302 0.0387758 0.0292604 +0.00137957 0.0343513 0.00995357 +0.0580311 0.0716366 0.0149943 +0.029585 0.0495591 -0.0127459 +-0.0873232 0.0873446 0.00247822 +-0.0562907 0.154938 0.0178178 +0.0227189 0.116065 -0.0110894 +-0.089541 0.143417 0.0301691 +-0.0295204 0.0607307 -0.0234192 +-0.072166 0.0982206 0.0402281 +0.0461397 0.0764263 0.0052018 +-0.0650238 0.0405393 0.0286621 +-0.0357662 0.0798799 -0.0213145 +-0.0210545 0.100222 -0.024166 +-0.051798 0.0884029 -0.0218862 +-0.0585235 0.0425717 0.0226979 +-0.0581184 0.132538 0.0370402 +-0.0500652 0.125773 -0.00688378 +-0.0570027 0.145725 -0.00171879 +-0.000114754 0.120081 -0.0133088 +-0.0558569 0.135328 0.0332838 +-0.071744 0.162192 -0.0110365 +-0.0533559 0.0609747 0.0280244 +-0.0678966 0.110866 -0.0116376 +-0.0708871 0.119431 -0.00850422 +-0.0743754 0.0995209 0.0381506 +-0.0827936 0.110133 0.0365 +0.0274001 0.0354299 0.0197116 +-0.0700593 0.152584 0.0349486 +-0.0594807 0.0398598 0.0207095 +-0.0506478 0.0648447 -0.0114426 +-0.0548507 0.0955893 -0.0216695 +-0.0735032 0.144216 0.0449341 +-0.0746874 0.169403 -0.0279937 +-0.041349 0.172669 -0.00697494 +-0.0879813 0.0968653 0.0054141 +-0.0639066 0.158701 -0.0499459 +-0.0295413 0.0348538 0.0461198 +0.0425062 0.0610428 0.0297234 +-0.0761006 0.0693618 0.0222283 +0.0350916 0.102085 0.0333486 +-0.0434936 0.107078 0.040105 +-0.0210995 0.166843 -0.0113898 +-0.0599936 0.0459773 0.0409964 +0.0260763 0.0726986 0.044735 +0.0368852 0.111459 0.00613554 +-0.00301536 0.127034 0.030217 +-0.0313536 0.0384061 -0.00216621 +0.0173795 0.0350198 0.030737 +-0.072846 0.165216 -0.0419869 +-0.0344415 0.176449 -0.00471515 +0.00170995 0.0392427 0.0309786 +-0.04085 0.0985381 -0.021696 +-0.0479764 0.135553 0.00940627 +-0.0332667 0.0835875 -0.0265323 +0.0206498 0.0781917 0.0510092 +0.0122103 0.0893249 -0.030653 +-0.0464803 0.0335784 -0.0137021 +-0.0367962 0.0383714 -0.00507539 +-0.00449141 0.0911839 0.0565229 +0.0243337 0.0605883 -0.0247185 +-0.0826166 0.123078 0.0498508 +0.0540378 0.0525213 0.0252382 +-0.0675101 0.0369158 -0.0062949 +-0.0205096 0.124449 -0.00369667 +0.0285796 0.107031 -0.0133812 +0.0320794 0.0526694 -0.0107538 +-0.0203373 0.0610131 0.0476733 +-0.0674469 0.0396367 -0.00494886 +-0.0599339 0.120955 -0.00911512 +0.0168017 0.105866 -0.0181237 +-0.0787857 0.0744548 -0.00455566 +0.0193044 0.127372 0.00964815 +-0.038368 0.0457007 -0.0229731 +-0.025877 0.125557 0.00449924 +-0.0609237 0.0414243 0.0237035 +-0.0433646 0.153626 0.00736711 +-0.0513808 0.0500433 0.0347314 +-0.0212772 0.0382158 0.00549847 +0.0220013 0.0348195 0.00816409 +-0.0519377 0.0335199 0.00532131 +0.00789859 0.0999878 -0.0218807 +0.0337096 0.115696 0.0178949 +-0.0404258 0.0418709 -0.0242648 +-0.0188763 0.105884 -0.0226282 +-0.0648153 0.175482 -0.051724 +-0.070065 0.148313 -0.0344143 +-0.0584005 0.0439707 0.0246877 +0.0215152 0.0795452 0.0505127 +-0.000765864 0.0811873 -0.0364626 +-0.0633527 0.0454486 0.000289555 +-0.0455004 0.113892 0.0345333 +-0.0205229 0.0336428 -0.0235211 +-0.0658189 0.0895406 -0.0182783 +0.00772286 0.0346363 0.0381279 +0.044441 0.093115 0.00120191 +-0.0859796 0.119771 -0.00178632 +0.00662772 0.0374926 -0.0123303 +-0.0495602 0.0418248 -0.0110192 +-0.0863354 0.129395 -0.000699295 +-0.00570279 0.0613633 -0.0351663 +-0.0195101 0.114089 0.03835 +-0.0679008 0.1038 -0.0147014 +0.045275 0.0917907 0.0041773 +0.0258455 0.110181 -0.0127425 +-0.00858661 0.0376839 -0.0256139 +-0.0494924 0.160775 0.00747898 +-0.0186783 0.101771 -0.0238107 +-0.0870678 0.11107 0.0203515 +-0.0692028 0.135485 0.0474165 +-0.0665472 0.0446244 0.00170489 +-0.0679768 0.0791427 0.0408622 +0.0184726 0.0851741 0.0505075 +-0.0203373 0.158355 -0.00674555 +-0.0364979 0.119358 0.0304421 +-0.0395021 0.0450562 0.0411081 +-0.00309828 0.0379762 0.00940157 +-0.054497 0.10568 0.0405938 +-0.0354869 0.0903478 0.043788 +-0.0882673 0.102346 0.019362 +-0.0518479 0.128319 0.033784 +0.0163666 0.0522247 -0.0268816 +-0.0216233 0.0450569 -0.0280185 +-0.0332919 0.124337 -0.00345787 +-0.0603705 0.118249 -0.0108601 +-0.0883316 0.128385 0.0454834 +-0.0681462 0.033688 -0.00353141 +0.0232453 0.12098 -0.00440593 +-0.0294449 0.038677 -0.0149866 +0.0110249 0.0988999 -0.0227192 +-0.0218748 0.174208 -0.0142339 +0.0205417 0.0741225 0.0508294 +-0.0627477 0.148893 -0.0169766 +-0.0398023 0.0338119 -0.0274661 +-0.0319551 0.0348046 0.0438977 +0.0104998 0.108437 0.040345 +-0.0139772 0.164028 -0.0115888 +-0.0247602 0.0379556 0.0194943 +-0.000934383 0.0340393 -0.0200439 +0.0476809 0.0472678 -0.00164326 +-0.0400291 0.0354632 0.00960076 +-0.0671756 0.0610764 0.00625684 +-0.0852257 0.114326 0.001271 +-0.0754019 0.151364 -0.0118956 +-0.0437605 0.146927 0.00133694 +-0.0619528 0.15527 -0.030594 +0.0363929 0.0490985 -0.00642376 +-0.0100186 0.0981603 -0.0280043 +-0.0119452 0.129197 0.00527137 +-0.0346207 0.0519685 -0.0102527 +0.0527588 0.0510331 0.0250995 +-0.0635082 0.148832 -0.022668 +-0.0147336 0.0671673 -0.0377424 +-0.0704174 0.170744 -0.0307374 +0.0105902 0.125785 0.0307704 +-0.0258145 0.0894344 -0.0348302 +-0.0177853 0.0383982 0.00785589 +-0.0875073 0.0954698 0.00341799 +-0.0424838 0.105689 0.0405023 +0.049326 0.0581361 0.0307698 +-0.0426568 0.0578158 -0.011891 +-0.0506189 0.0517055 -0.00806622 +-0.0751298 0.155996 0.0213056 +-0.0740765 0.0662649 0.0182774 +-0.055953 0.151039 0.0297159 +0.00149895 0.0519342 0.0529111 +-0.0476623 0.135572 0.0124001 +0.00259703 0.093007 -0.0325523 +-0.021995 0.185609 -0.0143485 +0.0421516 0.0805501 0.0292856 +-0.014868 0.104453 -0.022832 +-0.0398868 0.108509 -0.0195593 +0.0259209 0.122835 0.0206655 +-0.0616544 0.15599 0.0144357 +-0.0733101 0.14716 -0.0188577 +-0.0262613 0.119664 -0.0106051 +0.0355444 0.109985 0.0269213 +0.04069 0.0703475 -0.0087868 +-0.0658232 0.100991 -0.0166158 +0.0443888 0.0846966 -0.000809941 +-0.0235014 0.109891 0.0398372 +0.0275195 0.0713136 0.0432798 +0.0364601 0.111481 0.0203251 +-0.0766191 0.168746 -0.0293719 +0.041872 0.069712 0.028792 +-0.0188551 0.177186 -0.0168879 +-0.0430291 0.148351 -0.00306372 +0.0241638 0.0853333 -0.0244737 +0.017675 0.127712 0.00477874 +-0.0888835 0.0983415 0.0204012 +-0.0202474 0.0582316 0.0476806 +-0.0719293 0.126758 -0.00881076 +-0.0294958 0.0960659 0.0449891 +-0.0491744 0.14016 0.00939463 +-0.0284952 0.105677 0.0407009 +0.0215711 0.035903 0.0289947 +0.0112282 0.0780681 -0.031821 +0.0343153 0.115038 0.0152609 +0.0213375 0.0536353 -0.0261911 +-0.0754641 0.149954 -0.0208706 +0.0174704 0.1044 0.0442882 +0.00640724 0.0390095 -0.0238414 +-0.0396234 0.150027 -0.00409811 +-0.0900489 0.137821 0.0141988 +0.0252808 0.0733562 -0.0251315 +-0.0492373 0.132883 0.0267635 +-0.0430533 0.034543 -0.0263375 +0.0217093 0.0520814 0.0434982 +-0.0333828 0.0807789 -0.0265175 +-0.0761052 0.14997 -0.0158781 +-0.0707786 0.0690222 0.0306409 +0.0401031 0.0589615 -0.00453029 +-0.0260252 0.0904818 0.0482145 +-0.0895062 0.0902087 0.0114561 +-0.0526923 0.0334338 -0.00380212 +-0.0114811 0.0646532 0.0550744 +-0.0370678 0.157759 -0.0113588 +0.00952731 0.105746 0.0431674 +-0.0410118 0.126885 0.0180931 +0.0197485 0.105413 -0.017636 +-0.0629292 0.155832 0.0110869 +-0.0581695 0.15592 0.011334 +-0.00650086 0.0561902 0.0537938 +-0.0338729 0.15688 -0.0110666 +0.0405297 0.0779725 0.0322363 +-0.0642469 0.0423257 0.0129047 +0.0237846 0.0476926 0.0394013 +-0.0217726 0.172729 -0.0141007 +-0.0416287 0.0534443 -0.0111279 +-0.077087 0.154176 -0.0108977 +0.0304203 0.0366341 0.0210583 +-0.0306156 0.0552316 -0.0163811 +-0.0584355 0.0482117 0.00674018 +-0.0284904 0.0917855 0.0443788 +-0.0347085 0.0681808 -0.0168555 +0.0286267 0.117101 -0.00417221 +0.000831008 0.0996342 -0.0235195 +0.00330328 0.0611715 -0.0325304 +-0.0739165 0.113504 -0.00683708 +-0.0898235 0.126994 0.0441831 +-0.0889746 0.0942393 0.0114303 +-0.0279086 0.0704216 -0.0334901 +-0.041504 0.0562873 0.0399374 +0.0394095 0.0793879 0.0341721 +-0.0669825 0.112069 0.0420748 +-0.0847653 0.103459 0.000382003 +-0.00649785 0.0801379 0.0576218 +-0.0226054 0.126675 0.00715587 +-0.000755212 0.130746 0.00366553 +-0.0328403 0.0348519 -0.0195836 +0.0396279 0.0857065 -0.0127726 +-0.0805255 0.14991 0.0359696 +0.0353489 0.0955322 0.0372114 +0.0102384 0.0781052 -0.0323493 +-0.0296143 0.0551126 -0.0213868 +-0.0699315 0.126779 -0.00900092 +-0.0795103 0.126002 0.0528073 +-0.000474921 0.0732072 0.0579427 +0.00749418 0.095088 0.0520151 +-0.0841797 0.101927 0.0280813 +0.0424909 0.101472 0.00517268 +0.00951997 0.0673959 0.0546877 +-0.0472854 0.0671503 0.0390298 +0.0376148 0.100847 -0.00874384 +-0.0374929 0.116616 0.0320198 +0.029259 0.120361 0.0176317 +-0.0737149 0.158251 -0.0299203 +-0.0114976 0.116917 0.038689 +0.0413371 0.0444728 -0.00290745 +-0.0627029 0.150609 -0.0235776 +-0.0302691 0.080511 -0.0335682 +0.0300872 0.0497043 -0.0117138 +0.0222773 0.0620859 -0.0257917 +-0.0570144 0.147201 -0.00173114 +-0.0760781 0.173825 -0.0400503 +-0.00149572 0.101631 0.0441885 +-0.0261888 0.17564 -0.0188354 +0.0231825 0.0577956 0.0456852 +-0.0924811 0.125593 0.0372603 +0.00115082 0.131147 0.0187057 +-0.0841614 0.142011 0.042356 +0.042729 0.0901813 -0.0058099 +0.0213045 0.0372836 -0.00268556 +-0.0160362 0.0338015 -0.0209075 +0.0394869 0.10531 0.000602508 +-0.0239168 0.0383626 0.00119722 +-0.0164538 0.0343139 -0.019589 +-0.0592802 0.154415 0.0283608 +-0.0609269 0.155849 0.0219449 +-0.0250081 0.0361291 -0.0192131 +-0.0853634 0.14876 0.00617316 +-0.0253618 0.0386908 -0.0141849 +-0.0881693 0.0922771 0.0238938 +-0.0728038 0.0921924 -0.0153063 +-0.0708783 0.150832 0.0377201 +0.00548074 0.111376 0.0414038 +-0.0524967 0.0945727 0.0438723 +0.0115063 0.0343546 -0.0179688 +0.00151312 0.081484 0.0572224 +-0.0149936 0.0395459 0.0398583 +0.0120392 0.129427 0.0226627 +0.0591195 0.05666 0.00817454 +0.0328155 0.102974 -0.0130264 +-0.0371359 0.123595 0.025439 +0.0450698 0.0805625 0.0231647 +-0.028064 0.0385407 0.0362565 +-0.00648913 0.0732625 0.0583326 +-0.0374981 0.0719295 0.0420686 +-0.0736872 0.176894 -0.0449171 +-0.0672224 0.0339784 0.0107486 +-0.0758756 0.104904 -0.00955908 +0.0439403 0.083251 -0.00181959 +-0.0614723 0.15843 -0.0295877 +0.0442849 0.0945485 0.0181566 +-0.065503 0.044849 0.00843715 +0.00357616 0.0395385 0.0347033 +-0.028754 0.0634689 -0.0284339 +0.0315757 0.0914687 -0.0188156 +0.00716348 0.0343484 0.0202029 +-0.0216788 0.0493937 -0.0287126 +-0.0716516 0.139715 0.0474384 +-0.043721 0.033715 -0.00407894 +-0.0817894 0.0909919 -0.00761357 +0.0425053 0.0513815 0.0326154 +-0.0638693 0.170945 -0.0476012 +0.0316414 0.11271 0.0301021 +-0.0306212 0.159741 -0.0134031 +-0.0214041 0.0879871 0.0549671 +-0.0670934 0.0625692 0.00143601 +-0.0365003 0.087456 0.0430956 +0.00150165 0.0919153 -0.0334107 +-0.024293 0.124271 0.0211991 +-0.0604952 0.0932426 0.0451145 +0.00516194 0.0978455 -0.0256065 +-0.00249882 0.081515 0.0574957 +-0.0636907 0.146369 -0.0159165 +-0.0129939 0.103563 -0.0236849 +0.00282967 0.131401 0.0178813 +0.00250691 0.0883899 0.0564027 +0.0220994 0.0476682 0.0404859 +-0.0466625 0.12523 -0.00836412 +0.00382851 0.0992997 -0.0231609 +-0.0879384 0.126705 0.000268669 +-0.0725213 0.0636798 0.0102197 +-0.00645782 0.0338359 -0.0228235 +-0.0523786 0.138216 -8.53499e-05 +-0.041943 0.114992 -0.0156494 +0.0435142 0.0513638 0.0325031 +0.0432433 0.0958712 0.000187851 +-0.0729725 0.170894 -0.0302341 +-0.0303619 0.0381166 0.0307902 +-0.0942177 0.125518 0.0172578 +0.0446543 0.0959754 0.00716634 +-0.0263933 0.0864552 0.0500994 +0.0352313 0.064664 0.0385641 +-0.0913521 0.14609 0.0171489 +-0.00798473 0.0348553 0.0472244 +-0.00181216 0.086792 -0.0360393 +-0.0153678 0.09644 0.0517723 +0.0268857 0.117842 -0.00498093 +-0.0354986 0.0747267 0.0419454 +-0.0573263 0.0481094 0.0336642 +-0.0386241 0.125328 -0.00654651 +-0.020119 0.0431531 0.0531418 +-0.0226834 0.174208 -0.0136486 +-0.0554979 0.0889982 0.0448936 +-0.0321193 0.0366883 0.0508235 +0.013731 0.104072 -0.0202068 +0.0407967 0.0661529 -0.00677209 +-0.0792933 0.16941 -0.0399858 +-0.0250378 0.174204 -0.0117666 +-0.0718111 0.0631642 0.010775 +-0.0710553 0.181198 -0.0554882 +-0.058796 0.0868581 -0.0207882 +-0.0136362 0.0466649 -0.0295427 +-0.0924917 0.124196 0.0312677 +-0.0331602 0.171158 -0.0153905 +-0.0724259 0.0727975 0.0340482 +-0.0566618 0.0645338 -0.00803085 +-0.0705221 0.098629 0.0408842 +0.0118568 0.126524 -0.00436904 +-0.0784161 0.116342 0.0501163 +-0.0677948 0.160582 -0.0110564 +-0.0456903 0.11799 -0.0148012 +0.0526315 0.0462656 0.0102089 +0.0453672 0.0456539 0.0269438 +-0.00726729 0.129761 0.0228793 +-0.0659232 0.105312 -0.014993 +-0.087769 0.118492 0.00124641 +-0.00149512 0.0562755 0.0546084 +-0.089164 0.0928946 0.0114433 +-0.0841907 0.078353 0.0198111 +-0.0679412 0.0656184 0.0271584 +0.0224551 0.0368363 -0.00219983 +-0.0356854 0.0435567 0.045098 +-0.0457595 0.0797224 -0.0196258 +-0.0405031 0.0762353 0.0429954 +-0.0640239 0.14106 0.0390925 +-0.0797368 0.119028 0.049952 +-0.0864815 0.0846104 0.00248575 +-0.0774908 0.137247 0.0499166 +-0.0586931 0.0693474 -0.0143558 +-0.0340813 0.159269 -0.0127772 +-0.0889533 0.124321 0.0462453 +-0.0611638 0.0468972 0.00167818 +-0.0925249 0.130961 0.0132346 +-0.0707251 0.033867 0.00298473 +0.0514024 0.0510939 0.0266785 +-0.000225629 0.097747 0.0525183 +0.0260546 0.112325 -0.0110571 +-0.0429452 0.0345628 0.0382617 +-0.0174331 0.0625913 0.0517909 +0.0422611 0.0397457 0.00959333 +-0.0374974 0.0705158 0.0419336 +-0.0368535 0.0362973 -0.0142764 +-0.0132005 0.128825 0.00480743 +-0.0808442 0.110042 -0.00155764 +-0.0890966 0.114815 0.0438036 +-0.0195037 0.11681 0.0364149 +-0.0653439 0.127011 0.0477296 +-0.0749324 0.152731 -0.0198994 +-0.0131083 0.128689 0.020774 +-0.0761869 0.149999 -0.0118749 +-0.0657951 0.0852369 -0.0187501 +-0.0515872 0.0558557 0.0146208 +0.0414903 0.0541829 0.0322405 +-0.0094881 0.112787 0.0415502 +-0.0473098 0.0390167 0.04506 +-0.076903 0.112654 -0.00467049 +-0.0792829 0.109073 0.0381388 +0.0277273 0.0646184 0.0435417 +-0.0923959 0.132359 0.0202239 +-0.0505803 0.0502828 -0.00813802 +0.00549299 0.117639 -0.0167508 +-0.0166687 0.038571 -0.00303984 +-0.0728836 0.119408 -0.00813229 +-0.00373228 0.0669631 -0.0346735 +0.0373953 0.0445589 -0.00471693 +0.00577997 0.0365296 -0.0134893 +0.0065091 0.0772612 0.0561769 +-0.0785581 0.153669 0.00407716 +-0.0631137 0.14437 -0.00863045 +0.0335076 0.0453895 0.0300756 +-0.00148382 0.131063 0.00627096 +-0.0117022 0.0613984 -0.0359464 +-0.0390182 0.0473551 -0.0162983 +0.0174871 0.10577 0.0429453 +0.0173606 0.128011 0.00608341 +-0.0587951 0.0337712 0.0197789 +-0.0554323 0.145321 0.0304155 +-0.021174 0.184521 -0.0131308 +-0.0546552 0.0656851 0.0351815 +-0.00872132 0.0656071 -0.0355909 +0.00329381 0.0654903 -0.0335962 +-0.0874212 0.0861211 0.0204627 +0.0341358 0.0641297 -0.0158137 +-0.063479 0.0384929 -0.0076832 +0.0174063 0.0417452 -0.0219906 +-0.069028 0.0409064 0.00923732 +0.0577041 0.0703778 0.00716237 +-0.0506338 0.0663851 -0.0124105 +-0.04882 0.119077 -0.0139102 +-0.0660878 0.161167 -0.014759 +0.060054 0.0678303 0.0101401 +-0.063913 0.169258 -0.0441943 +-0.053845 0.0463107 0.0236764 +-0.0784828 0.175619 -0.0475153 +-0.0313957 0.12387 -0.00298136 +0.0154947 0.107116 0.0420405 +-0.036876 0.0434502 0.0434666 +-0.06715 0.145376 0.0416405 +-0.0155327 0.181625 -0.0208343 +-0.0715781 0.0968766 0.0410625 +0.0306462 0.0968954 0.0409575 +0.00964614 0.0589005 0.0527021 +0.0527245 0.0736707 0.0159788 +-0.0861826 0.104908 0.00538017 +-0.0812551 0.138069 0.0480599 +0.0475108 0.0597433 0.0313293 +-0.0156256 0.0450397 -0.0279587 +-0.0221316 0.125526 0.0205056 +-0.0322922 0.122832 0.0242564 +-0.0132407 0.164048 -0.012311 +-0.0415061 0.0620057 0.0410722 +-0.0657901 0.128396 0.0470862 +0.0282252 0.0760107 -0.0227881 +-0.0701785 0.136914 0.0477863 +0.03413 0.0822192 0.0406334 +0.0609039 0.0609671 0.0121585 +-0.0515277 0.136697 0.0258426 +-0.00994091 0.089177 -0.0367642 +0.0451266 0.0727442 0.0219703 +0.0336533 0.110026 0.0294894 +-0.0721725 0.156265 0.0135984 +0.0312336 0.051167 -0.0107736 +-0.0023355 0.0926921 -0.0342848 +-0.0524965 0.0790864 0.0437156 +-0.0095237 0.0431051 0.0494016 +0.000300907 0.0626948 -0.0340909 +-0.0905968 0.140629 0.0221693 +-0.00800869 0.0388567 -0.00527149 +-0.0584939 0.0847167 0.0439692 +-0.0635243 0.0334646 -0.00419693 +-0.090351 0.14066 0.0261698 +-0.0588327 0.0911696 -0.0205864 +-0.020414 0.0541289 0.0465389 +-0.056688 0.067746 -0.0120827 +-0.0344045 0.152028 -0.00248634 +-0.0154988 0.114109 0.0392017 +-0.0384878 0.168246 0.00236894 +-0.0115711 0.100192 -0.0241483 +-0.0167308 0.0657547 -0.0377116 +-0.0466962 0.147986 -0.00319779 +-0.0926613 0.122825 0.0414622 +0.0312237 0.0871647 -0.0198177 +-0.0257476 0.0682496 -0.0344079 +-0.0524537 0.0504524 0.0306643 +-0.0768211 0.0804727 0.0355147 +-0.00449363 0.0456798 0.0470573 +0.0418422 0.0690449 -0.00578965 +-0.0262667 0.110544 -0.0190457 +-0.00251293 0.105882 0.0441369 +-0.0707082 0.0395895 0.000643319 +0.0128917 0.127573 0.0272919 +-0.0354687 0.054727 0.0384538 +0.00920102 0.0837298 -0.0322138 +0.0094791 0.0347704 0.0365664 +-0.0435038 0.0438236 0.0424673 +-0.0551839 0.140262 -0.00246039 +0.00523902 0.0341335 -0.0189244 +0.0273731 0.0578707 -0.0207586 +0.0119495 0.129938 0.00409466 +-0.0494983 0.102885 0.0411106 +-0.0370447 0.0379826 0.045213 +0.0150108 0.0349639 0.0393317 +0.0345233 0.0498189 0.0314944 +-0.0153828 0.128676 0.0170423 +-0.0618725 0.160013 -0.0255862 +-0.0525544 0.0504168 0.0256484 +-0.073344 0.0672327 0.000494062 +0.0393875 0.0460438 -0.00485579 +-0.0152754 0.103231 -0.0233341 +-0.0753549 0.104884 0.0361423 +0.0108274 0.0362708 -0.0225637 +0.0342152 0.0862629 0.0407864 +-0.088758 0.143311 0.0121502 +-0.0572353 0.0465198 -0.0043437 +0.0198267 0.035157 0.00555798 +0.0261922 0.0507168 -0.0207207 +0.0268986 0.0357578 0.0211357 +-0.0349846 0.0837189 -0.0236297 +-0.0222119 0.158173 -0.00418672 +0.024391 0.115338 0.0336864 +-0.0200061 0.124102 0.0256765 +-0.069632 0.0719472 -0.0104624 +-0.0322859 0.0792627 -0.0305329 +-0.0506516 0.033429 -0.00887801 +-0.0358626 0.101452 -0.0219425 +0.0293657 0.0447288 -0.00609588 +-0.0662305 0.0339335 0.0109932 +-0.00786973 0.104508 -0.0230207 +-0.0712429 0.177886 -0.0560058 +-0.00159432 0.129182 0.0263815 +-0.0283933 0.0831937 -0.0356194 +0.0443268 0.0511334 0.0322609 +-0.0318469 0.0958266 -0.0236233 +0.0205346 0.0937418 -0.0232686 +-0.012793 0.0813325 -0.0389447 +-0.0235889 0.0983837 -0.0242804 +-0.062496 0.105649 0.040196 +-0.0194646 0.0347564 0.0483645 +-0.0124518 0.038713 0.0303489 +-0.0444408 0.0335855 -0.0133031 +-0.00148369 0.0732377 0.0582942 +-0.0837769 0.153466 0.0110188 +-0.0898767 0.135147 0.0252168 +0.0369605 0.105409 -0.00483089 +-0.0255274 0.113962 0.0353265 +-0.0539587 0.0338764 0.0242313 +-0.0789197 0.104773 0.0326412 +0.0105421 0.118176 -0.0153416 +-0.0256953 0.0385914 0.0331228 +-0.0336328 0.126783 0.00457249 +-0.0470116 0.0710509 0.0409961 +-0.0930389 0.129675 0.0242521 +-0.0464764 0.0861628 0.0446798 +-0.0561893 0.159558 0.00559608 +-0.0091854 0.130144 0.00917512 +-0.0798951 0.0840617 -0.00859358 +-0.0336645 0.0339705 0.0230467 +0.00935764 0.0539048 -0.0300706 +-0.0831098 0.0777207 0.0215128 +-0.0470469 0.155045 0.00906939 +-0.0135887 0.169514 -0.0234669 +0.0418337 0.0395215 0.00781447 +-0.0276517 0.15535 -0.00385533 +-0.0201931 0.18164 -0.0152257 +-0.0335046 0.177862 -0.00863199 +0.0345014 0.0513521 0.0321623 +-0.0804527 0.143139 -0.00181198 +-0.0816965 0.144555 0.000152955 +0.0607459 0.0623413 0.0091502 +-0.0779458 0.175786 -0.0452228 +-0.0577187 0.146758 0.0323537 +-0.0403111 0.127303 0.0168527 +0.0204871 0.0934146 0.0476927 +0.00588424 0.100173 -0.0220733 +-0.00768539 0.0584014 -0.0338334 +-0.0447099 0.069553 -0.0165571 +-0.0287391 0.0620637 -0.0274208 +0.0157473 0.0947545 -0.0243195 +-0.063441 0.156071 0.0225051 +0.00824182 0.0753956 -0.0338579 +0.00561249 0.0927088 -0.0322048 +-0.0475077 0.0732702 0.0416223 +0.0145005 0.11127 0.0394252 +0.00450182 0.0413372 0.0458645 +0.00631667 0.061015 -0.0309472 +-0.0794763 0.0926775 0.0349659 +-0.0718543 0.111061 0.0453722 +-0.0891984 0.129697 0.0434765 +0.0151955 0.129241 0.0138359 +0.0236821 0.0824052 -0.0254011 +-0.0015019 0.110031 0.0427805 +-0.0215043 0.109928 0.0403615 +-0.0939826 0.118759 0.0192971 +-0.0624131 0.11535 0.0394932 +-0.0833865 0.140392 0.00124854 +-0.0465624 0.124393 -0.00950278 +-0.0146513 0.0496822 -0.0311895 +-0.0641648 0.15616 0.0149932 +-0.0729217 0.126742 -0.00866826 +-0.0253625 0.126177 0.010523 +0.0277777 0.108556 -0.0130095 +-0.0788017 0.0846357 0.0359502 +-0.0247742 0.180145 -0.00956802 +0.0188129 0.101666 -0.0216414 +0.00516264 0.131576 0.00874185 +-0.0633822 0.164679 -0.0305938 +-0.0375944 0.116238 -0.0149818 +0.0194959 0.111012 -0.0156283 +-0.0342918 0.0780403 -0.0245107 +-0.0861846 0.083225 0.00647736 +-0.0161451 0.166792 -0.0199866 +-0.0872007 0.147399 0.00826035 +0.0567195 0.0508531 0.00818949 +-0.0594966 0.100149 0.0427407 +-0.0584967 0.0761953 0.0427061 +-0.0218317 0.124906 0.0220793 +-0.00826101 0.0384472 0.0115633 +-0.0383343 0.121902 -0.0109317 +-0.0521665 0.136903 -0.000627156 +-0.0215605 0.0383186 -0.00194746 +0.0481264 0.060275 -0.00442661 +0.0154998 0.108504 0.0406925 +-0.0729927 0.08468 0.0400334 +0.0156625 0.0631375 0.0506866 +-0.0244911 0.101622 0.043846 +-0.0464946 0.131544 0.00524728 +-0.0496757 0.0678792 -0.0135965 +0.0429479 0.0845778 -0.00579145 +-0.0889655 0.0969901 0.0204055 +-0.0641121 0.152654 -0.0038572 +0.0409571 0.0971716 0.0271682 +-0.0171621 0.0382418 0.0171791 +0.00646008 0.118492 -0.0156628 +0.0328247 0.054955 0.0367483 +-0.0843958 0.13208 -0.00165487 +-0.0521768 0.0517998 0.0286453 +0.0415397 0.0690275 -0.00677 +-0.00193982 0.12966 0.0247961 +-0.0686037 0.157344 -0.00409918 +-0.0332546 0.12417 0.0223928 +-0.0762473 0.0920177 -0.013581 +0.0392491 0.0672477 0.0338308 +-0.0841314 0.0776758 0.00449933 +-0.0638136 0.0680952 0.0346563 +-0.00579523 0.10109 0.0444886 +-0.0717812 0.166615 -0.0459981 +-0.0474379 0.0355948 -0.0152688 +0.0581028 0.0523658 0.0121806 +-0.0787218 0.0967552 0.0354897 +-0.0561139 0.139571 -0.00370722 +-0.0605064 0.0394509 -0.00845033 +-0.0890965 0.111935 0.0113594 +-0.0579064 0.158452 0.00407429 +0.0204977 0.0920241 0.0479175 +-0.0224928 0.0988548 0.044702 +-0.0289733 0.124361 0.000543811 +-0.00750575 0.0457415 0.0474579 +0.043354 0.053395 -0.00666154 +0.0230359 0.124766 0.00534006 +-0.0773785 0.174262 -0.0420678 +-0.0273153 0.0387018 0.0344821 +-2.85469e-05 0.0391507 -0.00580542 +-0.0653748 0.149517 -0.0319115 +-0.0386792 0.0336259 0.00249375 +-0.0655034 0.106997 0.0388261 +0.0203192 0.0679349 -0.0283363 +0.0395784 0.104495 -0.000545476 +-0.0239953 0.114912 -0.0156465 +-0.0660228 0.160133 -0.0132914 +0.0397718 0.0940445 0.031303 +-0.0719497 0.132579 -0.00806719 +-0.0634812 0.0760895 0.041143 +-0.0484925 0.14723 -0.00252533 +0.054748 0.0690996 0.0027667 +-0.0723713 0.156038 0.0237254 +0.034267 0.0613198 -0.014809 +-0.0483876 0.0348751 0.0437589 +-0.05979 0.0839541 -0.0202843 +0.0501248 0.0723145 0.00745971 +0.0347025 0.105449 -0.00966587 +-0.0352566 0.0382472 -0.0299775 +0.0470963 0.045623 0.0254581 +-0.0855435 0.108961 0.00733555 +-0.0206804 0.112216 -0.0188434 +0.00523056 0.0796312 -0.0340387 +-0.0465619 0.047561 -0.00986957 +-0.033587 0.0348608 0.0452447 +-0.0202523 0.125914 0.000840735 +-0.0501104 0.138566 0.0193811 +-0.0264363 0.125919 0.0130719 +-0.0691022 0.159548 -0.0519447 +-0.0245412 0.057448 -0.0303989 +-0.046121 0.0336712 -0.000864342 +-0.0742841 0.155582 0.00848891 +-0.0298186 0.154044 -0.00457012 +0.0302323 0.0969553 -0.0166472 +0.0266877 0.104744 0.0387392 +-0.0843417 0.109004 0.0243603 +-0.0496377 0.143234 0.0104059 +0.0174929 0.0962345 0.0475335 +0.0450677 0.0917906 0.015163 +0.0374841 0.076757 0.0366434 +-0.0215406 0.0711033 0.0513847 +-0.0282153 0.125116 0.00364014 +-0.0284773 0.177212 -0.00607735 +-0.0204956 0.109916 0.0405701 +-0.0784664 0.0703272 0.00666705 +-0.0031698 0.0384355 0.0180459 +-0.0655548 0.153788 -0.00146085 +-0.0229763 0.0945367 -0.0302901 +-0.0192339 0.166857 -0.012207 +-0.0866345 0.094046 0.00237751 +-0.0759405 0.177963 -0.0471435 +0.0442559 0.0973532 0.00916034 +-0.071904 0.103673 -0.0126696 +-0.00666902 0.0541115 -0.0328784 +0.0144947 0.105783 0.0434399 +-0.029312 0.0383797 -0.00726542 +0.0562076 0.0536042 0.00319408 +-0.0829319 0.114342 0.0473556 +-0.069928 0.113662 -0.00916203 +-0.080837 0.120705 -0.00484118 +-0.0680148 0.177312 -0.0499759 +-0.077886 0.0811556 -0.0096326 +0.0350121 0.104701 0.0314746 +-0.0571796 0.0582032 0.0181974 +-0.0932449 0.120197 0.0372886 +-0.0536204 0.0647024 -0.00963527 +0.00250481 0.0870342 0.0569864 +-0.0802055 0.0754813 0.024867 +-0.062996 0.0444935 0.0306768 +-0.00402267 0.0975528 0.0526596 +-0.0883984 0.103684 0.0133796 +-0.0637361 0.133925 0.0394224 +-0.00469624 0.0613427 -0.0349676 +-0.0570417 0.148685 -0.00168484 +-0.062221 0.119852 0.0434664 +-0.0361997 0.0483313 -0.0162949 +0.00950265 0.0517655 0.0513753 +0.00822226 0.0366869 -0.011267 +-0.0383571 0.0360437 0.0112202 +-0.0890914 0.0956431 0.0204208 +-0.0256081 0.0408536 -0.0292407 +0.0374062 0.0397236 -0.000139169 +-0.094388 0.124185 0.0232804 +-0.0615536 0.151288 -0.000477545 +-0.0674057 0.140585 -0.00814985 +-0.0913588 0.113353 0.0143394 +-0.0162447 0.115598 -0.0164334 +-0.00395415 0.0388026 0.0284096 +0.0272466 0.0774691 -0.0233342 +0.0337889 0.112917 0.0264745 +-0.0342171 0.0808501 -0.0245506 +0.0395831 0.0953666 0.0310696 +0.0424402 0.100042 0.00119598 +0.0588348 0.0704992 0.0161593 +0.0129551 0.034265 -0.00247291 +-0.0884357 0.140552 0.0112052 +-0.0545209 0.0388646 -0.0108239 +-0.00760223 0.0406064 -0.0259713 +-0.0671149 0.0634665 0.0239226 +-0.0571873 0.13241 -0.00599886 +-0.0652367 0.0347413 0.0281307 +-0.0733817 0.154066 -0.0309045 +-0.00253313 0.0428829 0.047136 +-0.0768102 0.145866 -0.00487051 +-0.0675702 0.166262 -0.0225175 +-0.0425031 0.0662262 0.0410651 +-0.0579829 0.147131 -0.0018633 +0.0230336 0.049071 0.0400904 +-0.0829949 0.0843947 0.0302754 +-0.0147977 0.0813547 -0.0393324 +-0.015272 0.0385359 0.0263224 +-0.0764401 0.163184 -0.0180705 +-0.00855639 0.121127 -0.0123669 +-0.018702 0.0459339 0.0516744 +-0.0274925 0.0577126 -0.0264141 +-0.0571934 0.155255 0.0174937 +-0.0620081 0.0469936 0.00367346 +-0.010275 0.170544 -0.0261793 +0.0537831 0.0477401 0.0192041 +0.0402375 0.104169 0.000177419 +0.0289937 0.118368 -0.00105099 +-0.039498 0.118035 0.0314 +0.0367284 0.0875226 0.0373878 +0.0431893 0.0764104 0.0272109 +0.0404723 0.0752779 0.0321515 +-0.071418 0.176406 -0.0454588 +-0.0570823 0.138706 -0.0047975 +-0.0666306 0.0689692 -0.00898899 +-0.0691773 0.0628504 0.020491 +0.0144923 0.104443 0.0448169 +-0.0227823 0.0798633 -0.0386035 +0.0278587 0.0463325 0.0365003 +-0.00850193 0.0391005 0.0344133 +-0.0677578 0.16996 -0.0326164 +-0.0367265 0.0725274 -0.0180009 +-0.0681226 0.115765 0.0506532 +-0.0824105 0.154634 0.0158747 +-0.0197211 0.109971 -0.0204733 +-0.0626214 0.149057 -0.0155813 +-0.0414792 0.111213 0.0366505 +0.0570161 0.0508675 0.0161892 +-0.0934473 0.129632 0.0182372 +-0.0463999 0.150559 -0.00488163 +-0.0823822 0.144566 0.00117046 +-0.0310391 0.0892178 -0.0256627 +-0.065854 0.172894 -0.0463248 +-0.069909 0.0416997 0.00317022 +0.0312116 0.11742 0.0240751 +-0.0118175 0.0387383 -0.00407256 +0.01303 0.126665 0.0287751 +-0.0440446 0.129866 0.0080667 +-0.0797747 0.106127 0.0313842 +0.00451933 0.0800063 0.0560543 +0.00739517 0.116252 -0.017256 +0.0277812 0.063284 0.0436054 +-0.0569949 0.126695 -0.00683103 +-0.00960244 0.0420101 -0.025949 +0.0084074 0.123136 -0.0106652 +-0.0428042 0.0338676 0.0265755 +-0.0325056 0.0760815 0.0412743 +-0.0386562 0.0591953 -0.0114762 +-0.0405007 0.0690879 0.0417151 +0.0419622 0.102841 0.00417469 +-0.047644 0.121343 -0.0122933 +-0.0729009 0.105047 -0.011511 +-0.0927931 0.126937 0.0282668 +-0.0656106 0.156261 -0.00734027 +-0.0802248 0.0719997 0.00554401 +-0.00476651 0.0755803 -0.0368945 +-0.0779912 0.139819 -0.00526751 +-0.0864372 0.14049 0.00618869 +-0.0427881 0.157985 0.00470835 +-0.0697618 0.112838 0.0482345 +-0.0800017 0.0786467 -0.00556567 +-0.00794001 0.0994214 0.049751 +0.00252738 0.0716721 0.0561852 +0.0244581 0.0366925 -0.000851561 +-0.0618581 0.153131 0.03333 +-0.0730605 0.177343 -0.046073 +-0.0670133 0.0791411 0.0413099 +-0.00657967 0.0361819 -0.0249969 +0.0332241 0.115988 0.0034015 +-0.0314758 0.118803 -0.0116777 +-0.0714107 0.144356 -0.0151846 +-0.0414986 0.120686 0.028403 +0.0126257 0.034994 0.0315996 +-0.0344792 0.0382691 -0.00267158 +-0.0696814 0.0354769 0.0114289 +-0.0454423 0.0336713 -0.00255197 +-0.0611633 0.0698433 0.0372322 +-0.0520495 0.147795 0.0183962 +0.0467993 0.0745196 0.0137565 +-0.00850445 0.0619527 0.0559735 +-0.0157643 0.0353272 -0.0263783 +-0.0915821 0.144732 0.0201581 +-0.0274038 0.123285 0.0215594 +-0.0667152 0.0419014 -0.00231002 +-0.0408646 0.104225 -0.0205494 +-0.092402 0.129661 0.0272343 +-0.0876501 0.0954829 0.0054069 +-0.063731 0.0751942 -0.0171769 +-0.016949 0.0909918 -0.0366612 +0.0216857 0.0374896 0.0372608 +-0.0733019 0.081934 0.0390113 +-0.033579 0.117839 -0.0126505 +0.00291054 0.0385481 0.0460492 +-0.0648688 0.0938916 -0.0183701 +-0.0931568 0.120191 0.0362904 +-0.0105693 0.129741 0.0187791 +-0.0330922 0.108613 -0.0189923 +-0.0867528 0.121192 -0.00171893 +-0.0398856 0.0351398 0.0419144 +-0.0500753 0.0599861 0.0335137 +-0.0362769 0.163827 -0.00170672 +-0.0161498 0.040504 0.0518582 +0.0390213 0.100628 0.0284944 +-0.0525203 0.0581461 0.0261597 +-0.06389 0.0397139 0.0154457 +-0.0114781 0.0589986 0.0537512 +-0.00335674 0.0424141 0.0475525 +-0.0200738 0.0389483 0.0357554 +0.0112326 0.0738116 -0.0315294 +0.0128141 0.0504969 0.0481838 +-0.0548971 0.104115 -0.019193 +-0.0887169 0.125354 0.00227396 +-0.0712974 0.0669397 0.02531 +-0.0542529 0.0545999 -0.00539104 +-0.0538048 0.159768 -0.00183632 +0.0171004 0.120495 -0.00987579 +0.00927611 0.0667424 -0.0314011 +-0.0928802 0.118867 0.0402859 +-0.0167191 0.0613704 -0.0359554 +-0.0515886 0.0460739 0.0176829 +-0.0182635 0.180096 -0.0244849 +-0.0014996 0.0938866 0.0553603 +-0.0518826 0.071407 0.0396894 +-0.0529375 0.0335557 0.00508499 +-0.0597956 0.0925385 -0.0196216 +-0.0869937 0.104951 0.00838372 +0.0481666 0.0731681 0.01124 +-0.00827202 0.0394277 0.049182 +-0.0607911 0.0810335 -0.0194373 +0.000667625 0.0985049 0.0513232 +0.00310867 0.129093 0.0266332 +0.0296013 0.119582 0.02204 +-0.0285282 0.0378067 0.0260568 +-0.0367133 0.0353138 0.0122122 +-0.0468392 0.132859 0.0202702 +-0.0139293 0.126622 0.0263262 +-0.0191687 0.171226 -0.0215143 +0.0205957 0.0394417 0.0417168 +-0.0692562 0.143958 0.0438704 +-0.037992 0.128312 0.00883318 +-0.0237829 0.0770195 -0.0382449 +-0.0940603 0.120098 0.0152926 +-0.0545976 0.139948 -0.00193829 +-0.0869674 0.103645 0.0213508 +-0.0689616 0.177928 -0.0580053 +-0.079103 0.0731629 0.0235749 +-0.0563149 0.0534289 -0.00138708 +-0.00430179 0.125159 -0.00873129 +-0.0217957 0.119089 -0.0120655 +0.047344 0.0721054 0.0183678 +-0.0206715 0.0524183 -0.0304469 +-0.0292161 0.178518 -0.014988 +-0.0567221 0.0575063 0.0096837 +0.00796175 0.131494 0.0140347 +-0.0163209 0.175704 -0.0185048 +0.0207575 0.0645289 0.0475184 +-0.0365005 0.0676756 0.0415398 +-0.0504985 0.079101 0.0439987 +0.0338763 0.0978118 -0.0135516 +-0.00887371 0.0385959 0.0022117 +-0.0644851 0.0755505 0.0404189 +-0.0877008 0.0923103 0.0248018 +-0.082219 0.074838 0.0095308 +-0.0554964 0.111163 0.0367062 +0.0260064 0.0465031 -0.0156607 +-0.0633419 0.155193 -0.0376165 +-0.0732519 0.0648877 0.00719031 +-0.0769992 0.155545 -0.0179052 +0.0377103 0.0955073 -0.00984226 +0.0174667 0.122816 0.0304302 +-0.0366198 0.0505806 -0.010756 +-0.0144968 0.0472352 0.0484474 +0.00848126 0.0936832 0.0524446 +0.0197906 0.106497 -0.0168156 +-0.0930778 0.121531 0.0352811 +-0.0613674 0.169388 -0.0565896 +-0.0301276 0.038694 -0.0132786 +-0.0662928 0.044787 0.00771957 +-0.0195138 0.0448322 0.0525308 +-0.0886025 0.0887878 0.00646717 +0.0380432 0.109702 0.0166041 +-0.024753 0.0755695 -0.0376923 +-0.089639 0.0983559 0.0164014 +0.0373474 0.083464 0.036489 +0.0200866 0.0429332 -0.0206714 +-0.0362408 0.12776 0.00652715 +-0.0114267 0.182822 -0.0276369 +0.033977 0.115595 0.0137221 +0.016644 0.0381609 -0.019755 +-0.0160134 0.0959893 0.0521651 +-0.0194344 0.115555 -0.0163687 +0.00996296 0.0988804 -0.0226985 +0.0207021 0.0348049 0.000449352 +-0.0655859 0.0333717 0.000880867 +-0.0387964 0.0870429 -0.0222174 +-0.0365713 0.0483594 -0.015218 +0.0310154 0.110075 0.0327245 +-0.0376939 0.0665912 -0.0149459 +0.0401046 0.0466866 0.0313873 +-0.0110827 0.102149 -0.0241692 +0.00841559 0.0375405 -0.0234702 +0.0448731 0.0945767 0.0111579 +0.0145335 0.034759 0.0322003 +-0.059392 0.149673 0.0353015 +0.000291607 0.0641338 -0.034343 +0.00429568 0.0640516 -0.0331969 +0.0450422 0.0931924 0.0131619 +-0.00448954 0.122402 0.0358368 +-0.0326251 0.166779 -0.00520273 +-0.0566266 0.157159 0.00899778 +-0.0131915 0.184654 -0.0268832 +0.0372616 0.0915229 0.0364203 +0.0164447 0.0548852 0.0482217 +-0.0124867 0.11689 0.0385307 +0.00769138 0.039029 0.0323953 +-0.0150057 0.127967 0.0215456 +-0.0860589 0.113009 0.00328149 +-0.0718647 0.175275 -0.0427173 +0.000497507 0.112823 0.0420607 +-0.0832204 0.140695 0.0442806 +-0.0316065 0.039499 -0.0303181 +-0.0689448 0.129685 -0.00899835 +-0.020775 0.0742803 -0.0390259 +-0.0727533 0.0995199 0.0393322 +0.0032483 0.071196 -0.0343078 +-0.0400491 0.154783 -0.00892819 +-0.0345081 0.0832025 0.0425625 +-0.0522702 0.141391 0.00017327 +0.0278273 0.0795375 0.0455649 +0.0269552 0.122658 0.0110745 +0.0348501 0.112087 -0.000408122 +-0.0694924 0.0846972 0.0421957 +-0.0861949 0.139089 0.00320204 +-0.0823568 0.0802033 -0.00152209 +0.00894636 0.0644445 0.055029 +0.0266313 0.0563972 -0.0207832 +0.023933 0.0390696 0.0352942 +-0.0656041 0.136814 0.0420793 +0.0407616 0.105622 0.0111617 +0.058143 0.0551653 0.0211996 +-0.0138904 0.0897489 -0.0373664 +0.0117209 0.130528 0.015412 +-0.0181782 0.126773 0.00187925 +0.039239 0.0589589 -0.00512401 +0.0118091 0.0576645 0.0520801 +0.0101538 0.113447 -0.018237 +0.00107085 0.0391982 -0.0112505 +-0.0726176 0.0747594 -0.0108396 +-0.0504976 0.104261 0.040368 +-0.06047 0.0776106 0.0424994 +-0.0726162 0.166612 -0.0440006 +-0.0345099 0.109779 0.0372255 +0.0371511 0.110987 0.0177157 +-0.0594963 0.1084 0.0386802 +-0.0218558 0.120004 -0.0110164 +-0.0726436 0.159626 -0.0369279 +0.0162217 0.120841 -0.0102336 +0.0462172 0.0729792 0.0194263 +0.0503974 0.0595708 0.0303584 +-0.069034 0.139725 0.045939 +0.0222487 0.0359069 0.0273161 +-0.083623 0.0857135 0.0294569 +-0.0427492 0.0421438 -0.0223063 +-0.0635342 0.161573 -0.0210278 +-0.0632778 0.158345 -0.0436013 +0.049468 0.0445737 0.00523787 +-0.00949755 0.0856659 0.0574293 +0.0137231 0.129888 0.00901711 +-0.0849311 0.0980032 -0.00158096 +0.0094116 0.0360543 -0.0227822 +0.029005 0.115546 0.0303821 +-0.0136476 0.0481469 -0.0303471 +0.0203578 0.0985304 -0.0223097 +0.0386883 0.0767039 0.0348633 +0.0505119 0.0665023 0.0275359 +-0.0236064 0.038163 0.0249493 +-0.0662075 0.060375 0.00901189 +-0.0309847 0.0381919 0.0323901 +-0.0577888 0.0439091 -0.00660137 +0.0319539 0.0795563 0.0427459 +-0.0888256 0.100978 0.0104077 +-0.0149675 0.0986909 -0.0245721 +0.0080932 0.126458 -0.00628099 +-0.0629819 0.128219 -0.0083429 +0.00592947 0.0982847 -0.0240623 +-0.0791963 0.120405 0.0507691 +0.0385114 0.0583288 0.0314228 +0.0327231 0.116168 0.00178038 +-0.0838537 0.110728 0.0339922 +-0.0559583 0.0478125 -0.00439058 +-0.0864154 0.152983 0.0204471 +-0.0846489 0.0778245 0.0165124 +-0.0244888 0.120706 0.0294035 +-0.0565129 0.051223 0.00779351 +-0.00649552 0.111418 0.0421995 +-0.0400289 0.0336199 0.00584373 +0.00964377 0.120482 -0.0138306 +-0.0819198 0.126566 -0.00507678 +-0.023502 0.180157 -0.0112302 +-0.033578 0.0448331 0.0458046 +-0.0771053 0.177652 -0.0476237 +-0.0244946 0.0357757 0.0532784 +0.044574 0.0903504 0.0211613 +0.0317623 0.0938577 -0.0173357 +-0.0767292 0.0860417 0.0380634 +-0.0291365 0.165225 -0.016186 +-0.0558064 0.0562012 0.00862658 +-0.0197239 0.0612902 -0.0351879 +-0.0624763 0.163084 -0.0515885 +-0.00157869 0.0347285 -0.0237137 +0.0250862 0.0741055 0.0468243 +-0.00657564 0.0346831 -0.0243352 +-0.0927326 0.12419 0.0292678 +-0.0642565 0.0418897 0.0384072 +0.0074848 0.0976824 0.0494394 +-0.0324803 0.0436623 0.0489836 +0.0309993 0.0686673 0.04128 +-0.00959045 0.0337105 -0.0233226 +-0.0692347 0.176505 -0.0570351 +-0.0524975 0.111152 0.036921 +0.0434926 0.056984 0.0319757 +-0.0448698 0.104232 -0.0209188 +-0.0689139 0.148999 -0.0367601 +-0.0366298 0.0344715 0.0361774 +-0.0772403 0.0846603 0.0372078 +-0.0866727 0.139248 0.0421058 +-0.0692038 0.156713 -0.0519425 +-0.0286406 0.154979 -0.0065778 +-0.0516452 0.119776 0.0340339 +-0.0604002 0.0591276 0.0185111 +-0.0789005 0.172846 -0.0440952 +-0.0733588 0.0659821 0.00263497 +-0.0644533 0.0351399 0.0400818 +0.0349985 0.0619413 0.0382049 +-0.0116935 0.0584778 -0.0346471 +0.0397873 0.104095 -0.000789682 +0.0261507 0.0923065 -0.0217116 +-0.0643301 0.156694 -0.0446094 +0.0312874 0.108108 -0.0105276 +-0.0718754 0.119424 -0.00835095 +-0.0897483 0.0929448 0.0154361 +-0.0322408 0.125589 0.00213325 +0.0193474 0.0551603 -0.0276297 +-0.0355381 0.0335618 -0.0245193 +-0.0323633 0.175433 -0.0143069 +0.0591153 0.0705615 0.014025 +-0.0685156 0.168032 -0.0539935 +-0.0408127 0.127672 -0.0010356 +-0.070932 0.129672 -0.00889239 +-0.0315034 0.0717826 0.0402663 +0.0139874 0.0924572 -0.0278842 +-0.00310937 0.0390986 -0.00637767 +-0.0315484 0.0749387 -0.030532 +-0.0658202 0.0597996 0.0132017 +-0.074125 0.079542 -0.012586 +-0.042758 0.0336059 0.00168497 +-0.0376274 0.0534153 -0.0106276 +-0.0609006 0.106856 -0.0171292 +-0.0465015 0.112315 -0.0168133 +-0.00832405 0.129364 0.00227931 +0.000993844 0.0989182 -0.0247915 +-0.092775 0.128304 0.0272531 +-0.0024916 0.073257 0.0585379 +-0.0354714 0.0959602 0.0437897 +-0.0798628 0.122191 -0.00554615 +-0.0379836 0.153062 -0.00765575 +-0.0574689 0.0413481 0.0461934 +-0.0681352 0.166058 -0.0212868 +-0.0655788 0.037063 0.0157921 +-0.0104996 0.03868 -0.00189881 +0.00192546 0.0390395 0.0275923 +-0.0598545 0.0467827 -0.000327155 +-0.0510269 0.136724 0.0245519 +-0.0626706 0.0343644 0.032487 +0.0368248 0.11128 0.0190303 +0.047871 0.0733255 0.0156276 +-0.0291332 0.059286 -0.0234112 +-0.0554108 0.0344947 0.0391385 +-0.0892997 0.0956389 0.0174174 +-0.0880049 0.11182 0.00834875 +0.0309816 0.102484 -0.0145328 +0.0183118 0.0665429 -0.0287115 +0.00448658 0.111391 0.0416751 +-0.0902127 0.122664 0.0052855 +-0.0900898 0.119956 0.00430245 +-0.026505 0.174198 -0.0103819 +-0.0214492 0.0963545 -0.0261739 +0.0574071 0.0691343 0.00477569 +-0.0755392 0.154957 0.000803149 +-0.0205078 0.049871 0.046386 +-0.0302748 0.116055 -0.0148216 +0.0522643 0.0732287 0.00987093 +-0.0353184 0.153664 -0.00782609 +-0.0468563 0.101377 -0.0215448 +0.0252483 0.0713214 0.0452679 +-0.01624 0.0963836 -0.0301721 +-0.0374901 0.0505918 0.0391881 +-0.000727236 0.069749 -0.034387 +-0.0295801 0.0368886 0.052851 +0.0174262 0.0350846 0.00327627 +-0.0408044 0.0884947 -0.0224789 +-0.0540496 0.0546601 0.0106814 +-0.0841802 0.136658 0.046769 +0.0265654 0.0388814 0.0291555 +-0.0365515 0.115187 -0.0158874 +-0.0746646 0.0981736 0.0384691 +-0.0461647 0.162128 -0.00806097 +-0.0838755 0.106118 0.000396239 +-0.0634664 0.0345901 0.0373297 +-0.0487026 0.0708482 -0.0151225 +-0.0490488 0.150196 -0.0040443 +-0.0454995 0.107082 0.0401134 +0.015502 0.109895 0.0399577 +0.0339767 0.0796167 -0.0178174 +-0.064903 0.110966 -0.0133006 +-0.0884279 0.0874564 0.00647862 +0.0303366 0.0352283 0.0150252 +-0.0476647 0.15359 0.00991943 +0.0491492 0.0460297 0.00132033 +0.0571336 0.0721807 0.0116675 +0.0423629 0.0398964 0.0150374 +-0.0075036 0.12108 0.0363047 +-0.0304017 0.0791045 -0.033577 +-0.0707511 0.0654954 0.0231537 +-0.0344941 0.171246 -0.000779029 +-0.0516393 0.0618882 -0.0103104 +0.0364959 0.064355 -0.0127735 +0.0258636 0.0344283 0.00929921 +-0.06094 0.0410414 0.0167056 +0.0388283 0.102661 -0.00481845 +0.00951185 0.0560842 0.0527429 +0.0250009 0.0629104 -0.0235842 +-0.0883814 0.100948 0.00841627 +-0.0896675 0.150196 0.0231327 +-0.0502775 0.0487457 0.0176637 +-0.0574379 0.0576833 0.0026039 +-0.0889127 0.145822 0.0300758 +0.00105802 0.0387062 0.0241019 +0.0432951 0.0987146 0.0161577 +-0.00981592 0.123797 -0.00918874 +-0.0235467 0.119499 0.0316537 +-0.0203743 0.127028 0.00506457 +-0.0546314 0.138445 -0.00241154 +0.0144977 0.11819 0.0360011 +-0.0468871 0.150669 0.00925072 +0.00310943 0.110155 -0.0202398 +-0.0315082 0.0817114 0.0416031 +-0.0361907 0.169669 -0.0137878 +-0.0266475 0.0904555 0.0474235 +0.00393808 0.131671 0.0154244 +-0.0594984 0.109765 0.0377884 +-0.0632488 0.167828 -0.0435907 +0.02054 0.116646 0.0351499 +0.046015 0.0862238 0.00817489 +-0.0472066 0.033531 -0.00644781 +-0.0382901 0.126893 -0.00216373 +0.0358746 0.0755562 -0.0137901 +-0.00915886 0.0385694 0.027547 +-0.083022 0.132397 -0.0026267 +-0.0665414 0.155108 -0.00331096 +-0.0344162 0.168264 -0.00253059 +-0.0891077 0.101031 0.0163881 +-0.0165765 0.119912 -0.0109781 +0.00442197 0.11861 -0.0157775 +-0.0234514 0.0892984 0.0527307 +0.0565327 0.0523952 0.0217798 +-0.0515006 0.111173 0.0369493 +-0.0218128 0.183092 -0.0122978 +0.0044132 0.0376001 -0.0242202 +-0.0654801 0.0675388 0.0330326 +-0.010497 0.0717087 0.0563199 +-0.065424 0.0399796 0.0326661 +-0.0228869 0.180156 -0.0121058 +0.0203379 0.125091 8.19329e-05 +-0.0802772 0.089954 0.0344521 +-0.0772906 0.165906 -0.0257637 +-0.012412 0.0382658 0.0163183 +0.0102284 0.0616887 0.0533551 +-0.00987882 0.105925 -0.0227673 +-0.00348977 0.122389 0.0359468 +-0.0759061 0.0675035 0.00967604 +-0.0414986 0.0874028 0.042497 +-0.0605969 0.06056 0.0225173 +0.0395569 0.0702481 -0.0107925 +-0.0329324 0.0638892 -0.016427 +-0.000943594 0.0381622 0.0205587 +-0.0338755 0.107095 -0.0200162 +-0.0125023 0.0486789 0.0487656 +0.0274856 0.0400248 0.0301572 +-0.0008153 0.10869 -0.0211159 +0.0343096 0.0419726 0.0279684 +-0.0247603 0.0865587 0.0527086 +-0.00553736 0.113796 -0.0185731 +-0.021633 0.035044 -0.0280533 +0.00828872 0.130472 0.0213052 +-0.0242184 0.0593353 0.0417104 +0.0288386 0.111536 -0.010211 +-0.0581339 0.0334069 -0.00670381 +0.037704 0.0574555 -0.00668675 +-0.0710158 0.13691 0.0483444 +-0.0305078 0.112529 0.0355647 +0.0343502 0.114842 0.0181324 +-0.0485971 0.0359097 0.00925535 +-0.0288479 0.0578621 -0.0233922 +-0.051497 0.0890197 0.045238 +0.0121456 0.0347039 0.0353715 +-0.0716902 0.155937 0.00211062 +-0.0790692 0.0804499 0.033529 +0.0545445 0.0589886 -0.00181806 +0.0529955 0.0716182 0.0219676 +-0.056511 0.121265 0.0393235 +0.032607 0.0527076 -0.00976892 +-0.0376644 0.0335909 0.0081569 +-0.0936994 0.128298 0.0232525 +-0.0809806 0.0720629 0.0115411 +-0.0239408 0.0886576 -0.0363455 +-0.0859344 0.107632 0.00736881 +-0.0277915 0.0782183 -0.0359607 +-0.0571511 0.0394305 0.0468685 +-0.0839381 0.0791399 0.0214982 +-0.0234217 0.0359155 0.0533704 +-0.0739011 0.106421 -0.010241 +-0.0567145 0.0334976 0.000765085 +-0.0241329 0.157302 -0.00905689 +-0.0128819 0.126866 -0.00238505 +-0.0250553 0.0707727 0.0450037 +-0.0444963 0.119293 0.0294103 +-0.0463222 0.0411097 -0.0132713 +-0.0451547 0.0437693 -0.0122411 +0.0475648 0.0553802 0.031711 +-0.0494965 0.11266 -0.0171746 +0.00314926 0.122256 -0.0116623 +-0.089161 0.137877 0.0251937 +-0.0171561 0.0387671 0.0311342 +-0.0659181 0.10388 -0.0158661 +-0.062107 0.163118 -0.0365927 +0.0444569 0.0444867 0.0259758 +-0.0206484 0.0464719 -0.0278809 +-0.0668387 0.144945 -0.0185544 +-0.0574928 0.102919 0.0421703 +-0.0655518 0.166572 -0.0275081 +-0.0339393 0.126307 0.017694 +-0.0176989 0.0554882 -0.03328 +0.012239 0.0794574 -0.0314827 +-0.0344963 0.094609 0.0443801 +0.0228685 0.123786 0.00100726 +-0.0920259 0.132307 0.0132318 +-0.0713267 0.169665 -0.0267525 +-0.081588 0.0788215 -0.00249997 +-0.0755712 0.102178 0.0364401 +-0.0482055 0.0335674 -0.00667883 +-0.0295069 0.109802 0.0378356 +-0.0819634 0.103331 0.0300688 +-0.0766364 0.0788383 -0.00918256 +-0.0472353 0.12392 0.0280317 +-0.0424858 0.064826 0.0410217 +-0.00749383 0.112788 0.0415528 +-0.0321607 0.174124 -0.015122 +-0.0148084 0.124344 -0.00565133 +-0.0630295 0.126909 0.044075 +-0.0122771 0.129643 0.0167063 +-0.0137469 0.0714346 -0.0382786 +0.0253964 0.0981715 0.0439168 +-0.0105339 0.100499 0.0452584 +-0.0909546 0.139232 0.0191849 +-0.0239226 0.16684 -0.0101968 +-0.00433796 0.0387886 -0.000752538 +0.00920046 0.0879669 -0.0320124 +-0.0404937 0.0662835 0.0416604 +-0.0569887 0.118401 0.0385929 +-0.0715396 0.0362187 -0.000138838 +0.0226226 0.0591926 0.0466634 +-0.0544937 0.112536 0.0358256 +-0.0843481 0.145997 0.00513587 +-0.022811 0.0756351 -0.0385829 +-0.0666897 0.0735998 -0.0145924 +-0.0404977 0.116683 0.0325662 +0.0032744 0.114489 -0.0193505 +0.00148054 0.0413996 0.0463959 +-0.0245078 0.0767611 0.0513331 +-0.0308625 0.101511 -0.0227041 +0.00533966 0.0345787 0.0412861 +-0.0774755 0.170095 -0.0341987 +-0.0650593 0.125632 0.048098 +0.0112751 0.0505364 0.0494832 +-0.0786212 0.0976351 -0.0095679 +-0.0726748 0.0647223 0.00565049 +-0.0350102 0.158094 0.00367693 +0.0175012 0.11539 0.036772 +-0.0205761 0.0350586 0.0512942 +-0.0408828 0.108487 -0.0195205 +-0.0324978 0.0661054 0.0396515 +-0.0860138 0.0845642 0.00148082 +0.00924462 0.0710839 -0.0326657 +-0.0573888 0.0342428 0.0302238 +-0.0809405 0.141759 -0.00181375 +0.0351408 0.0931106 -0.0145377 +0.0391769 0.106978 0.0201683 +-0.0378047 0.0342916 0.0307956 +-0.0614885 0.0932285 0.0449784 +-0.00750736 0.0561433 0.0534652 +0.0317881 0.0564278 0.038783 +-0.0258626 0.0378286 0.0139698 +-0.0515546 0.0445278 -0.00899667 +-0.010869 0.165486 -0.0158779 +-0.0297303 0.109983 -0.0184292 +-0.0469177 0.0346518 0.0071269 +-0.0286016 0.109083 -0.0194963 +-0.0109096 0.172768 -0.0212178 +0.00821291 0.0711477 -0.0331375 +0.00315167 0.10307 -0.0219554 +-0.0472567 0.132959 0.0215876 +-0.0825276 0.142074 0.0435561 +-0.0136058 0.093388 -0.035076 +-0.0179202 0.0385865 -0.0163394 +-0.0641268 0.0405801 0.0396199 +0.0124469 0.129111 0.00141235 +-0.0637038 0.0343279 0.0323025 +0.0354218 0.100763 0.0338403 +0.0121385 0.130422 0.0141392 +0.00281822 0.126541 -0.00629609 +0.000901863 0.122026 -0.0113896 +-0.0702669 0.176516 -0.0559875 +-0.0576072 0.0336162 0.0112663 +0.0129045 0.125515 -0.00527553 +-0.021518 0.115416 0.036565 +-0.01542 0.16691 -0.0137031 +-0.0365035 0.168234 0.000585726 +0.00464616 0.034105 0.00716872 +-0.0319348 0.125225 0.000800634 +-0.0169495 0.0390889 0.0362738 +-0.024481 0.104364 0.0426891 +0.0161036 0.0393372 0.0440174 +-0.0397156 0.127552 0.0155957 +-0.0063009 0.09425 -0.0339062 +-0.00549064 0.104476 0.0440202 +-0.0455034 0.104326 0.041412 +-0.0625466 0.16468 -0.0375945 +-0.0334032 0.0765382 -0.0275106 +-0.0118225 0.0855318 -0.0386599 +0.0100166 0.0833203 0.0549696 +-0.0685481 0.156429 0.0206858 +-0.0705717 0.158164 -0.0459142 +-0.0185161 0.125172 -0.00248935 +-0.0185539 0.095955 -0.0297446 +0.0191428 0.127427 0.0167214 +-0.0145095 0.171282 -0.0176637 +0.0352621 0.0826509 -0.01774 +-0.0526579 0.0504274 0.026653 +0.00237351 0.0465882 -0.0283321 +-0.0854761 0.132564 0.04817 +-0.0868299 0.0846427 0.00348465 +-0.0105903 0.0377043 -0.0258398 +0.00953188 0.0455622 0.0461832 +-0.0662037 0.154495 -0.0505507 +-0.0856221 0.107687 0.0203552 +-0.0858054 0.102155 0.00239755 +-0.0248162 0.126254 0.00926143 +-0.0398081 0.128271 0.00374611 +-0.00949649 0.0546877 0.0525704 +-0.0474662 0.0960033 0.0439936 +-0.0787761 0.1431 -0.00379727 +0.0264606 0.0663192 -0.0226274 +-0.0294891 0.119549 -0.0104626 +-0.0285179 0.0948797 -0.0246293 +-0.0561001 0.14389 0.0312058 +-0.0930288 0.116051 0.018311 +-0.00894653 0.174179 -0.0257648 +-0.0524908 0.113899 0.0349209 +0.0158504 0.0959717 -0.0236278 +-0.0694879 0.0368888 0.0112092 +-0.0802884 0.146109 0.0411929 +-0.0498232 0.0349806 0.0446412 +0.0342731 0.115225 0.0123899 +0.0283978 0.0955434 -0.019149 +-0.0515486 0.141607 0.0193759 +-0.0458573 0.147704 0.00717141 +-0.0735436 0.175947 -0.0433626 +-0.0758292 0.0935231 -0.0136873 +-0.0554898 0.041398 0.0465154 +0.0604856 0.0623173 0.00815473 +0.0135991 0.100782 -0.0226731 +-0.021666 0.16235 -0.015178 +-0.0474866 0.0573572 0.0366835 +-0.0645248 0.154173 -0.00692339 +0.0454055 0.0747572 0.0215389 +-0.0497578 0.0797288 -0.020162 +-0.0463447 0.129406 0.0234768 +0.0153317 0.0580768 -0.0287753 +0.0124861 0.100431 0.0478938 +-0.0288456 0.0986889 -0.0235542 +-0.00949656 0.0471698 0.047803 +-0.0644726 0.165628 -0.0285568 +0.0564615 0.0703554 0.0055259 +-0.0477419 0.0345444 0.0337565 +-0.0415114 0.0520187 0.0393909 +-0.0165872 0.128419 0.0166112 +-0.0649318 0.168832 -0.0387572 +-0.0230309 0.0906523 0.0522978 +-0.0289316 0.0889882 -0.0316153 +-0.0522528 0.0567257 0.0259279 +-0.0113061 0.169739 -0.0249506 +0.0329977 0.0514306 -0.00763543 +-0.0104801 0.120983 0.0360777 +-0.0848294 0.111312 0.0422165 +0.0597675 0.0609389 0.00613027 +-0.0264774 0.0473675 0.0499125 +-0.00223749 0.0939165 -0.0335391 +-0.0188762 0.171241 -0.0152046 +0.0460317 0.0820288 0.0151733 +-0.00015619 0.0389464 0.0272511 +-0.0490964 0.156122 -0.00621407 +0.0240569 0.111353 0.0367066 +-0.0427705 0.0826571 -0.0207663 +-0.0844768 0.0856095 0.0274708 +-0.0120306 0.174239 -0.0210892 +-0.00550834 0.0689154 0.0563731 +0.0289606 0.0679277 -0.0207366 +-0.0308933 0.12367 0.0217821 +-0.00650569 0.0675101 0.0559953 +-0.0789661 0.0859916 0.0360799 +-0.0291346 0.177171 -0.00534178 +-0.0560039 0.140764 -0.00299974 +-0.0584999 0.107052 0.0397144 +0.00834583 0.0539265 -0.0302958 +-0.0169173 0.16018 -0.0117745 +-0.0698587 0.0680767 -0.00467294 +0.00525002 0.0740223 -0.0345195 +0.0110199 0.0860342 0.0546992 +0.0173361 0.0608154 -0.0277985 +0.0111302 0.107269 -0.019511 +-0.021494 0.10578 0.0424616 +0.0436775 0.0859385 0.0262014 +-0.0587477 0.0767588 -0.0188591 +0.0107799 0.0548821 0.052327 +0.0185294 0.0358466 0.0392699 +-0.0859998 0.135257 0.0457789 +-0.0767885 0.154209 -0.0148974 +-0.0613392 0.0587193 0.00967832 +-0.0712669 0.0381904 0.00872646 +0.00351715 0.0561463 0.0534882 +-0.0427983 0.0884442 -0.0218161 +-0.0898373 0.133802 0.0342135 +-0.0414226 0.150668 0.00483874 +0.0173651 0.049165 -0.0241471 +-0.0213294 0.0783028 0.0551779 +0.0143433 0.0537792 -0.0282321 +-0.0784743 0.140032 0.0478552 +-0.0334891 0.0889549 0.0439078 +0.0190476 0.0795376 0.0522219 +0.0286264 0.0638437 -0.020406 +-0.054069 0.139552 0.0288194 +-0.0132381 0.0385471 0.0267309 +0.0118566 0.0887261 0.0541581 +0.0316481 0.100683 -0.014625 +-0.093138 0.120057 0.0112982 +0.0244505 0.0384021 -0.00302114 +0.0122037 0.0864617 -0.0308592 +-0.0121165 0.0973987 0.0513433 +0.0371269 0.09285 0.0362758 +0.00753839 0.119505 -0.0147629 +-0.0698326 0.0937229 -0.0162704 +-0.046496 0.105677 0.0407002 +-0.00449814 0.0870358 0.0571267 +-0.00560579 0.042007 -0.0256504 +-0.0748416 0.154048 -0.0189002 +0.0138852 0.0348367 0.0283807 +-0.0890009 0.118943 0.0464523 +-0.0703858 0.16802 -0.0500308 +-0.0208115 0.124915 -0.0021319 +-0.0399669 0.0343914 -0.00210399 +-0.0188044 0.120762 -0.00982397 +-0.0825182 0.0816676 0.0298907 +-0.0625957 0.0588736 0.0128867 +-0.0908844 0.150204 0.0171288 +-0.073715 0.17176 -0.0333959 +0.0304194 0.0446109 0.0313507 +-0.0364972 0.0605644 0.0405385 +-0.0684905 0.158118 -0.0539401 +0.011386 0.0343226 -0.0122219 +-0.0375464 0.119352 -0.0122401 +-0.036497 0.102841 0.0405772 +0.0373988 0.0430101 -0.00376662 +-0.00864037 0.0526884 -0.0330777 +-0.0505191 0.112725 -0.0172384 +0.000747713 0.131321 0.00709666 +-0.0821064 0.110205 0.0294137 +-0.0338319 0.0498039 0.0388148 +-0.0399647 0.128635 0.00811119 +0.0262642 0.0479348 -0.017662 +-0.093142 0.118716 0.0123041 +-0.0234219 0.0537493 0.0424994 +0.0109672 0.0977693 -0.023517 +-1.32571e-05 0.13145 0.0125463 +0.0200527 0.0618555 0.0482337 +-0.0119089 0.128954 0.021205 +-0.0524994 0.0903873 0.0447034 +-0.0334979 0.0845774 0.0421828 +0.0190672 0.117213 -0.0123322 +-0.0263135 0.0381467 0.0262093 +0.034589 0.108233 -0.00663102 +0.0435886 0.091694 0.0241609 +-0.00849618 0.0939016 0.0554996 +-0.0579701 0.125253 -0.00738272 +-0.016138 0.0382862 0.0119165 +-0.0709351 0.0742605 0.0366097 +-0.0125367 0.128434 0.00198737 +-0.0244307 0.0379986 0.0104913 +-0.0681277 0.152206 0.0356633 +-0.0279464 0.0689892 -0.032513 +0.0398535 0.0752995 0.0330037 +-0.0636875 0.0722354 -0.0149801 +0.00569987 0.0949071 -0.0304911 +0.0217235 0.120687 0.0315848 +0.0306109 0.0549842 0.038821 +-0.0719231 0.155792 0.0253493 +-0.0350091 0.168257 -0.00164334 +-0.0919787 0.13239 0.0232249 +-0.0781961 0.0730005 -0.00359699 +0.0587114 0.0663183 0.00513779 +-0.0669656 0.147091 -0.0266318 +-0.0880403 0.150094 0.0102212 +-0.0137235 0.0657235 -0.0372342 +-0.0884987 0.102354 0.0183681 +-0.0219433 0.0386564 0.0320445 +-0.0629896 0.0341974 0.0167609 +0.0436977 0.0404602 0.0147575 +-0.0413787 0.124797 0.0224172 +-0.0255118 0.0931431 0.0461963 +-0.0122206 0.175683 -0.0283056 +-0.0580888 0.115436 0.0369297 +-0.0783607 0.150068 -0.00187639 +0.0561422 0.049398 0.0141897 +-0.0334907 0.0932064 0.044455 +-0.0784392 0.144133 0.0443751 +0.0134754 0.0990564 0.0479483 +-0.0673994 0.0396352 0.0118227 +-0.0719379 0.131113 -0.00828186 +-0.0675058 0.060447 0.0122781 +-0.0276134 0.0408758 -0.0294796 +0.0326756 0.117173 0.0132168 +-0.0741715 0.151271 -0.0318825 +0.0191559 0.0577995 0.0486799 +-0.0624968 0.102902 0.0415908 +-0.0467288 0.054632 0.0374442 +0.0400692 0.0773178 -0.00879643 +-0.0293794 0.119962 0.0282913 +0.026315 0.0849274 0.0469361 +0.00747158 0.0458651 0.0478111 +-0.0644149 0.0731789 0.038947 +0.0243686 0.118145 -0.00732959 +0.0357612 0.0614637 -0.0127934 +-0.00578852 0.0784633 -0.0377499 +-0.0177178 0.125534 0.0250034 +-0.0264348 0.0891318 0.0486594 +0.000504451 0.0842848 0.0575158 +0.00240772 0.0390703 -0.0246208 +-0.0401081 0.172699 -0.00896014 +-0.0494967 0.101524 0.042218 +-0.0255895 0.0365546 -0.0292581 +0.0458597 0.0428246 0.0032848 +-0.0627733 0.141026 0.037362 +-0.0278525 0.100136 -0.023576 +0.03144 0.0681325 -0.0188162 +0.0112459 0.129755 0.00240428 +-0.0872718 0.144583 0.0355002 +-0.0552077 0.119827 0.0376818 +-0.0324974 0.0859857 0.0423469 +-0.0872251 0.0950749 0.0256867 +-0.0468678 0.104213 -0.0207743 +-0.0445775 0.0462028 -0.0108205 +-0.0612826 0.0343712 0.0345145 +-0.0144859 0.0951551 0.0535558 +-0.0770239 0.141306 -0.00545257 +-0.0572927 0.0447946 0.0143752 +0.0334156 0.0430777 -0.00456693 +-0.073856 0.154091 -0.0259028 +0.0392277 0.108354 0.00916622 +-0.0254312 0.0379511 0.0211651 +-0.0579761 0.145744 -0.00191597 +0.016043 0.107446 -0.0178315 +0.0243862 0.0955601 0.0459654 +-0.0527854 0.146248 0.0203946 +-0.0908456 0.137855 0.0191944 +-0.0688648 0.111591 0.0438135 +0.00950305 0.108494 0.0403312 +-0.0846701 0.133487 -0.000689201 +-0.0146178 0.161254 -0.0115208 +-0.0517406 0.0704199 0.0388209 +-0.00483682 0.0910121 -0.035647 +-0.0455024 0.0438631 0.0430524 +-0.0269915 0.165366 -0.00760144 +-0.000429299 0.131494 0.0138246 +-0.0108252 0.0340132 -0.0200775 +-0.053792 0.141582 0.0273817 +-0.0807416 0.0720213 0.00853917 +-0.0886543 0.102345 0.0123871 +0.00450201 0.0745047 0.0565768 +-0.0651106 0.120024 0.049809 +-0.0816493 0.14593 0.000178819 +-0.0317919 0.0396266 0.0512352 +-0.0868829 0.105004 0.0193534 +-0.0587854 0.0839965 -0.0207846 +-0.0568787 0.10406 -0.0186489 +0.0234195 0.0349614 0.0211471 +-0.0247363 0.0683356 -0.0352871 +-0.0124919 0.105832 0.0432095 +0.040945 0.0957511 0.0281635 +-0.0357042 0.0681118 -0.016092 +0.0393973 0.0899152 -0.0117774 +-0.00550412 0.0547964 0.0538028 +0.0275305 0.105074 -0.0152759 +0.0436438 0.0973161 0.0031761 +-0.0642775 0.0356785 0.0173446 +-0.0578787 0.118384 0.0390612 +-0.0235304 0.111308 0.039012 +-0.0248685 0.10443 -0.0231858 +0.0332298 0.0870923 -0.0186827 +-0.050788 0.13247 -0.00197537 +0.0485095 0.0723104 0.0188157 +0.0122831 0.123395 -0.0089862 +0.0075079 0.0786108 0.055765 +0.00110358 0.114412 -0.0192684 +-0.0434472 0.0344528 0.0312293 +0.0149724 0.0740286 0.0533099 +-0.0773286 0.0696655 0.0199272 +-0.000294503 0.124716 -0.00828566 +0.0391665 0.0916193 -0.0109453 +-0.0671371 0.169442 -0.0570354 +-0.0101504 0.0993437 0.0489973 +-0.0383111 0.172675 -0.0109203 +-0.048519 0.137086 0.0153953 +0.0537553 0.0686728 0.0251859 +-0.0642372 0.158555 -0.0140759 +-0.0177679 0.0959988 0.0511065 +-0.071022 0.0408196 0.00705143 +-0.0272272 0.0562777 -0.0264072 +-0.0594982 0.10293 0.0419773 +-0.0516777 0.0668198 0.0365892 +-0.00645905 0.128953 0.0260767 +0.0161504 0.121694 -0.0091598 +0.0437177 0.0457281 0.0283091 +-0.092911 0.118706 0.0113064 +0.0110654 0.0346569 0.0243461 +-0.0131306 0.0351789 0.049391 +0.0159998 0.123366 -0.00698095 +-0.0668407 0.0952437 -0.0171577 +-0.071815 0.0936645 -0.0155813 +-0.0350082 0.162373 -0.00163299 +-0.00952557 0.169814 -0.0256004 +-0.0483792 0.0345623 0.0353569 +0.042732 0.0733313 -0.00479409 +-0.0838195 0.113254 0.0462465 +-0.0700699 0.0415411 0.00206928 +-0.0834164 0.110194 0.0380909 +0.0395682 0.0582726 0.0307001 +-0.0527297 0.0738092 -0.0169322 +-0.0800112 0.0826849 -0.00756298 +0.0378591 0.102628 -0.00683982 +-0.010049 0.165099 -0.0207588 +-0.0214981 0.0486638 0.0490621 +-0.0429934 0.0337652 -0.0113325 +-0.000805756 0.0881637 -0.035184 +-0.0796191 0.0899783 0.0351979 +-0.0774871 0.138654 0.0489668 +-0.0910383 0.131037 0.0312282 +-0.0353528 0.121762 0.0276148 +-0.0692517 0.16944 -0.0530112 +-0.0314965 0.0760483 0.040909 +0.0238425 0.124265 0.00565298 +0.00628938 0.0341841 -0.018778 +-0.0581165 0.0576994 0.00562055 +0.0291881 0.120758 0.0119009 +-0.0722612 0.0718535 0.0331389 +0.00962203 0.129808 0.0232185 +-0.0350797 0.159271 -0.0126349 +-0.0536324 0.0335534 0.00133593 +-0.0104359 0.0944019 -0.0340934 +-0.00347107 0.112728 -0.01944 +0.0492065 0.0445737 0.00425603 +-0.014689 0.0555534 -0.0339367 +-0.0729302 0.110914 0.0452396 +0.0128104 0.0891816 -0.030491 +0.0173644 0.052219 -0.0267492 +-0.0755038 0.138646 0.0489499 +-0.0664863 0.0657678 0.0290911 +0.014321 0.0608889 -0.0289153 +-0.0109854 0.0891937 -0.0368255 +-0.0714642 0.155388 -0.0429121 +-0.0674015 0.178779 -0.0526749 +-0.0136021 0.0406665 -0.0268707 +-0.0656159 0.148667 -0.029991 +-0.0795217 0.0705829 0.00954625 +-0.0757838 0.06757 0.0150388 +-0.0619636 0.125289 -0.00856668 +-0.0639176 0.153606 -0.0366205 +-0.0839617 0.114292 0.0471508 +-0.0125655 0.164041 -0.0130929 +-0.0519903 0.161388 0.00628165 +0.0020129 0.0391581 -0.00540617 +-0.0585951 0.0582039 0.0052961 +0.034843 0.0862437 0.0399362 +-0.0416697 0.0377451 -0.0272469 +0.0488349 0.0718069 0.020409 +0.0223863 0.0449715 0.0408911 +-0.0822334 0.107404 -0.00162196 +-0.0602698 0.154572 0.0280125 +0.0297856 0.120093 0.00926746 +-0.0669649 0.131148 -0.00876196 +-0.0800697 0.154441 0.0255089 +-0.0849288 0.12649 -0.00334252 +-0.000500036 0.0952296 0.0545194 +0.0151613 0.0863718 -0.029541 +0.0388132 0.0794166 0.0350891 +-0.0171133 0.0390763 0.0521827 +-0.0784063 0.0886978 0.0368492 +-0.0643001 0.179479 -0.0601392 +-0.0766538 0.11399 -0.00481419 +-0.016912 0.0931258 -0.0348233 +0.0379841 0.0406211 -0.00115448 +-0.0331507 0.0821697 -0.0275285 +0.0162383 0.0953367 0.0482094 +-0.0326141 0.0638332 -0.0174509 +-0.0725041 0.146981 0.0423864 +-0.0910261 0.12541 0.00626868 +-0.0833424 0.104748 -0.00163012 +0.0153058 0.128412 0.00248962 +0.0403512 0.038719 0.00830945 +-0.0325027 0.0603855 0.0384943 +-0.0195554 0.0387278 -0.0149268 +-0.0839725 0.0897798 0.0296574 +-0.00149888 0.0634085 0.0566876 +0.0387554 0.108357 0.00416438 +-0.0444079 0.0409084 -0.0203048 +-0.0868827 0.0896245 0.0255163 +0.0430409 0.10011 0.0131585 +0.0194835 0.105739 0.0423148 +0.032957 0.115724 0.0233075 +-0.0114871 0.063283 0.055206 +-0.0528865 0.15117 0.0191272 +0.0045048 0.104341 0.0428855 +0.00104791 0.0346359 -0.0164332 +-0.0674529 0.180926 -0.0583799 +-0.0344427 0.15352 -0.00733684 +0.0397392 0.0658643 0.0327972 +-0.0465986 0.120315 -0.0132329 +0.015269 0.034844 0.035887 +-0.0554963 0.0791301 0.0442202 +-0.0342911 0.0473692 0.0421968 +-0.0842876 0.108899 0.00336188 +-0.0262668 0.179961 -0.0169689 +-0.0836964 0.0763445 0.00752427 +-0.0696635 0.159559 -0.0499324 +-0.0661058 0.151041 -0.0375744 +-0.0455019 0.122005 0.0261109 +-0.0890685 0.0969888 0.0194042 +-0.0946116 0.124177 0.0212718 +0.00351301 0.0828608 0.0571024 +-0.0555168 0.154658 0.0152234 +0.00450223 0.0730917 0.0563795 +-0.0125112 0.037888 -0.0164908 +-0.0595378 0.0337212 0.0161226 +-0.0645332 0.120008 0.0489179 +-0.0396568 0.0577566 -0.0113194 +-0.052454 0.13854 0.0254099 +-0.0106577 0.165418 -0.0198106 +-0.0477868 0.0855382 -0.0218048 +-0.07021 0.168534 -0.0249229 +0.0345025 0.0454126 0.0301845 +-0.0261438 0.168232 -0.0181898 +-0.0685956 0.0422314 0.00876662 +0.00130397 0.128647 -0.00252095 +-0.0558871 0.108356 -0.0181276 +-0.0163928 0.0384645 -0.00103951 +-0.0364756 0.0917702 0.0440382 +0.0409317 0.0971197 -0.00479362 +-0.015772 0.160715 -0.00958045 +-0.0428613 0.102811 -0.0212634 +-0.0285136 0.112565 0.0358423 +0.0484971 0.0678077 0.0264809 +-0.0319101 0.121969 -0.00695975 +-0.0200308 0.127492 0.00809368 +-0.0860481 0.114371 0.00228673 +-0.0597203 0.0638916 0.0303834 +0.00627327 0.0682324 -0.0325665 +0.0114155 0.128646 -0.000626619 +-0.0516778 0.140064 0.0213757 +-0.0218071 0.110009 -0.0205036 +-0.0218161 0.0798852 -0.0388524 +-0.02847 0.045966 0.0500228 +0.0429765 0.0987175 0.0181666 +-0.0795395 0.117686 0.0497856 +0.0342026 0.113899 0.000840527 +0.0067112 0.0353739 0.0246266 +0.0402464 0.0618954 -0.00472398 +-0.049455 0.118007 0.0316443 +-0.0442176 0.170815 -0.00391429 +0.00731658 0.0846292 0.0563131 +-0.0542668 0.0504201 -0.00539584 +-0.00648076 0.0969085 -0.030657 +0.0597202 0.067814 0.0181758 +-0.0267919 0.0380272 0.00817341 +-0.0702433 0.163232 -0.0134117 +0.0368364 0.0754262 0.037436 +-0.077497 0.168713 -0.0313178 +0.00996165 0.130854 0.00764162 +0.0133618 0.0523173 -0.0278769 +-0.0337147 0.120592 -0.00951232 +-0.0398766 0.113891 -0.0165093 +-0.089592 0.111931 0.0163329 +-0.0841359 0.0832101 0.027497 +-0.0848856 0.0792043 0.0194951 +-0.0291817 0.0832547 -0.0346104 +0.013224 0.0341678 -0.000459678 +-0.00759782 0.103673 0.0436498 +-0.0514921 0.0804912 0.0440592 +-0.0929632 0.124088 0.0102675 +-0.0586925 0.0677294 -0.0118268 +0.0392263 0.0874331 0.033936 +-0.052704 0.143169 0.0214165 +-0.0286941 0.0380883 0.0293671 +0.0183138 0.0348993 0.0256062 +-0.0644855 0.101502 0.0419335 +-0.0547363 0.159762 -0.000811248 +0.0123244 0.0567269 -0.0296218 +0.0294314 0.0509988 -0.0157519 +0.0386176 0.0874608 0.0348475 +-0.0759101 0.148612 -0.0128604 +0.0152406 0.0723235 -0.0303843 +-0.0475913 0.133999 0.00741747 +-0.0109726 0.115573 -0.0164387 +-0.040716 0.0681271 -0.0158645 +-0.000345107 0.127203 0.0297544 +-0.0856388 0.100529 0.0267624 +0.0372748 0.0576283 0.0326444 +0.0454709 0.0664599 0.0266758 +-0.040383 0.152127 0.00460721 +-0.0503264 0.131112 0.0307063 +-0.061863 0.0953699 -0.0186332 +-0.0356336 0.11996 -0.0108661 +-0.000498349 0.118323 0.0391474 +-0.00744633 0.0386202 0.0260498 +-0.0702648 0.156758 -0.047919 +-0.0607772 0.146055 -0.00361746 +-0.0557733 0.0797194 -0.0205764 +-0.0286229 0.0450027 -0.0280846 +-0.0400285 0.0339876 -0.0295458 +-0.0244818 0.0974513 0.0444604 +-0.0736592 0.0887741 0.0405778 +-0.0626256 0.150596 -0.021578 +-0.0455006 0.117978 0.0306048 +-0.0153159 0.119411 -0.012435 +0.00132313 0.0358703 0.0464707 +-0.0231138 0.0666037 0.0460408 +-0.0487946 0.0869761 -0.0218357 +0.0312031 0.0842875 -0.0196213 +-0.0866673 0.109085 0.0143521 +-0.0716243 0.157487 -0.00225608 +0.0404941 0.0555582 0.0318463 +-0.0624591 0.155071 0.0054624 +-0.043713 0.0695592 -0.0168487 +0.00662363 0.128671 -0.00261559 +0.0292045 0.0356392 0.0180684 +0.0152063 0.0878077 -0.0294658 +0.0560899 0.059136 0.000193317 +0.0162996 0.0623114 -0.0287447 +0.00333411 0.0539266 -0.0303683 +-0.0212016 0.0383732 -7.87452e-05 +-0.0683674 0.147186 -0.0280671 +-0.0614001 0.124084 0.0428232 +-0.0273522 0.0939518 -0.0257303 +-0.0526652 0.0647199 -0.0102 +-0.032486 0.0449059 0.0475402 +-0.0090473 0.168146 -0.0217175 +-0.069891 0.119438 -0.0086356 +-0.0744393 0.114503 0.0509494 +-0.0648928 0.0350374 0.038379 +-0.00019365 0.125094 0.0326823 +-0.039166 0.0355671 -0.0293815 +-0.0258209 0.0692735 0.0430043 +-0.0620187 0.175667 -0.057604 +-0.0903815 0.130904 0.00623191 +-0.00457753 0.11466 -0.0174869 +-0.0733982 0.114573 0.051125 +0.00137655 0.0380516 0.0229424 +-0.0197661 0.0728664 -0.0388949 +-0.0370853 0.162227 -0.0135318 +-0.0166846 0.109701 -0.0201927 +-0.0564987 0.0932477 0.0451284 +-0.086761 0.084678 0.016478 +-0.0201321 0.0568083 0.0475876 +-0.0893331 0.111939 0.012355 +-0.0291964 0.162421 -0.00376774 +-0.0840799 0.143223 0.00416483 +-0.0550692 0.121281 0.0379498 +-0.0258999 0.0382697 0.0279803 +-0.0881372 0.150234 0.0261027 +-0.0189632 0.0385431 -0.0165058 +0.0252198 0.0478964 -0.0186081 +-0.0250024 0.118057 -0.0129436 +-0.0341053 0.162392 -0.00207929 +-0.0455587 0.0461599 -0.0105245 +-0.0673284 0.11863 0.0518333 +-0.0767393 0.157602 -0.0105393 +-0.0460199 0.0377083 0.0451098 +0.00937824 0.0346871 0.0203526 +-0.0232543 0.181611 -0.01087 +-0.0185423 0.0342292 -0.0199208 +0.0094823 0.034855 0.0256576 +-0.00349094 0.060529 0.0547186 +-0.0536823 0.0678463 -0.0129474 +0.0573543 0.0687146 0.022093 +0.0297466 0.036015 0.0196643 +0.0183828 0.0447123 -0.0227438 +-0.00451438 0.1296 0.000561158 +-0.0575172 0.037335 -0.0101901 +-0.0273178 0.113609 -0.0162558 +-0.0127855 0.0392769 0.0369668 +0.0359154 0.0915824 -0.0149202 +-0.0321871 0.0680263 -0.0214501 +0.0373115 0.0673123 0.0362946 +-0.0482709 0.0345995 0.0405757 +-0.0586992 0.142676 -0.00307276 +-0.0720231 0.149543 -0.0391183 +-0.0926193 0.122848 0.0312739 +-0.00649959 0.103045 0.0436802 +-0.0172605 0.128293 0.0149127 +0.0500544 0.0553974 0.0300563 +-0.0459009 0.131661 0.0191601 +-0.0355139 0.176726 -0.00796363 +-0.0132739 0.162396 -0.014817 +-0.0205091 0.112696 0.0389743 +0.0400974 0.0943736 -0.00783899 +0.0445099 0.0945603 0.0161557 +-0.00940844 0.100291 -0.0242411 +-0.0880121 0.147225 0.0305337 +-0.0134729 0.17718 -0.0214028 +0.0289055 0.0408264 0.0297172 +-0.0386238 0.0335154 -0.0250853 +-0.0474847 0.0931518 0.0438057 +0.0385195 0.109282 0.00815775 +-0.0094889 0.119647 0.0372435 +-0.0558334 0.0358523 0.0464479 +0.0391497 0.108397 0.00837586 +-0.0166742 0.0668915 0.0537111 +-0.0514343 0.0647808 0.0348885 +-0.0506054 0.0575708 -0.00965819 +0.0186225 0.0355557 -0.00967449 +-0.0507888 0.0855066 -0.0215873 +-0.0563207 0.0562341 0.00763908 +0.00416104 0.0393786 0.0331643 +0.00410872 0.110162 -0.02034 +-0.0326921 0.152804 -0.00294992 +-0.0105902 0.0385498 0.00372703 +-0.0450772 0.0337168 -0.000691764 +0.00110427 0.111585 -0.0201254 +-0.086661 0.123026 0.0482846 +-0.00349688 0.0633763 0.0563118 +0.0181674 0.0959966 -0.023265 +0.0171824 0.126495 -0.000336309 +0.0349695 0.0577828 0.0363582 +-0.0893883 0.0956403 0.0164184 +-0.0132244 0.172771 -0.0193112 +-0.0115098 0.0702302 0.0553956 +0.0292762 0.0431552 0.0314362 +0.0355897 0.0411906 0.0271165 +-0.0396848 0.0344413 0.0355548 +-0.0488762 0.0335766 0.000473902 +-0.0845392 0.0778023 0.0145171 +-0.0600467 0.0342661 0.0313871 +-0.0484946 0.156406 0.00957752 +-0.0435279 0.0506014 0.0392212 +-0.0581322 0.0624985 0.0284102 +-0.0319273 0.126498 0.0125244 +-0.0692254 0.124258 0.0526584 +0.0346263 0.114673 0.0139267 +-0.0707453 0.113137 0.049314 +0.0440515 0.0722274 0.0248494 +-0.0190238 0.0384735 0.0274147 +0.0318733 0.11664 0.0243218 +-0.00980958 0.166665 -0.0207735 +-0.075878 0.0954761 0.0383509 +0.04237 0.0533961 -0.00679891 +-0.00515103 0.127241 0.0295045 +-0.0386117 0.0406767 0.0425487 +0.0591522 0.0552732 0.011174 +0.0399613 0.0806226 0.0334139 +-0.0892353 0.14446 0.0304266 +-0.0104754 0.127368 -0.00300647 +-0.0635158 0.162004 -0.0583208 +-0.0801984 0.0868229 -0.00856132 +-0.0600399 0.13696 -0.00647222 +-0.0777335 0.153443 0.0307864 +-0.046469 0.119345 0.0289808 +-0.0313084 0.126018 0.00688499 +-0.0190244 0.0385858 -0.00538325 +-0.0698329 0.112058 0.0465849 +-0.0761752 0.110468 0.0448594 +0.0607736 0.0651167 0.0161629 +-0.0738077 0.102191 0.0374953 +-0.0406116 0.0337811 0.00738645 +-0.0152574 0.166467 -0.0199789 +0.0135127 0.0860479 0.0530247 +-0.072308 0.159721 -0.00687103 +0.00549414 0.130728 0.00313392 +-0.00649655 0.0870315 0.0570873 +-0.0353742 0.125928 -0.00196324 +0.00551011 0.0870055 0.0566199 +0.00569172 0.093878 -0.0314287 +0.0453353 0.0533808 -0.00616451 +-0.0788788 0.16526 -0.0309581 +0.0122616 0.0765812 -0.0308581 +-0.0471876 0.131943 0.0231102 +0.0442177 0.0860807 -0.00279659 +-0.0735334 0.165176 -0.017728 +-0.0896904 0.116203 0.0443945 +-0.0887705 0.0969872 0.0214096 +-0.0201887 0.0754016 0.0541402 +0.0203245 0.0636 -0.0272806 +-0.0513256 0.0345659 0.0399502 +-0.0461113 0.034482 0.0324006 +-0.0773794 0.109459 0.0418273 +0.0262228 0.0747294 -0.0245497 +-0.0281178 0.0845911 -0.0356125 +-0.029049 0.0511502 0.0411139 +-0.0685509 0.065132 0.0256966 +-0.0660181 0.127026 0.048508 +-0.0475948 0.0403553 0.044655 +-0.0711998 0.15079 -0.0434624 +0.0346942 0.0401467 0.0260507 +-0.0803051 0.0719229 0.0175051 +0.0266708 0.121701 0.00384182 +-0.0637803 0.118542 0.0465326 +0.0257185 0.0699313 0.0441746 +-0.0865836 0.11378 0.0451954 +-0.0543656 0.153368 0.0199938 +-0.0147843 0.0981951 -0.0260468 +-0.0480746 0.134034 0.00539884 +-0.0172971 0.0386165 -0.00691824 +0.024363 0.0867852 -0.0239669 +0.000502788 0.056275 0.0546165 +0.0460119 0.0750141 0.00420589 +-0.0813458 0.154098 0.0250842 +-0.0504992 0.111154 0.0370407 +0.0480441 0.0725423 0.0171549 +0.0177377 0.0821568 0.0520978 +-0.0634907 0.0833477 0.0441845 +-0.0287709 0.04365 -0.0290051 +0.0412886 0.0858436 -0.00978207 +-0.0434867 0.0959016 0.0426578 +-0.0685902 0.112767 0.0465657 +0.0446015 0.0889424 0.0221651 +0.0387218 0.0993392 0.0297824 +-0.0569101 0.0984236 -0.0203516 +0.0460228 0.0834207 0.0061859 +-0.0608711 0.101136 -0.0186334 +0.0198592 0.123572 0.0284223 +-0.0670185 0.155095 -0.00202392 +0.00194178 0.0353485 0.0200578 +-0.0202225 0.0381837 0.0220241 +0.0372544 0.111046 0.00772111 +-0.0226761 0.0552382 -0.0304344 +-0.0500773 0.15315 -0.00486218 +0.0361622 0.075448 0.0382492 +0.00638813 0.0448624 -0.0253374 +0.0240783 0.123806 0.00430528 +-0.0874625 0.123933 -0.000723767 +0.0191746 0.064523 0.0487473 +-0.0528554 0.116872 0.0339893 +0.0012658 0.0697321 -0.0339789 +0.0363552 0.112269 0.0088181 +-0.0336364 0.0836212 -0.0255231 +0.0394621 0.0820907 0.0342997 +-0.0759857 0.112794 0.0483899 +0.042364 0.0505846 -0.00668018 +-0.0878291 0.0895228 0.0236162 +-0.0717396 0.156144 0.0122972 +-0.0118777 0.107304 -0.0220947 +-0.0518036 0.0898543 -0.0220029 +-0.0605307 0.142151 -0.00455603 +-0.00730388 0.0394625 0.048838 +-0.0695099 0.151355 -0.0447129 +0.0461391 0.0820336 0.0131698 +-0.0680095 0.151244 0.0371953 +-0.0696447 0.155522 0.00577511 +0.0106458 0.0343542 -0.00488721 +-0.0717447 0.165221 -0.0449739 +0.00872274 0.0346011 0.0383625 +-0.0601559 0.0472008 0.00728305 +-0.072526 0.149972 -0.0424686 +-0.0921507 0.129567 0.0102504 +-0.0195451 0.0382679 0.00943 +0.017351 0.0351839 -0.014686 +0.026638 0.0619848 -0.0226053 +-0.0779425 0.0757661 -0.00656744 +0.0456648 0.0834028 0.0181693 +-0.00238392 0.0391586 -0.00815532 +-0.0760947 0.171183 -0.0343205 +-0.037685 0.127343 0.0163262 +0.0200653 0.084847 0.0502217 +-0.0576821 0.0438911 0.0236882 +-0.00181158 0.0365903 0.0109133 +-0.0227414 0.0640418 -0.0345473 +-0.0607804 0.0397294 0.0180031 +0.00451899 0.0966593 -0.0283637 +-0.00904759 0.0994069 0.0493883 +0.036694 0.0368281 0.0111245 +-0.0476151 0.0378648 -0.0125385 +-0.0374934 0.0620193 0.0412021 +-0.0678369 0.0706443 0.0351197 +0.0262359 0.122255 0.0222063 +-0.0258834 0.0347926 0.045205 +-0.0730191 0.0808411 -0.0145801 +0.0272041 0.0968528 0.0430049 +-0.0387216 0.0710357 -0.0169218 +-0.0802983 0.0953773 0.0342868 +-0.0928216 0.122866 0.0342742 +0.0288283 0.120572 0.00606361 +-0.0872644 0.139206 0.0412952 +-0.0528885 0.108408 -0.0187758 +-0.0614742 0.149784 0.0364078 +-0.0888928 0.113895 0.0428033 +0.0133289 0.0681229 -0.0310343 +-0.000536732 0.10034 0.0474846 +0.0582707 0.0579579 0.00417743 +-0.0896629 0.124003 0.00427429 +-0.0333755 0.0483636 -0.0203394 +-0.0335104 0.169764 -0.00293532 +-0.0488446 0.119728 0.0310062 +0.0426741 0.0972641 0.0231497 +-0.0441044 0.0451364 -0.0122986 +-0.059855 0.0594826 0.0200848 +0.0270691 0.0942437 0.0445649 +-0.0896385 0.0969877 0.0134181 +-0.0456599 0.0636306 -0.0135866 +0.0575548 0.053733 0.00618309 +-0.054499 0.0776179 0.0432703 +0.0434163 0.0464179 0.0294988 +-0.0134899 0.0951663 0.0534531 +0.0324423 0.0754774 0.0416539 +-0.0117218 0.0382705 0.0200729 +-0.0308456 0.0396262 0.0517145 +0.0564645 0.0594668 0.0252844 +-0.0475135 0.0491287 0.0385522 +-0.0396908 0.0651397 -0.0142325 +0.0201781 0.0351992 0.0293411 +-0.0219159 0.175693 -0.0142737 +-0.0688718 0.063973 0.0231175 +0.0174279 0.12392 0.0289777 +-0.0699032 0.0687756 0.0310328 +-0.0528961 0.143026 -0.000455911 +-0.0475121 0.0438565 0.0432608 +-0.0275879 0.0384125 -0.00879832 +0.0421339 0.102871 0.00816377 +0.0276939 0.085014 -0.0220629 +-0.0593718 0.0422854 0.0165091 +0.0245725 0.122909 0.0244414 +0.00141552 0.0990584 0.0500955 +-0.0208664 0.103024 -0.023442 +-0.04595 0.0351008 -0.0224117 +0.0425933 0.066459 0.0273252 +-0.085327 0.0926016 -0.00256332 +-0.0496528 0.0345916 0.0385506 +-0.023191 0.178657 -0.0125853 +-0.0179257 0.0971306 -0.0269629 +0.0383787 0.0575308 -0.00558257 +-0.0190955 0.0939751 -0.033709 +-0.0659978 0.135528 -0.00820667 +-0.0379695 0.0348544 -0.0150276 +0.0231948 0.0344554 0.00500709 +-0.0577114 0.148197 0.0324041 +0.0473189 0.0638822 -0.00202275 +-0.091122 0.115466 0.0410527 +-0.0499316 0.141822 0.00385784 +-0.0663647 0.0360087 0.0372253 +-0.0453211 0.0345932 0.035979 +-0.00367712 0.0569332 -0.0329252 +-0.0883137 0.103697 0.0153744 +0.0333218 0.0981688 0.0378146 +0.0206459 0.0429683 -0.0197059 +-0.0718069 0.0887788 0.0415418 +-0.050581 0.0445938 -0.00942218 +-0.0589701 0.121961 -0.00876657 +-0.0786152 0.163841 -0.0309629 +-0.0919702 0.114664 0.0123319 +-0.0387263 0.127561 -0.000266265 +0.0573405 0.0635192 0.0248021 +-0.0778913 0.126656 -0.00702073 +-0.0685283 0.0434892 0.00727271 +-0.0779351 0.161108 -0.0209335 +-0.0892037 0.0956419 0.0194144 +-0.091675 0.147474 0.0191435 +0.00817319 0.0832888 0.0558122 +-0.051142 0.0627417 0.0330975 +0.00546913 0.116627 -0.0176566 +-0.0278605 0.124718 0.0184442 +-0.0689992 0.150311 0.0384044 +-0.0690062 0.162382 -0.0519693 +-0.00661995 0.130084 0.0216557 +0.0403849 0.0533789 -0.00673496 +0.0156377 0.0348863 0.0377268 +0.0577131 0.0523367 0.00917793 +-0.00120988 0.105335 0.044053 +-0.00579434 0.0351694 0.0474261 +0.0411666 0.0833385 0.031438 +-0.0325019 0.0988116 0.0438807 +0.00307304 0.124054 -0.00961404 +-0.0350636 0.0383682 -0.0121121 +-0.073931 0.128192 -0.0084465 +0.015055 0.123588 -0.00721903 +0.0455542 0.0875891 0.00417683 +-0.006733 0.0684593 -0.0359965 +0.00394905 0.100531 -0.0224465 +-0.0399008 0.128531 0.0110866 +-0.0778707 0.177255 -0.0480374 +-0.0310993 0.177108 -0.0141677 +-0.0307989 0.0833965 -0.031578 +0.00828982 0.0846467 0.0559983 +-0.0926147 0.121379 0.00928006 +-0.0309131 0.0848198 -0.0305724 +-0.0610919 0.155915 0.0160896 +0.0269409 0.117743 0.0296345 +-0.029909 0.0904807 -0.0265953 +0.0341142 0.0605859 0.0386759 +0.04958 0.0652138 -0.00133913 +-0.0406916 0.0651596 -0.014333 +-0.0186192 0.0393436 -0.0280481 +-0.0321414 0.16968 -0.0161315 +-0.0303394 0.0344325 -0.0205625 +-0.0749113 0.125246 -0.00804661 +0.0179783 0.035483 -0.0126728 +-0.0572916 0.0479655 -0.00237378 +-0.030388 0.0876244 -0.0295653 +-0.00273996 0.130454 0.0216129 +-0.0785777 0.0907895 -0.0106208 +-0.0237519 0.0683934 -0.0360687 +0.0305158 0.11943 0.00953878 +0.0436886 0.0777182 0.0262206 +-0.00223658 0.0383059 0.0473338 +-0.0174973 0.104415 0.0431217 +0.045327 0.0519476 -0.00589943 +-0.022701 0.0611501 -0.0334866 +-0.0334865 0.126881 0.00753677 +0.0458812 0.084809 0.00618736 +-0.0775185 0.147451 0.0411778 +-0.00849166 0.110041 0.0429425 +-0.00827497 0.0389568 -0.00728452 +-0.0154767 0.0545272 0.0507241 +0.0455115 0.0861913 0.0171661 +-0.0286176 0.124173 0.0196508 +-0.0903937 0.142028 0.0281621 +-0.00750142 0.0590729 0.0550185 +-0.0691508 0.152358 -0.047074 +-0.00484252 0.0384695 0.0194856 +-0.00149467 0.116953 0.0400314 +-0.0148242 0.128616 0.018702 +-0.00749757 0.0939067 0.0556187 +0.031866 0.115189 -0.00211013 +-0.0515259 0.0439564 0.0445165 +-0.0773104 0.159761 -0.0159076 +0.0205013 0.108449 0.0395681 +-0.0648774 0.159303 -0.0143091 +0.0267364 0.0606633 -0.022785 +0.00150878 0.0883997 0.0564367 +-0.0659091 0.06022 0.0163937 +-0.0625921 0.1213 0.0447428 +-0.0789765 0.135392 -0.00472816 +-0.0709567 0.0767623 0.0380194 +-0.0506142 0.0560954 -0.00917258 +-0.0707687 0.155356 -0.0469258 +-0.0675837 0.112197 0.043642 +-0.0159686 0.128428 0.0182857 +-0.0564715 0.132545 0.0359114 +-0.044247 0.157947 0.00609665 +-0.011089 0.038804 -0.005846 +-0.0380666 0.0385186 -0.00730796 +0.0253529 0.0520143 0.0399629 +0.00465347 0.0341223 0.0126365 +-0.0905147 0.136459 0.016202 +-0.0184793 0.0336465 -0.023124 +0.0165026 0.118175 0.0355154 +0.0109305 0.0685438 0.0544088 +-0.00849797 0.0952525 0.0545557 +-0.050269 0.11691 0.032477 +-0.0301947 0.125922 0.0102205 +-0.0914405 0.117414 0.0273008 +-0.0231534 0.0352107 0.0523184 +-0.0922901 0.125582 0.0342578 +-0.0703512 0.170836 -0.0520339 +-0.0881528 0.129472 0.0022725 +-0.0125497 0.0445369 0.0499253 +0.0104221 0.127848 0.0278469 +-0.0114754 0.0546403 0.0519269 +-0.0665146 0.16661 -0.0580261 +-0.0384984 0.169734 0.00180247 +0.0290438 0.0509642 -0.0167532 +0.0292682 0.0673021 0.0422638 +-0.0643695 0.149877 -0.0298747 +-0.0741326 0.180484 -0.0536706 +-0.0484658 0.144752 0.00741107 +0.02369 0.10485 -0.01704 +0.0383652 0.101327 -0.00724085 +-0.0516205 0.0604369 -0.00991236 +-0.0080847 0.125292 0.0313586 +-0.0117515 0.0714338 -0.0381291 +-0.0358096 0.12684 0.0170169 +-0.0620073 0.155313 -0.0175819 +-0.0861256 0.0937891 0.0274526 +-0.0627193 0.152197 -0.01058 +0.0557633 0.0538969 0.024211 +-0.0501537 0.152144 0.0115744 +-0.0504041 0.0345678 0.0349233 +-0.0622094 0.0655019 0.0319825 +-0.0630381 0.154049 0.0314099 +-0.0864944 0.112209 0.0250023 +-0.0765838 0.178662 -0.0494737 +-0.0880478 0.0908955 0.0237752 +-0.0540202 0.0513732 0.0109294 +0.0220807 0.125732 0.0192313 +0.000503516 0.0856702 0.0573793 +-0.0624013 0.116928 0.041368 +-0.0687693 0.0793684 -0.0165822 +0.0312024 0.114939 -0.00384217 +0.0394926 0.052754 0.032086 +-0.076502 0.12459 0.0526576 +0.0461265 0.0736153 0.00421619 +0.0493794 0.0453908 0.0224152 +0.0422961 0.0655994 0.0276352 +0.0444235 0.0917457 0.0211574 +-0.04812 0.128214 0.028687 +-0.0256026 0.0837946 0.0522209 +-0.00959872 0.0391743 -0.0260833 +0.0242446 0.0762105 -0.0254816 +-0.050147 0.145259 -0.000515581 +-0.0729617 0.136954 -0.00717713 +-0.0321019 0.119786 0.0288381 +-0.0723819 0.152607 -0.0408904 +0.0595077 0.0567056 0.0171693 +-0.0647247 0.16489 -0.0257757 +0.0214018 0.0473917 -0.0206345 +-0.0652965 0.147932 -0.0271042 +0.0404164 0.0647148 -0.00677085 +-0.0440757 0.0335994 -0.0169421 +-0.0658186 0.154852 0.00425231 +-0.0457713 0.156483 0.00739285 +-0.0550494 0.0577849 0.0202145 +-0.0233757 0.163881 -0.00766181 +-0.0658954 0.166616 -0.0590008 +0.0309109 0.0511672 -0.0117352 +0.0380176 0.101228 -0.00786632 +0.0272437 0.0732614 -0.0238068 +-0.0161865 0.0377383 0.0516902 +-0.051271 0.0356477 0.0458842 +-0.0184884 0.107161 0.042158 +0.0143121 0.0753991 0.0540935 +0.012486 0.0990688 0.0481132 +-0.069936 0.13258 -0.0084535 +-0.0324718 0.0546382 0.0373194 +-0.0637186 0.179242 -0.0585917 +-0.0560047 0.159776 0.00109778 +-0.0940215 0.120122 0.0233001 +-0.0734929 0.154069 -0.0299022 +0.0334431 0.0930091 -0.0164312 +-0.0568079 0.0869026 -0.0213473 +0.0600207 0.0595165 0.0181686 +-0.0282716 0.0376885 0.0226211 +-0.0608814 0.102587 -0.0185388 +-0.0689777 0.172299 -0.0388012 +-0.0333033 0.176609 -0.00426163 +-0.0726003 0.145757 -0.0168539 +-0.0351155 0.0460859 0.0430647 +-0.0668221 0.16563 -0.0222317 +0.0223344 0.0535713 -0.0254238 +-0.0555068 0.0341015 0.0254741 +0.0591828 0.0594427 0.0211715 +-0.076476 0.07597 0.0322323 +-0.0548438 0.043635 0.0177242 +-0.0545598 0.0616597 -0.0074577 +-0.0717138 0.073474 0.0353741 +-0.0123858 0.0383448 0.0108168 +-0.0878417 0.140531 0.0102059 +-0.0338438 0.0337316 0.012415 +-0.0362549 0.153841 -0.0082413 +-0.066147 0.0353356 0.0361254 +-0.0149468 0.125073 -0.0044168 +-0.0517378 0.0545135 0.0226244 +-0.0791517 0.0792478 0.0324066 +-0.0311673 0.0386498 -0.0134468 +-0.00138514 0.0391216 -0.00791905 +0.0249209 0.0782259 0.0483953 +-0.0288805 0.079237 0.0443379 +-0.0499299 0.0335056 -0.0106454 +0.000248169 0.0726618 -0.0353693 +-0.00679601 0.100851 0.0456503 +0.00749727 0.121002 0.0360768 +0.0281364 0.0448054 0.035097 +-0.0616338 0.0739295 0.0406212 +-0.0184922 0.11816 0.035496 +-0.0231843 0.0348489 0.0439808 +0.0524989 0.0718135 0.00595977 +-0.0114982 0.0943996 -0.0340943 +-0.0574587 0.045976 0.042703 +0.0272754 0.0703879 -0.0233186 +-0.0208041 0.127131 0.0063587 +-0.0449931 0.152736 -0.00651735 +-0.0154877 0.167822 -0.0210841 +-0.0738833 0.122317 -0.0079807 +0.0163998 0.0834424 0.0519345 +-0.0615988 0.156867 -0.0225865 +-0.0504372 0.0529682 0.0186225 +-0.0607622 0.0781498 -0.0187637 +-0.0208042 0.125974 0.0209606 +-0.0245306 0.112636 0.0373469 +-0.030708 0.121227 -0.00820323 +-0.0511359 0.0502476 0.0206335 +-0.0384993 0.0733372 0.0420402 +-0.0588719 0.102608 -0.018764 +-0.0774969 0.130279 0.0531227 +-0.0375712 0.124334 -0.00748059 +-0.0119956 0.0882297 -0.0377812 +0.0547499 0.0492946 0.00521444 +0.017211 0.088423 -0.0276786 +0.0381646 0.0644978 -0.0107883 +-0.04783 0.0927226 -0.0216222 +-0.0132756 0.0597275 0.0533794 +-0.00158335 0.0361983 -0.0246741 +-0.0612049 0.174131 -0.0607222 +-0.0655175 0.0356165 -0.00754656 +-0.0874441 0.0860134 0.00347726 +-0.00749507 0.10164 0.0441128 +-0.0175041 0.0382782 0.00983265 +0.00351386 0.100332 0.0462561 +0.0252498 0.0645397 -0.0230446 +-0.0717344 0.131221 0.0507858 +0.0525721 0.0648669 -0.000960413 +-0.0901978 0.11358 0.0212183 +-0.0560194 0.129616 -0.00591188 +0.0441279 0.0748554 -0.00179683 +-0.0307721 0.0349136 0.04922 +-0.0554801 0.0452738 0.0437595 +0.000511374 0.0503823 0.0524384 +0.0295573 0.0375392 0.0237122 +-0.00766545 0.0541253 -0.0331554 +-0.0226026 0.0379508 -0.0287016 +-0.0187506 0.162746 -0.0157051 +0.0546767 0.0732977 0.0167178 +0.042064 0.10006 0.0201605 +-0.0889838 0.099691 0.0193911 +-0.0644638 0.129733 0.0437115 +-0.043484 0.0987241 0.0424341 +-0.0252565 0.120536 -0.00953586 +-0.0159529 0.0390542 0.0365141 +-0.0915486 0.143335 0.0161726 +-0.0405267 0.169768 0.0017705 +-0.0726712 0.0651053 0.0195713 +-0.0132255 0.182074 -0.023933 +-0.0456018 0.0629458 0.0388902 +0.0287985 0.0385521 0.0262584 +0.0314095 0.0695437 -0.0187779 +-0.0625738 0.156865 -0.0165766 +0.0106756 0.0489592 0.0485841 +-0.0781956 0.163891 -0.0259488 +0.0262919 0.101687 -0.017683 +-0.0681573 0.180556 -0.0543707 +-0.0464942 0.100125 0.0422537 +-0.0294775 0.17726 -0.00505881 +0.00976325 0.0346476 0.0385339 +0.0351088 0.100136 -0.012024 +0.0398312 0.0992984 0.027798 +-0.0544975 0.080589 0.0448325 +-0.0251898 0.177123 -0.0193397 +-0.00463984 0.12746 -0.00519523 +0.0365694 0.109049 0.0260841 +-0.062967 0.159919 -0.044604 +0.0156331 0.0915267 -0.0269033 +-0.0577811 0.0472143 0.0403119 +-0.086179 0.107645 0.0083646 +-0.00357674 0.0347286 -0.0239915 +-0.0205507 0.066817 0.0505282 +-0.0590047 0.132542 0.0375172 +0.00657766 0.034511 0.0217547 +-0.0730595 0.110042 0.0423406 +-0.0725117 0.163674 -0.014076 +-0.0130193 0.115677 -0.016537 +0.0190348 0.0768352 0.0521916 +0.00221518 0.114462 -0.0193126 +-0.0142885 0.0390252 0.0350884 +-0.0492809 0.152135 0.0110836 +0.0378754 0.0980648 0.0320906 +-0.0377624 0.0420706 0.0430123 +0.00890997 0.125517 0.0316176 +0.00478616 0.0342999 0.00145343 +-0.0220536 0.0952953 -0.0290683 +-0.0883767 0.125344 0.00127971 +-0.055499 0.0761852 0.0427309 +-0.0505039 0.0487703 0.0186583 +0.0374548 0.0781001 0.0366194 +0.00520505 0.129939 3.61829e-05 +-0.0464525 0.146291 0.00643191 +-0.0545162 0.049049 -0.0054035 +-0.0209524 0.0920017 0.0529687 +-0.0534945 0.105667 0.0403502 +-0.0355002 0.174151 -0.00180627 +-0.0654804 0.146553 -0.0219125 +-0.0577458 0.131139 0.0375772 +0.0440584 0.0860884 0.0251529 +0.0484396 0.0486951 -0.00266239 +-0.0510317 0.0544187 0.0196187 +-0.0305049 0.0720397 -0.0305133 +-0.0513349 0.057067 0.0306313 +-0.0444577 0.123407 -0.0104693 +-0.0404418 0.0351129 -0.0289386 +-0.0611441 0.169381 -0.0576009 +-0.0704838 0.120388 0.0533274 +0.00150053 0.0591133 0.0550768 +-0.0504978 0.159322 0.00851944 +-0.0127755 0.126776 0.0267341 +0.00508634 0.0345614 -0.0155701 +-0.0433649 0.150829 -0.00565896 +-0.0276025 0.0888516 -0.0335952 +-0.0536948 0.0661603 -0.0107375 +0.0453129 0.0698237 0.023466 +-0.0407211 0.150643 0.00408479 +0.0111265 0.120476 0.0355761 +0.000791005 0.0398223 0.046536 +0.0460187 0.0482649 0.029417 +-0.0748889 0.119375 -0.00765967 +0.0240318 0.0591603 0.0451764 +0.0102193 0.129407 0.000604352 +-0.0662744 0.179701 -0.0600508 +-0.0165098 0.0772307 0.0561424 +0.0294369 0.0781918 0.0443709 +-0.0510278 0.0474301 0.0166894 +-0.0808293 0.0720933 0.0155437 +0.0139163 0.0953242 -0.0249235 +-0.0756827 0.0823892 -0.0125945 +0.00119778 0.0825383 -0.0355009 +-0.0614832 0.0775692 0.0421583 +-0.0816839 0.0830971 0.0318157 +-0.0257584 0.0736396 0.0456283 +0.0071927 0.124822 -0.00847934 +-0.0749667 0.0683767 0.0215337 +-0.0415307 0.127763 -0.00103989 +0.0217652 0.0862022 0.0491664 +-0.0758742 0.102063 -0.0106997 +0.00933423 0.0567711 -0.0303022 +-0.010684 0.0584354 -0.034314 +-0.0126507 0.0350556 0.0425263 +0.0424994 0.0597124 0.0306347 +-0.0147222 0.0643235 -0.037347 +0.0579415 0.0716454 0.0119821 +-0.000418875 0.0389219 -0.0131688 +-0.0480228 0.144604 0.00545108 +-0.0124881 0.120998 0.0354929 +-0.0941295 0.121483 0.024294 +0.0533093 0.0573451 -0.00263239 +-0.0426699 0.0336999 -0.0149012 +-0.0466248 0.0577591 -0.0115398 +-0.0628785 0.0393963 0.0426563 +-0.072166 0.063706 0.0120556 +-0.0912059 0.14882 0.0151457 +-0.033491 0.0904012 0.0444067 +0.0152459 0.0821521 -0.0296185 +-0.0608506 0.0333964 -0.00541551 +0.0483298 0.0694277 0.0246416 +-0.0144087 0.0383376 0.0158464 +-0.00316996 0.131012 0.0171239 +0.0247594 0.0929114 0.046503 +-0.0615203 0.153356 0.00130737 +-0.0618578 0.099667 -0.0183374 +0.0303629 0.0483136 -0.00765132 +0.00253507 0.0394917 0.0345311 +-0.0713444 0.144531 -0.0156116 +-0.0188175 0.159674 -0.00630165 +-0.0174928 0.111329 0.0404434 +-0.0425002 0.0437706 0.0420539 +0.038489 0.0484512 0.0319961 +-0.011814 0.163592 -0.0157611 +-0.0526941 0.0334208 -0.00928256 +-0.0613494 0.131082 0.0393909 +-0.0276253 0.0450182 -0.0280952 +-0.0449077 0.159414 0.00690868 +0.00747686 0.0474111 0.0493962 +-0.0535025 0.0917839 0.0444757 +0.0372578 0.0658262 -0.0127785 +-0.0616099 0.158421 -0.0325909 +-0.0443417 0.035118 -0.0243716 +0.0228959 0.0358901 0.0147404 +-0.0312846 0.119331 0.0291556 +-0.0748251 0.0906869 -0.0145799 +-0.0607901 0.0839118 -0.0197808 +-0.060035 0.0645406 0.0315175 +-0.0506187 0.0531538 -0.00831388 +0.0189959 0.104672 0.0434338 +-0.0328687 0.10291 -0.0220775 +0.0293781 0.0721886 -0.0217847 +0.0490097 0.0482239 0.0267018 +-0.00202044 0.0386496 0.0235231 +0.00793635 0.0980328 -0.0238123 +-0.0353308 0.0347033 0.016646 +0.00129902 0.039118 0.0292011 +0.0433693 0.0561672 -0.00598915 +0.0455002 0.059749 0.0314265 +-0.0891212 0.0888935 0.0154552 +-0.00853579 0.044404 0.0484956 +0.0227707 0.10612 -0.0163977 +-0.0830074 0.117688 0.0489709 +-0.0652397 0.150467 -0.0337229 +-0.0787271 0.0954037 0.0355432 +0.0320582 0.11345 0.0286813 +-0.0641355 0.160881 -0.0576174 +0.0459242 0.0806108 0.00418728 +0.0093871 0.0434015 -0.0246765 +-0.0501776 0.124028 0.032677 +-0.0486159 0.0547593 -0.0100622 +0.000494108 0.118289 0.0391022 +-0.0267825 0.0768545 -0.0363352 +0.039504 0.0914002 0.0327084 +0.0495572 0.0525985 0.0293193 +-0.0221892 0.177131 -0.0213718 +0.00724524 0.0369774 0.0269173 +0.0174748 0.0934539 0.0481542 +-0.021119 0.180019 -0.0220004 +-0.0938873 0.12827 0.0192438 +-0.0558806 0.138039 -0.00386657 +-0.0754975 0.123189 0.0531282 +-0.0682563 0.169911 -0.0313673 +0.00486454 0.131282 0.0057704 +-0.0544491 0.156028 0.0112408 +0.0259161 0.0713197 0.0444841 +-0.0205993 0.0408181 -0.0286892 +0.0326751 0.0902947 0.0421046 +0.0303546 0.107428 0.0353018 +-0.043641 0.0451148 -0.0133235 +0.0453399 0.0504735 -0.00539794 +-0.0640884 0.160897 -0.0576117 +-0.015926 0.178652 -0.0196554 +0.0285634 0.0463012 0.0357516 +-0.00467538 0.0353718 0.0474871 +0.00649755 0.131366 0.0177838 +-0.0721007 0.175064 -0.0530188 +-0.0454824 0.0959409 0.0431744 +-0.0892808 0.0888643 0.0124572 +0.00219675 0.0376886 0.0234384 +-0.0084105 0.095275 -0.0329664 +-0.0384962 0.11803 0.0312871 +-0.0451864 0.146266 0.00463419 +-0.0870838 0.0846865 0.0114769 +-0.0855325 0.107606 0.0053458 +-0.0457969 0.126831 -0.00605616 +-0.0164306 0.0384009 0.00449856 +-0.0355073 0.0662414 0.0411418 +0.0174851 0.0852069 0.0507856 +0.0160687 0.122524 -0.00804645 +-0.0586545 0.152137 0.0330321 +-0.0294308 0.0847062 -0.0336139 +-0.0725432 0.15415 0.0310449 +0.0567814 0.0724634 0.0130365 +0.0378457 0.0726607 0.0353699 +0.00540963 0.0375924 -0.0240752 +-0.0555707 0.033544 0.017104 +0.0295902 0.119982 0.0063504 +0.0197767 0.104476 -0.0186365 +-0.0484985 0.160789 0.00748776 +-0.0928176 0.120043 0.0102955 +-0.0427809 0.0464775 -0.012357 +-0.0285046 0.0645461 0.0380462 +0.00349921 0.126284 0.0311054 +-0.0670064 0.156281 0.0226936 +-0.0656496 0.0339611 -0.00733584 +-0.00649844 0.0814993 0.0573243 +0.0421622 0.0427592 0.0252421 +-0.0873651 0.0927561 0.00443631 +-0.00151033 0.108645 0.043169 +-0.0908157 0.116185 0.0427025 +0.0200734 0.0372985 0.0402199 +-0.062954 0.125297 -0.00870732 +-0.0633546 0.0720236 0.0383997 +-0.0691914 0.171601 -0.0360136 +-0.0688255 0.0937312 -0.0163709 +-0.0485029 0.112572 0.035725 +-0.00574267 0.0339825 -0.0190499 +-0.0604857 0.094604 0.0446906 +-0.0257335 0.166803 -0.00931015 +-0.0159771 0.186924 -0.0221541 +0.0463322 0.0743214 0.0180018 +0.0030519 0.130996 0.00365966 +-0.0421665 0.16366 -0.0107342 +-0.0225871 0.168294 -0.0117855 +-0.0484917 0.0718083 0.0405326 +0.0122698 0.0710113 -0.031719 +-0.0857101 0.0869161 0.0258492 +-0.0715046 0.0901731 0.0417302 +-0.0699133 0.123828 -0.00875488 +0.0279019 0.110786 -0.0114065 +-0.0354864 0.12379 0.0245568 +0.0305321 0.081181 -0.0200863 +0.0102651 0.128706 0.0263309 +0.0148603 0.0562539 0.0494599 +-0.0366932 0.0665933 -0.0149481 +0.041469 0.0711384 0.0300167 +-0.0554857 0.0834027 0.0450839 +-0.0113051 0.0389162 -0.0134542 +-0.0701665 0.143936 0.0443089 +0.0424986 0.0527982 0.0326152 +0.0132 0.115178 -0.01612 +-0.0566151 0.0335713 0.0115144 +-0.0746759 0.158036 -0.00628607 +-0.0710897 0.0678996 0.0280309 +-0.0684162 0.160948 -0.0539628 +-0.0788405 0.11444 0.0481937 +0.0425653 0.0859482 -0.00679004 +0.00508264 0.128731 0.0273249 +-0.0460392 0.132757 0.0146796 +-0.0644245 0.0335892 0.00631261 +-0.0779562 0.0727271 0.0259414 +-0.0320811 0.1577 -0.0118106 +-0.08561 0.123026 0.0486561 +-0.0183468 0.0445922 0.0521871 +-0.0646788 0.0378404 0.0247428 +-0.09254 0.118824 0.0413658 +0.0439353 0.0973509 0.0141605 +-0.0925657 0.116008 0.0123183 +-0.00476329 0.0770151 -0.03731 +-0.0647922 0.176686 -0.0531637 +-0.0267774 0.122204 0.0247423 +-0.0331437 0.169673 -0.0156322 +-0.0663865 0.0388997 0.0348294 +0.0255945 0.0477251 0.0385093 +0.0336609 0.0968599 0.0382997 +-0.0916539 0.147467 0.0181472 +-0.0336992 0.0435791 0.0473765 +-0.0785063 0.162438 -0.0279579 +-0.0756712 0.0759423 -0.00884701 +-0.0623186 0.155306 -0.0155862 +-0.0754942 0.124603 0.052984 +-0.0710841 0.0626658 0.0113319 +-0.0214966 0.101664 0.0441706 +0.0325091 0.0454335 0.0302933 +0.023348 0.0930459 -0.0224955 +-0.0477168 0.123954 0.0291105 +0.026559 0.119879 -0.0019388 +-0.0671262 0.150692 -0.0396095 +-0.054551 0.0416447 -0.00949548 +-0.0689 0.115705 0.0512836 +0.0420833 0.0409609 0.00227771 +0.021477 0.0961774 0.0469631 +-0.0517663 0.0812234 -0.0211522 +0.0324154 0.0541402 -0.0117355 +-0.0283184 0.0383801 -0.00152859 +-0.0454995 0.122409 -0.0114255 +-0.0786209 0.174303 -0.0444916 +-0.0570614 0.151623 -0.00120922 +0.0242791 0.118022 0.0317589 +-0.0639993 0.0370815 0.0170442 +-0.0395018 0.0733502 0.0421461 +-0.0174724 0.0388154 -0.0145918 +-0.0829949 0.115554 0.048125 +-0.0155328 0.0386551 0.0297691 +-0.00449743 0.110031 0.0429169 +-0.062341 0.164692 -0.0435908 +-0.016985 0.0384848 0.0278228 +0.0153998 0.109294 -0.0177665 +-0.0121134 0.0347053 0.046472 +0.0238752 0.0421864 0.0394869 +-0.0510476 0.139892 0.00172061 +-0.073661 0.147179 -0.0178577 +-0.0673436 0.155169 0.0284164 +-0.0375089 0.0790164 0.0426336 +-0.0881282 0.0888644 0.0224361 +-0.0165385 0.0459978 0.0505746 +0.0187298 0.0489829 0.0426596 +0.00514365 0.0400743 0.045751 +-0.0405081 0.080404 0.0427771 +-0.0559081 0.112628 -0.0165116 +-0.0414824 0.100082 0.0415393 +0.0326734 0.101648 -0.0136311 +0.0591059 0.0677548 0.00712748 +-0.00525238 0.0350087 0.0405181 +0.0272291 0.0788716 -0.0231926 +0.0526679 0.0554283 0.0285725 +-0.074839 0.15964 -0.0289433 +-0.0475589 0.0335011 0.00261705 +0.0224079 0.0809035 0.0500644 +-0.0774544 0.072993 0.0275707 +-0.0817516 0.140386 -0.000790241 +-0.0203273 0.127615 0.0123404 +-0.0570931 0.0535244 0.00162534 +-0.0775213 0.124569 0.0523637 +-0.0267733 0.15662 -0.0020223 +-0.0341168 0.0383136 -0.000825234 +-0.0926373 0.122856 0.0322729 +0.00549857 0.09243 0.054294 +0.0202616 0.0749268 -0.0272874 +0.0133552 0.13008 0.0103074 +0.0423653 0.0519948 -0.00681796 +-0.0627003 0.150649 -0.00857321 +0.0200754 0.0713524 0.0501382 +-0.0182235 0.123174 0.0292543 +-0.0130686 0.183424 -0.0252779 +-0.0128628 0.0896836 -0.0372956 +-0.0301706 0.0421547 -0.0296993 +0.0403707 0.0444834 -0.00362771 +-0.0253772 0.0722169 0.0453002 +-0.0241328 0.0565311 0.0416958 +-0.0657729 0.0378142 0.038507 +-0.0475733 0.0504004 -0.00924022 +0.0347756 0.0548514 0.0342768 +-0.01273 0.098974 -0.0248693 +-0.0749897 0.139866 -0.00647617 +0.0541381 0.0477755 0.0182012 +0.026052 0.121668 0.00219807 +-0.0178133 0.0827451 -0.0392154 +-0.00506384 0.129812 0.0236663 +-0.0022335 0.116052 -0.016996 +0.0194826 0.0892535 0.0485994 +-0.00549695 0.108658 0.0435455 +0.0411799 0.0844321 -0.00979241 +-0.0546525 0.154186 0.0155249 +0.0209039 0.0386887 -0.00868617 +-0.0522987 0.0504261 0.0316576 +-0.00860205 0.0406149 -0.0260948 +-0.0064872 0.119657 0.0377321 +-0.0794636 0.141716 -0.00376694 +-0.0494618 0.0347575 0.043629 +-0.0282938 0.176171 -0.0172378 +-0.0337476 0.119587 0.029726 +-0.0548148 0.0883935 -0.0220325 +-0.0759162 0.179384 -0.0516058 +-0.0444968 0.0747696 0.0424527 +0.0361181 0.111694 0.0216233 +-0.0677747 0.0370061 0.0137537 +-0.0497774 0.0826759 -0.0213753 +0.0238372 0.12269 -3.58731e-05 +-0.0478227 0.148347 -0.00331487 +-0.00860618 0.0968801 -0.0306409 +-0.0545965 0.0575496 0.0196126 +-0.06512 0.0430832 -0.00329452 +-0.0719312 0.128266 -0.00893149 +-0.0409612 0.0344092 -0.00782476 +0.0534457 0.0510274 0.0243391 +0.0276856 0.0494518 -0.0176966 +-0.0336693 0.0607336 -0.0127906 +-0.0284587 0.0446173 0.0507119 +-0.0255118 0.0936195 -0.0293755 +-0.0717668 0.172238 -0.0510285 +-0.047089 0.156143 -0.00736831 +-0.0756553 0.0837701 -0.0135751 +-0.013224 0.172718 -0.0260103 +-0.0301691 0.174141 -0.0165339 +-0.00226303 0.0382357 0.0184109 +0.0412731 0.0417215 0.0241695 +-0.0559192 0.0335546 0.0152404 +0.0277966 0.12141 0.0199376 +-0.0649916 0.0659907 0.0309635 +-0.0512719 0.127504 -0.00467957 +0.0313718 0.118521 0.0155758 +-0.0621134 0.0350003 0.0423988 +0.00602626 0.127371 -0.00517179 +-0.0500909 0.0358963 0.0459805 +-0.0852266 0.0854944 0.0253873 +-0.0209874 0.04034 0.0536055 +-0.0719403 0.179282 -0.0559874 +-0.0521219 0.120842 -0.0117106 +0.0579437 0.0700837 0.0193768 +-0.0786649 0.0764169 0.0296559 +-0.0724896 0.12743 0.0524304 +0.0400371 0.107017 0.0091647 +-0.0677955 0.0355805 0.0137906 +-0.0212083 0.0825271 0.0563448 +0.0305816 0.112813 -0.00758269 +0.0546919 0.0524816 0.0244106 +0.000503407 0.0647904 0.0566018 +-0.0211614 0.183089 -0.0130948 +-0.0364897 0.0648519 0.0414613 +0.00739557 0.0347435 -0.0216037 +-0.091466 0.14613 0.0241501 +-0.0496442 0.0620141 -0.0117058 +-0.0844141 0.083121 -0.000497419 +0.00924009 0.0846665 0.0556174 +-0.00137013 0.0367929 0.00718583 +0.0499211 0.0443554 0.0178724 +-0.0257693 0.158564 -0.0117505 +-0.08951 0.140665 0.0311774 +0.0074706 0.129229 -0.00123166 +0.0318377 0.0822312 0.0425933 +0.0347555 0.0768972 -0.0157225 +-0.0103619 0.179472 -0.0295714 +0.0350602 0.0968439 0.0368099 +0.0192972 0.063662 -0.0278633 +-0.0758841 0.106327 -0.00893896 +0.0225495 0.119713 -0.00701355 +0.0522449 0.0480372 0.0225432 +-0.0142613 0.0350279 0.0492532 +0.0588535 0.0566417 0.00718098 +-0.0834209 0.0911774 0.0304851 +-0.0354827 0.0945899 0.0441989 +0.0491837 0.0442045 0.019604 +-0.0441515 0.0335185 0.00510187 +-0.0605024 0.111127 0.0368734 +-0.0368482 0.0336146 -0.0266993 +0.0043237 0.131753 0.0112849 +-0.0519904 0.135575 0.0286552 +-0.0628904 0.102548 -0.0180123 +-0.0194395 0.062521 0.0495605 +0.0173831 0.0447578 -0.0232543 +-0.0925995 0.118805 0.0322947 +0.00218481 0.0838969 -0.0348518 +0.0331279 0.0428909 0.0287274 +-0.0528013 0.0884055 -0.0219839 +0.0151848 0.115917 -0.0149184 +0.0567976 0.0508328 0.0181941 +-0.0621222 0.0345142 0.0394173 +-0.0642021 0.071089 0.0372614 +-0.0701839 0.0658802 0.0247105 +0.0178908 0.0563588 0.0485803 +0.0392199 0.073038 -0.0108301 +0.0263921 0.0549677 -0.020802 +-0.0858835 0.0833066 0.0204824 +-0.0812999 0.0747823 0.0185535 +0.0025057 0.0688921 0.0558596 +-0.0804035 0.0745659 0.0220984 +-0.0604943 0.0804378 0.0430854 +0.0220864 0.122759 -0.00230579 +0.0416849 0.100037 0.02216 +-0.0387577 0.150948 -0.00516845 +0.0420841 0.090131 -0.00780186 +0.0270265 0.12251 0.0139387 +-0.0715501 0.0763344 0.0374538 +-0.0885696 0.137819 0.0397738 +0.00156461 0.124373 0.0333352 +-0.00526883 0.0355403 -0.0166416 +-0.0769711 0.133968 -0.00621304 +-0.0750334 0.0851031 -0.01456 +-0.00549741 0.0675328 0.0561955 +0.00134414 0.0524973 -0.030237 +-0.0573916 0.0718042 0.0398933 +0.0283911 0.0672932 0.0427559 +-0.0910025 0.133774 0.0232232 +-0.0354998 0.17123 0.000174393 +0.0458285 0.0801218 0.0204223 +-0.0574741 0.0819362 0.0441691 +0.0510603 0.0729911 0.0094016 +-0.0363492 0.0338444 -0.0305686 +-0.024023 0.17718 -0.0120308 +-0.0625429 0.143922 0.0377415 +0.0323895 0.0490788 -0.00667281 +0.00525838 0.123196 -0.010701 +-0.0294162 0.0890096 -0.030595 +0.0479414 0.0588591 -0.00500215 +0.0158474 0.128954 0.00837281 +0.0170299 0.0590745 0.0491032 +0.0534095 0.0553934 0.0278769 +-0.0600285 0.134031 -0.00683616 +-0.0595027 0.0876292 0.04502 +-0.0323351 0.172733 -0.00297212 +-0.0374903 0.172653 -0.000576721 +0.00749482 0.0546914 0.0525351 +0.0383894 0.0519545 -0.00670373 +-0.0331162 0.0436399 0.0481995 +0.0444193 0.0734774 0.000193217 +-0.0392699 0.127033 -0.00231305 +-0.0377966 0.0870844 -0.0227292 +0.0398005 0.0712586 0.0329247 +0.0227875 0.0348957 0.00078699 +-0.0825515 0.0748682 0.00752949 +-0.0162407 0.125507 -0.00287714 +-0.0654856 0.0398574 0.0313799 +-0.0623389 0.163139 -0.0325913 +-0.0686122 0.0432054 0.00454593 +-0.0379623 0.174733 -0.00453553 +-0.0563002 0.154681 0.0207165 +-0.0455391 0.0396225 -0.0172907 +0.033177 0.0592197 0.0390624 +-0.030845 0.0944191 -0.0240931 +0.0149304 0.0913967 0.05159 +-0.0283564 0.125587 0.00796681 +-0.0364861 0.0547872 0.0389196 +-0.0284285 0.0821494 0.0466355 +-0.0626767 0.0346583 0.0408688 +0.0226817 0.0618915 0.0467691 +-0.00273397 0.0346073 0.0449802 +-0.0747362 0.0663817 0.0145125 +-0.0135041 0.11966 0.0364252 +-0.0466771 0.0355018 -0.0172702 +-0.0711048 0.153963 -0.0459144 +-0.0910141 0.11449 0.034742 +-0.0801763 0.0854684 -0.0085384 +-0.0199842 0.183117 -0.0149159 +-0.0705018 0.155741 0.00837641 +-0.0229946 0.0381678 0.00700416 +-0.0428236 0.0913841 -0.0227682 +-0.0679787 0.154919 -0.0513588 +-0.0787367 0.168047 -0.0389551 +-0.0308479 0.0972408 -0.0233409 +-0.0127769 0.0784711 -0.0383296 +-0.0528408 0.0970645 -0.0221327 +0.0578361 0.0662412 0.00314493 +0.0132266 0.0822053 -0.0304726 +-0.058487 0.113928 0.0361856 +-0.0609416 0.0341022 0.0225725 +0.0498583 0.0540108 0.0297623 +-0.00985903 0.128582 0.0248602 +0.0180859 0.068641 0.0507282 +-0.0275932 0.0779206 0.0459339 +-0.0474983 0.11254 0.0358059 +-0.00306313 0.0346488 0.0430839 +-0.0494839 0.141682 0.00839735 +-0.0444006 0.0337168 -0.00238543 +0.0222885 0.0564166 0.0461469 +0.00464996 0.0378242 0.0256263 +0.00823548 0.113838 -0.0186606 +-0.0404969 0.0634536 0.0414219 +0.0464934 0.0638096 0.0291729 +-0.0275092 0.181505 -0.00874152 +-0.0850366 0.134888 0.000298852 +-0.053967 0.0687802 0.0379578 +0.0458863 0.0820184 0.0171704 +-0.0630174 0.113067 -0.0134471 +0.0163641 0.0348027 -0.00791773 +-0.0668226 0.0923514 -0.017257 +-0.073517 0.104058 0.0373151 +-0.0520334 0.0346252 0.0362685 +0.00147793 0.131501 0.00880182 +-0.0874177 0.131128 0.0459004 +-0.0124954 0.103038 0.0437348 +-0.0148129 0.0841518 -0.0390669 +-0.061937 0.111099 -0.0150221 +0.0286115 0.078186 0.0449305 +-0.0884601 0.0976543 0.0226015 +-0.0196643 0.111086 -0.0196461 +-0.0196772 0.178663 -0.0162873 +-0.0220478 0.0811409 0.0558034 +0.00850296 0.118331 -0.0155001 +-0.0404972 0.0506061 0.0393715 +-0.0833705 0.0767799 0.0142875 +-0.085765 0.112351 0.0286477 +0.0363022 0.0619082 0.0365841 +-0.000508059 0.0576316 0.0544767 +-0.089275 0.0969971 0.0184044 +-0.0708142 0.0694524 -0.00574088 +-0.0186131 0.0378854 -0.0277917 +0.0283679 0.103615 -0.0157324 +-0.0354292 0.0472715 0.0405203 +-0.0748611 0.163212 -0.0154286 +-0.0862421 0.14327 0.00816028 +0.0357067 0.0981492 -0.0118335 +0.0223181 0.0592817 -0.0260832 +-0.0625553 0.041701 -0.00649092 +-0.0824187 0.100645 0.0306028 +-0.0598691 0.101152 -0.0187591 +-0.0309758 0.0383278 -0.0168292 +0.0239145 0.0835849 0.0487444 +-0.00271812 0.0380275 0.0166967 +-0.00631097 0.0354995 -0.0168068 +-0.0435801 0.0491173 -0.010788 +-0.0586891 0.065984 -0.0090861 +-0.072851 0.148958 0.0401319 +0.0442902 0.0875035 0.0241471 +-0.0155441 0.165408 -0.0121335 +-0.084276 0.107651 0.0243439 +-0.0705376 0.04043 0.00377428 +-0.0107227 0.165105 -0.0188107 +-0.0550975 0.13533 0.0326236 +-0.0735773 0.0648576 0.0107478 +-0.0227215 0.0797443 0.0551012 +-0.0404988 0.043751 0.0418177 +-0.0507215 0.132501 0.0301542 +-0.0728912 0.11354 -0.00756484 +0.00242535 0.0343652 0.00462872 +-0.0556704 0.0335434 0.000932366 +0.00528142 0.0509933 -0.0292119 +0.0213389 0.0621093 -0.0262711 +-0.0275166 0.0348502 0.0465557 +-0.0826299 0.110259 0.0284001 +-0.00850001 0.125156 0.0314578 +-0.0707102 0.149836 -0.0414255 +0.0204972 0.107072 0.0404393 +-0.0215031 0.108553 0.041118 +-0.0404837 0.0818282 0.0429123 +-0.0586314 0.0580318 0.0162523 +-0.0648762 0.109524 -0.0137682 +-0.0687139 0.0394283 -0.00171366 +0.00150188 0.0938741 0.0550191 +0.027072 0.122359 0.0168201 +-0.0275307 0.0918372 0.0449329 +-0.00320104 0.131164 0.014241 +0.00886384 0.130684 0.0200808 +0.0402562 0.0857576 -0.0117696 +-0.0823675 0.147331 0.00217458 +-0.082659 0.0776741 0.0225196 +-0.0388763 0.107081 -0.0200218 +0.0151073 0.108635 -0.0180644 +0.0460054 0.0746307 0.0193568 +-0.0735009 0.117559 0.0527975 +-0.0337749 0.0338108 0.0177666 +0.032372 0.116958 0.0202394 +-0.0763319 0.15494 -0.00387485 +-0.0687774 0.0837142 -0.0175822 +-0.010498 0.0517545 0.0512545 +0.0210632 0.038679 -0.00769573 +0.0140028 0.091392 0.0520062 +-0.0842337 0.150005 0.032317 +0.0332536 0.0916169 0.0411931 +-0.0394897 0.0874644 0.0433271 +0.0207921 0.106393 -0.0166835 +-0.0368012 0.111669 -0.0181954 +-0.0495137 0.0503617 0.0366255 +-0.0314035 0.121359 0.0260922 +-0.0745094 0.140045 0.0479791 +-0.020484 0.0842242 0.0566713 +-0.00549585 0.0911858 0.0567127 +-0.0870672 0.0882048 0.024333 +-0.0377523 0.0783086 -0.0194038 +0.0407806 0.0717592 -0.0087638 +0.00365619 0.131646 0.00960837 +-0.0157548 0.0714554 -0.0386719 +0.0597099 0.0650292 0.0201784 +-0.0675187 0.0874976 0.0437834 +0.0405833 0.0670896 0.0305002 +-0.0180479 0.0418467 0.0526068 +-0.0427079 0.151894 -0.00649313 +-0.0220141 0.0388944 0.0538623 +0.00616925 0.0895403 -0.0330971 +-0.0064158 0.0391939 0.0347568 +0.0557201 0.0581302 0.0259556 +0.0563341 0.0711373 0.00671617 +-0.0727258 0.157431 -0.00265266 +0.0125423 0.120941 -0.012332 +0.00414764 0.103055 -0.021794 +-0.029166 0.0762862 0.0418904 +-0.0268469 0.0423164 0.0533212 +-0.0621198 0.0344764 0.0202314 +-0.0618524 0.169383 -0.0535961 +0.0250825 0.10872 0.0381638 +-0.0908254 0.142021 0.0251655 +-0.046283 0.129949 0.00285861 +0.0179105 0.0350278 -0.0116533 +-0.0397746 0.0826803 -0.0210594 +-0.0651763 0.16954 -0.0402745 +-0.0621336 0.16002 -0.0235787 +-0.0355709 0.168274 -0.000671324 +-0.037536 0.159586 0.00182669 +-0.0681305 0.148403 -0.0333773 +-0.0364875 0.100095 0.0421869 +0.0545857 0.0608947 0.0278753 +0.0195769 0.0347391 0.0223805 +-0.0765172 0.154938 0.0266851 +0.0329357 0.0710876 -0.0177809 +-0.0434945 0.111176 0.0370674 +-0.0144911 0.124164 0.030554 +-0.0644813 0.157544 -0.049277 +0.0162463 0.0722881 -0.029887 +0.0292794 0.111414 0.0337321 +-0.0730559 0.14548 -0.015959 +-0.032702 0.0694797 -0.021456 +-0.0682487 0.153053 0.0340661 +-0.0810659 0.143393 0.0434586 +-0.0508913 0.0474088 0.0186488 +-0.041491 0.0832013 0.0425516 +-0.0689521 0.151509 0.0368557 +0.00620362 0.0387395 0.045605 +-0.0437238 0.0739429 -0.018203 +-0.0589977 0.125247 -0.00779139 +0.0113495 0.0553023 -0.0296776 +-0.0665061 0.0972756 0.0420058 +0.00151221 0.0828796 0.0573767 +-0.000819486 0.131234 0.00795191 +0.0463579 0.0575632 -0.00556359 +-0.0223022 0.165377 -0.00961273 +0.0177451 0.0379283 0.0429098 +-0.0914397 0.143364 0.0211639 +-0.0366139 0.0493085 -0.0123994 +-0.0374871 0.0576725 0.0398228 +-0.0252778 0.0383536 -0.00088571 +-0.0593549 0.0410534 0.0179552 +-0.0667502 0.0337781 -0.00695475 +-0.0206534 0.0391059 0.0372895 +-0.0144184 0.0997913 0.0448499 +-0.0451841 0.16983 -0.00497124 +-0.017913 0.184413 -0.0239895 +-0.0265191 0.0388768 0.0380618 +-0.0908997 0.126938 0.0424248 +-0.000826517 0.0853922 -0.0362438 +-0.0534467 0.125409 -0.00644153 +-0.0368662 0.104233 -0.0205194 +-0.02728 0.181917 -0.0121056 +-0.0487731 0.0349958 0.0444688 +-0.0894993 0.135155 0.0302067 +0.0152294 0.0345961 -0.00794828 +-0.0135581 0.166929 -0.0145181 +-0.00316211 0.129199 -0.00103699 +0.0125106 0.108449 0.040622 +0.0494051 0.0734301 0.0147277 +-0.0427147 0.0710705 -0.0176966 +-0.0505553 0.136728 0.0232523 +-0.055076 0.154226 0.0167194 +-0.0598887 0.10828 -0.0169771 +-0.00348603 0.0489394 0.050606 +-0.0325038 0.107028 0.0393329 +-0.0558273 0.114722 -0.0152839 +-0.024429 0.062147 0.0418364 +0.0610039 0.0637491 0.0121545 +-0.0307981 0.0381678 0.00179566 +-0.0224893 0.0462052 0.0523041 +-0.0626699 0.13529 0.0374908 +-0.0871093 0.106357 0.0153576 +0.018535 0.0346925 0.0222104 +-0.0633642 0.142485 0.0383017 +0.0395752 0.0602985 0.0307005 +0.0196495 0.0356664 -0.00567711 +-0.00666974 0.0555272 -0.0330407 +-0.0554731 0.154191 0.0210182 +-0.00998984 0.177238 -0.0295136 +0.0366228 0.111865 0.00747742 +-0.00322809 0.0999661 -0.0238789 +0.00852647 0.0349744 0.0253569 +0.0337455 0.11169 -0.0043358 +-0.033869 0.10148 -0.022225 +0.0215013 0.108432 0.0393095 +0.027565 0.119234 0.026993 +-0.0477832 0.129154 -0.000397631 +-0.057288 0.0521607 0.00365094 +0.0119513 0.0873992 0.0542929 +0.0510679 0.0720267 0.021243 +-0.0525522 0.0487323 -0.0069784 +0.0419877 0.102851 0.0121565 +-0.0154922 0.126886 0.0243264 +-0.010476 0.0965182 0.0531854 +-0.0107078 0.0628117 -0.0359649 +-0.0848416 0.0858026 -0.00253503 +-0.0300028 0.125562 0.00590559 +-0.0137234 0.0643092 -0.0370705 +0.025242 0.0761745 -0.0249679 +-0.0268088 0.0852978 -0.0363495 +0.028746 0.0693043 -0.0217828 +-0.0525052 0.112524 0.0359139 +0.0608734 0.0637391 0.0151617 +-0.0820606 0.151973 0.00432386 +-0.065153 0.0712063 0.036955 +-0.0590564 0.0335255 0.00387291 +-0.0726667 0.0777379 -0.0132872 +-0.0639501 0.166025 -0.0326719 +0.033089 0.0892132 -0.0184699 +-0.0410037 0.148494 -0.000715623 +0.0152676 0.11708 -0.0141694 +-0.0405102 0.127658 -0.000961794 +0.0135046 0.108467 0.0407674 +-0.0598038 0.0341949 0.0280011 +-0.025416 0.0905129 0.0490114 +-0.0383992 0.0420226 0.0422608 +-0.0414999 0.0478558 0.040117 +-0.0525584 0.0501546 -0.00685551 +-0.0394783 0.0832832 0.0435432 +-0.0409872 0.0335947 -0.0218947 +-0.0234596 0.184384 -0.0119315 +-0.00549722 0.0633676 0.0561862 +-0.0249111 0.0958255 0.0441185 +-0.0794946 0.12171 0.0507273 +0.0218787 0.0430332 -0.0157248 +-0.0284679 0.0718578 -0.0335433 +-0.0287174 0.0344722 -0.0298467 +-0.0375646 0.0407082 -0.0285349 +-0.0684694 0.153743 0.0324784 +0.0275012 0.1187 -0.00304813 +-0.0654981 0.100096 0.041968 +-0.0728966 0.155445 -0.0329107 +-0.024103 0.171237 -0.0122056 +-0.0213641 0.0384977 0.0305062 +-0.00878734 0.0798675 -0.0379507 +-0.0034971 0.0703995 0.0574239 +-0.0628591 0.0679841 0.0349557 +-0.0205114 0.0512056 0.0456176 +-0.0215925 0.0364837 -0.0283556 +0.0308475 0.0751439 -0.0207339 +0.0345069 0.0483661 0.0310725 +0.00650269 0.044152 0.0457422 +-0.0404948 0.0733395 0.0422389 +0.00152573 0.0717149 0.0566366 +-0.00449638 0.110771 -0.0213478 +-0.0786622 0.0733343 0.0252726 +-0.00997021 0.129828 0.00744342 +-0.0368781 0.107107 -0.0201846 +0.0114979 0.112659 0.03891 +-0.0516419 0.126901 0.0340875 +-0.05391 0.13392 0.032587 +-0.0537085 0.0491368 0.0316573 +-0.086972 0.143283 0.00915353 +-0.0889751 0.0969295 0.00842099 +-0.0378902 0.121927 0.0281694 +-0.0870357 0.141902 0.00919077 +-0.056635 0.0350546 0.0452244 +-0.019816 0.0347801 0.0465131 +0.0392931 0.086096 0.0340337 +-0.0869334 0.0861006 0.0224549 +-0.0643967 0.0646443 0.0287462 +-0.0398612 0.101404 -0.0212384 +-0.0536876 0.0334698 -0.00403732 +-0.0785163 0.162478 -0.0269418 +-0.0638695 0.16329 -0.0240265 +-0.087202 0.10043 0.0240701 +-0.0736795 0.145791 -0.0128538 +0.0436314 0.0736519 0.026072 +-0.0326308 0.0352345 0.0485487 +-0.0158901 0.160985 -0.0130889 +0.0154243 0.0781303 0.053988 +0.00317805 0.0980649 -0.0258881 +-0.00360287 0.0419944 -0.0253901 +-0.0681856 0.169443 -0.0550153 +-0.0937199 0.12277 0.0132819 +-0.0335083 0.11115 0.0363293 +-0.0897769 0.0915868 0.0144438 +-0.00790609 0.0389527 -0.0109414 +-0.0512486 0.0474505 0.019655 +0.0299943 0.101654 -0.0156302 +-0.0688114 0.086573 -0.0173858 +-0.0425222 0.0435673 -0.0203211 +-0.0411345 0.037889 -0.0275181 +-0.0451234 0.0336213 -0.00611106 +-0.0513475 0.115214 -0.0158415 +-0.0135796 0.18457 -0.0255034 +0.0514482 0.0490026 0.000289284 +-0.0154766 0.160714 -0.011803 +-0.0871595 0.128427 0.0471391 +0.0253818 0.0487646 -0.0196147 +-0.0226623 0.0866242 0.0548392 +-0.00567144 0.0569411 -0.0332111 +0.046481 0.0764536 0.00918999 +0.0579995 0.0690441 0.020859 +-0.0371 0.126156 -0.00341777 +-0.073756 0.0716254 0.0312714 +-0.0320938 0.0457263 -0.0270587 +-0.0109396 0.165104 -0.0156606 +-0.088578 0.151544 0.0220955 +0.00637955 0.131641 0.0120332 +-0.00648723 0.114138 0.040862 +-0.058347 0.0335497 0.00759386 +0.00578775 0.0392649 0.0317966 +-0.0571091 0.140994 0.0314586 +-0.00487882 0.107372 -0.0225382 +-0.0806197 0.114932 0.047462 +-0.0334955 0.0874648 0.043047 +-0.0460993 0.132381 0.0175967 +-0.0638759 0.0334217 -0.000619218 +-0.0121322 0.038759 -0.00601251 +-0.0743637 0.153685 0.0319267 +-0.0445292 0.0547767 0.038815 +0.0265401 0.0686018 0.0436052 +0.0300756 0.0946988 -0.0182345 +-0.00649809 0.0703887 0.0571625 +-0.0574852 0.0861616 0.0444185 +-0.0204789 0.081458 0.0566556 +-0.045663 0.0367902 -0.0212772 +-0.0660163 0.156182 0.0230465 +0.0105014 0.112682 0.0391847 +-0.0863368 0.153207 0.0174967 +-0.0314199 0.0595176 -0.0174145 +-0.0903295 0.150229 0.0211233 +-0.0394972 0.0648803 0.0416583 +-0.0107858 0.0386823 0.0289151 +-0.0567014 0.0534733 -0.0003903 +-0.00348704 0.121028 0.0369539 +0.0367923 0.0967547 0.0340658 +-0.0206904 0.0538665 -0.0309758 +0.0171483 0.0535046 0.047456 +-0.052342 0.035529 0.0457534 +-0.0350351 0.0408695 0.0473482 +-0.0364795 0.0519621 0.0386972 +0.0339284 0.0669478 -0.0167571 +-0.0277715 0.0852268 -0.0356683 +0.00655622 0.121628 -0.0130526 +-0.0586532 0.0645395 -0.00761311 +-0.0582249 0.0344034 0.0351394 +-0.00633129 0.0388612 -0.00122239 +-0.0669198 0.113752 -0.0107887 +-0.0667337 0.0374088 0.0337222 +-0.00249774 0.0520145 0.0539036 +-0.0450377 0.0345968 0.0325315 +0.0242293 0.119847 -0.00515511 +-0.0932424 0.12021 0.0392849 +-0.0535442 0.129727 0.0348674 +-0.00517846 0.0367339 0.04845 +-0.0734548 0.0752713 0.0352251 +-0.0687371 0.155896 0.0104629 +-0.0471614 0.0336254 -0.00103179 +-0.00441737 0.117961 -0.0150091 +-0.0238639 0.0825121 0.0547585 +-0.0132802 0.102485 0.0435875 +-0.0649278 0.105334 -0.0156241 +0.0286778 0.116188 -0.00517917 +-0.0236663 0.0381653 0.00868472 +-0.0645999 0.0432992 0.0347148 +-0.0856886 0.0926246 -0.00156242 +-0.0835056 0.0777286 0.0204901 +0.0321567 0.107734 -0.010124 +-0.0895151 0.151559 0.0181181 +0.0110134 0.130158 0.00376449 +-0.0202842 0.16977 -0.0137262 +-0.00591514 0.12799 -0.00376372 +0.0143906 0.0373653 -0.0212799 +-0.0719296 0.11219 -0.00889601 +-0.0157228 0.0642918 -0.0372774 +0.0269219 0.115924 -0.00692402 +-0.0665225 0.0435914 0.00948645 +-0.0747288 0.102175 0.0369848 +0.0207343 0.120306 -0.00765281 +-0.0240392 0.0380418 0.0177619 +-0.0806691 0.107746 0.0299304 +0.0541727 0.0734662 0.0150335 +-0.0828869 0.0763004 0.0145215 +-0.0490771 0.154645 -0.00592496 +0.0211784 0.0973838 -0.0221644 +-0.0576844 0.0467193 0.0286753 +0.00985328 0.0602892 0.0527986 +0.0232608 0.0748451 -0.0261321 +-0.0524982 0.0862336 0.045539 +-0.0783198 0.147274 -0.0028373 +0.0082875 0.114937 -0.017843 +0.018445 0.0456517 -0.0226728 +-0.0239275 0.1816 -0.0100979 +-0.040758 0.0797297 -0.0196637 +-0.0485257 0.121087 0.0297472 +-0.0345208 0.0633716 0.0403553 +-0.00118398 0.0362533 0.0473478 +0.000189104 0.0867348 -0.0351526 +0.0231695 0.0520348 0.0420858 +-0.0324783 0.0337381 0.0144953 +-0.0597681 0.0334439 0.00560092 +0.0177557 0.0344112 0.00209212 +0.0159863 0.0860656 0.0513294 +-0.0393291 0.127134 0.01721 +-0.0628998 0.1209 -0.00884208 +0.04086 0.101423 0.0231764 +-0.0146702 0.122522 -0.00773793 +-0.0292113 0.156649 -0.000270817 +-0.0415254 0.172553 -0.00373349 +-0.0365135 0.084703 0.0437856 +-0.0208969 0.0381794 0.0236923 +0.011579 0.120136 -0.0134617 +-0.0347516 0.0383809 -0.00467189 +-0.0166266 0.172732 -0.0172138 +-0.0531086 0.126902 0.0355005 +-0.0154789 0.0347707 0.0439361 +-0.0110657 0.112343 -0.0190003 +0.0286979 0.0806527 -0.0216026 +-0.00681305 0.0345833 0.0441587 +-0.0245442 0.0708437 0.0459353 +-0.0613991 0.0718897 0.0389316 +-0.0682443 0.179461 -0.0589214 +-0.00573885 0.0698843 -0.0361103 +-0.0875967 0.100907 0.00640641 +0.0169866 0.0348952 0.0343866 +0.0228667 0.0444458 -0.0147763 +-0.0536029 0.162357 0.00297376 +-0.0723862 0.156822 -0.0359122 +0.000140075 0.103071 -0.0225088 +-0.0543692 0.0334679 -0.00234676 +-0.0771859 0.109877 -0.00559641 +-0.0922148 0.11614 0.0373108 +0.00616718 0.124896 -0.00854967 +-0.00125449 0.12189 -0.0112382 +0.0349132 0.114353 0.0126105 +-0.0534959 0.107052 0.0398334 +0.0553645 0.0492819 0.0192078 +0.0496613 0.0501912 -0.00270335 +-0.0917143 0.128313 0.0332436 +0.00552678 0.0619607 0.0559576 +-0.0252475 0.0736694 0.0465167 +-0.0656879 0.156227 0.015899 +0.0167178 0.128574 0.00869666 +-0.0616277 0.154191 0.00244865 +-0.0845352 0.136246 0.000324782 +-0.0835033 0.0804619 0.0265017 +-0.0380583 0.154792 -0.00920218 +-0.0683549 0.0382578 0.0114352 +-0.0713665 0.156324 0.018248 +0.0326986 0.0781958 0.0420379 +-0.0267044 0.158758 -0.0121466 +0.0274612 0.0417732 0.0323464 +-0.00748374 0.116886 0.0393445 +-0.0618946 0.0333508 -0.00558837 +-0.022958 0.166842 -0.0105567 +0.000373363 0.0349968 0.00734292 +-0.0437553 0.033642 0.00144997 +0.0267259 0.120866 0.0252428 +-0.0859248 0.0832079 0.00547822 +-0.00269975 0.109146 -0.0216168 +0.055733 0.052157 0.00319809 +-0.0704697 0.181218 -0.0537747 +0.00698645 0.0818884 0.0558396 +0.0424628 0.0943961 -0.00280162 +-0.0560128 0.0334549 0.00994988 +-0.000497737 0.11557 0.0407823 +0.0115122 0.104463 0.0449641 +0.0113328 0.124014 0.0325236 +-0.0257103 0.0983522 -0.0242349 +0.0385114 0.038461 0.00447642 +0.0274866 0.0994982 0.0416519 +-0.0205044 0.11679 0.0360351 +-0.0287307 0.0748955 0.0414817 +0.021677 0.0354914 0.00935068 +-0.0604978 0.109778 0.0376942 +0.0349482 0.114159 0.0154869 +-0.0891171 0.11284 0.0400327 +-0.0525174 0.133925 0.0310668 +-0.0467675 0.0811826 -0.0202513 +0.0148515 0.129255 0.0180171 +0.0134018 0.0418881 -0.0236384 +-0.0196836 0.0524593 -0.0309769 +-0.0907522 0.136478 0.0191999 +-0.0282073 0.178522 -0.0159874 +-0.0456817 0.146626 -0.00135754 +-0.0234782 0.174205 -0.0130294 +0.0157394 0.128861 0.0183169 +-0.049553 0.0432181 -0.0104928 +-0.0364431 0.0379518 -0.0296736 +-0.0342528 0.161016 -0.000502552 +-0.0106993 0.061373 -0.0355475 +0.0155546 0.034804 0.0269401 +0.0445305 0.0664178 0.0264316 +-0.0692603 0.166617 -0.0519986 +0.00900275 0.0343116 -0.0200681 +-0.0789639 0.13393 -0.00512141 +0.0183835 0.0490953 -0.0235496 +-0.0211568 0.177178 -0.0149257 +-0.0459855 0.0341655 0.0291843 +0.0234635 0.12256 0.0268857 +-0.0437241 0.0724973 -0.0179849 +-0.0492665 0.143175 0.00640774 +0.0310235 0.0363382 0.00298341 +-0.0703389 0.0353326 0.0107638 +-0.0505002 0.0762293 0.0432414 +-0.0641035 0.141307 -0.00745692 +-0.0474934 0.115292 0.0331905 +-0.050108 0.144746 0.0113816 +0.0325029 0.117364 0.00744623 +-0.0183192 0.124686 -0.00393431 +-0.00150748 0.059016 0.0544507 +-0.0104895 0.115533 0.0397944 +-0.023487 0.0435372 0.0536017 +-0.0655471 0.154522 0.00288522 +-0.0675989 0.156142 0.0239498 +-0.03165 0.0339865 0.0180432 +-0.0447604 0.0336698 -0.00424497 +-0.0348481 0.110331 -0.0188 +-0.0114927 0.0938853 0.0554733 +-0.0700706 0.155642 0.00707306 +0.0444883 0.05975 0.0312137 +-0.0788477 0.0773102 0.0306071 +-0.0712203 0.0706743 0.0326242 +0.00153616 0.078717 0.0572683 +-0.0243177 0.0607418 0.04177 +0.0445696 0.0677675 0.0254424 +0.0516179 0.0503639 -0.000756444 +-0.0610049 0.129668 -0.00770337 +-0.0731244 0.174613 -0.0403365 +-0.021137 0.166765 -0.0184531 +-0.068723 0.163208 -0.0142948 +-0.0415011 0.0676725 0.0415782 +-0.0829782 0.147345 0.00316952 +-0.056007 0.145723 -0.001571 +-0.023276 0.0768174 0.0529315 +-0.0303597 0.158405 -0.0122944 +-0.0594923 0.107014 0.0396564 +-0.0680504 0.156343 0.0223236 +-0.050518 0.054445 0.0327051 +-0.0324286 0.126663 0.0108668 +-0.0629263 0.108221 -0.0156274 +-0.0283572 0.0862879 0.0464179 +0.0304249 0.0399897 -0.00292852 +-0.0820851 0.106006 0.028693 +-0.081432 0.0776141 0.0263044 +0.0121657 0.0990535 -0.0228743 +-0.0148931 0.161809 -0.0143393 +0.0322568 0.0814321 -0.0193234 +-0.0249634 0.0631201 -0.0324542 +-0.0844782 0.152284 0.0269844 +-0.0284889 0.100156 0.0431683 +0.0335187 0.113275 -0.00203325 +0.0243141 0.0347256 0.0105738 +-0.0189924 0.127884 0.0157415 +-0.0555 0.0488797 0.0362241 +-0.0675079 0.104205 0.0395869 +-0.0181173 0.0384288 0.000495732 +-0.0138101 0.0841459 -0.0389466 +-0.0343542 0.0367977 0.0484644 +0.0170352 0.0393356 0.0436644 +-0.0255828 0.0620727 0.0401653 +0.0012257 0.0797035 -0.0352779 +-0.0033226 0.122983 -0.0103909 +0.0377895 0.0954381 0.0337234 +-0.0779478 0.107702 0.034147 +0.0309974 0.0673207 0.0412553 +0.0125192 0.0833344 0.053329 +-0.0569108 0.0471914 0.0407265 +-0.0765896 0.172837 -0.038783 +-0.0243798 0.168291 -0.0108587 +-0.0849208 0.114388 0.046865 +0.0270076 0.100021 -0.0178938 +-0.00936568 0.0388306 -0.00738531 +0.0124903 0.101789 0.047403 +0.0153634 0.050802 -0.0265798 +-0.051492 0.107057 0.0393982 +0.00022872 0.0769217 -0.0357549 +-0.073138 0.156184 0.0161734 +-0.0171943 0.171219 -0.0224352 +0.0282636 0.073195 -0.0229429 +-0.0554943 0.112513 0.0359102 +0.0268698 0.0448976 0.0368034 +-0.0567448 0.0548796 0.00465654 +0.00393342 0.0340406 0.014385 +-0.0269434 0.0864227 0.0492292 +-0.050859 0.0487888 0.015667 +-0.0524919 0.0762203 0.042799 +-0.025733 0.0751362 0.0469781 +-0.0870453 0.0846718 0.00449266 +-0.0765303 0.0961207 -0.0124976 +0.0303449 0.112749 0.0317399 +-0.070531 0.151779 -0.0453729 +0.0534729 0.0645627 -0.000631784 +0.0104112 0.0375138 -0.0230668 +0.0592863 0.0552837 0.0131736 +0.00525297 0.069736 -0.0335357 +0.0167263 0.0350159 0.0378322 +-0.0679113 0.0395796 0.0109828 +0.013918 0.129208 0.0205036 +-0.079478 0.142827 0.0451049 +-0.0708238 0.0631793 0.00551684 +-0.0687786 0.16979 -0.0301319 +-0.0187811 0.119777 -0.0107944 +0.021663 0.053586 0.0452157 +0.015783 0.0914175 0.0510677 +0.0258521 0.119872 -0.00319504 +-0.0172292 0.104564 -0.022745 +-0.0618136 0.0453397 -0.00172473 +0.0207685 0.0449736 0.0420523 +-0.0231964 0.0651165 0.0447582 +-0.0305175 0.0847809 -0.0315638 +-0.0658758 0.122838 0.0504663 +-0.0148324 0.107132 -0.0214612 +0.0460436 0.0778241 0.00519064 +0.00396334 0.0346642 0.000955872 +-0.000496537 0.0675633 0.0565514 +0.0342214 0.0813611 -0.0182381 +-0.0464961 0.0464761 0.0407845 +0.0547176 0.0680176 0.00187225 +-0.0580682 0.132534 -0.0063879 +0.0331199 0.0754691 0.0408773 +0.0401875 0.102783 0.0241636 +-0.0783656 0.151459 -0.000884796 +0.0238113 0.0754906 0.0485213 +0.0164183 0.0726599 0.0518741 +-0.0674097 0.173701 -0.0580011 +-0.0179511 0.175707 -0.0173471 +-0.0334973 0.0859864 0.0423406 +-0.0416172 0.17268 -0.00599082 +-0.0883846 0.119913 0.00130167 +-0.0154061 0.185475 -0.025609 +0.0464852 0.0429053 0.00427528 +0.0545912 0.0717149 0.021096 +-0.0661916 0.0334877 0.00245273 +-0.0495852 0.124005 0.0317323 +-0.0537144 0.0491343 0.0296614 +-0.0818927 0.122139 -0.0045131 +-0.0718108 0.0955414 0.0413269 +0.0221671 0.0444704 -0.016762 +-0.0798314 0.0733447 0.0205614 +0.0166594 0.125691 0.027245 +-0.0892473 0.0888575 0.0104669 +0.00551166 0.0504095 0.0521406 +-0.0627982 0.16724 -0.0607839 +-0.0646154 0.0457888 0.00269728 +-0.0485702 0.047508 -0.00937813 +0.026502 0.121591 0.0237374 +-0.0353601 0.152626 -0.00619729 +0.0403422 0.10564 0.0161674 +-0.0615416 0.034204 0.0241166 +0.0380593 0.0869714 -0.0147288 +0.0319925 0.114417 -0.00326976 +-0.0267368 0.0385445 0.0329521 +-0.0618964 0.108239 -0.0162152 +-0.063845 0.150027 0.0371387 +-0.0739579 0.155489 -0.0249104 +-0.0709691 0.153934 -0.0469289 +0.0249948 0.0405751 0.0353079 +-0.0304784 0.0381297 0.00370653 +-0.0247632 0.0741431 -0.0374571 +-0.0216593 0.0509046 -0.0292926 +-0.0446505 0.0592548 -0.0123035 +-0.0410267 0.172571 -0.00282243 +-0.060985 0.168641 -0.0594898 +0.0260213 0.111246 -0.0119 +-0.0224982 0.103036 0.0436276 +-0.0720537 0.0640001 0.00639175 +-0.08755 0.12805 0.000278104 +-0.0790371 0.0873264 0.0361062 +-0.055031 0.152471 0.0270238 +0.0537262 0.0622241 0.0283948 +0.0248385 0.107021 -0.0153684 +-0.0817292 0.154617 0.0205129 +-0.0776054 0.0804635 0.0348861 +-0.0644463 0.0769092 0.0410862 +-0.0737119 0.082093 -0.0148287 +-0.0782342 0.0694181 0.011104 +-0.0678631 0.0335656 -0.00155997 +-0.0771555 0.15282 -0.00488816 +0.028309 0.049176 0.0371723 +0.0122273 0.0342048 -0.000691958 +-0.0643947 0.15704 -0.046105 +-0.0276636 0.0522618 0.0383069 +-0.0587411 0.154535 0.0270999 +0.0275645 0.122014 0.00844231 +-0.0465457 0.0337901 0.0276252 +-0.0853906 0.110991 0.0352247 +-0.0338206 0.0367327 0.0490996 +-0.0145535 0.06115 0.0532234 +0.0367927 0.111755 0.0132988 +0.0458177 0.0820138 0.0181729 +-0.0444555 0.121377 -0.0123561 +0.0224202 0.0430392 -0.0127301 +0.0158478 0.102035 -0.022 +-0.0100884 0.0347013 0.0469069 +0.0374928 0.0498822 0.031843 +0.0351777 0.0559301 -0.00964394 +-0.00946358 0.169654 -0.0207426 +-0.0656264 0.15567 -0.0512009 +-0.0254805 0.0434932 0.0531599 +-0.0270955 0.0576776 -0.0274029 +-0.0228583 0.0350556 -0.0196661 +-0.0139903 0.169817 -0.0169155 +0.0176377 0.0348968 0.0272836 +-0.0144859 0.107222 0.0429439 +-0.0291189 0.15522 -0.00190906 +-0.0411739 0.165162 -0.0113688 +-0.0123514 0.0384213 0.00530714 +-0.0527141 0.141625 0.0234145 +-0.0612038 0.154834 0.027675 +-0.0338487 0.098628 -0.022813 +-0.000859642 0.105926 -0.0219248 +-0.0203431 0.186558 -0.0166005 +-0.01883 0.0882728 -0.037792 +-0.0635094 0.0987058 0.0422669 +-0.000483407 0.0787781 0.0579546 +-0.0700187 0.074071 0.0369567 +-0.0201986 0.186115 -0.0151371 +0.00141145 0.0376391 -0.024717 +0.0439647 0.0888964 0.0241631 +-0.0774025 0.100791 0.0354679 +-0.078513 0.145668 0.0427459 +0.0241305 0.0618675 0.0453428 +0.0109129 0.0833325 0.0545132 +-0.0798758 0.117757 -0.00451351 +0.0302928 0.119677 0.0137476 +0.0354021 0.0399255 -0.00156043 +-0.0489211 0.0687544 0.0390214 +-0.0493842 0.0558982 0.0343669 +-0.0524939 0.0776533 0.0431774 +-0.00761105 0.112944 -0.01965 +-0.0631004 0.038056 0.0429096 +-0.078061 0.117721 0.0511362 +-0.0228935 0.0375359 -0.0182249 +0.0168546 0.104974 -0.0191686 +-0.062493 0.0385506 -0.00796777 +-0.0814183 0.138999 -0.00180871 +-0.0585811 0.0344322 0.0332983 +-0.0299241 0.172727 -0.00652243 +0.0112861 0.130316 0.0195341 +-0.0325036 0.10978 0.0375732 +-0.0826224 0.141799 0.00118353 +-0.0805022 0.0831735 0.0334637 +0.0122352 0.0808526 -0.0312408 +-0.0771876 0.0907032 -0.0125611 +-0.0140608 0.038299 0.0231793 +-0.0386607 0.116212 -0.0149511 +-0.0276455 0.0376114 0.0210157 +-0.0832306 0.0871025 0.0304136 +-0.0334887 0.0471143 -0.0243565 +-0.0400971 0.153595 0.0050429 +-0.0647302 0.154215 -0.0408208 +-0.0194396 0.0527865 0.0471813 +-0.0665534 0.156088 0.0243177 +0.00850109 0.107119 0.0411949 +-0.0740753 0.174982 -0.0510829 +-0.0131928 0.11434 -0.0171133 +-0.00874908 0.0742103 -0.037697 +0.00967799 0.130572 0.00468392 +0.0318663 0.0862689 0.0426688 +0.0197994 0.0399634 -0.0167042 +0.0141672 0.0347073 0.00296826 +-0.0334912 0.0604137 0.038899 +-0.010802 0.0812949 -0.0382665 +-0.0626127 0.0339199 -0.00909656 +-0.0225179 0.0594554 0.0442529 +-0.0744235 0.152695 -0.0268913 +-0.0148262 0.181632 -0.021586 +-0.0501691 0.0348773 0.00986405 +0.0104481 0.102845 -0.020901 +-0.0127527 0.177163 -0.0221029 +0.008145 0.103004 -0.0207662 +-0.0548867 0.101301 -0.0205491 +-0.0772028 0.162464 -0.0309387 +0.0379552 0.0588939 -0.00773658 +-0.0134957 0.0925258 0.0558596 +0.0248886 0.0970269 -0.0206985 +-0.0393214 0.0342416 -0.0147308 +-0.0458838 0.129671 0.00293555 +-0.0574217 0.135337 0.0345321 +-0.0820284 0.13533 -0.00235647 +0.038582 0.0659177 0.034606 +-0.0494896 0.157875 0.00921755 +-0.0225598 0.125982 0.00280455 +0.0216881 0.102085 -0.0200779 +-0.0136509 0.0496769 -0.0312069 +-0.0615955 0.15529 0.0260796 +-0.0115193 0.0773584 0.0574493 +0.0404486 0.0745397 -0.00879543 +-0.057886 0.0969698 -0.0206731 +-0.0109392 0.038438 0.0236915 +-0.0148475 0.162865 -0.0159421 +-0.0183748 0.0353493 0.0515278 +0.029169 0.114081 0.0318014 +0.0232083 0.0449556 0.0403488 +-0.0234883 0.122057 0.0276339 +0.0359605 0.0936242 -0.0130764 +-0.0175335 0.0392471 0.0378093 +-0.0308588 0.171231 -0.00613945 +0.0247031 0.0463341 0.0389677 +-0.0925247 0.128292 0.0282327 +-0.0665656 0.122847 0.0512252 +0.0584586 0.0607609 0.022909 +-0.00884754 0.115581 -0.0164541 +-0.00309453 0.0984522 0.0515066 +0.0115015 0.119616 0.0358941 +-0.0494977 0.0903933 0.0446494 +-0.0126691 0.0348865 0.0479592 +-0.0149576 0.0897382 -0.0373658 +-0.0152002 0.174208 -0.0254562 +-0.0756281 0.167353 -0.024657 +-0.0627225 0.0402195 0.0247088 +-0.058955 0.151077 0.0341866 +-0.00932165 0.17502 -0.028678 +-0.0123491 0.183911 -0.0264322 +-0.0896074 0.135171 0.0322127 +-0.0426789 0.168728 0.0023488 +-0.0748775 0.0739125 0.0325733 +0.03891 0.10882 0.00971935 +-0.0633729 0.0431313 0.0286681 +-0.0551792 0.0336096 0.018904 +0.0268834 0.0875842 0.0460207 +-0.0168782 0.0351038 0.0503404 +-0.00549453 0.0590678 0.0548923 +-0.0286315 0.0383676 -0.00896928 +-0.0332631 0.177035 -0.011981 +-0.0748045 0.167943 -0.0420608 +-0.0851109 0.0939488 -0.00257672 +0.00096833 0.121103 -0.0124156 +-0.0558825 0.0465312 0.026676 +0.00712802 0.0975509 -0.0252935 +-0.00450103 0.0746726 0.0587526 +-0.0754962 0.141423 0.0471972 +-0.0514204 0.0548853 0.0209522 +-0.0107189 0.0642451 -0.0362023 +0.0428473 0.0944698 0.0251639 +0.0161732 0.12869 0.00706423 +0.0172673 0.128465 0.0103258 +-0.0624218 0.113827 0.0376933 +-0.0694289 0.039567 0.00968578 +-0.00956353 0.172645 -0.0227849 +-0.036529 0.0344176 0.0112583 +0.00747563 0.0378784 -0.00876072 +-0.0105064 0.0884021 0.0567868 +-0.0306153 0.0495713 -0.0203608 +-0.0832173 0.13898 0.000315163 +-0.00610064 0.0339097 -0.0209348 +-0.0081869 0.0386049 0.00598379 +0.0213573 0.057915 -0.0266602 +0.0391712 0.0402919 0.0231925 +-0.0346283 0.0533938 -0.0102529 +-0.00324688 0.0367886 -0.0155194 +-0.0734226 0.0711647 -0.00664488 +-0.0628413 0.144409 -0.0076345 +-0.0258745 0.104437 -0.023108 +-0.0100477 0.178214 -0.0295899 +-0.0839857 0.132609 0.0495198 +-0.0498484 0.121182 -0.0121 +0.0108333 0.130856 0.0150885 +-0.0104958 0.0939039 0.0555039 +-0.0863431 0.112514 0.0302243 +0.0475429 0.0429463 0.00623912 +-0.0334893 0.050539 0.0382432 +-0.0209099 0.158178 -0.00579641 +0.011514 0.10312 0.0464311 +0.0350456 0.0627954 -0.0138277 +-0.0161876 0.171234 -0.0230543 +-0.0268555 0.0987274 -0.0239779 +0.0118541 0.0404814 0.0449158 +-0.0104973 0.0856567 0.0572952 +0.0271955 0.0520724 0.0391174 +0.00248489 0.105788 0.0426651 +-0.0037871 0.0812341 -0.0371832 +-0.0231675 0.184436 -0.0160624 +-0.0612844 0.044277 0.027687 +0.0239731 0.061977 -0.0246362 +-0.00946933 0.0932363 -0.0348935 +-0.0178949 0.0971863 0.0483787 +-0.00196639 0.0392296 -0.0118812 +-0.0067485 0.0755804 -0.0372256 +-0.00967937 0.0555867 -0.0337759 +0.000980617 0.120181 -0.0134191 +-0.0806495 0.10968 0.039129 +0.0358807 0.0812282 -0.0166923 +0.0146499 0.0699433 0.0528108 +-0.034478 0.0590226 0.0391844 +0.0203856 0.0348183 -0.00149748 +0.0142674 0.0709686 -0.0310685 +-0.0334971 0.119329 0.0299275 +-0.0341948 0.0435484 0.0464376 +-0.00450247 0.056202 0.0539356 +-0.0721189 0.15515 0.0282101 +-0.000346509 0.12561 -0.00723663 +-0.0756644 0.0774182 -0.00947264 +0.014908 0.106309 -0.0185911 +0.0267515 0.102116 0.0406018 +-0.0626019 0.174089 -0.0546038 +-0.0574874 0.0805202 0.0440851 +-0.0609158 0.169795 -0.0608698 +0.0438296 0.0973504 0.015162 +-0.072512 0.104082 0.0376881 +0.0359801 0.0821479 0.0380155 +-0.0573808 0.129734 0.0381066 +-0.0236825 0.0566574 -0.0305632 +-0.0351787 0.0336265 -0.0226404 +-0.0257826 0.0783385 -0.0372231 +-0.0733446 0.159645 -0.0339252 +-0.024717 0.169741 -0.0113487 +-0.0597904 0.0825229 -0.0201763 +-0.0638365 0.0996097 -0.0175199 +-0.0897172 0.118919 0.0457459 +0.00851027 0.105753 0.0425683 +-0.0857293 0.121702 0.0488414 +-0.00654714 0.043 0.0484741 +-0.0524991 0.109798 0.0378325 +0.0089719 0.130372 0.00300057 +-0.0912936 0.114724 0.0218532 +-0.0758153 0.155373 0.0254598 +0.0443256 0.0931523 0.0201621 +-0.00159763 0.0391157 -0.0252097 +0.0358716 0.112393 0.0201061 +-0.0582724 0.0345955 0.0435663 +0.0444341 0.0861163 0.024155 +-0.0798668 0.12036 0.0500614 +-0.0486801 0.12235 -0.0113455 +0.044671 0.0931702 0.0171607 +-0.0867731 0.0820034 0.0144903 +-0.0444986 0.0465011 0.0409291 +-0.0132439 0.178631 -0.0284206 +-0.0014976 0.0856652 0.0573264 +-0.0555627 0.0351736 0.0453577 +-0.0757755 0.0948358 -0.0134771 +0.0116939 0.0459283 0.0447695 +-0.0334941 0.0690232 0.0409338 +-0.0717098 0.161007 -0.0419418 +-0.0620707 0.163126 -0.0385937 +0.0188526 0.103753 -0.0198618 +-0.0699102 0.14965 -0.0409667 +-0.0405063 0.0902417 0.0426463 +-0.071716 0.148756 -0.0367532 +-0.0218007 0.0637891 0.0462553 +0.0567259 0.0536428 0.00417778 +-0.0893948 0.09291 0.012442 +-0.0603715 0.133894 0.0372893 +0.0314991 0.054058 -0.0137198 +0.0203015 0.126964 0.0128708 +-0.0845068 0.120355 0.0490624 +-0.0624258 0.0342984 0.0291094 +-0.0395093 0.0930879 0.0428865 +-0.0277909 0.0380629 0.00793761 +0.0321502 0.106752 -0.0110706 +0.0298444 0.106115 0.0363002 +-0.054857 0.0970227 -0.0215362 +-0.0397671 0.127634 -0.000654541 +-0.0249592 0.0767123 0.050372 +-0.0265277 0.10717 0.0404632 +-0.0283702 0.0535742 -0.0233936 +0.00450189 0.050474 0.0524519 +0.00174762 0.0944417 -0.0320379 +-0.0810711 0.076096 -0.000474637 +0.0169426 0.11422 -0.015094 +-0.0380634 0.127686 0.00145512 +-0.0320932 0.0877303 -0.0254981 +-0.0569735 0.056267 0.00463231 +-0.0692551 0.175557 -0.0461164 +-0.0461819 0.130936 0.0220239 +0.0424151 0.101486 0.0141591 +-0.0816004 0.110405 0.0418977 +-0.0486814 0.0634873 -0.0123857 +-0.0354984 0.0491504 0.038916 +0.0232288 0.125257 0.0153837 +0.0251982 0.123641 0.0075622 +-0.0357278 0.07254 -0.0181295 +0.0451439 0.0802684 0.0230283 +-0.00649644 0.0605343 0.0557379 +-0.0697973 0.159564 -0.0489352 +-0.037469 0.120514 -0.011464 +-0.0869577 0.133848 0.0453706 +0.0185257 0.0352322 0.0362088 +-0.0206549 0.0768238 0.0545752 +0.0458945 0.0764062 0.00420006 +-0.0137194 0.091107 -0.0367438 +-0.0375014 0.106979 0.038117 +-0.0446156 0.0437685 -0.0132939 +-0.064545 0.156137 -0.0442784 +0.0275233 0.0621538 -0.0218174 +-0.0642285 0.0429095 -0.00424321 +-0.00460043 0.0434181 -0.0258683 +-0.0778454 0.158312 -0.0179205 +0.00252706 0.0800582 0.0567791 +0.0174798 0.0919971 -0.0254067 +-0.08982 0.133788 0.032216 +0.0343452 0.114918 0.0052408 +-0.0630651 0.167844 -0.0445874 +0.0164152 0.127597 0.00146207 +-0.0755176 0.120378 0.0530566 +-0.00615627 0.0994928 -0.025355 +-0.0501125 0.157587 -0.00554245 +-0.0332242 0.152554 -0.00262082 +0.0104732 0.0962984 0.0498872 +-0.0184975 0.111326 0.0402128 +-0.0228147 0.0826618 -0.0384205 +0.025553 0.0822419 0.0475803 +-0.0841632 0.11158 0.00227497 +-0.0198477 0.126879 0.00378288 +-0.069852 0.0951674 -0.0161643 +-0.0306901 0.0678681 -0.026462 +0.0155988 0.0699697 0.0524229 +-0.0167333 0.0642714 -0.0369951 +-0.0167796 0.121583 -0.00869919 +-0.0594953 0.0747194 0.0418121 +-0.0630515 0.152177 -0.00858675 +-0.0111714 0.129564 0.00700207 +-0.0890821 0.101017 0.0143926 +-0.0145147 0.116898 0.0378441 +-0.0462973 0.0368721 -0.0182757 +0.0251418 0.056415 0.0432482 +-0.0114906 0.0532044 0.051601 +-0.0514985 0.0931716 0.0440238 +-0.0536498 0.152894 0.0173581 +-0.0226294 0.157855 -0.00422736 +-0.0723402 0.0380689 0.00697334 +-0.0100211 0.0383173 0.0131334 +-0.0469913 0.0345734 0.0373898 +0.0117235 0.127254 -0.00315056 +0.0163555 0.0343012 4.3653e-05 +-0.000810177 0.084021 -0.0366442 +-0.0417008 0.153622 0.00625938 +-0.0695833 0.156717 -0.0509483 +-0.00967078 0.0541668 -0.0336446 +-0.0862734 0.13657 0.044609 +0.0363518 0.0562159 0.0330449 +-0.0528028 0.0666303 0.0365007 +0.0263615 0.0352587 0.00303932 +0.00111992 0.10872 -0.0203906 +0.00958242 0.0350342 0.0036093 +-0.0639107 0.108163 -0.0148371 +-0.00462988 0.0451748 -0.0282624 +0.00356053 0.130245 0.0239041 +-0.0428482 0.128274 0.00047704 +-0.0896015 0.136498 0.0242003 +-0.011119 0.163582 -0.018751 +-0.0521911 0.0531856 0.0256383 +0.02777 0.0808734 0.0454779 +0.0197898 0.0754906 0.0515075 +-0.0405912 0.0404909 -0.0262976 +-0.0184208 0.185917 -0.0222223 +-0.0738815 0.117926 -0.00764413 +0.0124741 0.0346639 0.0372734 +-0.057552 0.0336321 0.0166122 +0.0220421 0.0848959 0.0495666 +0.0184956 0.0962193 0.0472822 +-0.0577255 0.0578321 0.0166151 +0.00647696 0.11413 0.0402504 +-0.073854 0.100736 -0.0128364 +-0.0528758 0.0985097 -0.0219976 +0.0185485 0.111232 -0.0158588 +0.0257216 0.0672521 0.0441644 +-0.000523566 0.0428273 0.0465064 +-0.0354915 0.050532 0.0385401 +-0.0294972 0.0602632 0.0372614 +0.00410653 0.111609 -0.0202712 +0.0583904 0.0706508 0.00920486 +-0.0644959 0.084745 0.0443622 +-0.0182219 0.0954777 -0.0312615 +0.0163111 0.0608546 -0.0282401 +-0.0725001 0.120391 0.0535845 +-0.0164977 0.0828905 0.0574138 +0.0130474 0.0490028 0.046739 +-0.072956 0.173805 -0.0388399 +-0.0264766 0.0576077 -0.0284232 +-0.0644961 0.0602892 0.0183972 +0.0357477 0.074144 -0.0137952 +-0.0655596 0.171143 -0.0433207 +-0.0784904 0.133065 0.0521095 +-0.0651287 0.156206 0.0175513 +-0.0205565 0.183109 -0.0139659 +-0.0680156 0.156066 0.0121787 +0.0233417 0.0549864 0.0441504 +-0.0745084 0.134461 0.0510337 +-0.0489659 0.12587 -0.00699728 +-0.0422261 0.0339521 -0.0076663 +0.00337017 0.091416 -0.0329064 +0.040054 0.0998936 -0.00479776 +-0.0939204 0.128289 0.0212475 +-0.0301543 0.157156 -0.0110394 +-0.0456539 0.0606919 -0.0125779 +-0.0534986 0.0833862 0.0450488 +-0.047648 0.0614917 0.0367154 +-0.0486267 0.13356 0.00299082 +-0.0895466 0.0969995 0.0164128 +-0.0339552 0.0695264 -0.0185169 +-0.0176031 0.0711548 0.0545194 +0.0454033 0.0457238 -0.00184235 +-0.0546836 0.0478194 0.0276676 +-0.0875304 0.0861027 0.015468 +0.00919687 0.124582 -0.00824181 +0.0404579 0.0971405 0.0281735 +0.0219677 0.0346711 0.00269802 +-0.0114833 0.0618754 0.0549615 +-0.0209254 0.127401 0.0135903 +-0.0681737 0.074979 0.0383298 +-0.0357386 0.176065 -0.00515676 +0.0340797 0.115381 0.00660331 +-0.0207606 0.0670735 -0.0371287 +-0.075369 0.155134 0.0270903 +0.000773445 0.126081 0.0315854 +0.0414985 0.058326 0.0311197 +-0.03873 0.0340634 -0.0163036 +-0.0929281 0.121393 0.0102886 +-0.0680681 0.061235 0.0168081 +-0.0756991 0.0688679 0.00254149 +-0.0138611 0.0386244 0.0283378 +-0.0806333 0.120347 0.049427 +-0.0534714 0.115278 0.0343029 +-0.0365049 0.169731 0.000981263 +-0.0624922 0.100117 0.0423224 +0.00907886 0.126317 -0.00613291 +-0.0935493 0.125561 0.0262639 +0.022475 0.0933993 0.047467 +-0.015827 0.0921385 -0.0358122 +-0.0210449 0.0384562 -0.0168371 +-0.0207268 0.0612423 -0.0346723 +-0.0134967 0.109686 -0.0201653 +0.0456137 0.0708816 0.00289794 +-0.0090863 0.16966 -0.0247514 +-0.0889386 0.0888873 0.0194501 +-0.0532128 0.133944 -0.00360453 +0.0195053 0.0351963 0.0310168 +-0.0255119 0.104394 0.0424048 +-0.0174974 0.103031 0.0436129 +-0.0299173 0.0383162 -0.0299848 +0.00451386 0.0856474 0.057126 +0.0147725 0.0939169 -0.0254338 +0.0242867 0.0719771 -0.0256393 +0.0172719 0.0348529 0.0254373 +0.0558147 0.064873 0.0261542 +-0.0364911 0.0662596 0.041455 +-0.0758603 0.151341 -0.0198831 +-0.0616679 0.0643653 -0.00651734 +0.0383551 0.0603737 0.0324667 +-0.0477542 0.0782681 -0.0190718 +-0.0550269 0.0560444 -0.00440953 +-0.0395059 0.0972892 0.042147 +-0.0777926 0.167262 -0.0295303 +0.0604641 0.0623144 0.017179 +-0.0777137 0.177848 -0.0500546 +-0.0521757 0.0461175 0.0166821 +-0.0754874 0.130275 0.0528009 +0.0116887 0.0343979 -0.00472037 +-0.0617898 0.16156 -0.0335933 +0.0442649 0.0973538 0.00716867 +-0.0616258 0.0641254 0.029779 +0.00550935 0.0688576 0.0555484 +-0.053845 0.0955972 -0.0217935 +0.00741716 0.0375454 -0.0236134 +-0.0596132 0.113903 0.0363038 +-0.0508811 0.108424 -0.0190099 +-0.0437584 0.079737 -0.0197567 +-0.0733029 0.15632 0.000130521 +-0.003234 0.0960652 -0.0317479 +-0.0575581 0.0507849 0.00163524 +0.00435827 0.129372 -0.0013469 +-0.025212 0.123605 0.0223303 +-0.0669175 0.115159 -0.00990572 +-0.0722654 0.153589 0.032663 +-0.0147591 0.033582 -0.024214 +-0.00115893 0.11911 -0.0142672 +0.019441 0.0384709 -0.0146972 +-0.0772499 0.172214 -0.0459981 +-0.069531 0.14702 0.0417131 +-0.0343373 0.0443897 -0.0277936 +-0.0705699 0.152776 -0.0468148 +-0.0918951 0.117319 0.00831437 +0.0103421 0.0567446 -0.0299462 +-0.0336919 0.119642 -0.0105178 +-0.0629712 0.145905 -0.0115915 +0.00646739 0.0342464 -2.28584e-05 +0.00713618 0.103008 -0.0210892 +-0.018026 0.0384381 0.0276504 +0.0433583 0.0505545 -0.0063311 +-0.0882504 0.0900881 0.0054683 +0.00248872 0.118285 0.0387448 +-0.0227774 0.0713561 -0.0378898 +-0.0154972 0.122303 0.0324651 +-0.0322294 0.0708154 -0.0244722 +-0.025189 0.174162 -0.0196112 +-0.0871031 0.0846537 0.0064784 +0.00836869 0.0928852 -0.0303774 +-0.0424793 0.0958739 0.0423242 +-0.0640607 0.152536 -0.00179872 +0.00949301 0.118213 -0.015379 +0.0461867 0.0806341 0.00618373 +-0.0408599 0.102809 -0.0209257 +-0.0431187 0.159159 -0.0099383 +-0.0154785 0.0828416 0.0569929 +-0.0775215 0.161144 -0.0189221 +0.0358655 0.112954 0.0143927 +-0.0759551 0.131077 -0.00722143 +0.0465282 0.0726943 0.00507292 +-0.0784776 0.134439 0.0514602 +-0.0718916 0.0995338 0.0398851 +0.0174027 0.127944 0.018931 +-0.0494895 0.143125 0.00338457 +0.0333197 0.0357288 0.0133458 +0.0132595 0.0751478 -0.0304595 +-0.0324893 0.100164 0.0432113 +0.0343769 0.112004 0.0266888 +-0.0108703 0.180136 -0.0264173 +-0.0872312 0.1132 0.0437313 +0.0353616 0.106017 0.0302164 +-0.0282335 0.0382933 0.0310718 +-0.0646654 0.132541 0.0415985 +-0.0416682 0.0336125 -0.0201879 +-0.0690362 0.134069 0.0476421 +0.023852 0.057789 0.0449027 +0.0440963 0.0735854 0.0249308 +-0.0624573 0.163073 -0.0525854 +-0.0341025 0.169759 -0.00204136 +0.0589446 0.0649523 0.0051412 +-0.0602752 0.0336649 0.0124615 +-0.0628859 0.1495 -0.0200671 +-0.0722644 0.0671374 -0.000515551 +0.0135851 0.0658847 0.0529797 +-0.00198691 0.0368792 0.0142478 +0.0367682 0.0700097 -0.0138015 +-0.0296169 0.0408892 -0.0298249 +-0.0376612 0.0606745 -0.0122764 +0.00800811 0.0345328 -0.00370443 +0.0105539 0.104067 -0.0202515 +-0.0488192 0.0586801 0.0351334 +-0.0557857 0.0840569 -0.0214422 +0.0308153 0.0525508 -0.0137522 +0.0423969 0.0451283 0.0286278 +-0.0332147 0.036763 0.0499127 +-0.0736682 0.0730938 -0.00832442 +-0.0175484 0.124749 0.0265509 +-0.063425 0.163107 -0.0254606 +-0.0727351 0.0832969 0.03983 +0.0319929 0.088146 -0.0193446 +-0.0444371 0.122416 -0.011439 +-0.0858505 0.116285 0.047652 +-0.00444148 0.0916785 -0.0352643 +0.022957 0.0981907 0.0456622 +-0.053144 0.0595659 0.0253997 +-0.0788525 0.107465 0.0324362 +-0.0457478 0.130844 0.0207105 +-0.0684896 0.172346 -0.0400602 +-0.034733 0.0498868 -0.0123113 +0.0415062 0.0499285 0.0325086 +-0.0665679 0.0404538 -0.00528616 +-0.00650346 0.112991 -0.0197156 +-0.0448474 0.0999398 -0.0215303 +-0.0816586 0.137613 -0.00180043 +-0.0585618 0.124728 -0.00774237 +-0.0466281 0.0592297 -0.0120314 +-0.0670784 0.0653289 0.0275882 +-0.0835882 0.125784 0.0507488 +-0.0164643 0.0842755 0.0572298 +-0.0904705 0.135055 0.0132171 +-0.022546 0.116788 0.03495 +-0.0334891 0.091814 0.044517 +-0.0719917 0.151909 0.0358108 +-0.0151953 0.168341 -0.0151527 +-0.0590718 0.156479 0.0080978 +-0.0154402 0.120098 -0.0111735 +-0.036496 0.17271 -0.000384966 +0.0392898 0.0993144 0.028831 +0.024983 0.0795787 0.048494 +0.0483695 0.0734096 0.0143189 +0.0196959 0.0394038 0.04222 +-0.00886334 0.103392 -0.0235214 +-0.0118005 0.0841384 -0.0387163 +0.0252205 0.0888413 -0.0232794 +0.0298168 0.052105 0.0376191 +-0.0776927 0.169444 -0.0419634 +-0.0314915 0.057461 0.0373842 +-0.0504539 0.0558071 0.0326022 +0.0138422 0.0901622 -0.0294996 +-0.0510104 0.149266 0.0138316 +-0.0341485 0.0337694 0.0159272 +-0.085608 0.144617 0.0380805 +-0.0475132 0.0875996 0.0450977 +-0.091127 0.143391 0.0261688 +-0.0781968 0.0778917 0.0320122 +0.0284509 0.104793 -0.0149826 +-0.0223025 0.0957816 -0.0275832 +-0.0179573 0.123303 -0.00653742 +0.0369901 0.111103 0.00416682 +-0.0643667 0.159406 -0.0155654 +-0.0701684 0.165994 -0.0191552 +-0.0863906 0.0819518 0.00951177 +-0.0224965 0.100254 0.0443771 +-0.0757302 0.147214 -0.00986768 +0.0357939 0.0699287 -0.0148404 +-0.0376499 0.0577418 -0.0112619 +0.019292 0.0988007 -0.0225555 +-0.00992376 0.097544 0.0521376 +-0.0493712 0.0572598 0.0342952 +0.0255474 0.054922 0.0420386 +-0.0494259 0.144129 0.00171058 +-0.0624989 0.104282 0.0409609 +-0.0430319 0.0336432 -0.0167728 +0.0179185 0.121996 -0.0074786 +-0.0190623 0.127503 0.00554509 +-0.0474205 0.145822 -0.000777163 +0.0526083 0.0475984 0.0212218 +0.00022388 0.0797271 -0.0356555 +-0.0301525 0.168207 -0.0169318 +-0.00151732 0.0576213 0.0542293 +-0.00248496 0.0548872 0.0545581 +-0.0502022 0.12654 -0.00566411 +-0.0529063 0.0676787 0.0373317 +0.00249985 0.107203 0.0424791 +0.0029144 0.125773 -0.00745627 +0.00334453 0.0496343 -0.0297987 +0.00449641 0.11692 0.039168 +0.0399282 0.041091 0.0244564 +0.0178192 0.126124 0.0248053 +-0.0799402 0.132433 -0.00455304 +-0.0649027 0.179945 -0.0575726 +0.0404255 0.0914089 -0.00978781 +-0.065797 0.132562 0.0435297 +-0.0372368 0.172627 -0.0118528 +-0.0554974 0.10569 0.0407246 +-0.076892 0.165957 -0.0247772 +-0.0587093 0.0344925 0.0418625 +0.00823978 0.0768076 -0.0338586 +-0.0626545 0.150596 -0.0225786 +-0.0384668 0.0931237 0.0434147 +0.0141618 0.0576523 0.0502255 +-0.0683767 0.176522 -0.0580176 +-0.0129882 0.119781 -0.0128781 +0.00848559 0.0950467 0.0516302 +-0.0429797 0.127137 -0.00436425 +-0.0497252 0.141657 0.00538484 +-0.0179056 0.127636 0.0191062 +-0.0520277 0.0563658 0.0215194 +-0.02384 0.0968692 -0.0247025 +-0.0561697 0.0684762 0.0377129 +0.0120601 0.0343849 -0.00838478 +0.0299331 0.0362092 0.00288494 +-0.0763652 0.1528 -0.0108857 +-0.0736067 0.154075 -0.0289008 +0.00533532 0.0538992 -0.0301758 +-0.0599208 0.0394628 0.0453423 +-0.0184879 0.0856371 0.0571362 +-0.0208094 0.0376226 -0.0178912 +-0.0137231 0.183161 -0.0241068 +-0.0648137 0.0346657 0.0352478 +-0.0271872 0.0379033 0.0118238 +0.0264669 0.0477487 0.0380114 +-0.0723733 0.0352474 0.00704331 +-0.0322701 0.0835031 -0.0295487 +0.0272688 0.122366 0.00977001 +-0.0603093 0.0652594 0.0325934 +-0.00180254 0.0385071 0.00372255 +-0.0522762 0.123638 -0.00859751 +-0.0776201 0.171284 -0.03689 +-0.0802965 0.0872747 0.0345612 +-0.0889001 0.136394 0.00820864 +0.000412609 0.0393166 0.0342543 +-0.0642567 0.0344972 0.033776 +-0.0921303 0.11612 0.0363104 +-0.0679654 0.134068 -0.0084026 +-0.0839818 0.115583 0.0478751 +-0.00536465 0.129031 -0.000823415 +0.00514522 0.103044 -0.0216473 +-0.0496209 0.0517545 -0.00857532 +-0.0757023 0.177226 -0.0456228 +-0.0298766 0.05514 -0.0203901 +-0.0861039 0.0846923 0.0224682 +-0.0238144 0.0879301 0.05313 +-0.0611505 0.153585 0.0321143 +-0.0917527 0.113836 0.0170127 +-0.0374964 0.0591338 0.0402834 +-0.0187977 0.0799028 -0.0389405 +-0.0680553 0.17056 -0.0341587 +-0.0658521 0.0361993 0.0388506 +0.0111435 0.100252 -0.0225401 +-0.0425873 0.125894 -0.0070983 +-0.0265027 0.0498541 0.0461184 +0.00111147 0.110147 -0.0201294 +-0.00249391 0.119678 0.0379989 +-0.0117585 0.0742488 -0.0381827 +-0.0586841 0.0466878 -0.00234651 +0.0295244 0.0750328 -0.0218147 +-0.0218606 0.101624 -0.0238704 +0.0287102 0.0942447 0.0434182 +-0.0709345 0.0627948 0.0166551 +-0.0225064 0.10717 0.041634 +-0.0335027 0.074683 0.04142 +-0.092242 0.128315 0.0292604 +-0.0374976 0.0888821 0.0433743 +0.0303768 0.0578247 0.0402716 +-0.00891857 0.0338467 -0.0251248 +-0.0533378 0.162724 0.0010506 +-0.0869041 0.141929 0.0394374 +-0.047972 0.135544 0.0173874 +0.0485157 0.0597129 0.0310438 +-0.00667005 0.0904165 -0.0359686 +-0.0759966 0.0994807 0.0369297 +-0.0625222 0.149113 -0.00558111 +-0.0718118 0.14996 0.0389054 +-0.0844416 0.147376 0.00515339 +-0.0165344 0.0392124 0.0380479 +-0.079893 0.0949635 -0.0095262 +0.0236407 0.0347514 0.0177381 +-0.0196654 0.0683158 0.0524244 +0.0245994 0.0981921 0.0445203 +-0.0849795 0.0952966 -0.00257745 +-0.0528207 0.121242 0.0358805 +-0.0236049 0.0394052 -0.0289635 +-0.0332166 0.165305 -0.0043102 +-0.0251865 0.160795 -0.0139572 +-0.0865509 0.152927 0.0144746 +-0.0693964 0.157876 -0.00437702 +-0.0628145 0.169399 -0.0485883 +-0.0643644 0.153473 -0.0380226 +-0.081904 0.115723 0.0482136 +0.0101277 0.0911581 -0.0305812 +-0.0405043 0.0944618 0.0422679 +0.021919 0.118008 0.0336347 +-0.0203338 0.123782 -0.00500918 +0.0111252 0.108699 -0.019265 +-0.0574976 0.0776487 0.0433498 +-0.0354848 0.0987251 0.0428224 +-0.0651932 0.141087 0.0409428 +-0.0240513 0.0386342 -0.0120079 +0.039324 0.106993 0.0191699 +-0.0754947 0.142836 0.0460912 +-0.0122699 0.0338184 -0.0220638 +-0.0246982 0.0551057 0.0409028 +-0.0578691 0.105465 -0.0183362 +-0.0264983 0.10435 0.041876 +-0.07915 0.166638 -0.0349654 +-0.0578202 0.140285 -0.0045343 +0.0220783 0.0686046 0.0476717 +-0.0770892 0.107143 -0.00760422 +-0.0902136 0.13513 0.0232187 +-0.0723372 0.156305 0.0208189 +-0.0650055 0.135525 -0.0079735 +-0.0549293 0.154823 0.0139773 +0.0292317 0.0773621 -0.0219141 +-0.0817276 0.0964548 -0.00656413 +-0.018203 0.175668 -0.0239316 +-0.0553377 0.0457536 -0.00639551 +-0.0161975 0.0432999 0.0517769 +0.0304284 0.0383851 -0.001443 +-0.0345483 0.152531 -0.00560476 +-0.0629676 0.160574 -0.0208244 +-0.0935783 0.124186 0.0262856 +-0.0311645 0.0580869 -0.017406 +-0.0317989 0.0382037 0.00155838 +0.0576172 0.0686777 0.0217698 +-0.00505811 0.0339518 -0.0207718 +-0.0696447 0.166615 -0.0510113 +-0.0629867 0.155807 0.0241223 +-0.0340215 0.0794269 -0.0255119 +-0.0867747 0.0981404 0.0024092 +-0.0880604 0.13085 0.0022566 +0.0184887 0.0948214 0.0475148 +-0.021497 0.0988475 0.0444941 +-0.0416678 0.0592681 -0.0121392 +-0.0567258 0.0480405 0.0316684 +-0.0423133 0.129133 0.00872164 +-0.000508444 0.105851 0.0435843 +-0.0592465 0.046889 0.0316721 +0.0461219 0.0806353 0.0161697 +-0.0281528 0.0348412 0.0481365 +-0.0702797 0.180333 -0.0522624 +-0.0478122 0.134031 0.00640478 +-0.0077489 0.0713239 -0.0366154 +-0.0122439 0.168894 -0.023749 +0.0212552 0.0777078 -0.0266851 +-0.0917522 0.132325 0.0122241 +-0.0361034 0.165201 -0.01444 +-0.052501 0.0805516 0.0443114 +-0.0654153 0.0336345 0.00606909 +-0.0623235 0.139333 -0.00679766 +-0.0616576 0.170967 -0.0555865 +0.00174509 0.0392548 -0.00741822 +-0.0260001 0.0677977 0.0418131 +-0.0684331 0.0336931 0.00540027 +-0.0448348 0.0942101 -0.0220316 +-0.0731091 0.158237 -0.0329184 +0.0078778 0.0989406 -0.0227671 +0.0314417 0.115539 0.0270138 +-0.00906667 0.129748 0.004892 +0.00649868 0.108551 0.0413323 +-0.0382124 0.150071 -0.00262103 +0.0332799 0.0564373 0.0374441 +-0.00349826 0.0647878 0.0565544 +-0.0487816 0.084091 -0.021606 +-0.0568391 0.118972 -0.0116757 +-0.0644875 0.156696 -0.0456027 +-0.0411616 0.152146 0.00524032 +-0.0636742 0.142603 -0.0078783 +-0.0711318 0.0777267 0.0384114 +0.00321355 0.0796602 -0.0346071 +0.00447281 0.110003 0.0420134 +-0.0174998 0.0772311 0.0559767 +-0.0263139 0.182659 -0.010558 +-0.0322455 0.15809 0.00238998 +0.045843 0.0760483 0.0203743 +-0.0548028 0.0464121 0.0246755 +-0.0376206 0.0376543 -0.029358 +-0.0523414 0.0402098 0.0465679 +-0.0432186 0.121963 0.0262727 +-0.0321664 0.125608 0.018357 +-0.0857232 0.0792432 0.0155047 +-0.0782439 0.151233 0.0351897 +-0.0187146 0.058392 -0.0343021 +0.0452185 0.0847535 0.00320441 +-0.0640415 0.167322 -0.0369994 +-0.0823499 0.132665 0.0507367 +-0.0301219 0.0493909 -0.0214267 +-0.0843946 0.0818335 0.0225112 +-0.0246526 0.0386383 0.0332956 +0.0563147 0.0580894 0.0250386 +0.00021169 0.0389894 0.029096 +-0.00241379 0.126666 -0.00637642 +-0.0301429 0.0551656 -0.0193914 +0.0331811 0.0417541 0.0279348 +-0.0861938 0.104994 0.0213645 +-0.0824118 0.0788951 -0.000494108 +-0.0743937 0.157452 -0.00470821 +0.0187225 0.127515 0.0179893 +-0.0829047 0.0763015 0.0175246 +-0.0650238 0.0641454 0.0272956 +0.0355567 0.0878311 -0.0169845 +-0.0887171 0.117597 0.0462102 +-0.0760085 0.141318 -0.005968 +-0.0127703 0.0756733 -0.0384193 +-0.0158456 0.122449 -0.00760827 +-0.0842393 0.107513 0.00238784 +-0.0674898 0.0986608 0.0416951 +-0.0554949 0.0427291 0.0458455 +-0.0201912 0.0383436 0.00560257 +-0.0372682 0.0344921 0.0377782 +-0.0357437 0.0380351 0.0467216 +-0.0450103 0.054631 0.0385549 +-0.0369768 0.047531 -0.0185543 +0.0520769 0.0581909 0.0294992 +-0.0329038 0.153455 -0.00604291 +-0.0725184 0.128806 0.0519752 +-0.0270556 0.0706113 0.0413767 +-0.0285061 0.116641 0.0323888 +-0.0144886 0.109993 0.0419529 +-0.0285168 0.0803552 -0.0356291 +0.00952067 0.0702149 0.0551678 +-0.0355616 0.151785 -0.00432824 +-0.0826529 0.0796856 0.0277856 +-0.0365963 0.127614 0.0137714 +-0.0657008 0.139678 0.041893 +-0.0758694 0.0777615 0.0343673 +-0.00737907 0.0367231 0.0491533 +-0.0704775 0.114632 0.0510417 +-0.059558 0.128315 0.0402204 +-0.0538405 0.0941624 -0.0218364 +-0.0274601 0.124651 0.00100866 +-0.0637125 0.0705931 -0.0131267 +-0.0644549 0.043254 0.0326925 +-0.0746657 0.154121 -0.0198989 +-0.0348879 0.043516 0.0457289 +-0.0234602 0.17569 -0.0129988 +-0.0720698 0.176015 -0.0442709 +-0.043544 0.157959 0.00535766 +-0.0407405 0.0739506 -0.0180651 +-0.0696125 0.150354 -0.0430103 +0.0418343 0.0943991 0.0271656 +-0.0932461 0.129666 0.0232459 +-0.0398464 0.0957237 -0.0225845 +-0.0764914 0.171559 -0.0359139 +0.0408836 0.0614281 -0.00367417 +-0.0356978 0.0346221 -0.0180732 +-0.0895729 0.151493 0.0191084 +0.0263253 0.122966 0.0165355 +0.0113407 0.0567362 -0.0298085 +-0.0736511 0.180693 -0.0540178 +-0.042544 0.16227 0.00511409 +-0.0522198 0.0374253 0.0467614 +-0.0777691 0.0689598 0.0151422 +0.0463347 0.0428813 0.020444 +0.0509435 0.0554131 0.029582 +0.0233146 0.125046 0.00829766 +0.00834665 0.0958673 -0.0275066 +-0.00680856 0.127356 -0.00506622 +-0.0554704 0.157309 0.00940753 +-0.0754721 0.103526 0.0362863 +0.044978 0.086159 0.0221711 +-0.0716236 0.170198 -0.0283222 +-0.0196387 0.0464931 -0.0280998 +0.0569791 0.0686933 0.0226042 +-0.0233118 0.182976 -0.0180572 +0.0290367 0.060539 0.0418753 +-0.0708458 0.0980019 -0.0152545 +-0.044501 0.0562098 0.0390177 +-0.00787685 0.105931 -0.0227718 +-0.0774743 0.140015 0.0480697 +0.0275361 0.10477 0.0382193 +0.00254476 0.127971 -0.00383507 +0.0235041 0.108407 0.0388101 +-0.055098 0.146723 0.029184 +-0.0257112 0.0634738 0.0402437 +0.0222133 0.103397 0.0428172 +0.0239484 0.0901184 -0.0234122 +-0.0265532 0.080945 0.0504296 +-0.0801014 0.0881671 -0.00858727 +-0.0467634 0.0560036 0.0374321 +0.0562967 0.0661688 0.0251012 +-0.0323569 0.124066 -0.00320487 +-0.00891511 0.126415 -0.00600997 +0.0343206 0.094597 -0.0141158 +-0.0876587 0.151372 0.0112162 +-0.0723621 0.114661 0.051285 +-0.033385 0.126374 0.00317306 +-0.0465636 0.146777 -0.00183655 +-0.0086601 0.174145 -0.0268323 +0.0224333 0.0422246 0.0409441 +-0.0723219 0.171178 -0.0314543 +-0.0633454 0.159973 -0.0185957 +-0.0741825 0.156237 0.0158024 +0.0283215 0.117455 0.0287048 +-0.0518625 0.050332 0.0226347 +-0.0345112 0.112532 0.034973 +0.0102504 0.0766955 -0.0323547 +-0.0628937 0.146875 -0.0135938 +-0.0913593 0.126907 0.0414668 +-0.0755221 0.11896 0.0528247 +-0.0186351 0.0933648 0.0534492 +-0.00679579 0.0826768 -0.0377354 +0.00822704 0.0782053 -0.033734 +-0.0942744 0.126919 0.0202522 +-0.0462848 0.131856 0.0204922 +-0.05065 0.0706021 0.0388719 +-0.00522459 0.0384215 0.0122026 +-0.0524927 0.0987339 0.0429361 +-0.0388306 0.112851 -0.0174267 +-0.0268641 0.101582 -0.02361 +-0.0846396 0.153647 0.0136585 +0.0166715 0.0353808 -0.0156588 +-0.0553627 0.139574 0.0304759 +-0.0257886 0.0768981 -0.036857 +-0.0402218 0.0342366 0.0285657 +-0.045101 0.156152 -0.00816042 +-0.0348248 0.0473223 0.0413292 +0.0145592 0.0672414 0.0526521 +-0.0436275 0.0548777 -0.0111987 +-0.0248971 0.163359 -0.0156802 +-0.0449755 0.115277 -0.0159431 +-0.0492995 0.0345621 0.0403913 +-0.0257365 0.0348667 0.0503471 +-0.0754593 0.159053 -0.00907047 +-0.0632614 0.0601538 0.00426714 +-0.0265686 0.0382637 0.0296453 +-0.0355718 0.165308 -0.0024565 +-0.0727498 0.180616 -0.0549771 +-0.0381364 0.171203 -0.0118442 +0.0153228 0.0362397 0.00366285 +-0.0383106 0.0336688 0.00433881 +-0.0125102 0.0897843 0.0566766 +-0.0484982 0.0890084 0.0450201 +-0.0889791 0.0915153 0.00944503 +-0.0511466 0.124736 -0.0077758 +-0.00758688 0.0376797 -0.0254717 +-0.0509981 0.147813 0.0138388 +-0.0147745 0.0382944 0.014 +-0.0305049 0.0617476 0.0379767 +-0.0109155 0.0356188 0.0494667 +-0.0703667 0.142544 -0.0104932 +-0.0424925 0.0902452 0.0426486 +0.0099296 0.113714 0.0390911 +0.0145599 0.088488 -0.0297413 +-0.00249512 0.122376 0.0359373 +-0.0216559 0.0972103 0.0449705 +-0.0717874 0.0850294 -0.0163139 +0.0281202 0.0348895 0.0148787 +-0.0582075 0.154657 0.0258383 +0.0103893 0.0434318 -0.0247637 +0.0283214 0.115107 0.0315696 +-0.0408808 0.115001 -0.0156637 +-0.0569818 0.0548922 0.00263009 +-0.0347008 0.0666358 -0.0153327 +-0.0518449 0.146252 0.0164181 +-0.0388328 0.0943088 -0.0230504 +-0.0315145 0.0788556 0.0411289 +0.0268942 0.0988154 -0.0185978 +-0.0875561 0.0968363 0.00343541 +0.0426825 0.0805137 0.0283126 +-0.0683872 0.0690317 0.0328821 +-0.0609319 0.0343399 0.0363539 +-0.0258016 0.0867079 -0.0364604 +-0.0891389 0.120288 0.0465529 +-0.062692 0.155999 0.0140721 +0.0223974 0.0473356 -0.0199928 +-0.0616833 0.0676348 -0.0109359 +-0.0752375 0.0864841 -0.0145142 +0.014283 0.0681091 -0.0306905 +-0.0603219 0.0470192 0.0356706 +-0.015495 0.104397 0.0428489 +-0.0698499 0.0994423 -0.0150141 +-0.0293842 0.08757 0.0444817 +-0.00548831 0.112771 0.0416249 +-0.0120723 0.0353434 0.0494553 +0.0118631 0.0894057 -0.0307263 +0.0362901 0.0769906 -0.0138255 +-0.0372663 0.033541 -0.0229762 +0.0110129 0.0846936 0.0546683 +-0.0563673 0.0575771 -0.00141956 +0.0162242 0.0835192 -0.0290783 +-0.0466776 0.13337 0.0173732 +0.0116668 0.0548951 0.0518589 +-0.0175019 0.0758159 0.0556202 +-0.0865692 0.133541 0.00131146 +-0.0366797 0.0636525 -0.0138021 +-0.074087 0.0734714 0.0331119 +-0.0762512 0.156264 -0.00677505 +-0.0414995 0.168206 0.00296291 +0.0023065 0.128418 0.0277808 +-0.0141822 0.0378114 0.0510973 +-0.0674332 0.127053 0.0499702 +-0.0482072 0.0335431 -0.012174 +-0.072499 0.117558 0.0529308 +-0.0281279 0.03862 -0.0128123 +-0.0616129 0.149191 -0.00221638 +0.0436181 0.0416961 0.0210317 +-0.0758657 0.097813 -0.01246 +-0.0818672 0.120683 -0.00433302 +0.00940058 0.0342529 -0.0182643 +-0.018805 0.0625267 0.0503254 +-0.053876 0.126919 0.0361236 +-0.0884983 0.0941957 0.00744581 +-0.0165005 0.120964 0.0336371 +0.0433486 0.0519969 -0.00665823 +-0.0624811 0.149792 0.0367836 +-0.0615025 0.16984 -0.0615386 +-0.0364388 0.0352264 0.0443258 +0.0340769 0.0556934 -0.0107486 +-0.00261634 0.0450445 -0.0274328 +-0.0328486 0.0986298 -0.0228073 +0.0198481 0.0795335 0.0516115 +-0.0599778 0.148254 0.0362061 +-0.00849422 0.0674811 0.0555845 +-0.0530196 0.144246 -0.000696127 +-0.0836424 0.0924862 -0.00555232 +-0.0691184 0.165207 -0.0519806 +-0.0305063 0.111166 0.0367005 +-0.0447319 0.125394 0.0226968 +-0.0165708 0.056922 0.0510974 +-0.0568794 0.0548721 0.000601057 +-0.0355126 0.10012 0.0421792 +-0.00149054 0.131258 0.0163007 +-0.0814469 0.0761204 0.000521161 +-0.0700369 0.0765697 0.0383694 +-0.0791449 0.166643 -0.0339646 +0.0151117 0.0434234 0.0444141 +-0.0568399 0.0344097 0.0371692 +-0.0180623 0.177182 -0.017491 +0.0492456 0.0728121 0.0176064 +-0.0178752 0.105871 -0.0225888 +0.00334696 0.0342028 0.0159318 +0.0153617 0.0344714 0.021761 +-0.0945397 0.121475 0.0202819 +-0.073516 0.18065 -0.0535934 +-0.0934071 0.117385 0.0163015 +-0.0631359 0.0699525 0.0366992 +-0.0252161 0.0550594 0.0400126 +-0.00605897 0.125119 0.0321155 +-0.0360017 0.17408 -0.0118959 +-0.00638198 0.124385 -0.00985914 +-0.0145975 0.0378025 -0.0168233 +0.00417447 0.127894 0.028461 +-0.0410286 0.0345047 0.0334549 +0.0292997 0.0538256 -0.0177694 +0.0372061 0.0980869 0.0328651 +-0.0745356 0.104026 0.0368301 +-0.00436707 0.0386778 0.0266309 +0.0189949 0.0449386 0.0430002 +0.00529011 0.0668325 -0.0327227 +0.00166319 0.130955 0.0203219 +-0.0905947 0.115833 0.0426569 +0.00338984 0.116722 -0.0177517 +0.0203176 0.126182 0.0214303 +-0.0598293 0.139488 -0.00569497 +0.0142784 0.11622 -0.015243 +0.0231289 0.0835821 0.0493611 +0.0515475 0.0540038 0.0286923 +-0.0317664 0.058161 -0.0143983 +-0.0397537 0.0782783 -0.0191449 +0.012627 0.12184 0.0342326 +-0.0823735 0.148711 0.0361489 +-0.012301 0.110982 -0.0195491 +-0.0883046 0.122998 0.0470686 +-0.0315077 0.113893 0.0345441 +-0.0888952 0.137894 0.0271916 +-0.0610259 0.126912 0.0416133 +-0.0475344 0.05323 0.0369443 +-0.00961348 0.0434416 -0.0262361 +-0.0541404 0.124102 0.0375109 +0.0509994 0.044648 0.0132154 +0.0303038 0.118886 0.0223059 +-0.0596345 0.0336285 0.0108415 +-0.0196267 0.0450293 -0.0277098 +-0.0247099 0.0381195 0.00851258 +-0.0774982 0.133088 0.0521596 +0.0276359 0.0629152 -0.0215123 +0.0535119 0.0717543 0.00602975 +-0.0334971 0.0831472 0.0419572 +-0.0596476 0.14187 -0.00422882 +-0.0924522 0.125595 0.0392516 +-0.068714 0.143769 -0.0144235 +-0.0468988 0.126761 -0.00595632 +-0.0303571 0.0537911 -0.0173707 +-0.0709316 0.147597 -0.0300096 +-0.0514754 0.115278 0.0338114 +0.0190263 0.120653 0.0329746 +-0.0340031 0.1089 -0.0192874 +-0.0335001 0.116617 0.0321346 +-0.0671562 0.0724925 0.0371747 +-0.0746759 0.152711 -0.0238933 +-0.0590669 0.120714 -0.00943474 +0.00548706 0.108567 0.0416722 +-0.0114996 0.101652 0.0440245 +-0.0649779 0.141437 -0.00794337 +0.0112608 0.130411 0.00668952 +0.0436616 0.0987354 0.0121603 +-0.0558948 0.101262 -0.0199275 +-0.0309036 0.0436875 0.0502489 +0.0142962 0.0652331 -0.0300484 +0.000574283 0.0347216 0.0149023 +-0.00623443 0.0389648 -0.00688285 +-0.0810472 0.147398 0.0390836 +-0.0491606 0.0375682 0.0458781 +-0.055978 0.0534457 0.00767233 +-0.0685375 0.17487 -0.0458569 +0.0289287 0.100617 -0.0165368 +-0.0709835 0.0353942 0.00988845 +0.0337836 0.0754424 0.0400679 +0.041497 0.0527902 0.0324777 +-0.0204109 0.178661 -0.0155986 +-0.0623894 0.149097 -0.0105741 +-0.0644192 0.16051 -0.0170316 +-0.0350535 0.0346922 0.0433273 +-0.0740398 0.145796 -0.011857 +0.0214237 0.0444841 -0.0187153 +-0.0570526 0.113331 -0.0158151 +0.0134717 0.127798 0.0260714 +0.0324011 0.0446474 -0.00561054 +0.00231866 0.0568936 -0.0320023 +-0.0273763 0.112504 -0.0170987 +-0.0224223 0.072452 0.0507888 +-0.0614531 0.154118 0.0305097 +-0.0222065 0.179998 -0.0209469 +0.00315207 0.102056 -0.0221009 +0.0413778 0.0561233 -0.00592276 +0.037882 0.105959 0.026802 +-0.0607248 0.0722644 -0.016058 +0.00061382 0.126415 -0.00611002 +0.0592992 0.0566775 0.0181738 +0.0474969 0.0638142 0.0292952 +-0.0321069 0.162239 -0.0144989 +-0.0520198 0.147215 -0.00210798 +-0.0819286 0.0748755 0.0145293 +-0.0333602 0.0339348 0.0195439 +-0.0555018 0.0987713 0.0432834 +-0.0630837 0.164691 -0.0325918 +-0.0473982 0.0343754 -0.0164682 +-0.0807821 0.0980376 0.0332837 +-0.0645109 0.0370591 -0.00764757 +-0.085403 0.141865 0.00516647 +0.0420715 0.0859357 0.0292923 +0.0391529 0.107674 0.00402907 +0.024552 0.110059 0.0374287 +-0.0631521 0.0360725 0.0429133 +-0.0619885 0.156033 0.0186659 +-0.024223 0.17569 -0.0123366 +-0.0138299 0.0392302 0.0367944 +-0.0306217 0.126038 0.0115365 +-0.0714938 0.120397 0.053531 +-0.0869305 0.151358 0.010227 +-0.0788893 0.125151 -0.00625598 +-0.0447778 0.0409599 -0.0173005 +-0.09234 0.131039 0.0252374 +0.0321511 0.0724311 -0.0187615 +-0.0735819 0.0777026 -0.0122023 +-0.0678037 0.166983 -0.024036 +-0.0897153 0.135171 0.0332079 +-0.0447805 0.0840976 -0.0212945 +0.0371007 0.10968 0.00116733 +0.0112368 0.0836448 -0.0310335 +-0.036484 0.0505609 0.038833 +-0.0118972 0.116803 -0.015741 +-0.0346708 0.0621866 -0.0131726 +-0.0397664 0.0812015 -0.0202928 +-0.069532 0.172114 -0.0375728 +0.00626682 0.131047 0.00486423 +-0.0590022 0.0579904 0.014414 +-0.00972298 0.0642282 -0.0359259 +-0.0269413 0.181454 -0.0140289 +0.033222 0.0842418 -0.0188996 +0.00639168 0.0433788 -0.024537 +0.00926262 0.129557 0.000393265 +-0.00751646 0.0732149 0.0579299 +-0.0513203 0.142869 0.00077197 +-0.0288553 0.0385536 -0.0110371 +0.0555265 0.0728462 0.0170262 +-0.085954 0.146023 0.00719275 +-0.0371011 0.0461641 -0.0234326 +0.0579592 0.0537863 0.0201793 +0.0104003 0.0418913 -0.0239147 +-0.0396188 0.0505923 -0.0110041 +0.0326207 0.0944486 -0.0159568 +-0.0170933 0.0554767 0.0502631 +-0.0891859 0.139294 0.0371595 +-0.0637097 0.166224 -0.0345967 +0.00422867 0.0824562 -0.0341922 +-0.0594261 0.151258 -0.000475846 +-0.0552814 0.0464664 0.0256754 +-0.0424851 0.0776249 0.0430145 +0.0184693 0.111176 0.038468 +-0.0294978 0.0574079 0.0367222 +-0.0435452 0.0405422 0.0435069 +-0.0600989 0.0598417 0.00157193 +0.0526979 0.0525681 0.0268245 +-0.0625031 0.0602955 0.00246046 +-0.0675133 0.108346 0.0377589 +-0.00349512 0.111424 0.0424267 +-0.00549779 0.110034 0.0429298 +0.0164758 0.0713296 0.0519403 +0.0458506 0.0876137 0.00718075 +0.0244747 0.0400424 -0.00510986 +0.00547063 0.131454 0.017409 +-0.0728779 0.117943 -0.00788041 +-0.0142717 0.17714 -0.027303 +-0.0257193 0.0617764 -0.0314442 +-0.050991 0.0504175 0.03464 +0.00152343 0.0759482 0.0573355 +-0.0304944 0.064586 0.038393 +0.016253 0.0794879 0.0534651 +-0.00764651 0.0496471 -0.0308946 +-0.077844 0.0743656 -0.00558198 +-0.0326464 0.0563525 -0.0113988 +-0.061813 0.175696 -0.0586065 +-0.0681691 0.0682156 0.031879 +-0.0493845 0.0657885 0.0368321 +-0.019309 0.0362824 -0.0277788 +-0.063712 0.167032 -0.0383216 +-0.0379003 0.123041 0.0266516 +-0.000679533 0.0554388 -0.0315999 +-0.0886752 0.135106 0.0413889 +0.011146 0.128332 0.0266558 +-0.0740639 0.178692 -0.0478641 +-0.0809318 0.142082 0.0447817 +-0.00975763 0.0742329 -0.0379217 +-0.0600964 0.0334795 0.00370066 +-0.0566436 0.0657735 0.0346839 +-0.0767139 0.070678 0.0244626 +-0.0810351 0.0787684 -0.0035164 +0.0405001 0.076619 0.0321646 +-0.0283979 0.155793 -0.00852382 +-0.0535904 0.0617699 -0.00886774 +-0.0149347 0.127911 0.00262222 +-0.0197362 0.181499 -0.0230211 +-0.0781409 0.0718256 0.0231698 +-0.0337588 0.121858 0.0267132 +-0.0741051 0.0686193 0.025039 +0.0417534 0.0788713 -0.00674491 +-0.0515024 0.0340065 0.0263967 +-0.0763933 0.111249 -0.00565203 +-0.0538034 0.0898608 -0.0222645 +-0.000575856 0.0980296 -0.0278345 +0.0581094 0.0704417 0.00814168 +-0.0891434 0.137902 0.0291936 +0.00340212 0.0390598 -0.024445 +-0.0620333 0.153738 -0.0275809 +-0.0177087 0.0584461 -0.0348025 +-0.0823897 0.104663 0.0290404 +-0.0194981 0.10024 0.044034 +0.0242883 0.0705502 -0.0254969 +-0.0899225 0.133822 0.0382154 +-0.0195055 0.108574 0.0413935 +-0.0446392 0.0548635 -0.0110876 +0.00035867 0.048192 -0.0299591 +0.0364284 0.0413843 -0.00274773 +0.0187875 0.0351105 0.0327558 +-0.0568852 0.111179 -0.0170834 +0.0118445 0.0806629 0.0540991 +-0.0687285 0.155709 0.0264626 +0.00655625 0.109588 0.0412446 +0.00917706 0.113608 -0.0184169 +-0.0613933 0.155777 0.0101812 +-0.0314952 0.0903684 0.0441958 +0.0124021 0.0448701 -0.0249804 +-0.0241038 0.0865955 0.0534593 +-0.0631641 0.149054 -0.0215452 +-0.0401934 0.0365351 0.0429119 +-0.0898981 0.135185 0.0362087 +-0.0526397 0.0618282 -0.00966488 +-0.0844214 0.0777776 0.012517 +0.0222568 0.0748707 -0.0265095 +-0.0150366 0.0384845 0.00106724 +0.0180702 0.0879847 -0.0272411 +-0.0142291 0.127243 0.024765 +0.0382486 0.104643 0.0273123 +-0.0748494 0.0964384 -0.0137204 +-0.0808743 0.136754 0.0491531 +-0.0568962 0.0970004 -0.0209687 +-0.0803034 0.072641 0.00422068 +-0.0584156 0.0459799 0.0422363 +-0.0579142 0.114001 -0.0151155 +-0.0561079 0.0571065 0.0121919 +0.00037651 0.0978532 -0.0276151 +-0.0336642 0.082217 -0.0255373 +0.0457702 0.0735931 0.00320764 +-0.056498 0.07472 0.0419593 +0.00305684 0.124987 -0.00863513 +-0.0272404 0.0877435 0.0480762 +-0.040496 0.0577326 0.0402811 +-0.0202415 0.0392282 0.0390567 +-0.020926 0.0334921 -0.0253378 +-0.0690953 0.0751628 0.0379926 +-0.0520047 0.0344961 0.0416004 +-0.0141843 0.128965 0.0174774 +0.0288353 0.0368345 0.0223773 +-0.0444076 0.0394861 -0.0222996 +-0.0838483 0.119157 -0.00284212 +-0.0034971 0.0732704 0.0586485 +-0.03681 0.0886191 -0.0239226 +-0.0669297 0.105269 -0.0144963 +-0.07603 0.0941366 0.0385416 +-0.0716625 0.145448 -0.0198949 +-0.0165056 0.0382425 0.0100681 +-0.0909349 0.113307 0.0123445 +-0.0192269 0.0381483 0.0222601 +0.026296 0.0862676 0.0469202 +-0.0118259 0.0386358 0.028745 +-0.0513331 0.0334323 -0.00718543 +-0.0685946 0.0353745 -0.00558788 +-0.0370306 0.151785 -0.00571407 +-0.0891386 0.129503 0.00423129 +-0.0447856 0.0348265 0.00740272 +0.040097 0.105566 0.00218117 +0.00862183 0.120558 -0.0139068 +-0.0679053 0.171131 -0.036968 +0.0164071 0.0345184 0.0219352 +-0.0501179 0.137029 0.00241503 +0.0125996 0.0459414 0.0443461 +-0.0654928 0.0818627 0.0433416 +-0.0215596 0.0891328 -0.036783 +-0.0685096 0.147001 0.0412847 +0.0400896 0.0702922 -0.00980716 +-0.0291528 0.0378835 0.0276599 +-0.0624944 0.145991 -0.00758108 +-0.029375 0.0621337 -0.0244169 +-0.0655919 0.151202 -0.0366034 +-0.064581 0.128354 0.0453237 +-0.0626195 0.153328 0.0013944 +-0.0863817 0.148632 0.0316852 +-0.0153553 0.112218 -0.0188504 +-0.0602045 0.0441634 0.0266895 +-0.0204995 0.111306 0.0398343 +-0.0454802 0.112265 -0.0167776 +0.0212764 0.0693138 -0.0277613 +-0.0458225 0.146281 0.00549558 +-0.065521 0.0335373 -0.00466605 +-0.00710114 0.0339482 -0.0211688 +0.0551094 0.0539301 0.0250409 +-0.0781434 0.0927222 0.0364655 +0.0291436 0.0707502 -0.0218013 +-0.091117 0.143373 0.0231646 +-0.0575628 0.0576989 0.003607 +-0.0745558 0.0684435 0.0233437 +0.000679346 0.0933957 -0.0329817 +0.0136703 0.0446634 0.0441067 +0.0425933 0.0791563 0.0282081 +-0.0098481 0.112657 -0.0193422 +-0.0678577 0.102354 -0.0152646 +-0.0245236 0.0838729 0.0539551 +-0.0522319 0.125489 0.0349878 +-0.0331359 0.168192 -0.0157544 +0.0437182 0.0944809 0.000197915 +-0.0271741 0.161328 -0.0145155 +-0.0635247 0.139599 0.0380296 +-0.0105236 0.0787711 0.0579243 +0.0221704 0.109999 -0.014573 +-0.0626188 0.166275 -0.0435849 +-0.0162218 0.186444 -0.0207352 +-0.00481374 0.128076 -0.00386981 +-0.0761439 0.154623 0.0283179 +-0.00628506 0.0952929 -0.0329709 +-0.0244623 0.0348843 0.0471798 +-0.0764469 0.175411 -0.0430646 +-0.0374817 0.0903202 0.0435434 +0.0448755 0.0917539 0.00218552 +-0.0464937 0.0411703 0.0442462 +0.00738566 0.0463583 -0.0259834 +-0.0269838 0.158131 -0.000540227 +-0.0195125 0.0800523 0.0567242 +0.0535386 0.0505579 0.00123438 +-0.0704829 0.066568 0.025804 +-0.0478545 0.117892 -0.0146818 +-0.0645863 0.144373 -0.0132186 +-0.0619148 0.161553 -0.037594 +-0.0328555 0.100056 -0.0225692 +-0.0605435 0.0660534 0.0336067 +-0.00290962 0.037693 0.0115129 +-0.0101883 0.0876449 -0.0371912 +-0.0625754 0.042738 -0.00542472 +0.00650044 0.0910463 0.0545358 +-0.0756811 0.154032 -0.0169094 +-0.0034723 0.130516 0.00409153 +0.00232953 0.116694 -0.0177181 +-0.0378274 0.0929022 -0.0235348 +-0.02161 0.158057 -0.00899889 +0.0304133 0.0415863 -0.00412062 +-0.0728954 0.176495 -0.0445729 +-0.0420309 0.0335517 -0.0220625 +-0.0187514 0.0906841 0.0550582 +-0.0855548 0.125248 -0.00272359 +-0.0137086 0.0614344 -0.0364468 +-0.020723 0.0597726 -0.0340423 +-0.0708646 0.0384387 0.000437312 +0.0310181 0.112726 0.0309619 +0.0131047 0.129972 0.0173477 +-0.0216432 0.124246 -0.00349177 +-0.0626999 0.0706798 -0.0138683 +-0.0865991 0.0833319 0.0164838 +-0.0644302 0.0384213 0.0160253 +-0.0187164 0.0611476 0.0502898 +-0.0791607 0.170809 -0.0419883 +0.00181256 0.0994772 -0.0233519 +0.0199074 0.11877 -0.0100039 +-0.0361903 0.151017 -0.000604378 +-0.084275 0.0897993 -0.00457099 +-0.0554832 0.0861944 0.0449632 +-0.0623633 0.0458155 0.0336786 +0.034658 0.114539 0.0168181 +-0.0736982 0.167846 -0.0232955 +-0.0181465 0.166773 -0.0192359 +0.0113761 0.0494361 -0.0277541 +-0.0440746 0.154693 -0.007872 +0.0606816 0.0664976 0.015162 +0.044367 0.0575454 -0.00546316 +0.0134639 0.0616949 0.0510096 +0.0400149 0.0829397 -0.0117765 +0.0423451 0.0690926 -0.00378897 +-0.0691689 0.0336248 0.00172074 +0.0582234 0.0593447 0.00320204 +-0.0900566 0.133779 0.0292173 +-0.0381652 0.0336678 -0.0288809 +0.0397017 0.104178 0.024171 +-0.0755036 0.121787 0.0531411 +-0.025634 0.122393 0.025161 +0.058528 0.0565928 0.00617045 +-0.0801768 0.155046 0.0137223 +0.0277963 0.0835666 0.045536 +-0.0628566 0.145948 -0.0105775 +-0.0133824 0.0383808 0.0105781 +-0.049358 0.146268 -0.00147688 +-0.0484712 0.0517504 0.0365675 +-0.0467968 0.0869913 -0.021986 +0.0553821 0.0590684 -0.000816519 +-0.0179551 0.0921164 -0.0358084 +-0.0789524 0.0921836 -0.0106406 +0.0374058 0.0893177 -0.0145297 +-0.032345 0.0473443 -0.0245628 +0.0173629 0.0537245 -0.0278081 +-0.0616059 0.160004 -0.0295877 +-0.0123225 0.124091 -0.00743567 +-0.0401607 0.163674 -0.0120006 +-0.06497 0.154244 -0.00563561 +-0.0510279 0.0336678 0.0250302 +-0.0771941 0.0893363 -0.0125642 +0.0224953 0.109772 0.0381484 +-0.0545656 0.13815 0.0298405 +-0.00171216 0.066944 -0.0344014 +-0.00330066 0.124033 -0.00952648 +-0.0724141 0.159616 -0.0379306 +-0.0128309 0.0869146 -0.0385108 +0.0379635 0.103337 0.0286718 +0.00150556 0.0870476 0.0569313 +0.0339501 0.0683557 -0.0167775 +-0.0296157 0.053701 -0.0213818 +-0.0239053 0.0350134 -0.0198326 +0.00348633 0.110018 0.042298 +-0.00459976 0.0405792 -0.0256485 +0.0313837 0.0352278 0.00968341 +-0.0524893 0.105673 0.0402508 +-0.0334757 0.072353 -0.0224701 +-0.00165204 0.0347369 0.0450897 +-0.0251253 0.179165 -0.0186166 +0.0418909 0.0939077 0.0272858 +-0.0417165 0.069628 -0.0168617 +-0.0751265 0.0670609 0.00488552 +-0.0702901 0.063891 0.0211244 +-0.0777094 0.170825 -0.0439812 +-0.0735195 0.135848 0.0500526 +-0.0690768 0.0739443 0.0372765 +0.0123912 0.116671 -0.0157278 +-0.0504991 0.105636 0.0396146 +0.0194996 0.0489742 0.0420155 +-0.0652338 0.145869 -0.0189253 +0.0183651 0.124757 -0.00246117 +-0.067493 0.105571 0.0389191 +0.00451331 0.0814276 0.0565046 +-0.0126391 0.0466477 -0.0295757 +-0.043534 0.0422491 -0.0203181 +-0.0576807 0.133928 0.0359191 +-0.0847679 0.10454 0.0257763 +-0.0763966 0.0748983 0.0314167 +-0.0163248 0.0390132 0.0346782 +0.0455396 0.083395 0.0201668 +-0.0404951 0.0747761 0.0426102 +0.0326457 0.113685 0.0274718 +-0.0533008 0.118582 -0.0133417 +-0.0548347 0.0518559 -0.00436961 +-0.0444358 0.0344955 0.0309851 +0.0022525 0.0986072 0.0504164 +0.0280941 0.107442 0.0372758 +0.0311382 0.100809 0.0381724 +-0.0608693 0.0982413 -0.018491 +-0.0808258 0.116274 -0.00349703 +-0.00493749 0.124022 0.0339675 +-0.0202041 0.0383371 0.000156328 +0.000176932 0.0881362 -0.0348875 +-0.0122454 0.128019 0.000407111 +-0.0750529 0.0860661 0.0392001 +-0.0200226 0.0403705 0.0532551 +-0.0196618 0.127752 0.0140421 +-0.0544977 0.0747139 0.0418232 +-0.0850765 0.107567 0.00438106 +-0.0759578 0.071995 0.0287387 +-0.0434567 0.155083 0.00724724 +-0.090134 0.132434 0.0362229 +0.022282 0.0706591 -0.0268891 +-0.090924 0.128274 0.0409748 +-0.0889908 0.13778 0.0388031 +-0.0788715 0.122217 -0.0060966 +-0.00443014 0.100204 0.0479984 +0.0327247 0.0646521 0.0402099 +-0.066223 0.15556 -0.0520809 +0.0118954 0.0685639 0.0540604 +-0.0805181 0.12599 0.0525745 +0.0465562 0.0753029 0.0092212 +-0.0743025 0.151276 -0.0308835 +-0.0905476 0.146077 0.0141502 +-0.0715441 0.112225 0.0480665 +-0.0679786 0.137002 -0.008171 +-0.0672001 0.044789 0.00569382 +-0.0714328 0.168025 -0.0480185 +-0.0584837 0.088969 0.0446761 +-0.0444852 0.0411138 0.0436529 +0.0142229 0.0821798 -0.0300828 +0.0137354 0.10206 -0.0220537 +-0.0532836 0.0335112 0.0086601 +-0.046743 0.0767653 -0.0182293 +-0.0653246 0.173014 -0.0475844 +-0.0105123 0.0633015 0.0555068 +-0.0652467 0.122825 0.0496059 +-0.0587837 0.0940397 -0.0203993 +-0.061496 0.107016 0.0394252 +0.032159 0.0404592 0.0270704 +-0.0550412 0.129739 0.0362139 +0.0187645 0.036357 0.00611202 +-0.051625 0.0474378 0.0157122 +-0.0945263 0.121474 0.0192827 +-0.0874631 0.104981 0.0103802 +-0.0444225 0.0587761 0.0392912 +0.00550135 0.107149 0.041587 +-0.0023107 0.0375379 0.0154093 +0.0365396 0.111887 0.0174946 +-0.0667677 0.0809002 -0.0178421 +0.0212994 0.0550028 0.0464604 +-0.00474995 0.0391641 0.0333259 +0.0385436 0.103322 0.0277283 +-0.0350927 0.168167 -0.014918 +-0.0381943 0.124735 0.0235454 +-0.0436117 0.125739 0.0201433 +-0.0122465 0.124398 0.0313659 +-0.018196 0.038272 0.00607299 +-0.0454731 0.0675709 0.040115 +0.0397094 0.0887389 0.0329441 +-0.0612601 0.0653881 0.0322823 +0.0358388 0.063303 0.0376893 +-0.0894207 0.0969969 0.0174102 +0.0247051 0.054807 -0.022754 +-0.0362363 0.0345287 0.0379647 +-0.0134852 0.104433 0.0435318 +-0.0390753 0.0353444 0.00990175 +-0.032893 0.0386199 -0.0119052 +-0.066881 0.172737 -0.0437921 +-0.0844296 0.0777425 0.00651672 +0.0102401 0.13009 0.0220074 +-0.0184847 0.091067 0.0550019 +-0.048793 0.155022 0.0100543 +-0.042488 0.1112 0.0368617 +-0.00484603 0.0989761 -0.0268273 +-0.0667655 0.079447 -0.0174677 +-0.0520123 0.033434 -0.00549431 +-0.0309502 0.0376665 0.0292806 +0.0125353 0.118934 -0.0141702 +0.0393762 0.0393721 0.0023232 +-0.0154839 0.0388074 -0.00858919 +-0.027433 0.108265 -0.0206521 +-0.0335566 0.11282 -0.0174155 +-0.0428158 0.126503 0.0190139 +0.0359007 0.0374161 0.00496434 +0.030827 0.118499 0.003976 +0.0482689 0.0616107 -0.00376704 +0.0172995 0.0637271 -0.0287659 +0.0352999 0.0727523 0.0387329 +0.0325099 0.0439072 0.0294151 +0.0434928 0.0597185 0.030951 +-0.0849411 0.14333 0.0402714 +-0.0419573 0.15213 0.00584722 +-0.0478585 0.101383 -0.0215741 +0.0158763 0.121559 0.0327664 +0.0196134 0.0505877 0.0439573 +-0.0408143 0.0899706 -0.0230035 +0.0179499 0.0360095 0.0408071 +-0.0491945 0.137084 0.0184007 +0.0422067 0.0898824 0.0277847 +-0.0568073 0.122 -0.00880521 +-0.0535468 0.0500774 -0.00609453 +-0.0791017 0.171279 -0.0410322 +-0.0812381 0.0774347 -0.00249764 +0.00451011 0.08973 0.0555486 +0.0360129 0.0947297 -0.0122566 +-0.0267986 0.0839175 -0.0367186 +-0.0336466 0.125738 0.0192922 +-0.0645061 0.0384674 -0.00726163 +-0.069197 0.145134 -0.0204031 +-0.0453102 0.150665 0.00801555 +-0.016121 0.0347931 0.0455365 +0.0372267 0.0827114 -0.0157704 +-0.0586519 0.047167 0.0396282 +-0.0723413 0.0352299 0.00501169 +-0.00850771 0.0457646 0.047699 +-0.0361402 0.0481769 -0.0171107 +-0.0694918 0.0986232 0.041191 +-0.0145821 0.0365575 -0.0175497 +-0.0152331 0.178626 -0.0269991 +-0.0375015 0.0761535 0.0421853 +0.0230994 0.0700125 0.0474321 +-0.0769031 0.149462 0.0386995 +-0.0160344 0.0394989 0.0396851 +-0.077278 0.155614 0.0132673 +-0.0461472 0.0695191 0.0407559 +0.013766 0.105146 -0.0193832 +-0.00180961 0.102694 -0.0227875 +-0.0404787 0.102851 0.0403978 +-0.0256602 0.0491814 -0.0262646 +-0.0640267 0.155773 0.0106957 +-0.0188798 0.0381919 0.018679 +0.0251044 0.111527 -0.0122017 +-0.00771141 0.130468 0.0154714 +-0.0143198 0.128437 0.0203415 +0.000556364 0.0427979 0.0462128 +-0.0107039 0.129221 0.0216334 +-0.0755898 0.0796389 -0.010614 +-0.0618567 0.156837 -0.0325918 +-0.0516893 0.0678068 -0.0129959 +-0.0631142 0.178334 -0.0583576 +-0.0386855 0.0651385 -0.0142461 +-0.0594798 0.0790546 0.0431577 +-0.029726 0.121561 0.0251755 +-0.0328596 0.153633 -0.000344229 +0.0339626 0.0356317 0.0117064 +-0.0718527 0.158151 -0.00382487 +-0.0194857 0.0486564 0.0485018 +0.0319575 0.0889685 0.042819 +0.00933955 0.0624337 -0.0310444 +-0.0172265 0.113695 -0.0184196 +-0.0866231 0.0846922 0.0194779 +-0.0663134 0.0608279 0.00678018 +-0.0718125 0.0922256 -0.0157107 +0.0550352 0.064867 0.0267865 +-0.0446824 0.0651214 -0.0145177 +-0.066499 0.0958724 0.0422345 +-0.0484771 0.135525 0.0064169 +0.0419641 0.0872658 0.0291034 +-0.0144336 0.120974 -0.0101151 +0.00537913 0.115468 -0.0184153 +-0.0169313 0.0940904 -0.0338108 +-0.0311219 0.087675 -0.0275557 +-0.0733475 0.129801 0.0519745 +-0.0628563 0.0432731 0.0396846 +-0.0181419 0.159077 -0.00932452 +-0.0244219 0.0752703 0.0498831 +0.0278638 0.0367181 0.000104301 +0.0464062 0.0525822 0.0317783 +-0.0352134 0.127051 0.0157486 +-0.037493 0.0605801 0.0408152 +0.0435542 0.0709351 0.0259153 +-0.061811 0.0896079 -0.0190442 +-0.0487502 0.167013 -0.00197199 +-0.011981 0.180127 -0.0244833 +-0.0273118 0.0346998 0.0432305 +0.0260624 0.113339 -0.0101501 +0.00139388 0.0977439 -0.0275242 +0.0217437 0.0348491 0.000619009 +-0.0598385 0.0385019 0.0199857 +-0.0742583 0.12978 0.0523998 +0.0125017 0.103142 0.0463418 +0.0222613 0.0768462 0.049813 +0.0226846 0.125635 0.0109073 +-0.0664848 0.153437 0.0331838 +-0.0635064 0.100118 0.0422551 +-0.0884181 0.136485 0.0410708 +-0.0821317 0.151156 0.0323844 +-0.035019 0.035354 0.0462574 +-0.0445836 0.049099 -0.0105442 +-0.0913513 0.126793 0.00727091 +-0.00465552 0.0526099 -0.031899 +-0.0536395 0.0361733 0.0466553 +-0.0624928 0.0775409 0.0419345 +-0.0454844 0.1652 0.00481603 +-0.0176555 0.10171 -0.0237622 +-0.0517386 0.139928 0.000994108 +-0.0894422 0.0969694 0.0114146 +0.0282036 0.106111 0.0374341 +-0.0930784 0.128223 0.0132485 +-0.0710378 0.113905 0.0504272 +-0.0589666 0.06768 0.0360494 +0.0249541 0.12014 0.0288767 +-0.0467094 0.0345808 0.0339444 +-0.0627411 0.0766785 -0.0179436 +-0.00548466 0.051944 0.0528973 +-0.0355056 0.0705073 0.0417804 +0.00377856 0.127353 -0.00517835 +-0.0595895 0.0659394 0.0339087 +-0.0639025 0.0344657 0.0356117 +-0.0549717 0.132532 0.0345672 +-0.0762259 0.0790445 0.0349679 +-0.0259103 0.0721759 0.0444214 +0.0315716 0.117859 0.00423829 +-0.0696582 0.0642657 0.000568637 +-0.0882731 0.143189 0.0351319 +-0.031681 0.0679763 -0.0234472 +-0.0699144 0.1253 -0.00883057 +0.0435982 0.0888699 0.0251665 +-0.0914617 0.144737 0.0211556 +-0.0205009 0.126788 0.0181341 +0.0311284 0.103423 0.0364018 +-0.0196184 0.043638 -0.0281382 +-0.0192518 0.185941 -0.0210687 +0.0556563 0.0725898 0.00964459 +-0.0899954 0.135014 0.00922069 +-0.0658394 0.170333 -0.0405107 +-0.0487066 0.064243 0.0362896 +0.0115006 0.100446 0.0479384 +-0.0479295 0.132887 0.00374503 +0.0216229 0.0700379 0.048827 +0.0151599 0.050478 0.0463014 +0.00510611 0.0386758 0.0457599 +-0.0284578 0.0789297 -0.0355663 +-0.081069 0.152209 0.0312004 +-0.0814521 0.13302 0.0511119 +-0.0115065 0.0517326 0.051159 +0.0190773 0.108184 -0.0165978 +-0.0879813 0.0860844 0.0054873 +-0.0565924 0.0442297 -0.00693458 +-0.0358918 0.166781 -0.00116722 +0.0263229 0.122689 0.0193841 +-0.0305096 0.0608404 -0.0204127 +-0.0790435 0.0718734 0.00353541 +-0.0264818 0.101588 0.0434387 +0.0224815 0.0892515 0.0484736 +-0.07435 0.0711851 0.0297739 +-0.0366402 0.0563002 -0.0110085 +-0.0858069 0.133905 0.0470456 +-0.0347686 0.16678 -0.00304399 +-0.0318926 0.0385829 -0.0116716 +0.0173027 0.0680054 -0.0293377 +-0.084368 0.114299 0.000284663 +-0.0761089 0.149998 -0.0108814 +0.0437289 0.0987183 0.00617361 +0.0134057 0.0374127 -0.0219366 +0.000807934 0.124791 -0.00838237 +-0.0406768 0.0621783 -0.0128097 +-0.0926608 0.121474 0.0282925 +-0.0595443 0.155728 0.018094 +-0.0646509 0.168222 -0.0372156 +-0.0197896 0.127727 0.0110836 +0.0112619 0.069597 -0.0315203 +-0.0784667 0.141403 0.0468168 +-0.0881381 0.0996585 0.0223676 +-0.0495985 0.048927 -0.00879829 +-0.0567267 0.15478 0.0220083 +-0.0273659 0.119585 -0.010507 +0.0191093 0.0375318 0.0414884 +-0.054786 0.147744 0.027387 +0.0185111 0.114004 0.0370685 +-0.0106027 0.171925 -0.0271985 +-0.0795217 0.0748572 0.0255446 +0.0527001 0.0462105 0.0152086 +0.0191089 0.0889764 -0.0262512 +-0.0917278 0.114662 0.0113396 +-0.0311696 0.0749025 -0.031542 +0.0103976 0.0505032 0.04997 +0.00150167 0.0504398 0.0522275 +-0.00913054 0.0987984 -0.026694 +-0.0607072 0.0707896 -0.0151427 +-0.0314435 0.033488 -0.0292746 +0.0322402 0.0842577 -0.0191914 +-0.0617587 0.160001 -0.0265888 +0.0366758 0.0659888 0.0371374 +-0.0410386 0.153314 -0.00775366 +-0.0916156 0.146104 0.0201482 +-0.008275 0.130081 0.0196055 +-0.0716229 0.0395313 0.00756641 +-0.0555501 0.0448059 0.0154665 +-0.0519883 0.0545681 0.0276385 +-0.063796 0.145383 -0.0141799 +-0.0204903 0.107154 0.041938 +-0.00950118 0.06052 0.0554819 +-0.0297859 0.073336 -0.0325546 +0.0225502 0.0873848 -0.0245875 +-0.0658345 0.0367656 0.0273328 +-0.0335698 0.0354174 0.0482024 +-0.0826039 0.0829175 -0.00455606 +0.0133284 0.055284 -0.0292269 +-0.000932932 0.0363158 0.0167895 +0.0190541 0.116198 -0.0132311 +-0.000494259 0.0911454 0.0560111 +0.0112951 0.130595 0.0166808 +-0.0164761 0.0673645 0.0539812 +-0.0180225 0.0385494 -0.00514634 +-0.0610891 0.0339525 0.017372 +-0.0707478 0.147309 -0.0278341 +-0.0189873 0.180146 -0.0170482 +0.0237757 0.0343382 0.00896337 +-0.00265737 0.0899953 -0.0354905 +-0.0718661 0.100809 -0.0137558 +-0.00649817 0.0939276 0.0556503 +-0.0246455 0.126418 0.012252 +-0.0157508 0.070024 -0.0384074 +0.0256059 0.12104 -0.000826914 +0.00250363 0.0489881 0.0513443 +-0.029644 0.125848 0.0118936 +-0.024804 0.0737635 0.0475256 +-0.0672658 0.131206 0.0466969 +-0.0817178 0.0953366 0.0328835 +-0.0286351 0.0918211 -0.0275955 +0.0414472 0.0971985 0.0261597 +-0.0680972 0.121444 0.0525081 +-0.0683202 0.166619 -0.0540065 +-0.0375072 0.0775843 0.0424046 +-0.0143913 0.0384112 0.00490303 +-0.0518947 0.109852 -0.0185479 +0.0338477 0.0711662 -0.016803 +-0.0450894 0.154663 -0.00752455 +-0.0564919 0.0875695 0.0445907 +0.0391967 0.0726247 0.033788 +0.0574073 0.0717824 0.0103168 +-0.0237163 0.0380022 0.0196686 +0.0120538 0.0907862 -0.0301745 +-0.0669793 0.134061 -0.00834965 +-0.00947746 0.116894 0.0392479 +-0.0328734 0.0680853 -0.0194707 +0.030263 0.116206 0.0279976 +-0.0348513 0.0345425 0.0400019 +-0.0532018 0.0733522 0.0412342 +-0.0577592 0.033805 0.0199655 +-0.00439966 0.119978 -0.0131705 +0.0162591 0.0434903 0.0442636 +-0.0567225 0.0423764 0.0206991 +0.00325132 0.12142 -0.0127844 +0.0145581 0.125506 0.0293407 +0.00448398 0.0989824 0.0487111 +-0.0896848 0.0929338 0.0144339 +-0.04491 0.13036 0.00775303 +-0.048947 0.138616 0.00839947 +-0.0307428 0.0552453 -0.0153798 +-0.0826044 0.1367 0.0480323 +-0.0749507 0.0661289 0.00944516 +-0.00473325 0.069866 -0.0358872 +-0.0167995 0.0347343 0.0471976 +-0.0426342 0.12559 0.0204963 +-0.0444709 0.120321 -0.0132547 +0.010477 0.116818 0.0374755 +-0.0744965 0.123196 0.0533572 +-0.047302 0.16443 0.00497116 +-0.0859996 0.118394 -0.000793117 +-0.0326967 0.0849828 -0.026556 +-0.0843669 0.106153 0.00138874 +0.0167493 0.127305 0.0229819 +0.0223908 0.0489358 -0.0217863 +-0.0762839 0.155844 0.0209052 +-0.0839499 0.0979633 -0.0036111 +-0.0216926 0.126501 0.0176944 +0.0378596 0.0914955 0.035553 +0.0420895 0.102851 0.00717012 +0.0366464 0.103365 0.0302885 +-0.0696779 0.086056 0.0423345 +-0.0340311 0.0339294 0.0212063 +0.0162763 0.0361212 0.00396256 +-0.0426327 0.0338426 -0.00397459 +-0.027617 0.125471 0.0155889 +-0.0937433 0.118772 0.0222988 +-0.0518432 0.133909 0.0302884 +-0.0413643 0.124214 -0.00934406 +-0.0413386 0.121239 -0.0122322 +-0.0396582 0.0336638 0.00768797 +-0.0853564 0.091162 -0.00253932 +0.0179914 0.120614 0.0332262 +-0.0717184 0.0792466 -0.0147262 +0.0215785 0.11262 0.0367657 +0.0236405 0.0366106 0.026972 +-0.07448 0.0662148 0.0164657 +-0.00149557 0.0973426 -0.0290749 +0.0342448 0.0842103 -0.0184253 +0.0045204 0.0661365 0.0560558 +-0.0072649 0.0384115 0.0117959 +0.0362267 0.104294 -0.00842134 +0.0232091 0.0782074 0.0494446 +-0.0204762 0.0786229 0.0556935 +0.0189956 0.125897 0.000310264 +0.0582502 0.0661055 0.0226582 +-0.0884672 0.113635 0.0306037 +-0.0595891 0.155231 0.0238846 +-0.0540479 0.142765 -0.001179 +0.0139994 0.0807368 0.0537041 +-0.0660333 0.155202 -0.00458552 +-0.0371914 0.175481 -0.00856986 +-0.0114786 0.114128 0.0403922 +0.00280587 0.10648 -0.0207933 +-0.061629 0.148291 0.0370712 +-0.0305056 0.115271 0.0335326 +-0.0847456 0.0911272 0.0289858 +0.0294623 0.103445 0.0374919 +-0.0884887 0.122612 0.00129126 +-0.0869453 0.0846809 0.01048 +0.04631 0.0778469 0.00818385 +-0.077491 0.135849 0.0507593 +0.00650523 0.0745046 0.0565842 +-0.0193751 0.0711448 0.0534686 +-0.03164 0.0581442 -0.0153958 +0.00337821 0.0392113 0.0295452 +0.026954 0.116596 0.0310646 +-0.0623115 0.16311 -0.0435951 +0.0154275 0.0350916 0.0411096 +-0.0724818 0.165221 -0.0429802 +-0.0359956 0.151076 -0.00202594 +0.0162209 0.0779008 -0.0293961 +-0.0478366 0.133877 0.0213554 +0.0569921 0.0661536 0.0243514 +-0.0318346 0.0915622 -0.0244444 +-0.0864107 0.0819973 0.0174801 +-0.0497993 0.0677848 0.0379447 +-0.0671663 0.164687 -0.0194859 +-0.00868026 0.111843 -0.0204858 +-0.0195177 0.0933631 0.0529187 +-0.0535918 0.114983 -0.0155816 +-0.068804 0.18096 -0.0579804 +-0.0846698 0.148755 0.00515607 +-0.0808035 0.0868637 -0.00756861 +-0.0309282 0.156627 0.000764301 +-0.0561456 0.0642166 0.0326189 +-0.0864523 0.0899653 0.00147962 +-0.0802598 0.0734072 0.0195467 +-0.025101 0.114847 -0.0155729 +-0.0348703 0.102876 -0.0215726 +0.00151752 0.0547965 0.0538164 +-0.0216758 0.0969718 -0.024798 +0.0367496 0.0931371 -0.012555 +0.00330684 0.0583228 -0.0321215 +-0.0697412 0.154452 0.0305168 +-0.0618525 0.0343021 0.022204 +-0.00886294 0.171168 -0.0237423 +-0.0216854 0.168305 -0.0122385 +-0.0435207 0.0562403 0.0394546 +-0.0620233 0.159983 -0.0376027 +-0.0751309 0.154085 -0.0179327 +-0.0480694 0.153165 -0.00566954 +0.0283556 0.0605487 0.0426528 +0.0115864 0.0348612 0.0423222 +-0.064559 0.11407 0.0417666 +0.0210547 0.0358177 -0.00168489 +-0.042575 0.0491291 -0.011035 +-0.0742409 0.113562 0.0499634 +-0.0659446 0.146784 0.0398667 +-0.0670071 0.172276 -0.0580562 +0.0251821 0.0357118 0.0226481 +-0.0129957 0.0883892 -0.0379783 +0.01814 0.0713245 0.0508426 +0.0161851 0.0347246 0.0253316 +-0.0234485 0.122824 -0.00599554 +0.00849456 0.0412846 0.0453159 +-0.0253871 0.124202 0.0208009 +0.00860136 0.121512 -0.0129363 +-0.0764996 0.128859 0.0532215 +-0.0637886 0.083851 -0.0191517 +-0.073438 0.175304 -0.0418354 +-0.0464485 0.132668 0.0189406 +-0.018505 0.112714 0.0394706 +-0.0579749 0.117711 -0.0123561 +-0.0241311 0.0384069 -0.0174035 +0.0286891 0.119649 0.00175522 +0.0135044 0.118213 0.0361594 +0.00748569 0.0942514 -0.0297902 +0.0223281 0.111319 -0.0139783 +0.00796203 0.131149 0.00690102 +-0.0888712 0.101031 0.0183836 +0.0208523 0.0352023 0.0276656 +-0.0939805 0.118754 0.0182968 +-0.0886426 0.129716 0.0443401 +-0.0562403 0.128346 0.0379943 +-0.0946719 0.122818 0.0192736 +-0.0844496 0.151409 0.0062115 +-0.0488054 0.124161 -0.00921799 +-0.0495787 0.0503337 -0.00863311 +-0.0642728 0.174473 -0.0515364 +-0.0355869 0.116022 -0.0147547 +0.0353133 0.0362497 0.0114171 +-0.0570854 0.136926 -0.00500822 +-0.033504 0.079379 -0.0265108 +-0.062469 0.033932 0.0153305 +-0.000579953 0.0361804 -0.0245898 +-0.0314067 0.0423682 0.0507901 +-0.0112759 0.125368 0.030237 +-0.00950387 0.075936 0.0571919 +-0.0424487 0.125177 -0.00834623 +-0.0077039 0.113721 -0.0184781 +-0.00342161 0.0338005 -0.0221963 +-0.0140717 0.118746 -0.0137718 +-0.0231943 0.0388081 0.0352395 +-0.0639512 0.156212 0.0208686 +-0.0624954 0.0890364 0.0453804 +-0.0303734 0.125779 0.00722581 +0.003605 0.0340592 0.00699628 +-0.0765794 0.15423 -0.00189723 +-0.0759273 0.08606 0.0386654 +0.0508473 0.0446622 0.0112162 +0.00609443 0.127443 0.0291456 +-0.0428742 0.105667 -0.0205602 +-0.0188968 0.0381911 0.0132528 +-0.086324 0.106283 0.0073644 +-0.0320928 0.0336737 -0.0220791 +-0.0466544 0.119173 -0.0140371 +-0.0710688 0.156192 0.0139947 +-0.055712 0.155088 0.0136896 +-0.0525045 0.159361 0.00819169 +-0.0543637 0.116891 0.0353365 +0.0318466 0.0424663 0.0288342 +-0.051547 0.125478 0.0342157 +-0.00249266 0.0760635 0.0587913 +-0.00575365 0.0727093 -0.0362416 +-0.00680153 0.129324 0.00093339 +0.0495021 0.0664943 0.0276338 +-0.0282448 0.11486 -0.0155715 +0.031224 0.0786608 -0.0202592 +-0.0148026 0.0827563 -0.0392327 +-0.071855 0.0993885 -0.014251 +0.0177513 0.0462342 0.0429632 +-0.0242082 0.121982 0.0271598 +-0.0922854 0.116039 0.0223382 +0.0434814 0.0832239 -0.00379707 +-0.0384996 0.171162 0.000767348 +-0.0712408 0.114861 0.0513991 +-0.0157632 0.12799 0.00385748 +0.019082 0.126548 0.00245443 +-0.00388013 0.0394939 0.0368098 +-0.0204678 0.122105 0.0297617 +-0.0285693 0.0399846 -0.0296196 +-0.0831878 0.0764607 0.0163622 +0.0190867 0.0428243 -0.0216805 +0.0483631 0.0628304 -0.00297175 +-0.0927311 0.120157 0.0322864 +-0.0241838 0.0579409 0.0417219 +-0.0517297 0.0723507 -0.015831 +-0.0217729 0.0684817 -0.0372671 +-0.00949546 0.0829261 0.0578441 +0.0172524 0.0778474 -0.0286871 +-0.0441607 0.162142 -0.00945516 +-0.00587725 0.105934 -0.0226578 +0.0253567 0.0518232 -0.0216362 +-0.0494861 0.156424 0.00985611 +-0.0174771 0.0924389 0.0547456 +-0.0151406 0.126373 0.0259068 +-0.0852968 0.0818288 0.005494 +-0.0244818 0.0988555 0.0446892 +-0.0930791 0.118839 0.037294 +-0.0662836 0.114247 0.046332 +0.0127465 0.0672208 0.05354 +-0.0414757 0.109827 0.0377618 +-0.0435203 0.0519967 0.0390799 +-0.0417672 0.0812092 -0.0204027 +-0.0786424 0.0732312 0.000545367 +-0.0358502 0.0986071 -0.0225695 +0.0443653 0.0561662 -0.00597205 +0.0226111 0.0458717 -0.017849 +-0.0108336 0.116804 -0.0157483 +-0.0865451 0.110395 0.00835385 +0.031421 0.0399741 -0.00264961 +0.0363991 0.039859 -0.00104313 +-0.0468008 0.0347657 0.0424884 +-0.0398282 0.0914347 -0.0233046 +-0.025008 0.0334859 -0.0261337 +-0.0465231 0.0804789 0.0433941 +-0.0689665 0.135529 -0.00828838 +-0.0264689 0.0379883 0.0100865 +-0.0345116 0.111154 0.0360997 +-0.0225694 0.0387321 0.0336407 +0.0372794 0.0574491 -0.00767997 +-0.0707981 0.0672067 0.0269443 +-0.0150683 0.0384098 0.0065829 +-0.0592389 0.0452743 -0.00430196 +-0.0334924 0.102881 0.0413291 +-0.079025 0.153836 0.00536375 +-0.0229321 0.055215 0.043371 +-0.0601957 0.0341396 0.0262143 +-0.0688541 0.147497 -0.029579 +-0.0613597 0.172535 -0.0585911 +-0.0748166 0.0921259 -0.0144369 +-0.0632016 0.165278 -0.0601981 +0.0402098 0.04091 0.000378677 +-0.047469 0.117985 0.0306301 +0.0368134 0.0781201 0.03746 +0.000515748 0.0349973 0.0453092 +-0.0534255 0.124412 -0.00739059 +-0.000488424 0.0801341 0.0575904 +-0.0706455 0.0701231 -0.00669595 +-0.0477034 0.0649971 -0.0135628 +-0.0348898 0.0767003 -0.020496 +-0.00451076 0.0788064 0.0581316 +-0.0693915 0.117164 0.0523368 +-0.0200653 0.164398 -0.0170398 +-0.073544 0.177863 -0.0540307 +0.0427163 0.0399244 0.0113768 +0.0240483 0.0713748 0.0470522 +-0.0154968 0.0659374 0.0537935 +-0.0686329 0.175846 -0.0473222 +-0.0628372 0.172536 -0.0525874 +-0.0796429 0.148681 -0.00084361 +-0.0663392 0.0600723 0.0146241 +-0.00400483 0.123769 0.0343163 +0.0322222 0.0597861 -0.0166881 +-0.0640918 0.158696 -0.0546245 +-0.00248901 0.0456504 0.0469622 +-0.072774 0.10871 0.0380686 +-0.0810086 0.154578 0.0119766 +-0.0695005 0.091616 0.0421021 +-0.0665162 0.155345 0.00690315 +-0.030539 0.0748507 -0.0325674 +-0.0672648 0.0680031 0.0322561 +-0.0660205 0.131186 0.0449542 +-0.0246171 0.125897 0.00496292 +-0.077893 0.12518 -0.00689701 +-0.0883724 0.121658 0.047175 +-0.0773948 0.167309 -0.02854 +-0.0604 0.0470132 0.0371523 +-0.027746 0.0753954 -0.0356568 +-0.0748509 0.0782361 -0.0105914 +-0.0571323 0.14819 0.0314465 +-0.0415029 0.0803953 0.042616 +-0.0628829 0.0649103 0.0305991 +-0.00169833 0.0598396 -0.033652 +0.0151569 0.107807 -0.0181851 +0.0566945 0.0674374 0.0239376 +-0.0717279 0.155642 0.00502354 +-0.00382186 0.102465 0.0438439 +-0.0587089 0.155741 0.0125904 +0.0572801 0.0608152 0.0247108 +0.017703 0.0913635 0.0485583 +0.0260543 0.116303 -0.00733098 +-0.0345036 0.0690703 0.0414109 +-0.0292922 0.117943 -0.0127907 +0.0213023 0.0835644 0.0502546 +0.0464907 0.0664648 0.0271426 +-0.0564929 0.14962 0.0306387 +0.0282135 0.118937 -0.00132982 +-0.000391601 0.123621 0.0341495 +-0.00114981 0.12653 0.03091 +0.0304544 0.114562 -0.00546317 +-0.0547437 0.0337519 0.0206417 +-0.0468823 0.107031 -0.0193009 +-0.0631801 0.0406886 0.0415101 +-0.0910325 0.133669 0.0112223 +-0.0592476 0.145654 -0.00231326 +-0.0125718 0.100502 0.0445971 +-0.0298246 0.0378766 0.0293214 +-0.0839351 0.123564 -0.00377373 +-0.0621407 0.163665 -0.0567978 +-0.0389566 0.155104 0.00497717 +-0.0878144 0.105004 0.012374 +-0.0794305 0.0908376 -0.00963692 +-0.0246551 0.0507167 -0.0273858 +-0.0796103 0.0799856 -0.0065507 +0.0330411 0.10941 -0.00791346 +-0.00231596 0.121888 -0.0112268 +-0.0597326 0.154693 0.0267485 +0.0339669 0.0697663 -0.0167955 +0.0205734 0.0999616 -0.0218299 +-0.0354929 0.0917868 0.0443508 +0.00339585 0.0355203 0.0220096 +-0.0315414 0.125778 0.00387502 +-0.0478194 0.135564 0.0104014 +-0.00879058 0.0812731 -0.0379859 +-0.0037488 0.0386615 0.00318783 +-0.0464486 0.0959731 0.0434949 +-0.0306087 0.0394849 -0.0300968 +-0.00234671 0.0967246 -0.0304442 +-0.0312616 0.0735186 -0.0295121 +-0.0423301 0.0340883 0.0282541 +0.0355908 0.113068 0.0185826 +0.000833787 0.106762 -0.0210825 +-0.021676 0.184465 -0.0190713 +-0.0305406 0.0566147 -0.0184018 +-0.0876394 0.113262 0.0257017 +-0.0851868 0.0966727 -0.00156833 +-0.0465061 0.0425232 0.0438042 +0.0106037 0.121274 -0.0126925 +0.0290611 0.0523826 -0.0177704 +-0.000764451 0.0769261 -0.0359174 +-0.0416101 0.0338187 0.00715256 +-0.0893298 0.0969555 0.0104169 +-0.0345694 0.163827 -0.00275159 +-0.0888276 0.090232 0.0214359 +0.0208395 0.034464 0.00266226 +0.0428658 0.0623821 -0.00251673 +-0.00588102 0.130577 0.00751387 +-0.0133142 0.0337765 -0.0222266 +-0.0435242 0.0590876 0.0398271 +0.0545899 0.0478435 0.0151974 +-0.0107349 0.0699421 -0.0371274 +0.027906 0.0578072 0.0419759 +-0.0416225 0.0520166 -0.011127 +-0.0207276 0.168298 -0.0126147 +0.0256959 0.0491338 0.0386649 +-0.0550795 0.153114 -0.00215772 +-0.0380808 0.0483205 -0.0131774 +-0.0276317 0.056316 -0.0254148 +-0.00815144 0.127733 -0.00346398 +-0.0627849 0.0852772 -0.0191174 +-0.0619877 0.169385 -0.052596 +0.0234401 0.112665 0.0358138 +-0.0659073 0.110934 -0.0126703 +0.0280721 0.0360499 0.0211097 +0.0105243 0.0687767 0.0545753 +-0.00679638 0.0982761 -0.0281107 +-0.0309109 0.0462432 0.0473418 +-0.0196031 0.0393462 -0.028238 +-0.0871129 0.152836 0.0157593 +-0.0911632 0.133688 0.01322 +-0.0464961 0.102903 0.0415914 +-0.0206991 0.0553418 -0.0317435 +-0.00949277 0.073156 0.0570282 +-0.0864179 0.083353 0.0184733 +-0.0841891 0.111446 0.02976 +-0.0940387 0.126929 0.0232615 +0.0406221 0.0899944 0.0307666 +0.0208423 0.104696 0.0425993 +0.0445354 0.0407636 0.0127885 +-0.0623396 0.172509 -0.0536126 +0.0342346 0.0852576 -0.0183147 +-0.0866427 0.151554 0.0100877 +-0.0470988 0.0345244 0.0321531 +-0.080576 0.154494 0.0106641 +-0.0137759 0.0756859 -0.0386228 +0.0216235 0.0430155 -0.0167288 +0.0376424 0.109732 0.0031582 +0.0589875 0.0607291 0.021951 +-0.0923003 0.132372 0.0212228 +0.0311691 0.0942449 0.0417029 +-0.0174159 0.162512 -0.00777918 +-0.0156178 0.12076 -0.00985742 +-0.0507328 0.121196 0.0335979 +0.028716 0.119662 0.0245591 +-0.0738138 0.0950345 -0.0145557 +0.0204425 0.0350747 0.0258809 +-0.0207737 0.0351435 -0.019333 +0.0223353 0.12586 0.0121947 +-0.0155009 0.0951913 0.0533641 +-0.0143883 0.038338 0.0212719 +0.00741103 0.0391504 0.030425 +0.0433932 0.0691823 -0.000799598 +-0.0760543 0.149976 -0.0168736 +-0.0701178 0.170154 -0.0291958 +-0.0483555 0.146018 -0.00117385 +0.0336441 0.0578174 0.0379601 +-0.0913716 0.140622 0.0201693 +-0.0308539 0.0958394 -0.0237431 +-0.0766992 0.0702795 0.00252119 +-0.0544948 0.107078 0.0398767 +-0.0587729 0.0796565 -0.019784 +-0.013621 0.128874 0.0191382 +-0.0634727 0.156127 0.0195874 +-0.0880436 0.0977019 0.0235765 +-0.0606626 0.0738612 0.0409255 +0.0348653 0.0795228 0.0399156 +0.0387467 0.0828368 -0.0137708 +-0.0573402 0.0424553 0.0177175 +-0.0784976 0.148406 0.0395361 +-0.0917148 0.117385 0.0263102 +-0.0330041 0.122377 0.0254817 +0.0172403 0.0768113 0.0531129 +0.0595736 0.0691817 0.0101411 +0.0306903 0.0708797 -0.0198199 +-0.0845462 0.119028 0.0490922 +-0.0501127 0.0337803 -0.0127711 +-0.0670049 0.0372923 0.032499 +-0.0915067 0.129676 0.0312386 +-0.0550517 0.0504886 -0.00434688 +-0.0484873 0.0790818 0.0439275 +-0.0635173 0.159862 -0.0515858 +-0.0706155 0.173275 -0.0394062 +0.0352172 0.0952034 -0.0127755 +0.0251052 0.0382735 0.0297226 +-0.0668809 0.106639 -0.013906 +-0.0678418 0.143634 -0.0139334 +-0.0235762 0.184403 -0.0123621 +-0.0257601 0.0726356 -0.0363191 +-0.0573375 0.0472769 0.0101218 +-0.085611 0.106332 0.02136 +-0.0265671 0.0617846 0.0387137 +-0.0126044 0.12951 0.0108053 +0.0214416 0.0362735 0.0322576 +-0.0354711 0.126342 0.0186171 +-0.0594976 0.0904384 0.0451853 +0.00310705 0.0348555 0.0387811 +0.0254813 0.0942452 0.0457882 +-0.0308576 0.10008 -0.0228293 +-0.0176768 0.0510699 -0.0312435 +-0.0162281 0.181624 -0.0200739 +-0.0195138 0.038345 0.00392275 +-0.0645154 0.121409 0.0489254 +-0.0248162 0.0593033 0.0409035 +-0.0571389 0.136712 0.0331888 +-0.0435213 0.0379732 -0.0242868 +-0.0606582 0.12408 0.0421371 +0.0346832 0.0519191 0.0323364 +-0.0913706 0.116528 0.0258009 +-0.0426868 0.0651551 -0.0146214 +-0.0215064 0.116765 0.0355266 +-0.0581012 0.158247 0.00415445 +0.00842312 0.0385006 0.0330183 +-0.0523141 0.162661 -0.0019165 +0.0606845 0.0623337 0.0161711 +-0.0495055 0.0848369 0.0453213 +0.0333786 0.06058 0.0393695 +-0.0689469 0.131135 -0.00874709 +-0.078943 0.132461 -0.00522567 +-0.0196521 0.0386292 -0.00926197 +-0.0594457 0.0334843 -0.00338966 +-0.054161 0.0337073 0.0136843 +-0.0384829 0.0959056 0.0428235 +-0.0869182 0.148604 0.0308154 +-0.0323987 0.116048 -0.0147978 +0.0359194 0.0798211 -0.0157295 +-0.0328255 0.12127 -0.00820532 +0.0414852 0.0569681 0.0316528 +-0.0270871 0.0520359 -0.0253933 +0.0508347 0.0727393 0.0196905 +-0.0198767 0.105865 -0.0225965 +0.0206869 0.0400703 -0.0126929 +-0.0285033 0.0616825 0.0373869 +-0.0714181 0.143109 -0.0104276 +-0.0804568 0.138622 0.0481167 +-0.0458049 0.0532278 0.0379952 +-0.0509023 0.125469 0.0333647 +-0.0871853 0.145927 0.0339699 +0.0558536 0.0594884 0.0261475 +-0.0889169 0.126733 0.0032966 +0.0110737 0.125093 -0.00680678 +-0.0358405 0.094357 -0.023472 +0.0259145 0.102099 0.0411479 +0.0426389 0.0764517 0.0281735 +0.00597565 0.131268 0.0190237 +-0.0475211 0.165506 -0.00586183 +0.0138473 0.035286 0.0424107 +-0.0544751 0.0987674 0.042954 +0.0329063 0.0668566 -0.0177475 +-0.0715523 0.0819441 0.0400873 +-0.0483263 0.149906 -0.00403153 +0.0417112 0.0986332 0.0241669 +-0.0591403 0.039472 0.0459797 +-0.0649985 0.156251 0.0205012 +-0.0389795 0.034282 0.00907489 +-0.0627215 0.0592404 0.0161384 +-0.0367435 0.0437017 -0.0271198 +-0.0164726 0.0387782 -0.0143554 +0.0302495 0.0773125 -0.0211724 +0.0378723 0.109729 0.00416584 +-0.0033562 0.120959 -0.0122202 +-0.0465665 0.0433151 -0.011194 +-0.0597431 0.093988 -0.019461 +-0.0756514 0.0743685 0.0320217 +0.0461779 0.083439 0.010174 +-0.0757827 0.151399 -0.00889222 +-0.0417451 0.0768346 -0.0188724 +-0.0617437 0.0421117 0.0428503 +0.00176163 0.130465 0.00157228 +0.0429689 0.0696277 0.0268653 +-0.0432762 0.0450842 -0.0143236 +-0.0525312 0.0475838 0.0226634 +-0.0153636 0.128543 0.00690549 +-0.0685053 0.109678 0.0379594 +0.0174805 0.103096 0.0453391 +0.0217176 0.0632088 0.0471364 +0.0359993 0.0955223 0.036379 +-0.0451488 0.0335546 0.00486717 +-0.0681193 0.15804 -0.05439 +-0.0661021 0.155727 0.025928 +-0.00573558 0.0684573 -0.035843 +-0.0181282 0.187252 -0.018852 +-0.0445141 0.050571 0.038927 +-0.00049716 0.0856626 0.0573342 +0.016507 0.0913965 0.0503683 +-0.0333397 0.0410057 0.0499212 +-0.0351946 0.125334 -0.00338173 +-0.0616183 0.16622 -0.0565931 +-0.0624979 0.0760891 0.0414437 +0.0350466 0.107363 0.0297386 +-0.0720199 0.063399 0.00874547 +-0.0877434 0.135138 0.0431967 +0.0458379 0.0588925 -0.00503856 +-0.0385014 0.119389 0.0303589 +-0.0647267 0.0417808 0.0373932 +-0.0226655 0.0537608 -0.0296706 +-0.0584982 0.105689 0.0406051 +-0.0137228 0.0685659 -0.0377913 +-0.0817302 0.142079 0.0441697 +-0.0426358 0.0548841 -0.0113796 +-0.0135008 0.082884 0.0573146 +-0.00338001 0.130095 0.0228247 +0.0172769 0.0708593 -0.0295557 +-0.0246932 0.065394 -0.0335995 +-0.0314011 0.178523 -0.00645128 +-0.0575589 0.154615 -0.000238768 +-0.0407441 0.0753914 -0.0183192 +-0.084936 0.144668 0.0388142 +-0.0365092 0.108385 0.0376381 +-0.0851088 0.102115 0.000391121 +-0.0646522 0.0642554 -0.00503339 +-0.0754983 0.145823 -0.00786764 +-0.0474148 0.133778 0.0200381 +0.012958 0.0904818 -0.0298536 +-0.0425054 0.0705013 0.0420152 +0.0369946 0.0686204 -0.0137746 +0.0462743 0.0775122 0.0165366 +-0.0417874 0.128546 0.00302224 +0.00250208 0.0547919 0.0536548 +-0.0543206 0.140979 0.0284164 +-0.0492132 0.138613 0.0153977 +-0.0204064 0.162527 -0.00684616 +-0.0194926 0.111309 0.040066 +-0.00849594 0.0829198 0.0577964 +-0.0467773 0.0826601 -0.021013 +-0.0535197 0.0472233 -0.00680686 +-0.0092432 0.169141 -0.0244221 +-0.0594862 0.0804633 0.0433033 +-0.0764447 0.154164 -0.0158984 +0.0585888 0.0538213 0.0151823 +-0.0588396 0.0925945 -0.0203375 +-0.0761105 0.167387 -0.0256061 +0.0432176 0.0401728 0.0130684 +-0.0395679 0.152136 0.0040279 +-0.0685344 0.180035 -0.058648 +-0.0404998 0.0930589 0.0424923 +0.0428754 0.100088 0.00417324 +-0.0320271 0.0553591 -0.0124271 +0.0199862 0.0348656 0.0241629 +-0.069479 0.123198 0.0530616 +-0.0239594 0.117024 -0.0138685 +-0.013157 0.175712 -0.0209577 +0.00451102 0.0674972 0.0557889 +0.0304128 0.0431004 -0.0051324 +-0.0887794 0.151473 0.0131594 +0.0317917 0.0949031 -0.0164462 +0.0342895 0.112223 -0.00202032 +-0.0728652 0.170808 -0.0480355 +0.0253565 0.075473 0.0472224 +-0.0754952 0.15561 -0.00190651 +0.060278 0.0581371 0.013168 +0.00444274 0.131539 0.0170385 +0.00950273 0.0546854 0.0525766 +-0.028415 0.178753 -0.00594863 +-0.011518 0.0431769 0.0500228 +-0.0504724 0.141671 0.0164028 +-0.0424936 0.045133 0.0413379 +0.0207994 0.125738 0.00307388 +-0.0689469 0.0433261 0.00632212 +0.0111753 0.0766426 0.0548499 +0.0297504 0.0462054 0.0339396 +-0.0674791 0.0622216 0.0214031 +0.0131787 0.0793804 0.0542326 +-0.0630395 0.136976 -0.00741235 +-0.0026931 0.0386465 0.0251959 +-0.0862725 0.103636 0.0233541 +-0.072832 0.162419 -0.0389636 +-0.0670825 0.156321 0.0197603 +-0.0572305 0.057508 0.0152056 +-0.0876158 0.136354 0.00421533 +-0.0214752 0.0609386 0.0459919 +-0.007347 0.0952877 -0.0329727 +-0.0613578 0.0586321 0.0151557 +0.00350505 0.0590839 0.0549927 +-0.0372275 0.160948 0.000450465 +-0.0457572 0.0336839 -0.00997088 +0.0106658 0.0351593 0.00371028 +-0.0714997 0.16363 -0.0138384 +0.00840839 0.117161 -0.0162388 +-0.0493716 0.143224 0.00839291 +0.0251748 0.123444 0.0203849 +0.0329112 0.096871 0.0389677 +0.044554 0.0917551 0.0201604 +-0.0384935 0.0562767 0.0397971 +-0.0785284 0.123123 0.0516319 +0.0426769 0.101505 0.0101616 +0.00833271 0.0567886 -0.0305627 +-0.0876135 0.100396 0.0230423 +-0.0327059 0.0779055 -0.0285245 +0.0119151 0.0860485 0.0542349 +-0.0675927 0.17056 -0.0354212 +-0.0807265 0.0770568 0.0269252 +-0.0384859 0.0520062 0.0392089 +0.0452145 0.0482364 0.0300085 +0.0204736 0.0851385 0.0500118 +-0.0600179 0.155783 0.0193707 +0.0164701 0.0976264 0.0474551 +-0.0456663 0.0410589 -0.0152981 +-0.0821974 0.128571 0.0521036 +-0.0304964 0.0974331 0.0445755 +-0.0540878 0.128312 0.0358453 +0.0390858 0.0407779 -0.000614316 +-0.0725241 0.13724 0.0489632 +-0.0620129 0.0587144 0.0113478 +0.0455822 0.0848004 0.0171734 +-0.0839185 0.112898 0.00127069 +-0.0728197 0.155564 0.00463235 +0.0277412 0.121021 0.0227689 +0.0301995 0.0768447 0.0437008 +-0.0106344 0.174261 -0.0225996 +-0.0617342 0.0737271 -0.0167014 +-0.0414956 0.0464933 0.0408152 +0.03243 0.0535036 0.0361605 +-0.0377322 0.150234 -0.00179971 +-0.0847627 0.109032 0.02334 +-0.0642974 0.167953 -0.0385345 +-0.0221614 0.0825281 0.0558751 +-0.0504951 0.0960175 0.0443724 +-0.0508177 0.0501221 0.014822 +-0.0436492 0.0577877 -0.0118151 +-0.0189776 0.0390241 0.0529956 +-0.0623698 0.169401 -0.0505859 +-0.0105368 0.0850533 -0.0384463 +-0.0181795 0.183113 -0.0176247 +0.0314401 0.110365 -0.00894711 +-0.0127075 0.065682 -0.0367743 +-0.0273345 0.172717 -0.009826 +-0.0666857 0.141706 -0.00893584 +0.0408833 0.10285 0.0201769 +-0.0876525 0.145908 0.0330215 +-0.0436328 0.056346 -0.0115255 +-0.0611631 0.0428583 0.0256966 +-0.0330915 0.16076 -0.0136886 +-0.085208 0.150101 0.00618898 +-0.0615069 0.172523 -0.0575905 +0.0555907 0.0604655 -0.000426808 +-0.0850315 0.151395 0.00719993 +-0.0728007 0.0864364 -0.0158265 +-0.003188 0.127967 0.0287063 +0.0455462 0.0861954 0.016167 +-0.0217098 0.115215 -0.0159934 +-0.0414975 0.0916447 0.0424797 +0.0487043 0.0430197 0.0122221 +-0.0869351 0.106366 0.0163624 +-0.0156753 0.0541059 -0.0332392 +-0.06162 0.150156 -0.00124665 +-0.00577101 0.098213 -0.0280417 +0.0223236 0.0550419 -0.0260567 +-0.00429403 0.131101 0.0138416 +-0.0636168 0.143654 -0.00954122 +-0.0855598 0.0912595 -0.00155473 +-0.0404413 0.10705 0.0387043 +0.0547917 0.0553704 0.0263503 +-0.0822116 0.101996 0.0303518 +-0.0437463 0.128889 0.0155826 +-0.0664819 0.0397537 -0.00588584 +-0.067283 0.161835 -0.0137578 +-0.061699 0.0599431 0.00295203 +-0.0715633 0.170815 -0.0500445 +-0.0861137 0.0805676 0.00950062 +-0.0502228 0.125461 0.0326401 +0.0589666 0.0552427 0.017183 +-0.0327176 0.125444 0.0196276 +-0.0632934 0.151996 -0.00122225 +-0.0512927 0.135429 -0.000552487 +-0.0184842 0.0897075 0.0555921 +-0.0260646 0.11803 -0.0129143 +0.0198889 0.0631747 0.0480195 +-0.0465912 0.145038 0.00283923 +0.0534733 0.0728245 0.019221 +-0.0352804 0.0341155 -0.0193879 +-0.0829241 0.126549 -0.00467577 +0.0279852 0.0352646 0.0181572 +-0.0531741 0.150869 0.0213978 +0.0202497 0.0347399 0.020698 +-0.062763 0.149042 -0.0175788 +0.00226918 0.115596 -0.0185376 +0.0250704 0.12404 0.011788 +-0.045498 0.101529 0.0420301 +-0.058497 0.0426323 0.0447374 +0.0455164 0.0904085 0.0121603 +0.0215692 0.0352857 0.025924 +-0.0274987 0.0631476 0.0380009 +-0.0140602 0.172758 -0.0187663 +0.0587826 0.0538552 0.0121765 +-0.0628795 0.15219 -0.00958093 +-0.0468135 0.1536 0.00939603 +-0.0928405 0.121514 0.033281 +-0.0622964 0.150648 -0.0145762 +0.0475064 0.0611159 0.0308231 +0.00412571 0.107297 -0.0203039 +-0.0703978 0.156305 0.0156818 +-0.053643 0.135335 0.0311995 +0.0067064 0.0341407 0.0184863 +-0.0466442 0.0397388 -0.0142756 +0.0119051 0.0711889 0.0540767 +-0.0447375 0.0357143 0.0441717 +-0.0228183 0.0840509 -0.0381648 +-0.023326 0.122164 -0.00726067 +0.0441999 0.0790177 0.0251667 +-0.0276246 0.160982 -0.00149388 +-0.0399791 0.126816 0.018458 +0.0222264 0.09191 -0.0233017 +-0.0627692 0.156841 -0.0155919 +0.044508 0.0412168 0.00624902 +-0.0731279 0.155455 -0.0309078 +0.0183024 0.0347298 -0.00182982 +-0.01652 0.0715906 0.0550352 +-0.091634 0.141989 0.0201675 +0.0440337 0.0734407 -0.000804833 +-0.0524198 0.0648658 0.0346087 +0.0572481 0.0508905 0.0141872 +-0.0164766 0.111102 -0.0196668 +-0.0418874 0.108498 -0.0194287 +0.0321354 0.0549697 0.0375085 +-0.0644897 0.102874 0.0413067 +0.0465079 0.0583728 0.0318256 +-0.0334582 0.0518969 0.0377238 +-0.0729908 0.139888 -0.00698816 +-0.0534544 0.124093 0.0367404 +0.0173165 0.0622663 -0.028279 +-0.0554104 0.0513256 0.00948897 +-0.014903 0.172738 -0.0182312 +-0.0502115 0.141667 0.015397 +0.0229958 0.0375848 0.0332895 +-0.0749615 0.135451 -0.00681495 +-0.0855353 0.0938173 0.0282665 +-0.069508 0.102769 0.0393316 +-0.0205392 0.0971418 -0.0249761 +-0.0312923 0.0362769 0.0513145 +0.0260175 0.0991397 -0.0189626 +-0.00594641 0.0989148 -0.0267499 +-0.0708605 0.0347825 0.00928864 +-0.0845393 0.103233 0.0269979 +0.0406232 0.0953057 0.0289912 +-0.0456818 0.0650665 -0.0140257 +-0.0326318 0.168236 -0.00522072 +-0.0765723 0.0689281 0.00553415 +-0.0176728 0.049548 -0.0303695 +0.00113463 0.130461 0.00151005 +-0.08699 0.0859713 0.00247197 +-0.0338357 0.095789 -0.0234311 +-0.0304987 0.10293 0.0419798 +0.0336335 0.0713894 0.0398251 +-0.0224957 0.101642 0.0440993 +0.0309373 0.119109 0.0111337 +-0.0734894 0.156164 0.020416 +-0.000755237 0.0740961 -0.035785 +0.0354988 0.0469226 0.030944 +-0.00617179 0.128513 -0.00228639 +-0.00460988 0.0388908 -0.00276124 +-0.0678289 0.135464 0.0458614 +0.0345596 0.114411 0.00388032 +-0.0884532 0.112251 0.0353052 +-0.0709934 0.170517 -0.0295248 +0.0284454 0.0995183 0.0412905 +0.0402167 0.0685122 0.0317439 +-0.0665769 0.0362823 0.0365183 +-0.0765583 0.148625 -0.00886956 +0.0576507 0.0606695 0.00219201 +0.060413 0.0664733 0.017165 +0.022246 0.0835763 0.0498509 +-0.0821459 0.0912329 0.0320422 +-0.0746727 0.145787 -0.00986958 +0.0345089 0.111329 0.0271807 +0.0594367 0.0663847 0.00713811 +0.0282217 0.0664463 -0.0207545 +-0.0619747 0.170963 -0.0535908 +-0.0394944 0.0492076 0.0395541 +-0.0787666 0.165266 -0.0299591 +-0.0749441 0.129634 -0.00796551 +-0.00112962 0.125371 0.0323555 +-0.0154803 0.0500282 0.047966 +0.0153592 0.0953434 0.0487033 +-0.085237 0.147388 0.00618456 +-0.0128008 0.0841443 -0.0388521 +0.024383 0.0518665 -0.0223004 +-0.0342551 0.0766309 -0.0244955 +-0.0670839 0.173532 -0.0453192 +-0.0772544 0.0764799 0.0316515 +-0.0270646 0.053566 0.0376661 +-0.0225205 0.112681 0.0384786 +-0.0884304 0.0874699 0.00847782 +-0.0737584 0.0914853 0.0405847 +-0.064968 0.128232 -0.00872903 +0.000512384 0.127929 0.028588 +-0.0599553 0.0610872 0.0239566 +-0.0384792 0.116679 0.0322191 +-0.0485119 0.112536 -0.0170517 +-0.0304781 0.0523954 -0.0163632 +0.0387588 0.108855 0.00681782 +-0.0406156 0.155109 0.0060988 +-0.0471466 0.149481 -0.0040486 +0.0179495 0.127337 0.00345096 +-0.0395837 0.0336987 -0.0198537 +-0.0633751 0.0344193 0.0288044 +-0.0424853 0.128365 0.0145816 +-0.0364913 0.113889 0.0338295 +0.0353283 0.112832 0.00268414 +-0.0653226 0.0343003 0.0144151 +0.0435313 0.065065 0.0273105 +-0.0795726 0.0867837 -0.00954059 +-0.0104381 0.171321 -0.0205524 +-0.0737003 0.156269 0.0145144 +-0.0733818 0.155466 -0.0289107 +-0.0198527 0.0382258 0.0238627 +-0.0188257 0.0725897 0.0542693 +-0.0778777 0.117832 -0.00599287 +-0.0365049 0.10423 0.0397359 +-0.00948278 0.0978353 0.051868 +-0.0103201 0.0393296 0.0497389 +-0.0876274 0.137747 0.00620032 +0.0416732 0.0819555 0.0304093 +0.0608524 0.0609661 0.0101561 +-0.0767143 0.154218 -0.0048969 +0.0174945 0.0838575 0.0514031 +-0.066433 0.0337378 -0.00503676 +-0.0232113 0.177135 -0.0206374 +0.0100949 0.034771 0.018605 +0.042675 0.0751161 0.0282624 +-0.0866662 0.0833296 0.0114916 +-0.0504965 0.157865 0.00943584 +0.0433406 0.0973216 0.0191637 +-0.0888303 0.0915034 0.00845607 +-0.0555242 0.0415797 -0.00918326 +-0.0337405 0.075174 -0.025488 +-0.0906275 0.137865 0.0211926 +-0.0123027 0.0389534 -0.0136872 +-0.045835 0.0941966 -0.0219229 +-0.0238433 0.163025 -0.0155105 +-0.0522937 0.12758 -0.00475935 +0.0308793 0.0356029 0.0166157 +0.0423563 0.0588819 -0.00453174 +-0.00663392 0.0466819 -0.0297341 +-0.0484493 0.0656843 0.0374132 +-0.0270407 0.125883 0.0113821 +-0.0910269 0.129538 0.0072515 +-0.0455907 0.0447683 -0.0109766 +0.00905498 0.0971664 -0.0248901 +0.00396755 0.0341147 0.00886829 +0.00550365 0.123767 0.0339438 +0.0400787 0.0432895 0.0279756 +-0.00815712 0.126302 0.0298556 +-0.0609217 0.118124 -0.010668 +-0.0141549 0.129252 0.0145753 +0.0274448 0.120188 0.0255104 +-0.0485004 0.111187 0.0370789 +0.0451596 0.0789195 0.0230398 +-0.0138991 0.162654 -0.0155462 +-0.0528814 0.0447887 0.0196824 +0.0277468 0.0465681 -0.0107176 +-0.0580291 0.124109 0.0406616 +-0.0404897 0.0874362 0.0429424 +0.0316544 0.117354 0.0228159 +0.0277648 0.098182 0.0420578 +-0.0391765 0.165177 -0.0125287 +-0.0691207 0.112747 0.0474107 +-0.0614963 0.102908 0.0417081 +0.0393676 0.0927337 0.0325144 +0.0214921 0.125223 0.0232941 +-0.0167077 0.059948 -0.0356741 +-0.0619704 0.118373 0.041992 +-0.0359339 0.109235 -0.0196158 +-0.0150259 0.185694 -0.0231645 +0.0245929 0.0577938 0.0442192 +-0.00233157 0.122878 -0.010278 +-0.0434949 0.0817618 0.042266 +0.0298844 0.0350171 0.0132987 +-0.00424346 0.0409986 0.0479883 +-0.0776115 0.15005 -0.0049035 +-0.0124244 0.108763 -0.0212047 +-0.0798966 0.083235 0.0342815 +-0.0813623 0.104616 -0.00457868 +-0.0167402 0.0671791 -0.0380101 +0.0259555 0.123153 0.0178233 +0.0406613 0.0638232 0.0297482 +-0.0129458 0.117871 -0.0148632 +-0.0708515 0.0937008 -0.0159297 +-0.0688238 0.1383 0.0462399 +-0.0886846 0.136388 0.00720801 +0.0460186 0.0714912 0.0208033 +0.0465334 0.07646 0.0111853 +0.000795729 0.0345137 0.0115011 +0.0318042 0.0661523 0.0406683 +-0.0277917 0.0810724 -0.036339 +-0.012329 0.0361667 0.050366 +-0.0672863 0.151256 -0.0426939 +0.0328851 0.0556122 -0.0127142 +-0.0444939 0.107088 0.0401229 +-0.088037 0.113814 0.026966 +-0.0228073 0.184465 -0.0170667 +-0.00369909 0.0598617 -0.0340393 +-0.0698551 0.16523 -0.017589 +-0.0464984 0.047794 0.0396541 +-0.0756919 0.143067 -0.00582827 +-0.0208788 0.0383361 0.00183886 +-0.0768287 0.154208 -0.00589938 +-0.0147866 0.0799249 -0.0391233 +-0.0699384 0.150598 0.0380766 +-0.0866088 0.126656 -0.00171455 +-0.0792409 0.168033 -0.0359701 +-0.0650871 0.0417056 0.03635 +0.0353256 0.109535 -0.00390394 +0.00651309 0.0828012 0.0562471 +-0.0512535 0.0528689 0.0137817 +-0.0635072 0.0590749 0.0125217 +-0.0892074 0.127019 0.0449806 +0.0451896 0.0875706 0.0191665 +-0.0576689 0.0350157 0.0450337 +-0.0441239 0.129077 0.0169132 +0.00351519 0.0634007 0.0566286 +-0.0456618 0.0741031 -0.0174455 +-0.045802 0.0382259 -0.0192856 +-0.0774749 0.141413 0.0470689 +0.019092 0.0350694 0.0292369 +-0.0721908 0.176974 -0.0457483 +-0.0228049 0.0784515 -0.0385457 +-0.0196863 0.0539295 -0.0316066 +0.0370985 0.0632585 0.0359995 +-0.0097823 0.0613531 -0.0352263 +-0.0518485 0.147799 0.0174109 +-0.0424957 0.11253 0.0356818 +-0.00161218 0.0387745 0.0252993 +0.0432025 0.0777701 0.0272794 +0.0158912 0.0644868 0.0510299 +-0.0624956 0.0861834 0.0447184 +0.0226823 0.0605452 0.0467602 +-0.0345153 0.0780634 -0.0235017 +-0.0693572 0.156301 0.0160519 +-0.0848272 0.110715 0.0391424 +0.00397477 0.0389229 -0.0104191 +-0.0107444 0.0685007 -0.0365794 +0.0105122 0.0673666 0.0542979 +-0.0493982 0.113885 -0.0164603 +0.0292359 0.120576 0.0147663 +0.0143954 0.0433708 -0.024029 +-0.0548811 0.099887 -0.0210509 +-0.0345638 0.113971 -0.0166195 +-0.00945158 0.0346766 0.0453022 +-0.0114995 0.0486859 0.0490069 +0.047721 0.0729559 0.00883547 +0.00782583 0.131487 0.0111342 +0.018385 0.126365 0.000765748 +-0.0801977 0.117632 0.0490824 +0.0508224 0.0446928 0.0102182 +-0.0792484 0.154932 0.0111245 +-0.0616259 0.175734 -0.0596865 +-0.0554957 0.10156 0.042627 +-0.0693451 0.162383 -0.0509602 +0.0464905 0.0624784 0.0299685 +-0.0626979 0.149033 -0.0165859 +-0.027787 0.0838632 -0.0360686 +-0.068908 0.112267 -0.0105177 +-0.0464636 0.157957 0.00818306 +-0.0656199 0.0690554 -0.0100807 +-0.0594903 0.081873 0.0434438 +-0.042501 0.0803745 0.0423542 +-0.0715599 0.0733863 -0.0105456 +-0.00392373 0.129832 0.00104637 +0.0231411 0.0844685 -0.0255261 +-0.0582906 0.0411368 0.01871 +-0.0231503 0.121506 -0.00857745 +0.0353371 0.0534224 -0.00701071 +-0.028498 0.108421 0.0390601 +-0.0161996 0.0386499 0.0314325 +0.0417053 0.0943445 -0.00480688 +-0.037505 0.0874848 0.0436782 +-0.0859867 0.140484 0.00417932 +-0.0394569 0.124785 -0.00795634 +-0.0629125 0.111049 -0.0145904 +-0.0697706 0.0337438 0.00328799 +0.0353216 0.0863185 -0.0174167 +-0.0529232 0.125495 0.0357533 +-0.0145001 0.0870236 0.0569643 +-0.00422597 0.10111 -0.0231367 +0.026954 0.114984 -0.00791167 +0.0123614 0.0509077 -0.0278502 +-0.0705953 0.157132 -0.0018785 +-0.0270301 0.0604609 -0.0294673 +-0.0252429 0.163867 -0.00684922 +0.0164575 0.0900289 -0.0273543 +0.0182356 0.126981 0.00216332 +-0.0276261 0.15573 -0.00786612 +-0.0687195 0.165823 -0.0200644 +-0.0237576 0.0713185 -0.0373359 +-0.0350727 0.157773 -0.0116201 +-0.0115095 0.129073 0.00398865 +-0.000506085 0.0442149 0.046198 +0.0372544 0.109701 0.0220387 +-0.0154921 0.0382096 0.0157388 +-0.0500202 0.131989 -0.0014354 +-0.025472 0.0851651 0.0520429 +-0.0328435 0.125555 0.000439943 +-0.0773991 0.152954 0.0323974 +-0.0504161 0.144734 0.0123765 +-0.0576549 0.124438 -0.00742698 +0.0532901 0.0621073 -0.00218568 +-0.0298754 0.0748068 -0.0335581 +-0.0642433 0.0338438 0.0114826 +-0.0316113 0.0409091 -0.0301005 +0.00142887 0.0392678 -0.00936829 +0.0274179 0.122108 0.0155174 +-0.0144987 0.0884006 0.0568363 +-0.0184962 0.109943 0.0409607 +0.0379028 0.0997575 -0.00879746 +-0.0244855 0.0461464 0.0516096 +0.03717 0.0713299 0.0361376 +0.0442521 0.0804694 -0.00179963 +-0.0693598 0.153979 -0.049866 +-0.045049 0.0367204 -0.0222184 +0.0226853 0.115014 -0.0119595 +0.0308676 0.0713453 0.0410867 +-0.0253533 0.0381958 0.00468802 +0.0115087 0.101793 0.0474223 +0.0122157 0.0346138 -0.0197432 +-0.078807 0.10613 0.032485 +0.0412927 0.101424 0.0211601 +0.0449984 0.0413097 0.00725015 +-0.0614983 0.0861808 0.0447299 +0.0201601 0.0357218 -0.00467829 +-0.0270641 0.0376545 -0.0293745 +-0.0491197 0.137061 0.00540677 +-0.00249881 0.0829011 0.0575494 +0.021052 0.0358187 -0.0026817 +-0.0154895 0.0559453 0.0511175 +-0.0718433 0.0833097 0.0403454 +-0.087976 0.141871 0.0376917 +-0.0787586 0.163869 -0.0289482 +-0.0485008 0.0732772 0.0415918 +-0.0366615 0.0606699 -0.0121541 +0.0262206 0.0435744 -0.00668237 +0.000219502 0.0370979 0.0467851 +-0.00149685 0.0456811 0.047029 +-0.0545635 0.122251 -0.00910565 +-0.0186556 0.0480312 -0.0293255 +0.0387854 0.0701818 -0.0117862 +-0.0654945 0.0398115 -0.0063825 +-0.0437744 0.116579 -0.0153348 +-0.0344901 0.0987486 0.043091 +0.0610023 0.062364 0.012157 +0.0141007 0.120583 0.0346592 +-0.0823269 0.108767 -0.000607289 +0.0214843 0.092023 0.0479434 +-0.070667 0.0763937 -0.014042 +0.021114 0.0592021 0.0480036 +0.0252499 0.0775815 -0.0248688 +-0.0601377 0.0338299 0.0176745 +-0.0579501 0.0592474 0.0206872 +-0.0769058 0.154074 0.0295482 +0.0198639 0.11968 -0.0089705 +0.0022305 0.0754937 -0.0353597 +-0.00780413 0.0840976 -0.0379648 +-0.0611789 0.172541 -0.0596341 +-0.0447417 0.0768063 -0.0185987 +-0.017374 0.0569064 0.0504968 +0.00450466 0.087016 0.0568401 +-0.0709391 0.109631 0.0395791 +-0.0674006 0.0406253 -0.00334064 +-0.0311093 0.169745 -0.00652433 +0.0242906 0.0676576 -0.0247124 +-0.0326084 0.171239 -0.00339173 +-0.0325897 0.0666513 -0.0194517 +0.0319052 0.0437397 0.0295375 +-0.0450254 0.127281 -0.00449582 +-0.0226309 0.0478785 -0.0276417 +-0.0583127 0.0580812 0.00726379 +-0.037778 0.0827556 -0.0219531 +-0.0518874 0.106988 -0.0190452 +0.0163996 0.044784 -0.0236657 +0.0103374 0.0553349 -0.0300221 +0.0206753 0.126786 0.0115854 +-0.0850979 0.131233 0.0492505 +-0.0192324 0.177141 -0.0234526 +-0.0199616 0.0697296 0.0526775 +-0.0561055 0.158254 0.000206899 +-0.055732 0.115927 -0.0145408 +-0.0417663 0.162365 0.00442786 +-0.0305905 0.119479 -0.0103702 +0.0234999 0.0955508 0.0464417 +-0.0498856 0.149233 0.0119087 +-0.0154824 0.185702 -0.0219175 +0.00917376 0.125511 -0.00726227 +-0.0913426 0.147495 0.0231401 +-0.00381375 0.0896299 -0.0357356 +-0.0686943 0.154419 0.0308917 +-0.02552 0.111233 0.0379672 +-0.0705473 0.1414 0.0460484 +-0.00201946 0.100869 0.0458524 +-0.0876244 0.129442 0.00130199 +-0.00449535 0.0965559 0.0536663 +-0.0271292 0.0850573 0.0494379 +-0.0914908 0.1337 0.0152201 +0.00523694 0.126704 0.0302977 +-0.0470651 0.153179 -0.00606436 +-0.0672153 0.156284 0.0168104 +-0.0427934 0.0869807 -0.0215837 +0.0423379 0.0683118 0.0277209 +-0.0295859 0.0790353 -0.0345348 +-0.0477964 0.062891 0.036824 +-0.00968443 0.0570101 -0.0338896 +0.0451851 0.0861731 0.0211635 +0.00951284 0.0532319 0.0521285 +0.0302906 0.0787129 -0.0208549 +-0.0738862 0.104992 -0.0108534 +0.0453646 0.0575572 -0.00557548 +-0.0663103 0.0759418 0.0397029 +0.0143833 0.128699 0.00214848 +0.00580886 0.130668 0.0218239 +-0.0131274 0.0387957 -0.00624825 +-0.00997898 0.172997 -0.0279186 +-0.0620827 0.174072 -0.0556227 +-0.0546337 0.0334816 0.0119976 +0.0208676 0.121124 0.0316774 +0.0220436 0.125932 0.0163676 +0.0377227 0.0561747 0.0314909 +-0.0721609 0.147032 -0.0238695 +-0.0738111 0.0907253 -0.0150698 +-0.0362217 0.0335837 -0.0228111 +0.0387097 0.105846 2.20656e-05 +-0.0556277 0.0365615 0.0468082 +-0.0836005 0.0763298 0.006515 +0.0280677 0.100848 0.0407486 +-0.0831241 0.100626 0.0298981 +-0.0305493 0.0479587 -0.0242789 +0.0165747 0.0519808 0.0466207 +0.0447673 0.0847221 0.00118921 +-0.0146056 0.0435263 -0.0269315 +0.0273074 0.0346174 0.0112772 +-0.0683005 0.139737 0.0452157 +-0.0485925 0.132707 0.00186362 +0.00897502 0.113705 0.0394792 +0.010104 0.0343592 -0.0200136 +-0.0769339 0.126684 -0.00758482 +0.00350625 0.0547769 0.0535608 +-0.0850528 0.0993835 -0.000573805 +0.00144009 0.0350568 0.0184024 +-0.0301745 0.17266 -0.0167996 +-0.0732751 0.148715 -0.0303812 +-0.0837086 0.0952625 0.0306499 +-0.0742711 0.149885 -0.0318724 +-0.00654578 0.0384949 0.010053 +-0.0248989 0.0968475 -0.0246804 +-0.0633856 0.148243 -0.0195768 +-0.0647288 0.126998 0.0468559 +-0.058406 0.0598457 0.000248469 +0.0425358 0.0710418 0.0280089 +-0.0915343 0.140602 0.0181819 +-0.0407824 0.116214 -0.0149415 +-0.0445073 0.0491885 0.039305 +0.0294698 0.0801098 -0.0210213 +-0.0277559 0.0348695 0.0499059 +-0.0137302 0.107232 -0.0215702 +-0.0482685 0.037339 -0.0123839 +-0.0673815 0.0659915 0.0287149 +-0.0567046 0.11983 0.0390246 +0.0211901 0.113994 0.0360983 +0.0319596 0.11565 0.0257836 +-0.050462 0.0402796 0.0458238 +-0.0364752 0.09732 0.0430461 +0.00119043 0.0895238 -0.0341779 +-0.0699807 0.149351 0.039589 +0.0439472 0.0917185 0.0231564 +-0.0559199 0.113507 -0.0160179 +-0.0853556 0.095327 -0.00158429 +-0.0662723 0.154476 -0.00173975 +-0.0186027 0.111108 -0.0196906 +-0.0563562 0.140993 0.0307629 +-0.00358231 0.0383094 0.0162632 +-0.0568935 0.0562594 0.000567085 +-0.00649422 0.0590504 0.0549316 +-0.0245507 0.183147 -0.010424 +-0.032468 0.175717 -0.00291757 +-0.0132616 0.175663 -0.0275653 +0.00407218 0.0361395 0.0234015 +-0.00250245 0.104479 0.0441797 +0.00787676 0.127927 0.0283381 +-0.0760841 0.164579 -0.0198769 +-0.0814657 0.130234 0.0522094 +0.0322493 0.109934 -0.00848346 +-0.0747758 0.152715 -0.0228916 +-0.0360726 0.1261 0.0198793 +0.00651921 0.0869957 0.0564058 +-0.0863282 0.151358 0.00923307 +-0.00766666 0.0527037 -0.0328501 +0.0329828 0.110047 0.0302661 +-0.0819069 0.0844754 0.0320139 +0.020413 0.0521197 0.0451417 +-0.043267 0.149185 0.00566881 +0.03267 0.0767015 -0.0187757 +-0.0861456 0.140625 0.0415389 +-0.0665323 0.154667 0.00252946 +-0.0231566 0.158136 -0.0102789 +-0.0217907 0.0957944 0.0466571 +-0.0638349 0.156748 -0.0426051 +-0.0346441 0.117803 -0.0126135 +0.00980894 0.0658051 0.0545289 +-0.080258 0.0859229 0.0345477 +-0.0117542 0.0386862 -0.015202 +-0.080536 0.135397 0.0502642 +-0.0325368 0.0792892 -0.0295289 +-0.0784828 0.0717889 0.00251767 +-0.00149343 0.0883979 0.0566431 +-0.0137942 0.0386802 -0.0156021 +-0.0444896 0.101534 0.0420576 +-0.00192307 0.107424 -0.021877 +-0.0440699 0.153194 -0.00699527 +0.00318991 0.0880718 -0.0337792 +-0.0344943 0.0718865 0.0415833 +-0.030416 0.0692532 -0.0284548 +-0.0622359 0.167822 -0.0495929 +-0.0344858 0.100109 0.0424402 +0.00649387 0.0590149 0.0539921 +0.0360791 0.111295 0.00152105 +-0.0587368 0.0434475 0.0440841 +-0.0417025 0.0666657 -0.0153449 +-0.0533816 0.0513995 0.0117052 +-0.0285002 0.097396 0.0440561 +-0.0690491 0.153118 -0.0485047 +-0.0144923 0.093841 0.0546527 +-0.0633747 0.036885 -0.0080479 +-0.0706693 0.165215 -0.0479768 +0.0127157 0.0350729 0.0423657 +0.00853944 0.100396 0.0475311 +0.0211162 0.126093 0.00605375 +-0.0514924 0.113914 0.0348157 +0.0172187 0.117738 -0.0128881 +-0.01069 0.0969192 -0.0307004 +0.0121568 0.0930338 -0.0284961 +-0.0772387 0.158974 -0.0142914 +-0.0667905 0.0852019 -0.0183581 +0.0154254 0.0834009 0.0522607 +-0.0487147 0.0723044 -0.01565 +-0.0464696 0.0675313 0.0396048 +-0.0110203 0.0383532 0.0129011 +-0.0205151 0.114503 -0.0172551 +-0.0556769 0.0499718 0.00979142 +-0.0503626 0.0642656 0.0349674 +-0.00189958 0.130575 0.00323807 +-0.00749418 0.0533074 0.0526841 +-0.0781504 0.0736081 0.0268981 +-0.00216638 0.09997 -0.023881 +-0.0374964 0.119384 0.0304732 +-0.0237883 0.0932085 0.0487292 +-0.0846322 0.139314 0.044315 +0.00579995 0.0355749 0.0242599 +-0.0498385 0.0970763 -0.0221981 +0.0311277 0.0795524 0.0433085 +-0.080771 0.105947 -0.00458985 +-0.0541694 0.136721 0.0304424 +-0.0158788 0.038593 -0.0159367 +0.0375503 0.0588742 -0.00872526 +-0.0278572 0.0972984 -0.0239915 +-0.0609119 0.0678343 0.0355003 +0.0406749 0.0801882 -0.00878559 +-0.0891047 0.101026 0.0153901 +0.0370023 0.11146 0.00905905 +-0.00649525 0.0576581 0.0543368 +0.0215982 0.0645366 0.046975 +-0.0290293 0.160675 -0.0139931 +0.00903586 0.100133 -0.0220275 +-0.0584961 0.104303 0.041452 +-0.0664115 0.162305 -0.0579417 +0.0239006 0.0520481 0.0413924 +-0.0216874 0.126575 0.00458035 +-0.0485184 0.0438796 0.0435224 +-0.0231474 0.0384868 -0.00611954 +-0.00826521 0.0380456 0.0491273 +-0.0528526 0.147782 0.0214111 +-0.0907516 0.137857 0.0201957 +-0.0758557 0.103473 -0.0101675 +-0.0397582 0.079747 -0.0196231 +-0.0147733 0.078434 -0.0385776 +0.00381296 0.0379313 -0.0132938 +-0.0694673 0.0635361 0.0216095 +-0.0528954 0.105563 -0.0191967 +0.0343906 0.0529675 -0.00763383 +-0.0293172 0.172724 -0.00740528 +0.00850711 0.0688384 0.055257 +-0.016261 0.181575 -0.0262548 +0.0213104 0.0415776 -0.0147 +-0.0780733 0.100357 -0.00962255 +-0.0846334 0.108922 0.00436756 +-0.0186964 0.0569405 -0.033635 +-0.037924 0.175153 -0.00739726 +-0.049768 0.081217 -0.020889 +0.0335081 0.0942386 0.0398247 +-0.0729901 0.154042 -0.0338982 +-0.0233975 0.156883 -0.00572928 +-0.0873262 0.103661 0.0203534 +-0.0501055 0.129693 0.0310292 +0.029581 0.0907082 -0.0200166 +0.043329 0.066441 -0.000599376 +-0.00664168 0.0482162 -0.0304375 +0.021889 0.0963552 -0.0220144 +-0.0265893 0.161003 -0.00174275 +0.044803 0.0945847 0.0121616 +-0.0725608 0.109721 0.0409258 +-0.0372497 0.126436 -0.00264816 +0.005339 0.0971934 -0.026912 +-0.0241177 0.120704 -0.00972559 +-0.0462757 0.0390662 0.0448146 +-0.00565778 0.12946 0.000751082 +0.0213227 0.122349 -0.00385694 +-0.0414913 0.0790271 0.0430475 +0.0190905 0.127062 0.0195525 +-0.0805286 0.124537 0.0519983 +-0.0782836 0.0860139 0.0367982 +0.0219644 0.126042 0.013483 +-0.0325696 0.0410226 0.0505793 +0.0295979 0.039453 0.0274445 +-0.0475678 0.0446906 -0.0104074 +-0.0654918 0.0917539 0.043991 +-0.0307813 0.122738 0.0233033 +-0.0854845 0.112639 0.0445732 +0.0231366 0.0404268 -0.00664294 +-0.00398687 0.126095 0.0313534 +-0.0641503 0.0436305 0.0113748 +-0.0314872 0.0646167 0.0387865 +-0.0776274 0.0692865 0.00957677 +-0.0195579 0.0946763 0.0515134 +0.014517 0.0344542 -0.0117299 +-0.0376663 0.0621956 -0.0129723 +0.00459507 0.101613 0.0450146 +-0.0281642 0.0346776 -0.0203658 +0.0147654 0.125019 -0.0047274 +-0.0344283 0.0338921 0.0139586 +-0.0364985 0.117968 0.0313259 +-0.0456444 0.0592254 -0.0120696 +-0.0260288 0.0381935 0.00636573 +-0.088169 0.124336 0.0468831 +-0.0540681 0.135339 -0.00310003 +-0.0291607 0.171183 -0.0175503 +0.0104455 0.0488162 0.0487077 +-0.0881632 0.0861128 0.0124706 +-0.0258758 0.0578187 0.0391737 +0.00450037 0.0427385 0.0456181 +-0.0537204 0.0491564 0.0326591 +0.0388727 0.0645792 -0.00975725 +-0.0500679 0.0501277 0.0166633 +-0.0669104 0.120913 -0.00889891 +-0.036233 0.0469115 -0.0220883 +-0.0118859 0.163867 -0.0168515 +-0.0619905 0.129678 -0.00799355 +-0.0652279 0.0397522 0.0288372 +-0.0508809 0.104197 -0.0202021 +-0.00186382 0.104504 -0.0225214 +-0.0619023 0.120903 -0.00899386 +0.00323955 0.0754773 -0.0351385 +-0.0384934 0.105604 0.0386511 +-0.0905225 0.118622 0.0053153 +-0.0284893 0.0835322 0.0466293 +0.00823162 0.0387858 0.0309201 +-0.0616053 0.156855 -0.0285887 +-0.0508615 0.101367 -0.0215394 +-0.0318582 0.102916 -0.0222908 +0.00526525 0.0350275 0.0444668 +-0.0646344 0.0337755 0.00968147 +-0.0640121 0.136992 -0.00763419 +-0.0456074 0.0345826 0.0394197 +-0.0864043 0.111678 0.00530063 +-0.0207807 0.0581858 0.0468036 +-0.0608886 0.105445 -0.0177606 +0.0417928 0.0746499 -0.00676608 +0.0195225 0.0821843 0.0511684 +-0.0464961 0.0833304 0.0442498 +0.0164933 0.119532 0.0345952 +-0.0626731 0.158367 -0.0396045 +0.00725591 0.129807 0.000165614 +-0.0909094 0.114612 0.0400043 +-0.0496217 0.0532216 -0.00894483 +-0.0204558 0.0772045 0.0549311 +-0.0225647 0.184728 -0.0122995 +-0.0389284 0.111648 -0.0181691 +-0.0312712 0.125373 0.00251041 +-0.0157734 0.075693 -0.0388238 +0.0245364 0.0862451 0.0478999 +-0.0296756 0.125596 0.0148252 +-0.0446861 0.130064 0.0166863 +-0.0225936 0.0382891 0.00334965 +-0.0787949 0.0758277 -0.00557109 +-0.0665305 0.155586 -0.0523326 +-0.0631388 0.0620641 0.0242 +0.0275571 0.0875682 0.0452466 +-0.0838788 0.153353 0.0242347 +-0.0365497 0.124951 0.0226726 +0.0318595 0.0673315 0.0407335 +0.00950257 0.0896505 0.0545501 +-0.0597218 0.118329 0.0399103 +-0.0840037 0.0992695 0.0294026 +-0.0777723 0.0832737 0.0363717 +0.0427594 0.0986702 0.00117933 +-0.0422677 0.111306 -0.0177858 +-0.0762231 0.16043 -0.0125715 +-0.0634008 0.115527 0.0417242 +-0.036507 0.106984 0.0382357 +-0.0384749 0.0351927 -0.0135871 +-0.0744578 0.144386 -0.00789461 +0.0593202 0.0701868 0.012517 +-0.0226744 0.0522819 -0.0290541 +-0.0875766 0.122583 -0.000713178 +-0.0170034 0.127025 0.0015954 +-0.0705369 0.155342 -0.0479286 +-0.0709342 0.128224 -0.00904999 +0.00705252 0.0346309 0.0397936 +-0.0585604 0.133937 0.0364008 +-0.0863384 0.102179 0.00442425 +0.0107631 0.0671702 0.0541647 +-0.0695537 0.163673 -0.0146023 +-0.0452915 0.1298 0.0046882 +0.00836647 0.0494746 -0.0282442 +-0.0691053 0.0641529 -0.000471523 +-0.0065051 0.0518538 0.05236 +-0.0557789 0.0811944 -0.0212002 +-0.0801928 0.109885 0.0408487 +-0.0136098 0.0997657 0.0454373 +0.0375013 0.045461 0.0306904 +-0.0857877 0.152992 0.0221351 +-0.00139702 0.0346206 0.0416594 +-0.0501963 0.061364 0.033592 +0.0161097 0.0974052 -0.0230873 +-0.0194917 0.0568426 0.0483686 +0.0492985 0.0561391 -0.00508332 +0.0184753 0.100361 0.0464541 +-0.0504953 0.154968 0.0107183 +0.0147875 0.105075 -0.0193 +0.023524 0.11536 0.0341991 +0.0310013 0.118944 0.0140014 +-0.0172406 0.178621 -0.0252251 +-0.0367055 0.112873 -0.0174612 +-0.026888 0.0344315 -0.0290471 +-0.052616 0.0542078 0.012269 +-0.0374932 0.0478153 0.0397186 +-0.0727381 0.151148 -0.0398146 +0.0042421 0.0740405 -0.0347398 +-0.0170835 0.187214 -0.0216216 +-0.0744375 0.0658205 0.00791081 +-0.0225303 0.159751 -0.00283877 +-0.015413 0.0343578 -0.0194213 +0.0138178 0.034673 0.033937 +-0.0756035 0.0846721 0.0383975 +-0.0823671 0.0939609 0.0321712 +-0.0597053 0.0675469 -0.0111319 +-0.0911321 0.146088 0.0161475 +0.0350128 0.0797448 -0.0167143 +-0.0835371 0.151134 0.0310567 +-0.0125098 0.0759113 0.0569785 +-0.014877 0.12853 0.00563728 +-0.067594 0.162379 -0.0559888 +-0.0299722 0.0523401 -0.0183637 +-0.0175125 0.109971 0.0410978 +-0.0602175 0.0443014 -0.00489461 +0.047415 0.0539813 0.0314992 +-0.0695317 0.0366687 -0.00405392 +-0.0710533 0.04057 0.0057746 +-0.0594926 0.112518 0.0361699 +-0.0870454 0.128039 -0.000695727 +-0.0548606 0.0532734 -0.00439052 +0.0197584 0.121448 -0.00690816 +-0.0217284 0.0919768 0.0523353 +-0.0331407 0.073693 -0.0254949 +-0.0165233 0.0472885 0.0494939 +0.0430185 0.100102 0.00517011 +-0.0941673 0.124186 0.0242853 +0.0398988 0.106999 0.0131638 +-0.0388567 0.0985732 -0.0220835 +-0.013744 0.0347692 0.0478272 +0.0525444 0.0728335 0.00848027 +0.0340202 0.108707 0.0300072 +0.0135389 0.0341511 0.00148413 +-0.0255703 0.121939 -0.00698176 +-0.0627659 0.0795658 -0.0187488 +0.0159163 0.0366121 0.0434543 +-0.0677812 0.0823162 -0.0178553 +-0.00231448 0.129778 0.000344647 +-0.0224096 0.15809 -0.00961754 +-0.0369427 0.15804 0.00437449 +-0.0557441 0.0768187 -0.0193441 +-0.0661875 0.165349 -0.0586121 +-0.0764308 0.11585 0.051182 +0.00923994 0.0795457 -0.0327494 +-0.0141356 0.103403 -0.0235224 +-0.0725643 0.165173 -0.0170441 +-0.0708131 0.0922561 -0.0160967 +-0.052837 0.143168 0.022419 +-0.0289488 0.0487095 0.0453204 +-0.033511 0.104273 0.0404948 +0.0173468 0.0552065 -0.0282783 +-0.0643722 0.0392301 0.0399397 +0.0154605 0.100515 0.0471558 +-0.0389991 0.0361252 0.0429011 +-0.0912831 0.133698 0.0142161 +-0.042206 0.166657 -0.0103803 +-0.0829702 0.111001 0.0428895 +-0.0244677 0.122018 -0.00707965 +-0.00847955 0.107265 0.0437628 +-0.0410173 0.12678 -0.00403845 +-0.00247117 0.091392 -0.0349524 +-0.0733228 0.17276 -0.036126 +-0.0584972 0.102936 0.0420973 +-0.0275816 0.0549129 -0.0253866 +-0.0567567 0.0416998 -0.00856929 +0.00796329 0.0376774 0.0282412 +-0.0764966 0.130271 0.0529935 +-0.0385029 0.0346069 0.040918 +-0.0178242 0.0882801 -0.0380186 +-0.0592916 0.0381211 0.04617 +-0.0507734 0.0826521 -0.0214824 +-0.011501 0.0787467 0.0576654 +0.0135076 0.115425 0.0371825 +-0.0649944 0.132589 -0.00831046 +0.00449953 0.0474774 0.0501288 +-0.0183564 0.0639745 0.0512546 +-0.0454992 0.0425256 0.0437126 +0.00186325 0.0380873 -0.0138264 +0.0213321 0.100802 0.0450693 +-0.0855641 0.121149 -0.00272592 +-0.0898794 0.136494 0.0232114 +-0.0498262 0.0941747 -0.0218116 +0.0413792 0.0533854 -0.00680998 +-0.0912918 0.11477 0.0353243 +0.0585317 0.0565811 0.0212119 +0.000449556 0.130948 0.00412356 +-0.0343831 0.0766477 -0.0234928 +-0.0394659 0.108422 0.0377073 +-0.0477552 0.161949 -0.00697323 +-0.0278288 0.122593 -0.00568164 +-0.0563034 0.124125 0.0396482 +-0.0656415 0.129793 0.0454963 +0.0484031 0.0553841 0.03118 +-0.0455014 0.116621 0.0320048 +-0.0728613 0.102198 -0.0128504 +-0.0867252 0.0994863 0.00342747 +-0.00226785 0.0370021 0.0122687 +-0.0557143 0.0709328 -0.0156898 +-0.0610115 0.132585 -0.00747053 +0.00217526 0.0894962 -0.0338845 +-0.012585 0.0933765 -0.0350613 +-0.0553875 0.143884 0.0305002 +-0.0920989 0.117453 0.031314 +-0.0616144 0.155309 -0.0245851 +0.0502575 0.0602229 -0.00418894 +-0.0735402 0.0708078 0.0302704 +0.00614005 0.103026 -0.0213684 +-0.00271026 0.0669475 -0.0345168 +-0.049518 0.0344739 0.029929 +-0.0525731 0.128311 0.0345149 +-0.0605331 0.151186 -0.000375192 +-0.0866695 0.135213 0.0450386 +-0.0515626 0.0460585 0.0186779 +-0.00891802 0.0982381 -0.0280905 +-0.0170028 0.0977503 -0.0256286 +-0.0541413 0.128093 -0.005327 +-0.0234618 0.0385102 -0.00806272 +-0.0234875 0.125296 0.0010065 +0.0238248 0.0404881 0.03829 +-0.0564079 0.0334582 -0.0027528 +-0.0667678 0.0695012 0.0345692 +-0.00845839 0.0346349 0.045549 +-0.0748544 0.15611 0.0141114 +-0.0718277 0.141507 -0.00801564 +-0.0263582 0.120444 -0.00943021 +-0.0384861 0.0847024 0.0437961 +0.0154742 0.126309 -0.00212525 +-0.0329093 0.0461288 0.0451027 +-0.00179731 0.0390446 -0.00419837 +-0.0830843 0.0843065 -0.0045636 +-0.00849798 0.051815 0.0518583 +0.0211703 0.0458979 -0.0197309 +0.0250466 0.0534973 0.0413033 +-0.00301309 0.0994095 -0.0252863 +-0.0286636 0.0662687 -0.0294695 +-0.0275164 0.0588544 0.0372755 +0.021248 0.0707121 -0.0275992 +0.0118973 0.0699023 0.0540919 +-0.0850671 0.0831487 0.00248224 +0.0112963 0.123527 -0.00913288 +-0.0471043 0.0355495 0.00808039 +-0.0305886 0.0341169 0.0127308 +0.0232695 0.0795597 0.0495474 +-0.0781795 0.165241 -0.0349583 +-0.00548333 0.122374 0.0356916 +0.02636 0.0531741 -0.0208871 +-0.0117787 0.0784571 -0.0380559 +-0.0374622 0.0945463 0.043653 +0.0298506 0.0915959 0.0433109 +-0.063716 0.150986 -0.0306408 +-0.0915859 0.128175 0.00825933 +0.0456498 0.0806034 0.02116 +-0.0483119 0.0614742 0.035964 +0.0375235 0.0968947 -0.00979522 +-0.0923144 0.132364 0.0182222 +0.0175115 0.118187 0.0352964 +-0.027798 0.0824702 -0.0362167 +-0.0679219 0.123838 -0.00890383 +-0.0136906 0.0585033 -0.0353384 +-0.0560167 0.0334996 0.00451355 +-0.00170896 0.0655406 -0.0343993 +-0.0134843 0.053101 0.0504987 +-0.0675811 0.143978 0.0427672 +-0.0395371 0.165252 0.00310729 +-0.00177026 0.0987839 -0.0266092 +0.0449905 0.0917771 0.0161555 +-0.0142754 0.0385008 0.0265607 +-0.024936 0.0546494 -0.0284077 +-0.0737754 0.0849525 -0.0153987 +-0.00225491 0.0393816 0.0354457 +0.00953649 0.101759 0.0470503 +-0.030493 0.0731979 0.0402297 +0.0418277 0.0395362 0.0134182 +-0.0622707 0.058834 0.014793 +-0.0042883 0.0999626 -0.0238822 +-0.0511241 0.157581 -0.00475152 +-0.0110467 0.0382737 0.0183997 +-0.0111844 0.110115 -0.0206413 +-0.0906536 0.150215 0.0201223 +-0.0636975 0.0593607 0.0104272 +-0.00965605 0.0527028 -0.0331963 +0.011809 0.0846857 0.0540696 +-0.0439904 0.115156 -0.0158426 +0.00534103 0.0581999 -0.0308279 +-0.00449084 0.119679 0.0378771 +0.00251006 0.102973 0.0437486 +-0.0256326 0.0383152 0.00270994 +0.0101829 0.0893384 -0.0312282 +0.0359735 0.108741 0.0274101 +0.000505152 0.0675448 0.0563482 +-0.0431097 0.0335646 0.0052718 +-0.0748156 0.16245 -0.0339456 +-0.0890383 0.09964 0.0104144 +0.0425362 0.0972508 -0.000830625 +-0.0136711 0.162609 -0.0156561 +0.0241599 0.0418198 -0.00678118 +-0.0181519 0.16827 -0.0202389 +-0.0404977 0.0986657 0.0417206 +-0.0809707 0.15134 0.0022444 +0.0151979 0.0420601 0.0445385 +-0.00221102 0.0959857 -0.0316631 +-0.0329609 0.0709036 -0.0224656 +-0.079699 0.101798 -0.00757602 +-0.0725189 0.144585 -0.0159026 +-0.0466234 0.165492 -0.0068396 +0.0185106 0.12405 -0.00369129 +-0.014344 0.183095 -0.0226028 +-0.0788576 0.105851 -0.00657974 +-0.0240104 0.109837 -0.0203148 +0.00980942 0.110782 -0.0193656 +0.0108601 0.117776 0.0369396 +0.0193075 0.0536075 0.0470681 +-0.0925525 0.131032 0.0242364 +0.00749212 0.131495 0.0152913 +0.00495998 0.131626 0.0157979 +-0.00415159 0.0385426 0.00685716 +-0.0241881 0.038442 -0.0062907 +-0.0114972 0.0870124 0.0568248 +0.0383205 0.0589284 -0.00670105 +-0.050793 0.124044 0.0335488 +0.0216558 0.0436146 0.0415846 +-0.0488766 0.0663121 0.037594 +-0.0460367 0.115268 -0.015925 +0.0354061 0.0981387 0.0355669 +-0.0414966 0.064844 0.0412967 +-0.0492702 0.0334521 0.00412227 +-0.0788564 0.173596 -0.0449928 +-0.0720001 0.0374977 0.00101403 +-0.0745188 0.135846 0.0503978 +-0.0705133 0.0930254 0.0420143 +0.0544062 0.0520207 0.00120422 +-0.016347 0.159993 -0.0102438 +0.00949781 0.0440631 0.0448456 +-0.0123976 0.0991026 0.0482068 +-0.00535711 0.0347531 0.0461025 +0.026456 0.0929171 0.0454329 +0.0245089 0.042142 0.038636 +0.043716 0.0750115 0.0261739 +-0.0839359 0.102045 -0.00261805 +-0.0806754 0.155074 0.0150117 +-0.0689 0.172262 -0.0550342 +-0.0523543 0.073291 0.0414729 +-0.0301406 0.0636155 -0.0234264 +0.0407753 0.0452541 0.0299878 +0.00638455 0.0464233 -0.0264515 +-0.0755977 0.151334 -0.0218791 +-0.00594273 0.0383379 0.0139478 +-0.0600908 0.115373 0.0375616 +-0.0424965 0.0733822 0.0425454 +-0.00260003 0.0405608 -0.0253579 +0.00350637 0.0702767 0.0558823 +-0.0897267 0.135137 0.0262095 +-0.0591547 0.117476 -0.0120923 +-0.024542 0.0428919 0.0537128 +-0.0054972 0.0576157 0.054162 +-0.0397846 0.0841362 -0.0215764 +0.0415613 0.0751972 0.0301802 +-0.0631728 0.0596464 0.0174802 +0.0423363 0.101455 0.00317956 +-0.0533301 0.1416 0.0264013 +-0.0464855 0.0931347 0.0435353 +-0.0629725 0.150532 -0.00369044 +-0.0853889 0.108959 0.00634578 +-0.0909761 0.118636 0.00631645 +-0.0384966 0.101445 0.0410637 +0.0194941 0.107309 0.0406484 +0.0396169 0.0843072 -0.0127653 +-0.0223745 0.0566587 0.0441983 +0.0607493 0.059571 0.0121639 +-0.0844811 0.123027 0.0489478 +-0.0570341 0.144219 -0.00185162 +-0.0723674 0.177806 -0.0472523 +-0.0466801 0.130916 0.0233152 +-0.02246 0.183226 -0.0115124 +-0.0707386 0.165621 -0.0179174 +-0.0739884 0.1541 -0.0249038 +0.00161401 0.13159 0.0117114 +0.0295344 0.0524338 -0.0167463 +0.00137166 0.0465972 -0.0284573 +-0.0349979 0.152158 8.20736e-05 +-0.0459591 0.0424584 -0.0122548 +0.032247 0.0800194 -0.0194064 +-0.0215329 0.0768164 0.0540336 +0.0182351 0.12763 0.00640475 +0.0169629 0.0348939 0.0289563 +0.0193977 0.0490363 -0.0230642 +-0.0596322 0.0604401 0.0228281 +0.0145003 0.108488 0.0407955 +-0.0720741 0.0646161 0.00403373 +-0.0712116 0.15818 -0.0429219 +-0.0175993 0.15966 -0.00802789 +-0.0759222 0.159085 -0.0100036 +-0.0384682 0.15361 0.00387723 +-0.0725333 0.0379686 0.00575754 +0.0455601 0.0904134 0.011166 +0.0375907 0.0937201 -0.0111657 +0.00483671 0.039382 0.0314929 +-0.026559 0.0377408 0.0211248 +0.0385027 0.0454964 0.0307784 +-0.0564952 0.047766 0.0395183 +-0.0198831 0.107284 -0.0222237 +-0.0779551 0.163899 -0.0249456 +-0.0563521 0.0342791 0.0304121 +-0.00751948 0.0746046 0.0579524 +-0.0827498 0.154172 0.0128373 +-0.00710449 0.125174 0.0317411 +-0.0367613 0.0798086 -0.0204262 +-0.036915 0.175546 -0.00898243 +-0.0705043 0.0887655 0.0418556 +-0.0522651 0.0335597 0.0034159 +-0.0677174 0.0409231 -0.00173026 +-0.0113677 0.180126 -0.0253581 +-0.0161521 0.03911 0.0518105 +-0.0690092 0.122845 0.052951 +0.00570986 0.0341754 0.0182505 +0.0184933 0.0865452 0.0498488 +6.3531e-05 0.129314 -0.00119744 +-0.0804587 0.135827 0.0500319 +-0.0754196 0.111293 0.0461553 +0.0424555 0.0902012 0.0271644 +-0.0928081 0.120209 0.0412843 +-0.0634884 0.0789934 0.0424288 +-0.0615251 0.0457206 0.0316818 +-0.0115387 0.0458293 0.048671 +-0.066289 0.0747237 0.0389788 +-0.0173046 0.166847 -0.0129407 +0.0331853 0.116604 0.00769666 +0.0445518 0.069148 0.0246508 +-0.091691 0.12831 0.0342454 +0.0434619 0.0930961 0.0241585 +-0.0678925 0.0435809 0.00801004 +0.0234224 0.0519071 -0.0231048 +-0.0208141 0.0595795 0.0467936 +-0.087519 0.112 0.0410625 +-0.0213082 0.126358 0.00326486 +-0.0606822 0.0362429 0.0450162 +-0.0576914 0.0693962 -0.0144511 +-0.0769716 0.13837 -0.00578148 +-0.0653565 0.1551 0.00564588 +0.0264433 0.0485879 -0.0182655 +0.039746 0.101828 -0.00373788 +-0.0610724 0.144529 -0.00434459 +-0.0662237 0.145026 -0.0176812 +-0.0283728 0.156641 -0.000811787 +-0.00971651 0.0348541 0.0433186 +-0.00481466 0.0868424 -0.0368113 +-0.031088 0.0335574 -0.0273919 +-0.0544366 0.120435 -0.011246 +0.00248882 0.121002 0.0363406 +-0.00349433 0.0911707 0.0563818 +-0.0931447 0.118854 0.0382959 +0.0254683 0.121415 0.0262007 +-0.0467966 0.0336683 0.000813328 +0.0319522 0.103353 -0.0134365 +-0.0633409 0.155276 -0.011594 +-0.0720139 0.180999 -0.0528377 +-0.0164541 0.0630817 0.0527623 +0.016475 0.0352036 0.002978 +-0.00226088 0.124171 0.0334893 +0.0391263 0.0631992 -0.00875738 +-0.0818614 0.114723 -0.0022038 +-0.0930555 0.120208 0.0402916 +-0.0904236 0.116034 0.0273085 +-0.0705028 0.159578 -0.0459334 +-0.0862816 0.117641 0.0480424 +0.0531688 0.0733724 0.0176223 +-0.0578751 0.134121 -0.00585274 +0.0423147 0.091604 0.0271557 +0.0101515 0.071231 0.055077 +-0.0435318 0.087421 0.0430041 +-0.0560394 0.131064 -0.00575471 +0.00125071 0.0712122 -0.0347068 +-0.0348542 0.165303 -0.00316457 +-0.0860328 0.0912972 0.00145067 +-0.00116523 0.0371346 0.0178171 +-0.0637756 0.0795327 -0.0183843 +0.00482779 0.0366504 -0.0137865 +0.0435599 0.0987371 0.0131605 +0.00150087 0.101618 0.0443156 +0.0314312 0.0625198 -0.0186445 +-0.0672777 0.169987 -0.0338702 +-0.0903951 0.118903 0.0450094 +-0.0501563 0.11976 0.0326732 +-0.0750921 0.156856 -0.022942 +-0.0275197 0.109846 0.0382427 +-0.0535612 0.0416919 -0.00977582 +0.0556505 0.0677792 0.00213147 +-0.0685182 0.0368214 -0.0053939 +-0.0780099 0.114072 0.0486721 +-0.0248787 0.0796614 0.0530244 +-0.0638477 0.164736 -0.0283363 +0.0142201 0.0793919 -0.0305544 +0.00713749 0.130032 0.0237524 +-0.0187348 0.175696 -0.0167204 +-0.00682337 0.088234 -0.0365489 +-0.0217663 0.11209 -0.0186927 +-0.0171714 0.0432613 0.0521182 +0.00513012 0.0373402 0.0458408 +0.0461568 0.0626078 -0.00274862 +-0.0412659 0.160879 0.0033623 +-0.0853172 0.110382 0.0233555 +-0.0158006 0.108342 -0.0207487 +0.00813236 0.110171 -0.0197068 +0.0265802 0.0345508 0.0130494 +-0.0660018 0.133981 0.0432166 +0.041807 0.0885902 0.0288907 +-0.024509 0.109889 0.0396002 +0.0354948 0.10491 -0.00909103 +-0.00850916 0.0688709 0.0557558 +-0.054442 0.0373135 0.0469328 +-0.010539 0.0390893 0.0340058 +-0.0858022 0.150106 0.00719342 +-0.0451719 0.0347129 0.0411467 +-0.00510128 0.0385919 0.0229448 +-0.0521978 0.0336397 0.008764 +-0.0162925 0.180099 -0.0261659 +-0.0902934 0.147439 0.0121579 +-0.0793826 0.0705862 0.00854889 +0.0209269 0.0658956 0.0477693 +-0.0116051 0.171103 -0.0260001 +-0.0635102 0.151152 0.0361873 +-0.0865918 0.127084 0.0480364 +-0.0756208 0.166729 -0.0233779 +-0.0507818 0.0840955 -0.0217037 +-0.0623945 0.164686 -0.0405941 +0.0109143 0.034258 -0.00287102 +-0.0326136 0.0384639 -0.0154224 +-0.0883155 0.139178 0.0394996 +-0.0317158 0.0383538 -0.00403424 +-0.00682874 0.0896331 -0.0361816 +-0.060744 0.0766988 -0.0182193 +-0.00743574 0.129906 0.00405669 +-0.0792494 0.0723341 0.0207326 +-0.036173 0.152719 -0.00677506 +-0.0305128 0.10708 0.0396423 +-0.0435905 0.0505542 -0.0107756 +-0.0204554 0.0347978 0.0481157 +-0.0591045 0.0344689 0.0400978 +-0.0840365 0.147342 0.0364323 +0.00340018 0.0348289 -0.0229504 +-0.0693319 0.141141 0.045512 +-0.0561609 0.0344771 0.0355158 +0.00119588 0.0881146 -0.0344258 +0.0583564 0.0538008 0.0181861 +0.0342539 0.0387023 0.0236157 +-0.0264982 0.125984 0.010106 +-0.0611832 0.146298 -0.00395593 +-0.0910251 0.124245 0.0440568 +-0.089862 0.115281 0.0432597 +0.0247433 0.124313 0.0130924 +-0.000820873 0.128641 -0.00248283 +-0.0554557 0.0533368 -0.00338183 +-0.0464641 0.122081 0.0270508 +-0.0451868 0.126658 0.0224837 +0.00145793 0.0977369 0.0519067 +0.0405445 0.0610221 0.0298369 +-0.0744952 0.0941746 0.0398302 +-0.0351234 0.033632 -0.0282515 +-0.0839267 0.145982 0.00417548 +-0.0224934 0.0435545 0.0535652 +0.0159352 0.127804 0.0226817 +-0.0572144 0.154757 0.0232881 +-0.0498753 0.0336124 0.000239655 +-0.0191672 0.0596981 0.049368 +-0.0242921 0.0918773 0.0492675 +-0.0523718 0.133555 -0.00317026 +-0.0557218 0.0723836 -0.0166307 +-0.00457986 0.0361758 -0.0248798 +-0.0737533 0.0901294 0.040627 +-0.00549531 0.10728 0.0439307 +-0.0181568 0.165005 -0.0179156 +-0.0554997 0.108443 0.0389722 +-0.0144882 0.101623 0.0437286 +0.0215585 0.0387445 -0.00669407 +-0.0752039 0.0696978 0.0256249 +-0.0569183 0.115707 -0.0143002 +-0.0731283 0.155734 0.00889607 +0.0347498 0.081125 -0.0176886 +0.00113903 0.131571 0.0129682 +-0.0279379 0.155215 -0.0039665 +0.0438288 0.0860483 -0.00379124 +-0.0202818 0.0386671 -0.01315 +-0.0639713 0.0651159 0.0301523 +-0.0729034 0.123797 -0.00826534 +-0.00948854 0.0965445 0.0534324 +-0.0616146 0.158432 -0.0255892 +0.0348698 0.112104 0.0254475 +0.0462561 0.0792459 0.0151754 +0.0132092 0.0348336 0.0300558 +-0.0650018 0.0435996 0.0108034 +-0.0629926 0.156114 0.0183129 +0.0432806 0.100121 0.0101615 +-0.0634166 0.118511 0.0453283 +-0.0718747 0.151003 0.0373736 +-0.0693203 0.155248 -0.0509683 +-0.058528 0.0400924 -0.008802 +0.0150592 0.0590177 0.0497649 +-0.0136861 0.0570325 -0.0345667 +-0.02332 0.0391695 0.0384733 +0.0410592 0.0985428 -0.00379645 +-0.042915 0.0436274 -0.0183221 +-0.0324875 0.068969 0.0402984 +-0.0927384 0.122733 0.00927055 +-0.0697859 0.156365 0.01735 +-0.0525617 0.0403541 -0.0109145 +-0.0163792 0.186908 -0.0208435 +0.00555045 0.034504 0.00513967 +0.0259201 0.0406241 0.0333279 +0.0340795 0.103399 0.0336714 +-0.0295185 0.0579228 -0.0214101 +0.0443631 0.0475049 -0.00446946 +0.00261537 0.0341134 0.0122343 +-0.0104909 0.104437 0.0435533 +0.0240885 0.124582 0.018553 +-0.084606 0.0993653 -0.00159598 +0.0315994 0.0505647 0.0349136 +-0.0887091 0.0983318 0.0213821 +-0.0109917 0.177231 -0.0295208 +-0.00927372 0.0384768 0.00588152 +-0.0731505 0.0794744 -0.0135813 +0.0377774 0.0672774 -0.012792 +-0.0257539 0.157476 -0.0102144 +-0.0524923 0.0340498 0.0261507 +0.0359032 0.0905437 -0.0158269 +-0.0358241 0.0900699 -0.0240653 +-0.0507764 0.0715485 0.0397729 +-0.0857724 0.0872268 -0.000524277 +0.0122145 0.0850407 -0.0307351 +-0.0818191 0.154205 0.0234297 +0.0239009 0.12202 -0.0014718 +0.0509663 0.0446851 0.0122122 +0.0405026 0.0469928 0.0315524 +0.00123226 0.0769082 -0.0355253 +0.0395203 0.0569025 0.0311403 +-0.0861982 0.144641 0.0372484 +-0.0218898 0.0382146 0.0234539 +0.0278568 0.0643129 -0.0209613 +-0.06664 0.0601639 0.0127094 +-0.0682452 0.17678 -0.058273 +-0.0326534 0.0578275 -0.0120318 +0.0449519 0.0847263 0.00223902 +-0.0243874 0.0379977 0.0213348 +-0.0375049 0.0648832 0.0416292 +-0.049486 0.0531643 0.034537 +-0.00680823 0.0840973 -0.0379387 +-0.00662043 0.0383357 0.0156226 +0.0246827 0.0347978 0.0179097 +0.052528 0.0664738 0.0271694 +-0.017323 0.112508 -0.01916 +-0.0589359 0.0481542 0.00467247 +0.0560814 0.0704234 0.0216351 +0.0445162 0.087501 -0.00181141 +0.0204668 0.0400207 -0.013702 +-0.0828557 0.0979824 0.0311146 +0.0393677 0.0547517 -0.00623241 +-0.0301563 0.0382285 0.0524978 +-0.0740972 0.155492 -0.0239137 +-0.0266047 0.0397022 -0.0293069 +0.0044664 0.0344032 0.010526 +-0.0644057 0.16752 -0.0356951 +-0.085796 0.123875 -0.00272102 +-0.0251727 0.175641 -0.0195733 +-0.0147266 0.0922559 -0.0359307 +0.0166529 0.120978 0.0330533 +-0.0652865 0.1555 -0.0467797 +-0.0622893 0.15065 -0.0135783 +-0.0173344 0.128368 0.0119773 +-0.044366 0.0366412 -0.0232589 +-0.0913152 0.114759 0.0363194 +-0.0647364 0.118589 0.0486106 +0.011956 0.0976358 -0.0233787 +-0.0378922 0.04725 -0.0183117 +-0.079848 0.116269 0.0487575 +0.0431642 0.0987038 0.0171581 +-0.0334777 0.0546734 0.0376709 +-0.0677151 0.171772 -0.0397619 +-0.0124935 0.123722 0.0323282 +-0.00945147 0.0352364 0.0483453 +-0.0729035 0.125275 -0.00849683 +-0.0837744 0.107497 0.00138169 +-0.0529962 0.0461208 0.0157076 +-0.0677529 0.141137 0.0442717 +-0.0840303 0.151908 0.0287412 +-0.0636039 0.0445634 0.0326846 +0.0192911 0.109605 -0.016128 +-0.0838969 0.104764 -0.000610535 +-0.0887185 0.143427 0.0331607 +-0.0929968 0.130998 0.0182299 +-0.0543463 0.160987 0.00512087 +-0.0909281 0.132287 0.0082314 +-0.0354987 0.113848 0.0338946 +-0.0465077 0.088954 0.0443573 +0.0301352 0.0955658 0.0419698 +-0.0199202 0.0381456 0.0185107 +-0.0186134 0.161522 -0.0143726 +-0.0646921 0.0617226 0.0224003 +0.0222832 0.066418 -0.0268569 +-0.0661617 0.0353568 0.0288449 +0.0192795 0.122165 0.0310901 +-0.00560235 0.0406015 -0.0258376 +-0.0404738 0.108409 0.038128 +0.0420248 0.0710795 0.0289899 +0.0450277 0.0945898 0.0071675 +-0.0490784 0.153156 -0.00527602 +-0.00149713 0.0689596 0.0566805 +-0.0709057 0.106531 -0.0119068 +-0.0626824 0.0436041 -0.00418427 +-0.066536 0.166455 -0.0250024 +-0.0218698 0.104438 -0.0229686 +-0.0731886 0.149857 -0.036868 +-0.0122347 0.0392642 0.0504717 +-0.0935435 0.118764 0.0233045 +-0.0797382 0.10948 0.0394939 +-0.0892801 0.091541 0.0104497 +-0.0547119 0.146209 0.0284156 +-0.00241231 0.037367 0.0100902 +0.000818555 0.130756 0.00282721 +0.04586 0.0820013 0.00419826 +-0.0250963 0.0348756 0.0487637 +-0.0673565 0.112647 0.0446949 +-0.0634506 0.15272 2.24523e-05 +-0.0706828 0.180611 -0.0569213 +-0.0205931 0.163965 -0.00888333 +0.0115331 0.101889 -0.0218781 +-0.0664983 0.102849 0.0407048 +0.0185027 0.118159 0.035136 +0.0458454 0.0834099 0.00517797 +-0.00887527 0.109466 -0.0219533 +-0.0858669 0.119072 -0.00140229 +-0.0102872 0.0344076 -0.0184603 +-0.0211482 0.169745 -0.0200914 +-0.00849115 0.111421 0.0423213 +-0.0613599 0.128292 0.04114 +-0.0076798 0.0569676 -0.0334142 +-0.0710297 0.16381 -0.0459687 +-0.0454992 0.112558 0.0357052 +-0.0343115 0.126654 0.00282732 +0.0360267 0.110062 0.0258818 +0.0368044 0.0942002 -0.0116901 +-0.0421812 0.123012 0.0251172 +-0.066012 0.139954 -0.00779963 +0.00198723 0.123051 -0.0105036 +0.0172553 0.072257 -0.0294021 +-0.013113 0.184484 -0.0260544 +-0.072893 0.152634 -0.0368963 +-0.0938278 0.128299 0.0222532 +-0.0675171 0.0409229 0.0105489 +-0.0735479 0.162209 -0.012171 +-0.0517008 0.0626767 0.0322349 +-0.0433082 0.037957 -0.0253239 +-0.0516781 0.0345962 0.0381142 +-0.0046354 0.0467251 -0.0296701 +-0.0777504 0.112676 -0.00382147 +-0.0281162 0.181397 -0.0109687 +-0.047699 0.144615 0.00435323 +-0.0663959 0.148276 0.0393784 +-0.0249816 0.15956 -0.0126947 +-0.00758477 0.0968518 -0.0305822 +-0.019536 0.116371 -0.0152209 +-0.0298632 0.102958 -0.0228236 +-0.0224181 0.05387 0.0440179 +-0.0625128 0.145366 0.0377954 +-0.0843383 0.133967 0.0484219 +-0.00452146 0.0443187 0.0472734 +0.000177098 0.0839833 -0.0361114 +0.0207016 0.113271 -0.0140876 +-0.065484 0.0847424 0.0442074 +-0.0201913 0.175663 -0.0226485 +-0.0364476 0.166788 -0.00019754 +-0.0206091 0.162049 -0.0149623 +0.0350254 0.0700182 0.0383083 +-0.0455491 0.131451 0.0178282 +0.00819795 0.130005 0.00128654 +-0.0353536 0.12061 0.029103 +-0.0271732 0.169704 -0.0183584 +-0.0657382 0.0436129 0.0101245 +-0.0722291 0.166627 -0.044985 +0.0309191 0.0539829 -0.0147501 +-0.0308747 0.056662 -0.0163864 +-0.0867734 0.123909 -0.00174219 +-0.0279078 0.0347965 0.0447705 +0.0191594 0.100268 -0.0222959 +-0.0154293 0.0382918 0.0211029 +-0.0578159 0.0636603 0.0309898 +-0.024177 0.172689 -0.0201134 +-0.0669849 0.0359436 0.0326963 +-0.0879792 0.086094 0.00648058 +-0.0181742 0.169737 -0.0210312 +-0.0170499 0.122405 0.0312344 +0.00906582 0.123154 0.0343752 +-0.034503 0.0874637 0.0428605 +0.0391693 0.108394 0.0111647 +-0.0917004 0.143358 0.0201656 +0.027747 0.0902677 -0.021551 +0.0430843 0.0496743 0.0322331 +-0.0791989 0.150078 -0.000876106 +-0.0259631 0.177171 -0.00957335 +-0.0395279 0.079033 0.0429651 +0.0302372 0.118499 0.00231637 +0.0449793 0.061326 -0.0034541 +-0.0376334 0.0548474 -0.0107543 +-0.0274342 0.111364 -0.0178958 +-0.0315627 0.048073 -0.0232988 +-0.018823 0.121694 -0.0088173 +0.00895989 0.0979651 -0.0237371 +-0.0254423 0.0473682 0.0503166 +-0.046654 0.0606571 -0.0123502 +0.0606526 0.0595573 0.0131644 +-0.0873547 0.094105 0.00537923 +-0.0202891 0.184471 -0.0210772 +-0.093713 0.126863 0.0152623 +0.00938205 0.0449001 -0.0251557 +-0.0903092 0.140666 0.025165 +-0.0676501 0.0667159 0.0297862 +-0.0164899 0.0602176 0.0520938 +0.019355 0.0565693 -0.0275356 +0.0104604 0.0340987 0.00091581 +-0.0785409 0.166665 -0.0309637 +-0.018017 0.0390618 0.0526069 +0.0189962 0.123953 0.0281041 +-0.0814357 0.0734392 0.00553468 +-0.0223732 0.03801 0.0163235 +0.0110271 0.112101 -0.0187639 +0.0456518 0.0904151 0.00617296 +-0.0789509 0.170805 -0.0389931 +-0.0312407 0.0510927 0.0390643 +0.0359235 0.106756 -0.00582268 +-0.0815808 0.0950721 -0.00753639 +-0.0849546 0.0871617 -0.00253673 +-0.0265403 0.0592021 0.0383808 +0.0398305 0.0739567 0.0329917 +-0.00085919 0.0358547 0.00813469 +-0.0747624 0.0700921 -0.00148683 +0.0313786 0.113275 -0.00606229 +-0.0902327 0.124018 0.00527185 +0.0268091 0.0506065 0.038521 +-0.0727909 0.0685075 0.0271607 +-0.0578274 0.0666818 0.0354001 +-0.0738208 0.0921589 -0.0148323 +-0.0390631 0.127858 0.0143467 +-0.00922314 0.174168 -0.0285672 +-0.0035205 0.039017 -0.00265492 +0.0435098 0.098719 0.0141568 +-0.0493916 0.144765 0.00938332 +0.0189816 0.0563976 0.0484166 +-0.0731928 0.064943 0.0125198 +0.0453289 0.0833826 0.0211694 +-0.0211162 0.1638 -0.0163957 +-0.0306102 0.125527 0.00421635 +-0.0262987 0.113585 -0.0162365 +0.0252163 0.1238 0.0175509 +-0.0237403 0.0669252 -0.0352956 +-0.00549562 0.0472961 0.0485942 +0.0045023 0.122399 0.0348631 +-0.0701614 0.178224 -0.0493215 +-0.0173769 0.125333 -0.00267782 +-0.0470115 0.129603 0.00120357 +-0.0317094 0.0374952 0.0310681 +-0.0297217 0.0382812 -0.0035606 +-0.0415986 0.169934 0.00129157 +-0.064505 0.152553 -0.0362048 +-0.0667255 0.178008 -0.0524224 +-0.0236086 0.0335974 -0.0240827 +-0.0156885 0.0555599 -0.0339026 +0.0182783 0.0708328 -0.0291795 +0.0541184 0.0510309 0.0235647 +-0.0765193 0.119025 0.0524244 +-0.0118673 0.0339713 -0.0202424 +0.00548892 0.118228 0.0378342 +-0.067477 0.0336926 -0.00520632 +0.0168316 0.0926978 0.0490711 +0.0255432 0.0768418 0.0475089 +-0.0617634 0.0795901 -0.0189973 +-0.0156786 0.0526029 -0.032522 +0.000420458 0.036172 -0.0244623 +-0.0256593 0.0810401 0.0523557 +0.026836 0.0634537 -0.0220606 +-0.0621975 0.166246 -0.0505873 +0.0578529 0.0523616 0.0171842 +-0.0217254 0.126122 0.00269746 +0.0235742 0.124212 0.0226421 +-0.0578055 0.0883401 -0.0213124 +-0.0798409 0.103395 0.0321858 +-0.0123464 0.178658 -0.023274 +0.0212154 0.0476501 0.0409677 +-0.0342487 0.0752311 -0.0224883 +-0.0230529 0.0839079 0.0553134 +-0.0214993 0.112665 0.0388138 +-0.0327955 0.0873016 -0.0254019 +0.0258836 0.0605349 0.0443599 +-0.0096598 0.0907753 -0.0363722 +0.0450284 0.0875565 0.0211548 +0.0334239 0.0414863 -0.00351395 +-0.0488087 0.138617 0.0133952 +-0.0658054 0.0924099 -0.017991 +0.0104979 0.0896334 0.054299 +-0.0043048 0.123153 -0.010566 +-0.0174665 0.17272 -0.016673 +-0.0344763 0.0561322 0.0383021 +-0.0857072 0.152777 0.0118249 +-0.0575671 0.0494422 0.00671449 +-0.0430533 0.0345113 0.0330204 +-0.065164 0.147357 -0.0239331 +-0.0326268 0.0520227 -0.0107626 +-0.067905 0.106631 -0.013438 +-0.0258738 0.125824 0.0147443 +0.0544233 0.0635568 0.0276516 +-0.0872747 0.139127 0.00719289 +-0.0315055 0.109789 0.0377033 +-0.0763386 0.161799 -0.0152953 +0.0232414 0.0663429 -0.0257954 +0.0174948 0.109841 0.0394103 +-0.0507289 0.129704 0.0318965 +-0.0425042 0.0577064 0.0400486 +0.022545 0.0955327 0.0468247 +0.0403951 0.0475373 -0.00531603 +0.0183271 0.0475932 -0.02269 +-0.0572639 0.0601869 -0.00219809 +-0.0852337 0.104506 0.0248257 +-0.0933098 0.126856 0.0132534 +0.0352918 0.108619 -0.00504659 +-0.0628349 0.0939281 -0.0188357 +0.00277101 0.099815 0.0475918 +-0.0637196 0.147938 -0.020833 +-0.0636347 0.156368 -0.0124044 +-0.0882602 0.111934 0.0373837 +0.0451564 0.0931924 0.00517592 +-0.0883906 0.0874807 0.0144622 +-0.0179879 0.0654395 0.0522544 +-0.0334338 0.0382234 0.0500909 +-0.00283875 0.0389996 -0.00436591 +-0.0295052 0.11528 0.03366 +-0.00151332 0.104469 0.0441334 +0.0194927 0.0906432 0.0481529 +-0.0877693 0.113692 0.0289151 +-0.0661933 0.0335338 -0.00299624 +-0.0273899 0.0499801 0.045145 +-0.0338474 0.0972112 -0.023083 +-0.075849 0.149415 0.0390624 +0.0325609 0.114759 0.0260072 +-0.0821806 0.0776422 0.0235195 +-0.0759474 0.151351 -0.0188826 +0.013384 0.043414 -0.024368 +-0.0077421 0.0340597 -0.0195129 +-0.00965525 0.0511768 -0.0320162 +-0.0677487 0.111258 0.0407689 +-0.0214969 0.0461967 0.0522939 +-0.0466073 0.0518764 -0.00969859 +0.0357625 0.0364791 0.0131618 +-0.0124847 0.111379 0.041672 +-0.079194 0.0832222 0.0349745 +-0.0926331 0.130966 0.0142325 +0.00419789 0.123154 -0.0106599 +0.00969178 0.121836 0.0352946 +-0.0295306 0.123946 -0.00125424 +-0.0711733 0.128436 0.0516087 +-0.0585141 0.0386878 -0.00928985 +-0.0739244 0.0668664 0.00165643 +-0.0424856 0.0410553 0.0431368 +-0.0176939 0.162435 -0.0154936 +-0.00215916 0.0369163 -0.0154166 +0.0205271 0.126116 0.00440152 +0.000359464 0.0907103 -0.0342066 +0.038908 0.0631632 0.033303 +0.0223132 0.124739 0.023599 +-0.070737 0.159582 -0.0449318 +-0.0281334 0.155101 -0.00344078 +0.0323761 0.107397 0.032947 +0.0390072 0.0393837 0.00207442 +0.0420748 0.0457918 0.0297783 +-0.0187683 0.0699858 -0.0381989 +0.0176298 0.0382941 -0.0187111 +-0.0688111 0.0922897 -0.0164711 +0.0419266 0.101462 0.0171593 +0.00341059 0.0376223 -0.0244648 +0.0461634 0.0792418 0.0171768 +-0.0637535 0.0431846 0.0296789 +-0.0273632 0.0534705 -0.0254085 +-0.0394955 0.0562825 0.0399491 +0.00548498 0.0590856 0.0545593 +-0.0934182 0.124107 0.0122673 +0.0324897 0.100233 -0.014155 +-0.00952254 0.0688375 0.0554289 +0.0191204 0.042209 0.0431814 +0.0195848 0.035993 0.00660837 +-0.0748916 0.10354 -0.0108565 +-0.0685642 0.0406581 -0.00126009 +-0.0225344 0.118142 0.03379 +-0.013583 0.0386256 -0.002471 +-0.0898618 0.113382 0.0394321 +0.0601893 0.0595178 0.0171788 +-0.0630097 0.121328 0.0458592 +-0.0196415 0.0725672 0.0536854 +-0.0211896 0.172692 -0.021286 +0.024653 0.104647 -0.0168345 +-0.0795268 0.096746 0.0348816 +0.0485163 0.0672488 0.000612911 +0.0400064 0.0422019 -0.00166327 +-0.0197891 0.0785016 -0.0390423 +-0.0260568 0.0375908 -0.0291887 +-0.00717802 0.130589 0.0142265 +0.0156678 0.0346738 -0.0117297 +0.0424576 0.0845381 -0.00679736 +-0.0302701 0.0365155 -0.0302567 +-0.0274598 0.0863801 0.0483431 +-0.0831854 0.11075 0.0323354 +-0.0514986 0.109783 0.0378241 +-0.0183396 0.126605 0.021835 +-0.0497522 0.0716181 0.0399477 +0.0165016 0.116787 0.0362663 +-0.0670324 0.0672056 0.0312385 +0.0201473 0.0414664 -0.0187017 +0.0364932 0.0484054 0.0314672 +-0.0501327 0.159092 -0.00542351 +-0.0752763 0.0667216 0.0105318 +-0.0341695 0.0337715 0.0105094 +0.0137891 0.103175 -0.021246 +-0.073587 0.148629 -0.0261691 +-0.0169441 0.184483 -0.0249355 +-0.0097273 0.130072 0.0104159 +-0.00405402 0.0391419 -0.01222 +-0.0887371 0.0955614 0.00743378 +-0.0864769 0.0806081 0.0125015 +0.040053 0.107027 0.0101639 +-0.042812 0.14778 0.00347562 +0.0248383 0.0835695 -0.0246296 +0.0277899 0.116538 -0.00556904 +-0.0291577 0.0380555 0.005854 +-0.0525571 0.150877 0.0178 +-0.0639921 0.134062 -0.00777265 +-0.0838901 0.110998 0.0281595 +-0.0134922 0.107228 0.0429665 +-0.0586918 0.149676 0.0345486 +-0.0616651 0.119834 0.0424717 +0.0456475 0.0890064 0.00517807 +-0.0089791 0.0383636 0.0133044 +-0.0903646 0.135051 0.0122148 +0.0317594 0.0835691 0.0424885 +-0.0240368 0.11082 -0.0193477 +0.0271768 0.112761 0.0342135 +-0.0356473 0.116902 -0.0136714 +-0.0739197 0.151223 0.0366634 +0.0410535 0.0759945 -0.00777525 +-0.0734182 0.169757 -0.0275332 +-0.00232938 0.0359607 0.0474459 +-0.085737 0.110915 0.0387737 +-0.0775985 0.123137 0.0521223 +-0.0748309 0.100681 -0.0121692 +-0.0866976 0.109058 0.0133472 +-0.0701875 0.0395708 0.00901355 +-0.0306891 0.120328 -0.00923215 +-0.045477 0.1214 -0.012376 +-0.033489 0.172734 -0.00156283 +-0.0565822 0.0339881 0.0253464 +-0.0404955 0.0451407 0.0414639 +-0.0555537 0.0420256 -0.00889368 +-0.0598777 0.102599 -0.0186645 +0.0592051 0.0552531 0.0121703 +-0.0758111 0.0741872 -0.00760517 +-0.038197 0.0342285 0.0289964 +-0.00312706 0.0390512 0.0319597 +0.0476183 0.0426691 0.0171605 +-0.0306281 0.0831438 0.0423752 +-0.049274 0.1386 0.00640083 +-0.0210747 0.0753924 0.0536136 +-0.093596 0.126936 0.0252692 +-0.0629825 0.129686 -0.00825839 +0.00470729 0.128083 -0.0039713 +-0.0335515 0.0373466 -0.0164398 +0.0425502 0.0637218 0.0280932 +-0.0707401 0.13973 0.0469958 +-0.0644842 0.0804582 0.0430441 +-0.0618671 0.112377 0.0367302 +-0.0698247 0.169548 -0.0276555 +-0.0863191 0.0806082 0.0115067 +-0.0216814 0.0523409 -0.0297011 +0.0377238 0.110496 0.0121805 +-0.0689171 0.158096 -0.0529848 +-0.067181 0.156627 -0.0534662 +-0.0268045 0.0811284 -0.0369845 +-0.0546722 0.139567 0.0297056 +-0.0554146 0.0649279 0.0339175 +-0.0193967 0.186852 -0.0171886 +-0.0357817 0.0351096 0.0179926 +-0.0718839 0.173642 -0.0520314 +-0.0409497 0.0337305 -0.016439 +0.0396966 0.105593 0.0211678 +-0.0789279 0.0699144 0.0158521 +-0.0414163 0.0476371 -0.0122303 +-0.00671791 0.0642099 -0.0355692 +0.0547677 0.0509942 0.0227339 +-0.0686614 0.0735088 -0.0131618 +-0.0738123 0.0655371 0.0172042 +-0.0904479 0.129526 0.00625875 +0.0197334 0.044328 -0.0216983 +-0.0896348 0.140659 0.0301806 +-0.00748945 0.0870384 0.0571349 +0.0217161 0.119158 -0.00841047 +-0.0545346 0.125365 -0.00640975 +0.0368294 0.108237 -0.00182731 +-0.0672538 0.152901 0.0344187 +-0.0807043 0.0827741 -0.00656651 +-0.0305099 0.113915 0.0346878 +-0.0721764 0.154012 -0.0399025 +-0.045061 0.130334 0.0180279 +-0.00652053 0.0688834 0.0561767 +-0.0444953 0.0817848 0.0424707 +-0.0874489 0.105009 0.0173545 +-0.0175711 0.0387182 -0.00892429 +0.000506539 0.0883906 0.0565122 +-0.0265193 0.12549 0.0159805 +-0.0464789 0.0917181 0.0434263 +0.0455125 0.0918121 0.0101608 +-0.0834627 0.110719 0.0412267 +-0.057205 0.0480928 0.032667 +0.00517049 0.0350387 0.0228068 +0.0457999 0.0820138 0.0191697 +-0.0420324 0.171559 -0.00171063 +-0.0475118 0.128596 -0.00180437 +0.0204841 0.0948066 0.0474378 +-0.0719895 0.163815 -0.0429694 +-0.0644943 0.0861671 0.0446171 +0.00851416 0.06604 0.0550264 +-0.0670308 0.141141 0.0435296 +-0.0848818 0.142006 0.0416598 +-0.0384808 0.106985 0.038039 +0.0180116 0.0754634 0.0524537 +-0.0725251 0.155433 -0.0349062 +0.0182337 0.128007 0.0135344 +-0.0233093 0.162498 -0.00577898 +-0.0850563 0.112998 0.00231897 +-0.0823398 0.145942 0.00119384 +-0.0852211 0.103481 0.00138673 +-0.071875 0.136886 0.0488574 +-0.0794627 0.138625 0.0485832 +-0.0435009 0.117967 0.030956 +-0.038588 0.0341641 0.0271976 +-0.0408255 0.0914222 -0.0231618 +-0.0551021 0.154591 -0.0020359 +-0.0748456 0.159073 -0.00827714 +-0.0621666 0.152205 -0.0155784 +-0.0494972 0.0776899 0.0438666 +0.00751862 0.0799738 0.0554444 +0.00532494 0.0625045 -0.0319907 +0.00237701 0.131635 0.0162813 +-0.0546261 0.151324 0.0271982 +-0.0236176 0.123316 0.0244011 +0.00251869 0.05336 0.0534808 +0.0225511 0.0888829 0.0485585 +-0.0370273 0.174099 -0.0109221 +-0.090997 0.129691 0.0382289 +-0.0732672 0.148476 -0.0292583 +-0.053498 0.0465766 0.0420409 +-0.0330184 0.0474571 0.0438647 +-0.0246064 0.033636 -0.0243161 +-0.0234471 0.125053 0.0200484 +-0.0830784 0.138234 -0.000100609 +0.0406549 0.0820323 0.0324674 +-0.0842996 0.0965857 0.0297797 +-0.0527544 0.03448 0.0379838 +-0.0799451 0.15529 0.0167266 +-0.057093 0.0521243 0.00061739 +0.0154036 0.0477404 -0.0246897 +-0.060782 0.082481 -0.019648 +-0.0700267 0.166609 -0.0500213 +0.0451823 0.091796 0.014161 +0.0346837 0.106039 0.030986 +-0.0396713 0.0621627 -0.012718 +-0.05111 0.0375368 0.0465746 +-0.0688918 0.119449 -0.00874323 +0.000197079 0.035652 0.0464555 +-0.00149822 0.0661867 0.0567241 +0.00350858 0.074484 0.056374 +-0.0284992 0.0703316 0.0397848 +-0.0555164 0.0482866 0.0387265 +-0.0908309 0.136473 0.0182032 +-0.0634905 0.0861851 0.0447067 +-0.00918339 0.033864 -0.0215021 +-0.0748916 0.123775 -0.00787892 +-0.0270496 0.033483 -0.0265278 +0.00488911 0.035483 -0.0145807 +-0.0442085 0.165146 -0.00911238 +-0.0322103 0.0386054 -0.0136114 +0.0190336 0.11528 0.0364777 +-0.000494586 0.0897644 0.0562541 +-0.0350004 0.157209 -0.0112204 +-0.0635638 0.147341 -0.0176577 +-0.0902987 0.121315 0.00530766 +-0.0705068 0.102745 0.0389474 +-0.0662636 0.175335 -0.0598585 +-0.0239792 0.0680021 0.045464 +0.0413142 0.0637288 -0.00386959 +-0.051889 0.108419 -0.0189045 +-0.0477652 0.131125 0.00158524 +-0.0400469 0.169775 -0.0108504 +-0.0755266 0.109807 -0.00760163 +0.00107791 0.130709 0.0215491 +-0.0655994 0.0349763 0.0155159 +-0.0628742 0.161547 -0.05443 +0.0359645 0.0981106 0.0346243 +0.00934693 0.129002 0.0260013 +-0.0768843 0.109139 0.0404116 +-0.010503 0.0674297 0.0550101 +-0.028646 0.0535523 0.0364431 +-0.072824 0.0936306 -0.0150907 +0.028615 0.035804 0.0196241 +0.0282076 0.0706829 -0.0227535 +0.0596824 0.0622541 0.020173 +-0.0025152 0.0575969 0.0540026 +0.000110958 0.036978 0.020027 +-0.0273656 0.0360131 -0.0296152 +-0.0624735 0.0344952 0.0183787 +-0.0360892 0.159232 -0.0124312 +0.0418577 0.100066 0.0211691 +-0.063571 0.122754 0.0468224 +0.0523857 0.0624129 -0.0025136 +0.0383109 0.0632029 0.0342252 +-0.0144971 0.0786767 0.0566892 +-0.0928565 0.129591 0.0132418 +-0.0681034 0.152856 -0.0481556 +-0.0746787 0.169356 -0.0440586 +-0.0335137 0.107031 0.0389932 +0.0424926 0.0583469 0.0313486 +-0.0223256 0.0637459 0.0453694 +-0.0648797 0.106687 -0.0146649 +0.0250125 0.0632249 0.0448766 +-0.0624284 0.159959 -0.0405984 +0.00349445 0.12099 0.0360851 +0.022067 0.0981797 0.0461337 +-0.0734899 0.123206 0.0535424 +-0.0321688 0.171168 -0.015915 +-0.0848969 0.106313 0.0233612 +-0.067172 0.174543 -0.0467986 +0.0246727 0.0884534 -0.0236513 +-0.0504949 0.0477308 0.0397221 +-0.064202 0.155431 -0.0413859 +0.00347944 0.095162 0.0537659 +0.0105108 0.100431 0.0479236 +0.021311 0.123415 0.0275211 +0.0415141 0.104253 0.009162 +-0.0617635 0.0387159 0.0237173 +-0.0044982 0.0952431 0.0547633 +0.0398123 0.066053 -0.00878746 +-0.00271622 0.0627636 -0.0349069 +-0.00914442 0.0387021 0.000210725 +-0.0814422 0.106028 0.0294684 +-0.0136643 0.0922643 -0.0359313 +0.0420557 0.0676716 -0.00377172 +-0.0364793 0.0945677 0.0439429 +-0.05033 0.0517928 0.0340061 +-0.0470088 0.130577 0.00217989 +-0.0286777 0.158132 0.000508817 +0.0185266 0.0345532 0.000246197 +-0.0147199 0.184604 -0.0232088 +-0.0384921 0.111131 0.0361977 +-0.0384978 0.102835 0.0403416 +-0.0215751 0.0667511 0.0487462 +-0.0887264 0.0996152 0.00841821 +-0.060662 0.0644224 -0.00688354 +0.0397235 0.080129 -0.010751 +-0.0136601 0.0389486 0.0334846 +-0.0106876 0.129553 0.00573838 +0.00810435 0.0348429 0.0181346 +0.0256081 0.104449 -0.0166247 +-0.0682325 0.168499 -0.0270627 +-0.0474794 0.0917467 0.0438194 +0.00950115 0.119644 0.0365249 +0.0437324 0.0790794 0.0263023 +-0.0905234 0.132421 0.0302253 +-0.0748541 0.107208 0.0370405 +-0.0943565 0.12553 0.0182582 +-0.0131926 0.0378477 0.0507876 +-0.0570855 0.0480965 0.0356642 +-0.04493 0.0346468 0.0377647 +-0.0665925 0.064199 -0.00375071 +-0.0829976 0.133839 -0.00205551 +-0.0406365 0.0548831 -0.0112562 +-0.00950098 0.0884225 0.0571104 +0.0335068 0.0468989 0.0306812 +4.31947e-06 0.034593 -0.0165995 +-0.0725884 0.155473 0.0265843 +-0.0755167 0.0714511 -0.00453448 +-0.0669139 0.0704667 0.0354638 +-0.069981 0.180634 -0.0574865 +-0.0116389 0.034923 0.0481436 +-0.0307766 0.0720324 -0.0295197 +-0.0178239 0.107521 -0.0218927 +0.020822 0.043607 0.0421342 +-0.025466 0.0460651 0.0509844 +0.0349766 0.11396 0.0183585 +-0.0599273 0.122373 -0.00867944 +0.0365334 0.0980835 0.033685 +-0.0621481 0.159972 -0.0385982 +-0.0915531 0.115336 0.039285 +-0.0888763 0.0982745 0.00841224 +-0.00324635 0.130613 0.0199814 +-0.0668526 0.0914559 0.0435065 +0.0175786 0.0475536 0.0427473 +0.0318002 0.118052 0.00717688 +-0.0414667 0.104283 0.0404247 +0.0562407 0.0648113 0.00118357 +-0.0753758 0.170369 -0.0311391 +-0.0620405 0.138434 -0.00686017 +-0.00249822 0.0870283 0.0569791 +-0.0542914 0.129735 0.0355428 +-0.0274963 0.100194 0.0434874 +-0.00951883 0.17115 -0.0217635 +-0.0305995 0.121953 0.0248664 +-0.0770757 0.068957 0.00853894 +0.0135031 0.119752 -0.013055 +0.0413777 0.0491221 -0.00619394 +-0.0669027 0.0396709 0.012801 +-0.0249365 0.0607087 0.0409751 +-0.0124795 0.0517352 0.0508543 +-0.0304 0.0650386 -0.0254348 +-0.0267061 0.0765373 0.0464972 +0.0196875 0.0385058 -0.013693 +0.0518591 0.0461434 0.019211 +-0.0447475 0.146272 0.00240034 +-0.0336457 0.0562895 -0.0107616 +0.0237552 0.0887468 -0.0239425 +-0.000502572 0.0965565 0.053664 +-0.0664522 0.0376478 0.0363332 +-0.041205 0.169789 -0.00987939 +-0.0630084 0.142674 -0.00705706 +-0.0305333 0.178655 -0.00565353 +-0.0137626 0.0784616 -0.0384771 +-0.0616465 0.0397266 0.0174413 +0.00939844 0.0418898 -0.0239164 +0.0403895 0.0519763 -0.00684208 +0.00239172 0.0434053 -0.0248906 +-0.0663598 0.15609 0.0142173 +-0.0667166 0.136853 0.0439657 +-0.0132042 0.171245 -0.025107 +-0.0511148 0.117699 -0.0144446 +-0.0686887 0.0620968 0.00507892 +-0.066502 0.0889512 0.0442634 +-0.0531749 0.0487012 0.0129919 +-0.0464945 0.0532702 0.037612 +-0.0763048 0.0702707 0.00153293 +0.00237024 0.0481449 -0.0294793 +-0.0669085 0.108072 -0.0133167 +-0.0614834 0.166203 -0.0576271 +0.028089 0.0929174 0.0442737 +-0.0239187 0.036252 -0.0191133 +-0.0394562 0.0347283 0.0406132 +-0.0679286 0.17514 -0.0470724 +-0.0737519 0.14858 -0.0228576 +-0.0335079 0.105635 0.0395993 +-0.0780357 0.0769322 0.031104 +0.047273 0.0720618 0.00573289 +-0.0566027 0.0562228 -0.000407584 +-0.0336617 0.0592604 -0.0121578 +0.0390714 0.108406 0.0131668 +-0.067572 0.158668 -0.00806913 +-0.0668441 0.0995074 -0.0160123 +-0.0155786 0.0348181 -0.0259692 +0.0524799 0.0636428 -0.00173686 +-0.0666208 0.161046 -0.0135117 +0.012487 0.118181 0.036207 +0.00850767 0.067431 0.0550095 +-0.0568164 0.0333332 -0.00454462 +-0.00056724 0.0909565 -0.0345037 +0.0122553 0.0695892 -0.0315106 +-0.0747099 0.0713354 -0.00558545 +-0.0151964 0.178666 -0.0203777 +-0.0707468 0.161979 -0.010709 +-0.00364517 0.0496603 -0.0307711 +0.0292759 0.0787271 -0.0215887 +-0.0606931 0.0659255 -0.00858452 +-0.055281 0.0594285 0.0232183 +0.0168274 0.0658911 0.0506364 +-0.0286315 0.159193 -0.0128611 +-0.0753259 0.0689002 0.0227894 +-0.0278046 0.0364789 0.0536304 +-0.020238 0.0938075 -0.0335417 +-0.0787919 0.108745 0.0367247 +-0.0627356 0.150882 -0.0252578 +-0.0374903 0.111156 0.0359971 +0.0123741 0.0494269 -0.0274814 +-0.0550935 0.0685958 0.0378502 +0.0152655 0.0695272 -0.0306629 +0.0304209 0.0460912 -0.00653037 +-0.0896888 0.137919 0.0321971 +-0.076768 0.156222 -0.00903892 +-0.0177411 0.17422 -0.017052 +-0.0582856 0.0695544 0.0380966 +-0.0710157 0.179813 -0.0510815 +-0.0283604 0.112635 -0.0172343 +-0.0441537 0.0408799 -0.0213021 +0.0104769 0.0949778 0.0509942 +-0.00239285 0.100006 0.0487279 +0.0421962 0.0929549 -0.00479827 +0.0401191 0.0900359 0.0318057 +0.0226855 0.103953 -0.0180758 +-0.0705692 0.037778 -0.000833243 +0.0213756 0.0429924 -0.0177346 +0.0141656 0.0475343 0.0448184 +0.02539 0.0849287 0.0474039 +-0.0485578 0.0361757 -0.0124661 +0.0237226 0.0699627 0.0465409 +-0.062494 0.155703 0.00979223 +-0.0499478 0.135176 0.00116888 +-0.0731261 0.154051 -0.0329012 +-0.0565591 0.0344267 0.0337344 +-0.0757231 0.155771 0.0225635 +-0.081733 0.0783168 0.0273929 +-0.0465781 0.0504461 -0.00966731 +0.0370638 0.0376395 0.0160314 +0.0401736 0.0801429 -0.00978947 +-0.0295615 0.171229 -0.00778742 +-0.0625363 0.158377 -0.0386027 +-0.0482692 0.133969 0.0226705 +0.00454759 0.0341639 -0.0171912 +-0.0620171 0.153759 -0.016582 +-0.0878261 0.11219 0.0337097 +-0.05597 0.0519966 -0.00239063 +0.0400386 0.0871415 -0.0117889 +0.0205921 0.0807207 0.0509473 +-0.0296224 0.0352251 0.019146 +-0.0381589 0.163687 -0.0131595 +-0.0675595 0.163657 -0.0167503 +-0.0522361 0.15086 0.0163848 +0.0360023 0.103374 0.0311349 +0.0272712 0.0929162 0.0448522 +-0.0277389 0.0423333 0.0528015 +-0.0824451 0.140729 0.0449221 +-0.0329396 0.0386558 -0.0303928 +0.0296623 0.114075 -0.00693776 +-0.0221975 0.0652175 0.046591 +0.045212 0.0819736 0.0221688 +-0.0258761 0.0796032 0.0512286 +0.0272389 0.0873294 -0.0222582 +0.00242016 0.0361514 -0.024222 +-0.0615581 0.145382 0.0374116 +-0.0695688 0.160974 -0.049948 +-0.0858053 0.0953564 -0.000572964 +-0.0464927 0.165223 0.0045927 +-0.0624159 0.15064 -0.016574 +0.0473464 0.0561746 -0.0057008 +0.0237088 0.0942271 0.0467477 +-0.0494979 0.0762481 0.043343 +-0.078769 0.165248 -0.0339573 +-0.00950205 0.12806 0.0264334 +0.05377 0.0682444 0.00163269 +-0.0679209 0.163786 -0.054975 +0.0290078 0.087549 0.0438096 +-0.0840398 0.132376 -0.0018283 +-0.0306543 0.0650659 -0.0244333 +0.0322458 0.0355363 0.00770856 +0.00335212 0.131364 0.00663122 +-0.0154115 0.128891 0.0141212 +-0.0372876 0.0421099 0.0439093 +0.0308492 0.0931255 -0.0185705 +-0.029871 0.0459583 -0.0272702 +0.0300675 0.0822073 0.0435477 +0.000382137 0.128869 0.0270967 +-0.0174793 0.0730127 0.0550809 +-0.0387497 0.0782817 -0.0191475 +-0.0433943 0.0335852 -0.0186462 +0.0391881 0.0673984 -0.0107969 +-0.0280713 0.175691 -0.00734553 +0.0316149 0.0916151 0.0423373 +-0.0762132 0.0879097 -0.0135406 +-0.0316751 0.0665766 -0.0214412 +-0.00307655 0.0345443 -0.0171652 +-0.0426807 0.0636637 -0.0138633 +-0.0921228 0.126953 0.0372491 +-0.0235086 0.0347636 0.0474886 +-0.0506072 0.0546369 -0.00878713 +-0.0685971 0.162283 -0.0128033 +-0.0637348 0.156074 0.0136991 +0.0233928 0.0475951 -0.0196868 +-0.0519018 0.105587 -0.0193502 +-0.00551889 0.0746529 0.0585785 +0.000500504 0.0519731 0.0534094 +-0.0412672 0.0338015 -0.0128657 +-0.0819225 0.125087 -0.0048212 +0.00722702 0.0796252 -0.0338785 +-0.0893296 0.0956153 0.0124232 +-0.00167125 0.0554598 -0.0320096 +0.0267785 0.0402768 0.0313512 +-0.0867821 0.10632 0.010369 +-0.0451957 0.131364 0.0135329 +0.018149 0.0699846 0.0508404 +-0.0878008 0.119885 0.00028492 +-0.0612546 0.0341987 0.0206565 +0.0115009 0.111256 0.0392728 +0.0152633 0.0751002 -0.0297036 +-0.0351444 0.0865581 -0.0244792 +0.000649673 0.0963928 -0.0300705 +-0.0345272 0.121283 0.0279162 +0.0296818 0.0815643 -0.0205093 +-0.03348 0.115008 -0.0157024 +-0.0728312 0.136891 0.0492499 +-0.00265601 0.0540246 -0.0319128 +-0.0422272 0.127744 0.0161624 +-0.0494399 0.119744 0.0319359 +-0.0574019 0.116942 0.0379675 +-0.0468361 0.0970763 -0.0219471 +-0.0616292 0.146031 -0.00460349 +-0.0933662 0.126937 0.0262691 +-0.0228186 0.161021 -0.00330981 +-0.0635624 0.152855 0.034229 +-0.0625195 0.144437 -0.00658249 +-0.0839827 0.0830482 -0.0025149 +0.0144965 0.116791 0.0366152 +-0.0766305 0.155099 0.0076657 +-0.0365494 0.127902 0.0108341 +0.02042 0.126659 0.0186188 +-0.0470606 0.0628926 0.0375096 +-0.00665705 0.114661 -0.0174859 +0.0409886 0.104212 0.016155 +0.0264254 0.054947 0.041554 +-0.064618 0.0659249 -0.00682147 +0.0143052 0.127349 0.0263844 +-0.0254714 0.0379526 0.0103195 +0.0213669 0.0851498 -0.0262488 +-0.0469792 0.133264 0.00837709 +-0.0845615 0.0777561 0.014943 +0.0384886 0.0513309 0.0319844 +-0.0128833 0.165453 -0.0135102 +-0.0811951 0.147316 0.000164965 +-0.0523892 0.141597 0.0213852 +-0.045982 0.130505 0.00444274 +0.0279356 0.0520839 0.0384098 +-0.0931866 0.124098 0.0112689 +-0.0316005 0.0707575 -0.0264789 +0.00339515 0.0448431 -0.0258796 +-0.019688 0.0352649 -0.0192337 +-0.0492398 0.164062 -0.00484765 +-0.00759694 0.039172 -0.0259394 +-0.0456148 0.043386 -0.0114089 +-0.0706825 0.163806 -0.0469738 +-0.0111277 0.166928 -0.0162357 +0.0150914 0.0873948 0.0517971 +-0.0488841 0.0335499 -0.0104742 +0.0191832 0.0974256 -0.0227258 +-0.068761 0.17368 -0.0560297 +0.0347852 0.0821986 0.0398055 +-0.0656191 0.164967 -0.0232289 +0.0488884 0.0431235 0.0112233 +-0.0204394 0.0725535 0.0530664 +0.0198178 0.127196 0.0112616 +-0.0870347 0.13912 0.00619253 +-0.0619782 0.15683 -0.0335967 +0.0192552 0.0735767 -0.0281447 +-0.0582892 0.0589697 0.00149643 +-0.0794885 0.131664 0.0524764 +-0.0625817 0.159955 -0.0415973 +-0.0344319 0.0350721 -0.0182387 +0.0339652 0.0955609 0.0387182 +-0.0350568 0.0344135 0.0294961 +-0.00649976 0.0842428 0.0569087 +-0.0606247 0.0394421 0.0446315 +-0.066026 0.146409 -0.0228827 +0.0265887 0.0491527 0.0382012 +-0.0447519 0.078285 -0.0193632 +0.0442188 0.0833029 0.0251703 +-0.025021 0.178659 -0.00994683 +0.0382789 0.10977 0.00952257 +-0.0756137 0.176488 -0.0441876 +-0.0706968 0.169922 -0.0279808 +-0.0514769 0.0344526 0.0347935 +0.00449209 0.108585 0.0419458 +0.0591616 0.0552765 0.0151753 +0.0295012 0.0578054 0.0407589 +0.0323993 0.0505614 -0.00746951 +-0.0570338 0.131087 -0.00617819 +-0.0304972 0.101559 0.0427282 +-0.00116978 0.0991573 0.0506694 +-0.0238077 0.0811303 0.0547388 +-0.00701023 0.0988653 -0.0267279 +-0.0156999 0.0584946 -0.0353551 +0.00922562 0.0809438 -0.0326125 +0.0453737 0.0474164 -0.00383546 +0.0044338 0.117686 -0.0167913 +0.0239341 0.0561524 -0.0247597 +0.0591083 0.0705376 0.015147 +-0.0594646 0.151494 0.0342364 +-0.0657091 0.157202 -0.00882727 +-0.0250337 0.0381576 0.00660247 +0.0420581 0.102887 0.0101643 +0.0436509 0.0403831 0.00924323 +-0.00449056 0.130995 0.0108991 +0.0044777 0.112767 0.0412512 +0.00553763 0.100304 0.04669 +-0.0942962 0.120123 0.0192891 +-0.0620801 0.0339964 0.0171254 +-0.0160023 0.128658 0.015367 +-0.0432963 0.128843 0.0142751 +-0.0634932 0.104261 0.0408123 +-0.0746115 0.103538 0.0368408 +-0.0222463 0.0739152 0.0519932 +-0.0544743 0.034136 0.0256577 +-0.0252277 0.12616 0.0135052 +-0.0320296 0.171249 -0.00429305 +-0.0132393 0.1837 -0.0278845 +-0.0324962 0.0718107 0.0406773 +-0.0765269 0.165965 -0.0237196 +-0.0833313 0.0829966 0.0292517 +0.0259015 0.0902483 0.0463733 +0.0095961 0.0354723 -0.00987583 +0.0511798 0.0581784 0.029952 +-0.0848476 0.0845966 0.0254873 +-0.0509379 0.131197 -0.00260501 +0.00252027 0.0730778 0.0562797 +-0.0135504 0.122737 -0.00796322 +-0.00761024 0.0420402 -0.0258045 +-0.0508461 0.134795 0.0276114 +-0.0804072 0.155064 0.0209566 +0.00350727 0.103765 -0.0218529 +-0.0106066 0.0420419 -0.0261259 +-0.0713436 0.0632651 0.0179295 +-0.067959 0.169303 -0.0298283 +-0.0236585 0.049302 -0.027521 +-0.069473 0.158882 -0.00587612 +-0.0766843 0.15421 -0.00390102 +-0.0220401 0.0852804 0.0556778 +0.0275877 0.0465825 -0.0117097 +-0.00852427 0.130326 0.0108566 +0.0130382 0.0344991 0.00293188 +0.0559458 0.0605187 0.000117677 +-0.0348266 0.0900917 -0.0242073 +-0.0890869 0.135136 0.0402764 +-0.0897624 0.136545 0.033205 +0.00547548 0.112757 0.0410095 +-0.0712367 0.159654 -0.00650092 +-0.0121993 0.177175 -0.0288808 +-0.0823069 0.0748418 0.00552391 +-0.054558 0.0460859 0.0144477 +-0.070487 0.0669606 -0.00253268 +-0.0556924 0.159448 0.00648476 +-0.00649361 0.105887 0.04408 +-0.0602281 0.059992 0.0213112 +-0.0580325 0.0579587 0.00923969 +-0.0338627 0.110196 -0.0186635 +0.0546876 0.0597691 -0.00173886 +-0.0625369 0.149102 -0.00757295 +0.0542703 0.0575789 -0.00178727 +-0.0088618 0.129865 0.0208462 +-0.0801514 0.109359 0.0377151 +-0.00679227 0.0798757 -0.0378854 +-0.0424904 0.0860159 0.0426903 +0.0479819 0.0723794 0.00739708 +-0.0560722 0.13957 0.0312222 +-0.0365138 0.0804626 0.0431357 +0.00167631 0.105337 -0.0215515 +-0.0775111 0.0860271 0.0374369 +0.0259521 0.11908 -0.00433188 +-0.0558236 0.0526652 0.00846948 +-0.0846054 0.11036 0.02536 +-0.0765518 0.15421 -0.000899711 +0.0127846 0.0699169 0.0536174 +0.0208082 0.1264 0.00735797 +-0.0504584 0.0502644 0.0363006 +0.0174244 0.125027 -0.00283112 +-0.0308709 0.178515 -0.0130008 +-0.00718543 0.0385691 0.00621806 +0.0407891 0.0886694 0.0309807 +-0.0357951 0.124657 -0.0058294 +-0.0554873 0.0400326 0.0469712 +-0.057026 0.0675163 0.0366088 +-0.0497286 0.133927 0.0265636 +-0.00790814 0.0384861 0.0079669 +-0.0811308 0.0841829 -0.00653469 +-0.010479 0.0991873 -0.02508 +0.00856046 0.0354979 0.0447263 +-0.0634822 0.166302 -0.0366942 +-0.0223475 0.0360366 0.0535038 +-0.0795325 0.124539 0.0521412 +-0.00951606 0.0745243 0.0569833 +-0.0130122 0.127478 0.0251829 +-0.0936226 0.120076 0.0132919 +-0.0540996 0.154592 -0.00271527 +-0.0879876 0.132208 0.00230713 +-0.034669 0.15585 -0.0101443 +-0.0197012 0.0598498 -0.0346368 +-0.0276791 0.155231 -0.00339809 +-0.0842452 0.0818537 0.025498 +-0.054537 0.0560032 -0.00541843 +-0.0497623 0.0665865 0.0371903 +-0.0891577 0.092949 0.0214162 +-0.0577737 0.0782037 -0.0194332 +-0.064492 0.104249 0.0405622 +-0.0336047 0.0695556 -0.0194645 +-0.0558611 0.0955845 -0.021564 +-0.0184974 0.0869962 0.0565805 +0.00637923 0.0372606 0.0264872 +-0.0665048 0.104229 0.0399675 +0.0566718 0.0553009 0.0238011 +-0.0283123 0.0383433 -0.00703005 +-0.0114184 0.169868 -0.0184586 +0.0211822 0.0909362 -0.0242734 +0.0406295 0.0806796 0.0323988 +0.0123659 0.128443 -0.000397752 +-0.0384845 0.0833049 0.0437838 +-0.01051 0.0531978 0.0517663 +0.00250545 0.0842781 0.0574483 +-0.0674995 0.0972695 0.0419768 +-0.0618921 0.119466 -0.00942759 +-0.00594439 0.13066 0.0175514 +-0.0188708 0.0382701 0.00775373 +-0.0605698 0.0727907 0.0401099 +-0.0115041 0.115551 0.0394745 +0.0300401 0.11902 0.00366373 +-0.0812551 0.10738 0.02923 +-0.0704758 0.123201 0.0533571 +-0.0711231 0.141136 0.0464522 +-0.0222312 0.125137 -0.000350139 +0.0436968 0.0818627 -0.00278544 +-0.00557531 0.0383818 0.0157938 +-0.0175218 0.187118 -0.0194148 +0.000510392 0.0689287 0.0563645 +0.0339979 0.0519394 0.0331121 +0.00286804 0.129802 0.0250965 +-0.0290472 0.0777737 0.0431405 +0.0209137 0.102084 0.0444516 +-0.00628355 0.0409075 0.0485853 +0.0605521 0.0595441 0.0141714 +0.0386236 0.0898511 -0.0127692 +0.0302987 0.0539206 -0.0157566 +-0.0421651 0.149301 -0.00412295 +-0.0126067 0.040646 -0.0265976 +-0.0788091 0.168052 -0.033971 +0.0359211 0.112779 0.0172688 +-0.0394762 0.17111 0.000601324 +-0.0330305 0.0384181 -0.00620006 +-0.0859939 0.0940196 0.000445293 +-0.0359122 0.158048 0.00410154 +-0.0745011 0.151286 -0.0298782 +0.0531496 0.0491587 0.00225551 +-0.0243767 0.179986 -0.0189674 +-0.0891975 0.0996627 0.0124046 +-0.0742533 0.17954 -0.0493425 +-0.0510836 0.145457 -0.000907293 +0.0483282 0.0561556 -0.00540695 +-0.0224848 0.0474635 0.0510926 +-0.0647533 0.163375 -0.0214725 +-0.0127683 0.163589 -0.0126806 +0.0112702 0.0766287 -0.031501 +-0.0460801 0.153165 -0.0063697 +-0.0396673 0.0606846 -0.0120669 +0.0304753 0.100799 0.0389817 +0.0504441 0.0731136 0.0180651 +0.0195371 0.122997 -0.00457304 +-0.0455152 0.0505363 0.0385492 +-0.0525396 0.0458696 -0.00783738 +-0.0679101 0.109459 -0.0121777 +0.0257715 0.122252 0.0234619 +-0.0641925 0.158337 -0.0512857 +-0.0679573 0.0636968 0.0236258 +0.0336501 0.0872305 -0.0183746 +-0.081408 0.0801232 -0.00353296 +-0.068364 0.143961 0.043402 +-0.060807 0.170968 -0.0607383 +-0.0530022 0.0712206 0.0395879 +-0.0629233 0.149038 -0.01858 +-0.0911763 0.131044 0.0302322 +-0.0866097 0.0859466 0.00148078 +-0.0213048 0.0567472 0.0459531 +-0.0884724 0.111842 0.0093465 +-0.0232358 0.0382045 0.0267906 +-0.0687325 0.178002 -0.0502345 +0.0171734 0.0960138 -0.0234178 +-0.0336295 0.0533957 -0.0102549 +0.0404048 0.0661215 -0.00776758 +0.0352114 0.113974 0.0112756 +-0.0509894 0.131098 0.0315417 +-0.0825925 0.0857998 0.0312629 +0.0165569 0.0367823 -0.018664 +-0.0158447 0.163118 -0.0162484 +0.0463618 0.0504062 -0.00492067 +-0.0256024 0.0918183 0.0477571 +0.0401119 0.105635 0.0181717 +-0.075865 0.120825 -0.00747435 +-0.0515138 0.0502892 0.0216268 +-0.0597307 0.0737738 -0.017073 +0.0327302 0.0795508 0.0421017 +0.0561478 0.0493933 0.0131905 +-0.0491927 0.149222 0.0111539 +-0.0505664 0.0459962 -0.00889176 +-0.0346044 0.0381371 0.0484275 +-0.0571418 0.0341673 0.0268338 +-0.0508978 0.0335658 0.00549258 +0.0499018 0.0460625 0.00228276 +0.000648366 0.101032 0.0453587 +-0.064515 0.0945534 0.0434117 +-0.00933623 0.127529 -0.00319765 +-0.0931674 0.126844 0.0122586 +-0.0775055 0.120428 0.0519362 +-0.00412302 0.0390868 0.0317249 +-0.0444953 0.12065 0.0276432 +-0.0808257 0.114785 -0.00282613 +0.00848893 0.0976878 0.0492062 +-0.0204952 0.119495 0.0334766 +-0.0744171 0.1312 0.052182 +-0.0354802 0.0365931 -0.0303176 +-0.0158225 0.127346 0.0227279 +-0.0622273 0.163125 -0.0345932 +-0.0308039 0.0345326 0.0408762 +-0.0684942 0.0944611 0.0423345 +-0.0282259 0.115945 -0.0147131 +-0.00496131 0.0393649 0.0367022 +0.000507606 0.089764 0.0561546 +0.0184391 0.121423 0.0322194 +-0.0293563 0.0761839 -0.0345604 +-0.0798193 0.0993879 0.0336913 +-0.0260706 0.125207 0.0176138 +-0.0466789 0.0383303 -0.0162856 +-0.0551627 0.0709645 0.0393255 +-0.0708102 0.086505 -0.0166182 +-0.0534691 0.0491595 0.0373719 +-0.0176627 0.0365106 -0.0181139 +0.00950436 0.0910078 0.0538342 +-0.0895706 0.136541 0.0322035 +0.0538065 0.0721186 0.0208488 +-0.00549555 0.115561 0.0401898 +0.00964519 0.0349724 -0.00752839 +-0.0134864 0.112741 0.0406725 +-0.00206815 0.039143 -0.00620903 +0.0130247 0.112857 -0.017601 +-0.0790398 0.119048 0.050662 +-0.0808858 0.0872378 0.0337267 +-0.0123796 0.124965 -0.00637162 +-0.0213885 0.125739 0.00103732 +-0.089509 0.125659 0.045333 +-0.05553 0.137483 -0.00349047 +0.0417216 0.100008 -0.000812454 +-0.0294372 0.045874 0.0494957 +0.0458807 0.0774123 0.0204549 +-0.010796 0.120869 -0.0120713 +-0.0650859 0.171096 -0.0446086 +-0.0309091 0.0594671 -0.0184147 +0.0318276 0.102039 -0.0140664 +-0.050474 0.137043 0.0223997 +-0.0892111 0.0956026 0.0114219 +-0.0551272 0.0478339 0.0400497 +-0.0376142 0.115213 -0.0159111 +-0.0262205 0.0604134 -0.0304432 +-0.0395514 0.159448 0.00235113 +-0.0548296 0.0912974 -0.0221769 +0.0140209 0.113717 -0.0165571 +-0.0376838 0.0651596 -0.0143574 +-0.0357596 0.0367769 0.0465803 +0.0218833 0.124858 0.00205716 +-0.0515413 0.0403485 -0.0110842 +0.0196453 0.0521206 0.045827 +-0.0274751 0.109286 -0.019717 +-0.054346 0.125513 0.0372066 +-0.061806 0.172532 -0.0555873 +0.0193853 0.0367967 0.0404 +0.00315064 0.0340463 -0.0192491 +-0.0419902 0.127061 0.0177443 +-0.0753578 0.0671035 0.0137678 +-0.017747 0.0685932 -0.0381265 +0.0502404 0.0581527 0.030355 +-0.01349 0.11138 0.0414506 +-0.088473 0.0908539 0.022804 +-0.0623246 0.0380624 0.0435494 +-0.0315191 0.0831203 0.0417649 +-0.0908528 0.131057 0.0322319 +-0.0524868 0.0959601 0.0436811 +0.0383485 0.10917 0.00520513 +0.0405643 0.0599899 -0.00408877 +-0.00769877 0.0598808 -0.0345717 +0.0253549 0.0875981 0.0473346 +-0.0126907 0.166905 -0.0150111 +0.0384994 0.0541178 0.0316123 +-0.034906 0.0367338 -0.0161439 +-0.057208 0.048538 0.00854022 +-0.0255159 0.108511 0.0401259 +0.0305676 0.0350004 0.0115893 +-0.0520943 0.0559627 0.0266271 +-0.0610057 0.155949 0.0190169 +-0.067333 0.1766 -0.0497355 +0.0258363 0.0844839 -0.0235493 +-0.0689178 0.164003 -0.0158096 +-0.00849374 0.116931 0.0393004 +-0.0752784 0.113511 0.0497641 +-0.0888148 0.144497 0.0313918 +-0.0453871 0.145929 0.00156561 +-0.0599561 0.0677317 0.0357891 +-0.0125434 0.0386707 -0.00229897 +-0.000271447 0.0356914 0.00658166 +-0.0415825 0.0366566 0.0434527 +-0.0297036 0.165315 -0.00626903 +-0.0467885 0.0855251 -0.0217462 +-0.0827882 0.125806 0.051363 +-0.0176693 0.0966335 -0.0284397 +-0.0464991 0.115243 0.033257 +-0.0569748 0.146758 0.0317266 +-0.0430879 0.156177 -0.00890493 +-0.00350236 0.0774419 0.0585703 +-0.0699027 0.158151 -0.0489236 +0.0362459 0.112339 0.00591924 +0.0367118 0.0920329 -0.0133924 +-0.0539202 0.0610131 0.0274265 +-0.0093317 0.127279 0.0279745 +-0.0726772 0.112018 0.047983 +-0.0451365 0.160644 -0.00892562 +-0.0209165 0.172715 -0.0146234 +-0.0477839 0.125387 0.0290716 +-0.0734873 0.156859 -0.0289164 +0.00860516 0.061703 0.0545256 +-0.0246606 0.0422329 0.0539554 +-0.0315436 0.153515 -0.00448892 +0.0345459 0.0571781 -0.011728 +-0.0791321 0.170818 -0.0399882 +0.0254504 0.0415949 -0.00563526 +0.0230318 0.0355156 0.0114574 +-0.0554984 0.107053 0.0399469 +-0.0296361 0.0522471 0.0373693 +-0.0438179 0.0928034 -0.0224841 +-0.0199243 0.0387302 -0.0112686 +0.0212455 0.0791286 -0.0267859 +-0.0532861 0.0527919 0.0115704 +0.00450017 0.0441843 0.0459802 +-0.0329932 0.0339759 0.0213799 +0.0553011 0.0604636 -0.000842819 +0.00165238 0.0932332 -0.0327923 +-0.0552284 0.0527023 0.00927604 +-0.0783599 0.0708413 0.0204513 +-0.0767777 0.176413 -0.0510191 +-0.0394918 0.104211 0.0396007 +0.0327921 0.0889736 0.0422708 +-0.00991923 0.0986226 0.0505787 +-0.0806729 0.108958 0.0307202 +-0.0822864 0.135367 0.0491747 +-0.0649369 0.0609076 0.00327394 +0.0386477 0.0715748 -0.0117783 +-0.0240415 0.126597 0.0109996 +-0.0781422 0.141688 -0.0047364 +-0.0427782 0.0841106 -0.0212812 +-0.0641686 0.178174 -0.0558405 +0.0252976 0.0661311 -0.0233121 +0.0189895 0.0631559 0.0484766 +0.0182463 0.0722224 -0.0290012 +-0.0777504 0.161717 -0.020949 +-0.051966 0.138521 0.000416067 +-0.0605353 0.155832 0.0177371 +0.0437866 0.098742 0.00716534 +-0.0494703 0.0370271 -0.0120635 +0.0464078 0.0806576 0.0101793 +0.0218218 0.116393 -0.0114503 +-0.0533273 0.132699 -0.00427378 +-0.0681775 0.0762505 0.039044 +-0.0250035 0.0896 -0.0352857 +0.000769534 0.0946028 -0.0322154 +-0.0158082 0.0346932 0.0474464 +-0.076979 0.148604 -0.00699397 +0.0467055 0.0730498 0.0181295 +-0.0496483 0.0634464 -0.0118311 +-0.0197535 0.0700012 -0.0382558 +0.0232727 0.0989983 -0.0208236 +-0.0777 0.16251 -0.0219398 +-0.0908755 0.147455 0.0141474 +-0.0334742 0.0638502 -0.015538 +0.00219672 0.0825025 -0.0349885 +-0.0814773 0.128835 0.0524787 +-0.0784807 0.13724 0.0497912 +0.0361312 0.11046 8.71157e-05 +-0.0454849 0.0931252 0.0434035 +-0.0635463 0.153079 -0.00800928 +-0.0529285 0.0339107 0.0244154 +-0.00862356 0.0451919 -0.0286362 +0.0192377 0.117984 0.0350388 +-0.000496915 0.0883839 0.0565827 +0.0316988 0.118246 0.0142694 +-0.0398347 0.169198 -0.01127 +0.0219416 0.125622 0.00635903 +-0.092876 0.129604 0.0142376 +-0.023566 0.0579721 0.0425175 +-0.0447621 0.126552 0.0211574 +-0.0390659 0.157734 -0.0109824 +-0.0038734 0.104505 -0.022849 +-0.0810823 0.146103 0.0405774 +-0.00499552 0.038756 0.0282379 +0.00659654 0.102942 0.0449664 +-0.0528078 0.0898592 -0.0221628 +-0.0415043 0.0340515 -0.0039392 +-0.0118724 0.166916 -0.0155725 +0.00801932 0.113693 0.0398597 +-0.0873717 0.0895698 0.0245766 +0.0235801 0.11767 -0.00881398 +-0.0592051 0.0411249 -0.00803844 +-0.0631955 0.174736 -0.0540401 +-0.00904474 0.102005 -0.0240096 +-0.0893459 0.0888735 0.0114634 +-0.0847817 0.111591 0.0313073 +-0.0318636 0.155275 -0.00893878 +0.020119 0.0578214 0.0483165 +-0.0884363 0.140505 0.0381916 +0.0268748 0.0768062 0.0459093 +0.00650425 0.06886 0.0554952 +-0.0600274 0.155812 0.00342033 +0.00439509 0.0433687 -0.0246925 +-0.0644393 0.157952 -0.0526177 +-0.0626717 0.152516 0.0345768 +-0.0686641 0.0435432 0.00268116 +-0.0668913 0.155545 0.00822429 +-0.0513204 0.0545255 0.0306253 +-0.0216946 0.055283 -0.031103 +0.0201038 0.121698 0.0313961 +-0.0435092 0.0973014 0.0425845 +-0.0598342 0.124083 0.0415696 +-0.0290584 0.0385824 0.0360072 +-0.0211666 0.0959679 -0.0277597 +0.0393164 0.0948581 -0.00836399 +-0.0465497 0.0354834 -0.0182685 +-0.0577953 0.0577539 0.0112722 +0.0343862 0.0533953 0.033694 +-0.0356597 0.12459 0.0229985 +-0.0703962 0.0382223 -0.000484462 +0.0394034 0.0772645 -0.00977482 +0.0374516 0.110677 0.0163977 +0.022681 0.0549804 0.0449373 +-0.00661876 0.0388692 0.029605 +-0.0298463 0.0958488 -0.0239617 +-0.0500656 0.165567 2.77718e-05 +-0.0624265 0.163056 -0.0535855 +0.0182459 0.035082 -0.00972071 +-0.0535426 0.139527 0.0278286 +0.0535157 0.0664189 0.0268642 +-0.0618871 0.044625 0.0401036 +0.0279315 0.0813321 -0.0222629 +-0.0364738 0.0959436 0.0435424 +-0.0648009 0.0867059 -0.0190299 +-0.0910478 0.113254 0.017639 +0.0328625 0.115479 0.000361714 +-5.55454e-05 0.1192 -0.0143689 +0.00440015 0.0419024 -0.0241382 +-0.0356548 0.0459643 -0.0252685 +-0.00874142 0.0699019 -0.0364843 +-0.0786816 0.173602 -0.0460003 +-0.0750442 0.11265 0.048722 +0.0132032 0.0850348 -0.0305799 +-0.0275703 0.070462 0.0404211 +-0.0333885 0.082189 -0.0265241 +-0.0498121 0.0912811 -0.0216901 +-0.0121305 0.129539 0.00953518 +-0.0888371 0.0942243 0.00943852 +-0.0733262 0.151241 -0.0368807 +0.0159012 0.0347663 0.0342789 +-0.0464698 0.0336288 0.00272222 +-0.0219797 0.0381347 0.0126751 +-0.0434985 0.112577 0.0357301 +0.0374146 0.0807844 0.0365828 +-0.0150623 0.160937 -0.0114195 +0.00882514 0.0347544 -0.00561715 +-0.0793646 0.150083 0.036366 +0.0444807 0.0526489 0.0324592 +-0.0140843 0.0382987 0.0177555 +0.0371109 0.0630101 -0.0117592 +-0.0795655 0.0711751 0.0181423 +0.0314182 0.0968966 0.040312 +0.0553211 0.0622297 0.0271921 +-0.0344916 0.0789231 0.04184 +-0.0708134 0.0893817 -0.0163657 +-0.0786856 0.174223 -0.045863 +-0.0497628 0.0345507 0.0333201 +-0.026557 0.0646504 0.0393284 +0.0499455 0.0733656 0.0164225 +0.0233132 0.0902311 0.0479207 +-0.0441494 0.163638 -0.00943446 +-0.048497 0.0464891 0.040915 +-0.0638143 0.15519 -0.0396115 +0.0296208 0.115866 0.0291818 +-0.0505003 0.100168 0.042883 +0.00450871 0.0910904 0.0550512 +0.0223914 0.093257 -0.0227104 +-0.0346391 0.0469045 -0.0241611 +0.0600903 0.0608951 0.0181821 +0.0174829 0.0976104 0.0472234 +0.0245219 0.0382712 0.0311236 +0.0373902 0.0561474 -0.00613784 +-0.0725233 0.143597 -0.0104167 +-0.0755086 0.133058 0.0519758 +-0.0469091 0.134066 0.0158053 +-0.0365004 0.0719314 0.0420432 +0.0599383 0.0692126 0.0131498 +-0.0228512 0.126901 0.0114323 +0.0370832 0.0408236 0.0259314 +0.0430366 0.0709859 0.0269587 +0.0442558 0.0917077 -0.00080891 +0.0366443 0.0915417 0.0373244 +0.0149217 0.127634 0.0251635 +-0.0260773 0.0547586 -0.0274003 +0.0223322 0.0348324 0.0210401 +-0.0674741 0.169344 -0.0310786 +-0.0943935 0.125559 0.0222675 +0.000334373 0.0554042 -0.031412 +-0.023822 0.0694685 0.046666 +0.024828 0.0768588 0.0482443 +-0.0593221 0.0615947 0.0254084 +-0.0274704 0.0506795 -0.0243965 +-0.0172176 0.177147 -0.0249576 +0.0433823 0.0490357 -0.00560381 +0.0244317 0.116294 -0.00934411 +0.0184177 0.0350663 0.0309125 +0.0404265 0.102791 0.0231613 +-0.0243375 0.1639 -0.00728245 +-0.0675442 0.151908 -0.0456642 +-0.0311974 0.0474073 0.0447828 +-0.0726957 0.175719 -0.0430358 +-0.0165027 0.0499584 0.0473896 +0.0323852 0.0461686 -0.00610484 +0.0214495 0.0822346 0.0504578 +0.016822 0.123899 -0.00554312 +-0.0694694 0.178653 -0.050518 +-0.0741019 0.156119 0.0187476 +0.0510202 0.0736047 0.0138558 +-0.0739033 0.14718 -0.0168588 +-0.0165785 0.162548 -0.00831661 +-0.0414778 0.0347327 0.0401772 +0.0319294 0.118052 0.0100791 +-0.0502835 0.146495 -0.00183305 +-0.0758664 0.116415 -0.00636144 +-0.0824071 0.136209 -0.001703 +-0.0519598 0.0335208 -0.000101812 +-0.0819554 0.0993316 0.0315904 +0.0213579 0.055075 -0.0266156 +-0.0422106 0.112435 -0.0169649 +0.0150002 0.128745 0.00378903 +-0.0430993 0.157658 -0.00954173 +-0.0816795 0.117485 0.0486704 +-0.00999143 0.0383941 0.00762464 +0.0248936 0.12332 0.00461274 +-0.0644877 0.0972949 0.0424471 +-0.032514 0.105674 0.0400124 +-0.0517751 0.0826668 -0.0215624 +0.00214252 0.103065 -0.0221511 +-0.0609083 0.169363 -0.0596932 +0.0270498 0.0919981 -0.0213752 +0.00735643 0.038818 0.0454516 +0.0115845 0.121127 -0.0125402 +0.0591992 0.0552614 0.014176 +-0.0901723 0.112303 0.0149799 +-0.0627834 0.035148 0.0195098 +-0.074757 0.111898 0.0475989 +0.0570719 0.0578424 0.00217676 +-0.0528487 0.0500508 0.0126245 +-0.00477608 0.0784365 -0.0374195 +-0.0645432 0.0673992 0.033354 +-0.0540085 0.145723 -0.00127177 +-0.010995 0.0388834 0.0322933 +0.00247314 0.0964836 0.053027 +-0.0624566 0.177245 -0.0586155 +0.0368789 0.0941727 0.035906 +-0.0219544 0.120804 -0.00985027 +0.0570851 0.0508934 0.0101876 +0.0102738 0.0724526 -0.032232 +0.0544954 0.0655564 0.000403771 +0.0210681 0.0415437 -0.0156999 +-0.0692317 0.155651 0.00154206 +0.0527009 0.0518645 -0.000768796 +0.0334294 0.116181 0.00636312 +0.0448957 0.0945828 0.0101613 +0.00249575 0.0952068 0.0540463 +-0.0124032 0.0388598 -0.00801871 +0.045282 0.0889737 0.0021781 +-0.00350234 0.0388725 -0.0137373 +-0.0678317 0.0335757 0.00383638 +0.00921578 0.0767579 -0.0331902 +-0.0534996 0.0987387 0.0427565 +-0.0124888 0.126191 0.0283067 +0.0103285 0.130654 0.00635323 +0.0314005 0.0446447 -0.00577901 +-0.0295471 0.0804664 0.0436378 +0.00584239 0.0374362 -0.00493399 +0.0435663 0.0408867 0.018056 +-0.0206234 0.0950485 -0.0308006 +-0.0216102 0.0408331 -0.028871 +-0.0256808 0.0663835 0.041558 +0.0103698 0.0351865 0.034574 +0.0249548 0.0809223 0.0484627 +-0.0551501 0.0641879 0.0328568 +-0.0633147 0.132484 0.0400888 +-0.062948 0.163113 -0.0275941 +-0.0620302 0.141028 0.0366839 +-0.0484797 0.126826 0.0298997 +0.00950548 0.107102 0.041296 +0.0390056 0.0914413 0.0336848 +0.0300323 0.108764 0.0348296 +-0.0198832 0.0335337 -0.0251748 +0.0128315 0.0391361 0.0445812 +-0.0263531 0.11244 -0.0170322 +0.0359611 0.109622 -0.00183337 +-0.0572001 0.0380562 0.0469117 +0.00550248 0.121034 0.0357708 +-0.0667821 0.14845 -0.031825 +-0.016957 0.186039 -0.0193264 +-0.0878947 0.131105 0.044958 +0.0363312 0.107346 0.0280412 +-0.0614985 0.0833224 0.0439406 +0.0542552 0.0478973 0.00920996 +-0.0787615 0.0867217 -0.0105634 +0.0226207 0.0360088 0.0127544 +0.00886878 0.0343168 0.00225753 +-0.0266191 0.0618553 -0.0304537 +-0.00302574 0.0387303 0.00142158 +-0.019905 0.038668 0.0324503 +0.0527798 0.0683653 0.00150186 +0.021964 0.0402022 -0.00870612 +-0.0126432 0.0481635 -0.0303259 +-0.0124951 0.0925417 0.056096 +-0.0373842 0.0433946 0.0425967 +0.0243858 0.124139 0.00725423 +-0.0540808 0.0434992 0.0186914 +-0.0590026 0.0609591 0.0242669 +-0.0846496 0.129332 -0.00265191 +0.0108129 0.0887938 0.0544498 +-0.0599027 0.106882 -0.0174092 +0.0235199 0.123889 0.00267512 +-0.0364958 0.116629 0.0319219 +-0.0274016 0.0386836 -0.0145853 +0.0575354 0.0620414 0.00218896 +-0.0617076 0.156842 -0.0315932 +-0.0566848 0.0344893 0.0422998 +-0.0515556 0.0459336 -0.00836292 +0.034036 0.037677 0.020853 +0.0440634 0.064827 -0.000963389 +-0.0783551 0.090033 0.0367591 +-0.0451437 0.162134 -0.00879907 +-0.0870992 0.0913786 0.00345195 +-0.0896332 0.0983435 0.0144056 +0.00267954 0.131212 0.00494959 +-0.0521038 0.0531706 0.024633 +0.033292 0.0856433 -0.0187503 +-0.0284873 0.0606333 -0.0264114 +-0.0366237 0.123115 -0.00817194 +-0.0417568 0.0797359 -0.0197866 +-0.0466787 0.0650533 -0.0138917 +0.0360448 0.0392022 -6.35907e-05 +-0.0192403 0.0387115 -0.0129795 +0.0431391 0.098698 0.00317491 +-0.0224767 0.091498 -0.0352097 +0.0093588 0.0524416 -0.0295377 +-0.0833358 0.105954 0.0271122 +-0.0146006 0.127548 0.000963555 +0.0122907 0.0652688 -0.0305463 +-0.0515682 0.0488001 -0.00762593 +0.0214986 0.122612 0.0290301 +-0.0271235 0.11599 -0.0147668 +0.0381316 0.109734 0.0151646 +-0.00681664 0.0854791 -0.0376549 +-0.0147515 0.07145 -0.0385454 +-0.0659657 0.129697 -0.00887578 +0.0359834 0.11203 0.00292702 +-0.0631298 0.144906 -0.0101196 +0.00903132 0.0343268 -0.014573 +-0.0348704 0.101474 -0.022105 +-0.0693077 0.0614952 0.0145437 +0.0349262 0.0896582 -0.0169179 +-0.037886 0.109925 -0.0191545 +-0.0372775 0.0472266 -0.0193178 +0.0112393 0.0349033 0.0350041 +0.0430009 0.0705508 -0.00279727 +0.0400623 0.0956447 -0.00679711 +-0.0676126 0.155322 0.00651001 +0.0598737 0.0581052 0.00916393 +-0.061495 0.100138 0.0425963 +-0.0575075 0.0435504 0.0160321 +0.0228298 0.0827896 -0.0258286 +-0.0115004 0.0925527 0.0561224 +-0.0223058 0.184466 -0.0180708 +-0.0624348 0.161527 -0.0435948 +-0.0143997 0.0383922 -0.000568703 +-0.0793362 0.0881239 -0.0095476 +-0.0548971 0.10981 -0.018029 +-0.0707512 0.156365 0.0199172 +0.0244407 0.0405616 0.0372831 +-0.0545055 0.113958 0.0351234 +-0.00749363 0.0547355 0.05304 +0.044284 0.0819099 0.0251484 +0.0117499 0.0519912 0.0501875 +-0.0706809 0.109318 0.0378585 +-0.0640006 0.161566 -0.01976 +-0.0122192 0.0378665 0.050479 +-0.0715061 0.148353 0.0408514 +-0.0652549 0.0667307 0.0320259 +0.0162842 0.118981 -0.0122323 +-0.0584978 0.0959813 0.0440843 +-0.0261553 0.169713 -0.0187023 +0.0163086 0.108997 -0.0174538 +0.019812 0.035154 0.0274956 +0.0403843 0.0547484 -0.00641578 +-0.0370524 0.128064 0.00917633 +-0.0181528 0.0388364 -0.0128782 +-0.0703699 0.144073 -0.0154773 +-0.0821317 0.15265 0.0057634 +-0.0121975 0.182647 -0.0286755 +-0.0179487 0.126229 0.0234428 +-0.0713342 0.065071 0.0216423 +-0.0135059 0.0357879 0.0504712 +-0.0551243 0.0482803 0.0389113 +-0.043841 0.0970933 -0.0219235 +0.0307935 0.0619124 0.0409121 +-0.0872404 0.149912 0.0282765 +-0.0777833 0.0694772 0.0182331 +-0.0479563 0.0699321 0.0400053 +-0.0325179 0.0704032 0.0404934 +-0.04199 0.0336868 -0.0166047 +0.00497409 0.0340864 0.0145521 +-0.0449304 0.0643377 0.0396087 +-0.0778694 0.106226 -0.00738941 +-0.0126221 0.0389953 0.033657 +-0.0632121 0.172304 -0.0615699 +-0.0276205 0.0874255 -0.0346253 +-0.0625254 0.138119 0.0359126 +0.00425284 0.0711834 -0.0342035 +-0.0788838 0.153282 0.0303949 +0.00652169 0.0362747 0.0255863 +-0.0662316 0.0345008 0.0140489 +-0.02106 0.174206 -0.0148174 +0.0185004 0.109841 0.0391791 +-0.0646081 0.0450546 0.000685835 +-0.0136021 0.0363077 -0.0261392 +-9.29522e-05 0.131467 0.0096514 +-0.0451771 0.128971 0.00184527 +0.00750493 0.0561002 0.0528313 +0.0361319 0.074097 0.0381795 +0.022807 0.125614 0.0138049 +-0.0196774 0.0509888 -0.0303435 +-0.0930693 0.120128 0.0262942 +-0.0230193 0.120798 -0.0098328 +-0.0271496 0.0384219 0.0311819 +-0.0748224 0.0935599 -0.014192 +-0.0354943 0.119369 0.0303337 +0.060906 0.0609648 0.0111554 +0.0112135 0.130703 0.0137986 +-0.0266186 0.0589226 0.0382515 +0.0218458 0.0672628 0.0473581 +0.00922858 0.116392 0.0380826 +-0.0579872 0.0576809 0.00662705 +-0.0151861 0.168246 -0.0215615 +0.0431809 0.0791159 0.0272636 +-0.0755673 0.0727762 -0.00660131 +0.0242315 0.0818412 -0.0251267 +-0.0250124 0.0782139 0.0518051 +-0.0338224 0.0338142 0.00692539 +-0.00946746 0.0362215 -0.025425 +-0.0416936 0.0652006 -0.0145392 +-0.0546754 0.0335075 0.00116676 +-0.0233106 0.15969 -0.00223977 +-0.0842752 0.141807 0.00320102 +-0.0818378 0.131303 0.0516681 +-0.0234556 0.161598 -0.0145283 +-0.0499699 0.150693 0.011804 +-0.010495 0.0471724 0.0477907 +0.0380379 0.075373 0.0356471 +-0.0450739 0.0363473 0.0448052 +-0.0737333 0.15548 -0.0259091 +-0.0716137 0.178389 -0.0484 +-0.0384987 0.0691035 0.0417776 +0.00141943 0.122927 0.0347542 +-0.057332 0.137224 -0.00518105 +-0.0557698 0.136063 -0.00393718 +0.0558337 0.0494217 0.00919997 +-0.0580135 0.04944 0.00163802 +-0.0357372 0.111668 -0.0181975 +-0.0550044 0.145721 -0.00143834 +0.00110225 0.0344701 0.00796988 +-0.0157589 0.038402 0.00281447 +-0.0521458 0.121812 -0.0107191 +-0.00850406 0.11834 0.0382239 +-0.0498654 0.102788 -0.0210486 +-0.0630574 0.15313 -0.033029 +-0.0734528 0.143001 -0.00787011 +-0.0577717 0.0334512 -0.00484461 +-0.0926703 0.124234 0.0402542 +-0.0236253 0.0450591 -0.0281331 +0.0444641 0.0686626 0.00115575 +-0.0394989 0.0620307 0.0413298 +-0.0489043 0.0531988 0.0353928 +-0.0549375 0.140991 0.0293007 +0.0134789 0.100443 0.0476777 +0.0344381 0.102088 0.0341795 +-0.0629237 0.112473 -0.0138486 +0.0456048 0.0918125 0.0071715 +-0.0679688 0.135528 -0.00836676 +-0.0561131 0.145329 0.0311927 +0.0222077 0.0403059 0.0403109 +-0.0930104 0.131018 0.0202297 +-0.073597 0.161047 -0.0349306 +-0.073142 0.0762988 0.0362199 +-0.0868887 0.102318 0.0233696 +-0.074876 0.107788 -0.00905848 +-0.061968 0.159998 -0.0366167 +0.0234524 0.0505688 0.0407158 +-0.0374809 0.113893 0.0340704 +-0.052457 0.144675 0.0183665 +0.000496502 0.103028 0.0440499 +-0.0107515 0.039289 0.0373765 +0.0177346 0.123618 -0.0052308 +-0.0278908 0.0903405 -0.0316075 +0.0555538 0.0665692 0.0013688 +-0.0679616 0.181138 -0.0572245 +-0.0246921 0.156571 -0.00408158 +-0.0295045 0.112518 0.0356692 +-0.0523224 0.146252 0.0184018 +-0.0831779 0.111548 0.00129095 +0.0381693 0.109765 0.0141664 +-0.0465876 0.132486 0.00741919 +0.0351546 0.112861 0.0227039 +0.00752051 0.0855871 0.0562726 +-0.0236256 0.0464233 -0.0274769 +-0.0820555 0.138062 0.0474469 +-0.0332203 0.171246 -0.00251328 +-0.0471051 0.157621 -0.00763511 +-0.0883909 0.0874867 0.0154625 +-0.0769362 0.0914256 0.0381174 +-0.075265 0.148568 -0.0158698 +0.015355 0.119233 -0.0124997 +-0.0073165 0.13056 0.0112981 +-0.0167502 0.070002 -0.0383082 +-0.0672167 0.147775 -0.0296135 +0.00424945 0.126892 0.0299609 +0.0188897 0.120837 -0.00821554 +-0.0628446 0.0334683 -0.00588606 +0.0333858 0.103442 0.0343819 +-0.0748011 0.0878022 -0.0147955 +0.00250445 0.0519435 0.0530423 +-0.0565994 0.0548437 -0.000400453 +-0.0657591 0.0794867 -0.0178324 +-0.0893947 0.113204 0.00833335 +0.00550466 0.122397 0.0349805 +-0.0593516 0.0471429 0.038917 +-0.0691412 0.109612 0.0381472 +0.012166 0.127075 0.0284779 +0.00215147 0.0340847 -0.0194818 +-0.0357383 0.152143 0.000762654 +-0.0225608 0.0608496 0.0442445 +-0.00675345 0.0727271 -0.0364938 +-0.0504985 0.0776737 0.0437561 +0.012653 0.128571 8.59956e-05 +-0.0775017 0.148428 0.039927 +0.0194833 0.0961991 0.0471957 +-0.00134544 0.0999407 0.0490888 +-0.00745251 0.100521 0.0469096 +0.0293349 0.108769 0.0355782 +-0.0628076 0.0881622 -0.0190458 +0.0438908 0.0973298 0.0041758 +-0.0618594 0.154827 0.00385225 +0.0224603 0.0878572 0.0487762 +-0.0684419 0.0805248 0.0412962 +-0.0414824 0.0817867 0.0423837 +-0.0394972 0.0591632 0.0405173 +-0.0699138 0.0616664 0.0106715 +-0.0256486 0.050648 -0.0266189 +-0.0189668 0.125144 0.0245507 +-0.0548939 0.161294 0.00305835 +0.0593671 0.0566851 0.00917266 +-0.0619624 0.0371632 0.0192279 +-0.0458599 0.129594 0.0221735 +-0.078334 0.175787 -0.0461739 +-0.00822607 0.100046 0.0481626 +-0.0580744 0.136937 -0.00566118 +-0.0915979 0.115467 0.0229868 +0.0255167 0.123738 0.0133816 +-0.0331932 0.0348891 0.047012 +-0.076964 0.129602 -0.00711544 +-0.0598599 0.0358888 0.0454954 +0.0450831 0.0463904 0.0280485 +-0.0315243 0.0802674 0.0412906 +-0.0239631 0.11903 -0.0119726 +-0.0346068 0.0483825 -0.0183276 +-0.0825971 0.103328 -0.00360734 +-0.0887132 0.118572 0.00232339 +-0.0188128 0.082729 -0.0390748 +-0.0866936 0.0833424 0.0154842 +0.00371617 0.0348648 0.0208524 +0.0267042 0.122545 0.0181085 +-0.0738109 0.0935956 -0.0146814 +0.0287557 0.0348074 0.0132587 +-0.0344434 0.174206 -0.0015497 +-0.053794 0.086942 -0.0216962 +-0.0584166 0.126929 0.0401124 +-0.0837712 0.127162 0.0508887 +-0.0249431 0.0907384 -0.0344432 +-0.0817429 0.0748341 0.0165378 +-0.0709721 0.148372 0.0407622 +0.0453179 0.0861686 0.00320477 +-0.052904 0.159748 -0.00276649 +-0.0630387 0.15529 -0.0125891 +-0.0628558 0.170957 -0.0505963 +0.0198342 0.0408002 0.0424386 +0.0114164 0.0403794 -0.0231815 +-0.0270194 0.12568 0.0143315 +-0.0340325 0.126267 0.001455 +-0.0096483 0.171546 -0.0270746 +0.0461889 0.0792428 0.016179 +-0.0314795 0.0774889 0.0410863 +0.00441886 0.0361314 -0.0238164 +0.0140504 0.0379362 -0.0217239 +-0.0064667 0.128955 -0.000718006 +-0.00729042 0.0388645 0.0312728 +-0.0537922 0.14151 -0.001138 +-0.0843649 0.125772 0.0501053 +-0.0489003 0.033496 0.00596365 +-0.00972794 0.166651 -0.0186764 +-0.0537672 0.0812389 -0.0213883 +-0.0327797 0.0337757 0.0180041 +-0.0738907 0.107101 0.0373066 +0.0441357 0.0659575 -7.19207e-05 +-0.0929503 0.128215 0.0122521 +-0.0898716 0.133794 0.0302191 +-0.0643705 0.154697 0.0294695 +0.023375 0.0504685 -0.0225374 +-0.052801 0.0690675 0.0379843 +-0.0823518 0.0966615 0.0320686 +0.00650836 0.0813916 0.0558754 +0.0249135 0.0390596 0.0323329 +0.0422621 0.0746939 -0.00581448 +-0.0239734 0.0636045 0.0427616 +-0.0648684 0.0967433 -0.0176098 +-0.0661842 0.163921 -0.0584969 +-0.0338218 0.0886934 -0.0246941 +-0.0545067 0.102902 0.0418134 +-0.0298032 0.034287 0.0163531 +0.00993007 0.126906 -0.00476687 +-0.0376745 0.0379475 0.0444361 +-0.0658844 0.114191 0.045149 +0.0205436 0.121905 -0.00538746 +-0.0134808 0.108609 0.0426611 +-0.0484883 0.0960313 0.0444485 +-0.0326323 0.125019 -0.000941466 +-0.0254216 0.0999543 -0.0239282 +-0.0410688 0.11258 -0.017122 +-0.0434945 0.0676224 0.0409141 +0.0153651 0.0493118 -0.0259325 +0.00422707 0.0782528 -0.0345112 +0.0285181 0.0968051 -0.0184722 +-0.0597676 0.0796261 -0.0193897 +-0.0714963 0.118989 0.0533881 +-0.0566004 0.0335105 0.0169198 +-0.0880799 0.113511 0.0432934 +-0.0208348 0.0956185 -0.0294009 +-0.010501 0.0759377 0.0571751 +-0.0797391 0.110092 0.0425713 +0.0423965 0.0704871 -0.00480867 +-0.071352 0.110742 0.0439553 +-0.0617103 0.0604885 0.000571471 +-0.000492298 0.0605899 0.0560413 +-0.0819087 0.121685 0.0492514 +0.0133657 0.116504 -0.0155461 +-0.0035043 0.0589584 0.0540181 +-0.0700245 0.0833021 0.0413654 +0.0410401 0.0656705 0.029359 +-0.0623583 0.164673 -0.0485921 +0.027252 0.0549488 0.0409918 +-0.0568093 0.0883611 -0.0215879 +0.0409151 0.0390283 0.00994476 +0.0189976 0.0408013 0.0429893 +0.038497 0.0527286 0.031838 +-0.0436566 0.0592613 -0.0123074 +-0.0456035 0.0504974 -0.010193 +-0.0427107 0.0335694 -0.0203532 +-0.0107484 0.0348144 0.0431359 +0.0366972 0.106807 -0.00382741 +-0.0475 0.109814 0.0383224 +-0.0581584 0.0685383 0.037238 +-0.0888985 0.128369 0.0446279 +-0.0618211 0.164489 -0.0586698 +-0.0622151 0.166391 -0.0605094 +0.000668194 0.039196 0.03081 +-0.0494963 0.0974185 0.0440407 +-0.0327214 0.154341 -0.00788327 +0.00831584 0.0624371 -0.0312473 +-0.0441024 0.124581 0.0229348 +-0.00474585 0.0712867 -0.0359934 +-0.0211964 0.0725528 0.0524066 +0.0440002 0.0888695 -0.00280666 +0.0083541 0.0524293 -0.0297113 +0.0104364 0.0472441 0.0475563 +0.0130443 0.113867 -0.0167218 +0.035717 0.0533288 0.0320909 +-0.0439793 0.169659 0.00035763 +-0.0261771 0.0395393 0.0541115 +0.0142627 0.0751304 -0.0300927 +0.0172008 0.0849074 -0.0286671 +-0.0301348 0.156065 -0.00950629 +0.0153602 0.0672491 0.0520407 +0.038354 0.0547461 -0.00609927 +0.0326073 0.112448 0.0288842 +-0.0230436 0.0879523 0.0537722 +-0.0507107 0.0708743 -0.0151986 +0.00170937 0.0361659 0.0210822 +-0.0106905 0.18126 -0.0286694 +-0.0543257 0.121248 0.0372193 +-0.086895 0.143263 0.0379805 +-0.0300853 0.179019 -0.00589649 +-0.0624495 0.15591 0.022857 +-0.0597659 0.0448149 0.0126042 +0.00226448 0.0346925 0.0189009 +0.00270214 0.10527 -0.0214784 +-0.0843731 0.110309 0.0377873 +-0.0603328 0.153535 0.00105643 +-0.00601124 0.0348376 0.0423067 +-0.0419337 0.160883 0.00416203 +0.025639 0.0740461 0.0458389 +-0.0724467 0.0361675 0.00255211 +-0.0515329 0.0431219 -0.00982617 +-0.0668209 0.036036 0.0339126 +0.0328708 0.0740673 0.0404957 +0.0429413 0.0682748 0.0268013 +-0.0687158 0.171626 -0.0372714 +0.0231488 0.116662 0.0336476 +0.0322304 0.0505255 0.0340589 +-0.0869233 0.112018 0.0232463 +-0.078057 0.0907599 -0.0115869 +-0.0538087 0.119788 0.0361741 +0.00650273 0.121045 0.0359095 +-0.00425882 0.128035 0.0283342 +-0.0558184 0.158024 -0.000144968 +-0.0699106 0.10657 -0.0124287 +0.0101685 0.124401 -0.00806495 +-0.0774125 0.06897 0.0169693 +-0.0204069 0.09844 -0.0243451 +-0.0678094 0.180556 -0.0587896 +-0.0490427 0.0341369 0.0285626 +-0.0112286 0.0338605 -0.0218986 +0.0300773 0.0754873 0.0435133 +0.00030024 0.0612559 -0.033673 +0.000950727 0.129943 0.000110463 +-0.083524 0.154076 0.0213615 +-0.0688604 0.0819375 0.0416515 +-0.0674926 0.0889102 0.043735 +-0.000658033 0.0525337 -0.0307361 +-0.0805064 0.103384 0.0314383 +-0.0596514 0.142474 0.0348633 +-0.00849673 0.105867 0.0437425 +-0.0317522 0.0735748 -0.0285005 +0.0171692 0.0345228 -0.00186568 +-0.0229141 0.111944 -0.0185359 +-0.00375332 0.07411 -0.0361467 +-0.00849121 0.103027 0.0437022 +-0.0323725 0.16532 -0.00484492 +0.0250885 0.119458 -0.00473925 +0.00228893 0.0341509 0.0103163 +0.03989 0.0630598 0.0312004 +-0.0146968 0.175692 -0.019662 +-0.00218576 0.0355897 -0.0160761 +0.0318792 0.0686784 0.0407831 +-0.0783091 0.16249 -0.0249404 +-0.0807007 0.0752735 0.0231846 +-0.00686818 0.0385321 0.0081342 +-0.0114932 0.036278 -0.0256312 +-0.076524 0.178854 -0.050295 +-0.093475 0.1283 0.0242551 +-0.063929 0.0354009 0.0416662 +-0.064733 0.15377 0.0322824 +0.0293628 0.105677 -0.0139766 +-0.0544684 0.119419 -0.0121872 +-0.0878486 0.143233 0.0360974 +-0.0866257 0.081991 0.0115028 +0.0324736 0.0490215 0.0326282 +-0.0472578 0.121113 0.0280085 +0.0275416 0.0349624 0.00541796 +-0.0827616 0.091206 0.0312465 +-0.0627318 0.159944 -0.0435973 +0.0444941 0.0637658 0.0284543 +0.0512305 0.0723962 0.00737259 +-0.0374845 0.100078 0.0419234 +0.00446502 0.0977292 0.050995 +-0.090055 0.132436 0.0352224 +-0.0771832 0.107237 0.0346968 +0.0132863 0.0695708 -0.0313558 +-0.0833513 0.099287 0.0301656 +-0.050588 0.0599426 0.0326193 +-0.0116999 0.0599414 -0.0352829 +-0.0629554 0.156782 -0.0386059 +0.0452979 0.0875774 0.0181674 +0.0367705 0.074074 0.0373409 +-0.0378297 0.12794 0.00447467 +0.000472166 0.0388678 0.0256446 +0.00293826 0.0356401 -0.0151121 +0.0194959 0.11257 0.0373879 +0.0178674 0.103889 -0.0200126 +-0.0197782 0.075693 -0.0390468 +-0.0162539 0.171251 -0.016682 +-0.0719027 0.156807 -0.0389123 +-0.0816716 0.0734987 0.0125379 +0.00248698 0.0399628 0.0461692 +-0.0118767 0.105907 -0.0227385 +-0.0633264 0.159631 -0.0180726 +-0.0147126 0.0384481 0.00298688 +-0.0598094 0.0896854 -0.0200419 +-0.0586861 0.0603162 0.0231261 +-0.0518133 0.0531756 0.0296409 +-0.0201151 0.123178 -0.00639815 +-0.0197736 0.0998405 0.0442778 +-0.00649912 0.118331 0.038456 +-0.0868133 0.0846987 0.0154763 +-0.0052065 0.0389581 0.0316148 +-0.0886495 0.113065 0.0417436 +0.0045077 0.107168 0.0418669 +-0.0635616 0.174109 -0.0525858 +-0.0657828 0.082373 -0.0185031 +0.00281465 0.0379685 -0.0135285 +-0.0863919 0.099468 0.00241821 +0.0544797 0.0539552 0.0258897 +-0.0865727 0.08823 0.0252282 +-0.0778042 0.156927 -0.0169128 +-0.00349196 0.114194 0.0413026 +-0.0523232 0.13528 0.029621 +0.0359531 0.0673443 0.0378699 +0.0103588 0.130588 0.0191927 +0.0383356 0.10264 -0.0058258 +-0.0906686 0.139207 0.0161786 +-0.0534974 0.0876167 0.045276 +-0.0609918 0.138116 0.0346365 +-0.010493 0.114167 0.0405696 +-0.0260866 0.0349169 0.0485155 +-0.0519529 0.0531525 0.0236322 +-0.0670544 0.153567 -0.0495044 +-0.000486159 0.0689333 0.056515 +-0.034827 0.0929417 -0.0239227 +0.0157074 0.0821031 0.0526782 +-0.0185046 0.116829 0.0366774 +-0.0357116 0.0358916 0.0155029 +-0.0711005 0.148774 -0.0369587 +-0.0146296 0.185817 -0.0244743 +-0.0871678 0.11039 0.0183619 +-0.0897192 0.129664 0.0425949 +-0.0278047 0.074956 0.0433932 +-0.0408028 0.033851 -0.0276993 +-0.0260362 0.165356 -0.00798775 +-0.022832 0.0348259 0.0458328 +-0.0327846 0.0346162 0.0403814 +0.0292084 0.0350186 0.0149853 +-0.0908558 0.14471 0.0151666 +-0.0389013 0.0336802 -0.0215651 +-0.00950572 0.0590791 0.0548422 +-0.0252687 0.0931263 -0.0308668 +0.00727173 0.0667978 -0.0321541 +-0.0478216 0.109884 -0.018362 +0.00164525 0.0348132 0.00406568 +0.0377191 0.0632143 0.0350986 +-0.0468821 0.108426 -0.0186436 +0.0252001 0.0818001 -0.0245703 +0.00238035 0.127411 0.0292755 +0.0255053 0.103245 -0.0173339 +0.011492 0.0445292 0.0444785 +0.0458991 0.0414061 0.011234 +-0.0302302 0.0537755 -0.0183734 +-0.0870355 0.111737 0.0342553 +0.0298569 0.0835122 0.0432289 +0.0344154 0.0409101 0.0271225 +0.00697892 0.131225 0.0065571 +0.0443985 0.0748779 -0.000803542 +-0.0703751 0.112557 0.0480687 +0.0398576 0.101362 0.0261824 +-0.0146217 0.0450296 -0.0279689 +0.0305372 0.0592022 0.0405121 +-0.0427308 0.169809 0.000879537 +-0.00260639 0.0419888 -0.0252454 +0.000821596 0.0412233 0.0465397 +0.0447686 0.0889311 -0.000811854 +-0.00992934 0.166943 -0.0180552 +-0.0743075 0.170773 -0.046055 +-0.0564797 0.0356812 -0.0108166 +0.0302902 0.078207 0.0438447 +-0.0601407 0.0410386 0.0173224 +-0.0404944 0.0478337 -0.0126145 +-0.00989846 0.0384846 0.0238656 +-0.0338875 0.0780022 -0.0265044 +-0.0309197 0.0805646 -0.0325792 +-0.0788495 0.1177 0.0505094 +0.00204515 0.0345955 -0.0162029 +-0.0115453 0.0445033 0.0495732 +-0.048476 0.116631 0.0320328 +-0.0121876 0.113225 -0.0179296 +-0.0193167 0.0754023 0.0546877 +-0.0653246 0.0648097 0.0284194 +-0.0417336 0.0739469 -0.0182277 +0.0129121 0.0806948 0.0538726 +-0.087913 0.0900756 0.00446758 +-0.0459794 0.167363 0.00259136 +-0.00407632 0.124795 0.032822 +0.00214512 0.131665 0.0104804 +-0.0242177 0.0387671 0.0542484 +-0.0864391 0.131188 0.0477462 +0.0208043 0.12624 0.020186 +-0.0682771 0.163789 -0.0539724 +-0.0225729 0.172715 -0.0135004 +-0.0434823 0.12913 0.00531313 +-0.0465355 0.0790498 0.0431447 +0.0415243 0.0623608 0.0290336 +0.0206713 0.0868458 -0.0260413 +-0.0616015 0.0614498 -0.00273471 +-0.0698033 0.087974 -0.016854 +0.00908719 0.0358267 -0.00842564 +-0.0333922 0.068118 -0.0184774 +-0.0820819 0.150001 0.0344048 +0.0348029 0.113058 0.00110003 +-0.00477205 0.0345951 0.0445699 +-0.0740526 0.172196 -0.0480444 +-0.0192069 0.125855 0.0229991 +-0.0404977 0.0520197 0.0394004 +-0.0367886 0.156481 -0.0105439 +-0.0531367 0.0490718 0.026657 +0.015473 0.0962531 0.0481291 +-0.0492612 0.115146 -0.0157671 +0.0536465 0.0728799 0.00890065 +-0.0263571 0.0549776 0.0383278 +0.0333229 0.0997779 -0.013667 +-0.0551968 0.138069 -0.00309725 +-0.0563111 0.122698 0.0396267 +-0.02088 0.107273 -0.0222055 +0.000924532 0.100829 -0.0227814 +-0.0907853 0.117276 0.00630342 +-0.0134985 0.11551 0.0389419 +-0.0921826 0.114725 0.0193089 +-0.0218136 0.116051 -0.0148581 +-0.0915139 0.140599 0.0171878 +-0.0723659 0.100858 0.0389128 +-0.0227439 0.0669905 -0.0360641 +0.0133914 0.0448806 -0.0247967 +-0.0334245 0.0346344 0.0419763 +-0.083931 0.103265 0.0277985 +-0.0172469 0.116672 -0.0155678 +0.0141307 0.108667 -0.0183815 +-0.0676215 0.0688155 -0.00772966 +-0.049646 0.138599 0.0173958 +-0.0836562 0.0966099 0.0305537 +-0.0662913 0.165749 -0.0234747 +0.0434836 0.0734019 -0.00279222 +-0.0672802 0.0405919 -0.00423161 +-0.0468922 0.0334761 -0.010008 +-0.00688399 0.107372 -0.022762 +-0.0471129 0.13404 0.0104021 +-0.0613177 0.0470312 0.00669678 +-0.0857102 0.0912822 0.000468321 +-0.0564836 0.0589584 -0.00242578 +-0.0544716 0.0607811 0.0269495 +0.0392359 0.0685928 0.0338195 +-0.0907738 0.125596 0.0437739 +-0.0123469 0.0383491 0.0216787 +-0.00750765 0.123161 -0.01054 +0.0441233 0.0959295 0.00318315 +0.0262791 0.0675449 -0.0231801 +-0.0432671 0.0465873 -0.0113888 +0.00633058 0.0567988 -0.0308016 +-0.0135852 0.123715 -0.00700086 +-0.00140945 0.12836 0.0278943 +-0.0283882 0.0380697 -0.0179434 +0.0478387 0.0734572 0.0126134 +0.0038745 0.0367677 -0.0140867 +-0.05057 0.0335281 0.00739754 +0.036728 0.111857 0.010401 +-0.00844614 0.128164 -0.00189615 +-0.0247501 0.0578943 0.0408638 +-0.0467618 0.0657183 0.0385512 +0.038544 0.0726461 0.034619 +-0.00748755 0.111393 0.0423782 +-0.0658988 0.116581 -0.00961273 +-0.0415297 0.118854 -0.0137293 +-0.062219 0.164671 -0.0505894 +-0.00870995 0.128748 0.0252759 +-0.0315128 0.115295 0.0334421 +0.0503991 0.0466746 0.0233055 +-0.0753594 0.113961 -0.00568407 +-0.0866603 0.10494 0.00737931 +-0.0457163 0.0345386 0.0341935 +-0.0466235 0.0548092 -0.0105711 +-0.0516722 0.0693248 0.037985 +-0.0826957 0.0898386 0.0312187 +-0.0154881 0.0758696 0.0561745 +-0.0518084 0.0913012 -0.0220555 +-0.0751346 0.145812 -0.00886348 +-0.0732189 0.155097 0.0278276 +-0.0127272 0.0348945 -0.0256797 +-0.0698308 0.071946 0.0353261 +-0.0657288 0.163321 -0.0189522 +-0.0464914 0.08757 0.0446532 +0.0296359 0.112746 0.0324848 +0.0275411 0.044881 0.0360262 +-0.0187772 0.186086 -0.0166294 +-0.0884282 0.0874635 0.00747939 +0.0325508 0.115423 -0.000329209 +-0.0410423 0.0336551 0.000178151 +-0.0638018 0.0632948 0.0265284 +-0.0224569 0.0524128 0.0435307 +0.057327 0.0700157 0.00587175 +0.0345611 0.0740948 0.0394254 +-0.0409173 0.0351021 0.0417247 +-0.0742127 0.154103 -0.0229066 +-0.0824094 0.151775 0.0307901 +-0.0803828 0.11899 0.049226 +-0.010458 0.0953808 -0.0330949 +-0.0630414 0.149018 -0.0195802 +-0.0293211 0.123712 0.0208659 +-0.0231795 0.0622145 0.0434152 +-0.0287301 0.172704 -0.00834509 +0.00364827 0.128043 -0.00393793 +-0.0642706 0.166732 -0.060237 +-0.0108397 0.175678 -0.0290324 +0.0244048 0.112688 0.0354614 +-0.047561 0.0361661 -0.0123414 +-0.0534987 0.0427392 0.045857 +-0.0231257 0.165273 -0.0171671 +0.0388181 0.104067 -0.00210374 +-0.0356652 0.156121 -0.0104266 +-0.072524 0.106883 0.0374001 +-0.0331471 0.172636 -0.0149853 +0.040265 0.0391745 0.017119 +-0.0342456 0.0708723 -0.0195447 +-0.0687416 0.11428 0.0497375 +-0.0559525 0.0473442 0.0115659 +-0.0244817 0.107102 0.0411704 +-0.00571075 0.0627939 -0.0354611 +0.00805559 0.124767 0.0327601 +-0.0144892 0.0800879 0.0568709 +-0.0444848 0.0775765 0.0423436 +-0.063261 0.129725 0.0418859 +0.0349031 0.111324 -0.00180439 +0.00654043 0.0954774 -0.0291051 +-0.0290961 0.0410008 0.0527549 +-0.0234218 0.0738847 0.0503501 +-0.0567453 0.0342237 0.02862 +0.0376516 0.0425419 0.0281451 +0.0336732 0.115326 0.0207292 +-0.0174938 0.122238 0.0311921 +-0.073145 0.152886 0.0338966 +0.0392908 0.0660103 -0.00977956 +-0.0671096 0.125666 0.0504247 +-0.0815589 0.10988 0.0387619 +-0.00472043 0.0655745 -0.0349603 +-0.0584923 0.0818911 0.043717 +0.0395145 0.0415874 0.025748 +-0.0134628 0.0989564 0.047529 +-0.086226 0.143316 0.0387173 +-0.0675131 0.145595 0.0418048 +-0.0142233 0.174199 -0.0261217 +-0.0564238 0.0718073 0.0399857 +-0.0748487 0.0664559 0.00653551 +0.0254329 0.0835701 0.0474102 +-0.0735012 0.145587 0.0437725 +-0.0684894 0.104161 0.0391613 +0.046334 0.0533506 -0.00578803 +0.0111342 0.034487 -0.019828 +-0.0362745 0.033679 0.00474125 +-0.0580289 0.129633 -0.0066561 +-0.0674348 0.171149 -0.0382253 +0.0172278 0.0353072 0.0394845 +0.0290523 0.120756 0.00899975 +-0.0788357 0.148682 -0.00186858 +-0.0257486 0.0365571 0.0540093 +-0.076603 0.120411 0.0526033 +-0.0107827 0.0784509 -0.0379132 +-0.0283013 0.0648191 -0.0294785 +-0.0318386 0.0929851 -0.0242124 +-0.0504991 0.156412 0.0101915 +0.0435836 0.0722927 0.0259867 +0.0187342 0.112585 -0.0153321 +-0.0434831 0.0762058 0.0427502 +-0.00415334 0.0367895 0.0481682 +-0.0469304 0.116649 -0.0154073 +-0.0434764 0.0335212 0.0034233 +-0.0527322 0.0723715 -0.0160877 +-0.0593593 0.0651443 0.0328932 +-0.05784 0.0926528 -0.0211082 +-0.07134 0.156839 -0.0007386 +-0.000856246 0.103081 -0.0226647 +-0.000582144 0.0347482 -0.0236897 +-0.0384944 0.0464446 0.0402202 +0.0567142 0.0522491 0.00518691 +-0.0616825 0.0346164 0.0411183 +0.00851655 0.0758606 0.0561295 +0.0196258 0.127091 0.0083394 +-0.0719446 0.159605 -0.0399328 +-0.0356475 0.0379034 -0.0136529 +0.0172444 0.125917 0.0260258 +0.0094903 0.116849 0.0377607 +0.0232634 0.124781 0.0210949 +-0.0349607 0.125018 0.0217662 +0.0185443 0.12732 0.00510228 +0.0118903 0.0349087 0.0279111 +-0.00450764 0.0842735 0.0572857 +-0.0148777 0.0364156 0.0513074 +-0.0861402 0.0859086 0.000475654 +-0.0472303 0.164057 -0.00679428 +0.010042 0.0970288 -0.0247384 +0.0134328 0.0846923 0.0528905 +0.0456558 0.0449086 0.0258493 +-0.00349992 0.0746709 0.0587938 +-0.0719223 0.112846 0.049279 +-0.0117304 0.0670858 -0.0365895 +-0.0107336 0.0670714 -0.0363227 +0.0281295 0.110111 0.0355841 +0.00524969 0.0395071 0.0332712 +-0.030417 0.0360576 0.0517185 +-0.0191865 0.172705 -0.0222871 +0.032634 0.0954843 -0.0150589 +-0.0901468 0.129651 0.0415795 +0.015143 0.0346779 0.0251566 +-0.0926446 0.122835 0.02928 +-0.0735699 0.131215 0.0516643 +-0.0342826 0.126777 0.01609 +0.00752119 0.0813632 0.0555605 +-0.0325031 0.116645 0.0321616 +0.0237641 0.0349876 0.0120857 +-0.0592101 0.142401 0.0336275 +0.0449966 0.0931749 0.00418165 +0.0373285 0.0874946 0.0364747 +0.0175277 0.0348888 -0.0135142 +0.0451983 0.0889806 0.0171667 +0.0123957 0.0434077 -0.0245497 +-0.0759299 0.126701 -0.00794305 +-0.0895421 0.090213 0.0124508 +0.0392717 0.0938049 -0.00924672 +-0.087269 0.112677 0.0244432 +0.0369017 0.0770479 -0.0128074 +-0.019615 0.127443 0.00679651 +-0.058632 0.131139 0.0380532 +-0.0759599 0.0675387 0.00855626 +-0.0867924 0.139107 0.00519652 +-0.051888 0.0528335 0.0130005 +-0.0604943 0.108372 0.0386396 +-0.0620497 0.155563 0.0244621 +-0.0414999 0.0690877 0.0417125 +-0.000194321 0.121911 -0.011267 +0.0260147 0.0563895 0.0427437 +-0.00627779 0.0395112 0.048561 +0.0073902 0.0433817 -0.0245369 +0.00650458 0.105723 0.0419107 +-0.0890324 0.144705 0.01118 +0.0241216 0.0968854 0.045587 +-0.0284948 0.111359 -0.0178892 +-0.0842319 0.104575 0.0266516 +-0.0575865 0.0586919 0.0194779 +-0.0281815 0.125725 0.0109634 +-0.0638193 0.158306 -0.0465978 +-0.0355455 0.11407 -0.0167228 +-0.0683421 0.111385 0.0423299 +-0.0144529 0.178665 -0.0210547 +-0.00977952 0.0372711 0.0498001 +-0.0625714 0.164724 -0.0395894 +-0.088699 0.0915828 0.0224195 +-0.0594754 0.144099 -0.00268098 +-0.0925679 0.116061 0.0213084 +-0.0317212 0.0350332 0.0489115 +-0.0106525 0.165176 -0.016643 +0.00734712 0.12316 -0.0106668 +-0.0554936 0.104327 0.041387 +0.00250176 0.0620246 0.0566613 +-0.00947595 0.130265 0.0133884 +0.0276842 0.0768145 0.0453329 +0.00629218 0.0639808 -0.0323017 +0.00798329 0.130466 0.00265255 +0.0573764 0.0621793 0.0248727 +-0.0628961 0.158419 -0.0175871 +-0.0639761 0.129691 -0.00851425 +-0.0630898 0.161515 -0.0224551 +-0.0838815 0.111187 0.0425305 +0.0464938 0.0778639 0.0121785 +-0.0265128 0.116639 0.0325108 +-0.0545075 0.047347 0.012948 +-0.0677458 0.149084 -0.0355035 +-0.0687437 0.173038 -0.0415702 +-0.0258142 0.0389536 0.0363636 +0.0354622 0.0808406 0.0390375 +-0.028407 0.156859 -0.0100656 +-0.0728523 0.100773 -0.0133449 +-0.000973441 0.0353569 0.0464761 +0.0217031 0.104101 -0.0182402 +-0.0900893 0.135135 0.0242145 +-0.0209098 0.0382599 0.00734769 +-0.0384975 0.0676842 0.0417259 +0.0505086 0.0461176 0.0032623 +-0.0324927 0.0932098 0.0444316 +-0.029469 0.17882 -0.00554327 +-0.0770271 0.0743283 0.0300122 +0.0313581 0.116535 0.0255569 +-0.0772285 0.173502 -0.0405421 +0.0114915 0.130592 0.00962923 +-0.0739058 0.125263 -0.00826143 +-0.0709356 0.0780686 0.0386829 +-0.0450603 0.156487 0.00667449 +-0.00258285 0.0361873 -0.0247048 +-0.00135222 0.101336 0.0444015 +-0.0894746 0.139279 0.0281819 +-0.00967152 0.0968708 -0.0306358 +-0.0704928 0.117562 0.0527864 +-0.0678494 0.155094 0.00351036 +-0.0752747 0.175704 -0.0425921 +-0.032145 0.0863362 -0.0265533 +-0.0345086 0.0775176 0.0416541 +0.0409071 0.0711839 0.0309718 +0.0182107 0.084868 -0.0280483 +0.037986 0.0861315 0.0356473 +-0.0158582 0.107196 -0.0215252 +-0.0536497 0.0382495 -0.0113033 +0.0400088 0.107038 0.00721094 +-0.0111671 0.0867859 -0.0382994 +-0.0758579 0.0963896 -0.0129621 +0.00275941 0.0343655 0.0174794 +-0.0528912 0.109829 -0.018387 +0.0352142 0.037348 0.0177424 +-0.0770086 0.090082 0.0382275 +-0.0537852 0.0344427 0.037794 +-0.0317722 0.0335835 -0.0256749 +-0.0533077 0.12062 -0.0114531 +-0.0670377 0.155239 -0.0519345 +0.0248201 0.0343822 0.00913252 +-0.077345 0.0838842 -0.0115833 +0.0143045 0.0638067 -0.0299257 +-0.00129201 0.123843 -0.0093277 +0.0380905 0.0941294 0.0341306 +-0.0932985 0.125478 0.0122618 +-0.034118 0.163722 -0.0147399 +0.0298704 0.114081 0.0310466 +0.0255132 0.110081 0.0370706 +-0.0476672 0.0405803 -0.0117113 +-0.0472716 0.130968 0.0245047 +-0.0619845 0.128209 -0.0080954 +-0.0644855 0.0917771 0.0443552 +0.00846054 0.0341727 0.000449307 +0.000942621 0.0347668 0.0167534 +-0.0160225 0.0958165 -0.0315688 +-0.0534556 0.0353304 0.0456783 +0.0142349 0.129723 0.0106274 +-0.0726014 0.0365856 0.00586956 +0.033081 0.038417 0.0236373 +-0.0678588 0.128454 0.0493479 +0.0276968 0.0797349 -0.0226793 +0.0317217 0.0639399 -0.0186866 +-0.00482566 0.0896201 -0.0359284 +-0.0704978 0.124601 0.053003 +-0.00149487 0.115594 0.0408235 +-0.0360812 0.0358497 0.0136623 +-0.00514848 0.0385788 0.00662082 +-0.0791696 0.110508 0.0441428 +-0.0215028 0.0448835 0.0530162 +0.0173223 0.0699836 0.0514025 +0.0379734 0.0672941 0.0355158 +-0.0858805 0.0926571 0.00145452 +0.00396412 0.0977772 0.0510597 +-0.0656399 0.11715 0.0490043 +-0.0771179 0.165222 -0.035974 +-0.0198829 0.0383003 0.00206982 +-0.0187849 0.159551 -0.0109781 +-0.0655235 0.0347285 0.0315692 +0.0298088 0.0848631 0.0431899 +-0.0202144 0.186446 -0.0187314 +-0.0737921 0.165213 -0.0399888 +-0.0287531 0.0767493 -0.0350292 +-0.0108764 0.178532 -0.0297831 +0.00248459 0.114158 0.0410016 +0.0523216 0.0588453 -0.00357691 +-0.0424144 0.147803 0.00244515 +-0.0387777 0.0827042 -0.0213153 +-0.0338762 0.105703 -0.0205658 +-0.087924 0.1365 0.0420055 +-0.0747046 0.0837005 -0.0145969 +-0.0657521 0.033742 -0.00672308 +-0.045381 0.0381676 -0.0212668 +-0.0868004 0.0846768 0.00848321 +0.0294149 0.118962 0.0248216 +-0.034174 0.107559 -0.0198979 +0.0280502 0.0740858 0.0440821 +-0.0776167 0.0914005 0.037394 +0.0235133 0.0407023 0.0389233 +-0.0568656 0.102623 -0.018982 +-0.0678684 0.063022 0.000880975 +0.0360361 0.100737 0.0329764 +-0.0922724 0.125575 0.0332589 +-0.0929242 0.120168 0.0332909 +-0.018498 0.108568 0.0416031 +0.0174435 0.128281 0.0160914 +-0.0242219 0.178615 -0.0196227 +-0.0704096 0.163806 -0.0479588 +-0.0810819 0.0814326 -0.00557353 +-0.0595808 0.0380953 -0.00917151 +-0.00023307 0.0988811 0.0510016 +0.00703854 0.0344034 -0.0150394 +-0.092972 0.125468 0.0112596 +-0.00348845 0.115565 0.0406522 +-0.000499736 0.11143 0.0424297 +-0.00349598 0.0562185 0.05401 +0.0274875 0.0380349 0.0264602 +-0.0191507 0.168261 -0.0198644 +-0.0708777 0.131245 0.0502751 +-0.0591241 0.1154 0.0371963 +0.015252 0.122005 -0.00948865 +-0.0238533 0.0958019 -0.0255967 +-0.0225065 0.111294 0.03935 +0.0394335 0.0834241 0.0342316 +-0.0599597 0.121237 0.0413621 +-0.0151227 0.160977 -0.0122661 +-0.0856126 0.0792275 0.0145081 +-0.0304111 0.0336116 -0.02356 +-0.0300276 0.0875944 -0.030572 +-0.0387164 0.0695709 -0.0161311 +-0.0658849 0.153363 -0.0443952 +-0.0108819 0.168382 -0.0176467 +0.0450682 0.090383 0.0171641 +-0.0624967 0.149081 -0.013576 +-0.0222042 0.178612 -0.0212581 +0.0294982 0.120461 0.0105965 +-0.0414977 0.115265 0.0337662 +-0.0499421 0.135837 0.0234945 +-0.0843142 0.152356 0.00793113 +-0.0410616 0.156231 -0.0095971 +-0.0238697 0.104438 -0.0232028 +-0.0067213 0.065597 -0.0353344 +-0.0108037 0.0827117 -0.0384206 +0.0138699 0.049008 0.0461763 +0.016266 0.0750624 -0.0291952 +-0.0813824 0.099165 -0.00657823 +-0.0355882 0.126454 -0.000576513 +-0.0627783 0.0343233 0.0272634 +-0.0864194 0.133874 0.0462429 +-0.0424946 0.0972875 0.0422451 +-0.00875136 0.116762 -0.015718 +-0.00610573 0.035829 0.0485597 +-0.0634859 0.146784 0.0381458 +0.00949393 0.109876 0.0399119 +-0.0286135 0.0817842 -0.0355888 +-0.0785092 0.126003 0.0529555 +-0.0564526 0.0602802 -0.00348733 +-0.0632263 0.153648 -0.0346156 +-0.0212315 0.0839098 0.0563274 +-0.0185478 0.0382321 0.00966598 +-0.0629734 0.126755 -0.00855487 +-0.0607657 0.139716 -0.00595313 +-0.0192289 0.178619 -0.0235673 +-0.0154933 0.0730227 0.0553537 +0.0208153 0.0564412 0.0475406 +-0.0390833 0.0486663 -0.0122287 +-0.065493 0.153273 0.0335324 +0.0608914 0.0637395 0.0141606 +-0.0153829 0.18014 -0.0206255 +-0.0822314 0.0842513 -0.00555381 +-0.0678037 0.0880304 -0.0174902 +0.0361089 0.0577094 0.0344737 +-0.0464121 0.035458 -0.0187253 +-0.0666201 0.0338653 0.00919115 +-0.0674808 0.0688292 0.0332504 +-0.0659293 0.156005 0.0129201 +-0.0294246 0.0861745 0.0444819 +-0.0581309 0.155502 0.017154 +-0.0726537 0.15621 0.0148854 +-0.0168438 0.180138 -0.0192059 +-0.0656741 0.0356447 0.0159226 +0.0163545 0.0507599 -0.025927 +-0.0293383 0.123554 -0.00265044 +0.00679991 0.131589 0.0107583 +-0.0398245 0.0942915 -0.0229995 +-0.0945717 0.122812 0.0182725 +0.00440363 0.0390362 -0.0241943 +-0.0798195 0.105901 -0.00558882 +-0.0117856 0.0813065 -0.0386038 +0.00749342 0.0372096 -0.0118978 +-0.0744971 0.176396 -0.0436946 +-0.00968478 0.0584187 -0.0340646 +0.0312312 0.117425 0.00123717 +0.0184875 0.0976002 0.0470854 +-0.0716235 0.0693585 0.0301698 +0.039816 0.0393083 0.00327619 +-0.0835287 0.11032 0.027366 +-0.0245014 0.043543 0.0534366 +0.0370893 0.106835 -0.00283087 +-0.0567623 0.154944 0.0190948 +-0.0275761 0.125766 0.0126577 +-0.00827698 0.0408222 0.049207 +0.0553826 0.0699889 0.0228528 +0.012476 0.0976634 0.0485624 +0.0597169 0.0580863 0.0181825 +-0.0261346 0.168251 -0.00989215 +-0.0319337 0.0680008 -0.0224492 +-0.0367004 0.0680804 -0.0157124 +-0.0192371 0.0959207 0.0497533 +-0.0482812 0.115062 -0.0157267 +-0.0625405 0.132491 0.039434 +-0.0464975 0.163768 0.00545168 +-0.0809296 0.0885877 0.0337432 +-0.0341216 0.0395911 0.0493113 +0.0322123 0.0856789 -0.0192748 +-0.0822934 0.0775365 0.000511811 +0.00709964 0.0342068 0.00386204 +-0.086438 0.0832915 0.00949498 +-0.0244616 0.0474336 0.050725 +0.00565547 0.0365592 0.0251573 +-0.0274618 0.045988 0.0503593 +0.010522 0.119127 0.036469 +-0.0736141 0.151246 -0.0348888 +-0.024687 0.0892375 0.0511394 +0.00296667 0.0390863 0.0277676 +-0.0494919 0.154959 0.0103413 +-0.058864 0.139321 -0.00549203 +-0.0327877 0.082138 -0.0285334 +-0.0423065 0.150496 -0.00548521 +-0.0631749 0.149 -0.0205832 +-0.0218319 0.0363367 -0.0187811 +-0.0723757 0.0638786 0.0154336 +-0.0358563 0.126885 0.000788129 +0.0192111 0.080597 -0.0276192 +-0.0620809 0.0336347 -0.00771095 +-0.0313625 0.0510794 -0.0143586 +-0.063822 0.115596 0.0429106 +-0.0645614 0.138204 0.0400205 +-0.0824235 0.124446 0.0510342 +0.0555936 0.0567472 0.0257684 +-0.0293723 0.0422984 0.0515712 +0.0526995 0.0702438 0.0035897 +-0.0647148 0.06349 0.0261636 +0.00450679 0.0702611 0.0557926 +-0.0421206 0.171253 -0.0079388 +-0.00823225 0.127328 0.0283641 +0.0085198 0.0716538 0.0557746 +-0.0603515 0.116839 0.0389782 +-0.0758447 0.151365 -0.0158827 +-0.0913489 0.117296 0.00730629 +-0.0787438 0.101744 -0.00857364 +-0.0758718 0.109158 -0.00765228 +0.0141976 0.0850086 -0.0301852 +0.0110282 0.0968851 -0.0245853 +-0.0821235 0.0802564 0.0295192 +-0.0500787 0.154631 -0.00525635 +-0.0278864 0.105837 -0.0222471 +-0.0355149 0.0804148 0.0426568 +0.0156112 0.0519525 0.0469795 +-0.0758417 0.114903 -0.00554375 +-0.00130995 0.124776 -0.00834251 +-0.0285122 0.180211 -0.00692909 +0.0124807 0.0949598 0.0504131 +-0.0679136 0.113718 -0.0102762 +-0.0871543 0.105024 0.0183639 +0.0375648 0.0926236 -0.0120119 +-0.0297787 0.125132 0.0177406 +-0.0253546 0.121816 0.0267508 +0.0463872 0.0806547 0.00917972 +-0.0386145 0.0492284 -0.011639 +-0.0604969 0.0918487 0.0452694 +-0.0754744 0.151328 -0.022882 +0.0184783 0.101734 0.0458501 +-0.0250671 0.0385158 0.031526 +-0.0384759 0.091717 0.0434324 +-0.0394992 0.0916803 0.0429883 +-0.0668335 0.143964 0.0420823 +-0.0653424 0.0629827 0.0247148 +-0.0644392 0.112372 0.0382632 +0.0242087 0.039076 0.0343007 +-0.0535427 0.0402957 -0.0106063 +-0.082326 0.0748249 0.00451639 +-0.0544972 0.0959632 0.0436086 +-0.020823 0.0868434 -0.0377816 +-0.0636947 0.167813 -0.0415938 +-0.0448731 0.128505 0.000263047 +-0.0608825 0.0996865 -0.0185327 +0.0079329 0.0630739 0.055296 +0.00434495 0.0973121 -0.027058 +-0.091323 0.113292 0.0153266 +-0.0074977 0.0801462 0.0578122 +-0.0899881 0.118599 0.00429898 +-0.072593 0.155911 0.00171291 +0.00944326 0.128939 -0.000930002 +-0.0669203 0.110822 0.0381745 +-0.0378406 0.0957387 -0.0228102 +-0.00994641 0.0339021 -0.0251924 +-0.0261195 0.0706905 0.0432458 +0.0285346 0.121033 0.017364 +-0.0702811 0.17421 -0.0421289 +-0.00949024 0.104446 0.0436658 +-0.0877186 0.105023 0.0153645 +0.0487537 0.043125 0.0102298 +-0.0709615 0.148056 -0.0324394 +-0.0785455 0.146115 0.0422588 +-0.0777749 0.150053 -0.00387978 +-0.0747481 0.158885 -0.00783629 +0.022966 0.0347513 0.0194226 +-0.000497806 0.0842866 0.0575088 +0.0329127 0.116986 0.00902312 +0.0303386 0.119339 0.00661655 +0.0335365 0.0483507 0.0312493 +-0.0506321 0.0530807 0.0328365 +-0.0283907 0.123379 0.0211752 +0.043167 0.0831963 -0.0047762 +-0.00976599 0.121876 -0.011136 +-0.0836817 0.0786288 0.0214472 +-0.0584699 0.0344613 0.0385122 +-0.031399 0.116965 -0.0137545 +-0.0679334 0.145349 0.0422649 +0.0355447 0.11347 0.012835 +-0.0343438 0.0384811 -0.00836679 +-0.0303159 0.0678299 -0.0274662 +0.030827 0.0835413 0.0428747 +-0.0367713 0.0871639 -0.0235593 +-0.0249824 0.117062 -0.0139085 +-0.0633873 0.169402 -0.0465883 +-0.0567938 0.0498747 0.00808849 +-0.0719281 0.148635 -0.0350398 +-0.0764024 0.150045 -0.00692327 +-0.085242 0.115675 0.000251725 +0.0352163 0.0367258 0.0146563 +-0.0476332 0.0345872 0.0389835 +-0.0306482 0.0819602 -0.032565 +-0.0258283 0.172717 -0.011167 +-0.0745076 0.115686 0.0517763 +-0.0625234 0.0413191 -0.00677899 +-0.02745 0.110307 -0.0187882 +-0.0444951 0.104328 0.0415155 +-0.0774643 0.155549 -0.0139037 +0.0154943 0.105779 0.0433144 +-0.00688511 0.0982482 0.0516445 +-0.0476227 0.122378 -0.0113753 +-0.0830725 0.139367 0.045586 +-0.0431901 0.039319 -0.0232745 +0.00551778 0.0828244 0.0566316 +-0.0364708 0.152123 0.0014574 +-0.00749897 0.0815283 0.0577578 +-0.0165021 0.118207 0.0361456 +0.013481 0.0358562 0.0436245 +0.0102178 0.0836927 -0.0316174 +0.0514697 0.0462224 0.00523719 +0.0399822 0.0910991 -0.010396 +-0.0510223 0.0339346 0.00874224 +-0.0327803 0.0793117 -0.0285199 +0.0549936 0.0732019 0.0123756 +0.0461994 0.0750316 0.00518987 +0.0371924 0.0391306 0.0220088 +-0.0737191 0.152664 -0.0318934 +-0.0548531 0.149577 0.0276913 +-0.00305215 0.125834 0.0316944 +-0.021742 0.0389771 0.0371835 +0.0252695 0.0532659 -0.021679 +-0.0633235 0.0388939 0.025715 +-0.053898 0.105542 -0.0189379 +-0.0718855 0.122345 -0.00846405 +-0.0334848 0.0561021 0.0379001 +-0.0635384 0.061476 -0.00191873 +0.0137785 0.0346695 0.0230735 +0.0204936 0.1267 0.00866396 +-0.0258672 0.156547 -0.00846874 +-0.089402 0.0996815 0.0144017 +-0.010288 0.172711 -0.0218803 +0.00772266 0.115023 0.0394097 +-0.0363729 0.176071 -0.00683571 +-0.0525546 0.0444744 -0.00849373 +-0.0577063 0.155408 0.0158579 +-0.0512663 0.12652 -0.00563382 +-0.0277699 0.0661915 -0.0304661 +-0.0394907 0.0422995 0.0416287 +-0.0592646 0.0346371 0.0433189 +-0.0917594 0.117442 0.030311 +0.0188028 0.0349604 -0.00569856 +-0.0184644 0.0528818 0.0482087 +-0.0649365 0.1467 -0.0209465 +-0.0397769 0.152293 -0.00702124 +0.056742 0.0696177 0.0218717 +0.0435205 0.0637429 0.0281056 +0.0514429 0.0626408 -0.00275857 +-0.0668197 0.100942 -0.0159632 +-0.078886 0.0812827 -0.00855752 +0.0483563 0.0710513 0.00477309 +-0.0415729 0.151549 -0.00635576 +-0.0122139 0.169818 -0.0178463 +-0.0454996 0.163749 0.00555272 +-0.0779251 0.168693 -0.0322923 +-0.0455017 0.0973341 0.0429686 +-0.0932761 0.122751 0.0112823 +-0.00193792 0.0388572 0.00152241 +0.0379602 0.108292 0.00117706 +0.0447742 0.0777119 -0.00080388 +-0.0365645 0.0341557 0.0276322 +-0.077566 0.155252 0.0102497 +-0.00781043 0.0346187 0.0439246 +0.0218954 0.061892 0.0473866 +0.0229726 0.108506 -0.0149598 +0.0350891 0.111006 -0.00183676 +0.00866181 0.128565 0.0271896 +0.00435977 0.0481043 -0.0288152 +-0.00551112 0.0390255 -0.00865823 +-0.0205328 0.113457 -0.0181494 +-0.0851368 0.0832799 0.0224738 +0.00348766 0.115539 0.0402625 +-0.0174898 0.105786 0.0424611 +-0.087451 0.133828 0.0444349 +0.00492538 0.111581 -0.020193 +0.0318279 0.0713659 0.0407221 +-0.0121811 0.0984293 0.0498089 +-0.0747959 0.149331 0.0394056 +-0.0571923 0.0344404 0.0353306 +0.0154304 0.0417921 -0.0229429 +-0.0481114 0.159106 -0.00699154 +-0.0285 0.0960446 0.0448096 +0.0354946 0.0642547 -0.0137843 +-0.0204882 0.0388257 0.0339872 +0.0353716 0.0741014 0.0388421 +-0.0157653 0.161968 -0.0148041 +0.00551566 0.0799926 0.0558154 +0.0181043 0.128017 0.0106305 +-0.0644854 0.0986987 0.0423063 +-0.0415014 0.0492193 0.0396812 +-0.0900528 0.132428 0.0342227 +-0.0126494 0.0496668 -0.0310907 +-0.0321289 0.0337822 0.0109163 +-0.0625403 0.149101 -0.00657536 +-0.0124899 0.104431 0.0434394 +-0.0728072 0.15012 0.0385587 +-0.0275374 0.156717 -0.00957418 +-0.0627683 0.04307 0.0276693 +0.00651507 0.0344231 0.0163793 +-0.0631947 0.163133 -0.0265887 +-0.0264832 0.105687 0.0411729 +0.0072963 0.0341516 -0.018557 +-0.018657 0.109944 -0.0204332 +-0.0843505 0.0842533 0.0274024 +-0.0531944 0.139931 -0.000456373 +-0.0741436 0.100877 0.037779 +-0.0658548 0.0952898 -0.0176963 +-0.0504071 0.163936 0.00393123 +-0.00384396 0.0384339 0.019723 +-0.0889438 0.137894 0.0261932 +-0.017832 0.0346972 0.047013 +0.0156145 0.128768 0.00543431 +-0.0517309 0.0489114 0.0216412 +-0.0358204 0.046598 -0.0238768 +-0.059344 0.139552 0.0335155 +0.0510761 0.0567889 0.0297952 +-0.0787812 0.166656 -0.0319662 +0.030718 0.111397 0.0323042 +0.0535299 0.049514 0.0226619 +-0.0446433 0.0346533 0.0343218 +-0.0169852 0.186593 -0.0230311 +-0.0743965 0.149892 -0.0310959 +-0.0373231 0.0354917 0.0439186 +-0.000691629 0.100255 0.0478272 +-0.0818959 0.141783 0.000186922 +-0.0304023 0.0382885 -0.00186367 +-0.00349386 0.0925503 0.0560196 +-0.088924 0.151541 0.0211005 +-0.0824519 0.0856305 -0.00554258 +0.0469336 0.0511672 0.030779 +-0.0852791 0.132127 -0.000702015 +-0.0891862 0.112803 0.0347042 +0.0229651 0.0928857 0.047441 +-0.0442655 0.127665 -0.00291939 +-0.0917744 0.132406 0.0242297 +0.00738689 0.0359942 0.0260187 +0.0456627 0.0890114 0.0111648 +-0.0860966 0.11232 0.0268196 +-0.0556879 0.117086 -0.0137514 +0.0093902 0.0739182 0.0557875 +-0.0794167 0.137236 0.0495785 +-0.0893497 0.130881 0.0042394 +-0.0656682 0.0337431 0.00949839 +-0.0263524 0.059005 -0.029433 +0.0104643 0.0346107 -0.00703394 +-0.0631576 0.119928 0.0457283 +0.0423355 0.0972587 0.0241615 +0.0603447 0.0595379 0.00916361 +0.0495034 0.0488243 -0.00166079 +-0.0740753 0.155198 0.0041876 +-0.0656926 0.125639 0.0489587 +-0.00648958 0.0503786 0.0513549 +0.0381951 0.102007 0.0289909 +-0.0592102 0.0595951 0.00211544 +0.0285202 0.0622348 -0.0207982 +-0.0876555 0.144675 0.00917716 +0.0519851 0.0567984 0.0293579 +-0.0300707 0.124739 0.00148409 +-0.0725865 0.0874189 0.0409577 +-0.00281209 0.0882041 -0.0358187 +-0.0637344 0.0736795 -0.0161836 +0.0142616 0.0794232 0.0540604 +0.0458875 0.0787805 0.0205292 +0.0245051 0.0849065 0.0478503 +-0.0617895 0.083881 -0.0194032 +0.0333636 0.0364347 0.0163708 +0.0165102 0.111269 0.0389693 +0.033894 0.111352 0.0280456 +-0.00616098 0.0344967 -0.0177303 +-0.0662325 0.14347 -0.0127636 +-0.0199914 0.0962147 -0.0280142 +-0.0259005 0.126064 0.0117956 +-0.0929641 0.121523 0.0342815 +0.00656148 0.101677 0.0461619 +-0.0600389 0.0627348 0.027804 +0.0335486 0.0889696 0.0416029 +-0.0688127 0.0908552 -0.0166124 +-0.0856608 0.0854539 0.0244177 +-0.0759458 0.0974591 -0.0125133 +-0.0667171 0.171901 -0.0422833 +-0.0191016 0.0431933 0.0528315 +-0.0589426 0.0357407 0.0458703 +0.013481 0.127543 -0.00145794 +-0.0239185 0.0383353 -0.00428996 +-0.0627701 0.0824471 -0.0192325 +-0.0614696 0.136692 0.0357094 +-0.0810116 0.0734375 0.0175497 +-0.0759173 0.12523 -0.00781198 +-0.00824401 0.0384507 0.0170014 +-0.0641628 0.157463 -0.0125984 +-0.0178575 0.122517 -0.00769635 +-0.0596856 0.0659756 -0.00895149 +-0.0807952 0.106052 0.0302403 +0.0156574 0.0925729 -0.0260099 +-0.081817 0.0734713 0.00853447 +-0.052947 0.1293 -0.00466978 +0.0313864 0.0929268 0.0420114 +-0.0242749 0.174204 -0.0124276 +-0.0678958 0.0610238 0.00808464 +-0.0477867 0.135371 0.0169352 +-0.0514248 0.0500855 0.0140283 +0.0463863 0.075041 0.00619921 +-0.0120829 0.121468 -0.0106691 +0.0474936 0.0651497 0.0284001 +-0.0370341 0.127886 0.0121304 +-0.0240288 0.0385625 0.0316972 +0.0484803 0.0651161 -0.0012457 +-0.0516556 0.0569841 0.0295138 +-0.0639861 0.131146 -0.00837414 +-0.0504965 0.087636 0.0455301 +0.03603 0.0808066 0.0380541 +-0.0869174 0.117103 0.00125292 +-0.0617229 0.155313 -0.01958 +-0.0631289 0.15403 -0.0107687 +0.00528045 0.114267 -0.0191116 +-0.0639453 0.167747 -0.0398404 +0.0288613 0.0520696 0.0379853 +-0.0623548 0.166257 -0.0465894 +0.000543528 0.123331 0.0344653 +0.0375704 0.0618629 0.0348997 +-0.0391935 0.128299 0.00543562 +-0.0593991 0.0472653 0.0079341 +-0.0244003 0.0390404 0.0383653 +-0.0676508 0.0338326 0.0090061 +-0.0292136 0.07193 -0.032514 +-0.0374976 0.0861098 0.0439188 +0.0247244 0.0549721 0.0426251 +-0.0892169 0.151457 0.0141575 +-0.02429 0.121354 -0.00839434 +-0.0618416 0.098205 -0.0180486 +-0.0320742 0.0383234 -0.000421092 +-0.0488761 0.107007 -0.0192731 +-0.0476462 0.123357 -0.010393 +0.0220922 0.12286 0.0278182 +-0.00150357 0.0647954 0.0567431 +0.000502823 0.0870298 0.0569751 +-0.0581295 0.0643065 0.0321224 +-0.0188005 0.0568615 0.0490899 +-0.0794271 0.0732336 0.00151817 +0.019219 0.0848258 -0.027423 +-0.0344972 0.116614 0.0320154 +0.000192029 0.0811649 -0.0359709 +-0.0741702 0.0968478 0.0394202 +0.00621596 0.083814 -0.033411 +-0.0671177 0.159814 -0.0107973 +-0.0187526 0.0641914 -0.0363857 +0.0556876 0.0493473 0.0181935 +-0.0364983 0.059104 0.0398977 +-0.071802 0.181053 -0.0556554 +-0.0116602 0.168404 -0.0170453 +-0.0478952 0.0713156 0.0406183 +0.0354015 0.0476244 -0.00628637 +-0.0262003 0.0750789 0.0460261 +-0.0550327 0.0674609 0.0370807 +-0.0565425 0.0415574 -0.00871771 +-0.0546448 0.115434 0.0349037 +-0.0682182 0.15577 -0.00101225 +-0.066899 0.132617 0.0454244 +-0.0743656 0.172848 -0.0365047 +-0.0734703 0.155395 0.00293075 +-0.0125152 0.0589286 0.0534547 +0.00233104 0.0554199 -0.0313859 +-0.0805618 0.101855 -0.00659893 +-0.0537592 0.0797599 -0.020636 +-0.0237797 0.125538 0.0184413 +-0.0508814 0.161419 0.0066624 +-0.0742588 0.0655235 0.0100016 +0.0457502 0.0805926 0.00319942 +-0.0764848 0.142819 0.0460732 +-0.0442438 0.113637 -0.0162318 +-0.00550074 0.0870334 0.0571343 +-0.059876 0.0997119 -0.0187764 +-0.069062 0.149033 -0.0371338 +-0.0598711 0.154188 0.0296083 +-0.044481 0.0973337 0.0428134 +0.0255359 0.118038 0.0305151 +-0.000498881 0.112805 0.0421187 +-0.073083 0.0981963 0.0397086 +-0.0766217 0.068534 0.0175211 +-0.038773 0.11398 -0.0166127 +0.0194763 0.0837958 0.0507486 +-0.0809353 0.145916 -0.000819165 +0.0301953 0.0476864 0.0346108 +-0.0284906 0.0932063 0.0444855 +-0.071967 0.162417 -0.0419522 +-0.0647895 0.0838376 -0.0190209 +-0.00994817 0.0389455 -0.0113423 +0.00268547 0.035256 0.0455248 +-0.0587181 0.0481161 0.00163754 +-0.0537032 0.140954 0.0276054 +-0.0166811 0.0377146 -0.0171581 +-0.0896263 0.0969991 0.0154111 +-0.0475653 0.166962 -0.00492463 +-0.0684985 0.0986495 0.0414678 +0.0399619 0.0730961 -0.00981181 +-0.0433911 0.121364 -0.0123522 +-0.0619851 0.167813 -0.0525933 +-0.0768904 0.0733563 0.0291265 +-0.058879 0.104045 -0.0185386 +-0.0154965 0.0573571 0.0513792 +-0.0115598 0.09531 -0.0330219 +-0.0335104 0.125389 -0.00127044 +0.0292004 0.119729 0.0233163 +-0.0141909 0.171251 -0.024451 +0.00225805 0.0711729 -0.0343766 +0.000838494 0.130009 0.0243594 +-0.0186635 0.0360947 0.0525267 +0.0441946 0.0874765 -0.00278813 +-0.0347028 0.122731 -0.00776716 +-0.0478246 0.129609 0.027299 +-0.0784918 0.144814 0.0436628 +0.020477 0.0989516 0.0463466 +-0.0870404 0.113136 0.0295379 +0.012093 0.120504 0.0352323 +0.00825492 0.0739666 -0.0336091 +0.00112807 0.104475 -0.0219821 +-0.0142621 0.120334 -0.0114431 +-0.0507965 0.0345143 0.033135 +0.0311896 0.0857114 -0.0197343 +-0.0894234 0.0956355 0.01542 +-0.0775093 0.0961888 -0.0115304 +-0.0358262 0.0929298 -0.0238031 +-0.0774962 0.131676 0.0527303 +-0.0421326 0.160667 -0.0107094 +-0.0276983 0.125752 0.00966815 +-0.045336 0.129618 0.020889 +-0.00368188 0.0613041 -0.0346439 +-0.0748644 0.171601 -0.033829 +-0.0207882 0.0770942 -0.0390427 +-0.044533 0.160785 0.0064482 +-0.0789135 0.0799145 -0.00757704 +-0.0700794 0.154941 0.0289273 +-0.0313268 0.0609036 -0.0184352 +-0.0853384 0.107683 0.0213404 +-0.0624789 0.152144 -0.0275875 +-0.0427656 0.0797392 -0.0197597 +0.00722196 0.0865913 -0.0328221 +-0.0720619 0.109399 0.0395074 +-0.0911632 0.132299 0.00922827 +-0.00610552 0.129863 0.0232869 +0.02524 0.115374 0.03316 +0.00541955 0.0912903 -0.0327619 +0.00896308 0.0344141 -0.00340754 +-0.0356782 0.0636593 -0.0138055 +-0.0555057 0.153886 0.023914 +0.0207355 0.0349558 0.0059225 +0.0360179 0.0848402 0.038086 +-0.0488433 0.098515 -0.0220378 +-0.0633934 0.178218 -0.0607118 +-0.0846638 0.0778105 0.0155166 +0.0437393 0.0720229 -0.000789276 +-0.0288953 0.122588 -0.00566495 +-0.025973 0.0851197 0.051146 +-0.0782416 0.0913778 0.0366028 +-0.0494978 0.0960237 0.0444817 +-0.0785831 0.0731535 -0.00247436 +-0.0698391 0.165209 -0.0499791 +-0.0586839 0.0335669 0.00570948 +-0.0610591 0.155387 0.024814 +-0.0642828 0.163385 -0.0227384 +-0.0658667 0.0334936 -0.00108817 +0.037341 0.0888457 0.0365275 +0.02301 0.0347163 0.00286296 +-0.0590207 0.126708 -0.0075139 +0.0463679 0.0792556 0.0081871 +-0.00960203 0.0406207 -0.0262166 +-0.0771598 0.160359 -0.0157997 +-0.0425011 0.163766 0.00491011 +-0.00971544 0.177216 -0.0294611 +0.021747 0.102101 0.0439088 +-0.087802 0.139216 0.0403868 +-0.0694557 0.0421945 0.00370163 +0.0173244 0.0580274 -0.0281164 +-0.011686 0.178646 -0.0240587 +-0.0245154 0.158144 -0.00224812 +0.021637 0.0948486 -0.0224193 +0.00951901 0.0504027 0.0504431 +-0.0252093 0.112572 -0.0171753 +-0.0736758 0.108402 0.0380105 +-0.0551152 0.0341599 0.0272668 +-0.0462814 0.155049 0.00841735 +-0.0164865 0.0730277 0.0553332 +-0.0853981 0.109039 0.0213496 +-0.0817879 0.0734817 0.0075372 +-0.0543644 0.15733 0.00977334 +-0.0391365 0.0406682 0.0418102 +0.00445432 0.130749 0.00275136 +0.0247455 0.105845 -0.0161092 +-0.0554962 0.0904299 0.0451691 +-0.00849692 0.0731924 0.0575239 +-0.0665361 0.11864 0.0512424 +-0.0771905 0.152834 -0.00389169 +-0.0684956 0.0958684 0.0422138 +-0.086559 0.0806364 0.0135028 +-0.065258 0.156162 0.0146042 +-0.0134788 0.105828 0.0432751 +-0.00273284 0.0712345 -0.035418 +0.0276777 0.0972525 -0.0189451 +-0.0768441 0.113421 -0.00459179 +-0.0291819 0.174148 -0.0171874 +-0.0392913 0.0344977 0.0373408 +-0.00249868 0.0965524 0.0536599 +-0.026518 0.10985 0.0386071 +-0.0272212 0.114809 -0.0155223 +-0.0617195 0.0669875 0.0343055 +-0.0824261 0.101938 -0.00456304 +-0.0889571 0.0955775 0.00843273 +-0.0288529 0.100117 -0.0233232 +-0.0899265 0.130893 0.00523191 +-0.0346189 0.112824 -0.0174204 +-0.0154754 0.111334 0.0410203 +-0.053649 0.0335392 -0.00958395 +-0.000215874 0.126274 0.0312521 +0.00810763 0.0366956 0.0273459 +-0.0915032 0.133721 0.0182157 +0.0193574 0.0537071 -0.027254 +-0.0617049 0.070743 -0.0146345 +-0.0745149 0.121791 0.0533186 +-0.070524 0.0682803 0.0295828 +-0.0206697 0.0697068 0.051972 +-0.0918785 0.141976 0.0181723 +-0.0408421 0.0345979 0.00840679 +-0.0738542 0.15551 0.00718209 +0.0055205 0.0427186 0.0455303 +-0.065431 0.168513 -0.0346313 +0.0194077 0.0659 0.0490938 +-0.0485039 0.0876217 0.0453743 +-0.0622817 0.0458517 0.0346831 +0.0349983 0.0362655 0.0094693 +-0.0912374 0.140583 0.0161703 +-0.0884146 0.113764 0.0250911 +0.0142472 0.0860448 0.0523279 +-0.0131413 0.127389 -0.000900164 +0.0289187 0.0580129 -0.0187889 +0.00423189 0.0768627 -0.0347545 +0.0204663 0.0385832 -0.00969847 +-0.0217971 0.0348633 0.0460203 +-0.0864575 0.101794 0.0247295 +0.00132582 0.0568889 -0.0321653 +-0.0697484 0.0793376 -0.0160307 +-0.0845391 0.102087 -0.000621587 +-0.0733924 0.0656461 0.018954 +-0.0391909 0.0342717 0.0287528 +-0.065551 0.112475 0.040245 +-0.0628947 0.161497 -0.0505862 +-0.0455612 0.125305 -0.00846085 +0.0204165 0.110729 -0.0153427 +-0.0119941 0.16759 -0.0225943 +-0.0778434 0.153328 0.00140062 +-0.0743032 0.152688 -0.027892 +-0.0719627 0.134048 -0.00796724 +-0.0322554 0.0722092 -0.0264952 +-0.0689145 0.123836 -0.00886831 +-0.0292201 0.0564848 -0.022383 +-0.0336564 0.0343441 0.0369141 +0.0587559 0.0579922 0.0215357 +0.0331644 0.1138 0.0262385 +0.0155789 0.125536 -0.0032763 +-0.0511913 0.034459 0.0313456 +0.0336899 0.0357287 0.00969367 +0.0540437 0.0734433 0.0120297 +-0.0588961 0.106893 -0.0176578 +-0.0158316 0.18484 -0.0207268 +0.0120317 0.0342138 -0.0138856 +0.0335354 0.0380053 0.0222769 +-0.0118847 0.117889 -0.0148923 +0.00991822 0.0342953 -0.00310719 +0.00806259 0.0342288 -0.0204182 +-0.00962665 0.0384388 0.00947704 +-0.00349166 0.0534503 0.0541192 +0.0248931 0.108132 -0.0145556 +-0.0355172 0.106999 0.038376 +0.0298839 0.118971 0.0235707 +-0.0896201 0.0969823 0.0124196 +0.00795856 0.126912 0.0298215 +-0.0734288 0.149863 -0.0358672 +-0.0513643 0.132495 0.031006 +-0.056967 0.0535025 0.000612409 +-0.0226813 0.0349023 0.0509736 +0.0573538 0.0634191 0.00214341 +-0.0178849 0.0387376 -0.0108688 +-0.0690262 0.170476 -0.0316587 +-0.0162544 0.183109 -0.0200888 +-0.0569078 0.052097 -0.000371255 +-0.0845703 0.11062 0.0357089 +0.035496 0.0454077 0.0303438 +-0.00267498 0.100539 0.0471075 +-0.080721 0.0845507 0.0336553 +-0.0900133 0.150126 0.0131697 +-0.0628916 0.0631016 0.0268901 +-0.0739067 0.163816 -0.0379732 +-0.0313311 0.0487062 0.0434625 +-0.036476 0.0533606 0.0387027 +-0.0636484 0.15559 0.00937973 +0.0135801 0.0874029 0.0531363 +-0.0259964 0.0967524 -0.0245741 +-0.0665286 0.168031 -0.0580342 +-0.0794099 0.141428 0.0463829 +-0.0496093 0.0334738 -0.00871292 +0.0373859 0.082128 0.0365587 +-0.00650329 0.0547609 0.0534371 +0.0253836 0.0503366 -0.0210264 +-0.00332845 0.128773 0.0271941 +0.0363318 0.0601344 -0.0117401 +-0.0258635 0.103016 -0.0235702 +-0.0251408 0.168241 -0.0184358 +0.018845 0.0956057 -0.0232473 +-0.0712372 0.167165 -0.0209901 +-0.0759412 0.151358 -0.0178788 +-0.0784019 0.152013 0.0336008 +0.000968412 0.0391138 -0.00557511 +-0.0865136 0.106289 0.0083757 +-0.0623969 0.0335761 0.00673913 +-0.0769787 0.135423 -0.00568624 +0.021851 0.0591836 0.0473037 +-0.0524335 0.115217 0.0341034 +-0.0884925 0.144689 0.01017 +-0.0774954 0.147028 0.0416906 +0.00429953 0.0340852 0.0162355 +-0.0489061 0.0346101 0.0421693 +-0.0377668 0.0812615 -0.0209367 +-0.0321125 0.0496937 -0.0183514 +-0.00333701 0.121977 -0.0113118 +-0.063853 0.129717 0.0428324 +0.0122687 0.0724051 -0.0314733 +-0.0295052 0.113904 0.0347936 +0.0428284 0.0676747 -0.00179274 +-0.0665096 0.0944832 0.0425185 +-0.0324964 0.117987 0.0309791 +-0.0240568 0.0972281 0.0446316 +-0.0729302 0.128204 -0.00868672 +-0.0930613 0.118852 0.0392987 +-0.0179932 0.0940702 -0.0337993 +-0.0276364 0.0917699 -0.0296042 +0.0270825 0.114018 -0.00875387 +-0.0701334 0.160982 -0.047936 +0.0160414 0.0343167 -0.00190332 +-0.0407181 0.0336157 0.00208844 +0.0537368 0.0581963 0.0283843 +0.0459393 0.0792136 0.00418579 +0.00219887 0.0866713 -0.0341557 +-0.0874475 0.125307 -0.000719081 +0.0171658 0.0974165 -0.0229214 +-0.0555243 0.0344634 0.0339194 +0.00337546 0.131746 0.0137901 +-0.037361 0.155079 0.00374727 +-0.00966712 0.0394179 0.0374824 +0.0401633 0.102703 -0.00178896 +-0.0792807 0.167978 -0.037009 +0.0137845 0.0344 -0.00993851 +-0.0224906 0.034851 -0.0281799 +-0.0815485 0.124491 0.0516101 +0.0440694 0.0973609 0.0121636 +-0.0361101 0.0351289 -0.0167641 +-0.0672139 0.168667 -0.0295504 +0.00726635 0.0696573 -0.0326992 +-0.0474987 0.0987688 0.0431343 +-0.0879643 0.115809 0.00328051 +0.0212116 0.083355 -0.0266295 +-0.0413155 0.0345032 0.0369079 +-0.0830031 0.148729 0.00315098 +-0.0365029 0.0818729 0.0434567 +-0.0265303 0.0632322 0.0390504 +0.0560084 0.0549549 0.0021707 +-0.00162661 0.100486 0.0474782 +-0.00782745 0.0882395 -0.0367822 +-0.0874416 0.113109 0.00532366 +-0.0755108 0.126011 0.0529241 +0.0317406 0.107408 0.0337947 +-0.0280888 0.121741 0.0242898 +-0.0114519 0.126605 -0.00415103 +-0.00942316 0.129915 0.019193 +0.0305901 0.117314 -0.000462026 +-0.00449008 0.116939 0.0397737 +-0.0174829 0.0365879 0.0522725 +-0.0480399 0.136313 0.0145941 +0.0078895 0.0386539 0.0453509 +-0.059976 0.125502 0.0413668 +0.00922467 0.131237 0.0102208 +-0.0164537 0.0924837 0.0552632 +-0.0397063 0.0680709 -0.01554 +0.0144891 0.0990552 0.047648 +-0.0194892 0.0771957 0.0553527 +0.00314961 0.0344334 0.00286196 +0.0322227 0.0828447 -0.0192606 +-0.086166 0.115735 0.00128445 +-0.0628659 0.161473 -0.0525859 +-0.0897633 0.133813 0.0392039 +-0.0931113 0.126933 0.0272608 +0.0442448 0.0902943 -0.00180307 +0.0383075 0.041189 0.0258499 +-0.038679 0.0636652 -0.0136088 +-0.0640888 0.165507 -0.029848 +0.00695321 0.13108 0.0193768 +-0.0281007 0.162292 -0.0150733 +0.0192374 0.0749637 -0.0278698 +0.0244608 0.0941673 -0.021671 +0.0131476 0.100265 -0.0227775 +-0.0301385 0.166718 -0.0165418 +-0.0651412 0.159482 -0.0565006 +0.0342867 0.0700233 0.0389954 +-0.0695171 0.141232 -0.00845814 +-0.0904292 0.148866 0.0241237 +-0.0253439 0.0693349 0.0439513 +-0.0623474 0.166249 -0.0485903 +-0.0193027 0.0445534 0.0525624 +-0.0258791 0.105846 -0.022482 +-0.0331634 0.0381954 -0.000525199 +-0.0640739 0.0617863 -0.0011495 +0.0413993 0.0942972 -0.00577735 +-0.030183 0.155051 -0.00785968 +-0.0209835 0.159643 -0.00415092 +0.0227131 0.118044 0.0330191 +-0.0268485 0.124528 0.000469072 +-0.0241773 0.17417 -0.0202285 +-0.012912 0.0339283 -0.0204101 +0.0235417 0.109895 0.0378397 +-0.0800641 0.107437 0.0308747 +-0.0374695 0.0383458 -0.0088734 +0.0372523 0.0646113 0.0362056 +-0.0324907 0.0817336 0.0416408 +0.0138217 0.125251 -0.00497301 +-0.0427639 0.126553 -0.0057736 +-0.0467249 0.0753156 -0.0175399 +-0.0861037 0.109061 0.0193453 +0.0206619 0.0348672 0.0224824 +-0.0804996 0.127434 0.052885 +0.00919876 0.0964636 -0.0261302 +-0.0321423 0.0806683 -0.0305334 +0.0242996 0.120934 0.0286395 +-0.0429021 0.171269 -0.00696466 +0.0145253 0.126603 0.0278836 +-0.0657391 0.142564 -0.0101503 +-0.0125598 0.0943837 -0.0340846 +-0.0809608 0.0720856 0.0135459 +-0.0230054 0.0386784 -0.0118395 +-0.0234022 0.157317 -0.0083471 +-0.0700956 0.06197 0.00856658 +0.0361469 0.0875521 0.038321 +-0.00703497 0.101085 0.0445106 +-0.0217097 0.181473 -0.0209735 +-0.0310875 0.179405 -0.00921261 +0.00340822 0.117733 -0.0168392 +-0.0306641 0.062253 -0.0214244 +-0.00851812 0.0604987 0.0555487 +-0.0105044 0.0745085 0.0567054 +-0.00265316 0.0511482 -0.0311061 +-0.0764634 0.157616 -0.00941011 +-0.0224335 0.0371726 0.0541058 +-0.0432016 0.171084 -0.00202068 +-0.0523174 0.057382 0.0266177 +0.0595665 0.0566863 0.0161765 +0.00171621 0.126464 -0.00619605 +-0.0635036 0.095949 0.0432601 +-0.00748541 0.0856517 0.0572176 +-0.0142172 0.114376 -0.0171381 +-0.0106623 0.0511436 -0.032067 +-0.0292482 0.0345559 -0.0204636 +-0.0369573 0.0340894 0.0258321 +-0.0544756 0.0413314 0.0465715 +-0.0940023 0.125512 0.016258 +-0.0685195 0.0916417 0.0424016 +-0.076491 0.140037 0.0480957 +-0.021763 0.159801 -0.0034487 +0.0107652 0.110575 -0.0191667 +-0.0296434 0.0486725 0.0446006 +0.0205709 0.0463131 0.0417824 +0.0371829 0.0726727 0.036151 +0.00170794 0.1258 0.0319097 +0.00812607 0.108726 -0.0199063 +-0.088847 0.0874807 0.0104655 +-0.0614823 0.0761372 0.0417782 +-0.077632 0.077285 -0.00766199 +-0.0914347 0.132413 0.0262297 +-0.0380759 0.16073 -0.01276 +-0.0580841 0.132712 -0.00634758 +-0.00546375 0.117984 -0.0150376 +-0.0825526 0.110518 0.0415894 +-0.0567945 0.0589511 -0.00142935 +-0.00849356 0.0842936 0.0575382 +-0.0464941 0.0987388 0.0427545 +0.0199235 0.0365522 0.038924 +-0.0181358 0.159669 -0.00704365 +0.0214919 0.0906421 0.0482356 +-0.0308996 0.107699 -0.0200324 +0.0310327 0.118783 0.0168832 +-0.049761 0.069112 0.038562 +-0.0388211 0.091456 -0.0235256 +-0.0139638 0.180133 -0.0220777 +0.0153381 0.127037 -0.000904662 +-0.0219975 0.107603 -0.0219593 +-0.0448317 0.0927682 -0.0220335 +-0.0127292 0.0909963 -0.036642 +0.0174939 0.0350076 -0.00788091 +-0.016176 0.165587 -0.0188354 +0.0276821 0.0862408 0.0453967 +-0.00121407 0.102594 0.0440764 +-0.0167645 0.162218 -0.0151135 +-0.0446938 0.0665983 -0.0153032 +-0.0709583 0.135514 -0.00804855 +0.0152869 0.0794603 0.0538116 +-0.028039 0.0849631 0.0475609 +-0.0252122 0.108563 -0.020971 +-0.0501485 0.141642 0.00337658 +-0.0802229 0.143442 0.044034 +-0.0728736 0.0659781 0.0205309 +-0.083982 0.134868 -0.000717316 +-0.070349 0.172644 -0.037875 +-0.015485 0.0673895 0.0543529 +-0.0374989 0.108379 0.0375203 +0.0194281 0.0399108 -0.0177171 +-0.0508059 0.0898498 -0.0218327 +-0.0916067 0.130926 0.00923792 +-0.0657827 0.158229 -0.0103034 +0.00352818 0.0386899 -0.0121702 +-0.0147383 0.10835 -0.0207588 +-0.0496313 0.111407 -0.0178803 +-0.0413837 0.128875 0.00906534 +-0.0523163 0.134709 -0.00240246 +0.00961512 0.122501 0.0348066 +-0.0755017 0.140041 0.0481 +-0.0678883 0.145704 -0.022127 +-0.0230319 0.0374462 0.0541561 +-0.00425848 0.0961384 -0.0318255 +-0.0895594 0.135155 0.0312102 +-0.0623104 0.0594537 0.00702264 +0.00422975 0.0796448 -0.0342885 +-0.0618471 0.153751 -0.0215773 +-0.00905798 0.034739 0.0470958 +-0.0575286 0.126935 0.0396404 +-0.0298496 0.180049 -0.0116061 +-0.0317613 0.0567558 -0.0133876 +-0.0839019 0.105911 0.0262878 +-0.0715304 0.102729 0.03849 +0.0144241 0.127312 -0.00121761 +-0.0787914 0.14589 -0.00282549 +-0.00925999 0.0421824 0.0495336 +-0.0284001 0.0385729 0.034376 +-0.0690967 0.148938 0.0398784 +-0.0561651 0.153258 0.0280528 +0.0408211 0.10424 0.0171662 +0.0569661 0.0701435 0.00568959 +-0.0318479 0.09723 -0.023215 +0.00233723 0.0391647 0.0293747 +-0.0839319 0.117006 0.0485566 +-0.0310508 0.0693178 -0.0264576 +-0.0270974 0.0794315 0.0481933 +-0.00975454 0.0728065 -0.0376393 +-0.0907216 0.131054 0.0332303 +-0.00149823 0.0535022 0.0547476 +-0.0920442 0.126938 0.0322524 +-0.049095 0.140149 0.0113941 +-0.0605441 0.113772 -0.0142303 +-0.00976932 0.0756525 -0.0380331 +-0.0878532 0.127045 0.0464651 +-0.010533 0.178644 -0.025906 +0.0593699 0.0691831 0.0171767 +-0.024781 0.0769658 -0.0376048 +0.0423711 0.0575006 -0.00528711 +0.0460928 0.061454 -0.00359733 +-0.0408554 0.101386 -0.0212924 +-0.0446853 0.169846 -0.00596698 +-0.0499657 0.0572278 0.0334797 +-0.0145604 0.127706 0.0231688 +-0.0624931 0.153672 -0.0316068 +0.0559752 0.0635544 0.0263749 +-0.0741944 0.0678888 0.022137 +0.0128784 0.0534523 0.0500797 +-0.014497 0.082865 0.0570346 +0.0100519 0.0351376 0.0435561 +-0.0764979 0.135856 0.0507679 +-0.0505672 0.0545537 0.0173366 +-0.073291 0.0682485 0.025526 +0.0168973 0.0504721 0.0453108 +0.0597511 0.0567143 0.0111681 +0.00962081 0.119433 -0.0146957 +-0.0261763 0.0931476 0.0454624 +-0.0034975 0.0661744 0.0565538 +-0.0174573 0.0601724 0.0514531 +0.0587589 0.059387 0.00417226 +-0.0388249 0.122181 0.0278208 +-0.0685252 0.175096 -0.0570393 +-0.0628061 0.0896011 -0.0190246 +0.0306772 0.118704 0.0210209 +-0.0655003 0.083298 0.0438708 +0.0560223 0.0713695 0.00682475 +-0.0298518 0.100096 -0.0230635 +-0.0422245 0.148296 -0.00246029 +-0.00149333 0.112805 0.0421166 +-0.0829153 0.0925695 0.0313446 +-0.0394018 0.0468721 -0.0179145 +-0.0784825 0.135851 0.0506454 +-0.0734876 0.127439 0.0525898 +-0.0280931 0.033441 -0.0266965 +0.0607571 0.0609589 0.0141669 +-0.0692316 0.172989 -0.0403442 +-0.0397906 0.162354 0.00198884 +-0.0505067 0.0805184 0.044061 +-0.0716519 0.156794 -0.0409079 +0.0407885 0.10564 0.00816522 +-0.00717727 0.0999816 0.0485274 +-0.0646289 0.156694 -0.0465976 +-0.089623 0.0983355 0.0134109 +0.00279805 0.0339767 -0.0211497 +-0.0142152 0.17272 -0.0253585 +-0.0396036 0.174135 -0.00601981 +-0.0669938 0.0358141 0.0313063 +-0.0497731 0.0627792 0.0345527 +0.0229897 0.121378 0.0295865 +-0.0457551 0.0336493 -0.0154708 +-0.0539285 0.152376 0.0223916 +-0.0664975 0.108359 0.0380432 +0.0293811 0.04325 -0.00550019 +-0.0166832 0.0525719 -0.0322771 +0.0164877 0.105762 0.0431793 +-0.0171637 0.0956465 -0.0313986 +-0.0314959 0.111117 0.0366419 +-0.0788622 0.169438 -0.0409605 +-0.0673163 0.13687 0.0448543 +-0.00450662 0.0828853 0.0572758 +-0.086732 0.125284 -0.00171301 +-0.0339024 0.123839 0.0236394 +-0.0665906 0.0686018 0.0336345 +-0.0647932 0.143933 0.0397518 +0.0283692 0.0466516 -0.00870467 +0.0329293 0.104175 -0.0123189 +-0.0761401 0.0728821 0.0296904 +-0.0142042 0.169737 -0.0232161 +-0.068634 0.151185 -0.044245 +-0.0135754 0.0347863 -0.0255909 +0.019989 0.0436019 0.0426848 +-0.015693 0.057044 -0.0346551 +-0.00164401 0.0482043 -0.0300627 +-0.0311183 0.172722 -0.00474304 +-0.0250193 0.118984 -0.0119284 +-0.0325683 0.124672 -0.00180773 +-0.0781672 0.0694403 0.0164131 +0.0335232 0.0673414 0.0396281 +-0.0927165 0.117489 0.0383035 +0.0402856 0.10561 0.017163 +-0.0284035 0.166813 -0.0078902 +-0.00473635 0.13076 0.00793547 +-0.0216948 0.0386212 -0.00966204 +-0.0436382 0.11786 -0.014681 +0.0533192 0.0587911 -0.00291354 +-0.0153516 0.0970497 -0.0288687 +-0.0434963 0.0661943 0.0406667 +-0.0466152 0.145766 -0.000178732 +-0.0206008 0.0386838 -0.0150911 +-0.0509261 0.0335608 -0.00538789 +-0.0896998 0.137926 0.0341919 +-0.0278811 0.0378156 0.0189805 +0.0364086 0.0854455 -0.0167057 +0.0349072 0.0875927 0.04003 +-0.0243811 0.0738035 0.0484997 +-0.0470246 0.133586 0.0187098 +0.00950521 0.0772084 0.0556135 +-0.0192998 0.0985099 -0.0244 +0.0447739 0.0438422 0.0248039 +-0.0504965 0.0819144 0.0441383 +-0.0346492 0.0577427 -0.0111408 +-0.048101 0.135891 0.0168055 +0.00147386 0.103921 -0.02207 +0.0494979 0.0678406 0.0265165 +0.00621357 0.0880484 -0.0332214 +-0.0763594 0.158279 -0.023921 +0.0359549 0.0646627 0.0378653 +-0.0462327 0.128102 0.0242709 +-0.0570384 0.142741 -0.0023851 +-0.0156536 0.0496375 -0.0309655 +-0.0157015 0.164 -0.0105798 +0.0160661 0.0349193 -0.0155613 +-0.0555615 0.0615422 -0.00607893 +-0.0506452 0.142899 0.00154993 +0.0227041 0.124378 0.0023667 +-0.0690811 0.0343024 0.0100819 +0.0296092 0.114943 -0.00583865 +0.0252655 0.0864752 -0.0236184 +-0.0579352 0.153021 -0.000467328 +-0.0699851 0.168026 -0.0510102 +-0.0649515 0.126767 -0.00875296 +-0.0310902 0.124844 0.00108587 +-0.07951 0.149797 0.0367578 +-0.0514931 0.156432 0.0104716 +-0.0854224 0.0885478 -0.00153705 +-0.0622051 0.0333895 -0.00205752 +-0.00958914 0.0376967 -0.0257201 +0.0438525 0.0874765 0.0251696 +-0.00448652 0.114189 0.0411781 +-0.0741351 0.0860483 0.039718 +-0.0162681 0.118552 -0.0135478 +-0.00571384 0.0655793 -0.035147 +-0.051609 0.164108 -0.000948719 +-0.0346229 0.116833 -0.0136016 +0.0105065 0.107115 0.0414414 +-0.0484736 0.0917654 0.0440291 +9.10767e-05 0.108392 -0.0207972 +0.0522547 0.0611036 -0.00320855 +0.00856462 0.11946 -0.0147195 +0.0326237 0.0768475 0.0419257 +0.0282302 0.0872832 -0.0216049 +-0.0693757 0.155378 0.0277002 +-0.0182673 0.180142 -0.0177524 +-0.0285043 0.0545632 0.0363758 +-0.0218074 0.0756618 -0.0388536 +-0.0633749 0.1608 -0.057006 +-0.0892506 0.151522 0.0201032 +-0.0472272 0.0642822 0.0376403 +-0.0699509 0.134055 -0.00826728 +-0.0820286 0.074884 0.0125291 +-0.0576046 0.151067 0.0326375 +-0.0425494 0.0346163 0.040046 +-0.0619058 0.105434 -0.0174028 +-0.0753497 0.108878 0.0391875 +-0.0594974 0.0946317 0.0447571 +0.013384 0.078066 0.0545225 +-0.0431375 0.160652 -0.0100842 +-0.0258359 0.0945143 -0.0266147 +-0.0245117 0.0536384 0.0409132 +-0.0664072 0.169883 -0.0364165 +-0.0726615 0.0640995 0.00799778 +-0.0451579 0.0395668 -0.0202936 +-0.00773777 0.0727528 -0.0370634 +0.0135086 0.116829 0.0366875 +-0.0836964 0.106272 0.0263573 +-0.0303071 0.0339954 0.0147064 +-0.000759903 0.102685 -0.0227147 +0.0258263 0.0624492 -0.0231007 +-0.0674047 0.179923 -0.0541082 +-0.0857367 0.111526 0.0418488 +-0.0560454 0.148678 -0.00182226 +-0.0476918 0.0635243 -0.0129244 +-0.0642806 0.164881 -0.0270495 +-0.0574962 0.108397 0.0389105 +0.00241269 0.0347278 -0.0230504 +-0.00449379 0.0548276 0.0540049 +-0.0627171 0.147502 -0.0125815 +-0.0213288 0.0581411 0.0459349 +-0.0608837 0.0367165 0.0449842 +0.0211328 0.126504 0.0131782 +0.00740015 0.0418656 -0.0238182 +-0.0737971 0.148055 0.0412991 +-0.00374732 0.0726737 -0.0357771 +-0.0204954 0.103009 0.0433484 +-0.0210495 0.127369 0.0106273 +0.0306407 0.0431175 0.0298982 +0.0109957 0.0698921 0.0545336 +-0.0439898 0.0350927 -0.0256307 +-0.0670986 0.0347786 0.0136227 +0.0215717 0.0401714 -0.00970048 +0.0214864 0.0934187 0.0477129 +-0.0174765 0.0715932 0.0547125 +-0.0246025 0.0824997 0.0540808 +-0.0774249 0.155543 -0.015906 +-0.00557868 0.109705 -0.0221876 +-0.00234233 0.10113 0.044176 +0.0314145 0.0384146 -0.00113672 +-0.0708385 0.0965734 -0.0156262 +-0.0358426 0.0345846 0.0397566 +0.0166934 0.111749 -0.0164123 +-0.0461447 0.0396778 -0.0162811 +0.0460542 0.0820303 0.0141751 +0.024254 0.0776067 -0.0252579 +-0.0585858 0.14384 -0.00236725 +-0.0590542 0.155341 0.0226214 +-0.0425019 0.049221 0.0396798 +-0.0737231 0.156865 -0.0279142 +-0.0640946 0.155219 -0.00966954 +-0.0136075 0.0420889 -0.0267571 +-0.0149109 0.0391012 0.0366853 +-0.0768619 0.116386 -0.00596474 +0.0464851 0.0651547 0.0281822 +-0.0672589 0.077344 0.0400985 +-0.0768893 0.176966 -0.046083 +-0.0870251 0.136346 0.00321516 +-0.046566 0.128368 -0.00156221 +-0.0881324 0.103677 0.0173573 +-0.0358716 0.10426 -0.0206916 +-0.00158589 0.110252 -0.0207823 +-0.0645869 0.117148 0.0471018 +-0.0493593 0.121175 0.032055 +0.00351232 0.0575709 0.0538233 +-0.0114209 0.107659 -0.022044 +-0.0134464 0.0388153 -0.00818864 +-0.0485053 0.108444 0.0391022 +-0.0783276 0.0839475 -0.0105972 +-0.0422429 0.129048 0.0117038 +0.0230175 0.0903576 -0.0236845 +-0.0840147 0.0993167 -0.00358504 +-0.0538991 0.108397 -0.0185513 +-0.00168424 0.0583535 -0.0329231 +0.00135578 0.0347199 0.040341 +-0.0858041 0.131212 0.0485351 +0.0546169 0.0694261 0.0240301 +0.0349752 0.0684447 -0.0157877 +0.0095201 0.0716259 0.0554078 +-0.00749453 0.0952341 0.0547544 +-0.019553 0.163976 -0.00913576 +-0.0640343 0.0457636 0.00169557 +-0.017901 0.0381554 0.0134869 +0.0133255 0.0594987 -0.0290386 +0.00648582 0.047441 0.0497645 +-0.0239518 0.123773 0.0227902 +-0.0318252 0.0609455 -0.0174329 +-0.0928746 0.122834 0.0282828 +0.00226062 0.131309 0.0062251 +-0.0414935 0.112526 0.0356807 +0.0202561 0.0791555 -0.0271913 +-0.0331056 0.0338156 0.0161014 +0.0297787 0.0446629 0.032196 +-0.0792621 0.084024 -0.00957002 +-0.0697175 0.155623 0.0028257 +-0.0391149 0.0337868 -0.0291782 +-0.0893977 0.135151 0.0292068 +0.04371 0.0987542 0.0111628 +-0.0281559 0.0380199 0.00608926 +0.0552084 0.0493743 0.00621284 +-0.0861539 0.149931 0.0300167 +0.042296 0.0775058 -0.00576261 +0.0415736 0.0765545 0.0302447 +-0.0532046 0.133931 0.0318349 +-0.0939252 0.118758 0.016301 +-0.027019 0.123094 -0.00421217 +-0.0471842 0.0355635 -0.0162689 +0.0137449 0.12859 0.0232984 +-0.0388402 0.0957243 -0.0226737 +0.0393482 0.0966985 0.0306886 +0.0405486 0.0596459 0.0301455 +-0.083332 0.0992842 -0.00460735 +0.0403123 0.0491555 -0.00629774 +-0.0135559 0.0378433 -0.0166597 +-0.0655014 0.0958911 0.0424957 +-0.00976126 0.0358952 0.049479 +-0.0624412 0.150596 -0.00171821 +-0.064981 0.131148 -0.00860586 +-0.0763864 0.109432 0.0420745 +-0.00149437 0.0801423 0.0576885 +-0.0163316 0.166866 -0.0132843 +-0.0862104 0.140486 0.00518463 +-0.0484837 0.159357 0.00832828 +-0.063685 0.169395 -0.0455915 +-0.0676574 0.0344024 0.0120657 +-0.0324957 0.0889348 0.0439847 +-0.0285919 0.0494861 -0.0235098 +-0.0925344 0.124191 0.0302708 +-0.0898664 0.135182 0.0372006 +-0.0675175 0.146991 0.0409028 +-0.0643109 0.0721294 0.0381075 +0.0336777 0.107392 0.0312726 +0.0416487 0.0806113 0.0304012 +0.0108925 0.130607 0.00797847 +0.00350574 0.071674 0.0559901 +-0.0687556 0.0680025 -0.00564855 +-0.0668955 0.116554 -0.00922261 +-0.0147132 0.0599449 -0.0358879 +-0.023059 0.0825255 0.0553698 +-0.0305016 0.108423 0.0388291 +-0.0575086 0.0507939 0.00466306 +-0.0811465 0.155009 0.0163089 +-0.0281138 0.125637 0.0139342 +0.00450187 0.0575756 0.0536585 +-0.0124992 0.0745024 0.0565746 +0.030795 0.119096 0.00823469 +0.0112449 0.0943173 -0.0278535 +-0.00350029 0.0856691 0.0572933 +-0.0135749 0.18083 -0.0284353 +-0.0387321 0.0724952 -0.0174162 +-0.0366243 0.151025 -0.00298791 +0.0282135 0.0579727 -0.0197309 +-0.0828916 0.0775885 0.00151125 +-0.00164877 0.0496874 -0.0307148 +0.0386307 0.106935 0.00116239 +-0.0871923 0.0861012 0.021463 +-0.0760841 0.104861 0.0354581 +-0.0244788 0.0486839 0.0492934 +-0.0883766 0.141855 0.0366703 +-0.0509887 0.143164 0.0163768 +-0.0496168 0.0561697 -0.00993077 +-0.00378208 0.0390472 -0.0102032 +-0.0843646 0.087116 -0.00354087 +0.00990951 0.0819581 0.0548044 +-0.0425006 0.0888114 0.0424593 +-0.0728637 0.099356 -0.013752 +-0.0206243 0.0436469 -0.0283402 +-0.0828496 0.117685 -0.00271563 +-0.0715585 0.181081 -0.0541999 +-0.0338561 0.0475081 -0.0226504 +0.00224005 0.0768974 -0.0352993 +-0.0935755 0.117419 0.0183042 +-0.0754318 0.155396 0.00808247 +-0.0674328 0.172594 -0.0425404 +0.027377 0.122298 0.0126488 +0.0174898 0.0874014 0.0499964 +0.0109848 0.123169 0.033628 +-0.0367194 0.0710436 -0.0172369 +-0.0285781 0.0423048 0.0521933 +0.033068 0.0984004 -0.0141329 +-0.0475947 0.0601221 0.0367025 +-0.0635768 0.155628 0.0253794 +0.0262764 0.100811 0.0416679 +0.0147323 0.129513 0.0122405 +0.0321413 0.0366814 0.019545 +-0.00794631 0.127212 -0.00487976 +0.0374618 0.0376657 0.00680115 +-0.0450017 0.0355455 0.0439167 +-0.0613089 0.0634913 0.028639 +-0.0275028 0.0988006 0.0435593 +0.051337 0.0560222 -0.00385605 +-0.0701879 0.175082 -0.0550269 +-0.0424973 0.155091 0.0068798 +-0.0156018 0.0435495 -0.027203 +-0.0387577 0.0797624 -0.0199123 +0.036687 0.0909845 -0.0142871 +-0.0621605 0.170953 -0.0526019 +-0.0503178 0.0515583 0.0186309 +0.0183954 0.0645286 0.0493775 +-0.0816036 0.0774754 -0.00149976 +-0.0167638 0.0728801 -0.0389011 +-0.0612458 0.141043 0.0360828 +-0.0650382 0.153613 0.000196596 +-0.0506214 0.0416531 0.0455899 +-0.0218256 0.086832 -0.0376579 +-0.0368977 0.110447 -0.0189068 +-0.0390704 0.124042 0.0247581 +-0.0145052 0.0544906 0.0506759 +0.0346875 0.0955379 0.0380285 +-0.0427281 0.0478381 -0.0112773 +-0.0589463 0.0436711 -0.00636451 +0.044641 0.0945606 0.00417916 +0.0417801 0.041383 0.0227466 +-0.066757 0.170863 -0.0580345 +-0.0104152 0.0998773 0.0473736 +-0.0467325 0.133652 0.0114554 +-0.0376877 0.163829 -0.000238726 +-0.0725153 0.142823 0.0458217 +0.0207674 0.103342 -0.0194283 +-0.00540678 0.121074 -0.0123374 +-0.0424989 0.102887 0.0413486 +-0.0462349 0.0354247 -0.01929 +0.0180016 0.125305 0.0262968 +-0.0162469 0.184587 -0.0200786 +-0.079084 0.0994215 0.0343706 +-0.0557053 0.132552 0.0352577 +-0.0512629 0.0388692 0.0464256 +-0.0515065 0.160835 0.00704803 +-0.0826893 0.152358 0.0291683 +-0.0584964 0.0932599 0.0452695 +0.024564 0.103479 -0.0175815 +-0.0846694 0.0831371 0.000497005 +-0.0865668 0.118992 0.0483015 +-0.0192412 0.184576 -0.0155995 +-0.00659114 0.03769 -0.0254352 +-0.0245806 0.124862 0.0196194 +-0.0368731 0.105664 -0.0202847 +-0.0621883 0.177235 -0.0596222 +-0.0672213 0.1608 -0.0122924 +-0.0303274 0.0375897 0.0276802 +-0.0234293 0.0522884 0.0423691 +0.0538492 0.0711959 0.0223128 +0.00550075 0.0772523 0.0562045 +0.0438483 0.076237 -0.00278527 +0.00633738 0.0581963 -0.0307089 +-0.0646256 0.0674757 -0.0084666 +-0.0310521 0.0450006 0.0489427 +0.0109104 0.126748 -0.00460652 +-0.0409513 0.128783 0.00774742 +-0.000502218 0.0938722 0.0552243 +-0.0166066 0.035315 -0.0186674 +-0.02118 0.169768 -0.013264 +-0.048723 0.166988 -0.000980568 +0.0301667 0.116977 -0.00204442 +-0.0129037 0.181603 -0.0240442 +-0.0461681 0.033576 -0.00628041 +0.0377831 0.0813859 -0.0147095 +-0.050774 0.143198 0.0153986 +-0.0591392 0.118534 -0.0111826 +0.0601642 0.0622865 0.0071402 +0.0055201 0.0674746 0.0556049 +0.0539548 0.0603844 -0.00239402 +0.0345037 0.0468848 0.0307194 +-0.0226112 0.04084 -0.0289768 +-0.088041 0.0995721 0.00642464 +0.0313753 0.111403 0.0314731 +-0.0818093 0.0776109 0.0245029 +0.0196586 0.112307 -0.0150514 +-0.0547371 0.114833 -0.0154193 +-0.00335753 0.11894 -0.0140663 +-0.0675878 0.0614559 0.0185068 +-0.0374891 0.0973119 0.0427062 +-0.0618754 0.0967815 -0.0181397 +-0.0177948 0.161129 -0.00657359 +-0.0762411 0.0901005 0.0388673 +-0.00749994 0.0647419 0.0560829 +-0.0872439 0.132483 0.0457019 +-0.0207923 0.0756874 -0.0390657 +0.00773677 0.0341095 0.00222437 +-0.00405506 0.101077 0.0451334 +-0.0537766 0.0826585 -0.0215583 +-0.0484986 0.0425777 0.0442245 +0.0370248 0.10907 0.0248298 +0.0550045 0.0727719 0.0183019 +-0.0531047 0.0345095 0.0361399 +0.0240424 0.122784 0.0256717 +-0.0321586 0.0349269 0.0472031 +-0.0487458 0.123267 -0.0102852 +0.0164927 0.107123 0.0418084 +-0.0518639 0.0999443 -0.0218198 +-0.0259535 0.0592275 0.0392168 +-0.0169683 0.186741 -0.0196674 +0.012157 0.123544 0.032833 +-0.0236685 0.0919017 0.0500491 +0.0048864 0.127407 -0.00526463 +-0.00324909 0.0389153 -0.000648163 +0.0108689 0.0576426 0.0524778 +0.0396737 0.107002 0.0161655 +-0.0816849 0.073475 0.00953613 +-0.0743109 0.165184 -0.0390136 +-0.0728909 0.120866 -0.00826881 +0.040969 0.0926354 0.0294955 +-0.00410534 0.0385566 0.0231802 +-0.0167703 0.0742961 -0.0390024 +0.0376363 0.109584 0.0207569 +0.00538144 0.0464854 -0.0270709 +-0.0503176 0.0388958 0.046006 +-0.0793777 0.154922 0.0242883 +-0.0476898 0.0679558 -0.0146484 +-0.0108886 0.108738 -0.0217426 +-0.0532571 0.151368 0.0204421 +-0.068651 0.163792 -0.0529788 +-0.0441151 0.0643553 0.040206 +-0.0275094 0.107088 0.0401149 +-0.0275566 0.0890776 0.0469337 +-0.0274957 0.102963 0.0425886 +-0.0266136 0.0837142 0.0504396 +0.015157 0.122808 -0.00836184 +-0.0234279 0.0636514 0.0436342 +-0.00941329 0.0943623 -0.0340451 +-0.0174189 0.178658 -0.0183022 +-0.0187779 0.183117 -0.0166827 +0.0130462 0.129592 0.0201813 +-0.0751825 0.149958 -0.0238676 +0.00897367 0.131122 0.0172577 +0.0483469 0.0589383 -0.00490848 +0.0422406 0.0986762 0.0221715 +-0.0921564 0.130934 0.011242 +-0.0327106 0.0764924 -0.028531 +0.0102149 0.0725802 0.055192 +-0.0636711 0.0593571 0.0158341 +-0.0123306 0.0394822 0.0386711 +-0.0718333 0.156164 0.022455 +-0.0864971 0.150096 0.00821548 +-0.0110742 0.123419 -0.00875247 +-0.080097 0.11274 -0.00201289 +-0.00271881 0.0655507 -0.0345764 +0.00140103 0.0390882 -0.0248121 +-0.0618299 0.0939366 -0.0189413 +-0.0716693 0.147461 -0.0281971 +-0.0231858 0.17269 -0.0205136 +-0.0637876 0.155678 -0.0402328 +-0.0228589 0.0637031 0.0444908 +-0.0238626 0.169762 -0.0118641 +-0.0752191 0.155599 0.0242023 +-0.0345019 0.0461718 -0.0254652 +-0.01605 0.0946681 0.0536372 +0.0246905 0.0477085 0.0389599 +0.0101881 0.0341976 -0.00109267 +-0.0293326 0.154386 -0.00360575 +0.00276097 0.131717 0.0121378 +-0.0859012 0.0899317 0.000454719 +-0.0297834 0.121969 -0.0069874 +-0.0297126 0.0508986 -0.0203549 +-0.0888501 0.151809 0.0151852 +-0.0824868 0.0965084 -0.00559576 +-0.0279025 0.124426 0.000511349 +-0.0111071 0.0879305 -0.0374747 +-0.0895782 0.133632 0.00522749 +-0.0325779 0.0341004 0.0231549 +-0.087069 0.100891 0.00537711 +-0.0182966 0.038653 -0.00715499 +-0.0181652 0.097581 -0.0254283 +0.00716304 0.0378885 -0.010707 +-0.0117789 0.0582633 0.0533407 +-0.0679898 0.154859 0.0296647 +0.0270346 0.0384464 0.0278157 +-0.0446977 0.147484 -0.0025954 +-0.0797208 0.0757926 0.0264575 +-0.0827795 0.113314 0.0464356 +-0.0405007 0.118003 0.0314814 +0.00913581 0.103011 -0.0206427 +-0.0712761 0.153449 0.0330143 +0.0296113 0.108994 -0.0114792 +0.0120747 0.0958655 -0.0254962 +-0.0357119 0.0695868 -0.0167299 +-0.0777217 0.159728 -0.0179219 +-0.0619192 0.0343817 0.0361087 +-0.0839142 0.0843714 -0.00355138 +0.0295472 0.11806 0.0262972 +-0.0344935 0.0733008 0.0417052 +0.0305902 0.0996469 -0.0155371 +-0.0731059 0.151228 -0.0378853 +-0.0740388 0.151266 -0.032878 +-0.0419789 0.152954 -0.00736227 +-0.00349089 0.112806 0.0419152 +0.00607582 0.0348373 0.023168 +-0.000568628 0.0388214 0.0254737 +0.0445611 0.0931651 0.0181595 +-0.0469298 0.126751 0.026776 +-0.0318643 0.104333 -0.0219242 +0.0119312 0.0725978 0.0541603 +-0.0435985 0.108724 -0.0190759 +-0.0274517 0.043312 0.0519115 +-0.00149233 0.077429 0.0585147 +-0.0618993 0.0433992 0.0415482 +0.0131559 0.129936 0.00738875 +0.00749621 0.107111 0.0412811 +0.0354668 0.0573224 -0.0106723 +-0.0211412 0.0652998 0.0483526 +-0.00680045 0.129424 0.0244883 +-0.0187344 0.126979 0.0202236 +0.00853139 0.0813381 0.0552215 +-0.0254455 0.0389929 0.0381911 +-0.0507728 0.111366 -0.017973 +-0.027716 0.0387019 -0.0165247 +-0.000266462 0.0936214 -0.0332218 +-0.0855847 0.0806062 0.0194802 +0.0100369 0.130324 0.00340984 +-0.0449017 0.148739 -0.00386394 +-0.0321132 0.0482449 -0.0223421 +-0.0893696 0.140675 0.0341739 +0.0448261 0.0875458 0.0221634 +-0.0454912 0.0719252 0.0419203 +-0.0718306 0.148291 -0.0327712 +-0.0812513 0.108802 0.0293202 +0.0429574 0.0859786 -0.00579554 +-0.0338336 0.0380945 -0.0153271 +-0.060738 0.148827 -0.00180261 +-0.0568701 0.141076 -0.0033696 +-0.0358396 0.125396 0.0214464 +-0.0789386 0.168616 -0.0354931 +-0.0315115 0.108439 0.0386203 +-0.0842691 0.117693 0.0488129 +-0.032501 0.101545 0.0423652 +-0.0289779 0.174216 -0.00689295 +-0.0622726 0.163207 -0.0582148 +-0.00885889 0.172674 -0.0247544 +-0.0519291 0.13698 0.0263868 +-0.0829532 0.112769 0.000219247 +-0.0237394 0.038003 0.0142418 +0.0321413 0.0513188 -0.0087021 +-0.0473947 0.0359569 0.0452833 +-0.0488828 0.108449 -0.0190525 +0.0415402 0.0928967 -0.0067838 +-0.0800241 0.0745873 0.0239149 +0.005197 0.0866258 -0.0333998 +0.00148166 0.107215 0.0427825 +-0.0694376 0.159556 -0.0509365 +-0.0306541 0.0650706 -0.0234343 +-0.0653365 0.167223 -0.0303028 +-0.0262324 0.15581 -0.00635861 +-0.0362329 0.165306 -0.00162934 +-0.00330758 0.0379537 -0.0147265 +-0.0267799 0.0893467 -0.0340353 +-0.0591073 0.155657 0.0168017 +-0.0331866 0.15511 0.000984746 +-0.0671323 0.152011 0.0359968 +0.0112495 0.0710359 -0.0320326 +-0.0289103 0.0508426 -0.0224168 +-0.0582351 0.043574 0.0153571 +-0.0770169 0.112922 0.0479771 +-0.0146932 0.0570315 -0.0346956 +-0.0735209 0.134443 0.0506533 +-0.0445794 0.130477 0.0137726 +-0.0744939 0.127436 0.052791 +-0.0376156 0.0492564 -0.0118933 +-0.0462534 0.123907 0.0259058 +-0.0434909 0.104315 0.0413728 +-0.0779429 0.0893818 -0.0115854 +-0.067492 0.10005 0.0413205 +-0.0882017 0.0949941 0.0238463 +0.0438775 0.06952 0.000229591 +-0.0171444 0.168289 -0.0207283 +-0.0236004 0.0383091 -0.00235181 +-0.0697889 0.172796 -0.0390999 +-0.0291426 0.042089 -0.0296009 +-0.0446441 0.0338442 0.00651202 +-0.000500925 0.121055 0.0369996 +0.022042 0.12426 0.000701449 +0.00803725 0.125889 0.0313 +-0.0517799 0.0840941 -0.0216716 +-0.0145005 0.0842486 0.056982 +-0.0886066 0.113065 0.00725433 +0.0156656 0.0713152 0.0525386 +-0.0164665 0.068805 0.0544258 +0.0182285 0.0820502 -0.0281776 +-0.00610364 0.0386755 0.000846714 +-0.0599938 0.126727 -0.00781868 +-0.0155017 0.100285 0.044225 +-0.0638562 0.0423917 -0.00506847 +-0.0444796 0.0338614 0.0280014 +-0.000499767 0.100727 0.0463954 +-0.0162094 0.172709 -0.0239586 +-0.0690346 0.0338087 0.00696066 +-0.062316 0.158431 -0.019584 +0.00644358 0.129282 -0.00129108 +0.0188124 0.0393785 0.042705 +-0.0847946 0.140657 0.0430258 +-0.0835274 0.0979539 0.0303801 +-0.0241902 0.160559 -0.0136368 +-0.06502 0.161419 -0.0172527 +-0.0772789 0.154395 0.0279022 +-0.0681261 0.15638 0.0193912 +-0.0337268 0.111492 -0.0180397 +-0.0323736 0.176483 -0.0134412 +-0.0291608 0.0806486 0.0445728 +-0.0846331 0.0781756 0.0181083 +-0.0498753 0.106996 -0.0192538 +0.00350083 0.0730867 0.0562031 +-0.0231171 0.0347933 0.0492623 +-0.0616059 0.0342155 0.0188015 +-0.0516 0.0545447 0.0296397 +-0.0763817 0.169448 -0.0429673 +-0.069513 0.17974 -0.0519891 +-0.0588484 0.13671 0.0342246 +-0.0780833 0.1597 -0.0209281 +0.00109253 0.113026 -0.0199046 +-0.0227366 0.157094 -0.00651614 +0.0344933 0.0929192 0.0394802 +-0.000408544 0.126448 -0.00615558 +-0.0805024 0.128853 0.052889 +-0.00020637 0.0947598 -0.0324026 +-0.089811 0.143072 0.0296513 +0.0321792 0.0929416 0.0413986 +-0.0145721 0.168692 -0.0222333 +0.0595491 0.0594739 0.0201736 +-0.0810451 0.0800939 -0.00453207 +-0.0267843 0.0880044 -0.0350453 +-0.040033 0.126629 -0.00388698 +-0.0208083 0.0348218 0.0462671 +-0.082826 0.11472 -0.00162443 +-0.0301654 0.12556 0.01613 +-0.0485613 0.0418518 -0.011173 +-0.0784181 0.163881 -0.0269512 +0.0387541 0.0617571 -0.00875906 +0.0464006 0.0792571 0.0121793 +-0.00359562 0.043415 -0.0257386 +-0.0333921 0.126443 0.0164188 +-0.00106292 0.130975 0.00499363 +-0.0668008 0.060458 0.0159676 +-0.0254977 0.107106 0.0408331 +-0.0682758 0.06442 0.0246162 +-0.0298175 0.125729 0.00888885 +-0.088267 0.147416 0.00925394 +0.0542609 0.050631 0.00222604 +0.0422118 0.100079 0.0191646 +-0.081175 0.14869 0.00117764 +-0.0344163 0.0346761 0.0417292 +-0.0623017 0.163119 -0.0425932 +-0.0298952 0.0565521 -0.0204023 +-0.076686 0.0781369 0.0338733 +-0.0338704 0.102893 -0.0218261 +-0.0355104 0.0775398 0.0419002 +-0.0584924 0.0630612 0.0296076 +0.0454221 0.0889974 0.0141646 +-0.0417964 0.0347181 0.00810808 +0.0363875 0.0505227 -0.00658574 +-0.053281 0.144674 0.0233765 +0.0262687 0.0352193 0.019674 +-0.0168964 0.123328 -0.00656517 +-0.0606083 0.118309 0.0403758 +0.00639612 0.0418759 -0.0239341 +0.0231261 0.0431609 -0.0107258 +-0.00718079 0.0390105 -0.0127195 +-0.00364386 0.0901332 -0.0356262 +-0.00854262 0.033753 -0.0231542 +-0.0124761 0.0531764 0.0512005 +-0.0231395 0.168252 -0.0189417 +0.0233331 0.0354178 0.02435 +-0.000241537 0.0397743 0.0467748 +-0.0723661 0.147118 -0.0228625 +-0.0517688 0.0612265 0.030932 +-0.063068 0.161146 -0.0557557 +-0.0279123 0.0793217 0.046185 +-0.0627986 0.0441541 -0.00325511 +-0.0165065 0.100263 0.0439632 +-0.0217072 0.0582569 -0.0327502 +0.0254642 0.12325 0.0062381 +-0.086501 0.0833246 0.0174861 +-0.074502 0.11613 0.052068 +0.032458 0.0910982 -0.0184345 +-0.0729629 0.155811 0.0249814 +-0.0506733 0.162525 0.00564316 +-0.0697867 0.034416 -0.00452426 +0.0189467 0.0754919 0.0520404 +-0.0165401 0.0997826 0.0440769 +-0.086829 0.0847067 0.0174745 +-0.0474936 0.146975 -0.00223523 +-0.065417 0.154594 -0.0449582 +-0.0614906 0.0590888 0.0075192 +-0.0686207 0.128453 0.0500102 +-0.023162 0.0958328 0.0451924 +-0.0258056 0.0550238 0.0391969 +-0.0102599 0.0407381 0.0498453 +-0.0664749 0.0875478 0.0443297 +0.0581415 0.0538012 0.00818348 +-0.0384918 0.0903063 0.0434643 +-0.0457684 0.132352 0.0133121 +-0.0728932 0.0941961 0.0410307 +-0.0809085 0.111715 -0.000772193 +-0.0833393 0.0979244 -0.00460929 +-0.0671961 0.15591 -0.00355939 +-0.0455114 0.0338265 0.027816 +0.01975 0.0343373 0.00255688 +-0.0875501 0.120326 0.0478169 +0.0353576 0.0505704 -0.00670224 +0.00356645 0.0339958 0.0125338 +0.0590653 0.0552605 0.0161784 +-0.084435 0.0791603 0.0205035 +-0.0255122 0.0349295 -0.0287387 +-0.0724789 0.110508 0.0438845 +0.00447986 0.0385716 -0.0118677 +-0.066989 0.136993 -0.00809827 +0.0384287 0.064558 0.0344028 +-0.0516036 0.0560273 -0.00839821 +-0.00350028 0.110017 0.0429859 +-0.0111634 0.0391658 0.035606 +0.0183426 0.0906063 -0.0259275 +-0.031909 0.154239 -0.00732019 +-0.0800971 0.0773092 -0.00453369 +-0.0190564 0.0920061 -0.0357108 +0.0133608 0.0494245 -0.0271921 +-0.0787339 0.140316 -0.00472414 +-0.0275167 0.116662 0.0324113 +0.00652621 0.104352 0.0432895 +0.0358497 0.0713653 0.0377445 +-0.0918605 0.116299 0.0240619 +-0.0522199 0.061167 0.0299696 +-0.0201447 0.166816 -0.0117812 +-0.0433732 0.122414 -0.0114499 +-0.0645963 0.0430073 0.0358234 +-0.0779043 0.1583 -0.0209193 +0.0367132 0.0547551 0.0317845 +-0.0351109 0.16372 -0.0144674 +-0.0434603 0.109995 -0.0184047 +-0.0576869 0.0677197 -0.0118328 +0.00623854 0.074018 -0.0343382 +0.0443987 0.0959613 0.0131589 +-0.089865 0.120262 0.0458544 +0.0103837 0.0449023 -0.0251665 +-0.0770006 0.139838 -0.00569476 +-0.072687 0.0955359 0.0408041 +-0.0569361 0.046073 0.0125834 +-0.0604913 0.0818799 0.0434166 +-0.0460645 0.151688 -0.00554828 +-0.015331 0.0349099 0.0491212 +-0.0229594 0.0811266 0.055321 +0.0274663 0.0754645 0.0450048 +-0.00267666 0.0374926 0.0135597 +-0.011518 0.0673875 0.054571 +0.013368 0.122467 -0.00997636 +-0.0722821 0.143895 -0.0129091 +0.0454962 0.0443878 0.000424365 +-0.0127602 0.0382241 0.0199007 +-0.091546 0.146121 0.023146 +0.00392744 0.0371222 0.0242968 +-0.0385489 0.119476 -0.0123722 +0.0114833 0.0936471 0.0518498 +-0.0643328 0.146767 0.0386771 +-0.0624894 0.163088 -0.0505885 +-0.0375004 0.0464372 0.040096 +0.0460037 0.0834239 0.0131685 +0.033027 0.108336 -0.00876159 +0.013228 0.0990749 -0.0229052 +0.034148 0.0442132 0.0295363 +-0.0907186 0.113289 0.0113419 +0.0210633 0.106016 0.0411627 +-0.0454948 0.119311 0.0290591 +-0.0676975 0.0607342 0.0101856 +-0.0195364 0.0461211 0.0518679 +0.0161339 0.0672434 0.0514025 +-0.0693216 0.0620201 0.0176481 +0.0429729 0.0944315 -0.00180352 +-0.0494828 0.135763 0.0221907 +-0.060805 0.0867676 -0.0196616 +-0.0247298 0.125997 0.0151584 +0.059297 0.0608379 0.0211666 +-0.080116 0.153024 0.0299773 +0.0574282 0.0681585 0.00377242 +-0.0535498 0.0486673 -0.00635158 +-0.0304741 0.177281 -0.004356 +-0.0855011 0.0792275 0.0175034 +-0.0804698 0.130248 0.0526854 +0.000343862 0.0539275 -0.0306641 +-0.0900062 0.133811 0.0372136 +0.0104354 0.0347372 0.0259595 +-0.0574962 0.0440189 0.0444763 +-0.0573422 0.0335757 0.00237022 +0.0404449 0.0739232 0.0320846 +-0.00464724 0.0496642 -0.0307417 +-0.0311133 0.0510509 -0.015361 +0.0169782 0.128539 0.0144983 +-0.0872732 0.151714 0.0113029 +-0.0345546 0.0409268 0.0482929 +-0.0745628 0.173554 -0.0490908 +-0.0213027 0.0381376 0.0110019 +0.0223647 0.0782061 0.0499784 +0.0111959 0.0879068 -0.0311136 +0.0141654 0.115006 -0.0159235 +-0.0175094 0.116845 0.0368185 +0.0185047 0.0369619 -0.0146835 +-0.0924063 0.129578 0.0112381 +-0.00949945 0.0517772 0.0514996 +-0.0666563 0.0656524 -0.0048951 +-0.0494962 0.100168 0.0429965 +0.00776642 0.130336 0.022539 +-0.0564976 0.0904367 0.0452654 +-0.0648339 0.153263 -0.0390895 +0.0140569 0.12802 0.0248446 +-0.00977705 0.174183 -0.0237537 +-0.0154865 0.0530505 0.0500296 +-0.0627622 0.0810191 -0.0190992 +-0.0385594 0.173184 -0.00190958 +-0.00314149 0.0972112 0.0530078 +-0.0418773 0.107078 -0.0201516 +0.0363342 0.109637 -0.000829727 +0.021507 0.126326 0.01189 +-0.030496 0.0988081 0.0439786 +-0.0769628 0.150462 0.0371334 +-0.0941104 0.126894 0.0182531 +-0.0255083 0.112568 0.0366767 +-0.0746801 0.157704 -0.00556618 +-0.0418449 0.0971142 -0.0220611 +-0.0359493 0.125342 -0.00457539 +-0.0258164 0.0853463 -0.0368715 +0.0497106 0.0482066 0.0259506 +-0.0716942 0.1568 -0.0399156 +-0.0618117 0.0590403 0.0165038 +-0.0714498 0.15679 -0.0419165 +-0.0701989 0.0368637 0.0105096 +0.0597267 0.0636404 0.0201833 +-0.0915748 0.124221 0.0431828 +-0.0690929 0.156328 0.0219534 +-0.0302767 0.0622182 -0.0224251 +-0.00771091 0.0627931 -0.0356131 +0.0394872 0.0513548 0.03224 +-0.0229845 0.0724431 0.0499564 +-0.0290201 0.125445 0.00626167 +-0.0729777 0.138423 -0.00695981 +-0.00991212 0.111561 -0.0201766 +0.000200297 0.0825801 -0.036136 +0.0364442 0.0590953 0.0349595 +0.0364996 0.0928818 0.0370772 +-0.0181329 0.0432293 0.0524811 +0.00280759 0.0350639 0.0204847 +-0.0626379 0.152126 -0.0285986 +-0.0704211 0.15543 0.027334 +0.000301963 0.100099 0.0481787 +-0.049492 0.0917757 0.044207 +-0.015502 0.0897786 0.0564851 +-0.0318792 0.156356 -0.0104816 +0.0416778 0.102863 0.015161 +0.0504722 0.048918 -0.000684915 +-0.0611415 0.0359024 -0.0090437 +-0.0264937 0.098817 0.0439871 +-0.000436317 0.122463 0.0356275 +-0.0875676 0.129767 0.0460862 +-0.0312863 0.0777611 -0.0325602 +-0.0303664 0.112853 -0.0174686 +-0.00773829 0.0684701 -0.0360951 +-0.0647534 0.156678 -0.0475943 +-0.0891175 0.0983455 0.0194044 +0.00833741 0.055373 -0.0305597 +-0.0550257 0.131065 -0.00539027 +-0.0305029 0.0689001 0.0393777 +-0.0596554 0.0343168 0.0331724 +0.0436089 0.0680569 -0.000247417 +-0.0786395 0.163873 -0.0279533 +-0.0574243 0.0613459 0.0260206 +-0.0338728 0.0483909 -0.0193366 +-0.0287306 0.074519 0.0412207 +0.016916 0.0577101 0.0489225 +-0.0184307 0.0347944 0.0485523 +-0.0655112 0.0803784 0.0426229 +-0.0332327 0.160967 -0.000804209 +-0.0533105 0.0541891 0.0115512 +-0.0356689 0.117866 -0.0126779 +-0.0699903 0.034504 0.00971713 +-0.0588141 0.0341524 0.0282501 +-0.0177813 0.0770869 -0.0388032 +0.0445157 0.0467554 0.0289718 +0.00964716 0.128306 -0.00229994 +-0.0666126 0.148623 0.0392621 +-0.0325544 0.0348985 0.0454309 +-0.0623108 0.039732 0.0166963 +-0.0917483 0.122888 0.0433845 +0.0271866 0.0819517 -0.0229154 +-0.00863658 0.0467032 -0.0298179 +-0.0620847 0.166243 -0.0515916 +-0.0912832 0.125583 0.0428488 +-0.0588072 0.0481223 0.00266039 +-0.0913122 0.133748 0.0212171 +0.0482658 0.0433313 0.0185611 +0.00774922 0.0351262 -0.0136823 +0.0357585 0.0562848 0.0339755 +-0.029123 0.166739 -0.016877 +-0.0338028 0.122413 -0.00742547 +0.0216799 0.0415358 -0.0117265 +-0.0257594 0.171231 -0.0110774 +-0.0641199 0.162494 -0.0212451 +-0.0535748 0.155622 0.0115317 +0.0531674 0.0736169 0.0146631 +0.0135129 0.0347107 0.0374491 +0.0227019 0.123147 0.0266031 +0.025252 0.0719314 -0.0249494 +0.0309797 0.118122 0.0225615 +0.0415492 0.0724945 0.03012 +0.000493498 0.119652 0.0380928 +0.0229975 0.123119 -0.000380287 +0.0234322 0.100371 -0.0202365 +-0.0620057 0.153738 -0.0265835 +-0.0398723 0.105663 -0.0203219 +-0.0632416 0.0445478 0.0366988 +-0.0310386 0.154131 -0.00157547 +-0.0042992 0.0348909 0.0408189 +-0.00181562 0.0826307 -0.0368615 +0.0388816 0.0927717 0.0335536 +-0.0335058 0.0760991 0.0415371 +-0.0314963 0.0917789 0.0442247 +-0.0512549 0.0612644 0.0318233 +-0.00281159 0.131227 0.0100802 +-0.0531145 0.157563 -0.00324336 +-0.0635867 0.03486 0.0405057 +-0.0627936 0.15522 -0.0356106 +0.0166245 0.122097 0.0315907 +-0.0106759 0.119083 -0.0141801 +-0.0465015 0.0689677 0.0402969 +-0.0626599 0.0423324 0.0141491 +-0.0515376 0.053149 0.0306286 +0.00413437 0.124074 -0.00964261 +-0.0105331 0.127013 0.0275477 +-0.042312 0.0337552 -0.0130352 +0.0472026 0.0681414 0.0256953 +0.0213439 0.0741385 0.0502206 +0.0156241 0.128368 0.0211329 +0.0358549 0.0843357 -0.0172902 +-0.0533892 0.064921 0.0343521 +0.0273368 0.091573 0.0449418 +-0.0440333 0.0423079 -0.0173091 +-0.0764978 0.13864 0.0490601 +0.00750117 0.0716903 0.0560753 +0.0454321 0.0861887 0.0181684 +-0.0812985 0.084505 0.0328118 +-0.0605375 0.155317 0.003221 +-0.0065332 0.130449 0.0187888 +0.0247646 0.122114 0.0259409 +-0.0711064 0.152637 0.0345827 +-0.0155013 0.0716083 0.0551341 +0.0277791 0.0822205 0.0455159 +-0.0445183 0.0675631 0.0404632 +-0.0772746 0.147261 -0.00486297 +-0.0868795 0.0927253 0.00342064 +-0.0458425 0.0985138 -0.0217256 +-0.0906083 0.131058 0.0342318 +-0.091547 0.146101 0.0191506 +-0.00249086 0.116945 0.0398999 +0.0385734 0.0699568 0.0346425 +-0.0129648 0.116833 -0.0157687 +0.0215791 0.120444 0.0319368 +-0.0899229 0.115405 0.0270455 +-0.0697992 0.0836733 -0.0171139 +-0.0415794 0.128056 0.0149128 +-0.0734779 0.180121 -0.0504836 +-0.0466973 0.0665278 -0.0146823 +-0.0673893 0.156703 -0.00509746 +0.00108438 0.119342 -0.0145393 +-0.019494 0.0842608 0.0571688 +0.0285713 0.0551672 -0.0188053 +0.00650695 0.0731027 0.0564796 +-0.0557862 0.0854763 -0.0214113 +-0.0743851 0.163815 -0.0369793 +-0.0286768 0.123948 -0.00103929 +-0.0301123 0.163751 -0.0154896 +0.0410386 0.099944 -0.00278716 +0.00848446 0.0518256 0.0516867 +-0.051108 0.0530218 0.0319282 +-0.0905758 0.113954 0.0388293 +-0.00470317 0.038779 0.00289117 +-0.0247258 0.0638997 -0.032873 +-0.04111 0.159177 -0.0108205 +-0.0892399 0.140676 0.0351725 +-0.075004 0.141334 -0.0064915 +-0.0463338 0.132474 0.00863126 +-0.0541416 0.034749 0.0443256 +-0.0781873 0.168068 -0.0319708 +0.0328915 0.0696754 -0.0177356 +0.0346158 0.0369318 0.00517598 +-0.0694908 0.124597 0.0526574 +0.0581844 0.0711857 0.0106064 +-0.0378081 0.0841771 -0.022143 +-0.0281622 0.169703 -0.0179592 +0.0305485 0.118199 0.0238252 +-0.0289649 0.0747374 -0.0345478 +-0.0272221 0.0904382 0.0465675 +-0.0514982 0.0848246 0.0453901 +-0.051623 0.0531083 0.0226238 +-0.0398125 0.0899922 -0.0232612 +-0.0236559 0.0709438 0.0478646 +-0.053816 0.0559281 -0.00642904 +0.0603322 0.0636924 0.0181801 +-0.0884616 0.136381 0.00620417 +-0.0394936 0.046476 0.0404962 +-0.0530638 0.0723343 0.0404003 +0.0102711 0.0695708 -0.0315811 +0.0339253 0.115718 0.0108315 +-0.0295473 0.0358282 0.0521362 +0.0116453 0.090034 0.0538428 +0.0450904 0.0875663 0.0201674 +0.0326336 0.0519746 0.0346532 +0.03367 0.072742 0.0398859 +0.024638 0.124378 0.010214 +0.0415181 0.0484385 0.0321463 +-0.044143 0.159411 0.00624881 +-0.0495653 0.047469 -0.00900107 +-0.0894571 0.131034 0.0422704 +-0.075804 0.161028 -0.0299559 +-0.0164919 0.0968814 -0.0286925 +0.0229929 0.0371968 0.0317242 +0.0352506 0.101471 -0.011425 +-0.049558 0.0389942 -0.0116749 +-0.0223649 0.171249 -0.0132085 +-0.0667327 0.078026 -0.0171522 +0.0442166 0.0846846 -0.00180459 +-0.0518774 0.104165 -0.0200373 +-0.0393536 0.0336231 0.00416845 +0.00720473 0.0823989 -0.0333538 +-0.0288578 0.101545 -0.0231915 +0.0245524 0.106048 0.0391612 +-0.0851811 0.0897279 0.0280525 +-0.00334607 0.0347739 0.0411187 +-0.0430221 0.128224 0.015861 +0.0243931 0.0503998 -0.0217952 +-0.0394902 0.0506047 0.0393469 +0.0293799 0.0892796 -0.0205263 +-0.0574934 0.0875623 0.0444505 +-0.0644211 0.0347126 0.0370276 +-0.0169241 0.181626 -0.0193127 +-0.0564978 0.0732565 0.0410435 +-0.0544221 0.144671 0.0284168 +0.0203184 0.0650483 -0.0276666 +-0.0648645 0.041891 0.032665 +-0.0451284 0.159142 -0.00893675 +0.0451235 0.093189 0.0121575 +-0.0577489 0.0479998 -0.00135721 +-0.0606371 0.0448145 0.012064 +0.0495086 0.0638139 0.0293036 +0.0458685 0.0862133 0.0111669 +-0.0531099 0.136165 -0.00197183 +0.0285441 0.0509095 -0.0177614 +-0.013074 0.0383381 0.00704947 +-0.0223231 0.0391341 0.0387105 +0.0393846 0.0429207 -0.00283799 +0.0202147 0.0847891 -0.0269071 +0.00923869 0.035402 -0.0117616 +-0.060367 0.11933 -0.00999174 +-0.0772797 0.157576 -0.0127941 +-0.0732669 0.179344 -0.0490063 +-0.0683896 0.0420777 -0.000309277 +-0.0539058 0.102757 -0.0202213 +-0.0453256 0.169857 -0.00299568 +-0.0616838 0.0659304 -0.00830259 +0.00414244 0.129952 4.9397e-05 +-0.0404915 0.113924 0.0347061 +-0.0942425 0.120105 0.0182851 +-0.0324906 0.080327 0.0414535 +0.0529677 0.0595446 0.0290441 +-0.0904857 0.114242 0.0332623 +-0.0703591 0.181312 -0.0565189 +-0.0475241 0.112407 -0.0169253 +0.0109831 0.0341684 -0.0140433 +-0.089612 0.139257 0.0251846 +-0.0373738 0.0365422 0.044687 +0.0564401 0.0662549 0.00171258 +-0.0581251 0.0334091 -0.00125013 +-0.0407273 0.0696207 -0.0166002 +-0.0669961 0.165196 -0.05701 +0.0131268 0.120538 0.0349816 +0.0367009 0.0812747 -0.0157528 +-0.0077824 0.0784642 -0.0379203 +-0.0647128 0.155185 0.0278857 +0.00549498 0.0951378 0.0528545 +-0.0108057 0.0342947 -0.0255969 +-0.0911579 0.129687 0.0342384 +-0.080608 0.0720682 0.0165498 +-0.073439 0.148627 -0.0298053 +-0.0271937 0.174158 -0.0183459 +-0.0244966 0.0509689 0.0431921 +-0.00162246 0.0450436 -0.027024 +-0.0775221 0.104823 0.0340694 +0.0154861 0.0927165 0.0506449 +-0.0599536 0.123822 -0.00839074 +-0.079866 0.0706372 0.0115498 +-0.0815235 0.0899003 0.0328752 +0.0313378 0.118325 0.00558524 +0.0248331 0.123944 0.0188283 +-0.0898787 0.112224 0.0169361 +-0.0662043 0.065068 0.0280019 +0.0246717 0.0434401 -0.00867806 +-0.0469681 0.134154 0.0128397 +-0.0291377 0.0860908 -0.0335904 +0.0147704 0.0519654 0.0475176 +-0.0296475 0.169744 -0.0079151 +-0.0211888 0.175661 -0.0220113 +-0.0347689 0.0780934 -0.0215038 +-0.013019 0.129549 0.0120959 +0.0421932 0.0662609 -0.00283376 +0.0111358 0.0352671 0.0436641 +-0.0705399 0.100871 0.0399167 +-0.0604975 0.0832903 0.0437356 +-0.0659485 0.126772 -0.00885106 +-0.0702518 0.06756 0.0285092 +-0.00688661 0.108791 -0.0226031 +-0.0786437 0.112204 0.0464731 +0.00637271 0.130879 0.0205945 +-0.066894 0.110895 -0.0121462 +0.0123118 0.0623753 -0.0299343 +-0.0285044 0.109801 0.0380702 +0.00650421 0.0883449 0.0558788 +-0.0545694 0.124267 -0.00721739 +-0.0626588 0.161511 -0.0455953 +-0.0861214 0.132549 0.0473951 +-0.0627776 0.125519 0.0444184 +-0.0177321 0.160293 -0.0123373 +-0.0490182 0.0345781 0.0369526 +-0.0297799 0.106834 -0.0211406 +-0.079558 0.151858 0.0332132 +-0.0404921 0.0648693 0.0415314 +-0.0530069 0.153493 0.0132253 +-0.0339683 0.0485791 0.0404406 +-0.0421354 0.0449426 -0.0173193 +-0.0517467 0.076797 -0.0188523 +-0.060863 0.0583083 0.0137477 +0.0112347 0.0794806 -0.0318525 +0.00351036 0.0856577 0.0572413 +-0.0648576 0.101039 -0.0173044 +-0.0601123 0.0381131 0.0455939 +-0.015494 0.0515277 0.0489706 +-0.0275254 0.1668 -0.00838328 +-0.0365126 0.077567 0.0421306 +-0.0195832 0.1596 -0.0115811 +0.00251466 0.0744821 0.0563666 +0.0589788 0.062133 0.0220601 +-0.066902 0.117219 0.0507079 +-0.0396194 0.0335538 -0.0253204 +-0.0297618 0.107877 -0.0202294 +-0.00601771 0.0990415 0.0504631 +-0.084398 0.0778007 0.013518 +0.0271613 0.0368693 0.0238228 +-0.0589877 0.0335902 0.00921609 +0.029871 0.0968887 0.0415927 +0.00949394 0.0426698 0.0450285 +-0.0697739 0.0382195 0.0100596 +0.0231426 0.0768603 0.0493195 +-0.00501253 0.125042 0.0324689 +-0.00710159 0.0387114 0.00061319 +-0.0177128 0.0599179 -0.0354327 +-0.045698 0.157938 0.00750606 +0.00190257 0.130874 0.00322319 +-0.0444648 0.0945053 0.0429498 +-0.0772757 0.148645 -0.0058688 +-0.069822 0.156776 -0.00162593 +-0.0445001 0.117958 0.0308281 +-0.0409685 0.0462375 -0.0173222 +-0.0305996 0.0509893 -0.0173575 +0.00196704 0.0385066 0.0244659 +-0.00668986 0.0584241 -0.0339312 +-0.0587805 0.0811174 -0.0202922 +-0.0492044 0.143127 0.00539863 +-0.0686509 0.155409 0.00612964 +-0.0404209 0.150087 -0.00469474 +-0.00449521 0.0925603 0.0561444 +-0.000397233 0.131333 0.0167016 +-0.0552402 0.138165 0.0306253 +0.0215752 0.056436 0.0468827 +-0.0248564 0.100174 -0.0239639 +-0.0165731 0.0386082 0.0295958 +0.0232801 0.125085 0.0182493 +0.0228318 0.0357435 0.0257706 +-0.0492021 0.127407 -0.00458885 +-0.0878029 0.112934 0.0313303 +0.0465727 0.0554592 0.0320923 +-0.0288967 0.0499669 0.0438168 +-0.000173892 0.120963 -0.0122496 +-0.0704499 0.154022 0.0317661 +-0.0151711 0.0346724 0.0458457 +-0.0640566 0.138182 0.0390191 +0.0398408 0.105612 0.0201716 +0.0444976 0.0583814 0.0318302 +0.031639 0.0370094 0.0209702 +-0.0104878 0.112778 0.0413082 +-0.0672962 0.0785128 0.0408262 +-0.0760729 0.0675487 0.00755458 +-0.0571409 0.0642584 0.0323718 +0.0261418 0.0859362 -0.0230192 +-0.015502 0.0856307 0.0568812 +0.0189265 0.119915 -0.00924366 +-0.0119328 0.103575 -0.0236984 +-0.00622128 0.0384574 0.0119659 +-0.0779451 0.128117 -0.00684087 +-0.0657248 0.120041 0.0506761 +-0.0623817 0.147548 -0.00757469 +-0.0875561 0.121673 0.0477803 +0.0222529 0.0365833 0.0139797 +-0.00142937 0.126525 -0.00622577 +-0.0226373 0.0386776 -0.0154938 +-0.0648114 0.0335165 0.00450366 +0.0210136 0.0713836 0.0497227 +-0.0348346 0.0347214 0.0345782 +-0.027609 0.0850124 0.048532 +-0.0856119 0.0819492 0.0204815 +-0.0601038 0.0347331 -0.00989443 +0.00929494 0.0956507 -0.0272714 +-0.0915391 0.118654 0.00731945 +-0.00449819 0.0604864 0.0551163 +0.0204818 0.0854612 -0.0266087 +-0.0429251 0.129071 0.00699388 +-0.0789967 0.138332 -0.00474353 +0.0343592 0.0519767 -0.00689954 +-0.0921408 0.125525 0.040859 +0.0516782 0.0702939 0.00352664 +-0.022659 0.0508417 -0.0286643 +-0.00138527 0.0424799 0.0468649 +0.0452912 0.0903849 0.0031762 +0.0401652 0.0717052 -0.00977551 +-0.0905185 0.148805 0.0131551 +-0.0470106 0.149195 0.00904699 +-0.0201874 0.0711262 0.0528634 +-0.0555353 0.0388223 -0.0103544 +-0.0714965 0.154091 0.0314059 +0.0232354 0.0968772 0.0460698 +-0.020264 0.0381835 0.0111715 +-0.0267635 0.177003 -0.0181719 +-0.0755105 0.151351 -0.0138965 +-0.00749931 0.0925693 0.0562701 +-0.063994 0.152679 -0.0352218 +0.0453927 0.0833662 0.00319518 +-0.0137973 0.081348 -0.0391911 +-0.0433806 0.120699 0.0278302 +0.0462048 0.0792353 0.00618416 +-0.0498122 0.141672 0.00439987 +-0.0592291 0.156682 0.00368263 +-0.0525972 0.055954 -0.00763978 +-0.0796979 0.108952 0.0363543 +-0.0334959 0.0335656 -0.024125 +0.0047441 0.131688 0.0100125 +-0.0530342 0.15087 0.0203968 +-0.0794975 0.133078 0.0519067 +0.0231582 0.125381 0.0124998 +-0.0898343 0.122953 0.0457467 +0.0336909 0.115719 0.00499933 +-0.0364989 0.0705154 0.0419282 +-0.0641133 0.155183 -0.0406054 +-0.0303694 0.034667 0.0426012 +-0.0474034 0.126784 0.0277907 +0.0312862 0.107094 -0.0114403 +-0.0399374 0.122179 0.0274746 +-0.0715157 0.106884 0.0372861 +0.0432452 0.100105 0.0111579 +-0.0264035 0.0386467 -0.0143525 +-0.053047 0.162457 0.00378602 +-0.0573985 0.155942 0.000257732 +-0.0104925 0.119661 0.037142 +-0.0107108 0.0656519 -0.03625 +0.0153129 0.0637748 -0.0295702 +-0.047649 0.128193 0.0275289 +-0.0395091 0.0986823 0.0417741 +0.0582857 0.0709436 0.0165587 +0.0144142 0.0418406 -0.0232939 +-0.0406818 0.0636695 -0.0135779 +-0.0700194 0.0408862 0.000674154 +-0.0898984 0.139201 0.0142132 +-0.0368759 0.102855 -0.0211016 +-0.031161 0.177923 -0.0048433 +-0.0216559 0.0380957 0.0145856 +-0.00121026 0.129846 0.000241032 +-0.0176504 0.0583335 0.0507279 +0.0492902 0.0704301 0.0235452 +0.008888 0.126629 0.0301427 +-0.0897638 0.136555 0.0361946 +-0.0903944 0.113745 0.0354564 +0.0327067 0.0659933 0.0401778 +-0.0167299 0.0383654 0.0243772 +0.0403616 0.0561214 -0.00579676 +-0.0891677 0.150225 0.0241083 +-0.0128992 0.165641 -0.0199242 +-0.0596113 0.0581543 0.0105384 +0.0326521 0.108705 0.0315863 +-0.0448105 0.126695 -0.00590468 +0.0440256 0.0973461 0.0131583 +-0.0694635 0.0618968 0.00696654 +-0.0667991 0.06462 0.0265045 +0.0388894 0.060327 0.0314833 +0.0120611 0.11304 -0.0178164 +-0.0635386 0.151731 -0.00361755 +-0.00656125 0.130634 0.0158888 +0.0344174 0.0430387 -0.00433126 +-0.00549778 0.129792 0.00189197 +-0.0499313 0.134148 0.000258943 +-0.0563569 0.155043 0.0148967 +-0.00737522 0.0388161 -0.00139235 +0.0283929 0.0347449 0.011384 +-0.010683 0.0908469 -0.0364652 +-0.048501 0.109818 0.0382143 +-0.0690431 0.169001 -0.0273587 +0.0102657 0.0954683 -0.0270889 +0.0126468 0.0820043 0.0535026 +-0.0507783 0.0613366 0.0327704 +0.00559724 0.128727 -0.00267638 +-0.044734 0.0724552 -0.0176324 +-0.0283736 0.0336157 -0.0231629 +-0.0679859 0.155562 0.00782161 +-0.0939853 0.126886 0.0172543 +-0.0238126 0.0840242 -0.0378907 +-0.0152029 0.16973 -0.0225848 +0.0303318 0.0382842 0.0249985 +-0.0463034 0.0382871 -0.0172845 +-0.012857 0.0968183 -0.0306036 +0.0139515 0.0933972 -0.0268828 +-0.0598089 0.0334419 -0.0052474 +-0.0682308 0.180685 -0.0584278 +-0.0564615 0.0452367 0.0437224 +0.0122525 0.036039 -0.0217262 +-0.0324956 0.119317 0.0295507 +-0.050852 0.0985174 -0.022094 +0.0359226 0.0926166 -0.0140085 +0.0475195 0.0583521 0.0315949 +0.00440154 0.12483 0.0329119 +-0.0725064 0.152612 -0.0398907 +-0.00124079 0.0388178 0.0271443 +-0.0855936 0.143251 0.00719107 +-0.0618131 0.161554 -0.0315928 +-0.0315498 0.0848744 -0.0295692 +-0.0167783 0.0770825 -0.0387039 +-0.024832 0.0930098 -0.0316179 +-0.0356976 0.121856 -0.0088333 +0.0456324 0.0875991 0.0131626 +0.0344601 0.0660136 0.0392214 +0.008313 0.0639391 -0.0318667 +0.0352496 0.0656442 -0.0147977 +-0.0468498 0.0999476 -0.0216953 +-0.0215077 0.111305 0.0395987 +-0.0345319 0.122423 0.0264163 +0.0333657 0.0835669 0.0412915 +-0.0594982 0.143919 0.0350801 +-0.0210079 0.184692 -0.0198306 +-0.09225 0.125605 0.0402535 +-0.0764966 0.117544 0.0520468 +0.0261457 0.100404 -0.0183041 +0.0314049 0.0431209 -0.00494122 +-0.000675964 0.056864 -0.0322097 +-0.0759667 0.135448 -0.00632576 +0.0194608 0.0865014 0.0497298 +0.0480114 0.0447211 0.0227621 +0.0382636 0.109749 0.0121659 +-0.0191397 0.0920316 0.0539979 +0.0148906 0.112386 -0.0170744 +-0.0156084 0.0378086 -0.0269252 +0.0166879 0.0355485 0.0409566 +-0.0719103 0.125286 -0.00863314 +0.0390766 0.0901064 0.0338413 +0.0238446 0.123573 0.0241681 +0.0180905 0.1262 -1.26099e-05 +-0.0241861 0.0351713 0.0521271 +-0.0864494 0.107673 0.0113573 +0.00554907 0.0341243 -0.0169616 +-0.0740319 0.152138 0.0351116 +-0.00773495 0.12664 -0.00628182 +-0.0408221 0.0343419 0.0301151 +0.0589083 0.0700926 0.0167877 +-0.0321537 0.168198 -0.0161712 +-0.0504087 0.0385253 -0.0116443 +-0.0719982 0.132651 0.0504199 +-0.0314938 0.0946271 0.0446065 +0.0415387 0.0610238 0.0295203 +0.0439094 0.0623682 -0.0025277 +-0.0745832 0.173457 -0.038075 +-0.0135013 0.163627 -0.011822 +0.00544999 0.097676 0.0507202 +-0.0233157 0.0695067 0.0475588 +0.0280693 0.112767 0.0337398 +0.0217645 0.057833 0.0471676 +-0.0875176 0.123015 0.0477063 +-0.0696847 0.0339658 -0.0022881 +-0.0251326 0.166747 -0.01768 +-0.0196064 0.177176 -0.0161969 +-0.0704588 0.109521 0.0380634 +-0.068398 0.171087 -0.0357069 +0.0111209 0.0908234 -0.0303895 +-0.0634854 0.149796 0.0371525 +0.00199826 0.122137 -0.0115071 +-0.0620402 0.161574 -0.0285866 +0.0543448 0.0567886 0.0274783 +0.00150309 0.0619973 0.0566118 +-0.0476286 0.0532889 -0.00972253 +0.0589424 0.064749 0.0219118 +0.00619535 0.0866083 -0.0331365 +0.00933928 0.0947261 -0.0283032 +0.0354634 0.113562 0.00993821 +-0.0622597 0.0337543 0.0119702 +-0.0286126 0.0778208 0.0441079 +-0.0291848 0.0649007 -0.0284708 +0.00716146 0.130043 0.000903466 +0.00854238 0.122369 -0.0118647 +0.0207709 0.0422154 0.0420468 +-0.0728566 0.114991 -0.00711315 +-0.062327 0.161572 -0.0265871 +-0.029645 0.121258 -0.00823608 +-0.0358448 0.0971832 -0.0228124 +-0.0241278 0.166765 -0.0179136 +-0.0833762 0.111067 0.0302504 +-0.0714085 0.0715566 0.0335759 +-0.0285052 0.11799 0.0309781 +-0.0436341 0.171062 -0.00299049 +-0.0254563 0.120601 0.0288472 +0.029856 0.0552774 -0.0168073 +-0.0277474 0.076815 -0.0357774 +-0.0305568 0.0845973 0.042796 +-0.0927119 0.117479 0.0363033 +0.00128405 0.131584 0.0158806 +-0.0853072 0.129862 0.0494994 +-0.0379579 0.11044 -0.0188969 +-0.0647113 0.0736859 -0.0158833 +-0.055064 0.0698751 0.038539 +-0.049499 0.0747526 0.0426395 +-0.0315694 0.0461612 0.0465874 +-0.0452548 0.169651 -0.00135352 +-0.0891941 0.0888738 0.0164555 +-0.0424866 0.0396651 0.043393 +-0.0870945 0.0846532 0.00548002 +-0.0530436 0.142764 -0.000526483 +-0.0664988 0.146992 0.0401715 +-0.0606301 0.0613516 -0.00265703 +-0.0321846 0.121876 0.025771 +0.0462743 0.0806463 0.0131736 +0.0355309 0.0527205 0.03199 +-0.0515418 0.0389441 -0.0114685 +0.0203586 0.0565379 -0.0271575 +-0.065976 0.0624665 0.0232686 +-0.0399438 0.0336374 -0.0217314 +-0.0584862 0.0833066 0.0438144 +-0.0449507 0.157934 0.00683281 +-0.0161733 0.168253 -0.0210405 +-0.0807961 0.0747709 0.0205502 +-0.0450711 0.153185 -0.00674331 +0.0122509 0.0766796 0.0546284 +-0.0165839 0.159908 -0.00982549 +-0.000693426 0.0367942 0.0054988 +-0.051438 0.0643214 0.0343604 +0.0173166 0.0411975 -0.0216758 +-0.0350925 0.0344983 0.0186791 +-0.0263041 0.10845 -0.0208491 +-0.0233997 0.0384863 0.0301002 +0.0336304 0.116029 0.0121428 +-0.084184 0.106292 0.0253661 +-0.0668605 0.102389 -0.0157781 +-0.0617744 0.0585089 0.0133805 +-0.037501 0.0634549 0.0414009 +0.0430852 0.0973049 0.0211625 +-0.0895621 0.0902365 0.017449 +0.0358939 0.0591552 0.0359628 +0.00041272 0.0994106 0.0497851 +0.0297429 0.112241 -0.00897067 +-0.0614607 0.155749 0.0232098 +-0.0190678 0.0347878 0.0501361 +0.0278403 0.121636 0.00711658 +-0.0293538 0.0475081 0.0471486 +-0.0878748 0.0861246 0.0134664 +-0.065267 0.132559 0.042478 +-0.0557536 0.0782586 -0.0197587 +0.0163546 0.0537375 -0.0279072 +-0.0768389 0.102007 -0.0101454 +-0.0762457 0.0708701 0.0261488 +-0.0434929 0.0410777 0.0433607 +-0.0820951 0.100566 -0.0055776 +-0.0124865 0.114128 0.0400495 +0.0495003 0.0496818 0.0274333 +0.0157351 0.0562704 0.0489701 +-0.0269138 0.0660937 -0.0314934 +-0.0205217 0.0448565 0.0528623 +-0.0147659 0.0742889 -0.0388052 +0.0292558 0.120076 0.0204837 +-0.0416192 0.0505822 -0.0110011 +0.00560187 0.0957087 -0.0293479 +-0.00449169 0.0575673 0.0538908 +0.0302324 0.0374168 2.32521e-05 +0.0404422 0.105635 0.0151656 +-0.0407521 0.0782965 -0.0192261 +-0.0321404 0.106348 -0.0206098 +0.0240312 0.1242 0.0213823 +0.0163901 0.0476981 -0.0240512 +-0.0540847 0.0341953 0.0274512 +0.0565883 0.0716209 0.0188851 +-0.063971 0.0343652 0.0164556 +0.0222263 0.0790988 -0.0263649 +-0.0480529 0.15019 -0.0042011 +-0.0364615 0.155102 -0.00949574 +-0.0107913 0.165034 -0.0192459 +-0.0720629 0.166594 -0.0198059 +0.0596228 0.0581166 0.00817617 +0.0193916 0.12656 0.0211758 +-0.029103 0.162278 -0.0149633 +-0.0114929 0.118282 0.0379089 +-0.0766495 0.0810868 -0.0106019 +-0.00184307 0.128669 -0.00252946 +-0.0100488 0.177211 -0.0257537 +-0.0544738 0.0624824 0.0299832 +-0.0840733 0.0966087 -0.0036103 +-0.0707265 0.080778 -0.0161096 +-0.0214771 0.122102 0.0291424 +-0.0428932 0.0358165 0.00869673 +0.0135568 0.129672 0.01894 +-0.00280854 0.081222 -0.0368531 +0.00517895 0.130408 0.0230466 +-0.067269 0.167119 -0.0252721 +-0.00747948 0.0919417 -0.035549 +-0.0365036 0.0478079 0.0395886 +-0.0569665 0.0548885 0.00161507 +-0.0744851 0.0663284 0.00571192 +0.0455621 0.0889987 0.00417598 +-0.0292503 0.036802 0.0530596 +-0.0435044 0.0605182 0.0400424 +-0.0915766 0.14196 0.0161629 +-0.0696706 0.14899 -0.0379959 +-0.0770107 0.152809 -0.00688788 +-0.0705529 0.0628294 0.0184736 +-0.044794 0.0870021 -0.0219374 +-0.0107414 0.120001 -0.0131465 +-0.000720709 0.0669492 -0.0343521 +-0.0214315 0.0906458 0.0534872 +-0.0354995 0.0619703 0.0405316 +-0.0628269 0.1502 -0.00476792 +-0.0640626 0.136748 0.0389546 +-0.0474986 0.102884 0.0412273 +-0.0116527 0.129557 0.00826831 +-0.0347732 0.0337732 -0.0208295 +-0.0214023 0.161048 -0.0139992 +-0.0752954 0.15636 -0.00353298 +-0.0688076 0.150274 -0.0424283 +-0.0238582 0.0382811 0.0283891 +-0.0935937 0.118737 0.0143019 +0.0184606 0.0475775 0.0422564 +0.00850874 0.0575011 0.0529664 +-0.0532082 0.149319 0.0233918 +-0.0320154 0.082069 -0.0305372 +-0.0190294 0.0739916 0.05444 +-0.00216392 0.0992947 0.0503069 +-0.0162644 0.11453 -0.017303 +0.0278981 0.113772 -0.00862034 +0.0459848 0.0602104 -0.00435135 +-0.0564936 0.0465915 0.0420515 +0.0169002 0.103075 -0.0211457 +-0.00731691 0.128182 0.0272242 +0.0205916 0.112587 0.0371117 +-0.0176105 0.0435992 -0.0276633 +-0.0274971 0.0619365 -0.0294418 +0.000272434 0.109746 -0.0202486 +0.0416377 0.084481 -0.00877138 +-0.0784224 0.0725404 0.0242536 +-0.00880164 0.0826803 -0.0379328 +-0.0147316 0.0685868 -0.0380387 +0.0333786 0.0476367 -0.00619535 +0.00348805 0.0413645 0.0460201 +-0.0227229 0.0625945 -0.0340193 +-0.0669932 0.138471 -0.00790807 +-0.037224 0.169679 -0.0130647 +0.0535575 0.0477942 0.0072134 +-0.0575878 0.158069 0.0020235 +0.0345395 0.0727588 0.0393885 +-0.0699466 0.072981 0.0361776 +0.020686 0.0367224 0.0371237 +-0.0728722 0.0355547 0.00103582 +0.00487825 0.131703 0.0129125 +0.0580945 0.0523756 0.014183 +-0.0866528 0.145956 0.0348405 +-0.00749813 0.125151 0.0317009 +0.0403042 0.0398794 0.0201445 +0.0355341 0.0875716 0.0391778 +-0.0249398 0.157384 -0.00964166 +0.00350274 0.0489558 0.0513808 +-0.00381736 0.131135 0.0125816 +-0.00837752 0.0353543 0.048476 +0.0140849 0.129676 0.00773008 +-0.010101 0.102023 -0.0240718 +0.0446756 0.091763 0.0191604 +-0.0637279 0.173384 -0.0513558 +-0.031495 0.061765 0.0382603 +0.0366571 0.0968397 -0.0108144 +-0.0285085 0.115306 0.0336868 +-0.00497421 0.126254 0.0309961 +0.00248615 0.104372 0.0430232 +0.00642086 0.116423 -0.0174422 +-0.0636795 0.0658475 -0.00727738 +-0.0891519 0.0956005 0.0104313 +-0.0860649 0.0994533 0.00140442 +-0.0735831 0.152654 -0.0328925 +0.00651157 0.066084 0.0555109 +0.0344822 0.102017 -0.0120204 +-0.0637552 0.15245 -0.00517189 +-0.077532 0.159745 -0.0169143 +0.00251128 0.0661582 0.0562906 +0.0151093 0.0887421 0.0518346 +-0.00945842 0.0387253 -0.00172767 +-0.0471724 0.133935 0.00981498 +-0.0188178 0.158773 -0.00942574 +-0.0194961 0.0654004 0.0509321 +-0.0774489 0.163906 -0.0229523 +-0.0267283 0.156621 -0.00899742 +-0.0465008 0.111213 0.0371008 +-0.00249784 0.0939038 0.0553992 +-0.0715513 0.0342218 0.00249626 +0.0107439 0.130936 0.0122066 +0.0266603 0.0421651 0.0343135 +0.011996 0.0344545 0.00276628 +-0.0653727 0.074532 0.0393295 +-0.0417745 0.172541 -0.00446528 +-0.0368752 0.0345479 0.0395694 +0.00440907 0.131695 0.0141669 +0.0189748 0.0699869 0.0502663 +-0.0690298 0.155601 0.00744971 +-0.0265663 0.0356908 0.0529027 +-0.0621593 0.13389 0.0382274 +-0.0375341 0.0356789 0.0117182 +-0.00861273 0.0434199 -0.0261503 +0.0317849 0.0490447 0.0333888 +-0.0637123 0.0445754 0.0336875 +0.0376665 0.0374378 0.0089364 +-0.058497 0.0904388 0.0452323 +-0.0442728 0.0437529 -0.0143172 +0.0204519 0.0357096 0.00704168 +0.0282191 0.0941913 -0.0197138 +-0.0688839 0.117973 -0.00851105 +0.0338372 0.104851 -0.0110391 +0.024912 0.0505255 0.0392969 +0.0125119 0.107097 0.0421465 +-0.00117532 0.0998676 -0.0237773 +0.0246952 0.0420222 0.0382704 +-0.0398433 0.0971287 -0.022179 +0.0268619 0.108823 -0.0133055 +-0.0799271 0.140795 0.0466609 +0.0180138 0.0808533 0.0524986 +-0.0868879 0.111328 0.0363925 +0.000567537 0.0921561 -0.0336854 +-0.0892038 0.0969467 0.00941895 +0.00816432 0.0904541 -0.0318561 +-0.064746 0.155508 0.00899366 +-0.0911853 0.113324 0.0173235 +-0.00120622 0.113981 -0.0187843 +-0.00924245 0.0407867 0.049553 +-0.00349897 0.0575855 0.053786 +-0.0375091 0.0407357 0.0441865 +-0.0584982 0.108398 0.0387966 +0.0391307 0.0786589 -0.0107679 +-0.0474967 0.100136 0.0424923 +0.0275962 0.102142 0.0400686 +0.0233313 0.0578274 -0.025582 +-0.0510235 0.0723937 0.0407728 +0.0280639 0.121158 0.0057742 +-0.0318235 0.0637622 -0.0194381 +-0.038893 0.0378836 0.042947 +-0.0455156 0.14919 0.00769333 +-0.0724664 0.0678961 0.0260135 +-0.0614699 0.156861 -0.0255852 +0.0511802 0.0687267 0.0256724 +-0.0639329 0.153712 -0.0368711 +-0.055548 0.0628794 0.0303893 +0.0228246 0.0344564 0.00866393 +0.0333583 0.0505553 -0.00686804 +-0.0436286 0.0534388 -0.0110764 +0.0170321 0.128388 0.0173658 +-0.0484634 0.122511 0.0297787 +-0.0908772 0.119982 0.00630567 +-0.0251882 0.121015 0.0283088 +-0.0621056 0.167818 -0.0515918 +-0.0434918 0.0451945 0.0416496 +-0.0261859 0.172679 -0.0191085 +0.0581533 0.0685799 0.00535861 +-0.0308235 0.12443 -0.00028071 +-0.088653 0.0982606 0.00741366 +0.000114549 0.110154 -0.0201623 +0.032895 0.11463 -0.00105927 +0.0393368 0.0984458 -0.00682083 +0.0171551 0.0988258 -0.0226279 +0.0605804 0.0651016 0.017176 +-0.0528261 0.149337 0.0214103 +-0.0213292 0.159914 -0.0125433 +0.000685965 0.124734 0.0330095 +0.0425127 0.0872289 0.028142 +-0.0754377 0.172239 -0.0469918 +-0.00949675 0.039136 0.0341772 +-0.0750736 0.0773173 0.0349007 +-0.0204972 0.104391 0.0429524 +0.044682 0.0804275 0.0241291 +0.0288766 0.0477511 0.0362254 +-0.0590849 0.0584397 0.0175987 +-0.0187468 0.0685918 -0.0381091 +-0.0908268 0.137853 0.0181986 +-0.0934137 0.128236 0.0152484 +-0.0722094 0.155629 0.00630789 +-0.0701241 0.109501 0.0382316 +-0.0833629 0.0829469 -0.00357326 +-0.0219158 0.177176 -0.0142605 +-0.0038834 0.0389548 -0.00453366 +-0.0468309 0.0956366 -0.0220125 +0.0589161 0.0621713 0.00415053 +-0.0518659 0.144686 0.0163701 +-0.0589723 0.0448133 0.0132235 +0.05973 0.0664208 0.00812497 +-0.0911185 0.128332 0.0402364 +0.0082766 0.0667723 -0.0317926 +-0.0557755 0.0826404 -0.0214196 +-0.0254275 0.181837 -0.00892324 +-0.0899879 0.140645 0.0281829 +-0.0725199 0.141421 0.0466976 +0.0173961 0.0343459 0.000212982 +-0.0435004 0.0424369 0.0431009 +-0.0397849 0.155107 0.00553982 +0.0474231 0.0702463 0.00356979 +0.00935197 0.130836 0.00599246 +-0.0466333 0.0562665 -0.0109539 +-0.0134154 0.0393527 0.0385623 +0.0202221 0.0721388 -0.0279345 +-0.0855696 0.139064 0.00222203 +-0.0690425 0.0382325 0.0107396 +-0.0147406 0.129011 0.0158201 +-0.0436768 0.0636379 -0.0137577 +0.058107 0.0694858 0.00643586 +-0.0523916 0.160438 -0.00307609 +-0.0208502 0.120881 -0.00994613 +-0.0144972 0.0772805 0.0565653 +0.0146633 0.0548535 0.0491553 +-0.0872189 0.103599 0.00739967 +-0.013497 0.0701643 0.0543951 +-0.0727808 0.161025 -0.0379399 +0.0541744 0.0495318 0.0218692 +-0.0180637 0.122407 0.0308158 +-0.0437406 0.150663 0.00676805 +-0.0471693 0.128157 0.0265222 +0.000324051 0.0583269 -0.0327186 +0.0183373 0.109817 -0.016338 +-0.0826495 0.137607 -0.000712655 +0.0256839 0.122773 0.00490001 +0.0354824 0.111268 -0.000157004 +-0.0457208 0.0643263 0.038969 +0.0547017 0.0700348 0.00381661 +-0.00761606 0.128811 0.0256727 +-0.0687402 0.156349 0.0177202 +-0.085121 0.108927 0.00536277 +-0.0739548 0.136937 -0.00691386 +-0.00649589 0.0884166 0.05709 +-0.068322 0.144999 -0.0199128 +-0.0891584 0.142048 0.0331685 +-0.0282821 0.0889315 -0.0326167 +-0.0270715 0.0381475 0.00619785 +0.0226739 0.0430625 -0.011732 +-0.0895091 0.147137 0.0278175 +-0.0396286 0.0534411 -0.011004 +-0.0570587 0.0521462 0.00466373 +-0.0421407 0.162162 -0.0108328 +-0.0831356 0.0816494 -0.00150376 +-0.0274399 0.180304 -0.00715734 +-0.055838 0.0927189 -0.0219026 +-0.0624754 0.163097 -0.0475912 +-0.064973 0.0365283 0.0405192 +-0.0434783 0.0690982 0.041489 +0.0407433 0.102836 0.021176 +-0.0588838 0.0468495 0.0306747 +0.00493781 0.100395 -0.0223096 +0.00122691 0.116615 -0.0176232 +-0.035551 0.0451135 -0.0264751 +-0.025842 0.091626 -0.0326108 +0.0509675 0.0463703 0.0218015 +-0.077144 0.164539 -0.0230622 +-0.0613807 0.122656 0.0428396 +0.0364941 0.0454217 0.0304675 +-0.0655017 0.0931357 0.0435076 +-0.0869021 0.114398 0.00327085 +-0.0624965 0.109755 0.0377659 +-0.0219613 0.124807 -0.00195706 +-0.0564977 0.109762 0.0379025 +-0.0489044 0.0413839 -0.0112514 +-0.0464999 0.104301 0.0412272 +-0.0689362 0.173831 -0.0430963 +-0.0274521 0.175685 -0.00821886 +-0.00850113 0.0633575 0.0560799 +-0.0350673 0.0752529 -0.020583 +-0.0702674 0.128451 0.0511564 +-0.0318141 0.156607 0.00124178 +0.0187844 0.127527 0.00803838 +-0.0133229 0.0978873 -0.0277326 +0.00349851 0.0356817 -6.66678e-05 +-0.0714787 0.0630924 0.012741 +-0.0723877 0.16801 -0.0460141 +-0.0314985 0.12639 0.0112101 +0.0103131 0.0935662 -0.0290602 +0.0162881 0.0708862 -0.0299631 +-0.0486922 0.0693814 -0.0146213 +-0.00965082 0.0496857 -0.0310806 +-0.0472721 0.035073 0.043832 +-0.0505797 0.0528906 0.0145102 +-0.00843296 0.037899 -0.0156923 +-0.0276376 0.0383723 -0.00322479 +-0.0394609 0.174124 -0.00699657 +-0.0444987 0.125316 -0.00848377 +0.0413134 0.0732089 -0.00778125 +-0.0654437 0.17819 -0.0606312 +-0.0194942 0.0498847 0.046612 +-0.0470957 0.0376632 0.0453493 +-0.0435029 0.0832144 0.0426759 +-0.0134871 0.123689 0.0319378 +-0.0174978 0.0744121 0.0553624 +0.0333782 0.11597 0.0192002 +-0.0203318 0.0946383 0.0508766 +-0.0412055 0.0419705 -0.0232873 +-0.0815038 0.0885533 0.0328994 +-0.0703591 0.0620888 0.0120183 +-0.0334658 0.0396217 0.0500837 +-0.036771 0.0343273 0.0309808 +-0.0165061 0.126041 -0.00139683 +0.0369819 0.102039 0.0307859 +-0.0207502 0.0626823 -0.0352205 +0.0061481 0.104478 -0.0212191 +0.0323926 0.117262 0.0173907 +-0.0357746 0.08137 -0.0222094 +-0.0375579 0.0341991 0.0273875 +-0.0503289 0.0543622 0.0156654 +-0.0287388 0.076371 0.0428795 +-0.0631791 0.0597373 0.0065938 +-0.00649181 0.104468 0.0439265 +0.00653601 0.0924318 -0.0319265 +-0.0371937 0.168177 -0.0134205 +-0.0375614 0.128197 0.00751871 +-0.0898903 0.135179 0.0352087 +0.037196 0.0699864 0.036159 +0.0276189 0.0564968 -0.0197599 +0.0447325 0.0931835 0.0161662 +0.0398803 0.0927067 0.0314285 +-0.0468272 0.125328 0.0268353 +-0.0715318 0.0347543 -0.000134182 +-0.0859938 0.0978404 0.0272064 +-0.0460065 0.0410789 -0.0142843 +-0.0499829 0.0586014 0.0334591 +-0.0614235 0.172219 -0.0618413 +0.00350193 0.0474397 0.0500395 +0.0226438 0.0875613 0.0487078 +0.0374992 0.0644481 -0.0117672 +-0.00648083 0.111994 -0.0206545 +-0.0934649 0.120072 0.0123034 +0.00542168 0.12935 -0.00135496 +-0.0765071 0.126009 0.0528667 +-0.0308338 0.109919 -0.0183719 +0.018594 0.125548 0.0250901 +-0.0205082 0.0474421 0.0508554 +-0.0252811 0.168282 -0.0104061 +-0.051716 0.150726 0.0145842 +-0.0317716 0.0863018 -0.027557 +-0.0793223 0.151473 0.000118749 +-0.0823192 0.154091 0.0115231 +0.0432611 0.071972 -0.00279979 +-0.0761461 0.154973 -0.00265921 +-0.032878 0.156591 -0.0107994 +0.0360211 0.0628935 -0.0127986 +-0.0321679 0.120788 0.027294 +-0.00521106 0.038426 0.0176436 +0.0377365 0.0388851 0.0205214 +0.0183131 0.127887 0.0164149 +-0.0580398 0.0608775 0.0245548 +-0.0791963 0.108632 0.0349508 +-0.00201716 0.131125 0.0175388 +0.0407504 0.0633497 -0.00473671 +0.0447287 0.0917385 0.00119217 +-0.0534928 0.0848236 0.0453456 +0.00605741 0.0346665 0.039556 +-0.0276244 0.0436594 -0.0289391 +-0.00868086 0.056987 -0.0336771 +-0.058573 0.0613666 -0.00334192 +0.00741372 0.0360842 -0.0231635 +0.00514996 0.0337963 0.0112147 +-0.064123 0.113942 -0.0123233 +0.0527625 0.0723674 0.0204268 +-0.0354974 0.0634085 0.0409173 +0.0287147 0.0352518 0.00538775 +-0.0522813 0.0461425 0.0206748 +0.0547864 0.0548406 0.00018303 +0.00557978 0.101599 0.0456072 +0.00472897 0.0950887 -0.030676 +0.0355131 0.0781566 0.0390786 +0.0402454 0.0843611 -0.0117637 +-0.0605819 0.0468615 0.000669297 +-0.0394923 0.074754 0.042367 +-0.0331798 0.0779303 -0.0275261 +-0.0683095 0.178205 -0.0587107 +-0.00995429 0.0389301 0.0324647 +-0.0495001 0.108413 0.0388185 +-0.0659124 0.113781 -0.0114133 +-0.0404538 0.105662 0.0393313 +-0.0654729 0.17978 -0.0563035 +-0.0614888 0.0918402 0.045217 +0.0333657 0.0640658 -0.0168115 +-0.0809488 0.144539 -0.000825536 +-0.0545043 0.0918174 0.0448821 +-0.0504943 0.147794 0.0128405 +-0.0745085 0.118967 0.0529255 +-0.0596424 0.0629313 -0.00554826 +0.0600133 0.0636587 0.00714888 +0.0272456 0.0746657 -0.023693 +0.0433693 0.0575272 -0.00543691 +-0.0084928 0.0591086 0.0550857 +0.0327041 0.0686805 0.0402125 +-0.0371896 0.166685 -0.0135589 +0.0115191 0.107071 0.0419973 +0.0398757 0.096658 0.0297176 +-0.0882102 0.118977 0.047099 +-0.0794917 0.134473 0.0511764 +-0.0147562 0.0388704 -0.0103641 +-0.0729608 0.135493 -0.0074448 +-0.0829718 0.144576 0.00217748 +0.0121355 0.107265 -0.0192728 +0.00249537 0.0427747 0.0458993 +-0.0590743 0.136941 -0.00615344 +-0.0740187 0.0822617 -0.01463 +0.0274881 0.0349726 0.0165028 +0.0249311 0.118938 0.0303034 +-0.0860712 0.137702 0.0022107 +-0.00546373 0.0337972 -0.022595 +-0.0425018 0.0506116 0.0394181 +0.0044907 0.119648 0.0370088 +-0.066886 0.129814 0.0472408 +-0.033949 0.0667384 -0.0165589 +0.0265464 0.0699406 0.043619 +-0.0486667 0.134012 0.00340208 +0.0201914 0.117982 0.0346477 +-0.033458 0.0353739 -0.0310204 +-0.0251991 0.0536651 0.0400375 +-0.0689113 0.147966 -0.0319204 +-0.0650665 0.151369 -0.0356223 +-0.065894 0.118002 -0.00906639 +-0.00150449 0.0350731 0.0394353 +0.00648653 0.0951017 0.0524749 +0.0322641 0.11194 -0.00663069 +0.0356067 0.113152 0.00567562 +-0.0317604 0.120314 -0.00921321 +-0.0666072 0.0846933 0.0437683 +-0.0745085 0.13306 0.0516401 +-0.0914301 0.133749 0.0202171 +-0.0271327 0.0917299 -0.030613 +0.0356733 0.107346 0.028881 +0.021724 0.104691 0.0421173 +-0.0214953 0.0474568 0.0509792 +0.0189666 0.119003 -0.0102495 +0.0330783 0.0534528 0.0353209 +-0.0796959 0.154266 0.00805358 +-0.0370933 0.175555 -0.00565624 +-0.0324183 0.116998 -0.0137964 +-0.015069 0.117815 -0.0147928 +-0.0541455 0.0482522 0.0392578 +-0.017538 0.18639 -0.0186026 +-0.0486882 0.138613 0.0123943 +-0.0134995 0.0786948 0.0569449 +-0.0792474 0.0803083 0.033239 +-0.0523607 0.12647 -0.00557636 +-0.0261456 0.180134 -0.00803266 +-0.0654933 0.0875673 0.0446215 +0.0410795 0.0647663 -0.00478377 +0.038759 0.104954 -0.0010414 +0.0213206 0.103387 0.0432887 +0.00249002 0.112797 0.0416669 +-0.02662 0.157614 -0.0107103 +-0.0524373 0.0487028 0.0136696 +0.0367672 0.0605146 0.0354804 +-0.0769184 0.0832691 0.0369336 +-0.0650248 0.0337055 0.00787315 +-0.0515046 0.159378 0.00834015 +-0.0547588 0.079768 -0.0207581 +-0.0799475 0.0796892 0.0318714 +-0.0819371 0.129486 -0.00455242 +0.0162371 0.0359566 0.0423025 +-0.052497 0.108432 0.038849 +-0.0330169 0.0750953 -0.0275046 +-0.0367909 0.0856326 -0.0224706 +-0.0909792 0.143017 0.0266346 +-0.0790213 0.169435 -0.0369802 +-0.0224887 0.120777 0.0306794 +-0.0714154 0.063966 0.00470687 +-0.0833338 0.121705 0.0492392 +-0.00224884 0.0410819 0.0473849 +-0.0064961 0.0647536 0.0562043 +-0.0154675 0.0382885 0.0102401 +0.0316901 0.0754766 0.0423249 +-0.0682663 0.0409329 0.00988698 +-0.0397472 0.0753921 -0.0181662 +-0.0404974 0.0534278 0.0394751 +-0.027235 0.0964545 -0.0242996 +0.01346 0.094917 0.0501359 +-0.0101655 0.178729 -0.0267529 +-0.0368558 0.0971787 -0.022608 +-0.0618627 0.061311 0.023361 +-0.00785703 0.0384956 0.0242725 +-0.00828946 0.0422134 0.0491908 +-0.0626761 0.177191 -0.057627 +-0.0197826 0.0770974 -0.0390157 +-0.0283747 0.0368322 -0.0186629 +-0.0678325 0.165206 -0.0549947 +-0.0762767 0.179149 -0.050884 +-0.0126939 0.0585083 -0.0350263 +0.0259904 0.108758 0.0377477 +0.042201 0.0819186 0.0294354 +0.0164623 0.11028 -0.0168584 +-0.000216315 0.0411702 0.046762 +-0.0166283 0.0393036 -0.0275139 +-0.0660426 0.171124 -0.0420386 +0.0456785 0.0862046 0.0141695 +0.00138117 0.044939 -0.0263139 +0.0461205 0.0704224 0.0223322 +-0.0776245 0.0703136 0.0210685 +-0.0756983 0.148597 -0.0138657 +-0.00849865 0.0773628 0.0576515 +-0.0145231 0.0446315 0.0506096 +-0.0683418 0.0625091 0.0209713 +0.0172542 0.0764235 -0.0285503 +0.00803706 0.0343648 -0.0148062 +0.02126 0.0748992 -0.0268979 +-0.0630463 0.113863 0.0385547 +-0.0145507 0.0980154 0.0489953 +-0.0546077 0.131128 0.0350935 +-0.012492 0.061843 0.0546212 +-0.028497 0.0550003 -0.0233987 +0.0217846 0.11532 -0.0122874 +-0.0931885 0.121553 0.0392843 +-0.0522878 0.055669 0.0133058 +-0.0592645 0.138135 0.0336221 +-0.0895773 0.139272 0.0261794 +-0.0653179 0.156011 -0.0499494 +0.0382996 0.103126 -0.00513692 +-0.00322923 0.0355467 -0.0162422 +0.0141613 0.0988714 -0.0229756 +-0.0404979 0.0776396 0.043177 +-0.000517251 0.0386237 0.0468325 +-0.0745039 0.117561 0.0526615 +-0.0404908 0.101464 0.0408992 +0.00150976 0.0562224 0.0541662 +-0.0302058 0.0649962 -0.0264588 +-0.0427465 0.0393017 -0.0242897 +-0.0680504 0.12005 0.0525411 +0.0105239 0.101777 0.0472989 +-0.051788 0.0855011 -0.0215694 +0.0121427 0.124109 -0.00776299 +-0.0714952 0.123214 0.0534125 +-0.0377025 0.0444987 -0.0253388 +-0.0285008 0.0573948 0.0366096 +-0.0557355 0.0753549 -0.0185519 +-0.0136024 0.0377623 -0.0264268 +-0.055443 0.13396 0.033868 +-0.0329956 0.122915 -0.00595413 +-0.0659107 0.120913 -0.00886784 +-0.00952503 0.0920885 -0.0357277 +-0.0437604 0.036567 -0.0252782 +-0.020729 0.181491 -0.0220031 +0.00793492 0.130935 0.0197362 +-0.00287417 0.10736 -0.0221559 +-0.0531678 0.0503031 -0.00638771 +-0.0649059 0.116607 -0.0100071 +0.0311853 0.0491232 0.0343139 +-0.0464498 0.034849 -0.0185661 +-0.0448976 0.168579 0.00154181 +0.0324248 0.0752705 -0.0187807 +0.00488488 0.0387234 -0.0100497 +-0.0607447 0.0752603 -0.0176616 +-0.0575406 0.0387439 -0.00960491 +-0.0874426 0.110454 0.0173412 +-0.0517698 0.0516016 0.0312301 +-0.0727656 0.156832 -0.0339136 +0.0123073 0.0638424 -0.0304488 +-0.00866157 0.0541436 -0.0334268 +0.00183737 0.0373069 0.04638 +-0.0298138 0.0344903 0.0411187 +-0.0674167 0.149888 -0.0375972 +-0.0770317 0.088754 0.0382806 +-0.0857815 0.0897033 0.0272482 +-0.0125983 0.037741 -0.0261872 +0.0182378 0.0893522 -0.0266421 +-0.0766704 0.154203 -0.00290271 +-0.0684648 0.0617211 0.0180797 +0.0505111 0.0637895 0.0291551 +-0.0497918 0.143216 0.0113941 +-0.0616227 0.156855 -0.0295846 +0.0290304 0.0968725 0.0421292 +-0.0756542 0.0679921 0.00394259 +-0.0526765 0.0514226 0.0124143 +-0.0625972 0.0348156 0.0215996 +-0.0544966 0.0791235 0.0440855 +-0.0544133 0.159808 0.00694146 +2.76528e-05 0.0391548 -0.0114154 +-0.00549746 0.0503818 0.0516227 +-0.0646199 0.0359342 0.0410351 +0.0410489 0.0445052 0.0289111 +-0.0356376 0.0548341 -0.0105043 +0.0272051 0.0465425 -0.0127095 +-0.0513967 0.161204 -0.00381805 +-0.0424671 0.124776 0.022048 +-0.0300883 0.0335187 -0.027157 +-0.0362553 0.0336801 0.0101688 +0.0513156 0.0588831 -0.00408417 +0.0399488 0.0688733 -0.0097971 +-0.0617146 0.155302 -0.0255819 +-0.0112103 0.129394 0.0199977 +-0.0552256 0.153277 0.0254807 +-0.0697772 0.0409122 0.00855159 +-0.0257631 0.0755055 -0.0369491 +-0.0601959 0.0422699 -0.00706205 +-0.0475933 0.134581 0.0184866 +0.0267481 0.0659374 0.0438828 +-0.0790343 0.0886679 0.0360671 +0.0606094 0.0637127 0.00915317 +-0.0823359 0.140394 0.000222625 +-0.0792589 0.1445 -0.00280742 +0.0288607 0.118772 0.0260462 +-0.000258207 0.0388058 4.93079e-05 +0.0142249 0.0779815 -0.0305449 +0.0279207 0.111816 -0.0105079 +-0.0649061 0.108122 -0.0141961 +0.0372666 0.0547889 -0.00619261 +-0.0258342 0.159627 -0.000620301 +-0.0761165 0.0874143 0.0388159 +0.0425599 0.101502 0.0121632 +0.0533305 0.0723883 0.0073663 +-0.0814882 0.139397 0.0468344 +-0.0119496 0.127575 -0.00116297 +0.0308488 0.116432 0.0267923 +-0.0342458 0.127284 0.0102001 +0.0488271 0.0733963 0.0130056 +-0.017912 0.059765 0.0509406 +0.0133103 0.0753629 0.0544488 +-0.0896061 0.126751 0.00429509 +0.034401 0.0461473 -0.00601616 +-0.0485411 0.166778 0.000587101 +0.0342862 0.0782566 -0.0167489 +-0.00549615 0.0925657 0.0562617 +-0.0700277 0.153659 -0.0489787 +0.00562336 0.034628 0.021452 +-0.0825014 0.0978733 -0.00561152 +-0.0665019 0.0818141 0.0428543 +-0.0628077 0.166262 -0.0415912 +0.0329576 0.0753133 -0.0177979 +0.0159612 0.0887478 0.0513106 +-0.0348521 0.0972102 -0.0229902 +0.00689753 0.13043 0.00224143 +0.0163113 0.0637479 -0.0291811 +-0.0681449 0.144372 -0.0168262 +-0.0709402 0.170831 -0.0510269 +-0.0618586 0.161576 -0.034591 +-0.05709 0.0562779 0.00261705 +-0.0511762 0.163872 0.00329038 +-0.0295002 0.0688631 0.0391758 +-0.0548706 0.0634738 0.0317723 +0.00519565 0.0838361 -0.0338494 +0.0412244 0.0703917 -0.00779979 +-0.0485608 0.164 0.00493162 +0.0405319 0.0913292 0.030651 +-0.0364055 0.0394201 0.0459276 +-0.0885895 0.126718 0.00227148 +-0.00135158 0.0925397 -0.0341169 +-0.0155034 0.0472755 0.0490261 +-0.0533709 0.0334238 -0.0075905 +-0.0135602 0.174221 -0.0197865 +0.0151695 0.0534137 0.0481113 +0.00249824 0.119676 0.0375233 +-0.0574904 0.0847348 0.0442092 +-0.0706266 0.111419 0.0453421 +-0.0498404 0.122243 -0.0112035 +-0.0580787 0.133988 -0.00600022 +-0.0856455 0.0845341 0.000486997 +-0.0677324 0.0847093 0.0432514 +-0.0516192 0.112658 -0.0171697 +-0.0294883 0.101537 0.0426799 +-0.0562967 0.0548357 0.00668262 +-0.0870689 0.0968011 0.00243877 +-0.0809104 0.126584 -0.00546143 +0.0226682 0.115322 0.0347114 +-0.0702279 0.156078 0.0244771 +0.00613975 0.0976727 -0.0254362 +-0.0654107 0.0782591 0.0414837 +0.0154936 0.104462 0.0445958 +-0.0557216 0.125528 0.0387388 +-0.0708946 0.1037 -0.0131771 +0.0207514 0.10232 -0.0203322 +0.040798 0.105646 0.00916422 +-0.0789759 0.136856 -0.00458832 +0.00163159 0.126824 0.0304308 +0.0217692 0.0444645 -0.0177596 +0.00149843 0.0965502 0.0531993 +0.00416774 0.034456 0.0194982 +-0.022279 0.185099 -0.0171819 +-0.0144819 0.0759021 0.0565083 +-0.062395 0.163038 -0.0545883 +0.0386856 0.0757975 -0.0108084 +0.0230618 0.0389706 0.0372995 +-0.0661823 0.154393 0.00121795 +-0.0751879 0.179229 -0.0530087 +-0.000499764 0.0590718 0.0548831 +-0.0616117 0.16 -0.0305904 +-0.0254372 0.0796492 0.0521904 +-0.087722 0.128407 0.0462822 +-0.0361331 0.122312 0.027301 +-0.0259579 0.0383264 -0.00469023 +-0.0615278 0.0399873 -0.00779984 +-0.0911978 0.147452 0.0151543 +-0.0776353 0.15693 -0.0189052 +-0.048662 0.0345502 0.0387985 +0.00500615 0.0390969 0.0281732 +-0.0664605 0.152204 -0.0437352 +-0.0514963 0.157854 0.00954267 +-0.0893902 0.139278 0.0291842 +-0.092072 0.128303 0.0302461 +-0.0166194 0.0421642 -0.027592 +-0.0880283 0.128084 0.00127828 +-0.06275 0.178179 -0.0598124 +-0.0242491 0.0796961 0.0538111 +-0.0575802 0.14965 0.0326026 +-0.0598499 0.0364094 -0.00954648 +0.0260337 0.0639191 -0.0225668 +-0.0215138 0.185205 -0.0184453 +0.00733204 0.0567933 -0.0307054 +-0.0394107 0.125604 0.021627 +-0.0805747 0.154604 0.0238516 +0.0319556 0.0942571 0.0410831 +-0.0503335 0.0345244 0.0401985 +-0.0521615 0.159088 -0.00368491 +-0.0816591 0.0828436 -0.00556986 +0.0120628 0.0346214 0.0245844 +0.00946799 0.112678 0.0395888 +-0.00501719 0.0348021 0.0425449 +-0.080434 0.0763484 0.0258387 +0.0419394 0.0802864 -0.00678235 +-0.0270715 0.179993 -0.0160072 +-0.00929516 0.17029 -0.0258484 +0.028889 0.0549767 0.0398373 +-0.0324184 0.123701 0.0227019 +-0.00768132 0.0976452 -0.0294292 +-0.0534956 0.0478266 0.0400304 +-0.0637998 0.0852745 -0.0191701 +0.0175395 0.0364962 0.0420884 +0.0289699 0.100814 0.0402993 +-0.0384924 0.0478181 0.0398313 +-0.00649796 0.0457161 0.0472731 +0.00861625 0.13122 0.00857267 +-0.0424707 0.0634258 0.0409808 +-0.0147714 0.163994 -0.0109737 +0.0514504 0.0735674 0.0125302 +0.0157166 0.0461353 0.0435597 +-0.0886232 0.152074 0.0182297 +-0.0732612 0.155462 -0.02991 +0.0560042 0.0728404 0.0157211 +-0.0465551 0.0447198 -0.0107805 +-0.020486 0.18455 -0.0138786 +0.00948927 0.0976692 0.0490505 +0.0112322 0.0342419 -0.000927635 +0.0153695 0.0617406 0.0502582 +-0.0137598 0.0382596 0.0196658 +0.0302365 0.0828976 -0.0200496 +-0.00484087 0.0994589 -0.0252596 +-0.0335771 0.177292 -0.00581839 +-0.0706171 0.160991 -0.0459386 +-0.0381352 0.155099 0.00439417 +0.0262713 0.112733 0.0346521 +-0.0288992 0.0377652 0.0242203 +-0.0741081 0.174769 -0.0407073 +0.0312687 0.106096 -0.0123707 +-0.0467828 0.168244 0.000200438 +-0.0544952 0.0440117 0.0450302 +0.00623037 0.129867 0.000104943 +-0.043169 0.163647 -0.0101027 +-0.0034944 0.103046 0.0439357 +-0.0265042 0.106069 -0.02235 +-0.0577843 0.0811473 -0.0206854 +-0.0358177 0.0886369 -0.024178 +-0.0726405 0.148337 -0.0310398 +-0.0454975 0.111194 0.0370842 +-0.0671848 0.0335335 0.00220964 +-0.0117936 0.0667192 0.0544625 +-0.0609674 0.125285 -0.00834926 +-0.080841 0.0760714 -0.00147772 +-0.0522091 0.118697 -0.0134778 +-0.074349 0.162439 -0.0349528 +-0.0740415 0.112641 0.0489542 +-0.0294567 0.0847909 0.044594 +-0.0204364 0.038385 0.0254029 +-0.0497015 0.070866 -0.0150622 +-0.0525829 0.113848 -0.0164008 +-0.0415348 0.163761 0.00444738 +-0.0644934 0.106993 0.039043 +0.0437981 0.0734503 -0.00176783 +-0.0284962 0.0946634 0.0451029 +0.0309795 0.0506032 0.0357766 +-0.0395331 0.128532 0.0067941 +-0.0424235 0.12018 -0.013117 +-0.0197167 0.103079 -0.0233045 +-0.0430994 0.12944 0.0113807 +-0.0913339 0.117411 0.0283055 +0.026348 0.0463448 0.037827 +-0.0406738 0.0606904 -0.0121867 +-0.071511 0.0930107 0.0417462 +-0.0866623 0.0964635 0.0264805 +0.00386952 0.131337 0.0182591 +0.0282305 0.08443 -0.0217055 +0.0128412 0.0347905 0.0282102 +0.00434097 0.053874 -0.0300717 +-0.0754795 0.0704499 0.0266608 +-0.0699695 0.135529 -0.00821968 +-0.0305143 0.0348089 0.0211376 +0.00750189 0.118272 0.0376599 +-0.0504996 0.108397 0.0385655 +-0.0779682 0.135412 -0.00525448 +-0.0273965 0.0380183 0.0261038 +-0.0520915 0.129726 0.0334448 +-0.0221568 0.157426 -0.00647102 +-0.0562219 0.0560519 -0.00142054 +-0.0817829 0.110167 0.0313299 +-0.0502435 0.0335698 -0.00160666 +0.0331444 0.0584441 -0.0147212 +-0.00651273 0.0760152 0.058184 +-0.0285619 0.108073 -0.0204718 +-0.0157027 0.123907 0.0301351 +-0.0175006 0.10024 0.0438179 +-0.0297515 0.154263 -0.00514597 +-0.0475033 0.113884 0.0346438 +-0.0154952 0.087016 0.0568367 +0.0435889 0.0706095 -0.000776861 +-0.0930208 0.116049 0.0173125 +-0.0783399 0.174997 -0.0480125 +-0.0650728 0.117149 0.0481049 +0.0600369 0.0650499 0.00814341 +-0.0678832 0.147765 -0.0303891 +-0.0802136 0.0813857 -0.00655277 +-0.0356852 0.127701 0.00820492 +0.0154871 0.0990335 0.0473819 +-0.019377 0.127678 0.00978651 +-0.0208657 0.123339 0.0268408 +-0.0553906 0.073233 0.0409139 +0.0560337 0.0553031 0.0245952 +-0.0306612 0.0816984 0.0420491 +0.04335 0.0902653 0.0251673 +-0.0137008 0.0599733 -0.0359611 +-0.0535493 0.045819 -0.00734382 +0.0152704 0.07093 -0.0305648 +-0.0706849 0.0819434 0.0406373 +0.0104915 0.114065 0.0387753 +-0.052073 0.150157 -0.00315276 +0.00150908 0.0458287 0.0477014 +-0.00149907 0.122451 0.0357652 +0.0346578 0.114254 0.0196698 +-0.0263079 0.125672 0.00579971 +-0.0662371 0.173912 -0.0594768 +-0.0111949 0.178453 -0.0296295 +-0.039457 0.0403768 -0.0273046 +-0.0321606 0.153429 -0.00535973 +0.0505072 0.0678423 0.0265215 +0.0377143 0.106919 0.0261871 +-0.0717609 0.172825 -0.0369735 +-0.034656 0.0592094 -0.011649 +-0.0237103 0.0348634 0.0507821 +-0.0409865 0.0355803 0.00929737 +0.0240747 0.0915746 0.0472686 +-0.0576816 0.0336048 -0.0104516 +0.034582 0.0563647 0.0357928 +-0.0304985 0.0631621 0.0381216 +-0.0145978 0.0392398 -0.0269855 +-0.0446029 0.130656 0.0108143 +0.0240159 0.124704 0.0156714 +0.00222038 0.0796794 -0.0348837 +-0.029229 0.179986 -0.0130226 +-0.0371614 0.0338798 0.00980443 +-0.0654857 0.101487 0.0416824 +-0.0386286 0.0534191 -0.0107521 +-0.0743388 0.0659419 0.0131754 +-0.0775178 0.172972 -0.0399134 +-0.0704983 0.0999903 0.0403231 +-0.0754673 0.153642 0.0315487 +-0.0567915 0.158113 0.00751453 +-0.0733158 0.165215 -0.0409863 +-0.0878452 0.096803 0.00445868 +0.02849 0.120167 0.00308975 +-0.0866911 0.107697 0.0133542 +-0.0422556 0.127428 -0.00269381 +-0.0684868 0.135467 0.0467048 +-0.0187173 0.108826 -0.0212527 +-0.0109134 0.038586 0.0018115 +-0.0689089 0.106601 -0.012938 +0.00232768 0.0597693 -0.0328325 +-0.0759088 0.150426 0.0375079 +-0.0642836 0.175364 -0.0612207 +-0.0626162 0.142488 0.0376248 +-0.0388973 0.150052 -0.00339157 +0.0187974 0.0398349 -0.0187285 +0.0404333 0.0725805 0.0320798 +-0.0863763 0.0991625 0.0261078 +0.0544186 0.0725633 0.0195702 +-0.076294 0.155585 0.0106948 +-0.0611522 0.045903 0.0393286 +-0.0167746 0.0756989 -0.0389455 +-0.0578115 0.0619893 0.0271205 +-0.0127071 0.179586 -0.0289228 +-0.0568431 0.0926948 -0.0216401 +-0.0900812 0.150215 0.0221142 +0.0222403 0.0416489 -0.00972259 +-0.0504069 0.135839 0.0247969 +-0.0304966 0.0545819 0.0366047 +-0.0103146 0.180354 -0.0288775 +0.0320122 0.117952 0.0129635 +0.0440424 0.0496996 0.0318585 +0.0393181 0.0603877 -0.00577734 +-0.071953 0.16101 -0.0409434 +-0.0437665 0.168716 0.00196199 +-0.0498819 0.105595 -0.0195612 +0.0217639 0.0458254 -0.0188683 +-0.0921421 0.116123 0.0383102 +-0.0636791 0.157483 -0.0138656 +0.0266706 0.04428 -0.00700704 +0.0433132 0.0818321 0.0274518 +-0.0580456 0.0494852 0.00468232 +-0.0735836 0.159386 -0.00731186 +-0.0544231 0.0344532 0.039385 +-0.00150237 0.089761 0.0564112 +0.015933 0.126357 0.0269718 +-0.0425015 0.0719333 0.0422422 +-0.0589488 0.147198 -0.00200697 +-0.087209 0.0941073 0.00444199 +-0.0120214 0.178126 -0.0292101 +-0.0835465 0.101952 0.0288636 +0.041496 0.0555737 0.0320634 +-0.0025007 0.0675576 0.0566246 +-0.0756877 0.15767 -0.00739081 +-0.0105023 0.0829243 0.0578427 +-0.00627368 0.128136 0.0276028 +-0.0404708 0.109814 0.0374017 +-0.00378356 0.130498 0.0212315 +0.0580765 0.0566038 0.0222343 +-0.0853725 0.111782 0.0273822 +0.0428559 0.0972978 0.0221679 +0.00122739 0.121444 0.0362285 +-0.0274798 0.0446461 0.0507675 +-0.0304832 0.12104 0.0263992 +-0.0371379 0.127502 0.0150528 +-0.0778671 0.177131 -0.0494084 +-0.0775564 0.166657 -0.0379504 +-0.0605167 0.0386224 -0.00865968 +-0.0171147 0.161213 -0.00734926 +-0.0726687 0.161352 -0.00991102 +0.032766 0.0700345 0.0403232 +-0.0458559 0.10138 -0.0215412 +0.017353 0.0374009 0.0430484 +0.000357196 0.0347559 0.0401008 +-0.0604421 0.0427792 0.0246961 +-0.0440271 0.128143 0.0184429 +0.0423724 0.056151 -0.00596664 +0.00534844 0.0596161 -0.0309806 +0.0320447 0.061134 -0.0177676 +-0.00279591 0.0988433 -0.0266823 +0.0289846 0.0664902 -0.0199255 +0.000300027 0.0360761 0.019065 +-0.0250833 0.0379957 0.0175874 +0.0345167 0.0754586 -0.0157294 +0.0153241 0.0623295 -0.0291944 +-0.0609083 0.0612023 0.0236586 +-0.0698972 0.0655268 -0.00153079 +0.00337067 0.115645 -0.0185908 +-0.0315398 0.0589058 0.0377684 +-0.00748372 0.0488969 0.0502433 +-0.0877886 0.0861226 0.0174689 +0.0414464 0.101443 0.020163 +0.0252372 0.0926012 -0.0220221 +-0.0572172 0.0498044 0.00711465 +-0.0384957 0.0719179 0.0419735 +0.0143485 0.0552312 -0.0288146 +-0.0512659 0.0360808 0.0462964 +-0.0880011 0.0941555 0.00641769 +-0.0508873 0.109845 -0.0186279 +-0.0514991 0.112527 0.0359192 +-0.0338144 0.0342727 0.0263277 +-0.0615036 0.0804118 0.0430159 +-0.0663263 0.0606754 0.0176657 +-0.0909825 0.11607 0.0303184 +0.0184707 0.107054 0.0413783 +-0.0243398 0.183957 -0.0138554 +-0.0158705 0.161111 -0.00904539 +-0.0335094 0.0647262 0.0398847 +-0.0782927 0.098997 -0.00960155 +0.0486963 0.0730972 0.0159514 +-0.0478872 0.0335336 -0.00475407 +-0.0154917 0.0883884 0.056678 +-0.077344 0.119067 0.051823 +-0.0560293 0.0674866 0.0368481 +-0.0635813 0.138158 0.0379352 +-0.0217661 0.0670215 -0.0366181 +0.0483442 0.0575601 -0.00531363 +-0.0237817 0.0727523 -0.0377511 +0.0443603 0.0490341 -0.0052894 +-0.0604973 0.0904382 0.0452731 +-0.0627563 0.152415 -0.0301468 +-0.0714195 0.067071 -0.00151156 +-0.0861662 0.147397 0.00721409 +0.011631 0.0474937 0.0464252 +0.0254946 0.0406248 0.0343049 +0.035443 0.111045 0.0256623 +-0.000588677 0.037658 -0.0249499 +-0.0388448 0.0971399 -0.0223049 +-0.0660244 0.166553 -0.0262486 +-0.048499 0.0848032 0.0451307 +0.0371019 0.111384 0.0119604 +-0.00927598 0.177254 -0.0287785 +-0.0389846 0.1533 -0.00797514 +-0.0351198 0.0484277 -0.0173281 +-0.00353807 0.0389271 0.0301841 +0.0132013 0.0864568 -0.0307211 +-0.0390625 0.110364 -0.0188163 +0.033372 0.106071 0.0326127 +-0.0831505 0.0857608 0.0304017 +0.0552187 0.0635647 0.027041 +0.0399168 0.0999289 0.0271558 +-0.0579697 0.0339719 0.0233097 +-0.0137397 0.178677 -0.0217984 +-0.0203244 0.0385446 0.0306811 +0.00122549 0.0359125 0.00298025 +0.0117447 0.0343946 -0.0103375 +-0.0913959 0.132306 0.0102259 +-0.0429194 0.0898997 -0.0223492 +-0.0511515 0.0337361 -0.0129379 +-0.0750027 0.155319 0.00677634 +-0.0771027 0.0689891 0.00817725 +-0.0353224 0.0340121 0.0244595 +-0.0291276 0.0386567 -0.0130433 +0.0303577 0.105377 -0.0136057 +0.0235082 0.12516 0.0112114 +-0.00249775 0.0787967 0.0582683 +0.0533686 0.0732758 0.0102917 +-0.0586915 0.0472669 0.00864036 +0.0328626 0.0738919 -0.0178203 +-0.017795 0.038392 0.00241319 +-0.044502 0.0478297 0.0399289 +-0.0747378 0.0687745 0.000531905 +0.0172248 0.12732 0.0217261 +0.0428517 0.0885116 0.026874 +-0.078089 0.159705 -0.0229182 +-0.00858725 0.0362397 -0.025275 +-0.0867205 0.102198 0.00542391 +-0.0926774 0.131034 0.0232376 +0.0167938 0.128074 0.00445644 +0.0541315 0.0553714 0.0271399 +-0.000925431 0.131188 0.0179397 +0.0288719 0.121048 0.0132077 +-0.00849451 0.0965679 0.0534544 +0.0226575 0.102902 -0.0189538 +-0.0787984 0.113337 -0.0032043 +-0.0099585 0.1135 -0.0182227 +-0.0282274 0.162443 -0.0041123 +-0.082525 0.0896742 -0.00660526 +-0.0477053 0.0708612 -0.0154107 +-0.0435026 0.0465062 0.0407289 +0.00126756 0.0669175 -0.0339113 +-0.0341799 0.0335887 -0.0224091 +-0.0623664 0.0443972 0.0296888 +-0.0374964 0.0676867 0.0416821 +0.00859545 0.0382141 0.0296981 +0.0458872 0.0834155 0.0151706 +-0.0908205 0.132399 0.0292201 +-0.0191683 0.0336751 -0.0214022 +-0.0140554 0.126614 -0.00210251 +-0.0260065 0.0335246 -0.026366 +0.0324259 0.0399358 -0.00240332 +-0.0296544 0.0346993 -0.0301222 +-0.0669615 0.129698 -0.00899609 +-0.0471845 0.0383965 -0.0142868 +-0.0572808 0.0345537 0.0438127 +-0.0627957 0.153425 0.0330074 +-0.0515105 0.13416 -0.00180112 +-0.0434907 0.171345 -0.00503558 +-0.0677742 0.0808646 -0.0174732 +0.00350312 0.0441648 0.0458711 +0.0291321 0.0686302 0.0420784 +0.0132792 0.0343795 0.0214237 +-0.0866978 0.12169 0.0483599 +-0.00350013 0.0801522 0.057807 +0.0371657 0.0997172 -0.00981258 +-0.0447383 0.0738987 -0.0178782 +-0.0605228 0.155495 0.0235493 +-0.0362392 0.151744 -0.00510561 +0.0454797 0.0637982 0.0288243 +-0.0672083 0.0609402 0.0172424 +0.0241031 0.0782197 0.0489777 +0.0442629 0.0672699 0.000591455 +-0.0289948 0.0522303 -0.0223864 +-0.0645013 0.0774777 0.0413253 +0.0444938 0.0959562 0.00517859 +-0.00459579 0.039143 -0.025596 +0.0184671 0.0913654 0.0479185 +0.0146407 0.129582 0.00935921 +-0.0505573 0.0439128 0.0441317 +-0.0141262 0.119616 -0.0126879 +-0.0849191 0.117035 0.0482987 +0.0280536 0.119554 5.13011e-05 +-0.0247655 0.0712486 -0.0365856 +0.0034971 0.091096 0.055256 +-0.0641848 0.0432086 0.0316934 +-0.0881185 0.151555 0.0230923 +-0.0680885 0.16093 -0.05501 +0.0474345 0.0682488 0.00159582 +0.0111403 0.105858 -0.0199086 +-0.0369545 0.0349347 0.0427177 +-0.0604782 0.144516 -0.00363507 +-0.0394712 0.08608 0.0435352 +-0.0548214 0.143869 0.0295389 +-0.028506 0.107069 0.0398546 +0.0281659 0.121502 0.0158045 +-0.0797197 0.143117 -0.0027917 +-0.0616803 0.166235 -0.0555923 +-0.0204271 0.0893191 -0.0369723 +0.0361287 0.085855 -0.0169039 +-0.00251199 0.107268 0.0437857 +-0.0114962 0.0842854 0.0575311 +-0.0738001 0.0651206 0.00865838 +-0.0114808 0.0353662 -0.0177045 +0.0391473 0.0421646 0.0269754 +-0.0565891 0.129759 0.0374849 +-0.0720408 0.171996 -0.0342175 +-0.0139288 0.0883705 -0.0380287 +-0.0562656 0.0335637 0.0133743 +-0.0196985 0.0957936 -0.0295783 +-0.00486881 0.104509 -0.0228932 +-0.0550525 0.129598 -0.0055846 +-0.0584858 0.0776493 0.0431837 +-0.0898534 0.121302 0.00430136 +-0.0191218 0.165312 -0.0179178 +-0.0249563 0.0383168 0.00102848 +-0.0199274 0.0958752 0.0490354 +-0.0574825 0.113918 0.0359516 +-0.00850157 0.101663 0.0440465 +-0.0873724 0.124348 0.0475064 +0.00764213 0.03621 -0.0128239 +-0.0264494 0.0648769 0.0395324 +0.0541546 0.0547912 -0.000791322 +-0.0434926 0.0789866 0.0425224 +0.0241906 0.121901 0.0271611 +-0.0866809 0.0819772 0.0124969 +-0.0717212 0.0344863 0.00580157 +0.0302841 0.11623 -0.00325108 +-0.0737112 0.155478 -0.0269075 +-0.0424683 0.108486 0.0389261 +0.0176716 0.0658898 0.0500991 +0.0494857 0.064014 -0.00214923 +-0.0514961 0.0945888 0.044111 +0.0340749 0.0901032 -0.0173771 +-0.0719584 0.0942006 0.0415089 +-0.0544894 0.0594391 0.0238452 +-0.0877192 0.101 0.0223776 +-0.0758319 0.173116 -0.0385323 +-0.0114857 0.119632 0.0369891 +-0.0313874 0.0581183 -0.0163942 +-0.0157652 0.0728861 -0.0388826 +0.0167046 0.0945555 -0.0241181 +-0.000498244 0.0647983 0.0567029 +0.0256473 0.0420743 0.0363142 +-0.0630437 0.12273 0.0457647 +-0.0540131 0.144678 0.0264098 +0.0135054 0.10711 0.0421551 +-0.00428335 0.124198 -0.00969837 +0.0415325 0.0816649 -0.00777347 +-0.0392229 0.0337594 -0.0179786 +0.0593141 0.0691549 0.00914325 +-0.0219522 0.0382139 0.00717586 +0.0288925 0.112764 0.0331675 +-0.0524014 0.152599 0.0134601 +-0.0628726 0.147915 -0.0152353 +-0.030456 0.158107 0.0014598 +0.0308953 0.0400111 0.0272142 +-0.0757616 0.109947 0.0435791 +0.0253341 0.0591059 -0.0237971 +-0.0261555 0.155801 -0.00568703 +-0.0679463 0.128236 -0.00906158 +-0.0156387 0.0377596 -0.0169892 +-0.0757064 0.112028 0.0472849 +-0.0155135 0.0631057 0.0533345 +-0.0512066 0.125627 -0.00670494 +-0.0896222 0.111892 0.015334 +-0.0493777 0.160927 -0.00574679 +-0.0630274 0.166296 -0.040584 +0.058244 0.0580344 0.0225642 +0.0413547 0.102812 0.0011821 +-0.0162922 0.125122 0.0270033 +0.02338 0.0632213 0.0460213 +0.0609114 0.0623534 0.0131596 +-0.0691061 0.164802 -0.0173282 +-0.0870447 0.0977755 0.0254107 +-0.00849378 0.112803 0.0415796 +0.0145027 0.115416 0.0371643 +-0.0184257 0.066889 0.0526426 +-0.0448982 0.123992 0.0241166 +-0.050497 0.0903958 0.0446608 +-0.0315626 0.0348573 0.0456798 +-0.0684915 0.0902546 0.0428415 +-0.0180785 0.0337977 -0.021304 +0.0043349 0.0389929 -0.00853324 +-0.0830349 0.153941 0.0230111 +-0.0800798 0.103192 -0.0065999 +0.0437731 0.0973301 0.016155 +0.00944321 0.131132 0.0160037 +-0.0514165 0.0627417 0.0327301 +-0.0528926 0.154865 0.0118243 +0.0187407 0.0740964 0.0517477 +-0.0721682 0.0657282 0.00147121 +0.00959045 0.131031 0.00893055 +-0.0694847 0.181423 -0.0563964 +-0.0569551 0.11454 -0.0150747 +-0.0821005 0.0885236 0.0320901 +-0.0174725 0.0383553 0.00432532 +-0.00258809 0.0348892 -0.0237423 +0.0413648 0.0939401 0.0283252 +-0.00375638 0.13079 0.0183493 +-0.0686466 0.0719376 -0.0111307 +-0.0688202 0.180176 -0.0531787 +-0.0397209 0.0710215 -0.0169451 +0.0184831 0.105752 0.0426872 +0.00809551 0.112572 -0.0192987 +0.0206432 0.121117 -0.00652883 +-0.0718516 0.0979698 -0.0147575 +-0.0662716 0.170413 -0.0392349 +0.0237477 0.0605032 -0.0251433 +-0.0340875 0.177472 -0.00744261 +-0.0167857 0.0784752 -0.0385587 +-0.0565291 0.0373798 -0.0104777 +0.00297843 0.0341587 0.014086 +-0.0667756 0.124253 0.0509201 +-0.026364 0.0359692 -0.029405 +-0.0550408 0.0334649 -0.000671931 +-0.0697701 0.0874139 0.0423816 +0.0246944 0.0835826 0.0481083 +0.0199488 0.115322 0.0360728 +0.0383916 0.042968 -0.00337479 +-0.0365829 0.0335193 -0.0246869 +-0.0355007 0.112502 0.0349387 +-0.0689238 0.125301 -0.00884615 +0.0395927 0.0385536 0.0157178 +-0.0889313 0.0875027 0.0114635 +0.0448665 0.0945715 0.00517989 +-0.0477042 0.0664777 -0.0141832 +-0.0434727 0.125255 -0.0084227 +-0.0166904 0.169787 -0.0155577 +-0.0134983 0.0501789 0.0495792 +-0.0624968 0.0833205 0.0441176 +-0.0342132 0.0345231 0.0384015 +0.043295 0.084533 0.027498 +-0.0819819 0.112797 -0.000848269 +0.0121624 0.129948 0.0198557 +-0.0674677 0.10143 0.0408399 +-0.0626754 0.059895 0.0191264 +-0.0367892 0.0459324 0.0404864 +-0.027194 0.0764697 0.0455544 +-0.0824053 0.0748814 0.00852871 +-0.0656294 0.0642362 -0.0044412 +0.032725 0.116988 0.0160848 +-0.0764226 0.102162 0.0358668 +0.00148048 0.0952613 0.0542408 +0.0228866 0.122341 0.0280976 +-0.0584486 0.139576 0.0330542 +-0.0402835 0.123242 -0.0103332 +-0.012241 0.0406566 0.0504983 +-0.0489426 0.0614374 0.0351759 +-0.0844851 0.0778045 0.00951927 +-0.0369817 0.156591 0.00432745 +-0.0882804 0.103688 0.0163664 +-0.0258065 0.0825691 -0.0373737 +-0.0355052 0.102861 0.0407303 +-0.0524183 0.131115 0.0329855 +-0.0227031 0.175691 -0.0136597 +0.050697 0.0684106 0.00144017 +0.000504835 0.0911354 0.0558722 +0.00231832 0.0583343 -0.0324165 +-0.0148886 0.169807 -0.0164639 +-0.0722033 0.152534 -0.0417656 +-0.0134817 0.073078 0.0557755 +-0.0255231 0.109882 0.0391184 +-0.0655581 0.135384 0.0421104 +-0.024745 0.0698061 -0.0360534 +0.0559546 0.0524347 0.0227151 +-0.0283257 0.118773 -0.011655 +-0.0335185 0.0974234 0.0440535 +-0.0817699 0.0748179 0.0155353 +-0.027189 0.162441 -0.00437298 +-0.0267454 0.0711222 -0.0350441 +-0.03015 0.171175 -0.0170282 +-0.026605 0.06607 0.0397555 +-0.074698 0.179765 -0.0510072 +0.0143367 0.0504741 0.0468665 +-0.0594975 0.111137 0.0367915 +-0.0346758 0.127158 0.0144691 +-0.0465015 0.0847604 0.0446321 +0.00381747 0.0354686 0.0455691 +0.0172732 0.0792708 -0.0288683 +0.0323738 0.104756 0.0346971 +-0.0794458 0.0813481 -0.00752304 +-0.0312226 0.0367355 -0.0304453 +-0.0110616 0.168437 -0.0238044 +-0.0579369 0.119806 -0.0105246 +-0.0337394 0.0355643 0.0323212 +0.0312129 0.0525777 -0.012761 +-0.0346988 0.120729 -0.0096591 +-0.0388776 0.0364147 0.043017 +-0.0271127 0.16377 -0.0158754 +-0.0114338 0.0347606 0.0448027 +-0.0897559 0.114544 0.00631807 +0.0408171 0.04213 0.0255289 +-0.0648854 0.102482 -0.0170908 +-0.0137359 0.061178 0.0537969 +-0.00359581 0.130946 0.00835725 +0.0439346 0.0959403 0.0181595 +-0.0194977 0.104404 0.0429832 +-0.0691323 0.0776098 0.0394254 +-0.00248627 0.097432 -0.0292057 +0.00445885 0.0387258 0.0265895 +0.0492859 0.0567642 0.0307116 +-0.077476 0.164468 -0.0240677 +-0.0666867 0.175728 -0.049503 +-0.0251661 0.0664206 0.0424455 +-0.027701 0.0549269 0.0368456 +-0.018943 0.164042 -0.0169159 +-0.0435133 0.0846552 0.0431729 +-0.0888345 0.136443 0.0400961 +0.00149473 0.112812 0.0419217 +-0.0298299 0.09304 -0.0247313 +-0.0836967 0.0790161 0.00252063 +-0.000924151 0.039273 -0.0117161 +-0.0567677 0.0811908 -0.0210238 +-0.0934681 0.120116 0.0253121 +-0.0429479 0.170625 -0.000616016 +-0.075975 0.156283 -0.00563956 +-0.00861288 0.0384077 0.0151551 +-0.00160584 0.0434015 -0.0251635 +-0.00451637 0.113738 -0.0185133 +-0.0780673 0.0690482 0.0132523 +-0.0237986 0.0784163 -0.0381462 +0.0404558 0.0643575 0.0302495 +0.00150103 0.0576486 0.0543674 +-0.0314973 0.0746234 0.0406619 +-0.0430409 0.0337266 -0.000289053 +-0.0303409 0.0462461 0.0481864 +0.0215433 0.04083 0.0414017 +-0.0328294 0.0901297 -0.0245803 +-0.0654933 0.0370192 -0.00733845 +-0.0128512 0.129269 0.0078276 +-0.0102634 0.129467 0.00444971 +-0.0525768 0.0530264 -0.00686565 +0.0152424 0.0737083 -0.0300265 +-0.0523202 0.0474101 0.0149978 +-0.03228 0.059616 -0.0144015 +0.0262796 0.0733084 -0.0244949 +-0.091934 0.128302 0.0312437 +-0.0556539 0.153362 0.0267778 +0.00449629 0.118272 0.0381357 +-0.00902947 0.129018 0.00125187 +-0.00169837 0.0391357 -0.00987107 +0.0277845 0.0849076 0.045525 +-0.0241779 0.1712 -0.0197595 +0.0450874 0.0847681 0.0221666 +-0.0251342 0.0878826 0.0516343 +0.00641806 0.0347537 -0.00236123 +-0.0411191 0.111396 -0.0179091 +0.027653 0.0506012 0.0379885 +0.0219297 0.123716 0.0263137 +-0.0688294 0.148429 -0.0341374 +-0.0315292 0.124197 -0.00202254 +0.00150698 0.0801002 0.0571866 +-0.0615835 0.0366556 0.0444374 +-0.0481389 0.160609 -0.00688834 +-0.0254054 0.0766649 0.0494071 +-0.0774728 0.155537 -0.0149084 +-0.0401214 0.159176 -0.0112287 +0.0596647 0.0691741 0.016158 +-0.011487 0.110004 0.0424075 +-0.0381186 0.128235 0.00584498 +0.048576 0.0464424 0.0249843 +-0.0923754 0.118793 0.0312942 +-0.0639323 0.123848 -0.00887264 +-0.0798905 0.126603 -0.00582167 +-0.0413231 0.0462396 -0.0163116 +-0.0908165 0.145736 0.0263481 +0.0446156 0.0959646 0.00916087 +-0.0821218 0.075868 0.0188618 +0.05068 0.0673838 0.000483718 +-0.0501479 0.0515412 0.017644 +-0.00617289 0.130741 0.0117189 +-0.051836 0.0956238 -0.0221428 +-0.074878 0.122304 -0.00772392 +-0.00159817 0.0419657 -0.0250292 +-0.0474982 0.162268 0.00647513 +-0.0331161 0.0498057 0.0395103 +0.00234342 0.0510926 -0.0302041 +-0.0851404 0.125756 0.0494653 +-0.0699016 0.160977 -0.0489386 +-0.0798846 0.0706301 0.0125498 +-0.0697873 0.0819627 0.0411407 +-0.0547576 0.161266 0.00105716 +-0.0895055 0.0902528 0.0184453 +-0.0261075 0.162258 -0.0150297 +0.046501 0.0611194 0.0308227 +0.0238707 0.0929061 0.0469915 +-0.0533713 0.0334322 -0.00211203 +0.0417012 0.085878 -0.00880084 +0.0288139 0.110493 -0.0110929 +-0.083716 0.087071 0.0295098 +-0.0798758 0.155212 0.019678 +0.0049172 0.0339971 0.00916661 +0.0160048 0.0590435 0.0493667 +0.0573849 0.0699459 0.0206376 +0.0345802 0.103262 -0.0113359 +-0.0797481 0.0789376 0.0314228 +-0.0346581 0.0340056 0.0228095 +-0.0631272 0.0656833 0.0316274 +-0.0145321 0.0459268 0.0498594 +-0.0364091 0.0339112 -0.0194195 +0.0181222 0.116444 -0.0134944 +0.0341932 0.113962 0.0237708 +-0.0761778 0.148614 -0.0108668 +-0.0044937 0.0473352 0.0489501 +-0.0328741 0.0807299 -0.0285171 +-0.0724981 0.121807 0.0536688 +-0.0657234 0.153927 0.0319321 +-0.0548973 0.112625 -0.01673 +0.0464212 0.0764513 0.00819032 +0.0272261 0.0451183 -0.00768323 +-0.0629092 0.156144 0.021238 +-0.0631603 0.151216 -0.00238889 +-0.0347632 0.076687 -0.0214942 +-0.0906385 0.147509 0.0131579 +-0.0122779 0.122169 -0.00937841 +-0.0588974 0.156171 0.00210438 +-0.0123378 0.123047 -0.00831897 +-0.0496312 0.0590927 -0.0108209 +-0.0409256 0.153594 0.00561766 +-0.0405007 0.0860467 0.0431081 +0.0445131 0.0735224 0.0237705 +-0.0213844 0.123724 -0.0049697 +-0.0633941 0.159891 -0.0485891 +0.0364077 0.044553 -0.00488844 +-0.0739928 0.155924 0.011504 +-0.0111043 0.0366055 0.0502176 +0.03375 0.0929319 0.0401542 +-0.00645978 0.0918654 -0.0354548 +-0.0827096 0.131285 0.0511192 +-0.0835459 0.133987 0.0490485 +-0.0294951 0.0617035 0.0376524 +-0.0493817 0.138599 0.0163919 +-0.055623 0.120216 -0.0109924 +-0.00449347 0.121049 0.0367461 +-0.048904 0.144756 0.0084067 +0.00645901 0.0392685 0.0301228 +-0.0913214 0.114759 0.0373166 +-0.0265805 0.0377426 0.0157053 +-0.00572231 0.0669806 -0.0352658 +-0.0525421 0.050441 0.0296546 +0.0313831 0.11825 0.0184294 +-0.0288441 0.0958675 -0.0242091 +-0.0149484 0.177196 -0.0200335 +0.0230906 0.0973761 -0.0211755 +-0.0134888 0.11412 0.0398002 +-0.0652337 0.169622 -0.0599681 +-0.069106 0.161031 -0.0101008 +-0.0147444 0.0700214 -0.0382575 +0.000412578 0.0376462 -0.0248548 +-0.0694764 0.165214 -0.0509787 +-0.0817245 0.100671 0.0313188 +-0.0464909 0.0704463 0.0410366 +-0.0604958 0.0890419 0.0453253 +-0.0356646 0.155102 0.0026804 +0.0313895 0.0549645 0.0381834 +-0.0390844 0.149487 -0.000628748 +-0.0799141 0.109193 0.0343277 +-0.033406 0.159477 0.0024166 +0.0461298 0.0806288 0.00519237 +-0.00455042 0.0384226 0.0105194 +0.054633 0.0708998 0.00492223 +0.0466692 0.0754291 0.0122452 +-0.0510158 0.118895 -0.0136999 +0.0442088 0.0931449 0.0211603 +-0.026052 0.036748 0.0540507 +-0.0121151 0.0568039 0.0522997 +-0.0605217 0.0372227 -0.00906293 +-0.0505374 0.138563 0.00240881 +-0.0499851 0.135487 0.00142097 +0.0375229 0.0590309 0.0330268 +0.00350924 0.0842701 0.0573364 +0.0132839 0.0652538 -0.0302637 +-0.0742776 0.161639 -0.0118948 +-0.0507685 0.164108 -0.00292996 +-0.0198709 0.104468 -0.0228058 +0.0376047 0.0616532 -0.0107499 +-0.0773811 0.108845 0.0387481 +0.0226208 0.102094 0.0434114 +-0.0882171 0.135133 0.0423395 +-0.0506614 0.0515945 0.0196285 +-0.0603044 0.155837 0.0105687 +-0.0124866 0.11001 0.0423152 +0.02167 0.125998 0.00768374 +0.0323984 0.0396183 0.0260504 +-0.0709343 0.126767 -0.00893718 +-0.0135132 0.116917 0.0382221 +-0.0116656 0.051126 -0.0319435 +-0.0309822 0.125744 0.00553845 +0.0459345 0.0862193 0.0101703 +0.00749696 0.119642 0.0368719 +-0.00350244 0.107276 0.0438161 +-0.0521339 0.128852 -0.00413976 +-0.0786185 0.152695 0.0319953 +0.0163345 0.0781449 0.0535802 +0.0377538 0.0771288 -0.0117747 +-0.0215296 0.0387791 0.0338148 +-0.0350693 0.0384092 -0.00660408 +-0.0919891 0.124178 0.0422069 +-0.0444587 0.11222 -0.0167423 +-0.0171725 0.0985232 -0.0244048 +-0.057494 0.112512 0.0360215 +0.0396241 0.0900718 0.0328369 +-0.0621913 0.163125 -0.0405922 +-0.0255449 0.0384207 -0.00839698 +0.0162606 0.0736784 -0.0295549 +-0.0663455 0.040996 0.0121932 +-0.0292314 0.114996 -0.0157151 +0.0252254 0.095572 0.0454222 +0.00388853 0.130454 0.00153712 +-0.0454814 0.0335414 -0.0134702 +-0.08387 0.148679 0.0348187 +-0.0174749 0.184587 -0.0183292 +0.0188962 0.0370007 -0.0126843 +-0.0625159 0.163122 -0.0305925 +-0.0433987 0.03363 -0.0131325 +0.0291629 0.037982 0.025034 +0.0129127 0.129715 0.00445998 +0.0182606 0.0778122 -0.0281935 +-0.0476906 0.0356242 -0.0142735 +-0.0190478 0.0404047 0.0529202 +-0.00364871 0.0982082 -0.0280452 +-0.0195235 0.184467 -0.0220738 +0.00382729 0.106411 -0.0207174 +0.00350781 0.064793 0.0565955 +-0.0205171 0.0383642 -0.00178242 +0.0122268 0.0836141 -0.0306261 +-0.0444606 0.147723 0.0056898 +-0.0869664 0.148754 0.00824898 +-0.0689807 0.155012 0.0293114 +0.0302795 0.0795477 0.0438394 +-0.0660235 0.174935 -0.0492702 +-0.0804891 0.133061 0.0515278 +-0.0447252 0.109884 -0.0183457 +-0.0902839 0.137831 0.0151959 +-0.0702292 0.153353 0.0333614 +-0.0915979 0.146114 0.0211525 +-0.0905232 0.122929 0.0450175 +0.00448177 0.0951431 0.0532987 +-0.0234909 0.120747 0.0300444 +0.0274801 0.0445395 -0.0065618 +-0.091814 0.116108 0.0403567 +-0.0537253 0.151161 0.0246275 +-0.0205455 0.126353 0.00242085 +-0.00205946 0.129266 -0.00113907 +0.00252933 0.0758769 0.0564116 +0.00824452 0.129671 0.000311795 +-0.000397685 0.0923281 -0.0338988 +-0.0559448 0.126938 0.0384169 +-0.0428369 0.0942645 -0.0226678 +-0.0598806 0.105454 -0.017999 +-0.0837054 0.10067 -0.00361944 +-0.0545817 0.152467 0.0257328 +0.0103827 0.0365006 0.0297934 +-0.0898089 0.133793 0.0332137 +-0.0618767 0.15376 -0.0175826 +-0.0665983 0.155819 0.0112334 +-0.0454977 0.108441 0.0393231 +0.000688563 0.105475 -0.0216898 +0.0156183 0.0348875 0.0323047 +0.0598096 0.0622539 0.00613597 +0.0222628 0.0359732 0.0163557 +-0.0492522 0.165358 0.00274428 +-0.018422 0.0583296 0.0500808 +-0.0233794 0.126748 0.0127038 +-0.0635915 0.172518 -0.0506017 +0.000120368 0.0351316 0.0162576 +-0.0286059 0.0564269 -0.0233938 +0.0373643 0.110979 0.0106211 +-0.0143444 0.162546 -0.0104323 +0.0174821 0.10039 0.0467276 +0.00834248 0.0609508 -0.0305126 +-0.0650557 0.129761 0.0446036 +0.0584157 0.0647883 0.022872 +0.0450662 0.0889731 0.0191643 +-0.0554099 0.0334223 -0.00251784 +-0.00144558 0.106667 0.0437112 +-0.0626402 0.0627915 -0.00434322 +-0.0406608 0.0335117 -0.0254825 +-0.0621215 0.15372 -0.0285871 +-0.0304827 0.0538056 -0.016375 +0.0276877 0.0607373 -0.0218456 +-0.0332153 0.107417 -0.0197253 +-0.0709666 0.138448 -0.00754922 +-0.0554983 0.0973521 0.0432389 +0.0051585 0.127708 0.0288034 +-0.0497318 0.0354763 -0.0126201 +-0.0713898 0.160567 -0.00801414 +-0.0135985 0.108507 -0.0209218 +-0.0701499 0.0695315 0.0320822 +-0.0618453 0.155287 -0.0285878 +-0.0774937 0.145636 0.0432119 +-0.0499442 0.140127 0.0163925 +-0.0622517 0.147555 -0.00557481 +0.0112895 0.0624411 -0.0303571 +-0.054281 0.0573695 -0.00641449 +-0.0468263 0.128888 -6.3255e-05 +0.0167125 0.0343686 0.00192575 +0.025374 0.0938744 -0.0213667 +0.0374202 0.110869 0.0135214 +-0.0202897 0.0381028 0.016664 +0.0122214 0.13032 0.0170232 +-0.0424979 0.0817557 0.0420871 +0.0247834 0.123596 0.021665 +0.0458295 0.0890233 0.00817039 +-0.0246722 0.05361 -0.0281576 +-0.0368219 0.0900544 -0.0239252 +-0.0331266 0.0338175 0.0106794 +-0.0863242 0.111849 0.0243217 +-0.0881544 0.121251 0.000301062 +-0.0639205 0.112438 -0.0133308 +0.00114374 0.101639 -0.0226194 +0.0117494 0.0671858 0.0538619 +-0.0177987 0.0336176 -0.0248428 +0.0384483 0.10837 0.0201721 +-0.0895436 0.0902218 0.014448 +-0.0441053 0.129054 0.00361434 +-0.0447524 0.033564 -0.0207541 +-0.040486 0.0346908 0.0404235 +0.0158804 0.124131 -0.00578699 +-0.0301445 0.169695 -0.0171502 +-0.0906194 0.139243 0.0211829 +-0.0653253 0.142516 0.0407395 +-0.0320761 0.0447291 -0.0281131 +-0.0764158 0.0699842 0.0233785 +-0.0254497 0.052221 0.0403383 +0.0262523 0.076131 -0.0243472 +-0.0174971 0.101623 0.0437353 +0.00533357 0.055349 -0.0305496 +-0.0493266 0.134948 0.0237381 +0.0053984 0.122421 -0.0118951 +0.038604 0.108395 0.0191762 +-0.0638345 0.0431637 0.0378429 +-0.0748055 0.0863518 -0.0148055 +0.0157558 0.127182 0.025475 +0.0337414 0.0384723 -6.48206e-05 +-0.0564853 0.0791423 0.0441771 +0.0234983 0.102092 0.0429315 +-0.00524932 0.101176 -0.023207 +-0.0804177 0.153092 0.00488677 +-0.0764988 0.13725 0.0499203 +-0.0550791 0.134447 -0.00412579 +0.0139517 0.124505 -0.00617757 +-0.0839821 0.127994 -0.00381712 +-0.0571198 0.115445 0.0365816 +-0.0622396 0.155257 -0.0325976 +-0.0454972 0.0761548 0.042184 +0.0313815 0.0461664 -0.00629419 +-0.0438412 0.0942345 -0.0223045 +-0.0236613 0.0852675 0.0544729 +-0.0616609 0.147135 -0.00399772 +-0.0600825 0.0413306 0.0227014 +-0.0105535 0.180959 -0.0288535 +-0.0676833 0.155656 0.026832 +0.0282931 0.118599 0.0272385 +-0.0871972 0.102223 0.00642609 +0.0103624 0.0494805 -0.028102 +0.0154246 0.0685991 0.0521564 +-0.0416312 0.117641 -0.0144485 +-0.0276264 0.046347 -0.026964 +-0.0916136 0.132311 0.0112256 +0.0178346 0.0505132 0.0449253 +-0.0444935 0.155066 0.00750552 +-0.037487 0.115255 0.0329307 +-0.0185008 0.119534 0.0344711 +-0.052516 0.0452355 0.0436109 +-0.00977222 0.11683 -0.0157853 +-0.0558279 0.0635792 0.0314789 +-0.0607324 0.0592584 0.00571875 +-0.0621725 0.160005 -0.022587 +-0.0603904 0.152423 0.000272984 +-0.0697355 0.134074 0.048407 +-0.0688943 0.103764 -0.0141878 +-0.0871513 0.117629 0.0474896 +0.0463722 0.0764454 0.00719365 +0.0582269 0.0686747 0.0208601 +0.0410646 0.07659 0.0312229 +-0.0298717 0.104385 -0.0225787 +-0.0346365 0.0766699 -0.022492 +-0.0639324 0.147049 -0.0189093 +0.0414492 0.10286 0.0161642 +0.041276 0.104245 0.0131611 +-0.0550666 0.151635 -0.00215779 +-0.0723648 0.0763024 0.0368597 +-0.0166996 0.0540293 -0.0329391 +-0.0108856 0.107334 -0.0222671 +-0.0609787 0.126745 -0.00811044 +-0.0495024 0.109811 0.0380885 +-0.0814376 0.0978185 -0.00662583 +-0.0771326 0.163938 -0.0219397 +-0.0690818 0.18144 -0.0564572 +0.031034 0.0964814 -0.0161287 +0.0445032 0.0555996 0.0323503 +-0.0335401 0.0732865 0.0413362 +0.0315592 0.035603 0.0149292 +-0.0625155 0.0344693 0.0376364 +0.0223706 0.0505198 -0.0231651 +-0.051638 0.0663266 -0.0117848 +0.0132667 0.0519749 0.0488584 +-0.0568732 0.108333 -0.017952 +0.0448639 0.0833492 0.023175 +-0.0316705 0.0806285 -0.0315587 +-0.0714676 0.155482 0.0269686 +0.0118001 0.034659 0.0389456 +-0.0860496 0.128472 0.048867 +-0.0155071 0.175699 -0.0190868 +-0.058019 0.131103 -0.00658932 +0.0113955 0.0434069 -0.0246972 +0.0568205 0.0566796 0.0240006 +-0.0267763 0.0365192 0.0538225 +-0.0564971 0.0987696 0.0431638 +0.0353453 0.0835128 0.0388598 +-0.0602464 0.144668 -0.00329576 +-0.00749863 0.0884246 0.0571361 +-0.0816964 0.0734472 0.00653139 +0.0399806 0.105624 0.0191716 +-0.0676913 0.172275 -0.0570278 +-0.0358314 0.0356542 0.0457978 +0.0503129 0.0516868 -0.00299828 +-0.0414959 0.0705202 0.0419075 +0.0246022 0.0942401 0.0462765 +-0.0735775 0.170801 -0.0470392 +0.0373196 0.105416 -0.00382358 +0.0463401 0.0518943 -0.00540594 +0.0400167 0.0646852 -0.00776271 +-0.0597593 0.07671 -0.0185219 +-0.0237194 0.0639841 -0.033754 +-0.0473867 0.0345201 0.0356021 +0.00159304 0.131118 0.00454966 +-0.073925 0.126728 -0.0084362 +-0.0243269 0.0616478 -0.0324508 +0.0457562 0.0904226 0.00816981 +-0.0688748 0.159133 -0.00709894 +-0.0394914 0.0944889 0.0427101 +-0.0687998 0.0822684 -0.0173873 +-0.0455924 0.119193 -0.014062 +-0.0369476 0.033676 0.00641963 +-0.09079 0.1297 0.0392322 +-0.0389556 0.0350986 0.042208 +-0.0414578 0.107073 0.0393054 +-0.00265934 0.098112 -0.0279111 +-0.0331649 0.0652734 -0.0174782 +-0.0343312 0.0836736 -0.0246034 +0.0134882 0.101805 0.0472084 +-0.0594997 0.0846925 0.0439263 +-0.0423306 0.040657 -0.0232664 +0.0092124 0.114671 -0.0175632 +0.0538026 0.0595499 0.0284925 +-0.0256867 0.0380701 0.0246091 +-0.0693658 0.16286 -0.0130912 +0.0333604 0.037057 0.0194583 +0.00949693 0.121023 0.0358683 +0.0321446 0.0360609 0.0164637 +0.0341544 0.0548861 0.0351403 +-0.000334987 0.0965293 -0.0302242 +0.0585628 0.0673807 0.0213416 +-0.053406 0.12345 -0.00838645 +-0.0749578 0.132548 -0.00734349 +0.0282219 0.0816125 -0.0219304 +-0.0351889 0.171161 -0.0140358 +0.00949153 0.0936876 0.0522363 +-0.0157849 0.172748 -0.017746 +-0.0175848 0.169785 -0.0150947 +-0.0835905 0.112379 0.0452164 +-0.0404862 0.0846544 0.0431896 +0.0231358 0.0404562 0.0392455 +-0.00366205 0.0540631 -0.0322696 +0.00959837 0.0403395 0.0451906 +-0.0692421 0.0422187 0.00798097 +-0.0285258 0.0717501 0.0402231 +-0.00789542 0.108803 -0.0224197 +0.0159009 0.113257 -0.0160529 +-0.00149436 0.0620061 0.056412 +-0.0420891 0.0363826 -0.0272583 +-0.00449341 0.104477 0.0440393 +-0.0683512 0.0607717 0.0117847 +-0.0927055 0.120137 0.0415853 +-0.0484911 0.115278 0.0334198 +0.02514 0.0350088 0.0196342 +-0.065935 0.125307 -0.00885715 +-0.0621483 0.0699034 0.036962 +-0.0178695 0.104461 -0.0227631 +0.0351768 0.0563002 0.0348659 +0.0105044 0.115477 0.0381888 +-0.0938558 0.126876 0.0162567 +-0.0632514 0.033799 0.0117273 +-0.0736013 0.0654333 0.0137843 +-0.0577792 0.0341881 0.0284371 +-0.0763952 0.0838159 -0.0125906 +-0.0296632 0.180174 -0.00867233 +0.00819029 0.0851531 -0.0324575 +-0.071633 0.174549 -0.0412084 +-0.0538265 0.0927341 -0.0220469 +-0.0471905 0.156504 0.00887867 +-0.0661815 0.0615106 0.0205126 +0.0144985 0.107111 0.0421568 +-0.0721929 0.152802 0.0342528 +0.0142765 0.0666697 -0.0302658 +0.0349485 0.0942163 0.0384062 +-0.0664891 0.0369705 -0.00688594 +-0.077495 0.158339 -0.0149115 +-0.0739383 0.160975 -0.0103701 +-0.00971429 0.0386927 -0.0148008 +-0.0618555 0.155289 -0.0295874 +-0.0621574 0.152203 -0.016578 +-0.032494 0.096035 0.0446186 +0.044345 0.0519693 -0.00630996 +0.0319954 0.0520213 0.0354999 +-0.0300925 0.0509394 -0.0183595 +-0.018449 0.0388382 0.0343981 +-0.0670639 0.154762 0.000889218 +0.0361767 0.0888967 0.0383392 +0.0262873 0.0942382 0.0451936 +0.0186534 0.103359 0.0446898 +-0.0523328 0.0334686 -0.00741897 +0.0507066 0.0540083 0.0292331 +0.0529037 0.0462692 0.0142047 +-0.0888522 0.0996312 0.00941041 +0.0275656 0.0563642 0.0414619 +-0.0371627 0.0336289 -0.0286501 +-0.0198294 0.0882519 -0.0375379 +-0.0907603 0.140585 0.0151783 +-0.00458896 0.0376652 -0.0252351 +-0.093041 0.12831 0.0262642 +-0.0743429 0.0955133 0.0396401 +-0.089704 0.111925 0.0143387 +0.0453684 0.0889907 0.0151607 +0.0456444 0.086201 0.0151659 +-0.0635175 0.0399079 -0.00714576 +-0.0294925 0.0903536 0.0441109 +-0.0888771 0.100994 0.011394 +-0.0121064 0.0869584 -0.0384624 +0.0373352 0.108319 0.0251875 +-0.0882187 0.112165 0.0210064 +0.0349174 0.110993 0.0268865 +-0.0849268 0.122064 -0.00322109 +0.0124968 0.112648 0.0387734 +-0.0662562 0.163203 -0.0177078 +-0.0640701 0.113939 0.0406208 +-0.0654246 0.0794919 0.0421931 +-0.0519669 0.0569186 0.0284516 +-0.0519207 0.0493094 0.0353906 +0.00333114 0.0341656 0.00499397 +-0.056914 0.133942 0.035273 +-0.0780215 0.158305 -0.0199209 +0.0276406 0.111416 0.0348725 +-0.0172565 0.181572 -0.0253576 +0.0372544 0.0379189 0.00466817 +-0.0211197 0.1653 -0.017528 +-0.0557637 0.121264 0.0386516 +0.0274329 0.121878 0.0183804 +-0.0623369 0.16467 -0.04959 +0.00450432 0.0883672 0.0562441 +-0.0649333 0.145142 -0.016034 +-0.0918355 0.118761 0.0292947 +0.0503561 0.073461 0.0121181 +-0.0732571 0.0860546 0.040246 +-0.0543933 0.14384 0.0284354 +0.0235922 0.124679 0.00697037 +0.049638 0.0724241 0.0192263 +-0.0691135 0.0647604 0.0241382 +-0.0277318 0.0385796 0.0327127 +0.0249679 0.0605263 0.0447882 +0.0220764 0.0741142 0.049509 +-0.012493 0.16839 -0.0164935 +0.0220311 0.0550166 0.0457656 +-0.0197467 0.0364265 -0.0184459 +0.000577278 0.0388845 -0.0129362 +-0.0178004 0.121647 -0.00876548 +-0.0516521 0.0334655 -0.0091126 +0.0221612 0.0754835 0.0496518 +-0.0384539 0.162349 0.000413916 +-0.0711225 0.0388168 0.00193457 +0.0334725 0.0950337 -0.0145821 +-0.00505247 0.102417 0.0438081 +0.0159216 0.0348476 0.0287894 +0.0277666 0.0347822 0.00749516 +-0.0675802 0.144972 -0.0192338 +-0.0477088 0.132967 0.0228963 +-0.0134912 0.0386664 0.0301779 +-0.0590273 0.134027 -0.00648451 +0.0244484 0.124114 0.020115 +0.0218798 0.0374214 -0.00364164 +-0.0658775 0.102439 -0.0164403 +-0.0743971 0.166132 -0.0206985 +-0.0634619 0.0339766 0.015084 +-0.0497324 0.138579 0.00441928 +-0.00151689 0.0428507 0.0468014 +0.00660528 0.0935786 -0.0311099 +-0.0862444 0.0819176 0.00849345 +-0.0634827 0.0876134 0.0450541 +0.0182388 0.0763952 -0.028136 +-0.0765343 0.0681368 0.0143622 +-0.092883 0.116038 0.0143172 +0.000494981 0.0442085 0.0460563 +-0.0518518 0.0970732 -0.0222063 +-0.0248173 0.0693751 0.0448313 +-0.089421 0.135156 0.0282104 +-0.0566159 0.0573558 0.0107416 +0.0312695 0.0800594 -0.0199503 +-0.03437 0.0738393 -0.0214808 +0.0226051 0.113885 -0.0127298 +-0.0658838 0.16421 -0.0204509 +-0.0417953 0.0435116 -0.0223513 +-0.0710782 0.156778 -0.0439119 +0.00348525 0.108604 0.0422849 +-0.0239399 0.118058 -0.0129545 +-0.0498545 0.0999668 -0.0218887 +0.0176793 0.0852191 -0.0283526 +-0.0426623 0.0592741 -0.0122692 +-0.0642751 0.044386 -0.00129652 +-0.0456062 0.127883 0.0223049 +-0.0818286 0.147374 0.0384552 +0.0125066 0.10443 0.0450477 +-0.0763281 0.174543 -0.0415648 +-0.0144887 0.0387707 -0.00835843 +-0.00853122 0.0430617 0.0490142 +-0.0783677 0.176339 -0.0480853 +-0.0408918 0.109911 -0.0187996 +-0.0634329 0.159891 -0.0505847 +-0.0278615 0.0987172 -0.0237448 +0.0172353 0.0806842 -0.0288156 +-0.0768582 0.104852 -0.0089026 +0.0310274 0.118497 0.0197321 +0.0262422 0.122687 0.00652555 +-0.000524008 0.041433 0.0467891 +0.0292827 0.060879 -0.0197951 +0.00853553 0.0366751 -0.00931803 +-0.092315 0.125571 0.0312621 +-0.000472926 0.0972534 -0.0289903 +-0.0604964 0.0861621 0.0446513 +0.0117525 0.0432202 0.0447834 +-0.0738828 0.103582 -0.0116089 +-0.00249719 0.0488761 0.0505372 +-0.0307845 0.0580469 -0.0184096 +-0.00234994 0.125819 -0.00745455 +-0.0301636 0.153871 -0.00371356 +-0.0815418 0.0912589 0.0328461 +-0.0901131 0.132441 0.0382173 +0.037389 0.0476423 -0.00613109 +-0.0646684 0.155196 -0.0425404 +-0.0928057 0.124227 0.0372672 +-0.0297999 0.12434 0.000117203 +-0.032492 0.0746402 0.0409516 +-0.0555716 0.122697 0.0389476 +-0.0717789 0.154685 0.0298089 +-0.0930714 0.12018 0.0352857 +0.0144798 0.109585 -0.0180587 +0.00343169 0.0361267 -0.0240106 +-0.0288758 0.046967 -0.0262149 +-0.0616418 0.158426 -0.0235923 +0.0103202 0.0609665 -0.0299301 +-0.0910325 0.14477 0.0261671 +-0.083926 0.0775674 0.0187821 +-0.0575363 0.138153 0.0326058 +-0.0295 0.0703058 0.0395502 +-0.0217308 0.0626511 -0.0346671 +-0.0640717 0.164086 -0.0255357 +-0.063271 0.158522 -0.0165888 +0.0210264 0.0895934 -0.0248804 +-0.0731992 0.145774 -0.0148545 +-0.0334943 0.0803079 0.0415842 +-0.0862122 0.111364 0.0347412 +0.0338239 0.11087 -0.00547119 +-0.0135288 0.0458914 0.0493586 +-0.0643715 0.139866 -0.00735458 +-0.0568939 0.158351 0.00118769 +-0.0405106 0.151258 -0.00613685 +-0.00551608 0.110856 -0.0214408 +-0.0787639 0.0696569 0.0125705 +0.00378339 0.0381062 0.0251953 +-0.0650446 0.154908 -0.0437098 +-0.089228 0.114813 0.0276717 +-0.00277394 0.0797805 -0.0365537 +-0.0661523 0.136835 0.0429956 +-0.0434818 0.0902492 0.04268 +-0.0184702 0.0959697 0.0503933 +-0.0801387 0.142096 0.0454029 +-0.00485582 0.0989472 0.0508482 +-0.0336234 0.153659 0.000337049 +0.00250661 0.0924946 0.055168 +-0.0729484 0.132565 -0.00781242 +0.0194715 0.127423 0.0125674 +0.00484292 0.129473 0.025811 +-0.0576054 0.0658547 0.0344063 +-0.0502601 0.0543084 0.0166402 +-0.027407 0.0396009 0.0539527 +-0.0105297 0.0560622 0.0527517 +-0.0456126 0.0519231 -0.010201 +0.000501847 0.0590908 0.0549783 +-0.0569845 0.0535242 0.00365398 +-0.0671097 0.0432428 -0.000257978 +0.0214666 0.0975514 0.0465681 +-0.08997 0.132328 0.0399309 +-0.0761969 0.167972 -0.0410261 +0.0170202 0.121328 -0.0087569 +-0.0138948 0.17568 -0.0202542 +-0.0281655 0.17267 -0.018055 +-0.0638531 0.04136 -0.00615806 +-0.0348821 0.0342989 0.0153052 +-0.000342105 0.0380462 0.00257941 +-0.00749789 0.0898138 0.0570783 +0.028524 0.0808687 0.0448153 +-0.0331206 0.0356024 -0.0184705 +0.0043586 0.119499 -0.0147306 +0.0467625 0.0462832 0.0266316 +0.0368364 0.111573 0.0161776 +0.00851174 0.0799624 0.0552814 +-0.00244825 0.112634 -0.0193375 +-0.0235385 0.11268 0.0379979 +-0.0115345 0.0922826 -0.0359317 +-0.09304 0.122895 0.0392709 +-0.0271645 0.17563 -0.018169 +-0.0772929 0.117422 0.0514809 +0.0179164 0.102978 -0.02104 +-0.0709646 0.0754682 0.0373385 +0.0216627 0.126095 0.0176515 +-0.0640284 0.119984 0.047923 +-0.0444795 0.0874935 0.0436599 +-0.0893861 0.0943037 0.0204146 +-0.0720651 0.173384 -0.0385311 +-0.0894927 0.14204 0.0311659 +-0.0454987 0.120637 0.0275066 +-0.0250745 0.0954862 -0.0252675 +-0.0895496 0.13918 0.0132126 +0.0192289 0.0820148 -0.027672 +-0.0154803 0.0645289 0.0535158 +0.0164872 0.108442 0.0405002 +-0.00663864 0.115688 -0.0165748 +-0.0494985 0.104247 0.040228 +-0.0673252 0.149334 0.0390086 +0.0300883 0.0872505 -0.0203879 +-0.0278877 0.0633808 -0.0294488 +0.0182732 0.069417 -0.0291542 +0.0171905 0.116688 -0.0137466 +0.0502632 0.0713497 0.022405 +0.0350985 0.114043 0.00837763 +-0.0505103 0.0452467 0.0429196 +0.0302544 0.113856 0.0308506 +-0.0605348 0.0333568 -0.0034971 +-0.00390558 0.0383472 0.0143493 +0.0270583 0.122199 0.00683201 +-0.0241505 0.0378782 0.0124647 +-0.0606031 0.0352186 0.0442288 +-0.0906667 0.113308 0.0195238 +-0.00876475 0.075634 -0.0378123 +-0.0531345 0.0641573 0.0333061 +-0.0262078 0.123609 -0.00273748 +-0.0629032 0.154793 0.00389792 +0.00322165 0.0782734 -0.0348651 +-0.0232226 0.0950277 -0.0288098 +-0.0497962 0.0869626 -0.02172 +0.0239811 0.109404 -0.0139261 +-0.00287196 0.105931 -0.0223953 +0.00350624 0.0619975 0.0564502 +0.0152965 0.129062 0.00674245 +-0.0198254 0.120831 -0.00989132 +-0.0672111 0.0749069 0.0386416 +-0.0199192 0.0375867 0.0533971 +-0.0507132 0.054338 0.0146004 +0.0338375 0.109906 -0.00644408 +-0.052068 0.0531865 0.02764 +-0.0665349 0.0638845 0.0254353 +-0.0340904 0.160759 -0.0135462 +-0.0456409 0.0577841 -0.0117617 +0.0425336 0.0678584 0.0273676 +-0.0549188 0.148123 0.0275408 +0.0178543 0.0352284 0.0378786 +-0.0254848 0.100235 0.0442056 +-0.014497 0.0856418 0.0570702 +0.0151023 0.0860518 0.0518047 +-0.0616341 0.0628646 -0.00472902 +0.02366 0.0848996 0.0483924 +-0.0496187 0.054694 -0.00943972 +-0.0328776 0.105721 -0.0208169 +-0.0144506 0.103914 0.0432646 +-0.0248813 0.105869 -0.0225199 +0.024788 0.0591582 0.0445118 +-0.0159391 0.0999021 -0.023843 +-0.0539979 0.153168 0.0186815 +-0.0738816 0.120852 -0.00799698 +0.0296461 0.118491 0.000643936 +-0.0540045 0.13652 -0.00234857 +-0.0593798 0.0335176 0.00740926 +0.0366379 0.08347 0.0371909 +-0.0520867 0.151648 -0.00355308 +-0.0188227 0.0387965 0.0325596 +0.00898388 0.131012 0.0072855 +-0.0682589 0.154325 -0.0506473 +-0.0521805 0.0531921 0.0266366 +-0.0617514 0.175333 -0.0614739 +-0.0169338 0.185679 -0.0240586 +0.015477 0.103104 0.045929 +-0.0729148 0.0713134 0.0317175 +-0.0172476 0.114664 -0.0174436 +-0.0126734 0.0384579 0.00339052 +-0.0832791 0.0884633 0.0304387 +-0.0858155 0.103519 0.00339021 +-0.0146369 0.0466344 -0.0294365 +-0.0773163 0.098935 -0.0105842 +-0.0145015 0.0631456 0.0536787 +-0.0689178 0.0717538 0.0356819 +-0.0255986 0.0394109 -0.0291464 +-0.0623671 0.0719748 0.0386642 +-0.0301518 0.0360809 0.0236741 +-0.030565 0.0383245 0.0341404 +-0.0574984 0.0918591 0.045399 +-0.0861528 0.0951452 0.0274373 +-0.0644941 0.0412041 -0.00599039 +-0.0363521 0.126723 0.0183002 +0.00755707 0.10303 0.0452955 +-0.0396625 0.0399023 -0.0274567 +-0.0838382 0.11616 -0.00137187 +0.0166591 0.0349342 0.0324763 +-0.0647933 0.15319 -0.00116291 +0.00911841 0.110151 -0.0195223 +-0.0697747 0.155761 0.0260978 +0.045415 0.0763654 0.00219579 +-0.0127734 0.171309 -0.0186592 +0.00748545 0.0964088 0.0510363 +0.0125027 0.109886 0.0398286 +-0.0779306 0.0866645 -0.0115691 +-0.0830177 0.0951656 -0.00554205 +-0.0184064 0.186879 -0.0179354 +-0.0866419 0.0923952 0.0266005 +0.026251 0.103389 0.0398709 +0.0333357 0.116389 0.013468 +-0.0452756 0.131436 0.0105618 +-0.035474 0.0519266 0.0383228 +-0.0536233 0.0657097 0.0353836 +0.0013977 0.0433563 -0.0248502 +0.0269244 0.118903 0.0281816 +0.0395 0.055533 0.0316092 +-0.0723024 0.111428 0.0467445 +-0.0364387 0.0357946 -0.0155844 +-0.0276413 0.159598 0.000270855 +-0.00596208 0.0394 0.0364646 +-0.00479094 0.0798443 -0.0373862 +-0.00779065 0.130523 0.0125627 +-0.0464848 0.12067 0.0277891 +-0.0645002 0.0889975 0.0448988 +-0.0896121 0.0902414 0.0154476 +0.0130231 0.0965172 -0.0241956 +-0.0452605 0.0391077 0.0445023 +0.0587398 0.0709245 0.0152557 +-0.0596114 0.0726835 0.0404064 +0.0240499 0.0348797 0.0195293 +-0.0682817 0.156606 -0.0532672 +0.0178388 0.104825 -0.0190099 +-0.0288938 0.180785 -0.00982491 +0.0323759 0.0738626 -0.0187418 +0.0314474 0.112439 -0.00717966 +-0.074091 0.144362 -0.00888576 +0.0510178 0.0461394 0.00424124 +0.00750963 0.0646928 0.0554932 +-0.0643093 0.0665984 0.0323388 +0.0133515 0.0566849 -0.029233 +-0.0243216 0.10004 -0.0240037 +-0.00749239 0.096543 0.0535421 +-0.00533786 0.0388247 -0.000985585 +-0.0884258 0.0996766 0.0213895 +-0.0320326 0.0609937 -0.0164107 +0.0535495 0.0533436 -0.000784809 +0.0393899 0.0533602 -0.00667374 +-0.0717205 0.168577 -0.0240459 +-0.0704919 0.126012 0.052539 +-0.0388888 0.109926 -0.019043 +-0.0507025 0.140081 0.0193694 +-0.0263231 0.034658 0.0434735 +0.0398861 0.0766416 0.0330246 +-0.0941682 0.126929 0.0222624 +-0.0117712 0.0770642 -0.0382004 +-0.0417668 0.040639 -0.0243092 +-0.0517327 0.164109 0.00103678 +-0.0721705 0.158208 -0.0379206 +-0.0356893 0.0651361 -0.0144415 +-0.065143 0.156205 -0.00860924 +0.00354988 0.0342019 -0.0174252 +0.00312416 0.107287 -0.0203844 +-0.0340011 0.127005 0.00589371 +-0.0418419 0.09571 -0.0225712 +-0.0333161 0.126997 0.0105451 +-0.0717391 0.165925 -0.0182956 +0.0559734 0.0494153 0.0101945 +0.0174969 0.108466 0.0401752 +-0.0507291 0.133637 -0.00121966 +0.0083246 0.0581885 -0.03043 +-0.0711713 0.176467 -0.0550529 +0.0165931 0.100464 -0.0223776 +-0.0544905 0.0862124 0.0452239 +-0.0574075 0.0649991 0.0334306 +0.0195092 0.092819 -0.0242669 +-0.0856512 0.0899172 -0.000541045 +0.0081342 0.104445 -0.020865 +-0.0752567 0.160324 -0.0108988 +-0.0376087 0.118212 -0.0130418 +-0.055019 0.14719 -0.00165707 +-0.04909 0.0628007 0.0352845 +-0.018783 0.0770899 -0.0389016 +-0.0336421 0.175583 -0.0129563 +-0.082659 0.0871422 0.0312687 +-0.0621779 0.061949 0.0245023 +-0.0782836 0.162467 -0.0289415 +0.0339055 0.0599168 -0.014725 +-0.0414124 0.128336 0.00169512 +-0.0398827 0.035133 -0.0101165 +-0.00781609 0.0854881 -0.0377912 +0.0082433 0.13138 0.00986533 +-0.0358714 0.105673 -0.0204021 +0.00749975 0.0589567 0.0535286 +-0.072631 0.0670284 0.0231935 +0.0525192 0.0691267 0.0251103 +-0.0688901 0.0621533 0.0194032 +-0.0824666 0.11008 0.0383967 +-0.0438038 0.0884337 -0.0219011 +-0.00534725 0.0379464 -0.0151277 +-0.0425045 0.0478596 0.0401075 +0.0214753 0.11175 -0.0144217 +-0.000497779 0.0489051 0.0509033 +0.0236032 0.116718 -0.00979024 +-0.0648062 0.0852609 -0.0190538 +-0.0395435 0.101505 0.0409276 +0.0209425 0.124573 -0.000263497 +-0.0286807 0.0383267 -0.00339493 +-0.0585081 0.0422988 0.0170665 +-0.0316383 0.0367739 0.0511824 +-0.085482 0.104867 0.00337403 +-0.00926648 0.100073 0.0477845 +-0.00448593 0.118295 0.0389891 +-0.0377467 0.0768482 -0.0188928 +-0.0640837 0.156142 0.0179222 +-0.0515285 0.144709 0.0153879 +-0.0267903 0.0866521 -0.0358137 +-0.0626407 0.163129 -0.0295903 +-0.00752629 0.0443832 0.0481509 +-0.0750304 0.169881 -0.0295693 +-0.0907748 0.12133 0.00629364 +0.0164129 0.0417834 -0.0225068 +-0.0317772 0.169741 -0.00573949 +-0.0546238 0.0527377 0.0100793 +0.0453589 0.0561811 -0.00597324 +-0.0651505 0.0366918 0.0402161 +-0.032507 0.108409 0.0384637 +0.0185107 0.108486 0.0398481 +0.0450172 0.0749324 0.00120229 +0.00251449 0.0702821 0.0560425 +-0.0434424 0.160833 0.00573037 +0.056541 0.064854 0.0254614 +-0.0648306 0.156078 0.013307 +-0.00545884 0.111961 -0.020621 +-0.0222505 0.0336283 -0.0219672 +-0.0319114 0.16826 -0.00591385 +0.0045246 0.0828376 0.0569094 +-0.0849678 0.0844642 -0.00152644 +0.0277057 0.120723 0.00280565 +-0.0133613 0.182397 -0.0284169 +-0.0569294 0.13993 -0.00415472 +-0.0104844 0.118266 0.038122 +-0.0725121 0.144203 0.0447958 +-0.0661037 0.0713259 0.0366501 +-0.050851 0.138527 0.021367 +-0.0580927 0.0577897 0.0147789 +-0.0157117 0.033701 -0.0245127 +-0.00261732 0.0341102 -0.0185505 +-0.0614975 0.10975 0.0377559 +0.00661243 0.131425 0.00784474 +-0.0602206 0.142504 0.0358229 +0.0126673 0.104052 -0.020179 +-0.0624955 0.0904382 0.0452713 +0.0164839 0.0699861 0.0519409 +-0.0334933 0.0946149 0.0444857 +-0.0904058 0.114907 0.0416618 +-0.0182558 0.178619 -0.0243596 +-0.0436529 0.0346111 0.0345638 +-0.00297107 0.0340356 -0.0204416 +-0.0246065 0.0394112 -0.0290873 +-0.0257404 0.0712076 -0.0359148 +-0.0285156 0.0433359 0.0513164 +0.0262381 0.119658 0.0279158 +-0.0734823 0.0649094 0.0160661 +0.0249492 0.109234 -0.0137375 +-0.0651326 0.157423 -0.0100634 +-0.0578906 0.0600472 -0.00173427 +-0.0868853 0.0847213 0.0144753 +-0.0610173 0.135506 -0.00686914 +0.0547011 0.0728313 0.00929699 +0.00513733 0.104474 -0.0214038 +-0.0199542 0.180019 -0.0229778 +0.022195 0.0344915 0.00477409 +-0.0509846 0.123023 -0.00999375 +0.0173702 0.0506958 -0.0254566 +0.0327797 0.0727287 0.040356 +-0.0376189 0.0505906 -0.0108802 +-0.057408 0.0521648 0.00264452 +-0.0845698 0.111358 0.0279354 +0.045113 0.0861573 0.00219478 +-0.0694333 0.0348816 0.0112742 +-0.0621334 0.15599 0.0157191 +0.0379075 0.0398433 0.0233434 +-0.0695824 0.180796 -0.0534457 +0.00287682 0.0368053 -0.01432 +0.0592296 0.0635939 0.00512091 +-0.0326951 0.0680731 -0.0204474 +-0.017619 0.161286 -0.0140538 +-0.00121244 0.0358159 0.011737 +-0.0485025 0.167013 -0.00296472 +0.0139694 0.0974449 -0.0231882 +0.0336763 0.102539 -0.0125747 +-0.0769165 0.147253 -0.00586064 +-0.0894763 0.140666 0.0321759 +-0.079441 0.139988 0.0475582 +-0.019773 0.0742847 -0.0390372 +-0.066871 0.0626922 0.0228964 +-0.0473301 0.134807 0.0120125 +0.0244991 0.106997 0.0390493 +0.0296386 0.114736 0.0306143 +0.0275719 0.0433403 0.0342886 +-0.0524918 0.107066 0.0397432 +-0.0544973 0.0427375 0.0458563 +-0.0837407 0.129905 0.0507752 +0.0390362 0.108381 0.0141662 +0.0136873 0.0685864 0.0531495 +-0.0780988 0.162499 -0.0239377 +-0.0804325 0.078146 0.029561 +-0.0720693 0.0709772 0.0321852 +-0.036497 0.0903135 0.0436162 +-0.0157593 0.121529 -0.00864145 +-0.0640118 0.135519 -0.00771971 +-0.0096474 0.0481504 -0.030386 +-0.0889991 0.11248 0.0367803 +-0.0718704 0.117956 -0.00810673 +-0.00253303 0.110473 -0.0210263 +-0.0151271 0.118705 -0.0137294 +-0.0533766 0.126536 -0.00565695 +-0.050165 0.0501393 0.0176523 +-0.0617795 0.126914 0.0422805 +-0.0077906 0.079881 -0.0380243 +-0.0181903 0.172708 -0.0227977 +0.0362974 0.0657667 -0.0137187 +-0.0193672 0.122992 0.0288371 +0.0118921 0.127946 0.0270512 +-0.0528594 0.0344415 0.0327571 +-0.0440834 0.0344755 0.0328349 +0.00820576 0.0343954 0.0203732 +-0.0384853 0.0819001 0.0436414 +0.0279153 0.112797 -0.00956049 +-0.0233818 0.177171 -0.0128784 +0.00211138 0.110155 -0.0201605 +-0.0214231 0.0385184 -0.00765668 +-0.0590379 0.13549 -0.00623086 +-0.0654804 0.152163 -0.03833 +-0.0328363 0.0957996 -0.0235469 +-0.0574937 0.0333307 -0.00285911 +-0.0723124 0.154022 -0.038905 +-0.00125765 0.0383424 0.0470318 +0.022422 0.125761 0.0150782 +-0.0285891 0.0935252 -0.0252241 +-0.0395009 0.16971 0.00189803 +-0.0211973 0.0363196 0.0534993 +-0.0671438 0.037039 0.0145094 +-0.0455015 0.115241 0.0333765 +-0.0416597 0.057808 -0.0117566 +-0.0597745 0.0434652 0.0436848 +-0.0594246 0.0334838 0.00203125 +-0.0609255 0.122379 -0.00879585 +-0.0633414 0.0357702 0.0187502 +-0.0629834 0.0594485 0.00869517 +-0.0240199 0.0537379 0.0416895 +-0.0382462 0.044597 -0.024375 +-0.00732189 0.100225 -0.0241674 +-0.0425982 0.0463965 -0.0133084 +-0.0889045 0.133745 0.0416542 +0.00049898 0.0385943 0.0466363 +-0.0295864 0.0462965 0.0488628 +0.00439164 0.0448792 -0.025855 +-0.0608362 0.0341593 0.0278122 +-0.0547243 0.0723714 -0.0165135 +-0.0274694 0.155208 -0.00473974 +0.0246484 0.0713321 0.0461382 +0.0124372 0.0548875 0.0512192 +-0.00549842 0.0828666 0.0570203 +-0.0616148 0.0337181 0.0103501 +-0.0346312 0.0752701 -0.0214845 +-0.0629229 0.058915 0.0109817 +-0.0424386 0.147805 0.00141712 +-0.0363751 0.12414 0.0242241 +0.0176113 0.111464 -0.0161155 +-0.0314976 0.0603384 0.0380002 +-0.0138112 0.128252 0.0219818 +-0.0603076 0.0409502 -0.0078507 +-0.0735166 0.141431 0.0469479 +0.0326456 0.111384 0.0297678 +-0.0635438 0.0341847 -0.00786744 +0.02297 0.122414 -0.00191144 +0.0401375 0.0953636 -0.00688813 +-0.0141538 0.0965092 0.052175 +-0.00422659 0.0383846 0.0124357 +-0.0311024 0.0343581 0.019624 +-0.0780471 0.153854 0.029137 +-0.0581213 0.151582 -0.000807379 +-0.0267449 0.0725846 -0.0356647 +-0.0191918 0.174184 -0.0227992 +-0.00378536 0.0798194 -0.0370348 +-0.0249464 0.0349691 -0.0199992 +-0.0564664 0.0423189 0.0186897 +0.0266976 0.119444 -0.00271582 +-0.023525 0.0349287 -0.0283944 +-0.0800951 0.15261 0.00324045 +0.0268493 0.119915 0.0267269 +0.0354747 0.0390827 0.0235255 +-0.0127812 0.17424 -0.0204206 +-0.0338617 0.168258 -0.00349456 +-0.0144845 0.0744882 0.056153 +0.0261935 0.0402752 0.032238 +0.0102706 0.0681153 -0.0309054 +-0.00974239 0.0387292 0.0290909 +-0.0644512 0.125591 0.047275 +0.010367 0.0479585 -0.0270631 +-0.0246099 0.0984431 -0.024327 +-0.0476227 0.0370311 -0.0128189 +-0.0780422 0.0846436 0.0366002 +-0.0566171 0.135321 0.0339425 +-0.0556004 0.0505584 -0.00338763 +-0.0907186 0.136468 0.0172046 +-0.0245124 0.180278 -0.0098524 +0.00742535 0.0346722 0.0416328 +-0.0699342 0.0651273 0.0236486 +-0.0124071 0.172769 -0.0198823 +-0.041856 0.149196 0.00419837 +-0.0809107 0.103235 -0.00559799 +-0.0631328 0.0335051 0.0030611 +-0.00851461 0.0647289 0.0558918 +0.0154483 0.127759 0.0239281 +0.0255922 0.123349 0.0191129 +0.0138934 0.0631004 0.0516475 +0.00118569 0.0983354 -0.0261952 +-0.0325387 0.118791 -0.011658 +-0.000757843 0.0354065 0.0103826 +-0.0248998 0.158417 -0.0112592 +-0.035233 0.0374002 -0.014964 +-0.0541243 0.156074 -0.00260128 +-0.0584646 0.0588965 0.0024905 +-0.0615294 0.0333928 -0.00373148 +-0.0602915 0.0343294 0.0347628 +0.0265767 0.0994658 0.0420977 +0.0347214 0.0712416 -0.0157876 +-0.040399 0.128703 0.00942739 +0.00251855 0.096887 -0.0286022 +-0.076485 0.148385 0.0403892 +-0.0606115 0.155938 0.0148123 +0.010878 0.0806434 0.0544608 +0.0384784 0.105492 -0.00082855 +0.0438672 0.0916755 -0.00180444 +-0.0513529 0.0733082 0.0416893 +0.0451032 0.0777437 0.000209071 +-0.0817242 0.148679 0.0369003 +0.0461375 0.0834298 0.00718398 +-0.0514739 0.135214 -0.000924577 +-0.00531173 0.100039 -0.0239686 +-0.0176147 0.042187 -0.0278695 +0.00727636 0.114035 -0.0188609 +0.0268989 0.0632714 0.044083 +0.0102735 0.0924657 -0.0299319 +0.010651 0.121836 0.0349107 +0.00895558 0.0361581 -0.0106394 +-0.0905601 0.144393 0.0275534 +0.043756 0.0467626 0.0296361 +-0.0417806 0.126404 -0.00562318 +-0.0358424 0.095771 -0.0231986 +-0.0809037 0.153834 0.0267225 +-0.0777263 0.156926 -0.0159116 +0.00417967 0.034897 0.044357 +-0.0351879 0.125718 0.0201989 +-0.0284012 0.038721 -0.0148192 +-0.0351226 0.169652 -0.0145814 +-0.0203438 0.180146 -0.0154935 +0.0345359 0.11019 -0.00473263 +-0.0932568 0.121548 0.0382795 +-0.0334767 0.152548 -0.00159465 +-0.0271731 0.174192 -0.00959576 +0.0159989 0.11444 -0.0153318 +-0.054238 0.13299 -0.00459005 +0.0366798 0.105376 -0.00582172 +0.0386277 0.0672715 0.0346845 +-0.0227209 0.162682 -0.0153632 +-0.0760409 0.0677685 0.0130189 +0.00250507 0.0772798 0.0565792 +-0.0345053 0.101515 0.0417518 +-0.0546003 0.0541349 0.0100271 +-0.000643212 0.127926 -0.00376413 +0.00284904 0.131659 0.0150261 +-0.0184884 0.186846 -0.021092 +0.0335193 0.114014 -0.000843968 +0.00632048 0.123167 -0.0106939 +-0.0564752 0.0624455 0.0290854 +-0.0138322 0.105995 -0.0224296 +0.00423384 0.0754618 -0.0348642 +-0.0281096 0.0778495 0.0450018 +-0.0776289 0.158329 -0.0159141 +0.0148253 0.0447411 0.0439981 +-0.0859023 0.122521 -0.0027014 +-0.0578481 0.0940916 -0.0211113 +0.00150378 0.0842858 0.0575429 +0.0326379 0.0849202 0.042017 +-0.0549752 0.0499938 0.0105067 +-0.0568824 0.10976 -0.0175883 +-0.00970298 0.0627929 -0.0357349 +-0.0178968 0.163686 -0.0167578 +-0.074969 0.105672 0.0364824 +0.00650677 0.0702743 0.0558788 +0.00487604 0.0992462 -0.0230983 +0.042474 0.101514 0.0131646 +-0.0643723 0.0593574 0.0120942 +0.0593748 0.0580631 0.00716733 +-0.00149842 0.111423 0.0424113 +-0.00749339 0.119159 -0.0142858 +-0.0771313 0.0754374 0.0308061 +-0.0477996 0.0869772 -0.0218762 +0.014411 0.0833733 0.0525453 +-0.0202678 0.159643 -0.00488449 +-0.0159305 0.0950186 -0.0327431 +-0.0279294 0.0931359 -0.0265478 +-0.0855021 0.102147 0.00137916 +-0.0938092 0.125562 0.0252741 +-0.058744 0.140559 -0.00481674 +-0.031677 0.126244 0.00820251 +-0.0264922 0.0447022 0.0511549 +-0.0205862 0.0382221 0.00925741 +-0.053491 0.104292 0.0408761 +-0.0370674 0.156264 -0.0103696 +-0.0634966 0.109514 0.0378318 +-0.0867621 0.084687 0.0184803 +-0.0830364 0.104646 0.028271 +0.0442212 0.0804374 0.0252067 +-0.0448473 0.0339909 -0.0230279 +-0.0037539 0.0755488 -0.0365646 +-0.0661663 0.158028 -0.0551775 +-0.0238007 0.0741774 -0.0380398 +-0.018731 0.0627665 -0.0359648 +0.0446574 0.0720977 0.0012022 +-0.0927955 0.121487 0.0416389 +-0.0620012 0.1241 0.0437622 +0.0300963 0.0995295 0.0401727 +-0.0719316 0.149607 -0.0394232 +0.0355637 0.0889227 0.0392444 +0.0493081 0.0547033 -0.00484617 +-0.0668328 0.0604514 0.0106116 +0.00304719 0.123088 -0.0105402 +-0.0255191 0.118043 0.0319974 +-0.0394865 0.115305 0.0335817 +-0.0326614 0.0592947 -0.0125392 +0.0575508 0.0523393 0.00818574 +-0.0893959 0.0942918 0.0174254 +-0.0269084 0.160002 -0.0134029 +-0.0506856 0.0345547 0.0383582 +-0.0800885 0.0739226 0.0209531 +-0.0277305 0.073972 -0.0353872 +-0.0320496 0.0849187 -0.0285721 +-0.0217999 0.0866355 0.0553929 +-0.0322022 0.0465812 -0.0258568 +-0.0442317 0.12547 0.021384 +0.0214935 0.0781932 0.0504764 +-0.0444883 0.150664 0.00744383 +-0.0303843 0.0566029 -0.0193937 +-0.0723854 0.155427 -0.0359059 +-0.0245149 0.0811097 0.0540325 +0.0189031 0.068639 0.0501604 +-0.0650109 0.041163 0.0307556 +-0.0194954 0.107168 0.0420699 +-0.0325124 0.113906 0.0343195 +-0.0544418 0.118427 -0.0131672 +-0.0536811 0.113759 -0.0162997 +-0.0559476 0.153959 0.0252069 +-0.0675391 0.124252 0.0515729 +0.0440796 0.0450784 0.0271934 +-0.0594971 0.101543 0.0424741 +-0.0184988 0.100234 0.0438197 +0.0434554 0.0790039 -0.00377815 +0.0140981 0.0343905 -0.0079847 +-0.0615105 0.0406302 -0.00752326 +0.0320683 0.0578123 0.0392046 +0.0144666 0.0962642 0.0485999 +-0.0315047 0.0631978 0.0384961 +-0.0306251 0.038441 -0.00943325 +-0.0847861 0.0804507 0.00450965 +-0.0549519 0.160962 0.00433648 +-0.0470839 0.131413 0.00333034 +-0.00104546 0.0391448 0.0323048 +-0.0526926 0.151783 0.016281 +-0.0223808 0.0958588 0.045836 +-0.0841478 0.15365 0.0123539 +0.0536189 0.0735747 0.0133449 +-0.00350831 0.0975151 -0.0292875 +-0.0571277 0.155869 0.0117051 +0.00341369 0.131576 0.0166618 +-0.0237378 0.0654511 -0.0345337 +-0.0858145 0.0991904 0.0269676 +-0.0759199 0.0783227 -0.00959072 +0.032684 0.0640121 -0.0177767 +-0.056282 0.132113 -0.00567386 +0.00328959 0.131137 0.0194851 +0.00882643 0.110931 -0.0195298 +-0.00876485 0.1716 -0.0262973 +-0.0151483 0.0405525 0.0515137 +-0.0498071 0.0343093 0.00865348 +-0.0569766 0.0339283 0.0235563 +-0.0226683 0.0381298 0.00891697 +-0.0855438 0.106245 0.00446783 +0.0454924 0.0651146 0.027904 +0.0150017 0.0576648 0.0496654 +0.00644791 0.119491 -0.0147367 +-0.0156486 0.0481142 -0.0300898 +-0.0650134 0.13537 0.0410634 +0.0113952 0.116794 -0.0158535 +0.0173388 0.0781757 0.0532571 +0.0536226 0.0587546 -0.00269037 +-0.0709897 0.0340252 0.000991695 +0.038384 0.106978 0.0241932 +-0.0385431 0.038993 -0.0286239 +-0.0451337 0.127804 0.0210049 +-0.0690676 0.152436 0.0353067 +-0.0883368 0.137775 0.00920322 +-0.0714828 0.0362083 0.00943052 +-0.0717062 0.159603 -0.040933 +-0.0255949 0.125933 0.00752005 +-0.047874 0.0346487 0.0423594 +0.0367516 0.111162 0.00316661 +-0.00949217 0.110042 0.0428369 +-0.0572015 0.0336196 0.0184714 +0.0150246 0.0392642 0.0442415 +-0.00832489 0.0993422 -0.0252442 +-0.0304761 0.0342807 0.0180201 +-0.026997 0.0382812 -0.00486026 +-0.0916784 0.144722 0.0181573 +-0.0703317 0.172249 -0.0530308 +-0.0159101 0.1643 -0.0176565 +-0.0850976 0.106195 0.00337687 +-0.035284 0.173981 -0.0126295 +-0.032733 0.155408 -0.00943888 +0.00217615 0.12934 0.0262849 +0.00123579 0.075497 -0.0355058 +-0.0332024 0.0455956 -0.0269373 +-0.0155006 0.103015 0.0432792 +0.0396392 0.106988 0.00416547 +-0.021523 0.118151 0.0342827 +-0.0184974 0.103009 0.0434402 +-0.047784 0.038449 -0.0122332 +-0.0104903 0.0604984 0.0550813 +0.0293518 0.0659692 0.0423806 +0.0185572 0.0930309 -0.0244868 +0.0173756 0.109987 -0.0165543 +-0.0865489 0.109072 0.0153468 +0.0363255 0.10537 -0.00683316 +-0.0394998 0.076195 0.0426907 +-0.0603651 0.0470889 0.0366883 +-0.0144951 0.119623 0.0361429 +0.0406661 0.105634 0.0121644 +0.0383891 0.0460848 -0.00524865 +0.0295409 0.0942529 0.0428642 +0.0373159 0.0880544 -0.0152271 +-0.0784316 0.0799342 0.0337318 +-0.0548348 0.124111 0.0382711 +0.0178682 0.0672532 0.0504022 +-0.0788979 0.123682 -0.00614143 +-0.0298552 0.0986755 -0.0232224 +-0.0771653 0.156191 -0.0114635 +-0.0923833 0.130942 0.0122392 +-0.0651094 0.121429 0.0498115 +-0.042493 0.0690949 0.0416622 +0.0416337 0.0792551 0.0303335 +0.0189066 0.0808659 0.0520326 +-0.029145 0.125694 0.0135548 +-0.0619967 0.14761 -0.00462246 +0.0255017 0.0449453 0.0383425 +-0.0925798 0.11747 0.0343056 +-0.00233027 0.0339229 -0.0220991 +0.00799401 0.0819204 0.0555296 +-0.0699548 0.147947 -0.0321477 +0.0415131 0.0394077 0.00724875 +-0.0712173 0.0846981 0.0410753 +-0.0880447 0.0874003 0.00446864 +0.00798497 0.0890814 -0.0324293 +-0.0117258 0.0656807 -0.0365783 +-0.0114796 0.112753 0.0411508 +-0.0817304 0.107364 -0.00260486 +-0.0293156 0.0820403 0.0446588 +-0.0495645 0.0375773 -0.0119604 +-0.043838 0.0956679 -0.0221641 +-0.00869681 0.129559 0.00358698 +-0.0933816 0.129671 0.0222434 +-0.0700603 0.163804 -0.0489659 +-0.00755399 0.0384559 0.0207545 +0.0159604 0.125249 0.0284184 +-0.0514974 0.0791051 0.0438079 +-0.0840796 0.0818676 0.0264914 +0.037525 0.0785071 -0.0127982 +0.0299804 0.119686 0.0179058 +-0.0638039 0.0881523 -0.0190251 +-0.0272788 0.0350567 0.0515587 +-0.00562089 0.115673 -0.0165634 +-0.0104428 0.0347186 0.0450504 +-0.0427898 0.116428 -0.015168 +0.0165768 0.126998 0.000104849 +-0.0238911 0.0738255 0.0493988 +-0.0485539 0.0376116 -0.0123218 +-0.0396922 0.0460798 -0.021311 +-0.0485652 0.0335345 -0.00306359 +0.0414749 0.104231 0.00716597 +-0.0445241 0.0409237 -0.0192998 +-0.0220397 0.0354083 0.0523916 +-0.0380711 0.0340829 0.00944176 +0.0139247 0.0348347 0.0392218 +-0.0297288 0.0335868 -0.0252735 +-0.00107263 0.0385746 0.00195199 +0.0117524 0.0352863 0.00381322 +0.0170772 0.0847646 0.051153 +-0.0656775 0.067321 -0.00750664 +-0.00543271 0.0918052 -0.0353894 +0.0133691 0.0343357 -0.00620151 +0.0451372 0.0875619 0.0011816 +0.0503362 0.0703636 0.0239238 +-0.0474927 0.0804818 0.0437565 +-0.00542063 0.0391587 0.0349931 +0.00193935 0.03568 -0.0153447 +-0.0774115 0.160346 -0.0169397 +0.049877 0.0727457 0.00893584 +-0.0640788 0.0598458 0.0171155 +-0.00650105 0.0472142 0.0482843 +-0.0241121 0.163789 -0.0160029 +-0.0173263 0.0611887 0.051725 +0.0171559 0.100271 -0.022436 +-0.0604932 0.155795 0.0206537 +-0.0609595 0.142497 0.0365005 +-0.0668489 0.0966702 -0.0167929 +-0.0149394 0.183104 -0.021718 +-0.0321779 0.0750041 -0.0285287 +-0.0226305 0.0710127 0.0496427 +0.0463117 0.0820487 0.00917902 +-0.0795939 0.112319 0.0461682 +-0.0658419 0.0995396 -0.0165139 +-0.0810165 0.134048 0.0507919 +-0.0486855 0.131027 0.0278379 +-0.0788429 0.112725 -0.00283498 +-0.0784933 0.0832425 0.0356821 +-0.0258381 0.0781035 0.0498012 +0.0426426 0.0858997 0.0283401 +-0.0677549 0.154168 0.0312275 +-0.0306743 0.0383989 -0.00386137 +-0.0857757 0.0926386 -0.000557841 +-0.0210104 0.0417331 0.053591 +0.0161529 0.100264 -0.0224296 +0.0387814 0.0821002 0.0350599 +0.0484193 0.0639761 -0.00211304 +-0.0858985 0.111778 0.0253403 +-0.0389634 0.128304 0.0114309 +-0.0634823 0.0352819 -0.00824664 +0.0395163 0.0646366 -0.0087647 +-0.0591064 0.0435686 0.0148077 +0.00621882 0.12419 0.0335647 +-0.0171539 0.0347559 0.0453522 +-0.0314811 0.0546225 0.0370229 +-0.0182701 0.114743 -0.017523 +-0.0605388 0.141029 0.0353291 +-0.063605 0.126943 0.0449774 +-0.03749 0.0533987 0.0390423 +-0.0573191 0.0507885 0.00568774 +-0.0424884 0.109818 0.0380938 +-0.082569 0.0790202 0.0265184 +-0.0653913 0.0757553 0.0400472 +-0.0105137 0.0589924 0.0541839 +0.0198393 0.0700116 0.0497622 +-0.0814721 0.135361 0.0497671 +0.00809889 0.111578 -0.0196036 +-0.0276072 0.038217 0.0294729 +-0.0647783 0.173212 -0.0488362 +-0.0760415 0.0675654 0.00655947 +-0.0322855 0.0610195 -0.0154117 +-0.00948933 0.0674612 0.0553354 +-0.0922478 0.11733 0.00930597 +0.0325339 0.116751 0.00316678 +-0.0788837 0.117794 -0.00533035 +0.0177807 0.10571 -0.0179484 +-0.0648315 0.0895741 -0.0187043 +-0.0303114 0.0384164 -0.0075003 +-0.0728418 0.0685704 -0.00149472 +0.0396278 0.103602 -0.00160767 +-0.0575003 0.109781 0.0378101 +-0.0359224 0.034124 0.026018 +-0.0230844 0.126658 0.00843513 +-0.0904612 0.131068 0.0382266 +-0.0782718 0.165861 -0.029036 +0.0284552 0.0607955 -0.0208488 +-0.0495337 0.163976 0.00447865 +-0.0665318 0.134006 0.0442059 +-0.0622043 0.0590015 0.0092504 +0.0124693 0.0962821 0.0494059 +0.0199668 0.115907 -0.0129188 +-0.0101559 0.0386047 0.027311 +-0.0224495 0.0580629 0.0442448 +-0.0768471 0.09916 -0.0110394 +-0.0438495 0.0999429 -0.0214407 +-0.0642587 0.173261 -0.0500973 +-0.0291541 0.123106 -0.00418201 +-0.0785185 0.16527 -0.0289621 +-0.0773807 0.0774654 0.0325309 +0.0184997 0.0892768 0.0486726 +-0.0147168 0.0628748 -0.03682 +0.0133075 0.062355 -0.0296823 +0.0174899 0.111215 0.038757 +-0.0829923 0.130939 -0.00341376 +-0.0749763 0.152739 -0.0169005 +-0.00979029 0.0798633 -0.0379189 +-0.0243904 0.183518 -0.0110527 +0.0382626 0.0899111 -0.0131489 +0.0353274 0.107617 -0.00596632 +-0.0649093 0.06918 0.0352438 +0.0545625 0.0595427 0.0278248 +-0.0664402 0.128427 0.0478848 +0.0302544 0.035019 0.00964843 +-0.0212084 0.186026 -0.0155815 +-0.00559653 0.0391515 -0.0257085 +-0.00382316 0.0854518 -0.0372434 +0.0556932 0.0688929 0.00299188 +0.0435925 0.0958855 0.00119521 +-0.061875 0.156868 -0.0195857 +-0.0283944 0.174224 -0.00779385 +0.000326986 0.131385 0.00837406 +0.0583787 0.0621209 0.00318289 +0.0262357 0.0740751 0.0449841 +-0.0747322 0.0729443 0.0316828 +-0.0650821 0.148822 -0.0290175 +-0.0436469 0.0601588 0.0398932 +0.0443703 0.0410834 0.0161644 +-0.0674507 0.155183 -0.000720573 +-0.0165017 0.177176 -0.0187481 +0.0352588 0.0755049 -0.0148105 +0.00551455 0.110936 0.0415028 +0.0248664 0.0898261 -0.023121 +0.00550646 0.078617 0.0558754 +-0.0698407 0.127049 0.051763 +-0.0375072 0.123454 -0.00854988 +-0.052616 0.0657163 0.0355847 +-0.0748963 0.0690517 0.0244939 +0.023431 0.11936 -0.00662051 +-0.0185076 0.120924 0.0327413 +0.0394332 0.101324 0.027167 +-0.00864992 0.124983 -0.00848236 +-0.0872247 0.152479 0.0216964 +-0.0215688 0.0623472 0.0460467 +-0.0475797 0.035695 0.0449374 +-0.0510737 0.151654 -0.00393732 +-0.0415 0.0930514 0.0423592 +-0.0544965 0.100156 0.0427594 +0.049267 0.0717276 0.00605578 +0.0292141 0.0815364 -0.0209002 +-0.0052585 0.095242 -0.0329133 +0.0151527 0.129419 0.0109697 +-0.0294996 0.100187 0.0432585 +0.0363367 0.0432226 0.0290731 +0.0327757 0.035977 0.0148418 +0.00349523 0.0427434 0.0456833 +0.046121 0.0848311 0.00917504 +-0.067462 0.157723 -0.00658264 +-0.0876012 0.0995367 0.00546504 +-0.0356487 0.0352259 -0.0310792 +-0.0585981 0.0658974 0.0341563 +-0.0639239 0.116652 -0.0103062 +-0.0525394 0.0472909 -0.00733632 +-0.0398304 0.034299 0.0303636 +0.0252131 0.0803965 -0.024704 +-0.0721022 0.165224 -0.0439746 +-0.058758 0.148538 -0.00150368 +-0.0625812 0.150647 -0.00957658 +-0.0878641 0.137757 0.00720039 +0.0109534 0.0475021 0.0472035 +-0.0699012 0.105141 -0.0130553 +0.0318353 0.0540522 -0.0127622 +-0.0866591 0.107689 0.0123597 +0.0552547 0.0595292 0.0270628 +0.0320484 0.11465 0.0272407 +0.0433462 0.0818009 -0.00379375 +-0.0294668 0.176906 -0.0160057 +-0.0169961 0.094658 0.0531741 +-0.0202578 0.0596247 0.0476545 +-0.0798939 0.123658 -0.00558813 +0.0482025 0.0703533 0.0231278 +-0.0206189 0.186125 -0.0151754 +0.0100127 0.0349584 -0.0111996 +-0.0661914 0.152591 -0.0424622 +-0.0478408 0.098515 -0.0219326 +0.026913 0.0619271 0.0440949 +-0.0328507 0.126562 0.0151396 +-0.0689146 0.108019 -0.0123122 +-0.00583756 0.0390351 0.0332216 +-0.0125377 0.0365668 -0.017148 +-0.0373858 0.0446552 0.0411638 +-0.0759006 0.161818 -0.014334 +0.0304033 0.107421 -0.0117891 +-0.0654084 0.175187 -0.050486 +-0.0633716 0.143922 0.0382956 +0.0194957 0.0920261 0.0477827 +-0.0288404 0.0972702 -0.0238091 +-0.00475508 0.0741241 -0.036385 +-0.0104985 0.0362063 -0.0254961 +-0.0625516 0.147537 -0.0115723 +-0.0816708 0.0869142 -0.00660013 +-0.00823999 0.130343 0.0167173 +-0.0809733 0.130966 -0.00434035 +-0.0437659 0.0811743 -0.0201658 +0.00743904 0.129465 0.0253135 +-0.00451238 0.0760575 0.0586977 +0.0302883 0.103408 0.0369471 +-0.0379006 0.151906 -0.00621808 +-0.00550346 0.076042 0.0585145 +-0.0217032 0.0597401 -0.0334972 +-0.0868755 0.112781 0.0262639 +-0.0336701 0.155604 -0.00983793 +-0.0126927 0.0599517 -0.0357172 +-0.0638978 0.150075 -0.0288161 +-0.0144059 0.112046 -0.0186792 +-0.00421023 0.0383902 0.0178766 +-0.0453052 0.113634 -0.0162273 +0.0147972 0.102084 -0.0220848 +-0.0484999 0.105649 0.0400819 +0.0216294 0.0875507 0.0490393 +-0.0124184 0.175705 -0.0216387 +-0.0328373 0.163842 -0.00376818 +-0.0666614 0.0672261 -0.0064803 +-0.0395052 0.119385 0.0302298 +-0.0489243 0.0675117 0.0383488 +-0.0552807 0.0343936 0.0305403 +0.00553119 0.0603997 0.0554086 +-0.0914264 0.14884 0.0201323 +0.0231929 0.110938 -0.0135659 +-0.065154 0.164972 -0.0244937 +-0.050496 0.074792 0.0427038 +-0.0657515 0.154274 -0.0462128 +-0.0343486 0.0367995 -0.0305331 +-0.0826303 0.103323 0.0293175 +-0.0597443 0.0338929 0.0194732 +-0.0425056 0.0591222 0.0401769 +-0.0743438 0.156862 -0.0249223 +-0.00222977 0.0396912 0.0474006 +-0.00562206 0.0388337 0.0298422 +-0.0338556 0.0723894 -0.0214737 +-0.0635465 0.0333817 0.00128463 +-0.0330138 0.0356955 0.0305887 +-0.0730865 0.16659 -0.0202232 +-0.0570856 0.153101 -0.000954757 +0.0275543 0.0960379 -0.019637 +-0.0229677 0.169763 -0.0123298 +0.0217819 0.106251 -0.0165369 +-0.0575003 0.0630187 0.0298519 +-0.00864981 0.171144 -0.0247734 +-0.053919 0.0587242 -0.00741756 +-0.0595 0.105675 0.0404663 +0.0351077 0.0740897 -0.0147891 +-0.0620479 0.155306 -0.016587 +0.0278721 0.0522836 -0.0197543 +0.0325208 0.0469245 0.0310812 +-0.06629 0.139698 0.0427919 +-0.078132 0.172939 -0.0407193 +-0.0294988 0.0559628 0.0364214 +-0.0374897 0.0562507 0.0395531 +-0.0662219 0.155662 0.00991681 +-0.0408786 0.0346362 0.0386374 +-0.0208999 0.185581 -0.0139755 +-0.0330517 0.0624982 -0.0144201 +-0.0767419 0.164619 -0.0220172 +-0.0697905 0.0865423 -0.0170841 +-0.0784816 0.0755217 0.0287043 +0.0172033 0.118701 -0.0119316 +-0.0185134 0.0473863 0.05026 +0.00729554 0.0653986 -0.0323322 +-0.0415011 0.0506114 0.0394281 +-0.0541424 0.033642 0.0190888 +-0.0921005 0.132392 0.0222257 +-0.0136741 0.0384938 0.00315386 +-0.0383322 0.163825 0.00056966 +-0.0762889 0.0738479 0.0305832 +-0.0875285 0.133568 0.00229932 +-0.0736181 0.0688668 0.0266732 +0.02687 0.0981666 0.0425225 +-0.051308 0.153569 0.0116824 +4.86222e-05 0.11836 -0.0154829 +-0.0517937 0.0583908 0.0296448 +0.0605105 0.0595417 0.010156 +-0.0573945 0.0371513 -0.0102727 +0.00965733 0.0345667 0.0223294 +0.0463647 0.0703187 0.00350637 +-0.0625718 0.1468 0.0377209 +-0.089178 0.137924 0.0381661 +-0.0134956 0.0759117 0.0568004 +-0.00574286 0.0755721 -0.037104 +0.0261865 0.123233 0.0107875 +-0.0580499 0.11553 -0.0140963 +-0.00762589 0.0451743 -0.028662 +0.0535357 0.0635428 0.028124 +-0.0718987 0.123811 -0.00847645 +-0.0635357 0.119961 0.0469254 +0.00211859 0.130671 0.0219319 +0.00252859 0.0358017 0.021576 +0.0527591 0.0693467 0.00250314 +-0.0451218 0.0335948 -0.0116042 +-0.0769111 0.100434 -0.0105662 +0.0223237 0.0564658 -0.026195 +0.0394644 0.107011 0.0181712 +-0.0776021 0.0994637 0.0357144 +-0.0632381 0.170981 -0.0495819 +-0.00862433 0.122038 -0.0113292 +-0.0548269 0.0450002 0.0157095 +-0.0506815 0.134691 -0.000340536 +-0.0495888 0.146296 0.0105853 +-0.00908464 0.173025 -0.027717 +-0.00410488 0.0346022 0.0429088 +-0.0260906 0.0386266 -0.0124061 +0.0283176 0.118208 -0.00273298 +-0.0318098 0.121167 -0.00811427 +-0.0737276 0.154081 -0.027902 +0.0162665 0.119939 -0.0112703 +-0.0270805 0.0349584 0.0482667 +-0.0284917 0.101554 0.0428228 +-0.0249764 0.159657 -0.0011434 +-0.0585904 0.142433 0.0328417 +-0.0486888 0.138617 0.0104009 +-0.0234979 0.0724108 0.049066 +-0.019247 0.158526 -0.00845424 +-0.0716194 0.0382939 0.000706648 +-0.0412769 0.0356814 0.042879 +0.0483353 0.0532726 -0.00489034 +0.0606695 0.0664968 0.0121468 +-0.069489 0.104131 0.0386578 +0.00750734 0.0990008 0.0480837 +-0.0624532 0.126929 0.0430601 +-0.0629568 0.15367 -0.0336031 +-0.0374985 0.0747273 0.041938 +0.0426086 0.0930422 0.0261716 +-0.0849422 0.153595 0.0209155 +-0.0543959 0.12661 -0.00573734 +-0.0742502 0.161028 -0.0329547 +-0.0627767 0.112367 0.0371562 +-0.0532977 0.158553 0.00873827 +-0.0769168 0.123731 -0.00719316 +0.0393533 0.0847596 0.0341247 +-0.0692244 0.15634 0.0190049 +0.0343018 0.0936044 -0.01506 +-0.0165008 0.0800909 0.0572191 +-0.014166 0.184338 -0.0242563 +-0.0631574 0.159924 -0.0465929 +-0.0374857 0.0519831 0.0389557 +0.03646 0.112262 0.0117392 +-0.0411413 0.0364371 -0.0278037 +0.0185712 0.126949 0.0207922 +-0.0603223 0.0385556 0.0217181 +-0.0769591 0.131054 -0.00672048 +-0.0295123 0.0565107 -0.0214026 +0.0430875 0.0930739 0.0251589 +-0.00582403 0.0390405 -0.0106025 +-0.0553855 0.0337802 0.0222515 +0.014479 0.100435 0.047468 +-0.0548752 0.0984577 -0.0213117 +-0.0501571 0.0529434 0.0176286 +0.0183573 0.0461568 -0.0227219 +-0.0554809 0.0440191 0.0450323 +-0.0877934 0.0860475 0.0044818 +0.00321463 0.130705 0.0223233 +-0.0505315 0.0389504 -0.011562 +-0.0819835 0.132406 -0.00340088 +-0.0758067 0.0877331 -0.0139103 +-0.091338 0.14476 0.0251578 +-0.0649682 0.034557 0.0300942 +-0.0283013 0.113756 -0.016413 +0.0259713 0.0619044 0.0444933 +-0.0535159 0.0640852 0.0330775 +-0.0046427 0.0482096 -0.0303136 +-0.0584956 0.0861498 0.0443498 +-0.0655423 0.145055 -0.0169033 +-0.0423586 0.123855 0.0235885 +-0.0864234 0.0806346 0.0145003 +-0.033107 0.125984 0.00180258 +0.000400525 0.0433705 -0.0249688 +-0.0337351 0.126905 0.0148106 +0.0594437 0.0677773 0.0191638 +-0.0433018 0.0342732 -0.0267127 +-0.0668634 0.040937 0.011312 +-0.0651408 0.146773 0.0392721 +0.0142259 0.080787 -0.0303234 +-0.0564981 0.0973554 0.0431547 +0.0234826 0.113521 -0.012343 +-0.022737 0.0385766 -0.00982941 +-0.0695434 0.0352232 -0.00418951 +0.060768 0.0651161 0.0111484 +-0.00338536 0.100168 0.0483773 +-0.0154942 0.0772732 0.0564359 +-0.0581438 0.114319 -0.0148345 +-0.0758612 0.165153 -0.0370257 +-0.0666041 0.164889 -0.0207192 +-0.0401309 0.160681 -0.0117333 +-0.00727995 0.0389199 -0.00704692 +-0.0726288 0.07489 0.035733 +0.0572537 0.0657957 0.00220085 +-0.0564793 0.151056 0.0307055 +-0.0459743 0.153608 0.00885524 +-0.046245 0.034596 0.0410145 +-0.0611658 0.168359 -0.0606871 +-0.0242347 0.0401682 0.0541848 +0.0432765 0.10012 0.00816425 +0.0330202 0.102118 0.0356213 +-0.00368236 0.0583856 -0.0334327 +-0.016783 0.0973001 -0.0271368 +0.018711 0.100467 -0.0223545 +-0.0500289 0.122604 0.03284 +-0.063243 0.0333437 -0.00222576 +-0.0187202 0.0613304 -0.0355606 +-0.0268504 0.0548324 -0.0264063 +0.0215374 0.086463 -0.0256391 +-0.0138967 0.099791 -0.0237429 +-0.00550708 0.0774167 0.0583085 +0.055466 0.0507517 0.00421414 +0.00822806 0.0344179 0.00390084 +0.028423 0.0535254 0.0391477 +-0.00689074 0.103109 -0.0232386 +-0.0320031 0.0370471 -0.0177181 +-0.0255422 0.0377889 0.0158759 +-0.0476682 0.165409 0.0039929 +-0.0673807 0.115762 0.049991 +0.00348136 0.111402 0.0420175 +-0.081586 0.0734778 0.0135382 +0.0427229 0.10007 0.00318201 +-0.0456223 0.0548403 -0.0108081 +-0.0226179 0.0464363 -0.0275647 +-0.0201905 0.172698 -0.0217858 +0.0374948 0.0941477 0.0350502 +0.0227469 0.0686119 0.0468992 +-0.012216 0.174205 -0.0276647 +-0.0906322 0.112714 0.0163744 +-0.0599044 0.111127 -0.0158584 +0.00535116 0.0480874 -0.0284111 +-0.0295604 0.158116 0.000994125 +0.0104513 0.122961 -0.0105071 +-0.0619452 0.123832 -0.00870252 +0.00605345 0.0341614 0.00369541 +-0.0696099 0.138316 0.0468524 +0.00349102 0.11963 0.0373483 +-0.0495577 0.0338416 0.0269497 +-0.0500211 0.0529295 0.0155558 +-0.0534917 0.0491191 0.0286591 +0.0546976 0.0478581 0.0131951 +-0.0803392 0.0841108 -0.00756769 +-0.0693719 0.180628 -0.057909 +-0.0247145 0.161052 -0.00252569 +0.0299408 0.0713176 0.0415086 +-0.0779905 0.173544 -0.0470087 +-0.0168218 0.086916 -0.0386596 +-0.0658968 0.109505 -0.0131657 +0.0326969 0.10609 0.0333845 +0.0191388 0.0356129 -0.00667825 +-0.0168818 0.100112 -0.0240537 +-0.0620293 0.135502 -0.00717407 +0.0377405 0.110012 0.0179226 +0.0360001 0.0381146 0.00239588 +-0.0151683 0.160834 -0.010917 +-0.0894324 0.117571 0.0455052 +0.0402874 0.063301 -0.00576463 +0.000231956 0.0755133 -0.0357459 +-0.0663652 0.0422587 0.0107808 +-0.0908359 0.114163 0.0368153 +0.0456753 0.0833922 0.00418733 +-0.0426429 0.0563425 -0.0115708 +-0.0472127 0.168412 -0.001987 +0.0163989 0.0433061 -0.0232691 +-0.0181224 0.165314 -0.018178 +0.014203 0.08785 -0.0301032 +0.00716038 0.0832586 0.0561062 +0.0547452 0.0661481 0.0263648 +0.0207672 0.0700064 0.0493524 +-0.0820552 0.1102 0.0401793 +0.0336664 0.0753805 -0.0167583 +-0.0827158 0.108829 0.000295564 +0.0250546 0.0420912 0.0376641 +-0.0866523 0.0868042 0.0239447 +-0.082018 0.151309 0.00327526 +0.0209029 0.107601 -0.0159886 +-0.0134952 0.0659366 0.0537869 +-0.0902062 0.143054 0.0286714 +0.0484774 0.0431365 0.00824398 +0.00679595 0.0352467 -0.0139815 +0.0154 0.0448131 -0.0240573 +-0.0715189 0.0972122 0.0409969 +0.0152962 0.0652155 -0.0297912 +0.0106046 0.128135 -0.0020835 +0.0273536 0.106086 0.0379553 +-0.0176729 0.0540415 -0.0325983 +-0.00110521 0.131378 0.0121444 +-0.0724827 0.124619 0.0532114 +-0.0738593 0.174047 -0.0391959 +-0.0646169 0.109762 0.0377795 +0.00521659 0.0824462 -0.0340286 +-0.0280135 0.0591603 -0.0264206 +-0.0676617 0.0433934 0.000689977 +0.0407264 0.0999947 0.0251764 +-0.0322885 0.177691 -0.00536129 +-0.0547546 0.035972 0.0465789 +-0.0425002 0.115266 0.0336474 +-0.0687451 0.0708436 0.0347552 +-0.0375019 0.0804666 0.0432825 +-0.0182946 0.181579 -0.0243778 +-0.0789826 0.115456 0.0491224 +-0.0415063 0.0534301 0.0394734 +-0.0708913 0.0403263 0.00282802 +-0.0548298 0.0927311 -0.0220321 +-0.0745142 0.138634 0.0488155 +-0.0807745 0.102028 0.0317433 +-0.0249646 0.181509 -0.0170525 +-0.0727415 0.154031 -0.0358995 +-0.0698172 0.0908437 -0.0164973 +-0.0366476 0.0577363 -0.0111372 +-0.0192308 0.0947234 -0.0324688 +-0.0118669 0.165326 -0.0197278 +-0.0804375 0.137229 0.0490949 +0.0134351 0.129972 0.01319 +0.0457654 0.0791979 0.00319646 +-0.0469166 0.129554 0.0250362 +-0.0581769 0.137607 -0.00562722 +0.04256 0.0817421 -0.00578018 +-0.0478101 0.0884245 -0.0219224 +-0.0424147 0.0344885 0.0314161 +-0.0645764 0.139638 0.0400104 +0.00451352 0.10035 0.0463879 +0.0423459 0.0915624 -0.00580854 +-0.0833163 0.106091 -0.000625527 +-0.0510681 0.0429687 0.0449412 +-0.0258019 0.0564099 0.0391373 +-0.0908661 0.142018 0.0261694 +-0.0222707 0.180155 -0.0129798 +-0.0375032 0.0987213 0.042382 +-0.0135516 0.0445689 0.0502862 +-0.0749157 0.0818909 0.0378096 +-0.042351 0.0336287 -0.0184783 +-0.0104895 0.0660607 0.0552117 +-0.0713722 0.163817 -0.0449613 +-0.0170629 0.040485 0.0522671 +-0.0629502 0.151043 -0.0063137 +-0.0420636 0.159404 0.00394669 +-0.0438717 0.105649 -0.0205239 +0.00352724 0.10161 0.0446753 +-0.00861199 0.118019 -0.01506 +-0.0658335 0.0881117 -0.0184537 +0.00251222 0.126485 0.0307749 +-0.0485567 0.0390246 -0.0119389 +-0.0600846 0.0399274 0.0217122 +0.0128427 0.034706 0.0391137 +-0.0306178 0.0409006 -0.0300462 +-0.0635449 0.0356868 -0.00823988 +-0.0063607 0.125295 -0.00886018 +-0.025376 0.059259 0.0400414 +0.0015066 0.0490028 0.0513272 +-0.0107915 0.0798668 -0.0380291 +0.0455381 0.0540654 0.0323771 +-0.0645999 0.0347243 0.0265296 +-0.074389 0.0874223 0.0399149 +0.0147945 0.0909396 -0.0283095 +-0.0256418 0.0382997 -0.00275652 +-0.0249427 0.17123 -0.0116584 +-0.0860007 0.147303 0.0341634 +-0.00989368 0.129282 0.00314288 +-0.056803 0.119986 -0.0107265 +0.0131837 0.129339 0.0031365 +0.0204173 0.0925165 -0.0239466 +-0.0881399 0.122604 0.000302573 +-0.0687931 0.166618 -0.053004 +-0.0116307 0.0337076 -0.023716 +-0.0395047 0.0776369 0.0429957 +-0.0435015 0.086056 0.04322 +0.0313221 0.0899509 -0.0192278 +-0.0512591 0.0544504 0.0206222 +0.0450165 0.0718833 0.00186291 +-0.0240342 0.0381218 0.00683415 +-0.0643335 0.153058 -0.000307605 +-0.0553413 0.0491317 -0.00437815 +0.0461434 0.0834347 0.0111711 +0.0469552 0.0427274 0.0188429 +0.0403147 0.061632 0.0300225 +-0.0345217 0.127119 0.00425139 +-0.0560415 0.0335011 -0.000906542 +0.0458803 0.0848141 0.013166 +0.0355169 0.0713149 -0.0148173 +-0.00649249 0.0978569 0.0522238 +-0.0720202 0.152598 -0.0428872 +0.00936768 0.0509673 -0.0289075 +-0.017803 0.0813337 -0.0391893 +-0.0164921 0.101629 0.0439544 +-0.0749763 0.136928 -0.00646616 +-0.018438 0.165372 -0.011068 +-0.0749694 0.0749712 0.0333987 +-0.0344916 0.0547205 0.0381399 +-0.0252176 0.0351344 0.0519405 +-0.0785113 0.10447 -0.00758869 +-0.0837382 0.0804711 0.0245022 +0.0352492 0.043109 0.0289456 +-0.0657408 0.0353871 0.0379044 +-0.0633722 0.04322 0.0387983 +0.0187703 0.0504962 0.0444745 +0.0134519 0.128957 0.00181284 +0.00181742 0.106617 -0.0209271 +-0.069971 0.156225 0.0143836 +-0.0793623 0.0739499 0.024599 +0.0192573 0.0903239 -0.0256184 +-0.0785673 0.0716608 0.0214639 +0.0207235 0.123161 0.0287274 +-0.0694864 0.116115 0.0518347 +-0.022007 0.0754165 0.0531212 +0.00541958 0.0361021 -0.0235849 +0.0126937 0.0345417 0.0229719 +-0.0272554 0.0377383 0.0173779 +0.0183414 0.126234 0.023568 +-0.0782171 0.159705 -0.021925 +0.0319954 0.11684 0.00152318 +-0.0364949 0.0747255 0.0419725 +-0.00631217 0.0422986 0.0485312 +-0.0696892 0.0733745 -0.0120577 +-0.0574743 0.0452883 0.0435332 +0.0270163 0.115378 0.0322111 +0.0100342 0.126121 -0.00591235 +-0.0765631 0.160404 -0.0136187 +0.0104935 0.0976882 0.0488434 +-0.088546 0.102334 0.0113879 +-0.0488628 0.0600536 0.0351294 +-0.0102645 0.038442 0.0220215 +-0.0471272 0.159118 -0.00765489 +0.0282711 0.0480264 -0.0137299 +0.0106928 0.0341923 -0.0160349 +-0.0413207 0.122297 -0.0113384 +-0.0112299 0.173502 -0.0278641 +-0.0702692 0.146349 -0.0238997 +-0.0311686 0.0820079 -0.0315681 +-0.058698 0.0349789 0.0448461 +0.0225489 0.0444802 -0.0157666 +0.00650352 0.0547197 0.0529464 +0.0375985 0.10834 0.0241868 +0.026474 0.110098 0.0367031 +0.0104332 0.0344417 -0.0125223 +-0.00834994 0.0943471 -0.0340215 +-0.0726673 0.155437 -0.0339106 +-0.0830075 0.0762889 0.0105229 +-0.0846192 0.0805533 0.0214764 +-0.0805239 0.148418 0.0381727 +-0.087237 0.106355 0.0143591 +-0.0447805 0.0423866 -0.0153071 +-0.0837301 0.147364 0.00414541 +-0.0832136 0.0770175 0.0194025 +-0.0259181 0.0649186 0.0404266 +0.0449079 0.0931824 0.0151569 +0.0348585 0.0808647 0.0399076 +-0.000497657 0.066177 0.0565989 +-0.081976 0.138997 -0.000769762 +-0.0164973 0.088378 0.056467 +-0.0655061 0.041163 -0.00538315 +0.0250139 0.0449606 -0.012685 +-0.0684343 0.0667749 -0.00454154 +0.0313723 0.0597573 -0.0175925 +-0.073748 0.0805288 0.0380979 +-0.0431166 0.0378307 0.0441123 +-0.0704863 0.169511 -0.0510127 +-0.0418064 0.0884466 -0.0220226 +-0.0725566 0.0737794 0.034925 +-0.0432285 0.12305 0.0247373 +0.0537086 0.0670896 0.000808459 +-0.0318715 0.0510682 0.0382665 +0.00533718 0.124533 0.0332195 +-0.0234982 0.0988724 0.0447778 +-0.0873895 0.143261 0.0370491 +0.0450408 0.0625178 -0.00265494 +-0.0618764 0.138649 -0.0067701 +-0.0637266 0.174609 -0.0527846 +-0.0739864 0.158247 -0.0289285 +-0.0616651 0.174109 -0.0575903 +-0.0346424 0.0780819 -0.0225024 +-0.0310543 0.0337173 -0.0219116 +-0.0769455 0.154831 -0.00883158 +-0.0339952 0.0752026 -0.0244888 +0.0354333 0.111001 -0.000827134 +-0.0790203 0.0935614 -0.0105962 +-0.0879913 0.136375 0.00520661 +-0.0582272 0.048399 0.00675942 +-0.00714757 0.130278 0.00704353 +0.0114556 0.0340617 0.001148 +0.0458421 0.0876102 0.0101629 +0.00312017 0.129984 5.00643e-07 +-0.0376568 0.0591992 -0.0116433 +0.00923557 0.129984 0.00166977 +-0.0579608 0.139021 -0.00516612 +-0.0909934 0.148856 0.0221303 +-0.0611919 0.0341824 0.0259657 +-0.0917869 0.115969 0.00931507 +0.00445187 0.116712 -0.0177471 +0.00711096 0.111601 -0.019782 +-0.00341693 0.115827 -0.0167447 +0.0411288 0.0792971 0.0313687 +-0.0358185 0.0337288 -0.0209957 +-0.0304972 0.0703216 0.0396594 +-0.076218 0.0887607 0.0388797 +-0.0701244 0.0632147 0.00385793 +0.0432229 0.0888059 -0.00480108 +-0.0321931 0.123411 -0.0044713 +0.0221624 0.0959197 -0.0219723 +0.0234605 0.0367801 -0.00165856 +-0.0234711 0.183379 -0.010712 +-0.0461137 0.0368295 -0.0192985 +0.023814 0.119372 0.031074 +-0.0617151 0.0722545 -0.0157777 +-0.0697425 0.164473 -0.0161193 +-0.0700395 0.077854 0.0390736 +-0.0793237 0.108591 -0.00458021 +-0.0622625 0.155951 0.0127725 +-0.0579896 0.126711 -0.00710506 +-0.0819874 0.0788394 -0.00151395 +-0.051802 0.111349 -0.0178923 +-0.0548009 0.0547174 0.00969263 +0.0456361 0.0819814 0.00319705 +-0.0362696 0.0447516 0.0428152 +-0.0678285 0.156225 0.0151421 +-0.0441012 0.15765 -0.00916962 +-0.0698712 0.102299 -0.0142744 +-0.0434973 0.0719505 0.0423325 +-0.0385101 0.124563 -0.00772445 +-0.0720478 0.154003 -0.0409023 +-0.0415192 0.155101 0.00654483 +0.030443 0.0496674 -0.00974777 +0.0100263 0.0352289 0.0272451 +-0.0657931 0.0349145 0.0296068 +-0.00453349 0.0975685 -0.029357 +-0.0575464 0.0576229 0.00774375 +-0.0675655 0.156308 0.0210392 +-0.0625478 0.177823 -0.0603383 +-0.0164994 0.107189 0.0421238 +-0.0628199 0.164682 -0.0345962 +-0.0725695 0.162422 -0.0399552 +-0.0295698 0.0377598 0.0258888 +-0.0285577 0.048864 -0.0238529 +-0.051128 0.0487627 0.0151791 +0.0297172 0.11319 -0.0079908 +-0.0129858 0.0389757 -0.0119758 +-0.0519687 0.0514416 0.0131188 +0.00659366 0.0345497 0.005308 +0.0431201 0.0959054 0.0231686 +0.0426395 0.101487 0.00716583 +-0.0326038 0.039499 -0.0302708 +-0.022273 0.0879769 0.0544159 +-0.0501719 0.132485 0.029178 +-0.0104724 0.123683 0.0330383 +0.0158783 0.103153 -0.0212298 +-0.0380583 0.0406922 0.0433465 +-0.05672 0.0341106 -0.0113244 +0.00284082 0.0994342 -0.0233056 +-0.00189869 0.037664 0.017192 +0.00849573 0.122392 0.0350922 +-0.0911887 0.13375 0.0222165 +0.0145889 0.124413 0.0307966 +0.0365837 0.0686678 0.0370221 +0.00534141 0.0341316 0.016402 +-0.0652159 0.16242 -0.0585196 +-0.0708983 0.120893 -0.00865195 +-0.0790974 0.103427 0.0328545 +-0.0233223 0.0386973 -0.0137829 +-0.0870669 0.0909973 0.0256595 +-0.0237781 0.0389651 0.0367703 +-0.0314981 0.107032 0.0395669 +-0.0488684 0.125064 -0.00815774 +0.0188255 0.104686 -0.0188612 +-0.0214383 0.162534 -0.00657802 +-0.0923673 0.124202 0.041188 +-0.0116952 0.0383509 0.0145738 +-0.0933085 0.117399 0.0213072 +0.00147085 0.0388322 0.0258794 +0.041327 0.0986069 0.0251647 +-0.063339 0.160302 -0.0538579 +0.0235731 0.114695 -0.0116124 +-0.0828981 0.101969 0.02963 +-0.0616452 0.139553 0.0354433 +-0.0343725 0.0357923 0.047703 +-0.0451209 0.0377458 0.0446873 +-0.0920088 0.118668 0.00830639 +-0.0495672 0.135498 0.00241956 +-0.0603606 0.0633645 0.0289482 +-0.067238 0.175347 -0.0588701 +0.053058 0.0705565 0.0234346 +0.0380671 0.0821074 0.0357563 +-0.0797544 0.0720045 0.0191472 +-0.0844521 0.153452 0.0225801 +-0.0749035 0.113464 -0.00617122 +-0.0384926 0.0605846 0.0409778 +-0.075255 0.0832856 0.0380964 +-0.0198342 0.0855003 -0.0383524 +-0.0649244 0.113824 -0.0119395 +0.0421 0.0690665 -0.00478535 +-0.0615968 0.0595411 0.0052883 +0.0357976 0.0378059 0.0192762 +-0.0314223 0.0343059 -0.0206653 +-0.0805979 0.0786983 -0.00455339 +-0.0516467 0.0481272 0.0388737 +-0.0325014 0.0618008 0.0386259 +0.0188656 0.11384 -0.0146811 +0.0360105 0.106014 0.0293761 +-0.0489136 0.125469 0.0310273 +-0.0702125 0.173659 -0.0540385 +0.0100557 0.112263 -0.0189498 +-0.0643724 0.0341771 0.0147182 +-0.023212 0.165344 -0.00918469 +0.059734 0.0692161 0.0111359 +0.0164747 0.104398 0.044527 +-0.0870127 0.10633 0.011369 +0.030786 0.0765476 -0.0208061 +-0.0657333 0.121445 0.0506733 +-0.00450341 0.0703715 0.0573471 +-0.0525943 0.0544911 -0.00726112 +-0.0226202 0.181624 -0.0117104 +0.00179227 0.0340095 -0.0213712 +-0.0768516 0.103431 -0.00952853 +-0.0773369 0.105608 0.0341784 +-0.0364954 0.0987325 0.0427313 +-0.0532526 0.161216 -0.00188451 +-0.0658747 0.0981197 -0.0167177 +-0.00202406 0.126832 0.0305449 +0.0396296 0.0392572 0.0187428 +0.0114981 0.0658063 0.0534716 +-0.0660116 0.154522 0.0303582 +0.0322049 0.0871235 -0.0192744 +-0.0161934 0.116736 -0.0156361 +-0.00805531 0.101876 -0.0238922 +-0.0425065 0.0548487 0.0395533 +-0.0623557 0.152158 -0.0235797 +-0.0550956 0.0333795 -0.00606735 +0.0194036 0.123725 -0.00335403 +0.0149002 0.0348014 0.0340409 +-0.0174953 0.112701 0.0395679 +-0.0824727 0.0992304 -0.00559052 +-0.0428553 0.101381 -0.0214106 +-0.0291214 0.0621103 -0.0254198 +-0.0530392 0.146248 0.021397 +-0.0658806 0.040185 0.0344505 +0.0298766 0.0889056 0.0433386 +0.0206783 0.0361727 0.0176735 +-0.029331 0.0791866 0.0433726 +-0.0474654 0.135069 0.0155888 +-0.0798447 0.116298 -0.00419638 +0.0278259 0.115624 -0.00659973 +-0.0400692 0.157713 -0.010751 +-0.087695 0.0860952 0.016472 +0.0119148 0.0630446 0.0522963 +-0.0586388 0.0367329 -0.00984378 +-0.0545581 0.0628278 0.0306388 +-0.0904983 0.133768 0.0272133 +0.0424823 0.0958192 -0.00180898 +-0.085893 0.115781 0.0473131 +-0.0827739 0.0762807 0.0135216 +-0.0783317 0.109572 0.0415234 +-0.0535658 0.132546 0.0330634 +-0.0901834 0.114057 0.0406088 +0.0134074 0.0463149 -0.0249889 +0.0112253 0.0952809 -0.0268838 +0.0150227 0.080777 0.0534508 +-0.0278391 0.168266 -0.00883037 +-0.0698489 0.175309 -0.0448893 +-0.0895811 0.137877 0.0241855 +-0.0790004 0.100402 -0.00859092 +-0.062851 0.116991 0.0425454 +0.0239206 0.0352552 0.0228022 +-0.000501715 0.0634055 0.0567322 +0.046037 0.0806318 0.0171753 +-0.0766672 0.154399 0.00327135 +-0.0117177 0.129576 0.0183624 +-0.0885031 0.148521 0.0281728 +-0.0728479 0.14776 0.0416103 +-0.015205 0.175685 -0.0260892 +-0.082938 0.100617 -0.00458659 +0.0398543 0.102779 0.025179 +-0.0336965 0.120802 0.028215 +-0.0625742 0.17727 -0.0581696 +-0.00806953 0.0988363 -0.0267114 +-0.0560752 0.0602595 -0.0044615 +0.0597447 0.0594744 0.0191904 +-0.0106444 0.0481591 -0.0303544 +0.00351281 0.081445 0.056735 +-0.0672464 0.173921 -0.0582812 +0.00251634 0.0459065 0.0480561 +0.000471055 0.038278 0.000679374 +-0.0002129 0.122901 -0.0103152 +-0.0382613 0.0393263 0.043596 +0.00848754 0.0426921 0.0451471 +-0.0482154 0.137103 0.0123981 +-0.015727 0.0657542 -0.0377517 +-0.0282054 0.0676114 -0.0305119 +-0.0306807 0.0363386 -0.0186663 +-0.0476849 0.119711 0.0291692 +-0.0663764 0.12565 0.049733 +-0.0488788 0.134867 0.0224297 +-0.0877229 0.0888584 0.0234132 +-0.0756171 0.172473 -0.0369846 +-0.033348 0.0384446 -0.00813352 +-0.0442894 0.126542 0.0198398 +0.0235131 0.101506 -0.0194672 +0.0538716 0.0661448 0.0268494 +-0.073604 0.148628 -0.0255988 +-0.0671901 0.0335697 -0.00322908 +-0.0886344 0.0949473 0.0228281 +-0.0761608 0.175035 -0.0499961 +0.0306065 0.111866 -0.00856301 +-0.0317456 0.124703 -0.000629789 +-0.0904268 0.150188 0.0141369 +-0.0639022 0.10675 -0.0154602 +-0.0541798 0.157923 -0.00210942 +-0.00323215 0.0940338 -0.0336602 +-0.0164901 0.115444 0.0380258 +0.053298 0.0648217 0.0277585 +-0.0843615 0.0993477 -0.00259153 +-0.00674006 0.0712942 -0.0362643 +-0.0653258 0.140047 -0.00770568 +-0.00635478 0.123294 -0.010702 +-0.055158 0.0361639 -0.0112393 +0.00412979 0.113096 -0.0199676 +-0.064574 0.0418551 0.0316967 +0.0525746 0.0462075 0.0162071 +-0.0234833 0.0448815 0.0530288 +-0.071322 0.138326 0.0479203 +0.0425401 0.0986672 0.000167984 +0.0273648 0.102724 -0.0167839 +0.0332874 0.111381 0.0289227 +-0.0537039 0.0594504 0.0244709 +-0.0227345 0.0390118 0.0369431 +-0.00354236 0.0429091 0.0474905 +-0.0724136 0.156792 -0.00114359 +-0.00249623 0.0689511 0.056733 +-0.0482461 0.131793 0.0256765 +-0.0515081 0.0490357 0.0376444 +-0.0944953 0.125552 0.0212653 +0.00638447 0.0346255 0.0414585 +0.0141724 0.0940368 0.0505038 +-0.0688973 0.120914 -0.00896239 +-0.0520364 0.14934 0.0173988 +0.00422853 0.0810435 -0.0341743 +-0.0515685 0.0473635 -0.00788512 +-0.0237608 0.156715 -0.0053038 +-0.0356104 0.127425 0.0141251 +0.035299 0.113666 0.0170439 +0.0334236 0.0903004 0.0414245 +-0.0251823 0.172681 -0.0196186 +-0.08807 0.113074 0.0239452 +0.0189601 0.036126 0.0191857 +0.00788239 0.0363273 0.00580236 +-0.0173959 0.0348327 0.0487444 +-0.0878896 0.111968 0.039224 +-0.064655 0.115706 0.0452756 +0.0311169 0.0445787 0.030603 +0.0441778 0.076309 0.025099 +-0.0896358 0.0915718 0.0124456 +-0.065807 0.090969 -0.0181206 +-0.0709064 0.123821 -0.00862928 +0.00649864 0.0924086 0.053834 +-0.0704989 0.134077 0.0490714 +-0.0596081 0.0614162 -0.00289701 +0.0242732 0.0346695 0.0161217 +-0.0464984 0.101529 0.041912 +-0.0498635 0.101385 -0.021584 +0.00433106 0.0496013 -0.0292546 +0.0107427 0.041795 0.045086 +-0.0739382 0.132552 -0.00766265 +-0.0162071 0.174195 -0.0247085 +-0.0886736 0.132413 0.0428724 +0.0320792 0.05838 -0.0156698 +-0.0192343 0.038226 0.00590432 +-0.0445033 0.11527 0.0334071 +-0.0847891 0.15265 0.0254465 +-0.0933214 0.129622 0.0172404 +-0.0346417 0.056288 -0.0107606 +-0.072488 0.172225 -0.0500329 +0.0233375 0.0606402 -0.0253621 +0.0366723 0.106016 0.0285439 +-0.0276074 0.0356491 0.0527176 +-0.053407 0.152198 0.0189083 +-0.0742721 0.166608 -0.0409997 +-0.0457331 0.0753099 -0.0177194 +-0.00672552 0.0670096 -0.035497 +-0.00219357 0.131295 0.0117423 +-0.0261647 0.0620468 0.0393395 +-0.0553241 0.0335005 0.00825618 +-0.0228582 0.119091 -0.0120569 +0.0213076 0.110412 -0.0149847 +-0.0314817 0.0889488 0.0439042 +0.0313336 0.0477022 -0.006755 +-0.0386183 0.174771 -0.00621679 +0.040988 0.0392554 0.0153655 +0.0608733 0.0623548 0.014161 +-0.00841473 0.0366574 -0.0164161 +-0.0191613 0.038383 0.000326194 +-0.00880856 0.0882704 -0.0368626 +-0.0596465 0.149865 -0.00094307 +0.00994371 0.0978413 -0.0235989 +0.0455086 0.055594 0.0323303 +-0.0860233 0.102167 0.0034068 +-0.0281256 0.165243 -0.0164075 +0.00425042 0.072607 -0.0344972 +0.0235113 0.118015 0.0324132 +-0.000261091 0.0350803 0.00896105 +-0.0532978 0.147774 0.0234078 +-0.0554295 0.0433 -0.00807812 +-0.0771312 0.155572 -0.0108986 +-0.0841536 0.0790628 0.0035277 +-0.0900384 0.135039 0.0102136 +-0.0727986 0.0849862 -0.0158247 +0.0336101 0.0962478 -0.0138935 +-0.0284441 0.0732827 -0.0345293 +0.00969167 0.0357093 0.0447693 +-0.0267255 0.0380235 0.0244373 +-0.0572883 0.132547 0.0364836 +-0.0528311 0.0941603 -0.0218064 +0.0400501 0.0644468 0.0314841 +-0.036531 0.116238 -0.0149852 +-0.00649604 0.0912014 0.0567618 +0.0144842 0.101799 0.0469727 +0.00323629 0.131729 0.0108817 +-0.0308992 0.0734931 -0.0305082 +0.0172066 0.068625 0.0512164 +-0.0657497 0.0765846 -0.017077 +-0.0737602 0.111876 0.0478461 +-0.0694356 0.066827 -0.00357005 +-0.0585001 0.119809 0.0399342 +0.0441644 0.0931187 0.000177172 +-0.0843417 0.0952366 0.029868 +-0.054753 0.0782755 -0.0197234 +-0.00738705 0.0379427 -0.0155249 +-0.0910658 0.143334 0.0151805 +-0.00249685 0.08015 0.0577289 +0.0340507 0.0835544 0.0405264 +-0.0523382 0.161184 -0.00281855 +-0.0812419 0.109765 0.0353982 +-0.0582589 0.129739 0.0385905 +0.0543559 0.049285 0.0042337 +0.015086 0.0406501 0.0443863 +-0.0280294 0.0835807 0.0475884 +-0.0393811 0.128131 0.00244283 +0.0208178 0.0415166 -0.0167046 +-0.0881465 0.111869 0.0203319 +0.0179003 0.0347727 0.0238228 +-0.0656433 0.0657616 -0.0058195 +-0.0840769 0.0911454 0.0297191 +0.00624923 0.0796338 -0.0339546 +0.0328487 0.0876389 0.0423414 +0.0276661 0.034679 0.0131567 +-0.00286572 0.104506 -0.0226523 +-0.0862889 0.10771 0.0183439 +0.0408829 0.0937805 -0.00720194 +0.000164408 0.0895345 -0.0346177 +-0.0843436 0.144613 0.00514953 +-0.0675701 0.180805 -0.0555973 +0.0220024 0.0727679 0.0493999 +-0.0156461 0.186781 -0.0233704 +-0.0187078 0.0364661 -0.0182818 +-0.0254003 0.0649585 0.0413183 +0.0122459 0.0780339 -0.0313519 +-0.0555013 0.0547806 0.00866941 +-0.0521449 0.157571 -0.00396744 +-0.073564 0.156227 0.0174776 +-0.00865052 0.104822 -0.0230347 +-0.0529425 0.0516633 -0.00638853 +-0.0652396 0.0384193 0.0154218 +0.0233172 0.0809188 0.0496338 +-0.0494012 0.054529 0.0344155 +0.0222475 0.0847573 -0.0259093 +0.0413844 0.0438265 0.0277643 +-0.0818597 0.146076 0.0399402 +0.0111047 0.0345035 -0.00868495 +-0.006336 0.10011 -0.0240468 +0.0245413 0.0819542 -0.0249712 +-0.00496439 0.130958 0.0121612 +-0.00978935 0.0841125 -0.0382567 +0.00551162 0.104351 0.0429177 +-0.0384918 0.0874952 0.0437107 +0.00946556 0.123094 -0.0106511 +-0.0897739 0.137922 0.033196 +-0.0653284 0.0349129 0.0366619 +0.00350126 0.104382 0.0428343 +-0.0368171 0.04253 -0.0279956 +-0.0634962 0.0775171 0.0416907 +-0.0558399 0.0666 0.0358943 +-0.033501 0.113967 -0.0166209 +-0.0105678 0.0384807 0.0255376 +-0.0875349 0.110472 0.0163392 +-0.0221423 0.0430524 0.0536615 +-0.0485662 0.0337988 0.0271958 +-0.0681764 0.0335792 0.00196619 +-0.00165753 0.05399 -0.0314052 +0.0457818 0.0746903 0.0202853 +-0.0845781 0.148672 0.0341151 +0.0452897 0.0861791 0.0201631 +0.00831626 0.0356874 -0.00657792 +-0.0196215 0.042233 -0.0284571 +-0.0649431 0.145366 0.0395451 +-0.0704953 0.104114 0.0382884 +-0.0414996 0.117985 0.0314618 +-0.0712521 0.17555 -0.0439596 +0.0452514 0.0931962 0.00916141 +0.00133085 0.058325 -0.0325937 +-0.0620033 0.158406 -0.0355965 +0.030344 0.1101 0.0335023 +0.0463602 0.0692197 0.00260588 +0.0444762 0.0945372 0.00319063 +-0.0491293 0.0430398 0.0442413 +-0.0789669 0.172206 -0.0419919 +0.0106503 0.130383 0.00504386 +-0.0484141 0.113756 -0.016334 +0.00450584 0.0547654 0.053433 +0.0441531 0.0720542 0.000197496 +-0.0134923 0.120989 0.0351213 +-0.0907438 0.135107 0.0202099 +-0.0590287 0.0481317 0.00366474 +0.0364319 0.108205 -0.00282023 +0.0178615 0.122874 -0.00643626 +-0.0356427 0.112876 -0.017464 +-0.0668607 0.154942 0.00387089 +-0.0486527 0.162759 0.00599863 +-0.00949915 0.105857 0.0435217 +-0.0615042 0.121243 0.0426924 +-0.0784762 0.0731416 -0.000473316 +-0.0740322 0.156054 0.0216877 +-0.0847959 0.101901 0.0272869 +-0.0596957 0.14074 -0.00502874 +-0.050497 0.0987878 0.0435099 +-0.071801 0.0745407 0.0361884 +-0.0549619 0.14242 0.0292765 +-0.0427321 0.0739589 -0.0183224 +-0.0508117 0.0354248 -0.0125858 +-0.0642011 0.0410429 0.0143098 +-0.0132685 0.101107 0.0437078 +-0.0475187 0.0790945 0.0436556 +0.0209941 0.0373175 -0.00464913 +-0.0204991 0.100239 0.044421 +-0.0684679 0.110537 0.0393979 +0.0243777 0.124503 0.0143821 +-0.0830368 0.0762381 0.00350806 +-0.073622 0.0747015 -0.00970199 +-0.0461368 0.13275 0.0116924 +0.0104091 0.0389479 -0.0231008 +0.0155004 0.116786 0.0363781 +0.0387891 0.096727 0.0316453 +0.0196906 0.074125 0.0513576 +-0.0225582 0.0383546 -0.00218286 +0.0487458 0.0724992 0.00846572 +-0.0668418 0.138273 0.0438208 +-0.0309771 0.0339917 0.0163773 +0.0411176 0.0661976 -0.00575682 +-0.0229076 0.0852723 0.0551257 +0.000828067 0.123861 -0.00936286 +-0.0250326 0.0621165 0.0410328 +-0.0651714 0.128382 0.0462127 +-0.0434333 0.15941 0.00551467 +-0.0264854 0.0348879 0.0467436 +-0.0628107 0.150584 -0.0245802 +-0.0123081 0.181626 -0.0249909 +-0.00919366 0.172678 -0.0237455 +0.0126063 0.0576596 0.0514859 +-0.0332159 0.0709306 -0.0214641 +0.0240158 0.0658883 0.0452055 +-0.0660765 0.124251 0.0501642 +-0.0588552 0.0351368 -0.0102919 +0.0124134 0.0346609 0.020994 +0.0122384 0.0644368 0.0527864 +0.0452304 0.0763569 0.00121116 +0.0242611 0.0448626 -0.0136813 +-0.0304238 0.12007 0.0279522 +0.0145126 0.0347575 0.026768 +-0.0217663 0.065545 -0.0358558 +0.00816067 0.125635 -0.0073679 +0.0183075 0.0679765 -0.028974 +-0.0180555 0.0909221 -0.0366017 +0.00824317 0.0602927 0.0539848 +-0.0687967 0.0894213 -0.0168337 +-0.0450098 0.146255 0.00342574 +-0.0335022 0.0661629 0.0402747 +-0.0781465 0.155117 0.0246877 +0.00450914 0.0758818 0.0564153 +-0.0135396 0.0366033 -0.0173816 +0.045728 0.077798 0.00320493 +-0.0913745 0.142001 0.0211607 +-0.0284862 0.102933 0.0423265 +-0.0302445 0.16108 -0.00171322 +0.0327554 0.116907 0.00609585 +0.0201031 0.0379621 0.0410367 +-0.090178 0.113449 0.0375353 +0.0422255 0.0887323 -0.00780894 +-0.0632995 0.045657 0.000708444 +-0.0344955 0.0889014 0.0434521 +-0.0735138 0.0874308 0.0404487 +-0.081144 0.11 0.0405445 +-0.046701 0.144949 0.00345496 +0.0239825 0.114006 0.0348506 +0.00951792 0.0799496 0.0550675 +-0.0589753 0.0343808 0.0315144 +-0.0715764 0.0724969 0.0344898 +-0.0763465 0.151411 -0.00788806 +0.0476241 0.0444058 0.00228058 +-0.0865319 0.0910336 0.0265354 +-0.0761893 0.0686573 0.0192806 +-0.0738377 0.169377 -0.0450494 +-0.013497 0.089796 0.0568243 +-0.003677 0.129286 0.0256231 +0.00334505 0.0372684 -0.00154693 +0.0285394 0.0735396 -0.0227021 +-0.067513 0.132633 0.0463034 +0.0459145 0.0862168 0.00717824 +-0.0631406 0.152896 -0.00931447 +-0.0777879 0.113218 0.0476364 +-0.023707 0.0340979 -0.0208155 +-0.0144671 0.110884 -0.0194361 +0.0102739 0.0667155 -0.0310192 +-0.00350236 0.0842813 0.0574606 +-0.0664798 0.0832826 0.043443 +-0.0635622 0.0403137 0.0257086 +-0.0426942 0.0666296 -0.0154091 +-0.017221 0.187225 -0.0211553 +-0.0336762 0.062222 -0.0135529 +-0.0673972 0.0641749 0.025006 +-0.0740248 0.149858 -0.0328754 +-0.0467235 0.128128 0.0253508 +-0.0262045 0.163884 -0.00647025 +-0.0271883 0.118982 0.0306038 +0.033772 0.0543003 -0.00971113 +-0.0758953 0.12228 -0.00740649 +0.00448236 0.11415 0.0407558 +-0.0698932 0.103728 -0.0136756 +-0.0567617 0.0782351 -0.019665 +0.0543638 0.0534389 0.000229046 +-0.081811 0.11456 0.047449 +-0.0565132 0.053486 0.0056729 +-0.057003 0.128342 0.0386502 +-0.0664962 0.0370022 0.0293944 +-0.0624918 0.101519 0.0421076 +-0.0687869 0.155336 0.00316719 +-0.0685122 0.141137 0.0449382 +-0.0527211 0.0709092 -0.0154358 +-0.00549985 0.0703921 0.057296 +-0.0709113 0.107952 -0.0112859 +0.00912605 0.108716 -0.0196568 +0.0361188 0.0794771 0.0382118 +-0.0588731 0.101172 -0.0189069 +-0.068257 0.129831 0.0487832 +0.0374605 0.0754022 0.0365814 +-0.032324 0.161031 -0.00122654 +0.0285746 0.0351013 0.0166057 +0.0394117 0.0870933 -0.0127933 +0.0113423 0.0644371 0.0532354 +-0.0583019 0.0447396 0.0435847 +-0.00749863 0.0773617 0.0576592 +-0.050194 0.116459 -0.0151638 +-0.0481437 0.0545922 0.0360102 +-0.0104704 0.100279 -0.0242341 +-0.0347529 0.111555 -0.0180951 +-0.0155011 0.120965 0.0341268 +-0.0784442 0.154274 0.027518 +0.0120599 0.0739551 0.0543847 +-0.0633352 0.0436031 0.0119653 +0.0217763 0.115313 0.0351727 +-0.0415089 0.165252 0.00421093 +0.0335736 0.0700381 0.039723 +0.00251112 0.0647983 0.0566425 +-0.0654261 0.0391693 0.0381077 +-0.0695564 0.114278 0.0502908 +-0.00162211 0.0369274 0.0160989 +-0.058966 0.123797 -0.00809452 +-0.0942641 0.126921 0.0212556 +-0.0335104 0.175675 -0.00315318 +-0.0368415 0.0943464 -0.0233446 +0.0133357 0.128238 -0.000223601 +0.00322397 0.0768846 -0.0351052 +0.00583724 0.038604 -0.0097514 +0.0244991 0.0390622 0.0333159 +0.039204 0.0699354 0.0337973 +-0.00749309 0.122405 0.0352331 +-0.0204932 0.0624346 0.0477982 +-0.0366651 0.0353042 0.023032 +0.0167127 0.0887461 0.050636 +-0.0697357 0.167099 -0.0218834 +0.0364696 0.0632797 0.0368445 +-0.0745038 0.141441 0.0470955 +-0.0621205 0.0458041 0.0366793 +-0.0544906 0.0820201 0.0451936 +-0.0645123 0.172574 -0.0485643 +-0.0421309 0.128083 -3.62159e-05 +0.0281636 0.121218 0.0186511 +-0.0121987 0.171236 -0.0257581 +-0.0281113 0.0605968 -0.0274147 +-0.0631879 0.0449558 -0.00115255 +-0.056884 0.0955743 -0.0213395 +-0.0516987 0.131736 -0.00321408 +0.00826283 0.110977 0.0402103 +-0.0738401 0.154086 -0.0269016 +0.00525204 0.071179 -0.0340737 +-0.0710521 0.173649 -0.0530415 +-0.0508226 0.162642 -0.00385759 +-0.0802179 0.141741 -0.00280512 +-0.0104908 0.12238 0.0346088 +-0.082839 0.145958 0.00218243 +-0.0764995 0.134472 0.0515165 +0.0572674 0.0552579 0.0228777 +-0.0459192 0.038241 -0.0182827 +0.0212995 0.0664627 -0.0275106 +-0.00266999 0.131274 0.0130017 +-0.0615996 0.159996 -0.0335919 +-0.0172476 0.12413 0.0281151 +0.0257469 0.104744 0.0391433 +0.033213 0.112692 0.0276861 +0.0156033 0.0352036 -0.0174539 +-0.030256 0.0608147 -0.0214135 +-0.0554996 0.0746996 0.0418498 +0.0250243 0.0618819 0.0448807 +0.0333333 0.0528011 -0.00875184 +0.0462789 0.0820452 0.011174 +0.0413782 0.0519867 -0.00685663 +-0.0228771 0.11806 -0.0129657 +-0.0608849 0.0381036 0.0449409 +-0.0255027 0.103002 0.0430099 +-0.0102615 0.128766 0.00159795 +-0.0140304 0.0389318 -0.0121434 +0.0242826 0.0691154 -0.0252241 +-0.0262141 0.0383199 -0.0177378 +0.000134491 0.116503 -0.0174981 +-0.0556551 0.0575 -0.00342108 +-0.0641179 0.115013 -0.0114251 +-0.0523454 0.059725 0.0287459 +-0.039493 0.0888698 0.0432118 +-0.0635876 0.0600882 0.0187607 +-0.0527647 0.138519 0.0263974 +-0.0421778 0.150669 0.00550662 +-0.0898169 0.147438 0.0111767 +-0.0440117 0.149183 0.00634807 +-0.0124981 0.0842783 0.057419 +-0.041501 0.0888244 0.0425932 +0.0390954 0.0814754 -0.0127535 +-0.00978632 0.0812687 -0.0379822 +-0.0143122 0.127128 -0.000614565 +0.043146 0.0650339 -0.00117659 +0.0508787 0.0465582 0.0223162 +-0.0187679 0.0341854 -0.027695 +0.0104088 0.0403968 -0.0232872 +-0.0615714 0.111062 0.0370307 +-0.0574772 0.0344195 0.038759 +-0.029988 0.0381577 0.0326274 +-0.0293835 0.0775974 -0.0345936 +-0.0174998 0.115454 0.0379182 +-0.0492034 0.0336154 -0.00143623 +-0.0160718 0.124871 -0.00420428 +0.0153397 0.120197 -0.0115352 +-0.0588103 0.157344 0.00530008 +-0.0448304 0.0956436 -0.0219722 +0.0199962 0.120682 0.0326204 +0.050389 0.0482108 0.0251806 +0.0208954 0.116644 -0.0117151 +-0.079388 0.147286 -0.00182539 +-0.0747645 0.0849032 -0.0147477 +-0.0505016 0.107064 0.0390734 +-0.0174992 0.03427 -0.0197565 +-0.01005 0.166619 -0.017705 +-0.0581312 0.0342101 0.0265873 +-0.0613803 0.17096 -0.0575947 +-0.0304965 0.0917653 0.0441169 +-0.0458806 0.10564 -0.0201801 +0.0202101 0.0833915 -0.0271395 +0.0323169 0.0376319 0.0223694 +-0.0223063 0.0380908 0.0216787 +0.035616 0.10962 -0.00284805 +0.0484836 0.0582148 0.031165 +-0.0809138 0.125107 -0.00520991 +-0.00566591 0.0540919 -0.0326394 +-0.00149662 0.114206 0.0415504 +-0.0263202 0.0930635 -0.029586 +-0.0680426 0.110046 0.0381289 +0.0249883 0.12025 -0.003603 +-0.0736149 0.155479 0.0262237 +-0.0299566 0.122268 0.0236125 +0.0238471 0.107154 -0.0155051 +-0.0566015 0.0451895 0.0246815 +-0.028491 0.0987621 0.0434122 +-0.0338535 0.0870951 -0.024854 +-0.0478322 0.0956344 -0.0220665 +-0.0226614 0.177177 -0.0135831 +-0.0810787 0.154935 0.0192662 +0.0439336 0.0428821 0.0236685 +-0.0114115 0.128814 0.0228458 +-0.0417827 0.0840916 -0.0212196 +0.0249862 0.118037 0.0310154 +-0.0641215 0.0336259 -0.00810847 +-0.0795112 0.081834 0.0339273 +-0.041505 0.119362 0.0299569 +-0.0033398 0.119986 -0.0131833 +0.0411805 0.0745986 -0.0077775 +-0.0446675 0.0636475 -0.0137193 +0.00937092 0.0937948 -0.0292997 +0.0415042 0.104246 0.00816492 +-0.0792333 0.169423 -0.0379787 +-0.0414888 0.0437926 0.0421195 +-0.00148881 0.0760516 0.0586512 +-0.0126769 0.0541386 -0.0335166 +-0.00577674 0.0385885 0.0246132 +-0.0394947 0.0676998 0.0417669 +0.0147262 0.129115 0.00511474 +-0.0045144 0.0774415 0.0584948 +0.0334512 0.0365216 0.00521608 +-0.0662857 0.0625946 -0.00141881 +-0.0659868 0.0418098 -0.00430732 +-0.0485691 0.0460686 -0.00963735 +0.0269239 0.0493817 -0.018692 +-0.0652895 0.175332 -0.0607504 +0.0558431 0.0722822 0.0186151 +0.0389971 0.039341 0.0203664 +-0.0252734 0.05785 0.0399799 +-0.0537245 0.0723552 -0.016258 +-0.0214963 0.104399 0.0429755 +-0.0649507 0.13395 0.041174 +-0.0641915 0.179229 -0.0572988 +-0.00649249 0.110023 0.0430195 +-0.0925801 0.120153 0.0312943 +0.0364682 0.111067 0.00216795 +-0.0487462 0.118344 0.031163 +0.0272987 0.047751 0.0374572 +-0.0235246 0.079724 0.0545007 +0.044563 0.0819287 0.0241608 +0.018083 0.0887399 0.0491141 +0.0180337 0.115273 -0.0142355 +-0.0838753 0.135332 0.0479212 +-0.0707318 0.154624 0.0301689 +-0.0897339 0.0916034 0.0174376 +-0.0487526 0.0782553 -0.019094 +-0.021696 0.0567795 -0.0319795 +-0.0524624 0.139899 0.000243693 +-0.016317 0.0384896 0.0261516 +-0.0172081 0.172701 -0.0233314 +-0.0664965 0.109745 0.0377695 +-0.0117557 0.0345134 -0.025836 +-0.000654571 0.0391799 -0.00969942 +0.00820345 0.083757 -0.0326005 +-0.0458982 0.107069 -0.0194756 +-0.0567459 0.15948 0.00480369 +0.00650779 0.0575337 0.0533257 +0.037787 0.0377202 0.0142753 +0.00846774 0.13132 0.015646 +-0.0475009 0.0425468 0.0439593 +-0.0766415 0.100814 0.0361238 +-0.028614 0.0408765 -0.0296027 +0.00929873 0.115842 -0.01682 +-0.0828745 0.119161 -0.00328383 +-0.0769895 0.0790529 0.034321 +-0.0878006 0.151251 0.0245374 +0.0208653 0.122279 0.030221 +-0.00768551 0.130297 0.0183702 +-0.0545511 0.0430136 -0.00860983 +0.030217 0.0843227 -0.0201565 +-0.0467665 0.152145 0.00944802 +-0.0631219 0.156103 0.0153645 +-0.0681832 0.155264 -0.0517309 +0.0142805 0.0345676 -0.0138073 +-0.0664934 0.0624679 -0.000297249 +-0.0641994 0.16384 -0.059407 +0.0464327 0.0769932 0.014129 +-0.041507 0.0591281 0.0403212 +0.0223695 0.0993436 -0.0211483 +-0.088603 0.087513 0.0164636 +0.00038562 0.0392239 -0.00953586 +0.0270604 0.0795391 0.0462139 +-0.0684865 0.0611195 0.0150424 +0.0105195 0.053345 0.0519069 +-0.0620106 0.15528 -0.0315878 +-0.00991465 0.0385501 0.00204441 +-0.0151984 0.171233 -0.0237028 +-0.026193 0.171192 -0.0190186 +0.0404914 0.0541681 0.032094 +-0.0115119 0.181449 -0.0261319 +-0.027122 0.166756 -0.0173778 +0.0338583 0.105892 -0.0101458 +-0.0671444 0.0628365 -0.000338348 +-0.0788571 0.120751 -0.0060883 +-0.0525645 0.0417313 -0.0101531 +0.0278652 0.0996344 -0.0174729 +-0.0681363 0.122845 0.0524474 +-0.0228108 0.0770465 -0.0385748 +-0.0135961 0.12464 -0.00600832 +-0.00365126 0.0525899 -0.0316543 +-0.068996 0.139931 -0.00789046 +-0.0310262 0.153728 -0.00354608 +-0.0497211 0.131062 0.0298847 +-0.00109314 0.103948 0.0441727 +-0.0204702 0.16083 -0.0136222 +-0.0865394 0.109089 0.0183378 +0.0400949 0.095337 0.0300286 +-0.0693797 0.128452 0.0506772 +-0.0438868 0.107083 -0.0199439 +-0.0470477 0.150201 -0.00445632 +-0.0370064 0.121579 0.0285082 +0.0198288 0.120602 -0.00797301 +-0.0549804 0.0334872 0.0101333 +0.00782186 0.127915 -0.00384433 +-0.0495314 0.12548 0.031876 +-0.0926082 0.117405 0.0243082 +-0.0215209 0.0382567 0.0252967 +0.00181128 0.125691 -0.00735123 +-0.0771897 0.117737 0.0516815 +-0.0554751 0.0519418 -0.00338574 +-0.0771699 0.154422 0.00455736 +-0.00649896 0.092559 0.0563419 +-0.0704303 0.164039 -0.0149268 +-0.036643 0.118048 -0.0128637 +-0.0535056 0.136701 0.0296589 +-0.0594928 0.0761776 0.0424443 +-0.00649656 0.0856337 0.0569558 +-0.0586618 0.0637687 0.0307411 +-0.0650964 0.155112 0.00596226 +-0.0626129 0.0371673 0.0184653 +0.0330114 0.107386 0.0320976 +0.0333812 0.0490928 -0.00645546 +-0.069711 0.1744 -0.043385 +-0.00744712 0.0961017 -0.0318028 +0.0413373 0.0392631 0.0117259 +-0.0487556 0.137056 0.00741027 +-0.0845701 0.112449 0.0449336 +0.0531449 0.0608429 -0.00288049 +-0.0358592 0.10284 -0.0213952 +-0.0778493 0.11932 -0.00645768 +0.0172333 0.0750251 -0.0287502 +-0.0195083 0.11546 0.0373373 +-0.0542618 0.0348321 -0.0120282 +-0.0344386 0.125663 -0.00162003 +-0.0690003 0.160066 -0.00858817 +0.0285895 0.0979793 -0.017709 +0.015268 0.0341755 -6.02454e-05 +-0.012432 0.12921 0.00653602 +-0.0222335 0.171216 -0.0204735 +-0.0656059 0.0615317 0.0026003 +-0.0324965 0.174231 -0.00238999 +-0.0398336 0.0384391 -0.0280596 +-0.0513902 0.122634 0.0344378 +-0.0735123 0.142806 0.0460464 +-0.0703661 0.16678 -0.0206717 +0.0128439 0.0343776 -0.0158182 +-0.074941 0.152735 -0.0189 +-0.0785348 0.0771858 -0.00655705 +0.0347176 0.114447 0.00679736 +-0.0192836 0.0385916 0.0308544 +-0.00226925 0.130756 0.00454173 +-0.0622845 0.161545 -0.0405978 +-0.0687671 0.0900946 0.0427048 +-0.028252 0.050761 -0.0234049 +-0.0818245 0.107456 0.0283887 +0.0216927 0.103078 -0.0191449 +-0.0539655 0.0364915 -0.0115887 +-0.0577688 0.142406 -0.00278963 +0.0347443 0.08354 0.0397721 +0.041088 0.0912985 0.0296287 +0.0209984 0.0578395 0.0478214 +-0.0607897 0.155834 0.0118473 +-0.0427999 0.167662 -0.00952768 +-0.0135045 0.0870342 0.0571061 +0.0551275 0.0637038 0.000299703 +-0.0500088 0.124901 -0.00796654 +0.040891 0.0917758 -0.00909975 +-0.057302 0.152908 0.030569 +-0.0490908 0.140152 0.0103957 +-0.062514 0.0399436 -0.00751704 +-0.0901142 0.14065 0.0241685 +-0.0614977 0.0847334 0.0442553 +0.00401707 0.125848 -0.00755459 +-0.0295217 0.0402041 -0.0298306 +-0.0770884 0.0866038 -0.0125752 +0.00250242 0.0441898 0.0459568 +-0.0884166 0.13498 0.0042424 +-0.0144984 0.11138 0.0412273 +-0.0543527 0.155034 0.0127444 +-0.0485461 0.135607 0.0194861 +-0.0763654 0.155962 0.0179624 +0.0194741 0.0351845 0.0201392 +0.0604235 0.0678625 0.0131519 +-0.0147437 0.0383723 0.00849375 +0.0123077 0.035562 0.0436453 +-0.0878555 0.0861109 0.00948006 +0.0461918 0.0820393 0.0121748 +-0.0376617 0.0344352 0.0359896 +-0.0640313 0.13251 0.040793 +0.00650251 0.122426 0.0350167 +0.046473 0.0747304 0.00699979 +-0.090578 0.13228 0.00723516 +-0.0665138 0.0986787 0.0417758 +-0.0753611 0.0724331 0.0302407 +-0.0737585 0.160179 -0.00884095 +-0.0875779 0.102333 0.0213648 +-0.0213902 0.0905176 -0.0361974 +-0.0663379 0.132604 0.0444522 +0.0420458 0.0817019 -0.00677657 +-0.0739471 0.131099 -0.00783391 +-0.00249367 0.0925505 0.0559214 +-0.0748382 0.149925 -0.0278668 +-0.0734967 0.126028 0.0530224 +-0.0386362 0.117281 -0.0140679 +0.00347668 0.0964809 0.0526894 +0.0453833 0.074968 0.00220665 +0.012072 0.11405 -0.0168987 +-0.0774663 0.168085 -0.0299733 +-0.0534988 0.0761753 0.0426023 +-0.0233682 0.126286 0.00541909 +-0.00704598 0.0392708 0.0363567 +-0.0791658 0.0990564 -0.00863296 +-0.0464518 0.0945568 0.0436355 +-0.0404194 0.128239 0.00205017 +0.0393898 0.107905 0.00701069 +-0.0398611 0.0338561 -0.0163385 +-0.0665222 0.156255 0.0214077 +-0.0672076 0.171872 -0.0410051 +-0.0708261 0.144835 -0.0182015 +-0.0650483 0.0701635 0.0361166 +-0.00764186 0.11082 -0.0214014 +-0.0836837 0.151385 0.0303528 +-0.0496912 0.162854 0.00564102 +-0.0114821 0.125053 0.0306553 +-0.0713615 0.158186 -0.0419305 +-0.0348112 0.0336186 -0.0263013 +-0.0652015 0.0334423 0.00269659 +-0.00682217 0.0390777 -0.0108403 +-0.0745121 0.155307 0.0054919 +0.00849016 0.0441134 0.0451901 +-0.041821 0.0914074 -0.0230213 +0.0243874 0.048835 -0.0205112 +-0.0578612 0.158406 0.00308521 +-0.0781467 0.116431 0.0503206 +0.0429791 0.071952 -0.00379352 +-0.00196689 0.131088 0.00752604 +-0.0728984 0.156837 -0.0329194 +0.00543206 0.119469 -0.0147017 +-0.00442631 0.0386612 0.00487339 +-0.089531 0.0983552 0.0174009 +0.00679264 0.0379024 -0.00704418 +-0.0255688 0.0356598 0.0531386 +-0.0343151 0.0794495 -0.0245241 +-0.0124944 0.0870249 0.0570339 +-0.0710693 0.155098 0.0285743 +-0.0663511 0.0350877 0.0310837 +0.00349789 0.122445 0.0347995 +-0.0414975 0.045132 0.0414403 +0.0348194 0.0365264 0.00732462 +-0.0740113 0.141343 -0.00688783 +-0.0303332 0.0706347 -0.0294852 +0.0503042 0.0691243 0.0253774 +-0.0701319 0.158154 -0.0479233 +-0.0358242 0.0915039 -0.0239402 +-0.0645394 0.0596403 0.015406 +0.0213135 0.0650138 -0.0271409 +0.0262112 0.0873747 -0.0229809 +-0.052671 0.112615 -0.017101 +-0.0592898 0.045994 0.0417021 +-0.0717164 0.163822 -0.0439567 +0.0178664 0.127935 0.017674 +-0.0655034 0.108381 0.0382088 +0.0278762 0.0942373 0.043974 +-0.0457869 0.0855328 -0.0217062 +-0.0643109 0.169365 -0.0428818 +0.0100266 0.0346111 0.0241784 +-0.00361434 0.0341476 -0.0187856 +-0.0389438 0.047744 -0.0146455 +-0.0676963 0.0648397 0.0261272 +-0.0374998 0.0691046 0.0417769 +-0.0568378 0.0613597 0.0260949 +-0.0369296 0.036554 0.0451414 +-0.0284901 0.0688983 0.0393825 +-0.0534824 0.0340932 0.0259063 +-0.0631168 0.15992 -0.0455978 +-0.0444353 0.0335419 -0.0188134 +-0.0168224 0.0960286 0.0515795 +-0.076233 0.145832 -0.00587217 +-0.0231748 0.0709692 0.0487695 +-0.0104382 0.0354056 -0.0175403 +-0.0897878 0.136555 0.0351995 +-0.0717761 0.0344583 0.000444464 +0.0353682 0.103387 0.0319873 +-0.00977607 0.0770524 -0.0379416 +0.00551406 0.0375423 0.0260562 +-0.00350144 0.0675505 0.0564719 +-0.0564947 0.102955 0.042036 +-0.061361 0.0336079 0.00692461 +0.00850062 0.121038 0.0360118 +0.0202826 0.0693621 -0.0284085 +-0.00908512 0.169637 -0.0217386 +0.0255848 0.123614 0.0162626 +0.0234098 0.0871372 -0.0242525 +0.0269727 0.112042 -0.0107557 +0.0262833 0.0935743 -0.0210485 +-0.059 0.0412164 0.021703 +0.0345357 0.0373492 0.0194302 +0.0530102 0.0462982 0.0132036 +-0.00365111 0.0511553 -0.0312289 +-0.0591025 0.0338635 0.0178635 +-0.0144888 0.0673806 0.0542261 +-0.0416194 0.0336308 -0.0257822 +-0.0186097 0.0407857 -0.0282477 +-0.0298888 0.0474725 0.0462905 +-0.00306646 0.0386027 0.0233477 +0.0330707 0.110451 -0.00703014 +0.0146846 0.037467 0.0442233 +-0.0390505 0.154795 -0.00905663 +-0.0306702 0.0891071 -0.0265975 +-0.090498 0.131069 0.0362301 +-0.0189866 0.10628 -0.022556 +-0.0125142 0.181139 -0.0289621 +-0.0236648 0.0522261 -0.0284113 +-0.0564969 0.100177 0.0431307 +-0.0314961 0.10429 0.0412052 +-0.0509168 0.0335668 6.7085e-05 +-0.0773495 0.081875 0.035997 +-0.0834254 0.141805 0.00220396 +0.00104126 0.108173 -0.0205653 +0.0181741 0.0988563 -0.0226017 +-0.0797776 0.115912 0.0485816 +-0.0816869 0.0734846 0.011537 +0.00150486 0.0856703 0.0573817 +-0.00849476 0.0745791 0.0575173 +-0.00549893 0.0939194 0.0556385 +0.0221626 0.0490425 0.0405889 +0.0363661 0.0873006 -0.0164353 +0.0491174 0.0712134 0.0219878 +-0.079214 0.155524 0.0184351 +-0.0654627 0.0598015 0.0150426 +0.0330982 0.0626311 -0.0167961 +-0.0839336 0.126519 -0.00402298 +-0.00950667 0.125161 0.0310898 +0.0292092 0.0563773 0.0403225 +-0.0273861 0.0720614 0.0416635 +-0.0647467 0.0379255 0.0402853 +-0.0521847 0.140082 0.0224024 +-0.0276164 0.0422898 -0.0293674 +0.0360108 0.100867 -0.0107814 +-0.0946899 0.124172 0.0202666 +0.0446233 0.0903218 -0.000806954 +-0.00230838 0.0348204 0.04129 +0.00391726 0.126651 -0.0064175 +-0.0633881 0.0336212 0.00649796 +0.00838362 0.046349 -0.0258656 +-0.0577252 0.156918 0.00853143 +-0.0693669 0.17099 -0.0332104 +0.0249955 0.0347512 0.0143719 +0.00961895 0.12141 -0.0128393 +0.021665 0.0416371 -0.0126942 +-0.0521438 0.0568294 0.0272279 +-0.0628733 0.0996403 -0.0179913 +0.0218834 0.0415901 -0.0107198 +-0.0546838 0.0435714 0.0206922 +-0.0176301 0.183064 -0.0184359 +-0.00750517 0.0471136 0.0478292 +-0.0520933 0.154615 -0.00405641 +-0.0865732 0.0860822 0.023453 +-0.0665787 0.163768 -0.0579853 +0.00636801 0.0479975 -0.0276935 +0.0368613 0.0587703 -0.00975684 +-0.0879266 0.10368 0.0183585 +-0.016623 0.0450359 -0.0278307 +-0.0895401 0.135156 0.0272131 +0.000356348 0.0496808 -0.0306188 +-0.0836962 0.138005 0.0462469 +0.0441945 0.077668 0.0251701 +-0.0685147 0.0930476 0.0422841 +-0.0232574 0.100051 -0.0240138 +-0.03748 0.0548048 0.0392179 +-0.0293599 0.15815 -0.0119938 +-0.021522 0.0336815 -0.0237529 +0.00128503 0.0655494 -0.0343406 +-0.0861178 0.0953813 0.000442214 +0.0350885 0.099465 0.0350983 +-0.0779853 0.13835 -0.00526914 +-0.0857179 0.124363 0.0486993 +-0.0309707 0.163858 -0.00458082 +-0.0722468 0.174258 -0.0400013 +-0.0149026 0.105901 -0.0222117 +-0.0673665 0.165482 -0.0209987 +-0.0876017 0.152029 0.0126504 +-0.0220763 0.0666765 0.0478151 +-0.0624814 0.094591 0.0443423 +-0.0196147 0.0379102 -0.0280301 +-0.0346582 0.0422066 0.0469558 +-0.0199036 0.0739897 0.0538964 +-0.00877818 0.0387104 -0.00343461 +0.000535895 0.0548656 0.0545076 +-0.0454881 0.10014 0.0423159 +-0.0404927 0.0958661 0.0421915 +-5.87354e-05 0.100974 -0.0229378 +-0.0283024 0.0362399 -0.0299084 +0.026308 0.0822369 0.0469135 +-0.06337 0.156813 -0.0136043 +-0.0624231 0.0357528 0.0196573 +-0.0709978 0.0698591 0.0316215 +-0.00550273 0.0661441 0.0562254 +0.00539692 0.0418924 -0.0240197 +-0.0711187 0.0642492 0.0206358 +-0.0614458 0.0606683 0.0222701 +0.0189142 0.0353585 0.00519133 +0.0315596 0.0497964 -0.00774264 +-0.0548596 0.0462919 -0.006395 +0.0010398 0.0392387 0.0326514 +0.0448141 0.0889533 0.0211601 +-0.0898897 0.136442 0.013225 +0.0409408 0.0873455 0.0311847 +-0.0866496 0.106304 0.00937201 +0.0315171 0.118424 0.0085036 +-0.091229 0.14471 0.0161551 +-0.00263717 0.12924 0.026005 +0.0142425 0.0645148 0.0521595 +-0.0509259 0.0571242 0.0316152 +-0.0585706 0.155353 0.0213449 +0.0242207 0.111888 -0.0125803 +-0.0305755 0.0788685 0.0415824 +-0.0664528 0.145477 0.0410093 +-0.00432524 0.0423738 0.047881 +-0.0434528 0.12491 0.0216806 +-0.0610445 0.045667 0.0306816 +-0.0148175 0.0855384 -0.0388203 +0.0594886 0.0594575 0.00616841 +-0.0740871 0.156873 -0.0259173 +-0.0414785 0.105663 0.0400022 +-0.0376995 0.0680509 -0.0154542 +-0.0698935 0.122364 -0.00881274 +-0.00848477 0.0718045 0.0573713 +-0.0394932 0.127549 -0.000886358 +-0.0856022 0.136615 0.0453504 +-0.0889467 0.143422 0.0321606 +-0.0738723 0.109242 -0.00905672 +-0.0222267 0.0906414 0.0528718 +0.00551724 0.0661119 0.0558057 +-0.0588983 0.0582416 0.00880815 +0.0225876 0.0388978 0.0383164 +0.0022443 0.0974458 0.0519249 +-0.056455 0.12554 0.0394323 +-0.00949777 0.091187 0.0566315 +0.00149085 0.103013 0.043912 +-0.00374904 0.0712712 -0.0357267 +-0.0394946 0.119701 -0.0126173 +-0.0631669 0.152168 -0.0312981 +-0.0139477 0.0625843 0.0539847 +-0.0604937 0.100137 0.0425915 +-0.0749718 0.138395 -0.00644263 +0.00624486 0.0401371 0.0456279 +0.0193551 0.0475975 0.0417872 +-0.0303971 0.0890708 -0.0275789 +0.0196022 0.0462781 0.0421275 +0.0317544 0.0632771 0.0405733 +-0.0662966 0.156977 -0.00759157 +0.0183734 0.0506657 -0.0252113 +0.0404388 0.0427247 -0.00185446 +0.0115151 0.105777 0.0436811 +-0.0301364 0.0349235 0.0476426 +0.0254917 0.0369057 0.0252691 +-0.0850483 0.109026 0.0223524 +0.0157867 0.112048 -0.0167369 +0.0360751 0.0370336 0.00715793 +-0.0781026 0.0818813 0.0353359 +-0.00650962 0.0773868 0.0579538 +-0.0494324 0.0586474 0.0343285 +0.0112135 0.116429 0.0374582 +-0.0555782 0.159581 0.0063787 +-0.0454954 0.160804 0.00677344 +-0.0709975 0.139911 -0.00751202 +-0.0547852 0.0339346 -0.0120065 +-0.079504 0.128859 0.053141 +-0.0155349 0.0459646 0.0502157 +-0.0704857 0.116111 0.0520944 +-0.0454716 0.0404727 0.0442216 +-0.0890267 0.148493 0.027289 +0.0192952 0.126057 0.00111502 +0.00542039 0.0392223 0.0299552 +-0.0509634 0.152153 0.0121451 +0.0432798 0.100122 0.00916351 +-0.0722295 0.16736 -0.0213426 +-0.0311459 0.0354418 0.0504241 +-0.0834736 0.114211 -0.000781836 +-0.0258217 0.181482 -0.0160394 +-0.0517798 0.115481 0.0337859 +-0.0763629 0.108471 -0.00759882 +-0.0757916 0.155001 0.00503825 +-0.0893649 0.111932 0.017326 +-0.0619999 0.132592 -0.00773229 +-0.033844 0.171255 -0.00164046 +-0.0352015 0.153653 0.00157065 +-0.0722895 0.147809 -0.0265569 +-0.0217088 0.114301 -0.017023 +0.026785 0.0955535 0.0441601 +-0.0481378 0.0672057 0.0386531 +-0.026667 0.0823364 0.0504973 +0.00619086 0.131536 0.009113 +-0.0526119 0.0580506 0.0248562 +0.00250286 0.0576093 0.0540213 +-0.0810169 0.0953587 0.0335948 +0.029848 0.0875415 0.0432926 +0.0464379 0.0778615 0.0131806 +-0.0134997 0.0856507 0.057198 +0.0263535 0.0795425 0.0469281 +-0.0265857 0.0603669 0.0385952 +-0.0334943 0.11802 0.0311453 +-0.00337868 0.117905 -0.0149619 +-0.0660268 0.177263 -0.0521591 +-0.0238887 0.156697 -0.00604726 +-0.00760592 0.125948 -0.00752899 +-0.0221488 0.0383333 0.0268965 +-0.0293863 0.155004 -0.00725783 +0.0105543 0.126889 0.0293082 +0.0501729 0.0446765 0.00723117 +0.0310879 0.115727 -0.00269046 +-0.0191314 0.122285 0.0303949 +-0.0777065 0.155692 0.0145746 +-0.0797904 0.152563 0.0316147 +-0.0710154 0.0391332 0.00421404 +-0.0889531 0.100999 0.0124002 +-0.0147295 0.0942902 -0.0339999 +-0.0812191 0.0785924 0.0290188 +-0.0766463 0.0803349 -0.0100768 +-0.0435275 0.152141 0.00710463 +-0.0608313 0.092512 -0.0191943 +0.0227948 0.124775 0.0223512 +-0.0831943 0.132626 0.0501472 +-0.0317593 0.0449779 0.048226 +0.00552401 0.0633596 0.0561453 +-0.0492065 0.128269 0.0305743 +-0.0634388 0.152153 -0.00650488 +-0.0568117 0.135044 -0.00489316 +0.0252231 0.117755 -0.00691168 +-0.0716366 0.0874136 0.0414306 +-0.0725279 0.091561 0.0413901 +-0.0764449 0.084677 0.0378167 +-0.00880306 0.0841017 -0.0380883 +-0.0688616 0.033602 -0.00179476 +0.0161578 0.0988387 -0.0226848 +-0.0829912 0.0966357 0.0312921 +0.00854504 0.101743 0.0468013 +-0.0161113 0.0419173 0.0519008 +-0.0115772 0.0991016 -0.0249869 +0.026625 0.0839457 -0.0229857 +0.0451532 0.0931968 0.0111604 +-0.0264982 0.113889 0.035131 +-0.00351628 0.0442826 0.04692 +-0.0202282 0.0639107 0.048901 +0.0154069 0.0403121 -0.0220991 +-0.0725345 0.140015 0.0475615 +-0.0340447 0.1653 -0.00374721 +0.00850451 0.0883096 0.055394 +-0.0516913 0.0680528 0.0372779 +-0.070167 0.162396 -0.0479528 +-0.0174382 0.127681 0.00469302 +0.0354105 0.0965418 -0.0122281 +-0.0427202 0.152139 0.00651185 +-0.00023381 0.123831 -0.00932637 +-0.073929 0.152666 -0.0308896 +0.0244967 0.0375596 0.0281073 +-0.038496 0.0450464 0.0406484 +0.0424477 0.0803262 -0.00578172 +-0.017618 0.163994 -0.00984759 +0.042638 0.101488 0.0111603 +-0.0114747 0.111375 0.0418865 +-0.0878262 0.152428 0.0199936 +-0.0605498 0.0341606 0.0243603 +-0.0474966 0.088987 0.0447599 +0.0139221 0.0913152 -0.0287052 +-0.0182228 0.038194 0.0115761 +-0.0697006 0.0619862 0.0158161 +0.0317346 0.0619381 0.0405155 +0.0470668 0.0701831 0.0226957 +-0.0222639 0.0783263 0.0546841 +-0.0624118 0.148891 -0.00459657 +-0.0245152 0.111258 0.0385919 +-0.0623581 0.164692 -0.0425931 +0.0189449 0.0348191 0.0239933 +-0.0489525 0.123989 0.0308621 +-0.0294789 0.0732089 0.0403736 +-0.0912678 0.12968 0.0332366 +0.0188735 0.102787 -0.0208351 +-0.0542898 0.0343509 0.030786 +0.0541934 0.0628656 -0.00090927 +-0.024607 0.037979 -0.0290368 +-0.0461075 0.164061 -0.00779976 +-0.00480748 0.0854817 -0.0373491 +-0.0398973 0.160894 0.00183362 +0.0122013 0.0878954 -0.0308742 +-0.0609826 0.13955 0.0346529 +0.01801 0.126774 0.0220214 +-0.0720383 0.149669 -0.0395937 +0.0268545 0.0350543 0.018119 +-0.00249757 0.0952299 0.0546317 +-0.0177632 0.0728777 -0.0388934 +-0.00835092 0.0354934 -0.0172056 +-0.0123646 0.109877 -0.0203825 +-0.0385 0.120755 0.0293207 +-0.0614467 0.0335533 -0.00933279 +-0.0144984 0.108621 0.0424908 +-0.071459 0.151188 -0.0433221 +-0.0227544 0.0753712 0.0524561 +-0.0581897 0.157381 0.00697939 +-0.0588054 0.0825509 -0.0205914 +-0.0254269 0.0781373 0.050782 +-0.0176233 0.0450417 -0.02779 +-0.0345002 0.10287 0.040969 +0.0398172 0.0390737 0.00420564 +-0.0642915 0.169488 -0.0607786 +-0.0391909 0.150688 0.00279786 +-0.0817139 0.108721 -0.00159489 +-0.0691226 0.174646 -0.044619 +0.0542982 0.0579702 -0.00188368 +-0.0903603 0.143336 0.0142018 +-0.0554977 0.109766 0.0379077 +-0.0646073 0.15754 -0.0113176 +-0.0857257 0.0994313 0.000394941 +-0.0634657 0.0730594 0.0392535 +-0.0114926 0.0604332 0.0544994 +0.00136064 0.0481752 -0.0296995 +-0.0476605 0.124307 -0.00939578 +0.00152589 0.0731231 0.0568629 +0.0454513 0.0412382 0.0102351 +-0.0555526 0.124119 0.0389742 +0.0111749 0.035437 0.032711 +-0.0631468 0.156791 -0.0395997 +-0.0364943 0.115224 0.0327734 +-0.0687764 0.180487 -0.0583042 +-0.0558353 0.0912839 -0.0220329 +-0.0487756 0.0826651 -0.0212781 +0.0222353 0.0804964 -0.0261413 +-0.0698715 0.11424 0.0504282 +-0.0534972 0.0732542 0.0410474 +-0.0354707 0.0874527 0.0429689 +-0.0522647 0.117566 -0.0142997 +-0.0687471 0.158212 -0.0056007 +0.0254863 0.0578069 0.043747 +-0.0625026 0.0973365 0.0428841 +-0.00849427 0.0925522 0.0562249 +-0.076914 0.17371 -0.0479126 +0.0285085 0.121244 0.0144975 +-0.0649629 0.0620542 -0.00149187 +-0.0487919 0.135536 0.0203921 +-0.0406031 0.160882 0.00257136 +-0.0717214 0.0807275 -0.0154713 +-0.0759462 0.128163 -0.00785989 +0.0065117 0.129736 0.0249737 +-0.00106791 0.0391062 -0.00597311 +-0.0539473 0.03352 0.0103166 +0.0264479 0.103016 -0.017087 +0.0368588 0.0672041 -0.0137655 +-0.0209608 0.0380992 0.0183358 +-0.0922682 0.12272 0.00827864 +-0.0758891 0.119352 -0.00728174 +-0.0619808 0.0469192 0.00268857 +0.0286963 0.0991802 -0.016993 +0.0173223 0.125777 -0.00156033 +-0.071812 0.0879125 -0.0161091 +-0.0634945 0.102894 0.0414572 +-0.0534816 0.0491363 0.0336594 +-0.0677428 0.164471 -0.018256 +0.0418243 0.102828 0.00318021 +-0.0345003 0.0347932 0.0310568 +-0.0508009 0.0912872 -0.0218676 +0.0344847 0.0868408 -0.0179179 +0.0193386 0.0579734 -0.027391 +-0.0621388 0.0334692 0.00329381 +-0.017215 0.175671 -0.0245809 +-0.0538714 0.0449084 0.0167075 +0.0201621 0.124133 -0.00175315 +0.00612185 0.108732 -0.0201634 +0.0101112 0.110138 -0.0193681 +0.0407992 0.0698146 0.0307925 +-0.0186672 0.0495328 -0.0300927 +-0.0804551 0.134426 0.050865 +-0.0719585 0.0377493 0.00378419 +0.00950065 0.0688226 0.0549942 +0.0451024 0.091769 0.003186 +0.0116064 0.121838 0.0345253 +-0.07744 0.155698 0.0205089 +0.0154982 0.118174 0.0357451 +0.0455409 0.0918154 0.00916522 +-0.0825371 0.14737 0.037761 +0.00019241 0.0853625 -0.035651 +-0.0413557 0.0405762 -0.0252979 +-0.00795135 0.129264 0.0240771 +-0.00779714 0.0812765 -0.0379169 +0.0279176 0.0508447 -0.0187774 +-0.0851867 0.0791254 0.00650076 +-0.071556 0.161392 -0.00951947 +0.0302201 0.119789 0.0108648 +-0.0664004 0.120055 0.0514481 +-0.0652563 0.0459546 0.00568144 +-0.0484523 0.0349311 0.00836568 +0.050668 0.0451751 0.0191374 +0.0235092 0.118527 -0.00774096 +-0.0799897 0.135372 -0.00407226 +0.0454193 0.0875784 0.00318139 +0.0218862 0.107458 -0.0158341 +0.0519418 0.0525693 0.0274887 +-0.0174883 0.044685 0.0517611 +-0.0503006 0.134918 0.0263293 +-0.0797918 0.11331 -0.00252121 +0.0170867 0.039703 -0.0206999 +-0.00603107 0.130744 0.0146461 +-0.0614566 0.0372076 0.0201515 +-0.0634342 0.039353 0.0417984 +-0.0520389 0.0545474 0.0246248 +-0.0700192 0.172057 -0.036324 +0.0425828 0.0778099 0.0282065 +-0.0943409 0.12415 0.0172628 +-0.03739 0.165304 0.000185179 +0.0380556 0.0834519 0.0357476 +-0.0140374 0.0384483 0.0012996 +-0.0834291 0.14469 0.0401339 +-0.055347 0.0335038 0.00284205 +-0.0577441 0.0590406 0.000553128 +-0.0586534 0.154964 0.024223 +-0.0627416 0.148221 0.0374769 +-0.0597552 0.0781833 -0.0189903 +-0.0882134 0.141936 0.0111996 +0.0441966 0.0973694 0.0101636 +0.00324014 0.0740573 -0.0349749 +-0.0320743 0.0763998 -0.0305477 +0.0424682 0.0642865 0.0278791 +0.00647808 0.111357 0.041027 +0.0241747 0.0351145 0.0138772 +-0.0842625 0.100702 -0.00260902 +-0.0538049 0.0486373 0.0382673 +0.0033632 0.097467 -0.0272178 +-0.0526204 0.141613 0.022402 +0.0331357 0.0570437 -0.0137102 +0.00753436 0.104363 0.0436686 +-0.029494 0.0631194 0.0377814 +0.0357221 0.0994501 0.0342567 +0.0398205 0.0604422 -0.00479028 +-0.0134826 0.109991 0.0421694 +-0.0618817 0.161578 -0.0325898 +-0.00560304 0.0434101 -0.0260312 +-0.0274608 0.0473022 0.0495228 +-0.065855 0.0967089 -0.0173163 +-0.00276158 0.0698244 -0.0351738 +-0.00250067 0.110029 0.0428965 +0.0142116 0.123033 -0.00860213 +-0.0633963 0.145356 0.0382744 +-0.033621 0.0519746 -0.0102559 +0.0385319 0.0997972 -0.00779458 +0.0312326 0.118751 0.0098088 +-0.011143 0.128894 0.00267925 +-0.0574832 0.0833327 0.0441985 +-0.0668542 0.114225 0.0472279 +0.0369848 0.0561762 0.0322 +-0.0688663 0.102328 -0.014772 +-0.0246521 0.0478035 -0.0267776 +-0.0806498 0.110292 0.0422048 +-0.0475911 0.163428 -0.00670042 +-0.00358669 0.0376696 -0.025221 +-0.0499193 0.118992 -0.0138138 +-0.0766944 0.171427 -0.0358927 +0.0174979 0.126711 0.000451693 +-0.0107378 0.177152 -0.0244143 +0.0397983 0.0672171 0.0328832 +0.00289976 0.039936 0.0460731 +0.030847 0.0875798 0.0429743 +-0.0394926 0.102848 0.0402648 +0.00332264 0.0568618 -0.0316357 +-0.0367537 0.0783235 -0.0195335 +-0.038823 0.0928858 -0.0233898 +-0.0644838 0.0931562 0.0439721 +-0.0298466 0.0385336 -0.0167929 +-0.0548009 0.0449973 0.0226803 +0.0118375 0.0344099 -0.0160341 +-0.0683506 0.181259 -0.055895 +-0.0107728 0.0387832 -0.00390135 +-0.0300375 0.0890464 -0.0285748 +-0.0710857 0.168903 -0.0252489 +-0.0757782 0.149978 -0.0188682 +0.030839 0.0995119 0.0394948 +-0.0329249 0.0369927 0.0503412 +-0.0732448 0.144163 -0.0109449 +-0.0897565 0.140652 0.029182 +-0.0735905 0.154201 0.0306806 +0.00579855 0.0347845 0.042995 +-0.0519166 0.0545256 0.0236155 +-0.01212 0.102458 0.0438351 +-0.0211595 0.178661 -0.0149212 +-0.014608 0.0421127 -0.0270124 +-0.0885789 0.0922253 0.0228661 +-0.0145885 0.128899 0.00863716 +0.010498 0.0909888 0.0536897 +-0.0066489 0.0388823 -0.00316153 +-0.0258212 0.0839605 -0.0371412 +-0.0797525 0.15498 0.0124103 +-0.0414563 0.108465 0.0385585 +-0.0525315 0.149847 0.0192949 +-0.0156627 0.184575 -0.0209705 +0.0428837 0.0887839 -0.00581701 +0.0242564 0.0734016 -0.0257301 +0.0192994 0.062217 -0.0274738 +-0.0310269 0.122601 -0.0056394 +-0.0569847 0.153801 0.0277423 +-0.0526515 0.0504392 0.0286525 +0.00150192 0.0634213 0.0567922 +-0.0838556 0.139345 0.0449552 +-0.0476133 0.0562658 -0.0107838 +-0.0527007 0.0693372 -0.0141095 +-0.0311494 0.157393 -0.0113544 +0.00313658 0.0348497 0.0441849 +-0.0311581 0.17265 -0.0162683 +0.0453494 0.0847845 0.0201731 +0.0285114 0.0619268 0.0428923 +0.000499004 0.0634057 0.0567297 +0.00751117 0.0575089 0.0530994 +-0.000499443 0.114191 0.0415203 +-0.0794921 0.146102 0.0417961 +-0.0252738 0.0381933 0.0263814 +-0.0376796 0.16681 0.00156763 +0.0387661 0.0870401 -0.0137857 +0.0296088 0.12015 0.0163431 +-0.0938694 0.121489 0.0252875 +-0.0396002 0.125498 -0.0067103 +0.0370837 0.103994 -0.00683208 +-0.0465559 0.0461276 -0.0102455 +0.0404351 0.0389029 0.0137659 +-0.0424925 0.100104 0.042001 +-0.0285717 0.12063 0.0270994 +-0.0800863 0.148726 0.0380799 +0.00214563 0.119376 -0.0145717 +-0.0288792 0.104408 -0.0227314 +-0.0312735 0.034639 0.0229335 +-0.0669165 0.12238 -0.00897156 +-0.0890273 0.0956446 0.021399 +-0.0897683 0.091592 0.0154417 +-0.0739499 0.156872 -0.0269145 +0.00919729 0.039194 0.0451612 +-0.0374937 0.109757 0.0368609 +0.0523694 0.0545712 -0.00274385 +-0.0339801 0.0348087 0.0434578 +-0.00541562 0.128879 0.0264449 +-0.0636022 0.151642 0.0357576 +-0.0693902 0.0672718 0.0289371 +-0.0220481 0.121595 -0.00868192 +-0.0390536 0.127857 0.00108873 +-0.090122 0.144414 0.0285066 +-0.0629168 0.114269 -0.0126902 +-0.0930993 0.129616 0.0162363 +-0.0325132 0.0575193 0.0378292 +-0.0193156 0.162502 -0.00702982 +0.00550789 0.0910775 0.054811 +-0.0234801 0.168298 -0.011313 +0.0473422 0.0575607 -0.00551801 +0.0214637 0.0989203 0.04607 +-0.0827604 0.106087 -0.00164696 +-7.52397e-05 0.037877 0.020989 +-0.0345343 0.126083 0.0189612 +-0.0512338 0.164096 -0.00192926 +-0.0477776 0.0826677 -0.0211258 +-0.0368214 0.16531 -0.000729186 +-0.0673944 0.162815 -0.015253 +-0.0186701 0.0971551 0.0477534 +-0.0366241 0.0360289 0.0452882 +-0.0195815 0.0341867 -0.0200865 +0.0298019 0.0862025 0.0431971 +-0.0932655 0.120203 0.038289 +-0.000505415 0.110024 0.0426421 +-0.0191383 0.16678 -0.0189611 +0.0173062 0.0421724 0.0440438 +0.0105403 0.105742 0.0436489 +-0.0345641 0.11594 -0.0146748 +-0.0944618 0.125537 0.019259 +-0.0679091 0.108046 -0.0128123 +0.0268137 0.118694 -0.00391821 +-0.0577288 0.0738232 -0.0175832 +-0.0494959 0.0988033 0.0435442 +0.0425948 0.0873487 -0.0068057 +-0.0366079 0.114094 -0.0167422 +-0.0064886 0.118022 -0.0150746 +-0.0694599 0.155751 0.00874428 +-0.0727804 0.0887809 0.0411113 +-0.0921325 0.117269 0.0252198 +-0.0769942 0.154149 -0.012901 +0.00413641 0.0979047 -0.0256761 +-0.0504737 0.113932 0.0347324 +-0.00655213 0.0389811 -0.00882376 +-0.021105 0.0431099 0.0534593 +-0.0732611 0.161033 -0.0359392 +-0.0668535 0.0938084 -0.0173106 +0.0523234 0.0724358 0.00729932 +-0.02575 0.0536249 0.0391706 +-0.0529014 0.114056 -0.0162353 +-0.0887923 0.1378 0.0112057 +-0.0604332 0.0585193 0.0100455 +-0.0105014 0.0546468 0.0522278 +0.0475389 0.0482604 0.0280949 +0.00247406 0.123881 0.0337357 +0.0282809 0.0389301 0.0276504 +-0.0903128 0.141958 0.0142327 +-0.0457178 0.0724199 -0.0170809 +-0.0393802 0.149525 0.00137589 +-0.0384762 0.128323 0.0101316 +-0.0387951 0.0343342 0.0305488 +-0.0627886 0.154765 0.0285735 +-0.044804 0.0884409 -0.0220028 +0.00621048 0.0851628 -0.0331463 +-0.0124997 0.0938947 0.0551641 +-0.0760018 0.163203 -0.0170986 +-0.0568081 0.154369 0.0248865 +0.0141304 0.056278 0.0501629 +-0.000201542 0.0357861 0.0174114 +-0.0687337 0.0764635 -0.0155195 +-0.0465141 0.0518831 0.0377757 +0.0306859 0.0377485 0.0237503 +-0.0887758 0.149859 0.0255696 +-0.0468066 0.088437 -0.0220186 +-0.0104567 0.111397 0.0420636 +0.00949238 0.0487693 0.0494463 +-0.0344171 0.0343826 0.0278837 +-0.0747225 0.161031 -0.0319529 +-0.00127097 0.123959 0.0338052 +0.0484686 0.0511467 0.0294828 +0.0216142 0.042218 0.0415059 +0.0159587 0.0874032 0.0512942 +-0.0579584 0.0336225 0.00939861 +0.0262865 0.0689766 -0.0234385 +-0.0457839 0.11676 -0.0154906 +-0.0431023 0.149502 -0.00451393 +0.0575358 0.0592738 0.00218909 +-0.0907151 0.116093 0.0293225 +-0.0626986 0.0658458 -0.00782349 +-0.0680529 0.0874243 0.0435129 +-0.0323521 0.0336874 -0.0296376 +-0.0208013 0.108893 -0.0213287 +0.00800637 0.0345135 0.0400968 +0.0600686 0.0650603 0.0191749 +-0.0881094 0.0861284 0.0104766 +-0.0292466 0.166794 -0.00735295 +-0.0455037 0.159315 0.00726546 +-0.0361152 0.127822 0.0095198 +-0.00430156 0.130062 0.00233767 +-0.032509 0.0506603 0.0384213 +-0.0316129 0.119551 -0.0104429 +0.0414143 0.104258 0.0111621 +-0.075527 0.0733333 0.0311756 +-0.0549715 0.161246 0.00205939 +-0.0503915 0.140104 0.0183826 +0.0152276 0.0835585 -0.0295949 +-0.0464862 0.0718998 0.0415251 +-0.00551998 0.0732424 0.0584734 +-0.0900165 0.133639 0.00622839 +-0.069719 0.0887582 0.0422978 +0.00474777 0.0367585 0.0247919 +-0.027126 0.165248 -0.0165316 +-0.0283135 0.0350192 0.0513697 +-0.0318897 0.0721821 -0.0275085 +0.0437433 0.0945326 0.0221692 +-0.0126802 0.0961728 -0.031918 +-0.0567215 0.04662 0.0276747 +-0.00532834 0.0367049 -0.0158504 +-0.0529595 0.0335568 -0.000338033 +-0.0240311 0.112816 -0.0174462 +0.01097 0.0520216 0.0508135 +-0.0328411 0.0915526 -0.0242438 +-0.0552728 0.0335199 0.0136226 +-0.0820994 0.104661 -0.00359906 +0.035799 0.0558975 -0.00871505 +-0.0868952 0.0991223 0.0252196 +-0.0296012 0.120713 0.0267425 +-0.0695324 0.125657 0.0522171 +-0.0424937 0.0790081 0.0428161 +-0.0632658 0.0419596 0.040132 +-0.0699149 0.161541 -0.0103834 +-0.0345105 0.0676457 0.041143 +-0.00514301 0.0997589 0.0492461 +-0.0697588 0.147131 -0.0275571 +0.0580762 0.0648724 0.00314588 +0.0241035 0.1245 0.0085821 +0.0377445 0.110141 0.00501649 +0.0413546 0.0999884 -0.00181466 +0.0180964 0.0604579 0.0488964 +-0.0341434 0.0780256 -0.025502 +0.0365014 0.0756142 -0.0127863 +0.0485013 0.0651587 0.0285278 +-0.0331365 0.162399 -0.0024379 +-0.0578171 0.08688 -0.0211007 +-0.0591308 0.125513 0.0408421 +-0.0248084 0.0826031 -0.0377611 +-0.00847175 0.0920515 -0.0356471 +-0.0281451 0.166722 -0.0170726 +0.0321478 0.0740867 0.0412125 +-0.0318598 0.0496767 -0.0173511 +-0.0683644 0.0381281 -0.00463362 +-0.0293612 0.0383343 -0.00169706 +-0.0546971 0.0334232 0.00665025 +-0.0604511 0.0584329 0.0155226 +0.0356702 0.108162 -0.00482135 +-0.087994 0.0981671 0.00544953 +0.042672 0.0737568 0.0282004 +-0.0414969 0.095865 0.0421344 +0.0227593 0.0727654 0.0487302 +0.0247922 0.121532 -0.00113746 +0.0282353 0.0775351 -0.0225519 +-0.0487687 0.0559317 0.0351683 +-0.0192566 0.180095 -0.0235875 +-0.0250606 0.0603159 -0.031412 +-0.0310964 0.160762 -0.0139612 +0.0143682 0.0767494 0.0542274 +-0.0714649 0.159596 -0.0419316 +0.0454023 0.0875829 0.0161653 +-0.0354973 0.0470472 -0.0223112 +-0.0465703 0.0490167 -0.00974944 +0.025334 0.0435501 0.0381106 +-0.0785372 0.168054 -0.0329755 +-0.0148858 0.0985034 0.047376 +-0.0302927 0.117007 -0.0138211 +-0.0802651 0.0963563 -0.00854135 +-0.030624 0.0348272 -0.0303515 +-0.000406928 0.0996624 0.04942 +-0.0576871 0.0335309 0.00594357 +-0.0923088 0.114683 0.0143254 +0.00732004 0.0351406 -0.00439972 +-0.00948171 0.174183 -0.0285537 +-0.0320503 0.12646 0.00953655 +0.0270529 0.0822264 0.0462092 +-0.0900419 0.139254 0.023178 +-0.0498185 0.0927102 -0.0215416 +-0.00751389 0.102333 0.0437439 +-0.0775302 0.161724 -0.0197184 +-0.044496 0.0451943 0.0419603 +-0.0362032 0.160944 0.000172036 +-0.0314741 0.053189 0.0369367 +-0.072385 0.158213 -0.0369175 +-0.0860963 0.145967 0.0357039 +-0.0554937 0.100184 0.0430705 +-0.0523102 0.116406 -0.0150785 +-0.0518166 0.09273 -0.0219218 +-0.024907 0.0916549 -0.0335476 +-0.0634479 0.141036 0.0381413 +0.0152366 0.121915 0.0327966 +-0.0631227 0.0445391 0.0377156 +-0.0865336 0.141884 0.00820248 +0.00748358 0.11412 0.0398951 +-0.071965 0.136965 -0.0074383 +-0.0608999 0.058839 0.0168686 +-0.0886398 0.102364 0.0173768 +-0.0688031 0.0659098 0.026726 +0.02824 0.0686155 0.0425458 +-0.0196877 0.127428 0.0169554 +0.0332508 0.0906175 -0.0178979 +0.019654 0.122236 -0.00577023 +-0.0457281 0.151677 -0.00565337 +-0.0685681 0.156629 -0.0529972 +0.0455148 0.0801982 0.0216904 +0.0232513 0.0734458 -0.026356 +-0.0856264 0.110331 0.00634317 +0.032415 0.0383305 -0.000488607 +-0.0697489 0.17084 -0.0530327 +0.0127518 0.0887452 0.0537008 +-0.0650469 0.168333 -0.0359323 +-0.0312058 0.066507 -0.0244549 +-0.0481456 0.14427 0.00342034 +-0.0250932 0.0385898 -0.0121739 +-0.0268796 0.181867 -0.0133655 +-0.0624905 0.0804598 0.0431805 +-0.0664501 0.0353918 0.0342807 +-0.0287674 0.078167 -0.0351681 +0.0384815 0.0729589 -0.0117402 +-0.0325668 0.0347124 0.0262002 +0.0258782 0.0645831 0.0443789 +-0.0486546 0.0620591 -0.0122264 +-0.086684 0.149909 0.029141 +0.0138472 0.123867 0.0319554 +-0.0513866 0.0584422 0.0306256 +-0.00251219 0.0378133 0.00785027 +-0.00926128 0.126278 0.029483 +0.0147315 0.0347337 -0.0176578 +0.0417187 0.066227 -0.00378154 +-0.0149615 0.0883672 -0.0380383 +-0.0678931 0.0900993 0.043242 +0.0149683 0.113515 -0.0163113 +-0.0719356 0.110274 0.042413 +-0.0333618 0.0751438 -0.0264858 +0.0116984 0.034577 0.0227351 +-0.0670519 0.166375 -0.0237602 +-0.0454276 0.0345386 0.0307405 +-0.00249621 0.0883993 0.0567366 +-0.0235661 0.115415 0.0353667 +-0.0944357 0.121484 0.0222838 +0.0334736 0.0940135 -0.0155006 +-0.0436018 0.0519969 -0.0109067 +-0.0781065 0.0948585 -0.0115273 +0.0456581 0.0729488 0.0206934 +-0.0274951 0.157765 -0.0111917 +-0.00306441 0.100922 0.0454807 +-0.0618021 0.116863 0.0404147 +-0.0344937 0.041903 -0.0294247 +-0.0427476 0.159417 0.00474491 +0.0374917 0.0484328 0.0317174 +-0.00814387 0.0339061 -0.0213361 +-0.0737927 0.132633 0.0513524 +-0.0397231 0.116184 -0.0149076 +-0.00950395 0.0773592 0.0576807 +-0.0505908 0.03436 0.0298011 +0.0187381 0.119283 0.0342968 +0.00523462 0.075444 -0.0346019 +-0.0321194 0.165225 -0.0156285 +-0.0276791 0.1239 0.019992 +0.0190254 0.061825 0.0484929 +-0.0821717 0.11152 0.00033013 +0.0241621 0.0505303 0.0399762 +0.0378012 0.0604211 0.0334272 +-0.0182252 0.159192 -0.00975232 +0.0423754 0.100105 0.0181719 +-0.0546942 0.0661242 -0.0103565 +-0.0685912 0.131247 0.0482807 +0.000498438 0.0938703 0.0551155 +-0.0281544 0.168213 -0.0175818 +-0.0417796 0.0485307 -0.0113147 +0.0287445 0.109341 -0.0118595 +-0.00260812 0.130913 0.0187596 +-0.0454889 0.0660999 0.0395126 +-0.0655106 0.0972881 0.0421527 +-0.0194848 0.0869694 0.0563134 +-0.0264967 0.121204 -0.00819998 +0.00829502 0.0653838 -0.032076 +-0.0287456 0.0753309 -0.0348961 +-0.0727338 0.0821447 -0.0156124 +-0.0470607 0.146242 0.00718592 +-0.0209665 0.0386858 -0.0114366 +-0.0600079 0.128191 -0.00754937 +-0.0653109 0.180421 -0.0593142 +-0.0559148 0.0548054 0.00768529 +-0.0524976 0.0917711 0.0441581 +0.0212182 0.0847586 -0.026404 +-0.0579878 0.0414274 -0.0083271 +-0.0726954 0.0791971 -0.0139413 +-0.0307256 0.0915724 -0.0247467 +-0.0556334 0.11822 -0.0129265 +-0.0457806 0.0841121 -0.0213757 +0.00438413 0.0465246 -0.0275852 +-0.010477 0.110005 0.0426237 +-0.0896333 0.0929554 0.018431 +0.0397783 0.106996 0.0151622 +-0.0127593 0.0728576 -0.0383837 +0.0319543 0.0766492 -0.0197037 +0.00131984 0.0612266 -0.0334746 +-0.0834451 0.136657 0.0474496 +-0.0558128 0.0869147 -0.0214989 +0.00250708 0.0474439 0.0499052 +0.0125018 0.115423 0.0374065 +-0.00563766 0.13083 0.0104776 +-0.0658527 0.144237 -0.0148815 +-0.089646 0.0929438 0.0164332 +0.0436072 0.041137 0.00426675 +0.0444767 0.0889055 -0.00179899 +-0.057137 0.0562876 0.0015684 +0.00522768 0.0810328 -0.0339223 +-0.0137183 0.0628763 -0.0368336 +0.00133514 0.0554198 -0.0315391 +-0.0188851 0.0334951 -0.0249427 +0.052927 0.0495927 0.0235839 +0.0522184 0.0461787 0.0182078 +0.0165976 0.0348504 0.0271124 +-0.0589342 0.12267 0.0410891 +-0.0669714 0.163891 -0.0179699 +-0.0703202 0.132668 0.0493213 +-0.0776493 0.0787462 -0.00818258 +-0.0881736 0.132451 0.0437642 +-0.0632228 0.141176 -0.0069873 +-0.0713401 0.171022 -0.0310853 +-0.047409 0.166836 0.00227952 +-0.0141433 0.181604 -0.0223083 +-0.0619045 0.104018 -0.0180451 +-0.0483068 0.13712 0.0113971 +0.0136813 0.0952834 0.0497668 +0.035272 0.0660164 0.0386352 +0.0461881 0.0785676 0.017326 +-0.0532105 0.0335853 0.013987 +-0.0171786 0.0971676 0.04907 +-0.0725346 0.145512 -0.0179133 +-0.0333802 0.0498304 -0.01435 +0.0509184 0.0496314 0.0259504 +-0.0572784 0.0576838 0.00160501 +-0.0619689 0.153737 -0.0245819 +-0.0544985 0.104295 0.0412117 +-0.0500704 0.137041 0.0213927 +-0.0191411 0.0697535 0.053261 +0.0582061 0.0634965 0.00313887 +-0.0204853 0.0800483 0.0563065 +-0.0472097 0.0335059 -0.0119372 +-0.0749299 0.155492 -0.0209193 +-0.0698715 0.116492 -0.00825865 +0.0375436 0.055493 0.03143 +-0.0538462 0.137744 -0.0016929 +-0.0607335 0.034496 0.0414254 +0.0295159 0.107768 -0.0121736 +-0.0689178 0.168027 -0.0530164 +-0.0779935 0.171503 -0.0379488 +-0.0881443 0.0887489 0.00447233 +-0.00442605 0.128738 0.0268092 +0.00451348 0.0633892 0.056472 +-0.0818952 0.134036 0.0502533 +-0.0372574 0.124492 0.0238955 +0.0138426 0.11139 -0.0180298 +-0.0818741 0.119187 -0.00382424 +-0.0756587 0.0744591 -0.00795246 +-0.026115 0.158145 -0.00104516 +0.037495 0.0513025 0.031739 +0.0589255 0.0580383 0.0211692 +0.0434376 0.0874432 0.0261531 +-0.0260776 0.125932 0.00880255 +-0.0740662 0.155757 0.0246008 +-0.0178239 0.0387614 0.0327968 +0.0417114 0.091515 -0.00780409 +-0.0241449 0.0905492 0.0505682 +-0.074497 0.124608 0.0532356 +-0.0458334 0.0927472 -0.0217986 +-0.0804383 0.111326 0.0449881 +-0.00529252 0.125273 -0.00885488 +-0.0889223 0.0888194 0.00846703 +-0.00624295 0.130196 0.00449841 +-0.0669483 0.0447271 0.0026821 +-0.0548497 0.0941617 -0.0218342 +-0.0534962 0.0931826 0.0441514 +-0.0347147 0.0696617 -0.0176192 +-0.0440132 0.0366004 -0.0242792 +-0.0474979 0.0464882 0.040801 +-0.0653409 0.0600919 0.00943789 +-0.0231718 0.171204 -0.0201308 +-0.00587295 0.130011 0.00319127 +-0.0664676 0.0383698 -0.00648508 +-0.0886456 0.0935942 0.0229142 +-0.0447618 0.116708 -0.0154556 +0.0194756 0.100345 0.0462123 +-0.0154951 0.0911415 0.0560918 +-0.0371641 0.0342638 0.0291868 +0.0162971 0.0651874 -0.0294171 +-0.0291548 0.169699 -0.0175574 +-0.0704877 0.0623972 0.0153213 +-0.0774944 0.092744 0.0372295 +-0.00984328 0.0975178 -0.0293224 +-0.0784995 0.162482 -0.0259435 +-0.0145068 0.0730096 0.0554058 +0.0203473 0.0727595 0.0505294 +-0.0616196 0.156864 -0.0215888 +-0.0832232 0.0789707 0.00151853 +0.0163786 0.0403059 -0.0216745 +0.000325641 0.0568761 -0.0321896 +-0.0192766 0.0554309 0.0481999 +-0.00592104 0.0389465 -0.0049376 +-0.0499986 0.143197 0.012378 +-0.0355049 0.076131 0.0419036 +0.053394 0.0525543 0.0260735 +0.00630024 0.125509 0.0321214 +-0.0349082 0.033686 0.00682403 +-0.0714928 0.117552 0.0529474 +-0.0589919 0.15382 0.0299308 +0.0585035 0.0621132 0.0229868 +0.00569406 0.0341002 0.00181761 +-0.0155184 0.118264 0.0365807 +-0.0424989 0.16674 0.00381643 +-0.0863225 0.128011 -0.00168174 +-0.0553953 0.118382 0.0373919 +0.0469197 0.0444607 0.00136465 +-0.056091 0.0334157 -0.00629765 +-0.0361548 0.166687 -0.0142688 +-0.0127937 0.0386426 -0.0153707 +-0.0118501 0.11995 -0.013068 +-0.00670797 0.0627873 -0.0354975 +-0.079327 0.169353 -0.0390258 +-0.0437872 0.0855322 -0.0215732 +-0.0280896 0.0549613 -0.0243859 +-0.0584052 0.033525 -0.00869675 +-0.0482395 0.144672 0.00644062 +-0.0554929 0.0932384 0.0449182 +-0.0347045 0.0851136 -0.0245778 +-0.0494996 0.0791204 0.0440794 +0.0372047 0.0385834 0.00228863 +0.0193241 0.0607694 -0.0271316 +0.00852018 0.0702413 0.0555324 +-0.0778099 0.148638 -0.00388521 +-0.06539 0.178765 -0.0548301 +-0.04996 0.133052 -0.000571002 +-0.0847199 0.0939171 -0.00356265 +-0.0326229 0.0385148 -0.00990233 +0.032773 0.036599 0.0179277 +0.0427869 0.0611675 -0.0033403 +-0.0366336 0.0548529 -0.010755 +-0.0870489 0.0900041 0.00248653 +0.0416085 0.0656213 0.0284032 +0.00293844 0.100629 -0.0225769 +-0.0728162 0.0907583 -0.0154663 +-0.0718707 0.116473 -0.00776413 +-0.0937263 0.121427 0.0132848 +0.00471758 0.0346554 0.0428856 +-0.0704897 0.0719829 -0.0097429 +-0.050201 0.0344166 0.0315946 +-0.0796522 0.0704439 0.0152371 +-0.0425023 0.0986936 0.0421906 +0.0383887 0.0445417 -0.00444706 +0.0311086 0.103751 -0.0138751 +-0.0667119 0.155932 -0.00484005 +-0.0912006 0.121567 0.0443209 +-0.019019 0.0418114 0.0529435 +-0.0892823 0.141954 0.0132429 +-0.0221125 0.0389367 0.0353489 +-0.0563218 0.0335364 0.00802021 +-0.0896372 0.0929496 0.0174335 +0.0130767 0.125591 0.0302496 +0.0537776 0.0692651 0.00258827 +0.0106605 0.0363802 0.031763 +-0.0297187 0.0523119 -0.0193651 +-0.0140732 0.0383739 0.00681638 +0.0269054 0.0726895 0.0441444 +0.0246103 0.075474 0.0479027 +-0.00359864 0.0405713 -0.0254999 +0.0269298 0.0804165 -0.0233375 +-0.0488158 0.0912881 -0.0217052 +-0.00415439 0.0390536 -0.00654274 +0.000507304 0.0828912 0.0574668 +-0.0158173 0.038248 0.0138275 +-0.0624172 0.0599054 0.00479638 +0.0162074 0.0821136 -0.0291532 +-0.0419982 0.0337727 -0.000124238 +0.0250957 0.0348061 0.00319961 +-0.0309108 0.0608665 -0.0194213 +-0.0387236 0.174145 -0.00898261 +0.0464355 0.0778581 0.0101835 +-0.0639936 0.132595 -0.00811291 +-0.0340062 0.0381682 0.049242 +-0.0477004 0.131837 0.0244001 +-0.00268932 0.130846 0.00581897 +0.0302059 0.0857499 -0.020278 +0.0384903 0.0499056 0.0320993 +0.010384 0.0463357 -0.0254801 +-0.00660048 0.0405957 -0.0258634 +-0.0114989 0.0366056 -0.0169842 +0.0105059 0.0348976 0.020389 +-0.0487973 0.070279 0.0395574 +-0.0394971 0.057712 0.040203 +-0.0253679 0.125634 0.0163937 +0.0361389 0.0902387 0.0383091 +-0.0654905 0.0889779 0.0446185 +-0.0197462 0.0656505 -0.036857 +0.0320676 0.117774 0.0158308 +0.00351414 0.0661565 0.0562774 +-0.0226137 0.0422636 -0.0288734 +-0.019191 0.123923 -0.00519119 +-0.0532423 0.046246 0.0226735 +-0.021638 0.0464604 -0.0276852 +0.0272834 0.0689403 -0.022937 +0.0211914 0.124678 0.000362022 +0.04653 0.0760573 0.0105389 +-0.0338201 0.127158 0.00888963 +-0.077651 0.154407 0.00585132 +-0.0417202 0.0710768 -0.017536 +-0.0887218 0.0874968 0.0134639 +0.0165095 0.0354073 -0.0166384 +-0.0454406 0.0336534 -0.00804117 +-0.0504088 0.153575 0.0112235 +-0.0286428 0.107004 -0.0213195 +-0.0218765 0.0933131 0.0510401 +0.0329715 0.116865 0.0119087 +-0.0914625 0.148845 0.019136 +-0.0596259 0.155781 0.0151651 +0.0375784 0.099381 0.0316743 +-0.0157845 0.0784788 -0.0385671 +-0.0795217 0.123111 0.0512585 +-0.0418108 0.0343847 0.029868 +0.0389991 0.108356 0.0151637 +-0.0709225 0.109376 -0.0106672 +0.0579353 0.0634887 0.0239229 +-0.058577 0.0727277 0.0406017 +-0.062479 0.152546 0.000181648 +-0.0544934 0.0834141 0.0452404 +0.0357112 0.102065 0.0324889 +-0.0715263 0.0944187 0.0416527 +-0.0651404 0.112408 0.0390225 +-0.0545541 0.160714 0.00540511 +-0.0144079 0.183333 -0.0275579 +-0.0621531 0.152198 -0.0185797 +-0.0657166 0.14722 -0.0249021 +-0.0460756 0.154674 -0.00723534 +0.01519 0.127729 0.000331934 +-0.0489579 0.137072 0.00640402 +-0.0485683 0.0335187 -0.00854361 +-0.0885037 0.114225 0.0283481 +-0.0540375 0.141288 -0.0013423 +-0.0472373 0.134368 0.0171539 +-0.0272298 0.037736 0.022792 +-0.0518585 0.0985114 -0.0220738 +-0.0110867 0.180248 -0.025982 +-0.0236236 0.0593674 0.0425181 +-0.0408247 0.092859 -0.0231395 +0.0561988 0.0567015 0.0248562 +-0.0086058 0.172644 -0.0268228 +0.0163504 0.0552051 -0.0284322 +-0.0344945 0.0336038 -0.0243554 +-0.0556539 0.0345276 0.0424927 +-0.0348371 0.155104 0.00211833 +0.0276605 0.0605608 0.0434107 +-0.0623508 0.146001 -0.00658982 +-0.0248115 0.081196 -0.037776 +0.0240847 0.110594 -0.013209 +-0.0895075 0.148492 0.0263454 +-0.0926235 0.124077 0.00926903 +0.0292051 0.0843756 -0.0209031 +-0.0353048 0.127501 0.00687019 +-0.0859011 0.134922 0.00126737 +-0.0742444 0.0756609 0.0347079 +-0.0752605 0.157705 -0.0064221 +-0.0337955 0.0808164 -0.0255276 +-0.0288635 0.154571 -0.00355817 +0.0360371 0.0547702 0.0325687 +-0.0101249 0.0392126 0.0357767 +0.0288986 0.120838 0.016073 +-0.0106831 0.0570151 -0.0340192 +-0.0628045 0.144114 -0.00718004 +-0.0895701 0.151478 0.0161361 +-0.0176156 0.0385615 0.0294218 +-0.0211148 0.0389017 0.0355855 +0.0329392 0.0541774 -0.0107445 +-0.00428899 0.0367463 -0.0156853 +-0.0458368 0.0956376 -0.0219211 +0.0381262 0.080772 0.035847 +0.0268148 0.0976356 -0.019356 +-0.0625367 0.161521 -0.0446005 +-0.0517979 0.0869425 -0.0216307 +0.0344672 0.111064 -0.00366583 +-0.0911264 0.115738 0.024682 +-0.0753098 0.0805155 0.0368289 +-0.0133248 0.129244 0.00909724 +-0.0272428 0.0370384 -0.018628 +-0.0384762 0.0423266 0.0418914 +0.0203738 0.0521374 -0.0257342 +0.0585485 0.0552063 0.00817117 +0.0134367 0.121611 -0.0110511 +-0.089438 0.113514 0.0412091 +0.0444691 0.0790854 -0.00178456 +-0.000786355 0.0797462 -0.0360298 +-0.0269011 0.155694 -0.0071882 +-0.08839 0.0995952 0.00742201 +-0.0662162 0.0396687 0.0135434 +-0.0355277 0.0846755 0.0433772 +-0.0858238 0.104979 0.0223569 +-0.0778773 0.120773 -0.00663343 +-0.0263675 0.107348 -0.0216948 +-0.0927086 0.12286 0.0332776 +-0.0661966 0.15171 0.0363078 +-0.0202018 0.177138 -0.0227808 +-0.0855834 0.141979 0.0409477 +-0.0504886 0.0946205 0.0445363 +-0.0604928 0.101522 0.0423039 +0.0379519 0.0659398 0.0354557 +-0.0840048 0.140674 0.0436515 +-0.0558989 0.109796 -0.0177742 +0.00991096 0.0343624 0.00242681 +-0.0506409 0.0514954 0.0146147 +-0.0324809 0.117911 -0.0127388 +-0.0621631 0.164652 -0.0535815 +0.0025214 0.130289 0.0235241 +-0.0506513 0.150706 0.0125676 +-0.0175006 0.0829087 0.0576844 +-0.00809599 0.0347439 0.04196 +-0.0340295 0.0384544 -0.00643688 +-0.0694928 0.101384 0.0400561 +0.0446992 0.0776181 0.0241159 +-0.0935142 0.126862 0.0142561 +0.0248702 0.121138 0.0274186 +0.00114443 0.118463 -0.015597 +-0.053795 0.115431 0.0343764 +-0.0905823 0.131055 0.0352302 +-0.00177837 0.0811944 -0.0365591 +0.0316669 0.110076 0.0318865 +0.0355137 0.0902592 0.0391607 +-0.0911524 0.122908 0.0442317 +-0.0909787 0.118866 0.0441649 +-0.0647368 0.0350417 0.0261211 +-0.0694997 0.166373 -0.0203616 +-0.0256221 0.0450194 -0.0280788 +-0.0652445 0.171051 -0.0600934 +-0.0773393 0.152802 -0.0018868 +-0.00223434 0.118045 -0.0151238 +-0.0662482 0.063188 0.0243484 +0.0400602 0.0922366 -0.00959201 +-0.00562712 0.0451708 -0.0285409 +0.000501495 0.0457296 0.0472541 +-0.0123701 0.125297 0.0298351 +-0.0778681 0.101964 -0.00928868 +-0.0609537 0.123826 -0.00859412 +0.0224677 0.112582 -0.013341 +0.00921575 0.0781468 -0.0329463 +-0.0349236 0.126603 0.0011375 +-0.00878487 0.0784493 -0.0377777 +0.00650569 0.075888 0.056486 +0.0412418 0.0802411 -0.00774788 +-0.093262 0.128309 0.02526 +-0.0314363 0.171254 -0.00518552 +-0.0520579 0.0336325 0.0248414 +-0.0815026 0.127419 0.0524098 +-0.0894637 0.136534 0.031204 +-0.084288 0.111698 0.0438155 +0.0333653 0.0918289 -0.0171871 +-0.0324333 0.126109 0.00355422 +-0.00141447 0.0391026 0.0304627 +0.00110904 0.0340429 -0.0196452 +-0.0650297 0.138462 -0.00769967 +-0.015954 0.105864 -0.0221228 +-0.0523859 0.0626167 0.0314055 +0.026783 0.122575 0.00815739 +-0.0385209 0.128019 0.0130694 +-0.029395 0.125597 0.00758806 +-0.0328882 0.0666632 -0.0184721 +-0.0494036 0.13704 0.0193807 +-0.0782331 0.109897 -0.00456592 +0.0157741 0.036715 -0.0196413 +-0.0294956 0.0660091 0.0384906 +-0.0679029 0.105215 -0.0140793 +-0.0620463 0.158428 -0.0205873 +-0.0703503 0.159267 -0.00619145 +-0.0378682 0.104226 -0.0203027 +-0.0918252 0.118761 0.028299 +-0.0411447 0.163664 -0.0114686 +-0.0574975 0.0426993 0.0453715 +-0.0747471 0.147201 -0.0128585 +-0.0134963 0.0744967 0.0564394 +-0.054142 0.0722337 0.0402304 +-0.0642908 0.169609 -0.0607929 +-0.0154978 0.0977476 0.0489325 +-0.0800099 0.07203 0.0185532 +-0.0921132 0.115989 0.0103178 +0.00725505 0.0754138 -0.0341479 +0.0536301 0.0568087 0.0282148 +-0.0479854 0.0346149 0.0371396 +-0.00149257 0.0746611 0.0586297 +0.0203189 0.05934 -0.026848 +-0.0115998 0.0391898 -0.02633 +-0.0295596 0.0663471 -0.0284716 +0.00348965 0.105764 0.0424132 +-0.0703543 0.0703917 0.033048 +-0.0606347 0.0629111 -0.00512698 +-0.01408 0.166026 -0.0199736 +-0.061044 0.0400333 0.0227114 +-0.0810735 0.143155 -0.000828212 +-0.0617474 0.0766736 -0.0179709 +0.0217467 0.124535 0.0248197 +0.00507814 0.101571 -0.0215886 +0.0346034 0.0592134 0.0376264 +-0.0712039 0.0342165 0.00436442 +-0.0288195 0.0384506 0.0326078 +-0.053518 0.1534 0.0145047 +-0.0556759 0.0661408 -0.010195 +-0.0677895 0.175109 -0.0580246 +-0.0699291 0.0421822 0.0072491 +-0.0067422 0.0741543 -0.0369448 +0.0199779 0.0885978 -0.0258535 +-0.0488263 0.0941792 -0.0218889 +0.0343607 0.0505331 -0.00657713 +-0.0725404 0.162229 -0.0113532 +-0.00793663 0.0384098 0.0134736 +-0.0556415 0.043673 0.0216881 +-0.0145298 0.100345 0.0444168 +-0.0815281 0.1484 0.0374104 +-0.0387388 0.0753845 -0.0180569 +-0.0116442 0.0481633 -0.0303354 +0.0363562 0.0559126 -0.00774494 +-0.0652193 0.1682 -0.0598394 +-0.0776736 0.10169 -0.00957801 +-0.0196644 0.0494984 -0.0297043 +-0.0282432 0.0763981 0.0437868 +-0.0328471 0.033696 0.0126517 +0.00347146 0.128699 -0.00262952 +0.0461484 0.0806375 0.015174 +0.0337656 0.111689 0.027893 +-0.0271752 0.172675 -0.0185845 +-0.0693701 0.141497 -0.00893397 +0.0317719 0.115994 -0.000976469 +0.0347163 0.0544411 -0.00865089 +-0.0651886 0.172101 -0.0460875 +-0.0678768 0.1616 -0.0125361 +-0.0634522 0.0423282 0.0135276 +0.0601313 0.0581272 0.0101639 +-0.0107388 0.117999 -0.0150205 +0.0339646 0.0916099 0.0404552 +-0.0498374 0.138571 0.0183794 +-0.0934962 0.117401 0.0173034 +0.0383972 0.0491164 -0.00642484 +-0.0280195 0.0378733 -0.0295429 +-0.0146147 0.12166 -0.00880985 +0.0372641 0.0686531 0.0362559 +0.0239959 0.0549509 0.0433236 +0.00994394 0.0362916 0.0335003 +-0.0208017 0.0799082 -0.0390716 +0.0233991 0.0534151 -0.0239637 +0.00722024 0.0851796 -0.0327872 +-0.0639758 0.128226 -0.00858393 +0.0238189 0.124864 0.00990899 +0.00150975 0.0474485 0.049901 +-0.0361905 0.168183 -0.0140562 +-0.0174884 0.0801344 0.0573382 +-0.0918829 0.116106 0.0333156 +0.00614351 0.12581 -0.00755937 +0.0340287 0.115127 0.0194375 +-0.0908622 0.135106 0.0192089 +-0.000650637 0.0496936 -0.0307015 +-0.0856199 0.144636 0.00717286 +0.0438423 0.0804362 -0.00278861 +-0.00949487 0.0503088 0.0507661 +0.0271211 0.103444 0.039376 +-0.0386188 0.04066 -0.0277325 +-0.0654456 0.154232 -0.00436037 +-0.0264896 0.100224 0.0439794 +-0.0715324 0.144165 0.0446205 +-0.0694829 0.118967 0.0529378 +0.0378869 0.110163 0.00793964 +0.0353212 0.108669 0.0283742 +0.0601522 0.0581329 0.0151721 +-0.0542607 0.057796 0.0208407 +0.00222051 0.130562 0.00190808 +-0.0641033 0.156361 -0.011127 +0.0432299 0.0944972 0.0241641 +-0.0229686 0.033489 -0.025736 +-0.0221215 0.127119 0.0131583 +-0.0671797 0.0604061 0.0141816 +-0.0288776 0.0903901 -0.0295833 +0.0603694 0.0609168 0.00815448 +-0.0494359 0.138587 0.00541192 +-0.0023893 0.0424447 0.047211 +-0.0543474 0.135324 0.0319505 +0.0228597 0.125444 0.016672 +-0.0334812 0.0737514 -0.024477 +0.0348071 0.0781711 0.0398247 +0.0054972 0.0547598 0.0532635 +0.00645879 0.122419 -0.0119062 +-0.0438011 0.128754 0.0022734 +-0.0849152 0.0791131 0.00550947 +-0.0506838 0.0678366 -0.0132392 +0.0126337 0.110109 -0.0186257 +-0.0497701 0.140145 0.0153991 +-0.0724387 0.0819305 0.0395669 +0.0576036 0.0717386 0.0163116 +0.00802743 0.0346823 0.0237027 +0.00218868 0.098191 -0.0260404 +-0.0368205 0.162344 -0.00074381 +-0.070799 0.0908224 -0.0163205 +-0.0539828 0.0700164 0.038652 +0.0135945 0.128354 0.000408423 +-0.0264981 0.0959784 0.0437675 +0.0190214 0.118116 -0.0113006 +-0.0618485 0.153752 -0.0205795 +-0.0552085 0.151192 0.0284379 +-0.0266144 0.0408668 -0.0293519 +0.00698354 0.131641 0.013682 +-0.0316463 0.0595496 -0.0164023 +-0.0758985 0.159659 -0.0269354 +-0.0491601 0.160603 -0.00598464 +-0.00858383 0.0384847 0.0096485 +-0.0717673 0.146065 -0.0213605 +-0.0899696 0.15095 0.0147905 +-0.00955085 0.0385956 0.00389466 +-0.0607249 0.0737695 -0.0169262 +-0.0751542 0.0995011 0.0375123 +-0.0707959 0.0850638 -0.0167146 +-0.0312047 0.123257 -0.00431908 +-0.053995 0.0675039 0.0372692 +-0.0419532 0.0345214 0.0385087 +-0.0289695 0.0380956 -0.0297496 +-0.0121936 0.163667 -0.0136225 +0.021294 0.0721108 -0.027322 +0.0597965 0.0678036 0.00914167 +-0.0657015 0.0736405 -0.0152375 +0.00697022 0.12731 -0.00520393 +0.033357 0.100796 0.0361067 +0.0587791 0.0686289 0.0199155 +0.00149398 0.0394449 0.0343588 +-0.0875531 0.12123 -0.000692815 +-0.0744527 0.154114 -0.0209063 +-0.0172261 0.0356447 0.0515267 +-0.0200013 0.0389743 0.053287 +-0.0569508 0.0343746 0.0319473 +-0.0184875 0.0829081 0.0576141 +-0.019368 0.183116 -0.0157888 +-0.0626506 0.153382 -0.0318715 +-0.00943219 0.095325 -0.0330289 +0.0431395 0.100108 0.0121576 +-0.0608162 0.0881975 -0.019441 +0.0357777 0.070014 0.0376374 +0.0505254 0.0735568 0.0151501 +0.0307633 0.0476275 0.0336614 +0.0294554 0.0416168 0.02991 +-0.0611913 0.173613 -0.0615062 +-0.0146115 0.109635 -0.0201085 +0.0379445 0.0686366 0.0354907 +-0.076675 0.154077 0.000107436 +-0.0315189 0.0351239 -0.0306591 +-0.0768434 0.109781 0.0434593 +-0.0522791 0.0490314 0.0356585 +-0.0380005 0.12652 0.0191796 +-0.0861323 0.103534 0.00440203 +-0.0659084 0.106679 -0.0142087 +0.000468869 0.0388702 -0.00172096 +-0.0623487 0.141045 -0.00649873 +-0.0484952 0.0862244 0.0454118 +-0.0685451 0.170527 -0.0328985 +-0.037499 0.101465 0.0412127 +0.0274201 0.0431121 -0.00573463 +-0.0197554 0.158352 -0.00754965 +-0.0567366 0.0753362 -0.0185878 +0.0533817 0.063336 -0.00140725 +0.0135006 0.105771 0.0435499 +-0.0631905 0.166285 -0.0395881 +-0.0932173 0.122834 0.0272862 +-0.0284888 0.0396421 0.053637 +-0.0134794 0.0559661 0.0512091 +-0.04424 0.130203 0.0124253 +0.0196407 0.0940896 -0.0236062 +-0.0625219 0.151129 0.0359075 +-0.0585008 0.0732388 0.0410714 +0.0608111 0.0651191 0.0151635 +-0.0275116 0.0560234 0.0370088 +-0.0127931 0.0799092 -0.038653 +-0.0544725 0.0478754 0.0402183 +-0.0905041 0.147099 0.0259896 +0.0291224 0.0877617 -0.0209279 +0.0381679 0.0993665 0.0307411 +0.00549435 0.0474709 0.0500045 +-0.0842531 0.102059 -0.0016008 +0.0164869 0.128389 0.00575868 +-0.043156 0.162156 -0.0100947 +0.0445553 0.0846952 0.000180444 +0.0409145 0.07739 -0.0077683 +0.0297353 0.111221 -0.00987421 +-0.0220481 0.0379707 0.0182323 +-0.0636401 0.0337302 0.00992182 +-0.0277909 0.0796672 -0.0363416 +-0.0247513 0.0944605 0.0453863 +-0.0291577 0.0733109 -0.0335988 +-0.0264744 0.0486202 0.0485825 +-0.0654948 0.104238 0.0403184 +-0.054309 0.153692 0.0171048 +0.000886988 0.0365316 0.0205866 +0.025787 0.114054 0.0339562 +-0.0624998 0.091833 0.0450322 +-0.0825753 0.107428 -0.000626511 +-0.0879726 0.100935 0.0073995 +-0.0849555 0.110375 0.0243559 +-0.00450509 0.0815118 0.0573962 +0.0411647 0.0886413 -0.00977915 +0.00923376 0.0823418 -0.0323881 +0.0250818 0.0983923 -0.0201688 +-0.0460388 0.0353834 -0.0203139 +-0.0563344 0.154371 0.0236088 +-0.0786725 0.15564 0.0171569 +-0.0174933 0.120917 0.0332266 +-0.0405771 0.0447491 -0.0223069 +-0.0706839 0.0363372 -0.00115986 +-0.0827485 0.134001 0.0496722 +-0.0566419 0.0336495 -0.0102846 +-0.0932956 0.12823 0.014251 +-0.0183957 0.116542 -0.0154107 +0.03698 0.0590759 0.0339965 +-0.0709427 0.132583 -0.00826816 +-0.0697213 0.0778913 -0.0154943 +-0.0222445 0.159024 -0.0114139 +-0.0571999 0.0684533 0.0375014 +-0.04663 0.0533425 -0.0102323 +0.00628325 0.0668147 -0.0324472 +-0.0477443 0.0767654 -0.0182192 +0.000336625 0.0525175 -0.0304496 +-0.0562455 0.0345922 0.0440034 +-0.00249349 0.0474079 0.0491587 +-0.00849662 0.115566 0.0401952 +-0.0346349 0.176996 -0.009991 +-0.0315471 0.0665587 -0.0224416 +-0.0114919 0.121016 0.0357517 +-0.00348929 0.0884115 0.0568027 +-0.0275554 0.0689002 0.0398598 +0.0463861 0.080656 0.0111753 +-0.0335046 0.109774 0.0374515 +-0.0104184 0.179993 -0.0295246 +0.0299649 0.0370453 0.0224182 +-0.0229027 0.109901 -0.0203838 +0.0326144 0.117295 0.0103313 +0.0369028 0.0954111 -0.0108822 +-0.0564742 0.041367 0.0464242 +-0.0770729 0.168746 -0.0303374 +-0.0310065 0.124592 0.0202545 +-0.06762 0.17339 -0.0440641 +-0.0124743 0.0632507 0.0548154 +-0.06879 0.067714 0.0304363 +-0.0188136 0.124392 0.0261122 +-0.0775236 0.155819 0.0175602 +-0.0744868 0.14835 0.0408614 +-0.0798509 0.120721 -0.00541034 +-0.0474977 0.0747299 0.0422594 +-0.0819076 0.08016 -0.00254028 +-0.0104535 0.0366522 -0.0168147 +0.0107598 0.0346122 0.0387698 +-0.0618853 0.158437 -0.0215849 +-0.0248668 0.103031 -0.023615 +0.0521945 0.0697716 0.0245573 +0.0156704 0.0936059 -0.0251021 +0.0371318 0.111041 0.00479819 +-0.0835634 0.0897492 -0.00557879 +0.00648846 0.118239 0.0378444 +-0.0454996 0.0464888 0.0408011 +0.00251072 0.0388788 0.0260522 +-0.0757603 0.10082 0.036651 +-0.072674 0.131225 0.051196 +-0.0107806 0.0770662 -0.0381287 +-0.0336363 0.153436 -0.00674709 +-0.0843022 0.0938821 0.0298739 +-0.00957953 0.177197 -0.0268263 +-0.06621 0.148552 -0.030869 +-0.0367939 0.127143 0.000444502 +0.0450752 0.0819431 0.00117926 +0.00252922 0.0387278 -0.0124032 +0.0124259 0.130345 0.00996559 +-0.039483 0.112566 0.0355031 +-0.0896451 0.11724 0.00430849 +-0.0307561 0.0876495 -0.0285591 +-0.0336555 0.0363317 0.0490618 +0.00481949 0.0349074 0.0372909 +0.0324749 0.095557 0.0400886 +-0.0601974 0.126918 0.041055 +0.0561271 0.0494063 0.0121912 +-0.0663732 0.0796127 0.0418746 +-0.0634873 0.105626 0.040045 +-0.0348887 0.174114 -0.0129217 +-0.0331172 0.123673 -0.00477506 +-0.0158191 0.0855498 -0.0389623 +-0.0630684 0.138136 0.036884 +0.00839558 0.0418967 -0.0238735 +-0.000234213 0.0957245 -0.0313684 +-0.00270805 0.0387067 0.00335713 +-0.0066107 0.0434378 -0.0261152 +0.0267348 0.0889072 0.0458132 +-0.057498 0.0762057 0.0428357 +-0.0559977 0.128155 -0.00607843 +-0.0652856 0.176792 -0.0608019 +-0.0847322 0.10481 0.00139005 +0.0045205 0.0842507 0.0571459 +-0.0540417 0.148675 -0.00217424 +0.00157845 0.0388465 -0.0127005 +-0.0649294 0.123847 -0.00887936 +0.0268943 0.0906576 -0.0219805 +-0.0692389 0.149629 -0.0402111 +0.0424058 0.101483 0.00416631 +-0.069135 0.0354547 0.0122501 +-0.0311414 0.168206 -0.0166543 +0.0247254 0.0405634 0.0363023 +-0.035656 0.0591967 -0.0115208 +-0.0492298 0.13342 0.00108021 +0.0186953 0.0943115 -0.0238444 +-0.0632815 0.159908 -0.0475928 +-0.0744952 0.144184 0.0450216 +-0.0273351 0.0750142 0.0443436 +0.0129485 0.0726239 0.0538836 +-0.0256504 0.178665 -0.00908499 +-0.0152817 0.126335 -0.00175389 +0.0171854 0.035921 0.00432788 +0.00536983 0.0385261 0.026955 +-0.069701 0.0749104 -0.0135814 +-0.0936513 0.125496 0.0142597 +-0.0218218 0.0854612 -0.0381675 +-0.0670338 0.0819342 0.0426575 +-0.0637771 0.0824308 -0.0191299 +-0.0579197 0.0410941 0.0197057 +0.004329 0.114453 -0.0192954 +-0.0743852 0.111313 0.0463698 +0.0153242 0.0566704 -0.0288596 +0.0201589 0.0349933 -0.00358051 +-0.0674387 0.0336478 0.00564073 +0.0380425 0.109755 0.0161689 +0.0214264 0.0348625 -0.00133145 +0.0129483 0.0405423 0.0447572 +-0.00171529 0.0627358 -0.0345403 +-0.0206569 0.0494682 -0.0293042 +0.0369479 0.0784891 -0.0137448 +-0.0877279 0.139146 0.00920485 +-0.0228745 0.0383806 -0.00412065 +0.0407791 0.105635 0.00716484 +-0.0164884 0.161116 -0.0081783 +0.0261701 0.115347 0.0327443 +-0.0171143 0.0393698 0.0395766 +0.0364251 0.0840505 -0.0167267 +-0.0413094 0.0336719 -0.0183114 +-0.00449481 0.0619627 0.0557718 +0.0354002 0.054813 0.0334165 +0.0257124 0.0795754 0.0477924 +-0.0900689 0.132434 0.0392074 +0.0111597 0.124256 -0.00791398 +0.023574 0.105697 0.0395934 +0.0172046 0.061784 0.0493931 +-0.0738846 0.110669 -0.00843945 +0.00601824 0.128477 0.0276707 +-0.0581623 0.155642 0.0142378 +-0.046474 0.0903329 0.04369 +-0.0204963 0.0988407 0.0444811 +0.0448392 0.0847511 0.0231667 +-0.0246346 0.0464142 -0.0272665 +-0.0164056 0.0347921 0.0489909 +-0.048358 0.146267 0.00883601 +-0.0626778 0.0407451 0.0424121 +-0.06586 0.154377 -0.00304604 +0.0375072 0.103901 -0.00584413 +-0.00221994 0.0380783 -0.0146251 +0.00247871 0.110023 0.0425049 +0.0588331 0.0552392 0.0181818 +-0.0156079 0.0352742 -0.0184368 +-0.0112854 0.0344473 -0.0186905 +-0.0170355 0.0338392 -0.0211402 +-0.0137571 0.128142 0.00234571 +0.0353694 0.082169 0.0388786 +-0.065182 0.160968 -0.0576695 +-0.0324895 0.0874934 0.0434306 +-0.0637445 0.0781022 -0.0180675 +-0.0882379 0.0914593 0.00646904 +0.0256941 0.120543 -0.00190068 +-0.0750751 0.149943 -0.025867 +-0.0477253 0.135673 0.0140062 +-0.0678845 0.116524 -0.00880656 +-0.0627671 0.15529 -0.013592 +-0.0588282 0.0408079 0.0456406 +-0.056691 0.0506774 -0.00137882 +-0.0828622 0.0910525 -0.0066104 +-0.0499126 0.0515141 0.0166499 +-0.0490107 0.146266 0.00962371 +0.0122318 0.130219 0.0070475 +-0.0116803 0.0570084 -0.0342026 +-0.0651676 0.167884 -0.0330971 +-0.0730453 0.0699885 -0.00346826 +0.0174821 0.0990004 0.0469682 +-0.0908453 0.133761 0.025216 +-0.0657306 0.150277 -0.0347821 +-0.0671422 0.159475 -0.0561779 +-0.00377564 0.078412 -0.0370359 +-0.0617811 0.042326 0.0146867 +-0.0252077 0.0348536 0.0435448 +-0.028493 0.0602587 0.0370952 +-0.08903 0.119932 0.00232561 +-0.0345174 0.105629 0.0392495 +-0.0234134 0.181486 -0.0190275 +-0.0664685 0.0611724 0.00451786 +0.0367619 0.0414833 0.0270934 +-0.0275613 0.121213 -0.00819283 +0.0347392 0.0848817 0.0397697 +-0.0655835 0.0626949 -0.00273961 +-0.0187525 0.0671388 -0.037784 +-0.0904123 0.13106 0.0392156 +0.0183728 0.0521803 -0.0265242 +-0.0394837 0.113931 0.0345962 +-0.050497 0.0848226 0.0453947 +-0.026736 0.125755 0.00710307 +-0.0284884 0.0890334 0.0453918 +-0.0441667 0.0657175 0.0402548 +0.0109368 0.035027 0.0276086 +-0.0219243 0.0335307 -0.0255712 +-0.0865855 0.100865 0.00437928 +-0.0114057 0.038823 -0.00778731 +-0.0606205 0.136712 0.0351771 +-0.0938957 0.124187 0.0252761 +-0.0877217 0.151511 0.024071 +0.0027861 0.0392982 -0.00725238 +-0.0435747 0.127942 -0.00117905 +0.00626863 0.114136 -0.0189815 +-0.0182416 0.0386382 0.0310248 +-0.065785 0.145733 -0.0198954 +-0.0867571 0.0833567 0.0144816 +0.0263294 0.0517767 -0.02097 +0.0205436 0.0357642 -0.00368285 +-0.0174561 0.0544373 0.0497557 +0.0051136 0.11017 -0.0202785 +0.0320036 0.0972394 -0.014969 +0.018368 0.0537078 -0.0275601 +0.00449367 0.115547 0.0400425 +0.030957 0.0564285 0.0393343 +-0.0480871 0.166778 0.00155196 +-0.0374511 0.122567 -0.00961353 +-0.067466 0.154933 0.00219081 +-0.0645473 0.0334176 0.0010517 +-0.0507826 0.0530079 0.0196214 +-0.0269873 0.0549465 0.0375414 +-0.0318114 0.0361324 -0.0187 +0.0211923 0.12581 0.0217553 +-0.0485738 0.111377 -0.0178292 +-0.0790938 0.10996 -0.003593 +0.0410408 0.0408917 0.00130956 +-0.0171973 0.174198 -0.0240623 +-0.0136738 0.0526181 -0.0325173 +-0.0194987 0.0828823 0.05729 +-0.00149547 0.119691 0.0381347 +0.0125362 0.127772 -0.00169738 +0.00352032 0.0772514 0.0561756 +-0.0037108 0.0392109 0.0335024 +-0.0682887 0.164315 -0.0170259 +-0.0861823 0.107654 0.00936346 +0.0116633 0.0616767 0.0519085 +-0.0828359 0.104706 -0.00261356 +-0.0473623 0.129578 0.0262098 +0.0143608 0.0508459 -0.0270896 +-0.0265586 0.171236 -0.0104749 +0.0203688 0.0459169 -0.020834 +-0.0404996 0.0591463 0.0404229 +-0.0164937 0.0758406 0.0558352 +-0.00649647 0.0898144 0.056995 +-0.070489 0.118975 0.0531649 +-0.0665486 0.169315 -0.0336077 +-0.0869443 0.101766 0.0237835 +0.0413201 0.104267 0.012164 +-0.0705201 0.0646959 0.0221381 +-0.0345088 0.104256 0.0402356 +0.0590657 0.0691634 0.0182335 +0.0274527 0.103904 -0.0160338 +-0.0321732 0.0461161 0.0457813 +-0.0446011 0.0519723 -0.0106716 +-0.0932418 0.125562 0.0272746 +-0.0458642 0.128671 0.00011454 +-0.0885465 0.0902329 0.022415 +-0.0693724 0.136902 0.0471868 +0.0383558 0.102292 -0.0062663 +-0.0638617 0.125566 0.0463833 +-0.017504 0.0870094 0.0567302 +-0.0370734 0.0393951 0.0451959 +0.00329134 0.119473 -0.0147093 +-0.0543235 0.0334648 0.00849253 +0.0274945 0.0381011 -0.00197122 +-0.0703836 0.151592 -0.0450749 +0.0441667 0.0973563 0.00616912 +0.0240844 0.0547426 -0.0237664 +-0.015779 0.0770791 -0.0385675 +-0.0731035 0.0667848 0.0215468 +0.0455074 0.0569933 0.0321208 +-0.0438752 0.128361 0.000408951 +-0.0622566 0.0709345 0.0378148 +-0.0713089 0.156055 0.0109968 +0.0323876 0.047596 -0.00623106 +-0.0610541 0.068813 0.0363796 +-0.0175437 0.119111 -0.0121224 +-0.0136792 0.0541002 -0.0332811 +-0.0477406 0.135604 0.0113959 +-0.0709176 0.112214 -0.00951227 +0.0301974 0.0887542 -0.0200097 +-0.0734581 0.168 -0.0440151 +-0.0685258 0.165031 -0.0185494 +-0.0264962 0.0690788 0.0415599 +-0.0249134 0.0383716 -0.00452352 +-0.086697 0.114875 0.0460769 +-0.0752073 0.156095 0.0183637 +-0.0189411 0.0376177 0.0530488 +-0.0634886 0.064446 0.0291098 +-0.0261594 0.066324 0.0406106 +-0.0142604 0.0974009 0.0506069 +-0.0316679 0.0763713 -0.0315414 +-0.040787 0.0855384 -0.021437 +0.0590343 0.06983 0.00945078 +-0.07763 0.165322 -0.0259443 +-0.0631195 0.176032 -0.0554618 +-0.0918958 0.129686 0.0292517 +-0.029505 0.0545565 0.0362962 +-0.0356809 0.123888 -0.0070042 +0.0421291 0.070468 -0.00580336 +0.0297749 0.0920783 -0.0194766 +-0.0415439 0.148326 -0.00168489 +-0.090059 0.136447 0.0142016 +-0.0555057 0.0946 0.044463 +-0.0945025 0.125547 0.0202583 +-0.0304869 0.0532061 0.0367531 +0.00830607 0.0917456 -0.031199 +0.0182274 0.125477 -0.00123802 +0.0138055 0.0712841 0.0533593 +0.0294478 0.0506302 0.0370841 +-0.0802909 0.104732 0.0311813 +0.0308738 0.115323 0.0282321 +-0.0889738 0.137888 0.0281941 +-0.0750897 0.149941 -0.0248696 +0.0395014 0.0469731 0.0315971 +-0.0599935 0.0586398 0.0172334 +-0.0790056 0.166641 -0.0359617 +-0.00233373 0.114874 -0.0177321 +-0.0241436 0.180147 -0.0104229 +-0.0746876 0.0700138 0.0272066 +-0.00503592 0.13043 0.00494647 +-0.069435 0.179317 -0.0579979 +-0.0896062 0.137812 0.0131974 +-0.0625358 0.155244 -0.0346054 +-0.071543 0.155755 0.00800576 +-0.0746181 0.165272 -0.019163 +-0.0386347 0.0548667 -0.0110053 +0.00350742 0.103001 0.0436938 +-0.0629079 0.15056 -0.0255866 +0.0200283 0.0371524 -0.00668325 +-0.0375331 0.127856 0.0134298 +-0.075576 0.155851 0.0124034 +-0.0145239 0.118305 0.0371093 +-0.0528711 0.15259 0.0147483 +-0.0639569 0.158297 -0.0475943 +-0.0437953 0.0869983 -0.0218056 +0.0183 0.0651194 -0.0285252 +0.0410434 0.0689808 -0.00777311 +-0.0391241 0.157933 0.00465789 +-0.0617079 0.155317 -0.0205813 +0.049194 0.055373 0.030576 +-0.0577821 0.0826022 -0.0210434 +0.00750154 0.123796 0.0339733 +-0.0844011 0.0777797 0.0105147 +-0.0508742 0.137048 0.0234112 +-0.0487311 0.13178 0.0269763 +-0.0224768 0.123487 0.0248086 +0.0572102 0.0550739 0.00417234 +0.0523558 0.0647992 0.0281407 +-0.0804668 0.131637 0.0521945 +0.0276827 0.0480336 -0.0156964 +-0.0121824 0.178673 -0.0292354 +-0.0228778 0.10587 -0.0225138 +-0.0644637 0.0743344 0.0396953 +-0.0655821 0.153706 -0.0431373 +-0.0176845 0.0525387 -0.0318817 +0.0256228 0.0363687 8.49366e-07 +-0.0208533 0.0866413 0.055877 +-0.0490886 0.157599 -0.00632625 +0.00958152 0.0417197 0.0451866 +-0.0135001 0.0800899 0.0570677 +-0.0885594 0.112819 0.0222051 +0.0440561 0.0945388 0.0201582 +0.00630898 0.0624816 -0.0315869 +-0.0560997 0.155362 -0.00113519 +-0.0238123 0.0867774 -0.0372362 +-0.0711896 0.155374 -0.0449035 +0.018728 0.0549999 0.0480114 +-0.0696134 0.172257 -0.054028 +-0.00359831 0.101107 0.0440537 +-0.033095 0.0723179 -0.02347 +0.0338305 0.107861 -0.00824999 +-0.0354812 0.0383051 -0.00290933 +-0.0238593 0.0838986 0.0547079 +0.0239371 0.103424 0.0418106 +-0.076687 0.14724 -0.00686649 +-0.0113442 0.129847 0.0112634 +-0.0595215 0.131137 0.0385262 +-0.00250336 0.0633801 0.0564795 +-0.0765967 0.152807 -0.00988734 +0.00617007 0.126444 0.0306412 +0.0264293 0.0400385 -0.00421056 +-0.0261224 0.165258 -0.0166522 +-0.00669164 0.129496 0.00145082 +-0.0531001 0.154605 -0.00338641 +0.0347186 0.113797 0.00249877 +-0.0746345 0.0660496 0.0075612 +-0.0897609 0.0915993 0.0164407 +-0.0848984 0.0965537 0.0289739 +-0.0217829 0.111029 -0.0195757 +-0.0890662 0.123985 0.0032876 +0.0609254 0.0637423 0.0131584 +-0.0495476 0.147557 -0.00269468 +-0.00609162 0.0391352 -0.0126175 +-0.047607 0.144918 0.0010701 +-0.0484709 0.165547 -0.00491912 +0.0489576 0.0466396 0.0248167 +-0.0391315 0.160685 -0.012118 +-0.0530423 0.14778 0.0224018 +-0.0471085 0.0683456 0.0397676 +-0.0785029 0.128864 0.0532728 +0.0368255 0.109713 0.0241821 +0.0163171 0.0686116 0.0516854 +-0.0729482 0.0914984 0.0411605 +-0.0805357 0.113778 0.0465863 +0.0302378 0.0727042 0.0419554 +-0.0625354 0.122703 0.0447625 +-0.0615083 0.170965 -0.0565878 +-0.0124852 0.0659775 0.0542376 +0.0219313 0.0605513 0.0474343 +-0.048186 0.135579 0.00839494 +-0.014696 0.0585192 -0.0354314 +-0.0818834 0.109932 0.0368633 +-0.0564976 0.101562 0.0427397 +-0.0692156 0.0343564 -0.00463486 +-0.0924819 0.125444 0.00927262 +-0.0116015 0.0406252 -0.0263738 +0.000388646 0.0448955 -0.0263577 +-0.0474886 0.05462 0.0367747 +-0.0150651 0.12575 -0.00315467 +-0.0225002 0.104414 0.0430095 +-0.016108 0.038364 0.00641286 +-0.0474972 0.105664 0.0404447 +0.053572 0.0650953 0.0274823 +-0.068963 0.0874301 0.0429809 +-0.0206158 0.0422474 -0.0286271 +-0.0745126 0.131657 0.0521168 +0.0246516 0.122175 0.000230276 +-0.00982514 0.16696 -0.0220459 +-0.00885716 0.0385311 0.024037 +-0.0568241 0.063612 0.0312362 +-0.0787856 0.109366 0.039802 +0.0392221 0.075321 0.0338531 +-0.0725057 0.102685 0.0380563 +0.0318729 0.0380045 0.0237472 +-0.0704322 0.13832 0.0474328 +-0.0325018 0.177105 -0.00443384 +-0.0226059 0.0381278 0.0251854 +-0.00949201 0.129843 0.00617837 +-0.00878563 0.110674 -0.0212403 +0.0347324 0.0882263 -0.0174421 +-0.046782 0.0841151 -0.0215173 +-0.0692662 0.0692944 0.0324707 +0.00925419 0.0696192 -0.0318888 +-0.0303184 0.0423041 0.0510935 +-0.0780856 0.0784826 -0.00760345 +0.0256389 0.0929167 0.0460121 +0.00457646 0.108164 0.0418882 +-0.0519222 0.0461016 0.019678 +0.00234204 0.0367065 0.0225428 +0.0457266 0.0847913 0.00519644 +0.0292205 0.0857953 -0.020938 +-0.0196964 0.0384682 0.0290787 +0.0127826 0.0926962 0.0520031 +0.0390362 0.0980073 0.030266 +0.0186124 0.127837 0.0122439 +-0.0535608 0.0430661 -0.00900679 +-0.0509276 0.0346131 0.0417321 +0.0233086 0.0634336 -0.024957 +0.00850697 0.0546686 0.0524774 +-0.0275662 0.123979 -0.00112939 +-0.0688326 0.13265 0.047942 +0.0112159 0.0922395 -0.029689 +0.00233442 0.0539469 -0.0306143 +-0.0446508 0.040942 -0.0182992 +-0.00948977 0.114167 0.0408028 +0.0254079 0.10205 -0.0180571 +-0.0850056 0.146006 0.00617966 +-0.00850241 0.0870443 0.0572609 +0.0097783 0.1251 0.0319006 +-0.0222638 0.126605 0.016039 +-0.0722117 0.0348867 0.00176609 +-0.0327045 0.111423 -0.0179721 +-0.057835 0.0897878 -0.0213715 +-0.076573 0.153595 0.0311713 +0.0595629 0.058084 0.0191786 +-0.0323163 0.155148 0.000487548 +0.0120506 0.0505153 0.0488388 +-0.0524497 0.140085 0.0234103 +-0.0325359 0.172727 -0.00270207 +-0.0711683 0.149278 -0.039104 +-0.0641214 0.155412 0.0266328 +0.0288394 0.112544 -0.00929606 +-0.0217358 0.0384567 0.028668 +-0.0719124 0.168014 -0.0470137 +-0.0448486 0.0351369 -0.0234128 +0.0159855 0.12897 0.0112743 +0.0311432 0.0373381 0.0223917 +-0.000793766 0.0867716 -0.0355698 +-0.0900654 0.132428 0.033223 +-0.0935895 0.122834 0.0262964 +-0.0520638 0.0723523 0.0405753 +-0.0111299 0.129809 0.0171219 +-0.0491641 0.0344528 0.0317811 +-0.0849325 0.0938555 0.0290926 +-0.0809703 0.132422 -0.00393108 +-0.0887798 0.140493 0.0370948 +-0.0577868 0.0840301 -0.0211707 +-0.0814849 0.0872077 0.0329213 +0.0191348 0.102061 0.0453843 +0.0573171 0.0523102 0.00718519 +0.039991 0.0847392 0.0332858 +-0.0668403 0.0335301 0.004077 +-0.0117893 0.0392416 0.0372019 +0.0216437 0.120011 -0.00733339 +-0.0125093 0.0883992 0.0567932 +-0.0378236 0.125803 -0.00505851 +-0.0750347 0.154671 0.0286993 +-0.0887093 0.112351 0.0387402 +-0.0638899 0.102518 -0.0176142 +-0.0600535 0.138395 -0.00620678 +-0.0103882 0.129888 0.00873113 +-0.0610188 0.119808 0.0416066 +0.0158574 0.104091 -0.0202309 +-0.0839121 0.122095 -0.00374203 +-0.0841686 0.143365 0.0409129 +-0.00166671 0.12799 -0.00382866 +-0.0434723 0.0647942 0.0406198 +0.0406639 0.0815903 -0.00978474 +-0.0652464 0.154114 0.00157024 +-0.0257535 0.0740897 -0.0368116 +-0.0739579 0.13841 -0.00677972 +-0.0288788 0.0592582 -0.0244095 +0.0093177 0.0926652 -0.0301396 +-0.0452267 0.150119 -0.00491516 +-0.0319894 0.0384633 -0.00603174 +-0.0794952 0.0854073 -0.00956797 +-0.0675492 0.129835 0.0480321 +-0.0523266 0.033478 -0.00194369 +-0.00450192 0.0718383 0.058171 +-0.0535372 0.0578641 0.0215172 +-0.0140108 0.0596764 0.0527295 +-0.000532268 0.111266 -0.0199168 +0.0523683 0.0540101 0.0281247 +0.0211966 0.123092 -0.002693 +-0.00468835 0.0598784 -0.0344633 +-0.0718785 0.102239 -0.0132694 +-0.0678239 0.15109 -0.0436673 +0.0350895 0.0686836 0.0383949 +0.0422361 0.101506 0.0151693 +0.0317521 0.0794454 -0.0197442 +-0.0577724 0.0796775 -0.0200459 +-0.0461631 0.0335506 -0.0117706 +-0.0827169 0.105982 0.0279083 +-0.0922534 0.122854 0.0424865 +0.0128317 0.0712714 0.0536973 +-0.0126798 0.126321 -0.00380105 +-0.00116162 0.0980337 0.0521962 +-0.0814909 0.0788596 0.028943 +-0.0501013 0.15611 -0.00554414 +0.00939521 0.0609325 -0.0302492 +-0.030101 0.160758 -0.0141091 +-0.031497 0.117989 0.0308563 +0.0231755 0.0916964 -0.0230758 +0.0434109 0.0987186 0.0151565 +-0.0514982 0.108428 0.0386132 +-0.0644896 0.0833289 0.0440861 +-0.0238622 0.101613 -0.0238665 +0.04258 0.0422624 0.0239479 +0.0354547 0.103863 -0.00997386 +0.0217345 0.0994968 0.0456553 +-0.0743457 0.168929 -0.0264214 +0.01504 0.0343531 -0.00213727 +0.00148487 0.0399885 0.0464307 +0.0273636 0.0699427 0.0430425 +-0.0548013 0.086928 -0.0216118 +-0.0729344 0.0901459 0.0411907 +0.0305961 0.110839 -0.00946183 +-0.0721093 0.0846859 0.0405598 +-0.067036 0.180898 -0.0568882 +0.0496382 0.068363 0.00147832 +-0.0149904 0.165173 -0.0188028 +-0.0928971 0.117368 0.0123132 +-0.000378579 0.101174 0.0451223 +-0.00167056 0.0392225 0.0339103 +0.0308479 0.0567691 -0.0158074 +0.00821609 0.0823703 -0.0328688 +0.0179771 0.0393777 0.0432522 +-0.0917891 0.141969 0.0171701 +0.0284614 0.0398271 -0.00325429 +-0.0273719 0.0335777 -0.022929 +-0.0799767 0.138308 -0.00390962 +0.0224205 0.0519815 -0.0241272 +-0.0206006 0.0393656 -0.0285093 +-0.075081 0.147222 -0.0118498 +-0.0748806 0.0992858 -0.0126164 +0.0126717 0.127043 -0.00291981 +-0.0321779 0.0474216 0.0442941 +0.0248435 0.0822524 0.0483141 +-0.087169 0.0964235 0.0255876 +-0.00114332 0.0356309 -0.0159104 +-0.0674627 0.138295 0.0446438 +-0.0656974 0.169193 -0.0361564 +-0.065794 0.155512 0.00862557 +0.0346025 0.0754478 0.0394941 +-0.0145323 0.043279 0.0510718 +-0.0739879 0.139879 -0.00672352 +-0.0921938 0.132347 0.0162256 +-0.077508 0.174998 -0.0490226 +-0.0161182 0.180144 -0.0199393 +0.0442692 0.0973579 0.00816486 +-0.0885535 0.112746 0.0331115 +-0.0527601 0.0447727 0.0186838 +-0.0301237 0.12585 0.013192 +-0.0359512 0.151053 -0.00163407 +-0.0579079 0.121934 -0.00872095 +-0.0709562 0.158172 -0.0439179 +-0.00996463 0.114432 -0.0172214 +-0.0308542 0.0986541 -0.0229751 +-0.0199407 0.0381449 0.0130842 +-0.0439068 0.129921 0.011069 +0.0290675 0.120111 0.00471365 +-0.0203588 0.175699 -0.0155519 +0.0542673 0.0491964 0.0212031 +-0.0348545 0.0986254 -0.0227182 +0.0413986 0.0830578 -0.00877387 +-0.0554939 0.0477978 0.0398952 +-0.0760774 0.166574 -0.0390172 +0.0438486 0.0846749 0.0261721 +0.0021495 0.0388151 -0.00319944 +0.04114 0.104231 0.00317036 +0.0165359 0.0912212 -0.0265781 +-0.0518469 0.0545626 0.0286406 +-0.0568589 0.0562507 0.00563881 +-0.0383911 0.127983 0.00280515 +-0.0857603 0.130763 -0.000714461 +-0.0173678 0.0389666 0.0345056 +-0.0266954 0.125077 0.00273937 +0.0143393 0.0349605 0.0410018 +0.0132369 0.0709965 -0.0314873 +-0.0317622 0.0338243 0.0127586 +-0.0767072 0.0724697 0.0281768 +-0.0694593 0.040787 -0.000292884 +0.013984 0.129601 0.0176686 +-0.00527436 0.124342 -0.0098488 +-0.0749724 0.149924 -0.0268701 +-0.0188238 0.0855077 -0.0385626 +-0.0577531 0.141417 -0.00374252 +-0.0506075 0.0335251 -0.00346549 +-0.0105008 0.103039 0.0436514 +-0.062498 0.0847471 0.0443617 +-0.0166725 0.0495705 -0.0306349 +-0.0368813 0.108512 -0.0198737 +0.0510305 0.0733741 0.0168194 +-0.0275083 0.112548 0.0360564 +-0.0636421 0.0627085 -0.00368166 +0.0411669 0.104244 0.0141607 +-0.00149973 0.0965741 0.0536819 +-0.0288186 0.0862428 0.0454609 +-0.0526183 0.0343668 0.0293685 +-0.0601235 0.15512 0.0251504 +-0.0378644 0.111663 -0.0181901 +0.0344602 0.0726275 -0.0157808 +-0.0144826 0.0530653 0.0501401 +-0.0700881 0.131265 0.0496481 +-0.0878883 0.0914318 0.00546674 +-0.0415923 0.0491549 -0.0111971 +0.0234288 0.0618809 0.0460892 +-0.0630663 0.151874 -0.00782908 +-0.0866506 0.128453 0.0480393 +-0.0781275 0.152854 0.000107941 +-0.0106285 0.174518 -0.0286758 +-0.0596993 0.0345337 0.0416145 +-0.0579832 0.0466328 -0.00336399 +-0.0265008 0.124041 -0.00116405 +-0.0254725 0.0400777 0.0541415 +-0.0178664 0.12824 0.013233 +-0.0206926 0.0385034 0.0288434 +-0.0534934 0.0747559 0.0420439 +-0.0652623 0.158339 -0.0115587 +-0.0767656 0.152802 -0.00889022 +0.0245199 0.0520168 0.0405174 +0.0264125 0.0450979 -0.0096842 +-0.012488 0.107228 0.0430572 +-0.078668 0.170753 -0.0430283 +-0.0625286 0.164689 -0.038593 +-0.0241791 0.159685 -0.00173809 +0.00849261 0.092349 0.0531984 +-0.0759472 0.132533 -0.00707033 +-0.0806057 0.0720192 0.00754007 +0.00646347 0.117501 -0.0166002 +-0.0178266 0.0947205 0.0526193 +0.000481761 0.10723 0.0430499 +-0.013526 0.162053 -0.0127433 +-0.0186103 0.042208 -0.0281438 +-0.0252891 0.0336623 -0.0225985 +0.00751041 0.0688465 0.0554032 +0.0252903 0.0675893 -0.0238235 +-0.065902 0.112354 -0.012152 +-0.0476622 0.0620749 -0.0123691 +-0.0940806 0.122789 0.0152778 +-0.0229201 0.115998 -0.0147881 +-0.0344826 0.0519106 0.0380623 +-0.0890068 0.11621 0.0451247 +0.0107555 0.0404168 0.045078 +-0.0894686 0.136415 0.011209 +-0.0757697 0.145819 -0.00688494 +-0.071833 0.152571 -0.043913 +0.0235861 0.0352777 0.0154316 +-0.0926495 0.129588 0.0122381 +-0.0647445 0.0780775 -0.0178137 +-0.00582898 0.0896214 -0.0360418 +0.0559073 0.0721087 0.0082759 +-0.0261702 0.0823861 0.0514348 +-0.0558857 0.0970202 -0.0212239 +-0.0630553 0.148575 -0.0182369 +0.00714931 0.123902 0.0338795 +0.0304322 0.0902625 -0.0195701 +-0.0137593 0.0388335 -0.0101314 +0.0427673 0.0818692 0.0284169 +-0.0651233 0.155698 0.0103085 +-0.0897032 0.113874 0.0229056 +-0.0447211 0.129823 0.00637961 +-0.0575 0.0588269 0.0212602 +0.0104936 0.11823 0.0368787 +0.0202805 0.12337 -0.00295598 +-0.0340138 0.155107 0.00155033 +0.0602047 0.0622908 0.0181797 +-0.0859874 0.153017 0.0132012 +0.0433237 0.0846089 -0.00479162 +-0.0678527 0.0937535 -0.0166708 +0.0608755 0.0651235 0.0141559 +-0.0737739 0.0878479 -0.0153893 +0.0296171 0.11988 0.0191943 +-0.00324005 0.038276 0.0477168 +-0.0806315 0.139432 0.0474021 +0.0455013 0.0583861 0.0319381 +-0.0740734 0.172255 -0.0349568 +0.0224678 0.0975265 0.046211 +-0.0525514 0.0389481 -0.0113995 +0.0281531 0.119463 0.0257844 +-0.0765864 0.155527 -0.0189073 +-0.0289503 0.0931616 -0.025199 +-0.0573663 0.0338673 0.0217593 +0.0396386 0.064502 0.0326274 +0.00539495 0.0433546 -0.0245866 +0.0256558 0.0782254 0.0477034 +0.0162437 0.0764684 -0.0291666 +0.0272037 0.100805 0.0412523 +-0.0316694 0.0357391 0.0272619 +-0.0623836 0.163119 -0.0315939 +0.0275463 0.095549 0.0435012 +0.0393856 0.0475887 -0.00567863 +-0.0394934 0.163848 0.00245451 +0.0242993 0.0928305 -0.0222726 +-0.0271788 0.0358787 -0.0194139 +-0.0734977 0.124615 0.0532793 +-0.0883817 0.123968 0.00128346 +-0.0257849 0.174205 -0.0110873 +-0.0281104 0.163768 -0.0157424 +-0.0662143 0.0386042 0.0318887 +-0.0109132 0.103533 -0.0236899 +-0.0616548 0.140062 -0.00630976 +-0.060057 0.135486 -0.00665791 +0.0434691 0.0624283 0.0290897 +-0.0236196 0.0436733 -0.0286374 +0.043495 0.0610671 0.0301862 +-0.0910584 0.133686 0.0122173 +0.0291029 0.0938741 -0.0193597 +-0.0261534 0.0383869 0.0314189 +0.00850666 0.0896726 0.0548038 +-0.0247527 0.0340557 -0.0209813 +-0.0186132 0.0436215 -0.0279143 +-0.0124858 0.0911558 0.0565265 +0.0053433 0.0524636 -0.0297405 +0.0403239 0.0999619 0.0261672 +-0.0522155 0.149331 0.0183918 +-0.0534968 0.0973516 0.0432358 +-0.0284959 0.10431 0.0415782 +-0.0908913 0.139194 0.0171389 +0.0264487 0.0948748 -0.0204583 +-0.0834511 0.149763 0.0335021 +-0.00425208 0.0941246 -0.0337645 +-0.0337113 0.0652961 -0.0165207 +-0.0405229 0.128682 0.00643622 +0.025364 0.0547555 -0.0216571 +0.0209176 0.124997 0.0245115 +0.0147936 0.104084 -0.0202238 +-0.0510936 0.156101 -0.00485677 +-0.00104637 0.116277 -0.0172455 +-0.0564804 0.0613799 -0.00459099 +-0.0261657 0.11885 -0.0117616 +-0.0612216 0.155927 0.0131437 +-0.0264503 0.181668 -0.00853376 +0.0163083 0.0594423 -0.028212 +-0.0188061 0.081321 -0.0390856 +-0.0660982 0.156586 -0.0534726 +-0.0596936 0.155857 0.0122367 +-0.0656404 0.0608118 0.00501538 +0.00550383 0.0716948 0.0562222 +-0.0473457 0.134062 0.00939848 +0.0233312 0.0436331 0.0404882 +0.0342215 0.0827959 -0.0185003 +0.00407718 0.131556 0.00833758 +-0.0524976 0.0931679 0.0439324 +-0.0206125 0.0553712 0.0467047 +-0.0499367 0.0345722 0.0419808 +-0.0720303 0.169416 -0.0480254 +0.0463102 0.0820482 0.0101764 +0.0239273 0.0383233 0.0327312 +-0.0556472 0.0657358 0.0349277 +0.0082124 0.0879974 -0.0324239 +-0.0483251 0.123967 0.0299918 +-0.00979541 0.0826872 -0.0380854 +-0.0104818 0.0688481 0.0551963 +-0.0738713 0.116445 -0.00712552 +-0.0783268 0.0804305 0.0341941 +-0.0318616 0.0386777 -0.0303614 +-0.0685663 0.0335043 0.000153325 +0.0419445 0.0972272 0.0251571 +-0.0324967 0.0831278 0.0417023 +-0.0385753 0.165326 0.00202421 +-0.0574991 0.105703 0.0407441 +-0.0735089 0.120392 0.0535609 +-0.0194999 0.105809 0.042534 +-0.0918084 0.11461 0.0202058 +0.0373089 0.0604869 0.0345236 +-0.0397982 0.0885212 -0.0227204 +-0.0838603 0.0771078 0.0156983 +-0.0683511 0.16683 -0.0228013 +0.00825384 0.0357096 0.0264477 +-0.0487592 0.0797294 -0.0200154 +-0.067984 0.13847 -0.00792156 +-0.0205709 0.127392 0.00935219 +0.0158596 0.0940217 0.0494261 +-0.00476401 0.100643 0.0463697 +-0.0144795 0.0617481 0.0535104 +-0.0635003 0.0931972 0.0443921 +-0.06148 0.0371866 -0.00855801 +-0.0235696 0.0368882 0.0541538 +-0.00084278 0.129714 0.0251926 +-0.0857238 0.0792489 0.0165033 +-0.00382707 0.0868147 -0.0366286 +-0.0623716 0.0433162 0.04063 +-0.0481783 0.127343 -0.00452632 +0.0258208 0.0577421 -0.0227411 +-0.0464997 0.109825 0.0383354 +-0.0632202 0.150553 -0.0275915 +0.0594014 0.060828 0.00515272 +-0.0379322 0.0359407 -0.029738 +-0.0628566 0.163115 -0.0590591 +0.032875 0.0504741 0.0332188 +-0.0798256 0.114817 -0.00349908 +0.00979876 0.0631089 0.0545118 +-0.00479883 0.0826783 -0.0376925 +-0.0586564 0.152453 0.0326111 +-0.0847868 0.0979024 0.0288114 +-0.0248237 0.0853842 -0.0372699 +-0.00156343 0.13088 0.0191419 +-0.0624949 0.0729745 0.0395167 +-0.0208752 0.105853 -0.0224653 +0.0381305 0.0743398 -0.0117665 +0.00679871 0.128004 -0.00391746 +-0.0769289 0.125211 -0.00745968 +-0.0251918 0.111615 -0.0181703 +-0.0538836 0.0984784 -0.021806 +-0.0535445 0.0444164 -0.0080927 +0.0449223 0.0903552 0.00117592 +0.00748556 0.116867 0.0384917 +0.0479919 0.0426572 0.0134999 +0.0269115 0.116892 -0.00595645 +0.0287509 0.0911639 -0.0204971 +-0.00583539 0.0910195 -0.0356702 +0.0122548 0.126063 0.0299441 +-0.0732964 0.0791377 0.0376894 +-0.0578898 0.108324 -0.0176181 +-0.0316803 0.111369 -0.0179291 +-0.00248889 0.101618 0.0440339 +0.0583601 0.0593964 0.0227402 +-0.0568793 0.105485 -0.0183902 +0.0313941 0.108732 0.0332945 +-0.0104953 0.0801622 0.0580036 +-0.0799858 0.150056 0.000166757 +-0.0448968 0.146123 0.00263093 +-0.0595037 0.0344238 0.0383245 +-0.0836036 0.133464 -0.00169527 +-0.0115063 0.0575113 0.0530742 +-0.0112578 0.037897 0.0501369 +-0.0404967 0.071918 0.0419528 +-0.024201 0.0373653 0.0542269 +-0.063129 0.0366622 0.0429743 +0.0461067 0.069238 0.0238359 +-0.0217169 0.0945664 0.0494448 +0.0519577 0.0621966 0.0293389 +0.0286828 0.072686 0.0432253 +0.0389262 0.103315 -0.00332456 +-0.0908979 0.126784 0.00627265 +-0.0604951 0.097348 0.0432235 +0.00320361 0.0838721 -0.0343861 +-0.0615214 0.155998 0.0173864 +0.0174482 0.090927 -0.0262636 +-0.0428815 0.108469 -0.0193857 +0.0528827 0.0476533 0.00520477 +-0.0692155 0.155426 0.0044718 +-0.0116319 0.126956 0.0271535 +0.0555832 0.0661715 0.0258304 +-0.0669079 0.139705 0.0437201 +0.0208911 0.120687 0.0321527 +-0.0692559 0.157013 -0.00287665 +-0.0642658 0.131126 0.0422113 +-0.00350345 0.108655 0.04343 +0.00595359 0.131311 0.0061803 +-0.0652676 0.179645 -0.0602668 +0.0113097 0.0609536 -0.0296395 +0.0202287 0.0385462 -0.010699 +-0.0528896 0.0556157 0.0124842 +-0.0830831 0.152763 0.0275295 +-0.0929926 0.121477 0.0272936 +-0.0679169 0.115123 -0.00939662 +-0.0715189 0.150138 -0.0417489 +0.0502478 0.0496891 0.0267596 +-0.088826 0.122625 0.00229599 +0.045739 0.0876044 0.00618298 +0.0276204 0.0364605 0.0224657 +0.0550864 0.0576626 -0.000774412 +-0.0601415 0.0397484 0.0187938 +-0.0467117 0.131872 0.0218067 +-0.00211002 0.131247 0.0146415 +0.0400335 0.107013 0.011165 +-0.0875275 0.141918 0.0101858 +-0.0321386 0.0511687 -0.0124242 +-0.05996 0.047085 0.0381143 +-0.0771576 0.158311 -0.0229061 +-0.0910473 0.139231 0.0181913 +0.0586943 0.0552354 0.0191792 +0.0541025 0.0616928 -0.00172111 +0.0193458 0.0347743 -0.00166328 +-0.0785503 0.175004 -0.046006 +0.0361753 0.0767902 0.0382584 +-0.00218115 0.0950603 -0.0327048 +-0.00446475 0.03907 -0.00848801 +-0.0509412 0.0543847 0.0317288 +-0.031974 0.126184 0.0154629 +-0.0517139 0.047497 0.0206563 +0.0390432 0.106963 0.0211652 +-0.0661031 0.169296 -0.0348743 +-0.0461189 0.0353483 0.0438447 +-0.0618314 0.155872 0.0114752 +-0.0414861 0.169687 0.00162271 +-0.0640913 0.154089 -0.00821335 +-0.0474977 0.0776489 0.0433419 +-0.000495324 0.0870356 0.0569136 +0.0572432 0.0508915 0.0131865 +0.0162675 0.0348087 0.0361219 +-0.0561497 0.0697401 0.0384165 +-0.0632023 0.166731 -0.0605917 +-0.0297129 0.0382953 0.00190139 +-0.00511763 0.0345398 -0.0175639 +-0.0614326 0.0342559 0.0293559 +-0.0526737 0.0678526 -0.0129346 +0.0213104 0.092205 -0.0236008 +0.0197097 0.119321 0.0339587 +-0.0214979 0.120818 0.0311972 +0.0121652 0.0940439 -0.0275601 +0.0264769 0.122884 0.00946172 +-0.0236707 0.0536853 -0.0289139 +-0.0413464 0.0470648 -0.0139804 +0.0254796 0.122858 0.0219249 +-0.0924012 0.125564 0.030262 +-0.0879683 0.133795 0.0435491 +-0.0521211 0.0500618 0.0133132 +-0.0655655 0.115703 0.0473772 +-0.0739163 0.0808829 -0.0136046 +-0.0678507 0.166619 -0.0550103 +-0.0116556 0.127143 -0.00273206 +-0.0318682 0.101497 -0.022474 +-0.0710899 0.143489 -0.012899 +-0.0174739 0.0587291 0.0509898 +-0.0238083 0.125586 0.00234805 +-0.0296624 0.0691842 -0.029462 +0.00123889 0.0998292 0.0485145 +-0.0648099 0.0910089 -0.0186372 +-0.0624633 0.170945 -0.051605 +-0.0911968 0.145718 0.0253129 +-0.0208075 0.0827095 -0.0389174 +-0.0156288 0.184043 -0.0262877 +0.0422094 0.0873179 -0.00779978 +0.00273738 0.0943137 -0.0318997 +-0.082233 0.0925905 0.0320729 +-0.0782161 0.110396 0.044452 +-0.0842181 0.153993 0.0196689 +-0.00949468 0.0532459 0.0520833 +-0.0867806 0.115997 0.0469199 +-0.0547757 0.0826557 -0.0215494 +-0.0382309 0.0365042 0.0436563 +0.021227 0.0727783 0.05004 +-0.00441949 0.0338393 -0.022426 +-0.0712771 0.0648585 0.00216525 +-0.0364976 0.111093 0.0360234 +-0.0669244 0.123843 -0.00898539 +-0.0178669 0.0554748 0.0496143 +0.020489 0.0906324 0.0482147 +-0.00549595 0.0605287 0.0555985 +-0.0289733 0.0536405 -0.0223788 +0.0191474 0.0435971 0.0432171 +0.00434602 0.0346139 0.0410512 +-0.0400219 0.111533 -0.0180322 +0.012127 0.0534588 0.0507501 +0.0284176 0.0415874 -0.00471776 +-0.0270737 0.125279 0.00405866 +-0.0221888 0.0348068 0.0442295 +-0.0447592 0.0797381 -0.0197229 +-0.0304968 0.172715 -0.00561384 +-0.0762362 0.0865455 -0.0135615 +0.0197685 0.0371215 -0.00768223 +0.0379293 0.0417908 0.0270611 +-0.0809612 0.0747382 0.0015261 +0.00168043 0.0346784 0.042239 +0.0257721 0.0915784 0.0461947 +-0.0898405 0.133789 0.0312158 +-0.0355388 0.0441134 -0.0275262 +0.00710192 0.0379595 0.027814 +-0.0620019 0.0401372 0.0237075 +0.0429025 0.100097 0.0151567 +-0.00267325 0.0569172 -0.0326724 +-0.0285904 0.110146 -0.0186081 +-0.0762074 0.0906406 -0.013533 +0.0535161 0.0677623 0.0259787 +-0.00262958 0.0466399 -0.0290845 +-0.0839307 0.125043 -0.00388859 +-0.0340047 0.0386047 -0.0302796 +0.0184751 0.082463 0.0515958 +-0.0574796 0.115365 0.0367006 +-0.0420623 0.154724 -0.00848194 +-0.0860758 0.0924352 0.0274562 +-0.0930739 0.122895 0.0382751 +0.051883 0.0734548 0.0112114 +-0.0811474 0.0769537 0.0251701 +-0.0618709 0.0338217 0.0137712 +0.0195119 0.0370935 -0.00868114 +0.00449835 0.0590783 0.0547231 +-0.0645467 0.148975 -0.0280488 +0.0404587 0.0426892 0.0267677 +-0.0712073 0.146616 -0.0240304 +-0.0512571 0.0488673 0.0206327 +-0.00789661 0.098211 -0.0280331 +-0.0821992 0.0980013 0.0318751 +0.0249936 0.037232 0.0266864 +-0.00349731 0.0456721 0.0469862 +0.0464132 0.0472054 -0.00271728 +-0.0659208 0.0390922 0.037189 +-0.0655814 0.167928 -0.031824 +-0.0726143 0.1704 -0.0286759 +-0.032982 0.0423452 0.0495212 +-0.0442602 0.153622 0.00782588 +0.0320708 0.117667 0.00585111 +0.0181014 0.0354956 -0.0136744 +-0.0756189 0.168382 -0.0269354 +-0.0302725 0.114038 -0.0167089 +-0.06455 0.166996 -0.0328772 +-0.0136948 0.125921 0.0278767 +-0.0594946 0.0973472 0.0432255 +-0.0660053 0.138467 -0.00776776 +-0.0538886 0.161243 -0.000916627 +-0.0521229 0.0491646 0.0356345 +-0.0669695 0.167967 -0.0280306 +-0.0692702 0.0635509 0.00193084 +-0.057893 0.109749 -0.0172343 +0.0162169 0.116863 -0.0139359 +-0.0837452 0.0818387 0.0274964 +-0.0188705 0.104448 -0.0228566 +0.017085 0.0604224 0.0492086 +-0.0636469 0.11387 0.0394431 +0.0060852 0.126695 -0.00651247 +-0.0563559 0.0448266 0.0148606 +-0.0534962 0.0959644 0.0436141 +0.0587007 0.0538335 0.0141792 +0.00148321 0.105804 0.0429258 +-0.0696571 0.0662079 0.0262916 +0.0292497 0.0745452 -0.0220465 +-0.0363535 0.0380033 0.0459253 +-0.0388642 0.104209 -0.02036 +0.0363189 0.106784 -0.00482843 +-0.0506381 0.0473796 0.0176699 +0.0415736 0.0738523 0.0301911 +0.00841968 0.0357631 -0.0122614 +-0.0449132 0.130768 0.0151196 +-0.0348253 0.0822923 -0.0236386 +-0.0756565 0.0672218 0.011813 +-0.0840475 0.0856522 0.0284432 +0.0358352 0.11315 0.0115155 +0.0378536 0.10688 -0.000832307 +0.0327708 0.0862789 0.0422215 +-0.0510409 0.034583 0.0365198 +0.0285939 0.108783 0.0362583 +-0.0291219 0.163733 -0.0155493 +-0.0075062 0.071811 0.0576623 +-0.0285902 0.125327 0.00496117 +0.022493 0.120697 0.0309281 +-0.081164 0.0734408 0.004547 +-0.011709 0.0628424 -0.0363307 +-0.0258651 0.101595 -0.0237434 +0.0205831 0.11206 -0.0147671 +0.0444356 0.0931566 0.0191609 +-0.04739 0.113671 -0.0162364 +-0.0489307 0.0334882 -0.00491951 +-0.0129236 0.118879 -0.0139348 +-0.0161652 0.0382063 0.017415 +-0.00495697 0.0978375 0.052341 +-0.0277397 0.0605536 -0.0284245 +-0.00547292 0.0385489 0.021098 +-0.00115741 0.0949656 -0.0326157 +-0.0444374 0.124419 -0.00954541 +-0.0821611 0.0761834 0.00152312 +-0.0144467 0.0348076 0.0441223 +-0.0715687 0.153984 -0.0439053 +-0.00636015 0.130593 0.00877385 +-0.0127796 0.0382227 0.0144711 +0.0370519 0.110502 0.0205344 +-0.0322265 0.0637977 -0.0184499 +-0.0106706 0.054151 -0.0336931 +-0.0455975 0.169625 -0.00241942 +0.0182033 0.0435661 0.0436183 +-0.0718144 0.147892 -0.0304457 +-0.0577521 0.050802 0.00265023 +-0.0586963 0.0588331 0.00348495 +-0.0866227 0.109058 0.0173532 +-0.0383512 0.122877 -0.00994551 +-0.070675 0.0778663 -0.0147995 +-0.0181879 0.174194 -0.0234207 +-0.0587357 0.153161 0.0315118 +-0.0350971 0.16074 -0.013448 +0.00536912 0.049521 -0.0287338 +-0.0474407 0.134003 0.00841493 +-0.0624554 0.1522 -0.0115838 +-0.0760236 0.150016 -0.00789124 +-0.0261434 0.0379494 0.0119939 +-0.068707 0.0613453 0.00749837 +0.0495547 0.0702574 0.0035522 +0.0608929 0.0651253 0.0121512 +0.0417276 0.0683416 0.0285931 +-0.0322652 0.177059 -0.0129859 +-0.027328 0.0951114 -0.0248637 +-0.0207784 0.0714012 -0.0384405 +-0.0483231 0.128062 -0.00327126 +-0.0424968 0.0449805 -0.0163196 +-0.0550216 0.142767 -0.00162505 +-0.0444981 0.112567 0.0357183 +0.039909 0.107011 0.00616363 +0.0103602 0.0524141 -0.0291489 +-0.0621527 0.0372105 -0.00831557 +0.0052003 0.124064 -0.00964829 +0.0584567 0.0701808 0.018095 +0.0154065 0.0880419 -0.0292971 +-0.0675878 0.0672405 -0.0057657 +0.0141143 0.129082 0.00347211 +-0.0769907 0.154191 -0.00889586 +-0.0351753 0.160922 -0.000113952 +-0.0865124 0.0819745 0.0105022 +-0.0802058 0.0759672 -0.0035211 +0.0412042 0.046738 0.0312341 +0.0531089 0.0539671 0.0274209 +-0.0202736 0.0966137 -0.0264451 +-0.021864 0.108885 -0.0213157 +0.0172909 0.0900542 0.0497289 +0.0151151 0.0645034 0.0516546 +-0.00371721 0.100591 0.046739 +-0.0281684 0.117044 -0.0138686 +0.044615 0.0762444 0.0239446 +0.00250222 0.0504849 0.0522926 +-0.0407291 0.0724971 -0.0177035 +-0.076873 0.114866 -0.00505023 +-0.0509699 0.0334609 -0.0108109 +-0.0307494 0.125973 0.00854668 +-0.0842046 0.10344 -0.000635192 +-0.0637785 0.0335481 0.00468656 +0.0573103 0.0709688 0.0191461 +-0.0548852 0.0344475 0.0323271 +-0.0566985 0.0694351 -0.0145553 +0.0116873 0.128578 0.0254498 +-0.0635208 0.0384034 0.0165311 +-0.0193913 0.161115 -0.00536021 +-0.0517184 0.0708739 -0.0153462 +-0.0355107 0.0789772 0.0422885 +-0.0308674 0.0359912 0.0254031 +-0.0496962 0.137023 0.0203775 +-0.000496498 0.0549075 0.0548747 +0.0203519 0.0506032 0.0432764 +-0.00603714 0.0387093 0.0280658 +-0.0424971 0.165251 0.00449932 +-0.088747 0.148763 0.0102254 +0.0140119 0.072675 0.0536492 +-0.0355033 0.109745 0.0370663 +-0.0495176 0.0451863 0.0426306 +0.0161864 0.128058 0.00281004 +-0.0689044 0.110844 -0.0111483 +-0.0648164 0.0412793 0.0318749 +-0.0594946 0.0959853 0.0440949 +-0.0201946 0.0918367 -0.0355405 +-0.00451061 0.0534011 0.0538125 +-0.0256167 0.0422692 -0.0291044 +-0.0366019 0.0472824 -0.0203909 +-0.0714721 0.152551 -0.0449162 +-0.0686495 0.0395764 0.0103048 +-0.0916814 0.147477 0.020141 +0.0344933 0.0646793 0.0392567 +0.0354037 0.0848596 0.0389463 +0.0335837 0.114911 0.0235455 +-0.00948608 0.0488348 0.0496357 +0.0162564 0.0875946 -0.0288434 +-0.0495004 0.0876335 0.045502 +-0.00788756 0.107371 -0.0226705 +0.0279061 0.0479696 -0.0147397 +-0.0593675 0.145365 0.0352791 +-0.0297371 0.179987 -0.0120259 +-0.00152895 0.1273 -0.00507098 +-0.053021 0.0473885 0.0142865 +-0.031661 0.0351392 -0.0196159 +-0.0428508 0.127424 0.0174253 +0.00853656 0.103079 0.0455737 +-0.0428329 0.0928281 -0.0227901 +-0.0533229 0.121583 -0.0104498 +-0.0281276 0.163902 -0.00573037 +0.00550696 0.0647473 0.0560963 +-0.0786632 0.155487 0.0200952 +0.0373574 0.0841251 -0.0157743 +0.00845531 0.04577 0.0469205 +-0.0816426 0.140732 0.045535 +-0.0198636 0.184564 -0.0147357 +-0.0441 0.149758 -0.00480897 +-0.0394895 0.0478295 0.0398724 +-0.0902912 0.136455 0.0152001 +-0.0912584 0.116106 0.0417079 +-0.078373 0.161039 -0.0249642 +-0.0823003 0.143183 0.00115625 +-0.0366712 0.0621691 -0.0130418 +0.0483193 0.0518215 -0.00445791 +-0.0647832 0.179003 -0.0560548 +-0.066692 0.1555 0.0271809 +0.0251524 0.123931 0.0146708 +-0.0729716 0.175028 -0.0520538 +0.0249807 0.0645674 0.0448324 +0.0189844 0.127654 0.0109555 +-0.023546 0.114036 0.0366055 +-0.0166929 0.178668 -0.0190282 +-0.0838411 0.0884243 0.0295799 +0.0340178 0.106064 0.0317678 +0.0172301 0.0834905 -0.0285819 +-0.0836745 0.0939124 0.0306595 +0.00650612 0.0856084 0.0565927 +-0.00650337 0.0633626 0.0562557 +0.00724714 0.123914 -0.00950504 +-0.04049 0.0677003 0.0417506 +-0.083014 0.0816043 0.0289568 +-0.0791181 0.10724 -0.00560787 +-0.0643983 0.155173 -0.0416037 +-0.0194853 0.0382676 0.0257029 +0.017193 0.0407686 0.0438767 +-0.0578741 0.0997697 -0.0193936 +-0.00470039 0.0340249 -0.0188849 +0.009491 0.0923319 0.053062 +-0.0679779 0.0615132 0.00568001 +-0.00851004 0.0960786 -0.0317903 +0.0222567 0.0734747 -0.02675 +0.0396829 0.102719 -0.00275708 +0.0333394 0.0519958 0.0339463 +-0.0317958 0.166782 -0.0057687 +-0.0851069 0.104842 0.00238218 +0.040355 0.0712163 0.0319238 +-0.0796414 0.0719293 0.00453596 +-0.00871509 0.0670095 -0.035665 +-0.04676 0.0797358 -0.0197068 +0.00759602 0.120603 -0.0139518 +-0.00757253 0.0384534 0.015324 +0.027396 0.0902329 0.0450202 +-0.0837001 0.104608 0.0275279 +-0.0648437 0.159826 -0.0567739 +-0.0182921 0.113707 -0.0184295 +-0.0318101 0.0499111 0.0410759 +0.0042017 0.130577 0.0226921 +-0.0882785 0.102304 0.00940329 +-0.0669196 0.157864 -0.00782765 +-0.0574974 0.104327 0.0414929 +-0.028183 0.0499752 0.0445203 +0.0437475 0.087439 -0.00380588 +0.047365 0.0735855 0.0109418 +-0.0355275 0.04785 0.0396404 +-0.00564979 0.0511569 -0.0315211 +-0.0622081 0.163133 -0.0355907 +-0.0126796 0.0555759 -0.033924 +-0.0434133 0.12436 -0.00948612 +0.0325363 0.0605817 0.0399114 +0.00828387 0.0859903 0.0560092 +-0.0377619 0.0480619 -0.0149351 +-0.0152064 0.0377587 0.0513804 +0.0337034 0.0740969 0.0399489 +0.0386678 0.106943 0.0231645 +-0.0568902 0.10122 -0.0192994 +-0.0629975 0.158364 -0.0415982 +0.0174963 0.116768 0.0361173 +-0.018574 0.174216 -0.0164984 +-0.0916005 0.147489 0.0211447 +0.0351839 0.113522 0.00409669 +-0.0642224 0.175708 -0.0529566 +-0.0646189 0.0691309 -0.0109873 +-0.0744709 0.159641 -0.0299365 +-0.0810037 0.0777776 0.0280061 +-0.0468539 0.0397424 -0.0132276 +-0.0387576 0.152152 0.00343994 +-0.0355301 0.0350253 0.0446914 +-0.0252945 0.179999 -0.0179968 +-0.0594833 0.0440844 0.0256893 +-0.0262483 0.175689 -0.00998917 +-0.0357 0.0344414 0.0311095 +-0.0348452 0.0957896 -0.0233484 +-0.0694619 0.0701676 0.0334316 +-0.0704025 0.156596 -0.000355665 +0.0197946 0.0872171 -0.0264236 +-0.00225576 0.119004 -0.0141489 +0.0447595 0.0819096 0.000199099 +-0.0414725 0.16704 -0.0108149 +0.0383695 0.0533606 -0.00654853 +0.0436976 0.0763605 0.0261605 +-0.059412 0.0342492 0.0297869 +-0.0105538 0.0962042 -0.0319333 +0.0354985 0.0483762 0.03122 +-0.0232213 0.183101 -0.0108227 +-0.0454832 0.0704956 0.0415155 +-0.0818632 0.143391 0.0428465 +-0.00588211 0.0384235 0.0193174 +-0.0715611 0.065876 0.0226562 +-0.0557658 0.0561367 -0.00241411 +-0.007704 0.0613485 -0.0352024 +-0.050582 0.13546 0.000440434 +-0.0239591 0.0958294 0.044594 +-0.0344217 0.156595 0.00275895 +-0.0721769 0.146332 -0.0246714 +-0.00172768 0.0683482 -0.0343533 +0.0465137 0.0736858 0.00606841 +-0.0379081 0.0345108 0.0393807 +-0.0536272 0.0632225 -0.00927695 +0.0216001 0.0346735 0.00635285 +-0.00546011 0.130518 0.00622904 +0.025022 0.0994981 0.0433749 +-0.059626 0.14292 -0.00334389 +-0.0662647 0.160967 -0.0574681 +-0.086688 0.0937529 0.026595 +-0.0292509 0.122699 0.0223824 +-0.020881 0.0609703 0.0467992 +-0.0727056 0.0704556 0.030746 +-0.0670342 0.154632 -0.0510962 +-0.0818617 0.117704 -0.00327392 +-0.00930377 0.0384012 0.0113924 +-0.0294534 0.0382504 0.0532249 +-0.0428028 0.034428 0.0296237 +0.034591 0.113857 0.0224952 +0.0260945 0.0981604 0.0431638 +0.0157288 0.0740195 0.0526622 +0.00528348 0.0654438 -0.0329345 +0.0342272 0.113045 -0.000582475 +0.0177023 0.127344 0.0204737 +-0.00349601 0.0619414 0.0556852 +-0.0633856 0.13531 0.0381918 +-0.0187732 0.0742782 -0.038946 +-0.0714922 0.124606 0.0531293 +-0.0387588 0.0432047 -0.0253505 +-0.0377685 0.112865 -0.0174473 +-0.0811078 0.0831466 0.0326628 +0.0121734 0.0347014 0.0407838 +-0.0423463 0.0344667 0.0367209 +-0.0247884 0.0905387 0.0498003 +-0.0589097 0.111154 -0.0162513 +-0.0119878 0.0389387 -0.0117395 +-0.0746688 0.0730125 -0.00771761 +-0.0636783 0.0344406 0.016873 +-0.0718387 0.063614 0.0140147 +-0.0537353 0.0753205 -0.0183524 +0.0399868 0.0793585 0.0332409 +0.0342696 0.0686799 0.038964 +0.0283038 0.121367 0.00870899 +0.020694 0.101208 -0.0211426 +-0.0607079 0.149875 -0.000940868 +-0.0663226 0.0771733 0.0404118 +-0.0856352 0.151298 0.0280417 +0.00450086 0.0533884 0.0535142 +0.0193556 0.0370965 -0.0106758 +-0.073245 0.152646 -0.0348949 +-0.0311279 0.168264 -0.00654632 +-0.0314769 0.122323 0.024544 +-0.00965298 0.0383614 0.0149817 +0.0322912 0.117174 0.00450048 +-0.0303956 0.0833549 -0.0325649 +-0.0305081 0.109824 0.0377476 +0.060267 0.0581373 0.011162 +-0.0782363 0.119072 0.0512696 +-0.0819743 0.130956 -0.00393996 +0.0125568 0.129953 0.0057397 +-0.0750314 0.165158 -0.038026 +-0.0842614 0.0857549 -0.00354776 +-0.0194949 0.122198 0.0303074 +-0.0885869 0.0914877 0.00746285 +0.0183032 0.0622432 -0.0278633 +-0.0188389 0.0383463 0.00224079 +0.0169223 0.0354899 -0.0154522 +-0.0510859 0.154625 -0.00472421 +-0.04134 0.171235 -0.00891614 +-0.00271064 0.0641639 -0.0348647 +-0.0404957 0.119327 0.0301663 +0.0161104 0.038261 0.0437952 +-0.0788559 0.0706244 0.0187647 +-0.0565382 0.0387829 -0.00997998 +0.00406092 0.0347375 0.0390843 +-0.052431 0.0503969 0.0246465 +-0.0548238 0.136818 -0.00273484 +-0.0168361 0.163394 -0.0165332 +0.0085002 0.0589241 0.0531764 +-0.00349833 0.104479 0.0440938 +0.041165 0.0675922 -0.00677134 +-0.0766837 0.0941158 0.0377884 +-0.0715005 0.108276 0.0374406 +-0.0514917 0.154976 0.0111 +-0.0766573 0.0758638 -0.0078194 +-0.0708734 0.116483 -0.00801313 +-0.0584915 0.0333664 -0.00308936 +-0.0132404 0.0420117 0.0507817 +0.0504568 0.0627892 -0.00292241 +0.0181009 0.0617863 0.0489038 +-0.0686053 0.155434 -0.0518073 +-0.0866142 0.111799 0.023338 +-0.0087012 0.0613261 -0.0351009 +-0.0667075 0.179209 -0.0538653 +0.0133269 0.036855 0.044466 +-0.0308424 0.0930072 -0.0244625 +-0.0526579 0.118327 0.034303 +-0.0802651 0.0940224 0.034298 +-0.0895241 0.094286 0.0154262 +-0.0580951 0.0448084 0.0137644 +0.0187472 0.0369987 -0.01368 +-0.0174935 0.0786826 0.056671 +-0.026682 0.0779832 0.0478067 +0.0449566 0.0931917 0.0141646 +-0.0598355 0.0968573 -0.0194316 +-0.015743 0.0388551 0.0331436 +0.045657 0.07639 0.00319799 +0.00221136 0.0782941 -0.0352071 +-0.0725589 0.0360747 0.00146649 +-0.0641358 0.117113 0.0460384 +-0.0709488 0.0833216 0.0408543 +0.0230126 0.0366914 0.0285839 +0.0164832 0.101772 0.0464774 +-0.0114886 0.10724 0.0431864 +-0.0748949 0.0968349 0.0387401 +-0.0428468 0.0368545 0.044028 +-0.0121243 0.183164 -0.0282842 +-0.0110799 0.0973863 0.0517395 +-0.0283441 0.0346627 0.0430398 +-0.0591236 0.0454581 0.0276809 +0.0359903 0.0834983 0.0380665 +-0.0894731 0.112826 0.0381953 +-0.0633619 0.165109 -0.0324564 +-0.0893245 0.139298 0.0361742 +-0.0113718 0.177173 -0.0236196 +0.0314957 0.0386039 0.0249642 +-0.0153586 0.171251 -0.0171482 +-0.0501632 0.165541 -0.000963216 +-0.0125979 0.0362885 -0.0258846 +-0.0109041 0.121705 -0.010941 +-0.01134 0.181374 -0.0292688 +-0.0636417 0.067527 -0.00924444 +-0.0645561 0.151545 -0.0345673 +0.0234128 0.0685823 0.0460905 +-0.0204536 0.184888 -0.0139868 +-0.0362035 0.16829 0.000195359 +-0.0423655 0.0354607 0.0428683 +0.029434 0.0414849 -0.00426139 +-0.0548859 0.0335879 0.0154264 +0.0301337 0.0958138 -0.0174156 +-0.0231819 0.174173 -0.0207431 +0.0495183 0.0596792 0.0306871 +-0.0615314 0.169388 -0.0555899 +-0.0645149 0.156191 0.0192193 +-0.0808163 0.150056 0.00117383 +-0.0203106 0.127423 0.0152774 +-0.048501 0.0946267 0.0446158 +-0.0621404 0.0458224 0.0356845 +0.014817 0.0713159 0.0530708 +-0.0482359 0.0600875 0.0359237 +0.0583839 0.0607371 0.00317993 +0.0532979 0.0476993 0.0202039 +-0.00334167 0.13115 0.0113211 +-0.0451105 0.146112 0.00345863 +-0.0728436 0.0965116 -0.0147387 +-0.00290701 0.128667 -0.00250924 +-0.0175351 0.0472943 0.0498404 +-0.0710465 0.156278 0.000878407 +0.0130461 0.106823 -0.0191157 +-0.0241467 0.169732 -0.0193183 +0.0184844 0.092024 0.0477707 +-0.0849646 0.0925759 -0.00355765 +-0.0135115 0.0617879 0.0541775 +0.0358003 0.0371828 0.0161878 +-0.0563756 0.0338236 0.0220041 +-0.0344987 0.119335 0.0301753 +-0.0207895 0.0363821 -0.0186131 +0.0366896 0.0394563 0.0234361 +0.0454465 0.0903989 0.00417224 +-0.0686026 0.0339552 0.0087048 +-0.0248008 0.0797877 -0.0377608 +-0.0253831 0.0645504 -0.0324979 +-0.0924079 0.114699 0.0153245 +0.0404169 0.104204 0.0201615 +-0.0864551 0.137921 0.0433346 +0.0453383 0.0861836 0.0191712 +-0.0550359 0.12552 0.0379729 +0.0499773 0.0719552 0.0208312 +-0.0878453 0.10502 0.0133698 +0.0226563 0.0416586 -0.00875234 +0.00847112 0.0503629 0.0509458 +0.0193029 0.12103 0.032512 +-0.0288694 0.102979 -0.023086 +-0.0655006 0.155906 0.0116223 +-0.0865291 0.125714 0.0480303 +-0.0762092 0.103511 0.0356214 +0.027039 0.0433782 0.0352623 +-0.00878391 0.0340179 -0.0196776 +0.01688 0.104029 -0.0201606 +-0.0779922 0.155321 0.011561 +0.012978 0.0975651 -0.0232996 +-0.0570356 0.142438 0.0315884 +0.00678439 0.0392286 0.0320303 +-0.0187316 0.184448 -0.0230478 +-0.05583 0.0898375 -0.0220234 +-0.0624118 0.168239 -0.0611966 +-0.019552 0.0381879 0.0203532 +-0.0619388 0.0647772 0.0309092 +-0.0929984 0.129612 0.0152364 +0.0241882 0.0633761 -0.0240832 +-0.0154901 0.11097 -0.019533 +0.0335254 0.101204 -0.0131717 +0.0440036 0.0411539 0.00525252 +0.0443474 0.05051 -0.00579969 +-0.00564997 0.0526431 -0.0322774 +0.024909 0.124002 0.00889289 +-0.0551719 0.0344352 0.0357625 +-0.00149801 0.0828985 0.0574954 +-0.0649207 0.122383 -0.00889091 +-0.0371067 0.163706 -0.0138205 +-0.013511 0.0673225 0.0538556 +-0.0664425 0.121454 0.0513831 +-0.0749127 0.151363 0.0363064 +-0.0786131 0.166659 -0.0369473 +0.0259941 0.0889184 0.046498 +-0.0508607 0.133588 0.0291236 +-0.0624206 0.150641 -0.0155752 +-0.0345377 0.0353482 -0.0311793 +-0.0926334 0.130971 0.0152338 +0.00420379 0.0852404 -0.0337772 +0.0493319 0.0575419 -0.00502247 +0.0210858 0.0848756 0.0499424 +-0.0209282 0.0711316 0.0521839 +-0.0556334 0.121157 -0.00996616 +-0.0578782 0.0955404 -0.0210377 +-0.0636177 0.149382 -0.0259273 +-0.023437 0.0753613 0.0517266 +-0.0424368 0.033567 0.00359466 +-0.0366861 0.0651313 -0.0144389 +0.00275029 0.0392893 0.0311503 +-0.0858603 0.137915 0.0441653 +0.00249981 0.0938632 0.054785 +-0.0405815 0.125646 -0.00686289 +0.00652265 0.0633208 0.0557678 +-0.0736187 0.0665006 0.01992 +0.0178849 0.106917 -0.0172488 +-0.0404999 0.16823 0.00286674 +-0.0578818 0.101192 -0.0190391 +0.0415111 0.0596706 0.0303495 +0.0445386 0.0917351 0.000179816 +0.0404099 0.0926692 0.0304567 +-0.0715386 0.177351 -0.0469381 +-0.00955325 0.129382 0.0220461 +-0.0304508 0.11875 -0.0116176 +-0.0553453 0.138992 -0.00307013 +0.0373215 0.0444316 0.0300039 +-0.0439866 0.0342955 -0.0250034 +0.0438502 0.081834 0.0262681 +0.0105117 0.057471 0.0526043 +-0.0609073 0.0423237 0.0152297 +-0.0566933 0.0478983 -0.00338525 +-0.0882052 0.0955366 0.00643448 +-0.0697305 0.146842 -0.0262196 +-0.0654573 0.131176 0.0439868 +-0.0332792 0.168261 -0.00439757 +0.0262829 0.0520004 0.03955 +-0.0246803 0.0386712 -0.0158919 +-0.0243119 0.0382419 0.00485642 +-0.0650689 0.0416148 -0.00522845 +-0.0224969 0.105778 0.0423492 +-0.0675666 0.163787 -0.0559757 +-0.0625249 0.0642497 0.029495 +-0.066705 0.170483 -0.0379595 +-0.0387912 0.0855771 -0.0218281 +-0.0362227 0.121033 0.0288309 +-0.0351413 0.166693 -0.0148789 +0.0484731 0.0728694 0.00986875 +-0.0715958 0.035386 0.00909438 +-0.0654475 0.0414866 0.0340095 +-0.0897915 0.135018 0.00821888 +-0.0256856 0.161028 -0.00218154 +-0.0294591 0.0367076 -0.0187628 +-0.0318602 0.0341892 0.0214236 +-0.0741619 0.0781636 -0.0115723 +-0.0759684 0.138187 -0.00615578 +-0.0746432 0.067744 0.0203901 +-0.0481968 0.058714 0.0359259 +-0.0809888 0.100705 0.031995 +0.0223647 0.0795488 0.0499944 +-0.0164996 0.0587643 0.0515064 +-0.0843239 0.0775269 0.0169616 +-0.0474174 0.157905 0.00867917 +0.0256365 0.0450396 -0.0116814 +-0.0560862 0.153109 -0.0014946 +-0.0364777 0.0491722 0.0391199 +-0.0353775 0.172711 -0.013245 +0.0345426 0.0361041 0.0132537 +-0.0476575 0.0606291 -0.0121142 +0.0517359 0.0693876 0.00244776 +-0.0895642 0.139283 0.0271809 +-0.0554895 0.087587 0.0448409 +-0.00460242 0.0419996 -0.0255341 +-0.0747436 0.0846695 0.0389578 +-0.0522959 0.0518057 0.0276471 +0.0344259 0.0713949 0.0392126 +-0.0858246 0.111645 0.00429163 +7.90085e-05 0.131159 0.00541676 +-0.0876151 0.1105 0.015342 +-0.0308705 0.0385373 -0.0301935 +-0.0174841 0.088353 0.056296 +-0.0717036 0.179379 -0.0498901 +-0.0872579 0.113355 0.0275168 +-0.0132522 0.180136 -0.0286131 +0.0147067 0.111012 -0.0176211 +0.0100468 0.0698695 0.0549195 +-0.00549411 0.130838 0.0134037 +-0.0444864 0.070528 0.0418968 +-0.0694946 0.0902043 0.0422251 +-0.0125029 0.0673483 0.0540527 +-0.0889341 0.0928773 0.0104474 +-0.049902 0.0335302 0.00572664 +0.0224871 0.0436168 0.0410219 +-0.0391731 0.163682 -0.0125377 +-0.0389872 0.0336658 0.00601497 +0.0423783 0.0676875 -0.00279832 +-0.0314483 0.177007 -0.0139273 +0.0365023 0.0700019 0.0369139 +-0.0817843 0.113273 -0.0014411 +-0.0155011 0.0786732 0.0567092 +-0.0616004 0.115786 -0.012288 +0.0336937 0.0994802 0.0365924 +-0.0819199 0.0775142 -0.000486403 +-0.0620032 0.154899 0.00420466 +-0.0689571 0.134062 -0.00839151 +0.0341993 0.115326 0.00949444 +-0.0853268 0.127125 0.0496018 +-0.0075399 0.0430305 0.0487452 +-0.000964681 0.0992981 -0.0251507 +-0.0896495 0.146064 0.0111487 +0.0457169 0.0792126 0.021174 +-0.0677903 0.180834 -0.0585489 +-0.0525855 0.0528134 0.0122839 +0.045458 0.0847917 0.019171 +-0.0620511 0.164652 -0.0545872 +-0.0012817 0.0411143 0.047028 +-0.0620444 0.166711 -0.0606187 +0.0416044 0.0774454 -0.0068035 +-0.0180891 0.0568831 0.0497969 +0.0289502 0.0888845 0.043761 +-0.0361509 0.0471597 -0.0213258 +0.0209931 0.0505428 0.042434 +-0.081698 0.0939818 0.0329068 +-0.0701548 0.148741 -0.0366493 +-0.0726057 0.158224 -0.0359121 +0.0452801 0.0777562 0.00119407 +0.0034868 0.107186 0.0422902 +-0.0603898 0.116109 -0.0126519 +-0.0799294 0.154987 0.0226092 +-0.0412543 0.0342017 0.0283816 +-0.073067 0.0692219 0.0282366 +-0.0232836 0.0382816 -0.000419572 +-0.0843726 0.0952582 -0.00357113 +-0.0871856 0.0923586 0.0257303 +0.0415318 0.09261 0.0284783 +-0.0528539 0.1113 -0.0177773 +-0.0653767 0.0770838 0.0407622 +0.0608603 0.0609709 0.0131614 +0.0163938 0.128844 0.0100049 +-0.028759 0.0386585 -0.0166912 +-0.0688752 0.11651 -0.00852528 +-0.00266028 0.0525834 -0.0313625 +0.0395925 0.0979794 0.0293107 +-0.063517 0.0417383 0.0266777 +-0.0206145 0.038142 0.0147556 +-0.0746919 0.0745094 -0.0088781 +-0.0730235 0.16103 -0.0369405 +-0.0511023 0.141628 0.018382 +0.026686 0.0963684 -0.0200186 +0.00049039 0.0952019 0.0544773 +-0.0374215 0.0466159 -0.0218044 +-0.0396639 0.0592228 -0.0116772 +0.0589085 0.0593684 0.0217913 +-0.069935 0.128232 -0.00913858 +-0.0154583 0.128246 0.0199229 +-0.082956 0.0762572 0.0165263 +-0.0698527 0.139727 0.0465118 +-0.0793995 0.0962934 -0.0095136 +0.029447 0.119051 0.00204245 +-0.0406195 0.0505975 -0.0111291 +-0.0337259 0.125903 0.000119567 +-0.00361865 0.109419 -0.0218821 +-0.0324923 0.0845615 0.0419149 +-0.0304819 0.0903593 0.0440392 +-0.0289421 0.0848695 0.0456392 +-0.067993 0.172429 -0.0412978 +-0.0699656 0.167828 -0.0233999 +-0.0633908 0.0664235 0.0326881 +-0.0328103 0.178226 -0.00982944 +-0.0144938 0.0897854 0.0566872 +-0.00301248 0.0391855 -0.0120497 +-0.0467348 0.10982 -0.0182008 +-0.0347751 0.123588 -0.00668109 +-0.081672 0.0966878 0.0327979 +0.0208066 0.08618 0.0495337 +-0.0294922 0.102919 0.0420695 +-0.0514977 0.0917694 0.0441515 +-0.0561584 0.13394 0.0346041 +0.0587961 0.055231 0.00916964 +0.0239769 0.0672243 0.0451455 +-0.0590987 0.135299 0.0356206 +-0.0833215 0.153324 0.00972396 +-0.0775565 0.148654 -0.00488618 +0.0134356 0.129163 0.0217505 +0.00242681 0.0392303 -0.00913048 +-0.00111738 0.0369593 -0.0152505 +-0.0884159 0.102321 0.0103913 +0.0452046 0.0684536 0.0248447 +-0.0107692 0.1278 -0.0014358 +-0.067702 0.169446 -0.0560134 +-0.0645991 0.162478 -0.0199783 +-0.0384905 0.0591295 0.0404813 +-0.0133897 0.0383025 0.0215062 +-0.0335039 0.113859 0.0341437 +0.00725148 0.0739904 -0.0339985 +-0.0197912 0.0347004 -0.0276305 +-0.0364291 0.0383909 -0.00870817 +-0.0382525 0.154358 -0.00883541 +-0.0576615 0.0645392 -0.00788705 +0.0271486 0.0677873 -0.0226945 +-0.0484929 0.0776741 0.0437591 +-0.0538207 0.0913026 -0.0221948 +-0.0414756 0.102877 0.0407886 +-0.0194769 0.0384097 -0.0016118 +0.0409764 0.0725373 0.0310711 +-0.046711 0.0723683 -0.0164352 +-0.0169229 0.0385492 -0.0161043 +0.0274461 0.0888981 0.0450769 +0.0384486 0.0446185 0.0300797 +-0.0498739 0.120141 -0.01301 +-0.0147995 0.0382136 0.0194957 +-0.034222 0.0422724 0.0479221 +-0.00554376 0.0388664 -0.0141367 +-0.00771915 0.0642161 -0.0356843 +0.0380609 0.108343 0.0221716 +-0.0496329 0.05762 -0.010324 +-0.0640324 0.0336604 0.00811729 +0.0288939 0.0349903 0.0075309 +-0.0369254 0.170672 -0.0129456 +0.0567415 0.0605855 0.00115011 +-0.026353 0.0382316 0.0044532 +-0.088166 0.0963498 0.023753 +-0.0332851 0.0368458 -0.0306141 +-0.0138558 0.0387296 -0.0044727 +0.0597512 0.0650182 0.00715554 +-0.0267551 0.0740245 -0.0360482 +0.0214915 0.0369736 0.0352586 +-0.0515738 0.0559395 0.0296214 +0.00622241 0.123988 -0.00957575 +0.0558148 0.0493476 0.0171957 +-0.0766567 0.112144 0.0469767 +0.0408877 0.0928069 -0.00817715 +-0.0862272 0.0886081 0.000477626 +-0.0341682 0.0723955 -0.0204945 +0.0468003 0.0745424 0.0107517 +-0.00983206 0.0896484 -0.0366649 +-0.00782261 0.0985178 0.051315 +-0.070543 0.17193 -0.0350862 +0.0371254 0.0869172 -0.0157926 +-0.059432 0.152725 0.0327387 +-0.0644942 0.149793 0.0375095 +-0.02966 0.0875784 -0.0315907 +0.0234483 0.0350084 0.0101439 +-0.0672661 0.155709 0.00954294 +0.0249549 0.0915796 0.0467751 +-0.0750729 0.0675817 0.0186826 +-0.065557 0.158804 -0.0559152 +-0.0869809 0.112371 0.0426661 +-0.0388924 0.0336117 -0.0270987 +-0.0925871 0.117342 0.0103086 +-0.0285134 0.0559644 0.0364164 +-0.0592485 0.148248 0.0355123 +-0.0386245 0.0472623 -0.0172994 +0.0417415 0.0676611 -0.00475281 +0.017067 0.127696 0.00312982 +-0.00768714 0.116771 -0.0157299 +-0.0210692 0.0667823 0.0496379 +0.0306718 0.0605569 0.0407187 +-0.086202 0.0805924 0.0105044 +0.0248868 0.0727438 0.0465386 +-0.0226479 0.182963 -0.0190305 +-0.064868 0.0953298 -0.0181139 +-0.0212331 0.0553385 0.0459146 +-0.0900228 0.148451 0.0254546 +-0.0659345 0.109414 0.0377967 +-0.0156357 0.0466082 -0.0291798 +-0.0783295 0.108958 0.0384425 +-0.0353519 0.169773 -0.000327923 +-0.0576724 0.155657 0.012957 +0.0299243 0.0902598 0.0434097 +-0.0938789 0.125503 0.0152603 +0.00849738 0.0910108 0.0540495 +-0.0924729 0.117499 0.0403021 +-0.0538856 0.101336 -0.0209374 +0.0230068 0.125355 0.00960117 +-0.0753773 0.0887668 0.039456 +-0.0164714 0.0348128 0.0436847 +-0.0124833 0.108618 0.0427908 +0.00650022 0.0937602 0.0531051 +-0.0254901 0.101602 0.0435889 +-0.0681644 0.132655 0.0471068 +0.0116725 0.130674 0.0125466 +-0.0658455 0.0693268 0.0349111 +0.0131057 0.0346676 0.0247536 +0.0111453 0.0752893 0.0548169 +-0.0414315 0.120058 -0.0129928 +-0.0667828 0.0837809 -0.018353 +-0.0558768 0.105489 -0.0184971 +-0.0646849 0.0705888 -0.0125799 +0.00250861 0.0634123 0.0567384 +-0.0102337 0.0987343 -0.0266102 +-0.0475686 0.0376232 -0.0123457 +0.0326729 0.0388984 0.0249367 +-0.0754158 0.14997 -0.0218646 +0.0149498 0.0475024 0.0442108 +-0.0897923 0.144692 0.013139 +-0.065193 0.0597221 0.0116014 +-0.0777759 0.113375 -0.00398806 +-0.0457101 0.131722 0.0089192 +-0.0575663 0.0481384 0.0346641 +-0.0838122 0.128533 0.0508937 +-0.0104939 0.0933018 -0.0349679 +0.0252085 0.0464911 -0.0166174 +-0.0789879 0.13894 -0.00474105 +-0.0475728 0.0656919 0.0379498 +0.0110822 0.113195 -0.0179885 +-0.0649225 0.170267 -0.0430968 +-0.00871405 0.112847 -0.0195489 +0.0452857 0.0889846 0.0161633 +-0.0171038 0.128182 0.00771491 +-0.0114919 0.0911558 0.0564108 +-0.0672347 0.158081 -0.05503 +-0.0375789 0.0335576 -0.0249215 +-0.028354 0.0521667 -0.0233844 +-0.0687469 0.179151 -0.0517127 +-0.0635972 0.164728 -0.0295802 +-0.00849416 0.0661021 0.0557034 +0.0018938 0.131459 0.00752669 +-0.0104875 0.10724 0.0431922 +0.0420847 0.0764929 0.0291356 +-0.0164676 0.125926 0.0254562 +-0.0666931 0.162075 -0.0149837 +0.000392133 0.0405199 -0.0247969 +-0.062597 0.0740287 0.040345 +-0.038486 0.115285 0.0333239 +-0.0134767 0.0545379 0.0508338 +-0.0379773 0.128134 0.0117903 +0.0282176 0.0746072 -0.022898 +-0.00949856 0.0898059 0.0569552 +-0.0633588 0.166271 -0.0375898 +-0.088608 0.0874693 0.0094764 +-0.00658802 0.126776 -0.00645935 +0.00550371 0.0533623 0.0533002 +0.0568364 0.0723477 0.016027 +-0.0746813 0.077485 -0.0103851 +0.0599778 0.0622697 0.0191849 +-0.0834343 0.143353 0.0415913 +0.0461466 0.0773319 0.0190905 +-0.0643928 0.0366139 0.0414145 +0.017105 0.0913787 0.0494605 +0.0113838 0.0463423 -0.025328 +0.00150906 0.0925101 0.0553138 +-0.0905552 0.131061 0.0372264 +0.0271939 0.0479684 -0.0167032 +0.0118641 0.130407 0.00833975 +-0.0534963 0.0413918 0.0463882 +-0.00348783 0.0548509 0.0542207 +-0.0241218 0.165279 -0.0170232 +0.0526044 0.0736805 0.0129696 +0.00493694 0.0358587 0.023833 +-0.0308996 0.0862326 -0.0295626 +-0.0749566 0.152744 -0.0158977 +0.022407 0.0700249 0.0481925 +-0.0644326 0.152123 0.0354487 +-0.083145 0.0762813 0.00952219 +-0.0066641 0.130277 0.00578337 +-0.0503124 0.0487527 0.0166746 +-0.0857975 0.0926505 0.000473688 +0.0319954 0.0554568 -0.0137989 +-0.0325248 0.0371997 0.032926 +-0.0378236 0.0914714 -0.0236656 +0.0107752 0.0603237 0.0523688 +-0.0709378 0.0995366 0.0403447 +0.00229927 0.0641027 -0.0339638 +0.0301658 0.0510827 -0.0137422 +-0.0152122 0.0387061 -0.0065833 +0.0328168 0.0373031 0.0209449 +-0.0564976 0.0959787 0.0438593 +-0.0530296 0.137293 -0.00118635 +-0.0114929 0.0745162 0.0566704 +0.0339687 0.0768049 0.0403387 +0.0229251 0.0476731 0.039919 +0.0153286 0.0594649 -0.0285327 +-0.0650165 0.0356472 0.0166692 +-0.0872319 0.104968 0.0093836 +0.0317565 0.0752189 -0.019756 +0.0174897 0.107108 0.0415537 +0.00650555 0.0716952 0.056225 +0.0214733 0.0808843 0.0504673 +-0.0157973 0.0382489 0.019257 +-0.073889 0.119392 -0.00790358 +-0.0588895 0.0969269 -0.0201624 +-0.0614701 0.166956 -0.0604533 +-0.0411287 0.160673 -0.0112161 +-0.0558134 0.0883826 -0.0218608 +-0.0206962 0.0385843 -0.00942784 +0.0401892 0.0759203 -0.00879733 +0.0191194 0.0349494 -0.00374623 +-0.0414976 0.113906 0.0346806 +-0.00581815 0.0854694 -0.0375201 +-0.0859756 0.0805547 0.00750576 +-0.0833395 0.103378 -0.00262342 +-0.0446335 0.126046 -0.00723965 +0.0260088 0.0910229 -0.0223512 +0.034944 0.10998 0.0278542 +-0.00248857 0.0703789 0.0573235 +-0.0102702 0.0385128 0.00564525 +-0.0283572 0.0578046 -0.0244014 +-0.0210295 0.0958616 0.0473023 +-0.0141375 0.0347096 0.0460356 +-0.0244241 0.178665 -0.0108375 +0.00749812 0.109597 0.0408218 +-0.0356643 0.0606925 -0.0124069 +-0.0638002 0.166551 -0.0354938 +-0.0862312 0.0940245 0.00140199 +-0.0365789 0.0337187 0.00826156 +0.0240933 0.0685753 0.045325 +-0.0891661 0.132396 0.0419315 +-0.0177346 0.065722 -0.0374816 +-0.0224613 0.12203 0.0284859 +-0.0509119 0.055753 0.0316394 +-0.0340805 0.0680941 -0.0175876 +-0.0166639 0.0364717 -0.017882 +0.0347021 0.0768104 0.0396564 +0.0213412 0.0565052 -0.0267347 +-0.0707159 0.179287 -0.0569572 +-0.0748092 0.0790936 0.0363823 +-0.0577944 0.0460393 0.0120187 +-0.0302932 0.123607 -0.00301843 +0.00749105 0.050377 0.0513506 +-0.0641553 0.162388 -0.0586672 +-0.0197076 0.059653 0.0484949 +0.0376477 0.110588 0.00928033 +-0.0151896 0.0391404 0.0514631 +0.020848 0.0400652 -0.0117024 +-0.0208303 0.119929 -0.0109428 +0.0157129 0.124796 -0.00448994 +-0.00658665 0.0388228 -0.0143041 +0.0254417 0.121647 0.000551492 +0.0535789 0.0658041 0.000119664 +0.0473148 0.0518659 -0.00495567 +0.0299175 0.0524736 -0.0157475 +-0.0183959 0.112492 -0.0191613 +-0.0893828 0.0916068 0.0204288 +-0.0614858 0.175719 -0.0606762 +-0.0901396 0.13244 0.0372222 +-0.0238257 0.0881589 -0.0366228 +-0.0218791 0.0383442 -0.00388387 +0.00124143 0.0390154 -0.00356473 +-0.0669805 0.1589 -0.00929727 +0.0483233 0.0547304 -0.00526262 +-0.0444857 0.0661533 0.0401374 +-0.0514919 0.076238 0.0430598 +-0.0301912 0.0664057 -0.0274649 +-0.0408343 0.0942887 -0.0229156 +-0.00749956 0.121159 -0.0124082 +-0.061476 0.158429 -0.028587 +-0.0675029 0.109729 0.0377486 +-0.0697083 0.1638 -0.0499695 +-0.062151 0.152195 -0.0205783 +0.0342924 0.0619556 0.0389482 \ No newline at end of file diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny_ran.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny_ran.pts new file mode 100644 index 000000000000..91de67a41378 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/bunny_ran.pts @@ -0,0 +1,35948 @@ +150 +-0.0164722 0.0382453 0.0209318 +-0.0641407 0.171114 -0.0471776 +0.023086 0.119339 0.0317977 +0.00506037 0.0347021 0.0393176 +-0.066143 0.143958 0.0413147 +-0.0445017 0.163753 0.00542301 +-0.0689729 0.181022 -0.0546459 +-0.0931085 0.131006 0.0192314 +0.000506827 0.0489752 0.0512269 +-0.0615935 0.160001 -0.0315914 +-0.0245032 0.0960169 0.0442753 +-0.0258992 0.0891655 0.049535 +-0.000499367 0.0456802 0.0470389 +-0.0171808 0.0654583 0.0528522 +0.00116916 0.131228 0.00582139 +-0.0356565 0.122935 -0.00798984 +-0.0701892 0.156285 0.021569 +-0.0173569 0.038443 0.0259817 +-0.0716413 0.0763478 -0.0132577 +0.0528545 0.0568172 0.0288563 +-0.0325067 0.0732308 0.0407775 +-0.0760686 0.150008 -0.00987485 +-0.030561 0.0774145 0.0410957 +-0.0833901 0.0762729 0.00451303 +-0.000492618 0.0925258 0.0556594 +-0.0358778 0.159506 0.00240863 +0.0115111 0.114076 0.0384616 +-0.0877889 0.0887187 0.00347532 +-0.0261028 0.115949 -0.0147279 +-0.0682913 0.165205 -0.0539869 +-0.0225512 0.0933694 -0.0331106 +-0.0538783 0.0999149 -0.0214389 +0.0435587 0.0959151 0.0211557 +-0.0167991 0.0388632 -0.0107644 +-0.0569142 0.0548839 0.00364185 +0.00749229 0.091015 0.0542708 +-0.065316 0.0625169 -0.002419 +-0.00749647 0.119689 0.0375376 +-0.0772165 0.0934484 -0.0125951 +-0.029008 0.0478606 -0.0250513 +0.00934189 0.0553527 -0.0303034 +-0.0578677 0.104042 -0.0186102 +0.0405495 0.0999198 -0.00379356 +-0.0894314 0.137929 0.0371779 +0.00710731 0.126603 -0.00643182 +0.058913 0.070492 0.0108657 +-0.0922485 0.120133 0.0292903 +0.0395325 0.105566 0.0221621 +-0.0376065 0.0365426 0.0444186 +-0.0550158 0.128128 -0.00563226 +-0.0561672 0.0336533 0.0186553 +0.0123436 0.0351165 0.0296251 +-0.0899184 0.131005 0.0413145 +0.0065365 0.100373 0.0469448 +-0.0502879 0.133796 0.0278403 +-0.0716838 0.0351362 0.00880221 +0.0579126 0.0523842 0.0101848 +-0.0639212 0.154791 0.00385831 +-0.0654795 0.0384216 -0.00684663 +-0.0615513 0.0624603 0.0259481 +-0.0368013 0.0842007 -0.0223672 +0.0522757 0.0574291 -0.0035048 +-0.0764972 0.123179 0.0527664 +0.0302998 0.0694384 -0.019812 +-0.0334269 0.0486094 0.0413091 +-0.00450651 0.0689184 0.0565193 +0.0425976 0.0887597 -0.00680771 +-0.0707351 0.156208 0.0228366 +0.0548799 0.0492406 0.0202107 +-0.00962948 0.168316 -0.023669 +-0.0313363 0.11605 -0.0148117 +-0.0225249 0.125571 0.0012278 +0.0122871 0.124953 0.0313975 +-0.0343047 0.125361 0.0205265 +-0.038499 0.0747376 0.0420783 +0.0292349 0.0759579 -0.0220376 +-0.0255784 0.0477093 -0.0263526 +-0.0750958 0.151313 -0.0258791 +0.0057743 0.0347896 0.0375885 +-0.0926124 0.120126 0.0272917 +-0.0366664 0.175138 -0.00407486 +-0.00549337 0.088417 0.0570387 +-0.0711473 0.17507 -0.0540267 +-0.0776118 0.0739521 0.0284675 +0.0376746 0.104662 0.0282621 +-0.0634881 0.121359 0.0469409 +0.0233296 0.0564006 -0.0254415 +-0.0399361 0.123254 0.0259269 +-0.000577398 0.0341134 -0.0181551 +-0.000496894 0.0520342 0.0541515 +-0.0701023 0.177167 -0.0478719 +-0.0641167 0.143926 0.0389732 +-0.0679369 0.165269 -0.0197719 +-0.0681029 0.138305 0.0455026 +-0.00280426 0.0384802 0.0198949 +-0.0628273 0.0924874 -0.0189476 +0.0084946 0.0869435 0.0558386 +0.00910286 0.0348066 0.0183719 +-0.0195983 0.126231 0.0213862 +-0.0584949 0.143878 0.0330085 +-0.0218343 0.0553077 0.0451067 +-0.0645685 0.147457 -0.0230581 +0.0426227 0.0691122 -0.00279622 +-0.035813 0.0842739 -0.0225525 +-0.0819685 0.0791215 0.0284136 +0.0328852 0.113087 -0.00384394 +-0.0677123 0.168615 -0.0283035 +-0.0556635 0.140996 0.0299986 +-0.0764958 0.131682 0.0526442 +0.0421796 0.0832522 0.0293553 +-0.0848653 0.0855483 0.0264341 +-0.0329445 0.121338 0.0269922 +-0.0320197 0.058187 -0.0133973 +-0.0322785 0.0421631 -0.0296986 +0.0401757 0.067497 -0.00878165 +-0.0904989 0.148452 0.0245146 +-0.00947974 0.0561444 0.0530127 +-0.0310333 0.0383692 -0.000250742 +-0.0780713 0.150403 0.0367551 +-0.0872126 0.146051 0.00824907 +-0.0735722 0.148626 -0.0268487 +-0.00548676 0.116904 0.0394711 +-0.0599006 0.132533 0.037981 +-0.093479 0.129659 0.0212406 +-0.0639063 0.120904 -0.00875525 +-0.028606 0.0356961 0.0524615 +-0.0652024 0.153998 -0.041972 +-0.0262134 0.0765572 0.0473962 +-0.0774721 0.155387 0.0234212 +-0.0628707 0.0345025 0.0358026 +0.0434964 0.0555926 0.0322399 +-0.0618022 0.142496 0.0370478 +-0.0638273 0.0910291 -0.0188305 +-0.0636286 0.0672101 0.0337087 +-0.0842132 0.092522 0.0298256 +0.0185123 0.115397 0.0365584 +-0.0666269 0.131204 0.0458398 +-0.0653475 0.165775 -0.0260007 +-0.0182573 0.181629 -0.0177335 +-0.0142757 0.185348 -0.0257883 +0.0485082 0.0624718 0.0300814 +-0.0254927 0.0974122 0.0441083 +-0.0446561 0.0349999 0.0427486 +-0.0616719 0.0410515 0.0160296 +-0.0179307 0.0931593 -0.0348763 +-0.00828798 0.130102 0.00662088 +-0.0525878 0.149334 0.020403 +-0.0102534 0.128943 0.0232512 +0.0445378 0.0959706 0.0101622 +-0.0465291 0.0335268 -0.00814027 +0.00437534 0.131145 0.0198749 +-0.0394369 0.03436 0.0321562 +-0.0107155 0.127812 0.0260097 +-0.0273383 0.17123 -0.0098418 +-0.0037118 0.0655569 -0.0347446 +-0.0630689 0.150547 -0.0265942 +-0.0776846 0.16386 -0.0329461 +-0.0728796 0.151218 -0.0388899 +0.038172 0.0967289 0.0325586 +-0.058907 0.0983413 -0.0195805 +-0.00549542 0.0965711 0.0536823 +0.00650609 0.0503877 0.0517539 +-0.0847722 0.113367 0.0459387 +0.0309512 0.0822193 0.0430727 +-0.0159859 0.0984773 0.0464357 +0.0361586 0.0781359 0.0382445 +0.0417308 0.0422749 0.000248643 +-0.0631435 0.175042 -0.061564 +-0.0251041 0.0945178 -0.0276305 +0.018776 0.122594 -0.0061273 +0.0173125 0.0726566 0.0514253 +-0.0377229 0.0724783 -0.0174913 +0.0173872 0.0432828 -0.0228623 +0.0416262 0.0912615 0.0286616 +-0.050567 0.0474222 -0.00850865 +-0.0150865 0.162585 -0.00969001 +0.0143357 0.0566765 -0.0290221 +-0.0309078 0.065095 -0.0224325 +0.045522 0.0805737 0.00219452 +-0.0725374 0.138625 0.0483183 +-0.0476365 0.150675 0.00992423 +-0.0799103 0.125126 -0.00560703 +-0.051025 0.159915 -0.00453945 +0.00139766 0.0419298 -0.0244976 +-0.0664219 0.0352675 0.015055 +-0.00832508 0.130422 0.0138058 +-0.00366678 0.0481589 -0.0301707 +-0.0738566 0.161044 -0.0339379 +0.0319703 0.0475137 0.0318758 +0.0188215 0.126955 0.00377584 +-0.0309617 0.044825 -0.0281993 +0.0456484 0.0875951 0.00518134 +-0.0521074 0.0583062 0.0285239 +-0.0171825 0.0382402 0.011747 +-0.0692976 0.0615474 0.00912978 +-0.0232044 0.175652 -0.0207635 +-0.0406662 0.0592305 -0.0118049 +0.0572429 0.0508905 0.0121849 +-0.0488285 0.0416917 0.0446681 +0.0455301 0.0677752 0.0254231 +-0.0846369 0.110251 0.00429821 +-0.0754652 0.163196 -0.0162299 +-0.0247271 0.0564997 0.0408849 +-0.0639975 0.0601011 0.00610183 +-0.0741599 0.155538 0.00126713 +-0.0728899 0.122329 -0.00823917 +0.010861 0.0360066 0.0447493 +0.0150176 0.0355797 0.04239 +-0.0437155 0.0710509 -0.0175901 +0.0271589 0.093209 -0.0206672 +-0.00592646 0.12418 0.0336126 +-0.0810295 0.0895599 -0.00769505 +-0.0920663 0.121362 0.00826874 +-0.0862277 0.0832671 0.00749085 +-0.085371 0.127983 -0.0026626 +-0.081815 0.108922 0.02836 +-0.0491537 0.135503 0.0034228 +0.00885847 0.0887054 -0.0320419 +-0.0673146 0.0446682 0.00602001 +0.0152697 0.128852 0.0195703 +0.0231834 0.0422122 0.040252 +-0.0286261 0.0463451 -0.0269667 +0.0449154 0.0763231 0.00019353 +-0.0387296 0.0739178 -0.0177449 +0.0212191 0.0819428 -0.0266321 +-0.00126307 0.039726 0.0470556 +-0.0261021 0.0379463 0.0228342 +-0.0448562 0.101383 -0.0214692 +-0.0014827 0.0390261 -0.00225591 +-0.0648948 0.103911 -0.0165942 +-0.0624902 0.155293 -0.0145941 +0.000436968 0.130385 0.0227651 +-0.0219738 0.059501 0.0451263 +-0.0502789 0.129408 -0.00267456 +-0.0216757 0.065257 0.0474751 +-0.0621482 0.16155 -0.0395978 +0.0427418 0.0916392 0.0261768 +0.00967962 0.127274 0.0289934 +-0.0728707 0.168003 -0.0450202 +-0.0305611 0.179398 -0.00755573 +0.0341402 0.0902832 0.0407178 +-0.0491119 0.0361611 0.0459929 +0.0392087 0.0739776 0.0338431 +-0.0897017 0.151503 0.0171224 +0.0407967 0.105643 0.0101649 +-0.023633 0.0478399 -0.0272396 +-0.0504958 0.0862332 0.0455716 +-0.0451092 0.153606 0.00834539 +-0.0616087 0.146812 0.0373554 +0.0280342 0.0346822 0.009507 +0.0565861 0.0685555 0.00335277 +-0.027568 0.0674298 0.0392602 +-0.0926576 0.117463 0.0373027 +-0.0334278 0.124984 0.0208436 +-0.0602518 0.034678 0.0430709 +-0.0574989 0.107052 0.0398301 +-0.091226 0.128161 0.00727002 +0.0400022 0.0913669 0.0315547 +-0.0656743 0.138242 0.0419702 +-0.0852141 0.0805923 0.0204766 +-0.0444957 0.111173 0.0370595 +-0.044489 0.0803636 0.042222 +-0.00648998 0.122405 0.0354776 +0.00602348 0.111527 -0.0200414 +-0.0860119 0.132159 0.00027761 +0.0521231 0.0734583 0.0172399 +-0.0155403 0.0446621 0.0510487 +-0.0397503 0.0768521 -0.0186787 +-0.0682155 0.0787029 0.0404793 +-0.0813927 0.0758934 0.0225084 +-0.010188 0.0386565 4.14997e-05 +-0.00149609 0.0912323 -0.0347548 +-0.0294974 0.111128 0.0367729 +-0.0503924 0.0501648 0.0186468 +-0.0104698 0.070299 0.0557764 +0.0327323 0.0809002 0.0421262 +-0.0328911 0.122131 -0.00712262 +-0.0861948 0.1005 0.0258994 +-0.0319282 0.178722 -0.00808101 +-0.050675 0.140101 0.0024044 +-0.0346788 0.0636729 -0.0139354 +-0.00820144 0.0344928 -0.0181278 +-0.0830162 0.0939316 0.0314035 +0.0438286 0.0611702 -0.00330591 +-0.0162799 0.127645 0.0211086 +-0.0615233 0.0354132 0.043881 +-0.0755937 0.0809959 -0.0116148 +-0.0632393 0.166259 -0.0385929 +-0.0156738 0.0511142 -0.0317767 +0.000751147 0.0339678 -0.0215355 +-0.0534027 0.0336932 0.022744 +0.0102837 0.0348658 -0.0091814 +-0.0285082 0.0874866 -0.0336017 +-0.0849712 0.111906 0.0292041 +-0.0732162 0.169408 -0.0460252 +-0.00746424 0.110009 0.0430329 +-0.0587154 0.0723411 -0.016523 +-0.00333145 0.0968513 -0.0305901 +0.0385608 0.0713011 0.0346329 +-0.0463734 0.133247 0.0130756 +-0.0474986 0.104275 0.0408376 +-0.0714849 0.147284 -0.0260827 +-0.0404433 0.0461446 -0.0193164 +0.000709469 0.125628 -0.00726116 +0.028516 0.117882 -0.00302906 +-0.00249354 0.0746702 0.0587588 +0.0463101 0.0806468 0.00818141 +-0.0245515 0.114015 0.0358596 +-0.0396488 0.0563195 -0.0111963 +-0.0236961 0.0607746 0.0425604 +-0.0336359 0.0548461 -0.0105101 +-0.0585033 0.0337545 0.0163089 +0.0212208 0.126407 0.0160623 +-0.0729862 0.15207 0.0354642 +-0.085378 0.128494 0.0496125 +0.00429457 0.122356 -0.0118056 +0.0203517 0.0672611 0.0487139 +-0.0452845 0.0395903 -0.0182935 +-0.0211124 0.182965 -0.0210132 +-0.0295465 0.0819132 0.0441437 +-0.0777488 0.07493 0.029356 +0.00824435 0.0966482 -0.0263491 +-0.0588066 0.0854157 -0.0208208 +-0.0718999 0.113582 -0.00821597 +-0.0893735 0.0901981 0.0104595 +0.032603 0.0835706 0.0419526 +-0.0230608 0.0594124 0.0433799 +0.0284544 0.121423 0.0116324 +-0.0832785 0.12444 0.0504652 +-0.0396241 0.0520021 -0.0108773 +0.00721225 0.0837864 -0.0330068 +-0.046713 0.131987 0.00556897 +-0.0663702 0.157999 -0.00906779 +-0.067736 0.0779793 -0.0166569 +-0.0508692 0.102779 -0.0209206 +-0.0828958 0.151378 0.00422572 +-0.0346622 0.118788 -0.0116368 +-0.0726425 0.0716156 -0.00744076 +-0.059725 0.0469427 0.0326718 +-0.0468444 0.033579 -0.0045851 +-0.0384976 0.100064 0.0415702 +-0.050989 0.121022 -0.0119137 +-0.0624226 0.152205 -0.0125757 +-0.085741 0.151793 0.0266482 +-0.0826468 0.144713 0.0407672 +-0.0685649 0.0705046 -0.00966184 +-0.0734033 0.167233 -0.0217479 +-0.0455099 0.155064 0.0077969 +0.022652 0.0862116 0.0486888 +0.043364 0.0547822 -0.00644446 +-0.054457 0.14621 0.0274041 +-0.0639777 0.155958 0.0237716 +-0.0882347 0.0861347 0.011472 +0.00545294 0.1216 -0.0129959 +-0.0334673 0.174268 -0.00177832 +-0.00402179 0.129762 0.0240423 +-0.0185051 0.0711438 0.0540217 +-0.0872329 0.150111 0.00920897 +-0.090033 0.147105 0.0269347 +-0.0141936 0.0419832 0.0511586 +-0.0335873 0.154463 -0.00838872 +0.0441357 0.083266 -0.000805736 +-0.0528842 0.102762 -0.0205636 +-0.0125091 0.0815143 0.0575917 +0.0197435 0.125962 0.0226458 +-0.067993 0.0619274 0.01978 +-0.0216083 0.039391 -0.0287125 +-0.0767116 0.165247 -0.022942 +-0.0861936 0.111308 0.0401352 +-0.0238165 0.0854111 -0.0376407 +-0.0442161 0.123225 0.0243959 +-0.0175443 0.0460366 0.0510389 +-0.0272334 0.0902723 -0.0326005 +-0.0459359 0.168402 -0.00594095 +0.0355423 0.0512597 0.0315836 +0.0451079 0.0636949 -0.00183531 +-0.0368834 0.125578 -0.00482073 +0.0196258 0.0457587 -0.0217227 +-0.00773224 0.109619 -0.0221011 +-0.0514957 0.0876341 0.0455102 +-0.00269376 0.0613003 -0.0344696 +-0.0512049 0.147808 0.0143958 +0.0266901 0.106496 -0.0148024 +0.0383861 0.0476151 -0.00591592 +-0.0136895 0.0952904 -0.0330103 +0.0368491 0.0767795 0.0374896 +-0.029592 0.0522946 -0.0203629 +0.0482309 0.0500295 -0.00369862 +0.0381363 0.0794306 0.0358549 +-0.0677271 0.155796 -0.00229118 +0.026043 0.0392404 0.0305576 +0.0208388 0.126564 0.0173475 +0.0159735 0.0448127 0.0438765 +-0.0681757 0.118633 0.0523539 +-0.065068 0.136793 0.0410949 +-0.0454458 0.168254 0.00168996 +-0.0715222 0.142818 0.0455702 +-0.0604912 0.112522 0.03629 +-0.00074702 0.0712329 -0.0350931 +-0.0894331 0.150114 0.0121902 +-0.0185746 0.0381525 0.0151621 +0.0291213 0.0348096 0.00960912 +0.0404448 0.0985503 0.0271661 +0.0134712 0.0936014 0.0511282 +-0.021496 0.103017 0.0435858 +0.00918856 0.0342345 -0.00132638 +-0.0508332 0.0956285 -0.0221275 +-0.0613646 0.0394268 0.0439671 +0.0264379 0.0968548 0.0436578 +-0.0646669 0.0405364 0.0387423 +0.0125029 0.0475354 0.045933 +0.0412949 0.104257 0.00416372 +-0.00222052 0.117102 -0.0161156 +-0.00995662 0.169734 -0.0198047 +0.0200755 0.0399795 -0.0157069 +-0.0839165 0.110514 0.0395089 +-0.0546435 0.116042 -0.0146857 +0.0268767 0.0854059 -0.022529 +-0.0543926 0.0337363 0.0224962 +-0.049781 0.0841032 -0.0216622 +0.0431463 0.100109 0.00616795 +0.0393814 0.0780345 0.0341058 +-0.0162612 0.17862 -0.0260128 +-0.0335093 0.0676035 0.0406399 +-0.0176483 0.0352702 -0.0188352 +-0.031463 0.0519033 0.0373773 +-0.0803572 0.0803552 0.0319871 +-0.0320868 0.159267 -0.0129293 +0.0132853 0.0589897 0.0507165 +-0.0103631 0.180289 -0.0277342 +-0.0144925 0.0559441 0.0511232 +-0.0246444 0.0381166 0.0247786 +0.0170669 0.0871276 -0.028336 +0.00372554 0.105196 -0.0213905 +-0.0777857 0.156925 -0.0179137 +0.0578227 0.0710073 0.0178627 +-0.0582482 0.0336534 0.0128901 +-0.0520861 0.0545712 0.0266312 +0.0269849 0.113053 -0.00983991 +0.0429421 0.0467386 0.030224 +0.00548112 0.11414 0.0405028 +0.0607975 0.0637336 0.0101416 +-0.0895137 0.135181 0.0391853 +-0.0822803 0.139383 0.0462108 +0.00350363 0.0883757 0.0563643 +-0.0599112 0.109712 -0.0163845 +-0.0699244 0.107994 -0.0118147 +-0.073438 0.145781 -0.0138542 +-0.0702694 0.156361 0.0186365 +0.0365208 0.0713424 0.036933 +-0.0764811 0.141399 0.0471717 +-0.0338378 0.0943788 -0.02372 +-0.0185768 0.055451 0.0489119 +-0.0294962 0.107041 0.0398129 +0.0351663 0.0783387 -0.0157415 +-0.0823976 0.095314 0.0321564 +0.0458052 0.08902 0.00916777 +0.00466954 0.0341296 0.0180802 +0.012258 0.0751733 -0.0308354 +-0.0176564 0.0480544 -0.0295902 +-0.0487658 0.0811872 -0.020682 +-0.0375125 0.045091 0.0407522 +0.00960807 0.0375632 0.0322947 +0.0522688 0.0462249 0.00921199 +-0.0452834 0.0395877 -0.019291 +-0.0396931 0.126183 0.0200311 +-0.0903381 0.144712 0.0141544 +-0.0430213 0.0450576 -0.0153284 +-0.0539191 0.129665 -0.00510771 +-0.0384876 0.108386 0.0375357 +-0.0496388 0.0605583 -0.0113235 +-0.034501 0.115223 0.0328885 +-0.0540284 0.131061 -0.00500164 +-0.0147028 0.0389017 0.0333119 +-0.0207376 0.0641563 -0.0358205 +0.00590682 0.131658 0.0132863 +-0.0819436 0.154696 0.0145801 +0.0526661 0.0660937 -0.000184776 +-0.0526201 0.14007 0.0244025 +-0.0752504 0.177839 -0.0529463 +-0.0574955 0.0946379 0.0447737 +0.0456129 0.0904097 0.00518194 +-0.0282629 0.122524 0.022734 +-0.0680338 0.142566 0.0438693 +-0.0643033 0.0426016 0.0312522 +-0.0314971 0.102929 0.041974 +-0.00589664 0.0980966 0.0519993 +-0.0542782 0.132533 0.0338047 +-0.0911122 0.11473 0.0343167 +-0.0493972 0.140141 0.00739907 +-0.0577664 0.0485104 0.00767417 +-0.0629684 0.139576 0.0370615 +-0.0122087 0.128137 0.0240139 +0.00116984 0.129366 -0.00128907 +-0.039496 0.0634667 0.0415276 +-0.0427066 0.0696149 -0.0170299 +-0.0721201 0.149786 -0.0402916 +-0.0637423 0.168365 -0.0426884 +-0.0228169 0.0383283 0.0285633 +-0.0894925 0.143336 0.0131803 +-0.0408822 0.128708 0.0107294 +-0.043783 0.147719 0.00491206 +0.00912223 0.0833108 0.0554277 +-0.0543042 0.0335497 0.00301212 +-0.0544171 0.0333785 -0.00775516 +0.0295237 0.0727272 0.042682 +-0.0504982 0.112495 0.0358796 +-0.0240218 0.119915 -0.0108978 +-0.0535232 0.0556038 0.0117195 +-0.0480175 0.133707 0.00490199 +0.00583381 0.129313 0.0261699 +-0.0405566 0.149165 -0.00293165 +-0.0286765 0.0690744 -0.0314836 +0.0453693 0.0693828 0.00245115 +0.0581659 0.056561 0.00517446 +0.0192888 0.0651078 -0.0282476 +-0.0228892 0.0739252 0.0512281 +-0.0217183 0.113234 -0.017904 +0.0365187 0.0526805 0.0315096 +0.0490482 0.0539975 0.0303486 +0.0175085 0.114012 0.0373101 +-0.0328107 0.126843 0.0122027 +-0.0687814 0.0336983 0.00353162 +0.0220892 0.0906332 -0.0239505 +-0.0460528 0.122513 0.026245 +0.0381409 0.109688 0.00657231 +0.0368421 0.0742334 -0.0127504 +-0.0657975 0.0340784 0.0127357 +-0.0706216 0.146831 -0.0255714 +-0.0468292 0.091298 -0.0217206 +-0.0914681 0.144718 0.0171554 +-0.0624908 0.0343254 0.0238098 +0.0543739 0.0477987 0.0161989 +-0.0195403 0.1757 -0.0161256 +0.0224671 0.0343921 0.00678503 +-0.0654707 0.155271 0.00728456 +-0.0897135 0.12265 0.00431103 +-0.0501651 0.0361307 0.0461721 +-0.0901888 0.139114 0.0151891 +-0.0726107 0.156829 -0.0349095 +-0.0334964 0.0718545 0.0411869 +0.0106165 0.0644536 0.0539383 +0.0274263 0.0491525 0.0376576 +-0.0157908 0.169796 -0.0160148 +-0.0608326 0.17151 -0.0610901 +0.0136156 0.126814 -0.00267762 +0.0293325 0.0535401 0.0386956 +-0.0652579 0.153012 -0.0402459 +0.0264019 0.036087 0.0225582 +0.0101281 0.105858 -0.0202342 +-0.0674046 0.0833115 0.0429955 +-0.0312435 0.0538841 -0.0143722 +0.0424267 0.0441756 -0.00158684 +-0.0305089 0.0760274 0.0408429 +-0.0849899 0.127963 -0.0030064 +-0.0223249 0.0386602 -0.0135496 +0.0216012 0.112963 -0.0137495 +-0.0224297 0.0552774 0.0442986 +-0.093152 0.121537 0.0362834 +-0.0384463 0.166779 0.00239389 +0.0317419 0.0667553 -0.0187125 +-0.0127135 0.100022 -0.0239701 +0.0204112 0.0371925 -0.00568428 +0.0383001 0.0969495 -0.00880451 +-0.0500528 0.150184 -0.0037815 +-0.0578783 0.106898 -0.0179862 +0.0485378 0.0682762 0.00156381 +-0.0708965 0.0341323 0.00629169 +-0.0871174 0.110466 0.0103621 +-0.0235739 0.0944939 0.0470656 +-0.0164815 0.0515035 0.0485835 +0.0325428 0.0380502 1.57112e-05 +0.0385774 0.0888011 0.0348199 +-0.0628692 0.0445185 0.0382675 +-0.0572856 0.125533 0.0399888 +-0.0780066 0.0940671 0.0362827 +-0.0361012 0.160724 -0.0132118 +0.0200495 0.124902 -0.000599563 +0.0101263 0.107276 -0.0197522 +0.0224877 0.0961643 0.0466342 +-0.077715 0.0852782 -0.0115916 +-0.0164955 0.105778 0.0423459 +-0.0725318 0.101313 0.038599 +-0.0663565 0.0783826 0.0411592 +-0.0644378 0.17995 -0.0588828 +-0.0645973 0.171184 -0.0458828 +0.0111199 0.129735 0.0223368 +-0.018333 0.172741 -0.0161594 +-0.0864925 0.10492 0.00639597 +-0.0144943 0.0500942 0.0487331 +-0.0855601 0.095177 0.0282718 +1.67787e-05 0.0386604 0.0239291 +0.0109499 0.0344084 0.00259617 +-0.0270041 0.168274 -0.00938266 +-0.0378811 0.107099 -0.0200653 +0.060304 0.0664655 0.0101406 +-0.0478845 0.108472 -0.0188663 +0.0181085 0.0591163 0.0489014 +-0.0260899 0.0522789 0.0395517 +0.0049437 0.0984176 -0.0242128 +-0.0623314 0.0357831 0.0433788 +0.0110403 0.0725847 0.0546235 +-0.0864956 0.084691 0.0204775 +-0.00849993 0.0787667 0.0579153 +-0.0260008 0.0382709 0.000860974 +-0.06937 0.145758 -0.0234859 +-0.0314168 0.117929 -0.0127586 +-0.0261669 0.0378674 0.0174813 +-0.0832309 0.120353 0.049216 +-0.0617814 0.16156 -0.0355923 +-0.0779669 0.165862 -0.0278956 +-0.0698398 0.0922797 -0.0162924 +0.0483255 0.0503286 -0.00380134 +0.0451716 0.0889782 0.0181643 +0.0329815 0.112282 -0.00498623 +0.0279206 0.0916217 -0.0209795 +0.0155 0.11402 0.0377783 +-0.0105379 0.0431327 0.0497176 +0.0606167 0.0609422 0.00915424 +-0.0181983 0.18599 -0.0174024 +0.0189716 0.115037 -0.0139804 +-0.0590849 0.0644137 0.0318252 +-0.0819254 0.12582 0.0519232 +-0.0588398 0.0954803 -0.0203334 +-0.0674426 0.148384 -0.0326115 +0.0387628 0.10462 0.0262683 +0.00841723 0.129272 0.0256623 +-0.0196119 0.0364667 -0.0278852 +-0.0376923 0.162356 -0.000243841 +1.88808e-05 0.115368 -0.0182789 +0.0393962 0.0505525 -0.00668347 +-0.0116788 0.0555838 -0.0339192 +0.0363865 0.0713868 -0.0138007 +-0.0821651 0.110069 0.034903 +0.022728 0.117081 -0.0101857 +-0.0515389 0.0417461 -0.0105815 +0.0219588 0.123501 -0.00109075 +0.00735928 0.0960033 -0.0276522 +-0.00349428 0.119696 0.0379021 +-0.0470844 0.151656 -0.00519447 +-0.0242296 0.0941248 -0.0298734 +0.0152433 0.0658912 0.0518711 +-0.021804 0.0376594 -0.0181241 +-0.0133966 0.121962 -0.00916065 +0.0365536 0.108655 0.0265769 +-0.0668098 0.0880715 -0.0180091 +-0.0665181 0.171112 -0.0407548 +0.0493343 0.0532247 -0.0043679 +0.0423933 0.0901635 -0.00682346 +-0.0624126 0.150651 -0.0115734 +0.0373944 0.0505276 -0.00658166 +-0.0411461 0.162173 -0.0113613 +-0.065916 0.0662086 0.0305519 +-0.0289729 0.083488 0.0456837 +-0.000642523 0.0347913 0.0398677 +-0.0738147 0.065744 0.00631032 +0.00351431 0.0938625 0.0544725 +-0.0467733 0.12389 0.0269319 +0.0246632 0.123785 0.00595837 +-0.0715256 0.0958228 0.0413941 +0.00252922 0.0362636 0.0463395 +0.00948792 0.0963424 0.0500581 +0.0292035 0.0400739 0.0286474 +-0.0309481 0.0706991 -0.0284733 +-0.054091 0.152763 0.0215579 +0.0118527 0.105542 -0.0197545 +-0.0404793 0.0832528 0.0431634 +-0.0448438 0.0985036 -0.0215544 +-0.032014 0.0567822 -0.0123897 +0.00040853 0.0356817 0.00488121 +0.0447245 0.0861403 0.0231669 +-0.0426307 0.0338188 -0.00946517 +-0.0710495 0.141325 -0.00813095 +-0.0255896 0.182763 -0.0105092 +-0.0838169 0.107636 0.0253505 +-0.0796245 0.0859561 0.0353266 +0.0240034 0.0449703 0.0396985 +0.00450108 0.0716864 0.0560951 +-0.0676894 0.0750921 -0.0153176 +-0.0466572 0.0369109 -0.0172699 +-0.016529 0.0558872 0.0508401 +-0.087831 0.103641 0.0093887 +0.0272256 0.10745 0.0377741 +-0.0670064 0.0337953 0.0073865 +-0.0866888 0.0833263 0.0124872 +0.0152687 0.0779357 -0.0299953 +-0.0851819 0.152725 0.0105454 +0.000352424 0.0511166 -0.0306262 +0.0518495 0.0464359 0.0201911 +0.0554005 0.0553511 0.0254886 +-0.0886141 0.0928486 0.00844707 +0.0129712 0.130228 0.0115965 +-0.085549 0.104961 0.0233427 +0.0515991 0.0496316 0.0251833 +0.0131946 0.0878791 -0.0305989 +-0.0693376 0.131255 0.0489674 +-0.0660205 0.167997 -0.0305503 +-0.0666146 0.174697 -0.0480375 +-0.0293346 0.0347045 0.0427947 +-0.0553259 0.126836 -0.00601308 +-0.058583 0.0460291 0.0113967 +-0.0416277 0.0337441 -0.014735 +-0.0446642 0.0621749 -0.0132201 +0.0295862 0.120365 0.0134787 +-0.0697163 0.064282 0.022673 +-0.0805487 0.0789662 0.0306236 +-0.0787564 0.154933 0.00983696 +-0.0662707 0.14708 -0.0258685 +-0.0248167 0.0949702 -0.0267501 +-0.0407693 0.0826515 -0.0208197 +0.000514101 0.0346343 0.00952105 +-0.0533361 0.138123 0.0280776 +-0.0689277 0.115103 -0.00892086 +-0.0865224 0.0913375 0.0024428 +0.0232602 0.0790529 -0.0256674 +0.0296786 0.0679688 -0.0198342 +-0.0331127 0.123309 0.0239558 +0.0276403 0.118218 0.0284429 +0.00238303 0.0449286 -0.0261957 +-0.0928278 0.124236 0.0382657 +-0.0868685 0.11045 0.00936714 +-0.0254875 0.0959781 0.0438332 +0.0132252 0.0808221 -0.0308314 +0.035265 0.0591791 0.0368077 +-0.00944135 0.168135 -0.0197365 +0.0011864 0.12951 0.0259323 +-0.0139593 0.0967237 -0.0305143 +-0.00848922 0.0385737 0.0258802 +0.0562981 0.0619429 0.0011209 +0.0322546 0.0987343 -0.0145759 +-0.0268707 0.103016 -0.0234914 +-0.00655639 0.0384205 0.0209905 +-0.0296666 0.0774462 0.0418826 +-0.0626586 0.0676213 -0.0103966 +0.0374569 0.0904362 -0.0137042 +-0.0712181 0.161 -0.0439365 +0.0243668 0.0889213 0.0476805 +-0.0336134 0.0408899 -0.0298935 +-0.0404969 0.0916505 0.0425962 +0.0443454 0.0903358 0.0221636 +-0.0435232 0.163746 0.00524284 +-0.0649943 0.0623954 0.0235277 +-0.0613093 0.0593276 0.0181457 +-0.0717978 0.155398 -0.0409076 +-0.00868753 0.0584178 -0.0339256 +-0.0904383 0.119966 0.00529664 +-0.0601615 0.0333995 -0.00165181 +-0.0612252 0.0407891 0.0437895 +-0.0537348 0.0738508 -0.0172852 +-0.0709057 0.10512 -0.0125462 +-0.00333997 0.039253 0.0353398 +-0.0469903 0.145002 0.00194161 +-0.0250386 0.0659034 -0.0335362 +-0.023273 0.0382876 0.00502865 +0.0111228 0.0960826 -0.0257288 +0.0198113 0.0954368 -0.0230239 +0.038476 0.104075 -0.00282883 +-0.0843581 0.0883713 0.0286614 +-0.0930341 0.118841 0.0362969 +-0.0646767 0.146003 -0.0179612 +0.0284626 0.102127 0.0395666 +-0.0435018 0.113907 0.034675 +-0.0604863 0.0790224 0.042794 +-0.089042 0.112536 0.0205154 +-0.0524675 0.0344946 0.0345461 +-0.0848716 0.119101 -0.00207765 +-0.0120923 0.11442 -0.0172013 +-0.079929 0.151371 0.00121035 +-0.0920085 0.116136 0.0393096 +0.0361533 0.112569 0.0130564 +-0.0196629 0.125034 -0.00230889 +0.000499429 0.115573 0.0406664 +-0.0560183 0.147198 -0.00168648 +-0.0873616 0.110481 0.0113565 +-0.0416844 0.0636674 -0.0137203 +-0.0651889 0.153592 -0.00278678 +0.0471599 0.07398 0.0153485 +0.0404106 0.0873775 0.0321991 +-0.019434 0.184905 -0.0153275 +-0.0438294 0.0913555 -0.0224139 +-0.0527613 0.0797578 -0.020501 +-0.0314155 0.0651435 -0.021432 +0.00948509 0.0950229 0.0512669 +0.0346346 0.107297 -0.007625 +-0.0870053 0.0954387 0.00242783 +-0.0617312 0.142927 -0.00565867 +-0.0538929 0.14622 0.0244012 +0.0339044 0.115273 0.00366751 +0.049575 0.0693171 0.00251779 +-0.0861009 0.106274 0.00635995 +-0.00751182 0.075985 0.0578234 +-0.0761849 0.0933719 -0.0135017 +0.0266626 0.0672707 0.0437593 +-0.0314925 0.0932138 0.0444288 +0.0112937 0.0680868 -0.0307505 +-0.086045 0.141863 0.00720055 +0.000490707 0.111422 0.0424934 +-0.0516022 0.0502173 -0.00741774 +-0.0709386 0.131124 -0.00852217 +-0.0291841 0.125368 0.0164845 +-0.0012258 0.095852 -0.0315171 +-0.000697567 0.0641196 -0.0342689 +-0.0797379 0.0738711 0.0228323 +-0.0705682 0.0382102 0.00943236 +-0.0558807 0.102663 -0.0193944 +0.0262875 0.0835737 0.0468767 +-0.0206175 0.0364922 -0.0281092 +0.0306136 0.0779431 -0.0207534 +0.037492 0.0983062 -0.0097724 +-0.0861064 0.0806138 0.0174966 +-0.0488748 0.105594 -0.0196597 +-0.0499497 0.0724883 0.0409516 +-0.060435 0.131107 0.0389542 +-0.0197383 0.108898 -0.0213322 +-0.0328414 0.0943934 -0.0238538 +0.0071329 0.104451 -0.0211019 +-0.0904392 0.125398 0.00528343 +0.0579573 0.0676391 0.00414749 +-0.0890486 0.0915916 0.0214249 +0.0544885 0.0716156 0.00618127 +0.037936 0.0901639 0.0356574 +-0.0631289 0.155254 0.0269868 +0.0280038 0.120349 0.024295 +0.00325461 0.0697315 -0.0336623 +0.0198002 0.0768324 0.0515324 +0.0135718 0.0504901 0.0475195 +-0.0220331 0.041681 0.0538782 +-0.0322365 0.126297 0.00653811 +-0.020497 0.0855906 0.0563403 +0.0100844 0.123139 0.0340691 +-0.0917617 0.141982 0.0191718 +-0.00665267 0.0526646 -0.0325345 +0.0325469 0.0922927 -0.0176842 +-0.00490321 0.0383839 0.0141185 +0.0393963 0.049102 -0.00636122 +-0.0468295 0.0927337 -0.0216687 +0.0393484 0.0561243 -0.00568756 +0.0381042 0.0392738 0.00134927 +-0.02061 0.0653432 0.0492306 +-0.0644858 0.152894 -0.00250698 +0.0316363 0.118365 0.0113851 +-0.0625842 0.162383 -0.0563311 +-0.0126137 0.180121 -0.0236267 +-0.0562637 0.142432 0.0309288 +0.0389203 0.10838 0.0161659 +0.0468209 0.0708789 0.021127 +0.0153317 0.060873 -0.028643 +-0.067208 0.0447917 0.00368814 +-0.0638714 0.15469 -0.0385902 +-0.0624126 0.161536 -0.0416011 +-0.011049 0.124435 -0.00785173 +0.0143712 0.0493733 -0.0267066 +-0.0374862 0.0931566 0.0438456 +-0.0278525 0.0807805 0.0474761 +0.0573848 0.0670309 0.00292365 +-0.0304938 0.0960556 0.0449536 +0.0182602 0.127523 0.0192457 +0.0182204 0.080645 -0.0282763 +-0.00275795 0.0740872 -0.0359501 +-0.072697 0.155649 0.00759319 +-0.0857527 0.0792184 0.0135098 +-0.0604443 0.0456013 0.0296807 +-0.0528198 0.0927332 -0.0219739 +-0.0457202 0.0709417 -0.0164642 +-0.054497 0.0889964 0.0448823 +-0.0541353 0.147754 0.0254132 +0.05074 0.0503045 -0.00171178 +-0.0926993 0.124215 0.0352716 +0.00850767 0.0786 0.0556334 +-0.0141847 0.0405865 0.0511605 +-0.0500491 0.0345412 0.0367666 +-0.0744234 0.156022 0.0128056 +-0.0148381 0.0386367 -0.0157684 +-0.0896535 0.0916031 0.0184402 +-0.0279306 0.125506 0.00666413 +-0.0249827 0.0918474 0.0485489 +-0.0247746 0.0385687 -0.0102357 +-0.0718755 0.10648 -0.0114758 +0.0303733 0.115414 -0.00438737 +0.0390771 0.099844 -0.00681802 +-0.0601235 0.0447437 0.0425684 +0.0559507 0.0508031 0.00520531 +-0.087948 0.102288 0.00840013 +-0.0802939 0.0732789 0.00250413 +-0.00347452 0.114725 -0.0175669 +-0.0780015 0.155773 0.018849 +-0.0868392 0.0873072 0.00147849 +0.0114304 0.0346172 0.0371012 +-0.0154945 0.0925097 0.0555061 +0.0207547 0.10431 -0.0184628 +-0.0805113 0.153427 0.0283513 +-0.0133702 0.0343611 -0.0190243 +0.045363 0.0932019 0.00717004 +-0.0517619 0.079747 -0.0203928 +-0.011137 0.171308 -0.0197957 +-0.0797359 0.0706327 0.0105539 +-0.0435047 0.116629 0.0323741 +0.0461192 0.0786876 0.0190773 +0.0257679 0.0349257 0.0180133 +-0.0377436 0.127354 0.000111554 +0.0455391 0.0875946 0.0141649 +-0.0115776 0.0962625 -0.032007 +-0.0304054 0.0580102 -0.0194062 +-0.0519213 0.118323 0.0336042 +-0.0615165 0.15114 0.0355512 +-0.0268549 0.175688 -0.00910606 +0.0291872 0.0462618 0.034893 +-0.0828817 0.143196 0.00216401 +-0.0229243 0.0972075 0.044901 +-0.0420606 0.0344689 0.0332688 +0.00840712 0.0404044 -0.0234014 +-0.0584986 0.100161 0.0428821 +0.0267286 0.0521731 -0.0207566 +-0.0343564 0.043282 -0.028737 +0.035312 0.0840703 -0.0177861 +0.0167493 0.0874098 0.0506847 +-0.0706375 0.156126 0.0126907 +0.0395317 0.0596774 0.0306966 +0.0160357 0.0807986 0.0531419 +-0.0719071 0.105086 -0.0120336 +0.057752 0.0523416 0.0181873 +-0.0705862 0.166615 -0.0490027 +-0.069998 0.157611 -0.0031485 +-0.0629727 0.118457 0.044154 +-0.0098895 0.107351 -0.0224128 +-0.0668287 0.169972 -0.0351376 +-0.0538607 0.152062 0.0231076 +0.0286155 0.0795328 0.044942 +0.00747725 0.131195 0.0181386 +0.0525355 0.0678367 0.0261828 +-0.069983 0.033931 0.00665746 +-0.00449526 0.10588 0.044033 +-0.0647467 0.143415 -0.011401 +-0.0242451 0.0337053 -0.0224295 +0.0405945 0.102819 0.0221712 +-0.0253936 0.106122 -0.0223873 +-0.031866 0.126076 0.00521848 +-0.0903832 0.132413 0.0312232 +0.0270423 0.0648893 -0.0216756 +-0.0416036 0.125525 0.0208631 +-0.0642885 0.148287 -0.0250747 +0.043249 0.0705728 -0.00179391 +0.00750831 0.0772509 0.056126 +-0.0360471 0.125746 -0.0036679 +-0.0534999 0.0820142 0.0450601 +-0.0268076 0.0782799 -0.0366273 +-0.0630392 0.0336157 0.00836468 +0.00450283 0.0924607 0.0546761 +-0.0794816 0.0846149 0.0352279 +-0.0354976 0.116636 0.0319301 +0.0590094 0.0552651 0.0101755 +0.0177618 0.100614 -0.0224544 +0.0141872 0.0347155 0.0357788 +-0.0626395 0.0644043 -0.00619313 +-0.0472223 0.168222 -0.000777409 +-0.0688709 0.156258 0.0147705 +-0.00209707 0.130745 0.0203917 +0.0438165 0.0959355 0.0191615 +0.0272253 0.120021 -0.000250724 +-0.0623918 0.152158 -0.026581 +-0.0619803 0.153737 -0.02558 +-0.0110119 0.122536 -0.00980812 +-0.00845767 0.100229 0.0476033 +-0.053626 0.1255 0.0365054 +0.029243 0.0872327 -0.0208644 +-0.0561028 0.133503 -0.00512832 +-0.0536146 0.150855 0.0243962 +-0.0729449 0.0805494 0.0386997 +-0.0113093 0.0384672 0.00547553 +0.013929 0.0392001 0.0444158 +-0.0743245 0.179234 -0.0539852 +-0.0670834 0.168031 -0.0569976 +0.0269196 0.0418157 0.0333163 +-0.0261604 0.114813 -0.0155316 +0.054979 0.06227 -0.000302264 +0.0447631 0.0931576 0.00318223 +-0.028552 0.159576 0.000695282 +-0.0196334 0.0906851 0.0545345 +-0.0681661 0.173216 -0.0428508 +-0.0670035 0.166617 -0.0570134 +-0.00170857 0.0641356 -0.0344906 +-0.0302923 0.115032 -0.0157497 +-0.017789 0.0998203 0.0439009 +0.0575984 0.0711737 0.0088801 +-0.0559485 0.119826 0.0383628 +-0.0508832 0.106998 -0.0191626 +-0.0856518 0.096702 -0.000561949 +0.0433856 0.0475038 -0.0047769 +-0.0141839 0.177168 -0.0206609 +-0.0318261 0.0623615 -0.0184459 +-0.0694684 0.158126 -0.0509379 +-0.059088 0.0445923 -0.00517311 +-0.0680469 0.0887699 0.043444 +0.0413366 0.0588699 -0.00449648 +-0.0108613 0.16611 -0.0209706 +-0.0810695 0.111472 -0.000645954 +0.0236683 0.0535376 0.0428398 +-0.0525009 0.104252 0.0406803 +0.0178265 0.128119 0.0148069 +-0.0833287 0.0817012 -0.000498118 +-0.0582078 0.148218 0.0334722 +0.0469627 0.0735494 0.00823046 +0.0348898 0.0889372 0.0400127 +0.0544139 0.0478718 0.0102055 +-0.0519767 0.0343446 0.0277664 +-0.0526872 0.144684 0.0193835 +-0.0654577 0.0403952 0.0367257 +-0.0632766 0.146612 -0.0147592 +-0.0756638 0.0968147 0.0380937 +-0.0121766 0.169774 -0.0245851 +-0.0313173 0.115081 -0.0157968 +0.00550009 0.105744 0.0419393 +0.0170456 0.0808203 0.0528345 +0.00997537 0.129323 0.0247881 +-0.000565033 0.0348667 0.0451983 +-0.0170398 0.124093 -0.00535053 +0.0359746 0.112738 0.007259 +-0.0264982 0.112519 0.0362632 +-0.0108141 0.0841239 -0.038537 +-0.0464922 0.097353 0.0431423 +0.0456344 0.0820067 0.0201819 +-0.00765915 0.0388225 0.0294318 +0.00952232 0.057476 0.0527668 +-0.0114724 0.180094 -0.0295969 +-0.0324762 0.0778813 -0.0295332 +-0.0515001 0.0465582 0.0417907 +-0.0716564 0.0639047 0.0190638 +-0.00648988 0.10728 0.0440126 +0.0517118 0.048146 0.0235716 +-0.00973422 0.0712867 -0.0371391 +-0.0311873 0.0499402 0.0418672 +-0.0652548 0.0380623 0.0267185 +-0.0353491 0.0346157 0.0221204 +-0.00455763 0.115688 -0.0165869 +-0.0158711 0.0941172 -0.0338261 +-0.0307264 0.0510087 -0.0163552 +-0.0674749 0.0861001 0.0436947 +-0.00549495 0.0456998 0.0471564 +-0.0127624 0.0742651 -0.0384156 +-0.0667813 0.0354951 0.0323861 +-0.0650934 0.040468 0.0377689 +0.00949782 0.11825 0.0371477 +0.042476 0.0986857 0.0211679 +0.0134353 0.0833572 0.0528968 +-0.006265 0.0381462 0.0486516 +0.019505 0.108463 0.0397034 +-0.0531501 0.13113 0.0336749 +-0.0169066 0.174228 -0.0176024 +-0.0877346 0.144562 0.0345528 +-0.0620052 0.131132 -0.00795604 +0.00350354 0.0967589 -0.0284524 +-0.0379926 0.15214 0.00278328 +-0.0250008 0.0678945 0.0436439 +0.013488 0.120719 -0.0120957 +-0.0546814 0.0342953 0.0289953 +-0.0493523 0.128134 -0.0033313 +-0.00536457 0.0387134 0.026395 +-0.0301008 0.162274 -0.0148279 +-0.0520761 0.153139 -0.00390728 +-0.0312974 0.120401 0.0276066 +-0.072708 0.173064 -0.0373345 +-0.0634981 0.0847405 0.0443851 +-0.00748204 0.123738 0.0339317 +0.0398166 0.0726016 0.0329349 +-0.0204571 0.159751 -0.0120682 +-0.0398664 0.104215 -0.0203975 +0.006345 0.0351555 0.0445736 +-0.0295025 0.0974144 0.0445077 +-0.00148646 0.0489421 0.0507365 +-0.0158009 0.0813621 -0.039398 +-0.0661715 0.0383371 0.0290301 +-0.0520592 0.0517918 0.0296489 +0.0132683 0.0765435 -0.0305058 +0.0357248 0.113154 0.00859849 +0.0452751 0.0847797 0.0211588 +0.0408906 0.0942563 -0.00676992 +-0.0621992 0.16466 -0.0525894 +-0.0704991 0.101365 0.0396906 +-0.0514936 0.0959907 0.0439844 +-0.0738976 0.0662178 0.00410027 +-0.0308753 0.104365 -0.0222089 +-0.0454852 0.0411575 0.0440424 +0.0264018 0.0591975 -0.0228202 +-0.0372554 0.154082 -0.00855912 +-0.0104302 0.175693 -0.0238578 +-0.0581296 0.0583212 0.0178996 +-0.0237002 0.0610797 -0.032726 +-0.0366248 0.127943 0.00786237 +-0.00749367 0.0605601 0.0556586 +-0.0317091 0.0749949 -0.0294856 +-0.0617882 0.138121 0.0352393 +-0.0764283 0.117143 0.0518912 +-0.0476607 0.120291 -0.0131944 +-0.0617261 0.158412 -0.0335949 +-0.0794782 0.106106 0.0317497 +-0.00127622 0.127442 0.029403 +-0.0850735 0.0819457 0.0214598 +-0.088151 0.137836 0.0407884 +-0.0622605 0.152178 -0.0225796 +-0.0896207 0.132365 0.0409732 +-0.0392773 0.153597 0.0044688 +-0.0477636 0.0797421 -0.0198355 +0.0475024 0.06248 0.0300852 +0.0137309 0.0344041 -0.00431645 +-0.0864106 0.136323 0.00223079 +-0.0622483 0.0470201 0.00467011 +-0.0218601 0.0893132 0.0539604 +-0.0404866 0.0390699 -0.027317 +-0.0563767 0.0650155 0.0336358 +-0.022785 0.0727991 -0.0382731 +0.00745846 0.0952014 -0.0287983 +-0.0728877 0.143976 -0.0119757 +-0.0485361 0.130681 1.6802e-05 +-0.08227 0.0830732 0.0310042 +-0.0458007 0.0884477 -0.0220772 +-0.0674901 0.102816 0.040307 +-0.0295082 0.0987895 0.0437091 +0.0266247 0.0591987 0.0436528 +-0.0166425 0.0970062 0.0498004 +-0.0754488 0.151352 -0.0128993 +-0.0561187 0.04231 0.0196965 +-0.0125561 0.107483 -0.0218463 +-0.0258638 0.0987461 -0.0241399 +-0.0150968 0.0965608 -0.0303463 +0.0403869 0.0505617 -0.00671315 +-0.0618596 0.135275 0.0369058 +-0.00853806 0.120181 -0.0133625 +0.0152242 0.123558 0.0310525 +-0.0669104 0.112326 -0.011534 +-0.00121369 0.0389243 -0.000247464 +0.0599261 0.0581121 0.0171753 +-0.0104999 0.0842933 0.0575891 +0.0236959 0.120687 0.0298434 +0.0407626 0.105627 0.00616707 +-0.0204813 0.10165 0.0438784 +-0.0497999 0.0884036 -0.0217208 +0.0455191 0.0847794 0.00419259 +-0.0113995 0.128605 0.00179072 +-0.0808762 0.0733317 0.00350919 +-0.0634956 0.0804499 0.0432131 +-0.0737877 0.170302 -0.0290826 +-0.00649113 0.0718493 0.0579775 +-0.0445186 0.0533636 0.0386768 +0.0320623 0.104555 -0.0127247 +-0.0491177 0.138604 0.00740359 +0.0459251 0.0848195 0.0121712 +0.0423718 0.0547731 -0.00653415 +-0.0505603 0.0417939 -0.0107632 +-0.0551112 0.0477166 -0.00539308 +-0.0492183 0.150688 0.0111503 +-0.0868019 0.0886457 0.00149241 +-0.0414982 0.166749 0.00369508 +-0.00533161 0.123249 -0.0106624 +0.00612795 0.107304 -0.0203065 +0.023391 0.0605296 0.0460187 +-0.0778945 0.102117 0.0345146 +-0.0177322 0.108689 -0.0211068 +-0.0341359 0.168185 -0.0152479 +-0.0364811 0.0931828 0.0441998 +-0.0645148 0.15586 0.0250316 +-0.0133496 0.124356 0.0309811 +-0.053528 0.131291 -0.0047694 +0.0236875 0.0373106 0.0299772 +0.00806894 0.0972917 -0.0250353 +0.0518069 0.0518147 -0.00170668 +-0.0580149 0.0675718 0.0363481 +-0.0916942 0.124053 0.00727726 +0.0143227 0.0344255 0.0215932 +-0.0828034 0.0762521 0.011522 +-0.0523769 0.119775 0.034728 +-0.0380638 0.174118 -0.00995608 +-0.0515288 0.0559219 0.0167726 +-0.0665225 0.10009 0.04154 +0.0449219 0.0497223 0.0313654 +-0.00374083 0.069852 -0.0355987 +-0.0448162 0.12956 0.0195798 +0.00318984 0.0852564 -0.0341139 +-0.0901249 0.125637 0.04453 +0.0248625 0.12099 -0.00239034 +-0.0357073 0.03405 0.0117511 +-0.0461509 0.05879 0.0381434 +0.0389649 0.108275 0.00542368 +-0.0857362 0.141867 0.00617644 +-0.0755097 0.135846 0.0506323 +0.0384382 0.0954258 0.0328906 +0.00385238 0.131766 0.0125385 +-0.0277181 0.0382234 0.00237012 +0.0554262 0.0714159 0.00640835 +-0.0707971 0.168292 -0.02371 +-0.0131917 0.169758 -0.0239616 +-0.0344904 0.0661905 0.0406967 +-0.00154364 0.130277 0.00186507 +-0.0647696 0.148087 -0.0261392 +-0.0577571 0.0334518 0.000595927 +-0.0334995 0.0618586 0.0392638 +-0.0657123 0.171986 -0.0448274 +-0.0254896 0.049863 0.0466034 +-0.0207287 0.058287 -0.0332963 +-0.040488 0.088839 0.0428058 +0.00826686 0.0681716 -0.0316571 +-0.0382076 0.0431174 -0.0263315 +-0.0192007 0.0392753 0.0392298 +0.0446778 0.0701888 0.00161208 +-0.0681688 0.0340999 0.0104427 +-0.0891956 0.099693 0.0183885 +0.00250408 0.0856622 0.0573274 +0.00673484 0.0364109 -0.0131882 +-0.0273112 0.0917698 0.0451953 +0.0360152 0.072737 0.038003 +-0.0174841 0.0910963 0.0554741 +-0.0882831 0.114383 0.0443189 +-0.0562701 0.0534697 0.00668599 +0.0184737 0.104403 0.0439338 +0.0591195 0.067343 0.0203999 +-0.0464971 0.107057 0.0400682 +0.0224712 0.125479 0.00796738 +-0.00281596 0.0896133 -0.0355773 +-0.0892259 0.113441 0.0323782 +-0.0532781 0.0476794 0.0246524 +0.00120832 0.0811183 -0.0353756 +-0.0820812 0.0748515 0.0115294 +-0.0344414 0.153644 0.000910386 +-0.0915313 0.147463 0.0171482 +-0.0778811 0.12224 -0.00662917 +0.00275904 0.130985 0.0207146 +0.0333375 0.115599 0.0220283 +-0.0925663 0.116874 0.0234322 +-0.0461657 0.168264 0.000998904 +-0.0608088 0.148246 0.0367611 +-0.0740333 0.13404 0.0510058 +0.046183 0.0806404 0.0141758 +-0.0177485 0.0700027 -0.0382786 +-0.05252 0.0490121 0.0379722 +-0.0142459 0.168321 -0.0155387 +-0.0894247 0.0996886 0.0153976 +-0.0654783 0.0861634 0.0444498 +0.0323217 0.116577 0.0230638 +-0.0676059 0.141897 -0.00935244 +-0.0514978 0.10289 0.0412322 +-0.00575874 0.0741425 -0.036638 +-0.0913439 0.11607 0.03131 +-0.0313824 0.0877015 -0.0265568 +0.0373688 0.102607 -0.00785264 +-0.0106393 0.169838 -0.0190633 +-0.0716387 0.0675256 0.0265031 +-0.0396636 0.0340515 0.0270767 +-0.0779219 0.0717107 0.00150831 +0.0451585 0.0670735 0.000845212 +-0.045692 0.126639 0.0237789 +-0.0914166 0.131046 0.0292353 +-0.0845601 0.0832447 0.0254813 +-0.00465613 0.0540645 -0.0324247 +-0.0573264 0.15429 0.0261567 +-0.0776607 0.0817583 -0.0102119 +-0.0614708 0.165833 -0.0590275 +-0.0866007 0.129822 0.0479412 +-0.0751026 0.155922 -0.00200459 +0.0292911 0.0364248 0.021021 +0.0168648 0.0958851 -0.0235234 +0.0566532 0.0608369 0.0255651 +-0.0447794 0.128887 0.00190497 +-0.024583 0.0635737 0.0419612 +-0.0534745 0.0360014 0.0464895 +-0.0488506 0.0999451 -0.0218934 +0.00224668 0.0740592 -0.0351433 +-0.0223056 0.126998 0.0101726 +-0.0907871 0.14608 0.0151486 +-0.0506704 0.0680761 0.0375114 +-0.0689054 0.113678 -0.00975253 +-0.032497 0.0917926 0.0443017 +0.0282492 0.102359 -0.0164093 +0.0375206 0.0540908 0.0314327 +-0.00566586 0.0555015 -0.0328252 +-0.0896969 0.139298 0.033185 +-0.0707473 0.127025 0.0521985 +-0.0455052 0.162274 0.00622301 +-0.0188243 0.0868874 -0.0382929 +0.00890069 0.0988547 -0.0226736 +0.0103725 0.130878 0.016344 +-0.0568151 0.142191 -0.00256359 +-0.0576833 0.0660478 -0.00944709 +-0.0394154 0.128541 0.00978788 +-0.0112757 0.0392934 0.0501019 +-0.0875442 0.11045 0.0133403 +0.0108543 0.128955 0.0251156 +-0.0306705 0.0692801 -0.0274547 +0.0193368 0.0460939 -0.0219388 +0.0280428 0.0928381 -0.0202889 +0.0101954 0.0879315 -0.0314901 +-0.0425303 0.153621 0.00682011 +0.046342 0.0671736 0.000660587 +0.0133755 0.0508647 -0.0275026 +-0.0815821 0.0803018 0.0303913 +-0.059075 0.137911 -0.00597298 +0.0419587 0.0958192 0.0261617 +0.0444321 0.0482656 0.0306384 +-0.0444939 0.0519693 0.038747 +0.0141421 0.107244 -0.018655 +-0.0258198 0.0880859 -0.0357275 +0.0511643 0.0525875 0.0281258 +-0.0838035 0.0884157 -0.00457068 +-0.0075843 0.111951 -0.0206051 +0.020155 0.0344845 0.00437508 +-0.0141697 0.038751 -0.00641336 +0.0160515 0.039741 -0.0214719 +-0.0627129 0.161593 -0.024579 +-0.0329051 0.0359381 0.0496011 +-0.0738068 0.0892836 -0.0151913 +0.0299737 0.0934986 -0.0189639 +-0.0618436 0.129703 0.0404325 +0.0117043 0.110341 -0.0188996 +0.013386 0.0576661 0.0508541 +-0.0636966 0.117092 0.044917 +-0.0634835 0.0890243 0.0452141 +-0.0874124 0.136542 0.0428952 +-0.0391888 0.168166 -0.0121398 +0.0376532 0.101954 -0.00791483 +-0.0708338 0.143978 -0.0149516 +-0.0135013 0.0687469 0.0541774 +-0.0671166 0.134015 0.0451603 +-0.0645196 0.148285 0.0383203 +-0.0216796 0.18469 -0.0188168 +-0.00148992 0.070365 0.0570874 +-0.0291401 0.0875323 -0.0325902 +0.0251009 0.122815 0.00327552 +-0.0111221 0.0980696 -0.0279124 +-0.0635024 0.0918143 0.0447779 +-0.0887995 0.0901451 0.00746775 +0.0164935 0.0962515 0.0477962 +0.046272 0.0806446 0.00718674 +0.038459 0.094268 -0.00974763 +0.0100793 0.0873522 0.0550703 +0.0183745 0.0874107 0.0495162 +-0.0547819 0.0840722 -0.0215429 +0.0249849 0.0576546 -0.0237943 +0.0262469 0.11849 0.0293617 +0.0187045 0.0462587 0.0425837 +-0.0433933 0.123406 -0.0104784 +-0.0615139 0.0385816 -0.00827445 +-0.0234882 0.104381 0.0428298 +0.0334188 0.115464 0.00204907 +-0.0251305 0.0810774 0.0532367 +-0.0661661 0.0431586 -0.00127362 +-0.0689806 0.138464 -0.0078252 +0.0324954 0.0484967 0.0321634 +-0.0650217 0.154743 0.00396393 +-0.0615004 0.0818818 0.0435978 +0.0289072 0.10744 0.0367037 +-0.0720417 0.156813 -0.0379146 +-0.0232564 0.171248 -0.0127378 +0.0211195 0.109025 -0.0155233 +-0.0668614 0.150018 -0.036632 +0.0204284 0.122662 -0.00423372 +-0.0628194 0.162004 -0.0576316 +-0.0641553 0.168532 -0.0413683 +0.0278158 0.0649933 -0.0208789 +-0.0788364 0.0742331 0.0262211 +0.0527925 0.0505032 0.000257908 +-0.0738772 0.107826 -0.00969763 +-0.0819791 0.08171 0.030761 +-0.0904343 0.136488 0.021207 +-0.0584473 0.145323 0.0330944 +0.00225674 0.0697235 -0.0336823 +-0.0228155 0.081267 -0.0385568 +0.0290261 0.106116 0.036871 +0.0121361 0.105839 -0.0196306 +-0.0365486 0.12125 -0.0102225 +-0.070219 0.146984 -0.026659 +0.00749947 0.122404 0.035106 +-0.0234912 0.107132 0.0414501 +0.0116034 0.0355849 -0.021581 +-0.0896067 0.0902304 0.0134498 +0.0274272 0.0781922 -0.0230908 +-0.0228318 0.114095 -0.016802 +-0.0510675 0.0598803 0.0316706 +0.0525281 0.0730706 0.0188626 +-0.0503624 0.128323 -0.00347306 +-0.0758088 0.0906346 -0.0139136 +0.0428831 0.0902351 0.0261862 +-0.00171604 0.131316 0.0104838 +-0.0845537 0.143232 0.00516668 +0.0183451 0.0551894 -0.0280076 +-0.0914715 0.128331 0.0382421 +-0.0654644 0.148292 0.0388168 +0.025254 0.122206 0.00192061 +0.0102154 0.0850922 -0.0315035 +-0.0913446 0.12833 0.0392393 +-0.0282035 0.125211 0.0168448 +0.0435793 0.0677809 0.0261624 +-0.014506 0.114132 0.0394731 +0.0146525 0.0927004 0.0511905 +-0.0777124 0.0900603 0.0375253 +0.0426104 0.0723991 0.0281081 +-0.0165087 0.10859 0.0417725 +-0.0293809 0.118905 0.0298455 +-0.0747355 0.161794 -0.0126957 +-0.0194977 0.103001 0.0433214 +-0.0774975 0.111156 0.045792 +-0.0235187 0.0551838 0.0425567 +0.00826699 0.0696219 -0.0321852 +-0.0671246 0.042281 0.0101216 +0.0443577 0.0547836 -0.00632411 +-0.0771697 0.152833 -0.00289126 +-0.0455143 0.0335109 0.00302189 +-0.0154906 0.0744572 0.0558178 +0.0390604 0.0575755 -0.00514174 +-0.0300453 0.0861604 -0.0315778 +0.0243112 0.0999667 -0.0198415 +0.0337476 0.0534432 0.0345417 +-0.0207506 0.0685447 -0.0377382 +-0.0883977 0.0983242 0.022387 +-0.043533 0.162269 0.00566221 +-0.0580451 0.047259 0.00941407 +-0.0435244 0.129538 0.0127129 +-0.0129572 0.163516 -0.016687 +-0.018238 0.0985224 -0.0244062 +-0.0468429 0.132502 0.00641278 +-0.012834 0.128656 0.00349339 +-0.00949586 0.0938956 0.0554931 +0.0405174 0.0829825 -0.0107762 +-0.0306755 0.0409906 0.0514223 +-0.0887381 0.139163 0.03848 +-0.0639163 0.105371 -0.0163736 +0.0319159 0.0876168 0.0427503 +-0.0165553 0.128252 0.0064647 +-0.0695817 0.168848 -0.0261289 +-0.0702082 0.141157 0.0460159 +0.0179624 0.0489942 0.0433049 +0.0363477 0.102053 0.0316389 +-0.029898 0.0385093 -0.0112051 +-0.0687619 0.169445 -0.0540038 +-0.0726588 0.143932 -0.0130219 +0.0162319 0.0849386 -0.0291053 +-0.0620358 0.136971 -0.00707833 +0.0166416 0.0740317 0.0522091 +0.0213347 0.0607071 -0.0262571 +-0.0576194 0.143675 -0.00218012 +-0.0913297 0.148826 0.016141 +-0.0751782 0.152724 -0.0149145 +-0.062838 0.153641 -0.0115615 +-0.0579073 0.152669 0.031812 +-0.0401847 0.173392 -0.00391542 +0.0166876 0.0475243 0.0432195 +-0.0393167 0.0432044 -0.0243027 +0.00658649 0.0945677 -0.0301242 +-0.00883076 0.130134 0.0179537 +-0.0248377 0.0867614 -0.0367865 +0.0135609 0.0343729 -0.0176058 +-0.0367327 0.0739624 -0.0182558 +-0.0891756 0.088886 0.0174542 +-0.0869535 0.131154 0.0468504 +0.00298644 0.131511 0.0079308 +-0.0116778 0.0541503 -0.0336719 +-0.00992638 0.128404 -5.81123e-05 +-0.0544374 0.131586 -0.00508481 +-0.0384968 0.104212 0.0394832 +-0.074384 0.0726496 -0.00763941 +-0.0530656 0.150158 -0.00286677 +-0.0166345 0.0465837 -0.0289175 +0.0567453 0.0707667 0.0204115 +0.0381172 0.0659142 -0.0117557 +0.00256341 0.131601 0.00920655 +0.0391019 0.106936 0.00217583 +-0.0480338 0.0685335 0.039429 +-0.0794876 0.0745597 -0.0035364 +-0.0248661 0.101609 -0.0237851 +-0.0647841 0.0448471 0.00913709 +-0.0446647 0.117939 -0.0147658 +-0.0152743 0.180101 -0.0270399 +-0.0859599 0.106341 0.0203569 +0.0111873 0.0893276 -0.0308633 +-0.0922566 0.126816 0.00926569 +-0.0618365 0.166237 -0.0545929 +0.0181719 0.0795251 0.0527143 +-0.0684871 0.120374 0.0527878 +-0.0476953 0.0723623 -0.0159721 +-0.0472614 0.125357 0.0280089 +-0.0494961 0.113894 0.0347794 +-0.0374992 0.0847101 0.0439351 +-0.0404923 0.0620428 0.0412639 +0.0609826 0.0637492 0.0111528 +-0.0849504 0.136625 0.0461206 +0.0337121 0.104741 0.0331059 +-0.00864132 0.0907031 -0.0362798 +0.00988706 0.0373676 0.0450724 +-0.024511 0.0782394 0.0527049 +-0.0716377 0.0368114 0.00909586 +-0.0832904 0.111663 0.0440643 +-0.0156647 0.109623 -0.0201068 +-0.0766606 0.163806 -0.0339802 +0.0165486 0.0631544 0.0502063 +-0.0753023 0.155004 0.00375308 +0.039051 0.0380783 0.00858362 +0.0420573 0.0943632 -0.00379153 +-0.0924935 0.124207 0.0332695 +-0.0745678 0.155931 0.022959 +-0.0348878 0.0336855 0.0122448 +-0.0755817 0.14859 -0.0148673 +-0.0712419 0.0628661 0.0147709 +-0.0722512 0.170824 -0.0490235 +-0.044945 0.146638 -0.00064718 +-0.0327132 0.0383899 -0.00426549 +-0.0656128 0.0626699 -0.00283823 +-0.0615924 0.156857 -0.0275883 +-0.0306139 0.051126 0.0398517 +-0.0552831 0.0478834 0.0286656 +-0.0825962 0.0869865 -0.00556699 +-0.0743429 0.0777095 0.0359578 +-0.00912413 0.125328 0.0309758 +-0.0877256 0.112462 0.0226926 +-0.0624682 0.148372 0.0373168 +-0.0772099 0.0954309 0.0368548 +-0.0657805 0.04031 0.0356744 +0.0390337 0.102562 -0.00454148 +-0.0218167 0.0770677 -0.0388569 +-0.013694 0.165443 -0.0129401 +-0.0242656 0.0588495 -0.0313753 +-0.0201769 0.16108 -0.00474531 +-0.0746468 0.151291 -0.0288803 +-0.0870878 0.147265 0.0324302 +-0.0667973 0.0823343 -0.0181512 +-0.0894818 0.137913 0.0311948 +0.0410937 0.100015 0.0241739 +0.0260496 0.0420955 0.0353242 +-0.0497977 0.134944 0.0250398 +-0.0824554 0.0748386 0.00652396 +-0.0420037 0.0449364 -0.0183222 +-0.00587956 0.107379 -0.0226761 +-0.0298783 0.0719759 -0.0315267 +-0.0649016 0.118019 -0.00923352 +-0.0461849 0.131841 0.0072241 +-0.0384968 0.066293 0.0418062 +-0.0375363 0.128085 0.0104763 +-0.0684218 0.173931 -0.0443685 +-0.0921191 0.131045 0.0262423 +-0.0269088 0.0720784 0.0425891 +-0.0318614 0.109962 -0.0183828 +-0.0576346 0.139576 0.0324737 +-0.0582272 0.151065 0.033498 +-0.0824187 0.0788859 0.0267668 +-0.0386191 0.0474546 -0.0163861 +0.0266281 0.0902434 0.0456585 +-0.00674435 0.0340208 -0.0192827 +0.0167681 0.0348096 -0.0116543 +0.00555478 0.102979 0.0445124 +0.0101351 0.0346886 0.0403762 +-0.0715049 0.147007 0.0421623 +0.0583177 0.0551766 0.00716644 +-0.0774854 0.142838 0.0458543 +-0.0630637 0.0343143 0.0307056 +-0.00979508 0.122843 -0.0101629 +-0.0497184 0.0723081 -0.0156401 +0.0463136 0.0660623 -0.000202599 +-0.0455839 0.0490621 -0.0101677 +-0.0746807 0.110131 0.0436879 +-0.0107636 0.0728162 -0.0377336 +-0.0155087 0.105817 0.0426846 +-0.0419504 0.0338103 -0.0111665 +0.0243299 0.0661738 -0.0239819 +0.0195943 0.041435 -0.0196763 +0.0590873 0.0566489 0.0191831 +-0.0828908 0.120639 -0.00384458 +0.0299951 0.111426 0.0329993 +-0.0685146 0.033856 -0.00470573 +-0.0492135 0.140151 0.00839688 +-0.0489146 0.121146 0.0309679 +-0.00870224 0.0627847 -0.0356447 +-0.086772 0.140601 0.0407491 +-0.0293203 0.0381642 0.0309659 +-0.0330003 0.0497903 -0.0153502 +-0.0425517 0.127843 -0.00110505 +0.0328934 0.0381571 -2.41096e-05 +-0.0525195 0.0426931 0.0456595 +0.021748 0.0349954 0.0225893 +0.00827474 0.123868 -0.00945393 +-0.029563 0.0377844 -0.01791 +-0.0370175 0.163827 -0.00102436 +-0.0664999 0.101466 0.0412188 +0.0064937 0.048929 0.05087 +0.0287604 0.121079 0.0103057 +0.0252285 0.11379 -0.0106368 +-0.0599544 0.0581084 0.014112 +-0.062196 0.154993 0.0273195 +-0.0901963 0.136492 0.0222062 +0.0243441 0.0535282 0.0420575 +-0.0779175 0.0954136 0.0361479 +0.0233436 0.112218 -0.0129499 +-0.0707139 0.0721775 0.0349299 +-0.0640765 0.0658063 0.0313225 +-0.012499 0.112778 0.04085 +0.00184795 0.0345666 0.017115 +-0.0706528 0.0621972 0.0100461 +-0.0885678 0.139164 0.0111992 +-0.0188224 0.0347384 0.0467634 +-0.0867734 0.103584 0.00638913 +0.0585617 0.0692487 0.0195963 +-0.0597919 0.0868174 -0.0202685 +0.00547344 0.0964656 -0.0281399 +0.0206378 0.123881 0.0271063 +-0.0699457 0.0641869 0.00125597 +-0.0625615 0.156051 0.017016 +-0.0417544 0.0339701 -0.0279962 +-0.0649712 0.129694 -0.00875388 +-0.0862104 0.107661 0.0103578 +-0.0932554 0.121405 0.0112928 +-0.0354965 0.0533413 0.0383699 +-0.0288938 0.0821008 0.0456772 +-0.0504899 0.115263 0.0337703 +0.0589314 0.0635744 0.022157 +-0.0186162 0.0391183 0.0377018 +-0.00206852 0.0346139 0.0433223 +-0.0274904 0.108416 0.0392888 +0.0114791 0.0353993 0.0291949 +0.0231094 0.1217 -0.00313916 +-0.0577454 0.0767844 -0.0191155 +-0.00909377 0.175718 -0.0267745 +0.0517415 0.0673755 0.000499527 +-0.0128851 0.164546 -0.0183954 +-0.0673534 0.170861 -0.0570311 +-0.0929853 0.13101 0.0212315 +0.0234643 0.0889079 0.0481435 +-0.088271 0.126713 0.00126975 +-0.0657845 0.0809163 -0.0181411 +-0.0623578 0.139562 0.0361839 +0.0537838 0.0608937 0.0284739 +-0.0417084 0.0681156 -0.0160245 +0.0391698 0.101249 -0.00580082 +0.0314319 0.059214 0.0400505 +-0.0609535 0.135292 0.0364528 +-0.000337321 0.0338454 -0.0216338 +-0.0194278 0.169807 -0.0142312 +-0.0348191 0.0886631 -0.024431 +0.0343015 0.0925788 -0.0159761 +-0.0484766 0.166987 4.90724e-06 +-0.0665297 0.149283 -0.0337543 +-0.0801184 0.0845811 0.0344552 +-0.0728936 0.109289 -0.00959602 +-0.0631344 0.177233 -0.0567528 +-0.0405211 0.16525 0.00379284 +-0.0231365 0.166757 -0.0180638 +0.00733914 0.0539337 -0.0304234 +-0.0448725 0.105637 -0.0203982 +-0.0120489 0.177175 -0.0228491 +-0.0935183 0.117402 0.0193034 +-0.0218743 0.178667 -0.0141782 +0.0371376 0.0728556 -0.0127896 +0.00251304 0.0828672 0.0572444 +-0.0659599 0.128235 -0.00885739 +0.0572369 0.0523165 0.0201815 +0.00234985 0.1177 -0.0168004 +0.0136405 0.0534411 0.0494225 +0.0440001 0.081852 -0.00180195 +-0.0352323 0.0337248 0.00491425 +-0.0852903 0.152844 0.0238067 +-0.0841107 0.0938743 -0.00455389 +-0.0327087 0.156604 0.00170747 +-0.0136478 0.0384232 0.0249573 +0.0203982 0.126887 0.0157559 +-0.0256832 0.0878506 0.050771 +-0.0859766 0.117044 0.000228439 +-0.0275277 0.0660102 0.0388181 +0.0386899 0.0941002 0.0332667 +-0.0072203 0.0994662 -0.0253456 +-0.0387089 0.068094 -0.0155018 +-0.0447414 0.149173 0.00704529 +-0.037003 0.126393 0.0195465 +-0.0691196 0.118603 0.052746 +0.0126876 0.0376693 0.0445214 +0.00235997 0.0496442 -0.0301148 +-0.0852421 0.0804972 0.00551565 +-0.0315104 0.105689 0.0403731 +0.045017 0.0410596 0.00889517 +-0.0645229 0.0335011 -0.00443342 +-0.0237309 0.092173 -0.0338912 +-0.0696939 0.158144 -0.0499358 +-0.00649106 0.116924 0.0392844 +0.0203532 0.0579488 -0.0270415 +0.0454669 0.0761165 0.0216249 +-0.0776599 0.103464 0.0342449 +-0.0732 0.113624 0.050147 +-0.0760799 0.147225 -0.00886324 +0.0300894 0.118197 0.0250757 +0.0134949 0.103141 0.0462202 +-0.0890108 0.142042 0.0341592 +-0.0804084 0.0719394 0.00662383 +-0.0695221 0.143851 -0.0150076 +-0.0608967 0.108264 -0.0166058 +0.024601 0.0954054 -0.0210454 +-0.022965 0.108799 -0.0212234 +-0.0611808 0.060116 0.0210055 +0.0302694 0.104198 -0.014346 +-0.0556068 0.119255 -0.0119973 +0.0521834 0.0709362 0.0231159 +-0.0314011 0.159502 0.00180977 +-0.0393243 0.172677 -0.00992732 +-0.0273795 0.0859709 -0.0356537 +-0.0158141 0.084157 -0.0391976 +-0.0748503 0.150353 0.0378605 +-0.0898842 0.145774 0.0282412 +-0.0830081 0.135296 -0.00152379 +0.00239673 0.0404932 -0.0244502 +0.0427154 0.0482477 0.0316879 +-0.0266384 0.166791 -0.00886205 +0.0140069 0.0433574 0.0445182 +-0.0554949 0.102938 0.0419937 +-0.0535677 0.121244 0.0365515 +-0.091536 0.147482 0.0221363 +-0.0926871 0.118696 0.0103064 +-0.0944412 0.121464 0.0182801 +-0.0562674 0.0521079 0.00770249 +0.0268173 0.0563551 0.0421393 +0.0126767 0.102031 -0.0220157 +-0.0753389 0.14722 -0.0108566 +-0.0856054 0.119006 0.0487694 +-0.0533885 0.122494 -0.00938247 +0.0431078 0.0438619 0.0262578 +-0.0605291 0.0337655 0.01588 +-0.0126252 0.045057 -0.0279244 +-0.045035 0.131096 0.00921538 +-0.0885624 0.127032 0.0457658 +0.040497 0.0569389 0.0314027 +0.0364907 0.111851 0.00455337 +-0.0834729 0.144593 0.00316535 +0.0433385 0.080395 -0.00378638 +-0.0318429 0.0944059 -0.023975 +-0.0484939 0.0747239 0.0424157 +-0.0110217 0.175722 -0.0231509 +0.000137104 0.104495 -0.0221519 +-0.0521218 0.0553341 0.025863 +0.0390662 0.103279 0.0267541 +-0.0365034 0.105591 0.0389607 +0.0135363 0.0347941 0.0319644 +-0.0857201 0.113489 0.0456231 +-0.0225205 0.114038 0.037332 +-0.0424861 0.107068 0.0398635 +-0.0498903 0.161248 0.00701432 +-0.0261589 0.0660162 -0.0325063 +-0.061193 0.167783 -0.0585846 +-0.0153476 0.186173 -0.0245951 +-0.0220085 0.0386415 -0.0116054 +-0.0746541 0.0660086 0.0112783 +-0.0857094 0.107615 0.00636703 +-0.000110081 0.106984 -0.0213197 +-0.0293764 0.039648 0.0531021 +0.028771 0.0495105 -0.0157345 +-0.0168713 0.184583 -0.0192109 +-0.0517714 0.14934 0.0163945 +-0.059475 0.0776368 0.0428908 +-0.0109445 0.0385116 0.00732721 +-0.0636281 0.177112 -0.0556446 +-0.074576 0.0901236 0.0400162 +0.0161292 0.0604031 0.0495734 +0.022982 0.114019 0.0351746 +0.0259399 0.098006 -0.0197455 +-0.0097165 0.0698878 -0.0366754 +-0.069561 0.132665 0.0486469 +-0.0530949 0.0350628 -0.012244 +-0.0680607 0.153823 -0.0498908 +-0.0135439 0.125168 0.0294386 +-0.00340282 0.12679 -0.00651364 +-0.0391911 0.149452 0.000405422 +-0.0764653 0.177807 -0.0519745 +-0.0287178 0.121983 -0.00700749 +-0.0619687 0.155933 0.0215789 +-0.0411389 0.0448599 -0.0213399 +-0.0553956 0.0560936 -0.00341211 +-0.0930152 0.116045 0.0163142 +-0.0538732 0.0634525 0.0320061 +-0.0265911 0.123944 0.0203778 +0.0521155 0.073659 0.0142686 +-0.0733241 0.158247 -0.0319134 +-0.0109096 0.167211 -0.0224966 +-0.0387656 0.0459335 -0.0222844 +-0.0438685 0.104239 -0.0209341 +-0.0404958 0.0464911 0.0408136 +-0.0546568 0.133929 0.033262 +-0.0875345 0.0914089 0.00446769 +0.0213976 0.0505253 -0.0237217 +0.00734362 0.0524803 -0.0298755 +0.0300864 0.0686462 0.0416997 +0.0343005 0.110021 0.028645 +0.0541591 0.0648613 0.0272743 +-0.0267629 0.124714 0.018819 +-0.084006 0.130916 -0.00261237 +-0.032464 0.126152 0.0167563 +0.0411083 0.0816433 -0.00876203 +0.0569799 0.0538694 0.0224893 +-0.0104937 0.0502816 0.0505289 +-0.0809192 0.0899278 0.0336764 +-0.0706578 0.10688 0.0373417 +-0.0634399 0.160562 -0.0195565 +-0.0491873 0.165537 -0.00392571 +-0.0506864 0.137014 0.00141591 +0.0414602 0.0985756 -0.00280597 +-0.0725308 0.161023 -0.0389355 +-0.0593508 0.0339548 0.0212701 +-0.0724089 0.155986 0.0106072 +0.0454654 0.0819915 0.0211715 +-0.0231673 0.169718 -0.0195033 +0.014393 0.129494 0.0163965 +-0.0185111 0.0499058 0.0467842 +-0.0180519 0.128104 0.0102643 +-0.0161793 0.169751 -0.0220442 +0.0178585 0.0957539 -0.0234025 +0.0277062 0.122023 0.0113437 +-0.0356288 0.0533886 -0.010251 +-0.00862621 0.0394649 0.0376552 +-0.0708134 0.0624523 0.0134268 +-0.0338786 0.104305 -0.0212068 +-0.0471517 0.160622 -0.00754132 +-0.0925898 0.124211 0.034269 +-0.0584616 0.0717087 0.039721 +-0.0146591 0.0511639 -0.0318396 +-0.0607891 0.0597911 0.00342454 +0.0222547 0.0819067 -0.0260667 +0.0230644 0.109683 -0.0142211 +-0.0844174 0.110829 0.0409213 +-0.0687289 0.0779401 -0.0161359 +-0.0752643 0.0941545 0.0391883 +-0.0876028 0.105024 0.0163629 +-0.077844 0.114867 -0.00473455 +-0.0325542 0.0341026 -0.0206973 +-0.0589604 0.0340153 0.0230639 +-0.00211759 0.125578 0.0320366 +0.0126989 0.0342761 -0.010037 +0.013184 0.0740073 0.0542309 +-0.0477691 0.130137 0.000614804 +-0.0718381 0.155405 -0.0399144 +-0.0622568 0.148888 -0.00391238 +-0.0159434 0.0385311 0.027994 +0.0373005 0.103362 0.0294506 +-0.02276 0.093942 -0.0316991 +-0.0520122 0.14159 0.0203687 +-0.082015 0.110886 0.0432009 +-0.0745865 0.0720219 0.0307608 +-0.00953059 0.096141 -0.0318625 +-0.0495789 0.046041 -0.00928879 +-0.00423381 0.0382248 0.0479393 +-0.0382126 0.169665 -0.0124129 +0.0318584 0.0981802 0.0392129 +-0.0314643 0.126198 0.0141678 +-0.0622546 0.152185 -0.0195775 +-0.0424907 0.0831788 0.0422885 +-0.0205087 0.18589 -0.0190712 +-0.00369262 0.0366899 0.0482034 +-0.0197122 0.0583602 -0.0339067 +-0.0106092 0.0434444 -0.026227 +0.0245832 0.0562081 -0.0237654 +-0.0891532 0.121635 0.0465292 +-0.0629277 0.161435 -0.0535909 +0.047295 0.0711844 0.0046334 +-0.0417522 0.0782987 -0.0193601 +-0.000496629 0.0828922 0.0574621 +-0.0320822 0.0335961 -0.0276233 +-0.0571072 0.154583 -0.000558004 +0.0584978 0.0634546 0.0229811 +-0.0581231 0.149655 0.0336366 +-0.0619701 0.160031 -0.0245798 +-0.0800787 0.0980611 0.0339873 +-0.0219645 0.0403079 0.0539432 +-0.0699065 0.110817 -0.0106385 +-0.0725366 0.154032 -0.0369032 +-0.0224974 0.0498852 0.046496 +0.00485548 0.0339942 -0.0207847 +-0.0614772 0.0338873 0.0155724 +0.00946392 0.0472926 0.0483305 +-0.019502 0.109944 0.0407387 +-0.0539465 0.0486826 0.012352 +-0.0355502 0.175589 -0.0109785 +-0.0784832 0.155333 0.0128492 +0.0266099 0.122879 0.0123678 +-0.0472066 0.134653 0.0142236 +-0.0078767 0.103255 -0.023393 +-0.0504989 0.101536 0.0421291 +-0.0266231 0.0450263 -0.028096 +-0.0916243 0.131038 0.0282288 +0.0125747 0.0445985 0.0442752 +-0.0196537 0.0480066 -0.0290701 +0.0172432 0.108764 -0.0171862 +-0.0295071 0.0635474 -0.0264265 +-0.0620034 0.040777 0.0431481 +-0.00243593 0.113721 -0.0185019 +-0.0630177 0.135513 -0.00745136 +0.0433285 0.0874073 -0.00479371 +-0.0154888 0.0688106 0.054717 +-0.0882956 0.116235 0.0458325 +-0.0494969 0.0946343 0.044743 +-0.0619637 0.147832 -0.00431835 +-0.092816 0.124239 0.0392636 +-0.0629366 0.147438 -0.0146052 +-0.0782928 0.163856 -0.0319501 +-0.064798 0.174285 -0.0502768 +-0.0112267 0.038611 -0.000125945 +-0.0820175 0.148708 0.00217249 +0.0401192 0.0979552 0.0282751 +-0.0877344 0.132461 0.0447656 +-0.050513 0.143196 0.0143929 +0.0136958 0.0672461 0.0531523 +-0.0608764 0.033777 0.0140174 +0.00552563 0.0813962 0.0561869 +-0.0768476 0.148423 0.040238 +-0.0306152 0.0552238 -0.0173804 +-0.0567885 0.123073 -0.00794084 +-0.0255089 0.119394 0.0308336 +0.0223261 0.116663 0.0342169 +-0.0475261 0.0335634 -0.00837623 +-0.0582936 0.157998 0.00361947 +0.0051303 0.105879 -0.0208781 +-0.00896496 0.0383664 0.01874 +-0.0444005 0.0336982 -0.00787213 +-0.00659427 0.0391448 -0.0257394 +-0.0414965 0.0424145 0.0425934 +-0.0846517 0.135301 0.0472783 +-0.0634992 0.0973124 0.0426152 +-0.0488679 0.135513 0.00441971 +0.037597 0.0883595 -0.0147642 +-0.00186878 0.0388962 0.0287527 +-0.028023 0.0380941 0.0277005 +-0.0474992 0.0718408 0.0410603 +-0.0899231 0.113261 0.00935255 +0.044663 0.094574 0.0141596 +-0.0613242 0.174126 -0.0596453 +0.0131192 0.0913894 0.0524895 +0.0569982 0.0642691 0.00177262 +0.029911 0.120086 0.0121698 +-0.0341992 0.124637 -0.00378015 +-0.0714932 0.121802 0.0535223 +-0.060211 0.120578 -0.00928669 +0.0514409 0.0718132 0.00596213 +-0.0055446 0.0384588 0.0102869 +0.0401137 0.0933035 -0.00871241 +-0.077868 0.12372 -0.00684832 +-0.0438994 0.148485 -0.00356582 +-0.0478093 0.0898718 -0.0219802 +-0.050356 0.0501549 0.0156949 +-0.044116 0.168361 -0.0078879 +0.0274031 0.12156 0.0212208 +-0.0198084 0.119865 -0.0108751 +-0.00808629 0.0392239 0.0361848 +-0.074679 0.177203 -0.0452121 +-0.0717079 0.162415 -0.0429474 +-0.0817249 0.153192 0.027965 +-0.0830361 0.0952877 0.0313817 +-0.0410879 0.12806 0.000341883 +-0.0268762 0.104433 -0.0231038 +-0.028867 0.0620809 -0.0264195 +0.0400441 0.0834026 0.0333734 +0.00148401 0.0427923 0.0460657 +-0.021597 0.124211 0.0236359 +-0.0493581 0.0389276 0.0456407 +-0.0251636 0.119759 -0.0107128 +-0.0305455 0.0776911 -0.0335901 +0.0434944 0.0719976 -0.00179535 +-0.0730641 0.148297 -0.027137 +-0.0403032 0.0335749 -0.0236075 +-0.0838696 0.117633 -0.00194246 +-0.0183958 0.0360837 -0.0274195 +0.0306925 0.119003 0.0181751 +-0.0287719 0.0876257 0.045371 +-0.0150862 0.116786 -0.0157023 +-0.0226105 0.0393974 -0.0288175 +-0.00549593 0.114185 0.0409403 +0.0172148 0.0820814 -0.0286624 +0.0204946 0.0878829 0.0490965 +0.0144377 0.119508 -0.0127985 +0.0084105 0.0389663 -0.0233493 +0.042717 0.0705281 -0.00378792 +-0.0721585 0.0349122 0.00711943 +-0.0700117 0.176166 -0.0463861 +-0.0559881 0.0594067 0.0225062 +-0.0934924 0.121416 0.0122906 +0.0386755 0.101225 -0.00680717 +-0.00386806 0.105937 -0.0224388 +-0.0104995 0.091174 0.0564817 +-0.0012394 0.131315 0.00922853 +-0.0497873 0.0855205 -0.0216876 +-0.0168713 0.104463 -0.0227606 +0.0101956 0.0865002 -0.0314726 +-0.0534959 0.108443 0.038977 +-0.0548951 0.0610993 0.0270145 +-0.0755046 0.137255 0.0498073 +-0.0485754 0.0489523 -0.00913959 +-0.0331264 0.163719 -0.0148995 +-0.00945074 0.100225 0.0471086 +-0.0342862 0.0340473 0.0246456 +-0.0294128 0.0335741 -0.023325 +-0.026685 0.0349864 0.0500364 +-0.061923 0.12237 -0.00883821 +0.0501668 0.0567787 0.0302284 +-0.011856 0.127622 0.0255897 +-0.0429498 0.0338754 -0.00590515 +-0.000398209 0.131157 0.00667235 +-0.0163397 0.112374 -0.0190184 +-0.0651151 0.138224 0.0409979 +0.0355326 0.0544702 -0.00765701 +0.0264528 0.0348348 0.00531809 +-0.0438555 0.101385 -0.0214526 +-0.0234974 0.0498976 0.0468652 +-0.0436816 0.0651561 -0.0146099 +-0.00750789 0.0386054 0.00429878 +-0.0494719 0.0643044 0.0356628 +-0.0857911 0.0847131 0.0234468 +0.0202388 0.0735294 -0.0276011 +-0.0826135 0.153724 0.024657 +0.0377117 0.0799594 -0.0137509 +-0.0629014 0.0384346 0.017326 +-0.0564952 0.112508 0.0359017 +-0.00450514 0.0647631 0.0563697 +0.0228849 0.0849076 0.049031 +-0.0136101 0.17129 -0.0181213 +-0.0659308 0.168025 -0.05906 +0.00616007 0.130231 0.0233995 +0.0200475 0.0355684 0.0326031 +0.0207235 0.0355731 0.0309275 +-0.0914203 0.133738 0.0192152 +-0.0894168 0.0942943 0.0184246 +-0.0486795 0.137079 0.00840446 +-0.0268516 0.0981872 -0.024073 +-0.0296061 0.0499557 0.0431146 +-0.0645444 0.136771 0.0400377 +0.00960463 0.0369501 0.029234 +-0.0077992 0.0826766 -0.0378216 +-0.0705096 0.145613 0.0431794 +0.038042 0.109981 0.0137429 +-0.0323904 0.0346717 0.0421656 +0.0166765 0.12456 0.0286792 +0.0496183 0.0673428 0.0005193 +-0.0256005 0.175695 -0.0107936 +-0.0178219 0.0896296 -0.0373512 +-0.010186 0.0339025 -0.0217341 +-0.047823 0.0912927 -0.0217091 +0.0214379 0.121585 -0.00505488 +-0.063535 0.0741856 0.0400495 +-0.0175015 0.119559 0.0348485 +0.0378045 0.0701003 -0.0128173 +-0.06064 0.140962 -0.00527103 +-0.0745647 0.162191 -0.0132518 +0.0175747 0.0931801 -0.024649 +-0.0413443 0.159411 0.00325579 +-0.0692325 0.161954 -0.0115912 +-0.0598828 0.104039 -0.0184233 +-0.0275135 0.111195 0.0372083 +0.017284 0.0435398 0.0440147 +-0.043478 0.0633766 0.0405033 +0.0234516 0.0389975 0.0363054 +-0.0705331 0.144185 0.0442754 +-0.00248752 0.0897873 0.0564419 +-0.0728742 0.149812 -0.0379734 +0.0462595 0.0834414 0.00917612 +0.00549045 0.0459551 0.048539 +0.038562 0.0568882 0.0311978 +-0.0404973 0.10005 0.041322 +-0.0633155 0.125546 0.0454063 +-0.0425091 0.0520201 0.0393163 +0.00748602 0.041302 0.0454759 +-0.0652746 0.0378654 0.0394026 +-0.0208078 0.081314 -0.039065 +0.00735987 0.131518 0.0123881 +-0.0507686 0.0812185 -0.0210302 +0.0289317 0.0369927 0.000264038 +-0.0895362 0.119938 0.00329723 +0.0339261 0.0564017 0.0366181 +0.0387571 0.0780554 0.0349576 +-0.00249465 0.111426 0.042426 +0.0312166 0.0814571 -0.0197537 +0.00710696 0.112707 -0.0194319 +0.0182552 0.0736117 -0.028651 +-0.0747384 0.149908 -0.0288721 +-0.0142729 0.16729 -0.0212151 +-0.0796554 0.0776931 0.0301108 +-0.0308995 0.0385461 -0.0114399 +-0.0135011 0.162185 -0.0138332 +-0.062358 0.172308 -0.0618736 +-0.0779551 0.131028 -0.00606492 +0.0053093 0.0610791 -0.0314051 +-0.0622044 0.163118 -0.0415929 +-0.0875561 0.0900472 0.00346813 +-0.0693763 0.0627096 0.00438827 +0.0577316 0.0594186 0.0235899 +-0.076964 0.0686471 0.0102516 +-0.068516 0.156454 -0.00263594 +-0.0116226 0.0389602 0.0338935 +-0.053617 0.0500325 0.0119809 +0.0600963 0.059514 0.00816569 +-0.0667396 0.168684 -0.03081 +0.0461456 0.0820314 0.0061875 +-0.0433217 0.0391871 0.0438385 +0.0426589 0.0598822 -0.00401987 +-0.0496436 0.132456 0.0281905 +0.0526393 0.0635217 0.0285801 +0.0276786 0.107363 -0.0137282 +0.0429561 0.100122 0.0141624 +0.0420203 0.102869 0.0111608 +0.0352633 0.113355 0.0198926 +-0.0527821 0.0840792 -0.0215781 +-0.0731314 0.179106 -0.0550054 +-0.0772542 0.116219 0.0507045 +-0.0448961 0.131042 0.0121815 +-0.0659423 0.149401 -0.0328697 +-0.00381497 0.0882175 -0.036071 +-0.00434542 0.130565 0.019581 +0.0267602 0.0365817 2.43485e-05 +0.0169695 0.107204 -0.0175448 +-0.062502 0.0625858 0.0256444 +-0.00350098 0.0815126 0.05747 +0.000251433 0.0712294 -0.0349609 +-0.0113059 0.174226 -0.0217772 +-0.0348319 0.0943645 -0.0236767 +-0.0786972 0.0940445 0.0355566 +0.0177903 0.112808 -0.0155711 +-0.0318198 0.0887354 -0.0251772 +-0.0198038 0.0827175 -0.0390158 +-0.0190696 0.126125 0.000571573 +-0.0793168 0.102079 0.0331119 +0.021502 0.109802 0.0384228 +-0.0927296 0.124224 0.0362665 +-0.0209485 0.0682779 0.0508919 +0.041224 0.101389 -0.000814438 +-0.0468126 0.0898791 -0.022022 +-0.0348994 0.124334 -0.00549397 +-0.0341879 0.127198 0.0131711 +-0.049291 0.131272 -0.000642386 +-0.0359021 0.0337218 0.00658675 +-0.0837824 0.091132 -0.00556609 +-0.0335134 0.101547 0.0420338 +0.0210931 0.0429808 -0.0187308 +0.0424902 0.0555855 0.0321183 +-0.0557185 0.0570014 0.011057 +-0.0194912 0.112675 0.0392933 +-0.025189 0.156576 -0.00769163 +0.0400265 0.10701 0.00816505 +-0.0540901 0.153118 -0.00271435 +-0.00486253 0.101638 -0.0232055 +-0.0436472 0.0338067 0.00674466 +-0.0211436 0.168262 -0.0193322 +-0.0763578 0.141673 -0.00573846 +0.0465682 0.041911 0.0139236 +-0.0534989 0.109802 0.0378386 +-0.0811057 0.0748245 0.0195385 +0.0366496 0.0848209 0.0372394 +0.0520606 0.0608742 0.0294954 +-0.0810176 0.109646 0.0372868 +0.0260062 0.121547 0.0249766 +-0.0134941 0.0773082 0.0569169 +-0.0759274 0.108411 0.0376421 +0.0131577 0.0548631 0.0504935 +-0.0556243 0.0335264 0.0117574 +-0.0445311 0.119183 -0.0140568 +-0.0651138 0.155569 0.0262833 +0.0254608 0.100767 0.0422505 +-0.0354939 0.101471 0.0414493 +-0.0526525 0.152155 0.0150192 +-0.0578899 0.111162 -0.0167182 +-0.050471 0.0571806 0.032579 +-0.0881725 0.103664 0.0113862 +-0.0124346 0.0985527 -0.0264295 +0.0459022 0.0876188 0.00817319 +-0.0598831 0.0337324 0.0142605 +0.0420206 0.092566 0.0274869 +-0.0622887 0.152203 -0.0145776 +-0.0483961 0.150684 0.0105827 +0.00023463 0.0985537 -0.0263753 +-0.0719091 0.107919 -0.010771 +0.0379248 0.0575872 0.0318029 +-0.0684803 0.169194 -0.0285889 +-0.0388617 0.099995 -0.0218283 +-0.0776097 0.0796169 0.0342011 +0.00633113 0.0553726 -0.0306713 +0.0163088 0.048977 0.0444188 +-0.0838449 0.0817176 0.00149669 +-0.0216263 0.0341828 -0.0204844 +-0.0187634 0.0728738 -0.0388715 +-0.0626025 0.0388129 0.0247151 +-0.0373475 0.0347779 0.0107604 +-0.00558664 0.0376733 -0.0253626 +0.0599615 0.0678313 0.0171716 +-0.0295401 0.0904607 -0.0275932 +0.0284451 0.114053 0.0325229 +0.0418253 0.0830818 -0.00779351 +0.00746772 0.0343056 0.0166757 +-0.0865698 0.0833108 0.0104907 +-0.0729271 0.151083 0.037025 +-0.0781924 0.155673 0.0158655 +-0.0788514 0.116332 -0.0048797 +0.00512317 0.107303 -0.0203142 +-0.0103272 0.0383585 0.0166568 +-0.0348025 0.040194 -0.0297923 +-0.000491404 0.0814979 0.0573536 +-0.0290382 0.16386 -0.00530596 +-0.0694805 0.121794 0.053195 +-0.0704544 0.150585 -0.0434585 +-0.0639717 0.0459278 0.00771742 +-0.03056 0.124009 -0.00164624 +0.0144021 0.0780973 0.054252 +-0.0808546 0.140749 0.0461596 +0.0103353 0.0581557 -0.0299403 +-0.00949578 0.084298 0.0576062 +-0.0249013 0.0382346 0.0282196 +-0.0316389 0.0409999 0.051064 +0.0387381 0.0381712 0.0065938 +-0.0580729 0.0345066 0.0402882 +-0.0663198 0.150167 -0.0356652 +-0.064292 0.168172 -0.0605879 +-0.0314424 0.0679449 -0.0244554 +0.0603913 0.0595429 0.0161691 +0.0102649 0.129908 0.00205228 +-0.0440813 0.0336392 -0.0114358 +0.0309277 0.0497348 -0.00874 +-0.0267697 0.0750695 0.0452054 +-0.0791015 0.170034 -0.0382691 +-0.0864283 0.0954013 0.00141653 +0.00852849 0.0646614 0.0551736 +0.0473561 0.0503594 -0.00438005 +0.039601 0.107391 0.00564087 +-0.0861267 0.0833147 0.0194823 +-0.0786738 0.10815 0.0335843 +0.043481 0.0832455 0.0271768 +0.0281352 0.0915776 0.0443357 +-0.0298099 0.0677811 -0.0284707 +-0.0229012 0.115018 -0.0157633 +-0.0270064 0.0808968 0.0494715 +0.0404227 0.0885874 -0.0107894 +-0.087216 0.0937177 0.0257149 +-0.0690509 0.0654544 -0.0025414 +-0.0695527 0.04187 0.00402445 +0.00429234 0.0668529 -0.0329804 +-0.046755 0.0336866 -0.0157033 +0.0576125 0.0580597 0.0234109 +-0.000994561 0.129288 -0.0011666 +0.0454245 0.0904044 0.0131633 +-0.0438081 0.0899046 -0.0222231 +0.0199328 0.127154 0.0141603 +0.0114882 0.0963254 0.0495798 +0.0218142 0.117368 -0.0105004 +-0.0438465 0.0359346 0.00839642 +-0.0714426 0.0632696 0.00712846 +-0.0759079 0.150006 -0.00888842 +-0.06794 0.126772 -0.00890268 +-0.0343726 0.127227 0.0072164 +0.0578211 0.0537494 0.00717652 +-0.0483087 0.135537 0.00740851 +-0.0568342 0.0666429 0.0356476 +0.0481112 0.0431114 0.00725444 +-0.0425043 0.117982 0.0312159 +0.0144699 0.0976455 0.0479677 +0.0563061 0.0508424 0.00620646 +-0.0300578 0.163895 -0.00500569 +0.0102245 0.0823018 -0.0318649 +0.0598453 0.0608733 0.0191849 +-0.0620027 0.172528 -0.0545971 +-0.0197571 0.0971344 0.046022 +-0.0611783 0.167226 -0.0592729 +-0.00613038 0.0999315 0.0488982 +0.0488619 0.047436 -0.000620948 +-0.0208111 0.118967 -0.0119295 +0.00352005 0.0786345 0.0561775 +-0.071061 0.15959 -0.0439233 +-0.0765957 0.161076 -0.0289322 +0.0259255 0.123359 0.0149571 +-0.0746094 0.14858 -0.0188631 +0.0569296 0.058069 0.024171 +-0.0338241 0.152569 -0.00489392 +-0.0455023 0.0615609 0.0388319 +-0.0654625 0.143948 0.0405383 +-0.0560519 0.0345032 0.0407254 +-0.0709341 0.162789 -0.0122264 +-0.078067 0.144487 -0.00381208 +-0.094099 0.121442 0.0152795 +-0.00327736 0.0410332 0.0476549 +-0.0500433 0.165539 -0.00195268 +-0.0774288 0.0712256 0.0238415 +-0.00725841 0.0408714 0.048906 +-0.0833667 0.142023 0.0429747 +-0.0692361 0.153199 0.0337122 +-0.0360543 0.0398378 -0.0294769 +-0.0403231 0.0344611 0.0371557 +-0.0207576 0.069984 -0.0381379 +0.0122374 0.0737871 -0.031159 +-0.0241603 0.0665253 0.044272 +0.0399369 0.0860773 0.0331939 +-0.0809073 0.123633 -0.00507492 +-0.00964827 0.166616 -0.0197629 +-0.00664529 0.1307 0.0129838 +-0.0209361 0.0381808 0.0128466 +-0.0538563 0.0970443 -0.0219059 +-0.0662078 0.0723697 0.0374848 +-0.0398566 0.099981 -0.0216989 +-0.0494761 0.0600183 0.034326 +-0.0157667 0.0742966 -0.0389627 +-0.0875711 0.0977385 0.0245274 +-0.0529166 0.0566407 0.0191372 +0.000745542 0.0955759 -0.0312149 +-0.0688619 0.10089 -0.0150284 +-0.0130273 0.178658 -0.0225027 +-0.00548585 0.118301 0.0387556 +-0.063934 0.169417 -0.04458 +0.00224686 0.131192 0.0191047 +-0.0526917 0.0662141 -0.0112413 +0.0316126 0.104759 0.0353509 +0.0222548 0.0776918 -0.0264111 +-0.0685061 0.105552 0.0384458 +-0.0576201 0.135609 -0.00546838 +-0.00760577 0.128788 -0.000526473 +-0.0262755 0.0383516 -0.00662702 +0.0096904 0.0344726 -0.0051827 +0.0183649 0.0355244 -0.0106716 +-0.0892922 0.0996701 0.0134013 +-0.0748707 0.116421 -0.00675171 +-0.054019 0.0333099 0.015848 +-0.0927402 0.125562 0.0292626 +-0.00859312 0.0384098 0.0205847 +-0.0574617 0.0399955 0.0466824 +-0.0890962 0.0996533 0.0114017 +-0.0393675 0.120945 -0.0119262 +-0.0498057 0.144755 0.010389 +-0.0800056 0.108388 0.0313605 +-0.0694061 0.153071 -0.0482738 +-0.0529002 0.0701503 0.0387731 +-0.00979568 0.178776 -0.0277733 +-0.0749384 0.177982 -0.0467773 +-0.080224 0.0913049 0.0343483 +0.0274404 0.0399547 -0.00370609 +0.0064659 0.11274 0.0407332 +-0.0218179 0.0350986 -0.0195001 +-0.0723907 0.151114 -0.0412874 +0.00590733 0.0340449 -0.020637 +0.0460177 0.0800284 0.0189631 +-0.0576496 0.0629466 -0.00612077 +-0.0519433 0.0503866 0.0326949 +0.0377573 0.0757194 -0.0117756 +0.0434133 0.0930689 -0.00182579 +-0.0445007 0.165214 0.00483168 +-0.0196553 0.063928 0.0497256 +-0.0766812 0.154876 -0.00631355 +-0.0344859 0.0335245 -0.0299041 +0.0132509 0.0349689 -0.0195966 +-0.0264467 0.0459901 0.0505652 +-0.00131456 0.122836 -0.0102349 +0.0122169 0.129551 0.00276868 +-0.0137494 0.0383366 0.00873382 +-0.0445005 0.116602 0.0322264 +-0.0346258 0.0408721 -0.0296689 +-0.0706305 0.0401508 0.00122659 +-0.0765009 0.0716493 0.0271716 +-0.0708234 0.155869 0.0257344 +-0.0311277 0.0566897 -0.0153882 +-0.0896944 0.133694 0.0395953 +0.000231967 0.0783204 -0.0356621 +0.0338144 0.115724 0.00791606 +-0.0300912 0.15662 0.000215848 +0.0464982 0.0677769 0.0257597 +-0.0214151 0.0595466 0.0459898 +-0.0572298 0.0696188 0.0382761 +0.0366123 0.064635 0.0370437 +-0.0264937 0.0973851 0.0437224 +0.0404949 0.0513767 0.0324659 +-0.0350844 0.107815 -0.0201106 +-0.0205025 0.0486482 0.0489372 +-0.0610181 0.13697 -0.00676267 +-0.0906044 0.135075 0.015212 +-0.0194066 0.174211 -0.0159442 +-0.0394983 0.0719214 0.0419294 +-0.0883414 0.120307 0.04718 +-0.00748928 0.0978336 0.0520944 +-0.0846404 0.107661 0.0233457 +-0.0214945 0.10716 0.0418366 +0.0181073 0.0398088 -0.0196993 +0.0190777 0.0384168 -0.0157069 +-0.0636502 0.159498 -0.051954 +0.0283128 0.0754542 0.0444772 +-0.054074 0.15164 -0.0027148 +-0.083614 0.154208 0.0184012 +-0.056485 0.0343785 0.0390076 +0.0337482 0.102096 0.0349353 +-0.0782584 0.1764 -0.0490322 +0.0136057 0.0460076 0.0440344 +-0.00550326 0.0801395 0.0576107 +0.0334132 0.0849144 0.041374 +-0.0113988 0.126257 0.0287047 +-0.0655972 0.169628 -0.0389928 +-0.0832568 0.154212 0.0141255 +-0.0820934 0.0898659 0.0320222 +-0.067283 0.17966 -0.0595334 +-0.062529 0.150617 -0.0195776 +-0.0299377 0.0847457 -0.0326018 +0.0607552 0.0664989 0.0131533 +-0.0228597 0.101618 -0.023963 +-0.0618668 0.165619 -0.0600772 +-0.081854 0.0937329 -0.00756112 +-0.0679516 0.170855 -0.0560296 +-0.0295118 0.108456 0.0388793 +0.0482509 0.0539799 0.0309574 +0.00823122 0.079605 -0.0335706 +-0.0526044 0.041455 0.0460966 +-0.0496802 0.165544 -0.00294037 +-0.0910152 0.129688 0.0372352 +-0.0404973 0.0972715 0.0419896 +0.00850648 0.0772375 0.0559821 +-0.0717922 0.153989 -0.0428988 +-0.0507334 0.147965 -0.00270623 +0.0127323 0.0860509 0.0536553 +0.0565626 0.0508082 0.0192018 +-0.047499 0.10845 0.0392246 +-0.00917487 0.0875708 -0.0370938 +-0.0783316 0.0788746 0.032897 +-0.0896787 0.135012 0.00721892 +0.00550113 0.0883518 0.0561015 +-0.0423419 0.0335706 -0.0240051 +0.0405574 0.104219 0.0191648 +0.00286437 0.130486 0.00148286 +-0.0643911 0.133918 0.0402655 +-0.0620868 0.139878 -0.00655442 +-0.0557051 0.12209 -0.00891575 +0.0589396 0.0566475 0.0201757 +0.0386112 0.0603508 -0.0077511 +-0.0806595 0.0855046 -0.00754297 +-0.0718229 0.0965348 -0.0152102 +0.0459498 0.0806271 0.0191734 +-0.0515557 0.141366 0.000880581 +-0.0859779 0.0910726 0.0273961 +-0.0194809 0.0757644 0.0547346 +-0.0526104 0.0335154 0.00699108 +-0.080479 0.155159 0.0180021 +-0.0500595 0.117739 -0.014504 +-0.0638596 0.0939187 -0.018635 +-0.0469776 0.034208 0.0289371 +0.0315208 0.0994913 0.038731 +0.0444927 0.0610909 0.0304355 +0.0212529 0.1262 0.0189269 +-0.0254692 0.0509386 0.0434079 +0.0476579 0.0715472 0.019969 +0.022698 0.118017 -0.00920048 +-0.0384222 0.125448 0.0219859 +-0.038314 0.170034 -0.0122167 +-0.0530543 0.14469 0.0223994 +-0.00492317 0.0389099 -0.00470281 +0.0373499 0.0533605 -0.00643641 +-0.0696712 0.171569 -0.0347594 +0.0436954 0.0959268 0.0201595 +0.0285253 0.065965 0.0429423 +-0.0466394 0.0345455 0.0392313 +0.0412883 0.0886287 0.0299331 +-0.0251747 0.0383636 -0.0175696 +-0.0674763 0.168038 -0.0560148 +-0.0634115 0.166723 -0.0396505 +-0.0443984 0.0671335 0.0404051 +-0.0524987 0.100127 0.0423619 +-0.0837023 0.110333 0.0361338 +-0.0757541 0.0819089 0.037226 +-0.0475033 0.0973719 0.0436212 +-0.0418104 0.0899475 -0.0227382 +-0.0308563 0.174216 -0.00433975 +-0.00771604 0.130016 0.0212618 +-0.0691125 0.156051 0.011784 +-0.049655 0.0664173 -0.0130805 +0.0212145 0.0401172 -0.0107008 +-0.0418108 0.128972 0.0103834 +-0.0623408 0.164683 -0.0455908 +-0.0776167 0.145877 -0.00384676 +0.0294578 0.079544 0.0444105 +-0.052057 0.15088 0.0153954 +0.0551015 0.0521065 0.00221795 +-0.0568769 0.116868 -0.0135067 +-0.0856284 0.151402 0.00824006 +-0.0512523 0.116429 -0.0151143 +-0.0568623 0.0941345 -0.0215512 +-0.0153943 0.099814 0.0443638 +0.0368805 0.101462 -0.00941022 +-0.0293998 0.0355494 -0.0195486 +-0.040872 0.105663 -0.0204372 +-0.0279821 0.0821961 0.0475971 +-0.0106963 0.176084 -0.0292514 +-0.00933224 0.038323 0.0168951 +-0.0792032 0.10313 -0.00756064 +-0.0540718 0.118333 0.0357708 +0.00450074 0.0938217 0.0540732 +-0.0746595 0.15617 0.0170913 +-0.0708414 0.0994113 -0.0147342 +-0.0516111 0.0530832 -0.00753985 +-0.0486234 0.0532712 -0.0094518 +-0.031704 0.172718 -0.00384226 +-0.00272576 0.130091 0.00149765 +-0.092388 0.120024 0.00928585 +-0.037643 0.153612 0.00331291 +0.0356049 0.0577583 0.0355158 +-0.0668801 0.103821 -0.0153002 +0.0379456 0.10977 0.0171703 +0.0191769 0.0959952 -0.0230407 +0.0391807 0.0658814 0.0336832 +-0.0690863 0.0666121 0.0278101 +-0.089106 0.114375 0.0298659 +-0.0216155 0.0436703 -0.028439 +-0.0266188 0.0490904 -0.0254391 +0.000108091 0.0340814 -0.0198793 +-0.0171613 0.159788 -0.00903074 +0.041574 0.0397142 0.0168995 +0.019656 0.0347604 0.000281692 +0.00764804 0.128583 -0.00254334 +-0.0553782 0.151032 0.0287496 +-0.0528315 0.0558373 -0.00742005 +0.0115037 0.109883 0.0397133 +0.03545 0.105907 -0.00815474 +-0.0629114 0.115341 -0.0117985 +-0.0234208 0.172725 -0.0129655 +-0.0890673 0.101028 0.0173829 +0.0236359 0.056409 0.0445932 +-0.0187325 0.0374026 0.0529482 +-0.0394792 0.105608 0.0388858 +0.0151319 0.0603601 0.0498992 +-0.080949 0.137599 -0.00280806 +-0.0546196 0.0345652 0.0426785 +-0.0465281 0.033544 -0.0026564 +0.0395657 0.0998694 -0.00580754 +0.0101223 0.108705 -0.0195083 +-0.0104988 0.09255 0.056119 +0.0330296 0.116688 0.0147767 +-0.0910722 0.141959 0.0151878 +-0.00849613 0.0703395 0.0565554 +-0.0574961 0.0904385 0.0452768 +-0.0530142 0.0490552 0.0256583 +-0.0294931 0.0717523 0.039896 +-0.0311676 0.0348856 0.0474529 +-0.00876366 0.0347363 0.0436201 +-0.0666703 0.0612745 0.0188657 +0.0173575 0.0940342 0.0480767 +0.0284806 0.111435 0.0343318 +-0.0468308 0.0941893 -0.021914 +-0.0265985 0.0562164 -0.027412 +-0.0871843 0.135176 0.0441499 +-0.063207 0.06374 0.0280276 +-0.0345021 0.0647803 0.0405279 +0.0597837 0.0567045 0.0121686 +-0.0474843 0.0818872 0.0439119 +-0.0589237 0.11399 -0.014753 +-0.0490056 0.122549 0.0307687 +0.0548584 0.0611516 -0.00113589 +-0.0458004 0.0353434 -0.021332 +0.00134052 0.0539375 -0.0306386 +-0.0278278 0.177181 -0.00696301 +-0.0427537 0.0783105 -0.0194623 +0.00651372 0.089712 0.0551929 +-0.0494951 0.0819134 0.044146 +0.0305588 0.055351 -0.0157687 +0.0297469 0.0929269 0.0431563 +0.0125099 0.0519837 0.0495237 +0.0459653 0.0806289 0.018177 +-0.053548 0.149321 0.0244145 +-0.0317948 0.0651814 -0.020436 +-0.019834 0.0868717 -0.0379507 +-0.0119886 0.038466 0.00715809 +-0.0770198 0.170132 -0.03325 +-0.0269539 0.17866 -0.00745161 +-0.0756616 0.0695139 0.0239361 +-0.0474944 0.116586 0.0319739 +-0.0671319 0.0355924 0.0145398 +-0.0783661 0.108548 -0.00557568 +-0.0284012 0.0860445 -0.0346283 +0.0257301 0.0379057 0.0280361 +0.00740689 0.0389878 -0.0235836 +-0.0629696 0.131105 0.0405653 +-0.0380606 0.157756 -0.011216 +-0.0361107 0.0459963 0.0412564 +-0.053455 0.0625326 0.0304805 +-0.0731839 0.178324 -0.0475338 +0.0137018 0.0888713 -0.0301465 +-0.0894038 0.140678 0.0331776 +-0.0114925 0.06602 0.0547394 +-0.0853984 0.0872002 -0.00151975 +-0.00957697 0.128995 0.00181181 +0.0571986 0.0536922 0.00517882 +0.0181761 0.0974249 -0.0228373 +0.0414526 0.0425673 -0.000513932 +-0.0423634 0.121318 -0.0123099 +-0.0854479 0.0898939 -0.00155092 +-0.0136017 0.0392183 -0.0267222 +-0.0353577 0.174409 -0.00212011 +-0.0930586 0.122743 0.0102788 +0.0208421 0.0882147 -0.0254487 +0.000267595 0.0697483 -0.0342392 +0.0443612 0.0458824 -0.00271937 +-0.0794062 0.147442 0.0402641 +0.0285362 0.120755 0.0202147 +-0.0354498 0.0346389 0.0415402 +0.0189212 0.0875932 -0.0268145 +-0.0326685 0.0478014 -0.0229356 +0.0213046 0.0374522 0.0382518 +0.0119628 0.111848 -0.018535 +-0.0754368 0.114522 0.050709 +-0.0575342 0.0415089 -0.00843308 +-0.0289002 0.0348381 0.0445217 +-0.0558188 0.0336396 0.0205147 +-0.0294901 0.0946648 0.0450535 +0.0140142 0.0519753 0.0481823 +-0.0499383 0.162625 -0.0047964 +-0.0285131 0.111188 0.0369648 +-0.0777024 0.176292 -0.0501047 +-0.0458377 0.0970756 -0.021885 +-0.0647866 0.167644 -0.0344082 +-0.08472 0.111015 0.033569 +-0.0624074 0.1491 -0.0095736 +0.0455563 0.078849 0.0217954 +0.0386173 0.0673644 -0.0117551 +-0.0516941 0.147804 0.0164166 +-0.0638593 0.0953482 -0.0183667 +-0.0887889 0.117194 0.003272 +-0.0667452 0.0342007 0.0124321 +-0.0921816 0.132336 0.0152245 +-0.0790475 0.168047 -0.0349702 +-0.0445079 0.0424992 0.043443 +-0.0914924 0.12135 0.00727423 +0.00205109 0.0347195 0.0440743 +-0.0757523 0.0687815 0.0210323 +0.0254197 0.0394349 0.0320923 +0.0445209 0.095967 0.011159 +0.00418461 0.0908826 -0.0329329 +-0.0447434 0.0753343 -0.0181391 +0.0465277 0.0497043 0.0301725 +-0.0231678 0.124994 -0.000333927 +-0.0261386 0.0359205 -0.0192491 +0.000314733 0.0597904 -0.0332055 +-0.0664067 0.0336797 0.00582425 +-0.0179785 0.068344 0.053543 +0.0128834 0.035495 0.00385056 +-0.064012 0.0432207 0.0306772 +0.0356112 0.0942094 0.0375896 +0.0433586 0.0589158 -0.00469925 +-0.0741431 0.153026 0.0335308 +-0.0366764 0.0421455 0.0447176 +-0.0616357 0.158429 -0.0245888 +-0.0777899 0.164478 -0.0251991 +-0.0774203 0.177255 -0.0472003 +-0.0723466 0.0663158 0.0221054 +-0.00945876 0.0366145 -0.0165831 +-0.00782909 0.0896438 -0.0364286 +-0.0483458 0.0338972 -0.0143683 +-0.0548931 0.111218 -0.0174922 +0.0263272 0.0545944 -0.0208638 +-0.078467 0.147461 0.0407301 +0.0472196 0.0430325 0.00527833 +0.0313294 0.118714 0.0127065 +-0.00880796 0.0868775 -0.037347 +-0.054028 0.0344996 0.0411656 +-0.00639115 0.121199 -0.012466 +0.0300864 0.0564003 0.0398351 +-0.0790124 0.0782686 0.0315155 +-0.0134683 0.0964232 0.0523159 +-0.0763221 0.159003 -0.0110053 +-0.0600876 0.0367271 0.0456071 +0.0364957 0.049851 0.0316154 +0.00849848 0.0402756 0.0453316 +0.0205837 0.0754832 0.0508919 +-0.071014 0.148895 -0.037822 +0.0170761 0.115474 -0.0144429 +-0.063767 0.0615586 0.0227478 +0.0437965 0.0987467 0.00816432 +-0.0513326 0.0542594 0.0137993 +-0.0414552 0.0341096 -0.00949275 +0.0395669 0.101281 -0.00480928 +-0.0918243 0.128307 0.0322434 +-0.0474749 0.0945717 0.0440635 +-0.0704486 0.16924 -0.0264473 +0.027192 0.101376 -0.017349 +-0.0895884 0.114751 0.0258504 +-0.0713206 0.156784 -0.042915 +0.0384501 0.0914717 0.0346309 +0.0214747 0.0996539 -0.0214946 +-0.0106582 0.0527176 -0.0332954 +0.00773558 0.128847 0.0268569 +0.0202904 0.0912514 -0.02462 +0.00332905 0.0553943 -0.0309954 +-0.0921247 0.116117 0.0353113 +-0.0146765 0.0526113 -0.0325234 +-0.0657759 0.0410192 0.0130518 +0.0587274 0.0538199 0.013179 +0.0291394 0.102042 -0.0160578 +-0.0701142 0.0625797 0.0062174 +0.0457389 0.0876049 0.0111625 +0.00224905 0.118538 -0.0156887 +0.0520156 0.0596733 -0.00368903 +-0.0891532 0.136419 0.0102028 +-0.0400348 0.0344619 0.0337052 +-0.0461887 0.0335082 0.00469546 +-0.0923435 0.115998 0.0113188 +-0.00713141 0.127357 0.0287426 +0.0252624 0.0747714 -0.0251152 +-0.0453044 0.0587827 0.038737 +0.03635 0.0368836 0.00917982 +-0.0527446 0.0753599 -0.0182797 +-0.0728584 0.132623 0.0509226 +-0.00672844 0.0698676 -0.0361675 +0.0413912 0.0459759 -0.00421898 +-0.0201655 0.0348026 0.0446658 +-0.0641545 0.0391804 0.0263583 +-0.00246627 0.111608 -0.0202454 +-0.0134033 0.110892 -0.0194483 +0.043074 0.0401669 0.0073914 +0.0192967 0.0693907 -0.0288221 +-0.0619039 0.16157 -0.0305885 +0.00333358 0.0341967 0.0104872 +0.0421258 0.100042 0.000179811 +-0.0386776 0.11516 -0.0158482 +-0.00807178 0.0386982 0.0276584 +-0.0756134 0.163772 -0.0350068 +-0.0672387 0.155112 0.00519073 +0.0276118 0.053509 0.0397341 +-0.0779406 0.158305 -0.0189233 +-0.00470743 0.0627772 -0.0352137 +0.0325643 0.0981766 0.0384761 +0.0296733 0.0481683 -0.00874324 +0.0113105 0.059545 -0.0296135 +-0.0653574 0.0733073 0.0386226 +-0.0120884 0.101067 0.0439606 +-0.0268179 0.0735627 0.0438663 +-0.0513902 0.0530791 0.0216216 +-0.0678614 0.042287 0.00944731 +-0.0899071 0.133806 0.0352156 +-0.0122404 0.0385117 0.0269697 +-0.0719375 0.16298 -0.0125698 +0.0473212 0.0533258 -0.00537345 +-0.030503 0.0588732 0.0373493 +-0.0905557 0.120241 0.0451196 +0.0219406 0.0388423 0.0393076 +-0.0672891 0.178209 -0.0595336 +0.0302182 0.0535528 0.0382346 +-0.0815406 0.110006 0.0333062 +-0.0477684 0.0811966 -0.0205178 +-0.048671 0.138621 0.0113976 +-0.0562999 0.0506286 -0.00237306 +-0.0854189 0.0791501 0.00750351 +0.000105856 0.117482 -0.0165473 +-0.0624071 0.149633 -0.00268499 +-0.0682914 0.172271 -0.0560251 +-0.0642448 0.0333797 -0.00245942 +0.0203456 0.053671 -0.0267089 +-0.0711203 0.163576 -0.0137477 +-0.0126641 0.0511309 -0.0317686 +-0.066211 0.180426 -0.0565833 +0.0266688 0.0892152 -0.0224539 +0.01736 0.128384 0.0132094 +-0.0541813 0.154195 0.0142529 +-0.0799749 0.0710714 0.0163832 +-0.0379044 0.0336424 -0.0213286 +-0.0747588 0.0669346 0.0175421 +-0.0221189 0.12668 0.005878 +-0.0623544 0.152149 -0.0255836 +0.0137867 0.0377633 0.0443361 +0.0469104 0.0589185 -0.00506663 +-0.0188119 0.0964492 -0.0282644 +-0.000384494 0.130522 0.00237337 +-0.0647338 0.0418755 0.0296857 +-0.0418518 0.0999485 -0.0214177 +-0.0135206 0.0432479 0.0507363 +0.0314548 0.113206 0.0298812 +0.0211096 0.0343656 0.00467028 +0.0493524 0.0516707 -0.00371978 +0.0324504 0.0916248 0.0417895 +-0.0405477 0.118695 -0.0135582 +-0.0421609 0.128746 0.00435225 +0.00852878 0.034888 0.0362651 +-0.0599768 0.12527 -0.00809043 +-0.0624255 0.16468 -0.0465913 +0.0305387 0.114047 0.0302625 +-0.0209297 0.158088 -0.00822134 +-0.00449554 0.0633716 0.0561592 +0.00751849 0.0440876 0.0454461 +-0.0617319 0.160008 -0.0275856 +-0.00111302 0.130629 0.0207594 +-0.000792652 0.0894877 -0.0349748 +-0.0534886 0.0862338 0.0454573 +0.0102426 0.0752832 -0.032327 +-0.0866178 0.151117 0.0269024 +0.00586712 0.0991316 -0.0229749 +-0.018487 0.0772258 0.0557066 +-0.0220963 0.0623062 0.0451655 +-0.0263156 0.124827 0.00142734 +0.00449781 0.0519669 0.0532713 +-0.0318681 0.105727 -0.021166 +-0.034171 0.0822565 -0.0245355 +-0.0160192 0.104518 -0.0227486 +-0.0336086 0.0394857 -0.0301589 +0.0179261 0.0900567 0.048881 +0.028994 0.0915879 0.0438177 +0.0419459 0.0625408 -0.0027477 +-0.0623435 0.161536 -0.0425937 +0.0521127 0.0595383 0.0295528 +0.00603967 0.0344425 -0.0152712 +-0.0200036 0.0384998 -0.0166705 +0.0335055 0.0549395 0.0359782 +0.0413899 0.0475369 -0.00516876 +0.0571049 0.0594437 0.0244408 +-0.0642323 0.124186 0.0475964 +-0.0104933 0.0952299 0.0545267 +0.0183283 0.0593891 -0.0275077 +0.0556724 0.0698728 0.00398853 +0.02895 0.086199 0.0437135 +-0.00575467 0.1008 0.0460186 +-0.0117555 0.0969094 -0.0306933 +-0.0570352 0.129621 -0.00626418 +-0.06396 0.034704 0.0249317 +-0.0269668 0.0674701 -0.0325423 +0.00372222 0.0941665 -0.0317421 +-0.0708312 0.0951391 -0.0158707 +0.0351494 0.0633173 0.038442 +0.0303372 0.119206 0.0194646 +-0.0174811 0.118153 0.0357243 +-0.0928105 0.116053 0.0203106 +-0.012498 0.078722 0.0572931 +0.0102589 0.100444 -0.0223447 +0.0311369 0.0982118 0.0399163 +-0.0870966 0.0995146 0.0044219 +0.0372771 0.100696 0.0312566 +-0.0464652 0.16842 -0.00496016 +-0.0340766 0.172586 -0.0145127 +-0.0632966 0.144361 -0.00960502 +-0.00396533 0.128634 -0.00247998 +-0.0810179 0.0964125 -0.00756981 +-0.0296304 0.159454 -0.0131553 +0.0323433 0.0592178 0.0396143 +0.0171685 0.0490344 0.0439112 +-0.0798847 0.0706373 0.0145533 +0.00550249 0.0758881 0.0564988 +-0.0285046 0.0588067 0.036767 +-0.054422 0.152991 0.0228754 +-0.0663081 0.150341 0.0377708 +-0.0409099 0.173193 -0.0056112 +-0.00259587 0.0391262 -0.0253465 +0.0394316 0.0807401 0.0342345 +0.048793 0.049707 0.0281736 +-0.0225905 0.0365035 -0.0286129 +-0.0185117 0.0387718 -0.0147573 +-0.0889514 0.121274 0.00229944 +0.0255827 0.034587 0.0128177 +-0.0258582 0.100162 -0.023852 +-0.0317095 0.0382098 0.0512104 +-0.0608875 0.104029 -0.0182853 +-0.0577034 0.0591273 0.0216745 +-0.0316861 0.0553325 -0.0133983 +-0.0579004 0.0336435 0.0147513 +-0.050636 0.0604891 -0.0105672 +-0.0484979 0.101507 0.0419588 +-0.0735846 0.159652 -0.032921 +-0.0596849 0.136693 0.0347693 +-0.0527883 0.0490273 0.0246529 +-0.00587038 0.038496 0.0083708 +0.0443161 0.095966 0.0141619 +-0.0355281 0.0832646 0.0432735 +-0.0552893 0.160933 0.00328411 +-0.0694051 0.177621 -0.0490523 +0.0553162 0.0608807 0.0271604 +-0.0115038 0.082913 0.0576973 +0.00149573 0.118307 0.0388892 +-0.0643923 0.178295 -0.0607754 +-0.0696234 0.0702067 -0.00731499 +-0.0684446 0.156174 0.0134711 +-0.0631402 0.158352 -0.0425984 +-0.028277 0.0807444 0.0465032 +-0.0851037 0.143224 0.00618561 +-0.0701909 0.171451 -0.0335218 +-0.0542038 0.149302 0.0263885 +-0.0230864 0.0416339 0.0540702 +-0.0848397 0.124371 0.0492354 +-0.0509437 0.0349503 0.0448676 +0.0147035 0.0490065 0.0456198 +-0.059742 0.156334 0.00641085 +-0.07522 0.0688188 0.0015368 +-0.0196569 0.0390707 0.0375255 +0.0459174 0.0834201 0.0141703 +-0.0785236 0.0894249 -0.0105705 +-0.0200463 0.0893341 0.0549931 +-0.0173075 0.11558 -0.0164072 +0.000516136 0.0760027 0.0580883 +0.042165 0.0859172 -0.00778247 +0.0203197 0.0664896 -0.0280597 +-0.0604906 0.0959808 0.043977 +-0.00180047 0.0840422 -0.0369301 +0.0106204 0.119324 -0.014581 +0.000242427 0.128645 -0.00250259 +-0.0544918 0.0876045 0.0451014 +-0.081252 0.0993542 0.0322994 +0.0225815 0.0632207 0.0466294 +-0.0528036 0.129718 0.0341858 +0.0388075 0.10554 0.0251669 +-0.071237 0.156366 0.0212013 +-0.0419921 0.0349859 0.0415962 +0.0319555 0.0413937 0.028007 +-0.0465003 0.112564 0.0357108 +0.00310161 0.111606 -0.0202814 +0.0306552 0.102095 0.0374778 +0.0158981 0.0576764 0.0492073 +-0.036508 0.127508 0.00348399 +0.0403284 0.0574912 -0.00511853 +-0.06805 0.157495 -0.00534926 +-0.0870566 0.0847034 0.0124776 +-0.0785035 0.127443 0.053282 +0.0093755 0.0479282 -0.0271091 +-0.00151782 0.111398 -0.0200294 +-0.0386619 0.0336282 0.00792475 +-0.0321818 0.0666221 -0.0204419 +-0.0516478 0.0334795 -0.00363494 +-0.0505323 0.0346392 0.0434961 +-0.0871097 0.129792 0.0470428 +-0.00115829 0.0378141 0.0044798 +0.00250327 0.0351261 0.00210209 +0.0232927 0.0720269 -0.0262872 +0.0386441 0.0772022 -0.0107761 +0.00730214 0.0624461 -0.0313742 +-0.0601285 0.0334799 -0.007174 +-0.0311809 0.165241 -0.0158459 +-0.0456556 0.126096 -0.00729728 +0.01482 0.0920349 -0.0274402 +-0.0578658 0.154169 0.0274197 +-0.0766831 0.148629 -0.00786722 +-0.0548976 0.0574275 -0.00541424 +-0.0213746 0.0936314 -0.0333712 +-0.0795038 0.127439 0.0531413 +-0.0719602 0.0381531 0.00797803 +0.0465231 0.0539629 0.0319545 +-0.0327551 0.126411 0.00489661 +-0.0907403 0.135093 0.0162106 +-0.0798437 0.119249 -0.00499812 +-0.0195891 0.186548 -0.0163318 +-0.0336818 0.0474202 0.0430149 +0.0387003 0.0847793 0.034951 +0.005123 0.108732 -0.0201833 +-0.0355723 0.127236 0.00383072 +-0.0593755 0.0706339 0.0387044 +-0.0701237 0.0337481 0.00141754 +-0.0596389 0.0645563 -0.0073211 +-0.0247044 0.0349045 0.050534 +-0.0698349 0.155896 0.010068 +-0.00664542 0.0496313 -0.030799 +-0.0560508 0.049202 -0.00336342 +-0.0846449 0.0777798 0.00851725 +0.0428444 0.0958802 0.0241636 +0.0226208 0.0505695 0.0412719 +-0.0421939 0.165153 -0.0106292 +-0.0530779 0.153128 -0.00337034 +-0.0183995 0.128105 0.0144964 +0.0110096 0.125946 -0.00574203 +0.0135498 0.109816 -0.0183273 +0.0246987 0.1167 0.0323736 +-0.0323986 0.169744 -0.00487272 +0.0414995 0.0513848 0.032599 +-0.0820948 0.0748388 0.0105311 +-0.0771842 0.102138 0.0352151 +-0.0627985 0.161541 -0.0235962 +0.0203907 0.0490438 0.0415331 +-0.0284862 0.120462 -0.00941436 +0.00850898 0.0990197 0.0481875 +0.0181919 0.0781799 0.0527467 +-0.0323958 0.0383608 -0.00233468 +-0.0198811 0.121697 -0.00881459 +-0.0289402 0.154865 -0.00285823 +-0.055522 0.0600566 -0.00554029 +-0.0446949 0.0680713 -0.0159309 +-0.0505296 0.0657745 0.0361047 +0.0251595 0.0995713 -0.0194056 +0.0456643 0.0876028 0.0121678 +-0.0533672 0.143136 0.0253913 +-0.05283 0.138085 0.0270749 +-0.0324865 0.0974182 0.0443398 +0.00543862 0.118556 -0.0157347 +-0.0704807 0.1602 -0.00768602 +0.00476485 0.0378127 -0.0129945 +0.0453303 0.0875809 0.0171699 +0.00844159 0.109753 0.0403226 +0.0199305 0.0645206 0.0480779 +-0.0865012 0.0967606 0.00143514 +0.0239407 0.0433254 -0.00969837 +-0.0464991 0.0818806 0.0436011 +-0.0365053 0.0832925 0.043701 +-0.0511539 0.144707 0.0143676 +-0.0354688 0.0973337 0.0432864 +0.0315086 0.0361416 0.0180806 +-0.0620392 0.152203 -0.0175795 +-0.00174908 0.0726707 -0.0356483 +0.0482658 0.0482112 0.0273759 +0.0205204 0.0686316 0.0489712 +0.0055446 0.129937 0.0246284 +-0.0509363 0.126898 0.0333376 +0.0503401 0.0525815 0.0286903 +-0.0663805 0.0356243 0.0152158 +-0.0631059 0.039729 0.0160762 +-0.0794629 0.0702542 0.0118898 +-0.0440204 0.0437247 -0.0153148 +-0.0258047 0.0811626 -0.0373791 +-0.0654527 0.156561 -0.05302 +-0.0801896 0.0926573 0.034266 +-0.0226625 0.0493576 -0.0281762 +-0.076512 0.15561 -0.00689633 +-0.0316228 0.0384779 -0.00967109 +0.0073096 0.0609801 -0.0307365 +-0.036779 0.0827886 -0.0223365 +-0.0454595 0.0846983 0.0440929 +-0.0310517 0.0636961 -0.0214339 +0.044971 0.0748214 0.0226935 +-0.0245671 0.182966 -0.016053 +-0.0343794 0.125292 -0.00246071 +0.0260218 0.0493062 -0.0196675 +0.00451349 0.0786214 0.0559314 +-0.0272596 0.0409813 0.0537728 +-0.0865558 0.105007 0.0203641 +-0.0427952 0.0347556 0.00787321 +-0.0294944 0.0889496 0.044252 +-0.0691615 0.0832998 0.0419252 +-0.077704 0.175863 -0.0450747 +-0.0595653 0.0407951 0.0449735 +-0.0118194 0.129824 0.0125318 +-0.0304269 0.169744 -0.0072967 +0.00750596 0.0674413 0.055134 +-0.0895098 0.0942825 0.014433 +0.0566953 0.0550372 0.00319006 +0.0358581 0.0995241 -0.0113664 +-0.0541815 0.15229 0.0244282 +-0.0924737 0.125588 0.0362608 +-0.0750911 0.110634 0.0449752 +-0.0272685 0.0368017 0.0538626 +-0.0614955 0.104283 0.0410789 +-0.0721148 0.067315 0.0248191 +0.034236 0.094243 0.0391072 +-0.0724407 0.178857 -0.0487083 +-0.06691 0.033448 -0.00125687 +-0.0660379 0.0349778 0.0329828 +-0.0701097 0.156012 0.00122102 +-0.0157478 0.0352634 0.050467 +-0.0465076 0.160794 0.0071118 +-0.0156218 0.0365183 -0.0177136 +-0.00687536 0.0389886 0.0330493 +0.0201949 0.0959886 -0.0227072 +0.00536718 0.125777 0.0317922 +-0.0689036 0.105186 -0.0135662 +-0.0576505 0.0508003 0.0036576 +-0.0372877 0.0353832 0.0246264 +-0.0766222 0.0824671 -0.0115781 +-0.0570813 0.0344654 0.0405363 +0.0284042 0.0431456 -0.00552671 +-0.078005 0.151454 -0.00188508 +0.00274784 0.0953419 -0.0309592 +-0.0764328 0.147234 -0.00786196 +-0.0187399 0.0656914 -0.0372373 +-0.0626784 0.0670893 0.0340154 +-0.066213 0.0377522 0.0375383 +0.00946024 0.0346841 0.0420404 +-0.00763703 0.046711 -0.0299661 +0.0217664 0.106013 0.0404033 +0.0159395 0.0900955 0.0512828 +-0.0714939 0.126019 0.0527835 +-0.035368 0.122868 0.0260927 +0.0397669 0.0885289 -0.0117744 +-0.0235296 0.159196 -0.00227474 +-0.0299919 0.0383903 -0.00556396 +0.00840449 0.0360838 -0.0229864 +-0.0688351 0.0951745 -0.0162656 +0.0188202 0.124811 0.0265908 +-0.0542034 0.0477679 0.0266683 +-0.00718512 0.0384992 0.0226001 +0.0191993 0.0352366 0.0345338 +-0.0486962 0.13553 0.00541025 +0.0065027 0.0533154 0.0528127 +-0.064997 0.0410349 0.013689 +0.0235192 0.107033 0.0392433 +-0.0526101 0.0632972 -0.0100113 +0.0288769 0.120252 0.0217702 +-0.00882418 0.0896578 -0.0365764 +-0.0563459 0.0335397 0.00260276 +0.0287652 0.114389 -0.00726895 +0.0564669 0.0577845 0.00118215 +-0.0623836 0.163016 -0.0556039 +-0.0235351 0.118111 0.0331575 +0.0443232 0.0889197 0.0231574 +0.0349753 0.114037 0.00545779 +0.0269837 0.108749 0.0374141 +-0.000496913 0.056284 0.0547664 +-0.0889882 0.115854 0.0042936 +-0.0688144 0.0851338 -0.0175228 +-0.0304795 0.0746468 0.0405648 +-0.0616784 0.0692367 -0.0132074 +-0.0554108 0.0334149 -0.00799207 +-0.0610813 0.0342293 0.0311986 +-0.0655517 0.155937 0.0246661 +-0.0767597 0.163153 -0.0191399 +-0.0140741 0.0388251 0.0317136 +-0.02858 0.0731702 0.040795 +-0.0480086 0.134685 0.0198054 +-0.00949027 0.107257 0.0434611 +-0.0224071 0.0510134 0.0440995 +0.0026516 0.0341771 0.00670019 +-0.00282121 0.086807 -0.0363939 +0.00461042 0.092806 -0.0323339 +0.0444404 0.0425371 0.0222477 +-0.0251232 0.0838362 0.0531591 +-0.0711154 0.155676 0.00670049 +-0.0144639 0.0977101 -0.0275565 +-0.0176152 0.0407641 -0.0279656 +-0.0273216 0.038344 -0.00129213 +-0.0781679 0.14865 -0.00288263 +-0.071113 0.171733 -0.033865 +-0.0362701 0.0365605 0.0458807 +-0.0245074 0.0384654 -0.0082311 +-0.0768529 0.106269 -0.00826114 +0.0173624 0.088714 0.0498122 +-0.0872512 0.106353 0.0133638 +-0.0647985 0.124215 0.0485 +0.0274255 0.0686124 0.0431235 +-0.0275944 0.0717748 -0.0345689 +-0.00449702 0.0590031 0.0543234 +-0.00869265 0.0598566 -0.0344628 +-0.0624896 0.106999 0.0393995 +0.00296819 0.0986498 -0.0244883 +-0.0716108 0.0701594 -0.00639514 +-0.0454969 0.0733342 0.042072 +0.0217583 0.0505253 0.0417779 +0.0599479 0.0692188 0.0141571 +0.0159709 0.0859869 -0.0291978 +0.0474137 0.0671743 0.000684928 +0.045537 0.0890033 0.0131643 +0.025235 0.0690602 -0.0242719 +-0.0140104 0.117853 -0.0148385 +-0.0417786 0.156522 0.00614116 +0.0529468 0.0608894 0.0290245 +-0.0623778 0.167137 -0.0608155 +-0.043781 0.0422821 -0.0183128 +0.0194047 0.0727279 0.0509389 +-0.025431 0.180214 -0.00870569 +0.00163035 0.0962275 -0.0299038 +-0.0609057 0.119508 -0.00974426 +-0.0265539 0.180361 -0.00771033 +-0.00586693 0.104511 -0.0229142 +-0.0446124 0.0534121 -0.0108089 +-0.0607974 0.125499 0.0419374 +-0.0676844 0.160922 -0.0559942 +-0.0718937 0.0376106 0.00231258 +-0.0769618 0.103489 0.0349575 +-0.0136243 0.0450811 -0.0280269 +-0.0656393 0.145367 0.0403005 +-0.067848 0.0994807 -0.015636 +-0.0674005 0.156127 0.0138467 +-0.0814089 0.141772 -0.000809353 +0.0343092 0.113032 0.0252402 +-0.0378129 0.0900392 -0.0237743 +0.0410972 0.0779427 0.031296 +-0.0594968 0.104294 0.0413247 +-0.045045 0.0657131 0.0396946 +0.0424943 0.0569701 0.0318321 +0.0380924 0.0618152 0.0338774 +-0.0181385 0.038277 0.0223668 +-0.0680503 0.114246 0.0489904 +-0.089636 0.0902445 0.0164491 +-0.0259323 0.124597 0.000115117 +-0.0341212 0.124555 0.022076 +-0.0117695 0.075665 -0.0382916 +-0.0666005 0.156329 0.0184798 +0.0143467 0.0580862 -0.0289605 +0.00620145 0.0832401 0.0564613 +-0.07299 0.158232 -0.0339184 +0.0179038 0.0866718 -0.0278625 +-0.0447879 0.085543 -0.0216723 +0.0240528 0.0347605 0.00303304 +0.0471472 0.0437632 0.0216364 +-0.0254743 0.105723 0.0415881 +-0.0914335 0.120003 0.00730918 +-0.0381624 0.035793 0.0434599 +-0.0470742 0.127422 -0.00463291 +0.000501079 0.0620074 0.0565701 +-0.0488714 0.104198 -0.020417 +-0.00949444 0.063336 0.0558203 +-0.0227837 0.0742285 -0.0385317 +-0.00949145 0.115547 0.0400498 +-0.0665386 0.0804536 0.042224 +0.00148883 0.121012 0.0365952 +-0.024281 0.069418 0.0457102 +0.019893 0.114777 -0.0136897 +-0.0904011 0.115144 0.0307537 +-0.00370938 0.0627709 -0.0350699 +-0.00367406 0.0555102 -0.0326331 +-0.0125077 0.0773203 0.0572074 +-0.0574951 0.093265 0.0451928 +-0.0942113 0.120123 0.0212925 +-0.0213358 0.165379 -0.00997448 +-0.0615068 0.0789665 0.042503 +0.00239149 0.0343213 0.0156312 +-0.0639126 0.11101 -0.0139478 +0.0381439 0.103967 -0.00387277 +-0.0816033 0.101897 -0.00556882 +-0.0582639 0.12123 0.0402958 +-0.0729322 0.156105 0.0220745 +-0.0514974 0.086244 0.0456131 +-0.0876158 0.137864 0.0416648 +0.0120082 0.0967361 -0.024421 +0.0147782 0.0929392 -0.0263979 +-0.0510555 0.150177 -0.00351578 +-0.0165661 0.163924 -0.0100865 +-0.00519498 0.0390091 -0.00671136 +-0.021716 0.0641363 -0.0354017 +-0.0523357 0.136679 0.027812 +0.0335961 0.0633113 0.0397473 +-0.0384865 0.0492045 0.0394845 +-0.0339969 0.152567 -0.000573454 +0.0175453 0.0645325 0.0499023 +-0.0895247 0.139293 0.0351741 +-0.0870044 0.115772 0.00228167 +-0.0852267 0.0792333 0.0184927 +-0.0927665 0.116031 0.013321 +-0.0240588 0.111793 -0.0183639 +0.0191819 0.123133 0.0296014 +0.0163312 0.0767998 0.0535416 +-0.0834123 0.0856961 -0.00454328 +-0.0614974 0.0904473 0.0454009 +-0.0648003 0.0370671 0.0164284 +-0.0102366 0.125327 0.0306172 +-0.0512935 0.0556822 0.0305914 +-0.0674962 0.0930678 0.0426016 +-0.0707247 0.156767 -0.045914 +-0.0611468 0.0584317 0.0117762 +0.0152753 0.0680849 -0.0302874 +-0.0638387 0.163409 -0.0592654 +0.030267 0.0496887 -0.0107252 +-0.0227695 0.0684387 -0.0367377 +0.0216497 0.065881 0.0470485 +-0.0849335 0.125015 -0.00321773 +-0.0364959 0.0562316 0.0392716 +-0.0132153 0.0406258 0.0508237 +0.00695506 0.0982177 -0.0239936 +0.00047843 0.12713 -0.00487855 +0.0354045 0.046148 -0.00604177 +-0.0913848 0.129679 0.0322355 +-0.0924762 0.124198 0.0322659 +-0.0057025 0.12744 -0.00517306 +0.032332 0.110047 0.0311032 +-0.0374975 0.0662835 0.0416878 +-0.0306651 0.155159 -0.000638202 +0.0161 0.12839 0.0198796 +-0.0392376 0.124806 0.0231803 +0.00131504 0.0597888 -0.0330641 +-0.0445007 0.0931064 0.043109 +-0.0174373 0.0336888 -0.022956 +-0.0536509 0.0343311 0.0291848 +0.0348249 0.110986 -0.0028353 +0.0280633 0.100998 -0.0169482 +0.0423903 0.0490515 -0.00589339 +0.0306614 0.119205 0.0153072 +-0.0604957 0.0876028 0.045161 +-0.0137303 0.0699989 -0.0380502 +-0.00750341 0.130405 0.00835201 +-0.0494799 0.116621 0.0323892 +-0.058737 0.075302 -0.0183386 +-0.0518764 0.0550741 0.0228473 +-0.0293899 0.118762 -0.0116358 +-0.0743199 0.158257 -0.0279194 +-0.0265758 0.0533991 -0.0263925 +-0.047508 0.0903548 0.0442194 +-0.0104972 0.0815462 0.0580111 +-0.0356136 0.0408304 -0.0293778 +-0.0622824 0.159968 -0.0396048 +-0.0727292 0.0730957 -0.00887693 +0.0252321 0.0889244 0.0471615 +0.0362811 0.0443655 0.0298564 +-0.0583717 0.138143 0.0331568 +0.0516174 0.0711387 0.00464104 +0.00649466 0.0427198 0.0454361 +-0.0187116 0.0598792 -0.0350421 +-0.0603468 0.0339987 0.0210215 +0.0310626 0.107429 0.0345663 +-0.0153967 0.0384283 -0.000805549 +0.0390675 0.0617702 -0.00778266 +-0.0718188 0.0907915 -0.0158595 +-0.0066784 0.0569449 -0.0331859 +0.00738229 0.0448872 -0.0251556 +0.0193881 0.0506007 -0.0247336 +-0.0171345 0.165288 -0.0183426 +0.0172728 0.0694422 -0.0295359 +0.0518225 0.072596 0.0200635 +-0.085483 0.140457 0.00319222 +-0.049383 0.140141 0.0133936 +-0.076884 0.155644 0.0221655 +-0.0584972 0.111135 0.0367864 +-0.0264895 0.102963 0.0427118 +-0.016526 0.0387631 -0.00875803 +-0.060493 0.107007 0.0395303 +-0.0133132 0.0385196 -0.000466347 +0.027107 0.0406036 0.0313674 +-0.0852773 0.137655 0.00128094 +-0.0776954 0.16804 -0.0399638 +-0.0465214 0.0505047 0.038174 +-0.0251912 0.178602 -0.0188241 +-0.0524991 0.101502 0.0417298 +-0.0142894 0.184628 -0.0268303 +0.00710791 0.110158 -0.019992 +-0.0766628 0.155608 -0.00789132 +-0.0814761 0.0734707 0.0145404 +-0.0644951 0.0789605 0.0422031 +0.0403539 0.105584 0.00317596 +-0.0633486 0.0371336 0.0178291 +-0.0808831 0.117721 -0.00384392 +-0.0265027 0.10847 0.0397156 +0.0236097 0.121674 0.028372 +-0.0623736 0.164689 -0.0415928 +-0.0495545 0.0404082 -0.0113965 +-0.0562131 0.054804 -0.00139993 +-0.0418518 0.098529 -0.0215916 +0.0133351 0.058103 -0.0291864 +-0.0594448 0.063179 0.0293052 +0.0113019 0.0652847 -0.0308368 +-0.0783582 0.0994351 0.0350546 +-0.0715439 0.0376425 0.00026118 +-0.0154996 0.112736 0.0400881 +0.0417289 0.0704356 -0.00679567 +-0.0406463 0.127804 0.0152535 +-0.0627661 0.170921 -0.0616075 +-0.0923057 0.12017 0.0426167 +-0.00727442 0.0422617 0.0488857 +0.0350851 0.0848737 -0.0178837 +-0.01578 0.128598 0.00819831 +-0.03217 0.0735917 -0.0275208 +-0.0673634 0.110954 0.0392365 +-0.0271001 0.0779439 0.0468281 +-0.0765081 0.156243 -0.00790412 +0.0277565 0.117474 -0.00457839 +-0.0113381 0.0986434 -0.0265191 +-0.0330823 0.0695155 -0.0204574 +-0.0652177 0.144322 -0.0140816 +-0.0094303 0.0379372 -0.0159242 +-0.0245144 0.0945317 -0.028309 +-0.05375 0.0560385 0.0116204 +-0.0679678 0.0383221 0.0123903 +0.00399334 0.0399971 0.0458959 +-0.0841715 0.0870272 0.0285556 +-0.0274573 0.0734015 0.0426855 +-0.0626773 0.153684 -0.0325991 +-0.0741408 0.105214 0.0369385 +-0.0134986 0.081495 0.0573009 +0.0463327 0.0421886 0.017365 +-0.0644937 0.108375 0.0384047 +-0.0653695 0.151233 0.0366147 +-0.018937 0.178659 -0.0169738 +-0.0820692 0.0748107 0.00351555 +-0.0841353 0.146019 0.0379782 +-0.0148578 0.163977 -0.0174595 +-0.0817263 0.0747702 0.00249857 +0.000235601 0.0740952 -0.0356038 +0.000940682 0.0357179 -0.0155776 +-0.0719363 0.129668 -0.0086833 +0.0301411 0.102934 -0.0150039 +-0.0651961 0.0334974 -0.00275965 +-0.0185844 0.16399 -0.00948536 +-0.0592125 0.042121 0.0445708 +7.57538e-05 0.0369473 0.00366537 +0.0152945 0.0666369 -0.0299356 +0.0410157 0.0739041 0.031202 +-0.0577153 0.0344512 0.0421091 +-0.0920793 0.129683 0.0282033 +-0.0497426 0.0753235 -0.0177986 +-0.0484934 0.047761 0.0395051 +-0.0809803 0.104706 0.0304576 +-0.0746935 0.111142 -0.00760178 +0.0204806 0.109788 0.0388648 +-0.0734977 0.128836 0.0522844 +-0.0426178 0.0520018 -0.0109441 +0.0112198 0.0932651 -0.0287439 +-0.0119274 0.182669 -0.0262872 +0.0145534 0.0347576 0.0376203 +-0.0810222 0.100509 -0.00657927 +-0.0033633 0.038102 0.0128662 +-0.0937861 0.128264 0.0182441 +0.0084061 0.0949783 -0.0285638 +-0.0695902 0.113495 0.0492959 +0.000169576 0.131258 0.0183392 +-0.0931626 0.117374 0.0143043 +-0.0195343 0.112367 -0.0190097 +-0.0524215 0.162453 0.00456363 +0.0184901 0.0879016 0.0492476 +-0.0685433 0.170852 -0.0550244 +-0.087182 0.130813 0.00128919 +0.00130454 0.0641388 -0.0343264 +-0.000757317 0.075519 -0.0359212 +0.0308776 0.0902792 0.0430757 +-0.00578939 0.0386518 0.00278679 +-0.076212 0.155059 0.00635026 +-0.0248315 0.0881388 -0.0362597 +-0.0222598 0.160103 -0.0129456 +-0.00877699 0.0770434 -0.0377883 +-0.06674 0.0383979 0.0141071 +-0.00350265 0.0689326 0.0566398 +-0.0295614 0.0861399 -0.0326125 +-0.0286647 0.125711 0.0122564 +-0.0699648 0.0791315 0.0398469 +0.0142764 0.128727 0.0220636 +-0.0638003 0.110914 0.037425 +-0.0719625 0.135504 -0.00769556 +-0.0527869 0.124083 0.0359567 +-0.0467161 0.0738381 -0.0169211 +-0.0117423 0.070003 -0.0378791 +-0.0517809 0.138537 0.023394 +-0.00482205 0.130969 0.0150835 +0.034711 0.0383001 0.0222555 +-0.00127486 0.120883 -0.0121504 +0.0112227 0.0850587 -0.0310098 +-0.0506063 0.0369029 -0.0119734 +0.0433147 0.0831895 0.0275132 +0.0112941 0.127457 0.0281604 +0.0151622 0.122267 0.032438 +0.0400834 0.082061 0.0334038 +-0.0745622 0.152707 -0.0248951 +-0.0528479 0.141625 0.0244146 +0.0245482 0.035172 0.0211866 +-0.0325075 0.11115 0.0364446 +0.0417109 0.0957641 -0.00380547 +-0.00538241 0.130597 0.0192035 +-0.0649174 0.0364897 0.025021 +-0.0770334 0.158982 -0.013085 +-0.0760388 0.148613 -0.0118618 +0.0283559 0.116347 0.030146 +-0.088594 0.121257 0.00130017 +-0.0268076 0.122539 -0.00562189 +-0.0346629 0.0607102 -0.0125376 +0.0413795 0.0505691 -0.00672382 +-0.0906746 0.1365 0.0201946 +0.00951942 0.100425 0.0477045 +-0.0642867 0.172466 -0.0611328 +-0.0242433 0.172722 -0.0123976 +0.00950564 0.0990636 0.0482467 +0.0101664 0.120462 0.0359466 +-0.0187755 0.107692 -0.0220397 +0.0335012 0.0795469 0.0414506 +-0.0834882 0.14321 0.00316117 +-0.0530161 0.141613 0.0254095 +-0.0395373 0.172163 -0.000837254 +0.0387477 0.0589461 -0.0057234 +-0.0647673 0.0795072 -0.0181104 +-0.00140393 0.0361018 0.00962515 +-0.00524162 0.0395598 0.0483202 +0.0236373 0.103743 -0.0178545 +-0.000477761 0.0760312 0.0584165 +-0.0210492 0.0348694 0.0496408 +-0.00244654 0.131114 0.00878185 +-0.033711 0.0384262 -0.00450177 +-0.0745333 0.152696 -0.0258905 +0.055409 0.0509629 0.0218922 +-0.0134774 0.127753 0.000758007 +-0.0120362 0.0388366 0.0321214 +-0.0278604 0.0487672 0.0470543 +0.0327952 0.0713854 0.0403707 +-0.0728362 0.0979301 -0.0143404 +-0.0367225 0.125751 0.02112 +0.0198232 0.0385183 -0.0126921 +-0.0377749 0.150712 0.00133662 +-0.0665966 0.180807 -0.0581921 +-0.0215095 0.114043 0.0376946 +-0.0620515 0.035927 0.0204607 +-0.0584945 0.150006 -0.0011129 +-0.0335992 0.1188 -0.0116562 +0.0196457 0.116633 0.0356159 +0.0248522 0.0685926 0.0446792 +-0.0164926 0.0544756 0.0504072 +-0.051136 0.140067 0.0203692 +-0.089139 0.139182 0.0122002 +0.0163249 0.0580554 -0.0285 +-0.0621816 0.0342254 0.0257179 +-0.0188821 0.0387745 -0.0111028 +-0.053388 0.034491 0.0395762 +-0.000472072 0.130948 0.0195451 +-0.0634988 0.173693 -0.0615446 +-0.054487 0.0452173 0.0438312 +-0.0202902 0.0906146 -0.0362948 +-0.0725702 0.17984 -0.0501722 +-0.0707759 0.162402 -0.0459559 +-0.0463694 0.113628 -0.0162147 +-0.0523573 0.0345285 0.0397607 +-0.0136632 0.0511316 -0.0317578 +-0.00948303 0.0703233 0.0561585 +-0.0852113 0.0869359 0.026743 +-0.0745333 0.0805197 0.0374668 +0.00349251 0.118288 0.0385113 +0.0493697 0.0693787 0.0250272 +0.029581 0.0736246 -0.0217333 +-0.0400646 0.156235 -0.00986121 +-0.0818113 0.136716 0.048659 +-0.0809364 0.129495 -0.00494346 +-0.0875459 0.110452 0.0143395 +0.0253164 0.112728 0.0350367 +-0.0852858 0.0845126 -0.000515374 +0.00212883 0.120316 -0.0135831 +-0.0192664 0.0381478 0.0114056 +0.0493315 0.0589269 -0.00474568 +-0.0183092 0.162495 -0.00732366 +-0.00730789 0.12834 -0.00208974 +-0.0286194 0.180015 -0.014033 +0.0255963 0.0648009 -0.0228004 +-0.00925832 0.177251 -0.027731 +-0.0485485 0.0432385 -0.0107358 +-0.0600861 0.14609 -0.00280453 +-0.026172 0.174158 -0.0190728 +-0.059111 0.0686528 0.0369372 +-0.0434854 0.0944868 0.0426487 +-0.0216341 0.038095 0.0200103 +-0.0670537 0.071446 0.0363402 +-0.0348255 0.0915164 -0.024068 +-0.0202598 0.174222 -0.0154191 +0.0344662 0.114921 0.00815778 +-0.0686919 0.0750175 -0.0147112 +0.026272 0.0789381 -0.0240124 +0.0202522 0.0805604 -0.0270674 +-0.0432329 0.156565 0.00586077 +-0.00650833 0.0787624 0.0577507 +-0.0335034 0.0774945 0.0414157 +-0.0606769 0.0676671 -0.0113119 +-0.0656284 0.162324 -0.0174746 +0.00729944 0.0639619 -0.0320669 +-0.00448657 0.0898027 0.0567005 +-0.0584972 0.0918588 0.045399 +0.00218731 0.0852799 -0.0344916 +-0.0417916 0.0869783 -0.0214259 +0.0463392 0.0489694 -0.00446687 +-0.0389761 0.128486 0.00847309 +0.00727028 0.11232 0.040519 +-0.0234564 0.0680424 0.0463484 +-0.0797185 0.0803984 0.0327643 +0.0232549 0.0645506 0.0458531 +0.0198821 0.0449543 0.0425235 +-0.0394974 0.0902763 0.0431118 +-0.0662858 0.172388 -0.0591199 +0.0259452 0.0364961 0.0239139 +-0.0714148 0.0386609 0.00057855 +-0.0638254 0.0924713 -0.0188016 +-0.0584874 0.112515 0.0360801 +-0.0623619 0.166253 -0.047591 +0.0452758 0.0875665 0.00218329 +-0.0244115 0.0379996 0.0159179 +0.0452209 0.0659646 -0.000116442 +-0.0707693 0.176767 -0.0466577 +-0.0650223 0.156803 -0.0519494 +0.0354173 0.0414682 -0.003097 +-0.0416808 0.0622091 -0.0130274 +0.0326595 0.114633 -0.00147403 +-0.0495274 0.14168 0.00739502 +0.0388579 0.0970015 -0.00784 +-0.00249575 0.0389742 0.0303561 +0.0070795 0.101453 -0.021277 +0.0291938 0.0754716 0.043989 +0.00502464 0.126695 -0.00649713 +-0.016158 0.0884114 -0.0380198 +0.0115883 0.102988 -0.0210311 +0.0576451 0.0661396 0.0235216 +0.0317192 0.118031 0.0171382 +-0.0116954 0.175688 -0.0223293 +0.00121183 0.0853285 -0.0350521 +-0.0158308 0.0883117 -0.038067 +-0.0686258 0.0846974 0.0427491 +0.00833511 0.0595736 -0.0302453 +0.0450509 0.0423962 0.0206492 +-0.027467 0.0793682 0.0471485 +-0.0679777 0.0716192 0.0360049 +-0.0718018 0.158195 -0.0399213 +-0.0114987 0.0856547 0.0572923 +0.0131441 0.0346685 0.0356066 +-0.0620328 0.156862 -0.0185851 +-0.0607717 0.113836 0.03657 +-0.0764751 0.146968 0.0421376 +-0.0207673 0.117009 -0.0138783 +0.0416942 0.0655359 -0.00371801 +-0.0306051 0.0524133 -0.0153638 +0.0107636 0.130209 0.0207729 +-0.0902734 0.133771 0.0282153 +-0.0235934 0.0383252 0.00311252 +-0.012672 0.0526484 -0.0327744 +-0.0309385 0.0622798 -0.0204312 +-0.0337803 0.122942 0.0251825 +-0.0598823 0.146825 0.0363335 +-0.0447526 0.0336781 0.00121434 +-0.0540428 0.0334293 -0.000440359 +0.0119421 0.123166 0.0332435 +0.0105328 0.103079 0.0462759 +-0.00696577 0.0389018 -0.00510709 +-0.033478 0.0632761 0.0395519 +-0.0386238 0.0519962 -0.0107523 +-0.0778526 0.159695 -0.0239243 +-0.0154805 0.109966 0.0416657 +-0.0688005 0.087996 -0.0171065 +-0.0428494 0.0999447 -0.0214282 +0.02441 0.101163 -0.0191142 +-0.0630974 0.160042 -0.0195595 +-0.0591899 0.154851 0.0254882 +-0.0694874 0.100005 0.0406788 +-0.063101 0.150495 -0.0266018 +-0.000774843 0.0783346 -0.0358957 +-0.0335129 0.112536 0.0351002 +0.00348618 0.11278 0.041408 +0.0454091 0.0918015 0.00517469 +-0.030521 0.0636541 -0.0224277 +-0.0564983 0.108415 0.0389345 +-0.0454982 0.045182 0.0420491 +0.0366564 0.089932 -0.0151793 +-0.00318743 0.0350129 0.0463208 +0.0397193 0.0787183 -0.00974279 +-0.0456155 0.165496 -0.00783315 +-0.0401614 0.110268 -0.0187071 +-0.0607836 0.171276 -0.0609166 +-0.0849643 0.0885105 -0.00254627 +0.000663768 0.131541 0.0142252 +-0.0773558 0.163115 -0.0213545 +-0.00442024 0.118937 -0.0140576 +0.029367 0.1045 -0.0146741 +-0.0767078 0.176155 -0.0445645 +-0.087862 0.117151 0.00226309 +-0.0674561 0.1652 -0.0559896 +0.0417828 0.101446 0.0181564 +-0.0504972 0.0465484 0.0414292 +0.0334855 0.0808915 0.0414362 +-0.0640951 0.0700461 0.0364211 +-0.0500004 0.121197 0.0329094 +-0.0640156 0.0344353 0.0303981 +0.0161688 0.0407187 0.0441528 +-0.0175288 0.165418 -0.0114925 +-0.0156111 0.0407209 -0.0274801 +-0.0136265 0.129395 0.0133241 +-0.060628 0.0588072 0.00794551 +0.0064803 0.0977098 0.0499318 +0.0439772 0.079046 -0.00278888 +0.0418428 0.0986036 -0.00180869 +-0.0225444 0.178667 -0.0133919 +-0.0606264 0.0336734 0.0105944 +-0.0434 0.0336807 -0.00215159 +-0.0886031 0.143176 0.0340326 +-0.0849284 0.107666 0.0223625 +0.0592303 0.0580467 0.0201933 +-0.0540206 0.147182 -0.0016614 +-0.00601913 0.126314 0.0306279 +-0.0686207 0.149674 -0.0393499 +-0.0919325 0.130933 0.0102425 +-0.0568299 0.143897 0.0319274 +-0.0354984 0.115235 0.0327878 +-0.0174958 0.0701523 0.0542792 +0.0270421 0.0862601 0.0462384 +-0.0488595 0.101383 -0.02158 +-0.0733679 0.152652 -0.0338969 +-0.0750934 0.159541 -0.00936327 +-0.0374543 0.155389 -0.00975319 +-0.0381729 0.166677 -0.0130206 +-0.087877 0.0990467 0.0233782 +-0.00160432 0.0405525 -0.0251988 +-0.0903048 0.139241 0.0221876 +-0.00139541 0.0385701 0.0219096 +-0.0221672 0.0839099 0.0558332 +-0.000827607 0.0389424 0.0289209 +-0.0177093 0.0385258 -0.00321073 +-0.0221552 0.169733 -0.0198584 +-0.0574718 0.156359 0.0101234 +0.0162407 0.0793143 -0.0294472 +0.0309621 0.0953572 -0.0169293 +-0.0167051 0.126576 2.44266e-05 +-0.0210968 0.161053 -0.00432438 +-0.0244887 0.100244 0.0443393 +-0.0637376 0.15365 0.0326508 +0.0154945 0.115387 0.0371086 +-0.0110238 0.098585 0.0502027 +-0.0466991 0.122484 0.0270727 +0.015569 0.110589 -0.0172093 +-0.0540772 0.146211 0.0253916 +0.0117081 0.0589891 0.0519593 +-0.0289244 0.033884 -0.0216457 +-0.08784 0.105023 0.0143674 +0.0262802 0.123151 0.0136687 +0.0122982 0.128768 0.0241985 +0.0428587 0.0803554 -0.00479839 +-0.0249679 0.0851951 0.0529639 +0.0259953 0.123127 0.0078705 +-0.000612836 0.0356605 0.0156316 +0.0462948 0.0820457 0.00817944 +-0.0179779 0.15947 -0.0103936 +-0.0237993 0.184341 -0.0145966 +-0.0300075 0.0337589 -0.0217484 +0.0233024 0.124378 0.00401489 +-0.0457643 0.0811616 -0.0200148 +-0.0786005 0.174957 -0.0470491 +0.00992987 0.0806149 0.0548353 +-0.036507 0.0464425 0.0402005 +-0.0229776 0.0681076 0.0472951 +0.0359077 0.111056 0.0244077 +-0.0691331 0.0612207 0.0112337 +-0.0653605 0.174136 -0.0490346 +-0.0246777 0.0366811 0.0541279 +0.00549638 0.115538 0.0397987 +-0.0512593 0.128575 -0.00377835 +-0.0227541 0.0889021 -0.0365754 +-0.052801 0.144689 0.0203903 +-0.0373724 0.0344314 0.0325332 +0.0302609 0.0461225 0.032895 +-0.0668934 0.119448 -0.00885989 +-0.0781478 0.107183 -0.00659237 +-0.0262448 0.109573 -0.0200299 +-0.0930011 0.116069 0.0193086 +0.0199447 0.104671 0.0430468 +-0.0902973 0.114585 0.00733567 +-0.0597131 0.0708022 -0.0154129 +0.011503 0.0909852 0.0534706 +-0.0601621 0.0433793 -0.00606772 +-0.0690356 0.068492 0.0314599 +-0.0662201 0.0390045 0.0360529 +0.0111444 0.104428 -0.02004 +-0.0620602 0.155611 0.00849054 +0.038029 0.105425 -0.00179734 +0.00952421 0.0346423 -0.0128865 +-0.0475328 0.0338333 0.0273813 +0.0275059 0.121239 0.00414409 +-0.0713739 0.162409 -0.0439557 +-0.0388285 0.0339925 0.000319116 +0.0209713 0.0966458 -0.0223043 +-0.0117867 0.0798822 -0.0383021 +-0.00231276 0.123919 -0.0094032 +-0.0623035 0.158393 -0.0375989 +-0.0498834 0.108435 -0.0190271 +-0.0450959 0.122461 0.0255697 +-0.086583 0.1077 0.0153543 +-0.0640141 0.128346 0.0443555 +-0.0910616 0.140621 0.0211716 +0.0222184 0.122028 -0.00352468 +-0.0197563 0.0685528 -0.0378978 +-0.0747315 0.0809443 -0.0125955 +0.0381487 0.056188 -0.00571384 +0.0310862 0.0808926 0.0432566 +-0.0418955 0.0336683 0.02694 +0.0454971 0.0861837 0.00419421 +-0.0515955 0.0575054 -0.00888629 +-0.0923422 0.120143 0.0302906 +-0.0388134 0.0900157 -0.0235053 +-0.0678286 0.139237 -0.00787376 +-0.0500776 0.136736 0.0219567 +-0.0524826 0.132311 -0.00383544 +-0.0725073 0.154019 -0.0378993 +-0.0164965 0.114086 0.0389356 +-0.0266334 0.0505574 -0.0257305 +0.0285947 0.0646316 0.0430307 +-0.050498 0.10288 0.0412159 +-0.0147348 0.0348101 0.0475803 +-0.0147627 0.0728806 -0.0387608 +-0.0425799 0.160887 0.00499665 +-0.0516371 0.0334814 0.00180973 +-0.0574972 0.0973516 0.04313 +-0.0294813 0.179959 -0.00726258 +-0.0696084 0.159782 -0.00738408 +-0.00175707 0.0783385 -0.0360812 +-0.0778906 0.0797955 -0.00863863 +0.0383322 0.0928141 0.0344469 +-0.0459579 0.0368224 -0.0202942 +0.0126438 0.130236 0.0157508 +0.0370668 0.109719 0.0231776 +-0.0650007 0.0600171 0.0167571 +-0.0294928 0.0931993 0.044345 +-0.0849548 0.0952071 0.0290738 +-0.0314917 0.0660582 0.0391556 +0.0283827 0.10475 0.0376855 +0.0125555 0.034405 -0.0178251 +0.0407099 0.0684593 0.0306869 +-0.0321086 0.163743 -0.0150961 +0.00529533 0.064011 -0.0326857 +0.0428516 0.0972538 0.000192155 +0.0475361 0.0451237 0.0241502 +-0.0188094 0.0382725 0.0240343 +-0.0242622 0.0650295 0.043001 +-0.0247852 0.0783802 -0.0377363 +0.0104929 0.0923225 0.0529394 +-0.0684671 0.140894 -0.00832284 +-0.013606 0.0435021 -0.0266802 +-0.0324058 0.05963 -0.0134049 +-0.0709313 0.156768 -0.044906 +-0.0794975 0.113845 0.0467655 +0.0215945 0.126233 0.0147739 +-0.0653369 0.0416124 0.0352199 +0.0546053 0.0733755 0.0137165 +-0.0893171 0.0996957 0.0173941 +-0.0835863 0.0817078 0.00050138 +0.029436 0.039931 -0.00313898 +-0.0614917 0.0661812 0.0332998 +-0.0923901 0.114734 0.0183133 +0.030053 0.0567138 -0.0167759 +-0.00342912 0.0915905 -0.0351346 +-0.0758824 0.100651 -0.0113429 +-0.0457293 0.0348843 0.042622 +0.00615023 0.0385922 -0.00780619 +-0.0547458 0.0768339 -0.0193157 +-0.0356142 0.0493225 -0.0125317 +0.024593 0.0345639 0.00705834 +-0.0892328 0.114145 0.0245988 +0.0348936 0.0586201 -0.0127038 +-0.0828513 0.138047 0.046826 +0.0569539 0.0508846 0.00918952 +-0.0797103 0.0711205 0.00752586 +-0.092065 0.118755 0.0273051 +-0.0103683 0.0388061 0.0306894 +-0.0431813 0.165147 -0.00997877 +-0.0813565 0.109598 0.0300528 +0.0477122 0.0511499 0.0301456 +-0.0678831 0.155252 0.000581516 +0.0349362 0.113582 0.0211925 +0.0280387 0.0549866 0.0403705 +-0.0615433 0.125505 0.042614 +0.0450739 0.0427888 0.00232236 +-0.0544975 0.121335 -0.0101688 +0.0117318 0.0833298 0.0539432 +-0.0144997 0.103011 0.0432504 +-0.0752992 0.149965 -0.0228671 +0.0196742 0.0686359 0.0495084 +-0.0394722 0.107013 0.0383007 +-0.0321381 0.0435397 -0.0289857 +0.0231687 0.0915577 0.0477207 +-0.0480905 0.156132 -0.00685995 +0.00882114 0.0589209 0.053036 +0.000540453 0.0731645 0.0574875 +-0.0842824 0.0818436 0.0235004 +-0.072066 0.0353469 0.00817017 +-0.0548518 0.122696 0.0382478 +-0.0283817 0.123518 -0.00261643 +-0.0178271 0.0855379 -0.0388455 +-0.00772146 0.0656018 -0.0354736 +0.0230836 0.12416 0.0238853 +-0.0125037 0.0730609 0.0559849 +0.0551355 0.0581678 0.0268835 +-0.0288448 0.124881 0.0180835 +-0.0566945 0.126945 0.0390945 +-0.0491155 0.0337431 -0.0125383 +-0.0100076 0.130157 0.0146359 +-0.0114787 0.0934019 -0.0350786 +-0.012503 0.0856552 0.057236 +-0.00822614 0.0384527 0.0224267 +-0.0288615 0.0353967 0.01735 +-0.035527 0.115134 -0.015836 +-0.085501 0.0791776 0.00851156 +0.0457594 0.0890174 0.0101642 +-0.0775133 0.126 0.0528602 +-0.0598229 0.0911123 -0.0198104 +0.0349018 0.0698502 -0.0158378 +-0.00371064 0.0641813 -0.0350983 +-0.0232497 0.0336668 -0.0221987 +-0.0337721 0.121485 -0.00843946 +0.0123855 0.0603174 0.0511841 +-0.0454994 0.0804154 0.0426755 +0.00893209 0.124393 0.0330753 +-0.00403191 0.0987119 0.0511654 +-0.0481285 0.0573264 0.0358964 +-0.0166099 0.0407431 -0.0277394 +-0.0440479 0.169839 -0.00695693 +0.0412738 0.0872408 -0.00977382 +-0.0604546 0.071762 0.0392488 +0.0529297 0.0581906 0.02898 +-0.0521631 0.138551 0.0244099 +-0.0366167 0.15106 0.000396988 +0.0417493 0.0611977 -0.0033567 +-0.070996 0.0683351 -0.00354604 +-0.0356709 0.0621736 -0.0130441 +-0.0170991 0.0383232 0.0225362 +-0.0487856 0.0573034 0.0351442 +0.022412 0.0372285 0.0333476 +-0.0249633 0.0931679 0.047071 +0.018008 0.0349409 0.0291289 +-0.0796085 0.154132 0.0271276 +-0.0406237 0.0336557 -0.0200198 +0.0169165 0.123099 -0.00667688 +0.0210051 0.0618768 0.0478546 +-0.0427644 0.0812202 -0.0203472 +-0.0672645 0.175508 -0.0482636 +-0.0639988 0.121381 0.0479339 +-0.0622266 0.158391 -0.0366041 +-0.0261802 0.161053 -0.0142499 +0.0186318 0.0821747 0.0516425 +-0.00531922 0.0961442 -0.0318294 +0.00250665 0.0341604 -0.0175888 +0.0167477 0.0563074 0.0486799 +-0.0106808 0.0555967 -0.0338825 +0.00925016 0.0724976 -0.0328208 +0.0123553 0.0552818 -0.0294499 +0.0212602 0.0735043 -0.0271352 +-0.0845249 0.129883 0.0501389 +-0.0764965 0.154899 -0.0050946 +-0.0621627 0.163132 -0.0395927 +-0.0144955 0.0701698 0.0547379 +-0.0084766 0.0489124 0.0500846 +-0.000135712 0.0381648 -0.0142912 +-0.0503963 0.1183 0.0322871 +-0.0761087 0.083292 0.0375324 +-0.0736943 0.094184 0.0404336 +-0.0691138 0.0763852 0.0387083 +-0.0290376 0.038297 0.000217512 +-0.0348553 0.0342935 0.020715 +-0.0220444 0.0384934 -0.0170721 +-0.0114987 0.0471911 0.0478612 +0.0375264 0.0714822 -0.0127977 +-0.0282394 0.087664 0.0462444 +-0.0757136 0.107486 0.0366393 +-0.0610115 0.134041 -0.00711168 +-0.0797372 0.0717415 0.00518109 +-0.0658978 0.147832 -0.0279808 +-0.00653882 0.110902 -0.0214831 +0.0296673 0.0591775 0.0410177 +-0.0217889 0.0696447 0.0502694 +0.0234089 0.0418644 -0.00766906 +-0.0364935 0.0888766 0.0431732 +0.0306541 0.0520995 0.0370911 +-0.060098 0.0687043 0.0366734 +0.0187338 0.0862153 -0.0273821 +-0.0839692 0.148747 0.00414299 +-0.0354821 0.0561791 0.038801 +-0.0481382 0.0376145 0.0455768 +-0.0676248 0.117206 0.0513943 +-0.0281854 0.174153 -0.0178233 +0.0359289 0.0386712 0.0221633 +-0.0256851 0.0824232 0.052338 +-0.0145953 0.0363242 -0.0264317 +-0.0303622 0.055196 -0.0183802 +-0.00165167 0.0525486 -0.0310164 +-0.0132125 0.168083 -0.022507 +-0.00949762 0.078776 0.0580091 +-0.0361357 0.127268 0.00216052 +0.048778 0.0525636 0.0299433 +-0.0256526 0.0520956 -0.0269974 +-0.0603733 0.0335628 0.0071663 +-0.0426157 0.035917 -0.0271302 +-0.0144999 0.162187 -0.0103051 +-0.0384864 0.0548303 0.0394681 +-0.0831442 0.107611 0.0263767 +-0.00111933 0.100971 -0.0229536 +-0.0548742 0.10693 -0.0184788 +-0.0218282 0.127027 0.00889322 +-0.0174982 0.111166 -0.0197324 +-0.0652616 0.0722487 0.0377992 +-0.0576238 0.145329 0.032529 +-0.0184507 0.117417 -0.0143314 +-0.081937 0.128034 -0.00496911 +0.0195332 0.12729 0.0154357 +-0.0293484 0.0705264 -0.0315108 +-0.00525979 0.0409541 0.0483014 +0.0555717 0.0706847 0.00515518 +-0.048428 0.0531039 0.036022 +-0.00279611 0.0826469 -0.0371795 +-0.0287124 0.0382592 0.00213562 +-0.0574984 0.0959784 0.0439666 +-0.091525 0.133725 0.0172151 +-0.016864 0.128415 0.0107007 +-0.0636978 0.164648 -0.0286005 +-0.0829735 0.127181 0.0515051 +-0.0488321 0.0956358 -0.0221459 +0.0400863 0.0899903 -0.0108207 +-0.0619683 0.12268 0.0437909 +0.0605435 0.0650981 0.0101416 +-0.0665542 0.169448 -0.0580509 +-0.0891009 0.0902275 0.0204481 +-0.0825815 0.112383 0.0454387 +0.0104883 0.0936688 0.0521003 +0.0142529 0.0765304 -0.0302113 +0.0165164 0.126586 0.0257514 +-0.0283423 0.118847 0.030216 +0.0142697 0.034212 -0.000289798 +-0.0478723 0.105599 -0.0198923 +-0.0739256 0.098177 0.0391323 +-0.049674 0.141672 0.0123895 +-0.0475977 0.15214 0.0100027 +-0.0424553 0.128377 0.00131486 +0.0224361 0.0645464 0.046427 +-0.0885609 0.087538 0.0184581 +0.0147132 0.0897404 -0.0290836 +-0.054132 0.143048 0.0274248 +0.00550441 0.0575487 0.0534334 +-0.0772682 0.155563 -0.0118971 +-0.0677628 0.079419 -0.0170759 +-0.0464924 0.159333 0.00779524 +0.0261579 0.0768253 0.0466356 +-0.0552963 0.0473377 0.0123212 +-0.0298441 0.0972531 -0.0235715 +-0.00563259 0.0974901 -0.0292726 +-0.0261993 0.095287 -0.0250572 +-0.0716941 0.0684125 -0.00254325 +0.00127365 0.0682996 -0.0335875 +0.0575871 0.0523587 0.0191771 +-0.00134429 0.0361889 0.0150058 +-0.0715096 0.1041 0.0379435 +-0.0921823 0.117455 0.0412015 +-0.0384872 0.0337149 -0.0296051 +-0.0287365 0.0475545 0.0479663 +-0.0257999 0.0422849 0.0537317 +-0.0230963 0.124618 -0.00175855 +-0.0924128 0.11471 0.0173177 +-0.00492025 0.0362041 0.048453 +-0.0186551 0.184576 -0.0164922 +-0.0802253 0.0772741 0.0285988 +0.0463015 0.0806481 0.0121762 +-0.0304105 0.0861968 -0.0305753 +-0.0346214 0.0348242 0.0450553 +-0.0652339 0.0355811 0.0395373 +-0.0788426 0.0825957 -0.0096075 +-0.0127163 0.038878 -0.00996632 +-0.0624916 0.166267 -0.0445898 +-0.0746075 0.156859 -0.0239292 +-0.0773753 0.161145 -0.0179242 +-0.0883931 0.1336 0.00326444 +-0.0661323 0.162373 -0.0581655 +-0.0510928 0.12386 -0.00885828 +-0.0384971 0.0705176 0.0419076 +-0.0723264 0.176481 -0.0540086 +-0.0271072 0.11707 -0.0138992 +-0.0591735 0.11954 -0.0102201 +0.0222809 0.11936 0.0323905 +-0.0302503 0.17123 -0.00702025 +-0.0809167 0.107332 -0.00361395 +-0.0627188 0.046051 0.00845692 +-0.00639449 0.0347093 0.0459249 +-0.0877048 0.0873692 0.00346654 +-0.0410427 0.15478 -0.00878846 +-0.069373 0.0655009 0.0252048 +-0.0270649 0.0689032 -0.0335294 +0.00976243 0.126251 0.030462 +-0.002483 0.114172 0.0414823 +-0.0532846 0.152692 0.0160461 +-0.0190668 0.12797 0.0127969 +-0.0645056 0.0818668 0.0436415 +-0.0144784 0.0645279 0.0535035 +-0.0598098 0.08825 -0.0201729 +-0.0614957 0.105649 0.0403113 +-0.0278003 0.174225 -0.00868668 +-0.0525152 0.0439969 0.0448982 +-0.00749319 0.0503553 0.0512463 +-0.0786706 0.0853441 -0.0105854 +-0.0447185 0.0709976 -0.0171011 +-0.0635722 0.0753573 0.0407707 +-0.0124985 0.0603974 0.0541523 +0.0344134 0.0655586 -0.0158419 +0.0196499 0.124334 0.0268969 +-0.0627763 0.0614875 0.0230054 +0.0416143 0.102832 0.00217563 +-0.0552881 0.147721 0.0283494 +-0.0143864 0.174216 -0.0192271 +0.0144149 0.0343798 -0.00603429 +-0.0101902 0.177186 -0.0254506 +0.0284808 0.120403 0.0230436 +-0.0149461 0.0384961 0.0282276 +-0.0778803 0.0710945 0.0220932 +-0.042083 0.168351 -0.00985967 +-0.056782 0.043535 0.0167171 +0.0143083 0.122234 -0.00973054 +-0.0266054 0.0916781 -0.031606 +-0.00249278 0.121064 0.0370013 +-0.0199096 0.0382242 0.00758286 +-0.0135056 0.0842656 0.0572305 +-0.0720125 0.148777 -0.0357596 +0.0251623 0.118606 -0.00580398 +-0.0618325 0.0334319 -0.000212632 +-0.0855476 0.136296 0.00125685 +-0.032605 0.0408975 -0.030074 +0.0426847 0.0986805 0.020158 +-0.00736899 0.0366982 -0.0162506 +0.00250252 0.0590979 0.0551087 +-0.0674921 0.106947 0.0382762 +-0.0289938 0.16114 -0.00164375 +-0.0509402 0.0584984 0.0315938 +-0.0350845 0.124972 -0.00417237 +-0.0686385 0.0435335 0.00569826 +0.0441509 0.0959467 0.0161545 +0.0131317 0.10725 -0.0189993 +0.0358259 0.0928903 0.0378885 +-0.0154981 0.060248 0.0524646 +0.0276762 0.118315 -0.00350857 +-0.0683312 0.0833327 0.042485 +0.033847 0.106899 -0.00922375 +0.048317 0.0466984 0.0256626 +-0.0570131 0.128126 -0.00643112 +-0.0788672 0.111379 -0.00271807 +0.0115311 0.122019 -0.0114981 +0.0275945 0.106191 -0.0144774 +-0.0591334 0.0584459 0.00677121 +-0.0780191 0.149419 0.0383262 +-0.0559631 0.0464314 -0.00541258 +-0.0192836 0.0894928 -0.0371367 +-0.033131 0.166707 -0.0157536 +-0.0495065 0.107045 0.0392662 +-0.073496 0.147014 0.0424214 +-0.0404833 0.111172 0.036485 +0.0284708 0.0565571 -0.0188308 +0.0511996 0.0711486 0.0227866 +-0.0681397 0.0738079 0.0376094 +-0.0905331 0.135117 0.0212107 +-0.0733037 0.155556 0.00591793 +0.0500217 0.0446984 0.00624267 +-0.00949805 0.0815484 0.0580308 +0.0211117 0.124199 0.0260136 +-0.0611133 0.149657 0.036321 +-0.0635959 0.153475 0.00125628 +0.0344187 0.0994578 0.0359067 +-0.0734442 0.163812 -0.0389777 +-0.0852938 0.0858468 -0.00152115 +-0.0559297 0.13815 0.0313829 +-0.0870302 0.13217 0.00132034 +0.0204036 0.0474506 -0.0212729 +-0.076548 0.0954614 0.0376104 +-0.0855527 0.153551 0.0192298 +-0.0729125 0.0928513 0.0411123 +-0.0404958 0.0478428 0.0400733 +-0.0121854 0.0980546 -0.0279084 +-0.0464966 0.108432 0.0393098 +-0.0177034 0.0569685 -0.0340386 +-0.0908687 0.135097 0.0172074 +-0.0862565 0.0846802 0.0214754 +-0.0297808 0.0348722 0.0494682 +-0.0764922 0.155931 0.0149956 +-0.0618119 0.115344 0.0386033 +-0.0487475 0.0767781 -0.0183253 +-0.0907804 0.150219 0.0191245 +-0.0524535 0.0335708 0.023045 +-0.0384946 0.0577019 0.0400515 +-0.074873 0.151297 -0.0278802 +0.00653661 0.120619 -0.0139577 +-0.0483957 0.0389613 0.0452757 +-0.0779524 0.165292 -0.0269536 +-0.0536531 0.0334694 0.00682116 +-0.0561549 0.118392 0.0380484 +-0.0201622 0.0337128 -0.0216346 +-0.0794073 0.0772395 -0.00557672 +-0.0135947 0.071631 0.0548042 +-0.0382622 0.0335792 -0.0232089 +-0.0183288 0.115615 -0.0164437 +-0.0507515 0.0768088 -0.0186854 +-0.0176367 0.181628 -0.0186063 +0.001434 0.0980064 0.0516014 +0.00449684 0.131467 0.00706378 +-0.0839655 0.111209 0.0317911 +-0.0769529 0.128149 -0.00749249 +0.0471199 0.0728094 0.00697834 +0.0460243 0.0737836 0.00392327 +-0.00149572 0.0505531 0.0529099 +-0.0431936 0.0363833 0.0440447 +-0.054345 0.151005 0.0266856 +0.00514071 0.12498 -0.00862525 +-0.0729614 0.112778 0.0490933 +0.0152498 0.0348445 0.0304622 +-0.0111539 0.0386404 0.0270766 +-0.0431779 0.113636 -0.0162215 +-0.0754447 0.164601 -0.0189193 +-0.0685657 0.0346013 0.0116976 +0.036686 0.110763 0.0218417 +-0.058015 0.128168 -0.00680186 +-0.0805084 0.121673 0.0499202 +-0.0750852 0.174913 -0.0410877 +-0.0394764 0.081876 0.0433844 +-0.01065 0.0383969 0.0147482 +-0.0236788 0.0551648 -0.029679 +-0.0207747 0.0728486 -0.0387932 +0.00733312 0.0553775 -0.0306811 +-0.0497252 0.137033 0.00342407 +-0.0650198 0.154365 0.0307072 +0.00051428 0.0383337 0.0225142 +-0.0625323 0.1568 -0.0366082 +-0.00383551 0.130671 0.00539431 +0.0310854 0.118732 0.00690653 +-0.0699388 0.131128 -0.00863643 +-0.023911 0.123885 -0.00309916 +-0.0495628 0.0402984 0.0453668 +-0.0639487 0.168098 -0.0606895 +-0.0706835 0.155594 0.0053992 +-0.0686442 0.156175 0.0235781 +-0.0572185 0.0575347 0.00867749 +-0.0788442 0.154658 0.0259054 +-0.0721793 0.15961 -0.0389315 +-0.0545051 0.119806 0.0369329 +-0.0254081 0.182912 -0.0140439 +-0.0729406 0.0676849 0.0243239 +-0.0353285 0.0851433 -0.0237512 +-0.0478735 0.104217 -0.0205651 +-0.0558395 0.0589131 -0.0044052 +0.0448613 0.0903726 0.0191701 +0.0576189 0.0719687 0.0133447 +-0.0511061 0.129858 -0.00316533 +-0.00880359 0.113633 -0.0183799 +-0.0618121 0.09105 -0.0190303 +0.0313027 0.114101 -0.00492854 +-0.042497 0.0874008 0.0424798 +-0.0508473 0.0970748 -0.0222124 +-0.0654906 0.102864 0.0410679 +-0.00458022 0.0347745 -0.0240516 +0.0553581 0.0524903 0.0236336 +0.00626754 0.071137 -0.0337471 +-0.0135115 0.118298 0.0374588 +-0.0604029 0.0342918 0.0295439 +0.0406411 0.0462159 0.0309092 +-0.0278584 0.0385169 -0.0108032 +0.0266728 0.0713177 0.0438181 +0.0101968 0.116422 0.0377394 +0.0446411 0.0959729 0.00816419 +-0.0597937 0.0334415 0.000190139 +-0.0210999 0.0811322 0.0562803 +-0.0474593 0.0559824 0.0367034 +0.0340242 0.115407 0.0165889 +0.0416569 0.0832977 0.0303966 +0.0340782 0.100772 0.035418 +-0.0604756 0.0747304 0.0414998 +0.0147905 0.128825 0.0208219 +-0.00109958 0.115152 -0.0180337 +-0.0237291 0.0650733 0.0438813 +-0.0261862 0.17712 -0.0185723 +-0.0381348 0.0338853 -0.0178771 +-0.0323789 0.115075 -0.0157884 +0.0168479 0.0856792 -0.0288312 +0.0383914 0.0390949 0.00219016 +0.0192558 0.0721931 -0.0285132 +-0.0837506 0.0776431 0.00349824 +0.00549734 0.0937843 0.053579 +0.0381875 0.10978 0.0131678 +-0.0707773 0.0822058 -0.016572 +-0.0623556 0.0337533 -0.00969501 +-0.0657944 0.0348418 0.0348835 +0.029813 0.0605585 0.0412449 +-0.067274 0.142559 0.0431983 +-0.00437946 0.039206 0.0351678 +-0.091267 0.130919 0.00823808 +0.056791 0.0717301 0.0086079 +-0.088725 0.0942104 0.00844208 +-0.0527517 0.076824 -0.0190661 +-0.075716 0.071204 0.0277224 +-0.0296574 0.175524 -0.0164728 +0.0201633 0.0535759 0.04656 +0.00320624 0.036422 0.0229702 +0.0192058 0.0834241 -0.02764 +-0.0918136 0.129556 0.00925121 +0.0276788 0.117119 0.0298812 +-0.0251464 0.0824617 0.0532115 +-0.0728771 0.154609 0.0294193 +0.00904539 0.03456 0.0402645 +-0.0534903 0.102908 0.0413848 +0.00940878 0.0389595 -0.0232113 +-0.0859627 0.109007 0.009354 +-0.0484951 0.0903851 0.0445307 +0.00263147 0.0345612 0.0425417 +-0.0770465 0.161776 -0.0174081 +0.0134975 0.104436 0.0449316 +-0.0388918 0.123217 0.0263098 +-0.0364947 0.112507 0.0349484 +-0.0629025 0.103986 -0.017642 +-0.0678178 0.0923118 -0.0167386 +-0.0689104 0.122371 -0.00889897 +-0.0255023 0.125351 0.00317915 +-0.000607228 0.0419595 -0.0248688 +0.0460131 0.0820178 0.0051921 +-0.0223034 0.0381733 0.0107634 +-0.0861005 0.10314 0.0243088 +-0.0674874 0.0958602 0.0421807 +-0.0538319 0.138205 -0.00152003 +-0.0199623 0.0624791 0.0486773 +-0.0187732 0.0946942 0.0521396 +0.0415957 0.0859827 0.0303559 +-0.0405006 0.0562797 0.0399754 +-0.0396087 0.0392284 -0.0278507 +-0.0203015 0.124709 0.0241059 +-0.0667178 0.127063 0.0492263 +-0.0727925 0.0893223 -0.0156729 +0.0370031 0.104683 0.029035 +0.0279524 0.103456 0.0388242 +-0.0186121 0.038597 0.0291868 +-0.0776508 0.152845 -0.000892884 +-0.0334818 0.0987718 0.0435747 +0.0329891 0.092935 0.0408139 +0.0391956 0.0712805 0.0337887 +-0.0631802 0.0590341 0.0144269 +-0.0537547 0.143134 0.0264016 +-0.0301924 0.153974 -0.00357072 +-0.0448379 0.0970765 -0.0217835 +0.00941817 0.0340541 0.000745803 +-0.0432126 0.168352 -0.00885275 +0.0554664 0.0549257 0.00120797 +-0.0225677 0.0932815 0.0503229 +-0.0524989 0.157892 0.00946562 +0.0390425 0.0953983 0.0320312 +0.04296 0.0817702 -0.00479044 +0.00635062 0.0510121 -0.0292209 +-0.0543105 0.149562 0.0267072 +0.0221931 0.100779 0.0445472 +0.0329366 0.0724958 -0.0177814 +0.0248886 0.114037 0.0344109 +-0.0550232 0.14424 -0.00134547 +0.0163915 0.04625 -0.0239163 +0.0177475 0.036867 -0.0166881 +-0.0617992 0.0867358 -0.0192812 +-0.0893599 0.133717 0.0406984 +-0.039718 0.0695625 -0.0162922 +-0.0089161 0.0389771 0.0326408 +-0.0245194 0.0879123 0.052427 +-0.0855508 0.0883229 0.0270467 +-0.0419398 0.0356984 0.00899705 +-0.0715816 0.0791203 0.0388191 +-0.0444898 0.0690526 0.0411578 +-0.070025 0.173518 -0.0406121 +-0.0628508 0.0981808 -0.0176907 +-0.0750322 0.144421 -0.00688246 +-0.0499825 0.0544896 0.033589 +-0.065333 0.177827 -0.0606985 +-0.0316114 0.123192 0.0229888 +-0.0760927 0.0805105 0.0361956 +-0.0370838 0.0486029 -0.013278 +-0.0785283 0.124553 0.0522615 +-0.0708435 0.0731956 0.0357937 +-0.0403104 0.0336344 -0.0180813 +-0.0609885 0.0628534 0.0274979 +-0.0323315 0.0624018 -0.0174393 +-0.0368547 0.100015 -0.0221726 +-0.0783796 0.172116 -0.0450441 +-0.0633655 0.139636 -0.00706655 +0.00173262 0.13137 0.0174841 +-0.0105091 0.0646847 0.0553841 +0.0266795 0.122765 0.0152477 +-0.0360635 0.034528 0.0238485 +-0.0541027 0.122637 0.0375656 +-0.0544908 0.0344999 0.0341095 +0.0176998 0.103348 0.0450658 +-0.0685644 0.145677 -0.0229009 +-0.0356468 0.0577276 -0.0110125 +-0.0696054 0.110911 0.0424293 +-0.0584669 0.0577494 0.0129387 +-0.0398029 0.0870085 -0.0218621 +-0.00967624 0.104885 -0.0231041 +0.00669982 0.0383228 -0.00932299 +-0.0609169 0.109692 -0.0160089 +-0.0646221 0.122809 0.0487379 +0.0174813 0.0865744 0.0503122 +-0.0067878 0.0386876 0.00254936 +-0.0628956 0.119461 -0.00917238 +-0.0404347 0.128451 0.0123721 +0.0304082 0.04464 -0.00596234 +0.00950687 0.0785812 0.0553914 +-0.0185636 0.161122 -0.00592394 +-0.0407009 0.066639 -0.0151117 +-0.0638844 0.0392942 0.0408356 +0.00208256 0.0392848 0.0328214 +-0.0891635 0.0901786 0.00945748 +-0.0714603 0.0390724 0.00325296 +0.0396909 0.105526 0.00119339 +-0.092918 0.118828 0.0342968 +-0.0809093 0.0912865 0.0336272 +0.0106278 0.12033 -0.0136749 +-0.079254 0.149169 0.0379325 +-0.0700516 0.177913 -0.0570165 +-0.0584973 0.0875674 0.0446281 +0.0363875 0.037641 0.0177175 +-0.0266625 0.178341 -0.0176816 +-0.0257516 0.0380733 0.00834253 +-0.0514727 0.147804 0.0154008 +-0.0475605 0.047528 -0.00960427 +0.0464078 0.0756596 0.0165703 +-0.0659757 0.132606 -0.00839654 +-0.0795255 0.0953936 0.0349279 +-0.0512091 0.118302 0.0328718 +-0.00441308 0.12096 -0.0123131 +-0.0322918 0.0358193 0.0288559 +-0.0907178 0.142015 0.0241681 +-0.0555193 0.152453 0.0283051 +-0.044345 0.152142 0.00768226 +0.0241695 0.0809229 0.0490966 +-0.0528659 0.0999263 -0.0216782 +-0.0669331 0.125307 -0.0088761 +-0.0303567 0.119073 0.029499 +0.025846 0.107916 -0.0143268 +-0.0617056 0.1325 0.0388812 +-0.0185965 0.0364224 -0.0275796 +-0.0207908 0.0384714 -0.00378381 +-0.0617181 0.0598008 0.019418 +-0.0474373 0.120726 0.0283448 +0.0366967 0.103968 -0.00783268 +0.0303183 0.0797251 -0.0205953 +-0.0317074 0.0436869 0.0496355 +-0.0623412 0.156794 -0.0356173 +-0.0765015 0.121776 0.0527715 +-0.0184879 0.122208 0.0309285 +0.0230909 0.103393 0.0423419 +0.0609018 0.0651278 0.0131549 +0.00916248 0.0355108 0.0268151 +0.0313289 0.0554154 -0.0147753 +-0.0025035 0.108652 0.0433127 +0.0546992 0.0478618 0.0141962 +-0.0620154 0.0689049 0.0360997 +-0.0388626 0.102809 -0.0208006 +-0.0555708 0.142434 0.0301615 +-0.0688026 0.146519 -0.0258522 +0.0194777 0.0878818 0.0491927 +-0.0228793 0.110931 -0.0194728 +-0.0324125 0.0849398 -0.0275574 +-0.0438855 0.03574 0.0440005 +-0.0917791 0.117463 0.0421754 +-0.0690116 0.129833 0.0494501 +-0.0743362 0.15411 -0.0219057 +-0.0638117 0.0867138 -0.0190744 +-0.045027 0.168395 -0.00690925 +0.0270479 0.080882 0.0462053 +-0.0114995 0.164138 -0.0150087 +-0.0325011 0.058955 0.0382451 +-0.0606931 0.0692955 -0.0138548 +-0.0566913 0.0572662 0.0137312 +-0.00649633 0.0488329 0.050181 +0.0223101 0.120965 0.030775 +-0.0805231 0.0993639 0.0329828 +-0.0644795 0.0959078 0.0429389 +-0.075154 0.17882 -0.048244 +0.00607351 0.0358936 0.0456569 +-0.035492 0.0648204 0.0410644 +-0.0576415 0.155076 0.0216791 +-0.0762945 0.152787 -0.0118902 +-0.00761327 0.0434711 -0.0261832 +-0.0814624 0.13163 0.0517276 +-0.0743185 0.067053 0.0192856 +-0.0842709 0.104792 0.000381661 +-0.0374161 0.12162 -0.0106267 +0.0282004 0.082909 -0.0218038 +-0.0538885 0.131144 0.0343613 +0.0268226 0.046511 -0.0137061 +-0.0500801 0.151654 -0.00422617 +-0.0843259 0.153929 0.0166903 +-0.0840259 0.124392 0.0498267 +-0.0906893 0.11752 0.0439252 +-0.0636773 0.162484 -0.0225185 +0.0362915 0.0534119 -0.00658438 +-0.0733102 0.0700068 0.0292571 +0.0432125 0.0858656 0.0273897 +0.0392299 0.108358 0.0101653 +-0.0357967 0.0383351 -0.00483874 +-0.0645865 0.0628123 -0.00359236 +-0.0838768 0.108986 0.0253683 +-0.0538875 0.139905 -0.00121756 +0.0463511 0.0764838 0.0150474 +0.0180384 0.119266 -0.0105437 +-0.0812898 0.0735018 0.0165324 +-0.0437426 0.076832 -0.018848 +-0.0489995 0.126854 0.0308899 +0.00913686 0.107291 -0.0199257 +0.0413467 0.0718054 -0.00779903 +-0.0407607 0.126285 -0.00553285 +-0.0564807 0.113914 0.0357075 +-0.0477527 0.149202 0.00972608 +-0.0737025 0.144377 -0.00986626 +-0.0237128 0.058121 -0.0313582 +-0.0884618 0.142054 0.0361609 +-0.00450592 0.0661541 0.056364 +-0.0448888 0.108464 -0.0189265 +-0.0531399 0.13506 -0.0028018 +0.0308728 0.114122 0.0296728 +-0.0120858 0.0382274 0.0182274 +0.045976 0.0820209 0.01617 +-0.0474955 0.0344671 0.0303636 +0.0116443 0.129846 0.0210966 +0.0429126 0.0775596 -0.00475805 +-0.0639176 0.122377 -0.00881224 +-0.0219078 0.0581082 0.0451165 +-0.0185957 0.118181 -0.0131167 +-0.0381658 0.165183 -0.0131497 +-0.0445045 0.0438483 0.042919 +-0.0464974 0.074738 0.042075 +-0.0819901 0.133862 -0.00285904 +-0.0633534 0.0445301 0.031682 +-0.0314905 0.0960436 0.0448087 +-0.0575997 0.0574661 0.0133658 +-0.0303698 0.154176 -0.00601441 +0.0133009 0.0666579 -0.0304883 +0.0108109 0.0819726 0.0543646 +-0.068057 0.178404 -0.0514469 +-0.0806807 0.0760273 -0.00253172 +0.0394926 0.0541437 0.0318453 +-0.00450121 0.0675415 0.056336 +-0.019491 0.0387907 0.0342254 +0.0147818 0.0631153 0.0511723 +-0.0291704 0.172664 -0.0174314 +0.0262968 0.070421 -0.0238548 +-0.0421212 0.159153 -0.0103433 +-0.0367588 0.172073 -0.0125043 +-0.0196292 0.117165 -0.0140584 +-0.042525 0.149193 0.00498605 +-0.0175612 0.186044 -0.0184493 +0.0221884 0.0973608 -0.0216774 +-0.0197019 0.0568866 -0.0331333 +-0.045504 0.0832988 0.0437099 +-0.0212803 0.0387041 -0.0133833 +-0.0770943 0.154164 -0.0118975 +-0.0484907 0.0833394 0.0445457 +-0.0238036 0.0798229 -0.0381557 +-0.0372926 0.0394674 -0.0291193 +-0.00273038 0.0683735 -0.0347173 +-0.0659296 0.14253 0.0416232 +0.0452769 0.0467388 0.0283148 +-0.0898014 0.11587 0.00528404 +0.0263587 0.0577877 0.0432503 +-0.0486968 0.067904 -0.0141574 +-0.0893812 0.113196 0.0217139 +-0.0841444 0.110242 0.00330414 +-0.0631329 0.17411 -0.0535854 +0.0348962 0.0387881 -4.46661e-05 +0.0431163 0.0888383 0.0261767 +-0.0444887 0.166716 0.00379579 +-0.0235591 0.0953745 -0.0271663 +0.0455985 0.0918132 0.00816712 +-0.0917403 0.12555 0.0418871 +-0.0890224 0.136404 0.0092064 +-0.0364114 0.175555 -0.00996795 +-0.0345906 0.0727451 -0.0199624 +0.0429111 0.040977 0.0196984 +0.00148534 0.0385845 0.0464325 +-0.0585016 0.0973698 0.0431908 +-0.0484982 0.0819185 0.0441136 +0.00821862 0.116409 0.0384227 +0.0456517 0.0413562 0.00923967 +-0.0769167 0.0873975 0.0382106 +-0.061867 0.101123 -0.0184855 +0.0202898 0.124676 0.0257091 +-0.0101432 0.130124 0.0117041 +-0.0138894 0.183111 -0.0237643 +-0.0707552 0.0792696 -0.0152786 +0.0465284 0.0761532 0.0136843 +-0.0888827 0.140531 0.0122011 +-0.0659605 0.110851 0.0377691 +-0.0638988 0.109582 -0.0144399 +0.0445103 0.0541956 0.0324876 +-0.0545376 0.0335773 0.0172858 +0.0156666 0.0726831 0.0525311 +-0.0224929 0.0448955 0.0530527 +0.00250097 0.0897336 0.0558646 +-0.0427601 0.128938 0.0129983 +-0.0749067 0.100837 0.0372176 +0.0100662 0.0792875 0.0550109 +0.031592 0.0738009 -0.0197207 +-0.0295595 0.111353 -0.0178807 +-0.0265381 0.155425 -0.00506198 +0.0110253 0.0793101 0.0546505 +0.0455932 0.0834007 0.019176 +-0.00963497 0.0389293 -0.00939263 +-0.0740278 0.157006 -0.00316778 +0.026879 0.121193 0.00250168 +-0.0840153 0.1376 0.000355984 +0.00144074 0.0344391 0.0153316 +-0.062494 0.0746373 0.0407954 +-0.0714338 0.100882 0.0394174 +-0.0511894 0.0558131 0.0154354 +0.0142545 0.0887312 0.0523539 +-0.0217647 0.0699552 -0.0378816 +0.042865 0.0958458 -0.000810373 +-0.0225278 0.18149 -0.0200273 +-0.0516224 0.0545433 -0.00792825 +-0.0894416 0.0943032 0.0194238 +-0.0450754 0.033637 -0.0171737 +-0.0189216 0.122512 -0.00768052 +-0.0278603 0.101566 -0.0234492 +0.0273313 0.094554 -0.020088 +-0.0568394 0.145329 0.0319256 +0.0299199 0.11779 -0.000781916 +0.0345811 0.0368089 0.0162808 +0.0130795 0.0927597 -0.0282037 +0.0239979 0.0768543 0.0488301 +-0.0560741 0.15232 0.0295584 +-0.0713082 0.165213 -0.0459899 +0.0214853 0.0948038 0.0473574 +-0.0124976 0.0472007 0.0479814 +0.0101747 0.096292 -0.0259611 +-0.0424942 0.0916602 0.0426604 +-0.000674255 0.10997 -0.0204918 +-0.0731036 0.0721584 0.0326952 +-0.0863191 0.0806349 0.0164939 +-0.0174959 0.0984963 0.0451272 +-0.0516134 0.0334804 0.007228 +0.0210892 0.0521114 0.044364 +-0.0767842 0.155599 0.0119802 +-0.0737106 0.0699801 -0.00251138 +0.0277999 0.0727164 0.0436883 +0.0605691 0.0637105 0.0171755 +-0.0720961 0.156364 0.000513559 +-0.0818934 0.154016 0.0102104 +-0.0184806 0.169783 -0.0146335 +-0.073631 0.173473 -0.03767 +-0.0385075 0.0888951 0.0435504 +-0.056184 0.0374619 -0.0105738 +-0.0164629 0.0616668 0.0525376 +-0.0214965 0.0525299 0.044709 +-0.0324599 0.0722556 -0.0254696 +-0.0781568 0.167257 -0.0305864 +-0.0633087 0.117017 0.0436447 +-0.084428 0.138004 0.0455627 +0.0287818 0.0480764 -0.0117305 +-0.0706135 0.175903 -0.0451833 +-0.0430742 0.0335089 -0.0222312 +0.0203664 0.0506236 -0.0244327 +-0.0807714 0.153393 0.00628177 +-0.0784635 0.138605 0.0489019 +-0.0754126 0.068174 0.019879 +-0.0105025 0.0773598 0.0576687 +-0.0399608 0.0418525 -0.0253044 +-0.0880973 0.137764 0.00820327 +-0.0862825 0.106347 0.0193454 +-0.0114851 0.123708 0.0326887 +-0.00700917 0.0348727 0.042072 +-0.0760973 0.0851761 -0.013541 +0.0421377 0.0912242 0.0276147 +0.0298218 0.119509 0.00500708 +-0.0550443 0.148674 -0.00204704 +-0.0107558 0.0386486 -0.0149703 +0.00849857 0.118254 0.0373924 +0.0373294 0.0848074 0.0364738 +0.0506886 0.0511228 0.0274131 +-0.0538924 0.106961 -0.0186698 +-0.0735555 0.105459 0.0371635 +-0.0532563 0.0343869 0.0309731 +-0.015483 0.0938222 0.0546278 +0.0454513 0.052559 0.0321398 +0.032601 0.100801 0.0367685 +-0.0688527 0.142579 0.0444582 +-0.0908832 0.150197 0.0161314 +-0.0811312 0.129963 0.0524484 +0.00846909 0.111301 0.0401143 +-0.0622744 0.0344133 0.0342699 +-0.0343155 0.0340522 0.0192395 +-0.0869096 0.111745 0.0223587 +0.0507656 0.0446256 0.0152142 +-0.0767707 0.151403 -0.00690852 +-0.00150011 0.103045 0.0440564 +-0.051019 0.147224 -0.00224048 +-0.025918 0.122982 0.0235755 +-0.0527617 0.0461943 0.0216742 +-0.0178184 0.0841429 -0.0390768 +-0.0345091 0.0461323 0.043875 +-0.0623881 0.149093 -0.0125752 +-0.0809179 0.0761444 0.0241516 +-0.00945917 0.175708 -0.0257473 +-0.0334992 0.0704401 0.0410454 +-0.0886682 0.141939 0.0121971 +-0.0120612 0.0383071 0.0127308 +-0.0853843 0.0980412 -0.000554198 +-0.0325205 0.0646875 0.0393461 +0.0503466 0.0615208 -0.00363326 +0.00449283 0.103624 -0.0217086 +-0.0698084 0.085099 -0.0171261 +0.0438316 0.0832073 0.0263179 +-0.0486418 0.0576652 -0.0108452 +0.0123248 0.0609207 -0.0293142 +0.0429772 0.0902337 -0.00478341 +-0.0619824 0.166238 -0.0535924 +0.0140441 0.0406072 0.0445814 +0.00249558 0.116934 0.0396534 +0.018473 0.0989902 0.0468145 +-0.0169827 0.0385945 -0.00497776 +0.0309161 0.0955754 0.0413413 +-0.0735982 0.110276 0.0438156 +-0.0903629 0.11521 0.0252935 +-0.0566835 0.124286 -0.00724626 +-0.0620082 0.134045 -0.00734981 +0.00521493 0.0852237 -0.0334342 +-0.0903999 0.124268 0.0448512 +0.0114719 0.1182 0.0365719 +0.0344326 0.0414166 -0.00330414 +-0.0403754 0.124077 -0.00919956 +0.0484547 0.0702338 0.00359645 +-0.0285016 0.113902 0.0349068 +-0.0526285 0.0596472 0.0276152 +-0.0325191 0.174119 -0.0148634 +-0.0204902 0.108532 0.041306 +0.010276 0.076623 0.0552854 +0.0133781 0.0537725 -0.0285433 +0.0402901 0.0698645 0.0318359 +0.0401742 0.0671588 0.0316675 +-0.0866887 0.120341 0.0484058 +0.0245253 0.0875975 0.0479106 +-0.050498 0.0890212 0.0452499 +-0.0598028 0.0853759 -0.0202992 +0.0354525 0.106753 -0.0069512 +0.0111874 0.0630268 0.0529412 +-0.0416003 0.12872 0.00602836 +0.0443487 0.0533892 -0.00643258 +-0.0229394 0.0985982 0.0448104 +-0.0678177 0.0894605 -0.0172539 +-0.0826703 0.0762102 0.00250991 +-0.0152189 0.172708 -0.0246075 +-0.0748382 0.0978559 -0.0133191 +0.0284295 0.0955564 0.0430179 +-0.04802 0.136068 0.0153684 +-0.0475691 0.0489734 -0.00936479 +-0.0813576 0.0734641 0.0155425 +-0.07594 0.14997 -0.0178724 +-0.0649871 0.152354 -0.0372683 +-0.0229947 0.122243 0.0275866 +-0.0108296 0.0855471 -0.0384547 +-0.0447583 0.0336472 -0.00973579 +-0.041838 0.0942787 -0.0228038 +-0.038857 0.101401 -0.0214118 +0.00839351 0.0342854 -0.0184828 +0.0436422 0.0748109 -0.00280304 +0.00409443 0.101828 -0.021842 +-0.0194474 0.054231 0.0477027 +0.0410346 0.0752467 0.03121 +0.0588047 0.0677091 0.00614939 +0.021598 0.10091 -0.0208238 +-0.0696323 0.156261 0.0232204 +-0.086966 0.0846591 0.00747852 +-0.0660124 0.176151 -0.0507054 +0.0425261 0.101486 0.00616657 +0.0305131 0.0418181 0.0291512 +-0.0554982 0.113948 0.0354054 +-0.0763852 0.108818 0.0389983 +-0.0785959 0.152697 0.00118419 +0.0184567 0.127794 0.00934393 +0.0105917 0.043143 0.0448676 +-0.0719858 0.0346482 0.00381826 +-0.0341243 0.0335931 -0.0280196 +-0.0564439 0.115317 0.036137 +-0.0928438 0.126838 0.0112559 +-0.0661071 0.164936 -0.0219713 +-0.0665376 0.142546 0.0425061 +-0.0167827 0.0388081 0.0329676 +-0.0614351 0.156032 0.020314 +0.0388231 0.106965 0.0221712 +0.0247856 0.0449735 0.0390757 +-0.0324984 0.0788891 0.0412743 +-0.068331 0.155325 0.0280685 +0.0267262 0.114038 0.0335472 +-0.0888783 0.111909 0.0103621 +-0.0772308 0.0920788 -0.012603 +0.0457689 0.0431024 0.0219801 +0.0474981 0.0737139 0.0139878 +-0.061487 0.0746791 0.0411579 +-0.0861526 0.148758 0.00721004 +0.0341879 0.0913684 -0.0166968 +-0.0200728 0.100101 -0.0240875 +-0.0286491 0.125506 0.0152069 +-0.0268606 0.0378639 0.0137313 +-0.0352216 0.0346633 0.0327857 +-0.0444613 0.12936 0.0182577 +0.0373383 0.0740435 0.0363986 +0.00751373 0.0869673 0.0561316 +-0.0888328 0.0942898 0.0224093 +0.00897858 0.127106 -0.00499333 +0.0363106 0.0994119 0.033375 +-0.0448194 0.0913346 -0.0221278 +0.000368669 0.0466323 -0.0286891 +-0.0606782 0.0639978 0.0300882 +-0.0735086 0.078138 -0.0125733 +-0.0358361 0.11045 -0.0189078 +0.0300578 0.0632721 0.0416198 +0.0173543 0.0349384 0.0362289 +-0.0104845 0.10863 0.0429333 +-0.0265155 0.115287 0.0336658 +0.0257868 0.0967214 -0.0203669 +0.0255714 0.119263 0.0291067 +-0.0404457 0.119913 -0.0128413 +-0.0596429 0.0622343 0.0265494 +-0.0522074 0.122732 -0.00965468 +0.00419216 0.0340885 -0.0190827 +-0.0614977 0.108395 0.0385563 +-0.0154933 0.0392591 0.0382209 +0.0568425 0.0592039 0.0011688 +0.033494 0.0619462 0.0395497 +0.0378948 0.0699732 0.0354084 +-0.0643687 0.155314 0.00767719 +-0.017163 0.124753 -0.00408239 +-0.0892062 0.128127 0.00426293 +-0.058497 0.101559 0.0426268 +-0.00170163 0.130406 0.0219933 +0.0258358 0.123453 0.0120756 +0.0200283 0.102079 0.0449293 +-0.0034976 0.0965806 0.0535793 +-0.0805988 0.090913 -0.0086158 +0.0307316 0.091606 0.0428217 +0.0293141 0.095566 0.0425395 +0.011103 0.0779768 0.0547588 +-0.0912353 0.14886 0.0211316 +0.0484812 0.0443317 0.021366 +-0.00581925 0.0868408 -0.0369183 +-0.0454559 0.0902978 0.0432333 +-0.0346794 0.119765 -0.0106544 +-0.00349323 0.113677 -0.0184484 +-0.0434907 0.101526 0.0420227 +-0.0385061 0.0986889 0.0419871 +-0.0599081 0.112539 -0.0152225 +-0.0242322 0.124794 -0.000701199 +0.0400813 0.104202 0.0221684 +-0.0828121 0.0830332 0.030132 +0.0159137 0.128436 0.00413586 +-0.0645186 0.0597262 0.00993302 +-0.0324512 0.0353306 -0.0309147 +-0.0484861 0.137101 0.00939484 +-0.0304745 0.0860755 0.0433189 +0.0188415 0.121733 -0.00718615 +-0.0643746 0.145275 -0.0151376 +0.0208541 0.11855 -0.00976629 +0.037465 0.0434297 0.0291248 +0.0517879 0.0461689 0.0072143 +-0.0837871 0.0829476 0.0282971 +-0.0917215 0.129668 0.0302355 +-0.0261628 0.0674202 -0.0335157 +-0.0631555 0.156855 -0.014582 +0.043463 0.077603 -0.00378219 +-0.0602407 0.058232 0.0121428 +-0.0458636 0.102811 -0.0213024 +-0.038884 0.108506 -0.019659 +-0.0705258 0.142815 0.0451961 +-0.0781039 0.070111 0.0193756 +-0.0758474 0.109198 0.0406016 +-0.0318501 0.0986369 -0.02282 +-0.038215 0.0471675 -0.018189 +-0.0134374 0.0516868 0.0502089 +0.0151412 0.0754034 0.0535569 +-0.043493 0.105703 0.0408668 +-0.0822959 0.0773319 0.0228488 +0.0452717 0.0903987 0.0151606 +0.0159567 0.120613 0.0338084 +-0.0623049 0.142641 -0.00633906 +0.000467241 0.105823 0.0432483 +-0.0177409 0.0671746 -0.0379913 +-0.0891252 0.0889064 0.0184472 +-0.0678748 0.125664 0.0510849 +-0.0337468 0.127104 0.0118588 +-0.0518684 0.102767 -0.0207881 +0.00221584 0.0364728 0.00081639 +-0.0296253 0.0759773 0.0411397 +0.00226876 0.0682822 -0.0333186 +-0.0542457 0.0574384 0.01981 +-0.0659991 0.136994 -0.00799651 +-0.00357593 0.127459 -0.0052112 +0.0103564 0.0538895 -0.0297771 +0.0272815 0.0718243 -0.0235929 +-0.0123281 0.0344052 -0.018857 +0.0416155 0.0404142 0.0199255 +-0.0106878 0.0598858 -0.0348312 +-0.0305006 0.116618 0.0322439 +0.0427332 0.084569 0.0284544 +-0.0712328 0.151001 -0.0437008 +0.0423623 0.0944394 0.0261744 +-0.000687654 0.0583509 -0.0327859 +-0.0779789 0.136876 -0.0051311 +-0.0657518 0.0780369 -0.0174491 +-0.0789069 0.155396 0.0141592 +-0.0701046 0.156748 -0.048906 +0.0281353 0.0593598 -0.0207767 +-0.066567 0.147777 -0.0287654 +-0.0167976 0.0383562 0.00264497 +-0.0708835 0.160996 -0.0449446 +0.0230988 0.111339 0.037076 +-0.0237033 0.091176 -0.0348871 +-0.0477118 0.073839 -0.0167643 +-0.0540526 0.0334248 -0.00589512 +-0.0535445 0.0389126 -0.0111352 +0.00251277 0.0675114 0.055914 +-0.0324736 0.0532348 0.0372028 +-0.0416459 0.056333 -0.0114534 +-0.0460476 0.0363198 0.0451262 +-0.0215027 0.163915 -0.00845889 +-0.0530817 0.139518 0.0266624 +-0.00971954 0.0656257 -0.0358484 +-0.0175293 0.038199 0.0153321 +-0.0388176 0.128112 0.00411022 +-0.0579212 0.120852 -0.00959233 +-0.0215953 0.03793 -0.0285032 +0.00849245 0.0473031 0.0488481 +-0.045123 0.157633 -0.00869072 +-0.0845016 0.0911794 -0.00456302 +-0.0130394 0.0384127 0.00153612 +-0.0054932 0.111405 0.0422861 +-0.00614297 0.0385457 0.0227705 +-0.0588822 0.108299 -0.017343 +-0.0647452 0.0766241 -0.0174472 +0.0333079 0.0768384 0.0411622 +-0.0345058 0.0704863 0.0415356 +-0.00385823 0.0988046 -0.0266644 +-0.0940576 0.125561 0.0242759 +-0.0406606 0.156554 0.00601794 +0.0458479 0.0724092 0.00333418 +-0.0536298 0.0345249 0.0429297 +0.0422446 0.0760949 -0.00580476 +0.0305908 0.106106 0.0356297 +-0.0744956 0.13026 0.0524093 +-0.060795 0.0853339 -0.0197774 +-0.0659276 0.123847 -0.00897257 +-0.0587952 0.0334058 0.000425547 +-0.0355002 0.111108 0.0360398 +0.0106562 0.0589179 0.0524466 +0.0220342 0.108737 -0.0152173 +0.0414017 0.104253 0.00516521 +-0.0487319 0.132909 0.0254731 +-0.073147 0.0648981 0.0178865 +-0.0655672 0.149686 0.0379738 +-0.0866855 0.14466 0.00818677 +-0.0690156 0.163795 -0.0519803 +0.0474899 0.0664975 0.0274045 +-0.0693729 0.175081 -0.056043 +-0.0811978 0.140383 -0.00182247 +-0.0609117 0.111106 -0.0154828 +-0.027448 0.125478 0.0053817 +-0.0601827 0.0460596 0.0101722 +-0.0116048 0.0377441 -0.0259987 +-0.0623577 0.147557 -0.00658086 +-0.0635933 0.167459 -0.0411888 +-0.0420303 0.153306 -0.00761985 +0.0045298 0.102977 0.0440255 +-0.0571296 0.124118 0.0402058 +-0.010491 0.0487865 0.0492904 +-0.00149595 0.0911539 0.0561263 +-0.0644925 0.0903995 0.0447493 +-0.0621097 0.156825 -0.0345957 +-0.0626845 0.0455625 -0.000282658 +-0.054778 0.0344845 0.0375447 +-0.0704967 0.156763 -0.0469167 +-0.0501084 0.0429877 0.0445637 +-0.074873 0.120838 -0.00772479 +0.0354301 0.112103 0.00127449 +-0.0218649 0.103029 -0.0235712 +-0.09096 0.148814 0.0141536 +-0.0645626 0.0459512 0.00669838 +0.0314584 0.111437 -0.00809824 +-0.022876 0.0362943 -0.0189473 +-0.0428901 0.0435976 -0.0193145 +-0.0746823 0.0663852 0.00625465 +-0.0476209 0.0547841 -0.0103184 +-0.0197585 0.171251 -0.0147167 +-0.0705035 0.0901829 0.0418541 +0.0494272 0.0628335 -0.00296645 +0.0266028 0.105322 -0.0155495 +0.0202061 0.126966 0.0100746 +0.013717 0.127103 0.0275992 +0.00956448 0.122301 -0.0117968 +-0.0846111 0.084433 -0.00253466 +-0.0889485 0.13651 0.0272017 +-0.000398103 0.0385343 0.0221462 +0.0428913 0.0402636 0.016655 +-0.0531156 0.156084 -0.00339606 +-0.0586999 0.141645 -0.00399496 +0.0175889 0.0549386 0.0481228 +0.0242735 0.0576737 -0.0247443 +-0.0435028 0.0548283 0.0392794 +-0.0509876 0.0343016 0.0280109 +-0.0371778 0.128019 0.00618657 +-0.067159 0.152634 -0.0476967 +-0.0524481 0.115128 -0.0157418 +-0.00787248 0.0390234 0.0328097 +-0.0368889 0.109941 -0.0191779 +0.0473251 0.0497353 0.0295737 +-0.0155015 0.10721 0.0425067 +-0.0607907 0.0609394 -0.0015406 +0.0214998 0.0358071 0.0181694 +-0.0152794 0.114388 -0.017154 +-0.0618553 0.153745 -0.0235803 +-0.00541506 0.100313 0.0476265 +0.0438051 0.0987511 0.0101628 +-0.0274965 0.0973724 0.0435854 +0.0448746 0.0601039 -0.00424277 +0.031559 0.0460718 0.0312637 +-0.0615188 0.0448284 0.0115308 +-0.0397761 0.115072 -0.015742 +-0.0918654 0.131039 0.0272344 +-0.0646035 0.156332 -0.00986181 +0.0383993 0.0413521 -0.00190432 +-0.026722 0.0386646 -0.0162927 +-0.0736148 0.0995067 0.0387799 +0.006499 0.119638 0.036869 +0.0405971 0.101404 0.0241737 +-0.0944613 0.121476 0.0212834 +-0.0105851 0.0337493 -0.0235512 +-0.0799934 0.136838 -0.00393652 +0.0529009 0.0462649 0.0122044 +-0.0539028 0.11125 -0.0176614 +0.00874316 0.130156 0.0228898 +0.0260633 0.114349 -0.00924148 +0.0113837 0.0449118 -0.0251572 +-0.0461015 0.150679 0.0086365 +0.00236523 0.128663 -0.00254763 +-0.0158845 0.0910066 -0.0366604 +0.0456174 0.0890068 0.0121612 +-0.0634393 0.144588 -0.0113838 +0.0175304 0.120577 0.0333463 +-0.0256229 0.0463679 -0.0270847 +-0.0606463 0.0343588 0.0329219 +-0.0622926 0.149098 -0.0115749 +-0.0266239 0.0463597 -0.0270834 +0.0142234 0.0864184 -0.0301272 +-0.0242795 0.0383175 -0.000652306 +-0.0599506 0.0340585 0.0228145 +-0.031899 0.0595768 -0.0154053 +0.0335035 0.0686838 0.0396083 +-0.00350655 0.105885 0.0441283 +-0.00849376 0.0576353 0.0542501 +-0.0596861 0.0693591 -0.0143393 +-0.0246408 0.0382637 -0.00251941 +0.0142384 0.0723592 -0.0308856 +0.0360996 0.112682 0.0101589 +0.00650478 0.0989998 0.0481043 +-0.0406764 0.0344836 0.0353061 +0.0208126 0.114503 -0.0133998 +-0.0664042 0.0385079 0.0306689 +-0.00851871 0.0471234 0.047663 +-0.0607941 0.143953 0.0367655 +-0.0469959 0.06153 0.0374819 +-0.0566078 0.0521283 0.00668717 +-0.0117953 0.0827249 -0.0387188 +-0.0651684 0.0346977 0.0334093 +0.0334291 0.0781951 0.0413414 +-0.00319773 0.0384234 0.00715593 +-0.0255204 0.115294 0.0339151 +-0.070852 0.100833 -0.0142398 +-0.0647775 0.0824087 -0.0188685 +0.0351918 0.0673501 0.0385292 +-0.0201767 0.0929008 -0.0346271 +-0.0292631 0.0351386 0.0510616 +-0.0487306 0.0345868 0.0335095 +-0.0909618 0.13376 0.0242167 +-0.0399614 0.0343338 -0.0130933 +0.0409886 0.0643095 0.0292691 +-0.0656099 0.0655077 0.0295065 +0.0113576 0.0509388 -0.0282254 +-0.0831709 0.101988 -0.00359129 +-0.0345055 0.113874 0.0339275 +0.0308648 0.0460986 0.0320207 +-0.023595 0.180085 -0.0196757 +0.056025 0.0493916 0.0151904 +-0.0805557 0.0977534 -0.00758611 +0.0084218 0.0346373 0.0418695 +-0.0774116 0.159696 -0.0249188 +0.0602932 0.0636878 0.00814035 +-0.0302474 0.125253 0.00290344 +-0.0741812 0.074527 0.0339368 +-0.0636646 0.15831 -0.045603 +-0.0332687 0.15271 -0.00392746 +0.0267163 0.0450608 -0.00869474 +0.0351226 0.0921155 -0.0154837 +-0.0278275 0.158128 -8.54892e-06 +-0.0771542 0.152814 -0.00588992 +0.00726262 0.0682112 -0.0321527 +-0.0590296 0.0424919 -0.00727859 +-0.0604873 0.0987275 0.0428004 +-0.0916073 0.128323 0.0352449 +0.0474407 0.0661575 -0.000283122 +0.03984 0.106962 0.00517391 +-0.0609078 0.155801 0.00889681 +-0.00849418 0.114178 0.0409373 +0.00894357 0.0819404 0.0551438 +-0.0767684 0.0756527 -0.0076025 +-0.0670227 0.0607355 0.00842954 +-0.0186908 0.0510113 -0.0307584 +-0.0706351 0.0733936 -0.01149 +-0.026674 0.0382695 0.00254021 +0.0585127 0.0649229 0.00410871 +0.0241246 0.0605253 0.0453245 +0.0172623 0.073643 -0.0290458 +-0.0564969 0.111123 0.0367634 +0.0543584 0.0674371 0.0258007 +-0.0511173 0.128308 0.0330935 +-0.075231 0.151315 -0.0248804 +-0.0492462 0.132382 0.000177088 +-0.0694944 0.11756 0.0525327 +-0.0721635 0.113702 0.0503204 +-0.0647819 0.0809531 -0.0185144 +0.00336694 0.130688 0.00234495 +0.0243671 0.0699418 0.0457082 +-0.000607851 0.0448652 -0.0263872 +-0.0506782 0.141637 0.0173818 +-0.0618089 0.0881716 -0.0191682 +-0.0886021 0.087516 0.0174642 +0.011433 0.034701 0.0261941 +-0.0405676 0.171048 0.000226569 +0.0111139 0.110132 -0.0191278 +0.0136046 0.121889 0.0339065 +-0.0107442 0.0742291 -0.0379783 +0.0438711 0.0959127 0.00218342 +-0.0299153 0.155169 -0.001314 +-0.0469317 0.0369443 -0.0162782 +-0.0887949 0.142048 0.03516 +-0.0459209 0.0346888 0.0375199 +-0.0022788 0.119988 -0.0131916 +0.00522675 0.0768423 -0.034472 +-0.0277078 0.0725313 -0.0348614 +-0.0679296 0.125304 -0.00887173 +-0.0528849 0.101359 -0.0212107 +0.0356786 0.076967 -0.014745 +-0.0567974 0.0854612 -0.0213212 +0.00206285 0.121236 -0.012553 +-0.0659186 0.159142 -0.0118027 +-0.0857862 0.0939971 -0.00056361 +-0.0318889 0.124978 0.0199371 +0.0110379 0.0712445 0.0546046 +-0.043282 0.147753 0.00390043 +0.0142589 0.0737441 -0.0304465 +-0.037534 0.168232 0.00175297 +0.0421124 0.0467315 0.0307997 +-0.0195242 0.0336044 -0.023287 +-0.0581683 0.0606896 -0.00283185 +-0.0892904 0.149814 0.024685 +-0.0328117 0.0335416 -0.0258378 +-0.0534094 0.150878 0.0234093 +0.0224588 0.120521 -0.00588511 +0.0297724 0.0549903 0.0393628 +-0.0689711 0.136995 -0.00816407 +0.0327608 0.11383 -0.00261931 +-0.0138771 0.164812 -0.0186885 +0.00401259 0.0341521 0.00329327 +-0.0776837 0.154812 0.0263001 +-0.0617213 0.0781294 -0.0185002 +0.0405341 0.105626 0.00416435 +-0.033143 0.157873 -0.0118064 +-0.0244152 0.0723023 0.0471532 +0.000983167 0.0373381 0.00163376 +-0.0227666 0.126779 0.0143916 +-0.0151278 0.128803 0.00988702 +0.000514565 0.0717586 0.0570729 +0.0202169 0.0591906 0.0484605 +-0.0591321 0.0334434 -0.0069378 +-0.0338188 0.0345795 0.040191 +-0.000499113 0.11695 0.0400287 +-0.0463678 0.13079 0.00400616 +0.0171482 0.0349466 -0.009792 +-0.064905 0.0607648 0.0196679 +-0.0624362 0.150651 -0.0105777 +-0.0354607 0.154847 -0.00919588 +-0.0211471 0.0377711 0.0538261 +-0.0691709 0.147293 -0.0286567 +-0.0360974 0.127648 0.0124754 +-0.0776508 0.151441 -0.00388634 +0.0365033 0.0512847 0.031619 +0.0193623 0.0370952 -0.00967348 +0.0153438 0.0522442 -0.0271619 +-0.0174947 0.0815257 0.0576296 +-0.0629203 0.122369 -0.00879811 +0.0168951 0.128644 0.0116162 +0.0397845 0.0699028 0.0328672 +0.00847616 0.0963576 0.0505263 +-0.0532837 0.0454354 0.0434394 +-0.0154326 0.0388218 -0.0141873 +0.058968 0.0691324 0.00813536 +-0.0155327 0.116851 0.0372458 +-0.0261049 0.0632214 -0.0314499 +-0.0580383 0.122682 0.0406302 +-0.0153478 0.0972963 0.0501876 +-0.0480268 0.116533 -0.0152488 +-0.0440293 0.0378087 0.0445145 +0.0122229 0.0822322 -0.030844 +-0.00477881 0.0390844 -0.0104359 +-0.0106511 0.0496684 -0.0311061 +-0.0197213 0.123533 0.0272668 +-0.000499702 0.119705 0.0381547 +-0.0497662 0.165331 0.00186024 +0.0034577 0.0989815 0.0493164 +-0.0623164 0.153672 -0.0306063 +-0.0676947 0.134039 0.046063 +-0.0536041 0.0588172 -0.00776341 +-0.0774688 0.144183 0.0446652 +-0.054123 0.064196 0.0330627 +-0.0515128 0.0452783 0.043411 +-0.0216106 0.0422609 -0.0287762 +-0.0721201 0.0655088 0.0210948 +-0.0214414 0.0682091 0.0499624 +0.0246691 0.103387 0.0411037 +-0.0584632 0.0480819 0.000648377 +-0.0193941 0.113623 -0.0183331 +-0.0642327 0.0431706 0.0367918 +-0.0673041 0.044774 0.00468689 +0.00124491 0.0726488 -0.0351082 +0.0293752 0.0646271 0.0424024 +0.0334188 0.0399387 -0.00226403 +-0.0648162 0.092445 -0.0185198 +-0.0588392 0.0371017 0.0463605 +-0.0464973 0.113852 0.0344899 +-0.0253214 0.158135 -0.00165461 +0.0565751 0.0564133 0.00219071 +-0.0628971 0.106793 -0.0162163 +-0.0672273 0.135447 0.0449702 +-0.0874127 0.118983 0.0477049 +0.0264339 0.0415833 -0.00518191 +-0.0649816 0.114139 0.0429675 +-0.087689 0.0861087 0.0184696 +-0.0759388 0.151364 -0.016882 +-0.00938485 0.0992897 -0.0251913 +-0.0906583 0.12815 0.00627512 +0.0420818 0.101483 0.016165 +-0.0366993 0.124957 -0.00615077 +0.0344101 0.0633165 0.0391255 +0.0312208 0.0578184 0.0397344 +-0.0245116 0.0679611 0.0445844 +-0.0494967 0.0932039 0.0445022 +-0.0762012 0.149986 -0.0138757 +-0.0469178 0.060141 0.0374462 +-0.0939221 0.128285 0.0202478 +-0.0488103 0.0898531 -0.0217755 +-0.013542 0.129298 0.0162538 +0.0557083 0.0616421 0.000366134 +0.0340796 0.0848941 0.0405554 +0.0303873 0.0525299 -0.0147333 +0.0173214 0.127268 0.00181685 +-0.0623602 0.164675 -0.0475927 +-0.0633366 0.0613129 -0.000511486 +-0.0663574 0.0370366 0.0151548 +-0.0567588 0.053509 0.00466959 +-0.082746 0.0802849 -0.00049163 +-0.00173892 0.0697883 -0.0347021 +-0.0444708 0.0888726 0.0431834 +-0.0676524 0.0720092 -0.0120172 +0.0578262 0.0552267 0.0219335 +-0.0418656 0.104235 -0.0206965 +0.0300166 0.0708304 -0.0207823 +-0.0533336 0.128311 0.0351755 +-0.0275965 0.0836272 0.048557 +-0.0894883 0.139285 0.0301857 +0.0461177 0.0511569 0.0313544 +0.0505588 0.0711508 0.00463977 +-0.0653079 0.154958 0.0291369 +-0.0185448 0.0460852 0.0515079 +-0.0843685 0.105877 0.0253348 +-0.0875722 0.151019 0.0254764 +-0.0711952 0.0805577 0.0397762 +0.0367726 0.100261 -0.0101361 +0.0280869 0.0432543 0.0332457 +0.000487446 0.041412 0.0465786 +-0.0266388 0.038336 -0.00299264 +-0.00342216 0.0391144 -0.00832149 +-0.0611289 0.0344725 0.039662 +-0.0517362 0.0738243 -0.0167692 +-0.0804236 0.104574 -0.00559216 +-0.0319013 0.0525534 -0.0124561 +-0.0616634 0.0612417 -0.00198952 +-0.0659473 0.151954 -0.0393992 +0.0336372 0.112962 -0.00230707 +-0.0699642 0.138462 -0.00776795 +0.00139789 0.0405023 -0.0245871 +-0.059508 0.0890036 0.0450344 +-0.0550222 0.141298 -0.00203484 +-0.0720681 0.0805547 0.0392361 +0.0126182 0.0846922 0.0534757 +0.0593665 0.0622129 0.00511321 +-0.0924363 0.118744 0.0263157 +-0.0166806 0.0510876 -0.0315182 +0.0119118 0.0342207 -0.00263798 +-0.0646486 0.156189 0.0162701 +-0.022872 0.104437 -0.0231879 +-0.0799264 0.129511 -0.00520384 +0.0394641 0.063132 0.032359 +-0.0114897 0.0951792 0.0542781 +-0.0474976 0.111158 0.0371638 +-0.0683525 0.155277 0.00186884 +-0.000867993 0.104495 -0.0223762 +-0.0462686 0.12794 -0.00315273 +-0.0306198 0.11135 -0.017885 +-0.0420238 0.0464078 -0.0143471 +-0.0115071 0.0801438 0.0578104 +-0.00552471 0.130134 0.0220582 +0.0553699 0.0651884 0.000788532 +0.000971023 0.0370418 -0.0149189 +-0.0695999 0.162389 -0.0499627 +-0.0593254 0.0447426 0.0431798 +-0.0163529 0.16023 -0.0109161 +-0.0074892 0.108662 0.0435531 +-1.59767e-05 0.130672 0.0211571 +-0.0414957 0.0762285 0.0430404 +-0.00181283 0.0854279 -0.036655 +-0.0573252 0.157131 0.000943525 +-0.0582662 0.0597287 0.0219286 +-0.0158083 0.0827626 -0.0393641 +-0.0636754 0.156752 -0.0416076 +-0.0399677 0.0461402 -0.0203282 +-0.025156 0.16972 -0.0189618 +-0.0527747 0.0826622 -0.0215537 +0.0251411 0.10209 0.0417928 +-0.043632 0.0462886 -0.0112814 +-0.0620154 0.164635 -0.0555847 +0.0104502 0.0343141 -0.0181143 +-0.0391566 0.162183 -0.0124024 +-0.0483573 0.129635 0.0282843 +0.00538744 0.0448871 -0.0255741 +-0.0054947 0.0533903 0.0535249 +-0.00732851 0.0942973 -0.033961 +-0.0241934 0.0388427 0.0350005 +-0.0181599 0.0393223 0.0394029 +0.0346554 0.10439 -0.0105413 +-0.0459466 0.0345121 -0.0200076 +-0.0409396 0.168342 -0.0108401 +0.0103005 0.0624571 -0.0307796 +-0.0681652 0.158429 -0.00684039 +-0.00243741 0.0385239 0.0217416 +0.060795 0.0623425 0.0151668 +-0.0927217 0.128206 0.0112525 +-0.0740576 0.168348 -0.0248615 +-0.0345432 0.114978 -0.015669 +-0.0591204 0.0334451 -0.00148219 +-0.0599836 0.043576 0.0142711 +-0.0568374 0.0898133 -0.021762 +-0.0727774 0.16869 -0.0244081 +-0.00877695 0.169647 -0.023748 +-0.0733702 0.171289 -0.0318245 +-0.0533609 0.033209 0.01963 +-0.012858 0.0386932 -0.00424091 +0.0446984 0.0804984 -0.000780025 +-0.0604981 0.105663 0.0403307 +-0.0437727 0.082626 -0.0206932 +-0.0251898 0.0388783 0.0347661 +-0.00550353 0.0561986 0.0539335 +-0.0649478 0.164181 -0.0229827 +-0.0145881 0.165422 -0.0124907 +-0.0415058 0.0577139 0.0401965 +0.0385298 0.0631329 -0.0097765 +-0.0643222 0.166215 -0.0313693 +-0.0769851 0.0690914 0.0187275 +-0.013127 0.120519 -0.0116431 +-0.0624813 0.156041 0.0199412 +-0.0475747 0.0390527 -0.0120963 +0.0154157 0.0433241 -0.0236953 +-0.00124361 0.130098 0.0236021 +-0.00149237 0.118319 0.0391398 +-0.0454304 0.130382 0.00608349 +0.0094151 0.117047 -0.0161127 +-0.0370213 0.0344129 0.0343812 +-0.0266349 0.121939 -0.00696588 +-0.0514954 0.0833657 0.0447762 +-0.0661547 0.1622 -0.0162285 +0.0354074 0.0446129 -0.00524037 +-0.0839561 0.144602 0.00415973 +-0.0114934 0.104435 0.0434539 +-0.0811445 0.153633 0.00754624 +0.0416181 0.0637615 0.0286411 +0.0336503 0.0646637 0.0398008 +0.00904657 0.129598 0.024451 +-0.075728 0.151337 -0.0208826 +-0.047856 0.132056 0.00259359 +-0.0635915 0.15525 -0.0109401 +-0.025528 0.0383109 0.0298198 +-0.0664625 0.145705 -0.0206681 +-0.0675712 0.139722 0.0445155 +-0.0630199 0.134039 -0.00765574 +-0.0859393 0.101835 0.0256124 +-0.0530219 0.147196 -0.00187885 +-0.00620458 0.038993 0.0313778 +0.0378425 0.10835 0.0231802 +-0.0877357 0.0860979 0.0084778 +0.0064767 0.115498 0.0396093 +-0.027105 0.162286 -0.015104 +-0.0801261 0.144525 -0.00183492 +-0.0858754 0.148602 0.0326009 +-0.060661 0.155018 0.0264156 +-0.0104794 0.0575747 0.0533869 +-0.0433 0.0336903 -0.024306 +-0.0668671 0.0980924 -0.0163226 +-0.0682097 0.171724 -0.0385204 +0.049328 0.0615911 -0.00371844 +-0.059497 0.0861573 0.0445009 +-0.0875265 0.087486 0.0224433 +-0.0660555 0.0600044 0.0111686 +-0.0578054 0.142438 0.0322424 +0.00123277 0.0783068 -0.0354173 +-0.0916354 0.132395 0.0252256 +-0.0117599 0.104933 -0.0231377 +-0.0346346 0.0548282 -0.01038 +-0.0222409 0.0383275 -0.000251248 +0.00824961 0.0725345 -0.0333305 +0.0313861 0.0740897 0.0418701 +0.0164934 0.100411 0.0468922 +-0.0719809 0.156292 0.0165776 +-0.0221908 0.175658 -0.0213821 +-0.00588737 0.108814 -0.0225516 +0.0336337 0.112484 -0.0031866 +-0.0393568 0.123991 -0.00912015 +-0.00841793 0.0387705 -0.00155909 +-0.0431088 0.0347881 0.0415217 +-0.0281377 0.171231 -0.00924208 +0.0317135 0.0955631 0.0407455 +0.0166807 0.124611 -0.00431903 +-0.0923991 0.132355 0.0192227 +0.0141807 0.0900592 0.0522594 +-0.0553478 0.054711 -0.00338754 +-0.0742948 0.147166 -0.0148659 +-0.0210322 0.0623911 0.0469253 +-0.0808524 0.0720445 0.00954101 +0.0185494 0.0379494 0.0423026 +-0.0841291 0.0817203 0.00248105 +0.0309459 0.0700081 0.0411857 +-0.0394974 0.0705046 0.0418138 +-0.0762918 0.169333 -0.0300921 +-0.0537237 0.0477139 0.0256667 +0.0448999 0.0861351 0.000186186 +-0.0313094 0.0384531 -0.00773361 +-0.0305219 0.0474445 0.0454913 +-0.0809514 0.0882189 -0.0076035 +0.0546575 0.0706779 0.0225865 +-0.0414965 0.0986758 0.0418571 +-0.0484435 0.0628471 0.0360579 +0.0594927 0.066407 0.020186 +-0.0627925 0.0838575 -0.0191674 +-0.0214511 0.184864 -0.013038 +-0.0935392 0.129637 0.0202382 +-0.0799546 0.100457 -0.00758867 +-0.0552688 0.126926 0.0376418 +0.0378584 0.0645918 0.0353403 +-0.0361046 0.0383233 -0.0122787 +-0.049226 0.14015 0.0123965 +-0.0164997 0.0938314 0.054193 +-0.0746007 0.0914774 0.0400082 +-0.0791205 0.0709783 0.00599758 +0.0253641 0.0347082 0.00521179 +-0.0594957 0.0918578 0.0453847 +0.0136708 0.0820393 0.0532361 +-0.0193315 0.182966 -0.0230088 +-0.000544127 0.127196 -0.00494172 +-0.030476 0.0664272 -0.0264734 +-0.0734051 0.0674458 0.022683 +-0.0136727 0.0337044 -0.0241151 +0.0214461 0.036336 0.0158614 +0.0583506 0.0662943 0.00413175 +-0.0639059 0.118033 -0.00945272 +-0.0454908 0.0987379 0.0426533 +-0.0318359 0.0344957 0.0406866 +-0.0657843 0.167288 -0.0290298 +0.0181885 0.053509 0.04724 +-0.0610973 0.169393 -0.058599 +-0.0167464 0.108538 -0.0209441 +-0.0826184 0.0802381 0.0286257 +-0.0731223 0.134062 0.0505767 +-0.0135829 0.03702 0.0510108 +0.0354665 0.0768048 0.0390018 +0.0499493 0.051169 0.0281186 +-0.00858939 0.0389741 -0.00922854 +-0.0482262 0.166987 -0.00394405 +0.000506781 0.0605965 0.0560209 +-0.0571262 0.0333733 -0.00101401 +-0.0527176 0.0611373 0.029069 +-0.0225206 0.0919822 0.0517607 +-0.0727584 0.158224 -0.0349231 +0.0221671 0.123584 -0.0006811 +-0.0697019 0.142554 0.0449861 +-0.0890361 0.146068 0.0101777 +0.0300144 0.0389449 0.0261617 +0.0457459 0.0834058 0.0171675 +-0.0828165 0.0790258 0.0245191 +-0.0216847 0.180158 -0.0138785 +-0.0260473 0.11708 -0.0139183 +-0.0263102 0.123352 0.021955 +-0.026277 0.0795343 0.0501986 +-0.04015 0.0473434 -0.014266 +-0.0911404 0.129685 0.035237 +-0.0376719 0.114063 -0.0167039 +-0.0138183 0.0855391 -0.0388001 +-0.0574963 0.111121 0.0367615 +-0.0459611 0.149058 -0.0040494 +-0.06359 0.153594 -0.035633 +0.0294595 0.116659 -0.00368699 +-0.0465112 0.0491437 0.0387964 +-0.0476612 0.135572 0.0133995 +-0.0122712 0.0385653 -0.000297189 +0.0438612 0.0930832 -0.000804157 +-0.00849948 0.0911907 0.056727 +-0.0554517 0.0444829 -0.0071986 +0.0112279 0.0808839 -0.0317275 +-0.0364414 0.0346808 0.041293 +-0.0768829 0.108524 0.037335 +-0.0212115 0.177139 -0.0220322 +-0.0498078 0.0898419 -0.0216876 +0.00832653 0.130915 0.00561741 +-0.0834391 0.153089 0.025871 +-0.0797915 0.0746069 -0.00248195 +0.0162926 0.0348913 0.030635 +-0.0720312 0.141354 -0.00781974 +-0.0640613 0.0606361 0.00380817 +-0.0616877 0.169385 -0.0545934 +-0.0180884 0.184586 -0.0174536 +-0.083714 0.0804887 0.0254979 +-0.0378459 0.0971527 -0.0224307 +-0.048763 0.120209 -0.0131018 +0.0257432 0.120365 -0.00224906 +0.0155215 0.0490175 0.0450471 +-0.0516538 0.162634 -0.00285466 +-0.00249513 0.0774404 0.0585569 +-0.0676995 0.0606833 0.0155957 +-0.0530523 0.0333885 -0.00566149 +0.00632209 0.0596079 -0.030662 +-0.075813 0.0681115 0.0180714 +0.0416741 0.0642804 0.0284921 +-0.04591 0.132311 0.0103278 +-0.0266282 0.0932643 0.045173 +-0.0409763 0.128303 0.0136557 +-0.0295455 0.0745738 0.040676 +-0.0236123 0.0408478 -0.0290846 +-0.062999 0.13114 -0.0082084 +-0.0282657 0.0357556 -0.0195136 +0.0383138 0.109087 0.0181423 +-0.0225227 0.0903335 -0.0360154 +-0.00581332 0.0840953 -0.0378871 +-0.0560848 0.155673 0.012015 +-0.0384894 0.0436513 0.0409963 +0.0250684 0.0912521 -0.0226015 +0.0327251 0.116757 0.0189485 +-0.00849679 0.081545 0.0579523 +0.00549376 0.116905 0.0389072 +-0.0684642 0.035536 0.0130279 +-0.0274333 0.0808284 0.0484505 +-0.0892338 0.0888828 0.0134587 +0.040773 0.0858024 -0.0107788 +-0.018787 0.0654231 0.0516453 +-0.057411 0.0334884 -0.00846165 +-0.0515646 0.0516091 -0.00736491 +-0.0341101 0.171131 -0.0149349 +0.0224908 0.0672402 0.0465227 +0.00748827 0.048894 0.0505047 +-0.0891497 0.139122 0.0375101 +-0.0324992 0.033739 0.00907408 +-0.00547868 0.112944 -0.019663 +-0.00364368 0.038223 0.0108877 +-0.00888297 0.175714 -0.027834 +-0.0616908 0.156845 -0.0305919 +-0.0454927 0.0747515 0.0421648 +-0.0628753 0.0333858 -0.000385113 +0.0200484 0.122759 0.029923 +-0.0624127 0.150637 -0.0175763 +-0.0772056 0.0717509 -0.00044869 +-0.070203 0.179305 -0.0507979 +-0.021805 0.0812974 -0.0389167 +0.00417139 0.0894659 -0.0333631 +-0.00354618 0.035584 0.0475305 +-0.0881296 0.100997 0.0213597 +-0.0344927 0.0803488 0.0420944 +-0.0142597 0.180104 -0.0279187 +-0.0772012 0.161073 -0.0279344 +0.0267764 0.0373043 0.025139 +-0.0764984 0.127442 0.0532158 +0.0305998 0.0741029 0.0424942 +-0.0429656 0.115061 -0.0157138 +-0.0569157 0.131148 0.0370227 +-0.087746 0.09368 0.0248353 +-0.0282695 0.0620042 -0.0284458 +-0.026741 0.0877745 0.0490115 +-0.0141005 0.0382966 0.0123251 +-0.040335 0.124745 0.0227896 +-0.0176742 0.109826 -0.020315 +0.0100598 0.0371564 0.0309489 +0.0330284 0.116174 0.0204895 +0.0194916 0.111179 0.0380087 +-0.0468321 0.144886 0.00412892 +0.00432629 0.0568097 -0.0310178 +0.0172994 0.0665713 -0.0290602 +-0.0776345 0.165887 -0.0268309 +-0.0754949 0.117024 0.0522099 +0.0129986 0.124708 -0.00640366 +-0.0551543 0.0561755 0.00960447 +0.0258384 0.0659192 0.0443144 +-0.0892157 0.0956404 0.0184193 +-0.062275 0.152174 -0.0245791 +-0.0712276 0.159591 -0.0429327 +-0.0468614 0.102797 -0.0212675 +-0.0888687 0.0942285 0.0104297 +0.00705483 0.113673 0.0402142 +-0.0846088 0.10754 0.00337493 +-0.0567766 0.0840541 -0.0213935 +0.0291103 0.0713139 0.0420683 +-0.0416245 0.172695 -0.00500345 +0.0467254 0.0741323 0.0166809 +0.0182946 0.123502 0.0292701 +-0.032545 0.0821172 -0.0295502 +0.0405942 0.0847142 0.0324234 +-0.063874 0.0967575 -0.0177619 +-0.0200635 0.0385408 -0.00554998 +-0.0617567 0.139364 -0.00656769 +-0.0151158 0.0388065 -0.0122456 +0.0258671 0.111418 0.0358303 +-0.0323169 0.126646 0.013854 +0.0128496 0.0432822 0.0446281 +0.0410596 0.104249 0.0151631 +0.0413114 0.0661977 -0.00477755 +-0.0524783 0.0442541 0.0446515 +-0.00534534 0.0423344 0.0481709 +-0.0154906 0.0587868 0.0517337 +-0.0768702 0.122267 -0.00710647 +0.018318 0.0607989 -0.0274966 +-0.0414689 0.101488 0.0411988 +-0.03948 0.109789 0.0371385 +-0.071689 0.171513 -0.0326505 +-0.0562412 0.0479891 0.0306662 +0.0198041 0.103539 -0.0196351 +-0.06089 0.146655 -0.00344226 +-0.0625194 0.150622 -0.0185752 +0.0162788 0.0421207 0.0443108 +-0.0926435 0.13098 0.0162303 +-0.0102744 0.0864318 -0.0379838 +0.0437196 0.0846401 -0.00379782 +-0.0575438 0.119835 0.0395668 +-0.0312754 0.118165 0.0306394 +-0.0384168 0.120732 -0.0116964 +-0.0133826 0.1039 0.0435877 +0.0232434 0.0804535 -0.0255191 +-0.0102585 0.0379591 0.0497745 +-0.0427371 0.0753968 -0.0185868 +0.0223381 0.0606785 -0.0258752 +-0.0124978 0.122374 0.0339942 +0.00450508 0.0688823 0.055725 +0.0471561 0.0614873 -0.00363177 +-0.0496676 0.0649029 -0.0122308 +-0.0360083 0.0485228 -0.0153235 +0.0255211 0.116701 0.0317994 +0.000516492 0.101662 0.0444028 +0.00434751 0.121547 -0.0129175 +-0.0374873 0.0959326 0.0432114 +0.0252705 0.0346338 0.0163557 +-0.0124579 0.0545987 0.0514221 +-0.0889602 0.131049 0.0432066 +-0.0372423 0.152141 0.00211029 +-0.0892956 0.0942653 0.013432 +-0.0518302 0.0344778 0.0329457 +-0.0187757 0.0756949 -0.0390019 +-0.0719603 0.0681626 0.0276375 +-0.0847959 0.147297 0.0357863 +-0.0683786 0.160357 -0.00982452 +-0.0326605 0.0863757 -0.0255732 +0.0456643 0.0848033 0.01617 +0.0560044 0.0608622 0.0263962 +0.0242808 0.034582 0.00510919 +-0.0255484 0.0414464 0.0539815 +0.0584482 0.0538047 0.0101717 +-0.0507323 0.0738128 -0.0166527 +-0.0145896 0.101524 -0.0235873 +0.00379349 0.0393361 0.0313217 +-0.060041 0.155524 0.0222725 +0.0330115 0.107346 -0.00970764 +-0.0356538 0.120932 -0.00987931 +0.0252334 0.114772 -0.00969056 +-0.0560291 0.051292 0.00869383 +0.039494 0.0484532 0.0321483 +0.0260206 0.095556 0.0448127 +-0.0144952 0.092498 0.0556089 +-0.0745303 0.0887706 0.0400356 +-0.0427423 0.0768225 -0.0188988 +-0.0254944 0.0348465 0.0469921 +0.0115755 0.104003 -0.020168 +0.0177398 0.128218 0.01192 +-0.0537709 0.0460941 0.0150722 +-0.0260174 0.0351047 -0.0290083 +0.0146321 0.0460649 0.043757 +-0.0725348 0.149777 -0.0387435 +-0.067793 0.0851703 -0.0179862 +-0.0345051 0.0491976 0.0390013 +-0.0575351 0.0727864 0.0407731 +-0.0902562 0.135043 0.0112131 +-0.0341019 0.0350895 0.0466468 +0.0354707 0.0862229 0.039086 +-0.0635111 0.15292 -0.0340962 +0.000752728 0.131478 0.01712 +0.0415962 0.101461 0.0191676 +0.0199544 0.117871 -0.0110405 +0.0125 0.0341066 0.00131673 +-0.0104877 0.105844 0.0434252 +0.000625364 0.130997 0.01994 +-0.00947876 0.108641 0.0432746 +0.0427329 0.0747306 -0.00479562 +0.0175177 0.121695 0.0318921 +-0.0724967 0.123205 0.0535111 +-0.0217998 0.0826894 -0.0387559 +-0.0474379 0.0384277 -0.0132876 +-0.0453217 0.127718 -0.00291517 +0.00149278 0.115548 0.0405079 +-0.00268673 0.0598311 -0.0338297 +-0.0282466 0.0410133 0.0533665 +-0.084979 0.0912122 -0.0035611 +-0.00188052 0.0377314 0.00623396 +-0.0719012 0.152408 -0.0434229 +0.0297667 0.100164 -0.016062 +-0.0446553 0.0615526 0.0394256 +-0.0935168 0.125484 0.0132627 +0.00892319 0.0349264 0.0435129 +-0.0906919 0.142015 0.0231619 +-0.0362968 0.126232 -0.00232089 +-0.0581074 0.0494572 0.00366497 +0.0584743 0.0538121 0.0171841 +0.0453685 0.090397 0.014157 +0.0451698 0.0903876 0.0161628 +-0.0648504 0.099576 -0.0170426 +-0.0336174 0.0385515 -0.0101375 +-0.0818746 0.144748 0.0414084 +-0.0921915 0.114676 0.0133297 +-0.0735116 0.140055 0.0477493 +-0.0625074 0.0334277 0.00145514 +0.0301634 0.0659717 0.0417895 +-0.0313891 0.0338671 0.0146006 +-0.0524964 0.0876231 0.0453765 +-0.0763164 0.155546 0.0238171 +0.0473804 0.0650284 -0.00116263 +-0.0203751 0.165368 -0.0103486 +-0.074953 0.131092 -0.00759533 +-0.0200723 0.0361973 0.0530852 +-0.0623326 0.164687 -0.0445921 +-0.0432796 0.127517 -0.00276726 +-0.0794589 0.155317 0.0154304 +0.0484584 0.0430177 0.0142199 +0.0516914 0.0635003 0.0289607 +0.0124992 0.111251 0.0392691 +-0.00916969 0.168123 -0.0207225 +-0.0624966 0.0987153 0.0424769 +0.0403564 0.0602895 0.0300713 +0.000529964 0.0745913 0.0578265 +-0.00430704 0.037991 -0.0149598 +-0.0458025 0.0336244 -0.00441422 +0.0244543 0.124393 0.0172632 +-0.0566778 0.0485827 0.00942267 +0.0118497 0.0354401 0.0310392 +-0.0460906 0.156154 -0.00788178 +0.0200436 0.125383 0.0241901 +-0.0110606 0.128229 0.000136123 +-0.0680155 0.149781 -0.0384715 +-0.0340535 0.158097 0.00328753 +-0.063246 0.0709836 0.037551 +0.00837353 0.0479453 -0.0272176 +-0.0704921 0.0944433 0.0420805 +0.0271048 0.0835778 0.0462962 +-0.0814225 0.0858535 0.0328878 +-0.0311244 0.126183 0.00987945 +0.00420219 0.0866314 -0.0335404 +-0.0160918 0.0359549 0.0514785 +-0.0387772 0.152061 -0.00669739 +-0.0394877 0.095879 0.0424449 +-0.0556734 0.0645255 -0.00818248 +-0.0721186 0.0637108 0.0173676 +-0.00866441 0.055565 -0.0335626 +0.034399 0.0476191 -0.006288 +0.0184894 0.03497 -0.0076507 +-0.0208903 0.0376209 0.05361 +-0.0721389 0.12842 0.0519775 +-0.0135421 0.093873 0.0547462 +-0.0114977 0.038716 -0.00213082 +-0.0444942 0.0761733 0.0424299 +-0.0162113 0.0387427 -0.00681752 +-0.0632795 0.162306 -0.0238202 +-0.0678999 0.11945 -0.00879052 +-0.0624555 0.163099 -0.0465902 +-0.0197676 0.0376635 -0.0177276 +-0.00982564 0.0339746 -0.0198462 +-0.0334993 0.115969 -0.0147052 +0.0241258 0.0914782 -0.0228484 +0.0393714 0.104176 0.025187 +-0.0877422 0.114422 0.00426669 +0.0169437 0.0346991 -0.00395051 +-0.0659364 0.0364202 0.0386491 +0.0236414 0.0741206 0.0482553 +0.0360643 0.108191 -0.003826 +-0.0498837 0.0340852 -0.0133065 +0.0109544 0.0459934 0.0454216 +0.0232194 0.06778 -0.026032 +0.0407755 0.0675587 -0.00776366 +0.0164452 0.127885 0.0214354 +0.0306214 0.073711 -0.0207585 +0.0310665 0.0768618 0.0431993 +-0.0326395 0.0549161 -0.0112709 +-0.0264479 0.0721314 0.0435447 +0.0185916 0.116689 0.0359263 +0.0210399 0.118016 0.0341276 +-0.0910253 0.115214 0.0323598 +0.000420695 0.0340758 -0.0179207 +0.011475 0.115421 0.0379758 +0.0558934 0.0728505 0.0127047 +-0.0168011 0.0813465 -0.0393174 +-0.0884013 0.103686 0.0143755 +0.00687166 0.100046 -0.0219438 +0.00938176 0.0463536 -0.0257255 +-0.0376115 0.11722 -0.0140038 +-0.0454999 0.102932 0.0417867 +-0.0638509 0.0597328 0.00826283 +-0.0626761 0.0691812 -0.0125769 +-0.0654105 0.124234 0.0493774 +-0.0585036 0.0790577 0.0434985 +0.025387 0.103408 0.0403826 +0.0322433 0.0896617 -0.0189276 +-0.0875821 0.0909427 0.0247332 +-0.0855607 0.103501 0.00239284 +-0.0436971 0.0419128 0.0432773 +-0.0946145 0.122826 0.0212791 +0.0282404 0.0858422 -0.0216043 +0.00524711 0.0726037 -0.0343433 +0.00348793 0.114165 0.0408953 +-0.0345349 0.108408 0.0380462 +-0.053757 0.152473 0.0202331 +-0.0684765 0.061182 0.0096252 +-0.0653795 0.17033 -0.0418012 +0.0335191 0.0398635 0.0260657 +0.00150101 0.0647986 0.0566673 +-0.0386685 0.0621637 -0.0127302 +0.0514753 0.0731205 0.0184716 +-0.0475108 0.159316 0.00812402 +-0.0418554 0.101378 -0.0213767 +0.059111 0.0580409 0.00617531 +-0.0235023 0.105779 0.0421282 +-0.0564932 0.0861648 0.0446121 +0.0463019 0.07925 0.0141776 +-0.037115 0.160706 -0.0129903 +-0.0454732 0.0917007 0.0431865 +-0.08762 0.143285 0.0101199 +0.0294825 0.0348729 0.0114843 +0.0351631 0.0941496 -0.0136388 +0.0169892 0.122251 -0.00777586 +-0.0286955 0.175698 -0.00647862 +-0.0586479 0.0629437 -0.00583333 +-0.0799097 0.0706493 0.0132254 +0.0440384 0.0959414 0.0171588 +0.00466861 0.0365644 -0.00250089 +-0.0368263 0.0929138 -0.0236695 +-0.0126068 0.0392015 -0.0264338 +0.014095 0.041997 0.0446638 +0.00757449 0.035092 0.025056 +-0.0564565 0.03337 -0.00815977 +-0.0774971 0.128861 0.0533302 +0.0348978 0.0613787 -0.0138096 +-0.0348784 0.10713 -0.0202183 +0.0074278 0.117326 -0.0164147 +-0.0416698 0.0345261 0.0350582 +-0.0711528 0.180791 -0.0525602 +-0.0633069 0.0343768 0.0340823 +-0.0795725 0.091329 0.0351135 +-0.00149388 0.0787876 0.0581499 +-0.0838841 0.12062 -0.00343109 +-0.0017512 0.0769296 -0.0360915 +0.00921045 0.0851252 -0.032 +0.0528986 0.056075 -0.00272531 +-0.088793 0.0888086 0.00747102 +0.0367516 0.061565 -0.0117718 +-0.00560731 0.0389273 -0.00299633 +-0.0145783 0.0348246 -0.0259715 +-0.0668255 0.162993 -0.016474 +0.0537671 0.0492093 0.00323447 +0.0164968 0.0990289 0.0471605 +0.0350254 0.0533499 0.0328505 +-0.0502577 0.127427 -0.00458948 +-0.0354996 0.0605317 0.0401535 +-0.0445094 0.0832466 0.0430632 +-0.061134 0.11687 0.0396165 +0.0288023 0.0594063 -0.0198054 +-0.0345743 0.120058 0.0294165 +-0.00577775 0.0812461 -0.0375203 +-0.0271582 0.125819 0.00840694 +-0.00487894 0.130442 0.0208375 +-0.0485449 0.165375 0.00344343 +0.00426734 0.0682596 -0.032922 +-0.0887148 0.12811 0.00328264 +-0.0688911 0.0610594 0.0132079 +-0.0845844 0.121705 0.0490448 +0.0086501 0.130656 0.00430717 +-0.0694892 0.109539 0.0380952 +-0.0883053 0.149858 0.0265188 +-0.0556122 0.136727 0.0318764 +0.00753471 0.0632773 0.055432 +-0.0675754 0.0334584 0.000400215 +0.0390555 0.064539 0.0335561 +0.00752021 0.073081 0.0562837 +-0.0898786 0.113438 0.0340422 +-0.0729585 0.134037 -0.00770509 +-0.0713317 0.151217 -0.0439201 +0.00350232 0.123774 0.0338316 +-0.0682244 0.142863 -0.0118107 +-0.0110454 0.113378 -0.0180964 +0.0539053 0.0478505 0.00821457 +-0.0614468 0.141404 -0.00570472 +-0.0113089 0.0383954 0.0218511 +-0.0281079 0.177558 -0.016771 +0.012409 0.0418787 -0.0238148 +-0.00282516 0.102957 -0.0229221 +0.0254031 0.123772 0.0104796 +-0.0305987 0.0803029 0.0419758 +-0.0750181 0.0761727 0.0341343 +-0.0144519 0.166922 -0.0140569 +0.00338055 0.0465728 -0.0280809 +-0.0162255 0.177147 -0.0257279 +0.0131167 0.108671 -0.0187213 +0.0272829 0.121723 0.00548626 +-0.0883907 0.115479 0.0451949 +-0.0879259 0.102339 0.0203636 +-0.0548201 0.128324 0.0365339 +-0.0820753 0.129944 0.0519532 +0.00724365 0.07823 -0.0340312 +-0.0819891 0.0923793 -0.00757573 +-0.0303556 0.168269 -0.0071929 +-0.00250456 0.0562401 0.0542942 +-0.0616678 0.143939 0.037247 +-0.0776245 0.151441 -0.00287924 +0.0374138 0.110303 0.0192381 +0.0348067 0.0902706 0.0399059 +-0.0127063 0.0671038 -0.0370425 +0.0160068 0.0347306 -0.00980024 +-0.0372246 0.0368821 -0.0130308 +0.0340234 0.0585319 -0.0137143 +0.0541559 0.0477549 0.017206 +-0.0405048 0.15944 0.00272423 +-0.0015963 0.0981039 -0.0279083 +-0.092935 0.117416 0.0233037 +-0.0832007 0.119017 0.0492012 +0.00140058 0.0348342 -0.0234319 +-0.0868724 0.106357 0.0173489 +-0.0166991 0.0570076 -0.034416 +-0.0907644 0.142021 0.0271708 +-0.0822477 0.106043 -0.00262262 +-0.0929753 0.11876 0.0253083 +-0.0263289 0.0434924 0.0526862 +-0.0374936 0.0733328 0.0420467 +-0.0355255 0.0818589 0.0431427 +-0.0650055 0.136996 -0.00788185 +-0.0705444 0.0712752 0.0339991 +-0.0549513 0.0339195 0.0239841 +-0.00779971 0.114512 -0.0173201 +0.0213851 0.0754916 0.050294 +0.0297243 0.0538559 -0.0167895 +-0.00746204 0.125196 -0.00874293 +-0.0385113 0.0973107 0.0424108 +0.0437641 0.0599949 -0.00412714 +0.00932784 0.0581716 -0.0301717 +-0.07404 0.148543 -0.0208687 +-0.067363 0.177688 -0.0512074 +-0.00213372 0.123188 0.0349488 +-0.0180211 0.168338 -0.0139614 +-0.0254657 0.0678395 0.0426887 +-0.0266217 0.0436536 -0.0288174 +-0.0498332 0.0956322 -0.0221283 +-0.0772795 0.155549 -0.0169029 +0.0369068 0.0799159 -0.0147176 +-0.0788489 0.119288 -0.00581129 +-0.0101059 0.171125 -0.0207965 +-0.0324932 0.0774699 0.0412179 +-0.0434937 0.0705308 0.0420517 +-0.0158265 0.0869335 -0.0385904 +-0.00548754 0.123746 0.0343085 +0.0610091 0.0623122 0.0111052 +-0.00962571 0.0451144 -0.0282927 +-0.0687445 0.160961 -0.0529537 +-0.00991099 0.115578 -0.0164445 +0.0199768 0.126969 0.0170274 +-0.0827793 0.0771313 0.0211566 +-0.0119077 0.0894805 -0.0370977 +0.0238643 0.100811 0.0434608 +-0.0130347 0.166801 -0.0212915 +-0.0934989 0.122762 0.0122811 +-0.0667245 0.0765676 -0.016644 +-0.0391998 0.0351247 -0.0118182 +-0.0445637 0.128075 -0.00132731 +-0.0258871 0.0377455 0.0194558 +-0.093776 0.124126 0.0142628 +-0.0698753 0.117966 -0.00835455 +-0.0515005 0.100157 0.0426446 +-0.0404873 0.112547 0.0355988 +-0.0674682 0.0382926 -0.00574154 +-0.0624974 0.0876076 0.0451456 +-0.0367451 0.0768715 -0.019149 +-0.00349748 0.0870382 0.0570453 +0.0243264 0.0591823 -0.0248233 +-0.0604582 0.154406 0.00215902 +-0.0742084 0.067281 0.00145303 +0.0461952 0.0834391 0.00817714 +-0.0246581 0.0664552 0.0433381 +0.0223219 0.0402539 -0.00770693 +-0.0269495 0.0511315 0.0418642 +-0.0426785 0.060742 -0.0126195 +-0.0470567 0.069722 0.0403886 +-0.057499 0.0889744 0.0446686 +-0.0925962 0.126825 0.0102659 +-0.0627541 0.166279 -0.0425846 +0.00227655 0.0655175 -0.0339267 +-0.0152717 0.181584 -0.0271612 +-0.0527991 0.0578707 0.0222512 +0.0181983 0.0768373 0.0527356 +-0.020287 0.0445184 0.0528933 +-0.0230546 0.0388523 0.0540611 +-0.0591948 0.0603156 -0.00052226 +-0.0356179 0.0505976 -0.0108834 +-0.0125985 0.0420542 -0.026434 +-0.0457346 0.0337173 0.00640665 +-0.0271239 0.117991 -0.0128729 +-0.0287901 0.105845 -0.0221143 +-0.0791947 0.116328 0.04948 +-0.037475 0.126933 -0.001254 +-0.0652274 0.172558 -0.0603808 +0.0249025 0.0659023 0.0447242 +0.0444853 0.062436 0.0294527 +-0.0584017 0.0411488 0.0207065 +-0.0637308 0.0380192 0.0421186 +-0.0224637 0.0768447 0.053535 +-0.0472049 0.132217 0.00449629 +-0.055985 0.033885 0.0237996 +-0.0637704 0.158563 -0.0153492 +-0.0889154 0.0875162 0.0124615 +-0.0630601 0.155204 -0.0366146 +-0.0858283 0.1008 0.00139713 +-0.00849876 0.0884233 0.057199 +-0.0464295 0.156494 0.00819518 +-0.0875333 0.0927687 0.0054156 +-0.0555067 0.053407 0.0086882 +-0.0319429 0.0346356 0.0246022 +-0.0532414 0.127751 -0.00500041 +-0.0324852 0.0946249 0.0445277 +-0.0652259 0.166727 -0.0597961 +0.0318258 0.090298 0.0426417 +0.0227624 0.0959793 -0.0216236 +0.0453464 0.0791637 0.00120688 +-0.00148178 0.0718081 0.0578063 +0.0484981 0.0664872 0.0276228 +-0.0638124 0.0339885 0.0132249 +0.0378702 0.100686 0.0303226 +0.0423416 0.0718943 -0.00578991 +0.0449549 0.0889654 0.0201657 +-0.0505604 0.0431885 -0.0101401 +0.0305345 0.113708 -0.00653825 +0.0175297 0.092684 0.048312 +-0.0405439 0.0338701 -0.0146326 +-0.0151193 0.0387785 0.0315419 +0.0425177 0.0660617 -0.00221978 +-0.0261619 0.0381432 0.054147 +-0.0435068 0.0576714 0.0396679 +-0.0531482 0.161241 0.00587596 +-0.0897425 0.0915834 0.0134432 +0.00549953 0.119637 0.0367537 +-0.00877042 0.130092 0.00788453 +-0.0417274 0.0725105 -0.0179617 +-0.0534984 0.0776159 0.0431279 +-0.0290767 0.121891 0.0239314 +0.0583737 0.0676977 0.00512132 +-0.0647358 0.157148 -0.0507072 +0.0435656 0.0945094 0.0231538 +-0.0220003 0.181634 -0.0125756 +-0.0298816 0.0621837 -0.0234188 +-0.0460097 0.127427 -0.00464706 +-0.0136152 0.0982979 -0.0261721 +-0.0662958 0.0637695 -0.0035905 +-0.0920915 0.118829 0.0424602 +-0.0157421 0.0686009 -0.0381423 +-0.063492 0.0819119 0.043822 +0.0519248 0.0461654 0.00821164 +-0.0528781 0.0490838 0.0346622 +-0.0896974 0.137929 0.0351902 +-0.0502406 0.140114 0.00340131 +-0.0460575 0.131197 0.00582383 +-0.0398248 0.0928735 -0.0232663 +-0.0287922 0.165339 -0.00670006 +-0.0017304 0.0712031 -0.0351875 +-0.0386191 0.118326 -0.013151 +0.0193849 0.126884 0.00540105 +0.0309645 0.0363887 0.0195722 +-0.0314998 0.155167 -8.72409e-05 +-0.000786782 0.0826169 -0.0366787 +-0.0771272 0.155133 0.00894547 +-0.00248977 0.112799 0.0419964 +-0.0279028 0.160261 -0.0136941 +-0.0431979 0.129461 0.00840104 +-0.0208217 0.0854768 -0.038298 +-0.01776 0.0714448 -0.0386564 +0.00624218 0.039472 0.0335072 +-0.0639011 0.119458 -0.00893676 +-0.0667029 0.176899 -0.0509708 +-0.0245413 0.0349941 -0.0287041 +-0.0487364 0.0753122 -0.0176891 +-0.0669945 0.169371 -0.0323347 +-0.00928822 0.0393788 0.0494849 +-0.0239808 0.0936155 -0.0313592 +0.0224894 0.0906371 0.0481279 +0.0242369 0.0748124 -0.0257049 +-0.0243462 0.1625 -0.00551798 +-0.0625942 0.153749 -0.0125838 +-0.0486891 0.137066 0.0163891 +-0.0679674 0.0350577 0.0131968 +-0.0626161 0.12969 0.0410793 +-0.0263812 0.120789 0.0279195 +-0.0802896 0.144766 0.0426469 +0.0132183 0.0794258 -0.0310561 +-0.0415045 0.0548576 0.0396938 +-0.00948994 0.0952069 0.0546127 +-0.0903261 0.135124 0.0222174 +-0.0574953 0.153709 0.0290191 +-0.0428742 0.10707 -0.020141 +0.057983 0.0674087 0.022273 +-0.0297438 0.0593588 -0.0214043 +-0.0562018 0.0589495 -0.00340637 +-0.0230647 0.0402418 0.0541248 +-0.062019 0.17397 -0.0618399 +-0.0412895 0.149153 -0.00363446 +-0.0485728 0.0503685 -0.00899002 +-0.00748812 0.10728 0.0439222 +-0.0336555 0.0709359 -0.0204834 +-0.0407158 0.171931 -0.00126808 +-0.0610791 0.151413 0.0351388 +-0.0221494 0.0384504 -0.005885 +0.00439305 0.11559 -0.018534 +-0.0241215 0.0944713 0.0461972 +-0.0547672 0.0812274 -0.0214088 +-0.0846583 0.0777659 0.00751712 +-0.0574282 0.0507609 0.000628334 +-0.00874511 0.0976201 -0.0294139 +-0.022979 0.0380859 0.023348 +0.043448 0.0916342 -0.00278755 +0.0145196 0.123096 0.0322223 +-0.0415646 0.125825 -0.00703356 +-0.0726695 0.171671 -0.0330178 +-0.010471 0.0378949 -0.0160892 +-0.0488368 0.0970812 -0.0221898 +-0.0586032 0.141 0.0328315 +-0.0117815 0.0347775 0.0429519 +0.0116378 0.0603198 0.0518663 +-0.0459594 0.0560107 0.0380589 +0.0399446 0.107028 0.0121641 +0.00710547 0.0893998 -0.032814 +0.0410678 0.10142 0.0221661 +-0.0244452 0.181836 -0.00961144 +-0.013259 0.121231 -0.0103976 +-0.0454789 0.123431 0.0251209 +0.0285377 0.0523356 -0.0187697 +0.0588289 0.0691072 0.0191593 +0.0125005 0.1007 -0.0226033 +-0.0595569 0.153648 0.0312116 +-0.00403867 0.0994311 -0.025339 +0.00148661 0.108625 0.0426664 +-0.0327389 0.0482896 -0.0213368 +-0.0380117 0.0344553 0.0341354 +-0.072467 0.0968801 0.0405541 +0.0151781 0.0847217 0.0519158 +-0.0425055 0.108838 -0.0192163 +-0.00749309 0.114174 0.0409291 +-0.0434968 0.119301 0.0295385 +0.0363932 0.0476439 -0.00624826 +-0.079546 0.0719865 0.0195582 +-0.0564882 0.042714 0.0457133 +-0.0113851 0.0383094 0.011049 +-0.0865431 0.106355 0.0183534 +-0.0313759 0.0553098 -0.0143786 +0.0515215 0.0651377 0.0281771 +0.0253513 0.0605347 -0.0238887 +-0.0627683 0.164709 -0.0355885 +-0.0520878 0.0489475 0.0226481 +-0.0371717 0.165191 -0.0136726 +0.0421423 0.0738117 0.0292393 +0.0499661 0.0451421 0.0208878 +-0.0394943 0.116662 0.0325452 +-0.085625 0.079203 0.01151 +-0.0716025 0.135501 0.0492566 +-0.00270958 0.0391757 0.033738 +-0.0911953 0.143381 0.0241598 +0.0418026 0.102869 0.0141608 +-0.0319458 0.0708051 -0.0254622 +-0.0626184 0.145978 -0.00858061 +0.0207857 0.0994851 0.0460447 +0.0275851 0.114088 0.0330397 +-0.040502 0.120714 0.028794 +-0.0853944 0.101863 0.0264831 +0.00328879 0.0668715 -0.0332298 +-0.0446453 0.0577855 -0.0118043 +0.0188777 0.03558 -0.00867348 +-0.064488 0.156133 0.0221359 +-0.00921165 0.172686 -0.0275682 +-0.0426232 0.0362716 0.0437883 +-0.0246131 0.0422659 -0.0289978 +-0.0766564 0.0773474 -0.00857073 +0.0281325 0.121698 0.0129367 +-0.00471394 0.0641886 -0.0352179 +-0.0274456 0.0382197 0.0539829 +-0.0417615 0.03357 0.00191851 +-0.0596536 0.0350995 0.0445384 +-0.0458215 0.091313 -0.0218951 +-0.00569643 0.0599053 -0.0346867 +-0.0728066 0.087878 -0.0157134 +0.00467021 0.0347458 0.0211501 +-0.0369631 0.0341718 -0.0179086 +-0.0700564 0.162427 -0.0118963 +-0.0938276 0.126933 0.0242666 +-0.0207424 0.110014 -0.0205123 +0.00150816 0.0911296 0.0556681 +-0.00874857 0.0727984 -0.0375275 +-0.0679476 0.156599 -0.00385029 +-0.076928 0.152806 -0.00788984 +-0.0860408 0.109124 0.0103593 +-0.0514909 0.0544833 0.0216233 +-0.0756545 0.151363 -0.0148873 +0.0423862 0.047532 -0.00502925 +-0.0895419 0.0916017 0.0194388 +-0.014074 0.128231 0.00303832 +-0.0747094 0.155646 0.00979649 +-0.0931712 0.117411 0.0223074 +-0.0548599 0.145302 0.0295141 +-0.058163 0.0467738 0.0296766 +0.00351191 0.0459363 0.0483003 +-0.091423 0.144753 0.0241539 +0.0174632 0.0948293 0.047857 +-0.0326373 0.119597 -0.0104942 +0.0206219 0.119357 0.0335278 +-0.0174992 0.0897364 0.0558751 +-0.00978193 0.0784455 -0.0377778 +0.0236993 0.12332 0.00130956 +-0.0792974 0.15265 0.00222093 +-0.0444956 0.102933 0.0417949 +0.0152822 0.129138 0.0167187 +0.0467013 0.0718392 0.0195936 +-0.0883363 0.112382 0.0405773 +-0.0515091 0.105631 0.0400498 +0.00121056 0.115576 -0.018509 +-0.0525671 0.0335472 0.0123651 +-0.0285962 0.0377287 0.0207135 +0.0043328 0.0341303 0.00522853 +-0.0914252 0.114627 0.0103302 +-0.0231203 0.163764 -0.0160465 +-0.0077447 0.0698983 -0.036343 +-0.0650951 0.162442 -0.0187197 +-0.0652725 0.0613084 0.02088 +0.0455972 0.0415054 0.0160287 +-0.0554928 0.148133 0.0286364 +-0.0709153 0.113624 -0.0087498 +-0.0390311 0.160893 0.00133569 +-0.0669712 0.156006 0.0125516 +-0.0607902 0.0334775 -4.36679e-05 +-0.0634989 0.108392 0.0384413 +-0.0239757 0.0768012 0.0522149 +-0.0671254 0.128435 0.0486555 +-0.0368355 0.153629 0.00272174 +-0.0280768 0.169745 -0.00916431 +0.00750786 0.0518308 0.0519822 +0.017486 0.112589 0.0378808 +-0.0694907 0.0930374 0.0422024 +-0.0457991 0.0336321 0.00104877 +0.0385285 0.0901386 0.0347352 +0.0154693 0.0976312 0.0477084 +-0.0134564 0.0347657 0.0443699 +0.0132374 0.123205 -0.00876652 +0.0204758 0.0975716 0.0468126 +-0.0702558 0.152263 -0.0463745 +-0.0361586 0.0382819 -0.0067057 +0.0546048 0.0478149 0.0122009 +-0.0455357 0.120317 -0.0132441 +-0.00750778 0.0828941 0.0575015 +-0.0338576 0.0347656 0.029445 +-0.0195033 0.118175 0.0352728 +0.0125203 0.0616669 0.0514026 +-0.0196496 0.0582641 0.0484904 +0.0383367 0.0910432 -0.012345 +-0.00538883 0.122125 -0.0114557 +-0.075455 0.0675485 0.016865 +-0.0362517 0.123246 0.0257763 +-0.0815948 0.123081 0.0504133 +-0.00479304 0.130806 0.0179661 +-0.0776418 0.158287 -0.0219264 +-0.0484803 0.117974 0.0310954 +-0.0386541 0.126132 0.0204051 +-0.0786087 0.102098 0.0338163 +0.0464344 0.0792618 0.0111808 +0.0289709 0.0848578 0.043728 +-0.0184969 0.10579 0.0426906 +-0.0245528 0.116739 0.0335827 +-0.0754858 0.146995 0.0422823 +-0.0528151 0.132539 0.0323863 +-0.00781365 0.086863 -0.0372016 +0.0145549 0.126574 -0.00243153 +-0.0834735 0.076324 0.00852235 +-0.0597355 0.0752692 -0.0179534 +-0.0853298 0.111023 0.0405559 +-0.0515948 0.137023 0.025408 +-0.0693375 0.168152 -0.0246084 +-0.0781507 0.115089 0.0495991 +-0.0468723 0.0587675 0.0374438 +0.0193537 0.0349459 0.0257791 +0.0243371 0.123621 0.0229269 +-0.0907106 0.133758 0.0262122 +-0.0542023 0.0435162 0.019691 +-0.036169 0.0335901 -0.0284162 +0.0196024 0.0858351 -0.0269873 +0.0084996 0.0488213 0.0500608 +-0.0308481 0.0664794 -0.025463 +0.0262324 0.0775308 -0.0242027 +0.0470911 0.0422949 0.0155431 +0.0315748 0.0605586 0.0402762 +-0.0722147 0.149455 -0.0385736 +-0.0695516 0.170347 -0.0304219 +-0.0404175 0.171209 -0.00987004 +0.0299365 0.0350356 0.00770058 +-0.0466417 0.133657 0.014443 +0.0130913 0.0937889 -0.0272955 +-0.0579449 0.059547 -0.000261977 +-0.0285818 0.121272 -0.00825717 +-0.0713326 0.0345571 0.00760774 +-0.0666503 0.135429 0.0440071 +-0.0303959 0.0762676 -0.0335676 +-0.00385838 0.101641 -0.0231016 +-0.0679568 0.13115 -0.00879393 +0.00350598 0.0870278 0.056972 +-0.0248582 0.0752289 0.048914 +-0.0588955 0.0336882 0.0145047 +-0.0563129 0.159837 0.00207063 +-0.064096 0.14766 -0.0219948 +-0.00992774 0.110288 -0.021044 +-0.0709029 0.110786 -0.0101311 +4.37647e-05 0.0392736 0.0324137 +0.0144567 0.0617415 0.0506755 +-0.0304982 0.117934 0.0308066 +-0.0124153 0.129138 0.0195683 +-0.0045458 0.042944 0.0478735 +-0.078629 0.155228 0.0230232 +-0.0793587 0.143462 0.044583 +-0.011946 0.163588 -0.0146751 +-0.0489654 0.138607 0.014392 +0.0130851 0.034266 -0.0137357 +0.0405023 0.0484755 0.0322215 +-0.0440255 0.0336276 -0.0225259 +-0.0185094 0.114097 0.0385959 +-0.0708508 0.173984 -0.0409178 +-0.0698895 0.170875 -0.0319754 +-0.0268752 0.105825 -0.0224483 +-0.0921157 0.118792 0.0303066 +-0.0715954 0.155396 -0.0419127 +0.0239203 0.108291 -0.0147313 +-0.0163998 0.119263 -0.0123023 +-0.0327198 0.0652554 -0.0184496 +0.0457714 0.0848094 0.0151676 +-0.062838 0.15526 0.00677387 +-0.0562712 0.146757 0.030967 +-0.00723161 0.0381024 0.0489495 +0.0208841 0.115302 0.0356376 +-0.0311112 0.162246 -0.0146263 +-0.0185025 0.0757876 0.0552584 +0.0369413 0.0993952 0.0325229 +-0.0597781 0.0668249 0.0348598 +-0.0676678 0.0697151 0.0342008 +-0.00507021 0.128586 -0.00238902 +0.035697 0.096801 0.0360155 +0.0179331 0.121039 -0.00844165 +0.00149286 0.100277 0.0469858 +0.0132581 0.0348304 0.0408908 +-0.0746487 0.0760382 -0.00984365 +-0.076866 0.0994719 0.0363813 +-0.00904748 0.0388121 -0.00544357 +-0.0378518 0.0985762 -0.0221892 +-0.0494929 0.0804959 0.044039 +0.0288964 0.120556 0.0189249 +0.0252898 0.0704815 -0.0246106 +-0.0831283 0.107448 0.000408412 +-0.0465019 0.129507 0.0239285 +-0.056621 0.0562362 0.00665228 +-0.00564116 0.0481924 -0.0303539 +-0.0944779 0.122838 0.0232837 +-0.0876178 0.105003 0.0113725 +0.0221833 0.125827 0.00929485 +-0.0376403 0.0562958 -0.0110081 +-0.027315 0.119916 0.0290701 +0.0347431 0.103404 0.0328426 +0.0317883 0.117354 0.00287906 +0.0203254 0.040014 -0.0146997 +-0.0780017 0.150056 -0.00287894 +-0.0106261 0.0451108 -0.0281505 +-0.0729498 0.156259 0.0191473 +0.0393029 0.10195 0.0270711 +0.0182702 0.0422045 0.0436952 +-0.0802626 0.147413 0.0397079 +-0.00132352 0.0966684 -0.0303753 +-0.015259 0.0984512 0.0471298 +0.0451952 0.0433405 0.023507 +-0.0438866 0.108471 -0.0191595 +-0.0159384 0.124168 -0.00545234 +-0.0654957 0.105611 0.0395613 +-0.0904683 0.135081 0.0142287 +0.025208 0.0874192 -0.0236148 +0.0366057 0.0954909 0.0355184 +-0.0887482 0.102363 0.0163794 +0.00249078 0.115545 0.0403845 +-0.0778809 0.0759658 0.0302027 +-0.045814 0.0898818 -0.0220292 +0.0125705 0.0658518 0.0532694 +-0.00597277 0.130385 0.0204408 +-0.0581881 0.125521 0.0404357 +-0.0307415 0.0374976 -0.017878 +-0.0742647 0.109022 0.03931 +0.0186443 0.123322 -0.00490878 +-0.0769902 0.154182 -0.00989517 +0.0130083 0.0956231 -0.0252421 +0.00953036 0.10442 0.0445691 +0.0186389 0.0520546 0.0461071 +-0.0463977 0.0397105 -0.0152844 +0.0444376 0.0959725 0.0121619 +-0.0216077 0.0350207 0.0511065 +0.0463433 0.054773 -0.00593764 +-0.0875696 0.115156 0.045661 +-0.00311195 0.130927 0.00709886 +-0.0627873 0.0335028 0.00493012 +-0.0894432 0.151569 0.0164701 +-0.0668923 0.109473 -0.0126504 +-0.053788 0.0854855 -0.0214384 +-0.00382944 0.108004 -0.0223654 +-0.0447162 0.0448943 -0.0112435 +0.0262334 0.121101 0.000829633 +0.0206734 0.0795401 0.0510479 +-0.0434655 0.127159 0.0186744 +-0.0273746 0.181651 -0.00921581 +-0.0045009 0.116806 -0.0157814 +-0.0529179 0.162663 -0.000927718 +0.0278575 0.109692 -0.0122334 +0.0114621 0.125412 0.0310862 +-0.055877 0.0984248 -0.0207921 +-0.0649536 0.0595166 0.0136311 +-0.0899789 0.116378 0.0441376 +-0.0344621 0.154617 -0.00886992 +-0.0641249 0.156393 -0.0431197 +0.0264267 0.0824949 -0.0235141 +-0.0699148 0.109401 -0.011164 +-0.0645122 0.0398643 -0.00676714 +-0.0927009 0.117475 0.0353038 +0.00812049 0.107282 -0.0201059 +0.0344124 0.0957227 -0.013333 +-0.0617126 0.170956 -0.0545977 +-0.0888439 0.150092 0.0112242 +-0.0600859 0.0421217 0.0440266 +-0.0535039 0.0805657 0.0446207 +0.00913683 0.0873343 0.0554698 +0.0318118 0.100781 0.0373962 +-0.0366211 0.124122 -0.00724685 +0.0255511 0.0463382 0.0384325 +-0.00473212 0.0386351 0.0247855 +-0.0857334 0.153425 0.016223 +3.04988e-05 0.11432 -0.019028 +-0.0622192 0.17721 -0.0606003 +-0.00533435 0.0930519 -0.0346806 +-0.0578363 0.0912193 -0.0212351 +-0.051575 0.132941 -0.0025104 +-0.0215094 0.0983521 -0.0242621 +-0.0663625 0.141125 0.0427387 +0.0411659 0.0952708 0.0280268 +-0.053497 0.0945663 0.0438533 +-0.0745177 0.171112 -0.0322615 +-0.0779361 0.129573 -0.00656407 +-0.0437814 0.0840812 -0.0212189 +0.00326914 0.0682665 -0.0330635 +-0.0739332 0.177709 -0.0464055 +0.0528574 0.0622185 0.0288955 +-0.0365021 0.101484 0.0413625 +-0.0445836 0.0476428 -0.0105653 +-0.0194973 0.101611 0.0435898 +-0.0137239 0.16215 -0.0118322 +-0.0287184 0.0806953 0.0455388 +-0.0933646 0.117392 0.0153085 +-0.0867701 0.113047 0.00428618 +-0.0052769 0.0941788 -0.0338289 +0.0134806 0.0976663 0.0482444 +-0.08743 0.111796 0.0214228 +0.00133097 0.0626915 -0.0339607 +0.0447988 0.0903457 0.000177034 +0.00183354 0.10009 0.0472603 +-0.0323685 0.0497273 -0.0163483 +-0.0848994 0.144621 0.00617242 +-0.0707871 0.0625817 0.00788057 +-0.0334706 0.0589721 0.0386927 +0.0458044 0.0834139 0.0161713 +-0.0638595 0.159101 -0.0532849 +-0.0169095 0.0379753 -0.0273392 +-0.0683614 0.15578 0.00913576 +-0.0841262 0.110345 0.0263651 +-0.0629048 0.1054 -0.0169977 +-0.00482937 0.038542 0.00854039 +0.00442082 0.039258 0.029719 +0.0287437 0.0416628 0.0306503 +-0.0480218 0.144366 0.00442748 +-0.0718881 0.109321 -0.0102252 +-0.0623027 0.153756 -0.0145815 +0.0312054 0.104936 -0.0131412 +-0.0502712 0.143189 0.0133798 +-0.0679015 0.120916 -0.00896008 +-0.0325574 0.126601 0.00788172 +0.00400981 0.0391328 0.0279405 +-0.0790033 0.16525 -0.0329555 +-0.0464892 0.117969 0.0304809 +-0.0171987 0.127433 0.00332106 +-0.0589607 0.145338 0.0340833 +-0.00576935 0.0346302 0.0443351 +-0.0894143 0.118584 0.00330542 +-0.0494955 0.0890237 0.0451636 +-0.0395958 0.118487 -0.0133369 +0.0256371 0.0346096 0.00722464 +0.0101261 0.0846794 0.0551401 +-0.000640169 0.0481947 -0.0300913 +0.00652044 0.0799801 0.0556018 +-0.0485004 0.157854 0.0090451 +-0.0674788 0.153589 0.0328337 +-0.0246191 0.0436702 -0.0286423 +-0.0380903 0.041957 -0.0274154 +-0.0592055 0.155872 0.0109493 +-0.0158317 0.0382446 0.00839116 +-0.0862834 0.141953 0.0402325 +-0.0178783 0.0381567 0.0189161 +-0.00165332 0.0511407 -0.0309868 +-0.0515122 0.0598238 0.030703 +0.0226361 0.118891 -0.00814073 +0.0433138 0.0902166 -0.00378785 +-0.0339799 0.0384942 -0.0120095 +-0.0424937 0.0748068 0.0427898 +-0.0640892 0.172567 -0.049571 +0.037431 0.0794424 0.0366005 +0.041759 0.0432404 0.0265421 +-0.0923571 0.121517 0.0426088 +0.0562687 0.0726263 0.0113628 +0.024692 0.100819 0.0429025 +-0.0729148 0.110726 -0.0089954 +-0.0295018 0.159581 0.00108834 +-0.0672997 0.0435653 0.00884843 +0.0172829 0.0651656 -0.0289948 +-0.0585687 0.0340745 0.0248573 +0.0320945 0.113613 -0.00441584 +-0.0726455 0.0655594 0.00286688 +0.0223162 0.0649555 -0.0263733 +-0.0636659 0.0691264 -0.011804 +-0.0495225 0.143222 0.00950726 +-0.0396922 0.156587 0.00568688 +0.00749975 0.089676 0.055015 +0.0495971 0.0465817 0.0239661 +-0.0390578 0.156263 -0.0100859 +-0.0708823 0.172457 -0.0366471 +0.0126883 0.0343606 -0.00448368 +-0.0454899 0.0690197 0.0407796 +-0.0413446 0.0335325 -0.0237744 +-0.0404379 0.124957 -0.00812413 +0.0440209 0.0945174 0.0011806 +-0.0627245 0.073729 -0.0165415 +-0.0286056 0.0475856 -0.0255224 +-0.0495036 0.153584 0.0107879 +-0.0896132 0.139307 0.0341845 +0.030074 0.119769 0.00796635 +-0.0517393 0.0517191 0.022632 +-0.023961 0.0723529 0.0481115 +-0.0309909 0.0384268 -0.00579914 +-0.00634516 0.0379873 -0.0153566 +-0.0547761 0.0333427 -0.00414144 +0.00202824 0.108029 -0.0204102 +0.0450661 0.0761937 0.0228711 +-0.084679 0.0869987 0.027663 +-0.0219636 0.0681726 0.0490783 +0.0226059 0.0375679 0.034289 +-0.0518654 0.101358 -0.0214215 +-0.0919525 0.126983 0.0392569 +-0.0663498 0.172859 -0.0450539 +0.00551307 0.0856288 0.0568655 +-0.0269831 0.0381412 0.0278748 +0.0430768 0.0411155 0.00329204 +0.0317014 0.117733 0.0199863 +-0.0326228 0.0506668 -0.0115219 +-0.0760639 0.155862 0.0136886 +-0.0581543 0.0337417 0.0181646 +0.0454926 0.0875897 0.015162 +-0.0197923 0.038435 -0.00354579 +-0.0461288 0.15913 -0.00829043 +-0.0235066 0.108523 0.0406075 +0.015525 0.127932 0.00115163 +0.00251501 0.0814623 0.0569927 +-0.0485603 0.131756 0.000870882 +-0.0909462 0.11476 0.0333322 +0.038369 0.0884214 -0.0137726 +0.0179084 0.127905 0.00771503 +0.0457915 0.0862101 0.0121678 +-0.0310416 0.0763051 -0.0325503 +-0.0584963 0.0946188 0.0448266 +-0.00142898 0.112626 -0.0193593 +0.0537506 0.0519895 0.000247391 +-0.00249736 0.0978288 0.0524276 +0.0474285 0.0692644 0.00256538 +-0.0157146 0.17719 -0.0193767 +-0.0688721 0.0369953 0.0119906 +0.0262296 0.0888085 -0.0227773 +-0.0876687 0.0981895 0.00443327 +-0.0435601 0.129686 0.00973169 +-0.0620348 0.146024 -0.00560988 +0.0228232 0.123119 -0.000681491 +0.0192101 0.0791931 -0.0277308 +-0.0285078 0.0348913 0.0463089 +-0.0295006 0.116619 0.032366 +0.00540344 0.040445 -0.0238712 +-0.0861937 0.0819823 0.0184808 +-0.0691313 0.170851 -0.0540166 +0.0232722 0.0691857 -0.0260989 +0.0346775 0.106404 -0.00868031 +-0.0626839 0.154165 0.00249175 +0.0203005 0.047637 0.041402 +0.0426083 0.0915862 -0.00481093 +-0.00121535 0.0394284 0.0356173 +-0.0290126 0.0606872 -0.0244213 +-0.0522249 0.152155 0.0138449 +0.0278367 0.0781921 0.0455692 +-0.0782715 0.168666 -0.0333616 +-0.0631194 0.0357147 0.0189543 +0.00237959 0.0976208 -0.0273765 +-0.0327796 0.0736593 -0.0265049 +-0.0590695 0.143884 0.0338908 +-0.0366032 0.0407784 -0.0289892 +-0.0564911 0.0400264 0.0468768 +-0.0891224 0.133627 0.00423095 +-0.00349883 0.095211 0.054715 +-0.0365564 0.0488017 -0.0133944 +-0.063603 0.0406323 0.0405017 +0.00388987 0.0987683 0.0495103 +-0.0341448 0.166698 -0.0152744 +0.0422984 0.0789118 -0.00576754 +-0.0821777 0.153468 0.0263012 +-0.0618022 0.0852922 -0.0192956 +-0.0825795 0.0937805 -0.00656944 +0.0526059 0.0476644 0.00422036 +-0.0617323 0.155315 -0.018581 +-0.0646798 0.158592 -0.0555006 +-0.0400438 0.127998 0.000725921 +-0.020826 0.0882193 -0.0372663 +-0.072774 0.083565 -0.0157894 +-0.0301375 0.0592681 -0.0204197 +0.053852 0.0700236 0.0237561 +-0.0192952 0.097132 0.0469462 +-0.0379042 0.0350553 0.0424096 +-0.0779467 0.170107 -0.0351609 +-0.0731753 0.162423 -0.0379582 +0.0293531 0.117442 -0.00254348 +0.00923639 0.0753581 -0.0333366 +-0.00523048 0.0381888 0.0482681 +0.0281109 0.0477624 0.0368744 +-0.00549683 0.095262 0.0547887 +0.016279 0.127286 0.0242335 +-0.000357095 0.0346671 0.0418309 +-0.0903031 0.113239 0.0103302 +-0.0435085 0.165227 0.00470373 +-0.000629686 0.0466337 -0.0288231 +-0.00267903 0.0583624 -0.0332032 +-0.0354553 0.163829 -0.00227816 +0.0329891 0.10525 -0.0114692 +-0.0511234 0.159083 -0.0045978 +-0.0738697 0.0672451 0.0209913 +-0.0513379 0.0345855 0.00988953 +0.0449495 0.041538 0.0177108 +0.0131716 0.128382 0.0245166 +-0.0119302 0.0975527 -0.0293786 +-0.0796395 0.11488 0.0476725 +-0.00554666 0.0429634 0.0481135 +0.0336755 0.115893 0.0150272 +-0.0865455 0.109036 0.0123603 +-0.0583287 0.0597422 0.0219213 +0.00142185 0.0361564 -0.0243567 +-0.0249379 0.182957 -0.0150514 +-0.00456935 0.0511652 -0.031379 +0.00983853 0.130485 0.0204326 +-0.020719 0.0739658 0.0533053 +-0.0922608 0.117447 0.0323019 +-0.0687753 0.15954 -0.0529632 +0.00943169 0.130854 0.0188531 +-0.0463671 0.133058 0.0160254 +0.0403868 0.0966272 0.0286723 +-0.0374342 0.125294 0.0223398 +-0.0254349 0.121225 -0.00822483 +-0.0287913 0.121291 0.025511 +-0.0275751 0.181449 -0.0130337 +-0.0292637 0.0364551 -0.0300736 +0.0333063 0.076755 -0.0177777 +-0.00838403 0.100228 -0.0241757 +-0.0917675 0.126924 0.040336 +0.0460105 0.0848241 0.0111686 +-0.0458316 0.03478 0.00723173 +0.0337176 0.0655129 -0.0167917 +-0.0900318 0.128311 0.0429434 +0.00340705 0.0404653 -0.0241388 +-0.0445167 0.0334752 0.00325528 +-0.0417025 0.170926 -0.000183345 +-0.0667272 0.0750614 -0.0156487 +-0.075008 0.0665773 0.0124915 +-0.0256788 0.0387085 -0.0161237 +0.0433708 0.0459415 -0.00338184 +-0.0333944 0.0420411 -0.0295771 +-0.0366574 0.173333 -0.0118804 +0.0279341 0.0376089 0.0251213 +-0.0591944 0.0589798 0.00447595 +-0.0117173 0.0642717 -0.0365887 +0.0284258 0.044601 -0.00619231 +0.0407559 0.0844033 -0.0107694 +-0.0149445 0.0386028 -0.00457425 +-0.0666364 0.150881 -0.0385507 +-0.0441588 0.156514 0.00623469 +-0.0338796 0.174703 -0.0134692 +-0.0700283 0.075334 0.0376711 +-0.0144851 0.120961 0.0347298 +-0.0394983 0.0690894 0.041721 +-0.0820593 0.0748753 0.013529 +-0.0262192 0.162456 -0.00472466 +-0.0573804 0.151726 0.0319973 +0.0238729 0.0463312 0.0395213 +-0.00887703 0.0985896 0.0509585 +-0.00180856 0.0881831 -0.0355551 +-0.0435257 0.128183 0.0171556 +-0.0137851 0.096091 -0.0318323 +-0.0776083 0.0770893 -0.00760024 +0.0515137 0.0637653 0.0289012 +0.0459041 0.087617 0.00917007 +-0.0946685 0.124165 0.0192665 +-0.0424078 0.0392874 -0.0253255 +0.0574465 0.0566575 0.0231489 +-0.0705315 0.0915903 0.0419348 +-0.062769 0.175495 -0.0615699 +-0.0614063 0.0419532 -0.0067475 +0.0222874 0.0635154 -0.025946 +-0.0325454 0.0624467 -0.016419 +0.0406665 0.105637 0.00516291 +0.00508145 0.125851 -0.00757191 +-0.0743566 0.148587 -0.0198592 +0.028537 0.0506236 0.0375191 +0.00550651 0.0897139 0.0554063 +-0.0165465 0.061194 0.0523676 +-0.0548344 0.113627 -0.016162 +-0.078421 0.120421 0.0514142 +0.0224472 0.0375897 0.0352799 +-0.0558038 0.116914 0.0367748 +0.0399293 0.104183 0.0231644 +0.00793957 0.0368635 -0.0077325 +-0.053287 0.119647 -0.012449 +0.0226022 0.1018 -0.0197774 +-0.0735157 0.102656 0.0375574 +-0.0544964 0.10974 0.0378742 +-0.0351154 0.127437 0.0128308 +-0.0759568 0.136911 -0.00615991 +-0.0228623 0.06956 0.0485197 +-0.00937118 0.0387712 0.0309279 +-0.0858362 0.103636 0.0243714 +-0.0777036 0.174395 -0.0426027 +0.0605358 0.0664822 0.0111446 +-0.0456637 0.0382067 -0.0202858 +-0.0494922 0.0833478 0.0446801 +-0.0717916 0.0893503 -0.0160567 +-0.0654224 0.156324 0.0217941 +0.0104303 0.128801 -0.000781749 +-0.0640931 0.122778 0.0478095 +0.012373 0.0343732 -0.00643255 +-0.00549358 0.0898053 0.0568842 +-0.0544984 0.0973596 0.0432594 +-0.0430782 0.154691 -0.00814248 +-0.058643 0.155634 0.0155202 +-0.0309118 0.10664 -0.0209245 +-0.0117675 0.0728437 -0.0380964 +-0.0685186 0.1456 0.0424246 +0.0168366 0.113017 -0.0157876 +-0.0567451 0.0768007 -0.0192338 +-0.0905785 0.121592 0.0451008 +-0.0564995 0.0889847 0.0448198 +-0.062649 0.164698 -0.0365908 +-0.0414211 0.0344456 0.0316667 +0.0235849 0.102638 -0.0186769 +0.0208761 0.115613 -0.0126037 +0.00135548 0.0496637 -0.030356 +0.0172645 0.0713208 0.051333 +0.0277553 0.0619298 0.0435605 +-0.0388696 0.105647 -0.0202518 +0.002402 0.041908 -0.0243037 +-0.00348806 0.11693 0.0398821 +-0.094215 0.120106 0.0172864 +-0.075338 0.161792 -0.0134783 +-0.0313944 0.0721215 -0.0285061 +-0.076236 0.178558 -0.0487103 +-0.0516597 0.0416063 0.0458402 +-0.0191702 0.169734 -0.0206461 +-0.0458479 0.0999438 -0.0215809 +-0.0608063 0.0939347 -0.0190005 +-0.0831639 0.108847 0.00132792 +0.0449523 0.0945963 0.00616781 +-0.089716 0.139255 0.0241831 +-0.0241715 0.165363 -0.00880477 +-0.0808978 0.121685 0.0496566 +-0.0776757 0.0873848 0.0375611 +-0.0575877 0.0343902 0.0335477 +0.0293569 0.0808765 0.0442663 +-0.0413959 0.1089 -0.0192706 +-0.0486555 0.0606014 -0.0118523 +-0.0263871 0.06465 -0.0314802 +-0.0479423 0.118344 0.0305757 +0.0368905 0.10997 0.023344 +0.00465961 0.0959425 -0.0295932 +-0.00250198 0.0647948 0.0567081 +0.0155008 0.0345049 -0.00593057 +-0.0414998 0.0944525 0.0421484 +-0.0425159 0.17187 -0.00332083 +-0.00662603 0.045146 -0.0285621 +-0.0728992 0.107873 -0.010241 +0.0162924 0.0680403 -0.0298148 +-0.058126 0.0494622 0.00265482 +-0.049929 0.0335244 -0.00515732 +-0.0592138 0.116352 -0.0129282 +-0.0876027 0.103683 0.0193632 +-0.0661658 0.170967 -0.0590604 +-0.00423283 0.0951855 -0.0328472 +-0.056711 0.153132 0.0293166 +0.0299135 0.0618945 0.0413957 +-0.0754312 0.179188 -0.0498593 +-0.0890756 0.0982905 0.00941744 +-0.0313333 0.114057 -0.0167329 +-0.0336201 0.0505969 -0.0107597 +0.0152428 0.0807565 -0.0298514 +0.000144172 0.129559 0.0255502 +-0.0166332 0.101644 -0.0236856 +0.0112856 0.0666869 -0.0306751 +-0.0719068 0.110755 -0.00961867 +-0.056773 0.082629 -0.0212703 +0.0224949 0.112674 0.0362232 +0.00494458 0.0356784 0.0456125 +-0.0401622 0.123949 0.0243503 +-0.0494029 0.0516267 0.0356191 +-0.000148869 0.0998138 -0.0237113 +-0.0494252 0.12902 -0.00225187 +-0.0351127 0.162221 -0.0139882 +-0.0801061 0.109977 -0.00253557 +-0.0583279 0.116979 0.0383609 +0.0214316 0.0768422 0.0503677 +-0.0637593 0.0357681 0.0182478 +-0.0679574 0.176267 -0.0485208 +-0.0466544 0.0636155 -0.0134601 +-0.018198 0.0896163 -0.0372798 +-0.0675078 0.167827 -0.0267933 +-0.0891218 0.136568 0.0391914 +-0.00634438 0.0961732 -0.0318818 +-0.0509131 0.144221 0.000402933 +0.020479 0.0822082 0.0508036 +0.0382522 0.0617095 -0.0097618 +0.0414447 0.0957847 0.0271584 +0.0495191 0.0624602 0.0299628 +-0.0525648 0.0515684 -0.00660684 +-0.0507038 0.0543653 0.0186143 +-0.0678764 0.117979 -0.00873338 +-0.0833731 0.0803286 0.00149951 +-0.0102345 0.169322 -0.0249254 +0.0161585 0.128774 0.0170439 +-0.0495011 0.0439447 0.0438293 +-0.0308936 0.0901442 -0.0248987 +-0.0380826 0.159224 -0.0120325 +-0.0684954 0.121776 0.0527683 +-0.0237994 0.178657 -0.0117033 +0.022476 0.125337 0.020807 +-0.0131867 0.0392232 0.050872 +-0.0828365 0.116201 -0.00217327 +-0.0792107 0.0760132 0.0281283 +-0.0418712 0.105657 -0.0205306 +-0.0265289 0.11806 0.03154 +-0.0485021 0.104259 0.0404773 +-0.0515007 0.164119 0.00202375 +-0.0628742 0.175671 -0.0555946 +-0.0385777 0.1595 0.00203018 +-0.0410438 0.162368 0.00371458 +-0.0683486 0.124257 0.0521552 +0.0311264 0.0469699 -0.00653546 +-0.0346775 0.127387 0.0115177 +0.0256926 0.105619 -0.0158649 +-0.0656817 0.0705232 -0.0118151 +-0.0889612 0.111861 0.0183359 +-0.027486 0.0646029 0.0384895 +0.0307322 0.108762 0.0340805 +-0.0647018 0.172123 -0.0473675 +-0.0914367 0.114681 0.021315 +-0.00481581 0.0882239 -0.0361964 +-0.0229882 0.0386094 0.0318708 +-0.0164825 0.0530314 0.0497852 +0.031763 0.0653471 -0.018741 +0.0313568 0.052068 0.0363454 +-0.0937998 0.118753 0.0153042 +-0.0460733 0.0336746 -0.01741 +0.00639772 0.0911374 -0.0325899 +-0.0665077 0.105605 0.0392145 +-0.037944 0.165312 0.00115508 +-0.0447719 0.0826286 -0.0206706 +0.015216 0.0849668 -0.0295884 +-0.00949197 0.121025 0.0361236 +-0.0728889 0.159628 -0.0359308 +-0.0212527 0.0696869 0.051144 +-0.0609844 0.0646638 0.031213 +-0.0787829 0.0926997 0.035689 +0.0098313 0.0644618 0.0545535 +-0.0435636 0.0476726 -0.0110362 +0.00292266 0.0383702 -0.00263564 +-0.0294982 0.0674485 0.03887 +-0.0594483 0.0590098 0.0188119 +-0.0331272 0.0335545 -0.0277881 +-0.0654135 0.17638 -0.0519366 +0.0381247 0.0827831 -0.0147803 +0.0274189 0.0834776 -0.02246 +-0.0754296 0.152593 -0.0138871 +-0.0626337 0.149615 -0.00617193 +0.0395378 0.100622 0.0273876 +-0.00317446 0.0951663 -0.0328247 +0.0284436 0.0721192 -0.0227379 +0.0256796 0.0353829 0.0212256 +-0.0100479 0.0388486 -0.00567581 +-0.0815042 0.149744 0.0353513 +0.0569923 0.0508892 0.0171854 +-0.0844404 0.100576 0.0283951 +-0.066663 0.0704664 -0.0109078 +0.011503 0.108488 0.0403225 +0.0346003 0.059954 -0.013776 +-0.00350072 0.0828956 0.0574459 +-0.0308908 0.0524482 -0.0143777 +0.0220365 0.0430228 -0.0147268 +-0.0499219 0.0558508 0.0334877 +-0.0315001 0.070354 0.040029 +0.0121741 0.0780107 0.0545179 +-0.040483 0.0423569 0.0419938 +-0.0438782 0.0343145 0.0294954 +-0.0243712 0.122748 0.0255975 +-0.013279 0.101966 -0.0239644 +-0.0635872 0.0445618 0.0346899 +-0.09116 0.146144 0.0251605 +0.0191385 0.125192 -0.000918824 +0.0439709 0.0776452 -0.00278508 +-0.034376 0.0448305 0.0451875 +-0.0292764 0.0508797 -0.0213979 +-0.0586802 0.148237 0.034554 +-0.0830867 0.0803012 0.027553 +0.0470243 0.0458757 -0.000608958 +-0.0124544 0.125711 -0.00519106 +-0.0316347 0.0511137 -0.0133654 +-0.0495769 0.126877 0.0317874 +0.0446953 0.0861142 -0.000824781 +-0.0164935 0.0744329 0.0555937 +-0.07397 0.135486 -0.00709777 +-0.0388049 0.0885478 -0.0231132 +-0.0738057 0.149865 -0.0338746 +-0.0612039 0.0347997 0.0427656 +-0.0248108 0.064983 0.0421327 +-0.0374965 0.120729 0.0294163 +-0.0773599 0.0940895 0.0370488 +-0.0221316 0.122996 0.0264112 +-0.0656835 0.180548 -0.0590311 +-0.0654403 0.114174 0.0440564 +-0.0576422 0.035457 -0.0105994 +0.0063341 0.0539359 -0.0303914 +-0.0624964 0.108382 0.0385383 +0.000507196 0.0474213 0.049671 +-0.0768403 0.0682209 0.0124564 +-0.0177152 0.0613627 -0.0358053 +-0.0708829 0.156323 0.0169624 +-0.0801272 0.0895173 -0.00861746 +-0.0681398 0.156014 0.0252192 +-0.0643944 0.0418449 0.0286723 +-0.0223108 0.122995 -0.00618559 +-0.0332179 0.0347336 0.0278325 +-0.0494838 0.129682 0.0301574 +-0.0874269 0.111566 0.0378689 +0.0078939 0.0373631 -0.01008 +-0.0556091 0.0372359 0.0469697 +-0.0495471 0.140136 0.00640196 +-0.0721891 0.0696552 -0.00460695 +-0.0645108 0.135348 0.0400634 +-0.00963836 0.0466527 -0.0295963 +-0.00450177 0.0856564 0.0572774 +-0.0726963 0.163825 -0.0409661 +-0.0831522 0.148677 0.0355101 +-0.0045943 0.109577 -0.0220661 +-0.0700292 0.14319 -0.0126949 +0.0170086 0.0672594 0.0509139 +-0.0184932 0.0842766 0.0574008 +0.0333985 0.0809938 -0.0187374 +-0.00658339 0.116828 -0.0157946 +-0.0830307 0.110356 0.0344756 +-0.0164574 0.11955 0.0353527 +-0.0437556 0.0335262 -0.0205177 +-0.0196754 0.180147 -0.0162801 +0.00748686 0.0427091 0.0452774 +0.047238 0.0525837 0.0312359 +-0.00150012 0.0842876 0.0575029 +-0.0647611 0.154265 0.00245101 +0.0385227 0.108358 0.00315989 +0.00616601 0.0343841 0.0199712 +0.0190967 0.127602 0.0138576 +0.0232916 0.104676 0.0408599 +-0.0209519 0.121676 -0.0087885 +-0.000475449 0.077417 0.0583222 +-0.0340577 0.0344858 -0.0194842 +-0.0449113 0.0342791 0.0293115 +-0.02963 0.125357 0.0045818 +-0.0442513 0.120873 0.0273959 +0.0233607 0.0713858 0.0478141 +0.0294074 0.0974659 -0.0171759 +-0.0251322 0.110719 -0.0192347 +-0.0168318 0.0883012 -0.0380546 +-0.0537516 0.078251 -0.0196488 +-0.0617185 0.155298 -0.026582 +0.0182327 0.0369462 -0.015679 +0.0204347 0.103384 0.043762 +-0.0271652 0.177189 -0.00775302 +-0.078183 0.161072 -0.0259393 +-0.000994284 0.0346324 -0.0168306 +-0.0369077 0.0407733 0.0449918 +-0.0117377 0.0685356 -0.0370961 +-0.0520176 0.136681 0.0271356 +-0.0244827 0.044849 0.0526821 +0.0122811 0.0490196 0.0473922 +-0.0310488 0.126128 0.0128475 +-0.0612252 0.0618413 0.0248018 +0.0110023 0.0872551 0.0546654 +0.0137177 0.0926941 0.0515916 +-0.050909 0.135812 0.0260882 +-0.0514988 0.090386 0.0447021 +-0.0776802 0.121779 0.0520726 +-0.0435045 0.0492094 0.0395536 +0.0427867 0.0445146 0.027427 +-0.0124587 0.0716774 0.0554083 +-0.0903482 0.115904 0.00630147 +-0.0676703 0.159658 -0.00956407 +-0.0534975 0.100135 0.0423919 +0.0299608 0.102103 0.0382304 +-0.0275896 0.0398384 -0.0294326 +-0.0354902 0.0576195 0.0391492 +-0.0365293 0.120277 -0.0112077 +0.000101878 0.111584 -0.0199068 +-0.0568115 0.11798 -0.012657 +-0.0134078 0.0383017 0.0160824 +-0.078485 0.131655 0.0526796 +-0.0630792 0.17626 -0.0613621 +0.00219436 0.0880897 -0.0340427 +-0.00664745 0.0511524 -0.0316637 +-0.0221856 0.122325 -0.00745001 +0.0517581 0.0684217 0.00143507 +-0.0206221 0.0450432 -0.0278804 +-0.0187788 0.181486 -0.0239544 +-0.0435029 0.119128 -0.0140097 +-0.0368374 0.0957548 -0.023046 +0.0360094 0.105316 -0.00780471 +-0.0310017 0.0339922 0.010953 +0.0468601 0.0467385 0.0270828 +-0.0800669 0.107282 -0.00460113 +0.0161405 0.0847501 0.0515574 +-0.0726437 0.152619 -0.0388965 +-0.030372 0.124909 0.019004 +-0.0532086 0.0387959 0.0470712 +-0.00947284 0.0717726 0.0568611 +-0.0417517 0.0449058 -0.0193246 +-0.0324319 0.159505 0.00208324 +-0.064273 0.0404086 0.0266782 +-0.0456914 0.0665681 -0.0150523 +-0.0317955 0.0901023 -0.0248195 +-0.0901544 0.148798 0.0121684 +-0.0448181 0.0898814 -0.0220536 +-0.00651 0.0385696 0.00453582 +-0.0505409 0.146308 0.012527 +-0.0736443 0.148637 -0.0247496 +0.0362923 0.0826461 -0.0167222 +-0.0582688 0.0380855 0.0465946 +0.0420736 0.0957824 -0.00279849 +0.059075 0.0677442 0.0201625 +-0.0118076 0.166362 -0.0213381 +-0.0293882 0.0593157 -0.02241 +-0.00750084 0.0688979 0.0559719 +-0.0834808 0.0763288 0.0055122 +0.0455463 0.0847945 0.0181695 +-0.0853379 0.139291 0.0436042 +-0.0127384 0.0714338 -0.0383051 +0.0288553 0.119043 0.000370228 +0.0382387 0.108322 0.00216703 +-0.0854254 0.147285 0.0350057 +-0.0290239 0.0918566 -0.0266024 +-0.089435 0.0996945 0.016394 +-0.0250572 0.0379934 0.0230062 +-0.0659224 0.108105 -0.0137141 +-0.0197383 0.064191 -0.0362126 +0.0332406 0.0828224 -0.0189128 +-0.050463 0.0627793 0.0338697 +-0.00332118 0.0928352 -0.0344367 +-0.0351624 0.0344214 0.0133327 +0.0337894 0.103744 -0.0118635 +-0.0685313 0.0435239 0.00368786 +-0.0915175 0.140609 0.0191776 +-0.0763247 0.0679089 0.0110614 +-0.0293662 0.0904135 -0.0285737 +-0.0268485 0.0931277 -0.028596 +-0.0493167 0.137038 0.00442458 +-0.0607789 0.121227 0.0419471 +-0.0167795 0.0984818 0.0458118 +-0.0218018 0.0947992 -0.0305488 +-0.0933659 0.118725 0.0133024 +-0.0263107 0.0780916 0.0488984 +-0.0689525 0.144454 -0.0174142 +-0.0698503 0.0980241 -0.015524 +0.0377251 0.0602627 -0.00973714 +-0.0616079 0.160003 -0.0285892 +-0.00362249 0.0451016 -0.0279234 +-0.0658161 0.0866791 -0.018673 +-0.0898976 0.132262 0.00523931 +-0.014426 0.0383347 0.0104075 +-0.0891789 0.14342 0.0311627 +-0.0516305 0.0633366 -0.0105425 +0.0421385 0.102872 0.00916356 +-0.073056 0.163825 -0.0399663 +0.0142799 0.0695538 -0.0310885 +-0.0191804 0.172724 -0.0156293 +-0.0111853 0.109046 -0.0214904 +-6.48961e-05 0.130222 0.00105503 +-0.037907 0.0368934 -0.0113278 +-0.0778791 0.116346 -0.00545689 +-0.0353032 0.042242 0.0460623 +-0.0732356 0.176411 -0.0530886 +0.0601048 0.0608967 0.00715985 +-0.052965 0.0595916 0.0265588 +-0.0564973 0.0762116 0.0428205 +-0.034872 0.104274 -0.0209307 +-0.058681 0.0336414 -0.0106847 +-0.082997 0.0883523 -0.00560613 +-0.0901456 0.140633 0.0231701 +0.059772 0.0594746 0.00715469 +0.0315129 0.0439606 0.0299133 +-0.0749354 0.108383 0.0378851 +-0.0718123 0.0950995 -0.0154446 +-0.017311 0.117579 -0.0145168 +-0.0492219 0.145089 -9.42983e-05 +-0.0492467 0.0335224 -0.00684693 +-0.077013 0.157587 -0.0116646 +-0.0395098 0.12077 0.029092 +-0.0676415 0.155906 0.0108585 +-0.0115046 0.0688083 0.054897 +0.00350877 0.068881 0.0557692 +-0.00832726 0.0349131 -0.024554 +0.00623924 0.0754282 -0.0343629 +-0.0601994 0.14968 0.0358889 +-0.0681006 0.0726203 0.0368546 +-0.0550659 0.154073 0.0197239 +0.0220423 0.0388246 -0.00567731 +-0.050633 0.0633988 -0.0111763 +0.0262673 0.0718723 -0.0242084 +0.00651709 0.084208 0.0565081 +-0.0508195 0.0927229 -0.0217389 +-0.0823617 0.110377 0.0328225 +-0.0443307 0.0345511 0.0362271 +-0.0664541 0.159015 -0.0105538 +-0.065725 0.180452 -0.0578644 +-0.00729397 0.0383333 0.0172997 +-0.083856 0.108875 0.00233606 +-0.0531754 0.160014 0.00733632 +-0.0617546 0.0335347 0.00511487 +-0.0436843 0.0666417 -0.0153695 +-0.0475053 0.16079 0.00736091 +0.0213151 0.0393899 0.0411211 +-0.0126085 0.0434839 -0.0264186 +-0.058072 0.135467 -0.00577889 +-0.0144744 0.0573903 0.0514423 +-0.0480757 0.15465 -0.00633475 +-0.0214326 0.158913 -0.0108411 +0.0317035 0.0927362 -0.0181479 +0.0258633 0.0505634 0.0389033 +-0.0916556 0.116096 0.0323166 +-0.0344737 0.0973629 0.0436701 +-0.0772898 0.158355 -0.013903 +0.00252455 0.078679 0.0567626 +-0.0768599 0.0852186 -0.0125783 +0.00638417 0.060281 0.0547831 +0.00351108 0.067509 0.0559028 +-0.0775506 0.172738 -0.0395384 +-0.0941076 0.120125 0.0222927 +0.0397169 0.0400457 0.0217023 +-0.00993012 0.125562 -0.00707028 +0.0207467 0.0387687 0.0412277 +-0.0770466 0.0947961 -0.0125384 +-0.0208658 0.163381 -0.0161046 +-0.0194871 0.0786419 0.0560662 +-0.00848562 0.0978428 0.0521021 +-0.00195749 0.0369571 0.00873581 +-0.0554658 0.14959 0.0286413 +-0.0613355 0.171315 -0.0617342 +-0.0405058 0.060576 0.0408455 +-0.019245 0.0381493 0.0168345 +0.0318352 0.0959581 -0.0155753 +-0.0894336 0.0956291 0.0144221 +-0.0562826 0.138192 -0.0042334 +-0.0587859 0.118384 0.0394982 +0.0557398 0.0577143 0.000186064 +0.021293 0.0347861 0.0208687 +-0.0521809 0.0564969 0.0230721 +-0.088994 0.140671 0.0361625 +-0.0626529 0.0336856 0.0101657 +-0.0346997 0.0808739 -0.0236048 +-0.0740754 0.0791322 0.0370556 +0.0424523 0.0958497 0.0251568 +0.0156501 0.129207 0.0125793 +-0.0758074 0.0766216 0.033593 +-0.053977 0.0335099 0.00491422 +-0.049617 0.115589 0.0334474 +-0.0151821 0.115592 -0.0164315 +0.0198002 0.113601 -0.0144182 +-0.0297803 0.0833036 -0.0335871 +-0.0888224 0.0929368 0.0224135 +-0.0255078 0.162179 -0.0150106 +-0.0468796 0.105628 -0.0200508 +0.0328144 0.0654355 -0.0177831 +0.0401246 0.0657991 0.0315825 +-0.0619246 0.161563 -0.0295917 +-0.0336612 0.0423072 0.0487868 +-0.0806782 0.140364 -0.00279029 +-0.0575747 0.034031 0.0251021 +-0.00250061 0.0856648 0.0572816 +-0.051497 0.0776631 0.0434639 +-0.0314085 0.177247 -0.00418119 +-0.0382796 0.035429 0.0243806 +-0.0273926 0.0381858 0.00428469 +-0.0590133 0.128179 -0.00718347 +-0.059761 0.058524 0.00837605 +-0.089717 0.142036 0.0301646 +-0.0708787 0.0634588 0.0196178 +0.017237 0.0368135 -0.0176915 +0.0283981 0.0848865 0.0446615 +0.042292 0.0669509 0.0276386 +-0.0400442 0.15362 -0.00816685 +-0.0666868 0.15458 -0.000433214 +0.00520355 0.0894816 -0.0332282 +-0.0438381 0.033833 0.0263899 +-0.0863798 0.100827 0.00341316 +-0.0560788 0.154579 -0.00133297 +-0.0130807 0.0387897 0.0319484 +0.0526374 0.0710929 0.00470311 +0.0114966 0.0923286 0.0527326 +-0.0637555 0.0336685 -0.00625178 +-0.0475689 0.0432884 -0.0109341 +-0.0725775 0.0367142 0.00725292 +-0.0374892 0.112529 0.0350998 +0.0350676 0.0395586 0.0248293 +-0.031508 0.0675059 0.0394967 +0.0422807 0.0831292 -0.00677447 +-0.0617624 0.0810326 -0.0192317 +-0.0601798 0.155861 0.0135147 +-0.0160151 0.185636 -0.0207096 +-0.0495589 0.141679 0.00640064 +0.0451001 0.0791381 0.000209359 +-0.00648871 0.115533 0.0401374 +-0.0179936 0.034905 0.0502652 +-0.0345243 0.0619374 0.0399691 +0.0253647 0.107408 0.0385761 +0.0241683 0.0795725 0.0490812 +-0.076883 0.154198 -0.00789596 +-0.022619 0.0436731 -0.0285417 +0.0302544 0.115002 0.0294335 +-0.0112354 0.0407042 0.0501624 +-0.0374964 0.118015 0.0312717 +-0.0264155 0.169752 -0.0102811 +-0.0325172 0.115309 0.0332233 +-0.0883434 0.0968836 0.00640652 +-0.0074894 0.104457 0.0437929 +-0.0122029 0.0391189 0.0354325 +0.0605626 0.0609358 0.0161739 +-0.0291057 0.0349617 0.0478282 +-0.00632683 0.0367419 -0.0160833 +0.0422139 0.06433 -0.00247442 +-0.0834639 0.0815548 0.0279962 +-0.091428 0.113787 0.018961 +-0.0164849 0.0911174 0.0558291 +-0.0521483 0.153554 0.0122178 +0.0344074 0.0446243 -0.00536213 +-0.09232 0.126938 0.0302595 +-0.0718881 0.12088 -0.00850233 +-0.0769692 0.155214 0.0250641 +-0.0847077 0.140411 0.00224002 +-0.0180254 0.171268 -0.0157212 +0.0102822 0.065327 -0.0312772 +-0.0271732 0.171194 -0.0185934 +-0.0475224 0.0587349 0.0366732 +-0.0815066 0.0980245 0.032594 +-0.0287322 0.0335484 -0.0250427 +0.000965074 0.0348235 0.00577003 +-0.0874433 0.114073 0.0447649 +-0.0745611 0.163685 -0.0159572 +-0.0504998 0.0931897 0.044287 +0.00144942 0.127679 0.0289378 +-0.0830551 0.128552 0.0515383 +-0.0537303 0.0473713 0.0135851 +-0.0226958 0.0380494 0.0144148 +-0.0698996 0.147518 -0.0298062 +-0.0374978 0.0833038 0.0438252 +0.0144108 0.118463 -0.013667 +-0.0810085 0.1097 0.0318734 +-0.0883068 0.151437 0.0121831 +0.0014962 0.114186 0.0411808 +-0.0457512 0.0782542 -0.0192962 +-0.0728503 0.107163 0.0374416 +-0.0546426 0.0335759 -0.00981752 +-0.0905935 0.133662 0.00922276 +-0.0777368 0.158322 -0.016916 +0.0333249 0.108715 0.0307644 +-0.0758319 0.0675199 0.00554661 +-0.0608714 0.0385134 0.0195368 +-0.0766234 0.167356 -0.0265012 +0.0324864 0.115764 0.0245556 +-0.051601 0.149349 0.0154046 +-0.0370133 0.1227 0.0269929 +-0.0556554 0.124247 -0.00722427 +-0.0272643 0.118767 -0.0116611 +-0.0284876 0.0660147 0.0384689 +-0.0890493 0.136506 0.0262024 +0.0455252 0.0918117 0.00617298 +-0.0739705 0.110854 0.0450522 +-0.054929 0.0378655 -0.0109689 +-0.0211646 0.0933284 0.0517404 +-0.00865087 0.0496719 -0.030975 +0.0599111 0.0692057 0.0151972 +0.0182222 0.0631608 0.0491228 +-0.0659867 0.134061 -0.00822741 +-0.0533518 0.117447 -0.0141574 +-0.0356207 0.0519761 -0.0103771 +-0.0674828 0.0383816 0.0133921 +-0.0179472 0.0391243 0.0360362 +-0.0353932 0.0352385 0.0143534 +-0.0381912 0.168168 -0.0127822 +0.0242439 0.0994852 0.044008 +-0.0331278 0.165217 -0.0153881 +0.0419441 0.102888 0.00516309 +-0.0744413 0.0833098 0.038687 +-0.0349807 0.177 -0.00919022 +0.00950876 0.0882899 0.055046 +0.0203114 0.0607424 -0.0267183 +-0.00473829 0.0684427 -0.0355801 +-0.0293549 0.0495451 -0.022456 +0.0213555 0.0521216 -0.0251867 +-0.0608025 0.132515 0.0384279 +-0.086306 0.0981081 0.00140707 +0.0124215 0.122685 -0.01021 +0.0534041 0.0547278 -0.00176167 +-0.0725172 0.105485 0.0374705 +-0.0925573 0.125589 0.0382552 +0.023685 0.124697 0.0198268 +0.0381226 0.0574698 -0.00591549 +-0.0358756 0.107103 -0.0202685 +-0.00445554 0.112864 -0.0195829 +-0.00333512 0.125963 -0.00760181 +0.0355639 0.058664 -0.0117324 +-0.0752743 0.171989 -0.0354168 +0.0264872 0.122262 0.00520712 +-0.0911855 0.114622 0.00933636 +-0.0888501 0.102361 0.0153809 +0.0303343 0.0358493 0.0181065 +0.0388945 0.108364 0.0171641 +0.0444906 0.0861036 -0.00180248 +-0.00457845 0.0388805 0.0300129 +-0.0689372 0.126774 -0.00892675 +0.0352594 0.113795 0.0141522 +0.0379749 0.0374097 0.0109015 +0.00640925 0.0404248 -0.023654 +-0.0569156 0.112617 -0.0162683 +-0.0161127 0.0388433 -0.0124778 +-0.0568734 0.0358081 0.0462717 +-0.0852004 0.111887 0.0434561 +-0.0393334 0.174116 -0.00798067 +-0.0335527 0.156609 0.00223348 +-0.06623 0.13826 0.0429445 +-0.029146 0.168214 -0.0173005 +0.0267233 0.0347365 0.00732658 +-0.0416725 0.0607151 -0.0124173 +-0.0304675 0.175749 -0.00423829 +-0.0888241 0.114444 0.00524771 +-0.00228102 0.038771 0.0269718 +-0.0353955 0.0337248 -0.0302701 +-0.0474965 0.0862056 0.045143 +-0.0615859 0.155307 -0.0235819 +0.0506383 0.0516722 -0.00273463 +0.0335552 0.036072 0.00748554 +-0.00436077 0.12603 -0.00766771 +-0.0239599 0.182991 -0.0170658 +-0.00549985 0.07185 0.0581365 +-0.0328429 0.0972178 -0.0231932 +-0.091474 0.148846 0.0181354 +0.0336134 0.0876336 0.0416906 +-0.0614982 0.101529 0.0422258 +-0.0495014 0.0464837 0.0411417 +-0.0551395 0.054088 0.00915623 +-0.0432223 0.147486 -0.00120685 +-0.0358825 0.108535 -0.0199213 +0.00990352 0.130871 0.0175976 +-0.00150184 0.0978367 0.052434 +-0.0334203 0.0667037 -0.0174892 +0.0289827 0.0467369 -0.00766304 +-0.0555362 0.0629843 -0.00681601 +-0.0758946 0.0992374 -0.0118631 +-0.0367472 0.127095 0.0166739 +-0.0571684 0.0576767 0.00966588 +-0.0823623 0.154598 0.0188308 +-0.0905142 0.129614 0.0405398 +-0.0677394 0.0764997 -0.0160371 +-0.0201192 0.163785 -0.0165508 +-0.0132881 0.113144 -0.01784 +0.0143956 0.046307 -0.0246969 +0.0117341 0.0390743 0.0447312 +-0.0746833 0.155701 -0.000366346 +-0.069527 0.156219 -3.70248e-05 +-0.0226679 0.0341396 -0.0206509 +-0.00924422 0.0344526 -0.0182921 +-0.0276907 0.0335904 -0.024878 +-0.00470812 0.0669686 -0.0349707 +-0.024291 0.106203 -0.0224613 +-0.0142085 0.0972199 -0.0290358 +-0.0465353 0.133196 0.0100953 +-0.0245088 0.108515 0.0403619 +-0.092997 0.116043 0.0153159 +-0.0517083 0.131123 0.0322407 +-0.0456135 0.053373 -0.0104441 +-0.0345226 0.0846315 0.0427551 +-0.00735617 0.0354566 -0.0169734 +-0.0865776 0.109066 0.0163469 +-0.0436408 0.0408205 -0.0223011 +-0.0526724 0.130856 -0.00431281 +-0.0516582 0.0647811 -0.0108241 +0.0182047 0.100313 -0.0224597 +0.0445886 0.0833307 0.0241696 +-0.0749819 0.151307 -0.0268775 +-0.0846364 0.0845811 0.0264985 +-0.0452001 0.165138 -0.00833108 +-0.0791947 0.168601 -0.0366432 +-0.0848581 0.120613 -0.00298955 +0.0319638 0.0780558 -0.0197042 +-0.0923737 0.128196 0.0102559 +0.0394261 0.0716433 -0.0107927 +0.0122035 0.115305 -0.0162457 +-0.0229162 0.0383263 0.00143492 +0.0428254 0.0986969 0.0191637 +0.0153612 0.0463061 -0.0243571 +-0.00764709 0.0511598 -0.0317878 +-0.0853621 0.135278 0.0465646 +-0.0829375 0.116994 0.0487646 +-0.085028 0.100559 0.0275605 +-0.0219183 0.0382906 0.00166561 +-0.0765591 0.0818865 0.0366215 +0.0417584 0.0971928 -0.00282344 +-0.064598 0.141073 0.0399979 +0.0464507 0.0764566 0.0101865 +-0.0788399 0.114858 -0.00418456 +-0.0825062 0.110166 0.000353593 +0.029005 0.0699505 0.0419019 +-0.0144969 0.0814706 0.0569355 +0.0278524 0.115393 0.0316598 +-0.0742949 0.17555 -0.0422185 +-0.0749686 0.158241 -0.0259415 +-0.0378653 0.102824 -0.0209313 +-0.0110297 0.11443 -0.0172182 +0.0092913 0.0739064 -0.0330363 +0.0274028 0.0416284 -0.00496361 +-0.0105374 0.130025 0.0158825 +-0.0530895 0.0530892 -0.00643833 +-0.0165413 0.0573347 0.0511714 +0.0165193 0.125294 -0.00303164 +-0.080526 0.109264 0.0359357 +-0.0639459 0.153257 -0.00670123 +0.0199666 0.126684 0.0198751 +0.0426813 0.101508 0.00916223 +0.0270307 0.0781852 0.0461538 +0.00819303 0.0342719 -0.00156322 +-0.0758021 0.154133 0.0299324 +0.0217183 0.114203 -0.013082 +-0.0761724 0.154401 0.00198863 +0.0253655 0.0814952 -0.0244829 +-0.0357817 0.0871994 -0.0240994 +-0.0181797 0.178658 -0.0176382 +-0.018211 0.0697307 0.0537615 +-0.0393811 0.154717 -0.00895732 +-0.014508 0.0659228 0.0537042 +-0.0294961 0.104302 0.0413374 +-0.0281692 0.171188 -0.018077 +-0.0564789 0.0833746 0.0446901 +-0.0817321 0.120346 0.0490739 +-0.0180945 0.124042 -0.00530863 +-0.0722448 0.0688588 0.0287217 +-0.064637 0.0404566 0.0276669 +-0.0642686 0.171043 -0.0609844 +-0.00150003 0.0520299 0.0541649 +0.0343966 0.0968432 0.0376227 +0.033587 0.0739599 -0.0167921 +-0.0916761 0.122705 0.00729331 +0.0435692 0.0691645 0.0259965 +-0.0583799 0.0342852 0.0299739 +0.0193411 0.0593649 -0.0271573 +-0.0630027 0.145885 -0.0118617 +-0.0492939 0.133961 0.00142725 +-0.0445641 0.0405033 0.0438121 +-0.0534909 0.101517 0.0419949 +-0.0137652 0.0728728 -0.0386088 +-0.000746952 0.0726633 -0.0355323 +-0.00426313 0.130924 0.016725 +-0.0833848 0.0776237 0.00250717 +0.0107457 0.127435 -0.00331768 +-0.0566099 0.136533 -0.00462162 +-0.0137664 0.0742812 -0.0386456 +-0.0253123 0.0865272 0.0518462 +0.0391332 0.0800655 -0.0117735 +-0.0595022 0.0987448 0.042776 +-0.031899 0.0792306 -0.0315346 +-0.074881 0.117904 -0.00727699 +-0.0755718 0.165165 -0.0201548 +0.0408155 0.0939721 0.0292858 +-0.0854938 0.096523 0.0281673 +-0.0644931 0.105621 0.039804 +-0.0196701 0.0554437 -0.0324495 +0.0139693 0.112639 -0.017366 +-0.00232624 0.124886 -0.00844394 +-0.0617679 0.0824635 -0.0193558 +-0.0599121 0.0588939 0.00621161 +-0.0826266 0.146034 0.0392943 +-0.0649084 0.165706 -0.0272764 +-0.0602113 0.0697286 0.0375341 +-0.00175042 0.0897209 -0.0353687 +-0.0275054 0.107176 -0.0215083 +-0.062122 0.0429616 0.0266943 +0.032428 0.0625798 -0.0177725 +-0.0663881 0.0677373 0.0326703 +-0.02076 0.0347198 -0.0277376 +-0.0519381 0.0597689 0.0297286 +-0.0595413 0.0582322 0.0158865 +-0.0445568 0.151229 -0.00569012 +-0.0210951 0.12531 -0.000542597 +-0.020213 0.178617 -0.0227863 +-0.00769265 0.0388371 -0.00333188 +-0.0344924 0.09037 0.0442186 +-0.0786032 0.107051 0.0327104 +-0.0434904 0.12843 0.000929671 +-0.058473 0.115363 0.0369711 +0.045085 0.0833373 0.00221176 +-0.0384977 0.0648621 0.0416261 +-0.0407478 0.0768336 -0.0187281 +-0.0578796 0.102621 -0.0187883 +-0.0846144 0.128516 0.0502768 +0.0170529 0.075444 0.0528157 +-0.018505 0.0786406 0.056357 +-0.0752579 0.0874199 0.0393733 +0.043967 0.0636126 -0.00172463 +-0.0914628 0.146095 0.0181484 +-0.0294715 0.117536 0.0312989 +-0.0581079 0.0480417 -0.000353036 +-0.0384621 0.172216 -0.000421117 +0.0412086 0.0684033 0.0296357 +-0.0332986 0.0384796 -0.0137148 +-0.0549774 0.0335456 0.00467992 +0.00953694 0.103082 0.0459273 +-0.048193 0.133027 0.0241926 +0.00364343 0.0960341 -0.0296841 +-0.0809226 0.0926448 0.0335946 +0.0316471 0.05126 -0.00972402 +-0.0622205 0.164668 -0.0515889 +0.0257137 0.0591918 0.0440938 +-0.0116637 0.0384284 0.00907266 +0.00758624 0.0341288 -0.016561 +-0.0732628 0.0731075 0.0335988 +0.0105031 0.0347322 0.0422156 +0.0273613 0.0592959 -0.0217662 +-0.0329323 0.126815 0.00921204 +-0.0462425 0.0615364 0.0381535 +0.00735972 0.130718 0.020957 +-0.0618449 0.152018 0.0348716 +-0.0311962 0.0475489 -0.0247586 +-0.0384898 0.113893 0.0344296 +-0.0268492 0.155368 -0.00477229 +0.0138974 0.0344287 -0.0156692 +-0.0374813 0.169748 0.00157136 +-0.0892091 0.137796 0.0122163 +-0.0705026 0.0958452 0.0418601 +-0.0862013 0.10903 0.0113533 +-0.0682521 0.15944 -0.00832765 +0.038441 0.100665 0.0293761 +-0.0639313 0.11526 -0.0113233 +-0.0664444 0.151761 -0.0404644 +0.0142088 0.034798 0.0302902 +-0.0244166 0.0931902 0.0479432 +-0.0714792 0.167875 -0.0225174 +-0.0161203 0.0383572 0.000963241 +0.0282773 0.0862159 0.0445154 +0.0375 0.107296 0.0262149 +-0.0891989 0.11586 0.044703 +0.00339178 0.0433892 -0.0247833 +-0.0790801 0.0704064 0.00826811 +-0.0237813 0.0756129 -0.0382516 +0.00190837 0.124868 -0.00847893 +0.0243137 0.119818 0.0300741 +-0.0758951 0.123764 -0.00763971 +0.052991 0.0735097 0.0116286 +-0.0175974 0.0393048 -0.0277532 +-0.013784 0.0799171 -0.0389774 +0.00451197 0.0619711 0.0562284 +-0.0331612 0.0342582 0.0246899 +0.0314823 0.114431 0.0284596 +-0.0530088 0.145722 -0.00115007 +-0.0684496 0.0369814 0.0129839 +-0.0203772 0.158233 -0.00725915 +0.0148967 0.0366228 -0.0205744 +-0.0250413 0.0925197 -0.0322644 +-0.0424949 0.168218 0.00285877 +-0.0414982 0.0719267 0.042103 +-0.0939163 0.120093 0.0142993 +-0.0164902 0.112704 0.0398029 +-0.000484486 0.0703477 0.056848 +0.060415 0.0678562 0.0151973 +-0.0550635 0.116914 0.036091 +0.0200483 0.0385661 -0.0116898 +-0.0250588 0.123734 -0.00291588 +0.0403936 0.0629925 0.0301493 +0.0379656 0.0874795 0.0356781 +-0.0548923 0.105518 -0.0186699 +-0.0311396 0.166714 -0.0162904 +0.0470624 0.0740285 0.0123586 +-0.0678676 0.100922 -0.0154166 +-0.0631629 0.124137 0.0456282 +-0.0731746 0.154066 -0.0319096 +-0.0307727 0.033545 -0.0254394 +-0.0890856 0.122978 0.0464209 +-0.0236634 0.123398 -0.00459221 +0.046259 0.0820395 0.0071847 +-0.000605347 0.130433 0.0223861 +0.0192013 0.0591556 0.0487522 +-0.0498987 0.124057 -0.00910218 +-0.0170638 0.168326 -0.0143421 +0.0265398 0.104204 -0.0163559 +-0.0938575 0.120136 0.0242923 +-0.0179474 0.100123 -0.0240926 +-0.058599 0.155538 0.0184341 +-0.0170777 0.0418831 0.0522589 +-0.0545484 0.0457621 -0.00683862 +0.00723985 0.076824 -0.0341303 +-0.0907031 0.148891 0.0231421 +-0.0174825 0.107148 0.0420092 +-0.0911131 0.129682 0.0362351 +-0.0499113 0.147776 0.0118822 +-0.0657818 0.152842 -0.0413063 +0.0528515 0.0592232 -0.00323634 +-0.0693828 0.0805427 0.0408087 +-0.060108 0.0423138 0.0158374 +0.0281616 0.0699505 0.0424355 +0.00679863 0.0347495 0.0432322 +-0.0458268 0.125298 0.0247658 +-0.0567225 0.043789 0.0226896 +-4.09913e-05 0.10064 0.0465907 +-0.0729374 0.129655 -0.00843737 +0.0415013 0.104244 0.010161 +0.0342459 0.0889575 0.0408509 +-0.0808289 0.138985 -0.00281163 +-0.0425095 0.171123 -0.00130836 +-0.0870569 0.137884 0.0425258 +0.00149552 0.116934 0.0397718 +-0.0158011 0.0388262 -0.0105326 +0.00549603 0.0413259 0.0457036 +-0.0325959 0.124521 0.0211556 +-0.058912 0.109738 -0.0167726 +-0.0772259 0.151416 -0.00590086 +-0.0077735 0.0770379 -0.0376668 +0.0385932 0.0436441 0.0291648 +-0.0778914 0.162484 -0.0299302 +-0.0641074 0.0639595 0.0276548 +0.0187103 0.0342934 0.0023932 +-0.0858293 0.151702 0.00893089 +0.0336067 0.0504819 0.0325279 +-0.0810076 0.10869 -0.00259876 +-0.0557401 0.0547516 -0.00240302 +-0.0335154 0.108413 0.0382413 +-0.00564795 0.049654 -0.0307584 +-0.0765497 0.0728479 -0.00560245 +-0.00214115 0.127727 0.0291435 +-0.0701217 0.159568 -0.0479252 +-0.0794787 0.104524 -0.00660043 +0.00849938 0.0366585 0.0454484 +-0.0305059 0.0889327 0.0438397 +-0.0638439 0.101082 -0.0177706 +-0.0045041 0.0801506 0.0577231 +0.013232 0.0835986 -0.0303791 +-0.0809796 0.0788834 0.0298322 +-0.0148841 0.0959887 -0.031739 +-0.0699437 0.0669048 0.0273786 +-0.0514117 0.134659 0.0288827 +0.0105257 0.123354 0.0336723 +0.0263222 0.107421 0.038207 +-0.0125183 0.095238 0.0536312 +-0.0634853 0.0904216 0.0451002 +0.0377424 0.110293 0.0150624 +-0.0700913 0.0419644 0.00613646 +-0.0565326 0.0401709 -0.00945456 +-0.0553504 0.0460785 0.0138247 +-0.0114916 0.0759418 0.0571389 +-0.0796666 0.0886389 0.0352895 +0.0338998 0.0888046 -0.0179815 +-0.0207237 0.0567772 0.0467736 +0.0293267 0.120376 0.00767428 +-0.0865466 0.137714 0.00320362 +-0.0815177 0.106 -0.00361682 +0.0360857 0.0784054 -0.0147648 +-0.0706254 0.129856 0.0506426 +0.0309103 0.088937 0.0430941 +0.0186908 0.127724 0.0151265 +0.0607002 0.0665033 0.01416 +-0.0347226 0.0711465 -0.0183854 +-0.0475247 0.0335798 -0.00289187 +0.00330662 0.0597508 -0.0323981 +0.0162777 0.117973 -0.0131407 +0.0260142 0.118212 -0.00538239 +-0.0524983 0.0477783 0.0397646 +0.00462528 0.109546 0.0419595 +-0.0848442 0.146005 0.0372765 +-0.0568876 0.0998079 -0.0197942 +-0.0478768 0.15504 0.00962757 +0.0236771 0.0956901 -0.0213272 +-0.0909699 0.113313 0.018324 +-0.0314956 0.0560344 0.0371147 +0.0419523 0.101425 0.00119033 +-0.0205212 0.118181 0.0347958 +0.00296971 0.0341513 0.00863676 +-0.0034922 0.0473569 0.0490622 +0.0168587 0.0347265 0.0236529 +-0.00422658 0.0396088 0.0480089 +0.0402871 0.104196 0.0211608 +-0.0211382 0.0985478 0.044502 +-0.0469324 0.0383628 -0.0152843 +0.0223386 0.0578809 -0.0262309 +-0.094679 0.122825 0.0202733 +-0.00649716 0.0619561 0.0561245 +-0.0530923 0.143138 0.0243879 +0.0586666 0.0690768 0.00715872 +-0.0632884 0.0444363 0.0372932 +-0.0584087 0.0421172 0.0451764 +0.0462769 0.0649494 -0.00109094 +-0.0892011 0.0983026 0.0104143 +-0.050311 0.033406 0.00395206 +-0.0171117 0.123425 0.0297114 +-0.0067867 0.0784694 -0.0378945 +-0.0413793 0.0448727 -0.0203291 +0.00613123 0.105885 -0.0208912 +-0.0209654 0.035527 0.0525237 +0.0515169 0.0664883 0.0274059 +-0.0186581 0.0985081 0.0446525 +0.00326552 0.127077 0.029619 +0.00950248 0.111292 0.0396928 +0.0420852 0.077848 0.0291974 +-0.0404715 0.0343242 0.0319689 +-0.0775002 0.156948 -0.0139048 +-0.0828255 0.0924347 -0.00656966 +-0.0256554 0.124701 0.019279 +0.00649798 0.107134 0.0414437 +-0.0067083 0.0613544 -0.0352012 +-0.0341277 0.165212 -0.0151261 +-0.0305288 0.0353431 -0.0195833 +0.00449494 0.105757 0.0421851 +-0.0313565 0.161046 -0.00157639 +0.00317447 0.0908801 -0.0331491 +-0.066706 0.0375681 0.0351923 +0.0146203 0.128223 0.0236197 +-0.0931816 0.121543 0.0372829 +-0.0390449 0.0344196 0.0339502 +0.0204938 0.0865196 0.0494812 +-0.0909512 0.147073 0.025026 +-0.0398753 0.149194 -0.00215183 +0.0371767 0.095465 0.0345819 +-0.0534525 0.116245 -0.0149003 +-0.00912597 0.168128 -0.0227626 +0.0103593 0.0509634 -0.0286117 +0.00839042 0.0434178 -0.024623 +0.012125 0.10869 -0.0190017 +-0.0749621 0.134014 -0.00721966 +-0.0789216 0.172194 -0.0440002 +-0.0258331 0.0561399 -0.0284181 +-0.0817922 0.143171 0.000171875 +0.0451306 0.0647669 -0.000900002 +-0.0514821 0.113924 -0.0164877 +0.00371763 0.0346901 0.0426483 +-0.0475701 0.0461114 -0.0100167 +0.0406981 0.104234 0.0181671 +-0.0453678 0.060156 0.0387657 +-0.0314314 0.0693522 -0.0254564 +-0.0154911 0.0702181 0.054969 +-0.0300755 0.123175 0.0220771 +-0.0216491 0.0479362 -0.0281524 +-0.0507589 0.144713 0.0133585 +-0.0670917 0.155954 0.0255845 +-0.0852375 0.1104 0.00532111 +-0.0573508 0.121267 0.0398601 +-0.0261065 0.0944666 -0.0262366 +-0.0897054 0.124293 0.0455762 +-0.000486036 0.047441 0.049521 +-0.0438029 0.167379 0.00334272 +0.0111963 0.0864748 -0.0310924 +0.0464517 0.0750534 0.00718936 +-0.036486 0.0619956 0.0409573 +-0.0314993 0.116609 0.0322344 +-0.0544997 0.117303 -0.0139925 +-0.0420673 0.0336103 0.00544111 +-0.0856626 0.0912736 -0.00055353 +-0.050495 0.0974075 0.0440057 +0.0309311 0.0355864 0.0055308 +0.0202177 0.109327 -0.0158556 +0.0249428 0.0968855 0.0450153 +-0.00751 0.070341 0.0568254 +-0.0604012 0.0335984 -0.00916237 +0.0245092 0.0406191 -0.00557292 +-0.0451779 0.152141 0.00822921 +-0.0607654 0.0668786 0.0346016 +-0.0593188 0.114075 -0.0145597 +-0.091214 0.143385 0.025163 +-0.0425978 0.0505652 -0.0109174 +-0.0423266 0.169779 -0.00887745 +-0.0224756 0.0348012 0.0476768 +0.0409735 0.0405135 0.0215425 +-0.0801239 0.110623 0.0438367 +-0.0138651 0.0987904 -0.0246748 +-0.043573 0.126043 -0.00725208 +-0.0208606 0.101617 -0.0238418 +-0.0425016 0.0605517 0.0404213 +-0.00249479 0.0590139 0.0541301 +0.0409984 0.102803 0.000176721 +0.0342014 0.0808856 0.0407312 +-0.0247835 0.166781 -0.00970724 +0.00931572 0.0725689 0.0556419 +-0.0642124 0.145356 0.038849 +-0.0716272 0.0748459 -0.0119866 +-0.012533 0.0458468 0.048979 +-0.0741728 0.15268 -0.0288898 +-0.0211868 0.174176 -0.0217698 +-0.054499 0.0761691 0.0426143 +-0.0851934 0.11068 0.0373035 +-0.00964195 0.120097 -0.0132573 +0.0149745 0.129329 0.00806984 +-0.0535552 0.0335918 0.0121227 +0.0387224 0.1084 0.018173 +-0.0858928 0.108988 0.00834067 +0.00426552 0.0697141 -0.0335935 +0.0304509 0.117992 0.000957505 +-0.0134723 0.0603845 0.0536243 +-0.0809665 0.133877 -0.00363658 +-0.0877284 0.0950339 0.0247524 +-0.0708769 0.155921 0.00969704 +-0.0388302 0.173903 -0.00342781 +0.0123125 0.0680946 -0.0309662 +-0.0540561 0.150161 -0.00256907 +-0.0662654 0.129803 0.0463681 +-0.0481341 0.0344887 0.0319692 +-0.0482356 0.137094 0.0133979 +-0.0638562 0.148524 -0.023921 +-0.0873971 0.140576 0.0399568 +-0.0920359 0.126943 0.0332532 +0.00766079 0.0616753 0.0549139 +-0.0820513 0.0882817 -0.00662822 +-0.0583711 0.0614813 0.0257087 +-0.046355 0.0345569 0.0357917 +0.0473411 0.0488863 -0.00367878 +0.0292435 0.0637114 -0.0199317 +-0.0250309 0.172718 -0.0117738 +0.0423872 0.0459654 -0.00393846 +-0.0484976 0.0805051 0.0439961 +-0.0497297 0.0737805 -0.0165746 +0.0463736 0.0682111 0.00160519 +-0.0334339 0.166782 -0.00461644 +-0.0772978 0.0685904 0.0138065 +-0.0645607 0.153661 0.00110457 +0.00849221 0.108496 0.0406568 +-0.0554287 0.1598 0.000101402 +-0.0412715 0.127285 -0.00254236 +-0.080968 0.0967089 0.0335048 +0.0225187 0.123964 0.0251042 +-0.0559057 0.0379831 0.047068 +-0.0594802 0.0716799 0.0395512 +-0.0618223 0.170491 -0.0617288 +-0.0564955 0.104323 0.0414899 +-0.0810442 0.152541 0.00426923 +-0.0435828 0.0345782 0.0398547 +0.0126008 0.128196 0.0257553 +-0.0526679 0.0579784 0.0235498 +0.0380115 0.110174 0.0108643 +0.0150842 0.114728 -0.0156323 +0.0148813 0.0348012 0.0286151 +-0.0479877 0.121051 0.028756 +-0.0883678 0.128089 0.00227451 +-0.0720422 0.15541 -0.0389078 +0.0112474 0.0724264 -0.0317987 +0.0267956 0.111385 0.0354031 +-0.0649586 0.160381 -0.0157887 +0.00550295 0.0702783 0.0558582 +-0.0238067 0.0899629 -0.0356649 +-0.090988 0.113988 0.0207121 +0.0194892 0.0934174 0.0476186 +-0.0655537 0.161293 -0.0160037 +-0.0625236 0.0609176 -2.19725e-05 +-0.0491589 0.162483 -0.00556124 +-0.042649 0.0378778 -0.0263104 +0.00374161 0.0952291 -0.0308324 +0.025598 0.0610493 -0.0236458 +0.00942462 0.0375116 -0.02327 +-0.00136682 0.125668 -0.00729488 +0.008486 0.0532759 0.0521458 +-0.00749086 0.0675042 0.0558082 +-0.092697 0.117351 0.0113077 +0.0251837 0.112665 -0.0114294 +-0.04997 0.140123 0.00440621 +-0.0534339 0.040168 0.0467985 +-0.0936376 0.124116 0.0132691 +-0.0222759 0.0382517 0.00526325 +0.0600635 0.0664445 0.00913698 +-0.0224559 0.092554 -0.0342812 +0.0582887 0.0538074 0.00917936 +0.046059 0.0834308 0.0121726 +-0.0619009 0.0678892 0.0352357 +-0.0566658 0.0473318 0.0108617 +-0.0457003 0.0694971 -0.0160523 +-0.0618544 0.174099 -0.0565963 +-0.0498016 0.128288 0.0314623 +-0.0225807 0.159177 -0.00302445 +-0.0623624 0.16436 -0.0595797 +0.0383958 0.0505315 -0.00659356 +-0.0332433 0.126938 0.0135159 +-0.0454819 0.0875316 0.0441596 +-0.0835389 0.110217 0.0023021 +0.0386074 0.0617702 0.0328492 +-0.0407686 0.0811968 -0.0203079 +-0.033827 0.0901076 -0.0243377 +0.0506567 0.0703381 0.00346635 +0.0228724 0.125195 0.0195238 +-0.0187529 0.0384803 -0.00337678 +0.0222732 0.12205 0.0293193 +-0.0294959 0.0645466 0.0380401 +-0.0689565 0.166538 -0.0215879 +-0.00506288 0.0387211 0.00101779 +-0.0647592 0.169439 -0.0415812 +0.00438439 0.037904 -0.00378653 +-0.0241621 0.125878 0.0168174 +0.0359934 0.0685324 -0.0147875 +-0.0182052 0.0381955 0.0170088 +-0.0753414 0.15612 0.015399 +0.0453867 0.0413474 0.00824507 +-0.00449218 0.123763 0.0343217 +0.0460213 0.0862262 0.00917159 +0.0346496 0.0972102 -0.0129196 +0.0196844 0.126554 0.00410284 +0.0202619 0.12651 0.00572713 +-0.00449958 0.0504123 0.0519892 +-0.0899789 0.133805 0.0362152 +0.00988218 0.0886651 0.0547874 +-0.00395268 0.131078 0.00966125 +0.00346471 0.0977538 0.051238 +-0.0236164 0.0422618 -0.0289626 +-0.0253603 0.124214 -0.00135534 +-0.00744498 0.124256 -0.00972454 +-0.0577765 0.0494102 0.000630355 +-0.0321623 0.172645 -0.015639 +-0.0661377 0.0669804 0.0316196 +-0.0240269 0.158277 -0.0107707 +-0.0762359 0.113613 0.0494664 +-0.0849952 0.141833 0.00418636 +-0.0569251 0.0366412 0.0466659 +-0.0283222 0.0749245 0.042497 +0.0216856 0.0878179 -0.0250022 +-0.0866951 0.0951098 0.0265657 +0.0296006 0.0982071 0.041203 +-0.0630317 0.060472 0.0203248 +-0.0304883 0.0574252 0.0370157 +-0.0638466 0.159519 -0.0168205 +-0.0544959 0.0848124 0.0452537 +0.0243406 0.113099 -0.011895 +-0.0900837 0.117534 0.0447346 +-0.00144097 0.0378708 0.018909 +-0.0699808 0.136988 -0.00795948 +-0.0823654 0.0815422 -0.00354068 +-0.00681555 0.0385421 0.0244437 +0.00431168 0.0611153 -0.0319161 +-0.0801269 0.10608 0.0309775 +0.0162329 0.0807169 -0.0293214 +-0.0158843 0.0377689 0.0515755 +-0.0829013 0.122118 -0.00412754 +0.0294673 0.106706 -0.01303 +-0.0534948 0.11254 0.0358256 +0.00150254 0.0605844 0.0560506 +-0.0234977 0.101642 0.0439992 +-0.0797566 0.074638 -0.000471413 +-0.00773143 0.0670178 -0.0355816 +-0.0705055 0.0342009 0.00809348 +0.0167377 0.0461846 0.0432665 +0.00646432 0.110948 0.0411124 +-0.0194753 0.160592 -0.0133076 +-0.00449865 0.115591 0.0404715 +0.0280707 0.046664 -0.00969251 +0.048051 0.0496945 0.0288529 +-0.0763852 0.114637 0.0504008 +-0.0886058 0.150235 0.0251076 +-0.0211531 0.0382979 0.0271326 +0.0408293 0.101363 -0.00180736 +-0.0203988 0.177179 -0.0155929 +-0.0718351 0.180364 -0.0513557 +0.00724322 0.0361893 0.0456372 +0.0124253 0.0374345 -0.0223624 +0.0378254 0.108706 0.0222481 +-0.0871672 0.127065 0.0471934 +-0.0686541 0.12565 0.0517171 +-0.0889642 0.136517 0.0281982 +-0.0304896 0.0559845 0.0366491 +-0.0839703 0.0843113 0.0284366 +-0.00895133 0.0384401 0.00779513 +-0.0942308 0.126903 0.0192529 +-0.0569855 0.0507747 0.00670607 +-0.063488 0.037094 -0.00797583 +0.0252887 0.122228 0.0247087 +-0.0433541 0.112279 -0.0167951 +-0.0255625 0.0532992 -0.0274025 +-0.00849647 0.0532799 0.0524507 +-0.0074932 0.0842694 0.0572981 +-0.0760467 0.0689134 0.00354542 +-0.0518697 0.144272 -0.000239851 +0.0302023 0.0808798 0.0437374 +-0.0276563 0.12199 -0.007026 +-0.0484978 0.100158 0.0428666 +-0.0654874 0.143443 -0.0120814 +-0.0308113 0.153953 -0.00248259 +0.0597604 0.0567164 0.0141707 +-0.0480122 0.0341726 0.0287503 +-0.0640462 0.0622661 0.0238361 +-0.0206969 0.0568414 -0.0326165 +0.0309722 0.116471 -0.00147933 +-0.0691516 0.0788347 0.0401452 +-0.058803 0.0883 -0.0207912 +0.00672447 0.0346721 0.0378883 +-0.0746893 0.154119 0.0302893 +-0.0529585 0.135327 0.0304274 +0.00863241 0.128438 -0.00238911 +-0.0478493 0.099947 -0.0217978 +-0.075086 0.0674684 0.00355063 +0.0326927 0.116394 0.0217802 +-0.0842229 0.144678 0.0395137 +-0.0166094 0.128602 0.0136868 +0.00411662 0.125005 -0.00865855 +-0.0754818 0.148362 0.0406222 +-0.065886 0.15405 -0.00011759 +-0.0425085 0.119367 0.0297171 +-0.0902093 0.131023 0.0402096 +0.0383601 0.0921445 -0.0115002 +-0.038495 0.0804525 0.0431634 +-0.0353039 0.0794833 -0.0226806 +0.0441637 0.0973591 0.0111613 +-0.0590115 0.153958 0.00054242 +0.0453728 0.0735622 0.00221503 +0.0569193 0.0710092 0.00714855 +-0.0114956 0.105842 0.0433599 +-0.0698279 0.181394 -0.0549266 +0.0375934 0.102015 0.0299178 +0.00590625 0.0356875 -0.00331654 +-0.0684622 0.16137 -0.0113077 +-0.0742229 0.109724 0.0423296 +-0.0202504 0.182971 -0.0220384 +-0.091455 0.148836 0.0171378 +0.0152238 0.0793568 -0.0300519 +-0.000512 0.107246 0.0433248 +-0.0428418 0.0971034 -0.0220359 +-0.0514947 0.0819216 0.0442721 +-0.00625132 0.0383797 0.0174726 +0.0252504 0.0789879 -0.0247523 +-0.0833347 0.0898073 0.030438 +-0.0509182 0.146274 0.0133981 +0.0202304 0.105998 0.0417108 +0.0571307 0.0508797 0.0151878 +-0.0330104 0.126012 0.0180287 +-0.0217816 0.0797281 0.0555871 +-0.00743438 0.120242 -0.0134406 +-0.0148225 0.086924 -0.0385597 +-0.0375897 0.174214 -0.00298303 +-0.00244861 0.0605864 0.0553645 +-0.00874133 0.128614 -0.000328304 +-0.00579055 0.0798611 -0.0376463 +-0.0096155 0.119132 -0.0142361 +0.000497149 0.0534577 0.0541163 +-0.0928025 0.131035 0.0222365 +0.0372258 0.108268 -0.000834485 +-0.0914674 0.129551 0.00825277 +-0.00149557 0.0675596 0.0566557 +0.0154848 0.0548588 0.0485877 +0.0396568 0.0815034 -0.0117853 +0.0174985 0.119533 0.0343583 +-0.0108678 0.0975625 -0.0293851 +0.0264007 0.116693 0.0313169 +0.005469 0.0964333 0.0520715 +-0.0455856 0.128182 -0.00140207 +-0.0175003 0.0499225 0.0470061 +-0.075934 0.0788992 0.0351468 +-0.0067913 0.0812637 -0.0377236 +-0.0769778 0.155918 0.0162848 +-0.0797877 0.0746142 -0.00147983 +-0.0599651 0.0469723 0.0336736 +0.0382386 0.084194 -0.0147697 +-0.0816947 0.113482 0.0465399 +0.00634478 0.0524665 -0.0299091 +-0.0112874 0.182441 -0.0284978 +-0.026226 0.178551 -0.0179991 +-0.0739945 0.1802 -0.0521965 +0.0105211 0.104445 0.0448284 +0.0580719 0.0523893 0.015182 +-0.0525108 0.0819776 0.0447141 +0.0148643 0.0961115 -0.0237665 +-0.00147854 0.0474532 0.049375 +0.00669444 0.0340637 0.00205518 +-0.0753884 0.151441 -0.0109145 +0.0413586 0.0394374 0.00625535 +-0.0196125 0.0381064 0.0149924 +-0.00986994 0.104508 -0.0232523 +-0.0720157 0.145244 -0.0182167 +0.0416371 0.0669849 0.0284796 +0.0284741 0.0381475 -0.00163189 +0.0474976 0.06778 0.0262203 +0.0259166 0.0434925 0.0371741 +0.0464333 0.0455453 -0.00066213 +-0.00640927 0.120163 -0.0133583 +-0.0236376 0.0387148 -0.0157231 +-0.092269 0.124069 0.00827163 +0.0144954 0.119572 0.0352389 +-0.0702988 0.15533 -0.0489684 +-0.0882036 0.143298 0.0111345 +-0.074863 0.0795889 -0.0115995 +-0.0174424 0.10313 -0.0232301 +-0.0686182 0.0628687 0.0026871 +-0.0620712 0.16624 -0.0525885 +0.058207 0.0538058 0.0191798 +-0.0333511 0.0463754 -0.0256604 +-0.0855025 0.0832965 0.0214753 +-0.0920057 0.11611 0.0343124 +-0.0227771 0.124071 -0.00329832 +-0.0610006 0.129721 0.0398956 +-0.0404973 0.0492165 0.0395965 +-0.0481836 0.0335793 0.00422402 +-0.0654948 0.160255 -0.0145439 +0.00736856 0.0479637 -0.0273222 +-0.0123571 0.12972 0.0137799 +0.0579783 0.0551346 0.00616127 +-0.0164763 0.064491 0.0530345 +-0.0608155 0.0896295 -0.0193008 +-0.0205289 0.0958269 0.048234 +-0.086716 0.132512 0.0465811 +-0.052836 0.095613 -0.0220115 +0.0406946 0.0647331 -0.00578164 +0.0121697 0.0950562 -0.0266386 +-0.00950093 0.0925586 0.0561384 +-0.0157375 0.0671877 -0.037968 +-0.0269293 0.0376983 0.0192799 +0.033595 0.0660055 0.039722 +-0.0481741 0.135565 0.0182752 +-0.0224128 0.163867 -0.00803238 +0.00810708 0.101446 -0.0211916 +-0.0458977 0.166944 -0.00688513 +-0.0238738 0.105835 -0.0226784 +0.0272653 0.121002 0.0240179 +-0.0701585 0.0623473 0.0172092 +0.0578867 0.0607943 0.0238444 +0.0565638 0.0695327 0.00435815 +0.012216 0.0753282 0.0545969 +-0.0583609 0.0339112 0.0215144 +-0.0664905 0.0861274 0.0441111 +-0.0514869 0.0987554 0.0433116 +0.0210708 0.0349944 0.0242708 +-0.0102986 0.126308 0.029096 +-0.0638201 0.089594 -0.0189434 +-0.0782747 0.174383 -0.0433933 +-0.0311143 0.16374 -0.0152454 +-0.0915885 0.128321 0.0362439 +-0.0379874 0.0336299 0.0062497 +-0.0854294 0.151325 0.0282936 +0.0124994 0.0909598 0.0531045 +-0.0434452 0.120253 -0.0131867 +0.0229768 0.0754886 0.0490742 +-0.0334786 0.100129 0.0429194 +-0.0741118 0.0819105 0.0384161 +0.0373216 0.0901862 0.036514 +-0.0565657 0.11693 0.0374284 +0.00334719 0.0481602 -0.0292882 +-0.0324526 0.0336078 -0.0239554 +0.0083446 0.116042 -0.0170347 +-0.00977658 0.0387467 -0.00366788 +-0.0206679 0.0509474 -0.0298149 +-0.0242736 0.181474 -0.0180054 +0.0160525 0.0350115 0.0395034 +-0.0543014 0.146215 0.0264084 +-0.00102573 0.0346607 0.0434939 +-0.0611888 0.155469 0.00589931 +-0.0406241 0.0520111 -0.0110025 +-0.0705109 0.148356 0.0407257 +0.0495286 0.0610841 0.0304744 +-0.019145 0.0893155 0.0554734 +0.00268229 0.12726 -0.0050686 +-0.0743228 0.155495 -0.0229079 +0.021268 0.0762952 -0.0266753 +-0.0239356 0.0374925 -0.0183912 +0.0262803 0.0660857 -0.0226574 +-0.0164998 0.0856439 0.0570811 +-0.0857415 0.120359 0.048887 +-0.0344903 0.0505305 0.0383369 +0.00230798 0.0346028 0.0406387 +-0.0929029 0.129672 0.0252445 +-0.0654938 0.0604629 0.00727621 +0.044722 0.0833037 0.0012072 +-0.0230106 0.0580182 0.0433839 +-0.0105663 0.0350401 0.0482738 +0.0582293 0.0690671 0.00613614 +-0.0600127 0.131125 -0.00733582 +-0.0321751 0.162395 -0.00280539 +-0.0555013 0.0623754 0.0293782 +-0.0252415 0.109687 -0.0201254 +-0.0560506 0.150155 -0.00188433 +-0.0600649 0.129705 0.039485 +0.0338293 0.0767952 -0.0167877 +0.01215 0.0919974 -0.0294248 +-0.0346452 0.0340944 0.0173387 +-0.050492 0.149246 0.012837 +-0.0550682 0.150156 -0.00218973 +-0.00881167 0.085499 -0.0379404 +-0.0780101 0.11134 -0.00369811 +-0.0795926 0.100727 0.0334268 +-0.0423449 0.122373 -0.0114097 +0.0248097 0.124191 0.0159771 +-0.0174692 0.0529782 0.0491698 +-0.0889728 0.101008 0.0133925 +0.00851959 0.0730626 0.056014 +-0.026729 0.159626 -0.000161004 +0.0222613 0.0720727 -0.026869 +0.0396492 0.0970274 -0.00677557 +-0.0301141 0.166809 -0.00684471 +-0.00834781 0.129635 0.0224773 +-0.0198097 0.0813191 -0.0390949 +-0.0489315 0.137078 0.0173942 +-0.0161123 0.0985355 -0.0244159 +0.0331161 0.0795687 -0.0187107 +-0.0365028 0.0761422 0.0420368 +-0.0315196 0.0834471 -0.0305496 +-0.0366299 0.0534085 -0.0105028 +-0.0844928 0.0979861 -0.00258986 +-0.049695 0.0693575 -0.0143663 +-0.0795053 0.148405 0.0389114 +-0.0143105 0.0338147 -0.022462 +-0.036834 0.0382539 -0.0105119 +-0.0528967 0.0476266 0.0236645 +-0.0431625 0.0436516 -0.0173214 +0.0442909 0.0959534 0.0041727 +-0.0499053 0.141681 0.0133989 +-0.084567 0.0897523 0.028848 +-0.035736 0.0740102 -0.0187661 +-0.0624191 0.163107 -0.0445959 +0.0553692 0.0711293 0.0213817 +-0.0384984 0.0634699 0.041507 +-0.0420929 0.156178 -0.00917116 +-0.0641565 0.166823 -0.0341745 +-0.0623968 0.162983 -0.056654 +0.0276466 0.0659543 0.0434322 +0.0454314 0.088986 0.0031764 +-0.0749519 0.164602 -0.018207 +-0.0345505 0.175605 -0.011982 +0.0363374 0.104678 0.0298648 +-0.00375231 0.128091 -0.0038931 +-0.0305006 0.100206 0.0434038 +-0.00849625 0.0547108 0.0528122 +-0.0485842 0.0517801 -0.00897412 +-0.00451507 0.0519264 0.0531932 +-0.0815948 0.0748474 0.0175368 +0.0572159 0.0648465 0.024658 +-0.0403921 0.162356 0.00287494 +-0.0749222 0.126715 -0.00818803 +-0.047238 0.0346371 0.0407654 +-0.0621416 0.141343 -0.00629843 +-0.0251564 0.113713 -0.0163747 +-0.00855727 0.119157 -0.0142712 +-0.074494 0.126019 0.0529923 +-0.0205102 0.0461853 0.0521703 +-0.084864 0.0789836 0.0191297 +-0.0187649 0.125661 -0.000995534 +-0.0218427 0.0567021 0.0450804 +-0.0622179 0.153696 -0.0295936 +-0.0364968 0.0576627 0.0395237 +-0.0368019 0.127806 0.00485952 +-0.0770975 0.0967852 0.0367 +-0.000433486 0.0366062 0.0184413 +0.0131024 0.123925 -0.00754958 +-0.0177683 0.0383192 0.0242073 +-0.0655356 0.0398001 0.0300899 +-0.0778591 0.161105 -0.0269202 +-0.0341012 0.162237 -0.0142117 +-0.017501 0.0842912 0.0575736 +-0.0280973 0.16079 -0.0140776 +-0.0421185 0.122004 0.0266511 +-0.0142563 0.178628 -0.0276625 +-0.0440063 0.0629698 0.0401358 +0.0128613 0.0347903 0.0336338 +-0.0248532 0.0348299 0.0453939 +-0.00152849 0.105863 0.0439958 +-0.0346038 0.123422 0.0248791 +-0.0346304 0.079471 -0.0235463 +-0.0639625 0.126764 -0.00871214 +0.0364026 0.0547846 -0.00674979 +-0.0064883 0.123768 0.0340789 +-0.0470974 0.168427 -0.00297818 +-0.0575443 0.0401418 -0.00909914 +0.0257874 0.0895854 -0.0228249 +0.0183006 0.0383341 -0.0177245 +-0.0524963 0.0848256 0.0453696 +0.0561175 0.0494119 0.0111925 +-0.0588172 0.123244 -0.00816875 +-0.00922198 0.0384881 0.0221926 +-0.0331235 0.126633 0.00621772 +-0.0119418 0.120727 -0.011899 +-0.0607049 0.145387 0.0368926 +-0.0306093 0.125854 0.0144859 +-0.0356146 0.127659 0.0111781 +-0.0776104 0.0802915 -0.00928059 +-0.0702074 0.0394853 -0.000301673 +0.0434891 0.0583702 0.0316051 +-0.0789513 0.128091 -0.00607242 +-0.042519 0.0534194 0.039352 +-0.00449744 0.0939058 0.0556112 +-0.0094927 0.0619497 0.0558121 +-0.0694824 0.0944579 0.0422945 +-0.0771177 0.0879695 -0.0126012 +0.014854 0.103191 -0.021265 +-0.043284 0.169832 -0.00794427 +-0.00983007 0.124748 -0.00821099 +0.048512 0.0692789 0.0025489 +-0.0620323 0.0343503 0.0308946 +-0.074493 0.145596 0.0437863 +-0.0375024 0.104216 0.0394845 +-0.047499 0.0451812 0.0421654 +-0.0836103 0.0769236 0.0176347 +-0.0636092 0.170093 -0.0469941 +-0.0483594 0.137097 0.0143972 +-0.087232 0.102325 0.0223672 +-0.035507 0.104243 0.0399833 +-0.0577119 0.0708497 -0.0156457 +-0.00436115 0.122059 -0.0113929 +0.0024069 0.037633 -0.0245625 +0.00251114 0.0911189 0.0554408 +-0.0357211 0.0710689 -0.0174927 +0.0183807 0.0432425 -0.0223469 +-0.0688327 0.09803 -0.0157395 +-0.0747491 0.155081 0.00248708 +0.0451476 0.0833704 0.0221542 +-0.0657925 0.14111 0.0417765 +-0.0365871 0.119162 -0.0120374 +0.0101976 0.131045 0.010577 +-0.0249388 0.183594 -0.0126758 +0.0330579 0.0598189 -0.0157593 +-0.0212823 0.0391811 0.0388836 +0.0144144 0.0403325 -0.0225056 +-0.0304932 0.104292 0.0413193 +0.0224755 0.0947811 0.0470955 +-0.0694247 0.0337382 0.00515427 +-0.00249301 0.118317 0.039019 +0.0288984 0.0924492 -0.0198656 +0.033052 0.0440867 0.029429 +-0.0616004 0.15843 -0.0275855 +-0.0438223 0.0615675 0.0400039 +-0.0452867 0.0410146 -0.0162976 +0.0314256 0.0991914 -0.015062 +-0.0524965 0.0833785 0.044899 +-0.0298946 0.0436977 0.0506861 +-0.076428 0.148619 -0.00986569 +-0.0761803 0.0914451 0.0387697 +-0.0730299 0.172199 -0.0345665 +-0.0274981 0.0960112 0.0443229 +0.0045023 0.13009 0.02428 +-0.0302254 0.162455 -0.00347789 +-0.0871035 0.11231 0.0319974 +0.00225053 0.0726262 -0.0348847 +-0.0748173 0.152727 -0.0208966 +-0.0354946 0.118017 0.0312708 +0.0436028 0.0973418 0.0171655 +-0.0754981 0.13448 0.0513067 +0.0513136 0.0574694 -0.00408483 +-0.0228193 0.0854366 -0.0379031 +-0.057217 0.0336859 0.0130711 +-0.0749012 0.110639 -0.0076926 +-0.00874782 0.125791 -0.00734235 +0.0343242 0.100732 -0.0126444 +-0.0155312 0.126827 -0.00025822 +0.0145856 0.0341976 0.00165401 +-0.0175043 0.114096 0.0387143 +0.0552517 0.0720728 0.0198735 +0.0406726 0.0731516 -0.00877611 +-0.0268119 0.082528 -0.0368734 +-0.0262156 0.0519422 -0.0264212 +-0.0464977 0.041126 -0.0122454 +-0.0711885 0.173044 -0.0381946 +0.0492058 0.0511603 0.0287949 +-0.00188013 0.105918 -0.0222309 +-0.046455 0.126722 0.0256927 +-0.0142526 0.181479 -0.0279552 +-0.0655009 0.0903733 0.0443899 +-0.0037337 0.131051 0.015481 +-0.0308026 0.0367564 0.0517774 +0.0277802 0.121908 0.0142262 +-0.0344815 0.0575696 0.0386716 +-0.0844149 0.0777754 0.0115138 +0.0294342 0.0383781 -0.00173395 +-0.0423644 0.120691 0.0280931 +-0.0350646 0.156323 -0.010574 +-0.0619093 0.0470515 0.00567882 +-0.00290933 0.0388493 0.0285794 +-0.059258 0.0467212 -0.00132733 +0.00450339 0.123789 0.033846 +-0.0229547 0.12614 0.0172488 +0.0410852 0.0394499 0.00526393 +0.0049695 0.0340349 0.00359293 +-0.0513689 0.0516822 0.0322144 +-0.0606335 0.122654 0.0421622 +-0.0645986 0.15064 0.0368964 +-0.0632078 0.143892 -0.00837073 +-0.0386435 0.0563025 -0.0111331 +-0.0658025 0.083802 -0.0186684 +-0.062835 0.128322 0.0425151 +-0.0715276 0.14003 0.0472238 +0.056383 0.0538774 0.0233551 +-0.0610939 0.0335153 0.00346695 +-0.00051118 0.0978394 0.0524335 +-0.0418663 0.0340021 -0.00580283 +-0.042485 0.0762268 0.0429934 +-0.0512844 0.138511 0.0223666 +0.0367682 0.0888721 0.037463 +0.00724928 0.0711363 -0.0334334 +-0.0505534 0.0543594 0.017626 +0.00614025 0.110185 -0.0202335 +-0.00850551 0.0561268 0.0532043 +-0.0295938 0.0789709 0.0427962 +-0.0287487 0.0349103 0.0496611 +-0.0584012 0.154047 0.0286827 +-0.0127037 0.064273 -0.0367671 +-0.0288624 0.0606727 -0.0254104 +-0.0376712 0.125956 0.0207679 +-0.0612726 0.0708854 0.0380779 +-0.0637251 0.155028 0.0282356 +0.0531328 0.0476715 0.00620176 +-0.00308571 0.124589 0.0331408 +-0.0186888 0.0352267 -0.0190015 +0.001497 0.119685 0.0377723 +-0.032734 0.120436 -0.00935257 +-0.054542 0.0631354 -0.00767633 +0.052054 0.0718585 0.0216053 +-0.00556188 0.116801 -0.0157696 +-0.0504949 0.138575 0.0203939 +-0.00542543 0.120041 -0.0132322 +0.0310541 0.0727142 0.0413756 +-0.0558801 0.045112 0.0236807 +-0.0167974 0.0382847 0.0190235 +0.0256741 0.0809122 0.047736 +-0.0199636 0.0668339 0.051351 +-0.0491191 0.159098 -0.00622225 +-0.0506725 0.0667938 0.036819 +-0.0492762 0.143079 0.00435473 +-0.0216794 0.0538141 -0.0303252 +0.0305352 0.10973 -0.0102674 +-0.0225945 0.157229 -0.0076361 +-0.0530851 0.151641 -0.00314317 +-0.0271151 0.122681 0.0231414 +-0.0134994 0.0884096 0.056966 +-0.0266886 0.0335519 -0.0246454 +-0.008499 0.12243 0.035017 +-0.0393069 0.033537 -0.0233717 +-0.033807 0.0461583 0.044586 +-0.0198183 0.158714 -0.00970491 +-0.0835554 0.0925405 0.0305699 +-0.0340008 0.0766042 -0.0254969 +0.00352334 0.12519 0.0325857 +-0.0424905 0.0424327 0.0427417 +0.0232877 0.123385 0.0253956 +0.0230237 0.100791 0.0439995 +0.0307365 0.117405 0.0253192 +-0.0772723 0.114862 0.0500033 +-0.0264336 0.0535943 0.0384453 +0.0177456 0.0350628 0.0325863 +-0.0121375 0.102128 -0.024127 +-0.000203909 0.130048 0.0239772 +0.00795806 0.127195 -0.00506697 +-0.0252695 0.156633 -0.00336931 +0.0179609 0.1201 -0.00942839 +-0.0769756 0.068555 0.0156381 +-0.0871021 0.111516 0.0397664 +-0.0544907 0.101557 0.0424048 +-0.0572843 0.0589766 -0.000464382 +-0.07902 0.0751794 0.0271309 +0.0102371 0.115602 -0.0165593 +-0.0105893 0.180273 -0.0272114 +-0.0528115 0.0913061 -0.0221889 +-0.064755 0.068231 0.0343382 +-0.0137258 0.125368 -0.00476898 +-0.0635922 0.178326 -0.0570781 +-0.0239683 0.126504 0.0139537 +-0.0600264 0.132579 -0.00719549 +0.044826 0.0791184 -0.000782084 +-0.00541885 0.0969111 -0.0306599 +-0.0301034 0.0537602 -0.0193727 +0.0409333 0.0900371 -0.0097907 +0.024446 0.115337 -0.010308 +-0.0283175 0.0963396 -0.0241496 +0.0299711 0.119398 0.020753 +-0.0265916 0.172718 -0.0105089 +-0.0586682 0.128313 0.0397417 +-0.0818638 0.147313 0.00119815 +-0.0254305 0.0357675 -0.0290845 +-0.038039 0.126372 -0.00365101 +-0.00149717 0.0815096 0.0574492 +-0.00738223 0.0931774 -0.0348179 +0.0558223 0.0493444 0.0161931 +0.0577347 0.0705061 0.0074689 +-0.0778727 0.096767 0.0360596 +0.0144985 0.11402 0.0378951 +0.00389123 0.0355229 -0.0148126 +0.0242948 0.124607 0.0114976 +0.0565412 0.0674698 0.002463 +-0.0308889 0.108768 -0.0191524 +0.011955 0.0349898 0.0332703 +-0.0129143 0.104805 -0.023047 +-0.0938592 0.11877 0.0212975 +0.0106595 0.0357626 0.0286983 +-0.0652684 0.163853 -0.0591668 +-0.0359879 0.0421738 0.0454409 +-0.0685089 0.100042 0.0409867 +0.03476 0.113033 0.0239837 +-0.0346506 0.126197 -0.000232823 +-0.0386758 0.0462873 -0.0214583 +0.0257808 0.10679 -0.0151172 +-0.0618601 0.153758 -0.0185818 +0.03067 0.0917687 -0.019137 +0.0275533 0.0672844 0.0433037 +-0.0414978 0.0748079 0.0427759 +-0.0218204 0.0840783 -0.0384285 +0.037815 0.0630498 -0.0108066 +-0.0602789 0.0617061 0.0251086 +-0.0768171 0.154199 -0.00689913 +0.00550054 0.0990386 0.0482677 +-0.0391759 0.16667 -0.0123913 +-0.0616525 0.116813 -0.0113459 +-0.0227683 0.0699063 -0.0373697 +-0.0825008 0.107588 0.0273509 +0.0253381 0.0418727 -0.00588506 +-0.014565 0.035318 -0.01827 +-0.00278761 0.0390101 -0.00997081 +-0.0895837 0.137934 0.0361877 +-0.0855599 0.112052 0.0307632 +-0.027858 0.0343176 -0.0296609 +-0.0325025 0.0675467 0.0400218 +0.0183334 0.0348857 0.00364336 +-0.0469365 0.0404762 -0.0121149 +-0.0777262 0.0825344 -0.0106004 +-0.00467074 0.0569349 -0.0330586 +-0.0194597 0.165415 -0.0107679 +-0.0210403 0.122456 -0.00761783 +-0.0388087 0.0446425 -0.0234233 +-0.0696543 0.0614896 0.0127042 +0.0440466 0.0931306 0.0221521 +-0.0647046 0.0352193 0.0243246 +-0.0166096 0.0435748 -0.0274243 +0.0441838 0.0712847 0.000450163 +-0.0285281 0.0522637 0.0377683 +-0.0599387 0.147394 -0.00221747 +-0.0440942 0.156163 -0.00853601 +0.0388076 0.0807597 0.0350812 +-0.0141543 0.161827 -0.01362 +-0.0210631 0.0385773 -0.00578617 +-0.0237266 0.161004 -0.00287357 +-0.0863431 0.0896619 0.0263909 +-0.0829431 0.0790271 0.0235207 +0.0268259 0.0605622 0.0439609 +-0.0224026 0.0384511 0.0303351 +-0.0635581 0.170962 -0.0485923 +-0.0456965 0.147701 -0.00292724 +-0.0532705 0.0373829 0.0469289 +0.0231843 0.0658868 0.0457612 +-0.0887459 0.132238 0.00325707 +0.00920248 0.0914355 -0.0308607 +-0.0298874 0.063588 -0.0244234 +0.00157852 0.12719 -0.00497022 +-0.0814436 0.153873 0.00890807 +-0.0624959 0.0607929 0.0219134 +-0.0680579 0.149988 0.0386907 +0.0166077 0.128469 0.0186355 +0.00550411 0.0731036 0.0564845 +-0.00249995 0.0661849 0.0567093 +-0.0735022 0.155469 -0.0279133 +-0.0851803 0.0899483 -0.00256663 +0.0394434 0.0585828 -0.00486619 +-0.0739433 0.134018 -0.00754124 +-0.038066 0.156257 -0.0102365 +0.00335185 0.118611 -0.0157819 +-0.00660848 0.0420213 -0.0257519 +-0.0639921 0.0605727 0.020032 +0.0252819 0.100786 -0.0187149 +-0.0820788 0.0765181 0.0218286 +-0.0167051 0.0584876 -0.0351851 +-0.023274 0.106158 -0.0224283 +-0.0878269 0.087472 0.021463 +-0.0786369 0.113551 0.047197 +0.0360644 0.0861926 0.0381664 +-0.082909 0.123594 -0.00426589 +-0.029497 0.177966 -0.015166 +-0.0170948 0.127006 0.022289 +0.0524062 0.0491022 0.00128138 +-0.0198015 0.10169 -0.0238258 +-0.0221328 0.166772 -0.0183109 +-0.00252234 0.038424 0.00547409 +-0.0255028 0.0606627 0.0401195 +-0.0385432 0.0337417 -0.0196892 +-0.0644389 0.0627719 0.0250864 +-0.0879688 0.113092 0.00628888 +0.000951329 0.10045 0.046938 +0.0386471 0.086118 0.0348681 +-0.0374734 0.0346441 0.0411075 +0.0233517 0.120203 -0.00555174 +0.0462175 0.0761811 0.0179689 +-0.0376403 0.0336717 0.00266115 +-0.0341867 0.172054 -0.0145892 +-0.0623617 0.0420762 0.0420515 +-0.0114712 0.0379322 -0.0163227 +-0.0177227 0.119786 -0.0108098 +-0.0801398 0.154387 0.00935749 +0.00187492 0.0398874 0.0463369 +-0.0730243 0.159629 -0.0349322 +0.0473276 0.0547587 -0.00564531 +-0.0376789 0.0636715 -0.0137557 +-0.0727421 0.180568 -0.051639 +-0.0616232 0.148175 -0.003118 +-0.0248231 0.0839948 -0.0375331 +-0.0652787 0.173897 -0.0604957 +-0.0740506 0.152673 -0.0298916 +-0.0571547 0.150227 -0.00146353 +-0.0903203 0.146073 0.0131505 +-0.0779569 0.132491 -0.00592536 +-0.0290048 0.0550494 -0.0223991 +-0.00849727 0.0898107 0.0570624 +-0.0324948 0.112838 -0.0174448 +-0.0523188 0.0518 0.026645 +0.0302802 0.0506319 0.0365295 +-0.0838507 0.103422 -0.00164978 +-0.0788492 0.100759 0.0340965 +-0.0874564 0.141909 0.0385732 +-0.0155155 0.115507 0.0382335 +-0.0777311 0.0887218 0.0375819 +-0.0730146 0.15545 -0.0319082 +-0.0523124 0.0360662 0.0464431 +-0.06188 0.164622 -0.0566003 +0.0367263 0.0794489 0.0373046 +-0.0734863 0.173577 -0.0500848 +0.00600107 0.0390612 0.028408 +-0.0278792 0.0339265 -0.0214795 +-0.000753868 0.0390895 -0.00403098 +-0.0578284 0.0450681 -0.00544742 +-0.0829344 0.129921 0.0513858 +-0.0111161 0.125335 -0.00680126 +-0.0679477 0.0860672 0.0434473 +-0.0705079 0.105505 0.0376955 +-0.0109443 0.0389825 -0.0115729 +-0.0399106 0.033865 0.000215963 +0.00351496 0.0924905 0.0549546 +-0.0424851 0.033913 -0.0262188 +-0.0792564 0.155246 0.0213567 +-0.0215304 0.127346 0.0119061 +-0.091259 0.117481 0.0430647 +-0.0404902 0.0790417 0.0431478 +-0.0945826 0.122834 0.0222802 +-0.0518346 0.0517811 0.0306554 +-0.0767129 0.161805 -0.0163426 +-0.0867595 0.107707 0.0143554 +-0.0693236 0.142228 -0.0102995 +-0.0204959 0.105781 0.0424626 +0.0438044 0.0987496 0.00916312 +-0.00281997 0.0854457 -0.0370162 +-0.00280088 0.0840687 -0.037315 +0.0293196 0.0632732 0.0423131 +0.00625559 0.0725849 -0.0341185 +0.0203077 0.0621778 -0.0269805 +0.0563556 0.0723446 0.0173318 +-0.0230123 0.107366 -0.0218426 +-0.00742046 0.035877 -0.0249268 +0.0374488 0.0402522 0.0247009 +0.0292061 0.055224 -0.0177993 +-0.0184858 0.127732 0.0173962 +-0.0921542 0.132321 0.0142287 +-0.0583136 0.145422 -0.00203607 +-0.0688478 0.0994593 -0.0152611 +-0.0615047 0.167821 -0.0555677 +-0.0915903 0.125424 0.00726612 +0.0199591 0.0564127 0.0480725 +0.0378679 0.0713179 0.0353865 +-0.000605671 0.129033 0.0267429 +0.0298673 0.0740916 0.0431977 +0.00443138 0.126024 0.0314422 +0.0239815 0.12134 -0.00278507 +-0.0246606 0.0521655 -0.0277657 +0.0146913 0.0820798 0.0529703 +0.0259518 0.075434 0.0462884 +-0.0332069 0.0609523 -0.0145937 +-0.0191994 0.0907344 -0.0364225 +0.0589179 0.0607855 0.00414854 +0.0361999 0.103252 -0.0093129 +-0.0498767 0.0529199 0.0166388 +-0.0681894 0.0774836 0.0397476 +-0.021626 0.038176 0.00908889 +-0.0723232 0.163826 -0.0419605 +0.0104934 0.109851 0.0397458 +-0.0177283 0.0627822 -0.0360863 +-0.0628376 0.161493 -0.0485893 +0.00323101 0.120377 -0.0136716 +0.0551973 0.0674594 0.0252672 +-0.0349319 0.127285 0.00554823 +0.0194228 0.125079 0.025397 +-0.00805064 0.130356 0.00959263 +-0.0314936 0.097435 0.044487 +-0.0557138 0.0342594 0.0288064 +0.0212843 0.0490624 0.0410711 +-0.0898642 0.114175 0.0316644 +-0.0868422 0.134936 0.00226938 +-0.0758819 0.156006 0.016671 +-0.00997005 0.175779 -0.0292074 +-0.0603522 0.0407823 0.0443369 +0.0416146 0.0598915 -0.00407392 +0.0165523 0.0922417 -0.0256623 +-0.0245975 0.0365494 -0.0290831 +-0.0381375 0.160902 0.00087141 +-0.0719085 0.064649 0.0201308 +0.0144227 0.0477589 -0.0252693 +0.0603421 0.0650847 0.0181826 +-0.0146479 0.0481463 -0.0303376 +0.00721829 0.131495 0.00948452 +0.0394741 0.102755 0.0261825 +-0.0127182 0.0685587 -0.0376659 +0.0338414 0.0392101 0.0249005 +-0.0639127 0.160548 -0.0182872 +-0.0885745 0.0901142 0.00646846 +-0.0497297 0.0416675 0.0451167 +-0.0695102 0.148387 0.0405048 +0.0369413 0.0618853 0.0357448 +-0.0614969 0.0987359 0.0427353 +0.0264406 0.0434552 0.0361928 +0.0457541 0.0497206 0.0308161 +-0.0184963 0.0486167 0.0482304 +-0.086692 0.140502 0.00718566 +-0.0116045 0.0420472 -0.0262702 +-0.0708693 0.149702 0.0392474 +-0.061676 0.0343224 0.032737 +-0.00749303 0.115552 0.0402888 +0.0603302 0.0678632 0.0121432 +-0.070517 0.146976 0.0420031 +0.0360463 0.0953891 -0.0118379 +0.0368862 0.0601656 -0.0107732 +0.0239184 0.116674 0.0330029 +-0.0804601 0.148683 0.000173633 +-0.0604926 0.0344653 0.0380756 +-0.0152525 0.177145 -0.0265204 +-0.0773226 0.108517 -0.00660544 +-0.0176381 0.0465514 -0.0286775 +0.0313677 0.11674 -0.000181085 +-0.0465999 0.111104 -0.0175509 +-0.0408947 0.172668 -0.00780492 +0.0241275 0.120631 -0.00401437 +-0.055903 0.111216 -0.0172629 +-0.0781607 0.0935055 -0.0115755 +0.0158369 0.105055 -0.0192576 +-0.0130717 0.0973914 -0.0292103 +0.00114663 0.103071 -0.022297 +-0.0545436 0.0443717 -0.00770843 +0.0381644 0.0887078 -0.0138852 +-0.0638458 0.0366675 0.0422565 +-0.0245954 0.122675 -0.00581505 +-0.0199502 0.0553853 0.0474489 +-0.0454976 0.13168 0.014882 +-0.0808086 0.113339 -0.00208766 +-0.0658194 0.154782 -0.0493821 +-0.0138747 0.104484 -0.023001 +-0.0293428 0.112771 -0.0173776 +0.0139014 0.0962996 -0.0239693 +-0.0834257 0.145967 0.00318768 +-0.0299391 0.175699 -0.00474628 +-0.00851553 0.0759427 0.057359 +-0.0679104 0.122376 -0.00896749 +-0.0104955 0.0731168 0.0565579 +-0.0480021 0.126873 0.0289133 +-0.052022 0.0561083 0.0186673 +-0.0627916 0.150662 -0.00757045 +-0.0667057 0.14638 -0.0236565 +-0.0714698 0.161004 -0.0429413 +-0.0459114 0.0657109 0.0391289 +-0.0127989 0.0827406 -0.0389623 +0.0240686 0.0436305 0.0398361 +0.00979486 0.0360464 0.02827 +-0.0144862 0.0715775 0.0549247 +-0.0798641 0.145899 -0.00181913 +-0.0607177 0.0335659 0.00529637 +-0.0635063 0.156747 -0.0406118 +-0.0171212 0.0383927 0.000728518 +0.02686 0.0646091 0.0440244 +0.0291243 0.117712 -0.00241857 +0.0411571 0.0846831 0.0314273 +0.0246298 0.0347052 0.0125163 +0.0376787 0.105425 -0.00281358 +-0.0520342 0.116871 0.0334143 +-0.0526315 0.0335173 0.00157493 +0.0103692 0.116852 -0.0159048 +-0.0299989 0.178534 -0.0140055 +0.0199608 0.126186 0.00277612 +-0.0226771 0.0567339 -0.0313199 +-0.0693087 0.165593 -0.0188405 +0.0435095 0.0527832 0.0325495 +-0.0292487 0.115981 -0.0147474 +0.0390778 0.105565 0.0241719 +-0.0449049 0.167415 0.00301648 +-0.0575339 0.0493779 -0.000368538 +-0.0396388 0.0548721 -0.0111311 +0.0314293 0.102107 0.036834 +0.000480507 0.104429 0.0436509 +-0.0299338 0.0468967 -0.0261593 +-0.0712424 0.155684 0.00373917 +0.0197271 0.0808668 0.051456 +-0.0761145 0.157637 -0.00836344 +-0.0144941 0.122325 0.033097 +-0.0597928 0.095429 -0.0195264 +0.0309421 0.0646254 0.0411415 +-0.0275054 0.104339 0.0416271 +-0.000516741 0.108636 0.04302 +-0.0777092 0.07194 0.024923 +0.0102045 0.0795083 -0.0323062 +-0.0379505 0.150881 -0.00456722 +-0.013105 0.0382607 0.0125563 +-0.0182317 0.187056 -0.0182936 +-0.0182699 0.166848 -0.0125771 +-0.0264587 0.0902029 -0.033595 +-0.0668807 0.112599 0.0436137 +-0.0537473 0.076818 -0.0192258 +-0.0306082 0.165302 -0.00581873 +-0.0796939 0.0873057 0.0353613 +0.0347714 0.100763 0.034674 +-0.035752 0.0415598 -0.0291214 +0.0289767 0.117846 0.0275093 +-0.000706682 0.0655468 -0.0343894 +-0.0610628 0.138403 -0.00654794 +-0.0625935 0.12412 0.0446596 +-0.0648295 0.14966 -0.0309451 +-0.0234815 0.0974495 0.044821 +-0.026575 0.0476865 -0.0258778 +-0.0528683 0.0367334 -0.0118941 +-0.0116753 0.0526919 -0.0331734 +-0.0615062 0.158429 -0.0265894 +0.0320656 0.117538 0.0186978 +-0.00988755 0.103466 -0.0236142 +0.0484958 0.0691068 0.025078 +0.0156548 0.128965 0.0154331 +-0.0665046 0.10698 0.0385746 +-0.0267998 0.0522633 0.0388472 +-0.058755 0.0782067 -0.0192512 +0.0211493 0.0672779 0.0481082 +-0.0288355 0.125617 0.00924976 +-0.0124826 0.0701993 0.05486 +0.0522007 0.0476683 0.00324556 +-0.0443004 0.130334 0.00946299 +-0.00241533 0.0389975 -0.0136337 +-0.0437474 0.0783133 -0.0194351 +-0.0629007 0.115475 0.040648 +-0.0311605 0.169689 -0.016551 +-0.0263193 0.0386673 0.0347214 +0.0366921 0.0807912 0.0372758 +-0.0395001 0.100068 0.0413695 +-0.0681116 0.112409 0.0451263 +0.0386091 0.0686148 0.0346703 +-0.0759482 0.152671 -0.0129066 +0.0145806 0.0953173 0.0493246 +-0.0385004 0.150676 0.00203305 +-0.0935499 0.129634 0.0192397 +-0.0619642 0.126755 -0.00826981 +-0.0537213 0.0709084 -0.0154466 +-0.0314688 0.175764 -0.00340966 +-0.046761 0.126023 -0.00719597 +0.0128678 0.128966 0.0229731 +-0.0721444 0.145534 -0.0189034 +-0.014649 0.0384586 0.0247211 +-0.0782079 0.165287 -0.027954 +-0.0738874 0.0695898 0.0277412 +-0.0880483 0.145895 0.0319999 +-0.00950131 0.0870429 0.0572309 +-0.082872 0.154403 0.0201091 +-0.0574419 0.0424556 0.0216968 +0.0432211 0.097315 0.0201647 +0.0484167 0.0567471 0.0312254 +-0.0899902 0.146067 0.012148 +-0.0384869 0.0860997 0.0437907 +-0.0677801 0.0837503 -0.017964 +-0.0304968 0.071744 0.0399232 +-0.0267649 0.0754486 -0.0363172 +0.0555795 0.068697 0.0240751 +-0.00326172 0.0994383 0.0499516 +-0.0539364 0.153495 0.0157968 +-0.0264808 0.0509031 0.0429156 +0.0477223 0.0435274 0.0201079 +-0.027646 0.071755 0.0409574 +-0.025483 0.0988427 0.0444451 +0.00433576 0.055339 -0.0305463 +-0.0809392 0.0721012 0.0145438 +-0.0859359 0.0980836 0.000413824 +-0.0660122 0.153896 -0.0475582 +-0.0275574 0.156658 -0.00139783 +-0.0134137 0.0581871 0.0521911 +-0.0774938 0.134462 0.0515018 +0.0104958 0.0560929 0.0526786 +-0.00951583 0.0848597 -0.0382215 +-0.0298676 0.0916468 -0.0252289 +-0.0751451 0.15577 0.0110973 +-0.0887521 0.0969152 0.00742291 +-0.00642846 0.119149 -0.0142793 +-0.0351305 0.127632 0.00987733 +-0.079479 0.1087 0.0330138 +-0.00387451 0.0384228 0.00884205 +-0.0794858 0.0940336 0.0349322 +-0.0809833 0.080323 0.0311985 +-0.0874477 0.148578 0.0299355 +0.015852 0.106086 -0.0183494 +-0.0799154 0.12806 -0.00573177 +-0.0810332 0.092317 -0.00857663 +-0.0428426 0.0956907 -0.0224311 +-0.0843197 0.0830919 -0.00150258 +0.0270369 0.0347621 0.0147774 +-0.0114905 0.108632 0.0428314 +-0.0298836 0.04486 -0.0282273 +-0.0675863 0.0915604 0.0429945 +-0.0858462 0.0806083 0.01849 +-0.0377888 0.0855996 -0.0220857 +-0.080296 0.0886098 0.0345053 +-0.0631283 0.163827 -0.0595262 +-0.0200798 0.0653829 0.0501099 +0.0101376 0.104418 -0.0202461 +0.00311717 0.113125 -0.0199945 +0.00740202 0.0404296 -0.0235788 +-0.0233436 0.179984 -0.0199453 +-0.0849416 0.153745 0.0179582 +-0.00950506 0.0660833 0.0554985 +-0.0149561 0.0997734 -0.0237179 +-0.0625045 0.160053 -0.0215634 +0.0134925 0.114016 0.0379994 +-0.0484084 0.144974 0.000471547 +-0.0765927 0.0770726 0.0330453 +-0.0522524 0.0566167 0.0245415 +-0.0446531 0.0607308 -0.0127894 +-0.077361 0.0729429 -0.00456158 +-0.0164852 0.0870004 0.0567616 +0.00917846 0.101539 -0.0214106 +-0.0114976 0.0883765 0.0564607 +-0.0365032 0.109752 0.0369592 +-0.0622101 0.169551 -0.0614764 +0.0134275 0.117615 -0.0147491 +-0.0194201 0.1246 -0.00382324 +0.000402662 0.121936 0.0359399 +0.0308218 0.101142 -0.0151148 +0.044544 0.0748845 0.0238506 +-0.0190349 0.0930706 -0.0347914 +-0.0284257 0.15795 -0.0115973 +-0.0835152 0.150011 0.0330149 +-0.0723608 0.0363259 0.00395733 +0.049239 0.0437392 0.0164633 +-0.0281399 0.0917982 -0.0286003 +-0.0894337 0.132252 0.00424863 +-0.0478863 0.033513 -0.0102384 +-0.0480003 0.126688 -0.00585567 +-0.0147076 0.0933085 -0.0349989 +-0.0344513 0.172765 -0.000813008 +-0.012881 0.107288 -0.0218461 +-0.0494996 0.111168 0.0370596 +0.0195435 0.100771 0.0459866 +0.0383256 0.0387198 0.0189634 +-0.0490718 0.151664 -0.00461846 +-0.0413062 0.123313 -0.010402 +-0.0764561 0.106685 0.0353026 +-0.0506178 0.0590261 -0.0100428 +-0.0085531 0.0385596 0.00412906 +-0.0510743 0.153146 -0.0044532 +-0.0168415 0.122494 -0.0076608 +-0.0724396 0.129821 0.051541 +-0.0447123 0.0336927 -0.0153017 +-0.0128672 0.038589 0.0285719 +-0.0769694 0.136896 -0.00565009 +-0.0204809 0.0526524 0.0459576 +-0.0190093 0.100114 -0.02409 +0.0491876 0.0602673 -0.00438234 +2.68966e-05 0.0991578 -0.0250032 +-0.0146066 0.0355634 0.0504427 +0.0437747 0.084485 0.0264379 +-0.0613665 0.0430534 -0.00574325 +0.0102029 0.0779579 0.0551886 +-0.0584973 0.109766 0.0377913 +0.0405117 0.0657145 0.0303349 +0.0123622 0.0523525 -0.0283928 +-0.0865442 0.107736 0.017365 +-0.0273471 0.0735222 0.0429845 +-0.076628 0.169808 -0.0316679 +-0.00310182 0.130332 0.00278812 +0.0456485 0.0904179 0.0101632 +0.0367704 0.109675 0.000243105 +-0.0088954 0.108786 -0.0222808 +-0.0722528 0.156819 -0.0369077 +-0.0343294 0.175491 -0.0032043 +-0.0612579 0.167808 -0.0576007 +-0.0225051 0.10854 0.0408657 +-0.0396128 0.0492137 -0.0115104 +-0.0528856 0.104156 -0.0198053 +-0.0114785 0.0965129 0.0526113 +-0.0493499 0.141685 0.00939558 +-0.053326 0.162717 0.00204741 +0.0382413 0.108427 0.0210592 +0.0250594 0.122946 0.0231962 +0.0436593 0.058746 -0.00488132 +-0.052188 0.0559056 0.0136207 +-0.0337241 0.163848 -0.00328844 +-0.0671575 0.17049 -0.0366968 +-0.0780353 0.0880327 -0.0115615 +-0.00752216 0.122122 -0.0114318 +-0.0578223 0.12834 0.0392194 +-0.0624397 0.16285 -0.0548313 +-0.00720215 0.0344571 -0.0178933 +0.0219696 0.0347867 0.0191885 +0.0134971 0.112635 0.0387508 +-0.0188778 0.168283 -0.0134663 +0.0418633 0.0718502 -0.00680416 +0.00188261 0.129936 0.0247306 +-0.0143909 0.0388658 -0.0140202 +-0.0866821 0.0819953 0.0154888 +0.0511122 0.059915 -0.00400422 +-0.0637796 0.0419038 0.0392448 +-0.0334673 0.0532523 0.0375728 +-0.0640539 0.142491 0.0390245 +-0.0197273 0.118003 -0.0129221 +-0.0739294 0.0686501 -0.000515794 +0.022253 0.0430673 -0.0137151 +0.0169102 0.120624 0.0334304 +-0.0533452 0.118341 0.0350731 +-0.0407313 0.0710722 -0.0172567 +-0.0444934 0.108473 0.0392485 +-0.0406946 0.0340162 0.0268873 +-0.0428689 0.104235 -0.0209095 +0.000289503 0.0391337 -0.00386275 +0.0202669 0.0819781 -0.0271085 +0.0339966 0.0363512 0.0147468 +-0.0623699 0.0366895 0.0436353 +0.0112859 0.0638878 -0.0308862 +0.044262 0.0945325 0.00218274 +0.0178069 0.0349979 -0.00592782 +0.00766772 0.130773 0.00395877 +-0.0518373 0.0337424 -0.0112411 +0.05138 0.0464792 0.0212617 +-0.054495 0.0932121 0.0445367 +0.0154864 0.0380581 -0.0207587 +0.0322412 0.0368006 0.00286913 +0.0226382 0.0714084 0.0485432 +-0.0474967 0.0761987 0.0428659 +-0.0433556 0.0337438 -0.00770024 +-0.0507933 0.0869468 -0.0215939 +-0.0428743 0.166323 -0.00997516 +0.0420989 0.0930078 0.0271705 +-0.0133438 0.11201 -0.0186315 +-0.0682581 0.156305 0.0164417 +-0.0709159 0.125294 -0.00875352 +-0.0758095 0.0920857 -0.0139153 +0.00691185 0.038861 0.0287775 +-0.0755745 0.0702081 -0.000465226 +0.0560342 0.0622175 0.0264602 +0.00750328 0.0532576 0.0522142 +-0.0557017 0.0693735 -0.0143448 +-0.0400399 0.0367774 -0.0284153 +0.0452718 0.0917995 0.0131601 +0.0113635 0.0534706 0.0514016 +-0.056641 0.0429978 -0.00777539 +-0.0163006 0.182966 -0.0260091 +-0.0724038 0.116078 0.0519992 +-0.0223961 0.161302 -0.0143028 +-0.016322 0.128515 0.00945034 +-0.0761998 0.14998 -0.0148766 +-0.084898 0.11701 -0.000772283 +0.0215009 0.111167 0.037529 +-0.0116746 0.164119 -0.0176003 +-0.0386977 0.0666031 -0.0147476 +-0.0475127 0.0411749 0.0444313 +-0.0741496 0.147181 -0.0158602 +0.0423699 0.0412112 0.0211935 +-0.0112343 0.126014 -0.00554296 +-0.0627796 0.16313 -0.0285907 +0.0598501 0.0664357 0.0191799 +0.0444747 0.0438727 0.000520461 +-0.0449903 0.16693 -0.00785376 +-0.0241862 0.125789 0.00366503 +0.0303543 0.0942493 0.0422823 +0.0385368 0.0800568 -0.0127167 +-0.0329258 0.120263 0.0285346 +-0.0277494 0.0764615 0.044728 +0.0072822 0.0344718 -0.00192729 +0.0164745 0.103092 0.0456772 +-0.000370674 0.0391495 0.0306363 +-0.0444932 0.109842 0.0382343 +-0.0228558 0.113062 -0.0177116 +-0.0323055 0.0384897 -0.00796454 +0.0330143 0.106332 -0.0106209 +-0.0905664 0.150208 0.0151282 +-0.0473203 0.122487 0.0279328 +-0.079976 0.076532 0.0275303 +-0.0185178 0.0383092 0.00415679 +-0.0400541 0.128036 0.0139949 +-0.0725037 0.079155 0.0383043 +-0.00705924 0.127865 -0.00358478 +-0.0474808 0.0518309 0.037336 +0.0281857 0.0888902 0.0443935 +-0.0325014 0.102916 0.0416129 +-0.0636379 0.131123 0.0413473 +-0.0194422 0.0952996 -0.0310527 +0.0343622 0.0673468 0.0390872 +0.00248248 0.0385592 0.0461627 +-0.0207428 0.0656176 -0.0364653 +-0.0354216 0.17545 -0.00362892 +-0.0186888 0.127303 0.00423263 +-0.0697675 0.129835 0.0501143 +-0.0645483 0.168715 -0.0400434 +0.0176026 0.0520233 0.0463575 +-0.0165066 0.11684 0.0369313 +-0.0539292 0.0475998 -0.00643542 +0.0206619 0.125677 0.022985 +0.0131 0.034428 -0.00821794 +-0.0884031 0.101017 0.0203758 +-0.089294 0.136502 0.0252035 +-0.0633961 0.0610267 0.0215327 +-0.0181382 0.0625693 0.0510808 +-0.0363013 0.0408102 0.0457892 +-0.0348891 0.0341588 0.0262022 +0.0321818 0.0994934 0.0379171 +-0.0650996 0.115729 0.046366 +-0.0446047 0.0505366 -0.0105481 +-0.0170833 0.0896859 -0.0373218 +-0.0135156 0.162506 -0.0153049 +-0.0264962 0.119343 0.030427 +0.053783 0.0561466 -0.00178141 +-0.0659739 0.131145 -0.00872206 +-0.022585 0.185119 -0.0131839 +-0.0902473 0.132271 0.00623314 +-0.0343818 0.038354 -0.0138166 +-0.087117 0.119846 -0.000719646 +-0.0514997 0.047729 0.0396118 +-0.0837154 0.0804764 0.0234959 +0.0452487 0.0681916 0.00167659 +0.0443433 0.0762807 -0.00178421 +0.0393871 0.0828883 -0.0127786 +0.0133395 0.0475307 0.0453837 +0.0393635 0.0445531 -0.00413158 +0.0464068 0.0778555 0.00918735 +0.0498828 0.0474685 0.000307011 +-0.0205115 0.114066 0.0379617 +-0.0795322 0.0826724 -0.00859002 +0.0277802 0.0692504 -0.0226951 +-0.0640511 0.139618 0.0390194 +-0.0622733 0.144309 -0.00616114 +-0.0598164 0.122657 0.0415831 +-0.039222 0.0363262 0.0107899 +-0.0476756 0.0694312 -0.0151035 +-0.0114975 0.12239 0.0342495 +-0.0759886 0.0701373 0.025079 +0.0247695 0.1047 0.0394768 +-0.0424955 0.0464529 0.0406301 +-0.0209812 0.0389557 0.0535988 +-0.0434801 0.0917165 0.0428888 +-0.0936604 0.128255 0.0172452 +-0.0319662 0.163855 -0.00423083 +-0.0864626 0.107749 0.0163884 +0.00261599 0.0960798 -0.0297441 +0.0192696 0.124452 -0.00213625 +-0.0635019 0.0945759 0.0438874 +-0.0434804 0.108484 0.0391565 +-0.0767016 0.15969 -0.0259195 +-0.0207953 0.0784993 -0.0390618 +-0.0168597 0.0382017 0.0136589 +-0.0128908 0.129601 0.0150315 +-0.063562 0.136724 0.0379539 +-0.0592557 0.146819 0.0355066 +-0.0102821 0.0421361 0.0498123 +0.00411674 0.108725 -0.0201726 +-0.0471696 0.16597 0.00363215 +-0.0324882 0.0560654 0.0375153 +0.016314 0.061771 0.0498607 +-0.0633808 0.154539 0.0298218 +0.0319993 0.108737 0.0323781 +0.0224822 0.0578106 0.0464363 +-0.0731478 0.0644323 0.00940567 +-0.0136846 0.0555659 -0.0339274 +-0.0485565 0.0335372 0.00238031 +-0.0485794 0.128753 -0.00187037 +-0.0761205 0.0927947 0.038671 +-0.00890397 0.114438 -0.0172305 +-0.0881957 0.146062 0.0092207 +-0.067835 0.0951999 -0.016639 +-0.0826594 0.0993103 0.0308836 +0.0194806 0.107063 0.040905 +-0.0755472 0.15139 -0.00989046 +-0.0619095 0.118087 -0.0102757 +-0.0770237 0.0716688 -0.00146855 +-0.0090472 0.129209 0.0236827 +0.0166896 0.0645037 0.050425 +-0.044493 0.0860963 0.0437549 +-0.0851043 0.10321 0.0261425 +-0.0929793 0.125561 0.0282631 +-0.0792446 0.0699823 0.0139682 +-0.0541984 0.150844 0.02639 +-0.0544369 0.147753 0.0264091 +0.029273 0.103313 -0.0154093 +-0.0661878 0.156038 -0.00610123 +0.0513324 0.0613858 -0.00348738 +-0.00765334 0.0905691 -0.0361471 +-0.0036313 0.046681 -0.0294588 +-0.0793953 0.154018 0.0066962 +0.0126509 0.103032 -0.0211055 +-0.0534982 0.0344579 0.0343548 +0.0254331 0.0400654 -0.00462996 +-0.0474929 0.163748 0.00542805 +-0.0174765 0.0514437 0.047967 +-0.023601 0.0379574 -0.0288347 +0.0380126 0.0687088 -0.0127776 +0.0454875 0.0624627 0.0298224 +-0.0929393 0.122846 0.0403052 +-0.0619477 0.0629617 0.0272004 +-0.0632548 0.171035 -0.0614506 +-0.062927 0.150005 -0.0233391 +-0.0539078 0.109837 -0.0181931 +-0.0143481 0.129147 0.0116153 +-0.00460956 0.130321 0.00366937 +0.00735598 0.0509889 -0.0291303 +-0.0480744 0.151666 -0.00489643 +-0.0220459 0.166878 -0.0109827 +-0.0178225 0.0869056 -0.0385387 +0.000268234 0.0669357 -0.034172 +-0.0454819 0.0861255 0.0441555 +-0.0606958 0.0340151 0.0191666 +0.0293305 0.049536 -0.0137505 +-0.0661283 0.153073 -0.0457545 +0.0127964 0.0685744 0.0536204 +-0.0806268 0.150792 0.0343829 +0.0338754 0.0626989 -0.015804 +-0.0415032 0.116675 0.0325492 +-0.00995367 0.16681 -0.0217203 +0.059153 0.0704954 0.0131546 +-0.084323 0.0804069 0.00350409 +-0.0217865 0.0742531 -0.0388026 +0.0333307 0.040756 0.0270424 +-0.00920453 0.175559 -0.0287981 +-0.0565093 0.148178 0.0306333 +-0.0476849 0.146264 0.00805502 +-0.0896679 0.144435 0.0294634 +0.028326 0.0882981 -0.0214817 +-0.0129215 0.129318 0.0179306 +-0.0275354 0.0822426 0.0485604 +-0.0727818 0.154043 -0.034905 +0.0264706 0.0430524 -0.00597567 +-0.0461097 0.129234 0.00159921 +0.00227538 0.0668963 -0.0335609 +-0.0869081 0.0847086 0.0134765 +-0.071509 0.105494 0.0375699 +-0.0564975 0.105681 0.0408231 +-0.0709683 0.136976 -0.00769814 +-0.0238604 0.0347884 0.0456435 +-0.0248096 0.123255 -0.00440954 +-0.0504992 0.0917781 0.0442368 +-0.0672114 0.120049 0.0520179 +-0.067142 0.163768 -0.057034 +-0.0628433 0.16149 -0.0495873 +-0.0851762 0.106326 0.0223754 +0.0111461 0.101633 -0.021979 +0.0319374 0.0568888 -0.0147656 +0.0282794 0.120663 0.00443205 +-0.0912918 0.116401 0.0420373 +-0.00467238 0.0555139 -0.0327809 +-0.0267099 0.0794912 0.0492298 +-0.0226371 0.0622591 0.0442913 +0.0496058 0.0730794 0.0103455 +0.0134712 0.0347114 0.0266012 +-0.027103 0.0633188 -0.0304321 +-0.00446177 0.12682 -0.00651375 +-0.0184963 0.10441 0.0431068 +0.0322846 0.110983 -0.00760517 +0.043549 0.0987325 0.00516762 +-0.0442869 0.166804 -0.00853834 +0.0150912 0.0940152 0.0500689 +-0.07081 0.110507 0.0424798 +-0.0141183 0.115602 -0.0164489 +-0.0567507 0.13816 0.0319811 +-0.0047515 0.0726952 -0.0359954 +-0.0647331 0.0606321 0.00547671 +0.0292295 0.102131 0.038919 +-0.0328692 0.104316 -0.0215625 +-0.0105189 0.165484 -0.0170149 +-0.062488 0.161561 -0.0255895 +-0.083006 0.110313 0.0398706 +0.00202549 0.0390793 -0.0109499 +0.0598509 0.0692231 0.0121425 +-0.0486599 0.0649886 -0.0131055 +0.0193632 0.0475344 -0.0219845 +-0.0505005 0.109789 0.0379415 +0.0227584 0.0942129 0.0471436 +-0.054587 0.123231 -0.00812744 +0.0595925 0.0636093 0.00613697 +-0.0304354 0.159526 0.00145329 +-0.0771836 0.152278 0.0340017 +-0.0641378 0.146153 -0.0169913 +-0.012496 0.0828987 0.0575341 +-0.062259 0.0636125 0.0283336 +-0.0543842 0.064934 0.034129 +-0.0580097 0.136726 0.0336791 +0.0431148 0.0723568 0.0271232 +-0.0719688 0.147362 0.0419058 +0.0324265 0.0414912 -0.00365574 +-0.0504972 0.083371 0.044762 +-0.0277551 0.121254 0.0258902 +0.0248126 0.0672364 0.0446067 +-0.0748658 0.148574 -0.0178655 +0.0199833 0.0422265 0.0426566 +0.00936651 0.0494737 -0.0282538 +-0.0209427 0.127053 0.0165011 +0.014824 0.0950266 -0.0246047 +0.0416966 0.0899224 0.0287651 +-0.0417723 0.0826397 -0.0208385 +-0.0228105 0.123961 0.023212 +-0.0701997 0.155611 0.00411308 +-0.0246949 0.0550734 -0.0288078 +-0.0220519 0.163768 -0.0162501 +-0.0324478 0.069454 -0.0224572 +-0.0827552 0.07629 0.0125227 +-0.0606527 0.151084 0.0352378 +-0.0798891 0.0706304 0.0135503 +0.0476495 0.073201 0.00955169 +-0.00859398 0.0391639 -0.0259828 +0.0142802 0.0873929 0.0523851 +-0.00841973 0.128157 0.0268439 +-0.0665531 0.160013 -0.0120422 +-0.029443 0.0834063 0.0447309 +-0.0564979 0.0776594 0.043476 +-0.0483279 0.119696 0.0300033 +0.0232683 0.0857035 -0.0248261 +0.0321971 0.112814 -0.0055615 +0.0190831 0.0713469 0.0504539 +-0.054494 0.0465534 0.0422647 +-0.0121699 0.165481 -0.0142428 +0.000511137 0.0814953 0.0573473 +-0.0115028 0.0730832 0.0562182 +-0.0401042 0.037954 0.0427598 +-0.0114161 0.0382303 0.016554 +0.0328182 0.0967204 -0.0144274 +-0.00449908 0.0732747 0.0586205 +0.00733671 0.115147 -0.0180672 +-0.0476206 0.111206 -0.0176722 +-0.0624082 0.147544 -0.00957064 +-0.0615795 0.156866 -0.0245858 +0.0175138 0.12671 0.0232635 +-0.0697118 0.0764164 -0.0147262 +-0.0543713 0.158326 -0.00178875 +0.00713327 0.105885 -0.0207766 +-0.033517 0.115303 0.0329858 +-0.0114926 0.0897634 0.0564161 +-0.0375058 0.171208 0.000818011 +0.00542741 0.0336773 0.0131964 +0.0379386 0.07401 0.0354837 +-0.0860277 0.0967286 0.000430639 +-0.0311614 0.0791685 -0.0325602 +-0.0541101 0.0531993 -0.0053725 +-0.0592659 0.0599215 0.0215991 +0.0586637 0.0709935 0.0122726 +-0.0792595 0.0894709 -0.0095871 +-0.026159 0.0918036 0.0468933 +-0.0249745 0.12528 0.0180213 +-0.0519836 0.0517496 0.0236325 +-0.0275449 0.178709 -0.00674077 +-0.0715237 0.165101 -0.0167379 +0.0256965 0.123446 0.00917645 +0.0235224 0.0727618 0.0480692 +-0.0144773 0.0603048 0.0528052 +0.0408807 0.0948081 -0.00628698 +-0.0515819 0.0344024 0.0295565 +0.0311435 0.0885162 -0.0196004 +-0.087234 0.0981695 0.00341761 +-0.0165631 0.165424 -0.0118502 +-0.0497796 0.0518319 0.0348836 +0.0296893 0.110128 -0.0107004 +-0.0212542 0.126244 0.0193308 +-0.0315215 0.0732244 0.0404306 +0.0265706 0.0535806 -0.0207269 +-0.0944184 0.12146 0.0172829 +-0.0780287 0.14129 -0.00491664 +-0.0653187 0.152492 0.0351215 +0.0369332 0.102635 -0.00864905 +-0.0100919 0.126182 -0.00573829 +-0.0589643 0.15508 0.0013052 +-0.00782857 0.0386419 0.00238313 +-0.0893654 0.145802 0.0291185 +-0.077209 0.110378 0.0446936 +-0.0127752 0.0770687 -0.0383028 +-0.060466 0.143311 -0.00379205 +-0.0907002 0.137837 0.017198 +-0.0553853 0.15628 0.0108911 +-0.0609254 0.0454597 -0.00231147 +0.041351 0.0574751 -0.0052144 +-0.0111235 0.0346639 0.0467191 +-0.0520649 0.148658 -0.00262972 +-0.0438434 0.0985095 -0.0215595 +-0.0678163 0.0866062 -0.0177767 +0.0287562 0.053781 -0.0187512 +0.0338991 0.057119 -0.0127141 +-0.0189243 0.181629 -0.0169471 +-0.0888863 0.113493 0.0234001 +-0.0456524 0.0621788 -0.0131898 +-0.0205797 0.0906821 0.0540574 +-0.0285047 0.059221 -0.0254142 +-0.0310985 0.154152 -0.00673494 +0.0362687 0.0941823 0.0368117 +0.0223945 0.0860763 -0.025219 +0.0228611 0.0741302 0.0488936 +-0.0274872 0.094655 0.0450969 +-0.0238248 0.0826344 -0.0380614 +-0.044527 0.0601701 0.0393419 +0.0160126 0.0658829 0.0512178 +-0.0663487 0.06206 0.00207137 +0.000401309 0.0390966 -0.0249339 +-0.027107 0.082291 0.0495314 +-0.0617626 0.0415173 0.0247032 +-0.093011 0.118839 0.0352993 +-0.0662787 0.168684 -0.0320741 +-0.000498287 0.0535066 0.0547347 +0.0431795 0.0737197 0.0272167 +-0.0565118 0.0454033 -0.00602573 +-0.0668006 0.086643 -0.0182518 +-0.0652487 0.163342 -0.0202167 +0.0392901 0.0766734 0.0339466 +-0.0619246 0.106845 -0.0166571 +-0.0611633 0.0334354 -0.00188959 +-0.0722746 0.15542 -0.0369062 +-0.0690618 0.110676 0.0409548 +0.0432493 0.100107 0.00716752 +0.0317499 0.0535218 0.0369319 +-0.0492036 0.131059 0.0288275 +-0.0693592 0.176521 -0.047588 +-0.0072207 0.0356289 0.0484876 +-0.0818563 0.150046 0.00220642 +-0.0435006 0.0534118 0.0391466 +-0.0714969 0.156283 0.0152923 +-0.0883581 0.0875191 0.0194553 +-0.0774993 0.127442 0.0532862 +0.0288434 0.0591735 0.0415864 +-0.053835 0.0329874 0.0179508 +-0.0855039 0.140637 0.0423198 +-0.0597327 0.156046 0.0093301 +-0.052462 0.0642313 0.0336351 +0.000500084 0.12107 0.0367737 +-0.0692573 0.169753 -0.0288779 +-0.0156709 0.0385345 -0.00280448 +-0.00949582 0.118295 0.0381649 +0.0330035 0.116489 0.00476188 +0.0153369 0.0552331 -0.0286287 +-0.0105333 0.0457993 0.0483516 +0.00652975 0.0380351 0.0455331 +-0.0714995 0.101334 0.0391804 +0.0236022 0.115739 -0.0107408 +-0.0580129 0.118724 -0.0113962 +-0.0543247 0.0500125 0.0112758 +0.0587422 0.0635506 0.00411936 +-0.0589036 0.112559 -0.0155981 +-0.0640258 0.15968 -0.0562568 +-0.00990982 0.175697 -0.0247542 +0.00695815 0.0340953 -0.0204902 +-0.0591465 0.152697 -5.16463e-05 +-0.00975768 0.167025 -0.0223761 +-0.0383481 0.0417109 -0.0273458 +0.0463963 0.0778578 0.0141787 +-0.0720541 0.0777606 0.0379027 +0.0259403 0.1091 -0.0135959 +-0.0758056 0.0891863 -0.013912 +0.0429603 0.0873797 -0.00580114 +-0.0676348 0.0704852 -0.0103532 +-0.066267 0.176761 -0.0601056 +-0.013866 0.129156 0.0103484 +-0.067642 0.150503 -0.040589 +-0.0180327 0.0404537 0.0526147 +0.0183116 0.0636834 -0.0282837 +-0.078386 0.154762 0.00850622 +0.030569 0.0491561 0.035175 +-0.0622212 0.169401 -0.0515858 +-0.0565139 0.0548538 0.00566103 +0.00623573 0.0382417 0.0273828 +-0.038479 0.0945169 0.0431902 +-0.00987706 0.108745 -0.0220853 +-0.0621803 0.161575 -0.027587 +-0.0176337 0.125847 -0.00119502 +0.0328914 0.0578172 0.038629 +-0.0414935 0.0776367 0.0431734 +0.0432388 0.0804742 0.027354 +-0.0137772 0.0770735 -0.0384143 +0.0572117 0.0509068 0.011186 +-0.0689532 0.132595 -0.00851473 +-0.0655849 0.0622273 0.00026904 +-0.0535585 0.062801 0.0308747 +-0.0779359 0.154614 0.00720975 +0.00448513 0.0964789 0.0523472 +-0.060329 0.11723 -0.0118118 +0.029915 0.0430998 0.0305942 +-0.0275027 0.115261 0.0337596 +-0.0635137 0.0412627 -0.00639269 +-0.0164929 0.11134 0.0406952 +0.0292409 0.0951488 -0.0187111 +0.0324104 0.0430965 -0.00468251 +0.0317605 0.08491 0.0425067 +0.0289099 0.0929198 0.0437028 +-0.0707001 0.15817 -0.0449161 +0.0551137 0.0732038 0.0153863 +-0.0823243 0.154364 0.0217732 +-0.0715111 0.145604 0.0434169 +-0.0325077 0.0632413 0.0389915 +-0.0696524 0.0680017 0.0300044 +0.0102276 0.0809104 -0.0321098 +-0.0244999 0.049902 0.0466266 +-0.0554111 0.0574706 -0.0044262 +-0.0628667 0.101101 -0.0182166 +-0.00650089 0.0661332 0.0560881 +-0.0330903 0.15925 -0.0128209 +0.042117 0.0792074 0.0292753 +-0.085793 0.0818712 0.00648437 +-0.0594817 0.0426754 0.0236965 +-0.0539359 0.0541543 0.0107637 +-0.00998113 0.12997 0.0175362 +-0.0633398 0.0410523 0.0148679 +0.0595186 0.0696512 0.0111197 +-0.0628106 0.0420167 0.0410925 +-0.0280399 0.038261 0.000453129 +-0.0314842 0.0386701 -0.0153847 +-0.0183396 0.183004 -0.0240946 +-0.0414917 0.0662628 0.0414077 +-0.0512875 0.0335238 -0.00177633 +-0.009723 0.0684621 -0.0362531 +-0.0736747 0.166615 -0.0419946 +-0.0678387 0.0966346 -0.0163917 +-0.0609822 0.170956 -0.0597011 +-0.0778143 0.0696403 0.00741827 +-0.00249339 0.0619776 0.0560364 +-0.0574944 0.0732758 0.0411576 +0.0174045 0.0834609 0.0516215 +0.0222999 0.0360441 0.0108303 +-0.0134047 0.0981882 0.0494032 +-0.0437579 0.0335748 -0.0150071 +0.0210813 0.123852 -0.00148905 +-0.0530498 0.14867 -0.00246875 +-0.00549096 0.105886 0.0440438 +0.0181231 0.0349865 -0.00397885 +0.011218 0.0822648 -0.0313395 +-0.0785671 0.172906 -0.0416992 +-0.0304948 0.094646 0.0448519 +-0.0315011 0.101567 0.0426346 +-0.0867319 0.116264 0.0471164 +-0.0745642 0.0928269 0.03994 +-0.0287411 0.0366033 0.0533099 +-0.0733382 0.158682 -0.00576511 +-0.011641 0.172783 -0.0205328 +-0.0261276 0.166758 -0.01752 +0.0323797 0.117481 0.0145242 +-0.073083 0.166616 -0.0429976 +0.00318323 0.0894801 -0.0335291 +-0.0592544 0.0696245 0.0378273 +0.00902499 0.0346466 0.0239397 +-0.0614627 0.0334736 0.00162861 +-0.081048 0.154699 0.0221975 +-0.0337735 0.0765809 -0.0265027 +-0.0440788 0.0336672 -0.00594116 +-0.0501186 0.0375352 0.0462556 +0.0383972 0.0931984 -0.0106151 +-0.0507798 0.0488052 0.0196439 +0.0480167 0.0525694 0.0306027 +-0.0715181 0.0657302 0.000515199 +-0.0584278 0.0383351 -0.00941724 +-0.0484961 0.0987927 0.0435149 +-0.00449408 0.088412 0.0569078 +0.00197552 0.0378956 -0.000532016 +-0.0538466 0.0665391 0.0363755 +-0.0736039 0.148578 -0.0278556 +-0.0406505 0.117474 -0.0142631 +-0.0354963 0.0690808 0.0415601 +-0.063566 0.148289 0.0378536 +0.0187266 0.0350257 0.0273865 +0.00460237 0.0388981 -0.00652166 +-0.0775459 0.0688051 0.0117853 +-0.0880987 0.13916 0.0101984 +-0.0871517 0.106348 0.0123653 +-0.0867616 0.0833332 0.0134846 +-0.053009 0.0343093 0.0275811 +-0.0793348 0.0980896 0.0346601 +-0.0751339 0.0669087 0.0157231 +0.0158163 0.0344928 -0.00398192 +-0.0754309 0.0981509 0.0378194 +-0.0695415 0.15615 0.0130838 +0.00196735 0.0370051 -0.0146847 +-0.0711264 0.142566 -0.0097279 +-0.0202009 0.17418 -0.0222934 +-0.0315791 0.125791 0.0170798 +-0.0460989 0.157633 -0.00826241 +-0.0164967 0.0701922 0.0547571 +0.0456793 0.0890097 0.00617442 +-0.0263303 0.0336202 -0.0227625 +0.0458885 0.0778077 0.00419775 +-0.0613708 0.044683 0.0409908 +0.00384566 0.0341227 -0.0209701 +-0.0771455 0.156966 -0.0119003 +0.0355806 0.113279 0.0157103 +-0.036902 0.0362143 0.0131672 +-0.0532397 0.146242 0.0224016 +-0.0474989 0.107059 0.0399589 +-0.0857477 0.109049 0.020349 +-0.0892569 0.122633 0.00330914 +0.054626 0.0562289 -0.00078591 +-0.0161012 0.16832 -0.0147108 +-0.0788763 0.0949177 -0.010577 +0.026592 0.0578126 -0.0217526 +-0.061825 0.164563 -0.0576805 +-0.0210306 0.180146 -0.0147237 +-0.0474984 0.0833402 0.0443799 +-0.0884317 0.131079 0.0440854 +-0.0591643 0.0341749 0.0263998 +0.0381002 0.078079 0.0357853 +-0.0515897 0.146262 0.0154112 +0.0121111 0.116449 0.0370148 +-0.0414388 0.033531 0.00382893 +-0.0200653 0.172726 -0.0151523 +-0.0170332 0.164657 -0.0177746 +-0.0212056 0.0336704 -0.0218021 +-0.0696662 0.0710058 0.0344116 +-0.0516682 0.152149 0.0128837 +-0.0125103 0.0687513 0.0543288 +0.0366353 0.0982561 -0.0107953 +-0.0789343 0.0700266 0.0104198 +-0.0897898 0.136552 0.0342 +-0.0127086 0.0383825 0.00890404 +-0.0624498 0.166273 -0.0455815 +0.0326592 0.0619445 0.0401066 +-0.0457467 0.132003 0.0161756 +-0.0886572 0.111878 0.019323 +-0.0532618 0.0335957 0.00317772 +-0.0164951 0.109966 0.0413377 +0.0543768 0.0731861 0.0106539 +-0.0174802 0.127364 0.0206736 +0.0567172 0.0621967 0.0256596 +0.0464307 0.0792576 0.0101822 +-0.0292965 0.0818454 -0.0346209 +0.0426284 0.0719164 -0.00480026 +0.0578503 0.0648244 0.0238145 +0.0430174 0.0637781 -0.0018983 +-0.0794408 0.0768726 0.0291038 +0.0545285 0.0622324 0.0277996 +0.0441819 0.0945484 0.0191589 +-0.0284244 0.119569 -0.0104891 +-0.0778403 0.10982 0.0432074 +0.0160506 0.0754058 0.0531341 +-0.0523159 0.0517943 0.0256431 +-0.0181754 0.17123 -0.0220272 +-0.049306 0.147765 0.0110054 +-0.0405044 0.166738 0.00354035 +0.0214342 0.0934308 -0.0229317 +0.0452295 0.0931909 0.0101587 +-0.0352058 0.126987 0.0025067 +-0.0177396 0.0642294 -0.0366219 +-0.0251728 0.1712 -0.0194857 +0.0122607 0.0538397 -0.0290819 +-0.0902417 0.133644 0.00722857 +-0.0815914 0.0767239 0.0235201 +-0.0534472 0.146228 0.0234079 +0.0235949 0.0875751 0.0483132 +-0.0647237 0.158466 -0.0128094 +-0.0260145 0.0688342 -0.034504 +-0.0770801 0.15139 0.0355785 +-0.0630768 0.0336712 -0.00794186 +-0.0574971 0.10156 0.0427298 +0.0435266 0.0664036 0.0265247 +-0.0500812 0.146304 0.0115954 +-0.0568525 0.0521385 0.00567837 +-0.0436626 0.0607395 -0.0127771 +-0.0426472 0.117732 -0.0145554 +-0.0805782 0.112389 0.0458728 +-0.0161125 0.127667 0.00290411 +-0.00749701 0.0576432 0.054379 +-0.0454968 0.0775542 0.0422104 +-0.0694956 0.0958583 0.0420894 +-0.0369639 0.0346855 -0.0305537 +-0.0640756 0.151735 -0.033508 +-0.00249095 0.0718247 0.0580407 +-0.0583644 0.065095 0.0331446 +-0.0748917 0.16378 -0.0359985 +-0.0710199 0.0662278 0.0242287 +0.035425 0.0754528 0.0389267 +-0.0547392 0.075379 -0.0185175 +0.0462455 0.0784487 0.0155769 +-0.0310503 0.155166 -0.00836756 +-0.0879532 0.117604 0.0468721 +-0.0630191 0.169374 -0.0476038 +-0.0445267 0.0423569 -0.0163056 +-0.0624997 0.0818785 0.0437679 +-0.0842794 0.115636 -0.000747849 +-0.0700345 0.0631474 0.0200567 +0.0125104 0.105746 0.0436503 +-0.0795696 0.0976882 -0.00856087 +-0.0495247 0.141678 0.0113921 +0.0166382 0.123302 0.0301317 +-0.0367737 0.0813353 -0.0218258 +0.0465043 0.0597504 0.0314309 +-0.0777677 0.0975799 -0.010556 +-0.0460219 0.166062 0.00401182 +0.0609087 0.0623561 0.0101482 +-0.0403969 0.033577 0.00400031 +0.0286533 0.0578113 0.0412965 +0.0447855 0.0917675 0.0181585 +-0.0238167 0.0929782 -0.0327062 +-0.0714891 0.129823 0.0511416 +-0.0235755 0.157761 -0.0033973 +-0.0525761 0.136549 0.0284096 +-0.0177757 0.0756957 -0.0389571 +-0.0184004 0.0383962 0.0258071 +-0.0162165 0.175672 -0.0252165 +-0.0326786 0.0835446 -0.0285522 +-0.0897198 0.135201 0.0382086 +0.0138704 0.12508 0.0305218 +-0.0334383 0.0383149 -0.00250434 +0.0173372 0.059408 -0.0277846 +0.02739 0.119413 -0.00163712 +-0.055795 0.129741 0.0368819 +-0.0124902 0.0560062 0.0517339 +0.00742257 0.034128 0.000278711 +0.0312441 0.0828649 -0.019558 +-0.0804968 0.149757 0.0362335 +0.0224909 0.107012 0.0395338 +-0.0282283 0.117946 -0.012805 +-0.0726553 0.180933 -0.0546755 +-0.0683563 0.134056 0.04686 +-0.0197453 0.163025 -0.0159769 +-0.0591933 0.155725 0.01387 +-0.0522733 0.13577 -0.00153662 +0.0413723 0.0971667 -0.00382246 +-0.0920493 0.125439 0.00826634 +-0.0522301 0.0388364 0.0467813 +0.0151427 0.107227 -0.0182666 +-0.0397192 0.03358 0.00232461 +0.0373971 0.049112 -0.00639066 +-0.0698932 0.120907 -0.00884856 +-0.0667865 0.156181 0.0155153 +-0.0865635 0.0819919 0.0164862 +-0.0276111 0.0476412 -0.0256716 +-0.050104 0.0515366 0.0156131 +-0.0466794 0.0620985 -0.0127944 +-0.0784369 0.170061 -0.0360578 +-0.0714268 0.173765 -0.0397048 +-0.0313808 0.0567165 -0.0143886 +-0.0309651 0.0347631 0.0441412 +0.0067865 0.130497 0.0221788 +-0.0524448 0.149335 0.0194038 +-0.0414976 0.0860064 0.0425981 +-0.0709701 0.155369 -0.0459101 +0.00322675 0.0810659 -0.0345434 +-0.0294909 0.0917678 0.0440939 +-0.0734658 0.151245 -0.0358847 +-0.079509 0.130274 0.0528999 +-0.00249263 0.0534855 0.0544759 +-0.070992 0.0395652 0.00837515 +-0.0868944 0.122556 -0.00173403 +-0.0574179 0.0608499 0.024689 +-0.0424855 0.09447 0.0423231 +-0.00342977 0.0386245 0.00511046 +-0.018769 0.037629 -0.017491 +-0.0527937 0.0869491 -0.0216809 +-0.0846182 0.106299 0.024344 +0.0443742 0.0818795 -0.000800454 +-0.0894613 0.148789 0.0111841 +-0.0867708 0.110409 0.0193573 +-0.0310025 0.176085 -0.0150686 +0.00863383 0.115058 0.0390007 +-0.0408994 0.163853 0.00394115 +-0.057289 0.0707546 0.0390509 +-0.0646832 0.0432745 0.0336962 +0.0205013 0.0892461 0.0486645 +-0.0625318 0.0662874 0.0329584 +-0.0608083 0.147764 -0.00265379 +0.00615212 0.112907 -0.0196236 +-0.0299927 0.0436118 -0.0290457 +-0.0158151 0.162561 -0.00896512 +0.00597686 0.130404 0.00157669 +0.0284244 0.0822003 0.0446831 +0.0211099 0.0605491 0.0480139 +-0.0234016 0.184697 -0.0149423 +0.00333349 0.0390305 -0.00876711 +-0.0635183 0.159851 -0.052592 +-0.0770983 0.150031 -0.00589737 +0.0214723 0.0878669 0.0490265 +-0.0679264 0.131258 0.0474463 +0.00194863 0.100763 -0.0227079 +0.00777681 0.0385776 0.0292039 +-0.022633 0.08929 0.0533197 +-0.00603192 0.127393 0.0291246 +-0.0911594 0.120221 0.0443019 +-0.0894985 0.121276 0.00330358 +-0.0368227 0.0914861 -0.023804 +-0.0530502 0.151987 0.0175947 +-0.0672887 0.121448 0.0519139 +-0.0568311 0.0912579 -0.0217399 +-0.0697681 0.0822532 -0.0170635 +-0.0874076 0.0990828 0.0243308 +-0.0355048 0.108366 0.0378272 +0.0287346 0.10342 0.0381993 +-0.0860991 0.0964962 0.0273389 +0.0321886 0.108821 -0.00928902 +-0.0781375 0.103077 -0.00856917 +-0.0630075 0.0458305 0.00872119 +-0.0737672 0.068042 0.0238437 +-0.0863239 0.111846 0.0325401 +-0.00949559 0.10164 0.0439977 +-0.0902184 0.117255 0.00530427 +-0.075404 0.0914629 0.0394057 +-0.0453927 0.0336614 -0.0191153 +-0.0827835 0.0790493 0.0255103 +-0.0912019 0.132413 0.0272298 +-0.0564798 0.081975 0.044689 +-0.072928 0.148723 -0.0327819 +-0.00163455 0.0466691 -0.0289171 +-0.0665675 0.0355377 -0.00701232 +-0.000953404 0.100702 0.0462281 +-0.00881786 0.169637 -0.0227487 +-0.0201288 0.165284 -0.0176913 +-0.0859703 0.127103 0.0488324 +0.0255102 0.106068 0.0387825 +0.0570523 0.0522954 0.00619533 +-0.0407044 0.0491484 -0.0113833 +-0.0394747 0.168236 0.00277528 +-0.0690053 0.160967 -0.0519594 +0.0161135 0.0534638 0.0477167 +0.0284604 0.079188 -0.0220838 +0.0113708 0.0523816 -0.0287924 +0.0393128 0.0955964 -0.00780286 +-0.020906 0.0387029 0.0322136 +-0.00871553 0.0642094 -0.0357226 +-0.0547883 0.08548 -0.0214211 +-0.0725291 0.0901409 0.0413911 +-0.0566631 0.0629472 -0.00640536 +0.00234532 0.0524899 -0.0301138 +-0.0938956 0.118755 0.0202995 +-0.0414996 0.0846033 0.0426094 +0.00904636 0.090083 -0.0314826 +0.00730102 0.131 0.00524198 +-0.0637681 0.0809918 -0.0188675 +-0.0414945 0.041025 0.0428519 +-0.087002 0.140499 0.00821758 +-0.0709364 0.151841 0.036169 +-0.0634902 0.106988 0.0392647 +-0.0628225 0.0910404 -0.0189489 +-0.0105509 0.165091 -0.0177492 +-0.00157082 0.0341515 -0.0183868 +-0.0378749 0.105661 -0.0201869 +-0.0689412 0.079144 0.0404114 +-0.0239658 0.0335277 -0.0259671 +-0.0732183 0.172207 -0.0490431 +-0.0205007 0.0971766 0.0453281 +-0.0778797 0.109167 0.0401678 +0.000488577 0.0965409 0.0535304 +-0.0172908 0.177187 -0.018141 +0.00409629 0.128905 0.0269756 +0.0212668 0.080528 -0.0265872 +-0.0484872 0.0931824 0.0442201 +-0.0703872 0.161044 -0.0469664 +-0.0556945 0.0334591 0.00641451 +0.043113 0.0972735 0.00118522 +-0.0465526 0.147719 0.00793526 +-0.0620051 0.0336477 0.00854436 +-0.0789484 0.130998 -0.00538086 +-0.0329884 0.0347673 0.0437059 +-0.011676 0.0389222 -0.00979553 +-0.0102112 0.168384 -0.01842 +-0.058489 0.0747585 0.0420339 +0.0115041 0.129313 0.00109395 +-0.0186879 0.0554617 -0.0328673 +-0.0198225 0.168315 -0.0130587 +-0.013087 0.0382629 0.0179922 +0.0130281 0.0916311 -0.029044 +0.0271142 0.0463333 0.0371793 +-0.0618303 0.167813 -0.0535931 +0.0164903 0.113991 0.0376096 +-0.0592845 0.0336203 0.0127024 +-0.0728419 0.0642516 0.016748 +-0.0527116 0.12267 0.0360612 +-0.091424 0.144749 0.0231531 +0.0225812 0.0946281 -0.0221802 +-0.073319 0.153662 0.0322986 +-0.0384844 0.109782 0.036904 +-0.0551177 0.156069 -0.00176933 +-0.0195075 0.0512747 0.046374 +0.0374508 0.109679 0.00217662 +-0.0624744 0.163093 -0.0485882 +-0.0482041 0.0335795 -0.00119996 +0.0115865 0.127977 -0.0019288 +0.00494704 0.131338 0.0186496 +0.00228726 0.131702 0.0133903 +-0.0890002 0.134996 0.00522535 +0.0114372 0.12283 -0.0103617 +-0.0719092 0.180772 -0.055937 +-0.0144633 0.051615 0.0495133 +0.0147782 0.034634 0.0233109 +-0.0647828 0.177875 -0.0546137 +-0.0882908 0.103675 0.012381 +-0.0631313 0.0343469 0.025414 +-0.0255881 0.169753 -0.0108444 +0.0323006 0.0361518 0.00522301 +-0.0682938 0.06404 -0.00150269 +-0.0705485 0.167591 -0.022181 +0.0271973 0.0508207 -0.0197147 +-0.01565 0.10151 -0.0235687 +-0.0233444 0.0380443 0.0215084 +-3.10615e-05 0.0346258 0.0437307 +-0.0391691 0.162354 0.00112683 +-0.0657552 0.0422954 0.0115704 +-0.0745006 0.142795 0.0461595 +0.0473913 0.0422357 0.0119475 +0.0144595 0.121944 0.0333941 +-0.00358089 0.036197 -0.0248262 +0.0394746 0.0459091 0.0309432 +-0.0744487 0.141666 -0.00675172 +-0.0615813 0.0380878 0.0442214 +-0.0393467 0.0392853 0.042122 +-0.0229052 0.0945537 0.0478017 +-0.0281182 0.0563778 -0.0244009 +-0.0325146 0.112544 0.0353443 +0.0114695 0.0949418 0.0507264 +-0.027899 0.0377311 0.0244577 +-0.0247344 0.0668597 -0.034525 +-0.0623338 0.163141 -0.0335899 +0.0341266 0.0993109 -0.0131459 +-0.0130965 0.169821 -0.0173751 +0.0250182 0.11137 0.036342 +-0.0513993 0.14316 0.0173798 +-0.0521465 0.121207 0.0350569 +0.0134264 0.0403382 -0.0227982 +-0.0919004 0.143349 0.0181646 +0.0256492 0.0831048 -0.024123 +-0.0614955 0.0973435 0.04311 +0.0110632 0.0360404 -0.022358 +-0.0702704 0.159573 -0.0469358 +-0.0135146 0.181607 -0.0231689 +0.0462675 0.0778418 0.00718957 +-0.057322 0.0452663 0.0256799 +-0.0473932 0.0337786 -0.0140697 +0.0180643 0.0577618 0.0488361 +-0.0840242 0.151932 0.0065796 +-0.0547337 0.0738545 -0.0174125 +-0.0647273 0.156687 -0.0474505 +-0.0184955 0.0513594 0.0472431 +0.0314014 0.0491212 -0.0073371 +-0.0336406 0.0339783 -0.0207966 +0.0302861 0.0722616 -0.0207987 +-0.0707237 0.135491 0.0487549 +0.0373244 0.0861524 0.0364715 +-0.0839874 0.129456 -0.00327263 +-0.0579656 0.0599816 -0.000771046 +-0.0374903 0.0917378 0.0437278 +-0.0421167 0.157651 -0.00983865 +-0.0774831 0.151439 -0.0048996 +-0.0664918 0.167987 -0.0292876 +-0.0348246 0.12664 0.0173665 +0.0288107 0.113482 -0.00830654 +-0.0939345 0.122834 0.0252963 +-0.0236453 0.0906062 0.0514725 +-0.0623453 0.151603 -0.000787959 +-0.0394885 0.0520168 0.0393574 +-0.0228668 0.103033 -0.0236969 +-0.0205005 0.115412 0.03703 +-0.0206187 0.158806 -0.0102834 +-0.00380864 0.0840797 -0.0375505 +-0.0846424 0.139002 0.00130344 +-0.0244403 0.0384399 0.0299279 +-0.0256136 0.0707601 0.0441795 +0.0431065 0.0733659 -0.00379081 +-0.0334964 0.0575473 0.0382542 +-0.0732341 0.100848 0.0383652 +-0.0417523 0.0392031 -0.0263092 +-0.0600247 0.0335577 0.00903367 +0.0319454 0.0782138 0.0427262 +-0.0478947 0.122501 0.0288841 +-0.0215102 0.0435311 0.0534788 +-0.0175036 0.0357848 -0.0270478 +-0.0659221 0.115196 -0.0104247 +-0.0452512 0.0574076 0.0387158 +-0.0318518 0.100063 -0.022678 +-0.062214 0.131105 0.0398962 +-0.0570307 0.151068 0.0316808 +-0.0390807 0.159219 -0.0117734 +-0.0575439 0.0421232 0.0457366 +-0.0434958 0.166715 0.00391556 +0.0435215 0.0973118 0.0181533 +0.0364745 0.0384289 0.0206775 +0.00783805 0.034796 0.0434029 +0.00550647 0.0519309 0.0530702 +-0.0452904 0.125307 0.0239255 +0.0384949 0.0469555 0.0314897 +-0.0344994 0.0860255 0.0426749 +-0.0604675 0.0334377 0.00185915 +0.00564306 0.109569 0.0416563 +-0.0341393 0.169665 -0.0151103 +0.0252174 0.115733 -0.00872379 +-0.0432318 0.0365168 -0.0263599 +-0.0648058 0.0881399 -0.0188881 +-0.0113055 0.0420913 0.0500945 +-0.0768733 0.0742923 -0.00658087 +-0.0718355 0.0757492 0.0369191 +-0.00552934 0.126815 -0.00649473 +-0.015298 0.113338 -0.0180384 +-0.0658513 0.168603 -0.0333515 +-0.0769239 0.160393 -0.0146649 +-0.0789031 0.0913518 0.0358575 +-0.0622512 0.175627 -0.0566298 +0.0427075 0.100107 0.0161639 +-0.0122664 0.0420539 0.0504523 +-0.0593768 0.116855 0.0386274 +-0.0207916 0.117992 -0.012906 +-0.0209967 0.0893299 0.0545201 +-0.0293388 0.0522666 -0.0213646 +0.042 0.102859 0.00616839 +-0.0915744 0.128321 0.0372423 +-0.0745556 0.104899 0.0367465 +-0.0874341 0.0860792 0.0144694 +-0.0893403 0.0983511 0.0184032 +0.0265834 0.0915781 0.0456097 +0.0111147 0.0359709 0.0304167 +-0.0251149 0.163764 -0.0159045 +0.0379525 0.0888235 0.0356698 +-0.0308593 0.102934 -0.0225503 +-0.0849458 0.0817985 0.00448942 +0.016843 0.101962 -0.021958 +-0.0602648 0.153206 0.0324327 +-0.00109974 0.118227 -0.0153259 +-0.0277867 0.0904111 0.0457123 +-0.0632329 0.149656 -0.0246848 +-0.0378318 0.0943285 -0.0232947 +0.00942926 0.0360304 0.00452751 +0.00308943 0.0346383 -0.0160359 +-0.0629538 0.164686 -0.0335942 +-0.0707579 0.0639499 0.00302292 +-0.0806378 0.0734203 0.0185511 +-0.0114878 0.0502762 0.0503958 +-0.051624 0.0589527 -0.00929309 +-0.0724662 0.156284 0.0178613 +-0.0755506 0.0791122 0.0357048 +-0.0599662 0.0605914 -0.00103222 +-0.0407972 0.128426 0.00338476 +-0.0685036 0.0972643 0.0418698 +0.0384545 0.081427 -0.0137424 +-0.0869304 0.137738 0.00419643 +-0.0915894 0.118845 0.0433559 +-0.0375104 0.0344317 -0.0164034 +0.0132714 0.0779991 -0.0309033 +-0.000460653 0.0717499 0.0573883 +-0.0689415 0.128234 -0.0091158 +-0.00449889 0.0389099 -0.0139692 +-0.00687105 0.104506 -0.0230032 +-0.0625734 0.0333471 -0.00389969 +-0.0466818 0.0680053 -0.0151447 +0.0325669 0.0564098 0.0381516 +-0.00676687 0.0770295 -0.0375725 +0.031043 0.0535582 0.0376713 +-0.0252324 0.0383969 -0.00646059 +-0.0781312 0.100777 0.0347873 +-0.0351912 0.0448435 0.0445858 +-0.0618482 0.0460583 0.00900481 +-0.0510378 0.148698 -0.00295565 +-0.0758068 0.170822 -0.0449998 +0.0228822 0.0407495 0.0397886 +-0.0556881 0.123137 -0.00801327 +0.041209 0.10285 0.0181659 +-0.057716 0.154704 0.0245626 +-0.0356589 0.0394362 0.046602 +-0.018436 0.0384553 -0.00144245 +-0.0725091 0.147853 -0.0287195 +0.0195403 0.0672509 0.0492981 +-0.00949487 0.11143 0.0422271 +0.0387128 0.0407096 0.0245464 +0.0274937 0.0354669 0.00307886 +0.0251817 0.0344441 0.0110044 +-0.0734653 0.11597 0.0519419 +-0.0517405 0.0367791 -0.0118947 +-0.0313584 0.0347088 0.042355 +-0.0271594 0.0577744 0.0376032 +0.0289959 0.083514 0.0437755 +-0.0609886 0.0421383 0.0435161 +-0.0642758 0.0379734 0.0412454 +-0.0669901 0.171097 -0.0394962 +0.00201718 0.0342688 0.0083365 +-0.0376227 0.0519888 -0.0106273 +-0.0604976 0.0761414 0.0420756 +0.0231651 0.0624431 -0.0251426 +-0.0444966 0.100126 0.0423688 +-0.0434704 0.0888362 0.0427012 +-0.0739012 0.112096 -0.00769672 +0.0113285 0.0381477 0.0446991 +0.0606492 0.0595518 0.0111602 +-0.0344028 0.0453249 -0.0266763 +-0.0238559 0.100178 -0.023968 +0.0124979 0.0363631 -0.0219171 +-0.0386629 0.0606634 -0.011982 +-0.0845122 0.0778323 0.0175087 +-0.0447652 0.0811738 -0.019998 +-0.0325802 0.0708663 -0.0234636 +-0.0428489 0.09852 -0.021578 +0.0343638 0.0491351 -0.00656846 +-0.00173319 0.108975 -0.0214067 +-0.0513914 0.0516798 0.0216239 +0.00608628 0.101527 -0.0214717 +-0.0746196 0.147202 -0.0138555 +-0.0464944 0.0733156 0.0418074 +0.0275533 0.0550749 -0.019815 +-0.0617588 0.0455326 -0.00130544 +-0.0627435 0.14749 -0.0135844 +0.0114636 0.0347788 0.020691 +0.0413154 0.0451948 0.0296022 +-0.0855482 0.149965 0.0308161 +0.045359 0.04899 -0.00489955 +0.000884291 0.038993 0.0274224 +-0.086804 0.0846773 0.00948205 +0.00217921 0.090906 -0.033534 +-0.0074916 0.0518487 0.0520774 +-0.000472995 0.0746288 0.0583091 +0.00707409 0.0348007 0.0234037 +0.0191098 0.127253 0.00673134 +-0.00312412 0.123427 0.0346626 +-0.0251492 0.0379137 0.0122303 +-0.030188 0.124116 0.0205603 +-0.0326284 0.178159 -0.00692862 +-0.0371849 0.0430027 -0.0273252 +0.000516139 0.0703294 0.0566091 +-0.061834 0.155291 -0.0275862 +0.0144787 0.103102 0.0461637 +-0.0601666 0.138122 0.0340792 +0.0447845 0.0903596 0.0201575 +-0.0175794 0.128153 0.00899134 +-0.0654784 0.133956 0.0422213 +-0.078379 0.0698242 0.00895098 +-0.0544145 0.0561001 0.0105768 +-0.0166845 0.0625881 0.0524778 +0.0283147 0.0712973 0.0426773 +0.00750546 0.105745 0.0420743 +-0.0365184 0.126747 -0.000928274 +-0.0297912 0.154227 -0.00467156 +0.0242356 0.0804257 -0.0251216 +-0.0507602 0.0797387 -0.0202693 +-0.0399713 0.112687 -0.0172474 +0.0170749 0.128355 0.00741174 +-0.0399375 0.150681 0.00347523 +-0.0608612 0.0435863 0.0137318 +-0.0365883 0.0485443 -0.0138981 +-0.0910601 0.132402 0.0282222 +-0.0795844 0.0759236 -0.00451678 +-0.0809274 0.12805 -0.00535084 +-0.0711513 0.132664 0.0498849 +0.0150413 0.120568 0.0342385 +0.00849911 0.119651 0.036768 +-0.0569109 0.033599 0.014995 +-0.0689033 0.0887623 0.0428815 +-0.020138 0.166773 -0.018707 +-0.0815894 0.0926183 0.0328436 +0.00319943 0.0866473 -0.0337836 +-0.0528475 0.140082 0.0254195 +0.0217844 0.118301 -0.00950952 +-0.0305318 0.0734349 -0.0315361 +-0.0355385 0.040818 0.0464546 +-0.0446309 0.0563208 -0.0114385 +-0.0779756 0.13395 -0.00568102 +-0.0924453 0.114684 0.0163206 +-0.0427865 0.0855262 -0.0214717 +-0.030041 0.0819074 -0.0335886 +-0.0350329 0.037518 0.0477355 +-0.0574727 0.0791252 0.0438951 +-0.0347822 0.124221 0.0233214 +0.0396853 0.0674479 -0.00978879 +-0.0280887 0.123076 -0.00418723 +-0.0357494 0.0383801 -0.010405 +-0.0896534 0.0983503 0.0154045 +-0.0393744 0.174134 -0.00504658 +-0.00548988 0.121033 0.0366102 +-0.0493281 0.143211 0.0074004 +-0.0618749 0.161566 -0.0365945 +-0.00486561 0.103096 -0.0233724 +-0.0158939 0.0387206 -0.00487532 +-0.0136298 0.0943834 -0.0340901 +-0.0708677 0.158014 -0.00345716 +-0.0679292 0.0674285 0.0308631 +-0.0698001 0.0894083 -0.0167108 +-0.0708742 0.117963 -0.00822963 +0.0544559 0.0679536 0.0254119 +0.0505447 0.0640078 -0.00213219 +-0.0328813 0.11004 -0.0184872 +-0.0329481 0.169751 -0.00390259 +-0.0730465 0.158091 -0.00419381 +-0.0642284 0.165303 -0.0599757 +-0.0393381 0.149359 -0.00118821 +0.027659 0.115893 0.031317 +0.00307915 0.03925 0.0330573 +-0.0268824 0.0338882 -0.0212482 +-0.076206 0.0892711 -0.0135327 +0.036558 0.0887304 -0.0159156 +-0.045503 0.0478046 0.0396725 +-0.00457894 0.0383459 0.0160278 +-0.014359 0.102532 0.0433738 +-0.0263218 0.038308 -0.00105771 +-0.0252694 0.0564528 0.0400125 +-0.0745038 0.137269 0.049596 +-0.0478639 0.102799 -0.0211716 +-0.0698236 0.144589 -0.0179026 +-0.00449355 0.112805 0.041803 +0.0395793 0.107012 0.0171684 +0.0320331 0.117177 0.0215305 +0.0319133 0.103439 0.0357737 +-0.0232571 0.160328 -0.0132723 +-0.0368559 0.101427 -0.0217814 +-0.0779001 0.105799 -0.00757653 +-0.0719733 0.155857 0.00930845 +-0.0667659 0.0664754 0.0301739 +-0.0116086 0.0384341 0.0253641 +-0.0828253 0.0815398 -0.00255091 +-0.00864403 0.0481881 -0.0304747 +-0.0695881 0.0687436 -0.00572614 +-0.053703 0.069339 -0.0141095 +-0.0875622 0.147255 0.0314849 +-0.060703 0.146825 0.0369155 +0.0559661 0.0563559 0.00119345 +-0.0899141 0.140577 0.0142032 +0.0290556 0.0480892 -0.0107335 +-0.0444676 0.0959215 0.0428438 +-0.0126944 0.0614008 -0.0362648 +-0.00712049 0.126279 0.0302479 +0.00717458 0.125139 0.032446 +0.0130051 0.123122 0.0330958 +-0.0658939 0.119442 -0.00885604 +-0.0535827 0.0550746 0.0114399 +0.00820634 0.0865719 -0.0325157 +-0.0358588 0.100033 -0.0223224 +-0.0816885 0.110103 -0.000571623 +-0.0517049 0.0693137 -0.014154 +-0.0304078 0.0499703 0.0425042 +0.0090211 0.0602846 0.0533569 +-0.0102692 0.126825 -0.00441849 +-0.0412575 0.123881 0.0239565 +-0.0304041 0.179805 -0.0103906 +-0.0119972 0.115638 -0.0165051 +0.0413233 0.102851 0.0171643 +-0.032272 0.0343596 0.0389523 +-0.0854712 0.0791996 0.00951147 +-0.0138083 0.082755 -0.0391488 +-0.0256473 0.0335939 -0.0244827 +0.0452831 0.0511563 0.0319003 +-0.0829803 0.153189 0.00837374 +-0.0435404 0.0351992 0.0428237 +0.0114184 0.0389206 -0.0228692 +0.0440394 0.0405103 0.0110966 +-0.0218345 0.0725147 0.0516294 +0.0173744 0.124995 0.027504 +-0.0771042 0.163136 -0.0202013 +0.0282746 0.0494546 -0.0167442 +-0.0703245 0.0805604 0.0403227 +-0.0558701 0.154311 0.0223113 +-0.0790495 0.0785612 -0.00658771 +0.0023439 0.122378 0.0350184 +-0.0220309 0.0609111 0.0451603 +-0.0853195 0.117662 0.0484974 +-0.0580048 0.0366442 0.0464062 +-0.00844255 0.0358982 -0.0250895 +0.0243113 0.119024 -0.0062727 +-0.0558892 0.141955 -0.00229647 +-0.0642262 0.115635 0.0441038 +-0.0719279 0.153998 -0.0419035 +0.0423481 0.0732982 -0.00579253 +0.0103113 0.0595614 -0.0298764 +-0.0818376 0.116236 -0.00283916 +0.0590795 0.0663557 0.00613696 +-0.039497 0.0436994 0.0413132 +-0.0702982 0.0846763 0.0415948 +-0.0167436 0.068615 -0.0382083 +-0.0690033 0.127063 0.0512206 +-0.0485018 0.102883 0.0409949 +-0.0541716 0.144673 0.0274046 +0.0243198 0.0564051 0.0438207 +-0.0308589 0.0382072 0.0517831 +-0.00548321 0.119649 0.0378412 +-0.0606463 0.0434636 0.0431332 +-0.008712 0.171156 -0.0257232 +-0.0444845 0.0846726 0.04342 +-0.0897848 0.135174 0.0342114 +-0.00690926 0.0349718 0.0473534 +-0.0808786 0.122166 -0.00503067 +-0.0779103 0.070378 0.00551561 +0.0134856 0.129689 0.00607818 +-0.0225837 0.0666453 0.0469216 +-0.0525012 0.046573 0.0420391 +-0.0444858 0.091688 0.0430295 +-0.0394965 0.0662956 0.0417788 +0.00897384 0.0364118 0.0277765 +-0.0782046 0.166684 -0.029962 +0.0192461 0.0777761 -0.0276631 +-0.0483417 0.137106 0.010396 +0.0258883 0.12226 0.00355652 +0.0398565 0.0384519 0.0122163 +-0.0408758 0.107069 -0.0201235 +-0.0315055 0.0689302 0.0397623 +-0.068912 0.148468 -0.034342 +-0.0496681 0.0705507 0.0391462 +0.00414266 0.131018 0.00407154 +0.0204354 0.100784 0.0455262 +-0.0587133 0.0708136 -0.0155469 +-0.00369415 0.0386815 0.0249596 +-0.0546088 0.0601814 -0.0071333 +0.0277597 0.0984362 -0.0181936 +0.00136992 0.128685 0.0274437 +-0.0166951 0.0555255 -0.0336624 +0.0054852 0.109984 0.0416767 +-0.079955 0.130987 -0.00485489 +-0.00265109 0.0497012 -0.030809 +-0.0697849 0.145343 0.0431021 +-0.0903934 0.12698 0.0433203 +-0.0409656 0.122163 0.0270528 +-0.056363 0.13673 0.0325483 +-0.00422605 0.0355815 -0.0164762 +-0.0158888 0.123338 -0.00654807 +0.0233356 0.0389315 -0.00470356 +-0.0377622 0.0797629 -0.0199128 +-0.0274204 0.12046 -0.00942796 +-0.0745042 0.0669844 0.00328572 +-0.0544992 0.0400332 0.0469658 +-0.022854 0.100181 -0.0240549 +-0.0748342 0.156367 -0.00257451 +0.00532997 0.0389553 -0.00830106 +-0.0591545 0.129731 0.0390508 +-0.0365933 0.117132 -0.0139142 +0.00710349 0.126169 0.0309735 +0.00420316 0.0838546 -0.0341295 +0.0424932 0.0541962 0.0323753 +-0.0447782 0.039524 -0.0212903 +0.0130456 0.0946785 -0.0262358 +0.0515873 0.047616 0.00226708 +-0.0226971 0.059684 -0.0328522 +-0.0489531 0.117804 -0.0145786 +-0.00521852 0.130779 0.0091953 +-0.0745798 0.155493 -0.021916 +-0.0211637 0.171222 -0.0207379 +-0.0681899 0.15036 -0.0415571 +-0.0645431 0.0356401 -0.00785526 +0.0444401 0.0776895 -0.00177282 +0.0191352 0.0356125 -0.00767677 +-0.0879901 0.0928029 0.00642738 +-0.0274823 0.0617236 0.037721 +0.0406194 0.104193 0.00117617 +-0.0205806 0.0342261 -0.0203167 +0.052283 0.0559902 -0.003254 +-0.0826845 0.0884898 0.0312484 +-0.0354914 0.0719062 0.0418497 +0.00222867 0.0810902 -0.0349213 +-0.0247631 0.123128 0.0239793 +0.00210157 0.111597 -0.0202587 +-0.029962 0.122606 -0.0056563 +-0.0642809 0.173904 -0.0612545 +0.0164873 0.128764 0.0128859 +-0.0290915 0.0334798 -0.0269263 +0.0563251 0.0686891 0.0234174 +0.0388229 0.0428364 0.0281231 +-0.0364553 0.171237 0.000642707 +-0.0695352 0.0422413 0.00168563 +0.0115865 0.119151 -0.014401 +-0.0445078 0.128204 0.0197407 +-0.0735439 0.101276 0.0379813 +-0.0842997 0.131249 0.0498733 +-0.0456134 0.0424471 -0.0132755 +0.00124079 0.0740793 -0.0353703 +-0.0590284 0.155612 0.0197248 +0.00626131 0.0696979 -0.0331897 +-0.0465413 0.123419 -0.0104793 +-0.0145087 0.0587885 0.0518852 +-0.0412993 0.127471 0.0164976 +-0.0621264 0.0457845 0.0326787 +0.00861617 0.0348422 -0.0132521 +-0.0699384 0.129684 -0.00901632 +-0.0174184 0.0961382 -0.0299203 +-0.0408477 0.0999502 -0.0215042 +-0.0629342 0.109643 -0.0151294 +-0.0588992 0.0593658 0.0203903 +-0.0622614 0.0594461 0.0178467 +0.0503092 0.0575099 -0.00459296 +0.0328071 0.0781213 -0.0187889 +0.0297936 0.0354746 0.0165125 +-0.0592597 0.0343664 0.034953 +-0.0736653 0.0761112 -0.0107553 +0.0358581 0.0686798 0.0377462 +-0.0814983 0.102013 0.0310531 +0.0072631 0.0968089 -0.0265119 +-0.0107695 0.0756601 -0.0381615 +-0.0665448 0.142647 -0.010737 +-0.0861837 0.0868588 0.0248974 +-0.0323987 0.114036 -0.016697 +-0.0526124 0.143167 0.0204083 +-0.00749979 0.118315 0.0383098 +-0.0366574 0.0591917 -0.011518 +-0.0854765 0.145991 0.0364919 +-0.0590102 0.131118 -0.0069845 +0.0099878 0.0342067 -0.0142754 +0.0406313 0.0833746 0.032449 +-0.0377389 0.0753784 -0.0182557 +-0.0265179 0.111211 0.0374625 +-0.0457781 0.109842 -0.0182449 +0.0106021 0.12463 0.0322012 +-0.0714609 0.172223 -0.0354286 +-0.0918002 0.143353 0.0191654 +0.009256 0.0681484 -0.0312392 +0.00426025 0.0352382 0.0224392 +-0.0497576 0.0782604 -0.019072 +-0.0628575 0.0953598 -0.0185102 +0.0594691 0.0677866 0.0081304 +0.0120479 0.124912 -0.00663019 +-0.0896003 0.111903 0.0133388 +-0.000572916 0.131478 0.0109076 +-0.0856485 0.103181 0.0252723 +-0.0825849 0.0762413 0.018536 +0.0357614 0.089262 -0.0164786 +-0.0853874 0.0978708 0.0280062 +-0.0250231 0.0373676 -0.0184933 +-0.0224668 0.0384735 -0.00782567 +-0.0215612 0.127036 0.0148264 +0.0375018 0.0527008 0.0316063 +0.0132903 0.0644915 0.0525417 +0.021025 0.0444507 -0.0197096 +-0.0230202 0.0380885 0.0125034 +-0.0190143 0.123258 -0.00649836 +-0.0634892 0.101502 0.0420523 +-0.0022961 0.120938 -0.0122094 +-0.0682754 0.155222 0.00480981 +-0.0105391 0.0444694 0.0492224 +-0.0314884 0.0988001 0.0440684 +-0.0162822 0.113495 -0.0182068 +0.0427502 0.0832247 0.0284671 +-0.0317184 0.124145 0.0214762 +-0.0228243 0.0868132 -0.0375213 +0.0112412 0.122679 0.0339481 +-0.0624726 0.093208 0.0448109 +-0.0195149 0.0474114 0.0506124 +-0.0305029 0.105682 0.0404793 +0.0297926 0.0510441 -0.0147439 +-0.0660587 0.0336733 0.00769062 +0.01375 0.126078 -0.00389468 +0.00623348 0.0768314 -0.0342539 +0.00723812 0.0725784 -0.0338132 +-0.0345032 0.0747169 0.0417978 +-0.0533429 0.0572662 -0.00744815 +-0.0588626 0.0344147 0.0367317 +-0.0597544 0.151092 0.0347772 +-0.066041 0.156288 0.0201296 +-0.0519452 0.0542248 0.0130044 +-0.0536545 0.154299 0.0129697 +-0.0553709 0.131821 -0.00535733 +-0.0165812 0.0355875 -0.0267111 +-0.0671293 0.149176 -0.0346332 +0.0364911 0.112064 0.0146153 +-0.0678122 0.0908837 -0.0169858 +-0.0433492 0.123979 0.0232099 +0.0233446 0.0489622 -0.0213372 +-0.0401353 0.162183 -0.0119788 +-0.0436993 0.0680874 -0.0160622 +-0.0575 0.0589785 0.0215704 +0.002504 0.0605716 0.0560843 +-0.0230753 0.078299 0.0540943 +-0.0532839 0.150877 0.0224035 +-0.0536299 0.144677 0.0243972 +0.0138044 0.129402 0.00474998 +0.0390959 0.0382591 0.0140545 +-0.0935248 0.128245 0.016248 +-0.017174 0.169749 -0.0215263 +-0.00210217 0.035143 0.0464295 +0.00913637 0.105871 -0.0204027 +-0.0861865 0.0926674 0.00242789 +-0.0615271 0.0344278 0.0378839 +0.0506397 0.0652197 -0.00133714 +-0.0859779 0.129848 0.0487451 +-0.0269007 0.0388242 0.0362546 +0.0349035 0.0987755 -0.0125611 +-0.0895593 0.13929 0.0311867 +0.0210026 0.126515 0.0102791 +0.0155029 0.119565 0.0348769 +-0.0660877 0.178333 -0.0536421 +-0.0134986 0.0911752 0.0564813 +-0.0462738 0.0671086 0.039469 +-0.0691002 0.0421453 0.000699576 +0.0106377 0.0658124 0.0539651 +-0.0372457 0.0381548 -0.00680953 +-0.0415057 0.0396254 0.0430594 +-0.0658022 0.0335619 0.00426403 +-0.0549779 0.135599 -0.00339213 +-0.0654711 0.157635 -0.0545345 +-0.0699145 0.135483 0.0481625 +-0.0647392 0.157599 -0.0538703 +-0.0405119 0.125571 0.0212459 +-0.0408461 0.0957242 -0.0225993 +-0.0211708 0.123144 -0.00636628 +0.0528302 0.048039 0.0216552 +0.0292509 0.119574 0.0033793 +0.0456488 0.0861985 0.00518381 +-0.0697746 0.169428 -0.052035 +-0.0583932 0.146765 0.0331817 +-0.0748301 0.174171 -0.0395847 +0.0397534 0.0685495 0.0327941 +0.0603506 0.0581587 0.0121666 +-0.0615125 0.0729203 0.0397926 +0.0320567 0.106099 0.0342281 +0.0259569 0.0632491 0.0444844 +-0.017781 0.12071 -0.00976707 +-0.00292868 0.129815 0.0244395 +0.042563 0.0650705 0.0275619 +0.051394 0.0726569 0.00804397 +-0.0147356 0.124887 0.0290085 +0.0124993 0.116805 0.0367613 +-0.0095857 0.128017 -0.00170998 +-0.0353912 0.0475494 -0.0206462 +-0.0197639 0.0714243 -0.0385337 +-0.0646745 0.0721957 -0.0143162 +-0.0418918 0.129001 0.00740866 +-0.0217734 0.0713925 -0.0382795 +-0.0493632 0.1301 -0.00139208 +0.0232238 0.0822541 0.0494986 +0.0449291 0.081953 0.02316 +0.0595997 0.0567108 0.0101713 +-0.0496185 0.140151 0.0144011 +-0.0524988 0.102874 0.0411998 +0.0342709 0.0876121 0.0408726 +-0.0295799 0.174217 -0.00600797 +-0.0251232 0.165382 -0.00841584 +0.0176002 0.124344 -0.00401113 +0.054323 0.064171 -0.000208879 +-0.0129906 0.0568055 0.0517595 +-0.0751884 0.153035 0.033144 +0.0124885 0.114028 0.0382457 +0.0104651 0.0444795 0.0447526 +-0.033472 0.124985 -0.00213286 +-0.0519318 0.0352921 -0.0124585 +-0.0621937 0.156854 -0.0175927 +-0.0755066 0.11755 0.0524265 +-0.0660809 0.135405 0.0431027 +0.0020291 0.0342762 0.0137843 +0.0320171 0.111398 0.0306261 +-0.0685791 0.147786 -0.0311476 +0.0139278 0.129741 0.0148027 +-0.075709 0.170829 -0.032719 +-0.0241819 0.175647 -0.0202251 +-0.0729646 0.147133 -0.0208616 +-0.0588824 0.0997395 -0.0190365 +-0.0396703 0.036174 -0.00733977 +-0.0195581 0.181635 -0.0160858 +-0.0449923 0.0381195 -0.0222607 +-0.0298707 0.101527 -0.0228594 +-0.0447239 0.169659 -0.000473292 +-0.0547075 0.153861 0.0184094 +-0.00344803 0.111769 -0.0204187 +-0.048864 0.162635 -0.0057974 +-0.0837218 0.154141 0.0154269 +-0.0709606 0.172226 -0.0520527 +-0.000498029 0.0505184 0.0529377 +-0.0916834 0.116094 0.0407438 +0.029535 0.0987313 -0.0165204 +-0.0649388 0.16711 -0.0315896 +-0.00669968 0.0599043 -0.0346663 +-0.0086066 0.042026 -0.0258639 +0.0380982 0.0589726 0.0320786 +0.0284966 0.0768217 0.0447581 +-0.0365356 0.155076 0.00317988 +0.0173692 0.0476632 -0.0235115 +0.0152466 0.0765161 -0.0298116 +-0.061679 0.175513 -0.061381 +-0.03626 0.0434916 0.0442696 +0.0033481 0.0346494 0.040814 +-0.0708559 0.177779 -0.0481346 +-0.0522853 0.153955 0.0120432 +-0.00577511 0.0770351 -0.037534 +-0.0279795 0.0577645 -0.0254 +-0.0474968 0.101477 0.0417865 +0.0418115 0.0872841 -0.00879032 +-0.0272728 0.0383881 -0.00686007 +-0.0828517 0.110648 0.028886 +-0.0677301 0.181168 -0.057983 +-0.0339959 0.0752105 -0.0234884 +0.0227878 0.0350417 0.0227582 +-0.0132511 0.177151 -0.0280569 +-0.0662758 0.159515 -0.0565111 +-0.0759663 0.179251 -0.0520449 +0.0494532 0.0710682 0.00472592 +-0.0158055 0.0931896 -0.0348885 +0.0506418 0.0475027 0.0012667 +-0.0220809 0.0348313 0.0494485 +-0.0681005 0.179488 -0.0529195 +-0.0457387 0.0767861 -0.0183415 +-0.0849611 0.0883696 0.0278927 +0.0410895 0.0670315 0.0294468 +0.0123862 0.0342845 -0.0119874 +-0.0861176 0.152173 0.0250218 +0.00146529 0.0341167 -0.0177588 +-0.0847663 0.132585 0.0488829 +0.041918 0.0732584 -0.00676718 +-0.0704834 0.174975 -0.0436743 +0.0101806 0.114501 -0.0173735 +-0.0274005 0.0647434 -0.0304718 +0.00306398 0.0374048 0.023868 +-0.0908043 0.122683 0.00627651 +-0.0126271 0.0337462 -0.0239473 +0.0294467 0.0623083 -0.0198501 +-0.031353 0.158667 -0.0125849 +-0.0600161 0.129661 -0.00742185 +0.0141451 0.0740257 0.0538731 +0.0348792 0.0378052 0.00236551 +-0.0223477 0.16248 -0.006155 +0.0184989 0.11258 0.037522 +-0.0107925 0.18028 -0.0267448 +0.0112772 0.0752122 -0.0313695 +-0.0481785 0.0341964 0.00728185 +-0.0564997 0.107064 0.0398466 +-0.0510086 0.119975 -0.0128249 +-0.0142596 0.175663 -0.0267921 +-0.028881 0.124884 0.00195054 +-0.0744184 0.069256 0.0261761 +-0.0527672 0.0812315 -0.0212685 +0.0424296 0.0696684 0.0278335 +-0.0272214 0.163934 -0.00616346 +0.0566888 0.0635446 0.0256358 +0.0446243 0.0959671 0.00617079 +-0.0160443 0.174209 -0.0181164 +-0.0310058 0.156198 -0.0100049 +-0.039513 0.166742 0.00312951 +-0.0651923 0.176525 -0.0608469 +-0.0649089 0.110873 0.0375872 +-0.0545067 0.0904158 0.0449797 +0.0328041 0.0682575 -0.0177764 +0.0296649 0.110072 0.0343033 +-0.00848516 0.121007 0.0363393 +-0.0284943 0.0674472 0.03888 +0.0207654 0.126697 0.0144664 +-0.0231479 0.0919482 0.0509374 +-0.0105985 0.0406145 -0.0262787 +0.0525369 0.0651172 0.0279377 +-0.0709498 0.165209 -0.0469921 +0.0101258 0.125306 -0.00703851 +-0.0198334 0.107697 -0.0220521 +0.0228667 0.107306 -0.0156684 +0.0410305 0.0422896 -0.000687891 +-0.0687631 0.080836 -0.0170666 +-0.0685062 0.142066 -0.00982847 +-0.0288706 0.171229 -0.00855169 +-0.0870246 0.129415 0.000309032 +-0.0367401 0.0754253 -0.0187666 +-0.0231137 0.159172 -0.011899 +-0.0445 0.113887 0.0346508 +-0.0617979 0.154608 0.0289232 +0.0322191 0.117688 0.00875184 +0.00258681 0.125467 0.0322572 +-0.0668846 0.117985 -0.00889164 +-0.0560239 0.144237 -0.00161522 +-0.0939473 0.122782 0.0142819 +-0.057663 0.155278 0.0187721 +-0.0653495 0.0459059 0.00467835 +-0.0838817 0.150077 0.00420446 +-0.0574972 0.100168 0.0430053 +0.0447715 0.070791 0.0233171 +0.0114258 0.129163 0.0238841 +-0.0415072 0.0605699 0.0406995 +-0.0495023 0.0862453 0.0455995 +-0.0309567 0.166794 -0.00630909 +-0.0310964 0.125815 0.0157855 +0.0577493 0.0579199 0.00320063 +-0.00748502 0.105882 0.0440003 +-0.0594987 0.0932573 0.0451741 +-0.0584823 0.080492 0.0436889 +0.0565518 0.0722252 0.0100192 +-0.0154726 0.123613 0.0307813 +-0.017794 0.0799068 -0.038901 +-0.0670193 0.0901061 0.04379 +-0.0506534 0.0619401 -0.0109597 +-0.0284985 0.0631152 0.0376198 +0.0405765 0.0793262 0.0323176 +0.0350622 0.0909926 -0.0162992 +-0.0679473 0.136882 0.0457212 +-0.0626008 0.160001 -0.0205855 +0.0143086 0.0623633 -0.0295361 +0.00349883 0.0605728 0.0559342 +0.0235231 0.0943993 -0.0219282 +0.0425314 0.0623712 0.0287546 +-0.0352518 0.156597 0.00331287 +-0.0807586 0.0950245 -0.00854945 +-0.085825 0.114595 0.0464925 +0.0420636 0.0915328 -0.00679501 +-0.0369296 0.0455099 -0.0248207 +-0.0610521 0.0460525 0.00962048 +-0.0476199 0.057734 -0.011287 +-0.0595357 0.0400627 -0.00844467 +-0.0604419 0.114971 -0.0134731 +-0.016194 0.128088 0.0051496 +-0.0365847 0.122192 -0.00920846 +-0.0464591 0.0345029 0.0305523 +-0.0644598 0.0432795 0.035714 +-0.0241405 0.168248 -0.0186857 +-0.0743787 0.145821 -0.0108474 +0.0173308 0.0566344 -0.0283721 +-0.0548894 0.136747 0.0311423 +-0.0579822 0.0343384 0.0317603 +-0.0262958 0.0634474 0.0394208 +-0.0183558 0.127798 0.00725695 +-0.0750251 0.152273 0.0347437 +-0.0648702 0.0334576 -0.000853911 +-0.0610584 0.138406 -0.00654552 +0.0224766 0.0920198 0.0478397 +0.044722 0.0945895 0.0131657 +-0.0873336 0.126682 -0.000726608 +-0.0880434 0.125329 0.00027907 +-0.0364509 0.174337 -0.00256774 +-0.053938 0.138144 0.0289679 +-0.00559979 0.114688 -0.0175182 +-0.00635915 0.0931082 -0.0347376 +-0.0861558 0.100815 0.00240792 +0.0184724 0.0934238 0.0476306 +-0.000245612 0.0350857 0.0144067 +-0.0547132 0.153591 0.0213081 +0.0445999 0.0931357 0.00219092 +-0.0649995 0.134056 -0.00807462 +-0.0360819 0.0351453 0.0214963 +0.0444988 0.0569914 0.0320977 +-0.0597101 0.0723346 -0.0163812 +-0.0468406 0.0985145 -0.021833 +-0.0397006 0.0666136 -0.0148744 +-0.0847301 0.0966436 -0.00257686 +-0.00176079 0.0741065 -0.0358743 +-0.0671962 0.0736816 0.0379285 +-0.0347085 0.169768 -0.00115359 +-0.0213445 0.0916844 -0.035421 +-0.0625559 0.150623 -0.0205762 +0.055585 0.0535517 0.00220948 +-0.0136228 0.128915 0.00609854 +-0.0654189 0.16417 -0.0217177 +-0.0613445 0.0434338 0.042412 +-0.0144732 0.096429 0.0522087 +-0.0707666 0.171245 -0.0323024 +-0.0713393 0.134067 0.0496215 +-0.0458732 0.104238 -0.0208285 +-0.0551833 0.07213 0.0401196 +0.0364832 0.0422343 0.0281778 +-0.0336503 0.0577563 -0.0112696 +-0.0810791 0.117571 0.0486733 +0.044724 0.0588042 -0.00496063 +-0.0568258 0.120959 -0.0097287 +-0.0257724 0.0797722 -0.0374309 +-0.0800654 0.121688 0.0502425 +-0.0569634 0.0335771 0.00964709 +-0.00939357 0.0354504 -0.0173725 +0.046214 0.0637709 -0.0019104 +0.00900714 0.0383394 0.0314785 +0.0457806 0.0890199 0.00717609 +-0.0524951 0.0747684 0.0423102 +0.0334058 0.0446363 -0.00548551 +-0.063072 0.0346346 0.0391063 +0.0073001 0.0907939 -0.0322622 +0.026147 0.0875952 0.0467145 +0.0130004 0.0419341 0.0448362 +0.0263999 0.0348437 0.0163952 +-0.0056357 0.0466988 -0.0297075 +-0.000747471 0.0987058 -0.0265343 +-0.0688283 0.0966095 -0.0161149 +0.00300687 0.0991424 0.049182 +-0.0154864 0.0814755 0.0571167 +-0.074497 0.120396 0.0533632 +-0.0748436 0.114924 -0.0060803 +-0.0168418 0.107354 -0.0217003 +-0.0459377 0.145792 0.000601046 +-0.0487849 0.0715634 0.0402545 +-0.0581679 0.154986 0.022946 +0.044397 0.0945546 0.0171571 +-0.0810292 0.0940061 0.0336494 +0.032953 0.0994589 0.0373001 +-0.0181454 0.0347978 0.0451006 +-0.0487902 0.0855221 -0.0217064 +-0.0776336 0.147268 -0.0038625 +-0.0891133 0.14743 0.0101992 +0.0134061 0.0767276 0.0545687 +-0.0451757 0.14769 0.00639824 +0.0340849 0.114614 0.00225198 +-0.0494981 0.105619 0.0396922 +-0.0291786 0.175627 -0.0167894 +0.0516271 0.0736236 0.0155669 +-0.0333156 0.0365169 -0.0174853 +-0.00225297 0.0388793 -0.00041461 +-0.0884617 0.14585 0.0310303 +-0.087958 0.12395 0.000268768 +-0.0637456 0.154158 0.00252195 +-0.0680618 0.0606588 0.013756 +0.00946449 0.0616923 0.0540126 +-0.00707285 0.12974 0.0027455 +-0.0190315 0.0389958 0.035931 +-0.00971778 0.0670387 -0.0360005 +0.0406669 0.102735 -0.000789188 +-0.085128 0.0845897 0.0244984 +0.00248558 0.111415 0.0422707 +0.00320889 0.0824712 -0.0345101 +-0.0467495 0.117966 -0.0147678 +0.0250223 0.110364 -0.0129553 +-0.044347 0.146755 0.000226372 +-0.0616655 0.144455 -0.00523057 +0.000474346 0.0977989 0.0522897 +0.0207702 0.036271 0.0339301 +0.0400498 0.0387801 0.0063192 +-0.0199993 0.185902 -0.0200623 +0.018427 0.0917703 -0.0251723 +-0.0354635 0.0860418 0.0431394 +-0.0475855 0.0518372 -0.00929506 +0.0429858 0.0691484 -0.00178958 +-0.0244489 0.052187 0.0413714 +-0.0500639 0.141673 0.0143962 +0.0144323 0.129298 0.0192627 +-0.0561449 0.04824 0.0383427 +0.0358665 0.0404526 0.0260172 +-0.0213253 0.0444675 0.0531428 +-0.0609289 0.112535 -0.0147528 +-0.0699845 0.139935 -0.00772138 +-0.0748631 0.106362 -0.00967707 +-0.0346028 0.0344648 0.0366099 +-0.0425153 0.118993 -0.0138741 +0.0153464 0.0537553 -0.0279934 +-0.0719831 0.170733 -0.0298702 +0.0460203 0.0848226 0.00718276 +-0.0760167 0.15688 -0.0219252 +-0.010059 0.109235 -0.0217082 +0.0010095 0.0346721 0.0439005 +-0.0198215 0.0841085 -0.0387066 +-0.020574 0.115387 -0.0161841 +-0.00203672 0.0345877 -0.0169988 +-0.0424883 0.0846004 0.0426298 +-0.0313435 0.0707327 -0.0274782 +-0.0490828 0.13552 0.0213898 +-0.0481015 0.157608 -0.00698963 +-0.0579692 0.0408152 0.0462221 +-0.0682257 0.127075 0.0505767 +-0.0434944 0.0733818 0.0425428 +-0.0905017 0.114314 0.0223543 +0.0242723 0.0647548 -0.0237835 +0.050682 0.0731977 0.010749 +0.0604945 0.0595549 0.015166 +-0.0490636 0.126668 -0.00583208 +0.00647697 0.0459611 0.0484012 +0.0279051 0.0395203 0.0288639 +-0.0314585 0.0335695 -0.0237257 +-0.0485262 0.0344313 0.0301756 +-0.0386172 0.0505956 -0.0110053 +-0.000657388 0.0511382 -0.0308268 +-0.0630072 0.0689485 0.0358468 +0.0316541 0.0351286 0.0116939 +-0.0517065 0.163863 0.00241874 +-0.0634695 0.0445577 0.0356919 +-0.0832566 0.147367 0.0370632 +0.02323 0.0762417 -0.0259573 +-0.0735922 0.0833012 0.0392631 +-0.00431736 0.130694 0.00665461 +-0.021599 0.0382532 0.00358087 +0.0465019 0.0778624 0.0111839 +0.0604451 0.0678689 0.0141533 +0.0213931 0.0489728 -0.0223035 +-0.0630692 0.153725 -0.0105955 +-0.0236572 0.0507797 -0.028024 +0.00430293 0.0625774 -0.0325544 +0.0421362 0.0845969 0.0293292 +0.010951 0.0562864 0.05258 +0.0369412 0.107321 0.0271722 +0.0502975 0.0560957 -0.00457555 +0.0410804 0.10284 0.0191681 +0.0102664 0.0739304 0.0552835 +-0.0397448 0.172952 -0.00234724 +-0.0829232 0.125068 -0.00442148 +-0.0284893 0.0903534 -0.0305816 +-0.0616586 0.172539 -0.056588 +0.0182369 0.0749953 -0.0283712 +-0.0168303 0.0382802 0.00815469 +0.0453551 0.0805854 0.0221747 +-0.0718567 0.0701514 0.0311867 +-0.0814119 0.152728 0.0295837 +0.0555021 0.0730293 0.0140468 +0.00650419 0.123782 0.0339598 +0.0422452 0.0986357 -0.000817871 +-0.072904 0.112135 -0.00834183 +-0.00786498 0.13001 0.00533674 +-0.0614753 0.15686 -0.0265876 +-0.0234913 0.103006 0.0434545 +-0.0093342 0.174192 -0.0247468 +0.048187 0.0717514 0.00605259 +-0.0554773 0.0820103 0.045038 +-0.091005 0.124034 0.00628346 +-0.0147917 0.0951887 -0.0329173 +-0.00125147 0.122854 0.0353 +-0.017497 0.0485942 0.047882 +0.0194854 0.0989751 0.0466096 +-0.0889579 0.0901579 0.00845534 +-0.065396 0.0605193 0.0180241 +-0.0469507 0.168415 -0.00396135 +0.0205156 0.111203 0.0377036 +-0.0928924 0.122885 0.0362699 +0.0213879 0.0686569 0.0484685 +0.0214143 0.0463213 0.0412437 +0.00882931 0.0373958 0.0286749 +0.0465562 0.0764652 0.0121829 +-0.0618529 0.153757 -0.0195806 +-0.0262234 0.119963 0.0294562 +-0.0354913 0.0889091 0.0432238 +0.037993 0.109314 0.0194453 +-0.0377299 0.0739307 -0.0178742 +-0.0184902 0.0815159 0.0575038 +-0.0314396 0.0637247 -0.0204391 +-0.0825513 0.110697 0.0307352 +-0.0728404 0.156111 0.0119063 +-0.0663982 0.164105 -0.0192035 +0.0062922 0.0654161 -0.0325779 +-0.0624759 0.0959475 0.043683 +-0.033686 0.0637452 -0.0146972 +0.0353693 0.102677 -0.0107148 +-0.0710479 0.166372 -0.0194754 +-0.059243 0.0367531 0.0461369 +-0.0908243 0.114994 0.023547 +-0.0650258 0.156351 -0.0487028 +-0.034444 0.159452 0.00265373 +0.0357616 0.0967769 -0.0118087 +0.044965 0.0903773 0.0181662 +0.0498767 0.0734333 0.0134213 +-0.031608 0.0496402 -0.0193495 +0.0404724 0.0408436 0.0229665 +-0.0473115 0.134637 0.0112388 +0.00743122 0.0352845 0.0446812 +-0.0297131 0.0509006 -0.0193584 +-0.0241845 0.177125 -0.0200954 +-0.0632603 0.157387 -0.0151607 +-0.0598965 0.0343774 0.0365453 +-0.0242309 0.0382399 0.0265535 +0.0433792 0.0972945 0.00218055 +-0.00691412 0.124317 0.0332409 +0.00451269 0.0561377 0.0533474 +-0.00250438 0.0842991 0.0575402 +-0.0903673 0.145762 0.0273033 +-0.0523714 0.143148 0.0193902 +0.0362345 0.0967824 0.0350211 +0.0264539 0.106068 0.0383874 +-0.0729303 0.131104 -0.00814819 +0.0116228 0.130194 0.0054038 +-0.0409771 0.113795 -0.0164017 +-0.0828306 0.150071 0.00319212 +-0.0676468 0.0338307 -0.00583252 +-0.0857374 0.0792227 0.0125087 +-0.0651015 0.0410328 0.0295625 +-0.0136795 0.0987823 0.0477955 +0.0258821 0.0794179 -0.0243188 +0.0449394 0.0734628 0.0226146 +-0.0694849 0.173671 -0.0550315 +0.0142482 0.127965 9.03059e-05 +0.0564285 0.0727253 0.0143999 +-0.0172735 0.180097 -0.0253788 +-0.0699136 0.162391 -0.0489495 +-0.09118 0.143373 0.022161 +-0.0644984 0.100116 0.0422372 +-0.0564709 0.0847764 0.0446514 +-0.043754 0.152254 -0.00662286 +-0.0547181 0.0708998 -0.0155975 +-0.0401471 0.163848 0.00326215 +-0.0814342 0.154656 0.0132857 +-0.0513196 0.0514695 0.0138904 +0.00680734 0.129132 0.0265205 +-0.0614938 0.0959769 0.0438595 +-0.0091676 0.171172 -0.0227371 +-0.0769695 0.154154 -0.0139015 +-0.0502302 0.126885 0.0326315 +0.00555777 0.034446 -0.000384949 +-0.0206136 0.0379294 -0.0283016 +0.00719386 0.0810104 -0.0336874 +0.0390033 0.0387188 0.0172773 +-0.0737727 0.0928414 0.040556 +-0.0829975 0.0763193 0.0155222 +0.0461381 0.0792322 0.00519228 +0.0313444 0.106098 0.0349666 +-0.0157326 0.0383302 0.0246146 +-0.0739329 0.072514 0.0322154 +-0.0287063 0.168278 -0.00832187 +-0.02709 0.0386639 -0.0126398 +-0.0689895 0.156345 -0.00130196 +-0.0622523 0.152181 -0.0215758 +-0.0408691 0.158042 0.00401656 +-0.0324935 0.0903869 0.0442776 +0.0156162 0.0904755 -0.0278196 +0.00543406 0.120555 -0.0138758 +-0.0874054 0.110457 0.012344 +-0.0534973 0.0903982 0.0447559 +-0.0007305 0.0683317 -0.0340878 +-0.0847135 0.152577 0.00925173 +0.0453586 0.0547792 -0.00610681 +-0.0513173 0.146268 0.0144074 +0.0146587 0.125796 -0.00358107 +-0.0790281 0.166651 -0.0329632 +-0.0519257 0.0563169 0.0201359 +-0.0206011 0.0382174 0.00381729 +-0.0499923 0.0342577 0.028256 +0.0222487 0.0365239 0.0303911 +-0.0762222 0.0981393 0.0371985 +-0.0381245 0.162196 -0.0129852 +-0.0462852 0.149202 0.00834502 +0.039774 0.0618507 -0.00575724 +0.0461841 0.0778325 0.00618859 +-0.0770439 0.154813 -0.0101321 +-0.0615001 0.152383 0.000341367 +-0.0665808 0.0334125 0.000644743 +-0.0212653 0.0381372 0.0218515 +-0.071123 0.111741 0.0467572 +-0.0265438 0.177186 -0.00862049 +-0.0523481 0.125498 -0.00654313 +-0.0522635 0.0343446 0.0312176 +0.0191745 0.060499 0.0487078 +-0.0855607 0.111744 0.0263451 +-0.0360977 0.156596 0.00383263 +-0.0479431 0.0356599 -0.0132734 +0.0366613 0.0821332 0.0372523 +-0.0478798 0.107016 -0.0192852 +-0.0356524 0.0460406 0.0421919 +0.00919662 0.0865327 -0.0319845 +-0.0808705 0.11922 -0.0043482 +-0.0335583 0.116878 -0.0136466 +-0.0112898 0.0395292 0.0388441 +-0.0194927 0.0814879 0.0571676 +0.0239403 0.124821 0.0127882 +-0.0444942 0.105717 0.0408954 +-0.0484929 0.162245 0.00645185 +-0.00849807 0.0801615 0.0580203 +-0.0487025 0.121311 -0.0122547 +0.00400584 0.0386131 0.0458842 +-0.00449485 0.0488681 0.0504112 +-0.0507263 0.122615 0.0336033 +-0.0801811 0.108648 -0.00360377 +0.029758 0.0352966 0.00556049 +-0.0236293 0.0665652 0.045154 +0.0470549 0.0602552 -0.00440662 +-0.059554 0.155543 0.0209921 +-0.00550703 0.0787847 0.0579843 +-0.0451509 0.0424209 -0.0143059 +-0.0674032 0.144345 -0.0161484 +-0.0621766 0.125515 0.0434733 +-0.0885651 0.0963045 0.0227197 +-0.0623911 0.154382 0.0301734 +-0.078298 0.0745267 0.0278337 +0.00377395 0.13125 0.00536065 +-0.0351573 0.0361738 0.0471926 +-0.0517432 0.0487299 0.0143843 +-0.0578034 0.0854472 -0.0211977 +0.0151488 0.10026 -0.0226403 +0.0225321 0.104677 0.0415312 +-0.0605798 0.155686 0.00466574 +-0.0891628 0.0942977 0.0214104 +0.0393896 0.106975 0.00316583 +0.00351619 0.0800296 0.056385 +0.0405703 0.105644 0.0131657 +-0.0507419 0.0753249 -0.0179378 +0.0269605 0.111014 -0.0116501 +0.0303852 0.098223 0.0405823 +0.0431361 0.0419917 0.0224684 +-0.0738026 0.1492 0.0397758 +-0.0725455 0.148857 -0.0337299 +-0.072371 0.0860632 0.0407672 +0.0158441 0.0475203 0.043749 +0.0104341 0.0346525 0.0368683 +0.0344146 0.0399125 -0.00185272 +-0.0764595 0.111219 0.0459768 +0.042138 0.101461 0.00217211 +-0.0213522 0.127058 0.00761225 +-0.0556879 0.0677603 -0.0123408 +0.00811587 0.129858 0.0241077 +-0.0637641 0.044271 -0.0022694 +-0.0104962 0.0897854 0.05669 +-0.0147283 0.0657495 -0.0376113 +-0.0881508 0.144556 0.0335371 +-0.0807759 0.0773963 -0.00349851 +-0.0388999 0.0345526 0.0391301 +0.0239365 0.0972468 -0.020928 +-0.0559996 0.126683 -0.00642409 +0.015329 0.118191 -0.013375 +-0.0894904 0.112329 0.0187618 +-0.0771865 0.153815 0.000183792 +0.00297917 0.0389607 -0.010651 +-0.0571826 0.122684 0.0401181 +0.0453844 0.091806 0.0121583 +-0.0908751 0.135104 0.0182068 +0.0216273 0.125269 0.00337714 +0.0572674 0.0722428 0.0147076 +-0.0417782 0.0473939 -0.012205 +-0.0658407 0.0938498 -0.0179236 +0.0102801 0.12364 -0.00922404 +0.00517588 0.113065 -0.0197995 +0.0139965 0.0343089 -0.00230394 +-0.0757024 0.160453 -0.0116926 +-0.0694905 0.10551 0.0380162 +0.0123252 0.0595168 -0.0292981 +0.00242842 0.0916453 -0.033159 +0.0363451 0.0519755 -0.00662669 +-0.0899083 0.121615 0.0458595 +-0.0569713 0.125238 -0.00711806 +-0.0616474 0.0458147 0.0384356 +-0.0816857 0.104685 0.0297488 +0.0417455 0.0760505 -0.00673474 +-0.0249373 0.175681 -0.0116247 +0.0233583 0.0592365 -0.0255115 +0.0296356 0.107455 0.0360045 +-0.0171544 0.0383178 0.00624466 +-0.0338857 0.12324 -0.00632922 +-0.0295434 0.168268 -0.00777595 +0.0237606 0.105983 -0.0162548 +-0.0636907 0.124164 0.0466174 +0.0299589 0.119939 0.0150519 +0.0387947 0.101959 0.0281808 +0.0346979 0.108688 0.0292348 +-0.00481267 0.108148 -0.0225124 +-0.0921162 0.126957 0.038246 +-0.0708767 0.0346286 -0.00100073 +-0.0434981 0.0803632 0.0422528 +-0.00776303 0.0742012 -0.03739 +-0.0164203 0.103082 -0.0232082 +-0.0368601 0.0336856 -0.0211611 +-0.0794788 0.13585 0.0504167 +-0.0622192 0.166249 -0.0495907 +-0.0632785 0.0347611 0.0232648 +-0.0678048 0.17421 -0.0455841 +-0.0292876 0.113893 -0.0165575 +-0.0116236 0.0451107 -0.0281433 +-0.0853661 0.0910995 0.0281927 +0.0152572 0.124805 0.0295869 +-0.0730257 0.141351 -0.00730576 +-0.0694123 0.111827 0.045291 +-0.048008 0.0642705 0.0370013 +-0.000600787 0.0405329 -0.0249772 +-0.0932444 0.124186 0.027283 +-0.050904 0.119772 0.0333476 +-0.00274076 0.0726647 -0.0356738 +-0.0635974 0.151927 -0.0324488 +0.025021 0.085012 -0.0240764 +-0.0749218 0.0661459 0.00857247 +0.0115292 0.119123 0.0361473 +0.0363972 0.0461521 -0.00588406 +0.0385505 0.0378908 0.0124577 +-0.0599745 0.14101 0.03437 +0.00637279 0.049483 -0.0283693 +-0.0896361 0.0969931 0.0144152 +0.0291455 0.0491758 0.0366259 +-0.013551 0.0588296 0.0525443 +-0.0381244 0.127641 0.0146907 +-0.00888364 0.107351 -0.0226177 +-0.0497129 0.165582 0.00102101 +0.0449595 0.0889486 0.000172046 +-0.0339085 0.177047 -0.0109944 +-0.0278445 0.0535534 0.0370258 +-0.0334735 0.0337737 0.0142583 +-0.0926366 0.121498 0.0312794 +-0.0298476 0.105726 -0.0219826 +-0.0771466 0.113816 0.049094 +0.0166749 0.0347919 -0.00596505 +-0.0767718 0.0716181 -0.00247133 +-0.0788159 0.0818529 0.0346403 +-0.0751616 0.0715622 0.0292788 +-0.0629391 0.12384 -0.00881569 +0.0155707 0.100538 -0.0224673 +0.0252284 0.116758 -0.00782512 +0.00112155 0.035712 0.0195623 +-0.0623204 0.0448503 0.0109236 +0.0577561 0.0565381 0.00419435 +-0.000697034 0.0626894 -0.03411 +-0.0739419 0.129646 -0.00820737 +-0.0552142 0.155428 0.0123927 +-0.0749344 0.128178 -0.00819506 +0.0183304 0.0579992 -0.0277502 +-0.0259227 0.123138 -0.0042558 +0.0130981 0.124462 0.0316831 +-0.0723893 0.172498 -0.0357772 +-0.015947 0.124632 0.0285893 +-0.0583387 0.0706756 0.0389009 +-0.0347052 0.0384254 -0.0102399 +-0.0149752 0.125602 0.0274605 +-0.0153278 0.0389782 0.0349161 +-0.0482032 0.131003 0.0267578 +0.0538412 0.0539826 0.0267309 +-0.0845696 0.12714 0.0502672 +0.0343613 0.111866 -0.00251995 +-0.0679623 0.16261 -0.0140168 +0.0251056 0.0902557 0.0469821 +-0.0373144 0.033633 0.00457247 +0.00149673 0.110036 0.0425823 +-0.0886162 0.100967 0.00940891 +-0.0734724 0.155984 0.0233451 +0.00740252 0.0402134 0.0455033 +0.0454345 0.0918112 0.0111626 +0.0252284 0.0420597 0.0372934 +0.026048 0.117275 -0.00637096 +-0.0768401 0.178514 -0.0509284 +-0.0719676 0.138437 -0.00730592 +0.00750673 0.0758763 0.0563548 +-0.0485658 0.0404434 -0.0115683 +-0.0402074 0.168164 -0.0113973 +-0.044494 0.0987314 0.042632 +-0.0530679 0.140053 0.026392 +0.0521064 0.0510719 0.0259326 +-0.0545309 0.0352136 0.0455493 +-0.0717133 0.0715245 -0.00752229 +-0.0899797 0.128138 0.00527223 +0.0045004 0.121001 0.0358516 +-0.0641393 0.143504 -0.0105249 +-0.0769685 0.156212 -0.0102521 +-0.0645952 0.155196 -0.0084031 +0.0323835 0.0460752 0.0307026 +-0.023205 0.178608 -0.0204967 +-0.042033 0.113762 -0.0163433 +-0.0512269 0.150712 0.0135153 +0.00120164 0.0839391 -0.0353946 +0.0300054 0.104778 0.0365239 +-0.00649214 0.0965537 0.0536631 +-0.0289152 0.0846603 -0.0346291 +0.0207024 0.0373647 0.039246 +-0.0386568 0.0577511 -0.0111914 +-0.0605191 0.153857 0.0308432 +0.0410047 0.0395957 0.0043142 +-0.0837262 0.151367 0.00522149 +-0.0378805 0.108506 -0.019759 +-0.0169176 0.183111 -0.0193016 +-0.0614849 0.0946016 0.0445824 +0.0332816 0.116574 0.0106008 +-0.0378618 0.101418 -0.0215553 +0.0383745 0.038179 0.01581 +0.010493 0.111264 0.0393941 +0.0353685 0.0600237 -0.0127796 +-0.0203175 0.0933679 0.052311 +-0.0434938 0.0619471 0.0402773 +-0.0393599 0.0418158 -0.0263353 +-0.0588856 0.105471 -0.0181522 +-0.0278953 0.124828 0.00229374 +-0.0894349 0.136561 0.0381888 +-0.0455406 0.124353 -0.00945534 +-0.0850289 0.111596 0.00326083 +0.01399 0.106595 -0.01887 +-0.0765357 0.0692333 0.0204809 +-0.0741239 0.165568 -0.0191297 +-0.056116 0.131133 0.036427 +-0.0715838 0.158191 -0.0409255 +-0.077037 0.111295 -0.0046823 +-0.0135016 0.0573891 0.0517499 +0.0374899 0.0469458 0.0313688 +-0.0297919 0.108873 -0.0192723 +-0.0616758 0.113831 0.0370124 +-0.0157188 0.0628375 -0.0366012 +-0.0879795 0.148554 0.029057 +-0.0890892 0.0955882 0.00942496 +-0.0709327 0.178806 -0.0496057 +0.0454967 0.0611109 0.0306935 +0.0193158 0.0835035 0.0508805 +0.000580692 0.131584 0.0113306 +-0.0615895 0.155312 -0.0215829 +-0.0134922 0.122339 0.0335983 +0.0458248 0.0806172 0.0201703 +-0.0225646 0.0983245 -0.0242201 +-0.0682478 0.066271 0.0282875 +0.0302092 0.117283 0.0265434 +-0.0829482 0.128017 -0.00457928 +-0.0715343 0.141411 0.0464325 +-0.0800761 0.0936246 -0.00957758 +-0.0851808 0.153525 0.0149377 +-0.0865771 0.124349 0.048115 +-0.0221188 0.100222 -0.0241961 +0.0224909 0.111137 0.037371 +0.00736705 0.0494733 -0.028237 +0.0432386 0.0750761 0.0273062 +-0.0564476 0.153922 0.0264803 +-0.0288608 0.0448354 -0.0281934 +-0.0776003 0.156937 -0.0149108 +-0.0784376 0.171472 -0.0389273 +-0.0178474 0.12806 0.016159 +-0.0284556 0.0472262 0.0488083 +-0.0677451 0.0629578 0.0224748 +-0.0567391 0.0576068 -0.000420382 +-0.0769537 0.132513 -0.00657383 +-0.0837476 0.0952109 -0.00455405 +-0.0427254 0.0358312 -0.0275925 +0.00623069 0.0782309 -0.0341321 +-0.0758642 0.117897 -0.00698249 +-0.0903736 0.13787 0.0221843 +-0.027962 0.155009 -0.00579987 +-0.0193391 0.0386082 -0.00732295 +-0.0237931 0.0698259 -0.0366341 +-0.015124 0.037267 -0.0266656 +0.0113671 0.0479427 -0.0268055 +0.0141489 0.0347135 0.0249225 +-0.0669549 0.160975 -0.0568649 +0.0208979 0.0359371 0.0087849 +-0.0570669 0.0493259 -0.00137722 +-0.0186112 0.0386738 -0.00909396 +-0.0055195 0.0443362 0.047543 +-0.0714237 0.153981 -0.0448933 +0.0119572 0.125728 -0.00550935 +-0.0310683 0.0679104 -0.0254551 +0.0514754 0.0531199 -0.00283685 +0.0135274 0.12988 0.0160733 +-0.0728856 0.148047 -0.0249504 +-0.0233454 0.122752 0.0259903 +-0.0578948 0.0983776 -0.0200563 +-0.0203263 0.0825295 0.0568715 +-0.0643532 0.142586 -0.00864957 +-0.0793976 0.151048 0.0347829 +0.0356609 0.104701 0.030636 +0.0063888 0.115364 -0.0182909 +-0.0289964 0.0383539 -0.00532847 +-0.0834239 0.0965619 -0.00458039 +0.019508 0.109842 0.0390589 +-0.0767379 0.10491 0.0348158 +-0.0825915 0.143398 0.0421649 +0.0182147 0.0834619 -0.0281698 +-0.0633435 0.060722 0.00207171 +0.0428335 0.076148 -0.00478426 +-0.0724349 0.0644357 0.0131399 +-0.0114637 0.165492 -0.0149909 +-0.0493961 0.033823 0.00737414 +0.0502518 0.0446339 0.0182039 +-0.0439305 0.0432632 0.0429545 +-0.0713305 0.0628284 0.00935991 +-0.0276378 0.158958 -0.0125395 +0.0600492 0.0581198 0.0161748 +0.00134506 0.0511101 -0.0304682 +-0.0692332 0.158118 -0.0519432 +-0.0133594 0.127978 0.0236019 +0.0292021 0.0619142 0.0421314 +-0.0667582 0.180263 -0.0553199 +-0.0197539 0.0671131 -0.0375162 +-0.0704746 0.040884 0.00781861 +-0.049499 0.112564 0.0357174 +-0.0322502 0.0367926 -0.0305484 +-0.00789583 0.129197 0.00105287 +-0.016169 0.117727 -0.0146898 +0.0295964 0.0580473 -0.0178274 +-0.0883598 0.0874311 0.00547496 +-0.0274913 0.101587 0.0432231 +-0.0768992 0.155831 0.0192356 +-0.0364902 0.0634253 0.0412069 +-0.0388025 0.125966 -0.00521606 +0.0196905 0.0550135 0.047657 +0.0571135 0.071717 0.0176058 +-0.0064991 0.0952675 0.0547927 +0.0174901 0.0346463 0.0220409 +-0.0024963 0.10305 0.0439671 +-0.0184804 0.0543192 0.0487134 +-0.0334418 0.0335662 -0.0297364 +-0.0620472 0.176838 -0.0608311 +-0.0308715 0.0522855 0.0371048 +-0.0367079 0.0695483 -0.0163464 +0.0158791 0.123986 0.0298499 +-0.0320536 0.0356449 0.0500425 +-0.0493943 0.14168 0.0103932 +-0.0558858 0.106922 -0.0182628 +0.059454 0.0647075 0.0208869 +0.0152596 0.125955 0.0281714 +0.038478 0.0980354 0.0312187 +-0.0744916 0.146991 0.0423999 +-0.0846211 0.0992422 0.0286106 +-0.0661191 0.156294 0.0171964 +-0.0794888 0.111206 0.0453002 +0.00519891 0.0880579 -0.0334439 +0.0153315 0.0346194 -0.0136599 +0.0395267 0.0632302 -0.00776648 +-0.0463407 0.0629206 0.0382092 +-0.0514201 0.121192 0.0343754 +-0.0528867 0.0334295 0.0213081 +-0.062446 0.163101 -0.0455941 +-0.0770308 0.167319 -0.027484 +-0.041999 0.126936 -0.00419358 +0.0289857 0.090239 0.0438092 +-0.0634397 0.158343 -0.0445972 +0.00692319 0.0630369 0.0555875 +-0.0294344 0.0381755 0.00387704 +0.0228628 0.0351973 0.0171792 +-0.0738758 0.0993275 -0.0132564 +-0.0668982 0.151542 -0.0415298 +-0.0629724 0.133897 0.038809 +-0.0928035 0.121507 0.0322842 +0.0305387 0.0609912 -0.0187852 +0.0385799 0.0739884 0.0346445 +-0.0814052 0.08555 -0.00656718 +-0.0621323 0.0602572 0.0206983 +-0.0294013 0.0804353 -0.034602 +0.0164763 0.0348375 -0.0136598 +-0.0659203 0.122383 -0.00896938 +-0.0328324 0.0929676 -0.0240794 +0.000521824 0.0801146 0.0573693 +0.0221547 0.0979182 -0.0216266 +-0.0649149 0.0392337 0.0390271 +0.0351689 0.0928995 0.0387113 +-0.0125327 0.0502379 0.050201 +-0.05553 0.12546 -0.00656458 +0.0330446 0.111446 -0.00610948 +0.0255618 0.120425 0.027665 +-0.0243325 0.126263 0.00798048 +-0.0654853 0.0944999 0.0429585 +-0.0478356 0.0970782 -0.0220591 +-0.0332116 0.0851655 -0.0254848 +0.00641089 0.036109 -0.0234066 +-0.0192798 0.0610993 0.0494354 +0.0363164 0.11089 0.0231265 +-0.0705311 0.0972485 0.0414142 +-0.0514267 0.135712 0.0273837 +-0.0564984 0.0918565 0.0453856 +-0.042499 0.113906 0.034677 +-0.0717955 0.156396 0.0195489 +-0.0215446 0.0942792 -0.0320343 +-0.0246821 0.177174 -0.0112336 +0.0177118 0.0944604 -0.0240064 +-0.0881735 0.15196 0.0139234 +-0.000296991 0.0392472 -0.00781836 +-0.00248723 0.115552 0.0407434 +-0.0147779 0.0756914 -0.0387415 +0.0503819 0.0717878 0.00597587 +-0.0396993 0.117276 -0.0140617 +-0.0628784 0.16149 -0.0515871 +-0.0769868 0.0713943 0.0255408 +-0.01852 0.115493 0.0376203 +-0.0632135 0.155458 0.00808821 +-0.0244921 0.103004 0.0433541 +-0.0392444 0.0481623 -0.0129943 +0.0317796 0.0647744 0.0406274 +-0.00516147 0.100957 0.0442706 +-0.0196118 0.040807 -0.0284935 +-0.0288146 0.0436325 0.0510094 +-0.0690473 0.0727409 0.0365464 +-0.0478629 0.125952 -0.00709772 +-0.0456346 0.123874 0.0250844 +-0.0214969 0.0498836 0.0466158 +0.0515378 0.0461489 0.00621743 +0.0472621 0.0627303 -0.00287883 +-0.0738666 0.0846755 0.0394915 +0.0247439 0.0490967 0.0390469 +0.0150281 0.097439 -0.0231662 +0.0456884 0.0904192 0.00716979 +0.0173787 0.046209 -0.0233857 +-0.00349533 0.123738 0.0342998 +-0.0905223 0.128294 0.0420009 +-0.0733752 0.0741466 0.034437 +-0.0106209 0.130105 0.0129711 +-0.0754549 0.158227 -0.0249553 +-0.0125993 0.0922824 -0.0359459 +-0.064348 0.0611447 0.0212332 +-0.0246221 0.0450443 -0.0281165 +-0.0383306 0.0379343 0.0437226 +-0.0423655 0.110099 -0.0185262 +-0.0750214 0.166563 -0.0400315 +-0.0338231 0.0915286 -0.0241849 +-0.0857793 0.088721 -0.000547834 +-0.00485752 0.103786 0.0439754 +-0.0334914 0.0960174 0.044365 +-0.040497 0.0705056 0.0418211 +0.0309495 0.065969 0.041175 +-0.0649024 0.119454 -0.00881631 +-0.0326689 0.0382268 0.0507498 +0.0366581 0.0727136 0.0371657 +0.0102886 0.13098 0.0134608 +0.0549839 0.0534895 0.00121219 +0.0229081 0.0608908 -0.0255785 +-0.0578484 0.0576892 0.00460939 +-0.0380707 0.123893 0.0251235 +0.0425051 0.049941 0.0324381 +-0.0208164 0.0797246 0.0560382 +-0.0600611 0.155861 0.0164593 +0.0128031 0.126304 -0.00413421 +0.0254584 0.0383883 -0.00303811 +-0.0782251 0.104799 0.0333593 +-0.011635 0.0466548 -0.0295721 +-0.0227746 0.0968676 -0.024693 +0.00330234 0.0626197 -0.0330565 +-0.00750217 0.0787518 0.0577101 +-0.043485 0.109867 0.0381531 +0.000280959 0.0655552 -0.0344559 +0.0303619 0.0982175 -0.0159971 +-0.0671228 0.150867 0.0375155 +-0.0251523 0.0635221 0.0411049 +-0.0732036 0.147141 -0.0198634 +-0.0403541 0.121097 -0.0120881 +0.0144177 0.0388354 -0.0218485 +-0.0912331 0.114706 0.0382141 +0.0261502 0.120654 0.0264581 +-0.0131682 0.0974746 0.0509922 +-0.0718669 0.115007 -0.00776782 +0.0425779 0.0929869 -0.00379718 +-0.0228308 0.0881946 -0.0369029 +-0.00860718 0.0361712 0.0494902 +-0.0685057 0.159542 -0.0539539 +-0.0864902 0.103559 0.00540359 +-0.0697818 0.16064 -0.00887941 +-0.05157 0.0657725 0.0357523 +0.036411 0.0430004 -0.00393346 +-0.0617308 0.0752409 -0.0175405 +-0.0384866 0.112537 0.0353486 +0.0446565 0.076299 -0.00080692 +-0.0444716 0.165339 -0.00887164 +0.0234256 0.0994865 0.0445818 +0.0411691 0.0899632 0.029736 +-0.0188353 0.12777 0.00853266 +-0.079023 0.172207 -0.0429929 +-0.0509196 0.141445 0.00173554 +-0.013506 0.0486161 0.0481837 +0.0193259 0.0665212 -0.0284749 +-0.0472913 0.128011 -0.00322004 +-0.0626481 0.167836 -0.0465871 +-0.0304696 0.0875178 0.0438182 +-0.0917743 0.120197 0.0434965 +-0.0648107 0.0617811 0.00082735 +0.000497836 0.114196 0.0414191 +0.0574118 0.0647963 0.00219725 +-0.0558676 0.0941545 -0.0217392 +-0.0336084 0.073768 -0.0234794 +0.00599322 0.131555 0.0161709 +0.00890036 0.0630937 0.0549611 +-0.062689 0.110949 0.0372761 +0.000505603 0.092515 0.0555251 +0.0223468 0.121292 -0.00473526 +-0.0486224 0.0562169 -0.0104362 +-0.00349838 0.0938964 0.0554871 +-0.0444734 0.111133 -0.0175908 +-0.0110869 0.111309 -0.0199045 +-0.0706182 0.161097 -0.00919138 +-0.0852334 0.0992128 0.0278144 +-0.0739196 0.15466 0.0290556 +0.0296062 0.0693912 -0.0207509 +-0.0310679 0.0435994 -0.0290446 +-0.0381696 0.0351458 0.0102677 +0.0601731 0.0664558 0.0181654 +-0.0779755 0.159708 -0.0199256 +-0.0656034 0.0619186 0.0220381 +-0.0875197 0.139142 0.00819442 +0.057949 0.0523838 0.0161799 +-0.0789979 0.165257 -0.0319521 +-0.0651299 0.139658 0.0409855 +-0.021445 0.0539977 0.0453008 +-0.0896519 0.136557 0.0371913 +-0.0534965 0.0890047 0.0449968 +-0.0534319 0.15708 0.0101259 +-0.0328837 0.0835575 -0.0275315 +-0.0164672 0.0659336 0.0534892 +-0.0354329 0.0383545 -0.00847377 +-0.0708675 0.102264 -0.0137609 +-0.023563 0.126621 0.00971624 +0.0103735 0.0460953 0.0463477 +-0.0660593 0.179544 -0.0550745 +-0.0527874 0.0854974 -0.0215293 +-0.0859388 0.0819759 0.019473 +0.0105508 0.12954 0.0235608 +-0.0103855 0.174149 -0.0227989 +-0.0669072 0.0448192 0.00702222 +-0.0284871 0.0932302 -0.0255941 +-0.0674877 0.041922 -0.00126982 +-0.0650925 0.142629 -0.00933509 +0.0420248 0.0845075 -0.00777453 +-0.0790747 0.0713835 0.0198308 +-0.0261077 0.0372445 -0.0185929 +-0.0370217 0.0410946 -0.0286549 +-0.0635554 0.166233 -0.0355972 +-0.0218769 0.105849 -0.0224625 +-0.0880158 0.125695 0.0466833 +-0.0621699 0.128298 0.0417254 +-0.0849635 0.115612 0.0476218 +-0.0132844 0.180127 -0.0228495 +-0.0282267 0.181005 -0.00798034 +-0.0312929 0.0665317 -0.0234435 +0.0182349 0.0355117 -0.0116753 +0.0151438 0.128336 0.0223847 +-0.0440686 0.0364096 0.0444754 +0.00518099 0.090879 -0.0329112 +-0.00712692 0.130239 0.0200248 +-0.00350074 0.0760658 0.0587997 +0.0285239 0.105924 -0.0141978 +-0.0560757 0.0486306 0.0102324 +-0.0647346 0.0751547 -0.0168067 +-0.0681413 0.163425 -0.0155251 +-0.0632877 0.151202 -0.0295741 +-0.0467953 0.0573798 0.0374139 +-0.0434795 0.10013 0.0422114 +0.0285718 0.0898068 -0.0210622 +0.0330592 0.116487 0.0176444 +-0.0241054 0.0348343 0.0490127 +-0.0124791 0.0354015 -0.0179384 +0.0405961 0.0624185 0.0297312 +-0.081387 0.11145 0.0446717 +0.00150869 0.0675259 0.0561223 +0.00629906 0.0381702 -0.0111411 +-0.0201579 0.171232 -0.0211109 +-0.0418025 0.1163 -0.0150397 +0.00651017 0.0786147 0.0558016 +-0.0940189 0.11877 0.0172997 +-0.0685972 0.0635876 0.000162346 +-0.0328398 0.0722904 -0.0244709 +-0.0455312 0.131052 0.00748081 +-0.023441 0.181825 -0.0105699 +0.0108694 0.130662 0.0179509 +0.0123886 0.0463398 -0.0252064 +-0.0652697 0.118619 0.0495916 +0.00206776 0.0348089 0.0386094 +-0.0298407 0.0705727 -0.0304857 +-0.0632339 0.164684 -0.0315914 +0.0353918 0.0491057 -0.00653987 +-0.0392946 0.123101 -0.0101877 +-0.0885378 0.137788 0.0102157 +-0.0234958 0.100256 0.0443804 +0.04037 0.0460545 -0.00454494 +-0.016752 0.0336597 -0.0246752 +0.0413281 0.0697537 0.029756 +-0.077268 0.161738 -0.0185704 +0.00995573 0.0897855 -0.0311748 +-0.0494127 0.0345257 0.0351696 +-0.00258654 0.0376582 -0.0251248 +-0.0538672 0.149311 0.025406 +0.0281029 0.0968693 0.0425418 +-0.0296256 0.0384042 -0.00919904 +-0.0659714 0.070335 0.0357803 +-0.0792849 0.109686 0.041215 +-0.0609581 0.142927 -0.00458074 +-0.064489 0.16418 -0.0242498 +-0.0585553 0.060477 0.023496 +-0.0851998 0.104954 0.024348 +0.0164098 0.126062 -0.00187701 +0.0235925 0.125057 0.0140956 +-0.00865281 0.123002 -0.0103525 +-0.0132305 0.174198 -0.0268981 +-0.0453894 0.130637 0.0193744 +0.0162761 0.0694793 -0.03005 +-0.0894525 0.128349 0.0437622 +-0.0562473 0.0708294 0.0392023 +0.0180456 0.044911 0.0433906 +-0.0626788 0.119898 0.0446407 +-0.0206698 0.116197 -0.0150314 +0.051506 0.0461707 0.0202521 +-0.0541367 0.13422 -0.00388726 +0.0303748 0.106409 -0.0127112 +0.0453408 0.0805541 0.00120995 +-0.00350137 0.0788045 0.0582113 +-0.052917 0.144693 0.0213981 +-0.0810085 0.136808 -0.00286908 +0.0435987 0.0482711 0.0311843 +-0.00549934 0.085642 0.0570911 +-0.0414264 0.125093 -0.00826982 +-0.0534716 0.0490986 0.0276613 +-0.0833044 0.10329 0.0285866 +-0.0394866 0.111153 0.0363447 +0.00954728 0.0389439 0.0451085 +-0.035694 0.0666325 -0.0153314 +-0.0301817 0.12316 -0.0042413 +-0.0383432 0.127011 0.0175779 +-0.0603252 0.0707596 0.0383929 +-0.0249438 0.0380891 0.0543244 +0.0144999 0.10985 0.0401157 +-0.0387789 0.0392857 0.0427431 +-0.0390181 0.126516 -0.0038056 +-0.0628844 0.116571 -0.0108779 +-0.0718222 0.0666154 0.0237319 +-0.0176233 0.0640054 0.0519373 +-0.0878362 0.112676 0.0422322 +-0.0661452 0.115702 0.0482687 +-0.0464951 0.116619 0.0318843 +-0.0501411 0.130626 -0.00198394 +-0.0497482 0.0767922 -0.0184367 +-0.0234881 0.0462034 0.0522022 +-0.0739006 0.162422 -0.0359639 +-0.0262017 0.0878115 0.0498853 +-0.0133444 0.0389099 -0.0138542 +0.040243 0.0970923 -0.00582991 +-0.011153 0.129981 0.0142184 +0.0309714 0.035145 0.0133989 +-0.0426252 0.0534503 -0.0112074 +-0.0538286 0.0338166 -0.0117099 +-0.0622047 0.0394245 0.0433885 +-0.0746849 0.14995 -0.0294029 +-0.0611865 0.0441212 -0.00432669 +-0.0182092 0.177147 -0.0243125 +0.0435018 0.0542009 0.0324922 +0.0364352 0.0371002 0.0145635 +-0.0321091 0.03378 0.0163326 +-0.0627516 0.145959 -0.00957815 +-0.0054968 0.061946 0.0559894 +-0.0738575 0.159643 -0.0319319 +-0.0640268 0.154208 0.0310565 +-0.0679826 0.0819454 0.0421862 +-0.0571357 0.158766 0.00595884 +0.0416081 0.101418 0.000182195 +-0.0235633 0.0565791 0.042552 +-0.0707052 0.0656331 -0.000502385 +0.0151645 0.126939 0.0266898 +0.0319146 0.0808971 0.042698 +0.0591439 0.0594194 0.00516163 +-0.0517306 0.164095 4.31123e-05 +-0.0802487 0.109228 0.032428 +-0.0124889 0.0964872 0.0522501 +0.0122905 0.06666 -0.0305971 +-0.00890819 0.0389895 -0.0111716 +-0.0414812 0.0634467 0.0412468 +0.0440882 0.090317 0.0231627 +-0.048759 0.14421 0.00252118 +-0.0240109 0.113853 -0.0165323 +-0.0863077 0.083293 0.0084931 +-0.0848578 0.117602 -0.00112226 +-0.0758939 0.107753 -0.00831552 +-0.0240922 0.0551393 0.0417051 +-0.048723 0.134043 0.0239744 +-0.075211 0.159631 -0.0279486 +-0.0458972 0.108476 -0.0187253 +-0.0827664 0.0789303 0.000509537 +-0.0413647 0.150284 -0.00509832 +0.00543597 0.131652 0.0145423 +-0.0567655 0.0797174 -0.020408 +-0.0314842 0.0875139 0.0436743 +-0.0272508 0.169746 -0.00972716 +-0.055503 0.0918468 0.0452512 +-0.0250407 0.11597 -0.0147569 +-0.0757456 0.155966 0.0196325 +0.0124869 0.0936385 0.0515089 +-0.0205861 0.122762 0.0284276 +-0.0807235 0.116228 0.0481624 +0.0260285 0.0450625 -0.0106845 +-0.0593728 0.0579489 0.0125735 +-0.049763 0.132774 0.0280532 +-0.0486523 0.128248 0.029602 +-0.0786364 0.0880738 -0.010561 +-0.0292743 0.157003 -0.0105584 +-0.0728269 0.0950692 -0.0149677 +-0.0571361 0.0333705 -0.00647115 +0.00471531 0.10507 -0.02128 +-0.0617504 0.158434 -0.0225881 +-0.044324 0.0573856 0.0392571 +-0.0231291 0.0608213 0.0434196 +-0.0736852 0.109489 0.0408578 +-0.0434867 0.102921 0.0416521 +-0.0745585 0.102629 0.0369846 +-0.00580621 0.0826794 -0.0377615 +-0.0293232 0.155967 -0.00892475 +-0.0785045 0.111148 0.0455755 +-0.0789041 0.126621 -0.00628203 +0.0387126 0.0984064 -0.00782785 +-0.00546749 0.0386155 0.00470576 +-0.00150095 0.0925253 0.0558525 +-0.0200678 0.0384268 0.0272406 +-0.0900294 0.114549 0.0240977 +-0.0775366 0.070359 0.00451989 +-0.0719896 0.139908 -0.00735583 +-0.0574975 0.0987515 0.0429871 +-0.0321271 0.107425 -0.0197503 +0.0188647 0.126347 0.0223312 +0.00641604 0.0962346 -0.0278978 +0.00311817 0.108714 -0.0201476 +-0.0160251 0.0375717 -0.0270066 +-0.0497158 0.140127 0.00540861 +-0.0603383 0.155998 0.00765284 +-0.0315045 0.100214 0.0434156 +-0.0865647 0.0978132 0.0263535 +0.030619 0.119354 0.0124235 +-0.0618449 0.153748 -0.0225793 +0.0357348 0.111877 0.0229152 +-0.0825172 0.108952 0.0273498 +-0.06497 0.156112 0.0234152 +-0.0141713 0.0391912 0.0511685 +0.0418096 0.0482673 0.0320498 +0.0293522 0.0768437 0.0442363 +-0.00664275 0.113752 -0.0185066 +-0.0339572 0.173519 -0.0141904 +-0.0868865 0.136539 0.0438118 +-0.0358508 0.0350331 0.0126434 +-0.0538363 0.0491492 0.0306601 +-0.0555251 0.040203 -0.0098178 +0.00654381 0.0340863 -0.0167284 +0.00392426 0.0984839 -0.0242888 +-0.0798351 0.078638 0.0310296 +-0.0520723 0.122646 0.0352105 +-0.0550812 0.153793 0.0226168 +0.014566 0.128157 0.000776346 +-0.0875094 0.103632 0.00838188 +0.0565843 0.0508466 0.00719292 +-0.0301736 0.0353405 0.0506988 +-0.054126 0.0491389 0.0369634 +-0.0213227 0.0927441 -0.0344661 +-0.0512299 0.133896 0.029412 +-0.0175551 0.0668893 0.0531861 +-0.0306537 0.125522 0.0174226 +0.00435638 0.0524337 -0.0297062 +-0.030037 0.0383331 -1.37538e-05 +-0.0748829 0.104948 -0.0102086 +0.0281452 0.12091 0.0214948 +-0.00129242 0.0339647 -0.0219341 +-0.0193753 0.114664 -0.0174341 +-0.0226586 0.185005 -0.0161016 +0.0333802 0.116202 0.0163348 +-0.0182505 0.0920203 0.0545129 +0.0291993 0.0821983 0.0440432 +0.040955 0.104188 0.00218636 +-0.0221399 0.16826 -0.0191908 +-0.0160775 0.128732 0.0124337 +-0.0494959 0.115246 0.0337414 +-0.0623926 0.155248 -0.0336012 +-0.0504873 0.0646576 0.0351978 +-0.0738463 0.114952 -0.00659368 +-0.0195012 0.0351765 0.0514244 +-0.0448823 0.107056 -0.0197924 +-0.0768765 0.119334 -0.00688293 +0.0107885 0.0345143 -0.0106366 +0.024237 0.0727429 0.0473317 +-0.00865103 0.0511695 -0.0319029 +-0.0877012 0.0963902 0.0247068 +-0.0518399 0.0559545 0.028629 +-0.00150749 0.0442279 0.0463824 +-0.066685 0.0361231 0.0351414 +-0.0298413 0.0511486 0.0404908 +-0.0104881 0.125079 0.0309157 +-0.0478366 0.0336224 0.000642732 +-0.0567073 0.152073 0.0307854 +-0.0772744 0.177812 -0.051035 +-0.0147745 0.0770701 -0.0384436 +-0.0929915 0.122891 0.0372721 +-0.0104786 0.116885 0.0389916 +0.0382147 0.0603208 -0.00873991 +-0.0754893 0.145614 0.0436847 +-0.0484504 0.134772 0.0211152 +0.013378 0.056283 0.0508299 +-0.00197361 0.0339973 -0.0202101 +0.0414332 0.100023 0.0231582 +0.0306311 0.076191 -0.0209647 +-0.0663516 0.155012 0.0287678 +-0.0710496 0.158811 -0.00499394 +-0.0554619 0.115432 0.0354757 +-0.0357408 0.0754574 -0.0191515 +0.000523827 0.0787529 0.057707 +-0.0189564 0.187079 -0.0195498 +-0.0849859 0.149949 0.0316738 +-0.0578691 0.0427244 -0.00751381 +-0.0739068 0.123785 -0.00803832 +-0.0355104 0.105608 0.0391036 +-0.0437169 0.0336921 -0.00956971 +0.0503986 0.0446075 0.0172106 +0.028338 0.0371627 0.023798 +-0.0835031 0.123045 0.0493423 +-0.051023 0.051637 0.0206282 +0.00799809 0.131294 0.0169006 +-0.0154642 0.0617228 0.0531313 +-0.0548148 0.0898539 -0.0222515 +0.0183688 0.0727072 0.0511848 +-0.0528816 0.143158 0.0234068 +0.0423208 0.0885482 0.027912 +-0.0489879 0.148715 -0.00337283 +0.0536516 0.0710277 0.00477709 +-0.0558317 0.154614 0.0193814 +-0.078074 0.0921324 -0.0116061 +-0.0138482 0.126055 -0.00351425 +-0.0484951 0.107035 0.0396855 +-0.0617568 0.113454 -0.0138737 +-0.0539631 0.0449066 0.021682 +-0.0323187 0.0763806 -0.0295323 +0.0441984 0.0917353 0.0221589 +-0.0830674 0.136771 -0.000769185 +-0.0741071 0.154101 -0.0239055 +-0.0686886 0.176906 -0.0487674 +-0.0561408 0.0460708 0.0131999 +-0.0685022 0.101419 0.0404594 +-0.0739688 0.0653923 0.0119616 +0.001175 0.0909253 -0.0339059 +0.0263146 0.0782009 0.0468843 +0.00192116 0.123969 -0.00948312 +-0.0587405 0.0737726 -0.0173801 +-0.0627949 0.167828 -0.0455908 +-0.0508006 0.0883889 -0.0215985 +-0.0481052 0.0559539 0.0359192 +0.0442623 0.0959503 0.0151546 +-0.0608758 0.0968112 -0.0186271 +-0.0345924 0.0485568 0.0396695 +-0.0618805 0.102572 -0.018381 +0.024797 0.0615121 -0.0241542 +0.0398079 0.0440192 0.0290809 +-0.0138249 0.0869198 -0.0385386 +-0.00950254 0.0801627 0.0580817 +-0.0893667 0.135016 0.00621309 +-0.0210328 0.0946153 0.0501685 +0.0124741 0.0347469 0.026362 +-0.0837947 0.100615 0.0291484 +-0.0677074 0.147127 -0.0273126 +-0.080936 0.0720826 0.0105433 +-0.0486367 0.0591511 -0.0114572 +-0.0856634 0.1104 0.0223511 +-0.0321401 0.16671 -0.0160336 +-0.0724955 0.174948 -0.0415233 +-0.0260317 0.0348457 -0.0200988 +-0.0274922 0.0497667 0.0454723 +-0.0394917 0.0534182 0.0393765 +0.0515114 0.0691441 0.0252354 +-0.0257438 0.12256 -0.00564443 +0.0437634 0.0832354 -0.00281017 +-0.0247629 0.0727034 -0.0370836 +-0.0655551 0.156269 0.0188465 +-0.0629848 0.136718 0.0370028 +0.0602499 0.0678328 0.0161531 +-0.0168173 0.0841632 -0.0392397 +-0.0683543 0.152019 -0.0462463 +-0.0567286 0.155485 0.0133042 +-0.0124895 0.119639 0.0367572 +-0.0620219 0.161552 -0.0385959 +-0.0485081 0.0504118 0.037253 +-0.0681426 0.159579 -0.055037 +-0.0339899 0.0738027 -0.0224777 +0.0187727 0.038419 -0.0166964 +-0.00951396 0.0647096 0.055646 +0.0373151 0.0659642 0.0362985 +-0.0697681 0.156742 -0.0499137 +-0.07512 0.161006 -0.0309706 +0.0445653 0.094573 0.0151616 +-0.0642545 0.154418 -0.039754 +0.0245051 0.108393 0.0385583 +-0.0423597 0.0337264 -0.0019814 +0.0111186 0.130773 0.0109156 +-0.0366056 0.0484481 -0.0142844 +-0.00762999 0.0387797 -0.0144679 +-0.0695561 0.0340783 0.00839793 +-0.0566909 0.0334951 0.00618234 +-0.0565711 0.159859 0.00306588 +0.000399482 0.0419381 -0.024642 +-0.0505546 0.0490872 0.0373101 +-0.0513639 0.0402537 0.0462611 +-0.0256858 0.0575487 -0.0293997 +-0.0524956 0.0890116 0.0451123 +0.044036 0.0973464 0.00517085 +-0.0774531 0.156901 -0.0199195 +0.0267966 0.0534918 0.0403155 +-0.0887231 0.0888754 0.0204484 +0.014348 0.0534071 0.0486823 +-0.0495075 0.0490436 0.0377607 +-0.0321324 0.154142 -0.000565596 +-0.0856354 0.143297 0.0395519 +-0.0344784 0.0932112 0.0445123 +-0.0688653 0.0860793 0.0429202 +-0.068567 0.167578 -0.0243154 +-0.0155024 0.084237 0.0568519 +-0.0768438 0.0975378 -0.0115852 +-0.054418 0.142404 0.0282888 +-0.00749562 0.091199 0.0567536 +0.0202715 0.077733 -0.0270961 +-0.0748613 0.102114 -0.0115761 +-0.0102609 0.0389601 -0.0132864 +-0.060805 0.0953608 -0.018741 +-0.0557308 0.0738305 -0.0174435 +-0.0789903 0.0900056 0.0359819 +0.0427074 0.0831548 -0.00579292 +-0.00549246 0.097843 0.0523265 +0.046038 0.0679968 0.0252834 +-0.0235521 0.116765 0.0343279 +0.0302394 0.0759037 -0.0212804 +-0.0212883 0.0638258 0.0471454 +0.0285217 0.0480557 -0.0127278 +-0.0326422 0.080708 -0.0295257 +-0.0545922 0.126915 0.0368606 +-0.07894 0.12954 -0.00577029 +-0.0871517 0.0874756 0.0234341 +0.0457525 0.0862068 0.0131643 +-0.0636848 0.163906 -0.0268361 +-0.01113 0.175691 -0.0290055 +-0.0644352 0.0424097 0.0302481 +0.00751322 0.0883379 0.0556646 +0.0450791 0.0411084 0.0144119 +-0.0801842 0.0990978 -0.00757647 +0.00942317 0.0752723 0.0558271 +-0.0720162 0.169175 -0.0255925 +-0.0706469 0.0749114 -0.0128891 +-0.0231537 0.124452 0.0216177 +-0.0354775 0.0932002 0.0444179 +-0.0467494 0.0782878 -0.0191673 +0.0402616 0.088708 0.0319407 +-0.0668021 0.0909191 -0.0174744 +-0.0798777 0.0922401 -0.00961163 +-0.00990791 0.168128 -0.0187599 +-0.0538472 0.144686 0.025416 +-0.0506923 0.0693793 -0.0143111 +-0.0628457 0.158366 -0.0406006 +-0.0472527 0.147738 0.00869118 +-0.0798492 0.140347 -0.0037915 +-0.0633595 0.155022 0.00583483 +0.0194938 0.0948135 0.0473832 +-0.0235952 0.03653 -0.0288249 +-0.0625329 0.155555 0.0257427 +-0.0293056 0.125075 0.00323421 +-0.0848075 0.100731 -0.000569426 +0.0362036 0.112389 0.0159326 +0.0148576 0.0726711 0.0531263 +-0.0648898 0.0353536 0.0257632 +-0.0225355 0.115413 0.0360839 +0.0344395 0.062733 -0.0148459 +-0.0404982 0.0548597 0.0396645 +0.0241838 0.0363666 0.0254891 +0.0185331 0.065881 0.0495848 +0.0124938 0.0589954 0.0513278 +0.00977817 0.131153 0.0118468 +0.0100829 0.0519948 0.0512903 +-0.0361503 0.127316 0.0154104 +-0.0482545 0.05323 0.0361705 +-0.0940988 0.124142 0.016266 +-0.0100812 0.168118 -0.0236136 +-0.00900002 0.1303 0.0121232 +0.044368 0.0832642 0.000211132 +-0.0417803 0.126317 0.0192991 +-0.0875576 0.0954908 0.0044419 +-0.0679508 0.168029 -0.055011 +-0.0131452 0.0346678 0.0462791 +0.00685606 0.0990064 -0.0228407 +0.0328304 0.0354201 0.0116657 +0.0278048 0.121695 0.017093 +0.0445188 0.0721805 0.0237826 +-0.0754994 0.115715 0.0515239 +-0.0115085 0.0815323 0.0578355 +-0.0530625 0.0625594 0.0307632 +-0.0510483 0.053037 0.0206135 +-0.0505791 0.0488657 -0.00826795 +-0.0426076 0.0338549 0.0069173 +0.0392521 0.0940728 0.0323259 +-0.0394892 0.0846821 0.0435801 +-0.0451321 0.0560164 0.0386443 +-0.00431394 0.0929621 -0.0345661 +-0.0559672 0.149602 0.0296453 +-0.0635672 0.159894 -0.0552656 +-0.0854828 0.0924603 0.0282645 +-0.000403311 0.102922 0.0441774 +-0.0728513 0.077742 0.0372898 +-0.0264927 0.0850795 0.0502634 +0.00748229 0.118415 -0.0155852 +-0.0301257 0.165235 -0.016018 +-0.00266679 0.0554838 -0.0324138 +0.0588141 0.0660698 0.0217199 +-0.0227042 0.0651451 0.0456598 +-0.0254758 0.0447668 0.0519525 +-0.0221249 0.165275 -0.017299 +-0.0673863 0.146352 -0.0244353 +0.0358297 0.112651 0.00431137 +-0.0600953 0.0345101 0.0398512 +-0.0315135 0.112545 0.0354646 +-0.0495533 0.0335732 0.00214603 +0.00748118 0.122397 -0.0118721 +-0.017033 0.0949215 -0.0326512 +-0.0465027 0.162256 0.00645028 +-0.0377072 0.0695284 -0.0160926 +0.0515389 0.0638758 -0.00198972 +-0.0406583 0.0577787 -0.0115563 +-0.078333 0.108337 0.035368 +-0.00970184 0.120973 -0.0121849 +0.0223756 0.0822421 0.0500191 +-0.0598969 0.0982824 -0.0189251 +-0.000418527 0.128183 0.0282442 +0.0398162 0.107019 0.0141667 +-0.0275139 0.118013 0.031246 +-0.0270215 0.0563432 0.0375362 +0.0105198 0.130786 0.00926843 +0.00339772 0.0418993 -0.0241367 +-0.0275013 0.113896 0.0350206 +0.0202412 0.0763232 -0.0271232 +-0.0919625 0.126955 0.0342506 +-0.0433008 0.0345877 0.0364134 +0.0433553 0.0860087 -0.00480358 +0.0208045 0.119446 -0.00872458 +-0.0930264 0.120177 0.0342925 +-0.0379377 0.157973 0.00463177 +-0.0253167 0.177183 -0.0103739 +-0.0366224 0.0519804 -0.0105023 +-0.0707047 0.079127 0.0393559 +-0.0260772 0.0606359 0.0392914 +-0.0238556 0.126292 0.00669874 +0.00550694 0.0561304 0.0532033 +-0.0537237 0.147766 0.0244131 +-0.0691531 0.167331 -0.0231015 +-0.0596786 0.0738084 0.0412039 +0.0326792 0.103442 0.0351236 +-0.0614661 0.174127 -0.0585981 +-0.0717687 0.0836085 -0.0162896 +-0.0457927 0.0869975 -0.0219586 +0.0105224 0.0990052 0.0483243 +-0.0829648 0.129479 -0.00406234 +-0.0356761 0.0343506 0.0364799 +-0.0884531 0.0888833 0.0214341 +-0.0627252 0.0416196 0.0257026 +-0.0564562 0.159872 0.00406757 +-0.0891671 0.0942549 0.0124334 +0.00850148 0.0561026 0.0528172 +-0.0897269 0.113038 0.0361809 +0.0510319 0.0481609 0.0243415 +-0.0355318 0.0341909 0.0278174 +0.0439268 0.0945301 0.0211547 +-0.0579061 0.0357757 0.046064 +-0.0154366 0.0383652 0.00473292 +-0.0175221 0.187321 -0.0198494 +-0.00549946 0.0842482 0.0569765 +0.0601999 0.0678503 0.0111396 +0.0144807 0.0658974 0.0525165 +0.0293268 0.0963357 -0.0179631 +-0.0397817 0.126122 -0.00537397 +0.0345713 0.109241 -0.00571538 +0.0142478 0.0846938 0.0523116 +-0.00151223 0.107257 0.0435513 +-0.0568094 0.0336832 0.0202688 +-0.00449913 0.108643 0.0435023 +0.0366018 0.0989128 -0.0107075 +-0.0520805 0.0552272 0.0244826 +-0.0564227 0.125779 -0.00685719 +-0.045508 0.0519257 0.0382686 +0.0321211 0.116144 0.000111339 +-0.0560271 0.142758 -0.00201441 +-0.0204991 0.12085 0.0318342 +-0.0572069 0.155002 0.0203881 +-0.0683862 0.0434928 0.00469407 +-0.0749362 0.167415 -0.0237916 +0.00950453 0.0758273 0.0557308 +0.0134626 0.0962698 0.0490469 +-0.0352581 0.0336435 0.0104036 +0.0033475 0.0524625 -0.0299019 +-0.0200406 0.0417644 0.0532372 +-0.020634 0.03806 0.0202475 +-0.0354822 0.0590569 0.0395591 +-0.0633421 0.145588 -0.0131138 +0.0560276 0.0714782 0.0201554 +-0.034079 0.157748 -0.0116645 +0.0430592 0.0871926 0.0271788 +-0.067061 0.0617728 0.0200983 +0.0054202 0.0385344 -0.0060218 +-0.0562382 0.115455 0.0360976 +0.0318915 0.0727133 0.0408308 +0.00701986 0.131464 0.0165435 +-0.00758439 0.038449 0.00988421 +-0.0401838 0.128459 0.00507702 +0.0467715 0.0482711 0.0287479 +-0.0918049 0.126804 0.00826817 +-0.0821184 0.0782385 0.0256306 +-0.0812562 0.103354 0.0307723 +-0.0639536 0.144435 -0.0123561 +-0.0108662 0.129871 0.00999779 +0.0155048 0.112635 0.0385412 +0.0182534 0.0792348 -0.0283217 +-0.0893331 0.0983151 0.0114073 +-0.00325216 0.0396403 0.0476826 +-0.0241255 0.089259 0.0519927 +-0.0858632 0.106258 0.00536057 +0.00408474 0.0346021 -0.0158016 +-0.0407936 0.0869784 -0.0214607 +-0.0166484 0.0480949 -0.029815 +-0.0157153 0.0613848 -0.0360938 +-0.0566239 0.0482507 0.0375737 +-0.0424946 0.0619914 0.040787 +-0.0676789 0.0735575 -0.0139417 +-0.00550026 0.0815011 0.0573318 +-0.0466697 0.166955 -0.00590454 +0.050335 0.0531616 -0.00370253 +-0.075448 0.162419 -0.0329687 +-0.0614914 0.089051 0.0454546 +-0.0467107 0.0709021 -0.0159388 +0.0485116 0.0611011 0.0306918 +0.0308141 0.0862286 0.0429136 +0.041033 0.0788113 -0.0077656 +-0.0332536 0.0434286 -0.0288825 +-0.0599631 0.0455474 0.028679 +-0.0106693 0.0383927 0.00930564 +0.00450171 0.04895 0.0512539 +-0.0567297 0.0738308 -0.0175741 +-0.0395016 0.128216 0.0127148 +-0.0236465 0.18441 -0.0150532 +-0.0541007 0.0517729 -0.00535724 +-0.00963566 0.0383633 0.0204127 +-0.072501 0.11898 0.053434 +-0.072483 0.0356257 0.00284128 +-0.0164962 0.0815146 0.0575151 +0.0321311 0.10568 -0.0119259 +-0.0628015 0.0867155 -0.0190743 +-0.0747157 0.155426 0.0258403 +-0.0655092 0.0986926 0.0420188 +-0.0621042 0.153787 0.0317461 +0.0075074 0.0702645 0.0557506 +-0.0873725 0.140519 0.00919988 +-0.0816979 0.073476 0.0105355 +-0.0251078 0.125921 0.00624226 +0.0143125 0.129601 0.0135477 +0.0537172 0.0701657 0.00367339 +-0.0658178 0.165764 -0.0247368 +-0.0706171 0.164859 -0.0164358 +-0.0268181 0.0385613 -0.0106363 +-0.0308492 0.121938 -0.00695618 +-0.0240991 0.0708914 0.0469009 +0.00836584 0.0509624 -0.0290525 +0.0146552 0.0361528 0.0436042 +-0.0759244 0.155422 0.00936737 +0.00291872 0.0383891 0.0247663 +-0.0483005 0.12541 0.0300666 +0.00749081 0.093253 -0.0307631 +-0.0441374 0.160646 -0.00957119 +-0.0454954 0.0945383 0.0433792 +0.0153865 0.0350801 0.00287497 +-0.0507565 0.078263 -0.0192091 +-0.014682 0.0540945 -0.0332776 +-0.0697195 0.0625059 0.018914 +-0.0850789 0.151288 0.0289026 +0.000998881 0.131517 0.0100563 +-0.0866192 0.111201 0.0383037 +-0.0257526 0.069725 -0.0351721 +-0.0832913 0.0938266 -0.00556456 +-0.00149798 0.121047 0.037107 +-0.0164922 0.103019 0.043564 +-0.00175716 0.0797524 -0.0362245 +-0.065193 0.165273 -0.0595568 +-0.00746087 0.0391472 0.0345828 +-0.0384976 0.0790115 0.0428361 +-0.00149834 0.095227 0.054625 +-0.00277478 0.078376 -0.0365291 +-0.0780329 0.155476 0.0217657 +-0.0632159 0.147647 -0.016402 +-0.0801569 0.0817921 0.0331577 +-0.0500022 0.16408 -0.00389251 +-0.0747874 0.0892505 -0.0147771 +-0.00949475 0.122405 0.0348735 +-0.0322196 0.0423712 0.0501883 +-0.00876131 0.174216 -0.0276966 +-0.0545091 0.161256 6.9518e-05 +0.0181832 0.102054 0.0457705 +-0.0604933 0.102915 0.04183 +0.0437773 0.0804492 0.0262342 +0.0388648 0.0842467 -0.0137667 +-0.00550336 0.0647558 0.0562438 +-0.0929299 0.122874 0.0352771 +-0.043447 0.0338958 0.0281851 +-0.0649274 0.155826 -0.0455264 +-0.00117719 0.0381217 -0.0144579 +-0.0146742 0.180146 -0.0213737 +-0.0911602 0.113316 0.0133388 +0.0114933 0.0990667 0.0482243 +-0.030492 0.093206 0.0443051 +-0.00885946 0.13031 0.0150517 +-0.073851 0.0979023 -0.0138506 +0.00349864 0.0505127 0.0525247 +0.0579498 0.0621469 0.0239372 +-0.0266127 0.121438 0.026306 +-0.0640364 0.138454 -0.00746704 +-0.0881537 0.0875035 0.020457 +-0.0693202 0.16097 -0.0509443 +-0.0258632 0.0384431 -0.0103374 +-0.0445084 0.162276 0.00597583 +0.002127 0.0994865 0.0488443 +-0.00523434 0.128086 0.0279795 +0.0441694 0.0706598 0.0245614 +0.00913312 0.10443 -0.020596 +-0.00849151 0.104452 0.0437135 +-0.0709552 0.134052 -0.00817596 +0.040546 0.0860518 0.0323351 +0.026933 0.109961 -0.012516 +0.0171797 0.119654 -0.0109592 +-0.0154871 0.10859 0.0421893 +-0.0544999 0.0945829 0.0441089 +-0.0942376 0.122836 0.024283 +0.0145822 0.10067 -0.0225932 +0.0416553 0.0900846 -0.00877196 +-0.0627089 0.0722313 -0.0153832 +-0.0265055 0.0946665 0.044662 +-0.0241067 0.108647 -0.0210644 +-0.0475093 0.0504634 0.0377677 +-0.0271626 0.0836755 0.0495254 +-0.0707023 0.155807 0.00247134 +0.0113316 0.0343299 -0.00659923 +0.0271512 0.0740976 0.0445232 +-0.00214312 0.101026 -0.0230018 +-0.0518271 0.094161 -0.0217872 +-0.0685768 0.0699128 0.0338326 +-0.0538957 0.0344051 0.0325721 +-0.0280624 0.17271 -0.00913079 +-0.0710555 0.148357 -0.0346175 +-0.0392482 0.165334 0.00281642 +-0.0494961 0.159354 0.00844009 +-0.0887346 0.0956375 0.0224045 +-0.0856504 0.126624 -0.00269798 +-0.0486707 0.147744 0.0101492 +-0.0735613 0.16372 -0.0149978 +0.0180716 0.0350245 0.0344937 +-0.0307362 0.053835 -0.015374 +-0.0887393 0.0928617 0.00944255 +-0.016725 0.0627999 -0.0362248 +-0.0190611 0.063953 0.0505398 +-0.0441816 0.0346721 0.0413945 +-0.0593157 0.126918 0.0405689 +-0.0111259 0.174182 -0.0282833 +-0.0436679 0.0621935 -0.0131864 +0.0275209 0.088828 -0.0220264 +-0.0297851 0.0890261 -0.0295849 +-0.0303849 0.154168 -0.00247422 +-0.0425281 0.128954 0.00568377 +0.0162787 0.126801 -0.0006607 +-0.0727179 0.0806647 -0.0147187 +-0.0753424 0.0928083 0.039305 +-0.0798316 0.111318 -0.00180655 +0.0192462 0.0346832 0.00400718 +-0.088108 0.129743 0.0452172 +-0.0103013 0.038437 0.0111565 +-0.0466082 0.166842 0.00289141 +-0.0459915 0.152139 0.00880917 +-0.02765 0.0504128 -0.0240838 +-0.00316977 0.101093 -0.0230747 +-0.081903 0.123614 -0.00465545 +0.0308134 0.104771 0.0359398 +-0.0649698 0.0444252 -0.000282601 +-0.0411724 0.128614 0.0047134 +-0.0566724 0.0661356 -0.00992741 +-0.0768027 0.1218 0.0526081 +0.0286707 0.0432432 0.0323583 +-0.0776442 0.112189 0.0467134 +-0.0599288 0.0595089 0.00385673 +-0.0751102 0.148577 -0.0168689 +-0.0422557 0.0435263 -0.021317 +-0.0109825 0.18157 -0.0273657 +0.0160657 0.128852 0.0141586 +0.0353395 0.113619 0.00703904 +-0.0746273 0.149901 -0.0298709 +-0.0108803 0.105927 -0.0227775 +-0.0134961 0.0472092 0.0480936 +0.0366578 0.0576635 0.0335112 +-0.019761 0.0984382 0.0445534 +-0.0662568 0.117183 0.0498756 +-0.0659606 0.17389 -0.0478108 +-0.0116079 0.0434695 -0.0263093 +-0.0926722 0.117507 0.0393006 +-0.0764843 0.145607 0.0435529 +-0.0467321 0.0337537 0.00617309 +-0.0558876 0.104087 -0.0189213 +-0.0920931 0.126941 0.031257 +-0.0204778 0.086949 0.0559493 +0.0205756 0.0550317 0.0471809 +0.0164894 0.10985 0.0397676 +-0.0639427 0.125311 -0.00880074 +-0.0233699 0.0380458 0.0160874 +0.00571651 0.037694 -0.0126956 +-0.0305064 0.059434 -0.0194047 +-0.0286182 0.0422955 -0.0294891 +-0.074262 0.155148 0.0274653 +-0.0780672 0.161102 -0.0219327 +-0.0710541 0.174778 -0.0424234 +-0.0641619 0.126957 0.0459503 +-0.0724375 0.0643068 0.0185598 +-0.0568864 0.106915 -0.0181412 +0.0293195 0.0995163 0.0407971 +-0.0644558 0.155894 0.01199 +0.00534877 0.131711 0.0116581 +-0.070964 0.169422 -0.0500317 +0.0101411 0.103018 -0.0207697 +0.0413802 0.0547717 -0.00646982 +-0.0385096 0.0776202 0.0427509 +-0.0239792 0.115969 -0.0147616 +-0.0225483 0.119525 0.0321637 +-0.060198 0.152175 0.0339452 +-0.0535114 0.0452153 0.0437642 +-0.0037319 0.0346421 0.0447442 +0.0102653 0.0944766 -0.0280245 +0.0270364 0.0347184 0.00926922 +-0.0660514 0.11246 0.0412419 +-0.0427238 0.072521 -0.0180673 +-0.057924 0.0453324 0.0266819 +0.0321473 0.0354374 0.0133726 +-0.0750002 0.0776536 0.0352037 +-0.0404922 0.11531 0.0337051 +-0.0201478 0.16826 -0.0196016 +-0.0263171 0.178663 -0.00829314 +0.0232364 0.0706221 -0.0263108 +-0.0228968 0.117028 -0.0138782 +-0.0477554 0.130992 0.0255865 +-0.05149 0.104281 0.0405196 +-0.00121687 0.120006 -0.0132177 +-0.0299396 0.0649723 -0.0274594 +-0.0187899 0.0784905 -0.0388371 +-0.0498267 0.109983 -0.0185775 +0.00334971 0.0510613 -0.029847 +0.0259096 0.0534724 0.0407837 +-0.0455367 0.111121 -0.0175743 +-0.0124237 0.0348026 0.0445556 +-0.0887181 0.123977 0.00228597 +-0.088156 0.151596 0.0228856 +-0.0530084 0.149326 0.0224058 +0.0191744 0.125775 0.0238749 +-0.0735068 0.118971 0.0531919 +-0.0585002 0.0987496 0.0428962 +-0.0310887 0.159271 -0.0130615 +0.000886159 0.12297 -0.0104051 +-0.0872227 0.0941086 0.00335062 +-0.0273424 0.0931435 -0.0275899 +0.0213306 0.126248 0.00896939 +0.0549036 0.0506667 0.00319831 +-0.0245658 0.115393 0.0346209 +-0.0908157 0.133668 0.01022 +0.011387 0.126452 0.0296316 +0.0342091 0.0430428 0.0288022 +-0.0759039 0.154928 -0.00089291 +-0.0834635 0.136224 -0.000676656 +-0.0242249 0.124407 -0.00155437 +-0.00949715 0.103034 0.0436292 +-0.0448632 0.102817 -0.0213129 +-0.0762912 0.162417 -0.0319674 +-0.087261 0.137734 0.00520439 +0.0359972 0.0915666 0.0381116 +0.0515419 0.0610093 0.0297195 +-0.0759846 0.168851 -0.0284951 +0.0192535 0.076364 -0.0276613 +0.00153258 0.130437 0.0231622 +-0.0552695 0.058846 -0.00542677 +-0.0478299 0.094184 -0.0219241 +0.0413096 0.0957202 -0.00478826 +0.00646546 0.131591 0.014917 +-0.0921802 0.132348 0.0172238 +-0.00096127 0.131397 0.0150615 +0.0373767 0.0519575 -0.00666499 +0.000499624 0.0661631 0.0564081 +-0.0624427 0.149095 -0.00857615 +-0.0158277 0.127263 0.00131837 +-0.0534778 0.0544994 -0.00645482 +-0.0393097 0.122071 -0.0111029 +-0.0552136 0.0346314 0.0441945 +-0.062546 0.0614527 -0.00215685 +0.0190515 0.0781917 0.0522129 +-0.00645816 0.122156 -0.0114796 +0.0547648 0.068691 0.024634 +-0.0165146 0.104417 0.0427511 +-0.0914381 0.133727 0.0162105 +-0.0621573 0.163143 -0.0375929 +-0.0927674 0.130992 0.0172311 +0.00308348 0.0981539 0.0507387 +0.0223728 0.0658814 0.0463438 +-0.039497 0.060614 0.0410267 +-0.0547684 0.0513541 0.0102674 +0.00252507 0.0561606 0.0537161 +-0.0427018 0.0681213 -0.0161497 +0.0102881 0.063916 -0.0312717 +-0.0443833 0.12939 0.00495951 +-0.0186027 0.160444 -0.0128213 +0.0371116 0.111176 0.0148387 +0.0282213 0.0875505 0.0444323 +-0.0274771 0.120676 0.0274866 +-0.0584936 0.0439589 0.0439647 +0.0240603 0.0822578 0.0489414 +0.0351443 0.071382 0.0384881 +-0.0164918 0.0897515 0.056205 +-0.0781864 0.161095 -0.0229348 +-0.0701455 0.111146 0.0439061 +-0.00742751 0.0346718 0.0457358 +-0.0757375 0.106056 0.0359296 +-0.0735163 0.138649 0.0485985 +-0.0786866 0.073183 -0.00146774 +-0.0425028 0.11664 0.0325093 +-0.0294965 0.105676 0.0405837 +-0.0253323 0.089221 0.0503626 +-0.00687638 0.105938 -0.022783 +-0.0680331 0.17369 -0.0570223 +-0.0709606 0.152484 -0.0460812 +-0.0145326 0.0386197 0.0300043 +-0.0284453 0.0903864 0.0448476 +-0.0688215 0.145351 0.0427408 +-0.0488146 0.109958 -0.0184987 +-0.0764868 0.144228 0.0448323 +-0.0204228 0.0384821 -0.0074254 +-0.050433 0.0505709 0.0355945 +0.00517866 0.131021 0.00445011 +-0.0697426 0.08081 -0.0166425 +-0.084857 0.0924919 0.0290512 +-0.00149439 0.0870302 0.0569025 +-0.072621 0.142849 -0.00891964 +0.0127783 0.105278 -0.0195273 +0.00375967 0.0343287 0.0177156 +-0.0724944 0.126022 0.052902 +-0.0520295 0.0429585 0.0453289 +-0.0373786 0.0478297 -0.016773 +-0.0165095 0.0446732 0.0513338 +0.0115347 0.118055 -0.0152175 +-0.0461946 0.0601644 0.0381445 +-0.0730192 0.156843 -0.0319176 +-0.0665818 0.173704 -0.0590137 +-0.0904622 0.133649 0.00822658 +-0.0661919 0.0387353 0.0332699 +0.0285711 0.0632767 0.0429905 +-0.0191373 0.0348399 0.0448528 +-0.0144945 0.115487 0.0386767 +-0.0885619 0.129493 0.00323888 +-0.00509715 0.039098 -0.012386 +0.00551873 0.0842341 0.0568816 +-0.0784525 0.0962411 -0.0105211 +-0.0126763 0.05824 0.052838 +-0.00571704 0.0642049 -0.0354496 +-0.0659809 0.169803 -0.037696 +0.00534315 0.0567731 -0.0307134 +-0.0104849 0.101611 0.0440429 +-0.0320291 0.108616 -0.01899 +0.0442879 0.0415947 0.0193873 +0.0261947 0.0449183 0.0375802 +-0.0626054 0.158425 -0.0185846 +-0.0321937 0.0694259 -0.0234551 +-0.0597828 0.0810723 -0.0197911 +-0.0274915 0.0602914 0.037483 +0.0278788 0.120142 0.00144262 +-0.00359535 0.0391334 -0.025473 +-0.0104902 0.0619157 0.0554492 +-0.0851123 0.133936 0.0477712 +0.0133897 0.0389058 -0.0222843 +-0.0778477 0.159718 -0.0189229 +-0.0817169 0.081448 -0.00456785 +0.00880568 0.131337 0.0114907 +-0.0885025 0.144515 0.032494 +0.00248318 0.0413744 0.0461608 +0.0393065 0.105567 0.023165 +0.0485408 0.0662379 -0.000364329 +-0.074114 0.159638 -0.0309374 +-0.0656277 0.0636798 0.0258038 +0.0326128 0.0934199 -0.0168733 +-0.0691845 0.152183 -0.0467119 +-0.0356328 0.0347409 0.0201566 +-0.067463 0.166618 -0.0559977 +0.0410852 0.0860175 0.0313838 +-0.0465484 0.0404249 0.0444582 +-0.0884823 0.147207 0.0295866 +-0.047064 0.168385 -0.0010022 +0.0204505 0.044377 -0.0207645 +-0.0460107 0.0426896 -0.0115747 +-0.0892694 0.136527 0.0301984 +-0.00170296 0.0612915 -0.034176 +0.016206 0.0927227 0.0499244 +-0.0816886 0.154881 0.0175845 +-0.0434863 0.0776041 0.0427475 +-0.0883068 0.098239 0.00641854 +-0.045625 0.056311 -0.011298 +-0.0524843 0.150872 0.017395 +-0.0641668 0.0334738 0.00287677 +0.0361211 0.0586877 -0.0107678 +0.0141254 0.0589894 0.0501816 +-0.0864962 0.112872 0.0280752 +-0.0863885 0.112851 0.0441987 +-0.0524922 0.0384865 -0.0115467 +-0.0776496 0.163935 -0.0239336 +-0.0554697 0.0345193 -0.0117205 +0.0176795 0.0740469 0.0519763 +-0.0728932 0.0642808 0.0113714 +0.0261658 0.0809584 -0.0239333 +0.058376 0.0713467 0.0136326 +0.0257313 0.0968616 0.0444005 +0.00516452 0.0344202 0.0197338 +-0.0686185 0.0687175 -0.00655491 +-0.0803464 0.147298 -0.000827063 +0.000190276 0.131527 0.0154789 +-0.0687909 0.0354139 0.0127136 +-0.05562 0.146743 0.0301728 +0.0240878 0.0645552 0.0452968 +0.0313304 0.0475675 0.0327114 +-0.0107396 0.0713653 -0.0375278 +-0.0444884 0.0733739 0.0424053 +-0.0892862 0.137904 0.0301929 +0.0430064 0.0930319 -0.00281527 +0.00152278 0.0688979 0.0560686 +0.02743 0.0663837 -0.0217206 +-0.0610765 0.167736 -0.0598039 +0.0469057 0.0738955 0.00933063 +0.010569 0.0630758 0.0538717 +-0.0636657 0.175908 -0.0542108 +-0.00887643 0.105922 -0.0227472 +0.0366768 0.0861722 0.0373065 +-0.00750518 0.0661146 0.0558703 +-0.0311481 0.174122 -0.0158676 +0.0165049 0.115408 0.0369209 +-0.0599957 0.135288 0.0360766 +0.023446 0.0385037 -0.00396461 +-0.0512658 0.0335234 0.00365116 +-0.0640041 0.0417908 0.0276702 +0.0505407 0.062451 0.0297568 +0.0381071 0.0767371 0.0357901 +0.0348186 0.114435 0.00971518 +-0.0808584 0.15153 0.0328055 +-0.0292731 0.0691492 -0.0304581 +-0.0482843 0.133992 0.00441773 +-0.0151264 0.0382524 0.0175843 +0.0457402 0.0749932 0.00321166 +-0.0514912 0.0529568 0.0308804 +-0.0841758 0.0777074 0.00551439 +-0.0724891 0.168081 -0.0228518 +-0.0578499 0.140998 0.0321632 +-0.0824678 0.0844329 0.0311552 +-0.035201 0.0380831 0.0475916 +-0.0225654 0.0336394 -0.0239171 +0.0463796 0.0792543 0.0131749 +0.0210505 0.125312 0.00175976 +-0.0835133 0.0843594 0.0293933 +-0.00767881 0.0555674 -0.03337 +-0.052489 0.159007 -0.00340529 +-0.0244459 0.156552 -0.00701262 +-0.0598434 0.0384999 0.0207227 +-0.0725078 0.160609 -0.0083559 +0.0429565 0.0986678 0.00218951 +-0.00967767 0.118026 -0.0150602 +0.038419 0.105512 0.0261645 +-0.00651495 0.0746355 0.058305 +0.0450144 0.0945871 0.00816469 +-0.0454802 0.123445 -0.0105099 +-0.00122028 0.0938312 -0.0334376 +-0.067038 0.143551 -0.013347 +0.043578 0.0888313 -0.0037919 +-0.0238161 0.078256 0.0534268 +-0.0455234 0.131922 0.0119481 +-0.0735087 0.137262 0.0493527 +-0.0183224 0.184952 -0.0232094 +-0.0148238 0.091051 -0.0367095 +-0.000496937 0.0620135 0.0565388 +-0.0217336 0.0611778 -0.0340471 +-0.0922703 0.125567 0.0322584 +0.0255559 0.0952317 -0.0208124 +-0.0748894 0.152721 -0.0218881 +-0.0770206 0.0981288 0.0365817 +-0.0262775 0.073604 0.0447421 +0.00842909 0.131472 0.01278 +-0.0815194 0.125984 0.0522053 +-0.0768497 0.156895 -0.0209209 +-0.0774933 0.0717304 0.000534742 +-0.0610597 0.172553 -0.0606091 +-0.00957846 0.178815 -0.0287373 +-0.062208 0.167823 -0.0505845 +-0.0225076 0.125867 0.0188793 +-0.0580565 0.0334897 0.00410791 +-0.00649004 0.112763 0.0415025 +-0.00176067 0.0755229 -0.0360316 +0.0456774 0.0904203 0.00916591 +0.0441351 0.0749462 0.0250125 +-0.0810675 0.11076 0.0435122 +0.00990869 0.048971 0.0492516 +-0.0728744 0.10362 -0.0122376 +0.0374772 0.106859 -0.00183322 +0.0151574 0.0988592 -0.0229537 +-0.016863 0.0640072 0.0526042 +-0.0418006 0.0462579 -0.0152948 +-0.0768234 0.0927696 0.0379671 +-0.0661935 0.155092 0.00556387 +-0.0810703 0.0752023 0.0214152 +-0.0235527 0.156826 -0.00518035 +-0.0194871 0.0883195 0.0557235 +-0.0716986 0.077793 -0.0140498 +-0.010631 0.0389663 -0.00962591 +-0.0570892 0.0602319 -0.00257411 +-0.0419839 0.128576 0.0133734 +-0.0151399 0.0382506 0.0121533 +-0.0759996 0.139851 -0.00609906 +-0.0506105 0.0694238 0.0381651 +-0.0658919 0.11864 0.0504465 +-0.0528899 0.106976 -0.018917 +-0.0521172 0.0545658 0.0256302 +-0.005498 0.103045 0.0437796 +-0.0524893 0.156469 0.0106374 +-0.0439563 0.147482 -0.0018962 +0.00349012 0.116915 0.0395094 +-0.0116538 0.0496371 -0.0310034 +-0.0360677 0.156277 -0.0104898 +0.0262747 0.0376552 0.0265482 +0.00369465 0.0390982 -0.00688719 +0.037401 0.0414131 -0.00242752 +-0.010004 0.0383201 0.0185669 +-0.0807853 0.0817556 0.0323751 +-0.00609738 0.037339 0.0487481 +-0.0254987 0.0945485 0.0446378 +-0.0446176 0.0345408 0.0396657 +-0.0522913 0.124591 -0.00759738 +-0.0244524 0.16187 -0.0148048 +-0.0144465 0.128429 0.00434765 +-0.0238211 0.0384511 -0.00993154 +0.0184111 0.122524 0.0307587 +-0.0815439 0.112456 0.0456165 +0.0549908 0.0567623 0.0266396 +0.0309112 0.0754873 0.0429619 +-0.0278697 0.103003 -0.0233536 +-0.0640545 0.149152 -0.0269946 +-0.0594536 0.133932 0.0368692 +0.0130152 0.130057 0.0144613 +0.0491953 0.0732159 0.0116573 +-0.0364993 0.0733348 0.0420574 +-0.0859116 0.107692 0.0193681 +0.0386236 0.109277 0.0110826 +0.00584547 0.0353648 -0.01428 +0.0198737 0.0358544 0.0359282 +-0.0174269 0.182963 -0.0250022 +0.0258436 0.0563286 -0.0217568 +0.0362122 0.112176 0.0188059 +-0.0564979 0.0805451 0.0445004 +0.0450117 0.0805305 0.000199058 +-0.043786 0.126623 -0.00583839 +0.0366462 0.100736 0.0320541 +-0.0198519 0.0357263 0.0525976 +-0.0872471 0.125707 0.0473263 +-0.0180735 0.0611876 0.0510587 +-0.0608049 0.0596005 0.019786 +0.0269735 0.121605 0.0224835 +0.033449 0.0380742 0.000639692 +-0.0174889 0.0856455 0.0572522 +-0.0298765 0.0607745 -0.022409 +-0.0371209 0.127449 0.0017956 +-0.0397839 0.0471068 -0.0160895 +-0.0245336 0.118082 0.0325274 +-0.0715136 0.0887445 0.0416191 +0.00419323 0.0880606 -0.0335488 +0.0353118 0.0520079 -0.00674902 +-0.00049849 0.101653 0.0443576 +-0.0570055 0.133804 -0.00545801 +-0.0215772 0.158162 -0.00503193 +-0.0640639 0.0351963 0.0227232 +-0.00287353 0.108795 -0.0218002 +0.0462936 0.0792458 0.00718673 +-0.00951316 0.0575536 0.0537045 +-0.0477812 0.0840973 -0.0215817 +-0.0526608 0.0504363 0.0276515 +-0.0340312 0.123966 -0.00509105 +0.00648697 0.11688 0.0387497 +0.0343069 0.0578226 0.0371782 +-0.0220745 0.169763 -0.0127977 +-0.0106374 0.0466553 -0.0295813 +0.0335656 0.114779 0.000629741 +-0.0269131 0.180109 -0.00739997 +0.0390081 0.105539 0.000161276 +-0.00175381 0.0993639 -0.0251444 +0.040909 0.0985658 0.0261474 +-0.0617277 0.159994 -0.0345941 +-0.0434138 0.111151 -0.0176174 +0.0319241 0.0700307 0.0408624 +-0.0349471 0.109117 -0.019515 +-0.0733885 0.111282 0.0466166 +0.0354121 0.0430461 -0.00417186 +-0.093028 0.117371 0.013308 +-0.0756832 0.149968 -0.01987 +0.0201512 0.0605237 0.0483852 +-0.0639979 0.158311 -0.048587 +0.0410638 0.0928718 -0.0077952 +-0.0845757 0.151155 0.0298105 +-0.0752762 0.167899 -0.0253615 +0.0587584 0.0580034 0.00517536 +-0.070971 0.166609 -0.0480118 +-0.0488701 0.10281 -0.0210946 +-0.0609926 0.128204 -0.00783795 +-0.0772884 0.155547 -0.0128979 +0.0120566 0.130535 0.0112565 +-0.0655484 0.039711 0.0142785 +-0.0465128 0.0438401 0.043121 +-0.0215234 0.0739469 0.0526909 +0.0238579 0.0490757 0.0395236 +-0.00446924 0.111373 0.0424038 +-0.0646993 0.150616 -0.0327557 +-0.0547216 0.118372 0.0366122 +0.055991 0.067441 0.024671 +-0.0164973 0.0485745 0.0476342 +-0.0243246 0.0415463 0.0540712 +-0.0679818 0.0653371 -0.00356488 +-0.0887934 0.125677 0.0460403 +-0.0672794 0.176766 -0.0591515 +-0.0201696 0.169725 -0.0202727 +0.0232197 0.0818757 -0.0256198 +-0.0521106 0.0503642 0.0236349 +-0.00378569 0.0826645 -0.03749 +0.0103848 0.03606 -0.0224393 +0.0144027 0.129384 0.00642559 +0.0154718 0.101771 0.0468044 +-0.0222044 0.174173 -0.0211642 +0.0605561 0.0664891 0.0161665 +-0.0110072 0.128401 0.0244439 +0.00979123 0.127622 -0.00353983 +-0.0586426 0.0335837 0.0110854 +-0.0324964 0.0518418 0.0373712 +0.0339681 0.114736 0.0222644 +-0.0278327 0.179989 -0.0150111 +0.0505141 0.0610459 0.0301699 +-0.084345 0.0818627 0.0244959 +-0.0780694 0.106243 0.0333548 +-0.0400434 0.149481 0.00241998 +0.0415851 0.0779004 0.0302476 +-0.0934884 0.117419 0.0203018 +0.0145324 0.0686382 0.0526166 +0.0105088 0.0546576 0.0523588 +-0.0166719 0.128014 0.0194984 +0.0111864 0.115382 -0.0163281 +0.0433489 0.0761902 -0.00378764 +0.00361131 0.0929227 -0.0324448 +0.0374765 0.0967619 0.0332563 +0.0118435 0.0418607 0.0449613 +0.00151372 0.070315 0.0563646 +-0.089555 0.092956 0.0194329 +-0.0309867 0.0458642 -0.0271867 +-0.0127025 0.0628523 -0.0366298 +-0.0211402 0.175693 -0.0149194 +-0.0410644 0.0466663 -0.0156422 +0.0229642 0.0564103 0.0453711 +-0.0689131 0.06155 0.0163724 +-0.0351956 0.0394954 0.0475468 +0.0545544 0.0478595 0.011201 +0.0307617 0.0848812 0.0428147 +-0.0854234 0.100771 0.000422318 +-0.00263926 0.0481807 -0.0301073 +0.0341204 0.0781827 0.0405841 +-0.0753485 0.151324 -0.0238793 +-0.040104 0.0359968 0.0427867 +0.00880995 0.127795 -0.00370552 +-0.0546717 0.0587861 -0.00643621 +-0.0527782 0.0338002 0.0103069 +-0.0644915 0.087588 0.0448694 +-0.0649403 0.125308 -0.00887181 +-0.0623267 0.035582 -0.00867786 +-0.0178682 0.127784 0.00598386 +-0.0477624 0.119115 -0.0139706 +-0.0272958 0.178509 -0.0169626 +-0.036773 0.0446897 0.0419462 +-0.0643144 0.0445281 -0.000908113 +0.0310215 0.117934 0.00259488 +-0.0657027 0.155342 0.0275329 +0.00812544 0.105869 -0.0206053 +-0.0845132 0.150109 0.0051703 +0.0147267 0.0343671 -0.00408399 +-0.0738652 0.150214 0.0382196 +-0.0396346 0.151103 -0.0056598 +-0.0548476 0.0665624 0.0361422 +-0.053656 0.116868 0.0345992 +0.0407085 0.0956949 -0.00580768 +-0.0407505 0.126266 0.0196745 +0.0327193 0.0632979 0.0402054 +-0.0423878 0.124291 -0.00941969 +0.0148847 0.0378033 0.0441286 +-0.0385893 0.036902 -0.00962928 +-0.0735502 0.095526 0.040254 +-0.0625469 0.169393 -0.0495927 +-0.0666556 0.0360676 0.0353877 +0.00702297 0.127188 0.0294846 +0.0123661 0.0479119 -0.026429 +0.00707963 0.0365612 -0.00575515 +0.00660499 0.0617786 0.0553203 +-0.056364 0.156406 0.0105108 +-0.02141 0.0511007 0.0448554 +-0.0417892 0.0855226 -0.0213401 +-0.0454873 0.0789625 0.0423892 +0.0541155 0.0731329 0.017974 +0.0124978 0.092313 0.0523832 +-0.0184886 0.0801089 0.0571361 +-0.0426749 0.0622014 -0.0131851 +-0.0711139 0.162407 -0.0449498 +-0.0234912 0.0474961 0.0510145 +-0.0722633 0.0367738 0.0082856 +-0.0207862 0.0638606 0.0480406 +-0.0570496 0.0562866 0.00362097 +0.023226 0.077646 -0.0258357 +0.00592655 0.0339685 0.0148513 +0.0327331 0.0942636 0.0404449 +0.0170625 0.0448711 0.043693 +0.0335588 0.0862851 0.0416032 +-0.0588111 0.0334057 -0.00501142 +-0.0718597 0.148728 0.0404251 +-0.0700765 0.0619608 0.0139832 +-0.0302069 0.174221 -0.00514504 +-0.088803 0.151599 0.0211964 +0.0155832 0.0893609 -0.0286847 +0.0270636 0.120631 0.00113345 +0.033576 0.0781814 -0.0177928 +-0.0894235 0.0942851 0.0164251 +-0.0386513 0.0344774 0.0357393 +-0.0348698 0.176878 -0.00628812 +-0.0102548 0.179004 -0.0295955 +-0.0708792 0.115031 -0.00817569 +0.0203316 0.0551325 -0.0272049 +-0.0942207 0.120117 0.0202902 +-0.0704743 0.121802 0.053345 +0.0441954 0.0847004 0.0251589 +-0.0662148 0.171945 -0.0435535 +-0.0579078 0.0494657 0.0056917 +-0.0364996 0.0789928 0.0425809 +0.00849936 0.0744764 0.056192 +-0.0263916 0.0563779 0.0383176 +-0.0556017 0.0336949 -0.0101219 +-0.0593537 0.140997 0.0335026 +-0.0941834 0.120103 0.0162919 +0.0184196 0.0442138 -0.0226321 +-0.0628603 0.033866 0.0135258 +-0.0229828 0.0566251 0.0433992 +-0.0295276 0.0383617 0.0343291 +-0.0439439 0.166904 -0.00881722 +-0.00750585 0.0633646 0.0562436 +-0.0553809 0.0486564 0.0109541 +0.0106398 0.0390088 0.044914 +0.0440071 0.0846602 -0.00280808 +-0.0184891 0.0743773 0.0548673 +0.0214529 0.0415824 -0.013701 +-0.0137336 0.0383402 0.0141683 +-0.0895155 0.0983259 0.0124123 +0.0129339 0.063079 0.0520141 +-0.0749499 0.112554 -0.00662315 +-0.0128237 0.0855345 -0.0387685 +-0.0175101 0.0381991 0.0207599 +-0.065046 0.0423247 0.012291 +-0.0570589 0.0507155 -0.000374425 +-0.0630045 0.132588 -0.00795426 +-0.0415001 0.0972709 0.0420669 +0.0313679 0.117954 0.0212794 +-0.00373539 0.0684024 -0.0350771 +-0.0896129 0.139294 0.0321884 +-0.0239769 0.0381215 0.0231095 +0.0347467 0.0670098 -0.0158076 +0.0178644 0.101883 -0.0218675 +-0.064813 0.0428917 0.034688 +-0.0618962 0.0443648 0.0286813 +0.0425837 0.100055 0.002186 +-0.056712 0.0708617 -0.0156392 +-0.066713 0.154086 0.0315791 +-0.0348246 0.0872331 -0.0245609 +-0.0155018 0.080076 0.0569734 +-0.0431381 0.128903 0.00398376 +0.0456202 0.0421608 0.019117 +-0.0637474 0.0766435 -0.0177206 +-0.070335 0.0339385 0.00479187 +-0.0452276 0.131073 0.0164666 +0.0175902 0.128186 0.00902123 +-0.0332219 0.0344808 0.0386469 +-0.000130337 0.0395577 0.0357254 +-0.0384117 0.12376 -0.00887525 +-0.0384745 0.0533908 0.0391471 +-0.0105486 0.0921685 -0.035821 +-0.0292627 0.125707 0.0105611 +-0.0740612 0.16798 -0.0430295 +-0.0794475 0.0732175 0.0216948 +-0.0525459 0.0430871 -0.00935537 +-0.0275149 0.0591111 -0.027433 +-0.0608279 0.0910686 -0.0191968 +0.0214831 0.0388585 0.0402401 +-0.0185078 0.0382343 0.0205228 +-0.0193476 0.0973552 -0.0251961 +-0.014626 0.03858 -0.00263697 +0.0364765 0.110061 0.0246179 +0.0394879 0.0499122 0.0322705 +-0.0738314 0.151256 -0.033887 +-0.0276072 0.0488225 -0.0246209 +0.0254616 0.0727112 0.0456024 +-0.054118 0.157553 -0.00229988 +-0.0100751 0.129607 0.0204184 +-0.0507271 0.115538 0.0335799 +-0.064203 0.176904 -0.0544031 +-0.0327997 0.0624741 -0.0154176 +-0.050486 0.0585567 0.0325562 +-0.0115057 0.0716604 0.0558672 +-0.041271 0.0338554 -0.00188008 +0.00149737 0.0969588 -0.0286791 +0.0222207 0.0833264 -0.0261432 +-0.0379669 0.0433397 0.0417712 +0.0433566 0.094461 -0.000803958 +-0.0485055 0.0490796 0.0381424 +-0.0398915 0.109923 -0.0189257 +-0.00650042 0.0533369 0.0530605 +-0.0902689 0.112791 0.0182006 +-0.0256204 0.0436547 -0.0287136 +-0.0432877 0.171276 -0.00598005 +0.00651867 0.0674599 0.0552944 +0.00755739 0.101711 0.046537 +0.0201484 0.0899648 -0.02526 +0.00621941 0.0351341 0.00654928 +-0.0641258 0.0611318 0.00140431 +-0.0841699 0.0979316 0.0296062 +-0.0893171 0.151601 0.0194969 +-0.0509112 0.0517382 0.0331779 +-0.0345095 0.0761212 0.0417709 +-0.0210879 0.0852798 0.0561484 +-0.0647084 0.033787 -0.00655215 +0.0485032 0.0638048 0.0293893 +0.0553414 0.0563023 0.000211666 +0.031191 0.0977616 -0.015509 +-0.0271419 0.168228 -0.0179326 +-0.0594934 0.0832968 0.0436941 +0.00712427 0.107292 -0.0202517 +-0.0670075 0.139964 -0.00790796 +-0.072631 0.169409 -0.0470274 +-0.0668128 0.0894987 -0.0177562 +-0.0638648 0.166212 -0.0336016 +-0.0305285 0.0348948 0.0458677 +-0.07494 0.0707543 0.0282709 +0.0217204 0.105135 -0.0173432 +0.0129112 0.111627 -0.0182976 +-0.0346615 0.0395406 0.0484261 +-0.0244963 0.105758 0.0419767 +-0.0275166 0.057436 0.037149 +-0.071563 0.151347 -0.0436244 +-0.00477478 0.0812297 -0.0373809 +-0.0544968 0.108447 0.0390956 +0.0191276 0.0370481 -0.0116797 +-0.0477678 0.125154 -0.0082648 +0.00907863 0.112423 -0.0191367 +-0.0148223 0.129108 0.012888 +-0.0685095 0.148391 0.0402581 +0.0438124 0.093116 0.0231537 +-0.0295173 0.175738 -0.0052542 +-0.0580932 0.155356 0.0200663 +-0.0140302 0.116852 -0.0157862 +-0.00427283 0.034883 0.0462122 +-0.0365117 0.0860935 0.0436284 +0.0428337 0.0789534 -0.0047828 +0.0143759 0.121374 -0.0108038 +-0.0478629 0.0335429 0.00613354 +0.0399096 0.0632641 -0.00677014 +0.0382182 0.0855917 -0.0147556 +-0.0586226 0.156199 0.00971481 +-0.0768739 0.0698402 0.0216311 +0.0359859 0.0660034 0.0379002 +-0.0517494 0.0782459 -0.0193853 +-0.0836382 0.0870656 -0.00453769 +0.0314216 0.0415146 -0.00377022 +-0.0633942 0.159878 -0.0495887 +-0.0762229 0.149992 -0.0128764 +0.0360298 0.0573371 -0.00970954 +-0.0378631 0.100009 -0.0219618 +-0.0631703 0.172516 -0.0516045 +-0.0893681 0.0902559 0.0194368 +0.0559048 0.0631077 0.000905369 +0.00350533 0.0758855 0.0563752 +0.0327662 0.0475454 0.0312717 +-0.0144964 0.104421 0.0432413 +-0.0925078 0.121485 0.0292837 +-0.0225266 0.123574 -0.00478676 +0.027859 0.114683 -0.0075901 +0.0336358 0.0725575 -0.0168317 +0.0133955 0.0900754 0.0528858 +-0.0320964 0.160758 -0.0138294 +-0.0665218 0.173689 -0.0465659 +-0.0314315 0.062325 -0.0194293 +0.0355057 0.0498307 0.031489 +0.0409937 0.0830284 -0.00976566 +-0.0484259 0.152144 0.0105657 +-0.0760489 0.0702549 0.00053996 +-0.0939567 0.121435 0.0142863 +0.0458128 0.0848143 0.0141708 +-0.088753 0.130866 0.00325856 +-0.0762076 0.0680671 0.0162505 +0.0295583 0.0594698 -0.0188239 +-0.0470685 0.0362699 0.0454096 +0.0515085 0.0678015 0.0264788 +0.0229945 0.0535474 0.0436214 +0.0102584 0.0738736 -0.0323425 +-0.0208293 0.0841002 -0.0385977 +0.013479 0.118711 -0.0139326 +-0.0577142 0.0723919 -0.0167433 +0.0343469 0.0740244 -0.0157906 +-0.0384895 0.050603 0.0393394 +-0.0411819 0.166655 -0.0111213 +-0.0314187 0.0525029 -0.0133876 +-0.0530781 0.119794 0.0354828 +0.0402398 0.0815675 -0.0107641 +-0.0334936 0.0817447 0.0419617 +-0.0284374 0.0381394 0.00411543 +-0.0669412 0.126769 -0.00883964 +-0.089797 0.129515 0.00524651 +-0.0607661 0.0796035 -0.0191344 +-0.0878523 0.0860961 0.00747941 +-0.00447426 0.0385132 0.0213354 +0.0222429 0.0463236 0.0406841 +-0.0167958 0.0799195 -0.0388883 +-0.0714505 0.16941 -0.0490283 +-0.00251639 0.0442645 0.0466529 +-0.0648891 0.0981501 -0.0170112 +0.00754987 0.100371 0.0472771 +-0.0694963 0.16803 -0.0520069 +-0.0920162 0.126943 0.0352547 +0.0233968 0.0355618 0.0133136 +-0.0660161 0.169448 -0.0590294 +-0.0555411 0.128344 0.0372391 +-0.0488244 0.0927169 -0.0215945 +0.0343104 0.114465 0.0209626 +-0.0501985 0.140132 0.0173988 +-0.0658096 0.0445087 0.000718728 +-0.0512856 0.136981 0.000438627 +-0.0269157 0.0703179 -0.0345192 +-0.0636699 0.112355 0.0376208 +-0.0754912 0.144221 0.0449451 +-0.062524 0.167829 -0.0475902 +0.030542 0.0511254 -0.0127382 +-0.0237052 0.0596068 -0.0321069 +-0.0547922 0.153188 0.0241866 +-0.0414961 0.0902351 0.0425692 +-0.0494981 0.0477699 0.0395132 +0.0289271 0.110086 0.0349831 +-0.0402206 0.0433137 -0.0233156 +-0.0246897 0.0560336 -0.0294195 +0.00733033 0.058195 -0.0305865 +-0.0633574 0.155908 0.0123853 +-0.0679376 0.162368 -0.0549778 +-0.0588165 0.0667309 0.0351477 +-0.0598716 0.0453976 -0.00333599 +-0.0238165 0.0812337 -0.0381734 +-0.047565 0.0370224 -0.0142792 +-0.010699 0.104948 -0.0231645 +0.0375184 0.0915609 -0.0128884 +-0.056974 0.0573893 0.011763 +-0.00401542 0.033994 -0.0206047 +0.0133173 0.0638081 -0.0300932 +-0.0402517 0.127178 -0.0024642 +0.00549546 0.0489597 0.051102 +-0.0755445 0.0668624 0.00857418 +-0.0465015 0.0643139 0.0383309 +0.00586085 0.130491 0.00185259 +-0.00908444 0.0392597 0.0359512 +-0.0724815 0.0696506 0.0297377 +-0.0588318 0.146817 0.0344225 +-0.0460118 0.126697 0.0245216 +-0.044079 0.0336811 -0.000461832 +-0.0565021 0.0946206 0.04473 +-0.0615844 0.155311 -0.0225818 +-0.0650869 0.155169 -0.00713868 +-0.089472 0.092961 0.0204149 +-0.0824758 0.0764829 0.0200121 +0.0429803 0.0916104 -0.003806 +-0.0914285 0.144743 0.0221537 +0.00329581 0.06408 -0.0335736 +-0.0554437 0.158541 0.0079523 +-0.0624977 0.0789785 0.042462 +0.00538842 0.0383711 -0.011506 +-0.0682947 0.162375 -0.0539731 +-0.0809901 0.135346 -0.00326263 +-0.0418435 0.0928469 -0.022966 +-0.0664939 0.0917254 0.0436166 +-0.0741328 0.170753 -0.0306566 +0.00842498 0.094018 -0.0295425 +-0.00912603 0.126983 -0.00460672 +-0.0144839 0.0911543 0.0563071 +-0.0247385 0.124904 0.000549003 +-0.064327 0.034541 0.0284972 +-0.0668589 0.156842 -0.00635476 +-0.0565065 0.0629707 0.0300974 +0.0567694 0.0522665 0.0211855 +0.0120332 0.0793354 0.0543348 +0.00749695 0.108523 0.0409368 +-0.0385157 0.0761871 0.0423388 +-0.0861163 0.11208 0.0430934 +-0.0554974 0.0776601 0.0434775 +-0.0519782 0.0531903 0.0286494 +0.00382899 0.0387567 -0.00467455 +-0.0437453 0.0348723 0.00757323 +-0.0876033 0.102265 0.00739801 +-0.0538689 0.152421 0.0214004 +0.0305964 0.0407785 0.0282841 +0.0465387 0.0750529 0.00819241 +-0.0664147 0.112558 0.0425241 +-0.0212669 0.123736 0.0252343 +-0.0144966 0.0485988 0.0478804 +-0.0270125 0.0891105 0.0478066 +-0.0328048 0.0886955 -0.0250147 +-0.0387676 0.0812185 -0.0204237 +-0.0179622 0.106228 -0.0225141 +-0.0121468 0.17267 -0.0267827 +-0.0155019 0.119619 0.0357771 +-0.0763961 0.0968047 0.0374195 +-0.00349611 0.0897823 0.0565938 +-0.0378917 0.0335733 -0.0268663 +-0.0464981 0.0451704 0.0419279 +0.0287219 0.115289 -0.00622497 +-0.0639806 0.135327 0.039077 +-0.045498 0.105695 0.0408472 +0.0546227 0.0668075 0.00110467 +-0.0690913 0.143 -0.0123014 +0.0356753 0.0619319 0.0374332 +-0.0141081 0.128922 0.00736661 +-0.0561495 0.0341243 0.0270787 +-0.038546 0.128369 0.00715642 +-0.0876142 0.116272 0.0465171 +-0.0722303 0.134063 0.0500963 +-0.0156039 0.0392636 -0.0272219 +-0.0361326 0.034299 0.0293707 +0.0285657 0.120967 0.00738594 +0.0111022 0.114226 -0.0170859 +-0.0218549 0.118022 -0.0129203 +0.0460721 0.0848306 0.00817735 +-0.0800935 0.138964 -0.00379173 +-0.0574953 0.0747475 0.0420563 +-0.00684325 0.130599 0.0100344 +0.020602 0.0768409 0.0509288 +0.0342103 0.0795441 0.0407378 +-0.0387822 0.0841715 -0.021953 +0.00854197 0.104373 0.044167 +0.0284181 0.0835438 0.0446794 +-0.0809789 0.0720684 0.0125422 +-0.0870329 0.152942 0.0187545 +0.0227098 0.105005 -0.0172062 +-0.0259693 0.156664 -0.00260696 +0.00630512 0.0970077 -0.026738 +-0.0293004 0.175699 -0.00559167 +-0.00764633 0.048167 -0.0303862 +-0.045682 0.0680577 -0.0156409 +-0.0545225 0.0645764 -0.00897215 +-0.0511988 0.137011 0.0243968 +-0.00714364 0.101607 -0.0236448 +0.00975279 0.123922 0.0333795 +-0.069363 0.163799 -0.0509746 +-0.000145407 0.0355938 -0.0156782 +0.0251101 0.0562501 -0.0227775 +0.047185 0.0692848 0.0242283 +-0.0610844 0.0335982 -0.00747508 +-0.0215973 0.0387212 -0.015323 +0.00621551 0.0824281 -0.0337654 +-0.0768656 0.120803 -0.0071099 +-0.072234 0.147352 -0.0242316 +-0.0251276 0.16525 -0.016804 +-0.00350994 0.110634 -0.0212045 +-0.051883 0.143128 0.0183637 +0.0388034 0.0687739 -0.0117998 +0.0522529 0.049588 0.0243549 +-0.0484974 0.0974063 0.0440017 +0.0292296 0.08295 -0.0208022 +0.0215976 0.121636 0.0305088 +-0.0576661 0.143885 0.0324483 +-0.062789 0.152113 -0.0295989 +-0.0686144 0.0632303 0.0220506 +-0.0812769 0.136213 -0.00276757 +-0.0898521 0.112924 0.020019 +0.0399617 0.0984844 -0.00581339 +-0.0197337 0.0627381 -0.0357065 +-0.0715197 0.0915892 0.0417662 +-0.0176796 0.037751 -0.0173923 +-0.0034931 0.0519852 0.0535284 +-0.0477302 0.0753108 -0.0175447 +-0.0720239 0.158203 -0.0389152 +0.012618 0.0562866 0.0514947 +-0.00341476 0.129699 0.000449344 +0.00761699 0.0345564 0.0219225 +0.0197796 0.101487 -0.0214363 +-0.0718751 0.150885 -0.0428436 +0.0226049 0.0994887 0.0451477 +-0.0275114 0.0379423 0.00991362 +0.0449899 0.0861501 0.00118902 +-0.0724942 0.0928706 0.0413391 +-0.0668563 0.151928 -0.044894 +-0.00758529 0.0395118 0.037828 +-0.0717266 0.143977 -0.0139286 +-0.0485566 0.0446478 -0.0101195 +-0.0498454 0.098516 -0.0220736 +-0.0687032 0.155739 0.000270534 +0.0305837 0.118921 0.00529549 +0.0181431 0.0408036 0.0434958 +-0.0644897 0.161538 -0.0184978 +-0.082117 0.127195 0.0520765 +0.0194801 0.0975854 0.0469408 +-0.0593004 0.0460479 0.0107053 +-0.051494 0.097382 0.0437255 +-0.0629042 0.151488 -0.0283316 +-0.0520794 0.132523 0.0317044 +-0.0086348 0.124041 -0.00947049 +-0.0408505 0.0971293 -0.022095 +-0.0501242 0.144161 0.00100252 +-0.0374501 0.127748 0.0031441 +-0.0242006 0.107431 -0.0217757 +-0.0185705 0.0597254 0.0501838 +0.0506634 0.0663167 -0.000433246 +-0.0778197 0.0981202 0.035968 +-0.0344836 0.0604651 0.0395531 +0.0141481 0.100268 -0.0227789 +-0.0201048 0.0920391 0.0535514 +0.0405223 0.0582848 0.0307512 +-0.0234669 0.126337 0.0156088 +-0.0879353 0.140547 0.0390784 +0.0495003 0.0691238 0.025332 +-0.0550177 0.034541 0.0409139 +-0.0558687 0.156831 -0.000812957 +-0.033113 0.162236 -0.0143657 +-0.0040053 0.127195 0.0298616 +0.00247063 0.0977635 0.0514765 +-0.0372934 0.126961 0.0179492 +0.00433485 0.120467 -0.0137766 +0.00930976 0.0595795 -0.0301167 +0.0437257 0.0902921 0.0241674 +-0.0363397 0.0344675 0.0327184 +0.000637516 0.0346318 0.0420689 +0.0283669 0.0563832 0.0408635 +-0.0890554 0.136524 0.0291987 +-0.0526322 0.0603614 -0.00917272 +-0.0555168 0.0610654 0.0262173 +-0.0398616 0.102806 -0.020798 +-0.0554959 0.0959795 0.0436611 +-0.0625279 0.0435825 0.012569 +-0.012539 0.0432081 0.0504383 +-0.0295399 0.0777526 0.042206 +0.0250153 0.0699448 0.0449142 +0.0418505 0.0929433 -0.00581175 +0.00749052 0.0923616 0.0534281 +-0.0508873 0.105589 -0.0194525 +-0.0577516 0.0752955 -0.0185275 +-0.0341251 0.166782 -0.00385534 +0.0204867 0.0961927 0.0470968 +-0.0860696 0.110951 0.0368762 +-0.0623929 0.0445563 0.039213 +0.0212831 0.0679005 -0.027755 +-0.0459741 0.03576 0.00812075 +-0.0128757 0.105895 -0.0226089 +-0.0713104 0.164383 -0.0152637 +-0.00570768 0.129479 0.0248833 +-0.0759611 0.0715461 -0.00349282 +-0.0154987 0.0485755 0.0476399 +-0.0271627 0.125166 0.0172175 +-0.052909 0.0559665 0.0126205 +0.0445771 0.0875296 0.0231612 +-0.0679602 0.132601 -0.00851511 +-0.0735016 0.14861 -0.0288774 +0.0321816 0.0968615 0.0396789 +-0.0617331 0.156868 -0.0205842 +-0.0310423 0.0467686 -0.0260418 +-0.0285615 0.0382432 0.0537594 +-0.0934477 0.121479 0.0262963 +-0.0220941 0.0710555 0.0505203 +-0.0299308 0.0348009 0.0443343 +-0.0161025 0.0382877 0.022773 +-0.0328698 0.101492 -0.0223548 +0.0454742 0.0412367 0.0106737 +-0.028101 0.0890412 0.0460663 +-0.0440047 0.127209 -0.00443148 +0.0593281 0.0649895 0.00613553 +0.0127896 0.130142 0.00867876 +0.0391468 0.0887707 0.0338836 +0.0223265 0.0535979 0.0444334 +-0.0897234 0.125377 0.0042981 +0.0287018 0.0447465 0.0341399 +-0.0924969 0.121493 0.0302824 +-0.0717492 0.0821807 -0.0161321 +-0.0756445 0.156326 -0.00458549 +0.00148921 0.104407 0.0433078 +-0.0361895 0.0355992 0.0192692 +-0.0662775 0.0734947 0.0382764 +-0.0730867 0.169281 -0.0259539 +-0.00640617 0.0386668 0.0262232 +-0.053287 0.0610602 0.0282137 +-0.0820828 0.0871799 0.032118 +-0.0474969 0.0477925 0.0396528 +0.0505278 0.0445977 0.0162148 +0.0314571 0.0378867 -6.50808e-05 +0.0244076 0.117212 -0.0083203 +0.0193833 0.052146 -0.0261511 +0.0213663 0.0593118 -0.0264401 +-0.0223265 0.0696009 0.0493961 +-0.0803036 0.100707 0.0327244 +0.0516025 0.0650498 -0.00116678 +-0.0572939 0.0597447 0.0223608 +0.0272121 0.088765 -0.0222319 +-0.0760712 0.152304 0.0343668 +0.0287584 0.0359201 0.00291435 +-0.00327774 0.125061 -0.00864173 +-0.0492123 0.134029 0.0252722 +-0.0157732 0.0799164 -0.0389165 +0.0137184 0.0699424 0.0531931 +0.0181521 0.124421 0.0277923 +0.0195548 0.127052 0.0182976 +-0.0788582 0.171448 -0.0399026 +-0.0820398 0.150272 0.03397 +0.0134064 0.0478115 -0.0258783 +-0.0637307 0.0344451 0.0269565 +0.00741391 0.0920665 -0.0315473 +0.0394368 0.0688303 -0.0107955 +-0.064416 0.154996 0.00586526 +-0.066663 0.144317 -0.015468 +0.0353499 0.042038 0.028119 +-0.00141558 0.03896 -0.0133998 +-0.0338581 0.0334994 -0.0260028 +0.0142608 0.0359816 -0.0203372 +-0.0776263 0.175005 -0.043567 +-0.0525965 0.0345626 0.0431188 +0.0335361 0.0372674 0.00265432 +0.0308902 0.0632769 0.0410591 +-0.0895335 0.144692 0.0121557 +-0.0612693 0.0337096 0.0122134 +-0.00661675 0.0976221 -0.0294208 +-0.0504448 0.128295 0.0323161 +-0.0571803 0.062383 0.0287138 +-0.0529076 0.136719 0.0287121 +-0.0247725 0.0390001 0.0365321 +-0.00277907 0.0769693 -0.0364873 +-0.0894255 0.0956236 0.0134235 +0.0183336 0.0566072 -0.0279953 +-0.0945117 0.124183 0.0222757 +-0.0670539 0.154574 0.0299913 +0.0377471 0.104052 -0.00484079 +-0.0277489 0.0877005 0.0471838 +-0.0465602 0.122394 -0.0114017 +0.0512982 0.0545874 -0.00353058 +-0.0255237 0.116678 0.0329121 +-0.0558854 0.0479468 0.0296668 +-0.0384602 0.127124 -0.00162988 +0.00941217 0.040392 -0.0233006 +-0.0788042 0.109939 0.0428886 +-0.00952807 0.0385271 0.0257083 +-0.0151514 0.041952 0.0515406 +-0.0896796 0.114349 0.0422656 +-0.0130415 0.0639857 0.0543784 +-0.0709434 0.168021 -0.0490096 +-0.042508 0.0562794 0.0398023 +-0.0723361 0.155599 0.00334302 +-0.0804662 0.0800422 -0.00555374 +-0.0320486 0.122707 -0.00572396 +0.0215589 0.120837 -0.00625561 +0.0181166 0.118416 -0.011621 +-0.0473179 0.0397941 -0.0120624 +-0.0797756 0.0706254 0.0155549 +0.00931098 0.130351 0.0216675 +-0.0082877 0.0388999 0.0310374 +-0.0475138 0.156385 0.00914965 +-0.000599084 0.0391028 -0.0250468 +-0.0114889 0.103024 0.0436761 +-0.0176179 0.0378672 -0.0275216 +-0.0423688 0.123346 -0.0104204 +-0.0387324 0.156611 0.00532643 +0.0047217 0.0940547 -0.0316305 +-0.0728512 0.152626 -0.0378881 +-0.00186255 0.103074 -0.0227526 +0.0529842 0.0692584 0.0249064 +-0.0792715 0.107765 0.0320009 +0.0324709 0.0353558 0.0097886 +-0.083008 0.154405 0.0171359 +0.0123335 0.0581189 -0.0294366 +-0.0570144 0.0335354 0.00427397 +-0.0520347 0.0349067 0.0446489 +0.0239781 0.084017 -0.0250643 +0.0450177 0.0875447 0.000184881 +-0.00260981 0.0434451 -0.0255195 +-0.00349422 0.0718336 0.0581766 +-0.0470698 0.154668 -0.0068409 +-0.0764224 0.152995 0.0327283 +-0.0382612 0.0345343 0.0375294 +-0.00240135 0.128537 0.0275513 +-0.0924704 0.117461 0.033305 +-0.0714888 0.127424 0.0521873 +-0.0439578 0.12961 0.0140149 +-0.0725837 0.0763091 -0.0123208 +-0.0595593 0.0341176 0.0246105 +-0.00343172 0.0385593 0.0215021 +0.0311358 0.0782102 0.04331 +-0.0494476 0.122586 0.0319364 +-0.0665119 0.0621274 0.0216726 +0.0544596 0.058178 0.0276568 +-0.0495972 0.118308 0.0316941 +-0.0314789 0.174225 -0.0034609 +-0.0728795 0.116451 -0.00740226 +0.00249754 0.108619 0.0424686 +0.0280724 0.0678498 -0.0217391 +-0.0278862 0.165359 -0.00713919 +-0.0117661 0.182389 -0.0287496 +-2.83383e-05 0.0370817 -0.0151505 +-0.0721646 0.155417 -0.0379087 +0.0297368 0.100819 0.0396604 +0.0224793 0.124852 0.00370943 +-0.0278708 0.104417 -0.0229648 +-0.0388092 0.0372561 -0.0289196 +0.0393949 0.0519685 -0.00680892 +-0.0114113 0.0387598 0.0305221 +-0.0668989 0.0372019 0.0312012 +-0.0634206 0.167809 -0.0425955 +-0.0738654 0.102167 -0.0123482 +0.000515293 0.09714 -0.0288497 +0.00321341 0.034575 0.0192003 +-0.0313524 0.158102 0.00192058 +-0.0879015 0.148743 0.00925863 +-0.0552908 0.158294 -0.000771282 +0.00144018 0.127924 -0.00374837 +-0.0374859 0.0491992 0.0393813 +0.0225251 0.100664 -0.0205487 +-0.0149527 0.0339242 -0.0208085 +0.00432828 0.0582523 -0.0314184 +0.0463488 0.0792498 0.00918224 +-0.0375014 0.105589 0.0387333 +-0.062506 0.149124 -0.0145611 +0.00329475 0.129383 -0.00133175 +-0.00689488 0.0384553 0.0136435 +-0.0384034 0.0343958 0.0323426 +-0.062465 0.163086 -0.0495893 +-0.0639661 0.0690471 0.0355624 +-0.0131121 0.0626059 0.0545133 +-0.0449324 0.0358062 0.00829108 +0.0406445 0.0871881 -0.0107716 +-0.0230795 0.0932192 0.0494322 +-0.0186385 0.0465274 -0.0284289 +-0.0571213 0.0576422 0.00058007 +-0.0705055 0.0343308 -0.00278598 +-0.0578994 0.112578 -0.0159728 +-0.0106785 0.0383169 0.0202432 +-0.0593417 0.119814 0.0404797 +-0.0505461 0.0403717 -0.011217 +-0.0453989 0.0342539 -0.0215146 +-0.011074 0.178648 -0.0249266 +-0.0523515 0.0582314 0.0273813 +-0.0254941 0.0486931 0.0489695 +0.0374187 0.0855245 -0.0157145 +0.0453002 0.0932088 0.00816687 +-0.0612769 0.133878 0.0377403 +0.00152786 0.0745369 0.0570999 +0.0245032 0.122816 0.00162459 +-0.00938967 0.130192 0.0162996 +-0.0703883 0.0339052 -0.000577152 +-0.0733601 0.156855 -0.0299134 +-0.0171472 0.166778 -0.0196136 +0.0116998 0.0819851 0.0538895 +-0.0502854 0.11522 -0.0158495 +0.050316 0.0546413 -0.00421167 +-0.0667548 0.115724 0.0491405 +-0.0609102 0.120922 -0.00906619 +-0.0866023 0.111811 0.0414218 +-0.0669546 0.128237 -0.00895731 +-0.0654028 0.177571 -0.0533847 +-0.0437352 0.0753785 -0.0184868 +-0.0329958 0.0793378 -0.0275102 +-0.00469334 0.101051 0.0441761 +-0.0137252 0.0671481 -0.0375067 +-0.0531289 0.138241 -0.000765665 +-0.0361236 0.163705 -0.0141169 +-0.0249029 0.0722756 0.0462509 +-0.0119797 0.0383916 0.0235247 +-0.0246067 0.157782 -0.00250374 +-0.0748771 0.109206 -0.00842538 +-0.0314894 0.0845774 0.0421902 +-0.0849159 0.123546 -0.00333555 +0.052731 0.0672551 0.000627241 +0.0453449 0.0710055 0.0220458 +-0.0665131 0.0419133 -0.00333369 +0.0194908 0.113962 0.0368661 +-0.0674148 0.142782 -0.0112266 +-0.0931203 0.121503 0.0403997 +-0.0084076 0.0932235 -0.0348708 +0.0125532 0.0900642 0.0534187 +0.0432399 0.0747788 -0.00379578 +0.00477967 0.130785 0.0214562 +0.0461172 0.0759623 0.0190037 +-0.0870553 0.118453 0.000244653 +0.00651257 0.056103 0.0529931 +-0.0623783 0.167824 -0.0485899 +-0.0258496 0.0864897 0.0509722 +0.0602482 0.0581464 0.0141691 +-0.0923082 0.120116 0.0282975 +0.00750533 0.0660627 0.0552439 +0.060666 0.0609482 0.0151682 +-0.0674289 0.114212 0.0481237 +-0.0514122 0.146842 -0.00193867 +-0.0768562 0.117877 -0.00659127 +-0.0825551 0.152911 0.00706582 +-0.0839745 0.0804809 0.0225006 +0.041166 0.0819934 0.0314416 +-0.0655442 0.155124 -0.0481259 +-0.0384965 0.0620329 0.0413169 +-0.0627141 0.159943 -0.0425974 +-0.0767176 0.159013 -0.0120318 +-0.0856607 0.0832001 0.00448541 +-0.0278526 0.181478 -0.0120494 +0.0114013 0.0419017 -0.0239008 +0.0243085 0.123343 0.00295625 +-0.0474528 0.119349 0.0293599 +-0.0304487 0.0334492 -0.0290445 +-0.0696417 0.0422524 0.0026904 +-0.0644028 0.146849 -0.019975 +0.0503218 0.0589081 -0.00447436 +0.0476236 0.0467222 0.0264254 +-0.0303554 0.117939 -0.0127791 +0.0338995 0.0591949 0.0383404 +-0.0746238 0.166812 -0.0222329 +-0.0186858 0.118957 -0.0119398 +0.0507854 0.0445928 0.0142166 +-0.0844285 0.0832425 0.0264792 +0.0593532 0.0636103 0.0211835 +-0.073524 0.16243 -0.0369561 +-0.0525841 0.0574366 -0.00812203 +0.0221795 0.040783 0.0405434 +0.0281375 0.0902298 0.0443276 +0.0214874 0.0892516 0.0486681 +-0.0702718 0.110271 0.0410027 +0.0386345 0.0753534 0.0347776 +-0.0646561 0.0344494 0.0319916 +-0.00663677 0.109707 -0.0221975 +-0.029185 0.0634891 -0.02746 +-0.0671416 0.145678 -0.0214457 +-0.0135214 0.0353632 -0.0181023 +-0.0376703 0.125135 -0.00632213 +0.0114179 0.0489704 0.047894 +-0.0923638 0.118682 0.00930083 +0.0483264 0.0430255 0.0152188 +0.00550628 0.0441375 0.0457857 +-0.0652333 0.0338884 0.0112389 +0.0482587 0.0460086 0.000382582 +0.0586626 0.0538435 0.0111779 +-0.000982862 0.0386959 0.0236934 +-0.0245147 0.119422 0.0312229 +-0.0155858 0.183111 -0.0209193 +-0.0867126 0.0819778 0.0134931 +-0.0785905 0.0980977 0.0353146 +-0.0907184 0.115992 0.0263684 +-0.0614986 0.158424 -0.0305881 +-0.090971 0.141997 0.0221703 +0.049023 0.0722611 0.00748575 +-0.0495658 0.0446328 -0.00989725 +0.000576288 0.0353387 0.0179719 +-0.00263978 0.131127 0.015882 +0.0260716 0.115341 -0.00830033 +-0.0571034 0.0535249 0.00264062 +-0.0471993 0.162132 -0.00733312 +-0.0750917 0.0664543 0.00723246 +-0.0617686 0.159987 -0.035592 +-0.0267825 0.079725 -0.0369434 +-0.061465 0.0438948 -0.0044823 +0.0457823 0.0862054 0.00618349 +-0.065804 0.0609905 0.0192925 +0.0197913 0.0781802 0.0515303 +0.0377275 0.0928421 0.0353087 +-0.0179367 0.12631 0.000372783 +0.0437374 0.0902563 -0.00280325 +-0.00792408 0.0384127 0.0189094 +0.0556221 0.0493651 0.00819776 +0.00641397 0.0375702 -0.0238447 +-0.0274537 0.0485303 0.0479606 +-0.0610187 0.152669 0.0336579 +-0.078775 0.170042 -0.0371202 +0.0527843 0.0462443 0.0112063 +0.0173793 0.0631583 0.049653 +-0.0359664 0.162375 -0.00125909 +-0.0559722 0.134715 -0.00446003 +-0.0484961 0.113915 0.0346796 +-0.00776872 0.0756191 -0.0375185 +-0.085947 0.104892 0.00437979 +-0.0866438 0.152376 0.0233632 +-0.0520552 0.0559741 0.0276222 +0.060777 0.0637293 0.0161648 +-0.0634196 0.15027 -0.0277557 +-0.0514307 0.12406 0.0344067 +-0.00747581 0.101243 0.0443796 +-0.0489909 0.133982 0.00241474 +-0.0174145 0.118412 -0.0133815 +0.0106556 0.0345311 0.0225637 +0.0207029 0.0950845 -0.0226908 +-0.000596635 0.0433605 -0.0249736 +-0.0628762 0.0967673 -0.0179048 +0.0102648 0.0752773 0.0552991 +-0.0281556 0.17562 -0.0175208 +-0.00541266 0.130784 0.0163058 +-0.0708319 0.0345819 -0.00103676 +-0.0204551 0.0879984 0.0554627 +-0.0640233 0.0347562 0.0388023 +-0.0255632 0.0589456 -0.0304089 +-0.0856596 0.0858717 -0.000523015 +0.000533962 0.0773889 0.0579724 +-0.0911932 0.147489 0.0241289 +-0.0536699 0.0338623 0.0207675 +-0.0330023 0.0807475 -0.0275162 +-0.0598207 0.148547 -0.00150215 +-0.0292722 0.116973 -0.0137779 +0.0389134 0.0603588 -0.00677348 +0.00149281 0.111426 0.0424095 +-0.0567184 0.0723883 -0.016755 +-0.0557727 0.0333786 -0.00437552 +-0.0514926 0.0503999 0.033682 +-0.00426203 0.129106 -0.000929037 +0.0209419 0.0535563 0.0459234 +-0.0665114 0.0931036 0.0430214 +-0.0313926 0.112895 -0.0174931 +-0.0358232 0.127618 0.00522677 +-0.0126066 0.128516 0.0224096 +0.0435838 0.0705579 0.0258591 +-0.00308793 0.0379842 0.0148477 +-0.0348769 0.105695 -0.0204457 +-0.0787914 0.0724652 0.0224838 +0.022277 0.0678419 -0.0269851 +0.021809 0.1242 0.000142479 +0.00528322 0.0682375 -0.0327226 +-0.0813944 0.0817284 0.031574 +0.0109283 0.0616839 0.0526314 +-0.0233033 0.0429927 0.0537933 +0.0135067 0.1196 0.0353985 +-0.0856435 0.0805169 0.00650219 +-0.0555634 0.0386377 0.0471443 +-0.0925953 0.129683 0.0262582 +-0.0908852 0.150208 0.0181276 +0.0274474 0.0591653 0.0430806 +-0.0143101 0.113201 -0.0178955 +-0.0695125 0.145609 0.0428052 +0.002489 0.103843 -0.0219556 +0.034067 0.0981569 0.0371457 +-0.0663951 0.140334 -0.00790584 +-0.0462961 0.162745 -0.00789878 +0.0286561 0.108194 -0.012625 +-0.0852651 0.14863 0.0333956 +-0.0290693 0.0677067 -0.0294879 +0.0414097 0.104256 0.00616512 +-0.0693963 0.0393871 -0.00132267 +0.0255358 0.0435625 -0.00763706 +0.0562825 0.0508178 0.0201866 +-0.0867977 0.144597 0.036443 +-0.0252829 0.0751884 0.0479421 +-0.0224834 0.0681349 0.0481925 +0.0575606 0.0537805 0.0213286 +0.00845802 0.129083 -0.00108013 +0.0113649 0.0538487 -0.0294289 +-0.0501252 0.138572 0.00341268 +-0.074971 0.152728 -0.0179063 +-0.0312043 0.0422041 -0.0297469 +-0.0846068 0.0791109 0.00453817 +-0.0536323 0.0602894 -0.00841331 +-0.0171387 0.171259 -0.0162017 +0.0409378 0.0397959 0.0185201 +-0.0781974 0.153502 0.00273811 +-0.0824089 0.107319 0.0275588 +-0.0723216 0.169832 -0.0271166 +-0.0716176 0.109058 0.0379622 +0.000146179 0.101649 -0.0227639 +-0.0522094 0.0517797 0.0246371 +0.0118426 0.0562933 0.0521284 +-0.0625131 0.11843 0.0430565 +0.00861514 0.0345206 0.0221572 +0.0244049 0.0741131 0.0475942 +0.00453562 0.128718 -0.00265628 +0.0138565 0.129875 0.0119166 +-0.070378 0.149076 -0.0386493 +0.0445575 0.0847276 0.0241575 +-0.0157056 0.0599572 -0.0358177 +-0.0558806 0.154815 0.016521 +0.000379078 0.127909 -0.00372478 +0.0266539 0.122169 0.0209401 +-0.0679962 0.167786 -0.0255431 +-0.0920426 0.126958 0.0362532 +-0.0594207 0.0398239 0.0196241 +0.0364837 0.0469104 0.0311466 +-0.0568261 0.139571 0.0318926 +-0.053019 0.141421 -0.000504477 +0.0435234 0.0433666 0.0249665 +-0.0277895 0.06758 -0.0314768 +0.0362342 0.0398741 0.0247937 +-0.0212837 0.0381384 0.0164325 +0.0257555 0.0994695 0.0426751 +0.0399676 0.101315 -0.00381805 +-0.0152962 0.0433291 0.0513434 +0.0573469 0.0674291 0.0231143 +-0.0520755 0.0475411 0.0216528 +0.0328365 0.0876935 -0.0188869 +0.0143568 0.0522918 -0.0274834 +-0.0725069 0.145589 0.0436497 +0.00651279 0.0647152 0.0557475 +0.00953758 0.128186 0.0275085 +-0.052193 0.119749 -0.012566 +-0.0686715 0.165205 -0.0529941 +-0.0896326 0.092928 0.0134378 +0.0289756 0.116666 0.0289439 +-0.0642519 0.118577 0.0476092 +-0.0257723 0.182903 -0.0115399 +-0.0844232 0.100698 -0.00156743 +-0.0206629 0.0479548 -0.0285983 +-0.0532393 0.0448331 0.0206817 +0.00230145 0.0612209 -0.0331693 +0.020878 0.117607 -0.0107498 +-0.0818428 0.103274 -0.0045788 +-0.0184976 0.101625 0.0435583 +-0.0305 0.0674574 0.0390127 +-0.0485029 0.0452121 0.0424266 +-0.0929791 0.124188 0.0282747 +-0.0302252 0.0523701 -0.0173649 +0.00350969 0.0897377 0.0556751 +-0.0219245 0.161037 -0.00376903 +-0.0619129 0.0458194 0.037691 +-0.00376935 0.0769928 -0.0369082 +0.0411698 0.0806497 0.0314486 +-0.0115592 0.100495 0.0448823 +-0.063251 0.15135 -0.00497603 +-0.0271171 0.059077 -0.028426 +0.0053978 0.0390279 -0.0240405 +-0.0676491 0.065582 -0.00407795 +-0.063925 0.0448804 0.0097039 +-0.00969446 0.0598719 -0.0345693 +-0.0860777 0.110355 0.00735249 +-0.0152136 0.174214 -0.0186712 +0.00434041 0.0596672 -0.031584 +0.0213842 0.125707 0.00472943 +-0.0835093 0.13127 0.0505027 +0.0165672 0.128654 0.015768 +0.0285444 0.0459645 -0.0070843 +-0.0721129 0.15894 -0.00533295 +-0.0525858 0.147787 0.0204037 +-0.0465092 0.0776139 0.042786 +-0.00623267 0.10133 -0.0233757 +0.0572046 0.0564633 0.00317356 +-0.0122436 0.112093 -0.0187249 +0.00624351 0.0810351 -0.0338384 +0.0462734 0.0764388 0.00619417 +-0.0168246 0.0855538 -0.0389836 +-0.0869607 0.111738 0.00633151 +-0.0370469 0.152854 -0.00726744 +0.0405338 0.105622 0.0141627 +-0.0164738 0.10119 0.0439603 +-0.0854876 0.0791977 0.0105097 +0.0272664 0.0760665 -0.0234764 +-0.0438604 0.102816 -0.0213031 +0.00350403 0.0533854 0.0535456 +0.0169167 0.127898 0.0201801 +0.0184941 0.0838333 0.0510457 +-0.00847869 0.123725 0.0338017 +0.0387498 0.0659721 -0.0107606 +-0.0437917 0.0422818 -0.0193111 +-0.0126098 0.0384695 0.0251301 +0.0135799 0.0887495 0.0531421 +0.00935699 0.131232 0.0131197 +0.0135065 0.109861 0.0400106 +-0.0850182 0.0831804 0.00149618 +-0.0740846 0.0657329 0.0152043 +-0.0265661 0.0706408 0.0422848 +-0.0847398 0.106178 0.00238203 +-0.0345218 0.0818067 0.0425242 +-0.0428232 0.12861 0.00263817 +0.0121427 0.100268 -0.0226753 +0.0447259 0.0749152 0.000215102 +0.0232974 0.0648673 -0.0252072 +-0.0822784 0.0951136 -0.0065238 +-0.0614844 0.158425 -0.031588 +-0.0521163 0.12407 0.0351298 +-0.0424777 0.104302 0.0409096 +-0.00407779 0.0345848 -0.0173958 +-0.0284243 0.0487716 0.0462084 +-0.0184625 0.0729785 0.0545802 +-0.015609 0.128774 0.0111587 +-0.0694586 0.153877 0.0321166 +-0.0484639 0.149215 0.0104667 +-0.0526002 0.146245 0.0194042 +-0.0263327 0.111444 -0.0179843 +-0.0331847 0.0445939 -0.0279862 +-0.0538972 0.104145 -0.0195691 +-0.0294956 0.124519 0.0193203 +0.0346714 0.0916012 0.0397133 +-0.0247788 0.0379568 0.0140716 +-0.0643494 0.153359 -0.00540282 +-0.00557634 0.0347311 -0.0241073 +-0.0258097 0.0766327 0.0484243 +-0.00867178 0.0387364 -0.0146344 +-0.0783855 0.0873596 0.0368663 +-0.0346878 0.0651683 -0.0148251 +0.0404983 0.0499404 0.0324741 +-0.0738591 0.0964804 -0.0142486 +0.0267717 0.107644 -0.0140409 +-0.0404701 0.104257 0.0399236 +-0.0381489 0.0448685 -0.0242105 +-0.0095211 0.045789 0.0480158 +-0.0311715 0.171175 -0.0164295 +-0.0695038 0.173637 -0.0418473 +-0.0823392 0.111551 0.0443764 +-0.0227424 0.0655154 -0.0353045 +-0.0508568 0.0999518 -0.0219402 +-0.0589296 0.1241 0.041105 +0.000488727 0.108629 0.0427903 +-0.0412638 0.110187 -0.018624 +-0.0147098 0.0613984 -0.0362354 +0.0459347 0.0413813 0.0124396 +0.00323976 0.128177 0.0281353 +-0.0743879 0.143042 -0.00684484 +-0.0264004 0.0577755 0.0382862 +-0.00692431 0.038377 0.0191445 +-0.0864209 0.080641 0.0154973 +-0.077237 0.0721326 0.0266059 +-0.0686311 0.136892 0.0464956 +-0.0792347 0.153789 0.0287725 +-0.0537819 0.0840761 -0.0215562 +-0.0117053 0.0909225 -0.0365538 +0.0365178 0.0541167 0.0317039 +-0.0616584 0.114654 -0.0131207 +0.0390548 0.0884875 -0.0128108 +-0.0887111 0.101017 0.0193703 +0.0162822 0.0666125 -0.0295206 +-0.064714 0.0600149 0.00783247 +-0.0175786 0.180143 -0.0185198 +-0.0408442 0.152602 -0.00723164 +0.0352097 0.0379704 0.0208298 +-0.0618294 0.0342021 0.0275686 +0.0185142 0.0412688 -0.0207398 +-0.0195264 0.159643 -0.00556617 +0.0318624 0.0768516 0.0425881 +0.0347681 0.0641816 -0.0148052 +-0.0479777 0.147732 0.00938552 +-0.0126851 0.0570335 -0.0344182 +0.00495057 0.130435 0.00152594 +-0.0486835 0.0664435 -0.0136416 +-0.0356438 0.0562686 -0.010631 +-0.084499 0.088474 -0.00355332 +-0.0503848 0.141583 0.00270968 +-0.0858587 0.125737 0.0487678 +-0.0426772 0.14763 -0.000244299 +-0.0378831 0.156583 0.00477982 +0.00350659 0.0388434 0.0262887 +-0.0887855 0.102363 0.0143842 +-0.0646755 0.142507 0.0398915 +-0.0909161 0.13091 0.00724248 +-0.055962 0.0343325 0.0321978 +-0.0723047 0.162425 -0.0409479 +-0.0696851 0.11012 0.0394623 +-0.083003 0.0803028 0.000504056 +0.0247589 0.0435818 0.039017 +-0.0218764 0.182954 -0.0200262 +0.0236525 0.124901 0.0169603 +0.0463445 0.0561751 -0.00589814 +-0.0218308 0.117001 -0.0138605 +-0.0747558 0.067415 0.00253432 +-0.0625552 0.176839 -0.0611671 +-0.0660641 0.0384249 0.0148213 +-0.000107958 0.12991 0.000141982 +-0.054081 0.071101 0.0394438 +-0.00558231 0.0361988 -0.024956 +-0.0684451 0.117201 0.0519481 +0.0333957 0.0461492 -0.00598528 +-0.0146115 0.03779 -0.0266447 +0.00133195 0.0385877 -0.00128958 +-0.0348901 0.0738831 -0.020486 +0.0373363 0.105992 0.0277645 +0.0084546 0.131034 0.0184964 +-0.0324996 0.0498708 0.0403614 +-0.0444999 0.0719382 0.0422118 +0.0369643 0.0405549 -0.00158789 +-0.0354954 0.0733233 0.0419636 +-0.0457735 0.0826328 -0.0207974 +0.00732527 0.0595899 -0.0304419 +-0.0874242 0.111776 0.00733879 +-0.0592783 0.115234 -0.0137669 +-0.0928043 0.11882 0.0332998 +-0.0116325 0.0385039 0.00355749 +-0.0398903 0.0344806 0.00870734 +-0.0722375 0.138308 0.048356 +0.0262204 0.0344897 0.0111735 +-0.0200589 0.0348282 0.0498878 +-0.0246346 0.0382795 0.00294393 +-0.0889887 0.147168 0.0287003 +-0.0574968 0.1584 0.00209189 +-0.0329778 0.0448862 0.0466174 +-0.0605914 0.0623502 0.0262507 +-0.0785506 0.0699758 0.0176232 +-0.0362833 0.17342 -0.00108904 +-0.0627087 0.161508 -0.0465953 +-0.0397898 0.0855606 -0.0217035 +-0.0064056 0.10047 0.0472751 +-0.0646908 0.166411 -0.0300665 +-0.0508247 0.0941547 -0.0216781 +0.00716942 0.125754 -0.00749941 +0.000702847 0.0392103 -0.00758345 +-0.0407154 0.0462046 -0.018322 +-0.0401921 0.166668 -0.0117758 +0.0124864 0.11785 -0.0149995 +-0.0887986 0.114294 0.0264066 +-0.0614886 0.156862 -0.0235899 +0.0301602 0.0673157 0.0417954 +-0.0697061 0.156309 0.0202886 +0.0512708 0.0700979 0.0242688 +-0.00208274 0.0390983 0.0321346 +-0.091649 0.146116 0.0221478 +-0.0423664 0.0392174 0.0434612 +-0.0288487 0.0944704 -0.0247187 +-0.0724483 0.148649 -0.034807 +0.0270658 0.12207 0.0196667 +-0.0370838 0.159234 -0.0122889 +-0.00750248 0.0619634 0.0561006 +-0.0533112 0.162693 5.53048e-05 +-0.00276518 0.0755391 -0.036261 +-0.0186814 0.0539839 -0.0321072 +-0.0875792 0.134961 0.00324767 +0.0120758 0.0363869 0.044646 +-0.0753955 0.0901087 0.0394375 +0.0338247 0.108829 -0.00728203 +-0.0444976 0.0789577 0.0421738 +0.0235632 0.0862591 0.0483322 +0.0465947 0.0750442 0.0151558 +-0.0733825 0.135448 0.0501828 +-0.0150618 0.0383341 0.0229424 +-0.00891681 0.0351082 0.0414685 +0.0315143 0.0525771 -0.0117816 +0.045527 0.0791773 0.00219591 +-0.0464963 0.076159 0.0423522 +-0.0708979 0.122353 -0.00862039 +-0.08595 0.110378 0.0213654 +-0.0783775 0.103446 0.0335489 +-0.0758029 0.111217 -0.00664466 +-0.0554837 0.0805968 0.0447827 +-0.0353516 0.166776 -0.00214363 +0.0562979 0.0633024 0.00123284 +0.0465716 0.0440008 0.0231655 +-0.0476369 0.0591928 -0.0118235 +-0.0288774 0.169748 -0.00856256 +0.0153133 0.121135 -0.0105519 +-0.0397313 0.072486 -0.017441 +-0.016397 0.0337307 -0.02279 +0.0603039 0.0650788 0.0091381 +-0.0878637 0.152463 0.0169978 +-0.0754938 0.127441 0.0530403 +-0.067202 0.162346 -0.0569974 +-0.0865386 0.147279 0.0332936 +-0.0535025 0.0440354 0.0449405 +-0.0735938 0.149845 -0.0348818 +-0.0728566 0.162156 -0.0114327 +0.0495045 0.0651553 0.0285253 +0.012555 0.130318 0.0128667 +0.0220735 0.113988 0.0356074 +0.0224569 0.125562 0.0179459 +-0.0810243 0.0936828 -0.00856919 +-0.0756675 0.155622 -0.00260296 +-0.0431622 0.0422126 -0.0213185 +-0.000694781 0.0597985 -0.0333207 +0.0271246 0.0849281 0.0463473 +0.0173609 0.0897252 -0.0270298 +-0.0358944 0.0334964 -0.0263993 +-0.0576531 0.0612704 -0.00372094 +-0.00707611 0.0386628 0.0278929 +-0.0560526 0.151627 -0.00172465 +-0.030326 0.045 0.0496314 +-0.00103499 0.117326 -0.0163697 +-0.0252491 0.162472 -0.00507229 +0.00208806 0.113117 -0.0199282 +-0.0939 0.124133 0.015262 +-0.0129795 0.0384272 0.0232864 +0.00120237 0.0867098 -0.0346725 +0.0353317 0.112044 0.0241962 +0.00450167 0.0459455 0.0484199 +-0.0863511 0.0872693 0.000483167 +-0.0164554 0.0963571 0.0512639 +0.0121283 0.11013 -0.0187853 +-0.0778795 0.103388 -0.00866618 +0.0245137 0.102392 -0.0184072 +0.0201875 0.0974057 -0.022456 +-0.0168907 0.0921233 -0.0358082 +-0.0691832 0.153837 -0.0495596 +0.0155185 0.129225 0.0096832 +-0.00814574 0.0386661 0.000442505 +-0.0927289 0.125458 0.0102641 +-0.0846445 0.0832051 0.023501 +-0.0527541 0.0782706 -0.0196088 +-0.0206459 0.171255 -0.0142383 +0.0273486 0.110085 0.0362063 +-0.0144833 0.105825 0.0431811 +-0.0295885 0.120405 -0.00932945 +-0.0914492 0.117418 0.0293041 +-0.0259115 0.159753 -0.0130913 +-0.0498456 0.123179 -0.0101809 +0.0474532 0.047084 -0.00164907 +0.0201466 0.0658754 0.0483972 +-0.0546819 0.0486825 0.0116705 +0.0366139 0.0573407 -0.00875458 +0.016382 0.0888799 -0.0281622 +-0.0128318 0.0653357 0.0541739 +-0.0495043 0.073253 0.0416255 +0.0380257 0.084795 0.0357219 +-0.055962 0.148162 0.0296522 +-0.00335679 0.11693 -0.0159223 +-0.0164885 0.0382449 0.0155037 +-0.0943085 0.12145 0.0162821 +-0.0604949 0.104288 0.0411949 +-0.0485787 0.153602 0.0103738 +0.0214629 0.119376 0.0329783 +-0.00921964 0.0390042 -0.0131222 +0.046038 0.044353 0.0245911 +0.00963825 0.115048 0.0386641 +-0.077742 0.161125 -0.0199262 +-0.0274983 0.0932247 0.0447643 +-0.0237144 0.062529 -0.0332478 +0.0256802 0.0685786 0.0440967 +-0.000627469 0.039269 0.0340794 +0.0387649 0.0834441 0.0350467 +-0.0144799 0.123658 0.0314246 +-0.0415001 0.0733705 0.042415 +0.0543119 0.0722872 0.00750454 +-0.0799536 0.133905 -0.00443135 +-0.0728995 0.10646 -0.0108772 +0.0465866 0.0714909 0.00427537 +-0.0734754 0.158245 -0.0309204 +-0.0217961 0.0784868 -0.0389208 +0.0328256 0.0611992 -0.0167775 +-0.00849082 0.119665 0.0373867 +-0.0345047 0.106995 0.0387065 +-0.0624367 0.153758 -0.0135798 +0.0343704 0.104711 0.0323207 +-0.0583832 0.0335298 0.00219999 +0.0202943 0.113982 0.0365633 +0.0149493 0.0344805 -0.015521 +0.0238985 0.104719 0.0399907 +-0.0270163 0.155641 -0.00359794 +-0.0207265 0.111071 -0.0196229 +0.00439792 0.0404664 -0.024069 +-0.0314988 0.165308 -0.00534483 +-0.0506374 0.0334455 0.00204379 +-0.0518913 0.130385 -0.00375074 +0.00347876 0.039945 0.0459765 +-0.0174912 0.108558 0.0415716 +-0.0618685 0.158412 -0.0345942 +-0.0509699 0.122064 -0.0109984 +-0.0801245 0.0746668 0.000525034 +0.0485976 0.0429932 0.0132228 +0.0202555 0.0707617 -0.0282449 +-0.086473 0.130788 0.000288786 +-0.0859798 0.13928 0.042828 +-0.0419021 0.157999 0.00424081 +0.0301266 0.0646197 0.0417292 +-0.0241332 0.0349697 0.043675 +-0.0554996 0.0466308 0.0421953 +0.0244135 0.114257 -0.0111426 +-0.0687634 0.168362 -0.025835 +-0.0212185 0.178615 -0.022031 +0.0451425 0.0775553 0.0229667 +0.0084768 0.116844 0.0380952 +-0.0619218 0.112503 -0.0143567 +0.0015045 0.0661578 0.0563313 +-0.0473123 0.0369901 -0.0152765 +0.0576745 0.0551294 0.00518333 +-0.0736262 0.148585 -0.0238576 +0.055706 0.0507437 0.0211984 +0.0038008 0.130941 0.0210967 +-0.0360463 0.0347343 0.0430826 +-0.0865396 0.139093 0.00420465 +-0.000664914 0.0539666 -0.0309917 +-0.0785368 0.0694183 0.0145853 +-0.0521695 0.144678 0.0173655 +0.0205519 0.0414936 -0.0177079 +-0.0764027 0.109871 -0.00664525 +-0.0455151 0.0533187 0.0381544 +-0.010362 0.0388675 -0.00761727 +-0.0465826 0.121367 -0.0123258 +0.060067 0.0636708 0.0191758 +-0.0214848 0.0347602 0.0479269 +0.0295458 0.115836 -0.00482165 +0.0188031 0.106638 -0.0169667 +-0.00873489 0.068452 -0.036144 +-0.0504955 0.0733248 0.0417999 +0.00250961 0.101617 0.0444387 +-0.0134598 0.0645734 0.0539775 +-0.0304851 0.038633 -0.015152 +-0.00443456 0.111901 -0.0205597 +-0.038606 0.0392918 -0.0284798 +-0.022624 0.0450535 -0.0281102 +0.0262273 0.117277 0.0307934 +0.0282585 0.063629 -0.0207965 +-0.0649158 0.115218 -0.010913 +-0.0197994 0.0799106 -0.0390737 +-0.042508 0.0930307 0.0424902 +-0.0683794 0.0434664 0.00169373 +-0.0648724 0.131147 0.0430922 +-0.00487539 0.105927 -0.0225105 +-0.0678583 0.112732 0.0457592 +0.00821621 0.124741 -0.00840458 +-0.0564446 0.0520481 -0.00138381 +-0.020896 0.107686 -0.0220438 +-0.0919111 0.120015 0.00829626 +-0.0188214 0.0841215 -0.0388306 +-0.00848834 0.10866 0.0434392 +-0.0674721 0.0639504 -0.00252382 +-0.0321962 0.0487152 0.0429222 +0.0422051 0.0972089 -0.00180239 +-0.0312857 0.125233 0.0186818 +0.0348151 0.0605689 0.0379285 +-0.07566 0.1555 -0.0199215 +-0.0582195 0.03947 0.0465299 +-0.0144966 0.0687907 0.0546395 +-0.0630713 0.173863 -0.0616798 +0.0398379 0.0874103 0.0331324 +0.0167269 0.0821369 0.052401 +0.0403742 0.101353 -0.00282827 +-0.0622911 0.150653 -0.0125749 +-0.0707931 0.0879477 -0.0165704 +0.048521 0.043083 0.00923259 +0.0132697 0.0603324 0.0507028 +-0.0230427 0.038006 0.0179945 +0.0585617 0.0538351 0.0161785 +-0.0548868 0.108372 -0.0183778 +-0.0712698 0.156094 0.0241098 +-0.0053845 0.126096 -0.00772897 +-0.076026 0.151346 0.0359505 +0.00881068 0.127643 0.0286728 +-0.0229191 0.119996 -0.0109969 +-0.0702091 0.156071 0.0113882 +-0.0285896 0.0704574 -0.0325207 +-0.0373694 0.173381 -0.00150317 +0.043508 0.0438731 -6.08517e-05 +-0.0434927 0.0747943 0.0426652 +-0.0817644 0.0758778 0.0206878 +-0.00439411 0.0968663 -0.0305974 +0.00748123 0.0937253 0.0527164 +0.0101565 0.0860282 0.0551829 +-0.0132478 0.039072 0.0352601 +-0.0786774 0.168631 -0.0343418 +-0.0500333 0.148713 -0.00320857 +0.00694939 0.128215 0.0280149 +0.0132662 0.0737717 -0.03084 +-0.089989 0.142041 0.0291697 +-0.0298412 0.0944347 -0.0243277 +-0.0866185 0.103641 0.022352 +0.0179014 0.114016 -0.0148856 +0.0537258 0.0735615 0.0163564 +-0.0413654 0.128702 0.0120304 +-0.0855876 0.0939777 -0.00157288 +-0.0828574 0.0764021 0.018249 +-0.0454932 0.0491469 0.0390026 +-0.0317045 0.0693753 -0.0244624 +-0.0587034 0.0579543 0.010904 +-0.0269178 0.034755 0.0450156 +-0.0520173 0.146257 0.0174096 +-0.0759561 0.112612 -0.00567952 +-0.0164906 0.0786958 0.056769 +-0.0778425 0.108614 0.0370385 +0.0422463 0.0403355 0.0183005 +-0.0845698 0.0831877 0.0245094 +0.00429984 0.0654625 -0.0332399 +-0.0572715 0.0482006 0.0365817 +0.0290027 0.0741128 0.0436952 +-0.0600502 0.143934 0.0360579 +0.0366467 0.0673305 0.0371158 +-0.0199983 0.126616 0.0197793 +-0.0728415 0.165906 -0.0186805 +-0.0634251 0.128316 0.0434644 +-0.0437757 0.12944 0.0066621 +0.000274533 0.0683164 -0.033854 +0.00152244 0.03707 0.0220484 +-0.0349517 0.151884 -0.00344832 +-0.0271199 0.0347243 -0.0201972 +0.0433938 0.0426486 0.00136855 +0.000501319 0.0576739 0.0545888 +-0.0636327 0.155181 -0.0386163 +-0.0884108 0.0928321 0.00744302 +-0.0495652 0.0614019 0.0343808 +-0.0434939 0.0930777 0.0427388 +-0.0662865 0.178231 -0.0601734 +-0.054498 0.111159 0.0367038 +-0.0460532 0.057401 0.0380948 +-0.0820259 0.0858257 0.0320864 +-0.0277337 0.0521019 -0.0243965 +-0.00442413 0.130145 0.0224484 +-0.00149759 0.0549023 0.0548542 +-0.035558 0.0430076 -0.0284728 +0.0593498 0.066038 0.0207029 +0.0515344 0.0624078 0.0294591 +-0.0197872 0.118912 -0.0118682 +-0.0168075 0.0827608 -0.0394117 +-0.0487872 0.0545643 0.0352206 +-0.0311424 0.174761 -0.015609 +-0.0326324 0.0534241 -0.0105104 +0.00577065 0.131636 0.0103849 +-0.0185368 0.123815 0.0276913 +-0.0454963 0.0818291 0.0431013 +-0.0634376 0.179008 -0.0598746 +-0.00652958 0.0443624 0.0478753 +-0.0308041 0.0566412 -0.01742 +0.0448472 0.0735234 0.00122364 +-0.00349567 0.0504603 0.052334 +-0.0298753 0.0537337 -0.0203803 +-0.00256734 0.0388997 -0.00235847 +-0.0502892 0.0334774 -0.00701976 +-0.00481396 0.0840888 -0.0377627 +0.0387801 0.058953 0.031306 +-0.0243507 0.0852386 0.0537426 +-0.077502 0.0785105 0.0333799 +-0.0695501 0.0378481 -0.00149869 +-0.0313945 0.0862693 -0.0285563 +-0.0759552 0.133992 -0.00682355 +-0.0783042 0.161088 -0.0239376 +0.0512217 0.0595245 0.030012 +0.0455105 0.0777762 0.00219892 +-0.0860997 0.0805682 0.0085045 +-0.0347118 0.121713 -0.00868145 +-0.0621446 0.0384632 0.0179813 +-0.0124987 0.115524 0.0391996 +-0.0407326 0.0341812 -0.0112599 +-0.0762949 0.0689313 0.00454567 +-0.0900211 0.137875 0.0231818 +0.0335661 0.0612752 -0.015761 +-0.0620569 0.121268 0.0436785 +0.0389827 0.104151 0.026189 +-0.0724692 0.135469 0.0497506 +0.0222613 0.0692548 -0.0269722 +-0.0614967 0.0876222 0.0452319 +-0.0694862 0.120387 0.0531587 +0.0384699 0.0786144 -0.011749 +-0.0225096 0.10992 0.040117 +0.0140839 0.123776 -0.0073928 +0.0455444 0.0774866 0.0217209 +0.0421217 0.0751567 0.0292241 +-0.0637125 0.165316 -0.0311513 +0.00714876 0.108764 -0.0200496 +-0.0613421 0.118288 0.041013 +0.0150763 0.0900809 0.0517899 +0.0392297 0.0926988 -0.0100859 +-0.0707648 0.0836514 -0.0167885 +0.0199669 0.107838 -0.0162613 +-0.0573264 0.0521522 0.00163442 +0.03817 0.0983612 -0.0088053 +-2.43522e-05 0.0348774 0.0110061 +-0.0647928 0.0346609 0.0159953 +-0.0765127 0.164562 -0.0208538 +-0.0398786 0.107079 -0.0200332 +-0.0315509 0.053914 -0.013393 +-0.0689152 0.109432 -0.0116742 +-0.0426992 0.0344898 0.0348747 +-0.0113643 0.182132 -0.0288209 +-0.0251052 0.162299 -0.0151004 +-0.0745879 0.156108 0.0200327 +-0.0686632 0.162379 -0.0529737 +-0.0867316 0.100467 0.0250232 +0.0335218 0.0499029 0.0322045 +0.0110844 0.0345718 0.0406762 +0.047975 0.0710438 0.0215578 +-0.0471313 0.132491 0.00541336 +0.0385464 0.0954957 -0.00890109 +-0.055495 0.154378 0.0181054 +-0.0486202 0.0403225 0.04496 +-0.0918049 0.121541 0.0434848 +-0.0427276 0.129253 0.0100405 +-0.0641572 0.150753 -0.03179 +0.0203307 0.08353 0.050588 +-0.0025157 0.127417 -0.00520554 +-0.0664375 0.153657 -0.0486366 +0.00823253 0.112336 0.0401545 +-0.0239671 0.075324 0.0508435 +-0.0519769 0.0340995 -0.0134375 +-0.0444607 0.0902688 0.0428496 +-0.043053 0.153237 -0.00732462 +-0.0520076 0.145723 -0.00116844 +-0.0587286 0.0620484 0.0269094 +-0.0876727 0.111787 0.0358475 +-0.0843489 0.0925325 -0.00454911 +-0.00849886 0.0856701 0.0574538 +-0.0681283 0.146379 -0.0251159 +-0.0800217 0.102057 0.0324029 +-0.0662458 0.167287 -0.027765 +0.0214869 0.0865002 0.0492244 +-0.0485551 0.129676 -0.000935313 +-0.021529 0.17126 -0.0137526 +0.0263623 0.0808978 0.0469671 +-0.00180556 0.0384438 0.0201303 +0.0199827 0.116932 -0.0120267 +0.000700235 0.0374335 0.0215506 +-0.0849215 0.130733 -0.00170191 +-0.0566837 0.0492811 -0.00237706 +0.013902 0.054865 0.0498147 +-0.0487235 0.0738176 -0.0166605 +-0.0588289 0.089737 -0.0207103 +-0.00415565 0.0996194 0.0496007 +0.00922789 0.0860105 0.0556146 +-0.052373 0.126911 0.0347775 +-0.0647638 0.0397203 0.0149016 +-0.0375028 0.102851 0.0403695 +0.012678 0.130036 0.0186174 +0.01582 0.0346802 0.0234839 +-0.0834012 0.146003 0.0386574 +-0.0855432 0.111388 0.0330811 +-0.0905559 0.1297 0.0402277 +0.0225 0.108418 0.039052 +-0.034538 0.033729 0.00866796 +0.0580527 0.0523859 0.0111812 +0.0489522 0.045877 0.023734 +-0.0741385 0.0703655 0.0287707 +-0.0261092 0.0409213 0.0540071 +-0.0124916 0.0801274 0.0575032 +-0.0480938 0.0362157 0.0456887 +0.0295798 0.047722 0.0354768 +-0.051366 0.129708 0.032749 +-0.0258406 0.0339312 -0.0210821 +-0.0627466 0.0751872 -0.0173542 +-0.0208698 0.104444 -0.0228641 +0.0391583 0.108387 0.0121653 +-0.0217873 0.0728206 -0.0385569 +-0.00162182 0.0363065 0.0130228 +-0.0125908 0.182249 -0.0250896 +-0.0463216 0.125305 0.0258345 +0.00739775 0.110951 0.0406753 +-0.0698286 0.0965949 -0.0159812 +0.0495953 0.0662964 -0.000416722 +0.0214 0.116687 0.0346491 +0.0355013 0.0605581 0.0371681 +0.0347485 0.0981702 0.0363481 +-0.0784998 0.130283 0.0530344 +-0.0139533 0.0338864 -0.0205741 +-0.0185901 0.128007 0.0115203 +-0.0538047 0.0884108 -0.022116 +0.0213383 0.0635548 -0.0266585 +-0.0194915 0.120861 0.0324568 +-0.0347476 0.127441 0.00854521 +-0.0126238 0.0952928 -0.0330113 +-0.00102634 0.107271 -0.0216101 +0.0225395 0.0352111 0.00978173 +0.0193228 0.0679612 -0.0287395 +0.00111873 0.0344764 0.0134191 +0.0375161 0.110639 0.00638069 +0.0222494 0.0762728 -0.0263867 +-0.0729386 0.0646873 0.0146181 +-0.0397368 0.0739371 -0.0178005 +-0.0543178 0.0387289 0.0471882 +0.016338 0.0566541 -0.0286494 +0.0299119 0.0491593 0.0359714 +0.0525507 0.0462401 0.0172033 +0.0138891 0.0942573 -0.0257865 +-0.00745761 0.0338748 -0.0230567 +-0.073507 0.121801 0.0535653 +-0.0771635 0.0705018 0.0227664 +0.014215 0.083589 -0.0300782 +0.0187635 0.105558 -0.0177865 +-0.0943455 0.121485 0.0232874 +-0.0190471 0.0582949 0.0492947 +-0.0482842 0.164088 -0.00583628 +0.00750123 0.074495 0.0564449 +0.0114903 0.0896115 0.0540357 +0.0111129 0.0739356 0.0547693 +-0.0243199 0.0387345 -0.0140132 +0.0343886 0.107359 0.0305696 +0.0280618 0.0416802 0.0314173 +0.01142 0.0374719 -0.022733 +0.0330999 0.114889 0.024788 +-0.0199406 0.122541 -0.00772092 +-0.0662581 0.15274 0.0347724 +0.00215199 0.101646 -0.0224127 +0.0164932 0.112605 0.0382483 +-0.06512 0.166493 -0.0287867 +-0.0848366 0.0898781 -0.00356125 +-0.0321536 0.0380399 -0.0168 +-0.000666067 0.037425 0.0194672 +-0.0009793 0.0356154 0.0137824 +-0.0338572 0.100054 -0.0225702 +-0.0466969 0.0694537 -0.0155404 +-0.0236112 0.0386852 0.0334692 +0.0506847 0.044695 0.00922239 +0.0143403 0.11733 -0.0144441 +0.0447757 0.0875223 -0.000814326 +0.0359341 0.0727624 -0.0138488 +-0.0526285 0.0588799 -0.00854194 +-0.090746 0.114598 0.00833305 +0.0454568 0.0819591 0.00221362 +-0.0191965 0.175667 -0.0232885 +-0.062765 0.0780997 -0.0182585 +0.0414338 0.0676164 -0.00577635 +-0.053491 0.113891 0.0350292 +0.0043588 0.0510132 -0.0293749 +-0.00874604 0.0713519 -0.0371122 +0.0193852 0.0915557 -0.024942 +-0.0944514 0.122808 0.0172688 +-0.00774122 0.115628 -0.0165086 +-0.0406319 0.0534345 -0.0110028 +0.0230588 0.0463265 0.0401038 +-0.0769246 0.0689689 0.00654258 +0.0278197 0.108769 0.0368873 +-0.078478 0.142827 0.0455967 +0.0339472 0.0368914 0.0179028 +0.0140143 0.0357038 0.00388789 +-0.0699623 0.155307 -0.0499609 +-0.0144161 0.0343188 -0.0191903 +-0.044261 0.122001 0.0258917 +-0.064466 0.170264 -0.0443864 +-0.0614851 0.112533 0.0365644 +-0.0649074 0.120907 -0.00883756 +0.0114806 0.097647 0.0487825 +0.00178793 0.0344587 0.00626566 +0.0404914 0.098527 -0.00482713 +-0.0714142 0.166619 -0.0469903 +0.0553639 0.0729653 0.0110394 +-0.00645384 0.126073 -0.0076982 +-0.042494 0.0676556 0.0412962 +-0.0328931 0.0486572 0.0421875 +-0.0218312 0.0882119 -0.0370399 +0.0433826 0.0987102 0.00417641 +-0.034498 0.0533048 0.037996 +-0.0749535 0.0823401 -0.0135889 +-0.0755022 0.131669 0.0524935 +-0.0118269 0.118985 -0.0140536 +-0.0698809 0.100876 -0.0145572 +-0.0920212 0.128183 0.00926455 +-0.0277533 0.155598 -0.00253083 +-0.0155991 0.0421323 -0.0272897 +0.0125549 0.119968 -0.0132874 +-0.0862929 0.15121 0.027304 +-0.0726068 0.147127 -0.0218633 +-0.0713282 0.0982044 0.0407618 +-0.023785 0.0621839 0.0426152 +-0.0294793 0.0446083 0.0503994 +0.050676 0.0693821 0.00244948 +-0.0520559 0.142894 8.38275e-05 +-0.085494 0.083212 0.00349969 +0.0219046 0.0892697 -0.0245066 +-0.0923861 0.125586 0.0352607 +-0.0578149 0.12313 -0.00798101 +-0.0630458 0.0345815 0.0177326 +-0.0890554 0.0888307 0.00946144 +-0.066735 0.167252 -0.0265095 +0.0143257 0.0594816 -0.0287805 +0.00349695 0.0519735 0.0532512 +-0.0658642 0.141582 -0.00840157 +0.014169 0.0603418 0.050255 +-0.0638047 0.152122 -0.00224548 +0.0332402 0.0814034 -0.0189012 +-0.0246071 0.0408479 -0.0291354 +-0.0320867 0.0651952 -0.0194497 +-0.0719291 0.0394019 0.00652921 +-0.0297834 0.0409697 0.0520218 +-0.035582 0.0336826 0.00849877 +-0.088744 0.0996845 0.0203875 +0.0516874 0.0662489 -0.000355134 +-0.0802571 0.096729 0.0342047 +-0.0669809 0.135535 -0.00827796 +-0.069479 0.0337046 -0.000209101 +-0.0675145 0.148386 0.0398761 +-0.0805311 0.123088 0.0509172 +-0.0084955 0.0503277 0.0510127 +0.00205693 0.129985 1.8398e-05 +-0.0172313 0.12808 0.0178394 +0.00170313 0.0343139 0.0118694 +-0.0773727 0.156953 -0.0129034 +-0.0717154 0.0632455 0.0160979 +0.00858548 0.0340902 -0.01633 +0.0124197 0.0403679 -0.0230567 +-0.0511271 0.116882 0.0329705 +-0.0728598 0.0355014 0.00645302 +-0.0791962 0.16801 -0.0379842 +-0.00268972 0.128069 -0.00389854 +0.0597918 0.0567046 0.013171 +0.0154995 0.111258 0.0392925 +-0.019299 0.0668878 0.052102 +-0.0233826 0.0866124 0.0541509 +0.0432138 0.091668 0.0251628 +-0.0396808 0.0636721 -0.0135815 +0.00652038 0.0518639 0.0525018 +0.0124104 0.0389053 -0.0225983 +-0.0119403 0.171322 -0.0192115 +-0.069435 0.0972593 0.0417284 +-0.0942583 0.125557 0.0232684 +0.030238 0.0814876 -0.0201701 +0.0449279 0.0945923 0.00916323 +-0.0553588 0.131132 0.0357618 +0.00929414 0.0653548 -0.0316941 +-0.0357484 0.0768864 -0.0192776 +-0.062693 0.156802 -0.0376031 +-0.0460193 0.128067 0.0236255 +0.0133301 0.0609017 -0.0290805 +0.00152141 0.0773467 0.0574533 +-0.0636035 0.156128 0.0166435 +-0.0361137 0.162217 -0.0137308 +-0.0595062 0.0386574 -0.00901889 +-0.0620309 0.153757 -0.0155846 +-0.0533723 0.122605 0.0368904 +-0.0264702 0.0676761 0.0408217 +-0.0147452 0.123455 -0.00671201 +-0.0703548 0.0643588 0.00158224 +-0.0814272 0.0752484 0.0195365 +0.0402499 0.0787503 -0.00875238 +-0.00644119 0.0828529 0.0570838 +0.0242228 0.0902502 0.0474811 +0.0336268 0.0557054 -0.0117007 +-0.0623153 0.13671 0.0362243 +0.0149059 0.124307 -0.00595517 +-0.0401601 0.165169 -0.0119868 +-0.077431 0.108115 0.0357399 +0.0402513 0.0940026 0.0302416 +0.0370616 0.0382621 0.0191175 +0.0225195 0.106011 0.0397482 +-0.0255993 0.037974 -0.029094 +-0.0759547 0.129619 -0.00760722 +-0.0360191 0.153642 0.00214438 +0.0596848 0.0566967 0.0151763 +-0.0264473 0.181471 -0.0150302 +-0.0346676 0.0359024 -0.017193 +0.0391135 0.0904981 -0.0117677 +0.00550174 0.0745058 0.0566062 +-0.0615874 0.117934 -0.0105067 +-0.0897323 0.115129 0.0291209 +0.0371127 0.037099 0.0128773 +0.000643571 0.127035 0.0301068 +0.04471 0.0789677 0.024116 +-0.0294983 0.0588236 0.0368769 +0.0243457 0.102123 0.0424029 +-0.0890326 0.125361 0.00330134 +-0.0671124 0.0618759 0.00376788 +0.0207378 0.105279 -0.0174962 +-0.0640597 0.156709 -0.043612 +-0.053836 0.112592 -0.0169505 +-0.0738585 0.0762694 0.0355202 +-0.00709045 0.130506 0.0171336 +-0.0735939 0.077695 0.036626 +-0.0453238 0.169855 -0.00399069 +-0.0609112 0.060145 0.00105228 +-0.0602298 0.119796 0.0409592 +-0.037803 0.0885803 -0.0235006 +0.0220645 0.0375334 0.0362702 +-5.6077e-05 0.112952 -0.0196345 +-0.0156034 0.097548 -0.0273897 +0.0330435 0.104766 0.033885 +0.0234619 0.0343557 0.00702041 +0.0309186 0.094253 -0.0177648 +-0.0406484 0.0563266 -0.0113192 +0.0305338 0.0929359 0.042541 +-0.0713282 0.155382 -0.0439108 +-0.0246656 0.0492403 -0.0269082 +-0.0344954 0.118007 0.0312549 +0.03264 0.0822319 0.0419892 +0.0393737 0.0381589 0.0105128 +0.00986741 0.131059 0.0147331 +-0.0521114 0.156091 -0.00406652 +0.0125143 0.121868 -0.0113432 +-0.019839 0.0610753 0.0486026 +-0.0714347 0.109953 0.0409933 +-0.0435006 0.115257 0.0335166 +-0.0700918 0.147968 0.0410511 +-0.0628279 0.151059 0.0360546 +-0.0269995 0.0383068 0.000625566 +-0.0459023 0.0546326 0.0380387 +-0.0705411 0.0860609 0.0417748 +-0.0360717 0.157766 -0.0114869 +0.018169 0.108481 -0.0169141 +-0.0656915 0.0720893 -0.0135891 +-0.0604976 0.0847283 0.0441029 +0.00648432 0.0413231 0.0455852 +-0.0757282 0.0754387 0.0328339 +0.00417753 0.0922823 -0.0325433 +-0.0272993 0.0381948 -0.0178418 +-0.0315044 0.0860003 0.0426216 +-0.00681874 0.0868473 -0.0370495 +0.0396972 0.0744788 -0.00980523 +0.0376515 0.0947835 -0.010301 +-0.078491 0.121738 0.0515581 +-0.0274838 0.105666 0.0409158 +-0.0202559 0.0365056 -0.0280118 +0.0201693 0.125674 0.00144037 +-0.0587501 0.0482189 0.00571238 +-0.013346 0.168342 -0.0159797 +-0.0683811 0.149044 -0.0363633 +-0.0558475 0.0343686 0.0374162 +-0.0590903 0.0626036 0.0281123 +-0.0331372 0.0336314 -0.0222436 +-0.0678611 0.0980605 -0.0159397 +-0.0472308 0.0334623 0.00452598 +-0.0167567 0.0714512 -0.0386579 +-0.0184671 0.10319 -0.0232847 +-0.0675365 0.0805511 0.0417814 +-0.0666009 0.15275 -0.0468174 +-0.00387787 0.10737 -0.022403 +-0.0300213 0.0579734 -0.0204069 +-0.00579466 0.103184 -0.0232761 +-0.0775304 0.143071 -0.00473432 +-0.00757151 0.0346922 -0.0244599 +-0.0355091 0.0676694 0.0413832 +-0.0185092 0.127137 0.00354165 +0.0289004 0.0650837 -0.0199869 +-0.0224914 0.04868 0.0491885 +-0.0194885 0.0856172 0.056795 +-0.0625301 0.147537 -0.0105732 +0.00324634 0.0726279 -0.0347233 +-0.0117444 0.129778 0.0154481 +0.0381223 0.106958 0.0251953 +0.0134297 0.0343278 -0.0118215 +0.00450615 0.0772491 0.0561317 +0.00914326 0.112364 0.0397506 +0.0165994 0.0933382 -0.024824 +-0.0530349 0.0448324 0.0176964 +-0.0861503 0.0818963 0.00748815 +-0.07574 0.144451 -0.00587632 +-0.0796195 0.104749 0.0319273 +0.0404835 0.052774 0.0322642 +0.0420568 0.0986443 0.0231563 +-0.0887511 0.102351 0.0133854 +0.0132668 0.0723896 -0.0312102 +-0.0507233 0.0723393 -0.0157137 +-0.00754786 0.039018 -0.00905888 +-0.0488259 0.138613 0.00940263 +0.0057745 0.128094 -0.00399317 +-0.0523396 0.147791 0.0193952 +-0.048265 0.136372 0.0159973 +-0.0604426 0.0470258 0.0346715 +0.0367367 0.0902141 0.03744 +-0.0895793 0.136441 0.0122186 +0.0376089 0.108292 0.000165208 +0.0353713 0.0915869 0.0389643 +-0.0211976 0.0347654 0.0444796 +0.00223085 0.129379 -0.00131325 +-0.0737831 0.0864021 -0.0154104 +-0.0127393 0.0700008 -0.0380391 +-0.0657273 0.0751276 -0.0164058 +0.00937487 0.0377648 0.0302588 +-0.035816 0.0448118 0.0437923 +-0.0549046 0.102722 -0.0198351 +0.0460481 0.046714 0.0276632 +0.00759173 0.131318 0.00819364 +-0.0721931 0.161015 -0.0399435 +0.0102622 0.0710503 -0.0323195 +0.0194745 0.0851519 0.050256 +-0.0399319 0.0345158 0.0389424 +-0.0616692 0.167812 -0.0545903 +-0.0056922 0.0584499 -0.034018 +-0.0203692 0.094546 -0.032294 +-0.070351 0.158156 -0.0469171 +-0.023866 0.103031 -0.0237009 +0.0528846 0.0533107 -0.0017243 +-0.0319516 0.077812 -0.0315646 +0.00951738 0.0660057 0.0546772 +0.0137336 0.122464 0.0333928 +-0.0199595 0.125484 -0.000738697 +0.00049871 0.116947 0.0399069 +-0.0359892 0.0344491 0.0345711 +-0.0443682 0.129764 0.015339 +0.0452819 0.0932028 0.00617084 +-0.00813465 0.0391286 -0.0130168 +0.0394097 0.0618135 -0.00677045 +-0.0701845 0.158483 -0.00465374 +0.0322675 0.102123 0.0362847 +-0.0374987 0.0819015 0.0436538 +0.0396969 0.0616754 0.0309066 +-0.0455673 0.0475992 -0.010259 +-0.0527627 0.115451 0.034109 +0.0208176 0.0631975 0.0476002 +-0.0618301 0.0924936 -0.0189652 +-0.053883 0.150856 0.0253998 +0.0245243 0.105615 0.0392344 +0.00385761 0.129628 0.0254511 +-0.00549072 0.0488848 0.0502608 +-0.0300389 0.036799 0.0524219 +-0.0580426 0.153536 0.0303048 +0.0220166 0.125337 0.0220596 +0.0312265 0.0393227 0.0260732 +-0.0171047 0.17569 -0.0178772 +0.016571 0.0940211 0.0486896 +-0.0505514 0.0338848 0.0267025 +-0.0625417 0.0410514 0.0154849 +0.0355348 0.112677 0.0214127 +0.00150774 0.0897546 0.056027 +-0.0190957 0.0968508 -0.0266962 +0.0511508 0.0608575 0.0299274 +0.0163905 0.0491901 -0.024833 +0.0345652 0.114846 0.0110543 +0.0581139 0.0523629 0.0131822 +-0.0417396 0.0754091 -0.018561 +-0.0814751 0.118981 0.0489466 +0.00013405 0.105909 -0.0216496 +-0.0908345 0.139239 0.02018 +-0.0424766 0.101515 0.0416909 +-0.0260624 0.0837492 0.0512652 +-0.0500875 0.0531258 0.0337221 +-0.0706477 0.0874116 0.0418374 +-0.0366978 0.0363155 -0.0300943 +0.00451245 0.064772 0.0563635 +-0.0753069 0.109577 0.0422017 +-0.0284025 0.119846 0.0286714 +0.033406 0.0822268 0.04133 +0.0595932 0.0608555 0.0201843 +-0.00204808 0.0983649 0.051847 +-0.0574847 0.0623327 0.0283417 +-0.0229389 0.126187 0.00412352 +0.0390327 0.0744186 -0.0107818 +-0.0855097 0.129367 -0.00169404 +-0.0647036 0.0653044 0.0298737 +-0.0064934 0.10867 0.043581 +-0.0685164 0.0669975 0.0293604 +-0.0705096 0.1624 -0.046948 +0.0125251 0.129483 0.0214195 +-0.0221845 0.172691 -0.0208918 +0.0153262 0.0767707 0.0538598 +-0.0905235 0.137837 0.0161933 +-0.0545439 0.0402656 -0.0102441 +-0.0688509 0.171089 -0.0344529 +-0.0884641 0.0887716 0.00547605 +-0.0903526 0.116014 0.0283099 +-0.0623807 0.147545 -0.00857398 +-0.061927 0.109672 -0.0156348 +-0.0579856 0.116646 -0.0132522 +0.0395731 0.0448559 0.0300931 +0.00658391 0.130753 0.00354793 +-0.0647804 0.153444 -0.00410741 +0.00522677 0.078235 -0.0342467 +-0.0495662 0.0335706 -0.0032948 +0.00181081 0.131692 0.0146438 +-0.0635975 0.15411 -0.00948093 +-0.0855227 0.133522 0.000289437 +-0.025262 0.107417 -0.0217613 +-0.0340021 0.0409714 0.0491624 +-0.0146057 0.0406867 -0.0271172 +-0.0174894 0.0687336 0.053904 +-0.01522 0.183001 -0.0269465 +-0.0500642 0.142991 0.00242772 +-0.0679313 0.0622594 0.0032802 +-0.0551811 0.133216 -0.00483226 +-0.0284216 0.0792864 0.045297 +0.00824429 0.0809884 -0.0331618 +0.00929618 0.123787 -0.00937811 +0.0228212 0.0889774 -0.0242065 +-0.0185099 0.0883573 0.0560195 +0.0282298 0.0717826 -0.0228933 +-0.0251238 0.125152 0.00185767 +0.019545 0.103378 0.0442321 +-0.0673703 0.122848 0.0518073 +0.0357587 0.067099 -0.014806 +0.00197653 0.0987575 -0.0246237 +-0.0655762 0.155146 -0.00586759 +0.012488 0.119576 0.0355898 +-0.0514967 0.101534 0.0419051 +-0.0095351 0.0444416 0.0488648 +-0.00470695 0.0982478 -0.0280611 +-0.05601 0.0575293 -0.00241387 +-0.0602761 0.139548 0.0339321 +-0.0517453 0.0753545 -0.0181561 +-0.038969 0.042042 0.0415955 +-0.0636896 0.064322 -0.00564195 +-0.0398457 0.0985451 -0.0219087 +-0.0191826 0.127252 0.0185952 +-0.0873123 0.0886781 0.00248146 +-0.0488082 0.0884112 -0.0217819 +-0.0498768 0.104205 -0.0203216 +-0.0409029 0.149467 0.00342301 +-0.069185 0.156032 0.0248455 +-0.0506717 0.0501974 0.0196351 +-0.0301161 0.0396403 0.0523893 +-0.000520242 0.104454 0.0440018 +-0.0290025 0.0578755 -0.022406 +-0.0610145 0.0336026 0.00878975 +-0.0917872 0.143341 0.0171661 +-0.0279974 0.0383174 -0.0050935 +-0.0913132 0.113305 0.0163255 +0.0313508 0.109263 -0.00976359 +-0.00332487 0.0387243 0.0268007 +0.0222104 0.125239 0.00503339 +-0.04503 0.129294 0.00327025 +-0.0176724 0.0933571 0.0538975 +-0.0234883 0.0487024 0.0493089 +0.0421092 0.0724515 0.0291612 +-0.0653912 0.159256 -0.0130566 +-0.00402317 0.0387663 0.0011878 +-0.0338313 0.0929547 -0.0239607 +0.00379004 0.0367184 0.046186 +-0.0186801 0.0525094 -0.0314832 +-0.0351354 0.165203 -0.0147634 +-0.0705038 0.108294 0.0372772 +0.0246817 0.0360382 0.0240669 +-0.0204805 0.0828473 0.0567838 +0.0326609 0.0673309 0.0401471 +-0.0296335 0.0635627 -0.0254272 +-0.0548571 0.0546624 -0.0043828 +0.00968485 0.0342244 -0.0162577 +-0.0810826 0.144759 0.0420272 +0.00767659 0.0346834 0.0054103 +-0.0830301 0.110196 0.00131843 +-0.00544058 0.119032 -0.0141551 +-0.0255852 0.0930492 -0.0306058 +-0.0714911 0.116102 0.0521112 +0.0318609 0.0710037 -0.0187224 +0.0280264 0.121739 0.0100361 +-0.0514799 0.0384723 -0.0115832 +-0.0764395 0.0988661 -0.011539 +-0.0186212 0.04503 -0.027692 +0.0334766 0.0519565 -0.00767966 +-0.0541438 0.151337 0.0259237 +-0.00148294 0.0606073 0.0558577 +0.0148272 0.0344434 -0.00977208 +-0.0391932 0.171233 -0.0109027 +-0.035755 0.0783248 -0.0195335 +0.0355134 0.0795005 0.0390801 +0.0603494 0.0609121 0.0171857 +0.0394635 0.075864 -0.00982057 +-0.0470363 0.0359078 0.0451061 +-0.0608634 0.154346 0.0292597 +-0.0748097 0.109257 0.0407877 +-0.0262745 0.0692227 0.0420449 +0.0243768 0.0533073 -0.022554 +-0.0530668 0.0348658 0.0444554 +0.0259946 0.0347155 0.014606 +-0.0591124 0.121234 0.0408265 +-0.0144894 0.112737 0.0404341 +-0.0838486 0.0803675 0.00250235 +-0.0582446 0.13534 0.0351018 +-0.0214986 0.100246 0.0444424 +-0.0713881 0.068562 0.0291565 +-0.0155474 0.160527 -0.0107791 +0.0215063 0.107058 0.0398344 +-0.0331542 0.158077 0.00281987 +-0.0863235 0.110381 0.0203696 +-0.0312005 0.162424 -0.00314295 +0.0384543 0.0395883 0.0218564 +0.0385307 0.0554981 0.0313684 +-0.0114896 0.0560578 0.0523304 +0.0593092 0.0622231 0.0211664 +-0.0648434 0.0339553 0.0130374 +0.0180082 0.0355585 0.00482766 +0.0399371 0.077993 0.0331058 +0.00160174 0.0351275 0.0454175 +-0.032718 0.0396362 0.0507617 +-0.0524899 0.0973506 0.0433264 +-0.032502 0.104286 0.0408563 +-0.00468764 0.0584239 -0.0337898 +-0.0672529 0.0760725 0.0393761 +0.0584714 0.0552095 0.0201836 +-0.0416396 0.0548863 -0.0113812 +0.014767 0.129313 0.0151085 +0.0271615 0.0578042 0.0426556 +-0.0133509 0.0384568 0.00507202 +-0.0770775 0.0703016 0.00351307 +-0.0514866 0.0748352 0.0426181 +-0.0882111 0.0936365 0.0238814 +-0.0906238 0.143032 0.0276653 +0.0233319 0.059176 0.0459237 +-0.036826 0.0446589 -0.0260242 +0.0332346 0.0955533 0.0394336 +-0.000484271 0.038989 -0.00201961 +0.0427221 0.101476 0.00816485 +0.0419002 0.102864 0.0131587 +-0.0208004 0.181643 -0.0143459 +0.0352424 0.0726953 -0.0147969 +-0.0234839 0.0509996 0.0435588 +0.0352381 0.0443124 0.029693 +0.000403091 0.0348316 -0.0232847 +-0.0684959 0.10279 0.039811 +0.019265 0.0708008 -0.0287723 +-0.0516068 0.0345225 0.0433683 +0.0391514 0.0617239 0.0318804 +0.0135008 0.111258 0.0394003 +0.0304359 0.108504 -0.0109544 +-0.038743 0.0768256 -0.018638 +-0.0223183 0.094515 0.0486399 +-0.0435018 0.0478421 0.040059 +-0.0727332 0.173623 -0.0510446 +-0.00349112 0.118315 0.0390164 +-0.0884421 0.133772 0.0426038 +-0.0454967 0.109818 0.0383281 +-0.0145 0.0392233 0.0384538 +-0.00466385 0.129429 0.0252614 +-0.00582274 0.088227 -0.0364178 +-0.0454902 0.0352033 -0.0224188 +-0.0348607 0.100046 -0.0224582 +-0.0792519 0.17071 -0.0410714 +-0.0376133 0.0393512 -0.0290006 +-0.0640598 0.170094 -0.0457055 +0.0303225 0.119467 0.0166127 +-0.0902791 0.116199 0.0435835 +0.0222032 0.0352055 0.0243097 +-0.073336 0.0968702 0.0400088 +-0.0376144 0.0393494 0.044329 +-0.0105011 0.0870252 0.0569814 +-0.0507332 0.161533 -0.00440491 +-0.0779412 0.162504 -0.0229403 +-0.0754919 0.128859 0.0530266 +-0.0541372 0.0344723 0.0359505 +0.0113242 0.0581457 -0.0297724 +-0.0442953 0.0391467 0.0441537 +0.0242713 0.035754 0.000294462 +-0.0615051 0.159991 -0.0325895 +-0.00166807 0.0568963 -0.03242 +-0.0119937 0.164096 -0.013967 +0.0166698 0.0900802 0.0505874 +0.0232051 0.0672264 0.0457926 +-0.0547028 0.0693497 -0.0142348 +-0.0645039 0.15312 0.03389 +-0.0344884 0.0918084 0.0445658 +0.0553932 0.0493283 0.0071983 +-0.047221 0.115086 -0.0157836 +-0.0737507 0.0835282 -0.0152437 +-0.00700363 0.0992954 0.0501023 +-0.0124605 0.0646213 0.0545516 +-0.0529942 0.0345374 0.0413527 +-0.0926054 0.122844 0.0302746 +-0.0652377 0.0419529 0.0337045 +0.0450967 0.0889619 0.00117113 +-0.0632063 0.0448721 0.0103941 +-0.0177692 0.074285 -0.0389303 +-0.0226723 0.0582322 -0.0321918 +-0.0233871 0.0380454 0.010662 +0.0144228 0.120472 -0.0118376 +-0.00758227 0.0362053 -0.0250795 +-0.0394882 0.0804267 0.0429074 +0.0505096 0.0651476 0.0284061 +0.0412879 0.0914659 -0.00877665 +-0.0613587 0.0343255 -0.00949544 +-0.0739143 0.148544 -0.0218644 +-0.0607701 0.0447346 0.0418038 +-0.0300938 0.0476999 -0.0248901 +-0.0666558 0.0720875 -0.0129051 +-0.0732714 0.156195 0.0132096 +-0.0340151 0.0498932 -0.013349 +-0.0484988 0.0762375 0.0432182 +-0.0614924 0.0384787 0.0187446 +-0.0572292 0.155416 0.0145778 +-0.0105966 0.0391805 -0.0262222 +0.00120442 0.117582 -0.0166604 +-0.070211 0.165211 -0.0489867 +0.0483875 0.0444574 0.00325794 +-0.0764978 0.13308 0.0521415 +-0.035201 0.0345651 0.0381519 +-0.00449959 0.107273 0.0439086 +-0.0266181 0.042276 -0.0292233 +-0.0364985 0.120712 0.0292752 +-0.0735593 0.15583 0.0102013 +-0.0554797 0.0848037 0.0450617 +-0.0845128 0.0817443 0.00347449 +-0.0169788 0.106067 -0.0223329 +-0.0699464 0.151677 0.0365135 +-0.0160243 0.0897174 -0.0373532 +-0.035698 0.0857595 -0.0237144 +-0.0308696 0.105755 -0.0215547 +-0.0475005 0.084795 0.044997 +0.00720445 0.088027 -0.0329216 +0.0388792 0.085648 -0.0137779 +-0.0451911 0.163637 -0.00858913 +-0.0752855 0.176467 -0.0519633 +-0.0568165 0.155074 0.0161832 +0.0369538 0.108295 0.0261877 +-0.0788782 0.172865 -0.0427748 +-0.0439777 0.0345259 0.038072 +0.0238242 0.0981836 0.0451545 +-0.0394936 0.0548399 0.0395943 +0.0242629 0.0790161 -0.0251629 +-0.0665084 0.0903473 0.0440273 +0.0291366 0.0495584 -0.0147305 +0.0191581 0.0357679 0.0376614 +-0.0278785 0.0535209 -0.0244081 +-0.00947834 0.12371 0.0334225 +-0.0570388 0.149629 0.0316784 +0.0117574 0.130329 0.0182774 +-0.00158005 0.131357 0.0134024 +-0.0657222 0.0431534 -0.00229362 +0.0404535 0.0689201 -0.00879299 +-0.0195496 0.161752 -0.0147401 +0.0435566 0.0695959 0.0259839 +-0.0893231 0.14203 0.0321578 +-0.0832597 0.10897 0.0263609 +0.00296745 0.0390391 -0.00510833 +0.0160439 0.0505074 0.0458237 +-0.0213985 0.181639 -0.0134576 +0.000249699 0.0347599 0.0129869 +-0.0138688 0.163706 -0.0171714 +-0.0787597 0.163865 -0.0299483 +-0.0321103 0.178539 -0.0110044 +-0.0062818 0.102371 0.0437669 +-0.0504236 0.113946 -0.0165184 +-0.0808373 0.0858965 0.0337281 +-0.0833697 0.0790868 0.0225099 +0.0174757 0.101745 0.0462033 +0.0562413 0.0521934 0.00418603 +-0.0386753 0.127489 0.0159666 +-0.0714887 0.0860678 0.0412957 +0.00930465 0.0639279 -0.0315779 +-0.038992 0.126654 0.0188148 +-0.0617292 0.0435742 0.0131822 +-0.0807044 0.109603 0.0338418 +0.01567 0.0343236 0.00175615 +-0.0151083 0.184586 -0.0219884 +-0.0792845 0.0704649 0.0170607 +-0.0611161 0.170955 -0.0586033 +-0.0656715 0.0684169 0.0339875 +-0.0346163 0.0505906 -0.0107587 +0.0292004 0.0566287 -0.0178044 +0.0402348 0.101386 0.0251818 +-0.0356488 0.118923 -0.0117804 +-0.00759062 0.117967 -0.0150103 +-0.0344873 0.0959942 0.0440904 +-0.0675456 0.035487 -0.00647 +-0.0177849 0.0784811 -0.0386843 +-0.0357813 0.0828042 -0.0224653 +-0.0217893 0.122494 0.0280004 +-0.040789 0.084093 -0.0212481 +-0.0448136 0.0629573 0.0395248 +-0.0851812 0.137956 0.0449006 +-0.0879612 0.103656 0.0103875 +-0.0558857 0.0998486 -0.020419 +0.017256 0.079507 0.0531399 +-0.0315382 0.178553 -0.0120253 +-0.06991 0.11224 -0.0100103 +-0.0512969 0.0556828 0.0150377 +0.0224682 0.0520683 0.0428376 +0.0143831 0.0448677 -0.0245168 +-0.0794364 0.144805 0.0432098 +-0.0638846 0.103946 -0.0172176 +-0.0284346 0.0849121 0.0465284 +0.0144928 0.11263 0.0387455 +-0.0860797 0.0882889 0.0261675 +-0.00931865 0.0862591 -0.0377315 +-0.0226749 0.0380487 0.0198364 +-0.0875543 0.0861148 0.0194651 +-0.0578317 0.0344516 0.0369209 +-0.0410907 0.157679 -0.0102957 +-0.0680436 0.0337635 0.00720288 +-0.0778811 0.104813 -0.00803583 +0.0518058 0.0553999 0.0290848 +-0.0504997 0.160817 0.00728082 +0.0241356 0.0632152 0.0453534 +-0.0268604 0.100151 -0.0237263 +0.0127955 0.0874066 0.0537621 +-0.0616261 0.155549 0.00719382 +-0.0593595 0.0336431 -0.00899455 +-0.065903 0.0643977 0.026882 +0.0278843 0.0536982 -0.0197695 +-0.0335041 0.0789099 0.0415331 +0.0414488 0.0873044 0.0301508 +-0.0627531 0.161513 -0.0475897 +0.0292606 0.0447502 0.0332372 +0.0105493 0.122164 -0.0116505 +-0.0908004 0.115922 0.00730178 +0.0306755 0.0581744 -0.0167704 +-0.0745653 0.158254 -0.0269305 +0.0417869 0.088692 -0.00877741 +-0.0765465 0.107865 0.0361429 +0.0291715 0.104768 0.0370747 +-0.0435198 0.0436724 -0.0163157 +-0.0639905 0.155091 0.00636862 +-0.0676976 0.156296 0.0180917 +0.0361371 0.0605355 0.0363255 +-0.0831336 0.135327 0.0485953 +-0.0205283 0.125395 0.0225414 +0.0218584 0.126105 0.0106 +-0.0573551 0.0335045 0.00783858 +-0.0766685 0.144473 -0.00485242 +0.0215827 0.0449804 0.0414892 +-0.0623027 0.152202 -0.0135791 +-0.0124889 0.118271 0.037774 +-0.058999 0.129653 -0.00698695 +0.0212269 0.035264 0.00760182 +-0.0558448 0.0533792 -0.00239414 +-0.042206 0.147853 0.000366775 +-0.0732213 0.156852 -0.0309091 +0.00482377 0.0349755 -0.00101746 +0.00553205 0.131427 0.00744951 +-0.0606157 0.0459479 0.0402046 +0.00228793 0.0626666 -0.0335374 +-0.00869718 0.172706 -0.0257786 +0.0265924 0.0466157 -0.0146569 +0.0293044 0.0481199 -0.00974071 +-0.0278981 0.0863323 0.047373 +0.029421 0.0461183 -0.00671048 +-0.058539 0.0588103 0.0191792 +-0.0577583 0.0479183 0.03595 +0.0299489 0.069977 0.0415097 +-0.0877683 0.149882 0.0273982 +-0.0403006 0.122206 -0.0112466 +-0.0731823 0.109139 0.039466 +0.00748061 0.115492 0.0392535 +-0.0323193 0.0339823 0.0197127 +-0.00249248 0.0911617 0.056251 +-0.0410706 0.0335739 0.0056728 +-0.0167629 0.120643 -0.00969861 +0.0170314 0.126681 0.0245104 +-0.0933703 0.118789 0.0242915 +-0.0167466 0.161131 -0.0135692 +-0.037714 0.0710075 -0.016855 +-0.0748306 0.094995 -0.0139518 +-0.0653015 0.169027 -0.0374543 +-0.0171592 0.0387994 -0.0126424 +-0.0649264 0.112407 -0.0127033 +0.0089357 0.131311 0.0143899 +-0.0695053 0.106913 0.0375568 +-0.0679519 0.129695 -0.00900682 +0.0196594 0.10025 -0.0221259 +0.0187375 0.0672729 0.0498973 +-0.0634922 0.0626336 0.0253957 +-0.0640428 0.0593154 0.0139941 +-0.0365043 0.0691064 0.0417512 +-0.0509946 0.0547172 0.0191515 +-0.0684996 0.106934 0.0379267 +-0.0391114 0.149509 -0.00165293 +0.00150153 0.0534013 0.0535077 +-0.0610153 0.131125 -0.0076807 +-0.015856 0.0980295 -0.0258983 +0.0549279 0.0723085 0.00788581 +0.0296197 0.117006 0.0277632 +0.00535242 0.130989 0.0202309 +-0.000691446 0.0612541 -0.0338404 +0.00150093 0.0441835 0.0459725 +-0.0611099 0.11531 0.0378549 +-0.0695161 0.108303 0.0373324 +-0.0543547 0.158623 0.00837339 +-0.0945603 0.124158 0.0182654 +-0.0535009 0.111177 0.0367213 +-0.0119534 0.0385403 0.00164014 +-0.0370531 0.166795 0.000693639 +0.0161005 0.115637 -0.0146217 +-0.0669681 0.132599 -0.00847972 +-0.0192376 0.0362049 0.0528295 +-0.0510947 0.138549 0.00140254 +0.0199501 0.126815 0.00703133 +-0.0280876 0.0511424 0.0415727 +0.0021184 0.108719 -0.0202691 +-0.0455158 0.0889126 0.0438293 +0.00898082 0.0376394 0.0339008 +-0.0913279 0.147458 0.016148 +-0.00573884 0.0712887 -0.036141 +0.0184912 0.0906471 0.0481735 +-0.0240484 0.159369 -0.0122932 +-0.00386335 0.103093 -0.0232514 +-0.0903131 0.126767 0.00528424 +-0.00141239 0.101018 0.0444401 +-0.0265472 0.0384572 -0.00862977 +-0.0461338 0.160629 -0.00828859 +0.0434078 0.0958974 0.0221477 +-0.0323682 0.0778417 -0.0305703 +-0.0104869 0.166942 -0.0170857 +0.0335642 0.11614 0.00925074 +-0.0679156 0.112303 -0.0110315 +0.0448529 0.0917799 0.0171662 +-0.0902457 0.140661 0.0271695 +0.0361358 0.102075 -0.0100705 +-0.0774559 0.158948 -0.0154272 +-0.0718839 0.142969 -0.00986002 +0.0254315 0.0862638 0.0474376 +0.0233509 0.0549381 -0.0249484 +0.0445042 0.0650854 0.0275412 +0.0472882 0.0731371 0.0168777 +0.0310703 0.0352449 0.00774073 +-0.0540072 0.144242 -0.000990452 +-0.0901845 0.132425 0.0322244 +-0.0305014 0.066031 0.0387492 +-0.0636396 0.163113 -0.0245909 +0.0265757 0.0754454 0.0454823 +0.0560761 0.0692634 0.0230866 +0.0323242 0.117657 0.0116569 +-0.0744896 0.128852 0.0526631 +-0.092535 0.126933 0.0292581 +-0.021881 0.107267 -0.0220871 +0.0216673 0.125834 0.0205048 +-0.0892808 0.140568 0.013241 +-0.0188177 0.0683045 0.0530002 +0.0181426 0.117476 -0.0126083 +-0.0562843 0.049932 0.00898241 +0.0271917 0.0858851 -0.0222975 +-0.0354636 0.172718 -0.000342918 +-0.0113055 0.0991708 0.0485876 +-0.0512476 0.149342 0.0143776 +0.0112062 0.129253 0.000760937 +-0.027273 0.123571 -0.00271305 +-0.0942867 0.122796 0.0162787 +-0.0731111 0.152638 -0.0358925 +-0.0630631 0.0351206 0.0420909 +-0.0638567 0.0981567 -0.0173229 +-0.0886136 0.0969805 0.0223931 +0.0376971 0.0381803 0.0174952 +-0.0389196 0.163835 0.00150184 +0.0470726 0.048551 -0.0036464 +-0.0195067 0.119545 0.0340058 +-0.0154952 0.101637 0.0439764 +-0.0615198 0.167807 -0.0565879 +0.000487515 0.110024 0.0426254 +0.0218587 0.0714183 0.0491823 +-0.0891206 0.0888853 0.014456 +0.00728906 0.0602827 0.0543511 +0.0159015 0.122788 0.0313235 +0.0287151 0.0982016 0.0416756 +-0.0515592 0.162515 0.00512403 +-0.0562626 0.0437454 0.0167126 +-0.0181312 0.0948304 -0.0325641 +-0.0375002 0.0337858 -0.019518 +-0.0283411 0.0368095 0.0535577 +0.0138368 0.126165 0.029064 +-0.0698832 0.115052 -0.00855978 +-0.0166197 0.126668 0.0238945 +-0.062914 0.11807 -0.00990368 +-0.0489018 0.129654 0.0292632 +-0.0524468 0.0489914 0.023647 +-0.0590382 0.132561 -0.00680716 +-0.0429798 0.150656 0.00610371 +-0.0708619 0.0368523 0.00979504 +0.0198172 0.102563 -0.0205962 +0.0416527 0.0846461 0.030449 +-0.0215106 0.119492 0.0328652 +-0.0144877 0.185446 -0.0257702 +0.0475192 0.0568404 0.0316921 +-0.0913388 0.115949 0.00831473 +0.0281313 0.0591962 0.0423168 +-0.035495 0.171374 -0.0137494 +-0.0736292 0.156748 -0.0014693 +-0.00249426 0.0505094 0.0526827 +-0.0909607 0.144377 0.0265412 +-0.0410851 0.123071 0.0255089 +-0.0226414 0.0961417 -0.0259441 +0.0264078 0.120534 -0.000510633 +-0.0193661 0.126578 0.00214409 +0.0465619 0.0568462 0.0320779 +0.0207007 0.040829 0.0419301 +-0.0564899 0.0440403 0.0448345 +0.000863008 0.0381264 -0.0140589 +-0.0418598 0.102811 -0.0210501 +-0.00158954 0.0376715 -0.025054 +-0.0723294 0.177884 -0.0550149 +-0.0544961 0.0732542 0.0409056 +-0.00649673 0.121064 0.0364033 +0.0504194 0.0446982 0.00822878 +-0.0153541 0.0337728 -0.0226273 +-0.0303696 0.0486908 0.0439216 +-0.0334968 0.033775 0.00883944 +-0.0685163 0.108328 0.0375372 +-0.0304988 0.0603029 0.0376116 +-0.0662971 0.0363734 0.0376513 +0.0311541 0.072342 -0.0197804 +0.016819 0.0860765 0.050782 +-0.067492 0.0944588 0.0423306 +-0.0187655 0.0714126 -0.0384549 +-0.0605051 0.128314 0.040613 +0.00838174 0.0449018 -0.0251393 +-0.0164768 0.122235 0.0319313 +0.0227625 0.125142 0.00666699 +-0.0528343 0.0337802 -0.0114802 +0.0451301 0.0903696 0.00218472 +-0.0576106 0.148673 -0.00161022 +0.00250457 0.100333 0.0462614 +-0.0262513 0.0350951 0.0517484 +-0.054684 0.067848 -0.0128124 +-0.0441291 0.159145 -0.00944971 +-0.0440467 0.0380432 -0.0230799 +-0.0447681 0.146394 0.00358641 +-0.0894274 0.0915536 0.0114438 +-0.0751139 0.0954949 0.0389973 +0.0383178 0.106879 0.000185785 +-0.0732998 0.0654414 0.00491231 +-0.00228741 0.13015 0.0232201 +-0.0372213 0.150899 -0.00386632 +-0.0261116 0.0809919 0.0513952 +0.0322341 0.112712 0.0291688 +-0.0690565 0.0338884 -0.00389811 +0.0101437 0.101615 -0.0217271 +0.0425651 0.10009 0.017161 +-0.0355201 0.16973 -0.000114667 +0.00176571 0.0954911 -0.0311224 +0.0373922 0.0461028 -0.00552229 +-0.0261166 0.163762 -0.0159025 +-0.0651006 0.0458549 0.00368955 +0.0212923 0.0982999 -0.0220426 +0.026467 0.0383015 -0.00253304 +-0.0231343 0.0383693 -0.0171708 +0.00758009 0.121578 -0.0129987 +-0.0491724 0.116402 -0.0151155 +-0.0174383 0.038419 -0.00120725 +-0.0368548 0.0985914 -0.0223265 +-0.0599288 0.145383 0.0362513 +0.00646924 0.0964123 0.0516046 +-0.0630484 0.138442 -0.00719818 +-0.0266978 0.0917701 0.0460149 +-0.0534968 0.0790911 0.0438637 +-0.0203653 0.0682964 0.0517114 +0.0203853 0.049027 -0.0227929 +-0.0539349 0.0527611 0.0108042 +0.0460422 0.0848268 0.0101717 +-0.0728228 0.148718 -0.0323717 +0.0337238 0.11401 0.0250189 +-0.0718098 0.0864713 -0.016231 +-0.000525817 0.0352062 0.0124275 +0.0044963 0.0605551 0.0556784 +0.0278498 0.045613 -0.00720046 +0.0242032 0.0987613 -0.0205495 +0.0133536 0.0359529 -0.0210721 +-0.00614443 0.0386147 0.00639011 +-0.091603 0.144731 0.0191577 +-0.00870302 0.0387758 0.0292604 +0.00137957 0.0343513 0.00995357 +0.0580311 0.0716366 0.0149943 +0.029585 0.0495591 -0.0127459 +-0.0873232 0.0873446 0.00247822 +-0.0562907 0.154938 0.0178178 +0.0227189 0.116065 -0.0110894 +-0.089541 0.143417 0.0301691 +-0.0295204 0.0607307 -0.0234192 +-0.072166 0.0982206 0.0402281 +0.0461397 0.0764263 0.0052018 +-0.0650238 0.0405393 0.0286621 +-0.0357662 0.0798799 -0.0213145 +-0.0210545 0.100222 -0.024166 +-0.051798 0.0884029 -0.0218862 +-0.0585235 0.0425717 0.0226979 +-0.0581184 0.132538 0.0370402 +-0.0500652 0.125773 -0.00688378 +-0.0570027 0.145725 -0.00171879 +-0.000114754 0.120081 -0.0133088 +-0.0558569 0.135328 0.0332838 +-0.071744 0.162192 -0.0110365 +-0.0533559 0.0609747 0.0280244 +-0.0678966 0.110866 -0.0116376 +-0.0708871 0.119431 -0.00850422 +-0.0743754 0.0995209 0.0381506 +-0.0827936 0.110133 0.0365 +0.0274001 0.0354299 0.0197116 +-0.0700593 0.152584 0.0349486 +-0.0594807 0.0398598 0.0207095 +-0.0506478 0.0648447 -0.0114426 +-0.0548507 0.0955893 -0.0216695 +-0.0735032 0.144216 0.0449341 +-0.0746874 0.169403 -0.0279937 +-0.041349 0.172669 -0.00697494 +-0.0879813 0.0968653 0.0054141 +-0.0639066 0.158701 -0.0499459 +-0.0295413 0.0348538 0.0461198 +0.0425062 0.0610428 0.0297234 +-0.0761006 0.0693618 0.0222283 +0.0350916 0.102085 0.0333486 +-0.0434936 0.107078 0.040105 +-0.0210995 0.166843 -0.0113898 +-0.0599936 0.0459773 0.0409964 +0.0260763 0.0726986 0.044735 +0.0368852 0.111459 0.00613554 +-0.00301536 0.127034 0.030217 +-0.0313536 0.0384061 -0.00216621 +0.0173795 0.0350198 0.030737 +-0.072846 0.165216 -0.0419869 +-0.0344415 0.176449 -0.00471515 +0.00170995 0.0392427 0.0309786 +-0.04085 0.0985381 -0.021696 +-0.0479764 0.135553 0.00940627 +-0.0332667 0.0835875 -0.0265323 +0.0206498 0.0781917 0.0510092 +0.0122103 0.0893249 -0.030653 +-0.0464803 0.0335784 -0.0137021 +-0.0367962 0.0383714 -0.00507539 +-0.00449141 0.0911839 0.0565229 +0.0243337 0.0605883 -0.0247185 +-0.0826166 0.123078 0.0498508 +0.0540378 0.0525213 0.0252382 +-0.0675101 0.0369158 -0.0062949 +-0.0205096 0.124449 -0.00369667 +0.0285796 0.107031 -0.0133812 +0.0320794 0.0526694 -0.0107538 +-0.0203373 0.0610131 0.0476733 +-0.0674469 0.0396367 -0.00494886 +-0.0599339 0.120955 -0.00911512 +0.0168017 0.105866 -0.0181237 +-0.0787857 0.0744548 -0.00455566 +0.0193044 0.127372 0.00964815 +-0.038368 0.0457007 -0.0229731 +-0.025877 0.125557 0.00449924 +-0.0609237 0.0414243 0.0237035 +-0.0433646 0.153626 0.00736711 +-0.0513808 0.0500433 0.0347314 +-0.0212772 0.0382158 0.00549847 +0.0220013 0.0348195 0.00816409 +-0.0519377 0.0335199 0.00532131 +0.00789859 0.0999878 -0.0218807 +0.0337096 0.115696 0.0178949 +-0.0404258 0.0418709 -0.0242648 +-0.0188763 0.105884 -0.0226282 +-0.0648153 0.175482 -0.051724 +-0.070065 0.148313 -0.0344143 +-0.0584005 0.0439707 0.0246877 +0.0215152 0.0795452 0.0505127 +-0.000765864 0.0811873 -0.0364626 +-0.0633527 0.0454486 0.000289555 +-0.0455004 0.113892 0.0345333 +-0.0205229 0.0336428 -0.0235211 +-0.0658189 0.0895406 -0.0182783 +0.00772286 0.0346363 0.0381279 +0.044441 0.093115 0.00120191 +-0.0859796 0.119771 -0.00178632 +0.00662772 0.0374926 -0.0123303 +-0.0495602 0.0418248 -0.0110192 +-0.0863354 0.129395 -0.000699295 +-0.00570279 0.0613633 -0.0351663 +-0.0195101 0.114089 0.03835 +-0.0679008 0.1038 -0.0147014 +0.045275 0.0917907 0.0041773 +0.0258455 0.110181 -0.0127425 +-0.00858661 0.0376839 -0.0256139 +-0.0494924 0.160775 0.00747898 +-0.0186783 0.101771 -0.0238107 +-0.0870678 0.11107 0.0203515 +-0.0692028 0.135485 0.0474165 +-0.0665472 0.0446244 0.00170489 +-0.0679768 0.0791427 0.0408622 +0.0184726 0.0851741 0.0505075 +-0.0203373 0.158355 -0.00674555 +-0.0364979 0.119358 0.0304421 +-0.0395021 0.0450562 0.0411081 +-0.00309828 0.0379762 0.00940157 +-0.054497 0.10568 0.0405938 +-0.0354869 0.0903478 0.043788 +-0.0882673 0.102346 0.019362 +-0.0518479 0.128319 0.033784 +0.0163666 0.0522247 -0.0268816 +-0.0216233 0.0450569 -0.0280185 +-0.0332919 0.124337 -0.00345787 +-0.0603705 0.118249 -0.0108601 +-0.0883316 0.128385 0.0454834 +-0.0681462 0.033688 -0.00353141 +0.0232453 0.12098 -0.00440593 +-0.0294449 0.038677 -0.0149866 +0.0110249 0.0988999 -0.0227192 +-0.0218748 0.174208 -0.0142339 +0.0205417 0.0741225 0.0508294 +-0.0627477 0.148893 -0.0169766 +-0.0398023 0.0338119 -0.0274661 +-0.0319551 0.0348046 0.0438977 +0.0104998 0.108437 0.040345 +-0.0139772 0.164028 -0.0115888 +-0.0247602 0.0379556 0.0194943 +-0.000934383 0.0340393 -0.0200439 +0.0476809 0.0472678 -0.00164326 +-0.0400291 0.0354632 0.00960076 +-0.0671756 0.0610764 0.00625684 +-0.0852257 0.114326 0.001271 +-0.0754019 0.151364 -0.0118956 +-0.0437605 0.146927 0.00133694 +-0.0619528 0.15527 -0.030594 +0.0363929 0.0490985 -0.00642376 +-0.0100186 0.0981603 -0.0280043 +-0.0119452 0.129197 0.00527137 +-0.0346207 0.0519685 -0.0102527 +0.0527588 0.0510331 0.0250995 +-0.0635082 0.148832 -0.022668 +-0.0147336 0.0671673 -0.0377424 +-0.0704174 0.170744 -0.0307374 +0.0105902 0.125785 0.0307704 +-0.0258145 0.0894344 -0.0348302 +-0.0177853 0.0383982 0.00785589 +-0.0875073 0.0954698 0.00341799 +-0.0424838 0.105689 0.0405023 +0.049326 0.0581361 0.0307698 +-0.0426568 0.0578158 -0.011891 +-0.0506189 0.0517055 -0.00806622 +-0.0751298 0.155996 0.0213056 +-0.0740765 0.0662649 0.0182774 +-0.055953 0.151039 0.0297159 +0.00149895 0.0519342 0.0529111 +-0.0476623 0.135572 0.0124001 +0.00259703 0.093007 -0.0325523 +-0.021995 0.185609 -0.0143485 +0.0421516 0.0805501 0.0292856 +-0.014868 0.104453 -0.022832 +-0.0398868 0.108509 -0.0195593 +0.0259209 0.122835 0.0206655 +-0.0616544 0.15599 0.0144357 +-0.0733101 0.14716 -0.0188577 +-0.0262613 0.119664 -0.0106051 +0.0355444 0.109985 0.0269213 +0.04069 0.0703475 -0.0087868 +-0.0658232 0.100991 -0.0166158 +0.0443888 0.0846966 -0.000809941 +-0.0235014 0.109891 0.0398372 +0.0275195 0.0713136 0.0432798 +0.0364601 0.111481 0.0203251 +-0.0766191 0.168746 -0.0293719 +0.041872 0.069712 0.028792 +-0.0188551 0.177186 -0.0168879 +-0.0430291 0.148351 -0.00306372 +0.0241638 0.0853333 -0.0244737 +0.017675 0.127712 0.00477874 +-0.0888835 0.0983415 0.0204012 +-0.0202474 0.0582316 0.0476806 +-0.0719293 0.126758 -0.00881076 +-0.0294958 0.0960659 0.0449891 +-0.0491744 0.14016 0.00939463 +-0.0284952 0.105677 0.0407009 +0.0215711 0.035903 0.0289947 +0.0112282 0.0780681 -0.031821 +0.0343153 0.115038 0.0152609 +0.0213375 0.0536353 -0.0261911 +-0.0754641 0.149954 -0.0208706 +0.0174704 0.1044 0.0442882 +0.00640724 0.0390095 -0.0238414 +-0.0396234 0.150027 -0.00409811 +-0.0900489 0.137821 0.0141988 +0.0252808 0.0733562 -0.0251315 +-0.0492373 0.132883 0.0267635 +-0.0430533 0.034543 -0.0263375 +0.0217093 0.0520814 0.0434982 +-0.0333828 0.0807789 -0.0265175 +-0.0761052 0.14997 -0.0158781 +-0.0707786 0.0690222 0.0306409 +0.0401031 0.0589615 -0.00453029 +-0.0260252 0.0904818 0.0482145 +-0.0895062 0.0902087 0.0114561 +-0.0526923 0.0334338 -0.00380212 +-0.0114811 0.0646532 0.0550744 +-0.0370678 0.157759 -0.0113588 +0.00952731 0.105746 0.0431674 +-0.0410118 0.126885 0.0180931 +0.0197485 0.105413 -0.017636 +-0.0629292 0.155832 0.0110869 +-0.0581695 0.15592 0.011334 +-0.00650086 0.0561902 0.0537938 +-0.0338729 0.15688 -0.0110666 +0.0405297 0.0779725 0.0322363 +-0.0642469 0.0423257 0.0129047 +0.0237846 0.0476926 0.0394013 +-0.0217726 0.172729 -0.0141007 +-0.0416287 0.0534443 -0.0111279 +-0.077087 0.154176 -0.0108977 +0.0304203 0.0366341 0.0210583 +-0.0306156 0.0552316 -0.0163811 +-0.0584355 0.0482117 0.00674018 +-0.0284904 0.0917855 0.0443788 +-0.0347085 0.0681808 -0.0168555 +0.0286267 0.117101 -0.00417221 +0.000831008 0.0996342 -0.0235195 +0.00330328 0.0611715 -0.0325304 +-0.0739165 0.113504 -0.00683708 +-0.0898235 0.126994 0.0441831 +-0.0889746 0.0942393 0.0114303 +-0.0279086 0.0704216 -0.0334901 +-0.041504 0.0562873 0.0399374 +0.0394095 0.0793879 0.0341721 +-0.0669825 0.112069 0.0420748 +-0.0847653 0.103459 0.000382003 +-0.00649785 0.0801379 0.0576218 +-0.0226054 0.126675 0.00715587 +-0.000755212 0.130746 0.00366553 +-0.0328403 0.0348519 -0.0195836 +0.0396279 0.0857065 -0.0127726 +-0.0805255 0.14991 0.0359696 +0.0353489 0.0955322 0.0372114 +0.0102384 0.0781052 -0.0323493 +-0.0296143 0.0551126 -0.0213868 +-0.0699315 0.126779 -0.00900092 +-0.0795103 0.126002 0.0528073 +-0.000474921 0.0732072 0.0579427 +0.00749418 0.095088 0.0520151 +-0.0841797 0.101927 0.0280813 +0.0424909 0.101472 0.00517268 +0.00951997 0.0673959 0.0546877 +-0.0472854 0.0671503 0.0390298 +0.0376148 0.100847 -0.00874384 +-0.0374929 0.116616 0.0320198 +0.029259 0.120361 0.0176317 +-0.0737149 0.158251 -0.0299203 +-0.0114976 0.116917 0.038689 +0.0413371 0.0444728 -0.00290745 +-0.0627029 0.150609 -0.0235776 +-0.0302691 0.080511 -0.0335682 +0.0300872 0.0497043 -0.0117138 +0.0222773 0.0620859 -0.0257917 +-0.0570144 0.147201 -0.00173114 +-0.0760781 0.173825 -0.0400503 +-0.00149572 0.101631 0.0441885 +-0.0261888 0.17564 -0.0188354 +0.0231825 0.0577956 0.0456852 +-0.0924811 0.125593 0.0372603 +0.00115082 0.131147 0.0187057 +-0.0841614 0.142011 0.042356 +0.042729 0.0901813 -0.0058099 +0.0213045 0.0372836 -0.00268556 +-0.0160362 0.0338015 -0.0209075 +0.0394869 0.10531 0.000602508 +-0.0239168 0.0383626 0.00119722 +-0.0164538 0.0343139 -0.019589 +-0.0592802 0.154415 0.0283608 +-0.0609269 0.155849 0.0219449 +-0.0250081 0.0361291 -0.0192131 +-0.0853634 0.14876 0.00617316 +-0.0253618 0.0386908 -0.0141849 +-0.0881693 0.0922771 0.0238938 +-0.0728038 0.0921924 -0.0153063 +-0.0708783 0.150832 0.0377201 +0.00548074 0.111376 0.0414038 +-0.0524967 0.0945727 0.0438723 +0.0115063 0.0343546 -0.0179688 +0.00151312 0.081484 0.0572224 +-0.0149936 0.0395459 0.0398583 +0.0120392 0.129427 0.0226627 +0.0591195 0.05666 0.00817454 +0.0328155 0.102974 -0.0130264 +-0.0371359 0.123595 0.025439 +0.0450698 0.0805625 0.0231647 +-0.028064 0.0385407 0.0362565 +-0.00648913 0.0732625 0.0583326 +-0.0374981 0.0719295 0.0420686 +-0.0736872 0.176894 -0.0449171 +-0.0672224 0.0339784 0.0107486 +-0.0758756 0.104904 -0.00955908 +0.0439403 0.083251 -0.00181959 +-0.0614723 0.15843 -0.0295877 +0.0442849 0.0945485 0.0181566 +-0.065503 0.044849 0.00843715 +0.00357616 0.0395385 0.0347033 +-0.028754 0.0634689 -0.0284339 +0.0315757 0.0914687 -0.0188156 +0.00716348 0.0343484 0.0202029 +-0.0216788 0.0493937 -0.0287126 +-0.0716516 0.139715 0.0474384 +-0.043721 0.033715 -0.00407894 +-0.0817894 0.0909919 -0.00761357 +0.0425053 0.0513815 0.0326154 +-0.0638693 0.170945 -0.0476012 +0.0316414 0.11271 0.0301021 +-0.0306212 0.159741 -0.0134031 +-0.0214041 0.0879871 0.0549671 +-0.0670934 0.0625692 0.00143601 +-0.0365003 0.087456 0.0430956 +0.00150165 0.0919153 -0.0334107 +-0.024293 0.124271 0.0211991 +-0.0604952 0.0932426 0.0451145 +0.00516194 0.0978455 -0.0256065 +-0.00249882 0.081515 0.0574957 +-0.0636907 0.146369 -0.0159165 +-0.0129939 0.103563 -0.0236849 +0.00282967 0.131401 0.0178813 +0.00250691 0.0883899 0.0564027 +0.0220994 0.0476682 0.0404859 +-0.0466625 0.12523 -0.00836412 +0.00382851 0.0992997 -0.0231609 +-0.0879384 0.126705 0.000268669 +-0.0725213 0.0636798 0.0102197 +-0.00645782 0.0338359 -0.0228235 +-0.0523786 0.138216 -8.53499e-05 +-0.041943 0.114992 -0.0156494 +0.0435142 0.0513638 0.0325031 +0.0432433 0.0958712 0.000187851 +-0.0729725 0.170894 -0.0302341 +-0.0303619 0.0381166 0.0307902 +-0.0942177 0.125518 0.0172578 +0.0446543 0.0959754 0.00716634 +-0.0263933 0.0864552 0.0500994 +0.0352313 0.064664 0.0385641 +-0.0913521 0.14609 0.0171489 +-0.00798473 0.0348553 0.0472244 +-0.00181216 0.086792 -0.0360393 +-0.0153678 0.09644 0.0517723 +0.0268857 0.117842 -0.00498093 +-0.0354986 0.0747267 0.0419454 +-0.0573263 0.0481094 0.0336642 +-0.0386241 0.125328 -0.00654651 +-0.020119 0.0431531 0.0531418 +-0.0226834 0.174208 -0.0136486 +-0.0554979 0.0889982 0.0448936 +-0.0321193 0.0366883 0.0508235 +0.013731 0.104072 -0.0202068 +0.0407967 0.0661529 -0.00677209 +-0.0792933 0.16941 -0.0399858 +-0.0250378 0.174204 -0.0117666 +-0.0718111 0.0631642 0.010775 +-0.0710553 0.181198 -0.0554882 +-0.058796 0.0868581 -0.0207882 +-0.0136362 0.0466649 -0.0295427 +-0.0924917 0.124196 0.0312677 +-0.0331602 0.171158 -0.0153905 +-0.0724259 0.0727975 0.0340482 +-0.0566618 0.0645338 -0.00803085 +-0.0705221 0.098629 0.0408842 +0.0118568 0.126524 -0.00436904 +-0.0784161 0.116342 0.0501163 +-0.0677948 0.160582 -0.0110564 +-0.0456903 0.11799 -0.0148012 +0.0526315 0.0462656 0.0102089 +0.0453672 0.0456539 0.0269438 +-0.00726729 0.129761 0.0228793 +-0.0659232 0.105312 -0.014993 +-0.087769 0.118492 0.00124641 +-0.00149512 0.0562755 0.0546084 +-0.089164 0.0928946 0.0114433 +-0.0841907 0.078353 0.0198111 +-0.0679412 0.0656184 0.0271584 +0.0224551 0.0368363 -0.00219983 +-0.0356854 0.0435567 0.045098 +-0.0457595 0.0797224 -0.0196258 +-0.0405031 0.0762353 0.0429954 +-0.0640239 0.14106 0.0390925 +-0.0797368 0.119028 0.049952 +-0.0864815 0.0846104 0.00248575 +-0.0774908 0.137247 0.0499166 +-0.0586931 0.0693474 -0.0143558 +-0.0340813 0.159269 -0.0127772 +-0.0889533 0.124321 0.0462453 +-0.0611638 0.0468972 0.00167818 +-0.0925249 0.130961 0.0132346 +-0.0707251 0.033867 0.00298473 +0.0514024 0.0510939 0.0266785 +-0.000225629 0.097747 0.0525183 +0.0260546 0.112325 -0.0110571 +-0.0429452 0.0345628 0.0382617 +-0.0174331 0.0625913 0.0517909 +0.0422611 0.0397457 0.00959333 +-0.0374974 0.0705158 0.0419336 +-0.0368535 0.0362973 -0.0142764 +-0.0132005 0.128825 0.00480743 +-0.0808442 0.110042 -0.00155764 +-0.0890966 0.114815 0.0438036 +-0.0195037 0.11681 0.0364149 +-0.0653439 0.127011 0.0477296 +-0.0749324 0.152731 -0.0198994 +-0.0131083 0.128689 0.020774 +-0.0761869 0.149999 -0.0118749 +-0.0657951 0.0852369 -0.0187501 +-0.0515872 0.0558557 0.0146208 +0.0414903 0.0541829 0.0322405 +-0.0094881 0.112787 0.0415502 +-0.0473098 0.0390167 0.04506 +-0.076903 0.112654 -0.00467049 +-0.0792829 0.109073 0.0381388 +0.0277273 0.0646184 0.0435417 +-0.0923959 0.132359 0.0202239 +-0.0505803 0.0502828 -0.00813802 +0.00549299 0.117639 -0.0167508 +-0.0166687 0.038571 -0.00303984 +-0.0728836 0.119408 -0.00813229 +-0.00373228 0.0669631 -0.0346735 +0.0373953 0.0445589 -0.00471693 +0.00577997 0.0365296 -0.0134893 +0.0065091 0.0772612 0.0561769 +-0.0785581 0.153669 0.00407716 +-0.0631137 0.14437 -0.00863045 +0.0335076 0.0453895 0.0300756 +-0.00148382 0.131063 0.00627096 +-0.0117022 0.0613984 -0.0359464 +-0.0390182 0.0473551 -0.0162983 +0.0174871 0.10577 0.0429453 +0.0173606 0.128011 0.00608341 +-0.0587951 0.0337712 0.0197789 +-0.0554323 0.145321 0.0304155 +-0.021174 0.184521 -0.0131308 +-0.0546552 0.0656851 0.0351815 +-0.00872132 0.0656071 -0.0355909 +0.00329381 0.0654903 -0.0335962 +-0.0874212 0.0861211 0.0204627 +0.0341358 0.0641297 -0.0158137 +-0.063479 0.0384929 -0.0076832 +0.0174063 0.0417452 -0.0219906 +-0.069028 0.0409064 0.00923732 +0.0577041 0.0703778 0.00716237 +-0.0506338 0.0663851 -0.0124105 +-0.04882 0.119077 -0.0139102 +-0.0660878 0.161167 -0.014759 +0.060054 0.0678303 0.0101401 +-0.063913 0.169258 -0.0441943 +-0.053845 0.0463107 0.0236764 +-0.0784828 0.175619 -0.0475153 +-0.0313957 0.12387 -0.00298136 +0.0154947 0.107116 0.0420405 +-0.036876 0.0434502 0.0434666 +-0.06715 0.145376 0.0416405 +-0.0155327 0.181625 -0.0208343 +-0.0715781 0.0968766 0.0410625 +0.0306462 0.0968954 0.0409575 +0.00964614 0.0589005 0.0527021 +0.0527245 0.0736707 0.0159788 +-0.0861826 0.104908 0.00538017 +-0.0812551 0.138069 0.0480599 +0.0475108 0.0597433 0.0313293 +-0.0156256 0.0450397 -0.0279587 +-0.0221316 0.125526 0.0205056 +-0.0322922 0.122832 0.0242564 +-0.0132407 0.164048 -0.012311 +-0.0415061 0.0620057 0.0410722 +-0.0657901 0.128396 0.0470862 +0.0282252 0.0760107 -0.0227881 +-0.0701785 0.136914 0.0477863 +0.03413 0.0822192 0.0406334 +0.0609039 0.0609671 0.0121585 +-0.0515277 0.136697 0.0258426 +-0.00994091 0.089177 -0.0367642 +0.0451266 0.0727442 0.0219703 +0.0336533 0.110026 0.0294894 +-0.0721725 0.156265 0.0135984 +0.0312336 0.051167 -0.0107736 +-0.0023355 0.0926921 -0.0342848 +-0.0524965 0.0790864 0.0437156 +-0.0095237 0.0431051 0.0494016 +0.000300907 0.0626948 -0.0340909 +-0.0905968 0.140629 0.0221693 +-0.00800869 0.0388567 -0.00527149 +-0.0584939 0.0847167 0.0439692 +-0.0635243 0.0334646 -0.00419693 +-0.090351 0.14066 0.0261698 +-0.0588327 0.0911696 -0.0205864 +-0.020414 0.0541289 0.0465389 +-0.056688 0.067746 -0.0120827 +-0.0344045 0.152028 -0.00248634 +-0.0154988 0.114109 0.0392017 +-0.0384878 0.168246 0.00236894 +-0.0115711 0.100192 -0.0241483 +-0.0167308 0.0657547 -0.0377116 +-0.0466962 0.147986 -0.00319779 +-0.0926613 0.122825 0.0414622 +0.0312237 0.0871647 -0.0198177 +-0.0257476 0.0682496 -0.0344079 +-0.0524537 0.0504524 0.0306643 +-0.0768211 0.0804727 0.0355147 +-0.00449363 0.0456798 0.0470573 +0.0418422 0.0690449 -0.00578965 +-0.0262667 0.110544 -0.0190457 +-0.00251293 0.105882 0.0441369 +-0.0707082 0.0395895 0.000643319 +0.0128917 0.127573 0.0272919 +-0.0354687 0.054727 0.0384538 +0.00920102 0.0837298 -0.0322138 +0.0094791 0.0347704 0.0365664 +-0.0435038 0.0438236 0.0424673 +-0.0551839 0.140262 -0.00246039 +0.00523902 0.0341335 -0.0189244 +0.0273731 0.0578707 -0.0207586 +0.0119495 0.129938 0.00409466 +-0.0494983 0.102885 0.0411106 +-0.0370447 0.0379826 0.045213 +0.0150108 0.0349639 0.0393317 +0.0345233 0.0498189 0.0314944 +-0.0153828 0.128676 0.0170423 +-0.0618725 0.160013 -0.0255862 +-0.0525544 0.0504168 0.0256484 +-0.073344 0.0672327 0.000494062 +0.0393875 0.0460438 -0.00485579 +-0.0152754 0.103231 -0.0233341 +-0.0753549 0.104884 0.0361423 +0.0108274 0.0362708 -0.0225637 +0.0342152 0.0862629 0.0407864 +-0.088758 0.143311 0.0121502 +-0.0572353 0.0465198 -0.0043437 +0.0198267 0.035157 0.00555798 +0.0261922 0.0507168 -0.0207207 +0.0268986 0.0357578 0.0211357 +-0.0349846 0.0837189 -0.0236297 +-0.0222119 0.158173 -0.00418672 +0.024391 0.115338 0.0336864 +-0.0200061 0.124102 0.0256765 +-0.069632 0.0719472 -0.0104624 +-0.0322859 0.0792627 -0.0305329 +-0.0506516 0.033429 -0.00887801 +-0.0358626 0.101452 -0.0219425 +0.0293657 0.0447288 -0.00609588 +-0.0662305 0.0339335 0.0109932 +-0.00786973 0.104508 -0.0230207 +-0.0712429 0.177886 -0.0560058 +-0.00159432 0.129182 0.0263815 +-0.0283933 0.0831937 -0.0356194 +0.0443268 0.0511334 0.0322609 +-0.0318469 0.0958266 -0.0236233 +0.0205346 0.0937418 -0.0232686 +-0.012793 0.0813325 -0.0389447 +-0.0235889 0.0983837 -0.0242804 +-0.062496 0.105649 0.040196 +-0.0194646 0.0347564 0.0483645 +-0.0124518 0.038713 0.0303489 +-0.0444408 0.0335855 -0.0133031 +-0.00148369 0.0732377 0.0582942 +-0.0837769 0.153466 0.0110188 +-0.0898767 0.135147 0.0252168 +0.0369605 0.105409 -0.00483089 +-0.0255274 0.113962 0.0353265 +-0.0539587 0.0338764 0.0242313 +-0.0789197 0.104773 0.0326412 +0.0105421 0.118176 -0.0153416 +-0.0256953 0.0385914 0.0331228 +-0.0336328 0.126783 0.00457249 +-0.0470116 0.0710509 0.0409961 +-0.0930389 0.129675 0.0242521 +-0.0464764 0.0861628 0.0446798 +-0.0561893 0.159558 0.00559608 +-0.0091854 0.130144 0.00917512 +-0.0798951 0.0840617 -0.00859358 +-0.0336645 0.0339705 0.0230467 +0.00935764 0.0539048 -0.0300706 +-0.0831098 0.0777207 0.0215128 +-0.0470469 0.155045 0.00906939 +-0.0135887 0.169514 -0.0234669 +0.0418337 0.0395215 0.00781447 +-0.0276517 0.15535 -0.00385533 +-0.0201931 0.18164 -0.0152257 +-0.0335046 0.177862 -0.00863199 +0.0345014 0.0513521 0.0321623 +-0.0804527 0.143139 -0.00181198 +-0.0816965 0.144555 0.000152955 +0.0607459 0.0623413 0.0091502 +-0.0779458 0.175786 -0.0452228 +-0.0577187 0.146758 0.0323537 +-0.0403111 0.127303 0.0168527 +0.0204871 0.0934146 0.0476927 +0.00588424 0.100173 -0.0220733 +-0.00768539 0.0584014 -0.0338334 +-0.0447099 0.069553 -0.0165571 +-0.0287391 0.0620637 -0.0274208 +0.0157473 0.0947545 -0.0243195 +-0.063441 0.156071 0.0225051 +0.00824182 0.0753956 -0.0338579 +0.00561249 0.0927088 -0.0322048 +-0.0475077 0.0732702 0.0416223 +0.0145005 0.11127 0.0394252 +0.00450182 0.0413372 0.0458645 +0.00631667 0.061015 -0.0309472 +-0.0794763 0.0926775 0.0349659 +-0.0718543 0.111061 0.0453722 +-0.0891984 0.129697 0.0434765 +0.0151955 0.129241 0.0138359 +0.0236821 0.0824052 -0.0254011 +-0.0015019 0.110031 0.0427805 +-0.0215043 0.109928 0.0403615 +-0.0939826 0.118759 0.0192971 +-0.0624131 0.11535 0.0394932 +-0.0833865 0.140392 0.00124854 +-0.0465624 0.124393 -0.00950278 +-0.0146513 0.0496822 -0.0311895 +-0.0641648 0.15616 0.0149932 +-0.0729217 0.126742 -0.00866826 +-0.0253625 0.126177 0.010523 +0.0277777 0.108556 -0.0130095 +-0.0788017 0.0846357 0.0359502 +-0.0247742 0.180145 -0.00956802 +0.0188129 0.101666 -0.0216414 +0.00516264 0.131576 0.00874185 +-0.0633822 0.164679 -0.0305938 +-0.0375944 0.116238 -0.0149818 +0.0194959 0.111012 -0.0156283 +-0.0342918 0.0780403 -0.0245107 +-0.0861846 0.083225 0.00647736 +-0.0161451 0.166792 -0.0199866 +-0.0872007 0.147399 0.00826035 +0.0567195 0.0508531 0.00818949 +-0.0594966 0.100149 0.0427407 +-0.0584967 0.0761953 0.0427061 +-0.0218317 0.124906 0.0220793 +-0.00826101 0.0384472 0.0115633 +-0.0383343 0.121902 -0.0109317 +-0.0521665 0.136903 -0.000627156 +-0.0215605 0.0383186 -0.00194746 +0.0481264 0.060275 -0.00442661 +0.0154998 0.108504 0.0406925 +-0.0729927 0.08468 0.0400334 +0.0156625 0.0631375 0.0506866 +-0.0244911 0.101622 0.043846 +-0.0464946 0.131544 0.00524728 +-0.0496757 0.0678792 -0.0135965 +0.0429479 0.0845778 -0.00579145 +-0.0889655 0.0969901 0.0204055 +-0.0641121 0.152654 -0.0038572 +0.0409571 0.0971716 0.0271682 +-0.0171621 0.0382418 0.0171791 +0.00646008 0.118492 -0.0156628 +0.0328247 0.054955 0.0367483 +-0.0843958 0.13208 -0.00165487 +-0.0521768 0.0517998 0.0286453 +0.0415397 0.0690275 -0.00677 +-0.00193982 0.12966 0.0247961 +-0.0686037 0.157344 -0.00409918 +-0.0332546 0.12417 0.0223928 +-0.0762473 0.0920177 -0.013581 +0.0392491 0.0672477 0.0338308 +-0.0841314 0.0776758 0.00449933 +-0.0638136 0.0680952 0.0346563 +-0.00579523 0.10109 0.0444886 +-0.0717812 0.166615 -0.0459981 +-0.0474379 0.0355948 -0.0152688 +0.0581028 0.0523658 0.0121806 +-0.0787218 0.0967552 0.0354897 +-0.0561139 0.139571 -0.00370722 +-0.0605064 0.0394509 -0.00845033 +-0.0890965 0.111935 0.0113594 +-0.0579064 0.158452 0.00407429 +0.0204977 0.0920241 0.0479175 +-0.0224928 0.0988548 0.044702 +-0.0289733 0.124361 0.000543811 +-0.00750575 0.0457415 0.0474579 +0.043354 0.053395 -0.00666154 +0.0230359 0.124766 0.00534006 +-0.0773785 0.174262 -0.0420678 +-0.0273153 0.0387018 0.0344821 +-2.85469e-05 0.0391507 -0.00580542 +-0.0653748 0.149517 -0.0319115 +-0.0386792 0.0336259 0.00249375 +-0.0655034 0.106997 0.0388261 +0.0203192 0.0679349 -0.0283363 +0.0395784 0.104495 -0.000545476 +-0.0239953 0.114912 -0.0156465 +-0.0660228 0.160133 -0.0132914 +0.0397718 0.0940445 0.031303 +-0.0719497 0.132579 -0.00806719 +-0.0634812 0.0760895 0.041143 +-0.0484925 0.14723 -0.00252533 +0.054748 0.0690996 0.0027667 +-0.0723713 0.156038 0.0237254 +0.034267 0.0613198 -0.014809 +-0.0483876 0.0348751 0.0437589 +-0.05979 0.0839541 -0.0202843 +0.0501248 0.0723145 0.00745971 +0.0347025 0.105449 -0.00966587 +-0.0352566 0.0382472 -0.0299775 +0.0470963 0.045623 0.0254581 +-0.0855435 0.108961 0.00733555 +-0.0206804 0.112216 -0.0188434 +0.00523056 0.0796312 -0.0340387 +-0.0465619 0.047561 -0.00986957 +-0.033587 0.0348608 0.0452447 +-0.0202523 0.125914 0.000840735 +-0.0501104 0.138566 0.0193811 +-0.0264363 0.125919 0.0130719 +-0.0691022 0.159548 -0.0519447 +-0.0245412 0.057448 -0.0303989 +-0.046121 0.0336712 -0.000864342 +-0.0742841 0.155582 0.00848891 +-0.0298186 0.154044 -0.00457012 +0.0302323 0.0969553 -0.0166472 +0.0266877 0.104744 0.0387392 +-0.0843417 0.109004 0.0243603 +-0.0496377 0.143234 0.0104059 +0.0174929 0.0962345 0.0475335 +0.0450677 0.0917906 0.015163 +0.0374841 0.076757 0.0366434 +-0.0215406 0.0711033 0.0513847 +-0.0282153 0.125116 0.00364014 +-0.0284773 0.177212 -0.00607735 +-0.0204956 0.109916 0.0405701 +-0.0784664 0.0703272 0.00666705 +-0.0031698 0.0384355 0.0180459 +-0.0655548 0.153788 -0.00146085 +-0.0229763 0.0945367 -0.0302901 +-0.0192339 0.166857 -0.012207 +-0.0866345 0.094046 0.00237751 +-0.0759405 0.177963 -0.0471435 +0.0442559 0.0973532 0.00916034 +-0.071904 0.103673 -0.0126696 +-0.00666902 0.0541115 -0.0328784 +0.0144947 0.105783 0.0434399 +-0.029312 0.0383797 -0.00726542 +0.0562076 0.0536042 0.00319408 +-0.0829319 0.114342 0.0473556 +-0.069928 0.113662 -0.00916203 +-0.080837 0.120705 -0.00484118 +-0.0680148 0.177312 -0.0499759 +-0.077886 0.0811556 -0.0096326 +0.0350121 0.104701 0.0314746 +-0.0571796 0.0582032 0.0181974 +-0.0932449 0.120197 0.0372886 +-0.0536204 0.0647024 -0.00963527 +0.00250481 0.0870342 0.0569864 +-0.0802055 0.0754813 0.024867 +-0.062996 0.0444935 0.0306768 +-0.00402267 0.0975528 0.0526596 +-0.0883984 0.103684 0.0133796 +-0.0637361 0.133925 0.0394224 +-0.00469624 0.0613427 -0.0349676 +-0.0570417 0.148685 -0.00168484 +-0.062221 0.119852 0.0434664 +-0.0361997 0.0483313 -0.0162949 +0.00950265 0.0517655 0.0513753 +0.00822226 0.0366869 -0.011267 +-0.0383571 0.0360437 0.0112202 +-0.0890914 0.0956431 0.0204208 +-0.0256081 0.0408536 -0.0292407 +0.0374062 0.0397236 -0.000139169 +-0.094388 0.124185 0.0232804 +-0.0615536 0.151288 -0.000477545 +-0.0674057 0.140585 -0.00814985 +-0.0913588 0.113353 0.0143394 +-0.0162447 0.115598 -0.0164334 +-0.00395415 0.0388026 0.0284096 +0.0272466 0.0774691 -0.0233342 +0.0337889 0.112917 0.0264745 +-0.0342171 0.0808501 -0.0245506 +0.0395831 0.0953666 0.0310696 +0.0424402 0.100042 0.00119598 +0.0588348 0.0704992 0.0161593 +0.0129551 0.034265 -0.00247291 +-0.0884357 0.140552 0.0112052 +-0.0545209 0.0388646 -0.0108239 +-0.00760223 0.0406064 -0.0259713 +-0.0671149 0.0634665 0.0239226 +-0.0571873 0.13241 -0.00599886 +-0.0652367 0.0347413 0.0281307 +-0.0733817 0.154066 -0.0309045 +-0.00253313 0.0428829 0.047136 +-0.0768102 0.145866 -0.00487051 +-0.0675702 0.166262 -0.0225175 +-0.0425031 0.0662262 0.0410651 +-0.0579829 0.147131 -0.0018633 +0.0230336 0.049071 0.0400904 +-0.0829949 0.0843947 0.0302754 +-0.0147977 0.0813547 -0.0393324 +-0.015272 0.0385359 0.0263224 +-0.0764401 0.163184 -0.0180705 +-0.00855639 0.121127 -0.0123669 +-0.018702 0.0459339 0.0516744 +-0.0274925 0.0577126 -0.0264141 +-0.0571934 0.155255 0.0174937 +-0.0620081 0.0469936 0.00367346 +-0.010275 0.170544 -0.0261793 +0.0537831 0.0477401 0.0192041 +0.0402375 0.104169 0.000177419 +0.0289937 0.118368 -0.00105099 +-0.039498 0.118035 0.0314 +0.0367284 0.0875226 0.0373878 +0.0431893 0.0764104 0.0272109 +0.0404723 0.0752779 0.0321515 +-0.071418 0.176406 -0.0454588 +-0.0570823 0.138706 -0.0047975 +-0.0666306 0.0689692 -0.00898899 +-0.0691773 0.0628504 0.020491 +0.0144923 0.104443 0.0448169 +-0.0227823 0.0798633 -0.0386035 +0.0278587 0.0463325 0.0365003 +-0.00850193 0.0391005 0.0344133 +-0.0677578 0.16996 -0.0326164 +-0.0367265 0.0725274 -0.0180009 +-0.0681226 0.115765 0.0506532 +-0.0824105 0.154634 0.0158747 +-0.0197211 0.109971 -0.0204733 +-0.0626214 0.149057 -0.0155813 +-0.0414792 0.111213 0.0366505 +0.0570161 0.0508675 0.0161892 +-0.0934473 0.129632 0.0182372 +-0.0463999 0.150559 -0.00488163 +-0.0823822 0.144566 0.00117046 +-0.0310391 0.0892178 -0.0256627 +-0.065854 0.172894 -0.0463248 +-0.069909 0.0416997 0.00317022 +0.0312116 0.11742 0.0240751 +-0.0118175 0.0387383 -0.00407256 +0.01303 0.126665 0.0287751 +-0.0440446 0.129866 0.0080667 +-0.0797747 0.106127 0.0313842 +0.00451933 0.0800063 0.0560543 +0.00739517 0.116252 -0.017256 +0.0277812 0.063284 0.0436054 +-0.0569949 0.126695 -0.00683103 +-0.00960244 0.0420101 -0.025949 +0.0084074 0.123136 -0.0106652 +-0.0428042 0.0338676 0.0265755 +-0.0325056 0.0760815 0.0412743 +-0.0386562 0.0591953 -0.0114762 +-0.0405007 0.0690879 0.0417151 +0.0419622 0.102841 0.00417469 +-0.047644 0.121343 -0.0122933 +-0.0729009 0.105047 -0.011511 +-0.0927931 0.126937 0.0282668 +-0.0656106 0.156261 -0.00734027 +-0.0802248 0.0719997 0.00554401 +-0.00476651 0.0755803 -0.0368945 +-0.0779912 0.139819 -0.00526751 +-0.0864372 0.14049 0.00618869 +-0.0427881 0.157985 0.00470835 +-0.0697618 0.112838 0.0482345 +-0.0800017 0.0786467 -0.00556567 +-0.00794001 0.0994214 0.049751 +0.00252738 0.0716721 0.0561852 +0.0244581 0.0366925 -0.000851561 +-0.0618581 0.153131 0.03333 +-0.0730605 0.177343 -0.046073 +-0.0670133 0.0791411 0.0413099 +-0.00657967 0.0361819 -0.0249969 +0.0332241 0.115988 0.0034015 +-0.0314758 0.118803 -0.0116777 +-0.0714107 0.144356 -0.0151846 +-0.0414986 0.120686 0.028403 +0.0126257 0.034994 0.0315996 +-0.0344792 0.0382691 -0.00267158 +-0.0696814 0.0354769 0.0114289 +-0.0454423 0.0336713 -0.00255197 +-0.0611633 0.0698433 0.0372322 +-0.0520495 0.147795 0.0183962 +0.0467993 0.0745196 0.0137565 +-0.00850445 0.0619527 0.0559735 +-0.0157643 0.0353272 -0.0263783 +-0.0915821 0.144732 0.0201581 +-0.0274038 0.123285 0.0215594 +-0.0667152 0.0419014 -0.00231002 +-0.0408646 0.104225 -0.0205494 +-0.092402 0.129661 0.0272343 +-0.0876501 0.0954829 0.0054069 +-0.063731 0.0751942 -0.0171769 +-0.016949 0.0909918 -0.0366612 +0.0216857 0.0374896 0.0372608 +-0.0733019 0.081934 0.0390113 +-0.033579 0.117839 -0.0126505 +0.00291054 0.0385481 0.0460492 +-0.0648688 0.0938916 -0.0183701 +-0.0931568 0.120191 0.0362904 +-0.0105693 0.129741 0.0187791 +-0.0330922 0.108613 -0.0189923 +-0.0867528 0.121192 -0.00171893 +-0.0398856 0.0351398 0.0419144 +-0.0500753 0.0599861 0.0335137 +-0.0362769 0.163827 -0.00170672 +-0.0161498 0.040504 0.0518582 +0.0390213 0.100628 0.0284944 +-0.0525203 0.0581461 0.0261597 +-0.06389 0.0397139 0.0154457 +-0.0114781 0.0589986 0.0537512 +-0.00335674 0.0424141 0.0475525 +-0.0200738 0.0389483 0.0357554 +0.0112326 0.0738116 -0.0315294 +0.0128141 0.0504969 0.0481838 +-0.0548971 0.104115 -0.019193 +-0.0887169 0.125354 0.00227396 +-0.0712974 0.0669397 0.02531 +-0.0542529 0.0545999 -0.00539104 +-0.0538048 0.159768 -0.00183632 +0.0171004 0.120495 -0.00987579 +0.00927611 0.0667424 -0.0314011 +-0.0928802 0.118867 0.0402859 +-0.0167191 0.0613704 -0.0359554 +-0.0515886 0.0460739 0.0176829 +-0.0182635 0.180096 -0.0244849 +-0.0014996 0.0938866 0.0553603 +-0.0518826 0.071407 0.0396894 +-0.0529375 0.0335557 0.00508499 +-0.0597956 0.0925385 -0.0196216 +-0.0869937 0.104951 0.00838372 +0.0481666 0.0731681 0.01124 +-0.00827202 0.0394277 0.049182 +-0.0607911 0.0810335 -0.0194373 +0.000667625 0.0985049 0.0513232 +0.00310867 0.129093 0.0266332 +0.0296013 0.119582 0.02204 +-0.0285282 0.0378067 0.0260568 +-0.0367133 0.0353138 0.0122122 +-0.0468392 0.132859 0.0202702 +-0.0139293 0.126622 0.0263262 +-0.0191687 0.171226 -0.0215143 +0.0205957 0.0394417 0.0417168 +-0.0692562 0.143958 0.0438704 +-0.037992 0.128312 0.00883318 +-0.0237829 0.0770195 -0.0382449 +-0.0940603 0.120098 0.0152926 +-0.0545976 0.139948 -0.00193829 +-0.0869674 0.103645 0.0213508 +-0.0689616 0.177928 -0.0580053 +-0.079103 0.0731629 0.0235749 +-0.0563149 0.0534289 -0.00138708 +-0.00430179 0.125159 -0.00873129 +-0.0217957 0.119089 -0.0120655 +0.047344 0.0721054 0.0183678 +-0.0206715 0.0524183 -0.0304469 +-0.0292161 0.178518 -0.014988 +-0.0567221 0.0575063 0.0096837 +0.00796175 0.131494 0.0140347 +-0.0163209 0.175704 -0.0185048 +0.0207575 0.0645289 0.0475184 +-0.0365005 0.0676756 0.0415398 +-0.0504985 0.079101 0.0439987 +0.0338763 0.0978118 -0.0135516 +-0.00887371 0.0385959 0.0022117 +-0.0644851 0.0755505 0.0404189 +-0.0877008 0.0923103 0.0248018 +-0.082219 0.074838 0.0095308 +-0.0554964 0.111163 0.0367062 +0.0260064 0.0465031 -0.0156607 +-0.0633419 0.155193 -0.0376165 +-0.0732519 0.0648877 0.00719031 +-0.0769992 0.155545 -0.0179052 +0.0377103 0.0955073 -0.00984226 +0.0174667 0.122816 0.0304302 +-0.0366198 0.0505806 -0.010756 +-0.0144968 0.0472352 0.0484474 +0.00848126 0.0936832 0.0524446 +0.0197906 0.106497 -0.0168156 +-0.0930778 0.121531 0.0352811 +-0.0613674 0.169388 -0.0565896 +-0.0301276 0.038694 -0.0132786 +-0.0662928 0.044787 0.00771957 +-0.0195138 0.0448322 0.0525308 +-0.0886025 0.0887878 0.00646717 +0.0380432 0.109702 0.0166041 +-0.024753 0.0755695 -0.0376923 +-0.089639 0.0983559 0.0164014 +0.0373474 0.083464 0.036489 +0.0200866 0.0429332 -0.0206714 +-0.0362408 0.12776 0.00652715 +-0.0114267 0.182822 -0.0276369 +0.033977 0.115595 0.0137221 +0.016644 0.0381609 -0.019755 +-0.0160134 0.0959893 0.0521651 +-0.0194344 0.115555 -0.0163687 +0.00996296 0.0988804 -0.0226985 +0.0207021 0.0348049 0.000449352 +-0.0655859 0.0333717 0.000880867 +-0.0387964 0.0870429 -0.0222174 +-0.0365713 0.0483594 -0.015218 +0.0310154 0.110075 0.0327245 +-0.0376939 0.0665912 -0.0149459 +0.0401046 0.0466866 0.0313873 +-0.0110827 0.102149 -0.0241692 +0.00841559 0.0375405 -0.0234702 +0.0448731 0.0945767 0.0111579 +0.0145335 0.034759 0.0322003 +-0.059392 0.149673 0.0353015 +0.000291607 0.0641338 -0.034343 +0.00429568 0.0640516 -0.0331969 +0.0450422 0.0931924 0.0131619 +-0.00448954 0.122402 0.0358368 +-0.0326251 0.166779 -0.00520273 +-0.0566266 0.157159 0.00899778 +-0.0131915 0.184654 -0.0268832 +0.0372616 0.0915229 0.0364203 +0.0164447 0.0548852 0.0482217 +-0.0124867 0.11689 0.0385307 +0.00769138 0.039029 0.0323953 +-0.0150057 0.127967 0.0215456 +-0.0860589 0.113009 0.00328149 +-0.0718647 0.175275 -0.0427173 +0.000497507 0.112823 0.0420607 +-0.0832204 0.140695 0.0442806 +-0.0316065 0.039499 -0.0303181 +-0.0689448 0.129685 -0.00899835 +-0.020775 0.0742803 -0.0390259 +-0.0727533 0.0995199 0.0393322 +0.0032483 0.071196 -0.0343078 +-0.0400491 0.154783 -0.00892819 +-0.0345081 0.0832025 0.0425625 +-0.0522702 0.141391 0.00017327 +0.0278273 0.0795375 0.0455649 +0.0269552 0.122658 0.0110745 +0.0348501 0.112087 -0.000408122 +-0.0694924 0.0846972 0.0421957 +-0.0861949 0.139089 0.00320204 +-0.0823568 0.0802033 -0.00152209 +0.00894636 0.0644445 0.055029 +0.0266313 0.0563972 -0.0207832 +0.023933 0.0390696 0.0352942 +-0.0656041 0.136814 0.0420793 +0.0407616 0.105622 0.0111617 +0.058143 0.0551653 0.0211996 +-0.0138904 0.0897489 -0.0373664 +0.0117209 0.130528 0.015412 +-0.0181782 0.126773 0.00187925 +0.039239 0.0589589 -0.00512401 +0.0118091 0.0576645 0.0520801 +0.0101538 0.113447 -0.018237 +0.00107085 0.0391982 -0.0112505 +-0.0726176 0.0747594 -0.0108396 +-0.0504976 0.104261 0.040368 +-0.06047 0.0776106 0.0424994 +-0.0726162 0.166612 -0.0440006 +-0.0345099 0.109779 0.0372255 +0.0371511 0.110987 0.0177157 +-0.0594963 0.1084 0.0386802 +-0.0218558 0.120004 -0.0110164 +-0.0726436 0.159626 -0.0369279 +0.0162217 0.120841 -0.0102336 +0.0462172 0.0729792 0.0194263 +0.0503974 0.0595708 0.0303584 +-0.069034 0.139725 0.045939 +0.0222487 0.0359069 0.0273161 +-0.083623 0.0857135 0.0294569 +-0.0427492 0.0421438 -0.0223063 +-0.0635342 0.161573 -0.0210278 +-0.0632778 0.158345 -0.0436013 +0.049468 0.0445737 0.00523787 +-0.00949755 0.0856659 0.0574293 +0.0137231 0.129888 0.00901711 +-0.0849311 0.0980032 -0.00158096 +0.0094116 0.0360543 -0.0227822 +0.029005 0.115546 0.0303821 +-0.0136476 0.0481469 -0.0303471 +0.0203578 0.0985304 -0.0223097 +0.0386883 0.0767039 0.0348633 +0.0505119 0.0665023 0.0275359 +-0.0236064 0.038163 0.0249493 +-0.0662075 0.060375 0.00901189 +-0.0309847 0.0381919 0.0323901 +-0.0577888 0.0439091 -0.00660137 +0.0319539 0.0795563 0.0427459 +-0.0888256 0.100978 0.0104077 +-0.0149675 0.0986909 -0.0245721 +0.0080932 0.126458 -0.00628099 +-0.0629819 0.128219 -0.0083429 +0.00592947 0.0982847 -0.0240623 +-0.0791963 0.120405 0.0507691 +0.0385114 0.0583288 0.0314228 +0.0327231 0.116168 0.00178038 +-0.0838537 0.110728 0.0339922 +-0.0559583 0.0478125 -0.00439058 +-0.0864154 0.152983 0.0204471 +-0.0846489 0.0778245 0.0165124 +-0.0244888 0.120706 0.0294035 +-0.0565129 0.051223 0.00779351 +-0.00649552 0.111418 0.0421995 +-0.0400289 0.0336199 0.00584373 +0.00964377 0.120482 -0.0138306 +-0.0819198 0.126566 -0.00507678 +-0.023502 0.180157 -0.0112302 +-0.033578 0.0448331 0.0458046 +-0.0771053 0.177652 -0.0476237 +-0.0244946 0.0357757 0.0532784 +0.044574 0.0903504 0.0211613 +0.0317623 0.0938577 -0.0173357 +-0.0767292 0.0860417 0.0380634 +-0.0291365 0.165225 -0.016186 +-0.0558064 0.0562012 0.00862658 +-0.0197239 0.0612902 -0.0351879 +-0.0624763 0.163084 -0.0515885 +-0.00157869 0.0347285 -0.0237137 +0.0250862 0.0741055 0.0468243 +-0.00657564 0.0346831 -0.0243352 +-0.0927326 0.12419 0.0292678 +-0.0642565 0.0418897 0.0384072 +0.0074848 0.0976824 0.0494394 +-0.0324803 0.0436623 0.0489836 +0.0309993 0.0686673 0.04128 +-0.00959045 0.0337105 -0.0233226 +-0.0692347 0.176505 -0.0570351 +-0.0524975 0.111152 0.036921 +0.0434926 0.056984 0.0319757 +-0.0448698 0.104232 -0.0209188 +-0.0689139 0.148999 -0.0367601 +-0.0366298 0.0344715 0.0361774 +-0.0772403 0.0846603 0.0372078 +-0.0866727 0.139248 0.0421058 +-0.0692038 0.156713 -0.0519425 +-0.0286406 0.154979 -0.0065778 +-0.0516452 0.119776 0.0340339 +-0.0604002 0.0591276 0.0185111 +-0.0789005 0.172846 -0.0440952 +-0.0733588 0.0659821 0.00263497 +-0.0644533 0.0351399 0.0400818 +0.0349985 0.0619413 0.0382049 +-0.0116935 0.0584778 -0.0346471 +0.0397873 0.104095 -0.000789682 +0.0261507 0.0923065 -0.0217116 +-0.0643301 0.156694 -0.0446094 +0.0312874 0.108108 -0.0105276 +-0.0718754 0.119424 -0.00835095 +-0.0897483 0.0929448 0.0154361 +-0.0322408 0.125589 0.00213325 +0.0193474 0.0551603 -0.0276297 +-0.0355381 0.0335618 -0.0245193 +-0.0323633 0.175433 -0.0143069 +0.0591153 0.0705615 0.014025 +-0.0685156 0.168032 -0.0539935 +-0.0408127 0.127672 -0.0010356 +-0.070932 0.129672 -0.00889239 +-0.0315034 0.0717826 0.0402663 +0.0139874 0.0924572 -0.0278842 +-0.00310937 0.0390986 -0.00637767 +-0.0315484 0.0749387 -0.030532 +-0.0658202 0.0597996 0.0132017 +-0.074125 0.079542 -0.012586 +-0.042758 0.0336059 0.00168497 +-0.0376274 0.0534153 -0.0106276 +-0.0609006 0.106856 -0.0171292 +-0.0465015 0.112315 -0.0168133 +-0.00832405 0.129364 0.00227931 +0.000993844 0.0989182 -0.0247915 +-0.092775 0.128304 0.0272531 +-0.0024916 0.073257 0.0585379 +-0.0354714 0.0959602 0.0437897 +-0.0798628 0.122191 -0.00554615 +-0.0379836 0.153062 -0.00765575 +-0.0574689 0.0413481 0.0461934 +-0.0681352 0.166058 -0.0212868 +-0.0655788 0.037063 0.0157921 +-0.0104996 0.03868 -0.00189881 +0.00192546 0.0390395 0.0275923 +-0.0598545 0.0467827 -0.000327155 +-0.0510269 0.136724 0.0245519 +-0.0626706 0.0343644 0.032487 +0.0368248 0.11128 0.0190303 +0.047871 0.0733255 0.0156276 +-0.0291332 0.059286 -0.0234112 +-0.0554108 0.0344947 0.0391385 +-0.0892997 0.0956389 0.0174174 +-0.0880049 0.11182 0.00834875 +0.0309816 0.102484 -0.0145328 +0.0183118 0.0665429 -0.0287115 +0.00448658 0.111391 0.0416751 +-0.0902127 0.122664 0.0052855 +-0.0900898 0.119956 0.00430245 +-0.026505 0.174198 -0.0103819 +-0.0214492 0.0963545 -0.0261739 +0.0574071 0.0691343 0.00477569 +-0.0755392 0.154957 0.000803149 +-0.0205078 0.049871 0.046386 +-0.0302748 0.116055 -0.0148216 +0.0522643 0.0732287 0.00987093 +-0.0353184 0.153664 -0.00782609 +-0.0468563 0.101377 -0.0215448 +0.0252483 0.0713214 0.0452679 +-0.01624 0.0963836 -0.0301721 +-0.0374901 0.0505918 0.0391881 +-0.000727236 0.069749 -0.034387 +-0.0295801 0.0368886 0.052851 +0.0174262 0.0350846 0.00327627 +-0.0408044 0.0884947 -0.0224789 +-0.0540496 0.0546601 0.0106814 +-0.0841802 0.136658 0.046769 +0.0265654 0.0388814 0.0291555 +-0.0365515 0.115187 -0.0158874 +-0.0746646 0.0981736 0.0384691 +-0.0461647 0.162128 -0.00806097 +-0.0838755 0.106118 0.000396239 +-0.0634664 0.0345901 0.0373297 +-0.0487026 0.0708482 -0.0151225 +-0.0490488 0.150196 -0.0040443 +-0.0454995 0.107082 0.0401134 +0.015502 0.109895 0.0399577 +0.0339767 0.0796167 -0.0178174 +-0.064903 0.110966 -0.0133006 +-0.0884279 0.0874564 0.00647862 +0.0303366 0.0352283 0.0150252 +-0.0476647 0.15359 0.00991943 +0.0491492 0.0460297 0.00132033 +0.0571336 0.0721807 0.0116675 +0.0423629 0.0398964 0.0150374 +-0.0075036 0.12108 0.0363047 +-0.0304017 0.0791045 -0.033577 +-0.0707511 0.0654954 0.0231537 +-0.0344941 0.171246 -0.000779029 +-0.0516393 0.0618882 -0.0103104 +0.0364959 0.064355 -0.0127735 +0.0258636 0.0344283 0.00929921 +-0.06094 0.0410414 0.0167056 +0.0388283 0.102661 -0.00481845 +0.00951185 0.0560842 0.0527429 +0.0250009 0.0629104 -0.0235842 +-0.0883814 0.100948 0.00841627 +-0.0896675 0.150196 0.0231327 +-0.0502775 0.0487457 0.0176637 +-0.0574379 0.0576833 0.0026039 +-0.0889127 0.145822 0.0300758 +0.00105802 0.0387062 0.0241019 +0.0432951 0.0987146 0.0161577 +-0.00981592 0.123797 -0.00918874 +-0.0235467 0.119499 0.0316537 +-0.0203743 0.127028 0.00506457 +-0.0546314 0.138445 -0.00241154 +0.0144977 0.11819 0.0360011 +-0.0468871 0.150669 0.00925072 +0.00310943 0.110155 -0.0202398 +-0.0315082 0.0817114 0.0416031 +-0.0361907 0.169669 -0.0137878 +-0.0266475 0.0904555 0.0474235 +0.00393808 0.131671 0.0154244 +-0.0594984 0.109765 0.0377884 +-0.0632488 0.167828 -0.0435907 +0.02054 0.116646 0.0351499 +0.046015 0.0862238 0.00817489 +-0.0472066 0.033531 -0.00644781 +-0.0382901 0.126893 -0.00216373 +0.0358746 0.0755562 -0.0137901 +-0.00915886 0.0385694 0.027547 +-0.083022 0.132397 -0.0026267 +-0.0665414 0.155108 -0.00331096 +-0.0344162 0.168264 -0.00253059 +-0.0891077 0.101031 0.0163881 +-0.0165765 0.119912 -0.0109781 +0.00442197 0.11861 -0.0157775 +-0.0234514 0.0892984 0.0527307 +0.0565327 0.0523952 0.0217798 +-0.0515006 0.111173 0.0369493 +-0.0218128 0.183092 -0.0122978 +0.0044132 0.0376001 -0.0242202 +-0.0654801 0.0675388 0.0330326 +-0.010497 0.0717087 0.0563199 +-0.065424 0.0399796 0.0326661 +-0.0228869 0.180156 -0.0121058 +0.0203379 0.125091 8.19329e-05 +-0.0802772 0.089954 0.0344521 +-0.0772906 0.165906 -0.0257637 +-0.012412 0.0382658 0.0163183 +0.0102284 0.0616887 0.0533551 +-0.00987882 0.105925 -0.0227673 +-0.00348977 0.122389 0.0359468 +-0.0759061 0.0675035 0.00967604 +-0.0414986 0.0874028 0.042497 +-0.0605969 0.06056 0.0225173 +0.0395569 0.0702481 -0.0107925 +-0.0329324 0.0638892 -0.016427 +-0.000943594 0.0381622 0.0205587 +-0.0338755 0.107095 -0.0200162 +-0.0125023 0.0486789 0.0487656 +0.0274856 0.0400248 0.0301572 +-0.0008153 0.10869 -0.0211159 +0.0343096 0.0419726 0.0279684 +-0.0247603 0.0865587 0.0527086 +-0.00553736 0.113796 -0.0185731 +-0.021633 0.035044 -0.0280533 +0.00828872 0.130472 0.0213052 +-0.0242184 0.0593353 0.0417104 +0.0288386 0.111536 -0.010211 +-0.0581339 0.0334069 -0.00670381 +0.037704 0.0574555 -0.00668675 +-0.0710158 0.13691 0.0483444 +-0.0305078 0.112529 0.0355647 +0.0343502 0.114842 0.0181324 +-0.0485971 0.0359097 0.00925535 +-0.0288479 0.0578621 -0.0233922 +-0.051497 0.0890197 0.045238 +0.0121456 0.0347039 0.0353715 +-0.0716902 0.155937 0.00211062 +-0.0790692 0.0804499 0.033529 +0.0545445 0.0589886 -0.00181806 +0.0529955 0.0716182 0.0219676 +-0.056511 0.121265 0.0393235 +0.032607 0.0527076 -0.00976892 +-0.0376644 0.0335909 0.0081569 +-0.0936994 0.128298 0.0232525 +-0.0809806 0.0720629 0.0115411 +-0.0239408 0.0886576 -0.0363455 +-0.0859344 0.107632 0.00736881 +-0.0277915 0.0782183 -0.0359607 +-0.0571511 0.0394305 0.0468685 +-0.0839381 0.0791399 0.0214982 +-0.0234217 0.0359155 0.0533704 +-0.0739011 0.106421 -0.010241 +-0.0567145 0.0334976 0.000765085 +-0.0241329 0.157302 -0.00905689 +-0.0128819 0.126866 -0.00238505 +-0.0250553 0.0707727 0.0450037 +-0.0444963 0.119293 0.0294103 +-0.0463222 0.0411097 -0.0132713 +-0.0451547 0.0437693 -0.0122411 +0.0475648 0.0553802 0.031711 +-0.0494965 0.11266 -0.0171746 +0.00314926 0.122256 -0.0116623 +-0.089161 0.137877 0.0251937 +-0.0171561 0.0387671 0.0311342 +-0.0659181 0.10388 -0.0158661 +-0.062107 0.163118 -0.0365927 +0.0444569 0.0444867 0.0259758 +-0.0206484 0.0464719 -0.0278809 +-0.0668387 0.144945 -0.0185544 +-0.0574928 0.102919 0.0421703 +-0.0655518 0.166572 -0.0275081 +-0.0339393 0.126307 0.017694 +-0.0176989 0.0554882 -0.03328 +0.012239 0.0794574 -0.0314827 +-0.0344963 0.094609 0.0443801 +0.0228685 0.123786 0.00100726 +-0.0920259 0.132307 0.0132318 +-0.0713267 0.169665 -0.0267525 +-0.081588 0.0788215 -0.00249997 +-0.0755712 0.102178 0.0364401 +-0.0482055 0.0335674 -0.00667883 +-0.0295069 0.109802 0.0378356 +-0.0819634 0.103331 0.0300688 +-0.0766364 0.0788383 -0.00918256 +-0.0472353 0.12392 0.0280317 +-0.0424858 0.064826 0.0410217 +-0.00749383 0.112788 0.0415528 +-0.0321607 0.174124 -0.015122 +-0.0148084 0.124344 -0.00565133 +-0.0630295 0.126909 0.044075 +-0.0122771 0.129643 0.0167063 +-0.0137469 0.0714346 -0.0382786 +0.0253964 0.0981715 0.0439168 +-0.0105339 0.100499 0.0452584 +-0.0909546 0.139232 0.0191849 +-0.0239226 0.16684 -0.0101968 +-0.00433796 0.0387886 -0.000752538 +0.00920046 0.0879669 -0.0320124 +-0.0404937 0.0662835 0.0416604 +-0.0569887 0.118401 0.0385929 +-0.0715396 0.0362187 -0.000138838 +0.0226226 0.0591926 0.0466634 +-0.0544937 0.112536 0.0358256 +-0.0843481 0.145997 0.00513587 +-0.022811 0.0756351 -0.0385829 +-0.0666897 0.0735998 -0.0145924 +-0.0404977 0.116683 0.0325662 +0.0032744 0.114489 -0.0193505 +0.00148054 0.0413996 0.0463959 +-0.0245078 0.0767611 0.0513331 +-0.0308625 0.101511 -0.0227041 +0.00533966 0.0345787 0.0412861 +-0.0774755 0.170095 -0.0341987 +-0.0650593 0.125632 0.048098 +0.0112751 0.0505364 0.0494832 +-0.0786212 0.0976351 -0.0095679 +-0.0726748 0.0647223 0.00565049 +-0.0350102 0.158094 0.00367693 +0.0175012 0.11539 0.036772 +-0.0205761 0.0350586 0.0512942 +-0.0408828 0.108487 -0.0195205 +-0.0324978 0.0661054 0.0396515 +-0.0860138 0.0845642 0.00148082 +0.00924462 0.0710839 -0.0326657 +-0.0573888 0.0342428 0.0302238 +-0.0809405 0.141759 -0.00181375 +0.0351408 0.0931106 -0.0145377 +0.0391769 0.106978 0.0201683 +-0.0378047 0.0342916 0.0307956 +-0.0614885 0.0932285 0.0449784 +-0.00750736 0.0561433 0.0534652 +0.0317881 0.0564278 0.038783 +-0.0258626 0.0378286 0.0139698 +-0.0515546 0.0445278 -0.00899667 +-0.010869 0.165486 -0.0158779 +-0.0297303 0.109983 -0.0184292 +-0.0469177 0.0346518 0.0071269 +-0.0286016 0.109083 -0.0194963 +-0.0109096 0.172768 -0.0212178 +0.00821291 0.0711477 -0.0331375 +0.00315167 0.10307 -0.0219554 +-0.0472567 0.132959 0.0215876 +-0.0825276 0.142074 0.0435561 +-0.0136058 0.093388 -0.035076 +-0.0179202 0.0385865 -0.0163394 +-0.0641268 0.0405801 0.0396199 +0.0124469 0.129111 0.00141235 +-0.0637038 0.0343279 0.0323025 +0.0354218 0.100763 0.0338403 +0.0121385 0.130422 0.0141392 +0.00281822 0.126541 -0.00629609 +0.000901863 0.122026 -0.0113896 +-0.0702669 0.176516 -0.0559875 +-0.0576072 0.0336162 0.0112663 +0.0129045 0.125515 -0.00527553 +-0.021518 0.115416 0.036565 +-0.01542 0.16691 -0.0137031 +-0.0365035 0.168234 0.000585726 +0.00464616 0.034105 0.00716872 +-0.0319348 0.125225 0.000800634 +-0.0169495 0.0390889 0.0362738 +-0.024481 0.104364 0.0426891 +0.0161036 0.0393372 0.0440174 +-0.0397156 0.127552 0.0155957 +-0.0063009 0.09425 -0.0339062 +-0.00549064 0.104476 0.0440202 +-0.0455034 0.104326 0.041412 +-0.0625466 0.16468 -0.0375945 +-0.0334032 0.0765382 -0.0275106 +-0.0118225 0.0855318 -0.0386599 +0.0100166 0.0833203 0.0549696 +-0.0685481 0.156429 0.0206858 +-0.0705717 0.158164 -0.0459142 +-0.0185161 0.125172 -0.00248935 +-0.0185539 0.095955 -0.0297446 +0.0191428 0.127427 0.0167214 +-0.0145095 0.171282 -0.0176637 +0.0352621 0.0826509 -0.01774 +-0.0526579 0.0504274 0.026653 +0.00237351 0.0465882 -0.0283321 +-0.0854761 0.132564 0.04817 +-0.0868299 0.0846427 0.00348465 +-0.0105903 0.0377043 -0.0258398 +0.00953188 0.0455622 0.0461832 +-0.0662037 0.154495 -0.0505507 +-0.0856221 0.107687 0.0203552 +-0.0858054 0.102155 0.00239755 +-0.0248162 0.126254 0.00926143 +-0.0398081 0.128271 0.00374611 +-0.00949649 0.0546877 0.0525704 +-0.0474662 0.0960033 0.0439936 +-0.0787761 0.1431 -0.00379727 +0.0264606 0.0663192 -0.0226274 +-0.0294891 0.119549 -0.0104626 +-0.0285179 0.0948797 -0.0246293 +-0.0561001 0.14389 0.0312058 +-0.0930288 0.116051 0.018311 +-0.00894653 0.174179 -0.0257648 +-0.0524908 0.113899 0.0349209 +0.0158504 0.0959717 -0.0236278 +-0.0694879 0.0368888 0.0112092 +-0.0802884 0.146109 0.0411929 +-0.0498232 0.0349806 0.0446412 +0.0342731 0.115225 0.0123899 +0.0283978 0.0955434 -0.019149 +-0.0515486 0.141607 0.0193759 +-0.0458573 0.147704 0.00717141 +-0.0735436 0.175947 -0.0433626 +-0.0758292 0.0935231 -0.0136873 +-0.0554898 0.041398 0.0465154 +0.0604856 0.0623173 0.00815473 +0.0135991 0.100782 -0.0226731 +-0.021666 0.16235 -0.015178 +-0.0474866 0.0573572 0.0366835 +-0.0645248 0.154173 -0.00692339 +0.0454055 0.0747572 0.0215389 +-0.0497578 0.0797288 -0.020162 +-0.0463447 0.129406 0.0234768 +0.0153317 0.0580768 -0.0287753 +0.0124861 0.100431 0.0478938 +-0.0288456 0.0986889 -0.0235542 +-0.00949656 0.0471698 0.047803 +-0.0644726 0.165628 -0.0285568 +0.0564615 0.0703554 0.0055259 +-0.0477419 0.0345444 0.0337565 +-0.0415114 0.0520187 0.0393909 +-0.0165872 0.128419 0.0166112 +-0.0649318 0.168832 -0.0387572 +-0.0230309 0.0906523 0.0522978 +-0.0289316 0.0889882 -0.0316153 +-0.0522528 0.0567257 0.0259279 +-0.0113061 0.169739 -0.0249506 +0.0329977 0.0514306 -0.00763543 +-0.0104801 0.120983 0.0360777 +-0.0848294 0.111312 0.0422165 +0.0597675 0.0609389 0.00613027 +-0.0264774 0.0473675 0.0499125 +-0.00223749 0.0939165 -0.0335391 +-0.0188762 0.171241 -0.0152046 +0.0460317 0.0820288 0.0151733 +-0.00015619 0.0389464 0.0272511 +-0.0490964 0.156122 -0.00621407 +0.0240569 0.111353 0.0367066 +-0.0427705 0.0826571 -0.0207663 +-0.0844768 0.0856095 0.0274708 +-0.0120306 0.174239 -0.0210892 +-0.00550834 0.0689154 0.0563731 +0.0289606 0.0679277 -0.0207366 +-0.0308933 0.12367 0.0217821 +-0.00650569 0.0675101 0.0559953 +-0.0789661 0.0859916 0.0360799 +-0.0291346 0.177171 -0.00534178 +-0.0560039 0.140764 -0.00299974 +-0.0584999 0.107052 0.0397144 +0.00834583 0.0539265 -0.0302958 +-0.0169173 0.16018 -0.0117745 +-0.0698587 0.0680767 -0.00467294 +0.00525002 0.0740223 -0.0345195 +0.0110199 0.0860342 0.0546992 +0.0173361 0.0608154 -0.0277985 +0.0111302 0.107269 -0.019511 +-0.021494 0.10578 0.0424616 +0.0436775 0.0859385 0.0262014 +-0.0587477 0.0767588 -0.0188591 +0.0107799 0.0548821 0.052327 +0.0185294 0.0358466 0.0392699 +-0.0859998 0.135257 0.0457789 +-0.0767885 0.154209 -0.0148974 +-0.0613392 0.0587193 0.00967832 +-0.0712669 0.0381904 0.00872646 +0.00351715 0.0561463 0.0534882 +-0.0427983 0.0884442 -0.0218161 +-0.0898373 0.133802 0.0342135 +-0.0414226 0.150668 0.00483874 +0.0173651 0.049165 -0.0241471 +-0.0213294 0.0783028 0.0551779 +0.0143433 0.0537792 -0.0282321 +-0.0784743 0.140032 0.0478552 +-0.0334891 0.0889549 0.0439078 +0.0190476 0.0795376 0.0522219 +0.0286264 0.0638437 -0.020406 +-0.054069 0.139552 0.0288194 +-0.0132381 0.0385471 0.0267309 +0.0118566 0.0887261 0.0541581 +0.0316481 0.100683 -0.014625 +-0.093138 0.120057 0.0112982 +0.0244505 0.0384021 -0.00302114 +0.0122037 0.0864617 -0.0308592 +-0.0121165 0.0973987 0.0513433 +0.0371269 0.09285 0.0362758 +0.00753839 0.119505 -0.0147629 +-0.0698326 0.0937229 -0.0162704 +-0.046496 0.105677 0.0407002 +-0.00449814 0.0870358 0.0571267 +-0.00560579 0.042007 -0.0256504 +-0.0748416 0.154048 -0.0189002 +0.0138852 0.0348367 0.0283807 +-0.0890009 0.118943 0.0464523 +-0.0703858 0.16802 -0.0500308 +-0.0208115 0.124915 -0.0021319 +-0.0399669 0.0343914 -0.00210399 +-0.0188044 0.120762 -0.00982397 +-0.0825182 0.0816676 0.0298907 +-0.0625957 0.0588736 0.0128867 +-0.0908844 0.150204 0.0171288 +-0.073715 0.17176 -0.0333959 +0.0304194 0.0446109 0.0313507 +-0.0364972 0.0605644 0.0405385 +-0.0684905 0.158118 -0.0539401 +0.011386 0.0343226 -0.0122219 +-0.0375464 0.119352 -0.0122401 +-0.036497 0.102841 0.0405772 +0.0373988 0.0430101 -0.00376662 +-0.00864037 0.0526884 -0.0330777 +-0.0505191 0.112725 -0.0172384 +0.000747713 0.131321 0.00709666 +-0.0821064 0.110205 0.0294137 +-0.0338319 0.0498039 0.0388148 +-0.0399647 0.128635 0.00811119 +0.0262642 0.0479348 -0.017662 +-0.093142 0.118716 0.0123041 +-0.0234219 0.0537493 0.0424994 +0.0109672 0.0977693 -0.023517 +-1.32571e-05 0.13145 0.0125463 +0.0200527 0.0618555 0.0482337 +-0.0119089 0.128954 0.021205 +-0.0524994 0.0903873 0.0447034 +-0.0334979 0.0845774 0.0421828 +0.0190672 0.117213 -0.0123322 +-0.0263135 0.0381467 0.0262093 +0.034589 0.108233 -0.00663102 +0.0435886 0.091694 0.0241609 +-0.00849618 0.0939016 0.0554996 +-0.0579701 0.125253 -0.00738272 +-0.016138 0.0382862 0.0119165 +-0.0709351 0.0742605 0.0366097 +-0.0125367 0.128434 0.00198737 +-0.0244307 0.0379986 0.0104913 +-0.0681277 0.152206 0.0356633 +-0.0279464 0.0689892 -0.032513 +0.0398535 0.0752995 0.0330037 +-0.0636875 0.0722354 -0.0149801 +0.00569987 0.0949071 -0.0304911 +0.0217235 0.120687 0.0315848 +0.0306109 0.0549842 0.038821 +-0.0719231 0.155792 0.0253493 +-0.0350091 0.168257 -0.00164334 +-0.0919787 0.13239 0.0232249 +-0.0781961 0.0730005 -0.00359699 +0.0587114 0.0663183 0.00513779 +-0.0669656 0.147091 -0.0266318 +-0.0880403 0.150094 0.0102212 +-0.0137235 0.0657235 -0.0372342 +-0.0884987 0.102354 0.0183681 +-0.0219433 0.0386564 0.0320445 +-0.0629896 0.0341974 0.0167609 +0.0436977 0.0404602 0.0147575 +-0.0413787 0.124797 0.0224172 +-0.0255118 0.0931431 0.0461963 +-0.0122206 0.175683 -0.0283056 +-0.0580888 0.115436 0.0369297 +-0.0783607 0.150068 -0.00187639 +0.0561422 0.049398 0.0141897 +-0.0334907 0.0932064 0.044455 +-0.0784392 0.144133 0.0443751 +0.0134754 0.0990564 0.0479483 +-0.0673994 0.0396352 0.0118227 +-0.0719379 0.131113 -0.00828186 +-0.0675058 0.060447 0.0122781 +-0.0276134 0.0408758 -0.0294796 +0.0326756 0.117173 0.0132168 +-0.0741715 0.151271 -0.0318825 +0.0191559 0.0577995 0.0486799 +-0.0624968 0.102902 0.0415908 +-0.0467288 0.054632 0.0374442 +0.0400692 0.0773178 -0.00879643 +-0.0293794 0.119962 0.0282913 +0.026315 0.0849274 0.0469361 +0.00747158 0.0458651 0.0478111 +-0.0644149 0.0731789 0.038947 +0.0243686 0.118145 -0.00732959 +0.0357612 0.0614637 -0.0127934 +-0.00578852 0.0784633 -0.0377499 +-0.0177178 0.125534 0.0250034 +-0.0264348 0.0891318 0.0486594 +0.000504451 0.0842848 0.0575158 +0.00240772 0.0390703 -0.0246208 +-0.0401081 0.172699 -0.00896014 +-0.0494967 0.101524 0.042218 +-0.0255895 0.0365546 -0.0292581 +0.0458597 0.0428246 0.0032848 +-0.0627733 0.141026 0.037362 +-0.0278525 0.100136 -0.023576 +0.03144 0.0681325 -0.0188162 +0.0112459 0.129755 0.00240428 +-0.0872718 0.144583 0.0355002 +-0.0552077 0.119827 0.0376818 +-0.0324974 0.0859857 0.0423469 +-0.0872251 0.0950749 0.0256867 +-0.0468678 0.104213 -0.0207743 +-0.0445775 0.0462028 -0.0108205 +-0.0612826 0.0343712 0.0345145 +-0.0144859 0.0951551 0.0535558 +-0.0770239 0.141306 -0.00545257 +-0.0572927 0.0447946 0.0143752 +0.0334156 0.0430777 -0.00456693 +-0.073856 0.154091 -0.0259028 +0.0392277 0.108354 0.00916622 +-0.0254312 0.0379511 0.0211651 +-0.0579761 0.145744 -0.00191597 +0.016043 0.107446 -0.0178315 +0.0243862 0.0955601 0.0459654 +-0.0527854 0.146248 0.0203946 +-0.0908456 0.137855 0.0191944 +-0.0688648 0.111591 0.0438135 +0.00950305 0.108494 0.0403312 +-0.0846701 0.133487 -0.000689201 +-0.0146178 0.161254 -0.0115208 +-0.0517406 0.0704199 0.0388209 +-0.00483682 0.0910121 -0.035647 +-0.0455024 0.0438631 0.0430524 +-0.0269915 0.165366 -0.00760144 +-0.000429299 0.131494 0.0138246 +-0.0108252 0.0340132 -0.0200775 +-0.053792 0.141582 0.0273817 +-0.0807416 0.0720213 0.00853917 +-0.0886543 0.102345 0.0123871 +0.00450201 0.0745047 0.0565768 +-0.0651106 0.120024 0.049809 +-0.0816493 0.14593 0.000178819 +-0.0317919 0.0396266 0.0512352 +-0.0868829 0.105004 0.0193534 +-0.0587854 0.0839965 -0.0207846 +-0.0568787 0.10406 -0.0186489 +0.0234195 0.0349614 0.0211471 +-0.0247363 0.0683356 -0.0352871 +-0.0124919 0.105832 0.0432095 +0.040945 0.0957511 0.0281635 +-0.0357042 0.0681118 -0.016092 +0.0393973 0.0899152 -0.0117774 +-0.00550412 0.0547964 0.0538028 +0.0275305 0.105074 -0.0152759 +0.0436438 0.0973161 0.0031761 +-0.0642775 0.0356785 0.0173446 +-0.0578787 0.118384 0.0390612 +-0.0235304 0.111308 0.039012 +-0.0248685 0.10443 -0.0231858 +0.0332298 0.0870923 -0.0186827 +-0.050788 0.13247 -0.00197537 +0.0485095 0.0723104 0.0188157 +0.0122831 0.123395 -0.0089862 +0.0075079 0.0786108 0.055765 +0.00110358 0.114412 -0.0192684 +-0.0434472 0.0344528 0.0312293 +0.0149724 0.0740286 0.0533099 +-0.0773286 0.0696655 0.0199272 +-0.000294503 0.124716 -0.00828566 +0.0391665 0.0916193 -0.0109453 +-0.0671371 0.169442 -0.0570354 +-0.0101504 0.0993437 0.0489973 +-0.0383111 0.172675 -0.0109203 +-0.048519 0.137086 0.0153953 +0.0537553 0.0686728 0.0251859 +-0.0642372 0.158555 -0.0140759 +-0.0177679 0.0959988 0.0511065 +-0.071022 0.0408196 0.00705143 +-0.0272272 0.0562777 -0.0264072 +-0.0594982 0.10293 0.0419773 +-0.0516777 0.0668198 0.0365892 +-0.00645905 0.128953 0.0260767 +0.0161504 0.121694 -0.0091598 +0.0437177 0.0457281 0.0283091 +-0.092911 0.118706 0.0113064 +0.0110654 0.0346569 0.0243461 +-0.0131306 0.0351789 0.049391 +0.0159998 0.123366 -0.00698095 +-0.0668407 0.0952437 -0.0171577 +-0.071815 0.0936645 -0.0155813 +-0.0350082 0.162373 -0.00163299 +-0.00952557 0.169814 -0.0256004 +-0.0483792 0.0345623 0.0353569 +0.042732 0.0733313 -0.00479409 +-0.0838195 0.113254 0.0462465 +-0.0700699 0.0415411 0.00206928 +-0.0834164 0.110194 0.0380909 +0.0395682 0.0582726 0.0307001 +-0.0527297 0.0738092 -0.0169322 +-0.0800112 0.0826849 -0.00756298 +0.0378591 0.102628 -0.00683982 +-0.010049 0.165099 -0.0207588 +-0.0214981 0.0486638 0.0490621 +-0.0429934 0.0337652 -0.0113325 +-0.000805756 0.0881637 -0.035184 +-0.0796191 0.0899783 0.0351979 +-0.0774871 0.138654 0.0489668 +-0.0910383 0.131037 0.0312282 +-0.0353528 0.121762 0.0276148 +-0.0692517 0.16944 -0.0530112 +-0.0314965 0.0760483 0.040909 +0.0238425 0.124265 0.00565298 +0.00628938 0.0341841 -0.018778 +-0.0581165 0.0576994 0.00562055 +0.0291881 0.120758 0.0119009 +-0.0722612 0.0718535 0.0331389 +0.00962203 0.129808 0.0232185 +-0.0350797 0.159271 -0.0126349 +-0.0536324 0.0335534 0.00133593 +-0.0104359 0.0944019 -0.0340934 +-0.00347107 0.112728 -0.01944 +0.0492065 0.0445737 0.00425603 +-0.014689 0.0555534 -0.0339367 +-0.0729302 0.110914 0.0452396 +0.0128104 0.0891816 -0.030491 +0.0173644 0.052219 -0.0267492 +-0.0755038 0.138646 0.0489499 +-0.0664863 0.0657678 0.0290911 +0.014321 0.0608889 -0.0289153 +-0.0109854 0.0891937 -0.0368255 +-0.0714642 0.155388 -0.0429121 +-0.0674015 0.178779 -0.0526749 +-0.0136021 0.0406665 -0.0268707 +-0.0656159 0.148667 -0.029991 +-0.0795217 0.0705829 0.00954625 +-0.0757838 0.06757 0.0150388 +-0.0619636 0.125289 -0.00856668 +-0.0639176 0.153606 -0.0366205 +-0.0839617 0.114292 0.0471508 +-0.0125655 0.164041 -0.0130929 +-0.0519903 0.161388 0.00628165 +0.0020129 0.0391581 -0.00540617 +-0.0585951 0.0582039 0.0052961 +0.034843 0.0862437 0.0399362 +-0.0416697 0.0377451 -0.0272469 +0.0488349 0.0718069 0.020409 +0.0223863 0.0449715 0.0408911 +-0.0822334 0.107404 -0.00162196 +-0.0602698 0.154572 0.0280125 +0.0297856 0.120093 0.00926746 +-0.0669649 0.131148 -0.00876196 +-0.0800697 0.154441 0.0255089 +-0.0849288 0.12649 -0.00334252 +-0.000500036 0.0952296 0.0545194 +0.0151613 0.0863718 -0.029541 +0.0388132 0.0794166 0.0350891 +-0.0171133 0.0390763 0.0521827 +-0.0784063 0.0886978 0.0368492 +-0.0643001 0.179479 -0.0601392 +-0.0766538 0.11399 -0.00481419 +-0.016912 0.0931258 -0.0348233 +0.0379841 0.0406211 -0.00115448 +-0.0331507 0.0821697 -0.0275285 +0.0162383 0.0953367 0.0482094 +-0.0326141 0.0638332 -0.0174509 +-0.0725041 0.146981 0.0423864 +-0.0910261 0.12541 0.00626868 +-0.0833424 0.104748 -0.00163012 +0.0153058 0.128412 0.00248962 +0.0403512 0.038719 0.00830945 +-0.0325027 0.0603855 0.0384943 +-0.0195554 0.0387278 -0.0149268 +-0.0839725 0.0897798 0.0296574 +-0.00149888 0.0634085 0.0566876 +0.0387554 0.108357 0.00416438 +-0.0444079 0.0409084 -0.0203048 +-0.0868827 0.0896245 0.0255163 +0.0430409 0.10011 0.0131585 +0.0194835 0.105739 0.0423148 +0.032957 0.115724 0.0233075 +-0.0114871 0.063283 0.055206 +-0.0528865 0.15117 0.0191272 +0.0045048 0.104341 0.0428855 +0.00104791 0.0346359 -0.0164332 +-0.0674529 0.180926 -0.0583799 +-0.0344427 0.15352 -0.00733684 +0.0397392 0.0658643 0.0327972 +-0.0465986 0.120315 -0.0132329 +0.015269 0.034844 0.035887 +-0.0554963 0.0791301 0.0442202 +-0.0342911 0.0473692 0.0421968 +-0.0842876 0.108899 0.00336188 +-0.0262668 0.179961 -0.0169689 +-0.0836964 0.0763445 0.00752427 +-0.0696635 0.159559 -0.0499324 +-0.0661058 0.151041 -0.0375744 +-0.0455019 0.122005 0.0261109 +-0.0890685 0.0969888 0.0194042 +-0.0946116 0.124177 0.0212718 +0.00351301 0.0828608 0.0571024 +-0.0555168 0.154658 0.0152234 +0.00450223 0.0730917 0.0563795 +-0.0125112 0.037888 -0.0164908 +-0.0595378 0.0337212 0.0161226 +-0.0645332 0.120008 0.0489179 +-0.0396568 0.0577566 -0.0113194 +-0.052454 0.13854 0.0254099 +-0.0106577 0.165418 -0.0198106 +-0.0477868 0.0855382 -0.0218048 +-0.07021 0.168534 -0.0249229 +0.0345025 0.0454126 0.0301845 +-0.0261438 0.168232 -0.0181898 +-0.0685956 0.0422314 0.00876662 +0.00130397 0.128647 -0.00252095 +-0.0558871 0.108356 -0.0181276 +-0.0163928 0.0384645 -0.00103951 +-0.0364756 0.0917702 0.0440382 +0.0409317 0.0971197 -0.00479362 +-0.015772 0.160715 -0.00958045 +-0.0428613 0.102811 -0.0212634 +-0.0285136 0.112565 0.0358423 +0.0484971 0.0678077 0.0264809 +-0.0319101 0.121969 -0.00695975 +-0.0200308 0.127492 0.00809368 +-0.0860481 0.114371 0.00228673 +-0.0597203 0.0638916 0.0303834 +0.00627327 0.0682324 -0.0325665 +0.0114155 0.128646 -0.000626619 +-0.0516778 0.140064 0.0213757 +-0.0218071 0.110009 -0.0205036 +-0.0218161 0.0798852 -0.0388524 +-0.02847 0.045966 0.0500228 +0.0429765 0.0987175 0.0181666 +-0.0795395 0.117686 0.0497856 +0.0342026 0.113899 0.000840527 +0.0067112 0.0353739 0.0246266 +0.0402464 0.0618954 -0.00472398 +-0.049455 0.118007 0.0316443 +-0.0442176 0.170815 -0.00391429 +0.00731658 0.0846292 0.0563131 +-0.0542668 0.0504201 -0.00539584 +-0.00648076 0.0969085 -0.030657 +0.0597202 0.067814 0.0181758 +-0.0267919 0.0380272 0.00817341 +-0.0702433 0.163232 -0.0134117 +0.0368364 0.0754262 0.037436 +-0.077497 0.168713 -0.0313178 +0.00996165 0.130854 0.00764162 +0.0133618 0.0523173 -0.0278769 +-0.0337147 0.120592 -0.00951232 +-0.0398766 0.113891 -0.0165093 +-0.089592 0.111931 0.0163329 +-0.0841359 0.0832101 0.027497 +-0.0848856 0.0792043 0.0194951 +-0.0291817 0.0832547 -0.0346104 +0.013224 0.0341678 -0.000459678 +-0.00759782 0.103673 0.0436498 +-0.0514921 0.0804912 0.0440592 +-0.0929632 0.124088 0.0102675 +-0.0586925 0.0677294 -0.0118268 +0.0392263 0.0874331 0.033936 +-0.052704 0.143169 0.0214165 +-0.0286941 0.0380883 0.0293671 +0.0183138 0.0348993 0.0256062 +-0.0644855 0.101502 0.0419335 +-0.0547363 0.159762 -0.000811248 +0.0123244 0.0567269 -0.0296218 +0.0294314 0.0509988 -0.0157519 +0.0386176 0.0874608 0.0348475 +-0.0759101 0.148612 -0.0128604 +0.0152406 0.0723235 -0.0303843 +-0.0475913 0.133999 0.00741747 +-0.0109726 0.115573 -0.0164387 +-0.040716 0.0681271 -0.0158645 +-0.000345107 0.127203 0.0297544 +-0.0856388 0.100529 0.0267624 +0.0372748 0.0576283 0.0326444 +0.0454709 0.0664599 0.0266758 +-0.040383 0.152127 0.00460721 +-0.0503264 0.131112 0.0307063 +-0.061863 0.0953699 -0.0186332 +-0.0356336 0.11996 -0.0108661 +-0.000498349 0.118323 0.0391474 +-0.00744633 0.0386202 0.0260498 +-0.0702648 0.156758 -0.047919 +-0.0607772 0.146055 -0.00361746 +-0.0557733 0.0797194 -0.0205764 +-0.0286229 0.0450027 -0.0280846 +-0.0400285 0.0339876 -0.0295458 +-0.0244818 0.0974513 0.0444604 +-0.0736592 0.0887741 0.0405778 +-0.0626256 0.150596 -0.021578 +-0.0455006 0.117978 0.0306048 +-0.0153159 0.119411 -0.012435 +0.00132313 0.0358703 0.0464707 +-0.0231138 0.0666037 0.0460408 +-0.0487946 0.0869761 -0.0218357 +0.0312031 0.0842875 -0.0196213 +-0.0866673 0.109085 0.0143521 +-0.0716243 0.157487 -0.00225608 +0.0404941 0.0555582 0.0318463 +-0.0624591 0.155071 0.0054624 +-0.043713 0.0695592 -0.0168487 +0.00662363 0.128671 -0.00261559 +0.0292045 0.0356392 0.0180684 +0.0152063 0.0878077 -0.0294658 +0.0560899 0.059136 0.000193317 +0.0162996 0.0623114 -0.0287447 +0.00333411 0.0539266 -0.0303683 +-0.0212016 0.0383732 -7.87452e-05 +-0.0683674 0.147186 -0.0280671 +-0.0614001 0.124084 0.0428232 +-0.0273522 0.0939518 -0.0257303 +-0.0526652 0.0647199 -0.0102 +-0.032486 0.0449059 0.0475402 +-0.0090473 0.168146 -0.0217175 +-0.069891 0.119438 -0.0086356 +-0.0744393 0.114503 0.0509494 +-0.0648928 0.0350374 0.038379 +-0.00019365 0.125094 0.0326823 +-0.039166 0.0355671 -0.0293815 +-0.0258209 0.0692735 0.0430043 +-0.0620187 0.175667 -0.057604 +-0.0903815 0.130904 0.00623191 +-0.00457753 0.11466 -0.0174869 +-0.0733982 0.114573 0.051125 +0.00137655 0.0380516 0.0229424 +-0.0197661 0.0728664 -0.0388949 +-0.0370853 0.162227 -0.0135318 +-0.0166846 0.109701 -0.0201927 +-0.0564987 0.0932477 0.0451284 +-0.086761 0.084678 0.016478 +-0.0201321 0.0568083 0.0475876 +-0.0893331 0.111939 0.012355 +-0.0291964 0.162421 -0.00376774 +-0.0840799 0.143223 0.00416483 +-0.0550692 0.121281 0.0379498 +-0.0258999 0.0382697 0.0279803 +-0.0881372 0.150234 0.0261027 +-0.0189632 0.0385431 -0.0165058 +0.0252198 0.0478964 -0.0186081 +-0.0250024 0.118057 -0.0129436 +-0.0341053 0.162392 -0.00207929 +-0.0455587 0.0461599 -0.0105245 +-0.0673284 0.11863 0.0518333 +-0.0767393 0.157602 -0.0105393 +-0.0460199 0.0377083 0.0451098 +0.00937824 0.0346871 0.0203526 +-0.0232543 0.181611 -0.01087 +-0.0185423 0.0342292 -0.0199208 +0.0094823 0.034855 0.0256576 +-0.00349094 0.060529 0.0547186 +-0.0536823 0.0678463 -0.0129474 +0.0573543 0.0687146 0.022093 +0.0297466 0.036015 0.0196643 +0.0183828 0.0447123 -0.0227438 +-0.00451438 0.1296 0.000561158 +-0.0575172 0.037335 -0.0101901 +-0.0273178 0.113609 -0.0162558 +-0.0127855 0.0392769 0.0369668 +0.0359154 0.0915824 -0.0149202 +-0.0321871 0.0680263 -0.0214501 +0.0373115 0.0673123 0.0362946 +-0.0482709 0.0345995 0.0405757 +-0.0586992 0.142676 -0.00307276 +-0.0720231 0.149543 -0.0391183 +-0.0926193 0.122848 0.0312739 +-0.00649959 0.103045 0.0436802 +-0.0172605 0.128293 0.0149127 +0.0500544 0.0553974 0.0300563 +-0.0459009 0.131661 0.0191601 +-0.0355139 0.176726 -0.00796363 +-0.0132739 0.162396 -0.014817 +-0.0205091 0.112696 0.0389743 +0.0400974 0.0943736 -0.00783899 +0.0445099 0.0945603 0.0161557 +-0.00940844 0.100291 -0.0242411 +-0.0880121 0.147225 0.0305337 +-0.0134729 0.17718 -0.0214028 +0.0289055 0.0408264 0.0297172 +-0.0386238 0.0335154 -0.0250853 +-0.0474847 0.0931518 0.0438057 +0.0385195 0.109282 0.00815775 +-0.0094889 0.119647 0.0372435 +-0.0558334 0.0358523 0.0464479 +0.0391497 0.108397 0.00837586 +-0.0166742 0.0668915 0.0537111 +-0.0514343 0.0647808 0.0348885 +-0.0506054 0.0575708 -0.00965819 +0.0186225 0.0355557 -0.00967449 +-0.0507888 0.0855066 -0.0215873 +-0.0563207 0.0562341 0.00763908 +0.00416104 0.0393786 0.0331643 +0.00410872 0.110162 -0.02034 +-0.0326921 0.152804 -0.00294992 +-0.0105902 0.0385498 0.00372703 +-0.0450772 0.0337168 -0.000691764 +0.00110427 0.111585 -0.0201254 +-0.086661 0.123026 0.0482846 +-0.00349688 0.0633763 0.0563118 +0.0181674 0.0959966 -0.023265 +0.0171824 0.126495 -0.000336309 +0.0349695 0.0577828 0.0363582 +-0.0893883 0.0956403 0.0164184 +-0.0132244 0.172771 -0.0193112 +-0.0115098 0.0702302 0.0553956 +0.0292762 0.0431552 0.0314362 +0.0355897 0.0411906 0.0271165 +-0.0396848 0.0344413 0.0355548 +-0.0488762 0.0335766 0.000473902 +-0.0845392 0.0778023 0.0145171 +-0.0600467 0.0342661 0.0313871 +-0.0484946 0.156406 0.00957752 +-0.0435279 0.0506014 0.0392212 +-0.0581322 0.0624985 0.0284102 +-0.0319273 0.126498 0.0125244 +-0.0692254 0.124258 0.0526584 +0.0346263 0.114673 0.0139267 +-0.0707453 0.113137 0.049314 +0.0440515 0.0722274 0.0248494 +-0.0190238 0.0384735 0.0274147 +0.0318733 0.11664 0.0243218 +-0.00980958 0.166665 -0.0207735 +-0.075878 0.0954761 0.0383509 +0.04237 0.0533961 -0.00679891 +-0.00515103 0.127241 0.0295045 +-0.0386117 0.0406767 0.0425487 +0.0591522 0.0552732 0.011174 +0.0399613 0.0806226 0.0334139 +-0.0892353 0.14446 0.0304266 +-0.0104754 0.127368 -0.00300647 +-0.0635158 0.162004 -0.0583208 +-0.0801984 0.0868229 -0.00856132 +-0.0600399 0.13696 -0.00647222 +-0.0777335 0.153443 0.0307864 +-0.046469 0.119345 0.0289808 +-0.0313084 0.126018 0.00688499 +-0.0190244 0.0385858 -0.00538325 +-0.0698329 0.112058 0.0465849 +-0.0761752 0.110468 0.0448594 +0.0607736 0.0651167 0.0161629 +-0.0738077 0.102191 0.0374953 +-0.0406116 0.0337811 0.00738645 +-0.0152574 0.166467 -0.0199789 +0.0135127 0.0860479 0.0530247 +-0.072308 0.159721 -0.00687103 +0.00549414 0.130728 0.00313392 +-0.00649655 0.0870315 0.0570873 +-0.0353742 0.125928 -0.00196324 +0.00551011 0.0870055 0.0566199 +0.00569172 0.093878 -0.0314287 +0.0453353 0.0533808 -0.00616451 +-0.0788788 0.16526 -0.0309581 +0.0122616 0.0765812 -0.0308581 +-0.0471876 0.131943 0.0231102 +0.0442177 0.0860807 -0.00279659 +-0.0735334 0.165176 -0.017728 +-0.0896904 0.116203 0.0443945 +-0.0887705 0.0969872 0.0214096 +-0.0201887 0.0754016 0.0541402 +0.0203245 0.0636 -0.0272806 +-0.0513256 0.0345659 0.0399502 +-0.0461113 0.034482 0.0324006 +-0.0773794 0.109459 0.0418273 +0.0262228 0.0747294 -0.0245497 +-0.0281178 0.0845911 -0.0356125 +-0.029049 0.0511502 0.0411139 +-0.0685509 0.065132 0.0256966 +-0.0660181 0.127026 0.048508 +-0.0475948 0.0403553 0.044655 +-0.0711998 0.15079 -0.0434624 +0.0346942 0.0401467 0.0260507 +-0.0803051 0.0719229 0.0175051 +0.0266708 0.121701 0.00384182 +-0.0637803 0.118542 0.0465326 +0.0257185 0.0699313 0.0441746 +-0.0865836 0.11378 0.0451954 +-0.0543656 0.153368 0.0199938 +-0.0147843 0.0981951 -0.0260468 +-0.0480746 0.134034 0.00539884 +-0.0172971 0.0386165 -0.00691824 +0.024363 0.0867852 -0.0239669 +0.000502788 0.056275 0.0546165 +0.0460119 0.0750141 0.00420589 +-0.0813458 0.154098 0.0250842 +-0.0504992 0.111154 0.0370407 +0.0480441 0.0725423 0.0171549 +0.0177377 0.0821568 0.0520978 +-0.0634907 0.0833477 0.0441845 +-0.0287709 0.04365 -0.0290051 +0.0412886 0.0858436 -0.00978207 +-0.0434867 0.0959016 0.0426578 +-0.0685902 0.112767 0.0465657 +0.0446015 0.0889424 0.0221651 +0.0387218 0.0993392 0.0297824 +-0.0569101 0.0984236 -0.0203516 +0.0460228 0.0834207 0.0061859 +-0.0608711 0.101136 -0.0186334 +0.0198592 0.123572 0.0284223 +-0.0670185 0.155095 -0.00202392 +0.00194178 0.0353485 0.0200578 +-0.0202225 0.0381837 0.0220241 +0.0372544 0.111046 0.00772111 +-0.0226761 0.0552382 -0.0304344 +-0.0500773 0.15315 -0.00486218 +0.0361622 0.075448 0.0382492 +0.00638813 0.0448624 -0.0253374 +0.0240783 0.123806 0.00430528 +-0.0874625 0.123933 -0.000723767 +0.0191746 0.064523 0.0487473 +-0.0528554 0.116872 0.0339893 +0.0012658 0.0697321 -0.0339789 +0.0363552 0.112269 0.0088181 +-0.0336364 0.0836212 -0.0255231 +0.0394621 0.0820907 0.0342997 +-0.0759857 0.112794 0.0483899 +0.042364 0.0505846 -0.00668018 +-0.0878291 0.0895228 0.0236162 +-0.0717396 0.156144 0.0122972 +-0.0118777 0.107304 -0.0220947 +-0.0518036 0.0898543 -0.0220029 +-0.0605307 0.142151 -0.00455603 +-0.00730388 0.0394625 0.048838 +-0.0695099 0.151355 -0.0447129 +0.0461391 0.0820336 0.0131698 +-0.0680095 0.151244 0.0371953 +-0.0696447 0.155522 0.00577511 +0.0106458 0.0343542 -0.00488721 +-0.0717447 0.165221 -0.0449739 +0.00872274 0.0346011 0.0383625 +-0.0601559 0.0472008 0.00728305 +-0.072526 0.149972 -0.0424686 +-0.0921507 0.129567 0.0102504 +-0.0195451 0.0382679 0.00943 +0.017351 0.0351839 -0.014686 +0.026638 0.0619848 -0.0226053 +-0.0779425 0.0757661 -0.00656744 +0.0456648 0.0834028 0.0181693 +-0.00238392 0.0391586 -0.00815532 +-0.0760947 0.171183 -0.0343205 +-0.037685 0.127343 0.0163262 +0.0200653 0.084847 0.0502217 +-0.0576821 0.0438911 0.0236882 +-0.00181158 0.0365903 0.0109133 +-0.0227414 0.0640418 -0.0345473 +-0.0607804 0.0397294 0.0180031 +0.00451899 0.0966593 -0.0283637 +-0.00904759 0.0994069 0.0493883 +0.036694 0.0368281 0.0111245 +-0.0476151 0.0378648 -0.0125385 +-0.0374934 0.0620193 0.0412021 +-0.0678369 0.0706443 0.0351197 +0.0262359 0.122255 0.0222063 +-0.0258834 0.0347926 0.045205 +-0.0730191 0.0808411 -0.0145801 +0.0272041 0.0968528 0.0430049 +-0.0387216 0.0710357 -0.0169218 +-0.0802983 0.0953773 0.0342868 +-0.0928216 0.122866 0.0342742 +0.0288283 0.120572 0.00606361 +-0.0872644 0.139206 0.0412952 +-0.0528885 0.108408 -0.0187758 +-0.0614742 0.149784 0.0364078 +-0.0888928 0.113895 0.0428033 +0.0133289 0.0681229 -0.0310343 +-0.000536732 0.10034 0.0474846 +0.0582707 0.0579579 0.00417743 +-0.0896629 0.124003 0.00427429 +-0.0333755 0.0483636 -0.0203394 +-0.0335104 0.169764 -0.00293532 +-0.0488446 0.119728 0.0310062 +0.0426741 0.0972641 0.0231497 +-0.0441044 0.0451364 -0.0122986 +-0.059855 0.0594826 0.0200848 +0.0270691 0.0942437 0.0445649 +-0.0896385 0.0969877 0.0134181 +-0.0456599 0.0636306 -0.0135866 +0.0575548 0.053733 0.00618309 +-0.054499 0.0776179 0.0432703 +0.0434163 0.0464179 0.0294988 +-0.0134899 0.0951663 0.0534531 +0.0324423 0.0754774 0.0416539 +-0.0117218 0.0382705 0.0200729 +-0.0308456 0.0396262 0.0517145 +0.0564645 0.0594668 0.0252844 +-0.0475135 0.0491287 0.0385522 +-0.0396908 0.0651397 -0.0142325 +0.0201781 0.0351992 0.0293411 +-0.0219159 0.175693 -0.0142737 +-0.0688718 0.063973 0.0231175 +0.0174279 0.12392 0.0289777 +-0.0699032 0.0687756 0.0310328 +-0.0528961 0.143026 -0.000455911 +-0.0475121 0.0438565 0.0432608 +-0.0275879 0.0384125 -0.00879832 +0.0421339 0.102871 0.00816377 +0.0276939 0.085014 -0.0220629 +-0.0593718 0.0422854 0.0165091 +0.0245725 0.122909 0.0244414 +0.00141552 0.0990584 0.0500955 +-0.0208664 0.103024 -0.023442 +-0.04595 0.0351008 -0.0224117 +0.0425933 0.066459 0.0273252 +-0.085327 0.0926016 -0.00256332 +-0.0496528 0.0345916 0.0385506 +-0.023191 0.178657 -0.0125853 +-0.0179257 0.0971306 -0.0269629 +0.0383787 0.0575308 -0.00558257 +-0.0190955 0.0939751 -0.033709 +-0.0659978 0.135528 -0.00820667 +-0.0379695 0.0348544 -0.0150276 +0.0231948 0.0344554 0.00500709 +-0.0577114 0.148197 0.0324041 +0.0473189 0.0638822 -0.00202275 +-0.091122 0.115466 0.0410527 +-0.0499316 0.141822 0.00385784 +-0.0663647 0.0360087 0.0372253 +-0.0453211 0.0345932 0.035979 +-0.00367712 0.0569332 -0.0329252 +-0.0883137 0.103697 0.0153744 +0.0333218 0.0981688 0.0378146 +0.0206459 0.0429683 -0.0197059 +-0.0718069 0.0887788 0.0415418 +-0.050581 0.0445938 -0.00942218 +-0.0589701 0.121961 -0.00876657 +-0.0786152 0.163841 -0.0309629 +-0.0919702 0.114664 0.0123319 +-0.0387263 0.127561 -0.000266265 +0.0573405 0.0635192 0.0248021 +-0.0778913 0.126656 -0.00702073 +-0.0685283 0.0434892 0.00727271 +-0.0779351 0.161108 -0.0209335 +-0.0892037 0.0956419 0.0194144 +-0.091675 0.147474 0.0191435 +0.00817319 0.0832888 0.0558122 +-0.051142 0.0627417 0.0330975 +0.00546913 0.116627 -0.0176566 +-0.0278605 0.124718 0.0184442 +-0.0689992 0.150311 0.0384044 +-0.0690062 0.162382 -0.0519693 +-0.00661995 0.130084 0.0216557 +0.0403849 0.0533789 -0.00673496 +0.0156377 0.0348863 0.0377268 +0.0577131 0.0523367 0.00917793 +-0.00120988 0.105335 0.044053 +-0.00579434 0.0351694 0.0474261 +0.0411666 0.0833385 0.031438 +-0.0325019 0.0988116 0.0438807 +0.00307304 0.124054 -0.00961404 +-0.0350636 0.0383682 -0.0121121 +-0.073931 0.128192 -0.0084465 +0.015055 0.123588 -0.00721903 +0.0455542 0.0875891 0.00417683 +-0.006733 0.0684593 -0.0359965 +0.00394905 0.100531 -0.0224465 +-0.0399008 0.128531 0.0110866 +-0.0778707 0.177255 -0.0480374 +-0.0310993 0.177108 -0.0141677 +-0.0307989 0.0833965 -0.031578 +0.00828982 0.0846467 0.0559983 +-0.0926147 0.121379 0.00928006 +-0.0309131 0.0848198 -0.0305724 +-0.0610919 0.155915 0.0160896 +0.0269409 0.117743 0.0296345 +-0.029909 0.0904807 -0.0265953 +0.0341142 0.0605859 0.0386759 +0.04958 0.0652138 -0.00133913 +-0.0406916 0.0651596 -0.014333 +-0.0186192 0.0393436 -0.0280481 +-0.0321414 0.16968 -0.0161315 +-0.0303394 0.0344325 -0.0205625 +-0.0749113 0.125246 -0.00804661 +0.0179783 0.035483 -0.0126728 +-0.0572916 0.0479655 -0.00237378 +-0.030388 0.0876244 -0.0295653 +-0.00273996 0.130454 0.0216129 +-0.0785777 0.0907895 -0.0106208 +-0.0237519 0.0683934 -0.0360687 +0.0305158 0.11943 0.00953878 +0.0436886 0.0777182 0.0262206 +-0.00223658 0.0383059 0.0473338 +-0.0174973 0.104415 0.0431217 +0.045327 0.0519476 -0.00589943 +-0.022701 0.0611501 -0.0334866 +-0.0334865 0.126881 0.00753677 +0.0458812 0.084809 0.00618736 +-0.0775185 0.147451 0.0411778 +-0.00849166 0.110041 0.0429425 +-0.00827497 0.0389568 -0.00728452 +-0.0154767 0.0545272 0.0507241 +0.0455115 0.0861913 0.0171661 +-0.0286176 0.124173 0.0196508 +-0.0903937 0.142028 0.0281621 +-0.00750142 0.0590729 0.0550185 +-0.0691508 0.152358 -0.047074 +-0.00484252 0.0384695 0.0194856 +-0.00149467 0.116953 0.0400314 +-0.0148242 0.128616 0.018702 +-0.00749757 0.0939067 0.0556187 +0.031866 0.115189 -0.00211013 +-0.0515259 0.0439564 0.0445165 +-0.0773104 0.159761 -0.0159076 +0.0205013 0.108449 0.0395681 +-0.0648774 0.159303 -0.0143091 +0.0267364 0.0606633 -0.022785 +0.00150878 0.0883997 0.0564367 +-0.0659091 0.06022 0.0163937 +-0.0625921 0.1213 0.0447428 +-0.0789765 0.135392 -0.00472816 +-0.0709567 0.0767623 0.0380194 +-0.0506142 0.0560954 -0.00917258 +-0.0707687 0.155356 -0.0469258 +-0.0675837 0.112197 0.043642 +-0.0159686 0.128428 0.0182857 +-0.0564715 0.132545 0.0359114 +-0.044247 0.157947 0.00609665 +-0.011089 0.038804 -0.005846 +-0.0380666 0.0385186 -0.00730796 +0.0253529 0.0520143 0.0399629 +0.00465347 0.0341223 0.0126365 +-0.0905147 0.136459 0.016202 +-0.0184793 0.0336465 -0.023124 +0.0165026 0.118175 0.0355154 +0.0109305 0.0685438 0.0544088 +-0.00849797 0.0952525 0.0545557 +-0.050269 0.11691 0.032477 +-0.0301947 0.125922 0.0102205 +-0.0914405 0.117414 0.0273008 +-0.0231534 0.0352107 0.0523184 +-0.0922901 0.125582 0.0342578 +-0.0703512 0.170836 -0.0520339 +-0.0881528 0.129472 0.0022725 +-0.0125497 0.0445369 0.0499253 +0.0104221 0.127848 0.0278469 +-0.0114754 0.0546403 0.0519269 +-0.0665146 0.16661 -0.0580261 +-0.0384984 0.169734 0.00180247 +0.0290438 0.0509642 -0.0167532 +0.0292682 0.0673021 0.0422638 +-0.0643695 0.149877 -0.0298747 +-0.0741326 0.180484 -0.0536706 +-0.0484658 0.144752 0.00741107 +0.02369 0.10485 -0.01704 +0.0383652 0.101327 -0.00724085 +-0.0516205 0.0604369 -0.00991236 +-0.0080847 0.125292 0.0313586 +-0.0117515 0.0714338 -0.0381291 +-0.0358096 0.12684 0.0170169 +-0.0620073 0.155313 -0.0175819 +-0.0861256 0.0937891 0.0274526 +-0.0627193 0.152197 -0.01058 +0.0557633 0.0538969 0.024211 +-0.0501537 0.152144 0.0115744 +-0.0504041 0.0345678 0.0349233 +-0.0622094 0.0655019 0.0319825 +-0.0630381 0.154049 0.0314099 +-0.0864944 0.112209 0.0250023 +-0.0765838 0.178662 -0.0494737 +-0.0880478 0.0908955 0.0237752 +-0.0540202 0.0513732 0.0109294 +0.0220807 0.125732 0.0192313 +0.000503516 0.0856702 0.0573793 +-0.0624013 0.116928 0.041368 +-0.0687693 0.0793684 -0.0165822 +0.0312024 0.114939 -0.00384217 +0.0394926 0.052754 0.032086 +-0.076502 0.12459 0.0526576 +0.0461265 0.0736153 0.00421619 +0.0493794 0.0453908 0.0224152 +0.0422961 0.0655994 0.0276352 +0.0444235 0.0917457 0.0211574 +-0.04812 0.128214 0.028687 +-0.0256026 0.0837946 0.0522209 +-0.00959872 0.0391743 -0.0260833 +0.0242446 0.0762105 -0.0254816 +-0.050147 0.145259 -0.000515581 +-0.0729617 0.136954 -0.00717713 +-0.0321019 0.119786 0.0288381 +-0.0723819 0.152607 -0.0408904 +0.0595077 0.0567056 0.0171693 +-0.0647247 0.16489 -0.0257757 +0.0214018 0.0473917 -0.0206345 +-0.0652965 0.147932 -0.0271042 +0.0404164 0.0647148 -0.00677085 +-0.0440757 0.0335994 -0.0169421 +-0.0658186 0.154852 0.00425231 +-0.0457713 0.156483 0.00739285 +-0.0550494 0.0577849 0.0202145 +-0.0233757 0.163881 -0.00766181 +-0.0658954 0.166616 -0.0590008 +0.0309109 0.0511672 -0.0117352 +0.0380176 0.101228 -0.00786632 +0.0272437 0.0732614 -0.0238068 +-0.0161865 0.0377383 0.0516902 +-0.051271 0.0356477 0.0458842 +-0.0184884 0.107161 0.042158 +0.0143121 0.0753991 0.0540935 +0.012486 0.0990688 0.0481132 +-0.069936 0.13258 -0.0084535 +-0.0324718 0.0546382 0.0373194 +-0.0637186 0.179242 -0.0585917 +-0.0560047 0.159776 0.00109778 +-0.0940215 0.120122 0.0233001 +-0.0734929 0.154069 -0.0299022 +0.0334431 0.0930091 -0.0164312 +-0.0568079 0.0869026 -0.0213473 +0.0600207 0.0595165 0.0181686 +-0.0282716 0.0376885 0.0226211 +-0.0608814 0.102587 -0.0185388 +-0.0689777 0.172299 -0.0388012 +-0.0333033 0.176609 -0.00426163 +-0.0726003 0.145757 -0.0168539 +-0.0351155 0.0460859 0.0430647 +-0.0668221 0.16563 -0.0222317 +0.0223344 0.0535713 -0.0254238 +-0.0555068 0.0341015 0.0254741 +0.0591828 0.0594427 0.0211715 +-0.076476 0.07597 0.0322323 +-0.0548438 0.043635 0.0177242 +-0.0545598 0.0616597 -0.0074577 +-0.0717138 0.073474 0.0353741 +-0.0123858 0.0383448 0.0108168 +-0.0878417 0.140531 0.0102059 +-0.0338438 0.0337316 0.012415 +-0.0362549 0.153841 -0.0082413 +-0.066147 0.0353356 0.0361254 +-0.0149468 0.125073 -0.0044168 +-0.0517378 0.0545135 0.0226244 +-0.0791517 0.0792478 0.0324066 +-0.0311673 0.0386498 -0.0134468 +-0.00138514 0.0391216 -0.00791905 +0.0249209 0.0782259 0.0483953 +-0.0288805 0.079237 0.0443379 +-0.0499299 0.0335056 -0.0106454 +0.000248169 0.0726618 -0.0353693 +-0.00679601 0.100851 0.0456503 +0.00749727 0.121002 0.0360768 +0.0281364 0.0448054 0.035097 +-0.0616338 0.0739295 0.0406212 +-0.0184922 0.11816 0.035496 +-0.0231843 0.0348489 0.0439808 +0.0524989 0.0718135 0.00595977 +-0.0114982 0.0943996 -0.0340943 +-0.0574587 0.045976 0.042703 +0.0272754 0.0703879 -0.0233186 +-0.0208041 0.127131 0.0063587 +-0.0449931 0.152736 -0.00651735 +-0.0154877 0.167822 -0.0210841 +-0.0738833 0.122317 -0.0079807 +0.0163998 0.0834424 0.0519345 +-0.0615988 0.156867 -0.0225865 +-0.0504372 0.0529682 0.0186225 +-0.0607622 0.0781498 -0.0187637 +-0.0208042 0.125974 0.0209606 +-0.0245306 0.112636 0.0373469 +-0.030708 0.121227 -0.00820323 +-0.0511359 0.0502476 0.0206335 +-0.0384993 0.0733372 0.0420402 +-0.0588719 0.102608 -0.018764 +-0.0774969 0.130279 0.0531227 +-0.0375712 0.124334 -0.00748059 +-0.0119956 0.0882297 -0.0377812 +0.0547499 0.0492946 0.00521444 +0.017211 0.088423 -0.0276786 +0.0381646 0.0644978 -0.0107883 +-0.04783 0.0927226 -0.0216222 +-0.0132756 0.0597275 0.0533794 +-0.00158335 0.0361983 -0.0246741 +-0.0612049 0.174131 -0.0607222 +-0.0655175 0.0356165 -0.00754656 +-0.0874441 0.0860134 0.00347726 +-0.00749507 0.10164 0.0441128 +-0.0175041 0.0382782 0.00983265 +0.00351386 0.100332 0.0462561 +0.0252498 0.0645397 -0.0230446 +-0.0717344 0.131221 0.0507858 +0.0525721 0.0648669 -0.000960413 +-0.0901978 0.11358 0.0212183 +-0.0560194 0.129616 -0.00591188 +0.0441279 0.0748554 -0.00179683 +-0.0307721 0.0349136 0.04922 +-0.0554801 0.0452738 0.0437595 +0.000511374 0.0503823 0.0524384 +0.0295573 0.0375392 0.0237122 +-0.00766545 0.0541253 -0.0331554 +-0.0226026 0.0379508 -0.0287016 +-0.0187506 0.162746 -0.0157051 +0.0546767 0.0732977 0.0167178 +0.042064 0.10006 0.0201605 +-0.0889838 0.099691 0.0193911 +-0.0644638 0.129733 0.0437115 +-0.043484 0.0987241 0.0424341 +-0.0252565 0.120536 -0.00953586 +-0.0159529 0.0390542 0.0365141 +-0.0915486 0.143335 0.0161726 +-0.0405267 0.169768 0.0017705 +-0.0726712 0.0651053 0.0195713 +-0.0132255 0.182074 -0.023933 +-0.0456018 0.0629458 0.0388902 +0.0287985 0.0385521 0.0262584 +0.0314095 0.0695437 -0.0187779 +-0.0625738 0.156865 -0.0165766 +0.0106756 0.0489592 0.0485841 +-0.0781956 0.163891 -0.0259488 +0.0262919 0.101687 -0.017683 +-0.0681573 0.180556 -0.0543707 +-0.0464942 0.100125 0.0422537 +-0.0294775 0.17726 -0.00505881 +0.00976325 0.0346476 0.0385339 +0.0351088 0.100136 -0.012024 +0.0398312 0.0992984 0.027798 +-0.0544975 0.080589 0.0448325 +-0.0251898 0.177123 -0.0193397 +-0.00463984 0.12746 -0.00519523 +0.0365694 0.109049 0.0260841 +-0.062967 0.159919 -0.044604 +0.0156331 0.0915267 -0.0269033 +-0.0577811 0.0472143 0.0403119 +-0.086179 0.107645 0.0083646 +-0.00357674 0.0347286 -0.0239915 +-0.0205507 0.066817 0.0505282 +-0.0590047 0.132542 0.0375172 +0.00657766 0.034511 0.0217547 +-0.0730595 0.110042 0.0423406 +-0.0725117 0.163674 -0.014076 +-0.0130193 0.115677 -0.016537 +0.0190348 0.0768352 0.0521916 +0.00221518 0.114462 -0.0193126 +-0.0142885 0.0390252 0.0350884 +-0.0492809 0.152135 0.0110836 +0.0378754 0.0980648 0.0320906 +-0.0377624 0.0420706 0.0430123 +0.00890997 0.125517 0.0316176 +0.00478616 0.0342999 0.00145343 +-0.0220536 0.0952953 -0.0290683 +-0.0883767 0.125344 0.00127971 +-0.055499 0.0761852 0.0427309 +-0.0505039 0.0487703 0.0186583 +0.0374548 0.0781001 0.0366194 +0.00520505 0.129939 3.61829e-05 +-0.0464525 0.146291 0.00643191 +-0.0545162 0.049049 -0.0054035 +-0.0209524 0.0920017 0.0529687 +-0.0534945 0.105667 0.0403502 +-0.0355002 0.174151 -0.00180627 +-0.0654804 0.146553 -0.0219125 +-0.0577458 0.131139 0.0375772 +0.0440584 0.0860884 0.0251529 +0.0484396 0.0486951 -0.00266239 +-0.0510317 0.0544187 0.0196187 +-0.0305049 0.0720397 -0.0305133 +-0.0513349 0.057067 0.0306313 +-0.0444577 0.123407 -0.0104693 +-0.0404418 0.0351129 -0.0289386 +-0.0611441 0.169381 -0.0576009 +-0.0704838 0.120388 0.0533274 +0.00150053 0.0591133 0.0550768 +-0.0504978 0.159322 0.00851944 +-0.0127755 0.126776 0.0267341 +0.00508634 0.0345614 -0.0155701 +-0.0433649 0.150829 -0.00565896 +-0.0276025 0.0888516 -0.0335952 +-0.0536948 0.0661603 -0.0107375 +0.0453129 0.0698237 0.023466 +-0.0407211 0.150643 0.00408479 +0.0111265 0.120476 0.0355761 +0.000791005 0.0398223 0.046536 +0.0460187 0.0482649 0.029417 +-0.0748889 0.119375 -0.00765967 +0.0240318 0.0591603 0.0451764 +0.0102193 0.129407 0.000604352 +-0.0662744 0.179701 -0.0600508 +-0.0165098 0.0772307 0.0561424 +0.0294369 0.0781918 0.0443709 +-0.0510278 0.0474301 0.0166894 +-0.0808293 0.0720933 0.0155437 +0.0139163 0.0953242 -0.0249235 +-0.0756827 0.0823892 -0.0125945 +0.00119778 0.0825383 -0.0355009 +-0.0614832 0.0775692 0.0421583 +-0.0816839 0.0830971 0.0318157 +-0.0257584 0.0736396 0.0456283 +0.0071927 0.124822 -0.00847934 +-0.0749667 0.0683767 0.0215337 +-0.0415307 0.127763 -0.00103989 +0.0217652 0.0862022 0.0491664 +-0.0758742 0.102063 -0.0106997 +0.00933423 0.0567711 -0.0303022 +-0.010684 0.0584354 -0.034314 +-0.0126507 0.0350556 0.0425263 +0.0424994 0.0597124 0.0306347 +-0.0147222 0.0643235 -0.037347 +0.0579415 0.0716454 0.0119821 +-0.000418875 0.0389219 -0.0131688 +-0.0480228 0.144604 0.00545108 +-0.0124881 0.120998 0.0354929 +-0.0941295 0.121483 0.024294 +0.0533093 0.0573451 -0.00263239 +-0.0426699 0.0336999 -0.0149012 +-0.0466248 0.0577591 -0.0115398 +-0.0628785 0.0393963 0.0426563 +-0.072166 0.063706 0.0120556 +-0.0912059 0.14882 0.0151457 +-0.033491 0.0904012 0.0444067 +0.0152459 0.0821521 -0.0296185 +-0.0608506 0.0333964 -0.00541551 +0.0483298 0.0694277 0.0246416 +-0.0144087 0.0383376 0.0158464 +-0.00316996 0.131012 0.0171239 +0.0247594 0.0929114 0.046503 +-0.0615203 0.153356 0.00130737 +-0.0618578 0.099667 -0.0183374 +0.0303629 0.0483136 -0.00765132 +0.00253507 0.0394917 0.0345311 +-0.0713444 0.144531 -0.0156116 +-0.0188175 0.159674 -0.00630165 +-0.0174928 0.111329 0.0404434 +-0.0425002 0.0437706 0.0420539 +0.038489 0.0484512 0.0319961 +-0.011814 0.163592 -0.0157611 +-0.0526941 0.0334208 -0.00928256 +-0.0613494 0.131082 0.0393909 +-0.0276253 0.0450182 -0.0280952 +-0.0449077 0.159414 0.00690868 +0.00747686 0.0474111 0.0493962 +-0.0535025 0.0917839 0.0444757 +0.0372578 0.0658262 -0.0127785 +-0.0616099 0.158421 -0.0325909 +-0.0443417 0.035118 -0.0243716 +0.0228959 0.0358901 0.0147404 +-0.0312846 0.119331 0.0291556 +-0.0748251 0.0906869 -0.0145799 +-0.0607901 0.0839118 -0.0197808 +-0.060035 0.0645406 0.0315175 +-0.0506187 0.0531538 -0.00831388 +0.0189959 0.104672 0.0434338 +-0.0328687 0.10291 -0.0220775 +0.0293781 0.0721886 -0.0217847 +0.0490097 0.0482239 0.0267018 +-0.00202044 0.0386496 0.0235231 +0.00793635 0.0980328 -0.0238123 +-0.0353308 0.0347033 0.016646 +0.00129902 0.039118 0.0292011 +0.0433693 0.0561672 -0.00598915 +0.0455002 0.059749 0.0314265 +-0.0891212 0.0888935 0.0154552 +-0.00853579 0.044404 0.0484956 +0.0227707 0.10612 -0.0163977 +-0.0830074 0.117688 0.0489709 +-0.0652397 0.150467 -0.0337229 +-0.0787271 0.0954037 0.0355432 +0.0320582 0.11345 0.0286813 +-0.0641355 0.160881 -0.0576174 +0.0459242 0.0806108 0.00418728 +0.0093871 0.0434015 -0.0246765 +-0.0501776 0.124028 0.032677 +-0.0486159 0.0547593 -0.0100622 +0.000494108 0.118289 0.0391022 +-0.0267825 0.0768545 -0.0363352 +0.039504 0.0914002 0.0327084 +0.0495572 0.0525985 0.0293193 +-0.0221892 0.177131 -0.0213718 +0.00724524 0.0369774 0.0269173 +0.0174748 0.0934539 0.0481542 +-0.021119 0.180019 -0.0220004 +-0.0938873 0.12827 0.0192438 +-0.0558806 0.138039 -0.00386657 +-0.0754975 0.123189 0.0531282 +-0.0682563 0.169911 -0.0313673 +0.00486454 0.131282 0.0057704 +-0.0544491 0.156028 0.0112408 +0.0259161 0.0713197 0.0444841 +-0.0205993 0.0408181 -0.0286892 +0.0326751 0.0902947 0.0421046 +0.0303546 0.107428 0.0353018 +-0.043641 0.0451148 -0.0133235 +0.0453399 0.0504735 -0.00539794 +-0.0640884 0.160897 -0.0576117 +-0.015926 0.178652 -0.0196554 +0.0285634 0.0463012 0.0357516 +-0.00467538 0.0353718 0.0474871 +0.00649755 0.131366 0.0177838 +-0.0721007 0.175064 -0.0530188 +-0.0454824 0.0959409 0.0431744 +-0.0892808 0.0888643 0.0124572 +0.00219675 0.0376886 0.0234384 +-0.0084105 0.095275 -0.0329664 +-0.0384962 0.11803 0.0312871 +-0.0451864 0.146266 0.00463419 +-0.0870838 0.0846865 0.0114769 +-0.0855325 0.107606 0.0053458 +-0.0457969 0.126831 -0.00605616 +-0.0164306 0.0384009 0.00449856 +-0.0355073 0.0662414 0.0411418 +0.0174851 0.0852069 0.0507856 +0.0160687 0.122524 -0.00804645 +-0.0586545 0.152137 0.0330321 +-0.0294308 0.0847062 -0.0336139 +-0.0725432 0.15415 0.0310449 +0.0567814 0.0724634 0.0130365 +0.0378457 0.0726607 0.0353699 +0.00540963 0.0375924 -0.0240752 +-0.0555707 0.033544 0.017104 +0.0295902 0.119982 0.0063504 +0.0197767 0.104476 -0.0186365 +-0.0484985 0.160789 0.00748776 +-0.0928176 0.120043 0.0102955 +-0.0427809 0.0464775 -0.012357 +-0.0285046 0.0645461 0.0380462 +0.00349921 0.126284 0.0311054 +-0.0670064 0.156281 0.0226936 +-0.0656496 0.0339611 -0.00733584 +-0.00649844 0.0814993 0.0573243 +0.0421622 0.0427592 0.0252421 +-0.0873651 0.0927561 0.00443631 +-0.00151033 0.108645 0.043169 +-0.0908157 0.116185 0.0427025 +0.0200734 0.0372985 0.0402199 +-0.062954 0.125297 -0.00870732 +-0.0633546 0.0720236 0.0383997 +-0.0691914 0.171601 -0.0360136 +-0.0688255 0.0937312 -0.0163709 +-0.0485029 0.112572 0.035725 +-0.00574267 0.0339825 -0.0190499 +-0.0604857 0.094604 0.0446906 +-0.0257335 0.166803 -0.00931015 +-0.0159771 0.186924 -0.0221541 +0.0463322 0.0743214 0.0180018 +0.0030519 0.130996 0.00365966 +-0.0421665 0.16366 -0.0107342 +-0.0225871 0.168294 -0.0117855 +-0.0484917 0.0718083 0.0405326 +0.0122698 0.0710113 -0.031719 +-0.0857101 0.0869161 0.0258492 +-0.0715046 0.0901731 0.0417302 +-0.0699133 0.123828 -0.00875488 +0.0279019 0.110786 -0.0114065 +-0.0354864 0.12379 0.0245568 +0.0305321 0.081181 -0.0200863 +0.0102651 0.128706 0.0263309 +0.0148603 0.0562539 0.0494599 +-0.0366932 0.0665933 -0.0149481 +0.041469 0.0711384 0.0300167 +-0.0554857 0.0834027 0.0450839 +-0.0113051 0.0389162 -0.0134542 +-0.0701665 0.143936 0.0443089 +0.0424986 0.0527982 0.0326152 +0.0132 0.115178 -0.01612 +-0.0566151 0.0335713 0.0115144 +-0.0746759 0.158036 -0.00628607 +-0.0710897 0.0678996 0.0280309 +-0.0684162 0.160948 -0.0539628 +-0.0788405 0.11444 0.0481937 +0.0425653 0.0859482 -0.00679004 +0.00508264 0.128731 0.0273249 +-0.0460392 0.132757 0.0146796 +-0.0644245 0.0335892 0.00631261 +-0.0779562 0.0727271 0.0259414 +-0.0320811 0.1577 -0.0118106 +-0.08561 0.123026 0.0486561 +-0.0183468 0.0445922 0.0521871 +-0.0646788 0.0378404 0.0247428 +-0.09254 0.118824 0.0413658 +0.0439353 0.0973509 0.0141605 +-0.0925657 0.116008 0.0123183 +-0.00476329 0.0770151 -0.03731 +-0.0647922 0.176686 -0.0531637 +-0.0267774 0.122204 0.0247423 +-0.0331437 0.169673 -0.0156322 +-0.0663865 0.0388997 0.0348294 +0.0255945 0.0477251 0.0385093 +0.0336609 0.0968599 0.0382997 +-0.0916539 0.147467 0.0181472 +-0.0336992 0.0435791 0.0473765 +-0.0785063 0.162438 -0.0279579 +-0.0756712 0.0759423 -0.00884701 +-0.0623186 0.155306 -0.0155862 +-0.0754942 0.124603 0.052984 +-0.0710841 0.0626658 0.0113319 +-0.0214966 0.101664 0.0441706 +0.0325091 0.0454335 0.0302933 +0.023348 0.0930459 -0.0224955 +-0.0477168 0.123954 0.0291105 +0.026559 0.119879 -0.0019388 +-0.0671262 0.150692 -0.0396095 +-0.054551 0.0416447 -0.00949548 +-0.0689 0.115705 0.0512836 +0.0420833 0.0409609 0.00227771 +0.021477 0.0961774 0.0469631 +-0.0517663 0.0812234 -0.0211522 +0.0324154 0.0541402 -0.0117355 +-0.0283184 0.0383801 -0.00152859 +-0.0454995 0.122409 -0.0114255 +-0.0786209 0.174303 -0.0444916 +-0.0570614 0.151623 -0.00120922 +0.0242791 0.118022 0.0317589 +-0.0639993 0.0370815 0.0170442 +-0.0395018 0.0733502 0.0421461 +-0.0174724 0.0388154 -0.0145918 +-0.0829949 0.115554 0.048125 +-0.0155328 0.0386551 0.0297691 +-0.00449743 0.110031 0.0429169 +-0.062341 0.164692 -0.0435908 +-0.016985 0.0384848 0.0278228 +0.0153998 0.109294 -0.0177665 +-0.0121134 0.0347053 0.046472 +0.0238752 0.0421864 0.0394869 +-0.0510476 0.139892 0.00172061 +-0.073661 0.147179 -0.0178577 +-0.0673436 0.155169 0.0284164 +-0.0375089 0.0790164 0.0426336 +-0.0881282 0.0888644 0.0224361 +-0.0165385 0.0459978 0.0505746 +0.0187298 0.0489829 0.0426596 +0.00514365 0.0400743 0.045751 +-0.0405081 0.080404 0.0427771 +-0.0559081 0.112628 -0.0165116 +-0.0414824 0.100082 0.0415393 +0.0326734 0.101648 -0.0136311 +0.0591059 0.0677548 0.00712748 +-0.00525238 0.0350087 0.0405181 +0.0272291 0.0788716 -0.0231926 +0.0526679 0.0554283 0.0285725 +-0.074839 0.15964 -0.0289433 +-0.0475589 0.0335011 0.00261705 +0.0224079 0.0809035 0.0500644 +-0.0774544 0.072993 0.0275707 +-0.0817516 0.140386 -0.000790241 +-0.0203273 0.127615 0.0123404 +-0.0570931 0.0535244 0.00162534 +-0.0775213 0.124569 0.0523637 +-0.0267733 0.15662 -0.0020223 +-0.0341168 0.0383136 -0.000825234 +-0.0926373 0.122856 0.0322729 +0.00549857 0.09243 0.054294 +0.0202616 0.0749268 -0.0272874 +0.0133552 0.13008 0.0103074 +0.0423653 0.0519948 -0.00681796 +-0.0627003 0.150649 -0.00857321 +0.0200754 0.0713524 0.0501382 +-0.0182235 0.123174 0.0292543 +-0.0130686 0.183424 -0.0252779 +-0.0128628 0.0896836 -0.0372956 +-0.0301706 0.0421547 -0.0296993 +0.0403707 0.0444834 -0.00362771 +-0.0253772 0.0722169 0.0453002 +-0.0241328 0.0565311 0.0416958 +-0.0657729 0.0378142 0.038507 +-0.0475733 0.0504004 -0.00924022 +0.0347756 0.0548514 0.0342768 +-0.01273 0.098974 -0.0248693 +-0.0749897 0.139866 -0.00647617 +0.0541381 0.0477755 0.0182012 +0.026052 0.121668 0.00219807 +-0.0178133 0.0827451 -0.0392154 +-0.00506384 0.129812 0.0236663 +-0.0022335 0.116052 -0.016996 +0.0194826 0.0892535 0.0485994 +-0.00549695 0.108658 0.0435455 +0.0411799 0.0844321 -0.00979241 +-0.0546525 0.154186 0.0155249 +0.0209039 0.0386887 -0.00868617 +-0.0522987 0.0504261 0.0316576 +-0.00860205 0.0406149 -0.0260948 +-0.0064872 0.119657 0.0377321 +-0.0794636 0.141716 -0.00376694 +-0.0494618 0.0347575 0.043629 +-0.0282938 0.176171 -0.0172378 +-0.0337476 0.119587 0.029726 +-0.0548148 0.0883935 -0.0220325 +-0.0759162 0.179384 -0.0516058 +-0.0444968 0.0747696 0.0424527 +0.0361181 0.111694 0.0216233 +-0.0677747 0.0370061 0.0137537 +-0.0497774 0.0826759 -0.0213753 +0.0238372 0.12269 -3.58731e-05 +-0.0478227 0.148347 -0.00331487 +-0.00860618 0.0968801 -0.0306409 +-0.0545965 0.0575496 0.0196126 +-0.06512 0.0430832 -0.00329452 +-0.0719312 0.128266 -0.00893149 +-0.0409612 0.0344092 -0.00782476 +0.0534457 0.0510274 0.0243391 +0.0276856 0.0494518 -0.0176966 +-0.0336693 0.0607336 -0.0127906 +-0.0284587 0.0446173 0.0507119 +-0.0255118 0.0936195 -0.0293755 +-0.0717668 0.172238 -0.0510285 +-0.047089 0.156143 -0.00736831 +-0.0756553 0.0837701 -0.0135751 +-0.013224 0.172718 -0.0260103 +-0.0301691 0.174141 -0.0165339 +-0.00226303 0.0382357 0.0184109 +0.0412731 0.0417215 0.0241695 +-0.0559192 0.0335546 0.0152404 +0.0277966 0.12141 0.0199376 +-0.0649916 0.0659907 0.0309635 +-0.0512719 0.127504 -0.00467957 +0.0313718 0.118521 0.0155758 +-0.0621134 0.0350003 0.0423988 +0.00602626 0.127371 -0.00517179 +-0.0500909 0.0358963 0.0459805 +-0.0852266 0.0854944 0.0253873 +-0.0209874 0.04034 0.0536055 +-0.0719403 0.179282 -0.0559874 +-0.0521219 0.120842 -0.0117106 +0.0579437 0.0700837 0.0193768 +-0.0786649 0.0764169 0.0296559 +-0.0724896 0.12743 0.0524304 +0.0400371 0.107017 0.0091647 +-0.0677955 0.0355805 0.0137906 +-0.0212083 0.0825271 0.0563448 +0.0305816 0.112813 -0.00758269 +0.0546919 0.0524816 0.0244106 +0.000503407 0.0647904 0.0566018 +-0.0211614 0.183089 -0.0130948 +-0.0364897 0.0648519 0.0414613 +0.00739557 0.0347435 -0.0216037 +-0.091466 0.14613 0.0241501 +-0.0496442 0.0620141 -0.0117058 +-0.0844141 0.083121 -0.000497419 +0.00924009 0.0846665 0.0556174 +-0.00137013 0.0367929 0.00718583 +0.0499211 0.0443554 0.0178724 +-0.0257693 0.158564 -0.0117505 +-0.08951 0.140665 0.0311774 +0.0074706 0.129229 -0.00123166 +0.0318377 0.0822312 0.0425933 +0.0347555 0.0768972 -0.0157225 +-0.0103619 0.179472 -0.0295714 +0.0350602 0.0968439 0.0368099 +0.0192972 0.063662 -0.0278633 +-0.0758841 0.106327 -0.00893896 +0.0225495 0.119713 -0.00701355 +0.0522449 0.0480372 0.0225432 +-0.0142613 0.0350279 0.0492532 +0.0588535 0.0566417 0.00718098 +-0.0834209 0.0911774 0.0304851 +-0.0354827 0.0945899 0.0441989 +0.0491837 0.0442045 0.019604 +-0.0441515 0.0335185 0.00510187 +-0.0605024 0.111127 0.0368734 +-0.0368482 0.0336146 -0.0266993 +0.0043237 0.131753 0.0112849 +-0.0519904 0.135575 0.0286552 +-0.0628904 0.102548 -0.0180123 +-0.0194395 0.062521 0.0495605 +0.0173831 0.0447578 -0.0232543 +-0.0925995 0.118805 0.0322947 +0.00218481 0.0838969 -0.0348518 +0.0331279 0.0428909 0.0287274 +-0.0528013 0.0884055 -0.0219839 +0.0151848 0.115917 -0.0149184 +0.0567976 0.0508328 0.0181941 +-0.0621222 0.0345142 0.0394173 +-0.0642021 0.071089 0.0372614 +-0.0701839 0.0658802 0.0247105 +0.0178908 0.0563588 0.0485803 +0.0392199 0.073038 -0.0108301 +0.0263921 0.0549677 -0.020802 +-0.0858835 0.0833066 0.0204824 +-0.0812999 0.0747823 0.0185535 +0.0025057 0.0688921 0.0558596 +-0.0804035 0.0745659 0.0220984 +-0.0604943 0.0804378 0.0430854 +0.0220864 0.122759 -0.00230579 +0.0416849 0.100037 0.02216 +-0.0387577 0.150948 -0.00516845 +0.0420841 0.090131 -0.00780186 +0.0270265 0.12251 0.0139387 +-0.0715501 0.0763344 0.0374538 +-0.0885696 0.137819 0.0397738 +0.00156461 0.124373 0.0333352 +-0.00526883 0.0355403 -0.0166416 +-0.0769711 0.133968 -0.00621304 +-0.0750334 0.0851031 -0.01456 +-0.00549741 0.0675328 0.0561955 +0.00134414 0.0524973 -0.030237 +-0.0573916 0.0718042 0.0398933 +0.0283911 0.0672932 0.0427559 +-0.0910025 0.133774 0.0232232 +-0.0354998 0.17123 0.000174393 +0.0458285 0.0801218 0.0204223 +-0.0574741 0.0819362 0.0441691 +0.0510603 0.0729911 0.0094016 +-0.0363492 0.0338444 -0.0305686 +-0.024023 0.17718 -0.0120308 +-0.0625429 0.143922 0.0377415 +0.0323895 0.0490788 -0.00667281 +0.00525838 0.123196 -0.010701 +-0.0294162 0.0890096 -0.030595 +0.0479414 0.0588591 -0.00500215 +0.0158474 0.128954 0.00837281 +0.0170299 0.0590745 0.0491032 +0.0534095 0.0553934 0.0278769 +-0.0600285 0.134031 -0.00683616 +-0.0595027 0.0876292 0.04502 +-0.0323351 0.172733 -0.00297212 +-0.0374903 0.172653 -0.000576721 +0.00749482 0.0546914 0.0525351 +0.0383894 0.0519545 -0.00670373 +-0.0331162 0.0436399 0.0481995 +0.0444193 0.0734774 0.000193217 +-0.0392699 0.127033 -0.00231305 +-0.0377966 0.0870844 -0.0227292 +0.0398005 0.0712586 0.0329247 +0.0227875 0.0348957 0.00078699 +-0.0825515 0.0748682 0.00752949 +-0.0162407 0.125507 -0.00287714 +-0.0654856 0.0398574 0.0313799 +-0.0623389 0.163139 -0.0325913 +-0.0686122 0.0432054 0.00454593 +-0.0379623 0.174733 -0.00453553 +-0.0563002 0.154681 0.0207165 +-0.0455391 0.0396225 -0.0172907 +0.033177 0.0592197 0.0390624 +-0.030845 0.0944191 -0.0240931 +0.0149304 0.0913967 0.05159 +-0.0283564 0.125587 0.00796681 +-0.0364861 0.0547872 0.0389196 +-0.0284285 0.0821494 0.0466355 +-0.0626767 0.0346583 0.0408688 +0.0226817 0.0618915 0.0467691 +-0.00273397 0.0346073 0.0449802 +-0.0747362 0.0663817 0.0145125 +-0.0135041 0.11966 0.0364252 +-0.0466771 0.0355018 -0.0172702 +-0.0711048 0.153963 -0.0459144 +-0.0910141 0.11449 0.034742 +-0.0801763 0.0854684 -0.0085384 +-0.0199842 0.183117 -0.0149159 +-0.0705018 0.155741 0.00837641 +-0.0229946 0.0381678 0.00700416 +-0.0428236 0.0913841 -0.0227682 +-0.0679787 0.154919 -0.0513588 +-0.0787367 0.168047 -0.0389551 +-0.0308479 0.0972408 -0.0233409 +-0.0127769 0.0784711 -0.0383296 +-0.0528408 0.0970645 -0.0221327 +0.0578361 0.0662412 0.00314493 +0.0132266 0.0822053 -0.0304726 +-0.058487 0.113928 0.0361856 +-0.0609416 0.0341022 0.0225725 +0.0498583 0.0540108 0.0297623 +-0.00985903 0.128582 0.0248602 +0.0180859 0.068641 0.0507282 +-0.0275932 0.0779206 0.0459339 +-0.0474983 0.11254 0.0358059 +-0.00306313 0.0346488 0.0430839 +-0.0494839 0.141682 0.00839735 +-0.0444006 0.0337168 -0.00238543 +0.0222885 0.0564166 0.0461469 +0.00464996 0.0378242 0.0256263 +0.00823548 0.113838 -0.0186606 +-0.0404969 0.0634536 0.0414219 +0.0464934 0.0638096 0.0291729 +-0.0275092 0.181505 -0.00874152 +-0.0850366 0.134888 0.000298852 +-0.053967 0.0687802 0.0379578 +0.0458863 0.0820184 0.0171704 +-0.0630174 0.113067 -0.0134471 +0.0163641 0.0348027 -0.00791773 +-0.0668226 0.0923514 -0.017257 +-0.073517 0.104058 0.0373151 +-0.0520334 0.0346252 0.0362685 +0.00147793 0.131501 0.00880182 +-0.0874177 0.131128 0.0459004 +-0.0124954 0.103038 0.0437348 +-0.0148129 0.0841518 -0.0390669 +-0.061937 0.111099 -0.0150221 +0.0286115 0.078186 0.0449305 +-0.0884601 0.0976543 0.0226015 +-0.0196643 0.111086 -0.0196461 +-0.0196772 0.178663 -0.0162873 +-0.0220478 0.0811409 0.0558034 +0.00850296 0.118331 -0.0155001 +-0.0404972 0.0506061 0.0393715 +-0.0833705 0.0767799 0.0142875 +-0.085765 0.112351 0.0286477 +0.0363022 0.0619082 0.0365841 +-0.000508059 0.0576316 0.0544767 +-0.089275 0.0969971 0.0184044 +-0.0708142 0.0694524 -0.00574088 +-0.0186131 0.0378854 -0.0277917 +0.0283679 0.103615 -0.0157324 +-0.0354292 0.0472715 0.0405203 +-0.0748611 0.163212 -0.0154286 +-0.0862421 0.14327 0.00816028 +0.0357067 0.0981492 -0.0118335 +0.0223181 0.0592817 -0.0260832 +-0.0625553 0.041701 -0.00649092 +-0.0824187 0.100645 0.0306028 +-0.0598691 0.101152 -0.0187591 +-0.0309758 0.0383278 -0.0168292 +0.0239145 0.0835849 0.0487444 +-0.00271812 0.0380275 0.0166967 +-0.00631097 0.0354995 -0.0168068 +-0.0435801 0.0491173 -0.010788 +-0.0586891 0.065984 -0.0090861 +-0.072851 0.148958 0.0401319 +0.0442902 0.0875035 0.0241471 +-0.0155441 0.165408 -0.0121335 +-0.084276 0.107651 0.0243439 +-0.0705376 0.04043 0.00377428 +-0.0107227 0.165105 -0.0188107 +-0.0550975 0.13533 0.0326236 +-0.0735773 0.0648576 0.0107478 +-0.0227215 0.0797443 0.0551012 +-0.0404988 0.043751 0.0418177 +-0.0507215 0.132501 0.0301542 +-0.0728912 0.11354 -0.00756484 +0.00242535 0.0343652 0.00462872 +-0.0556704 0.0335434 0.000932366 +0.00528142 0.0509933 -0.0292119 +0.0213389 0.0621093 -0.0262711 +-0.0275166 0.0348502 0.0465557 +-0.0826299 0.110259 0.0284001 +-0.00850001 0.125156 0.0314578 +-0.0707102 0.149836 -0.0414255 +0.0204972 0.107072 0.0404393 +-0.0215031 0.108553 0.041118 +-0.0404837 0.0818282 0.0429123 +-0.0586314 0.0580318 0.0162523 +-0.0648762 0.109524 -0.0137682 +-0.0687139 0.0394283 -0.00171366 +0.00150188 0.0938741 0.0550191 +0.027072 0.122359 0.0168201 +-0.0275307 0.0918372 0.0449329 +-0.00320104 0.131164 0.014241 +0.00886384 0.130684 0.0200808 +0.0402562 0.0857576 -0.0117696 +-0.0823675 0.147331 0.00217458 +-0.082659 0.0776741 0.0225196 +-0.0388763 0.107081 -0.0200218 +0.0151073 0.108635 -0.0180644 +0.0460054 0.0746307 0.0193568 +-0.0735009 0.117559 0.0527975 +-0.0337749 0.0338108 0.0177666 +0.032372 0.116958 0.0202394 +-0.0763319 0.15494 -0.00387485 +-0.0687774 0.0837142 -0.0175822 +-0.010498 0.0517545 0.0512545 +0.0210632 0.038679 -0.00769573 +0.0140028 0.091392 0.0520062 +-0.0842337 0.150005 0.032317 +0.0332536 0.0916169 0.0411931 +-0.0394897 0.0874644 0.0433271 +0.0207921 0.106393 -0.0166835 +-0.0368012 0.111669 -0.0181954 +-0.0495137 0.0503617 0.0366255 +-0.0314035 0.121359 0.0260922 +-0.0745094 0.140045 0.0479791 +-0.020484 0.0842242 0.0566713 +-0.00549585 0.0911858 0.0567127 +-0.0870672 0.0882048 0.024333 +-0.0377523 0.0783086 -0.0194038 +0.0407806 0.0717592 -0.0087638 +0.00365619 0.131646 0.00960837 +-0.0157548 0.0714554 -0.0386719 +0.0597099 0.0650292 0.0201784 +-0.0675187 0.0874976 0.0437834 +0.0405833 0.0670896 0.0305002 +-0.0180479 0.0418467 0.0526068 +-0.0427079 0.151894 -0.00649313 +-0.0220141 0.0388944 0.0538623 +0.00616925 0.0895403 -0.0330971 +-0.0064158 0.0391939 0.0347568 +0.0557201 0.0581302 0.0259556 +0.0563341 0.0711373 0.00671617 +-0.0727258 0.157431 -0.00265266 +0.0125423 0.120941 -0.012332 +0.00414764 0.103055 -0.021794 +-0.029166 0.0762862 0.0418904 +-0.0268469 0.0423164 0.0533212 +-0.0621198 0.0344764 0.0202314 +-0.0618524 0.169383 -0.0535961 +0.0250825 0.10872 0.0381638 +-0.0908254 0.142021 0.0251655 +-0.046283 0.129949 0.00285861 +0.0179105 0.0350278 -0.0116533 +-0.0397746 0.0826803 -0.0210594 +-0.0651763 0.16954 -0.0402745 +-0.0621336 0.16002 -0.0235787 +-0.0355709 0.168274 -0.000671324 +-0.037536 0.159586 0.00182669 +-0.0681305 0.148403 -0.0333773 +-0.0364875 0.100095 0.0421869 +0.0545857 0.0608947 0.0278753 +0.0195769 0.0347391 0.0223805 +-0.0765172 0.154938 0.0266851 +0.0329357 0.0710876 -0.0177809 +-0.0434945 0.111176 0.0370674 +-0.0144911 0.124164 0.030554 +-0.0644813 0.157544 -0.049277 +0.0162463 0.0722881 -0.029887 +0.0292794 0.111414 0.0337321 +-0.0730559 0.14548 -0.015959 +-0.032702 0.0694797 -0.021456 +-0.0682487 0.153053 0.0340661 +-0.0810659 0.143393 0.0434586 +-0.0508913 0.0474088 0.0186488 +-0.041491 0.0832013 0.0425516 +-0.0689521 0.151509 0.0368557 +0.00620362 0.0387395 0.045605 +-0.0437238 0.0739429 -0.018203 +-0.0589977 0.125247 -0.00779139 +0.0113495 0.0553023 -0.0296776 +-0.0665061 0.0972756 0.0420058 +0.00151221 0.0828796 0.0573767 +-0.000819486 0.131234 0.00795191 +0.0463579 0.0575632 -0.00556359 +-0.0223022 0.165377 -0.00961273 +0.0177451 0.0379283 0.0429098 +-0.0914397 0.143364 0.0211639 +-0.0366139 0.0493085 -0.0123994 +-0.0374871 0.0576725 0.0398228 +-0.0252778 0.0383536 -0.00088571 +-0.0593549 0.0410534 0.0179552 +-0.0667502 0.0337781 -0.00695475 +-0.0206534 0.0391059 0.0372895 +-0.0144184 0.0997913 0.0448499 +-0.0451841 0.16983 -0.00497124 +-0.017913 0.184413 -0.0239895 +-0.0265191 0.0388768 0.0380618 +-0.0908997 0.126938 0.0424248 +-0.000826517 0.0853922 -0.0362438 +-0.0534467 0.125409 -0.00644153 +-0.0368662 0.104233 -0.0205194 +-0.02728 0.181917 -0.0121056 +-0.0487731 0.0349958 0.0444688 +-0.0894993 0.135155 0.0302067 +0.0152294 0.0345961 -0.00794828 +-0.0135581 0.166929 -0.0145181 +-0.00316211 0.129199 -0.00103699 +0.0125106 0.108449 0.040622 +0.0494051 0.0734301 0.0147277 +-0.0427147 0.0710705 -0.0176966 +-0.0505553 0.136728 0.0232523 +-0.055076 0.154226 0.0167194 +-0.0598887 0.10828 -0.0169771 +-0.00348603 0.0489394 0.050606 +-0.0325038 0.107028 0.0393329 +-0.0558273 0.114722 -0.0152839 +-0.024429 0.062147 0.0418364 +0.0610039 0.0637491 0.0121545 +-0.0307981 0.0381678 0.00179566 +-0.0224893 0.0462052 0.0523041 +-0.0626699 0.13529 0.0374908 +-0.0871093 0.106357 0.0153576 +0.018535 0.0346925 0.0222104 +-0.0633642 0.142485 0.0383017 +0.0395752 0.0602985 0.0307005 +0.0196495 0.0356664 -0.00567711 +-0.00666974 0.0555272 -0.0330407 +-0.0554731 0.154191 0.0210182 +-0.00998984 0.177238 -0.0295136 +0.0366228 0.111865 0.00747742 +-0.00322809 0.0999661 -0.0238789 +0.00852647 0.0349744 0.0253569 +0.0337455 0.11169 -0.0043358 +-0.033869 0.10148 -0.022225 +0.0215013 0.108432 0.0393095 +0.027565 0.119234 0.026993 +-0.0477832 0.129154 -0.000397631 +-0.057288 0.0521607 0.00365094 +0.0119513 0.0873992 0.0542929 +0.0510679 0.0720267 0.021243 +-0.0525522 0.0487323 -0.0069784 +0.0419877 0.102851 0.0121565 +-0.0154922 0.126886 0.0243264 +-0.010476 0.0965182 0.0531854 +-0.0107078 0.0628117 -0.0359649 +-0.0848416 0.0858026 -0.00253503 +-0.0300028 0.125562 0.00590559 +-0.0137234 0.0643092 -0.0370705 +0.025242 0.0761745 -0.0249679 +-0.0268088 0.0852978 -0.0363495 +0.028746 0.0693043 -0.0217828 +-0.0525052 0.112524 0.0359139 +0.0608734 0.0637391 0.0151617 +-0.0820606 0.151973 0.00432386 +-0.065153 0.0712063 0.036955 +-0.0590564 0.0335255 0.00387291 +-0.0726667 0.0777379 -0.0132872 +-0.0639501 0.166025 -0.0326719 +0.033089 0.0892132 -0.0184699 +-0.0410037 0.148494 -0.000715623 +0.0152676 0.11708 -0.0141694 +-0.0405102 0.127658 -0.000961794 +0.0135046 0.108467 0.0407674 +-0.0598038 0.0341949 0.0280011 +-0.025416 0.0905129 0.0490114 +-0.0383992 0.0420226 0.0422608 +-0.0414999 0.0478558 0.040117 +-0.0525584 0.0501546 -0.00685551 +-0.0394783 0.0832832 0.0435432 +-0.0409872 0.0335947 -0.0218947 +-0.0234596 0.184384 -0.0119315 +-0.00549722 0.0633676 0.0561862 +-0.0249111 0.0958255 0.0441185 +-0.0794946 0.12171 0.0507273 +0.0218787 0.0430332 -0.0157248 +-0.0284679 0.0718578 -0.0335433 +-0.0287174 0.0344722 -0.0298467 +-0.0375646 0.0407082 -0.0285349 +-0.0684694 0.153743 0.0324784 +0.0275012 0.1187 -0.00304813 +-0.0654981 0.100096 0.041968 +-0.0728966 0.155445 -0.0329107 +-0.024103 0.171237 -0.0122056 +-0.0213641 0.0384977 0.0305062 +-0.00878734 0.0798675 -0.0379507 +-0.0034971 0.0703995 0.0574239 +-0.0628591 0.0679841 0.0349557 +-0.0205114 0.0512056 0.0456176 +-0.0215925 0.0364837 -0.0283556 +0.0308475 0.0751439 -0.0207339 +0.0345069 0.0483661 0.0310725 +0.00650269 0.044152 0.0457422 +-0.0404948 0.0733395 0.0422389 +0.00152573 0.0717149 0.0566366 +-0.00449638 0.110771 -0.0213478 +-0.0786622 0.0733343 0.0252726 +-0.00997021 0.129828 0.00744342 +-0.0368781 0.107107 -0.0201846 +0.0114979 0.112659 0.03891 +-0.0516419 0.126901 0.0340875 +-0.05391 0.13392 0.032587 +-0.0537085 0.0491368 0.0316573 +-0.086972 0.143283 0.00915353 +-0.0889751 0.0969295 0.00842099 +-0.0378902 0.121927 0.0281694 +-0.0870357 0.141902 0.00919077 +-0.056635 0.0350546 0.0452244 +-0.019816 0.0347801 0.0465131 +0.0392931 0.086096 0.0340337 +-0.0869334 0.0861006 0.0224549 +-0.0643967 0.0646443 0.0287462 +-0.0398612 0.101404 -0.0212384 +-0.0536876 0.0334698 -0.00403732 +-0.0785163 0.162478 -0.0269418 +-0.0638695 0.16329 -0.0240265 +-0.087202 0.10043 0.0240701 +-0.0736795 0.145791 -0.0128538 +0.0436314 0.0736519 0.026072 +-0.0326308 0.0352345 0.0485487 +-0.0158901 0.160985 -0.0130889 +0.0154243 0.0781303 0.053988 +0.00317805 0.0980649 -0.0258881 +-0.00360287 0.0419944 -0.0253901 +-0.0681856 0.169443 -0.0550153 +-0.0937199 0.12277 0.0132819 +-0.0335083 0.11115 0.0363293 +-0.0897769 0.0915868 0.0144438 +-0.00790609 0.0389527 -0.0109414 +-0.0512486 0.0474505 0.019655 +0.0299943 0.101654 -0.0156302 +-0.0688114 0.086573 -0.0173858 +-0.0425222 0.0435673 -0.0203211 +-0.0411345 0.037889 -0.0275181 +-0.0451234 0.0336213 -0.00611106 +-0.0513475 0.115214 -0.0158415 +-0.0135796 0.18457 -0.0255034 +0.0514482 0.0490026 0.000289284 +-0.0154766 0.160714 -0.011803 +-0.0871595 0.128427 0.0471391 +0.0253818 0.0487646 -0.0196147 +-0.0226623 0.0866242 0.0548392 +-0.00567144 0.0569411 -0.0332111 +0.046481 0.0764536 0.00918999 +0.0579995 0.0690441 0.020859 +-0.0371 0.126156 -0.00341777 +-0.073756 0.0716254 0.0312714 +-0.0320938 0.0457263 -0.0270587 +-0.0109396 0.165104 -0.0156606 +-0.088578 0.151544 0.0220955 +0.00637955 0.131641 0.0120332 +-0.00648723 0.114138 0.040862 +-0.058347 0.0335497 0.00759386 +0.00578775 0.0392649 0.0317966 +-0.0571091 0.140994 0.0314586 +-0.00487882 0.107372 -0.0225382 +-0.0806197 0.114932 0.047462 +-0.0334955 0.0874648 0.043047 +-0.0460993 0.132381 0.0175967 +-0.0638759 0.0334217 -0.000619218 +-0.0121322 0.038759 -0.00601251 +-0.0743637 0.153685 0.0319267 +-0.0445292 0.0547767 0.038815 +0.0265401 0.0686018 0.0436052 +0.0300756 0.0946988 -0.0182345 +-0.00649809 0.0703887 0.0571625 +-0.0574852 0.0861616 0.0444185 +-0.0204789 0.081458 0.0566556 +-0.045663 0.0367902 -0.0212772 +-0.0660163 0.156182 0.0230465 +0.0105014 0.112682 0.0391847 +-0.0863368 0.153207 0.0174967 +-0.0314199 0.0595176 -0.0174145 +-0.0903295 0.150229 0.0211233 +-0.0394972 0.0648803 0.0416583 +-0.0107858 0.0386823 0.0289151 +-0.0567014 0.0534733 -0.0003903 +-0.00348704 0.121028 0.0369539 +0.0367923 0.0967547 0.0340658 +-0.0206904 0.0538665 -0.0309758 +0.0171483 0.0535046 0.047456 +-0.052342 0.035529 0.0457534 +-0.0350351 0.0408695 0.0473482 +-0.0364795 0.0519621 0.0386972 +0.0339284 0.0669478 -0.0167571 +-0.0277715 0.0852268 -0.0356683 +0.00655622 0.121628 -0.0130526 +-0.0586532 0.0645395 -0.00761311 +-0.0582249 0.0344034 0.0351394 +-0.00633129 0.0388612 -0.00122239 +-0.0669198 0.113752 -0.0107887 +-0.0667337 0.0374088 0.0337222 +-0.00249774 0.0520145 0.0539036 +-0.0450377 0.0345968 0.0325315 +0.0242293 0.119847 -0.00515511 +-0.0932424 0.12021 0.0392849 +-0.0535442 0.129727 0.0348674 +-0.00517846 0.0367339 0.04845 +-0.0734548 0.0752713 0.0352251 +-0.0687371 0.155896 0.0104629 +-0.0471614 0.0336254 -0.00103179 +-0.00441737 0.117961 -0.0150091 +-0.0238639 0.0825121 0.0547585 +-0.0132802 0.102485 0.0435875 +-0.0649278 0.105334 -0.0156241 +0.0286778 0.116188 -0.00517917 +-0.0236663 0.0381653 0.00868472 +-0.0645999 0.0432992 0.0347148 +-0.0856886 0.0926246 -0.00156242 +-0.0835056 0.0777286 0.0204901 +0.0321567 0.107734 -0.010124 +-0.0895151 0.151559 0.0181181 +0.0110134 0.130158 0.00376449 +-0.0202842 0.16977 -0.0137262 +-0.00591514 0.12799 -0.00376372 +0.0143906 0.0373653 -0.0212799 +-0.0719296 0.11219 -0.00889601 +-0.0157228 0.0642918 -0.0372774 +0.0269219 0.115924 -0.00692402 +-0.0665225 0.0435914 0.00948645 +-0.0747288 0.102175 0.0369848 +0.0207343 0.120306 -0.00765281 +-0.0240392 0.0380418 0.0177619 +-0.0806691 0.107746 0.0299304 +0.0541727 0.0734662 0.0150335 +-0.0828869 0.0763004 0.0145215 +-0.0490771 0.154645 -0.00592496 +0.0211784 0.0973838 -0.0221644 +-0.0576844 0.0467193 0.0286753 +0.00985328 0.0602892 0.0527986 +0.0232608 0.0748451 -0.0261321 +-0.0524982 0.0862336 0.045539 +-0.0783198 0.147274 -0.0028373 +0.0082875 0.114937 -0.017843 +0.018445 0.0456517 -0.0226728 +-0.0239275 0.1816 -0.0100979 +-0.040758 0.0797297 -0.0196637 +-0.0485257 0.121087 0.0297472 +-0.0345208 0.0633716 0.0403553 +-0.00118398 0.0362533 0.0473478 +0.000189104 0.0867348 -0.0351526 +0.0231695 0.0520348 0.0420858 +-0.0324783 0.0337381 0.0144953 +-0.0597681 0.0334439 0.00560092 +0.0177557 0.0344112 0.00209212 +0.0159863 0.0860656 0.0513294 +-0.0393291 0.127134 0.01721 +-0.0628998 0.1209 -0.00884208 +0.04086 0.101423 0.0231764 +-0.0146702 0.122522 -0.00773793 +-0.0292113 0.156649 -0.000270817 +-0.0415254 0.172553 -0.00373349 +-0.0365135 0.084703 0.0437856 +-0.0208969 0.0381794 0.0236923 +0.011579 0.120136 -0.0134617 +-0.0347516 0.0383809 -0.00467189 +-0.0166266 0.172732 -0.0172138 +-0.0531086 0.126902 0.0355005 +-0.0154789 0.0347707 0.0439361 +-0.0110657 0.112343 -0.0190003 +0.0286979 0.0806527 -0.0216026 +-0.00681305 0.0345833 0.0441587 +-0.0245442 0.0708437 0.0459353 +-0.0613991 0.0718897 0.0389316 +-0.0682443 0.179461 -0.0589214 +-0.00573885 0.0698843 -0.0361103 +-0.0875967 0.100907 0.00640641 +0.0169866 0.0348952 0.0343866 +0.0228667 0.0444458 -0.0147763 +-0.0536029 0.162357 0.00297376 +-0.0723862 0.156822 -0.0359122 +0.000140075 0.103071 -0.0225088 +-0.0543692 0.0334679 -0.00234676 +-0.0771859 0.109877 -0.00559641 +-0.0922148 0.11614 0.0373108 +0.00616718 0.124896 -0.00854967 +-0.00125449 0.12189 -0.0112382 +0.0349132 0.114353 0.0126105 +-0.0534959 0.107052 0.0398334 +0.0553645 0.0492819 0.0192078 +0.0496613 0.0501912 -0.00270335 +-0.0917143 0.128313 0.0332436 +0.00552678 0.0619607 0.0559576 +-0.0252475 0.0736694 0.0465167 +-0.0656879 0.156227 0.015899 +0.0167178 0.128574 0.00869666 +-0.0616277 0.154191 0.00244865 +-0.0845352 0.136246 0.000324782 +-0.0835033 0.0804619 0.0265017 +-0.0380583 0.154792 -0.00920218 +-0.0683549 0.0382578 0.0114352 +-0.0713665 0.156324 0.018248 +0.0326986 0.0781958 0.0420379 +-0.0267044 0.158758 -0.0121466 +0.0274612 0.0417732 0.0323464 +-0.00748374 0.116886 0.0393445 +-0.0618946 0.0333508 -0.00558837 +-0.022958 0.166842 -0.0105567 +0.000373363 0.0349968 0.00734292 +-0.0437553 0.033642 0.00144997 +0.0267259 0.120866 0.0252428 +-0.0859248 0.0832079 0.00547822 +-0.00269975 0.109146 -0.0216168 +0.055733 0.052157 0.00319809 +-0.0704697 0.181218 -0.0537747 +0.00698645 0.0818884 0.0558396 +0.0424628 0.0943961 -0.00280162 +-0.0560128 0.0334549 0.00994988 +-0.000497737 0.11557 0.0407823 +0.0115122 0.104463 0.0449641 +0.0113328 0.124014 0.0325236 +-0.0257103 0.0983522 -0.0242349 +0.0385114 0.038461 0.00447642 +0.0274866 0.0994982 0.0416519 +-0.0205044 0.11679 0.0360351 +-0.0287307 0.0748955 0.0414817 +0.021677 0.0354914 0.00935068 +-0.0604978 0.109778 0.0376942 +0.0349482 0.114159 0.0154869 +-0.0891171 0.11284 0.0400327 +-0.0525174 0.133925 0.0310668 +-0.0467675 0.0811826 -0.0202513 +0.0148515 0.129255 0.0180171 +0.0134018 0.0418881 -0.0236384 +-0.0196836 0.0524593 -0.0309769 +-0.0907522 0.136478 0.0191999 +-0.0282073 0.178522 -0.0159874 +-0.0456817 0.146626 -0.00135754 +-0.0234782 0.174205 -0.0130294 +0.0157394 0.128861 0.0183169 +-0.049553 0.0432181 -0.0104928 +-0.0364431 0.0379518 -0.0296736 +-0.0342528 0.161016 -0.000502552 +-0.0106993 0.061373 -0.0355475 +0.0155546 0.034804 0.0269401 +0.0445305 0.0664178 0.0264316 +-0.0692603 0.166617 -0.0519986 +0.00900275 0.0343116 -0.0200681 +-0.0789639 0.13393 -0.00512141 +0.0183835 0.0490953 -0.0235496 +-0.0211568 0.177178 -0.0149257 +-0.0459855 0.0341655 0.0291843 +0.0234635 0.12256 0.0268857 +-0.0437241 0.0724973 -0.0179849 +-0.0492665 0.143175 0.00640774 +0.0310235 0.0363382 0.00298341 +-0.0703389 0.0353326 0.0107638 +-0.0505002 0.0762293 0.0432414 +-0.0641035 0.141307 -0.00745692 +-0.0474934 0.115292 0.0331905 +-0.050108 0.144746 0.0113816 +0.0325029 0.117364 0.00744623 +-0.0183192 0.124686 -0.00393431 +-0.00150748 0.059016 0.0544507 +-0.0104895 0.115533 0.0397944 +-0.023487 0.0435372 0.0536017 +-0.0655471 0.154522 0.00288522 +-0.0675989 0.156142 0.0239498 +-0.03165 0.0339865 0.0180432 +-0.0447604 0.0336698 -0.00424497 +-0.0348481 0.110331 -0.0188 +-0.0114927 0.0938853 0.0554733 +-0.0700706 0.155642 0.00707306 +0.0444883 0.05975 0.0312137 +-0.0788477 0.0773102 0.0306071 +-0.0712203 0.0706743 0.0326242 +0.00153616 0.078717 0.0572683 +-0.0243177 0.0607418 0.04177 +0.0445696 0.0677675 0.0254424 +0.0516179 0.0503639 -0.000756444 +-0.0610049 0.129668 -0.00770337 +-0.0731244 0.174613 -0.0403365 +-0.021137 0.166765 -0.0184531 +-0.068723 0.163208 -0.0142948 +-0.0415011 0.0676725 0.0415782 +-0.0829782 0.147345 0.00316952 +-0.056007 0.145723 -0.001571 +-0.023276 0.0768174 0.0529315 +-0.0303597 0.158405 -0.0122944 +-0.0594923 0.107014 0.0396564 +-0.0680504 0.156343 0.0223236 +-0.050518 0.054445 0.0327051 +-0.0324286 0.126663 0.0108668 +-0.0629263 0.108221 -0.0156274 +-0.0283572 0.0862879 0.0464179 +0.0304249 0.0399897 -0.00292852 +-0.0820851 0.106006 0.028693 +-0.081432 0.0776141 0.0263044 +0.0121657 0.0990535 -0.0228743 +-0.0148931 0.161809 -0.0143393 +0.0322568 0.0814321 -0.0193234 +-0.0249634 0.0631201 -0.0324542 +-0.0844782 0.152284 0.0269844 +-0.0284889 0.100156 0.0431683 +0.0335187 0.113275 -0.00203325 +0.0243141 0.0347256 0.0105738 +-0.0189924 0.127884 0.0157415 +-0.0555 0.0488797 0.0362241 +-0.0675079 0.104205 0.0395869 +-0.0181173 0.0384288 0.000495732 +-0.0138101 0.0841459 -0.0389466 +-0.0343542 0.0367977 0.0484644 +0.0170352 0.0393356 0.0436644 +-0.0255828 0.0620727 0.0401653 +0.0012257 0.0797035 -0.0352779 +-0.0033226 0.122983 -0.0103909 +0.0377895 0.0954381 0.0337234 +-0.0779478 0.107702 0.034147 +0.0309974 0.0673207 0.0412553 +0.0125192 0.0833344 0.053329 +-0.0569108 0.0471914 0.0407265 +-0.0765896 0.172837 -0.038783 +-0.0243798 0.168291 -0.0108587 +-0.0849208 0.114388 0.046865 +0.0270076 0.100021 -0.0178938 +-0.00936568 0.0388306 -0.00738531 +0.0124903 0.101789 0.047403 +0.0153634 0.050802 -0.0265798 +-0.051492 0.107057 0.0393982 +0.00022872 0.0769217 -0.0357549 +-0.073138 0.156184 0.0161734 +-0.0171943 0.171219 -0.0224352 +0.0282636 0.073195 -0.0229429 +-0.0554943 0.112513 0.0359102 +0.0268698 0.0448976 0.0368034 +-0.0567448 0.0548796 0.00465654 +0.00393342 0.0340406 0.014385 +-0.0269434 0.0864227 0.0492292 +-0.050859 0.0487888 0.015667 +-0.0524919 0.0762203 0.042799 +-0.025733 0.0751362 0.0469781 +-0.0870453 0.0846718 0.00449266 +-0.0765303 0.0961207 -0.0124976 +0.0303449 0.112749 0.0317399 +-0.070531 0.151779 -0.0453729 +0.0534729 0.0645627 -0.000631784 +0.0104112 0.0375138 -0.0230668 +0.0592863 0.0552837 0.0131736 +0.00525297 0.069736 -0.0335357 +0.0167263 0.0350159 0.0378322 +-0.0679113 0.0395796 0.0109828 +0.013918 0.129208 0.0205036 +-0.079478 0.142827 0.0451049 +-0.0708238 0.0631793 0.00551684 +-0.0687786 0.16979 -0.0301319 +-0.0187811 0.119777 -0.0107944 +0.021663 0.053586 0.0452157 +0.015783 0.0914175 0.0510677 +0.0258521 0.119872 -0.00319504 +-0.0172292 0.104564 -0.022745 +-0.0618136 0.0453397 -0.00172473 +0.0207685 0.0449736 0.0420523 +-0.0231964 0.0651165 0.0447582 +-0.0305175 0.0847809 -0.0315638 +-0.0658758 0.122838 0.0504663 +-0.0148324 0.107132 -0.0214612 +0.0460436 0.0778241 0.00519064 +0.00396334 0.0346642 0.000955872 +-0.000496537 0.0675633 0.0565514 +0.0342214 0.0813611 -0.0182381 +-0.0464961 0.0464761 0.0407845 +0.0547176 0.0680176 0.00187225 +-0.0580682 0.132534 -0.0063879 +0.0331199 0.0754691 0.0408773 +0.0401875 0.102783 0.0241636 +-0.0783656 0.151459 -0.000884796 +0.0238113 0.0754906 0.0485213 +0.0164183 0.0726599 0.0518741 +-0.0674097 0.173701 -0.0580011 +-0.0179511 0.175707 -0.0173471 +-0.0334973 0.0859864 0.0423406 +-0.0416172 0.17268 -0.00599082 +-0.0883846 0.119913 0.00130167 +-0.0154061 0.185475 -0.025609 +0.0464852 0.0429053 0.00427528 +0.0545912 0.0717149 0.021096 +-0.0661916 0.0334877 0.00245273 +-0.0495852 0.124005 0.0317323 +-0.0537144 0.0491343 0.0296614 +-0.0818927 0.122139 -0.0045131 +-0.0718108 0.0955414 0.0413269 +0.0221671 0.0444704 -0.016762 +-0.0798314 0.0733447 0.0205614 +0.0166594 0.125691 0.027245 +-0.0892473 0.0888575 0.0104669 +0.00551166 0.0504095 0.0521406 +-0.0627982 0.16724 -0.0607839 +-0.0646154 0.0457888 0.00269728 +-0.0485702 0.047508 -0.00937813 +0.026502 0.121591 0.0237374 +-0.0353601 0.152626 -0.00619729 +0.0403422 0.10564 0.0161674 +-0.0615416 0.034204 0.0241166 +0.0380593 0.0869714 -0.0147288 +0.0319925 0.114417 -0.00326976 +-0.0267368 0.0385445 0.0329521 +-0.0618964 0.108239 -0.0162152 +-0.063845 0.150027 0.0371387 +-0.0739579 0.155489 -0.0249104 +-0.0709691 0.153934 -0.0469289 +0.0249948 0.0405751 0.0353079 +-0.0304784 0.0381297 0.00370653 +-0.0247632 0.0741431 -0.0374571 +-0.0216593 0.0509046 -0.0292926 +-0.0446505 0.0592548 -0.0123035 +-0.0410267 0.172571 -0.00282243 +-0.060985 0.168641 -0.0594898 +0.0260213 0.111246 -0.0119 +-0.0224982 0.103036 0.0436276 +-0.0720537 0.0640001 0.00639175 +-0.08755 0.12805 0.000278104 +-0.0790371 0.0873264 0.0361062 +-0.055031 0.152471 0.0270238 +0.0537262 0.0622241 0.0283948 +0.0248385 0.107021 -0.0153684 +-0.0817292 0.154617 0.0205129 +-0.0776054 0.0804635 0.0348861 +-0.0644463 0.0769092 0.0410862 +-0.0737119 0.082093 -0.0148287 +-0.0782342 0.0694181 0.011104 +-0.0678631 0.0335656 -0.00155997 +-0.0771555 0.15282 -0.00488816 +0.028309 0.049176 0.0371723 +0.0122273 0.0342048 -0.000691958 +-0.0643947 0.15704 -0.046105 +-0.0276636 0.0522618 0.0383069 +-0.0587411 0.154535 0.0270999 +0.0275645 0.122014 0.00844231 +-0.0465457 0.0337901 0.0276252 +-0.0853906 0.110991 0.0352247 +-0.0338206 0.0367327 0.0490996 +-0.0145535 0.06115 0.0532234 +0.0367927 0.111755 0.0132988 +0.0458177 0.0820138 0.0181729 +-0.0444555 0.121377 -0.0123561 +0.0224202 0.0430392 -0.0127301 +0.0158478 0.102035 -0.022 +-0.0100884 0.0347013 0.0469069 +0.0374928 0.0498822 0.031843 +0.0351777 0.0559301 -0.00964394 +-0.00946358 0.169654 -0.0207426 +-0.0656264 0.15567 -0.0512009 +-0.0254805 0.0434932 0.0531599 +-0.0270955 0.0576776 -0.0274029 +-0.0228583 0.0350556 -0.0196661 +-0.0139903 0.169817 -0.0169155 +0.0176377 0.0348968 0.0272836 +-0.0144859 0.107222 0.0429439 +-0.0291189 0.15522 -0.00190906 +-0.0411739 0.165162 -0.0113688 +-0.0123514 0.0384213 0.00530714 +-0.0527141 0.141625 0.0234145 +-0.0612038 0.154834 0.027675 +-0.0338487 0.098628 -0.022813 +-0.000859642 0.105926 -0.0219248 +-0.0203431 0.186558 -0.0166005 +-0.01883 0.0882728 -0.037792 +-0.0635094 0.0987058 0.0422669 +-0.000483407 0.0787781 0.0579546 +-0.0700187 0.074071 0.0369567 +-0.0201986 0.186115 -0.0151371 +0.00141145 0.0376391 -0.024717 +0.0439647 0.0888964 0.0241631 +-0.0774025 0.100791 0.0354679 +-0.078513 0.145668 0.0427459 +0.0241305 0.0618675 0.0453428 +0.0109129 0.0833325 0.0545132 +-0.0798758 0.117757 -0.00451351 +0.0302928 0.119677 0.0137476 +0.0354021 0.0399255 -0.00156043 +-0.0489211 0.0687544 0.0390214 +-0.0493842 0.0558982 0.0343669 +-0.0524939 0.0776533 0.0431774 +-0.00761105 0.112944 -0.01965 +-0.0631004 0.038056 0.0429096 +-0.078061 0.117721 0.0511362 +-0.0228935 0.0375359 -0.0182249 +0.0168546 0.104974 -0.0191686 +-0.062493 0.0385506 -0.00796777 +-0.0814183 0.138999 -0.00180871 +-0.0585811 0.0344322 0.0332983 +-0.0299241 0.172727 -0.00652243 +0.0112861 0.130316 0.0195341 +-0.0325036 0.10978 0.0375732 +-0.0826224 0.141799 0.00118353 +-0.0805022 0.0831735 0.0334637 +0.0122352 0.0808526 -0.0312408 +-0.0771876 0.0907032 -0.0125611 +-0.0140608 0.038299 0.0231793 +-0.0386607 0.116212 -0.0149511 +-0.0276455 0.0376114 0.0210157 +-0.0832306 0.0871025 0.0304136 +-0.0334887 0.0471143 -0.0243565 +-0.0400971 0.153595 0.0050429 +-0.0647302 0.154215 -0.0408208 +-0.0194396 0.0527865 0.0471813 +-0.0665534 0.156088 0.0243177 +0.00850109 0.107119 0.0411949 +-0.0740753 0.174982 -0.0510829 +-0.0131928 0.11434 -0.0171133 +-0.00874908 0.0742103 -0.037697 +0.00967799 0.130572 0.00468392 +0.0318663 0.0862689 0.0426688 +0.0197994 0.0399634 -0.0167042 +0.0141672 0.0347073 0.00296826 +-0.0334912 0.0604137 0.038899 +-0.010802 0.0812949 -0.0382665 +-0.0626127 0.0339199 -0.00909656 +-0.0225179 0.0594554 0.0442529 +-0.0744235 0.152695 -0.0268913 +-0.0148262 0.181632 -0.021586 +-0.0501691 0.0348773 0.00986405 +0.0104481 0.102845 -0.020901 +-0.0127527 0.177163 -0.0221029 +0.008145 0.103004 -0.0207662 +-0.0548867 0.101301 -0.0205491 +-0.0772028 0.162464 -0.0309387 +0.0379552 0.0588939 -0.00773658 +-0.0134957 0.0925258 0.0558596 +0.0248886 0.0970269 -0.0206985 +-0.0393214 0.0342416 -0.0147308 +-0.0458838 0.129671 0.00293555 +-0.0574217 0.135337 0.0345321 +-0.0820284 0.13533 -0.00235647 +0.038582 0.0659177 0.034606 +-0.0494896 0.157875 0.00921755 +-0.0225598 0.125982 0.00280455 +0.0216881 0.102085 -0.0200779 +-0.0136509 0.0496769 -0.0312069 +-0.0615955 0.15529 0.0260796 +-0.0115193 0.0773584 0.0574493 +0.0404486 0.0745397 -0.00879543 +-0.057886 0.0969698 -0.0206731 +-0.0109392 0.038438 0.0236915 +-0.0148475 0.162865 -0.0159421 +-0.0183748 0.0353493 0.0515278 +0.029169 0.114081 0.0318014 +0.0232083 0.0449556 0.0403488 +-0.0234883 0.122057 0.0276339 +0.0359605 0.0936242 -0.0130764 +-0.0175335 0.0392471 0.0378093 +-0.0308588 0.171231 -0.00613945 +0.0247031 0.0463341 0.0389677 +-0.0925247 0.128292 0.0282327 +-0.0665656 0.122847 0.0512252 +0.0584586 0.0607609 0.022909 +-0.00884754 0.115581 -0.0164541 +-0.00309453 0.0984522 0.0515066 +0.0115015 0.119616 0.0358941 +-0.0494977 0.0903933 0.0446494 +-0.0126691 0.0348865 0.0479592 +-0.0149576 0.0897382 -0.0373658 +-0.0152002 0.174208 -0.0254562 +-0.0756281 0.167353 -0.024657 +-0.0627225 0.0402195 0.0247088 +-0.058955 0.151077 0.0341866 +-0.00932165 0.17502 -0.028678 +-0.0123491 0.183911 -0.0264322 +-0.0896074 0.135171 0.0322127 +-0.0426789 0.168728 0.0023488 +-0.0748775 0.0739125 0.0325733 +0.03891 0.10882 0.00971935 +-0.0633729 0.0431313 0.0286681 +-0.0551792 0.0336096 0.018904 +0.0268834 0.0875842 0.0460207 +-0.0168782 0.0351038 0.0503404 +-0.00549453 0.0590678 0.0548923 +-0.0286315 0.0383676 -0.00896928 +-0.0332631 0.177035 -0.011981 +-0.0748045 0.167943 -0.0420608 +-0.0851109 0.0939488 -0.00257672 +0.00096833 0.121103 -0.0124156 +-0.0558825 0.0465312 0.026676 +0.00712802 0.0975509 -0.0252935 +-0.00450103 0.0746726 0.0587526 +-0.0754962 0.141423 0.0471972 +-0.0514204 0.0548853 0.0209522 +-0.0107189 0.0642451 -0.0362023 +0.0428473 0.0944698 0.0251639 +0.0161732 0.12869 0.00706423 +0.0172673 0.128465 0.0103258 +-0.0624218 0.113827 0.0376933 +-0.0694289 0.039567 0.00968578 +-0.00956353 0.172645 -0.0227849 +-0.036529 0.0344176 0.0112583 +0.00747563 0.0378784 -0.00876072 +-0.0105064 0.0884021 0.0567868 +-0.0306153 0.0495713 -0.0203608 +-0.0832173 0.13898 0.000315163 +-0.00610064 0.0339097 -0.0209348 +-0.0081869 0.0386049 0.00598379 +0.0213573 0.057915 -0.0266602 +0.0391712 0.0402919 0.0231925 +-0.0346283 0.0533938 -0.0102529 +-0.00324688 0.0367886 -0.0155194 +-0.0734226 0.0711647 -0.00664488 +-0.0628413 0.144409 -0.0076345 +-0.0258745 0.104437 -0.023108 +-0.0100477 0.178214 -0.0295899 +-0.0839857 0.132609 0.0495198 +-0.0498484 0.121182 -0.0121 +0.0108333 0.130856 0.0150885 +-0.0104958 0.0939039 0.0555039 +-0.0863431 0.112514 0.0302243 +0.0475429 0.0429463 0.00623912 +-0.0334893 0.050539 0.0382432 +-0.0209099 0.158178 -0.00579641 +0.011514 0.10312 0.0464311 +0.0350456 0.0627954 -0.0138277 +-0.0161876 0.171234 -0.0230543 +-0.0268555 0.0987274 -0.0239779 +0.0118541 0.0404814 0.0449158 +-0.0104973 0.0856567 0.0572952 +0.0271955 0.0520724 0.0391174 +0.00248489 0.105788 0.0426651 +-0.0037871 0.0812341 -0.0371832 +-0.0231675 0.184436 -0.0160624 +-0.0612844 0.044277 0.027687 +0.0239731 0.061977 -0.0246362 +-0.00946933 0.0932363 -0.0348935 +-0.0178949 0.0971863 0.0483787 +-0.00196639 0.0392296 -0.0118812 +-0.0067485 0.0755804 -0.0372256 +-0.00967937 0.0555867 -0.0337759 +0.000980617 0.120181 -0.0134191 +-0.0806495 0.10968 0.039129 +0.0358807 0.0812282 -0.0166923 +0.0146499 0.0699433 0.0528108 +-0.034478 0.0590226 0.0391844 +0.0203856 0.0348183 -0.00149748 +0.0142674 0.0709686 -0.0310685 +-0.0334971 0.119329 0.0299275 +-0.0341948 0.0435484 0.0464376 +-0.00450247 0.056202 0.0539356 +-0.0721189 0.15515 0.0282101 +-0.000346509 0.12561 -0.00723663 +-0.0756644 0.0774182 -0.00947264 +0.014908 0.106309 -0.0185911 +0.0267515 0.102116 0.0406018 +-0.0626019 0.174089 -0.0546038 +-0.0574874 0.0805202 0.0440851 +-0.0609158 0.169795 -0.0608698 +0.0438296 0.0973504 0.015162 +-0.072512 0.104082 0.0376881 +0.0359801 0.0821479 0.0380155 +-0.0573808 0.129734 0.0381066 +-0.0236825 0.0566574 -0.0305632 +-0.0351787 0.0336265 -0.0226404 +-0.0257826 0.0783385 -0.0372231 +-0.0733446 0.159645 -0.0339252 +-0.024717 0.169741 -0.0113487 +-0.0597904 0.0825229 -0.0201763 +-0.0638365 0.0996097 -0.0175199 +-0.0897172 0.118919 0.0457459 +0.00851027 0.105753 0.0425683 +-0.0857293 0.121702 0.0488414 +-0.00654714 0.043 0.0484741 +-0.0524991 0.109798 0.0378325 +0.0089719 0.130372 0.00300057 +-0.0912936 0.114724 0.0218532 +-0.0758153 0.155373 0.0254598 +0.0443256 0.0931523 0.0201621 +-0.00159763 0.0391157 -0.0252097 +0.0358716 0.112393 0.0201061 +-0.0582724 0.0345955 0.0435663 +0.0444341 0.0861163 0.024155 +-0.0798668 0.12036 0.0500614 +-0.0486801 0.12235 -0.0113455 +0.044671 0.0931702 0.0171607 +-0.0867731 0.0820034 0.0144903 +-0.0444986 0.0465011 0.0409291 +-0.0132439 0.178631 -0.0284206 +-0.0014976 0.0856652 0.0573264 +-0.0555627 0.0351736 0.0453577 +-0.0757755 0.0948358 -0.0134771 +0.0116939 0.0459283 0.0447695 +-0.0334941 0.0690232 0.0409338 +-0.0717098 0.161007 -0.0419418 +-0.0620707 0.163126 -0.0385937 +0.0188526 0.103753 -0.0198618 +-0.0699102 0.14965 -0.0409667 +-0.0405063 0.0902417 0.0426463 +-0.071716 0.148756 -0.0367532 +-0.0218007 0.0637891 0.0462553 +0.0567259 0.0536428 0.00417778 +-0.0893948 0.09291 0.012442 +-0.0603715 0.133894 0.0372893 +0.0314991 0.054058 -0.0137198 +0.0203015 0.126964 0.0128708 +-0.0845068 0.120355 0.0490624 +-0.0624258 0.0342984 0.0291094 +-0.0395093 0.0930879 0.0428865 +-0.0277909 0.0380629 0.00793761 +0.0321502 0.106752 -0.0110706 +0.0298444 0.106115 0.0363002 +-0.054857 0.0970227 -0.0215362 +-0.0397671 0.127634 -0.000654541 +-0.0249592 0.0767123 0.050372 +-0.0265277 0.10717 0.0404632 +-0.0283702 0.0535742 -0.0233936 +0.00450189 0.050474 0.0524519 +0.00174762 0.0944417 -0.0320379 +-0.0810711 0.076096 -0.000474637 +0.0169426 0.11422 -0.015094 +-0.0380634 0.127686 0.00145512 +-0.0320932 0.0877303 -0.0254981 +-0.0569735 0.056267 0.00463231 +-0.0692551 0.175557 -0.0461164 +-0.0461819 0.130936 0.0220239 +0.0424151 0.101486 0.0141591 +-0.0816004 0.110405 0.0418977 +-0.0486814 0.0634873 -0.0123857 +-0.0354984 0.0491504 0.038916 +0.0232288 0.125257 0.0153837 +0.0251982 0.123641 0.0075622 +-0.0357278 0.07254 -0.0181295 +0.0451439 0.0802684 0.0230283 +-0.00649644 0.0605343 0.0557379 +-0.0697973 0.159564 -0.0489352 +-0.037469 0.120514 -0.011464 +-0.0869577 0.133848 0.0453706 +0.0185257 0.0352322 0.0362088 +-0.0206549 0.0768238 0.0545752 +0.0458945 0.0764062 0.00420006 +-0.0137194 0.091107 -0.0367438 +-0.0375014 0.106979 0.038117 +-0.0446156 0.0437685 -0.0132939 +-0.064545 0.156137 -0.0442784 +0.0275233 0.0621538 -0.0218174 +-0.0642285 0.0429095 -0.00424321 +-0.00460043 0.0434181 -0.0258683 +-0.0778454 0.158312 -0.0179205 +0.00252706 0.0800582 0.0567791 +0.0174798 0.0919971 -0.0254067 +-0.08982 0.133788 0.032216 +0.0343452 0.114918 0.0052408 +-0.0630651 0.167844 -0.0445874 +0.0164152 0.127597 0.00146207 +-0.0755176 0.120378 0.0530566 +-0.00615627 0.0994928 -0.025355 +-0.0501125 0.157587 -0.00554245 +-0.0332242 0.152554 -0.00262082 +0.0104732 0.0962984 0.0498872 +-0.0184975 0.111326 0.0402128 +-0.0228147 0.0826618 -0.0384205 +0.025553 0.0822419 0.0475803 +-0.0841632 0.11158 0.00227497 +-0.0198477 0.126879 0.00378288 +-0.069852 0.0951674 -0.0161643 +-0.0306901 0.0678681 -0.026462 +0.0155988 0.0699697 0.0524229 +-0.0167333 0.0642714 -0.0369951 +-0.0167796 0.121583 -0.00869919 +-0.0594953 0.0747194 0.0418121 +-0.0630515 0.152177 -0.00858675 +-0.0111714 0.129564 0.00700207 +-0.0890821 0.101017 0.0143926 +-0.0145147 0.116898 0.0378441 +-0.0462973 0.0368721 -0.0182757 +0.0251418 0.056415 0.0432482 +-0.0114906 0.0532044 0.051601 +-0.0514985 0.0931716 0.0440238 +-0.0536498 0.152894 0.0173581 +-0.0226294 0.157855 -0.00422736 +-0.0723402 0.0380689 0.00697334 +-0.0100211 0.0383173 0.0131334 +-0.0469913 0.0345734 0.0373898 +0.0117235 0.127254 -0.00315056 +0.0163555 0.0343012 4.3653e-05 +-0.000810177 0.084021 -0.0366442 +-0.0417008 0.153622 0.00625938 +-0.0695833 0.156717 -0.0509483 +-0.00967078 0.0541668 -0.0336446 +-0.0862734 0.13657 0.044609 +0.0363518 0.0562159 0.0330449 +-0.0528028 0.0666303 0.0365007 +0.0263615 0.0352587 0.00303932 +0.00111992 0.10872 -0.0203906 +0.00958242 0.0350342 0.0036093 +-0.0639107 0.108163 -0.0148371 +-0.00462988 0.0451748 -0.0282624 +0.00356053 0.130245 0.0239041 +-0.0428482 0.128274 0.00047704 +-0.0896015 0.136498 0.0242003 +-0.011119 0.163582 -0.018751 +-0.0521911 0.0531856 0.0256383 +0.02777 0.0808734 0.0454779 +0.0197898 0.0754906 0.0515075 +-0.0405912 0.0404909 -0.0262976 +-0.0184208 0.185917 -0.0222223 +-0.0738815 0.117926 -0.00764413 +0.0124741 0.0346639 0.0372734 +-0.057552 0.0336321 0.0166122 +0.0220421 0.0848959 0.0495666 +0.0184956 0.0962193 0.0472822 +-0.0577255 0.0578321 0.0166151 +0.00647696 0.11413 0.0402504 +-0.073854 0.100736 -0.0128364 +-0.0528758 0.0985097 -0.0219976 +0.0185485 0.111232 -0.0158588 +0.0257216 0.0672521 0.0441644 +-0.000523566 0.0428273 0.0465064 +-0.0354915 0.050532 0.0385401 +-0.0294972 0.0602632 0.0372614 +0.00410653 0.111609 -0.0202712 +0.0583904 0.0706508 0.00920486 +-0.0644959 0.084745 0.0443622 +-0.0182219 0.0954777 -0.0312615 +0.0163111 0.0608546 -0.0282401 +-0.0725001 0.120391 0.0535845 +-0.0164977 0.0828905 0.0574138 +0.0130474 0.0490028 0.046739 +-0.072956 0.173805 -0.0388399 +-0.0264766 0.0576077 -0.0284232 +-0.0644961 0.0602892 0.0183972 +0.0357477 0.074144 -0.0137952 +-0.0655596 0.171143 -0.0433207 +-0.0784904 0.133065 0.0521095 +-0.0651287 0.156206 0.0175513 +-0.0205565 0.183109 -0.0139659 +-0.0680156 0.156066 0.0121787 +0.0233417 0.0549864 0.0441504 +-0.0745084 0.134461 0.0510337 +-0.0489659 0.12587 -0.00699728 +-0.0422261 0.0339521 -0.0076663 +0.00337017 0.091416 -0.0329064 +0.040054 0.0998936 -0.00479776 +-0.0939204 0.128289 0.0212475 +-0.0301543 0.157156 -0.0110394 +-0.0456539 0.0606919 -0.0125779 +-0.0534986 0.0833862 0.0450488 +-0.047648 0.0614917 0.0367154 +-0.0486267 0.13356 0.00299082 +-0.0895466 0.0969995 0.0164128 +-0.0339552 0.0695264 -0.0185169 +-0.0176031 0.0711548 0.0545194 +0.0454033 0.0457238 -0.00184235 +-0.0546836 0.0478194 0.0276676 +-0.0875304 0.0861027 0.015468 +0.00919687 0.124582 -0.00824181 +0.0404579 0.0971405 0.0281735 +0.0219677 0.0346711 0.00269802 +-0.0114833 0.0618754 0.0549615 +-0.0209254 0.127401 0.0135903 +-0.0681737 0.074979 0.0383298 +-0.0357386 0.176065 -0.00515676 +0.0340797 0.115381 0.00660331 +-0.0207606 0.0670735 -0.0371287 +-0.075369 0.155134 0.0270903 +0.000773445 0.126081 0.0315854 +0.0414985 0.058326 0.0311197 +-0.03873 0.0340634 -0.0163036 +-0.0929281 0.121393 0.0102886 +-0.0680681 0.061235 0.0168081 +-0.0756991 0.0688679 0.00254149 +-0.0138611 0.0386244 0.0283378 +-0.0806333 0.120347 0.049427 +-0.0534714 0.115278 0.0343029 +-0.0365049 0.169731 0.000981263 +-0.0624922 0.100117 0.0423224 +0.00907886 0.126317 -0.00613291 +-0.0935493 0.125561 0.0262639 +0.022475 0.0933993 0.047467 +-0.015827 0.0921385 -0.0358122 +-0.0210449 0.0384562 -0.0168371 +-0.0207268 0.0612423 -0.0346723 +-0.0134967 0.109686 -0.0201653 +0.0456137 0.0708816 0.00289794 +-0.0090863 0.16966 -0.0247514 +-0.0889386 0.0888873 0.0194501 +-0.0532128 0.133944 -0.00360453 +0.0195053 0.0351963 0.0310168 +-0.0255119 0.104394 0.0424048 +-0.0174974 0.103031 0.0436129 +-0.0299173 0.0383162 -0.0299848 +0.00451386 0.0856474 0.057126 +0.0147725 0.0939169 -0.0254338 +0.0242867 0.0719771 -0.0256393 +0.0172719 0.0348529 0.0254373 +0.0558147 0.064873 0.0261542 +-0.0364911 0.0662596 0.041455 +-0.0758603 0.151341 -0.0198831 +-0.0616679 0.0643653 -0.00651734 +0.0383551 0.0603737 0.0324667 +-0.0477542 0.0782681 -0.0190718 +-0.0550269 0.0560444 -0.00440953 +-0.0395059 0.0972892 0.042147 +-0.0777926 0.167262 -0.0295303 +0.0604641 0.0623144 0.017179 +-0.0777137 0.177848 -0.0500546 +-0.0521757 0.0461175 0.0166821 +-0.0754874 0.130275 0.0528009 +0.0116887 0.0343979 -0.00472037 +-0.0617898 0.16156 -0.0335933 +0.0442649 0.0973538 0.00716867 +-0.0616258 0.0641254 0.029779 +0.00550935 0.0688576 0.0555484 +-0.053845 0.0955972 -0.0217935 +0.00741716 0.0375454 -0.0236134 +-0.0596132 0.113903 0.0363038 +-0.0508811 0.108424 -0.0190099 +-0.0437584 0.079737 -0.0197567 +-0.0733029 0.15632 0.000130521 +-0.003234 0.0960652 -0.0317479 +-0.0575581 0.0507849 0.00163524 +0.00435827 0.129372 -0.0013469 +-0.025212 0.123605 0.0223303 +-0.0669175 0.115159 -0.00990572 +-0.0722654 0.153589 0.032663 +-0.0147591 0.033582 -0.024214 +-0.00115893 0.11911 -0.0142672 +0.019441 0.0384709 -0.0146972 +-0.0772499 0.172214 -0.0459981 +-0.069531 0.14702 0.0417131 +-0.0343373 0.0443897 -0.0277936 +-0.0705699 0.152776 -0.0468148 +-0.0918951 0.117319 0.00831437 +0.0103421 0.0567446 -0.0299462 +-0.0336919 0.119642 -0.0105178 +-0.0629712 0.145905 -0.0115915 +0.00646739 0.0342464 -2.28584e-05 +0.00713618 0.103008 -0.0210892 +-0.018026 0.0384381 0.0276504 +0.0433583 0.0505545 -0.0063311 +-0.0882504 0.0900881 0.0054683 +0.00248872 0.118285 0.0387448 +-0.0227774 0.0713561 -0.0378898 +-0.0154972 0.122303 0.0324651 +-0.0322294 0.0708154 -0.0244722 +-0.025189 0.174162 -0.0196112 +-0.0871031 0.0846537 0.0064784 +0.00836869 0.0928852 -0.0303774 +-0.0424793 0.0958739 0.0423242 +-0.0640607 0.152536 -0.00179872 +0.00949301 0.118213 -0.015379 +0.0461867 0.0806341 0.00618373 +-0.0408599 0.102809 -0.0209257 +-0.0431187 0.159159 -0.0099383 +-0.0154785 0.0828416 0.0569929 +-0.0775215 0.161144 -0.0189221 +0.0358655 0.112954 0.0143927 +-0.0759551 0.131077 -0.00722143 +0.0465282 0.0726943 0.00507292 +-0.0784776 0.134439 0.0514602 +-0.0718916 0.0995338 0.0398851 +0.0174027 0.127944 0.018931 +-0.0494895 0.143125 0.00338457 +0.0333197 0.0357288 0.0133458 +0.0132595 0.0751478 -0.0304595 +-0.0324893 0.100164 0.0432113 +0.0343769 0.112004 0.0266888 +-0.0108703 0.180136 -0.0264173 +-0.0872312 0.1132 0.0437313 +0.0353616 0.106017 0.0302164 +-0.0282335 0.0382933 0.0310718 +-0.0646654 0.132541 0.0415985 +-0.0416682 0.0336125 -0.0201879 +-0.0690362 0.134069 0.0476421 +0.023852 0.057789 0.0449027 +0.0440963 0.0735854 0.0249308 +-0.0624573 0.163073 -0.0525854 +-0.0341025 0.169759 -0.00204136 +0.0589446 0.0649523 0.0051412 +-0.0602752 0.0336649 0.0124615 +-0.0628859 0.1495 -0.0200671 +-0.0722644 0.0671374 -0.000515551 +0.0135851 0.0658847 0.0529797 +-0.00198691 0.0368792 0.0142478 +0.0367682 0.0700097 -0.0138015 +-0.0296169 0.0408892 -0.0298249 +-0.0376612 0.0606745 -0.0122764 +0.00800811 0.0345328 -0.00370443 +0.0105539 0.104067 -0.0202515 +-0.0488192 0.0586801 0.0351334 +-0.0557857 0.0840569 -0.0214422 +0.0308153 0.0525508 -0.0137522 +0.0423969 0.0451283 0.0286278 +-0.0332147 0.036763 0.0499127 +-0.0736682 0.0730938 -0.00832442 +-0.0175484 0.124749 0.0265509 +-0.063425 0.163107 -0.0254606 +-0.0727351 0.0832969 0.03983 +0.0319929 0.088146 -0.0193446 +-0.0444371 0.122416 -0.011439 +-0.0858505 0.116285 0.047652 +-0.00444148 0.0916785 -0.0352643 +0.022957 0.0981907 0.0456622 +-0.053144 0.0595659 0.0253997 +-0.0788525 0.107465 0.0324362 +-0.0457478 0.130844 0.0207105 +-0.0684896 0.172346 -0.0400602 +-0.034733 0.0498868 -0.0123113 +0.0415062 0.0499285 0.0325086 +-0.0665679 0.0404538 -0.00528616 +-0.00650346 0.112991 -0.0197156 +-0.0448474 0.0999398 -0.0215303 +-0.0816586 0.137613 -0.00180043 +-0.0585618 0.124728 -0.00774237 +-0.0466281 0.0592297 -0.0120314 +-0.0670784 0.0653289 0.0275882 +-0.0835882 0.125784 0.0507488 +-0.0164643 0.0842755 0.0572298 +-0.0904705 0.135055 0.0132171 +-0.022546 0.116788 0.03495 +-0.0334891 0.091814 0.044517 +-0.0719917 0.151909 0.0358108 +-0.0151953 0.168341 -0.0151527 +-0.0590718 0.156479 0.0080978 +-0.0154402 0.120098 -0.0111735 +-0.036496 0.17271 -0.000384966 +0.0392898 0.0993144 0.028831 +0.024983 0.0795787 0.048494 +0.0483695 0.0734096 0.0143189 +0.0196959 0.0394038 0.04222 +-0.00886334 0.103392 -0.0235214 +-0.0118005 0.0841384 -0.0387163 +0.0252205 0.0888413 -0.0232794 +0.0298168 0.052105 0.0376191 +-0.0776927 0.169444 -0.0419634 +-0.0314915 0.057461 0.0373842 +-0.0504539 0.0558071 0.0326022 +0.0138422 0.0901622 -0.0294996 +-0.0510104 0.149266 0.0138316 +-0.0341485 0.0337694 0.0159272 +-0.085608 0.144617 0.0380805 +-0.0475132 0.0875996 0.0450977 +-0.091127 0.143391 0.0261688 +-0.0781968 0.0778917 0.0320122 +0.0284509 0.104793 -0.0149826 +-0.0223025 0.0957816 -0.0275832 +-0.0179573 0.123303 -0.00653742 +0.0369901 0.111103 0.00416682 +-0.0643667 0.159406 -0.0155654 +-0.0701684 0.165994 -0.0191552 +-0.0863906 0.0819518 0.00951177 +-0.0224965 0.100254 0.0443771 +-0.0757302 0.147214 -0.00986768 +0.0357939 0.0699287 -0.0148404 +-0.0376499 0.0577418 -0.0112619 +0.019292 0.0988007 -0.0225555 +-0.00992376 0.097544 0.0521376 +-0.0493712 0.0572598 0.0342952 +0.0255474 0.054922 0.0420386 +-0.0494259 0.144129 0.00171058 +-0.0624989 0.104282 0.0409609 +-0.0430319 0.0336432 -0.0167728 +0.0179185 0.121996 -0.0074786 +-0.0190623 0.127503 0.00554509 +-0.0474205 0.145822 -0.000777163 +0.0526083 0.0475984 0.0212218 +0.00022388 0.0797271 -0.0356555 +-0.0301525 0.168207 -0.0169318 +-0.00151732 0.0576213 0.0542293 +-0.00248496 0.0548872 0.0545581 +-0.0502022 0.12654 -0.00566411 +-0.0529063 0.0676787 0.0373317 +0.00249985 0.107203 0.0424791 +0.0029144 0.125773 -0.00745627 +0.00334453 0.0496343 -0.0297987 +0.00449641 0.11692 0.039168 +0.0399282 0.041091 0.0244564 +0.0178192 0.126124 0.0248053 +-0.0799402 0.132433 -0.00455304 +-0.0649027 0.179945 -0.0575726 +0.0404255 0.0914089 -0.00978781 +-0.065797 0.132562 0.0435297 +-0.0372368 0.172627 -0.0118528 +-0.0554974 0.10569 0.0407246 +-0.076892 0.165957 -0.0247772 +-0.0587093 0.0344925 0.0418625 +0.00823978 0.0768076 -0.0338586 +-0.0626545 0.150596 -0.0225786 +-0.0384668 0.0931237 0.0434147 +0.0141618 0.0576523 0.0502255 +-0.0683767 0.176522 -0.0580176 +-0.0129882 0.119781 -0.0128781 +0.00848559 0.0950467 0.0516302 +-0.0429797 0.127137 -0.00436425 +-0.0497252 0.141657 0.00538484 +-0.0179056 0.127636 0.0191062 +-0.0520277 0.0563658 0.0215194 +-0.02384 0.0968692 -0.0247025 +-0.0561697 0.0684762 0.0377129 +0.0120601 0.0343849 -0.00838478 +0.0299331 0.0362092 0.00288494 +-0.0763652 0.1528 -0.0108857 +-0.0736067 0.154075 -0.0289008 +0.00533532 0.0538992 -0.0301758 +-0.0599208 0.0394628 0.0453423 +-0.0184879 0.0856371 0.0571362 +-0.0208094 0.0376226 -0.0178912 +-0.0137231 0.183161 -0.0241068 +-0.0648137 0.0346657 0.0352478 +-0.0271872 0.0379033 0.0118238 +0.0264669 0.0477487 0.0380114 +-0.0723733 0.0352474 0.00704331 +-0.0322701 0.0835031 -0.0295487 +0.0272688 0.122366 0.00977001 +-0.0603093 0.0652594 0.0325934 +-0.00180254 0.0385071 0.00372255 +-0.0522762 0.123638 -0.00859751 +-0.0776201 0.171284 -0.03689 +-0.0802965 0.0872747 0.0345612 +-0.0889001 0.136394 0.00820864 +0.000412609 0.0393166 0.0342543 +-0.0642567 0.0344972 0.033776 +-0.0921303 0.11612 0.0363104 +-0.0679654 0.134068 -0.0084026 +-0.0839818 0.115583 0.0478751 +-0.00536465 0.129031 -0.000823415 +0.00514522 0.103044 -0.0216473 +-0.0496209 0.0517545 -0.00857532 +-0.0757023 0.177226 -0.0456228 +-0.0298766 0.05514 -0.0203901 +-0.0861039 0.0846923 0.0224682 +-0.0238144 0.0879301 0.05313 +-0.0611505 0.153585 0.0321143 +-0.0917527 0.113836 0.0170127 +-0.0374964 0.0591338 0.0402834 +-0.0187977 0.0799028 -0.0389405 +-0.0680553 0.17056 -0.0341587 +-0.0658521 0.0361993 0.0388506 +0.0111435 0.100252 -0.0225401 +-0.0425873 0.125894 -0.0070983 +-0.0265027 0.0498541 0.0461184 +0.00111147 0.110147 -0.0201294 +-0.00249391 0.119678 0.0379989 +-0.0117585 0.0742488 -0.0381827 +-0.0586841 0.0466878 -0.00234651 +0.0295244 0.0750328 -0.0218147 +-0.0218606 0.101624 -0.0238704 +0.0287102 0.0942447 0.0434182 +-0.0709345 0.0627948 0.0166551 +-0.0225064 0.10717 0.041634 +-0.0335027 0.074683 0.04142 +-0.092242 0.128315 0.0292604 +-0.0374976 0.0888821 0.0433743 +0.0303768 0.0578247 0.0402716 +-0.00891857 0.0338467 -0.0251248 +-0.0533378 0.162724 0.0010506 +-0.0869041 0.141929 0.0394374 +-0.047972 0.135544 0.0173874 +0.0485157 0.0597129 0.0310438 +-0.00667005 0.0904165 -0.0359686 +-0.0759966 0.0994807 0.0369297 +-0.0625222 0.149113 -0.00558111 +-0.0718118 0.14996 0.0389054 +-0.0844416 0.147376 0.00515339 +-0.0165344 0.0392124 0.0380479 +-0.079893 0.0949635 -0.0095262 +0.0236407 0.0347514 0.0177381 +-0.0196654 0.0683158 0.0524244 +0.0245994 0.0981921 0.0445203 +-0.0849795 0.0952966 -0.00257745 +-0.0528207 0.121242 0.0358805 +-0.0236049 0.0394052 -0.0289635 +-0.0332166 0.165305 -0.0043102 +-0.0251865 0.160795 -0.0139572 +-0.0865509 0.152927 0.0144746 +-0.0693964 0.157876 -0.00437702 +-0.0628145 0.169399 -0.0485883 +-0.0643644 0.153473 -0.0380226 +-0.081904 0.115723 0.0482136 +0.0101277 0.0911581 -0.0305812 +-0.0405043 0.0944618 0.0422679 +0.021919 0.118008 0.0336347 +-0.0203338 0.123782 -0.00500918 +0.0111252 0.108699 -0.019265 +-0.0574976 0.0776487 0.0433498 +-0.0354848 0.0987251 0.0428224 +-0.0651932 0.141087 0.0409428 +-0.0240513 0.0386342 -0.0120079 +0.039324 0.106993 0.0191699 +-0.0754947 0.142836 0.0460912 +-0.0122699 0.0338184 -0.0220638 +-0.0246982 0.0551057 0.0409028 +-0.0578691 0.105465 -0.0183362 +-0.0264983 0.10435 0.041876 +-0.07915 0.166638 -0.0349654 +-0.0578202 0.140285 -0.0045343 +0.0220783 0.0686046 0.0476717 +-0.0770892 0.107143 -0.00760422 +-0.0902136 0.13513 0.0232187 +-0.0723372 0.156305 0.0208189 +-0.0650055 0.135525 -0.0079735 +-0.0549293 0.154823 0.0139773 +0.0292317 0.0773621 -0.0219141 +-0.0817276 0.0964548 -0.00656413 +-0.018203 0.175668 -0.0239316 +-0.0553377 0.0457536 -0.00639551 +-0.0161975 0.0432999 0.0517769 +0.0304284 0.0383851 -0.001443 +-0.0345483 0.152531 -0.00560476 +-0.0629676 0.160574 -0.0208244 +-0.0935783 0.124186 0.0262856 +-0.0311645 0.0580869 -0.017406 +-0.0317989 0.0382037 0.00155838 +0.0576172 0.0686777 0.0217698 +-0.00505811 0.0339518 -0.0207718 +-0.0696447 0.166615 -0.0510113 +-0.0629867 0.155807 0.0241223 +-0.0340215 0.0794269 -0.0255119 +-0.0867747 0.0981404 0.0024092 +-0.0880604 0.13085 0.0022566 +0.0184887 0.0948214 0.0475148 +-0.021497 0.0988475 0.0444941 +-0.0416678 0.0592681 -0.0121392 +-0.0567258 0.0480405 0.0316684 +-0.0423133 0.129133 0.00872164 +-0.000508444 0.105851 0.0435843 +-0.0592465 0.046889 0.0316721 +0.0461219 0.0806353 0.0161697 +-0.0281528 0.0348412 0.0481365 +-0.0702797 0.180333 -0.0522624 +-0.0478122 0.134031 0.00640478 +-0.0077489 0.0713239 -0.0366154 +-0.0122439 0.168894 -0.023749 +0.0212552 0.0777078 -0.0266851 +-0.0917522 0.132325 0.0122241 +-0.0361034 0.165201 -0.01444 +-0.052501 0.0805516 0.0443114 +-0.0654153 0.0336345 0.00606909 +-0.0623235 0.139333 -0.00679766 +-0.0616576 0.170967 -0.0555865 +0.00174509 0.0392548 -0.00741822 +-0.0260001 0.0677977 0.0418131 +-0.0684331 0.0336931 0.00540027 +-0.0448348 0.0942101 -0.0220316 +-0.0731091 0.158237 -0.0329184 +0.0078778 0.0989406 -0.0227671 +0.0314417 0.115539 0.0270138 +-0.00906667 0.129748 0.004892 +0.00649868 0.108551 0.0413323 +-0.0382124 0.150071 -0.00262103 +0.0332799 0.0564373 0.0374441 +-0.00349826 0.0647878 0.0565544 +-0.0487816 0.084091 -0.021606 +-0.0568391 0.118972 -0.0116757 +-0.0644875 0.156696 -0.0456027 +-0.0411616 0.152146 0.00524032 +-0.0636742 0.142603 -0.0078783 +-0.0711318 0.0777267 0.0384114 +0.00321355 0.0796602 -0.0346071 +0.00447281 0.110003 0.0420134 +-0.0174998 0.0772311 0.0559767 +-0.0263139 0.182659 -0.010558 +-0.0322455 0.15809 0.00238998 +0.045843 0.0760483 0.0203743 +-0.0548028 0.0464121 0.0246755 +-0.0376206 0.0376543 -0.029358 +-0.0523414 0.0402098 0.0465679 +-0.0432186 0.121963 0.0262727 +-0.0321664 0.125608 0.018357 +-0.0857232 0.0792432 0.0155047 +-0.0782439 0.151233 0.0351897 +-0.0187146 0.058392 -0.0343021 +0.0452185 0.0847535 0.00320441 +-0.0640415 0.167322 -0.0369994 +-0.0823499 0.132665 0.0507367 +-0.0301219 0.0493909 -0.0214267 +-0.0843946 0.0818335 0.0225112 +-0.0246526 0.0386383 0.0332956 +0.0563147 0.0580894 0.0250386 +0.00021169 0.0389894 0.029096 +-0.00241379 0.126666 -0.00637642 +-0.0301429 0.0551656 -0.0193914 +0.0331811 0.0417541 0.0279348 +-0.0861938 0.104994 0.0213645 +-0.0824118 0.0788951 -0.000494108 +-0.0743937 0.157452 -0.00470821 +0.0187225 0.127515 0.0179893 +-0.0829047 0.0763015 0.0175246 +-0.0650238 0.0641454 0.0272956 +0.0355567 0.0878311 -0.0169845 +-0.0887171 0.117597 0.0462102 +-0.0760085 0.141318 -0.005968 +-0.0127703 0.0756733 -0.0384193 +-0.0158456 0.122449 -0.00760827 +-0.0842393 0.107513 0.00238784 +-0.0674898 0.0986608 0.0416951 +-0.0554949 0.0427291 0.0458455 +-0.0201912 0.0383436 0.00560257 +-0.0372682 0.0344921 0.0377782 +-0.0357437 0.0380351 0.0467216 +-0.0450103 0.054631 0.0385549 +-0.0369768 0.047531 -0.0185543 +0.0520769 0.0581909 0.0294992 +-0.0329038 0.153455 -0.00604291 +-0.0725184 0.128806 0.0519752 +-0.0270556 0.0706113 0.0413767 +-0.0285061 0.116641 0.0323888 +-0.0144886 0.109993 0.0419529 +-0.0285168 0.0803552 -0.0356291 +0.00952067 0.0702149 0.0551678 +-0.0355616 0.151785 -0.00432824 +-0.0826529 0.0796856 0.0277856 +-0.0365963 0.127614 0.0137714 +-0.0657008 0.139678 0.041893 +-0.0758694 0.0777615 0.0343673 +-0.00737907 0.0367231 0.0491533 +-0.0704775 0.114632 0.0510417 +-0.059558 0.128315 0.0402204 +-0.0538405 0.0941624 -0.0218364 +-0.0274601 0.124651 0.00100866 +-0.0637125 0.0705931 -0.0131267 +-0.0644549 0.043254 0.0326925 +-0.0746657 0.154121 -0.0198989 +-0.0348879 0.043516 0.0457289 +-0.0234602 0.17569 -0.0129988 +-0.0720698 0.176015 -0.0442709 +-0.043544 0.157959 0.00535766 +-0.0407405 0.0739506 -0.0180651 +-0.0696125 0.150354 -0.0430103 +0.0418343 0.0943991 0.0271656 +-0.0932461 0.129666 0.0232459 +-0.0398464 0.0957237 -0.0225845 +-0.0764914 0.171559 -0.0359139 +0.0408836 0.0614281 -0.00367417 +-0.0356978 0.0346221 -0.0180732 +-0.0895729 0.151493 0.0191084 +0.0263253 0.122966 0.0165355 +0.0113407 0.0567362 -0.0298085 +-0.0736511 0.180693 -0.0540178 +-0.042544 0.16227 0.00511409 +-0.0522198 0.0374253 0.0467614 +-0.0777691 0.0689598 0.0151422 +0.0463347 0.0428813 0.020444 +0.0509435 0.0554131 0.029582 +0.0233146 0.125046 0.00829766 +0.00834665 0.0958673 -0.0275066 +-0.00680856 0.127356 -0.00506622 +-0.0554704 0.157309 0.00940753 +-0.0754721 0.103526 0.0362863 +0.044978 0.086159 0.0221711 +-0.0716236 0.170198 -0.0283222 +-0.0196387 0.0464931 -0.0280998 +0.0569791 0.0686933 0.0226042 +-0.0233118 0.182976 -0.0180572 +0.0290367 0.060539 0.0418753 +-0.0708458 0.0980019 -0.0152545 +-0.044501 0.0562098 0.0390177 +-0.00787685 0.105931 -0.0227718 +-0.0774743 0.140015 0.0480697 +0.0275361 0.10477 0.0382193 +0.00254476 0.127971 -0.00383507 +0.0235041 0.108407 0.0388101 +-0.055098 0.146723 0.029184 +-0.0257112 0.0634738 0.0402437 +0.0222133 0.103397 0.0428172 +0.0239484 0.0901184 -0.0234122 +-0.0265532 0.080945 0.0504296 +-0.0801014 0.0881671 -0.00858727 +-0.0467634 0.0560036 0.0374321 +0.0562967 0.0661688 0.0251012 +-0.0323569 0.124066 -0.00320487 +-0.00891511 0.126415 -0.00600997 +0.0343206 0.094597 -0.0141158 +-0.0876587 0.151372 0.0112162 +-0.0723621 0.114661 0.051285 +-0.033385 0.126374 0.00317306 +-0.0465636 0.146777 -0.00183655 +-0.0086601 0.174145 -0.0268323 +0.0224333 0.0422246 0.0409441 +-0.0723219 0.171178 -0.0314543 +-0.0633454 0.159973 -0.0185957 +-0.0741825 0.156237 0.0158024 +0.0283215 0.117455 0.0287048 +-0.0518625 0.050332 0.0226347 +-0.0345112 0.112532 0.034973 +0.0102504 0.0766955 -0.0323547 +-0.0628937 0.146875 -0.0135938 +-0.0913593 0.126907 0.0414668 +-0.0755221 0.11896 0.0528247 +-0.0186351 0.0933648 0.0534492 +-0.00679579 0.0826768 -0.0377354 +0.00822704 0.0782053 -0.033734 +-0.0942744 0.126919 0.0202522 +-0.0462848 0.131856 0.0204922 +-0.05065 0.0706021 0.0388719 +-0.00522459 0.0384215 0.0122026 +-0.0524927 0.0987339 0.0429361 +-0.0388306 0.112851 -0.0174267 +-0.0268641 0.101582 -0.02361 +-0.0846396 0.153647 0.0136585 +0.0166715 0.0353808 -0.0156588 +-0.0553627 0.139574 0.0304759 +-0.0257886 0.0768981 -0.036857 +-0.0402218 0.0342366 0.0285657 +-0.045101 0.156152 -0.00816042 +-0.0348248 0.0473223 0.0413292 +0.0145592 0.0672414 0.0526521 +-0.0436275 0.0548777 -0.0111987 +-0.0248971 0.163359 -0.0156802 +-0.0449755 0.115277 -0.0159431 +-0.0492995 0.0345621 0.0403913 +-0.0257365 0.0348667 0.0503471 +-0.0754593 0.159053 -0.00907047 +-0.0632614 0.0601538 0.00426714 +-0.0265686 0.0382637 0.0296453 +-0.0355718 0.165308 -0.0024565 +-0.0727498 0.180616 -0.0549771 +-0.0381364 0.171203 -0.0118442 +0.0153228 0.0362397 0.00366285 +-0.0383106 0.0336688 0.00433881 +-0.0125102 0.0897843 0.0566766 +-0.0484982 0.0890084 0.0450201 +-0.0889791 0.0915153 0.00944503 +-0.0511466 0.124736 -0.0077758 +-0.00758688 0.0376797 -0.0254717 +-0.0509981 0.147813 0.0138388 +-0.0147745 0.0382944 0.014 +-0.0305049 0.0617476 0.0379767 +-0.0109155 0.0356188 0.0494667 +-0.0703667 0.142544 -0.0104932 +-0.0424925 0.0902452 0.0426486 +0.0099296 0.113714 0.0390911 +0.0145599 0.088488 -0.0297413 +-0.00249512 0.122376 0.0359373 +-0.0216559 0.0972103 0.0449705 +-0.0717874 0.0850294 -0.0163139 +0.0281202 0.0348895 0.0148787 +-0.0582075 0.154657 0.0258383 +0.0103893 0.0434318 -0.0247637 +0.0283214 0.115107 0.0315696 +-0.0408808 0.115001 -0.0156637 +-0.0569818 0.0548922 0.00263009 +-0.0347008 0.0666358 -0.0153327 +-0.0518449 0.146252 0.0164181 +-0.0388328 0.0943088 -0.0230504 +-0.0315145 0.0788556 0.0411289 +0.0268942 0.0988154 -0.0185978 +-0.0875561 0.0968363 0.00343541 +0.0426825 0.0805137 0.0283126 +-0.0683872 0.0690317 0.0328821 +-0.0609319 0.0343399 0.0363539 +-0.0258016 0.0867079 -0.0364604 +-0.0891389 0.120288 0.0465529 +-0.062692 0.155999 0.0140721 +0.0223974 0.0473356 -0.0199928 +-0.0616833 0.0676348 -0.0109359 +-0.0752375 0.0864841 -0.0145142 +0.014283 0.0681091 -0.0306905 +-0.0603219 0.0470192 0.0356706 +-0.015495 0.104397 0.0428489 +-0.0698499 0.0994423 -0.0150141 +-0.0293842 0.08757 0.0444817 +-0.00548831 0.112771 0.0416249 +-0.0120723 0.0353434 0.0494553 +0.0118631 0.0894057 -0.0307263 +0.0362901 0.0769906 -0.0138255 +-0.0372663 0.033541 -0.0229762 +0.0110129 0.0846936 0.0546683 +-0.0563673 0.0575771 -0.00141956 +0.0162242 0.0835192 -0.0290783 +-0.0466776 0.13337 0.0173732 +0.0116668 0.0548951 0.0518589 +-0.0175019 0.0758159 0.0556202 +-0.0865692 0.133541 0.00131146 +-0.0366797 0.0636525 -0.0138021 +-0.074087 0.0734714 0.0331119 +-0.0762512 0.156264 -0.00677505 +-0.0414995 0.168206 0.00296291 +0.0023065 0.128418 0.0277808 +-0.0141822 0.0378114 0.0510973 +-0.0674332 0.127053 0.0499702 +-0.0482072 0.0335431 -0.012174 +-0.072499 0.117558 0.0529308 +-0.0281279 0.03862 -0.0128123 +-0.0616129 0.149191 -0.00221638 +0.0436181 0.0416961 0.0210317 +-0.0758657 0.097813 -0.01246 +-0.0818672 0.120683 -0.00433302 +0.00940058 0.0342529 -0.0182643 +-0.018805 0.0625267 0.0503254 +-0.053876 0.126919 0.0361236 +-0.0884983 0.0941957 0.00744581 +-0.0165005 0.120964 0.0336371 +0.0433486 0.0519969 -0.00665823 +-0.0624811 0.149792 0.0367836 +-0.0615025 0.16984 -0.0615386 +-0.0364388 0.0352264 0.0443258 +0.0340769 0.0556934 -0.0107486 +-0.00261634 0.0450445 -0.0274328 +-0.0328486 0.0986298 -0.0228073 +0.0198481 0.0795335 0.0516115 +-0.0599778 0.148254 0.0362061 +-0.00849422 0.0674811 0.0555845 +-0.0530196 0.144246 -0.000696127 +-0.0836424 0.0924862 -0.00555232 +-0.0691184 0.165207 -0.0519806 +-0.0305063 0.111166 0.0367005 +-0.0447319 0.125394 0.0226968 +-0.0165708 0.056922 0.0510974 +-0.0568794 0.0548721 0.000601057 +-0.0355126 0.10012 0.0421792 +-0.00149054 0.131258 0.0163007 +-0.0814469 0.0761204 0.000521161 +-0.0700369 0.0765697 0.0383694 +-0.0791449 0.166643 -0.0339646 +0.0151117 0.0434234 0.0444141 +-0.0568399 0.0344097 0.0371692 +-0.0180623 0.177182 -0.017491 +0.0492456 0.0728121 0.0176064 +-0.0178752 0.105871 -0.0225888 +0.00334696 0.0342028 0.0159318 +0.0153617 0.0344714 0.021761 +-0.0945397 0.121475 0.0202819 +-0.073516 0.18065 -0.0535934 +-0.0934071 0.117385 0.0163015 +-0.0631359 0.0699525 0.0366992 +-0.0252161 0.0550594 0.0400126 +-0.00605897 0.125119 0.0321155 +-0.0360017 0.17408 -0.0118959 +-0.00638198 0.124385 -0.00985914 +-0.0145975 0.0378025 -0.0168233 +0.00417447 0.127894 0.028461 +-0.0410286 0.0345047 0.0334549 +0.0292997 0.0538256 -0.0177694 +0.0372061 0.0980869 0.0328651 +-0.0745356 0.104026 0.0368301 +-0.00436707 0.0386778 0.0266309 +0.0189949 0.0449386 0.0430002 +0.00529011 0.0668325 -0.0327227 +0.00166319 0.130955 0.0203219 +-0.0905947 0.115833 0.0426569 +0.00338984 0.116722 -0.0177517 +0.0203176 0.126182 0.0214303 +-0.0598293 0.139488 -0.00569497 +0.0142784 0.11622 -0.015243 +0.0231289 0.0835821 0.0493611 +0.0515475 0.0540038 0.0286923 +-0.0317664 0.058161 -0.0143983 +-0.0397537 0.0782783 -0.0191449 +0.012627 0.12184 0.0342326 +-0.0823735 0.148711 0.0361489 +-0.012301 0.110982 -0.0195491 +-0.0883046 0.122998 0.0470686 +-0.0315077 0.113893 0.0345441 +-0.0888952 0.137894 0.0271916 +-0.0610259 0.126912 0.0416133 +-0.0475344 0.05323 0.0369443 +-0.00961348 0.0434416 -0.0262361 +-0.0541404 0.124102 0.0375109 +0.0509994 0.044648 0.0132154 +0.0303038 0.118886 0.0223059 +-0.0596345 0.0336285 0.0108415 +-0.0196267 0.0450293 -0.0277098 +-0.0247099 0.0381195 0.00851258 +-0.0774982 0.133088 0.0521596 +0.0276359 0.0629152 -0.0215123 +0.0535119 0.0717543 0.00602975 +-0.0334971 0.0831472 0.0419572 +-0.0596476 0.14187 -0.00422882 +-0.0924522 0.125595 0.0392516 +-0.068714 0.143769 -0.0144235 +-0.0468988 0.126761 -0.00595632 +-0.0303571 0.0537911 -0.0173707 +-0.0709316 0.147597 -0.0300096 +-0.0514754 0.115278 0.0338114 +0.0190263 0.120653 0.0329746 +-0.0340031 0.1089 -0.0192874 +-0.0335001 0.116617 0.0321346 +-0.0671562 0.0724925 0.0371747 +-0.0746759 0.152711 -0.0238933 +-0.0590669 0.120714 -0.00943474 +0.00548706 0.108567 0.0416722 +-0.0114996 0.101652 0.0440245 +-0.0649779 0.141437 -0.00794337 +0.0112608 0.130411 0.00668952 +0.0436616 0.0987354 0.0121603 +-0.0558948 0.101262 -0.0199275 +-0.0309036 0.0436875 0.0502489 +0.0142962 0.0652331 -0.0300484 +0.000574283 0.0347216 0.0149023 +-0.00623443 0.0389648 -0.00688285 +-0.0810472 0.147398 0.0390836 +-0.0491606 0.0375682 0.0458781 +-0.055978 0.0534457 0.00767233 +-0.0685375 0.17487 -0.0458569 +0.0289287 0.100617 -0.0165368 +-0.0709835 0.0353942 0.00988845 +0.0337836 0.0754424 0.0400679 +0.041497 0.0527902 0.0324777 +-0.0204109 0.178661 -0.0155986 +-0.0623894 0.149097 -0.0105741 +-0.0644192 0.16051 -0.0170316 +-0.0350535 0.0346922 0.0433273 +-0.0740398 0.145796 -0.011857 +0.0214237 0.0444841 -0.0187153 +-0.0570526 0.113331 -0.0158151 +0.0134717 0.127798 0.0260714 +0.0324011 0.0446474 -0.00561054 +0.00231866 0.0568936 -0.0320023 +-0.0273763 0.112504 -0.0170987 +-0.0224223 0.072452 0.0507888 +-0.0614531 0.154118 0.0305097 +-0.0222065 0.179998 -0.0209469 +0.00315207 0.102056 -0.0221009 +0.0413778 0.0561233 -0.00592276 +0.037882 0.105959 0.026802 +-0.0607248 0.0722644 -0.016058 +0.00061382 0.126415 -0.00611002 +0.0592992 0.0566775 0.0181738 +0.0474969 0.0638142 0.0292952 +-0.0321069 0.162239 -0.0144989 +-0.0520198 0.147215 -0.00210798 +-0.0819286 0.0748755 0.0145293 +-0.0333602 0.0339348 0.0195439 +-0.0555018 0.0987713 0.0432834 +-0.0630837 0.164691 -0.0325918 +-0.0473982 0.0343754 -0.0164682 +-0.0807821 0.0980376 0.0332837 +-0.0645109 0.0370591 -0.00764757 +-0.085403 0.141865 0.00516647 +0.0420715 0.0859357 0.0292923 +0.0391529 0.107674 0.00402907 +0.024552 0.110059 0.0374287 +-0.0631521 0.0360725 0.0429133 +-0.0619885 0.156033 0.0186659 +-0.024223 0.17569 -0.0123366 +-0.0138299 0.0392302 0.0367944 +-0.0306217 0.126038 0.0115365 +-0.0714938 0.120397 0.053531 +-0.0869305 0.151358 0.010227 +-0.0788893 0.125151 -0.00625598 +-0.0447778 0.0409599 -0.0173005 +-0.09234 0.131039 0.0252374 +0.0321511 0.0724311 -0.0187615 +-0.0735819 0.0777026 -0.0122023 +-0.0678037 0.166983 -0.024036 +-0.0897153 0.135171 0.0332079 +-0.0447805 0.0840976 -0.0212945 +0.0371007 0.10968 0.00116733 +0.0112368 0.0836448 -0.0310335 +-0.036484 0.0505609 0.038833 +-0.0118972 0.116803 -0.015741 +-0.0346708 0.0621866 -0.0131726 +-0.0397664 0.0812015 -0.0202928 +-0.069532 0.172114 -0.0375728 +0.00626682 0.131047 0.00486423 +-0.0590022 0.0579904 0.014414 +-0.00972298 0.0642282 -0.0359259 +-0.0269413 0.181454 -0.0140289 +0.033222 0.0842418 -0.0188996 +0.00639168 0.0433788 -0.024537 +0.00926262 0.129557 0.000393265 +-0.00751646 0.0732149 0.0579299 +-0.0513203 0.142869 0.00077197 +-0.0288553 0.0385536 -0.0110371 +0.0555265 0.0728462 0.0170262 +-0.085954 0.146023 0.00719275 +-0.0371011 0.0461641 -0.0234326 +0.0579592 0.0537863 0.0201793 +0.0104003 0.0418913 -0.0239147 +-0.0396188 0.0505923 -0.0110041 +0.0326207 0.0944486 -0.0159568 +-0.0170933 0.0554767 0.0502631 +-0.0891859 0.139294 0.0371595 +-0.0637097 0.166224 -0.0345967 +0.00422867 0.0824562 -0.0341922 +-0.0594261 0.151258 -0.000475846 +-0.0552814 0.0464664 0.0256754 +-0.0424851 0.0776249 0.0430145 +0.0184693 0.111176 0.038468 +-0.0294978 0.0574079 0.0367222 +-0.0435452 0.0405422 0.0435069 +-0.0600989 0.0598417 0.00157193 +0.0526979 0.0525681 0.0268245 +-0.0625031 0.0602955 0.00246046 +-0.0675133 0.108346 0.0377589 +-0.00349512 0.111424 0.0424267 +-0.00549779 0.110034 0.0429298 +0.0164758 0.0713296 0.0519403 +0.0458506 0.0876137 0.00718075 +0.0244747 0.0400424 -0.00510986 +0.00547063 0.131454 0.017409 +-0.0728779 0.117943 -0.00788041 +-0.0142717 0.17714 -0.027303 +-0.0257193 0.0617764 -0.0314442 +-0.050991 0.0504175 0.03464 +0.00152343 0.0759482 0.0573355 +-0.0304944 0.064586 0.038393 +0.016253 0.0794879 0.0534651 +-0.00764651 0.0496471 -0.0308946 +-0.077844 0.0743656 -0.00558198 +-0.0326464 0.0563525 -0.0113988 +-0.061813 0.175696 -0.0586065 +-0.0681691 0.0682156 0.031879 +-0.0493845 0.0657885 0.0368321 +-0.019309 0.0362824 -0.0277788 +-0.063712 0.167032 -0.0383216 +-0.0379003 0.123041 0.0266516 +-0.000679533 0.0554388 -0.0315999 +-0.0886752 0.135106 0.0413889 +0.011146 0.128332 0.0266558 +-0.0740639 0.178692 -0.0478641 +-0.0809318 0.142082 0.0447817 +-0.00975763 0.0742329 -0.0379217 +-0.0600964 0.0334795 0.00370066 +-0.0566436 0.0657735 0.0346839 +-0.0767139 0.070678 0.0244626 +-0.0810351 0.0787684 -0.0035164 +0.0405001 0.076619 0.0321646 +-0.0283979 0.155793 -0.00852382 +-0.0535904 0.0617699 -0.00886774 +-0.0149347 0.127911 0.00262222 +-0.0197362 0.181499 -0.0230211 +-0.0781409 0.0718256 0.0231698 +-0.0337588 0.121858 0.0267132 +-0.0741051 0.0686193 0.025039 +0.0417534 0.0788713 -0.00674491 +-0.0515024 0.0340065 0.0263967 +-0.0763933 0.111249 -0.00565203 +-0.0538034 0.0898608 -0.0222645 +-0.000575856 0.0980296 -0.0278345 +0.0581094 0.0704417 0.00814168 +-0.0891434 0.137902 0.0291936 +0.00340212 0.0390598 -0.024445 +-0.0620333 0.153738 -0.0275809 +-0.0177087 0.0584461 -0.0348025 +-0.0823897 0.104663 0.0290404 +-0.0194981 0.10024 0.044034 +0.0242883 0.0705502 -0.0254969 +-0.0899225 0.133822 0.0382154 +-0.0195055 0.108574 0.0413935 +-0.0446392 0.0548635 -0.0110876 +0.00035867 0.048192 -0.0299591 +0.0364284 0.0413843 -0.00274773 +0.0187875 0.0351105 0.0327558 +-0.0568852 0.111179 -0.0170834 +0.0118445 0.0806629 0.0540991 +-0.0687285 0.155709 0.0264626 +0.00655625 0.109588 0.0412446 +0.00917706 0.113608 -0.0184169 +-0.0613933 0.155777 0.0101812 +-0.0314952 0.0903684 0.0441958 +0.0124021 0.0448701 -0.0249804 +-0.0241038 0.0865955 0.0534593 +-0.0631641 0.149054 -0.0215452 +-0.0401934 0.0365351 0.0429119 +-0.0898981 0.135185 0.0362087 +-0.0526397 0.0618282 -0.00966488 +-0.0844214 0.0777776 0.012517 +0.0222568 0.0748707 -0.0265095 +-0.0150366 0.0384845 0.00106724 +0.0180702 0.0879847 -0.0272411 +-0.0142291 0.127243 0.024765 +0.0382486 0.104643 0.0273123 +-0.0748494 0.0964384 -0.0137204 +-0.0808743 0.136754 0.0491531 +-0.0568962 0.0970004 -0.0209687 +-0.0803034 0.072641 0.00422068 +-0.0584156 0.0459799 0.0422363 +-0.0579142 0.114001 -0.0151155 +-0.0561079 0.0571065 0.0121919 +0.00037651 0.0978532 -0.0276151 +-0.0336642 0.082217 -0.0255373 +0.0457702 0.0735931 0.00320764 +-0.056498 0.07472 0.0419593 +0.00305684 0.124987 -0.00863513 +-0.0272404 0.0877435 0.0480762 +-0.040496 0.0577326 0.0402811 +-0.0202415 0.0392282 0.0390567 +-0.020926 0.0334921 -0.0253378 +-0.0690953 0.0751628 0.0379926 +-0.0520047 0.0344961 0.0416004 +-0.0141843 0.128965 0.0174774 +0.0288353 0.0368345 0.0223773 +-0.0444076 0.0394861 -0.0222996 +-0.0838483 0.119157 -0.00284212 +-0.0034971 0.0732704 0.0586485 +-0.03681 0.0886191 -0.0239226 +-0.0669297 0.105269 -0.0144963 +-0.07603 0.0941366 0.0385416 +-0.0716625 0.145448 -0.0198949 +-0.0165056 0.0382425 0.0100681 +-0.0909349 0.113307 0.0123445 +-0.0192269 0.0381483 0.0222601 +0.026296 0.0862676 0.0469202 +-0.0118259 0.0386358 0.028745 +-0.0513331 0.0334323 -0.00718543 +-0.0685946 0.0353745 -0.00558788 +-0.0370306 0.151785 -0.00571407 +-0.0891386 0.129503 0.00423129 +-0.0447856 0.0348265 0.00740272 +0.040097 0.105566 0.00218117 +0.00862183 0.120558 -0.0139068 +-0.0679053 0.171131 -0.036968 +0.0164071 0.0345184 0.0219352 +-0.0501179 0.137029 0.00241503 +0.0125996 0.0459414 0.0443461 +-0.0654928 0.0818627 0.0433416 +-0.0215596 0.0891328 -0.036783 +-0.0685096 0.147001 0.0412847 +0.0400896 0.0702922 -0.00980716 +-0.0291528 0.0378835 0.0276599 +-0.0624944 0.145991 -0.00758108 +-0.029375 0.0621337 -0.0244169 +-0.0655919 0.151202 -0.0366034 +-0.064581 0.128354 0.0453237 +-0.0626195 0.153328 0.0013944 +-0.0863817 0.148632 0.0316852 +-0.0153553 0.112218 -0.0188504 +-0.0602045 0.0441634 0.0266895 +-0.0204995 0.111306 0.0398343 +-0.0454802 0.112265 -0.0167776 +0.0212764 0.0693138 -0.0277613 +-0.0458225 0.146281 0.00549558 +-0.065521 0.0335373 -0.00466605 +-0.00710114 0.0339482 -0.0211688 +0.0551094 0.0539301 0.0250409 +-0.0781434 0.0927222 0.0364655 +0.0291436 0.0707502 -0.0218013 +-0.091117 0.143373 0.0231646 +-0.0575628 0.0576989 0.003607 +-0.0745558 0.0684435 0.0233437 +0.000679346 0.0933957 -0.0329817 +0.0136703 0.0446634 0.0441067 +0.0425933 0.0791563 0.0282081 +-0.0098481 0.112657 -0.0193422 +-0.0678577 0.102354 -0.0152646 +-0.0245236 0.0838729 0.0539551 +-0.0522319 0.125489 0.0349878 +-0.0331359 0.168192 -0.0157544 +0.0437182 0.0944809 0.000197915 +-0.0271741 0.161328 -0.0145155 +-0.0635247 0.139599 0.0380296 +-0.0105236 0.0787711 0.0579243 +0.0221704 0.109999 -0.014573 +-0.0626188 0.166275 -0.0435849 +-0.0162218 0.186444 -0.0207352 +-0.00481374 0.128076 -0.00386981 +-0.0761439 0.154623 0.0283179 +-0.00628506 0.0952929 -0.0329709 +-0.0244623 0.0348843 0.0471798 +-0.0764469 0.175411 -0.0430646 +-0.0374817 0.0903202 0.0435434 +0.0448755 0.0917539 0.00218552 +-0.0464937 0.0411703 0.0442462 +0.00738566 0.0463583 -0.0259834 +-0.0269838 0.158131 -0.000540227 +-0.0195125 0.0800523 0.0567242 +0.0535386 0.0505579 0.00123438 +-0.0704829 0.066568 0.025804 +-0.0478545 0.117892 -0.0146818 +-0.0645863 0.144373 -0.0132186 +-0.0619148 0.161553 -0.037594 +-0.0328555 0.100056 -0.0225692 +-0.0605435 0.0660534 0.0336067 +-0.00290962 0.037693 0.0115129 +-0.0101883 0.0876449 -0.0371912 +-0.0625754 0.042738 -0.00542472 +0.00650044 0.0910463 0.0545358 +-0.0756811 0.154032 -0.0169094 +-0.0034723 0.130516 0.00409153 +0.00232953 0.116694 -0.0177181 +-0.0378274 0.0929022 -0.0235348 +-0.02161 0.158057 -0.00899889 +0.0304133 0.0415863 -0.00412062 +-0.0728954 0.176495 -0.0445729 +-0.0420309 0.0335517 -0.0220625 +-0.0187514 0.0906841 0.0550582 +-0.0855548 0.125248 -0.00272359 +-0.0137086 0.0614344 -0.0364468 +-0.020723 0.0597726 -0.0340423 +-0.0708646 0.0384387 0.000437312 +0.0310181 0.112726 0.0309619 +0.0131047 0.129972 0.0173477 +-0.0216432 0.124246 -0.00349177 +-0.0626999 0.0706798 -0.0138683 +-0.0865991 0.0833319 0.0164838 +-0.0644302 0.0384213 0.0160253 +-0.0187164 0.0611476 0.0502898 +-0.0791607 0.170809 -0.0419883 +0.00181256 0.0994772 -0.0233519 +0.0199074 0.11877 -0.0100039 +-0.0361903 0.151017 -0.000604378 +-0.084275 0.0897993 -0.00457099 +-0.0554832 0.0861944 0.0449632 +-0.0623633 0.0458155 0.0336786 +0.034658 0.114539 0.0168181 +-0.0736982 0.167846 -0.0232955 +-0.0181465 0.166773 -0.0192359 +0.0113761 0.0494361 -0.0277541 +-0.0440746 0.154693 -0.007872 +0.0606816 0.0664976 0.015162 +0.044367 0.0575454 -0.00546316 +0.0134639 0.0616949 0.0510096 +0.0400149 0.0829397 -0.0117765 +0.0423451 0.0690926 -0.00378897 +-0.0691689 0.0336248 0.00172074 +0.0582234 0.0593447 0.00320204 +-0.0900566 0.133779 0.0292173 +-0.0381652 0.0336678 -0.0288809 +0.0397017 0.104178 0.024171 +-0.0755036 0.121787 0.0531411 +-0.025634 0.122393 0.025161 +0.058528 0.0565928 0.00617045 +-0.0801768 0.155046 0.0137223 +0.0277963 0.0835666 0.045536 +-0.0628566 0.145948 -0.0105775 +-0.0133824 0.0383808 0.0105781 +-0.049358 0.146268 -0.00147688 +-0.0484712 0.0517504 0.0365675 +-0.0467968 0.0869913 -0.021986 +0.0553821 0.0590684 -0.000816519 +-0.0179551 0.0921164 -0.0358084 +-0.0789524 0.0921836 -0.0106406 +0.0374058 0.0893177 -0.0145297 +-0.032345 0.0473443 -0.0245628 +0.0173629 0.0537245 -0.0278081 +-0.0616059 0.160004 -0.0295877 +-0.0123225 0.124091 -0.00743567 +-0.0401607 0.163674 -0.0120006 +-0.06497 0.154244 -0.00563561 +-0.0510279 0.0336678 0.0250302 +-0.0771941 0.0893363 -0.0125642 +0.0224953 0.109772 0.0381484 +-0.0545656 0.13815 0.0298405 +-0.00171216 0.066944 -0.0344014 +-0.00330066 0.124033 -0.00952648 +-0.0724141 0.159616 -0.0379306 +-0.0128309 0.0869146 -0.0385108 +0.0379635 0.103337 0.0286718 +0.00150556 0.0870476 0.0569313 +0.0339501 0.0683557 -0.0167775 +-0.0296157 0.053701 -0.0213818 +-0.0239053 0.0350134 -0.0198326 +0.00348633 0.110018 0.042298 +-0.00459976 0.0405792 -0.0256485 +0.0313837 0.0352278 0.00968341 +-0.0524893 0.105673 0.0402508 +-0.0334757 0.072353 -0.0224701 +-0.00165204 0.0347369 0.0450897 +-0.0251253 0.179165 -0.0186166 +0.0418909 0.0939077 0.0272858 +-0.0417165 0.069628 -0.0168617 +-0.0751265 0.0670609 0.00488552 +-0.0702901 0.063891 0.0211244 +-0.0777094 0.170825 -0.0439812 +-0.0735195 0.135848 0.0500526 +-0.0690768 0.0739443 0.0372765 +0.0123912 0.116671 -0.0157278 +-0.0504991 0.105636 0.0396146 +0.0194996 0.0489742 0.0420155 +-0.0652338 0.145869 -0.0189253 +0.0183651 0.124757 -0.00246117 +-0.067493 0.105571 0.0389191 +0.00451331 0.0814276 0.0565046 +-0.0126391 0.0466477 -0.0295757 +-0.043534 0.0422491 -0.0203181 +-0.0576807 0.133928 0.0359191 +-0.0847679 0.10454 0.0257763 +-0.0763966 0.0748983 0.0314167 +-0.0163248 0.0390132 0.0346782 +0.0455396 0.083395 0.0201668 +-0.0404951 0.0747761 0.0426102 +0.0326457 0.113685 0.0274718 +-0.0533008 0.118582 -0.0133417 +-0.0548347 0.0518559 -0.00436961 +-0.0444358 0.0344955 0.0309851 +0.0022525 0.0986072 0.0504164 +0.0280941 0.107442 0.0372758 +0.0311382 0.100809 0.0381724 +-0.0608693 0.0982413 -0.018491 +-0.0808258 0.116274 -0.00349703 +-0.00493749 0.124022 0.0339675 +-0.0202041 0.0383371 0.000156328 +0.000176932 0.0881362 -0.0348875 +-0.0122454 0.128019 0.000407111 +-0.0750529 0.0860661 0.0392001 +-0.0200226 0.0403705 0.0532551 +-0.0196618 0.127752 0.0140421 +-0.0544977 0.0747139 0.0418232 +-0.0850765 0.107567 0.00438106 +-0.0759578 0.071995 0.0287387 +-0.0434567 0.155083 0.00724724 +-0.090134 0.132434 0.0362229 +0.022282 0.0706591 -0.0268891 +-0.090924 0.128274 0.0409748 +-0.0889908 0.13778 0.0388031 +-0.0788715 0.122217 -0.0060966 +-0.00443014 0.100204 0.0479984 +0.0327247 0.0646521 0.0402099 +-0.066223 0.15556 -0.0520809 +0.0118954 0.0685639 0.0540604 +-0.0805181 0.12599 0.0525745 +0.0465562 0.0753029 0.0092212 +-0.0743025 0.151276 -0.0308835 +-0.0905476 0.146077 0.0141502 +-0.0715441 0.112225 0.0480665 +-0.0679786 0.137002 -0.008171 +-0.0672001 0.044789 0.00569382 +-0.0714328 0.168025 -0.0480185 +-0.0584837 0.088969 0.0446761 +-0.0444852 0.0411138 0.0436529 +0.0142229 0.0821798 -0.0300828 +0.0137354 0.10206 -0.0220537 +-0.0532836 0.0335112 0.0086601 +-0.046743 0.0767653 -0.0182293 +-0.0653246 0.173014 -0.0475844 +-0.0105123 0.0633015 0.0555068 +-0.0652467 0.122825 0.0496059 +-0.0587837 0.0940397 -0.0203993 +-0.061496 0.107016 0.0394252 +0.032159 0.0404592 0.0270704 +-0.0550412 0.129739 0.0362139 +0.0187645 0.036357 0.00611202 +-0.051625 0.0474378 0.0157122 +-0.0945263 0.121474 0.0192827 +-0.0874631 0.104981 0.0103802 +-0.0444225 0.0587761 0.0392912 +0.00550135 0.107149 0.041587 +-0.0023107 0.0375379 0.0154093 +0.0365396 0.111887 0.0174946 +-0.0667677 0.0809002 -0.0178421 +0.0212994 0.0550028 0.0464604 +-0.00474995 0.0391641 0.0333259 +0.0385436 0.103322 0.0277283 +-0.0350927 0.168167 -0.014918 +-0.0381943 0.124735 0.0235454 +-0.0436117 0.125739 0.0201433 +-0.0122465 0.124398 0.0313659 +-0.018196 0.038272 0.00607299 +-0.0454731 0.0675709 0.040115 +0.0397094 0.0887389 0.0329441 +-0.0612601 0.0653881 0.0322823 +0.0358388 0.063303 0.0376893 +-0.0894207 0.0969969 0.0174102 +0.0247051 0.054807 -0.022754 +-0.0362363 0.0345287 0.0379647 +-0.0134852 0.104433 0.0435318 +-0.0390753 0.0353444 0.00990175 +-0.032893 0.0386199 -0.0119052 +-0.066881 0.172737 -0.0437921 +-0.0844296 0.0777425 0.00651672 +0.0102401 0.13009 0.0220074 +-0.0184847 0.091067 0.0550019 +-0.048793 0.155022 0.0100543 +-0.042488 0.1112 0.0368617 +-0.00484603 0.0989761 -0.0268273 +-0.0667655 0.079447 -0.0174677 +-0.0520123 0.033434 -0.00549431 +-0.0309502 0.0376665 0.0292806 +0.0125353 0.118934 -0.0141702 +0.0393762 0.0393721 0.0023232 +-0.0154839 0.0388074 -0.00858919 +-0.027433 0.108265 -0.0206521 +-0.0335566 0.11282 -0.0174155 +-0.0428158 0.126503 0.0190139 +0.0359007 0.0374161 0.00496434 +0.030827 0.118499 0.003976 +0.0482689 0.0616107 -0.00376704 +0.0172995 0.0637271 -0.0287659 +0.0352999 0.0727523 0.0387329 +0.0325099 0.0439072 0.0294151 +0.0434928 0.0597185 0.030951 +-0.0849411 0.14333 0.0402714 +-0.0419573 0.15213 0.00584722 +-0.0478585 0.101383 -0.0215741 +0.0158763 0.121559 0.0327664 +0.0196134 0.0505877 0.0439573 +-0.0408143 0.0899706 -0.0230035 +0.0179499 0.0360095 0.0408071 +-0.0491945 0.137084 0.0184007 +0.0422067 0.0898824 0.0277847 +-0.0568073 0.122 -0.00880521 +-0.0535468 0.0500774 -0.00609453 +-0.0791017 0.171279 -0.0410322 +-0.0812381 0.0774347 -0.00249764 +0.00451011 0.08973 0.0555486 +0.0360129 0.0947297 -0.0122566 +-0.0267986 0.0839175 -0.0367186 +-0.0336466 0.125738 0.0192922 +-0.0645061 0.0384674 -0.00726163 +-0.069197 0.145134 -0.0204031 +-0.0453102 0.150665 0.00801555 +-0.016121 0.0347931 0.0455365 +0.0372267 0.0827114 -0.0157704 +-0.0586519 0.047167 0.0396282 +-0.0723413 0.0352299 0.00501169 +-0.00850771 0.0457646 0.047699 +-0.0361402 0.0481769 -0.0171107 +-0.0694918 0.0986232 0.041191 +-0.0145821 0.0365575 -0.0175497 +-0.0152331 0.178626 -0.0269991 +-0.0375015 0.0761535 0.0421853 +0.0230994 0.0700125 0.0474321 +-0.0769031 0.149462 0.0386995 +-0.0160344 0.0394989 0.0396851 +-0.077278 0.155614 0.0132673 +-0.0461472 0.0695191 0.0407559 +0.013766 0.105146 -0.0193832 +-0.00180961 0.102694 -0.0227875 +-0.0404787 0.102851 0.0403978 +-0.0256602 0.0491814 -0.0262646 +-0.0640267 0.155773 0.0106957 +-0.0188798 0.0381919 0.018679 +0.0251044 0.111527 -0.0122017 +-0.00771141 0.130468 0.0154714 +-0.0143198 0.128437 0.0203415 +0.000556364 0.0427979 0.0462128 +-0.0107039 0.129221 0.0216334 +-0.0755898 0.0796389 -0.010614 +-0.0618567 0.156837 -0.0325918 +-0.0516893 0.0678068 -0.0129959 +-0.0631142 0.178334 -0.0583576 +-0.0386855 0.0651385 -0.0142461 +-0.0594798 0.0790546 0.0431577 +-0.029726 0.121561 0.0251755 +-0.0328596 0.153633 -0.000344229 +0.0339626 0.0356317 0.0117064 +-0.0718527 0.158151 -0.00382487 +-0.0194857 0.0486564 0.0485018 +0.0319575 0.0889685 0.042819 +0.00933955 0.0624337 -0.0310444 +-0.0172265 0.113695 -0.0184196 +-0.0866231 0.0846922 0.0194779 +-0.0663134 0.0608279 0.00678018 +-0.0718125 0.0922256 -0.0157107 +0.0550352 0.064867 0.0267865 +-0.0446824 0.0651214 -0.0145177 +-0.066499 0.0958724 0.0422345 +-0.0484771 0.135525 0.0064169 +0.0419641 0.0872658 0.0291034 +-0.0144336 0.120974 -0.0101151 +0.00537913 0.115468 -0.0184153 +-0.0169313 0.0940904 -0.0338108 +-0.0311219 0.087675 -0.0275557 +-0.0733475 0.129801 0.0519745 +-0.0628563 0.0432731 0.0396846 +-0.0181419 0.159077 -0.00932452 +-0.0244219 0.0752703 0.0498831 +0.0278638 0.0367181 0.000104301 +0.0464062 0.0525822 0.0317783 +-0.0352134 0.127051 0.0157486 +-0.037493 0.0605801 0.0408152 +0.0435542 0.0709351 0.0259153 +-0.061811 0.0896079 -0.0190442 +-0.0487502 0.167013 -0.00197199 +-0.011981 0.180127 -0.0244833 +-0.0273118 0.0346998 0.0432305 +0.0260624 0.113339 -0.0101501 +0.00139388 0.0977439 -0.0275242 +0.0217437 0.0348491 0.000619009 +-0.0598385 0.0385019 0.0199857 +-0.0742583 0.12978 0.0523998 +0.0125017 0.103142 0.0463418 +0.0222613 0.0768462 0.049813 +0.0226846 0.125635 0.0109073 +-0.0664848 0.153437 0.0331838 +-0.0635064 0.100118 0.0422551 +-0.0884181 0.136485 0.0410708 +-0.0821317 0.151156 0.0323844 +-0.035019 0.035354 0.0462574 +-0.0445836 0.049099 -0.0105442 +-0.0913513 0.126793 0.00727091 +-0.00465552 0.0526099 -0.031899 +-0.0536395 0.0361733 0.0466553 +-0.0624928 0.0775409 0.0419345 +-0.0454844 0.1652 0.00481603 +-0.0176555 0.10171 -0.0237622 +-0.0517386 0.139928 0.000994108 +-0.0894422 0.0969694 0.0114146 +0.0282036 0.106111 0.0374341 +-0.0930784 0.128223 0.0132485 +-0.0710378 0.113905 0.0504272 +-0.0589666 0.06768 0.0360494 +0.0249541 0.12014 0.0288767 +-0.0467094 0.0345808 0.0339444 +-0.0627411 0.0766785 -0.0179436 +-0.00548466 0.051944 0.0528973 +-0.0355056 0.0705073 0.0417804 +0.00377856 0.127353 -0.00517835 +-0.0595895 0.0659394 0.0339087 +-0.0639025 0.0344657 0.0356117 +-0.0549717 0.132532 0.0345672 +-0.0762259 0.0790445 0.0349679 +-0.0259103 0.0721759 0.0444214 +0.0315716 0.117859 0.00423829 +-0.0696582 0.0642657 0.000568637 +-0.0882731 0.143189 0.0351319 +-0.031681 0.0679763 -0.0234472 +-0.0699144 0.1253 -0.00883057 +0.0435982 0.0888699 0.0251665 +-0.0914617 0.144737 0.0211556 +-0.0205009 0.126788 0.0181341 +0.0311284 0.103423 0.0364018 +-0.0196184 0.043638 -0.0281382 +-0.0192518 0.185941 -0.0210687 +0.0556563 0.0725898 0.00964459 +-0.0899954 0.135014 0.00922069 +-0.0658394 0.170333 -0.0405107 +-0.0487066 0.064243 0.0362896 +0.0115006 0.100446 0.0479384 +-0.0479295 0.132887 0.00374503 +0.0216229 0.0700379 0.048827 +0.0151599 0.050478 0.0463014 +0.00510611 0.0386758 0.0457599 +-0.0284578 0.0789297 -0.0355663 +-0.081069 0.152209 0.0312004 +-0.0814521 0.13302 0.0511119 +-0.0115065 0.0517326 0.051159 +0.0190773 0.108184 -0.0165978 +-0.0879813 0.0860844 0.0054873 +-0.0565924 0.0442297 -0.00693458 +-0.0358918 0.166781 -0.00116722 +0.0263229 0.122689 0.0193841 +-0.0305096 0.0608404 -0.0204127 +-0.0790435 0.0718734 0.00353541 +-0.0264818 0.101588 0.0434387 +0.0224815 0.0892515 0.0484736 +-0.07435 0.0711851 0.0297739 +-0.0366402 0.0563002 -0.0110085 +-0.0858069 0.133905 0.0470456 +-0.0347686 0.16678 -0.00304399 +-0.0318926 0.0385829 -0.0116716 +0.0173027 0.0680054 -0.0293377 +-0.084368 0.114299 0.000284663 +-0.0761089 0.149998 -0.0108814 +0.0437289 0.0987183 0.00617361 +0.0134057 0.0374127 -0.0219366 +0.000807934 0.124791 -0.00838237 +-0.0406768 0.0621783 -0.0128097 +-0.0926608 0.121474 0.0282925 +-0.0595443 0.155728 0.018094 +-0.0646509 0.168222 -0.0372156 +-0.0197896 0.127727 0.0110836 +0.0112619 0.069597 -0.0315203 +-0.0784667 0.141403 0.0468168 +-0.0881381 0.0996585 0.0223676 +-0.0495985 0.048927 -0.00879829 +-0.0567267 0.15478 0.0220083 +-0.0273659 0.119585 -0.010507 +0.0191093 0.0375318 0.0414884 +-0.054786 0.147744 0.027387 +0.0185111 0.114004 0.0370685 +-0.0106027 0.171925 -0.0271985 +-0.0795217 0.0748572 0.0255446 +0.0527001 0.0462105 0.0152086 +0.0191089 0.0889764 -0.0262512 +-0.0917278 0.114662 0.0113396 +-0.0311696 0.0749025 -0.031542 +0.0103976 0.0505032 0.04997 +0.00150167 0.0504398 0.0522275 +-0.00913054 0.0987984 -0.026694 +-0.0607072 0.0707896 -0.0151427 +-0.0314435 0.033488 -0.0292746 +0.0322402 0.0842577 -0.0191914 +-0.0617587 0.160001 -0.0265888 +0.0366758 0.0659888 0.0371374 +-0.0410386 0.153314 -0.00775366 +-0.0916156 0.146104 0.0201482 +-0.008275 0.130081 0.0196055 +-0.0716229 0.0395313 0.00756641 +-0.0555501 0.0448059 0.0154665 +-0.0519883 0.0545681 0.0276385 +-0.063796 0.145383 -0.0141799 +-0.0204903 0.107154 0.041938 +-0.00950118 0.06052 0.0554819 +-0.0297859 0.073336 -0.0325546 +0.0225502 0.0873848 -0.0245875 +-0.0658345 0.0367656 0.0273328 +-0.0335698 0.0354174 0.0482024 +-0.0826039 0.0829175 -0.00455606 +0.0133284 0.055284 -0.0292269 +-0.000932932 0.0363158 0.0167895 +0.0190541 0.116198 -0.0132311 +-0.000494259 0.0911454 0.0560111 +0.0112951 0.130595 0.0166808 +-0.0164761 0.0673645 0.0539812 +-0.0180225 0.0385494 -0.00514634 +-0.0610891 0.0339525 0.017372 +-0.0707478 0.147309 -0.0278341 +-0.0189873 0.180146 -0.0170482 +0.0237757 0.0343382 0.00896337 +-0.00265737 0.0899953 -0.0354905 +-0.0718661 0.100809 -0.0137558 +-0.00649817 0.0939276 0.0556503 +-0.0246455 0.126418 0.012252 +-0.0157508 0.070024 -0.0384074 +0.0256059 0.12104 -0.000826914 +0.00250363 0.0489881 0.0513443 +-0.029644 0.125848 0.0118936 +-0.024804 0.0737635 0.0475256 +-0.0672658 0.131206 0.0466969 +-0.0817178 0.0953366 0.0328835 +-0.0286351 0.0918211 -0.0275955 +0.0414472 0.0971985 0.0261597 +-0.0680972 0.121444 0.0525081 +-0.0683202 0.166619 -0.0540065 +-0.0375072 0.0775843 0.0424046 +-0.0143913 0.0384112 0.00490303 +-0.0518947 0.109852 -0.0185479 +0.0338477 0.0711662 -0.016803 +-0.0450894 0.154663 -0.00752455 +-0.0564919 0.0875695 0.0445907 +0.0391967 0.0726247 0.033788 +0.0574073 0.0717824 0.0103168 +-0.0237163 0.0380022 0.0196686 +0.0120538 0.0907862 -0.0301745 +-0.0669793 0.134061 -0.00834965 +-0.00947746 0.116894 0.0392479 +-0.0328734 0.0680853 -0.0194707 +0.030263 0.116206 0.0279976 +-0.0348513 0.0345425 0.0400019 +-0.0532018 0.0733522 0.0412342 +-0.0577592 0.033805 0.0199655 +-0.00439966 0.119978 -0.0131705 +0.0162591 0.0434903 0.0442636 +-0.0567225 0.0423764 0.0206991 +0.00325132 0.12142 -0.0127844 +0.0145581 0.125506 0.0293407 +0.00448398 0.0989824 0.0487111 +-0.0896848 0.0929338 0.0144339 +-0.04491 0.13036 0.00775303 +-0.048947 0.138616 0.00839947 +-0.0307428 0.0552453 -0.0153798 +-0.0826044 0.1367 0.0480323 +-0.0749507 0.0661289 0.00944516 +-0.00473325 0.069866 -0.0358872 +-0.0167995 0.0347343 0.0471976 +-0.0426342 0.12559 0.0204963 +-0.0444709 0.120321 -0.0132547 +0.010477 0.116818 0.0374755 +-0.0744965 0.123196 0.0533572 +-0.047302 0.16443 0.00497116 +-0.0859996 0.118394 -0.000793117 +-0.0326967 0.0849828 -0.026556 +-0.0843669 0.106153 0.00138874 +0.0167493 0.127305 0.0229819 +0.0223908 0.0489358 -0.0217863 +-0.0762839 0.155844 0.0209052 +-0.0839499 0.0979633 -0.0036111 +-0.0216926 0.126501 0.0176944 +0.0378596 0.0914955 0.035553 +0.0420895 0.102851 0.00717012 +0.0366464 0.103365 0.0302885 +-0.0696779 0.086056 0.0423345 +-0.0340311 0.0339294 0.0212063 +0.0162763 0.0361212 0.00396256 +-0.0426327 0.0338426 -0.00397459 +-0.027617 0.125471 0.0155889 +-0.0937433 0.118772 0.0222988 +-0.0518432 0.133909 0.0302884 +-0.0413643 0.124214 -0.00934406 +-0.0413386 0.121239 -0.0122322 +-0.0396582 0.0336638 0.00768797 +-0.0853564 0.091162 -0.00253932 +0.0179914 0.120614 0.0332262 +-0.0717184 0.0792466 -0.0147262 +0.0215785 0.11262 0.0367657 +0.0236405 0.0366106 0.026972 +-0.07448 0.0662148 0.0164657 +-0.00149557 0.0973426 -0.0290749 +0.0342448 0.0842103 -0.0184253 +0.0045204 0.0661365 0.0560558 +-0.0072649 0.0384115 0.0117959 +0.0362267 0.104294 -0.00842134 +0.0232091 0.0782074 0.0494446 +-0.0204762 0.0786229 0.0556935 +0.0189956 0.125897 0.000310264 +0.0582502 0.0661055 0.0226582 +-0.0884672 0.113635 0.0306037 +-0.0595891 0.155231 0.0238846 +-0.0540479 0.142765 -0.001179 +0.0139994 0.0807368 0.0537041 +-0.0660333 0.155202 -0.00458552 +-0.0371914 0.175481 -0.00856986 +-0.0114786 0.114128 0.0403922 +0.00280587 0.10648 -0.0207933 +-0.061629 0.148291 0.0370712 +-0.0305056 0.115271 0.0335326 +-0.0847456 0.0911272 0.0289858 +0.0294623 0.103445 0.0374919 +-0.0884887 0.122612 0.00129126 +-0.0869453 0.0846809 0.01048 +0.04631 0.0778469 0.00818385 +-0.077491 0.135849 0.0507593 +0.00650523 0.0745046 0.0565842 +-0.0193751 0.0711448 0.0534686 +-0.03164 0.0581442 -0.0153958 +0.00337821 0.0392113 0.0295452 +0.026954 0.116596 0.0310646 +-0.0623115 0.16311 -0.0435951 +0.0154275 0.0350916 0.0411096 +-0.0724818 0.165221 -0.0429802 +-0.0359956 0.151076 -0.00202594 +0.0162209 0.0779008 -0.0293961 +-0.0478366 0.133877 0.0213554 +0.0569921 0.0661536 0.0243514 +-0.0318346 0.0915622 -0.0244444 +-0.0864107 0.0819973 0.0174801 +-0.0497993 0.0677848 0.0379447 +-0.0671663 0.164687 -0.0194859 +-0.00868026 0.111843 -0.0204858 +-0.0195177 0.0933631 0.0529187 +-0.0535918 0.114983 -0.0155816 +-0.068804 0.18096 -0.0579804 +-0.0846698 0.148755 0.00515607 +-0.0808035 0.0868637 -0.00756861 +-0.0309282 0.156627 0.000764301 +-0.0561456 0.0642166 0.0326189 +-0.0864523 0.0899653 0.00147962 +-0.0802598 0.0734072 0.0195467 +-0.025101 0.114847 -0.0155729 +-0.0348703 0.102876 -0.0215726 +0.00151752 0.0547965 0.0538164 +-0.0216758 0.0969718 -0.024798 +0.0367496 0.0931371 -0.012555 +0.00330684 0.0583228 -0.0321215 +-0.0697412 0.154452 0.0305168 +-0.0618525 0.0343021 0.022204 +-0.00886294 0.171168 -0.0237423 +-0.0216854 0.168305 -0.0122385 +-0.0435207 0.0562403 0.0394546 +-0.0620233 0.159983 -0.0376027 +-0.0751309 0.154085 -0.0179327 +-0.0480694 0.153165 -0.00566954 +0.0283556 0.0605487 0.0426528 +0.0115864 0.0348612 0.0423222 +-0.064559 0.11407 0.0417666 +0.0210547 0.0358177 -0.00168489 +-0.042575 0.0491291 -0.011035 +-0.0742409 0.113562 0.0499634 +-0.0659446 0.146784 0.0398667 +-0.0670071 0.172276 -0.0580562 +0.0251821 0.0357118 0.0226481 +-0.0129957 0.0883892 -0.0379783 +0.01814 0.0713245 0.0508426 +0.0161851 0.0347246 0.0253316 +-0.0234485 0.122824 -0.00599554 +0.00849456 0.0412846 0.0453159 +-0.0253871 0.124202 0.0208009 +0.00860136 0.121512 -0.0129363 +-0.0764996 0.128859 0.0532215 +-0.0637886 0.083851 -0.0191517 +-0.073438 0.175304 -0.0418354 +-0.0464485 0.132668 0.0189406 +-0.018505 0.112714 0.0394706 +-0.0579749 0.117711 -0.0123561 +-0.0241311 0.0384069 -0.0174035 +0.0286891 0.119649 0.00175522 +0.0135044 0.118213 0.0361594 +0.00748569 0.0942514 -0.0297902 +0.0223281 0.111319 -0.0139783 +0.00796203 0.131149 0.00690102 +-0.0888712 0.101031 0.0183836 +0.0208523 0.0352023 0.0276656 +-0.0939805 0.118754 0.0182968 +-0.0886426 0.129716 0.0443401 +-0.0562403 0.128346 0.0379943 +-0.0946719 0.122818 0.0192736 +-0.0844496 0.151409 0.0062115 +-0.0488054 0.124161 -0.00921799 +-0.0495787 0.0503337 -0.00863311 +-0.0642728 0.174473 -0.0515364 +-0.0355869 0.116022 -0.0147547 +0.0353133 0.0362497 0.0114171 +-0.0570854 0.136926 -0.00500822 +-0.033504 0.079379 -0.0265108 +-0.062469 0.033932 0.0153305 +-0.000579953 0.0361804 -0.0245898 +-0.0314067 0.0423682 0.0507901 +-0.0112759 0.125368 0.030237 +-0.00950387 0.075936 0.0571919 +-0.0424487 0.125177 -0.00834623 +-0.0077039 0.113721 -0.0184781 +-0.00342161 0.0338005 -0.0221963 +-0.0140717 0.118746 -0.0137718 +-0.0231943 0.0388081 0.0352395 +-0.0639512 0.156212 0.0208686 +-0.0624954 0.0890364 0.0453804 +-0.0303734 0.125779 0.00722581 +0.003605 0.0340592 0.00699628 +-0.0765794 0.15423 -0.00189723 +-0.0759273 0.08606 0.0386654 +0.0508473 0.0446622 0.0112162 +0.00609443 0.127443 0.0291456 +-0.0428742 0.105667 -0.0205602 +-0.0188968 0.0381911 0.0132528 +-0.086324 0.106283 0.0073644 +-0.0320928 0.0336737 -0.0220791 +-0.0466544 0.119173 -0.0140371 +-0.0710688 0.156192 0.0139947 +-0.055712 0.155088 0.0136896 +-0.0525045 0.159361 0.00819169 +-0.0543637 0.116891 0.0353365 +0.0318466 0.0424663 0.0288342 +-0.051547 0.125478 0.0342157 +-0.00249266 0.0760635 0.0587913 +-0.00575365 0.0727093 -0.0362416 +-0.00680153 0.129324 0.00093339 +0.0495021 0.0664943 0.0276338 +-0.0282448 0.11486 -0.0155715 +0.031224 0.0786608 -0.0202592 +-0.0148026 0.0827563 -0.0392327 +-0.071855 0.0993885 -0.014251 +0.0177513 0.0462342 0.0429632 +-0.0242082 0.121982 0.0271598 +-0.0922854 0.116039 0.0223382 +0.0434814 0.0832239 -0.00379707 +-0.0384996 0.171162 0.000767348 +-0.0712408 0.114861 0.0513991 +-0.0157632 0.12799 0.00385748 +0.019082 0.126548 0.00245443 +-0.00388013 0.0394939 0.0368098 +-0.0204678 0.122105 0.0297617 +-0.0285693 0.0399846 -0.0296196 +-0.0831878 0.0764607 0.0163622 +0.0190867 0.0428243 -0.0216805 +0.0483631 0.0628304 -0.00297175 +-0.0927311 0.120157 0.0322864 +-0.0241838 0.0579409 0.0417219 +-0.0517297 0.0723507 -0.015831 +-0.0217729 0.0684817 -0.0372671 +-0.00949546 0.0829261 0.0578441 +0.0172524 0.0778474 -0.0286871 +-0.0441607 0.162142 -0.00945516 +-0.00587725 0.105934 -0.0226578 +0.0253567 0.0518232 -0.0216362 +-0.0494861 0.156424 0.00985611 +-0.0174771 0.0924389 0.0547456 +-0.0151406 0.126373 0.0259068 +-0.0852968 0.0818288 0.005494 +-0.0244818 0.0988555 0.0446892 +-0.0930791 0.118839 0.037294 +-0.0662836 0.114247 0.046332 +0.0127465 0.0672208 0.05354 +-0.0414757 0.109827 0.0377618 +-0.0435203 0.0519967 0.0390799 +-0.0417672 0.0812092 -0.0204027 +-0.0786424 0.0732312 0.000545367 +-0.0358502 0.0986071 -0.0225695 +0.0443653 0.0561662 -0.00597205 +0.0226111 0.0458717 -0.017849 +-0.0108336 0.116804 -0.0157483 +-0.0865451 0.110395 0.00835385 +0.031421 0.0399741 -0.00264961 +0.0363991 0.039859 -0.00104313 +-0.0468008 0.0347657 0.0424884 +-0.0398282 0.0914347 -0.0233046 +-0.025008 0.0334859 -0.0261337 +-0.0465231 0.0804789 0.0433941 +-0.0689665 0.135529 -0.00828838 +-0.0264689 0.0379883 0.0100865 +-0.0345116 0.111154 0.0360997 +-0.0225694 0.0387321 0.0336407 +0.0372794 0.0574491 -0.00767997 +-0.0707981 0.0672067 0.0269443 +-0.0150683 0.0384098 0.0065829 +-0.0592389 0.0452743 -0.00430196 +-0.0334924 0.102881 0.0413291 +-0.079025 0.153836 0.00536375 +-0.0229321 0.055215 0.043371 +-0.0601957 0.0341396 0.0262143 +-0.0688541 0.147497 -0.029579 +-0.0613597 0.172535 -0.0585911 +-0.0748166 0.0921259 -0.0144369 +-0.0632016 0.165278 -0.0601981 +0.0402098 0.04091 0.000378677 +-0.047469 0.117985 0.0306301 +0.0368134 0.0781201 0.03746 +0.000515748 0.0349973 0.0453092 +-0.0534255 0.124412 -0.00739059 +-0.000488424 0.0801341 0.0575904 +-0.0706455 0.0701231 -0.00669595 +-0.0477034 0.0649971 -0.0135628 +-0.0348898 0.0767003 -0.020496 +-0.00451076 0.0788064 0.0581316 +-0.0693915 0.117164 0.0523368 +-0.0200653 0.164398 -0.0170398 +-0.073544 0.177863 -0.0540307 +0.0427163 0.0399244 0.0113768 +0.0240483 0.0713748 0.0470522 +-0.0154968 0.0659374 0.0537935 +-0.0686329 0.175846 -0.0473222 +-0.0628372 0.172536 -0.0525874 +-0.0796429 0.148681 -0.00084361 +-0.0663392 0.0600723 0.0146241 +-0.00400483 0.123769 0.0343163 +0.0322222 0.0597861 -0.0166881 +-0.0640918 0.158696 -0.0546245 +-0.00248901 0.0456504 0.0469622 +-0.072774 0.10871 0.0380686 +-0.0810086 0.154578 0.0119766 +-0.0695005 0.091616 0.0421021 +-0.0665162 0.155345 0.00690315 +-0.030539 0.0748507 -0.0325674 +-0.0672648 0.0680031 0.0322561 +-0.0660205 0.131186 0.0449542 +-0.0246171 0.125897 0.00496292 +-0.077893 0.12518 -0.00689701 +-0.0883724 0.121658 0.047175 +-0.0773948 0.167309 -0.02854 +-0.0604 0.0470132 0.0371523 +-0.027746 0.0753954 -0.0356568 +-0.0748509 0.0782361 -0.0105914 +-0.0571323 0.14819 0.0314465 +-0.0415029 0.0803953 0.042616 +-0.0628829 0.0649103 0.0305991 +-0.00169833 0.0598396 -0.033652 +0.0151569 0.107807 -0.0181851 +0.0566945 0.0674374 0.0239376 +-0.0717279 0.155642 0.00502354 +-0.00382186 0.102465 0.0438439 +-0.0587089 0.155741 0.0125904 +0.0572801 0.0608152 0.0247108 +0.017703 0.0913635 0.0485583 +0.0260543 0.116303 -0.00733098 +-0.0345036 0.0690703 0.0414109 +-0.0292922 0.117943 -0.0127907 +0.0213023 0.0835644 0.0502546 +0.0464907 0.0664648 0.0271426 +-0.0564929 0.14962 0.0306387 +0.0282135 0.118937 -0.00132982 +-0.000391601 0.123621 0.0341495 +-0.00114981 0.12653 0.03091 +0.0304544 0.114562 -0.00546317 +-0.0547437 0.0337519 0.0206417 +-0.0468823 0.107031 -0.0193009 +-0.0631801 0.0406886 0.0415101 +-0.0910325 0.133669 0.0112223 +-0.0592476 0.145654 -0.00231326 +-0.0125718 0.100502 0.0445971 +-0.0298246 0.0378766 0.0293214 +-0.0839351 0.123564 -0.00377373 +-0.0621407 0.163665 -0.0567978 +-0.0389566 0.155104 0.00497717 +-0.0878144 0.105004 0.012374 +-0.0794305 0.0908376 -0.00963692 +-0.0246551 0.0507167 -0.0273858 +-0.0796103 0.0799856 -0.0065507 +0.0330411 0.10941 -0.00791346 +-0.00231596 0.121888 -0.0112268 +-0.0597326 0.154693 0.0267485 +0.0339669 0.0697663 -0.0167955 +0.0205734 0.0999616 -0.0218299 +-0.0354929 0.0917868 0.0443508 +0.00339585 0.0355203 0.0220096 +-0.0315414 0.125778 0.00387502 +-0.0478194 0.135564 0.0104014 +-0.00879058 0.0812731 -0.0379859 +-0.0037488 0.0386615 0.00318783 +-0.0464486 0.0959731 0.0434949 +-0.0306087 0.0394849 -0.0300968 +-0.00234671 0.0967246 -0.0304442 +-0.0312616 0.0735186 -0.0295121 +-0.0423301 0.0340883 0.0282541 +0.0355908 0.113068 0.0185826 +0.000833787 0.106762 -0.0210825 +-0.021676 0.184465 -0.0190713 +-0.0305406 0.0566147 -0.0184018 +-0.0876394 0.113262 0.0257017 +-0.0851868 0.0966727 -0.00156833 +-0.0465061 0.0425232 0.0438042 +0.0106037 0.121274 -0.0126925 +0.0290611 0.0523826 -0.0177704 +-0.000764451 0.0769261 -0.0359174 +-0.0416101 0.0338187 0.00715256 +-0.0893298 0.0969555 0.0104169 +-0.0345694 0.163827 -0.00275159 +-0.0888276 0.090232 0.0214359 +0.0208395 0.034464 0.00266226 +0.0428658 0.0623821 -0.00251673 +-0.00588102 0.130577 0.00751387 +-0.0133142 0.0337765 -0.0222266 +-0.0435242 0.0590876 0.0398271 +0.0545899 0.0478435 0.0151974 +-0.0107349 0.0699421 -0.0371274 +0.027906 0.0578072 0.0419759 +-0.0416225 0.0520166 -0.011127 +-0.0207276 0.168298 -0.0126147 +0.0256959 0.0491338 0.0386649 +-0.0550795 0.153114 -0.00215772 +-0.0380808 0.0483205 -0.0131774 +-0.0276317 0.056316 -0.0254148 +-0.00815144 0.127733 -0.00346398 +-0.0627849 0.0852772 -0.0191174 +-0.0619877 0.169385 -0.052596 +0.0234401 0.112665 0.0358138 +-0.0659073 0.110934 -0.0126703 +0.0280721 0.0360499 0.0211097 +0.0105243 0.0687767 0.0545753 +-0.00679638 0.0982761 -0.0281107 +-0.0309109 0.0462432 0.0473418 +-0.0196031 0.0393462 -0.028238 +-0.0871129 0.152836 0.0157593 +-0.0911632 0.133688 0.01322 +-0.0464961 0.102903 0.0415914 +-0.0206991 0.0553418 -0.0317435 +-0.00949277 0.073156 0.0570282 +-0.0864179 0.083353 0.0184733 +-0.0841891 0.111446 0.02976 +-0.0940387 0.126929 0.0232615 +0.0406221 0.0899944 0.0307666 +0.0208423 0.104696 0.0425993 +0.0445354 0.0407636 0.0127885 +-0.0623396 0.172509 -0.0536126 +0.0342346 0.0852576 -0.0183147 +-0.0866427 0.151554 0.0100877 +-0.0470988 0.0345244 0.0321531 +-0.080576 0.154494 0.0106641 +-0.0137759 0.0756859 -0.0386228 +0.0216235 0.0430155 -0.0167288 +0.0376424 0.109732 0.0031582 +0.0589875 0.0607291 0.021951 +-0.0923003 0.132372 0.0212228 +0.0311691 0.0942449 0.0417029 +-0.0174159 0.162512 -0.00777918 +-0.0156178 0.12076 -0.00985742 +-0.0507328 0.121196 0.0335979 +0.028716 0.119662 0.0245591 +-0.0738138 0.0950345 -0.0145557 +0.0204425 0.0350747 0.0258809 +-0.0207737 0.0351435 -0.019333 +0.0223353 0.12586 0.0121947 +-0.0155009 0.0951913 0.0533641 +-0.0143883 0.038338 0.0212719 +0.00741103 0.0391504 0.030425 +0.0433932 0.0691823 -0.000799598 +-0.0760543 0.149976 -0.0168736 +-0.0701178 0.170154 -0.0291958 +-0.0483555 0.146018 -0.00117385 +0.0336441 0.0578174 0.0379601 +-0.0913716 0.140622 0.0201693 +-0.0308539 0.0958394 -0.0237431 +-0.0766992 0.0702795 0.00252119 +-0.0544948 0.107078 0.0398767 +-0.0587729 0.0796565 -0.019784 +-0.013621 0.128874 0.0191382 +-0.0634727 0.156127 0.0195874 +-0.0880436 0.0977019 0.0235765 +-0.0606626 0.0738612 0.0409255 +0.0348653 0.0795228 0.0399156 +0.0387467 0.0828368 -0.0137708 +-0.0573402 0.0424553 0.0177175 +-0.0784976 0.148406 0.0395361 +-0.0917148 0.117385 0.0263102 +-0.0330041 0.122377 0.0254817 +0.0172403 0.0768113 0.0531129 +0.0595736 0.0691817 0.0101411 +0.0306903 0.0708797 -0.0198199 +-0.0845462 0.119028 0.0490922 +-0.0501127 0.0337803 -0.0127711 +-0.0670049 0.0372923 0.032499 +-0.0915067 0.129676 0.0312386 +-0.0550517 0.0504886 -0.00434688 +-0.0484873 0.0790818 0.0439275 +-0.0635173 0.159862 -0.0515858 +-0.0706155 0.173275 -0.0394062 +0.0352172 0.0952034 -0.0127755 +0.0251052 0.0382735 0.0297226 +-0.0668809 0.106639 -0.013906 +-0.0678418 0.143634 -0.0139334 +-0.0235762 0.184403 -0.0123621 +-0.0257601 0.0726356 -0.0363191 +-0.0573375 0.0472769 0.0101218 +-0.085611 0.106332 0.02136 +-0.0265671 0.0617846 0.0387137 +-0.0126044 0.12951 0.0108053 +0.0214416 0.0362735 0.0322576 +-0.0354711 0.126342 0.0186171 +-0.0594976 0.0904384 0.0451853 +0.00310705 0.0348555 0.0387811 +0.0254813 0.0942452 0.0457882 +-0.0308576 0.10008 -0.0228293 +-0.0176768 0.0510699 -0.0312435 +-0.0162281 0.181624 -0.0200739 +-0.0195138 0.038345 0.00392275 +-0.0645154 0.121409 0.0489254 +-0.0248162 0.0593033 0.0409035 +-0.0571389 0.136712 0.0331888 +-0.0435213 0.0379732 -0.0242868 +-0.0606582 0.12408 0.0421371 +0.0346832 0.0519191 0.0323364 +-0.0913706 0.116528 0.0258009 +-0.0426868 0.0651551 -0.0146214 +-0.0215064 0.116765 0.0355266 +-0.0581012 0.158247 0.00415445 +0.00842312 0.0385006 0.0330183 +-0.0523141 0.162661 -0.0019165 +0.0606845 0.0623337 0.0161711 +-0.0495055 0.0848369 0.0453213 +0.0333786 0.06058 0.0393695 +-0.0689469 0.131135 -0.00874709 +-0.078943 0.132461 -0.00522567 +-0.0196521 0.0386292 -0.00926197 +-0.0594457 0.0334843 -0.00338966 +-0.054161 0.0337073 0.0136843 +-0.0384829 0.0959056 0.0428235 +-0.0869182 0.148604 0.0308154 +-0.0323987 0.116048 -0.0147978 +0.0359194 0.0798211 -0.0157295 +-0.0328255 0.12127 -0.00820532 +0.0414852 0.0569681 0.0316528 +-0.0270871 0.0520359 -0.0253933 +0.0508347 0.0727393 0.0196905 +-0.0198767 0.105865 -0.0225965 +0.0206869 0.0400703 -0.0126929 +-0.0285033 0.0616825 0.0373869 +-0.0714181 0.143109 -0.0104276 +-0.0804568 0.138622 0.0481167 +-0.0458049 0.0532278 0.0379952 +-0.0509023 0.125469 0.0333647 +-0.0871853 0.145927 0.0339699 +0.0558536 0.0594884 0.0261475 +-0.0889169 0.126733 0.0032966 +0.0110737 0.125093 -0.00680678 +-0.0358405 0.094357 -0.023472 +0.0259145 0.102099 0.0411479 +0.0426389 0.0764517 0.0281735 +0.00597565 0.131268 0.0190237 +-0.0475211 0.165506 -0.00586183 +0.0138473 0.035286 0.0424107 +-0.0544751 0.0987674 0.042954 +0.0329063 0.0668566 -0.0177475 +-0.0715523 0.0819441 0.0400873 +-0.0483263 0.149906 -0.00403153 +0.0417112 0.0986332 0.0241669 +-0.0591403 0.039472 0.0459797 +-0.0649985 0.156251 0.0205012 +-0.0389795 0.034282 0.00907489 +-0.0627215 0.0592404 0.0161384 +-0.0367435 0.0437017 -0.0271198 +-0.0164726 0.0387782 -0.0143554 +0.0302495 0.0773125 -0.0211724 +0.0378723 0.109729 0.00416584 +-0.0033562 0.120959 -0.0122202 +-0.0465665 0.0433151 -0.011194 +-0.0597431 0.093988 -0.019461 +-0.0756514 0.0743685 0.0320217 +0.0461779 0.083439 0.010174 +-0.0757827 0.151399 -0.00889222 +-0.0417451 0.0768346 -0.0188724 +-0.0617437 0.0421117 0.0428503 +0.00176163 0.130465 0.00157228 +0.0429689 0.0696277 0.0268653 +-0.0432762 0.0450842 -0.0143236 +-0.0525312 0.0475838 0.0226634 +-0.0153636 0.128543 0.00690549 +-0.0685053 0.109678 0.0379594 +0.0174805 0.103096 0.0453391 +0.0217176 0.0632088 0.0471364 +0.0359993 0.0955223 0.036379 +-0.0451488 0.0335546 0.00486717 +-0.0681193 0.15804 -0.05439 +-0.0661021 0.155727 0.025928 +-0.00573558 0.0684573 -0.035843 +-0.0181282 0.187252 -0.018852 +-0.0445141 0.050571 0.038927 +-0.00049716 0.0856626 0.0573342 +0.016507 0.0913965 0.0503683 +-0.0333397 0.0410057 0.0499212 +-0.0351946 0.125334 -0.00338173 +-0.0616183 0.16622 -0.0565931 +-0.0624979 0.0760891 0.0414437 +0.0350466 0.107363 0.0297386 +-0.0720199 0.063399 0.00874547 +-0.0877434 0.135138 0.0431967 +0.0458379 0.0588925 -0.00503856 +-0.0385014 0.119389 0.0303589 +-0.0647267 0.0417808 0.0373932 +-0.0226655 0.0537608 -0.0296706 +-0.0584982 0.105689 0.0406051 +-0.0137228 0.0685659 -0.0377913 +-0.0817302 0.142079 0.0441697 +-0.0426358 0.0548841 -0.0113796 +-0.0135008 0.082884 0.0573146 +-0.00338001 0.130095 0.0228247 +0.0172769 0.0708593 -0.0295557 +-0.0246932 0.065394 -0.0335995 +-0.0314011 0.178523 -0.00645128 +-0.0575589 0.154615 -0.000238768 +-0.0407441 0.0753914 -0.0183192 +-0.084936 0.144668 0.0388142 +-0.0365092 0.108385 0.0376381 +-0.0851088 0.102115 0.000391121 +-0.0646522 0.0642554 -0.00503339 +-0.0754983 0.145823 -0.00786764 +-0.0474148 0.133778 0.0200381 +0.012958 0.0904818 -0.0298536 +-0.0425054 0.0705013 0.0420152 +0.0369946 0.0686204 -0.0137746 +0.0462743 0.0775122 0.0165366 +-0.0417874 0.128546 0.00302224 +0.00250208 0.0547919 0.0536548 +-0.0543206 0.140979 0.0284164 +-0.0492132 0.138613 0.0153977 +-0.0204064 0.162527 -0.00684616 +-0.0194926 0.111309 0.040066 +-0.00849594 0.0829198 0.0577964 +-0.0467773 0.0826601 -0.021013 +-0.0535197 0.0472233 -0.00680686 +-0.0092432 0.169141 -0.0244221 +-0.0594862 0.0804633 0.0433033 +-0.0764447 0.154164 -0.0158984 +0.0585888 0.0538213 0.0151823 +-0.0588396 0.0925945 -0.0203375 +-0.0761105 0.167387 -0.0256061 +0.0432176 0.0401728 0.0130684 +-0.0395679 0.152136 0.0040279 +-0.0685344 0.180035 -0.058648 +-0.0404998 0.0930589 0.0424923 +0.0428754 0.100088 0.00417324 +-0.0320271 0.0553591 -0.0124271 +0.0199862 0.0348656 0.0241629 +-0.069479 0.123198 0.0530616 +-0.0239594 0.117024 -0.0138685 +-0.013157 0.175712 -0.0209577 +0.00451102 0.0674972 0.0557889 +0.0304128 0.0431004 -0.0051324 +-0.0887794 0.151473 0.0131594 +0.0317917 0.0949031 -0.0164462 +0.0342895 0.112223 -0.00202032 +-0.0728652 0.170808 -0.0480355 +0.0253565 0.075473 0.0472224 +-0.0754952 0.15561 -0.00190651 +0.060278 0.0581371 0.013168 +0.00444274 0.131539 0.0170385 +0.00950273 0.0546854 0.0525766 +-0.028415 0.178753 -0.00594863 +-0.011518 0.0431769 0.0500228 +-0.0504724 0.141671 0.0164028 +-0.0424936 0.045133 0.0413379 +0.0207994 0.125738 0.00307388 +-0.0689469 0.0433261 0.00632212 +0.0111753 0.0766426 0.0548499 +0.0297504 0.0462054 0.0339396 +-0.0674791 0.0622216 0.0214031 +0.0131787 0.0793804 0.0542326 +-0.0630395 0.136976 -0.00741235 +-0.0026931 0.0386465 0.0251959 +-0.0862725 0.103636 0.0233541 +-0.072832 0.162419 -0.0389636 +-0.0670825 0.156321 0.0197603 +-0.0572305 0.057508 0.0152056 +-0.0876158 0.136354 0.00421533 +-0.0214752 0.0609386 0.0459919 +-0.007347 0.0952877 -0.0329727 +-0.0613578 0.0586321 0.0151557 +0.00350505 0.0590839 0.0549927 +-0.0372275 0.160948 0.000450465 +-0.0457572 0.0336839 -0.00997088 +0.0106658 0.0351593 0.00371028 +-0.0714997 0.16363 -0.0138384 +0.00840839 0.117161 -0.0162388 +-0.0493716 0.143224 0.00839291 +0.0251748 0.123444 0.0203849 +0.0329112 0.096871 0.0389677 +0.044554 0.0917551 0.0201604 +-0.0384935 0.0562767 0.0397971 +-0.0785284 0.123123 0.0516319 +0.0426769 0.101505 0.0101616 +0.00833271 0.0567886 -0.0305627 +-0.0876135 0.100396 0.0230423 +-0.0327059 0.0779055 -0.0285245 +0.0119151 0.0860485 0.0542349 +-0.0675927 0.17056 -0.0354212 +-0.0807265 0.0770568 0.0269252 +-0.0384859 0.0520062 0.0392089 +0.0452145 0.0482364 0.0300085 +0.0204736 0.0851385 0.0500118 +-0.0600179 0.155783 0.0193707 +0.0164701 0.0976264 0.0474551 +-0.0456663 0.0410589 -0.0152981 +-0.0821974 0.128571 0.0521036 +-0.0304964 0.0974331 0.0445755 +-0.0540878 0.128312 0.0358453 +0.0390858 0.0407779 -0.000614316 +-0.0725241 0.13724 0.0489632 +-0.0620129 0.0587144 0.0113478 +0.0455822 0.0848004 0.0171734 +-0.0839185 0.112898 0.00127069 +-0.0728197 0.155564 0.00463235 +0.0277412 0.121021 0.0227689 +0.0301995 0.0768447 0.0437008 +-0.0106344 0.174261 -0.0225996 +-0.0617342 0.0737271 -0.0167014 +-0.0414956 0.0464933 0.0408152 +0.03243 0.0535036 0.0361605 +-0.0377322 0.150234 -0.00179971 +-0.0847627 0.109032 0.02334 +-0.0642974 0.167953 -0.0385345 +-0.0221614 0.0825281 0.0558751 +-0.0504951 0.0960175 0.0443724 +-0.0508177 0.0501221 0.014822 +-0.0436492 0.0577877 -0.0118151 +-0.0189776 0.0390241 0.0529956 +-0.0623698 0.169401 -0.0505859 +-0.0105368 0.0850533 -0.0384463 +-0.0181795 0.183113 -0.0176247 +0.0314401 0.110365 -0.00894711 +-0.0127075 0.065682 -0.0367743 +-0.0273345 0.172717 -0.009826 +-0.0666857 0.141706 -0.00893584 +0.0408833 0.10285 0.0201769 +-0.0876525 0.145908 0.0330215 +-0.0436328 0.056346 -0.0115255 +-0.0611631 0.0428583 0.0256966 +-0.0330915 0.16076 -0.0136886 +-0.085208 0.150101 0.00618898 +-0.0615069 0.172523 -0.0575905 +0.0555907 0.0604655 -0.000426808 +-0.0850315 0.151395 0.00719993 +-0.0728007 0.0864364 -0.0158265 +-0.003188 0.127967 0.0287063 +0.0455462 0.0861954 0.016167 +-0.0217098 0.115215 -0.0159934 +-0.0414975 0.0916447 0.0424797 +0.0487043 0.0430197 0.0122221 +-0.0869351 0.106366 0.0163624 +-0.0156753 0.0541059 -0.0332392 +-0.06162 0.150156 -0.00124665 +-0.00577101 0.098213 -0.0280417 +0.0223236 0.0550419 -0.0260567 +-0.00429403 0.131101 0.0138416 +-0.0636168 0.143654 -0.00954122 +-0.0855598 0.0912595 -0.00155473 +-0.0404413 0.10705 0.0387043 +0.0547917 0.0553704 0.0263503 +-0.0822116 0.101996 0.0303518 +-0.0437463 0.128889 0.0155826 +-0.0664819 0.0397537 -0.00588584 +-0.067283 0.161835 -0.0137578 +-0.061699 0.0599431 0.00295203 +-0.0715633 0.170815 -0.0500445 +-0.0861137 0.0805676 0.00950062 +-0.0502228 0.125461 0.0326401 +0.0589666 0.0552427 0.017183 +-0.0327176 0.125444 0.0196276 +-0.0632934 0.151996 -0.00122225 +-0.0512927 0.135429 -0.000552487 +-0.0184842 0.0897075 0.0555921 +-0.0260646 0.11803 -0.0129143 +0.0198889 0.0631747 0.0480195 +-0.0465912 0.145038 0.00283923 +0.0534733 0.0728245 0.019221 +-0.0352804 0.0341155 -0.0193879 +-0.0829241 0.126549 -0.00467577 +0.0279852 0.0352646 0.0181572 +-0.0531741 0.150869 0.0213978 +0.0202497 0.0347399 0.020698 +-0.062763 0.149042 -0.0175788 +0.00226918 0.115596 -0.0185376 +0.0250704 0.12404 0.011788 +-0.045498 0.101529 0.0420301 +-0.058497 0.0426323 0.0447374 +0.0455164 0.0904085 0.0121603 +0.0215692 0.0352857 0.025924 +-0.0274987 0.0631476 0.0380009 +-0.0140602 0.172758 -0.0187663 +0.0587826 0.0538552 0.0121765 +-0.0628795 0.15219 -0.00958093 +-0.0468135 0.1536 0.00939603 +-0.0928405 0.121514 0.033281 +-0.0622964 0.150648 -0.0145762 +0.0475064 0.0611159 0.0308231 +0.00412571 0.107297 -0.0203039 +-0.0703978 0.156305 0.0156818 +-0.053643 0.135335 0.0311995 +0.0067064 0.0341407 0.0184863 +-0.0466442 0.0397388 -0.0142756 +0.0119051 0.0711889 0.0540767 +-0.0447375 0.0357143 0.0441717 +-0.0228183 0.0840509 -0.0381648 +-0.023326 0.122164 -0.00726067 +0.0441999 0.0790177 0.0251667 +-0.0276246 0.160982 -0.00149388 +-0.0399791 0.126816 0.018458 +0.0222264 0.09191 -0.0233017 +-0.0627692 0.156841 -0.0155919 +0.044508 0.0412168 0.00624902 +-0.0731279 0.155455 -0.0309078 +0.0183024 0.0347298 -0.00182982 +-0.01652 0.0715906 0.0550352 +-0.091634 0.141989 0.0201675 +0.0440337 0.0734407 -0.000804833 +-0.0524198 0.0648658 0.0346087 +0.0572481 0.0508905 0.0141872 +-0.0164766 0.111102 -0.0196668 +-0.0418874 0.108498 -0.0194287 +0.0321354 0.0549697 0.0375085 +-0.0644897 0.102874 0.0413067 +0.0465079 0.0583728 0.0318256 +-0.0334582 0.0518969 0.0377238 +-0.0729908 0.139888 -0.00698816 +-0.0534544 0.124093 0.0367404 +0.0173165 0.0622663 -0.028279 +-0.0554104 0.0513256 0.00948897 +-0.014903 0.172738 -0.0182312 +-0.0502115 0.141667 0.015397 +0.0229958 0.0375848 0.0332895 +-0.0749615 0.135451 -0.00681495 +-0.0855353 0.0938173 0.0282665 +-0.069508 0.102769 0.0393316 +-0.0205392 0.0971418 -0.0249761 +-0.0312923 0.0362769 0.0513145 +0.0260175 0.0991397 -0.0189626 +-0.00594641 0.0989148 -0.0267499 +-0.0708605 0.0347825 0.00928864 +-0.0845393 0.103233 0.0269979 +0.0406232 0.0953057 0.0289912 +-0.0456818 0.0650665 -0.0140257 +-0.0326318 0.168236 -0.00522072 +-0.0765723 0.0689281 0.00553415 +-0.0176728 0.049548 -0.0303695 +0.00113463 0.130461 0.00151005 +-0.08699 0.0859713 0.00247197 +-0.0338357 0.095789 -0.0234311 +-0.0304987 0.10293 0.0419798 +0.0336335 0.0713894 0.0398251 +-0.0224957 0.101642 0.0440993 +0.0309373 0.119109 0.0111337 +-0.0734894 0.156164 0.020416 +-0.000755237 0.0740961 -0.035785 +0.0354988 0.0469226 0.030944 +-0.00617179 0.128513 -0.00228639 +-0.00460988 0.0388908 -0.00276124 +-0.0678289 0.135464 0.0458614 +0.0345596 0.114411 0.00388032 +-0.0884532 0.112251 0.0353052 +-0.0709934 0.170517 -0.0295248 +0.0284454 0.0995183 0.0412905 +0.0402167 0.0685122 0.0317439 +-0.0665769 0.0362823 0.0365183 +-0.0765583 0.148625 -0.00886956 +0.0576507 0.0606695 0.00219201 +0.060413 0.0664733 0.017165 +0.022246 0.0835763 0.0498509 +-0.0821459 0.0912329 0.0320422 +-0.0746727 0.145787 -0.00986958 +0.0345089 0.111329 0.0271807 +0.0594367 0.0663847 0.00713811 +0.0282217 0.0664463 -0.0207545 +-0.0619747 0.170963 -0.0535908 +-0.0394944 0.0492076 0.0395541 +-0.0787666 0.165266 -0.0299591 +-0.0749441 0.129634 -0.00796551 +-0.00112962 0.125371 0.0323555 +-0.0154803 0.0500282 0.047966 +0.0153592 0.0953434 0.0487033 +-0.085237 0.147388 0.00618456 +-0.0128008 0.0841443 -0.0388521 +0.024383 0.0518665 -0.0223004 +-0.0342551 0.0766309 -0.0244955 +-0.0670839 0.173532 -0.0453192 +-0.0772544 0.0764799 0.0316515 +-0.0270646 0.053566 0.0376661 +-0.0225205 0.112681 0.0384786 +-0.0884304 0.0874699 0.00847782 +-0.0737584 0.0914853 0.0405847 +-0.064968 0.128232 -0.00872903 +0.000512384 0.127929 0.028588 +-0.0599553 0.0610872 0.0239566 +-0.0384792 0.116679 0.0322191 +-0.0485119 0.112536 -0.0170517 +-0.0304781 0.0523954 -0.0163632 +0.0387588 0.108855 0.00681782 +-0.0406156 0.155109 0.0060988 +-0.0471466 0.149481 -0.0040486 +0.0179495 0.127337 0.00345096 +-0.0395837 0.0336987 -0.0198537 +-0.0633751 0.0344193 0.0288044 +-0.0424853 0.128365 0.0145816 +-0.0364913 0.113889 0.0338295 +0.0353283 0.112832 0.00268414 +-0.0653226 0.0343003 0.0144151 +0.0435313 0.065065 0.0273105 +-0.0795726 0.0867837 -0.00954059 +-0.0104381 0.171321 -0.0205524 +-0.0737003 0.156269 0.0145144 +-0.0733818 0.155466 -0.0289107 +-0.0198527 0.0382258 0.0238627 +-0.0188257 0.0725897 0.0542693 +-0.0778777 0.117832 -0.00599287 +-0.0365049 0.10423 0.0397359 +-0.00948278 0.0978353 0.051868 +-0.0103201 0.0393296 0.0497389 +-0.0876274 0.137747 0.00620032 +0.0416732 0.0819555 0.0304093 +0.0608524 0.0609661 0.0101561 +-0.0767143 0.154218 -0.0048969 +0.0174945 0.0838575 0.0514031 +-0.066433 0.0337378 -0.00503676 +-0.0232113 0.177135 -0.0206374 +0.0100949 0.034771 0.018605 +0.042675 0.0751161 0.0282624 +-0.0866662 0.0833296 0.0114916 +-0.0504965 0.157865 0.00943584 +0.0433406 0.0973216 0.0191637 +-0.0888303 0.0915034 0.00845607 +-0.0555242 0.0415797 -0.00918326 +-0.0337405 0.075174 -0.025488 +-0.0906275 0.137865 0.0211926 +-0.0123027 0.0389534 -0.0136872 +-0.045835 0.0941966 -0.0219229 +-0.0238433 0.163025 -0.0155105 +-0.0522937 0.12758 -0.00475935 +0.0308793 0.0356029 0.0166157 +0.0423563 0.0588819 -0.00453174 +-0.00663392 0.0466819 -0.0297341 +-0.0484493 0.0656843 0.0374132 +-0.0270407 0.125883 0.0113821 +-0.0910269 0.129538 0.0072515 +-0.0455907 0.0447683 -0.0109766 +0.00905498 0.0971664 -0.0248901 +0.00396755 0.0341147 0.00886829 +0.00550365 0.123767 0.0339438 +0.0400787 0.0432895 0.0279756 +-0.00815712 0.126302 0.0298556 +-0.0609217 0.118124 -0.010668 +-0.0141549 0.129252 0.0145753 +0.0274448 0.120188 0.0255104 +-0.0485004 0.111187 0.0370789 +0.0451596 0.0789195 0.0230398 +-0.0138991 0.162654 -0.0155462 +-0.0528814 0.0447887 0.0196824 +0.0277468 0.0465681 -0.0107176 +-0.0580291 0.124109 0.0406616 +-0.0404897 0.0874362 0.0429424 +0.0316544 0.117354 0.0228159 +0.0277648 0.098182 0.0420578 +-0.0391765 0.165177 -0.0125287 +-0.0691207 0.112747 0.0474107 +-0.0614963 0.102908 0.0417081 +0.0393676 0.0927337 0.0325144 +0.0214921 0.125223 0.0232941 +-0.0167077 0.059948 -0.0356741 +-0.0619704 0.118373 0.041992 +-0.0359339 0.109235 -0.0196158 +-0.0150259 0.185694 -0.0231645 +0.0245929 0.0577938 0.0442192 +-0.00233157 0.122878 -0.010278 +-0.0434949 0.0817618 0.042266 +0.0298844 0.0350171 0.0132987 +-0.00424346 0.0409986 0.0479883 +-0.0776115 0.15005 -0.0049035 +-0.0124244 0.108763 -0.0212047 +-0.0798966 0.083235 0.0342815 +-0.0813623 0.104616 -0.00457868 +-0.0167402 0.0671791 -0.0380101 +0.0259555 0.123153 0.0178233 +0.0406613 0.0638232 0.0297482 +-0.0129458 0.117871 -0.0148632 +-0.0708515 0.0937008 -0.0159297 +-0.0688238 0.1383 0.0462399 +-0.0886846 0.136388 0.00720801 +0.0460186 0.0714912 0.0208033 +0.0465334 0.07646 0.0111853 +0.000795729 0.0345137 0.0115011 +0.0318042 0.0661523 0.0406683 +-0.0277917 0.0810724 -0.036339 +-0.012329 0.0361667 0.050366 +-0.0672863 0.151256 -0.0426939 +0.0328851 0.0556122 -0.0127142 +-0.0444939 0.107088 0.0401229 +-0.088037 0.113814 0.026966 +-0.0228073 0.184465 -0.0170667 +-0.00369909 0.0598617 -0.0340393 +-0.0698551 0.16523 -0.017589 +-0.0464984 0.047794 0.0396541 +-0.0756919 0.143067 -0.00582827 +-0.0208788 0.0383361 0.00183886 +-0.0768287 0.154208 -0.00589938 +-0.0147866 0.0799249 -0.0391233 +-0.0699384 0.150598 0.0380766 +-0.0866088 0.126656 -0.00171455 +-0.0792409 0.168033 -0.0359701 +-0.0650871 0.0417056 0.03635 +0.0353256 0.109535 -0.00390394 +0.00651309 0.0828012 0.0562471 +-0.0512535 0.0528689 0.0137817 +-0.0635072 0.0590749 0.0125217 +-0.0892074 0.127019 0.0449806 +0.0451896 0.0875706 0.0191665 +-0.0576689 0.0350157 0.0450337 +-0.0441239 0.129077 0.0169132 +0.00351519 0.0634007 0.0566286 +-0.0456618 0.0741031 -0.0174455 +-0.045802 0.0382259 -0.0192856 +-0.0774749 0.141413 0.0470689 +0.019092 0.0350694 0.0292369 +-0.0721908 0.176974 -0.0457483 +-0.0228049 0.0784515 -0.0385457 +-0.0196863 0.0539295 -0.0316066 +0.0370985 0.0632585 0.0359995 +-0.0097823 0.0613531 -0.0352263 +-0.0518485 0.147799 0.0174109 +-0.0424957 0.11253 0.0356818 +-0.00161218 0.0387745 0.0252993 +0.0432025 0.0777701 0.0272794 +0.0158912 0.0644868 0.0510299 +-0.0624956 0.0861834 0.0447184 +0.0226823 0.0605452 0.0467602 +-0.0345153 0.0780634 -0.0235017 +-0.0693572 0.156301 0.0160519 +-0.0848272 0.110715 0.0391424 +0.00397477 0.0389229 -0.0104191 +-0.0107444 0.0685007 -0.0365794 +0.0105122 0.0673666 0.0542979 +-0.0493982 0.113885 -0.0164603 +0.0292359 0.120576 0.0147663 +0.0143954 0.0433708 -0.024029 +-0.0548811 0.099887 -0.0210509 +-0.0345638 0.113971 -0.0166195 +-0.00945158 0.0346766 0.0453022 +-0.0114995 0.0486859 0.0490069 +0.047721 0.0729559 0.00883547 +0.00782583 0.131487 0.0111342 +0.018385 0.126365 0.000765748 +-0.0801977 0.117632 0.0490824 +0.0508224 0.0446928 0.0102182 +-0.0792484 0.154932 0.0111245 +-0.0616259 0.175734 -0.0596865 +-0.0554957 0.10156 0.042627 +-0.0693451 0.162383 -0.0509602 +0.0464905 0.0624784 0.0299685 +-0.0626979 0.149033 -0.0165859 +-0.027787 0.0838632 -0.0360686 +-0.068908 0.112267 -0.0105177 +-0.0464636 0.157957 0.00818306 +-0.0656199 0.0690554 -0.0100807 +-0.0594903 0.081873 0.0434438 +-0.042501 0.0803745 0.0423542 +-0.0715599 0.0733863 -0.0105456 +-0.00392373 0.129832 0.00104637 +0.0231411 0.0844685 -0.0255261 +-0.0582906 0.0411368 0.01871 +-0.0231503 0.121506 -0.00857745 +0.0353371 0.0534224 -0.00701071 +-0.028498 0.108421 0.0390601 +-0.0161996 0.0386499 0.0314325 +0.0417053 0.0943445 -0.00480688 +-0.037505 0.0874848 0.0436782 +-0.0859867 0.140484 0.00417932 +-0.0394569 0.124785 -0.00795634 +-0.0629125 0.111049 -0.0145904 +-0.0697706 0.0337438 0.00328799 +0.0353216 0.0863185 -0.0174167 +-0.0529232 0.125495 0.0357533 +-0.0145001 0.0870236 0.0569643 +-0.00422597 0.10111 -0.0231367 +0.026954 0.114984 -0.00791167 +0.0123614 0.0509077 -0.0278502 +-0.0705953 0.157132 -0.0018785 +-0.0270301 0.0604609 -0.0294673 +-0.0252429 0.163867 -0.00684922 +0.0164575 0.0900289 -0.0273543 +0.0182356 0.126981 0.00216332 +-0.0276261 0.15573 -0.00786612 +-0.0687195 0.165823 -0.0200644 +-0.0237576 0.0713185 -0.0373359 +-0.0350727 0.157773 -0.0116201 +-0.0115095 0.129073 0.00398865 +-0.000506085 0.0442149 0.046198 +0.0372544 0.109701 0.0220387 +-0.0154921 0.0382096 0.0157388 +-0.0500202 0.131989 -0.0014354 +-0.025472 0.0851651 0.0520429 +-0.0328435 0.125555 0.000439943 +-0.0773991 0.152954 0.0323974 +-0.0504161 0.144734 0.0123765 +-0.0576549 0.124438 -0.00742698 +0.0532901 0.0621073 -0.00218568 +-0.0298754 0.0748068 -0.0335581 +-0.0642433 0.0338438 0.0114826 +-0.0316113 0.0409091 -0.0301005 +0.00142887 0.0392678 -0.00936829 +0.0274179 0.122108 0.0155174 +-0.0144987 0.0884006 0.0568363 +-0.0184962 0.109943 0.0409607 +0.0379028 0.0997575 -0.00879746 +-0.0244855 0.0461464 0.0516096 +0.03717 0.0713299 0.0361376 +0.0442521 0.0804694 -0.00179963 +-0.0693598 0.153979 -0.049866 +-0.045049 0.0367204 -0.0222184 +0.0226853 0.115014 -0.0119595 +0.0308676 0.0713453 0.0410867 +-0.0253533 0.0381958 0.00468802 +0.0115087 0.101793 0.0474223 +0.0122157 0.0346138 -0.0197432 +-0.078807 0.10613 0.032485 +0.0412927 0.101424 0.0211601 +0.0449984 0.0413097 0.00725015 +-0.0614983 0.0861808 0.0447299 +0.0201601 0.0357218 -0.00467829 +-0.0270641 0.0376545 -0.0293745 +-0.0491197 0.137061 0.00540677 +-0.00249881 0.0829011 0.0575494 +0.021052 0.0358187 -0.0026817 +-0.0154895 0.0559453 0.0511175 +-0.0718433 0.0833097 0.0403454 +-0.087976 0.141871 0.0376917 +-0.0787586 0.163869 -0.0289482 +-0.0485008 0.0732772 0.0415918 +-0.0366615 0.0606699 -0.0121541 +0.0262206 0.0435744 -0.00668237 +0.000219502 0.0370979 0.0467851 +-0.00149685 0.0456811 0.047029 +-0.0545635 0.122251 -0.00910565 +-0.0186556 0.0480312 -0.0293255 +0.0387854 0.0701818 -0.0117862 +-0.0654945 0.0398115 -0.0063825 +-0.0437744 0.116579 -0.0153348 +-0.0344901 0.0987486 0.043091 +0.0610023 0.062364 0.012157 +0.0141007 0.120583 0.0346592 +-0.0823269 0.108767 -0.000607289 +0.0214843 0.092023 0.0479434 +-0.070667 0.0763937 -0.014042 +0.021114 0.0592021 0.0480036 +0.0252499 0.0775815 -0.0248688 +-0.0601377 0.0338299 0.0176745 +-0.0579501 0.0592474 0.0206872 +-0.0769058 0.154074 0.0295482 +0.0198639 0.11968 -0.0089705 +0.0022305 0.0754937 -0.0353597 +-0.00780413 0.0840976 -0.0379648 +-0.0611789 0.172541 -0.0596341 +-0.0447417 0.0768063 -0.0185987 +-0.017374 0.0569064 0.0504968 +0.00450466 0.087016 0.0568401 +-0.0709391 0.109631 0.0395791 +-0.0674006 0.0406253 -0.00334064 +-0.0311093 0.169745 -0.00652433 +0.0242906 0.0676576 -0.0247124 +-0.0326084 0.171239 -0.00339173 +-0.0325897 0.0666513 -0.0194517 +0.0319052 0.0437397 0.0295375 +-0.0450254 0.127281 -0.00449582 +-0.0226309 0.0478785 -0.0276417 +-0.0583127 0.0580812 0.00726379 +-0.037778 0.0827556 -0.0219531 +-0.0518874 0.106988 -0.0190452 +0.0163996 0.044784 -0.0236657 +0.0103374 0.0553349 -0.0300221 +0.0206753 0.126786 0.0115854 +-0.0850979 0.131233 0.0492505 +-0.0192324 0.177141 -0.0234526 +-0.0199616 0.0697296 0.0526775 +-0.0561055 0.158254 0.000206899 +-0.055732 0.115927 -0.0145408 +-0.0417663 0.162365 0.00442786 +-0.0305905 0.119479 -0.0103702 +0.0234999 0.0955508 0.0464417 +-0.0498856 0.149233 0.0119087 +-0.0154824 0.185702 -0.0219175 +0.00917376 0.125511 -0.00726227 +-0.0913426 0.147495 0.0231401 +-0.00381375 0.0896299 -0.0357356 +-0.0686943 0.154419 0.0308917 +-0.02552 0.111233 0.0379672 +-0.0705473 0.1414 0.0460484 +-0.00201946 0.100869 0.0458524 +-0.0876244 0.129442 0.00130199 +-0.00449535 0.0965559 0.0536663 +-0.0271292 0.0850573 0.0494379 +-0.0914908 0.1337 0.0152201 +0.00523694 0.126704 0.0302977 +-0.0470651 0.153179 -0.00606436 +-0.0672153 0.156284 0.0168104 +-0.0427934 0.0869807 -0.0215837 +0.0423379 0.0683118 0.0277209 +-0.0295859 0.0790353 -0.0345348 +-0.0477964 0.062891 0.036824 +-0.00968443 0.0570101 -0.0338896 +0.0451851 0.0861731 0.0211635 +0.00951284 0.0532319 0.0521285 +0.0302906 0.0787129 -0.0208549 +-0.0738862 0.104992 -0.0108534 +0.0453646 0.0575572 -0.00557548 +-0.0663103 0.0759418 0.0397029 +0.0143833 0.128699 0.00214848 +0.00580886 0.130668 0.0218239 +-0.0131274 0.0387957 -0.00624825 +-0.00997898 0.172997 -0.0279186 +-0.0620827 0.174072 -0.0556227 +-0.0546337 0.0334816 0.0119976 +0.0208676 0.121124 0.0316774 +0.0220436 0.125932 0.0163676 +0.0377227 0.0561747 0.0314909 +-0.0721609 0.147032 -0.0238695 +-0.0738111 0.0907253 -0.0150698 +-0.0362217 0.0335837 -0.0228111 +0.0387097 0.105846 2.20656e-05 +-0.0556277 0.0365615 0.0468082 +-0.0836005 0.0763298 0.006515 +0.0280677 0.100848 0.0407486 +-0.0831241 0.100626 0.0298981 +-0.0305493 0.0479587 -0.0242789 +0.0165747 0.0519808 0.0466207 +0.0447673 0.0847221 0.00118921 +-0.0146056 0.0435263 -0.0269315 +0.0273074 0.0346174 0.0112772 +-0.0683005 0.139737 0.0452157 +-0.0485925 0.132707 0.00186362 +0.00897502 0.113705 0.0394792 +0.010104 0.0343592 -0.0200136 +-0.0769339 0.126684 -0.00758482 +0.00350625 0.0547769 0.0535608 +-0.0850528 0.0993835 -0.000573805 +0.00144009 0.0350568 0.0184024 +-0.0301745 0.17266 -0.0167996 +-0.0732751 0.148715 -0.0303812 +-0.0837086 0.0952625 0.0306499 +-0.0742711 0.149885 -0.0318724 +-0.00654578 0.0384949 0.010053 +-0.0248989 0.0968475 -0.0246804 +-0.0633856 0.148243 -0.0195768 +-0.0647288 0.126998 0.0468559 +-0.058406 0.0598457 0.000248469 +0.0425358 0.0710418 0.0280089 +-0.0915343 0.140602 0.0181819 +-0.0407824 0.116214 -0.0149415 +-0.0445073 0.0491885 0.039305 +0.0294698 0.0801098 -0.0210213 +-0.0277559 0.0348695 0.0499059 +-0.0137302 0.107232 -0.0215702 +-0.0482685 0.037339 -0.0123839 +-0.0673815 0.0659915 0.0287149 +-0.0567046 0.11983 0.0390246 +0.0211901 0.113994 0.0360983 +0.0319596 0.11565 0.0257836 +-0.050462 0.0402796 0.0458238 +-0.0364752 0.09732 0.0430461 +0.00119043 0.0895238 -0.0341779 +-0.0699807 0.149351 0.039589 +0.0439472 0.0917185 0.0231564 +-0.0559199 0.113507 -0.0160179 +-0.0853556 0.095327 -0.00158429 +-0.0662723 0.154476 -0.00173975 +-0.0186027 0.111108 -0.0196906 +-0.0563562 0.140993 0.0307629 +-0.00358231 0.0383094 0.0162632 +-0.0568935 0.0562594 0.000567085 +-0.00649422 0.0590504 0.0549316 +-0.0245507 0.183147 -0.010424 +-0.032468 0.175717 -0.00291757 +-0.0132616 0.175663 -0.0275653 +0.00407218 0.0361395 0.0234015 +-0.00250245 0.104479 0.0441797 +0.00787676 0.127927 0.0283381 +-0.0760841 0.164579 -0.0198769 +-0.0814657 0.130234 0.0522094 +0.0322493 0.109934 -0.00848346 +-0.0747758 0.152715 -0.0228916 +-0.0360726 0.1261 0.0198793 +0.00651921 0.0869957 0.0564058 +-0.0863282 0.151358 0.00923307 +-0.00766666 0.0527037 -0.0328501 +0.0329828 0.110047 0.0302661 +-0.0819069 0.0844754 0.0320139 +0.020413 0.0521197 0.0451417 +-0.043267 0.149185 0.00566881 +0.03267 0.0767015 -0.0187757 +-0.0861456 0.140625 0.0415389 +-0.0665323 0.154667 0.00252946 +-0.0231566 0.158136 -0.0102789 +-0.0217907 0.0957944 0.0466571 +-0.0638349 0.156748 -0.0426051 +-0.0346441 0.117803 -0.0126135 +0.00980894 0.0658051 0.0545289 +-0.080258 0.0859229 0.0345477 +-0.0117542 0.0386862 -0.015202 +-0.080536 0.135397 0.0502642 +-0.0325368 0.0792892 -0.0295289 +-0.0784828 0.0717889 0.00251767 +-0.00149343 0.0883979 0.0566431 +-0.0137942 0.0386802 -0.0156021 +-0.0444896 0.101534 0.0420576 +-0.00192307 0.107424 -0.021877 +-0.0440699 0.153194 -0.00699527 +0.00318991 0.0880718 -0.0337792 +-0.0344943 0.0718865 0.0415833 +-0.030416 0.0692532 -0.0284548 +-0.0622359 0.167822 -0.0495929 +-0.0344858 0.100109 0.0424402 +0.00649387 0.0590149 0.0539921 +0.0360791 0.111295 0.00152105 +-0.0587368 0.0434475 0.0440841 +-0.0417025 0.0666657 -0.0153449 +-0.0533816 0.0513995 0.0117052 +-0.0285002 0.097396 0.0440561 +-0.0690491 0.153118 -0.0485047 +-0.0144923 0.093841 0.0546527 +-0.0633747 0.036885 -0.0080479 +-0.0706693 0.165215 -0.0479768 +0.0127157 0.0350729 0.0423657 +0.00853944 0.100396 0.0475311 +0.0211162 0.126093 0.00605375 +-0.0514924 0.113914 0.0348157 +0.0172187 0.117738 -0.0128881 +-0.01069 0.0969192 -0.0307004 +0.0121568 0.0930338 -0.0284961 +-0.0772387 0.158974 -0.0142914 +-0.0667905 0.0852019 -0.0183581 +0.0154254 0.0834009 0.0522607 +-0.0487147 0.0723044 -0.01565 +-0.0464696 0.0675313 0.0396048 +-0.0110203 0.0383532 0.0129011 +-0.0205151 0.114503 -0.0172551 +-0.0556769 0.0499718 0.00979142 +-0.0503626 0.0642656 0.0349674 +-0.00189958 0.130575 0.00323807 +-0.00749418 0.0533074 0.0526841 +-0.0781504 0.0736081 0.0268981 +-0.00216638 0.09997 -0.023881 +-0.0374964 0.119384 0.0304732 +-0.0237883 0.0932085 0.0487292 +-0.0846322 0.139314 0.044315 +0.00579995 0.0355749 0.0242599 +-0.0498385 0.0970763 -0.0221981 +0.0311277 0.0795524 0.0433085 +-0.080771 0.105947 -0.00458985 +-0.0541694 0.136721 0.0304424 +-0.0158788 0.038593 -0.0159367 +0.0375503 0.0588742 -0.00872526 +-0.0278572 0.0972984 -0.0239915 +-0.0609119 0.0678343 0.0355003 +0.0406749 0.0801882 -0.00878559 +-0.0891047 0.101026 0.0153901 +0.0370023 0.11146 0.00905905 +-0.00649525 0.0576581 0.0543368 +0.0215982 0.0645366 0.046975 +-0.0290293 0.160675 -0.0139931 +0.00903586 0.100133 -0.0220275 +-0.0584961 0.104303 0.041452 +-0.0664115 0.162305 -0.0579417 +0.0239006 0.0520481 0.0413924 +-0.0216874 0.126575 0.00458035 +-0.0485184 0.0438796 0.0435224 +-0.0231474 0.0384868 -0.00611954 +-0.00826521 0.0380456 0.0491273 +-0.0528526 0.147782 0.0214111 +-0.0907516 0.137857 0.0201957 +-0.0758557 0.103473 -0.0101675 +-0.0397582 0.079747 -0.0196231 +-0.0147733 0.078434 -0.0385776 +0.00381296 0.0379313 -0.0132938 +-0.0694673 0.0635361 0.0216095 +-0.0528954 0.105563 -0.0191967 +0.0343906 0.0529675 -0.00763383 +-0.0293172 0.172724 -0.00740528 +0.00850711 0.0688384 0.055257 +-0.016261 0.181575 -0.0262548 +0.0213104 0.0415776 -0.0147 +-0.0780733 0.100357 -0.00962255 +-0.0846334 0.108922 0.00436756 +-0.0186964 0.0569405 -0.033635 +-0.037924 0.175153 -0.00739726 +-0.049768 0.081217 -0.020889 +0.0335081 0.0942386 0.0398247 +-0.0729901 0.154042 -0.0338982 +-0.0233975 0.156883 -0.00572928 +-0.0873262 0.103661 0.0203534 +-0.0501055 0.129693 0.0310292 +0.029581 0.0907082 -0.0200166 +0.043329 0.066441 -0.000599376 +-0.00664168 0.0482162 -0.0304375 +0.021889 0.0963552 -0.0220144 +-0.0265893 0.161003 -0.00174275 +0.044803 0.0945847 0.0121616 +-0.0725608 0.109721 0.0409258 +-0.0372497 0.126436 -0.00264816 +0.005339 0.0971934 -0.026912 +-0.0241177 0.120704 -0.00972559 +-0.0462757 0.0390662 0.0448146 +-0.00565778 0.12946 0.000751082 +0.0213227 0.122349 -0.00385694 +-0.0414913 0.0790271 0.0430475 +0.0190905 0.127062 0.0195525 +-0.0805286 0.124537 0.0519983 +-0.0782836 0.0860139 0.0367982 +0.0219644 0.126042 0.013483 +-0.0325696 0.0410226 0.0505793 +0.0295979 0.039453 0.0274445 +-0.0475678 0.0446906 -0.0104074 +-0.0654918 0.0917539 0.043991 +-0.0307813 0.122738 0.0233033 +-0.0854845 0.112639 0.0445732 +0.0231366 0.0404268 -0.00664294 +-0.00398687 0.126095 0.0313534 +-0.0641503 0.0436305 0.0113748 +-0.0314872 0.0646167 0.0387865 +-0.0776274 0.0692865 0.00957677 +-0.0195579 0.0946763 0.0515134 +0.014517 0.0344542 -0.0117299 +-0.0376663 0.0621956 -0.0129723 +0.00459507 0.101613 0.0450146 +-0.0281642 0.0346776 -0.0203658 +0.0147654 0.125019 -0.0047274 +-0.0344283 0.0338921 0.0139586 +-0.0364985 0.117968 0.0313259 +-0.0456444 0.0592254 -0.0120696 +-0.0260288 0.0381935 0.00636573 +-0.088169 0.124336 0.0468831 +-0.0540681 0.135339 -0.00310003 +-0.0291607 0.171183 -0.0175503 +0.0104455 0.0488162 0.0487077 +-0.0881632 0.0861128 0.0124706 +-0.0258758 0.0578187 0.0391737 +0.00450037 0.0427385 0.0456181 +-0.0537204 0.0491564 0.0326591 +0.0388727 0.0645792 -0.00975725 +-0.0500679 0.0501277 0.0166633 +-0.0669104 0.120913 -0.00889891 +-0.036233 0.0469115 -0.0220883 +-0.0118859 0.163867 -0.0168515 +-0.0619905 0.129678 -0.00799355 +-0.0652279 0.0397522 0.0288372 +-0.0508809 0.104197 -0.0202021 +-0.00186382 0.104504 -0.0225214 +-0.0619023 0.120903 -0.00899386 +0.00323955 0.0754773 -0.0351385 +-0.0384934 0.105604 0.0386511 +-0.0905225 0.118622 0.0053153 +-0.0284893 0.0835322 0.0466293 +0.00823162 0.0387858 0.0309201 +-0.0616053 0.156855 -0.0285887 +-0.0508615 0.101367 -0.0215394 +-0.0318582 0.102916 -0.0222908 +0.00526525 0.0350275 0.0444668 +-0.0646344 0.0337755 0.00968147 +-0.0640121 0.136992 -0.00763419 +-0.0456074 0.0345826 0.0394197 +-0.0864043 0.111678 0.00530063 +-0.0207807 0.0581858 0.0468036 +-0.0608886 0.105445 -0.0177606 +0.0417928 0.0746499 -0.00676608 +0.0195225 0.0821843 0.0511684 +-0.0464961 0.0833304 0.0442498 +0.0164933 0.119532 0.0345952 +-0.0626731 0.158367 -0.0396045 +0.00725591 0.129807 0.000165614 +-0.0909094 0.114612 0.0400043 +-0.0496217 0.0532216 -0.00894483 +-0.0204558 0.0772045 0.0549311 +-0.0225647 0.184728 -0.0122995 +-0.0389284 0.111648 -0.0181691 +-0.0312712 0.125373 0.00251041 +-0.0157734 0.075693 -0.0388238 +0.0245364 0.0862451 0.0478999 +-0.0296756 0.125596 0.0148252 +-0.0446861 0.130064 0.0166863 +-0.0225936 0.0382891 0.00334965 +-0.0787949 0.0758277 -0.00557109 +-0.0665305 0.155586 -0.0523326 +-0.0631388 0.0620641 0.0242 +0.0275571 0.0875682 0.0452466 +-0.0838788 0.153353 0.0242347 +-0.0365497 0.124951 0.0226726 +0.0318595 0.0673315 0.0407335 +0.00950257 0.0896505 0.0545501 +-0.0597218 0.118329 0.0399103 +-0.0840037 0.0992695 0.0294026 +-0.0777723 0.0832737 0.0363717 +0.0427594 0.0986702 0.00117933 +-0.0422677 0.111306 -0.0177858 +-0.0762231 0.16043 -0.0125715 +-0.0634008 0.115527 0.0417242 +-0.036507 0.106984 0.0382357 +-0.0384749 0.0351927 -0.0135871 +-0.0744578 0.144386 -0.00789461 +0.0593202 0.0701868 0.012517 +-0.0226744 0.0522819 -0.0290541 +-0.0875766 0.122583 -0.000713178 +-0.0170034 0.127025 0.0015954 +-0.0705369 0.155342 -0.0479286 +-0.0709342 0.128224 -0.00904999 +0.00705252 0.0346309 0.0397936 +-0.0585604 0.133937 0.0364008 +-0.0863384 0.102179 0.00442425 +0.0107631 0.0671702 0.0541647 +-0.0695537 0.163673 -0.0146023 +-0.0452915 0.1298 0.0046882 +0.00836647 0.0494746 -0.0282442 +-0.0691053 0.0641529 -0.000471523 +-0.0065051 0.0518538 0.05236 +-0.0557789 0.0811944 -0.0212002 +-0.0801928 0.109885 0.0408487 +-0.0136098 0.0997657 0.0454373 +0.0375013 0.045461 0.0306904 +-0.0857877 0.152992 0.0221351 +-0.00139702 0.0346206 0.0416594 +-0.0501963 0.061364 0.033592 +0.0161097 0.0974052 -0.0230873 +-0.0194917 0.0568426 0.0483686 +0.0492985 0.0561391 -0.00508332 +0.0184753 0.100361 0.0464541 +-0.0504953 0.154968 0.0107183 +0.0147875 0.105075 -0.0193 +0.023524 0.11536 0.0341991 +0.0310013 0.118944 0.0140014 +-0.0172406 0.178621 -0.0252251 +-0.0367055 0.112873 -0.0174612 +-0.026888 0.0344315 -0.0290471 +-0.052616 0.0542078 0.012269 +-0.0374932 0.0478153 0.0397186 +-0.0727381 0.151148 -0.0398146 +0.0042421 0.0740405 -0.0347398 +-0.0170835 0.187214 -0.0216216 +-0.0744375 0.0658205 0.00791081 +-0.0225303 0.159751 -0.00283877 +-0.015413 0.0343578 -0.0194213 +0.0138178 0.034673 0.033937 +-0.0756035 0.0846721 0.0383975 +-0.0823671 0.0939609 0.0321712 +-0.0597053 0.0675469 -0.0111319 +-0.0911321 0.146088 0.0161475 +0.0350128 0.0797448 -0.0167143 +-0.0835371 0.151134 0.0310567 +-0.0125098 0.0759113 0.0569785 +-0.014877 0.12853 0.00563728 +-0.067594 0.162379 -0.0559888 +-0.0299722 0.0523401 -0.0183637 +-0.0175125 0.109971 0.0410978 +-0.0602175 0.0443014 -0.00489461 +0.047415 0.0539813 0.0314992 +-0.0695317 0.0366687 -0.00405392 +-0.0710533 0.04057 0.0057746 +-0.0594926 0.112518 0.0361699 +-0.0870454 0.128039 -0.000695727 +-0.0548606 0.0532734 -0.00439052 +0.0197584 0.121448 -0.00690816 +-0.0217284 0.0919768 0.0523353 +-0.0331407 0.073693 -0.0254949 +-0.0165233 0.0472885 0.0494939 +0.0430185 0.100102 0.00517011 +-0.0941673 0.124186 0.0242853 +0.0398988 0.106999 0.0131638 +-0.0388567 0.0985732 -0.0220835 +-0.013744 0.0347692 0.0478272 +0.0525444 0.0728335 0.00848027 +0.0340202 0.108707 0.0300072 +0.0135389 0.0341511 0.00148413 +-0.0255703 0.121939 -0.00698176 +-0.0627659 0.0795658 -0.0187488 +0.0159163 0.0366121 0.0434543 +-0.0677812 0.0823162 -0.0178553 +-0.00231448 0.129778 0.000344647 +-0.0224096 0.15809 -0.00961754 +-0.0369427 0.15804 0.00437449 +-0.0557441 0.0768187 -0.0193441 +-0.0661875 0.165349 -0.0586121 +-0.0764308 0.11585 0.051182 +0.00923994 0.0795457 -0.0327494 +-0.0141356 0.103403 -0.0235224 +-0.0725643 0.165173 -0.0170441 +-0.0708131 0.0922561 -0.0160967 +-0.052837 0.143168 0.022419 +-0.0289488 0.0487095 0.0453204 +-0.033511 0.104273 0.0404948 +0.0173468 0.0552065 -0.0282783 +-0.0643722 0.0392301 0.0399397 +0.0154605 0.100515 0.0471558 +-0.0389991 0.0361252 0.0429011 +-0.0912831 0.133698 0.0142161 +-0.042206 0.166657 -0.0103803 +-0.0829702 0.111001 0.0428895 +-0.0244677 0.122018 -0.00707965 +-0.00847955 0.107265 0.0437628 +-0.0410173 0.12678 -0.00403845 +-0.00247117 0.091392 -0.0349524 +-0.0733228 0.17276 -0.036126 +-0.0584972 0.102936 0.0420973 +-0.0275816 0.0549129 -0.0253866 +-0.0567567 0.0416998 -0.00856929 +0.00796329 0.0376774 0.0282412 +-0.0764966 0.130271 0.0529935 +-0.0385029 0.0346069 0.040918 +-0.0178242 0.0882801 -0.0380186 +-0.0592916 0.0381211 0.04617 +-0.0507734 0.0826521 -0.0214824 +-0.011501 0.0787467 0.0576654 +0.0135076 0.115425 0.0371825 +-0.0649944 0.132589 -0.00831046 +0.00449953 0.0474774 0.0501288 +-0.0183564 0.0639745 0.0512546 +-0.0454992 0.0425256 0.0437126 +0.00186325 0.0380873 -0.0138264 +0.0213321 0.100802 0.0450693 +-0.0855641 0.121149 -0.00272592 +-0.0898794 0.136494 0.0232114 +-0.0498262 0.0941747 -0.0218116 +0.0413792 0.0533854 -0.00680998 +-0.0912918 0.11477 0.0353243 +0.0585317 0.0565811 0.0212119 +0.000449556 0.130948 0.00412356 +-0.0343831 0.0766477 -0.0234928 +-0.0394659 0.108422 0.0377073 +-0.0477552 0.161949 -0.00697323 +-0.0278288 0.122593 -0.00568164 +-0.0563034 0.124125 0.0396482 +-0.0656415 0.129793 0.0454963 +0.0484031 0.0553841 0.03118 +-0.0455014 0.116621 0.0320048 +-0.0728613 0.102198 -0.0128504 +-0.0867252 0.0994863 0.00342747 +-0.00226785 0.0370021 0.0122687 +-0.0557143 0.0709328 -0.0156898 +-0.0610115 0.132585 -0.00747053 +0.00217526 0.0894962 -0.0338845 +-0.012585 0.0933765 -0.0350613 +-0.0553875 0.143884 0.0305002 +-0.0920989 0.117453 0.031314 +-0.0616144 0.155309 -0.0245851 +0.0502575 0.0602229 -0.00418894 +-0.0735402 0.0708078 0.0302704 +0.00614005 0.103026 -0.0213684 +-0.00271026 0.0669475 -0.0345168 +-0.049518 0.0344739 0.029929 +-0.0525731 0.128311 0.0345149 +-0.0605331 0.151186 -0.000375192 +-0.0866695 0.135213 0.0450386 +-0.0515626 0.0460585 0.0186779 +-0.00891802 0.0982381 -0.0280905 +-0.0170028 0.0977503 -0.0256286 +-0.0541413 0.128093 -0.005327 +-0.0234618 0.0385102 -0.00806272 +-0.0234875 0.125296 0.0010065 +0.0238248 0.0404881 0.03829 +-0.0564079 0.0334582 -0.0027528 +-0.0667678 0.0695012 0.0345692 +-0.00845839 0.0346349 0.045549 +-0.0748544 0.15611 0.0141114 +-0.0718277 0.141507 -0.00801564 +-0.0263582 0.120444 -0.00943021 +-0.0384861 0.0847024 0.0437961 +0.0154742 0.126309 -0.00212525 +-0.0329093 0.0461288 0.0451027 +-0.00179731 0.0390446 -0.00419837 +-0.0830843 0.0843065 -0.0045636 +-0.00849798 0.051815 0.0518583 +0.0211703 0.0458979 -0.0197309 +0.0250466 0.0534973 0.0413033 +-0.00301309 0.0994095 -0.0252863 +-0.0286636 0.0662687 -0.0294695 +-0.0275164 0.0588544 0.0372755 +0.021248 0.0707121 -0.0275992 +0.0118973 0.0699023 0.0540919 +-0.0850671 0.0831487 0.00248224 +0.0112963 0.123527 -0.00913288 +-0.0471043 0.0355495 0.00808039 +-0.0305886 0.0341169 0.0127308 +0.0232695 0.0795597 0.0495474 +-0.0781795 0.165241 -0.0349583 +-0.00548333 0.122374 0.0356916 +0.02636 0.0531741 -0.0208871 +-0.0117787 0.0784571 -0.0380559 +-0.0374622 0.0945463 0.043653 +0.0298506 0.0915959 0.0433109 +-0.063716 0.150986 -0.0306408 +-0.0915859 0.128175 0.00825933 +0.0456498 0.0806034 0.02116 +-0.0483119 0.0614742 0.035964 +0.0375235 0.0968947 -0.00979522 +-0.0923144 0.132364 0.0182222 +0.0175115 0.118187 0.0352964 +-0.027798 0.0824702 -0.0362167 +-0.0679219 0.123838 -0.00890383 +-0.0136906 0.0585033 -0.0353384 +-0.0560167 0.0334996 0.00451355 +-0.00170896 0.0655406 -0.0343993 +-0.0134843 0.053101 0.0504987 +-0.0675811 0.143978 0.0427672 +-0.0395371 0.165252 0.00310729 +-0.00177026 0.0987839 -0.0266092 +0.0449905 0.0917771 0.0161555 +-0.0142754 0.0385008 0.0265607 +-0.024936 0.0546494 -0.0284077 +-0.0737754 0.0849525 -0.0153987 +-0.00225491 0.0393816 0.0354457 +0.00953649 0.101759 0.0470503 +-0.030493 0.0731979 0.0402297 +0.0418277 0.0395362 0.0134182 +-0.0622707 0.058834 0.014793 +-0.0042883 0.0999626 -0.0238822 +-0.0511241 0.157581 -0.00475152 +-0.0110467 0.0382737 0.0183997 +-0.0111844 0.110115 -0.0206413 +-0.0906536 0.150215 0.0201223 +-0.0636975 0.0593607 0.0104272 +-0.00965605 0.0527028 -0.0331963 +0.011809 0.0846857 0.0540696 +-0.0439904 0.115156 -0.0158426 +0.00534103 0.0581999 -0.0308279 +-0.00449084 0.119679 0.0378771 +0.00251006 0.102973 0.0437486 +-0.0256326 0.0383152 0.00270994 +0.0101829 0.0893384 -0.0312282 +0.0359735 0.108741 0.0274101 +0.000505152 0.0675448 0.0563482 +-0.0431097 0.0335646 0.0052718 +-0.0748156 0.16245 -0.0339456 +-0.0890383 0.09964 0.0104144 +0.0425362 0.0972508 -0.000830625 +-0.0136711 0.162609 -0.0156561 +0.0241599 0.0418198 -0.00678118 +-0.0181519 0.16827 -0.0202389 +-0.0404977 0.0986657 0.0417206 +-0.0809707 0.15134 0.0022444 +0.0151979 0.0420601 0.0445385 +-0.00221102 0.0959857 -0.0316631 +-0.0329609 0.0709036 -0.0224656 +-0.079699 0.101798 -0.00757602 +-0.0725189 0.144585 -0.0159026 +-0.0466234 0.165492 -0.0068396 +0.0185106 0.12405 -0.00369129 +-0.014344 0.183095 -0.0226028 +-0.0788576 0.105851 -0.00657974 +-0.0240104 0.109837 -0.0203148 +0.00980942 0.110782 -0.0193656 +0.0108601 0.117776 0.0369396 +0.0193075 0.0536075 0.0470681 +-0.0925525 0.131032 0.0242364 +0.00749212 0.131495 0.0152913 +0.00495998 0.131626 0.0157979 +-0.00415159 0.0385426 0.00685716 +-0.0241881 0.038442 -0.0062907 +-0.0114972 0.0870124 0.0568248 +0.0383205 0.0589284 -0.00670105 +-0.050793 0.124044 0.0335488 +0.0216558 0.0436146 0.0415846 +-0.0488766 0.0663121 0.037594 +-0.0460367 0.115268 -0.015925 +0.0354061 0.0981387 0.0355669 +-0.0414966 0.064844 0.0412967 +-0.0492702 0.0334521 0.00412227 +-0.0788564 0.173596 -0.0449928 +-0.0720001 0.0374977 0.00101403 +-0.0745188 0.135846 0.0503978 +-0.0705133 0.0930254 0.0420143 +0.0544062 0.0520207 0.00120422 +-0.016347 0.159993 -0.0102438 +0.00949781 0.0440631 0.0448456 +-0.0123976 0.0991026 0.0482068 +-0.00535711 0.0347531 0.0461025 +0.026456 0.0929171 0.0454329 +0.0245089 0.042142 0.038636 +0.043716 0.0750115 0.0261739 +-0.0839359 0.102045 -0.00261805 +-0.0806754 0.155074 0.0150117 +-0.0689 0.172262 -0.0550342 +-0.0523543 0.073291 0.0414729 +-0.0301406 0.0636155 -0.0234264 +0.0407753 0.0452541 0.0299878 +0.00638455 0.0464233 -0.0264515 +-0.0755977 0.151334 -0.0218791 +-0.00594273 0.0383379 0.0139478 +-0.0600908 0.115373 0.0375616 +-0.0424965 0.0733822 0.0425454 +-0.00260003 0.0405608 -0.0253579 +0.00350637 0.0702767 0.0558823 +-0.0897267 0.135137 0.0262095 +-0.0591547 0.117476 -0.0120923 +-0.024542 0.0428919 0.0537128 +-0.0054972 0.0576157 0.054162 +-0.0397846 0.0841362 -0.0215764 +0.0415613 0.0751972 0.0301802 +-0.0631728 0.0596464 0.0174802 +0.0423363 0.101455 0.00317956 +-0.0533301 0.1416 0.0264013 +-0.0464855 0.0931347 0.0435353 +-0.0629725 0.150532 -0.00369044 +-0.0853889 0.108959 0.00634578 +-0.0909761 0.118636 0.00631645 +-0.0384966 0.101445 0.0410637 +0.0194941 0.107309 0.0406484 +0.0396169 0.0843072 -0.0127653 +-0.0223745 0.0566587 0.0441983 +0.0607493 0.059571 0.0121639 +-0.0844811 0.123027 0.0489478 +-0.0570341 0.144219 -0.00185162 +-0.0723674 0.177806 -0.0472523 +-0.0466801 0.130916 0.0233152 +-0.02246 0.183226 -0.0115124 +-0.0707386 0.165621 -0.0179174 +-0.0739884 0.1541 -0.0249038 +0.00161401 0.13159 0.0117114 +0.0295344 0.0524338 -0.0167463 +0.00137166 0.0465972 -0.0284573 +-0.0349979 0.152158 8.20736e-05 +-0.0459591 0.0424584 -0.0122548 +0.032247 0.0800194 -0.0194064 +-0.0215329 0.0768164 0.0540336 +0.0182351 0.12763 0.00640475 +0.0169629 0.0348939 0.0289563 +0.0193977 0.0490363 -0.0230642 +-0.0596322 0.0604401 0.0228281 +0.0145003 0.108488 0.0407955 +-0.0720741 0.0646161 0.00403373 +-0.0712116 0.15818 -0.0429219 +-0.0175993 0.15966 -0.00802789 +-0.0759222 0.159085 -0.0100036 +-0.0384682 0.15361 0.00387723 +-0.0725333 0.0379686 0.00575754 +0.0455601 0.0904134 0.011166 +0.0375907 0.0937201 -0.0111657 +0.00483671 0.039382 0.0314929 +-0.026559 0.0377408 0.0211248 +0.0385027 0.0454964 0.0307784 +-0.0564952 0.047766 0.0395183 +-0.0198831 0.107284 -0.0222237 +-0.0779551 0.163899 -0.0249456 +-0.0563521 0.0342791 0.0304121 +-0.00751948 0.0746046 0.0579524 +-0.0827498 0.154172 0.0128373 +-0.00710449 0.125174 0.0317411 +-0.0367613 0.0798086 -0.0204262 +-0.036915 0.175546 -0.00898243 +-0.0705043 0.0887655 0.0418556 +-0.0522651 0.0335597 0.0034159 +-0.0677174 0.0409231 -0.00173026 +-0.0113677 0.180126 -0.0253581 +-0.0161521 0.03911 0.0518105 +-0.0690092 0.122845 0.052951 +0.00570986 0.0341754 0.0182505 +0.0184933 0.0865452 0.0498488 +6.3531e-05 0.129314 -0.00119744 +-0.0804587 0.135827 0.0500319 +-0.0754196 0.111293 0.0461553 +0.0424555 0.0902012 0.0271644 +-0.0928081 0.120209 0.0412843 +-0.0634884 0.0789934 0.0424288 +-0.0615251 0.0457206 0.0316818 +-0.0115387 0.0458293 0.048671 +-0.066289 0.0747237 0.0389788 +-0.0173046 0.166847 -0.0129407 +0.0331853 0.116604 0.00769666 +0.0445518 0.069148 0.0246508 +-0.091691 0.12831 0.0342454 +0.0434619 0.0930961 0.0241585 +-0.0678925 0.0435809 0.00801004 +0.0234224 0.0519071 -0.0231048 +-0.0208141 0.0595795 0.0467936 +-0.087519 0.112 0.0410625 +-0.0213082 0.126358 0.00326486 +-0.0606822 0.0362429 0.0450162 +-0.0576914 0.0693962 -0.0144511 +-0.0769716 0.13837 -0.00578148 +-0.0653565 0.1551 0.00564588 +0.0264433 0.0485879 -0.0182655 +0.039746 0.101828 -0.00373788 +-0.0610724 0.144529 -0.00434459 +-0.0662237 0.145026 -0.0176812 +-0.0283728 0.156641 -0.000811787 +-0.00971651 0.0348541 0.0433186 +-0.00481466 0.0868424 -0.0368113 +-0.031088 0.0335574 -0.0273919 +-0.0544366 0.120435 -0.011246 +0.00248882 0.121002 0.0363406 +-0.00349433 0.0911707 0.0563818 +-0.0931447 0.118854 0.0382959 +0.0254683 0.121415 0.0262007 +-0.0467966 0.0336683 0.000813328 +0.0319522 0.103353 -0.0134365 +-0.0633409 0.155276 -0.011594 +-0.0720139 0.180999 -0.0528377 +-0.0164541 0.0630817 0.0527623 +0.016475 0.0352036 0.002978 +-0.00226088 0.124171 0.0334893 +0.0391263 0.0631992 -0.00875738 +-0.0818614 0.114723 -0.0022038 +-0.0930555 0.120208 0.0402916 +-0.0904236 0.116034 0.0273085 +-0.0705028 0.159578 -0.0459334 +-0.0862816 0.117641 0.0480424 +0.0531688 0.0733724 0.0176223 +-0.0578751 0.134121 -0.00585274 +0.0423147 0.091604 0.0271557 +0.0101515 0.071231 0.055077 +-0.0435318 0.087421 0.0430041 +-0.0560394 0.131064 -0.00575471 +0.00125071 0.0712122 -0.0347068 +-0.0348542 0.165303 -0.00316457 +-0.0860328 0.0912972 0.00145067 +-0.00116523 0.0371346 0.0178171 +-0.0637756 0.0795327 -0.0183843 +0.00482779 0.0366504 -0.0137865 +0.0435599 0.0987371 0.0131605 +0.00150087 0.101618 0.0443156 +0.0314312 0.0625198 -0.0186445 +-0.0672777 0.169987 -0.0338702 +-0.0903951 0.118903 0.0450094 +-0.0501563 0.11976 0.0326732 +-0.0750921 0.156856 -0.022942 +-0.0275197 0.109846 0.0382427 +-0.0535612 0.0416919 -0.00977582 +0.0556505 0.0677792 0.00213147 +-0.0685182 0.0368214 -0.0053939 +-0.0780099 0.114072 0.0486721 +-0.0248787 0.0796614 0.0530244 +-0.0638477 0.164736 -0.0283363 +0.0142201 0.0793919 -0.0305544 +0.00713749 0.130032 0.0237524 +-0.0187348 0.175696 -0.0167204 +-0.00682337 0.088234 -0.0365489 +-0.0217663 0.11209 -0.0186927 +-0.0171714 0.0432613 0.0521182 +0.00513012 0.0373402 0.0458408 +0.0461568 0.0626078 -0.00274862 +-0.0412659 0.160879 0.0033623 +-0.0853172 0.110382 0.0233555 +-0.0158006 0.108342 -0.0207487 +0.00813236 0.110171 -0.0197068 +0.0265802 0.0345508 0.0130494 +-0.0660018 0.133981 0.0432166 +0.041807 0.0885902 0.0288907 +-0.024509 0.109889 0.0396002 +0.0354948 0.10491 -0.00909103 +-0.00850916 0.0688709 0.0557558 +-0.054442 0.0373135 0.0469328 +-0.010539 0.0390893 0.0340058 +-0.0858022 0.150106 0.00719342 +-0.0451719 0.0347129 0.0411467 +-0.00510128 0.0385919 0.0229448 +-0.0521978 0.0336397 0.008764 +-0.0162925 0.180099 -0.0261659 +-0.0902934 0.147439 0.0121579 +-0.0793826 0.0705862 0.00854889 +0.0209269 0.0658956 0.0477693 +-0.0116051 0.171103 -0.0260001 +-0.0635102 0.151152 0.0361873 +-0.0865918 0.127084 0.0480364 +-0.0756208 0.166729 -0.0233779 +-0.0507818 0.0840955 -0.0217037 +-0.0623945 0.164686 -0.0405941 +0.0109143 0.034258 -0.00287102 +-0.0326136 0.0384639 -0.0154224 +-0.0883155 0.139178 0.0394996 +-0.0317158 0.0383538 -0.00403424 +-0.00682874 0.0896331 -0.0361816 +-0.060744 0.0766988 -0.0182193 +-0.00743574 0.129906 0.00405669 +-0.0792494 0.0723341 0.0207326 +-0.036173 0.152719 -0.00677506 +-0.0305128 0.10708 0.0396423 +-0.0435905 0.0505542 -0.0107756 +-0.0204554 0.0347978 0.0481157 +-0.0591045 0.0344689 0.0400978 +-0.0840365 0.147342 0.0364323 +0.00340018 0.0348289 -0.0229504 +-0.0693319 0.141141 0.045512 +-0.0561609 0.0344771 0.0355158 +0.00119588 0.0881146 -0.0344258 +0.0583564 0.0538008 0.0181861 +0.0342539 0.0387023 0.0236157 +-0.0264982 0.125984 0.010106 +-0.0611832 0.146298 -0.00395593 +-0.0910251 0.124245 0.0440568 +-0.089862 0.115281 0.0432597 +0.0247433 0.124313 0.0130924 +-0.000820873 0.128641 -0.00248283 +-0.0554557 0.0533368 -0.00338183 +-0.0464641 0.122081 0.0270508 +-0.0451868 0.126658 0.0224837 +0.00145793 0.0977369 0.0519067 +0.0405445 0.0610221 0.0298369 +-0.0744952 0.0941746 0.0398302 +-0.0351234 0.033632 -0.0282515 +-0.0839267 0.145982 0.00417548 +-0.0224934 0.0435545 0.0535652 +0.0159352 0.127804 0.0226817 +-0.0572144 0.154757 0.0232881 +-0.0498753 0.0336124 0.000239655 +-0.0191672 0.0596981 0.049368 +-0.0242921 0.0918773 0.0492675 +-0.0523718 0.133555 -0.00317026 +-0.0557218 0.0723836 -0.0166307 +-0.00457986 0.0361758 -0.0248798 +-0.0737533 0.0901294 0.040627 +-0.00549531 0.10728 0.0439307 +-0.0181568 0.165005 -0.0179156 +-0.0554997 0.108443 0.0389722 +-0.0144882 0.101623 0.0437286 +0.0215585 0.0387445 -0.00669407 +-0.0752039 0.0696978 0.0256249 +-0.0569183 0.115707 -0.0143002 +-0.0731283 0.155734 0.00889607 +0.0347498 0.081125 -0.0176886 +0.00113903 0.131571 0.0129682 +-0.0279379 0.155215 -0.0039665 +0.0438288 0.0860483 -0.00379124 +-0.0202818 0.0386671 -0.01315 +-0.0639713 0.0651159 0.0301523 +-0.0729034 0.123797 -0.00826534 +-0.00948854 0.0965445 0.0534324 +-0.0616146 0.158432 -0.0255892 +0.0348698 0.112104 0.0254475 +0.0462561 0.0792459 0.0151754 +0.0132092 0.0348336 0.0300558 +-0.0650018 0.0435996 0.0108034 +-0.0629926 0.156114 0.0183129 +0.0432806 0.100121 0.0101615 +-0.0634166 0.118511 0.0453283 +-0.0718747 0.151003 0.0373736 +-0.0693203 0.155248 -0.0509683 +-0.058528 0.0400924 -0.008802 +0.0150592 0.0590177 0.0497649 +-0.0136861 0.0570325 -0.0345667 +-0.02332 0.0391695 0.0384733 +0.0410592 0.0985428 -0.00379645 +-0.042915 0.0436274 -0.0183221 +-0.0324875 0.068969 0.0402984 +-0.0927384 0.122733 0.00927055 +-0.0697859 0.156365 0.01735 +-0.0525617 0.0403541 -0.0109145 +-0.0163792 0.186908 -0.0208435 +0.00555045 0.034504 0.00513967 +0.0259201 0.0406241 0.0333279 +0.0340795 0.103399 0.0336714 +-0.0295185 0.0579228 -0.0214101 +0.0443631 0.0475049 -0.00446946 +0.00261537 0.0341134 0.0122343 +-0.0104909 0.104437 0.0435533 +0.0240885 0.124582 0.018553 +-0.084606 0.0993653 -0.00159598 +0.0315994 0.0505647 0.0349136 +-0.0887091 0.0983318 0.0213821 +-0.0109917 0.177231 -0.0295208 +-0.00927372 0.0384768 0.00588152 +-0.0731505 0.0794744 -0.0135813 +0.0377774 0.0672774 -0.012792 +-0.0257539 0.157476 -0.0102144 +-0.0524923 0.0340498 0.0261507 +0.0359032 0.0905437 -0.0158269 +-0.0358241 0.0900699 -0.0240653 +-0.0507764 0.0715485 0.0397729 +-0.0857724 0.0872268 -0.000524277 +0.0122145 0.0850407 -0.0307351 +-0.0818191 0.154205 0.0234297 +0.0239009 0.12202 -0.0014718 +0.0509663 0.0446851 0.0122122 +0.0405026 0.0469928 0.0315524 +0.00123226 0.0769082 -0.0355253 +0.0395203 0.0569025 0.0311403 +-0.0861982 0.144641 0.0372484 +-0.0218898 0.0382146 0.0234539 +0.0278568 0.0643129 -0.0209613 +-0.06664 0.0601639 0.0127094 +-0.0682452 0.17678 -0.058273 +-0.0326534 0.0578275 -0.0120318 +0.0449519 0.0847263 0.00223902 +-0.0243874 0.0379977 0.0213348 +-0.0375049 0.0648832 0.0416292 +-0.049486 0.0531643 0.034537 +-0.00680823 0.0840973 -0.0379387 +-0.00662043 0.0383357 0.0156226 +0.0246827 0.0347978 0.0179097 +0.052528 0.0664738 0.0271694 +-0.017323 0.112508 -0.01916 +-0.0589359 0.0481542 0.00467247 +0.0560814 0.0704234 0.0216351 +0.0445162 0.087501 -0.00181141 +0.0204668 0.0400207 -0.013702 +-0.0828557 0.0979824 0.0311146 +0.0393677 0.0547517 -0.00623241 +-0.0301563 0.0382285 0.0524978 +-0.0740972 0.155492 -0.0239137 +-0.0266047 0.0397022 -0.0293069 +0.0044664 0.0344032 0.010526 +-0.0644057 0.16752 -0.0356951 +-0.085796 0.123875 -0.00272102 +-0.0251727 0.175641 -0.0195733 +-0.0147266 0.0922559 -0.0359307 +0.0166529 0.120978 0.0330533 +-0.0652865 0.1555 -0.0467797 +-0.0622893 0.15065 -0.0135783 +-0.0173344 0.128368 0.0119773 +-0.044366 0.0366412 -0.0232589 +-0.0913152 0.114759 0.0363194 +-0.0647364 0.118589 0.0486106 +0.011956 0.0976358 -0.0233787 +-0.0378922 0.04725 -0.0183117 +-0.079848 0.116269 0.0487575 +0.0431642 0.0987038 0.0171581 +-0.0334777 0.0546734 0.0376709 +-0.0677151 0.171772 -0.0397619 +-0.0124935 0.123722 0.0323282 +-0.00945147 0.0352364 0.0483453 +-0.0729035 0.125275 -0.00849683 +-0.0837744 0.107497 0.00138169 +-0.0529962 0.0461208 0.0157076 +-0.0677529 0.141137 0.0442717 +-0.0840303 0.151908 0.0287412 +-0.0636039 0.0445634 0.0326846 +0.0192911 0.109605 -0.016128 +-0.0838969 0.104764 -0.000610535 +-0.0887185 0.143427 0.0331607 +-0.0929968 0.130998 0.0182299 +-0.0543463 0.160987 0.00512087 +-0.0909281 0.132287 0.0082314 +-0.0354987 0.113848 0.0338946 +-0.0465077 0.088954 0.0443573 +0.0301352 0.0955658 0.0419698 +-0.0199202 0.0381456 0.0185107 +-0.0186134 0.161522 -0.0143726 +-0.0646921 0.0617226 0.0224003 +0.0222832 0.066418 -0.0268569 +-0.0661617 0.0353568 0.0288449 +0.0192795 0.122165 0.0310901 +-0.00560235 0.0406015 -0.0258376 +-0.0404738 0.108409 0.038128 +0.0420248 0.0710795 0.0289899 +0.0450277 0.0945898 0.0071675 +-0.0490784 0.153156 -0.00527602 +-0.00149713 0.0689596 0.0566805 +-0.0709057 0.106531 -0.0119068 +-0.0626824 0.0436041 -0.00418427 +-0.066536 0.166455 -0.0250024 +-0.0218698 0.104438 -0.0229686 +-0.0731886 0.149857 -0.036868 +-0.0122347 0.0392642 0.0504717 +-0.0935435 0.118764 0.0233045 +-0.0797382 0.10948 0.0394939 +-0.0892801 0.091541 0.0104497 +-0.0547119 0.146209 0.0284156 +-0.00241231 0.037367 0.0100902 +0.000818555 0.130756 0.00282721 +0.04586 0.0820013 0.00419826 +-0.0250963 0.0348756 0.0487637 +-0.0673565 0.112647 0.0446949 +-0.0634506 0.15272 2.24523e-05 +-0.0706828 0.180611 -0.0569213 +-0.0205931 0.163965 -0.00888333 +0.0115331 0.101889 -0.0218781 +-0.0664983 0.102849 0.0407048 +0.0185027 0.118159 0.035136 +0.0458454 0.0834099 0.00517797 +-0.00887527 0.109466 -0.0219533 +-0.0858669 0.119072 -0.00140229 +-0.0102872 0.0344076 -0.0184603 +-0.0211482 0.169745 -0.0200914 +-0.00849115 0.111421 0.0423213 +-0.0613599 0.128292 0.04114 +-0.0076798 0.0569676 -0.0334142 +-0.0710297 0.16381 -0.0459687 +-0.0454992 0.112558 0.0357052 +-0.0343115 0.126654 0.00282732 +0.0360267 0.110062 0.0258818 +0.0368044 0.0942002 -0.0116901 +-0.0421812 0.123012 0.0251172 +-0.066012 0.139954 -0.00779963 +0.00198723 0.123051 -0.0105036 +0.0172553 0.072257 -0.0294021 +-0.013113 0.184484 -0.0260544 +-0.072893 0.152634 -0.0368963 +-0.0938278 0.128299 0.0222532 +-0.0675171 0.0409229 0.0105489 +-0.0735479 0.162209 -0.012171 +-0.0517008 0.0626767 0.0322349 +-0.0433082 0.037957 -0.0253239 +-0.0516781 0.0345962 0.0381142 +-0.0046354 0.0467251 -0.0296701 +-0.0777504 0.112676 -0.00382147 +-0.0281162 0.181397 -0.0109687 +-0.047699 0.144615 0.00435323 +-0.0663959 0.148276 0.0393784 +-0.0249816 0.15956 -0.0126947 +-0.00758477 0.0968518 -0.0305822 +-0.019536 0.116371 -0.0152209 +-0.0298632 0.102958 -0.0228236 +-0.0224181 0.05387 0.0440179 +-0.0625128 0.145366 0.0377954 +-0.0843383 0.133967 0.0484219 +-0.00452146 0.0443187 0.0472734 +0.000177098 0.0839833 -0.0361114 +0.0207016 0.113271 -0.0140876 +-0.065484 0.0847424 0.0442074 +-0.0201913 0.175663 -0.0226485 +-0.0364476 0.166788 -0.00019754 +-0.0206091 0.162049 -0.0149623 +0.0350254 0.0700182 0.0383083 +-0.0455491 0.131451 0.0178282 +0.00819795 0.130005 0.00128654 +-0.0353536 0.12061 0.029103 +-0.0271732 0.169704 -0.0183584 +-0.0657382 0.0436129 0.0101245 +-0.0722291 0.166627 -0.044985 +0.0309191 0.0539829 -0.0147501 +-0.0308747 0.056662 -0.0163864 +-0.0867734 0.123909 -0.00174219 +-0.0279078 0.0347965 0.0447705 +0.0191594 0.100268 -0.0222959 +-0.0154293 0.0382918 0.0211029 +-0.0578159 0.0636603 0.0309898 +-0.024177 0.172689 -0.0201134 +-0.0669849 0.0359436 0.0326963 +-0.0879792 0.086094 0.00648058 +-0.0181742 0.169737 -0.0210312 +-0.0170499 0.122405 0.0312344 +0.00906582 0.123154 0.0343752 +-0.034503 0.0874637 0.0428605 +0.0391693 0.108394 0.0111647 +-0.0917004 0.143358 0.0201656 +0.027747 0.0902677 -0.021551 +0.0430843 0.0496743 0.0322331 +-0.0791989 0.150078 -0.000876106 +-0.0259631 0.177171 -0.00957335 +-0.0395279 0.079033 0.0429651 +0.0302372 0.118499 0.00231637 +0.0449793 0.061326 -0.0034541 +-0.0376334 0.0548474 -0.0107543 +-0.0274342 0.111364 -0.0178958 +-0.0315627 0.048073 -0.0232988 +-0.018823 0.121694 -0.0088173 +0.00895989 0.0979651 -0.0237371 +-0.0254423 0.0473682 0.0503166 +-0.046654 0.0606571 -0.0123502 +0.0606526 0.0595573 0.0131644 +-0.0873547 0.094105 0.00537923 +-0.0202891 0.184471 -0.0210772 +-0.093713 0.126863 0.0152623 +0.00938205 0.0449001 -0.0251557 +-0.0903092 0.140666 0.025165 +-0.0676501 0.0667159 0.0297862 +-0.0164899 0.0602176 0.0520938 +0.019355 0.0565693 -0.0275356 +0.0104604 0.0340987 0.00091581 +-0.0785409 0.166665 -0.0309637 +-0.018017 0.0390618 0.0526069 +0.0189962 0.123953 0.0281041 +-0.0814357 0.0734392 0.00553468 +-0.0223732 0.03801 0.0163235 +0.0110271 0.112101 -0.0187639 +0.0456518 0.0904151 0.00617296 +-0.0789509 0.170805 -0.0389931 +-0.0312407 0.0510927 0.0390643 +0.0359235 0.106756 -0.00582268 +-0.0815808 0.0950721 -0.00753639 +-0.0849546 0.0871617 -0.00253673 +-0.0265403 0.0592021 0.0383808 +0.0398305 0.0739567 0.0329917 +-0.00085919 0.0358547 0.00813469 +-0.0747624 0.0700921 -0.00148683 +0.0313786 0.113275 -0.00606229 +-0.0902327 0.124018 0.00527185 +0.0268091 0.0506065 0.038521 +-0.0727909 0.0685075 0.0271607 +-0.0578274 0.0666818 0.0354001 +-0.0738208 0.0921589 -0.0148323 +-0.0390631 0.127858 0.0143467 +-0.00922314 0.174168 -0.0285672 +-0.0035205 0.039017 -0.00265492 +0.0435098 0.098719 0.0141568 +-0.0493916 0.144765 0.00938332 +0.0189816 0.0563976 0.0484166 +-0.0731928 0.064943 0.0125198 +0.0453289 0.0833826 0.0211694 +-0.0211162 0.1638 -0.0163957 +-0.0306102 0.125527 0.00421635 +-0.0262987 0.113585 -0.0162365 +0.0252163 0.1238 0.0175509 +-0.0237403 0.0669252 -0.0352956 +-0.00549562 0.0472961 0.0485942 +0.0045023 0.122399 0.0348631 +-0.0701614 0.178224 -0.0493215 +-0.0173769 0.125333 -0.00267782 +-0.0470115 0.129603 0.00120357 +-0.0317094 0.0374952 0.0310681 +-0.0297217 0.0382812 -0.0035606 +-0.0415986 0.169934 0.00129157 +-0.064505 0.152553 -0.0362048 +-0.0667255 0.178008 -0.0524224 +-0.0236086 0.0335974 -0.0240827 +-0.0156885 0.0555599 -0.0339026 +0.0182783 0.0708328 -0.0291795 +0.0541184 0.0510309 0.0235647 +-0.0765193 0.119025 0.0524244 +-0.0118673 0.0339713 -0.0202424 +0.00548892 0.118228 0.0378342 +-0.067477 0.0336926 -0.00520632 +0.0168316 0.0926978 0.0490711 +0.0255432 0.0768418 0.0475089 +-0.0617634 0.0795901 -0.0189973 +-0.0156786 0.0526029 -0.032522 +0.000420458 0.036172 -0.0244623 +-0.0256593 0.0810401 0.0523557 +0.026836 0.0634537 -0.0220606 +-0.0621975 0.166246 -0.0505873 +0.0578529 0.0523616 0.0171842 +-0.0217254 0.126122 0.00269746 +0.0235742 0.124212 0.0226421 +-0.0578055 0.0883401 -0.0213124 +-0.0798409 0.103395 0.0321858 +-0.0123464 0.178658 -0.023274 +0.0212154 0.0476501 0.0409677 +-0.0342487 0.0752311 -0.0224883 +-0.0230529 0.0839079 0.0553134 +-0.0214993 0.112665 0.0388138 +-0.0327955 0.0873016 -0.0254019 +0.0258836 0.0605349 0.0443599 +-0.0096598 0.0907753 -0.0363722 +0.0450284 0.0875565 0.0211548 +0.0334239 0.0414863 -0.00351395 +-0.0488087 0.138617 0.0133952 +-0.0658054 0.0924099 -0.017991 +0.0104979 0.0896334 0.054299 +-0.0043048 0.123153 -0.010566 +-0.0174665 0.17272 -0.016673 +-0.0344763 0.0561322 0.0383021 +-0.0857072 0.152777 0.0118249 +-0.0575671 0.0494422 0.00671449 +-0.0430533 0.0345113 0.0330204 +-0.065164 0.147357 -0.0239331 +-0.0326268 0.0520227 -0.0107626 +-0.067905 0.106631 -0.013438 +-0.0258738 0.125824 0.0147443 +0.0544233 0.0635568 0.0276516 +-0.0872747 0.139127 0.00719289 +-0.0315055 0.109789 0.0377033 +-0.0763386 0.161799 -0.0152953 +0.0232414 0.0663429 -0.0257954 +0.0174948 0.109841 0.0394103 +-0.0507289 0.129704 0.0318965 +-0.0425042 0.0577064 0.0400486 +0.022545 0.0955327 0.0468247 +0.0403951 0.0475373 -0.00531603 +0.0183271 0.0475932 -0.02269 +-0.0572639 0.0601869 -0.00219809 +-0.0852337 0.104506 0.0248257 +-0.0933098 0.126856 0.0132534 +0.0352918 0.108619 -0.00504659 +-0.0628349 0.0939281 -0.0188357 +0.00277101 0.099815 0.0475918 +-0.0637196 0.147938 -0.020833 +-0.0636347 0.156368 -0.0124044 +-0.0882602 0.111934 0.0373837 +0.0451564 0.0931924 0.00517592 +-0.0883906 0.0874807 0.0144622 +-0.0179879 0.0654395 0.0522544 +-0.0334338 0.0382234 0.0500909 +-0.00283875 0.0389996 -0.00436591 +-0.0295052 0.11528 0.03366 +-0.00151332 0.104469 0.0441334 +0.0194927 0.0906432 0.0481529 +-0.0877693 0.113692 0.0289151 +-0.0661933 0.0335338 -0.00299624 +-0.0273899 0.0499801 0.045145 +-0.0338474 0.0972112 -0.023083 +-0.075849 0.149415 0.0390624 +0.0325609 0.114759 0.0260072 +-0.0821806 0.0776422 0.0235195 +-0.0759474 0.151351 -0.0188826 +0.013384 0.043414 -0.024368 +-0.0077421 0.0340597 -0.0195129 +-0.00965525 0.0511768 -0.0320162 +-0.0677487 0.111258 0.0407689 +-0.0214969 0.0461967 0.0522939 +-0.0466073 0.0518764 -0.00969859 +0.0357625 0.0364791 0.0131618 +-0.0124847 0.111379 0.041672 +-0.079194 0.0832222 0.0349745 +-0.0926331 0.130966 0.0142325 +0.00419789 0.123154 -0.0106599 +0.00969178 0.121836 0.0352946 +-0.0295306 0.123946 -0.00125424 +-0.0711733 0.128436 0.0516087 +-0.0585141 0.0386878 -0.00928985 +-0.0739244 0.0668664 0.00165643 +-0.0424856 0.0410553 0.0431368 +-0.0176939 0.162435 -0.0154936 +-0.00215916 0.0369163 -0.0154166 +0.0205271 0.126116 0.00440152 +0.000359464 0.0907103 -0.0342066 +0.038908 0.0631632 0.033303 +0.0223132 0.124739 0.023599 +-0.070737 0.159582 -0.0449318 +-0.0281334 0.155101 -0.00344078 +0.0323761 0.107397 0.032947 +0.0390072 0.0393837 0.00207442 +0.0420748 0.0457918 0.0297783 +-0.0187683 0.0699858 -0.0381989 +0.0176298 0.0382941 -0.0187111 +-0.0688111 0.0922897 -0.0164711 +0.0419266 0.101462 0.0171593 +0.00341059 0.0376223 -0.0244648 +0.0461634 0.0792418 0.0171768 +-0.0637535 0.0431846 0.0296789 +-0.0273632 0.0534705 -0.0254085 +-0.0394955 0.0562825 0.0399491 +0.00548498 0.0590856 0.0545593 +-0.0934182 0.124107 0.0122673 +0.0324897 0.100233 -0.014155 +-0.00952254 0.0688375 0.0554289 +0.0191204 0.042209 0.0431814 +0.0195848 0.035993 0.00660837 +-0.0748916 0.10354 -0.0108565 +-0.0685642 0.0406581 -0.00126009 +-0.0225344 0.118142 0.03379 +-0.013583 0.0386256 -0.002471 +-0.0898618 0.113382 0.0394321 +0.0601893 0.0595178 0.0171788 +-0.0630097 0.121328 0.0458592 +-0.0196415 0.0725672 0.0536854 +-0.0211896 0.172692 -0.021286 +0.024653 0.104647 -0.0168345 +-0.0795268 0.096746 0.0348816 +0.0485163 0.0672488 0.000612911 +0.0400064 0.0422019 -0.00166327 +-0.0197891 0.0785016 -0.0390423 +-0.0260568 0.0375908 -0.0291887 +-0.00717802 0.130589 0.0142265 +0.0156678 0.0346738 -0.0117297 +0.0424576 0.0845381 -0.00679736 +-0.0302701 0.0365155 -0.0302567 +-0.0274598 0.0863801 0.0483431 +-0.0831854 0.11075 0.0323354 +-0.0514986 0.109783 0.0378241 +-0.0183396 0.126605 0.021835 +-0.0497522 0.0716181 0.0399477 +0.0165016 0.116787 0.0362663 +-0.0670324 0.0672056 0.0312385 +0.0201473 0.0414664 -0.0187017 +0.0364932 0.0484054 0.0314672 +-0.0501327 0.159092 -0.00542351 +-0.0752763 0.0667216 0.0105318 +-0.0341695 0.0337715 0.0105094 +0.0137891 0.103175 -0.021246 +-0.073587 0.148629 -0.0261691 +-0.0169441 0.184483 -0.0249355 +-0.0097273 0.130072 0.0104159 +-0.00405402 0.0391419 -0.01222 +-0.0887371 0.0955614 0.00743378 +-0.0864769 0.0806081 0.0125015 +0.040053 0.107027 0.0101639 +-0.042812 0.14778 0.00347562 +0.0248383 0.0835695 -0.0246296 +0.0277899 0.116538 -0.00556904 +-0.0291577 0.0380555 0.005854 +-0.0525571 0.150877 0.0178 +-0.0639921 0.134062 -0.00777265 +-0.0838901 0.110998 0.0281595 +-0.0134922 0.107228 0.0429665 +-0.0586918 0.149676 0.0345486 +-0.0616651 0.119834 0.0424717 +0.0456475 0.0890064 0.00517807 +-0.0089791 0.0383636 0.0133044 +-0.0903646 0.135051 0.0122148 +0.0317594 0.0835691 0.0424885 +-0.0240368 0.11082 -0.0193477 +0.0271768 0.112761 0.0342135 +-0.0356473 0.116902 -0.0136714 +-0.0739197 0.151223 0.0366634 +0.0410535 0.0759945 -0.00777525 +-0.0734182 0.169757 -0.0275332 +-0.00232938 0.0359607 0.0474459 +-0.085737 0.110915 0.0387737 +-0.0775985 0.123137 0.0521223 +-0.0748309 0.100681 -0.0121692 +-0.0866976 0.109058 0.0133472 +-0.0701875 0.0395708 0.00901355 +-0.0306891 0.120328 -0.00923215 +-0.045477 0.1214 -0.012376 +-0.033489 0.172734 -0.00156283 +-0.0565822 0.0339881 0.0253464 +-0.0404955 0.0451407 0.0414639 +-0.0555537 0.0420256 -0.00889368 +-0.0598777 0.102599 -0.0186645 +0.0592051 0.0552531 0.0121703 +-0.0758111 0.0741872 -0.00760517 +-0.038197 0.0342285 0.0289964 +-0.00312706 0.0390512 0.0319597 +0.0476183 0.0426691 0.0171605 +-0.0306281 0.0831438 0.0423752 +-0.049274 0.1386 0.00640083 +-0.0210747 0.0753924 0.0536136 +-0.093596 0.126936 0.0252692 +-0.0629825 0.129686 -0.00825839 +0.00470729 0.128083 -0.0039713 +-0.0335515 0.0373466 -0.0164398 +0.0425502 0.0637218 0.0280932 +-0.0707401 0.13973 0.0469958 +-0.0644842 0.0804582 0.0430441 +-0.0618671 0.112377 0.0367302 +-0.0698247 0.169548 -0.0276555 +-0.0863191 0.0806082 0.0115067 +-0.0216814 0.0523409 -0.0297011 +0.0377238 0.110496 0.0121805 +-0.0689171 0.158096 -0.0529848 +-0.067181 0.156627 -0.0534662 +-0.0268045 0.0811284 -0.0369845 +-0.0546722 0.139567 0.0297056 +-0.0554146 0.0649279 0.0339175 +-0.0193967 0.186852 -0.0171886 +-0.0357817 0.0351096 0.0179926 +-0.0718839 0.173642 -0.0520314 +-0.0409497 0.0337305 -0.016439 +0.0396966 0.105593 0.0211678 +-0.0789279 0.0699144 0.0158521 +-0.0414163 0.0476371 -0.0122303 +-0.00671791 0.0642099 -0.0355692 +0.0547677 0.0509942 0.0227339 +-0.0686614 0.0735088 -0.0131618 +-0.0738123 0.0655371 0.0172042 +-0.0904479 0.129526 0.00625875 +0.0197334 0.044328 -0.0216983 +-0.0896348 0.140659 0.0301806 +-0.00748945 0.0870384 0.0571349 +0.0217161 0.119158 -0.00841047 +-0.0545346 0.125365 -0.00640975 +0.0368294 0.108237 -0.00182731 +-0.0672538 0.152901 0.0344187 +-0.0807043 0.0827741 -0.00656651 +-0.0305099 0.113915 0.0346878 +-0.0721764 0.154012 -0.0399025 +-0.045061 0.130334 0.0180279 +-0.00652053 0.0688834 0.0561767 +-0.0444953 0.0817848 0.0424707 +-0.0874489 0.105009 0.0173545 +-0.0175711 0.0387182 -0.00892429 +0.000506539 0.0883906 0.0565122 +-0.0265193 0.12549 0.0159805 +-0.0464789 0.0917181 0.0434263 +0.0455125 0.0918121 0.0101608 +-0.0834627 0.110719 0.0412267 +-0.057205 0.0480928 0.032667 +0.00517049 0.0350387 0.0228068 +0.0457999 0.0820138 0.0191697 +-0.0420324 0.171559 -0.00171063 +-0.0475118 0.128596 -0.00180437 +0.0204841 0.0948066 0.0474378 +-0.0719895 0.163815 -0.0429694 +-0.0644943 0.0861671 0.0446171 +0.00851416 0.06604 0.0550264 +-0.0670308 0.141141 0.0435296 +-0.0848818 0.142006 0.0416598 +-0.0384808 0.106985 0.038039 +0.0180116 0.0754634 0.0524537 +-0.0725251 0.155433 -0.0349062 +0.0182337 0.128007 0.0135344 +-0.0233093 0.162498 -0.00577898 +-0.0850563 0.112998 0.00231897 +-0.0823398 0.145942 0.00119384 +-0.0852211 0.103481 0.00138673 +-0.071875 0.136886 0.0488574 +-0.0794627 0.138625 0.0485832 +-0.0435009 0.117967 0.030956 +-0.038588 0.0341641 0.0271976 +-0.0408255 0.0914222 -0.0231618 +-0.0551021 0.154591 -0.0020359 +-0.0748456 0.159073 -0.00827714 +-0.0621666 0.152205 -0.0155784 +-0.0494972 0.0776899 0.0438666 +0.00751862 0.0799738 0.0554444 +0.00532494 0.0625045 -0.0319907 +0.00237701 0.131635 0.0162813 +-0.0546261 0.151324 0.0271982 +-0.0236176 0.123316 0.0244011 +0.00251869 0.05336 0.0534808 +0.0225511 0.0888829 0.0485585 +-0.0370273 0.174099 -0.0109221 +-0.090997 0.129691 0.0382289 +-0.0732672 0.148476 -0.0292583 +-0.053498 0.0465766 0.0420409 +-0.0330184 0.0474571 0.0438647 +-0.0246064 0.033636 -0.0243161 +-0.0234471 0.125053 0.0200484 +-0.0830784 0.138234 -0.000100609 +0.0406549 0.0820323 0.0324674 +-0.0842996 0.0965857 0.0297797 +-0.0527544 0.03448 0.0379838 +-0.0799451 0.15529 0.0167266 +-0.057093 0.0521243 0.00061739 +0.0154036 0.0477404 -0.0246897 +-0.060782 0.082481 -0.019648 +-0.0700267 0.166609 -0.0500213 +0.0451823 0.091796 0.014161 +0.0346837 0.106039 0.030986 +-0.0396713 0.0621627 -0.012718 +-0.05111 0.0375368 0.0465746 +-0.0688918 0.119449 -0.00874323 +0.000197079 0.035652 0.0464555 +-0.00149822 0.0661867 0.0567241 +0.00350858 0.074484 0.056374 +-0.0284992 0.0703316 0.0397848 +-0.0555164 0.0482866 0.0387265 +-0.0908309 0.136473 0.0182032 +-0.0634905 0.0861851 0.0447067 +-0.00918339 0.033864 -0.0215021 +-0.0748916 0.123775 -0.00787892 +-0.0270496 0.033483 -0.0265278 +0.00488911 0.035483 -0.0145807 +-0.0442085 0.165146 -0.00911238 +-0.0322103 0.0386054 -0.0136114 +0.0190336 0.11528 0.0364777 +-0.000494586 0.0897644 0.0562541 +-0.0350004 0.157209 -0.0112204 +-0.0635638 0.147341 -0.0176577 +-0.0902987 0.121315 0.00530766 +-0.0705068 0.102745 0.0389474 +-0.0662636 0.175335 -0.0598585 +-0.0239792 0.0680021 0.045464 +0.0413142 0.0637288 -0.00386959 +-0.051889 0.108419 -0.0189045 +-0.0477652 0.131125 0.00158524 +-0.0400469 0.169775 -0.0108504 +-0.0755266 0.109807 -0.00760163 +0.00107791 0.130709 0.0215491 +-0.0655994 0.0349763 0.0155159 +-0.0628742 0.161547 -0.05443 +0.0359645 0.0981106 0.0346243 +0.00934693 0.129002 0.0260013 +-0.0768843 0.109139 0.0404116 +-0.010503 0.0674297 0.0550101 +-0.028646 0.0535523 0.0364431 +-0.072824 0.0936306 -0.0150907 +0.028615 0.035804 0.0196241 +0.0282076 0.0706829 -0.0227535 +0.0596824 0.0622541 0.020173 +-0.0025152 0.0575969 0.0540026 +0.000110958 0.036978 0.020027 +-0.0273656 0.0360131 -0.0296152 +-0.0624735 0.0344952 0.0183787 +-0.0360892 0.159232 -0.0124312 +0.0418577 0.100066 0.0211691 +-0.063571 0.122754 0.0468224 +0.0523857 0.0624129 -0.0025136 +0.0383109 0.0632029 0.0342252 +-0.0144971 0.0786767 0.0566892 +-0.0928565 0.129591 0.0132418 +-0.0681034 0.152856 -0.0481556 +-0.0746787 0.169356 -0.0440586 +-0.0335137 0.107031 0.0389932 +0.0424926 0.0583469 0.0313486 +-0.0223256 0.0637459 0.0453694 +-0.0648797 0.106687 -0.0146649 +0.0250125 0.0632249 0.0448766 +-0.0624284 0.159959 -0.0405984 +0.00349445 0.12099 0.0360851 +0.022067 0.0981797 0.0461337 +-0.0734899 0.123206 0.0535424 +-0.0321688 0.171168 -0.015915 +-0.0848969 0.106313 0.0233612 +-0.067172 0.174543 -0.0467986 +0.0246727 0.0884534 -0.0236513 +-0.0504949 0.0477308 0.0397221 +-0.064202 0.155431 -0.0413859 +0.00347944 0.095162 0.0537659 +0.0105108 0.100431 0.0479236 +0.021311 0.123415 0.0275211 +0.0415141 0.104253 0.009162 +-0.0617635 0.0387159 0.0237173 +-0.0044982 0.0952431 0.0547633 +0.0398123 0.066053 -0.00878746 +-0.00271622 0.0627636 -0.0349069 +-0.00914442 0.0387021 0.000210725 +-0.0814422 0.106028 0.0294684 +-0.0136643 0.0922643 -0.0359313 +0.0420557 0.0676716 -0.00377172 +-0.0364793 0.0945677 0.0439429 +-0.05033 0.0517928 0.0340061 +-0.0470088 0.130577 0.00217989 +-0.0286777 0.158132 0.000508817 +0.0185266 0.0345532 0.000246197 +-0.0147199 0.184604 -0.0232088 +-0.0384921 0.111131 0.0361977 +-0.0384978 0.102835 0.0403416 +-0.0215751 0.0667511 0.0487462 +-0.0887264 0.0996152 0.00841821 +-0.060662 0.0644224 -0.00688354 +0.0397235 0.080129 -0.010751 +-0.0136601 0.0389486 0.0334846 +-0.0106876 0.129553 0.00573838 +0.00810435 0.0348429 0.0181346 +0.0256081 0.104449 -0.0166247 +-0.0682325 0.168499 -0.0270627 +-0.0474794 0.0917467 0.0438194 +0.00950115 0.119644 0.0365249 +0.0437324 0.0790794 0.0263023 +-0.0905234 0.132421 0.0302253 +-0.0748541 0.107208 0.0370405 +-0.0943565 0.12553 0.0182582 +-0.0131926 0.0378477 0.0507876 +-0.0570855 0.0480965 0.0356642 +-0.04493 0.0346468 0.0377647 +-0.0665925 0.064199 -0.00375071 +-0.0829976 0.133839 -0.00205551 +-0.0406365 0.0548831 -0.0112562 +-0.00950098 0.0884225 0.0571104 +0.0335068 0.0468989 0.0306812 +4.31947e-06 0.034593 -0.0165995 +-0.0725884 0.155473 0.0265843 +-0.0755167 0.0714511 -0.00453448 +-0.0669139 0.0704667 0.0354638 +-0.069981 0.180634 -0.0574865 +-0.0116389 0.034923 0.0481436 +-0.0307766 0.0720324 -0.0295197 +-0.0178239 0.107521 -0.0218927 +0.020822 0.043607 0.0421342 +-0.025466 0.0460651 0.0509844 +0.0349766 0.11396 0.0183585 +-0.0599273 0.122373 -0.00867944 +0.0365334 0.0980835 0.033685 +-0.0621481 0.159972 -0.0385982 +-0.0915531 0.115336 0.039285 +-0.0888763 0.0982745 0.00841224 +-0.00324635 0.130613 0.0199814 +-0.0668526 0.0914559 0.0435065 +0.0175786 0.0475536 0.0427473 +0.0318002 0.118052 0.00717688 +-0.0414667 0.104283 0.0404247 +0.0562407 0.0648113 0.00118357 +-0.0753758 0.170369 -0.0311391 +-0.0620405 0.138434 -0.00686017 +-0.00249822 0.0870283 0.0569791 +-0.0542914 0.129735 0.0355428 +-0.0274963 0.100194 0.0434874 +-0.00951883 0.17115 -0.0217635 +-0.0305995 0.121953 0.0248664 +-0.0770757 0.068957 0.00853894 +0.0135031 0.119752 -0.013055 +0.0413777 0.0491221 -0.00619394 +-0.0669027 0.0396709 0.012801 +-0.0249365 0.0607087 0.0409751 +-0.0124795 0.0517352 0.0508543 +-0.0304 0.0650386 -0.0254348 +-0.0267061 0.0765373 0.0464972 +0.0196875 0.0385058 -0.013693 +0.0518591 0.0461434 0.019211 +-0.0447475 0.146272 0.00240034 +-0.0336457 0.0562895 -0.0107616 +0.0237552 0.0887468 -0.0239425 +-0.000502572 0.0965565 0.053664 +-0.0664522 0.0376478 0.0363332 +-0.041205 0.169789 -0.00987939 +-0.0630084 0.142674 -0.00705706 +-0.0305333 0.178655 -0.00565353 +-0.0137626 0.0784616 -0.0384771 +-0.0616465 0.0397266 0.0174413 +0.00939844 0.0418898 -0.0239164 +0.0403895 0.0519763 -0.00684208 +0.00239172 0.0434053 -0.0248906 +-0.0663598 0.15609 0.0142173 +-0.0667166 0.136853 0.0439657 +-0.0132042 0.171245 -0.025107 +-0.0511148 0.117699 -0.0144446 +-0.0686887 0.0620968 0.00507892 +-0.066502 0.0889512 0.0442634 +-0.0531749 0.0487012 0.0129919 +-0.0464945 0.0532702 0.037612 +-0.0763048 0.0702707 0.00153293 +0.00237024 0.0481449 -0.0294793 +-0.0669085 0.108072 -0.0133167 +-0.0614834 0.166203 -0.0576271 +0.028089 0.0929174 0.0442737 +-0.0239187 0.036252 -0.0191133 +-0.0394562 0.0347283 0.0406132 +-0.0679286 0.17514 -0.0470724 +-0.0737519 0.14858 -0.0228576 +-0.0335079 0.105635 0.0395993 +-0.0780357 0.0769322 0.031104 +0.047273 0.0720618 0.00573289 +-0.0566027 0.0562228 -0.000407584 +-0.0336617 0.0592604 -0.0121578 +0.0390714 0.108406 0.0131668 +-0.067572 0.158668 -0.00806913 +-0.0668441 0.0995074 -0.0160123 +-0.0155786 0.0348181 -0.0259692 +0.0524799 0.0636428 -0.00173686 +-0.0666208 0.161046 -0.0135117 +0.012487 0.118181 0.036207 +0.00850767 0.067431 0.0550095 +-0.0568164 0.0333332 -0.00454462 +-0.00056724 0.0909565 -0.0345037 +0.0122553 0.0695892 -0.0315106 +-0.0747099 0.0713354 -0.00558545 +-0.0151964 0.178666 -0.0203777 +-0.0707468 0.161979 -0.010709 +-0.00364517 0.0496603 -0.0307711 +0.0292759 0.0787271 -0.0215887 +-0.0606931 0.0659255 -0.00858452 +-0.055281 0.0594285 0.0232183 +0.0168274 0.0658911 0.0506364 +-0.0286315 0.159193 -0.0128611 +-0.0753259 0.0689002 0.0227894 +-0.0278046 0.0364789 0.0536304 +-0.020238 0.0938075 -0.0335417 +-0.0787919 0.108745 0.0367247 +-0.0627356 0.150882 -0.0252578 +-0.0374903 0.111156 0.0359971 +0.0123741 0.0494269 -0.0274814 +-0.0550935 0.0685958 0.0378502 +0.0152655 0.0695272 -0.0306629 +0.0304209 0.0460912 -0.00653037 +-0.0896888 0.137919 0.0321971 +-0.076768 0.156222 -0.00903892 +-0.0177411 0.17422 -0.017052 +-0.0582856 0.0695544 0.0380966 +-0.0710157 0.179813 -0.0510815 +-0.0283604 0.112635 -0.0172343 +-0.0441537 0.0408799 -0.0213021 +0.0104769 0.0949778 0.0509942 +-0.00239285 0.100006 0.0487279 +0.0421962 0.0929549 -0.00479827 +0.0401191 0.0900359 0.0318057 +0.0226855 0.103953 -0.0180758 +-0.0705692 0.037778 -0.000833243 +0.0213756 0.0429924 -0.0177346 +0.0141656 0.0475343 0.0448184 +0.02539 0.0849287 0.0474039 +-0.0485578 0.0361757 -0.0124661 +0.0237226 0.0699627 0.0465409 +-0.062494 0.155703 0.00979223 +-0.0499478 0.135176 0.00116888 +-0.0731261 0.154051 -0.0329012 +-0.0565591 0.0344267 0.0337344 +-0.0757231 0.155771 0.0225635 +-0.081733 0.0783168 0.0273929 +-0.0465781 0.0504461 -0.00966731 +0.0370638 0.0376395 0.0160314 +0.0401736 0.0801429 -0.00978947 +-0.0295615 0.171229 -0.00778742 +-0.0625363 0.158377 -0.0386027 +-0.0482692 0.133969 0.0226705 +0.00454759 0.0341639 -0.0171912 +-0.0620171 0.153759 -0.016582 +-0.0878261 0.11219 0.0337097 +-0.05597 0.0519966 -0.00239063 +0.0400386 0.0871415 -0.0117889 +0.0205921 0.0807207 0.0509473 +-0.0296224 0.0352251 0.019146 +-0.0381589 0.163687 -0.0131595 +-0.0675595 0.163657 -0.0167503 +-0.0522361 0.15086 0.0163848 +0.0360023 0.103374 0.0311349 +0.0272712 0.0929162 0.0448522 +-0.0277389 0.0423333 0.0528015 +-0.0824451 0.140729 0.0449221 +-0.0329396 0.0386558 -0.0303928 +0.0296623 0.114075 -0.00693776 +-0.0221975 0.0652175 0.046591 +0.045212 0.0819736 0.0221688 +-0.0258761 0.0796032 0.0512286 +0.0272389 0.0873294 -0.0222582 +0.00242016 0.0361514 -0.024222 +-0.0615581 0.145382 0.0374116 +-0.0695688 0.160974 -0.049948 +-0.0858053 0.0953564 -0.000572964 +-0.0464927 0.165223 0.0045927 +-0.0624159 0.15064 -0.016574 +0.0473464 0.0561746 -0.0057008 +0.0237088 0.0942271 0.0467477 +-0.0494979 0.0762481 0.043343 +-0.078769 0.165248 -0.0339573 +-0.00950205 0.12806 0.0264334 +0.05377 0.0682444 0.00163269 +-0.0679209 0.163786 -0.054975 +0.0290078 0.087549 0.0438096 +-0.0840398 0.132376 -0.0018283 +-0.0306543 0.0650659 -0.0244333 +0.0322458 0.0355363 0.00770856 +0.00335212 0.131364 0.00663122 +-0.0154115 0.128891 0.0141212 +-0.0372876 0.0421099 0.0439093 +0.0308492 0.0931255 -0.0185705 +-0.029871 0.0459583 -0.0272702 +0.0300675 0.0822073 0.0435477 +0.000382137 0.128869 0.0270967 +-0.0174793 0.0730127 0.0550809 +-0.0387497 0.0782817 -0.0191475 +-0.0433943 0.0335852 -0.0186462 +0.0391881 0.0673984 -0.0107969 +-0.0280713 0.175691 -0.00734553 +0.0316149 0.0916151 0.0423373 +-0.0762132 0.0879097 -0.0135406 +-0.0316751 0.0665766 -0.0214412 +-0.00307655 0.0345443 -0.0171652 +-0.0426807 0.0636637 -0.0138633 +-0.0921228 0.126953 0.0372491 +-0.0235086 0.0347636 0.0474886 +-0.0506072 0.0546369 -0.00878713 +-0.0685971 0.162283 -0.0128033 +-0.0637348 0.156074 0.0136991 +0.0233928 0.0475951 -0.0196868 +-0.0519018 0.105587 -0.0193502 +-0.00551889 0.0746529 0.0585785 +0.000500504 0.0519731 0.0534094 +-0.0412672 0.0338015 -0.0128657 +-0.0819225 0.125087 -0.0048212 +0.00722702 0.0796252 -0.0338785 +-0.0893296 0.0956153 0.0124232 +-0.00167125 0.0554598 -0.0320096 +0.0267785 0.0402768 0.0313512 +-0.0867821 0.10632 0.010369 +-0.0451957 0.131364 0.0135329 +0.018149 0.0699846 0.0508404 +-0.0878008 0.119885 0.00028492 +-0.0612546 0.0341987 0.0206565 +0.0115009 0.111256 0.0392728 +0.0152633 0.0751002 -0.0297036 +-0.0351444 0.0865581 -0.0244792 +0.000649673 0.0963928 -0.0300705 +-0.0345272 0.121283 0.0279162 +0.0296818 0.0815643 -0.0205093 +-0.03348 0.115008 -0.0157024 +-0.0728312 0.136891 0.0492499 +-0.00265601 0.0540246 -0.0319128 +-0.0422272 0.127744 0.0161624 +-0.0494399 0.119744 0.0319359 +-0.0574019 0.116942 0.0379675 +-0.0468361 0.0970763 -0.0219471 +-0.0616292 0.146031 -0.00460349 +-0.0933662 0.126937 0.0262691 +-0.0228186 0.161021 -0.00330981 +-0.0635624 0.152855 0.034229 +-0.0625195 0.144437 -0.00658249 +-0.0839827 0.0830482 -0.0025149 +0.0144965 0.116791 0.0366152 +-0.0766305 0.155099 0.0076657 +-0.0365494 0.127902 0.0108341 +0.02042 0.126659 0.0186188 +-0.0470606 0.0628926 0.0375096 +-0.00665705 0.114661 -0.0174859 +0.0409886 0.104212 0.016155 +0.0264254 0.054947 0.041554 +-0.064618 0.0659249 -0.00682147 +0.0143052 0.127349 0.0263844 +-0.0254714 0.0379526 0.0103195 +0.0213669 0.0851498 -0.0262488 +-0.0469792 0.133264 0.00837709 +-0.0845615 0.0777561 0.014943 +0.0384886 0.0513309 0.0319844 +-0.0128833 0.165453 -0.0135102 +-0.0811951 0.147316 0.000164965 +-0.0523892 0.141597 0.0213852 +-0.045982 0.130505 0.00444274 +0.0279356 0.0520839 0.0384098 +-0.0931866 0.124098 0.0112689 +-0.0316005 0.0707575 -0.0264789 +0.00339515 0.0448431 -0.0258796 +-0.019688 0.0352649 -0.0192337 +-0.0492398 0.164062 -0.00484765 +-0.00759694 0.039172 -0.0259394 +-0.0456148 0.043386 -0.0114089 +-0.0706825 0.163806 -0.0469738 +-0.0111277 0.166928 -0.0162357 +0.0150914 0.0873948 0.0517971 +-0.0488841 0.0335499 -0.0104742 +0.0191832 0.0974256 -0.0227258 +-0.068761 0.17368 -0.0560297 +0.0347852 0.0821986 0.0398055 +-0.0656191 0.164967 -0.0232289 +0.0488884 0.0431235 0.0112233 +-0.0204394 0.0725535 0.0530664 +0.0198178 0.127196 0.0112616 +-0.0870347 0.13912 0.00619253 +-0.0619782 0.15683 -0.0335967 +0.0192552 0.0735767 -0.0281447 +-0.0582892 0.0589697 0.00149643 +-0.0794885 0.131664 0.0524764 +-0.0625817 0.159955 -0.0415973 +-0.0344319 0.0350721 -0.0182387 +0.0339652 0.0955609 0.0387182 +-0.0350568 0.0344135 0.0294961 +-0.00649976 0.0842428 0.0569087 +-0.0606247 0.0394421 0.0446315 +-0.066026 0.146409 -0.0228827 +0.0265887 0.0491527 0.0382012 +-0.0447519 0.078285 -0.0193632 +0.0442188 0.0833029 0.0251703 +-0.025021 0.178659 -0.00994683 +0.0382789 0.10977 0.00952257 +-0.0756137 0.176488 -0.0441876 +-0.0706968 0.169922 -0.0279808 +-0.0514769 0.0344526 0.0347935 +0.00449209 0.108585 0.0419458 +0.0591616 0.0552765 0.0151753 +0.0295012 0.0578054 0.0407589 +0.0323993 0.0505614 -0.00746951 +-0.0570338 0.131087 -0.00617819 +-0.0304972 0.101559 0.0427282 +-0.00116978 0.0991573 0.0506694 +-0.0238077 0.0811303 0.0547388 +-0.00701023 0.0988653 -0.0267279 +-0.0156999 0.0584946 -0.0353551 +0.00922562 0.0809438 -0.0326125 +0.0453737 0.0474164 -0.00383546 +0.0044338 0.117686 -0.0167913 +0.0239341 0.0561524 -0.0247597 +0.0591083 0.0705376 0.015147 +-0.0594646 0.151494 0.0342364 +-0.0657091 0.157202 -0.00882727 +-0.0250337 0.0381576 0.00660247 +0.0420581 0.102887 0.0101643 +0.0436509 0.0403831 0.00924323 +-0.00449056 0.130995 0.0108991 +0.0044777 0.112767 0.0412512 +0.00553763 0.100304 0.04669 +-0.0942962 0.120123 0.0192891 +-0.0620801 0.0339964 0.0171254 +-0.0160023 0.128658 0.015367 +-0.0432963 0.128843 0.0142751 +-0.0634932 0.104261 0.0408123 +-0.0746115 0.103538 0.0368408 +-0.0222463 0.0739152 0.0519932 +-0.0544743 0.034136 0.0256577 +-0.0252277 0.12616 0.0135052 +-0.0320296 0.171249 -0.00429305 +-0.0132393 0.1837 -0.0278845 +-0.0324962 0.0718107 0.0406773 +-0.0765269 0.165965 -0.0237196 +-0.0833313 0.0829966 0.0292517 +0.0259015 0.0902483 0.0463733 +0.0095961 0.0354723 -0.00987583 +0.0511798 0.0581784 0.029952 +-0.0848476 0.0845966 0.0254873 +-0.0509379 0.131197 -0.00260501 +0.00252027 0.0730778 0.0562797 +-0.0135504 0.122737 -0.00796322 +-0.00761024 0.0420402 -0.0258045 +-0.0508461 0.134795 0.0276114 +-0.0804072 0.155064 0.0209566 +0.00350727 0.103765 -0.0218529 +-0.0106066 0.0420419 -0.0261259 +-0.0713436 0.0632651 0.0179295 +-0.067959 0.169303 -0.0298283 +-0.0236585 0.049302 -0.027521 +-0.069473 0.158882 -0.00587612 +-0.0766843 0.15421 -0.00390102 +-0.0220401 0.0852804 0.0556778 +0.0275877 0.0465825 -0.0117097 +-0.00852427 0.130326 0.0108566 +0.0130382 0.0344991 0.00293188 +0.0559458 0.0605187 0.000117677 +-0.0348266 0.0900917 -0.0242073 +-0.0890869 0.135136 0.0402764 +-0.0897624 0.136545 0.033205 +0.00547548 0.112757 0.0410095 +-0.0712367 0.159654 -0.00650092 +-0.0121993 0.177175 -0.0288808 +-0.0823069 0.0748418 0.00552391 +-0.054558 0.0460859 0.0144477 +-0.070487 0.0669606 -0.00253268 +-0.0556924 0.159448 0.00648476 +-0.00649361 0.105887 0.04408 +-0.0602281 0.059992 0.0213112 +-0.0580325 0.0579587 0.00923969 +-0.0338627 0.110196 -0.0186635 +0.0546876 0.0597691 -0.00173886 +-0.0625369 0.149102 -0.00757295 +0.0542703 0.0575789 -0.00178727 +-0.0088618 0.129865 0.0208462 +-0.0801514 0.109359 0.0377151 +-0.00679227 0.0798757 -0.0378854 +-0.0424904 0.0860159 0.0426903 +0.0479819 0.0723794 0.00739708 +-0.0560722 0.13957 0.0312222 +-0.0365138 0.0804626 0.0431357 +0.00167631 0.105337 -0.0215515 +-0.0775111 0.0860271 0.0374369 +0.0259521 0.11908 -0.00433188 +-0.0558236 0.0526652 0.00846948 +-0.0846054 0.11036 0.02536 +-0.0765518 0.15421 -0.000899711 +0.0127846 0.0699169 0.0536174 +0.0208082 0.1264 0.00735797 +-0.0504584 0.0502644 0.0363006 +0.0174244 0.125027 -0.00283112 +-0.0308709 0.178515 -0.0130008 +-0.00718543 0.0385691 0.00621806 +0.0407891 0.0886694 0.0309807 +-0.0357951 0.124657 -0.0058294 +-0.0554873 0.0400326 0.0469712 +-0.057026 0.0675163 0.0366088 +-0.0497286 0.133927 0.0265636 +-0.00790814 0.0384861 0.0079669 +-0.0811308 0.0841829 -0.00653469 +-0.010479 0.0991873 -0.02508 +0.00856046 0.0354979 0.0447263 +-0.0634822 0.166302 -0.0366942 +-0.0223475 0.0360366 0.0535038 +-0.0795325 0.124539 0.0521412 +-0.00951606 0.0745243 0.0569833 +-0.0130122 0.127478 0.0251829 +-0.0936226 0.120076 0.0132919 +-0.0540996 0.154592 -0.00271527 +-0.0879876 0.132208 0.00230713 +-0.034669 0.15585 -0.0101443 +-0.0197012 0.0598498 -0.0346368 +-0.0276791 0.155231 -0.00339809 +-0.0842452 0.0818537 0.025498 +-0.054537 0.0560032 -0.00541843 +-0.0497623 0.0665865 0.0371903 +-0.0891577 0.092949 0.0214162 +-0.0577737 0.0782037 -0.0194332 +-0.064492 0.104249 0.0405622 +-0.0336047 0.0695556 -0.0194645 +-0.0558611 0.0955845 -0.021564 +-0.0184974 0.0869962 0.0565805 +0.00637923 0.0372606 0.0264872 +-0.0665048 0.104229 0.0399675 +0.0566718 0.0553009 0.0238011 +-0.0283123 0.0383433 -0.00703005 +-0.0114184 0.169868 -0.0184586 +0.0211822 0.0909362 -0.0242734 +0.0406295 0.0806796 0.0323988 +0.0123659 0.128443 -0.000397752 +-0.0384845 0.0833049 0.0437838 +-0.01051 0.0531978 0.0517663 +0.00250545 0.0842781 0.0574483 +-0.0674995 0.0972695 0.0419768 +-0.0618921 0.119466 -0.00942759 +-0.00594439 0.13066 0.0175514 +-0.0188708 0.0382701 0.00775373 +-0.0605698 0.0727907 0.0401099 +-0.0115041 0.115551 0.0394745 +0.0300401 0.11902 0.00366373 +-0.0812551 0.10738 0.02923 +-0.0704758 0.123201 0.0533571 +-0.0711231 0.141136 0.0464522 +-0.0222312 0.125137 -0.000350139 +0.0436968 0.0818627 -0.00278544 +-0.00557531 0.0383818 0.0157938 +-0.0175218 0.187118 -0.0194148 +0.000510392 0.0689287 0.0563645 +0.0339979 0.0519394 0.0331121 +0.00286804 0.129802 0.0250965 +-0.0290472 0.0777737 0.0431405 +0.0209137 0.102084 0.0444516 +-0.00628355 0.0409075 0.0485853 +0.0605521 0.0595441 0.0141714 +0.0386236 0.0898511 -0.0127692 +0.0302987 0.0539206 -0.0157566 +-0.0421651 0.149301 -0.00412295 +-0.0126067 0.040646 -0.0265976 +-0.0788091 0.168052 -0.033971 +0.0359211 0.112779 0.0172688 +-0.0394762 0.17111 0.000601324 +-0.0330305 0.0384181 -0.00620006 +-0.0859939 0.0940196 0.000445293 +-0.0359122 0.158048 0.00410154 +-0.0745011 0.151286 -0.0298782 +0.0531496 0.0491587 0.00225551 +-0.0243767 0.179986 -0.0189674 +-0.0891975 0.0996627 0.0124046 +-0.0742533 0.17954 -0.0493425 +-0.0510836 0.145457 -0.000907293 +0.0483282 0.0561556 -0.00540695 +-0.0224848 0.0474635 0.0510926 +-0.0647533 0.163375 -0.0214725 +-0.0127683 0.163589 -0.0126806 +0.0112702 0.0766287 -0.031501 +-0.0460801 0.153165 -0.0063697 +-0.0396673 0.0606846 -0.0120669 +0.0304753 0.100799 0.0389817 +0.0504441 0.0731136 0.0180651 +0.0195371 0.122997 -0.00457304 +-0.0455152 0.0505363 0.0385492 +-0.0525396 0.0458696 -0.00783738 +-0.0679101 0.109459 -0.0121777 +0.0257715 0.122252 0.0234619 +-0.0641925 0.158337 -0.0512857 +-0.0679573 0.0636968 0.0236258 +0.0336501 0.0872305 -0.0183746 +-0.081408 0.0801232 -0.00353296 +-0.068364 0.143961 0.043402 +-0.060807 0.170968 -0.0607383 +-0.0530022 0.0712206 0.0395879 +-0.0629233 0.149038 -0.01858 +-0.0911763 0.131044 0.0302322 +-0.0866097 0.0859466 0.00148078 +-0.0213048 0.0567472 0.0459531 +-0.0884724 0.111842 0.0093465 +-0.0232358 0.0382045 0.0267906 +-0.0687325 0.178002 -0.0502345 +0.0171734 0.0960138 -0.0234178 +-0.0336295 0.0533957 -0.0102549 +0.0404048 0.0661215 -0.00776758 +0.0352114 0.113974 0.0112756 +-0.0509894 0.131098 0.0315417 +-0.0825925 0.0857998 0.0312629 +0.0165569 0.0367823 -0.018664 +-0.0158447 0.163118 -0.0162484 +0.0463618 0.0504062 -0.00492067 +-0.0256024 0.0918183 0.0477571 +0.0401119 0.105635 0.0181717 +-0.075865 0.120825 -0.00747435 +-0.0515138 0.0502892 0.0216268 +-0.0597307 0.0737738 -0.017073 +0.0327302 0.0795508 0.0421017 +0.0561478 0.0493933 0.0131905 +-0.0491927 0.149222 0.0111539 +-0.0505664 0.0459962 -0.00889176 +-0.0346044 0.0381371 0.0484275 +-0.0571418 0.0341673 0.0268338 +-0.0508978 0.0335658 0.00549258 +0.0499018 0.0460625 0.00228276 +0.000648366 0.101032 0.0453587 +-0.064515 0.0945534 0.0434117 +-0.00933623 0.127529 -0.00319765 +-0.0931674 0.126844 0.0122586 +-0.0775055 0.120428 0.0519362 +-0.00412302 0.0390868 0.0317249 +-0.0444953 0.12065 0.0276432 +-0.0808257 0.114785 -0.00282613 +0.00848893 0.0976878 0.0492062 +-0.0204952 0.119495 0.0334766 +-0.0744171 0.1312 0.052182 +-0.0354802 0.0365931 -0.0303176 +-0.0158225 0.127346 0.0227279 +-0.0622273 0.163125 -0.0345932 +-0.0308039 0.0345326 0.0408762 +-0.0684942 0.0944611 0.0423345 +-0.0282259 0.115945 -0.0147131 +-0.00496131 0.0393649 0.0367022 +0.000507606 0.089764 0.0561546 +0.0184391 0.121423 0.0322194 +-0.0293563 0.0761839 -0.0345604 +-0.0798193 0.0993879 0.0336913 +-0.0260706 0.125207 0.0176138 +-0.0466789 0.0383303 -0.0162856 +-0.0551627 0.0709645 0.0393255 +-0.0708102 0.086505 -0.0166182 +-0.0534691 0.0491595 0.0373719 +-0.0176627 0.0365106 -0.0181139 +0.00950436 0.0910078 0.0538342 +-0.0895706 0.136541 0.0322035 +0.0538065 0.0721186 0.0208488 +-0.00549555 0.115561 0.0401898 +0.00964519 0.0349724 -0.00752839 +-0.0134864 0.112741 0.0406725 +-0.00206815 0.039143 -0.00620903 +0.0130247 0.112857 -0.017601 +-0.0790398 0.119048 0.050662 +-0.0808858 0.0872378 0.0337267 +-0.0123796 0.124965 -0.00637162 +-0.0213885 0.125739 0.00103732 +-0.089509 0.125659 0.045333 +-0.05553 0.137483 -0.00349047 +0.0417216 0.100008 -0.000812454 +-0.0294372 0.045874 0.0494957 +0.0458807 0.0774123 0.0204549 +-0.010796 0.120869 -0.0120713 +-0.0650859 0.171096 -0.0446086 +-0.0309091 0.0594671 -0.0184147 +0.0318276 0.102039 -0.0140664 +-0.050474 0.137043 0.0223997 +-0.0892111 0.0956026 0.0114219 +-0.0551272 0.0478339 0.0400497 +-0.0376142 0.115213 -0.0159111 +-0.0262205 0.0604134 -0.0304432 +-0.0395514 0.159448 0.00235113 +-0.0548296 0.0912974 -0.0221769 +0.0140209 0.113717 -0.0165571 +-0.0376838 0.0651596 -0.0143574 +-0.0357596 0.0367769 0.0465803 +0.0218833 0.124858 0.00205716 +-0.0515413 0.0403485 -0.0110842 +0.0196453 0.0521206 0.045827 +-0.0274751 0.109286 -0.019717 +-0.054346 0.125513 0.0372066 +-0.061806 0.172532 -0.0555873 +0.0193853 0.0367967 0.0404 +0.00315064 0.0340463 -0.0192491 +-0.0419902 0.127061 0.0177443 +-0.0753578 0.0671035 0.0137678 +-0.017747 0.0685932 -0.0381265 +0.0502404 0.0581527 0.030355 +-0.01349 0.11138 0.0414506 +-0.088473 0.0908539 0.022804 +-0.0623246 0.0380624 0.0435494 +-0.0315191 0.0831203 0.0417649 +-0.0908528 0.131057 0.0322319 +-0.0524868 0.0959601 0.0436811 +0.0383485 0.10917 0.00520513 +0.0405643 0.0599899 -0.00408877 +-0.00769877 0.0598808 -0.0345717 +0.0253549 0.0875981 0.0473346 +-0.0126907 0.166905 -0.0150111 +0.0384994 0.0541178 0.0316123 +-0.034906 0.0367338 -0.0161439 +-0.057208 0.048538 0.00854022 +-0.0255159 0.108511 0.0401259 +0.0305676 0.0350004 0.0115893 +-0.0520943 0.0559627 0.0266271 +-0.0610057 0.155949 0.0190169 +-0.067333 0.1766 -0.0497355 +0.0258363 0.0844839 -0.0235493 +-0.0689178 0.164003 -0.0158096 +-0.00849374 0.116931 0.0393004 +-0.0752784 0.113511 0.0497641 +-0.0888148 0.144497 0.0313918 +-0.0453871 0.145929 0.00156561 +-0.0599561 0.0677317 0.0357891 +-0.0125434 0.0386707 -0.00229897 +-0.000271447 0.0356914 0.00658166 +-0.0415825 0.0366566 0.0434527 +-0.0297036 0.165315 -0.00626903 +-0.0467885 0.0855251 -0.0217462 +-0.0827882 0.125806 0.051363 +-0.0176693 0.0966335 -0.0284397 +-0.0464991 0.115243 0.033257 +-0.0569748 0.146758 0.0317266 +-0.0430879 0.156177 -0.00890493 +-0.00350236 0.0774419 0.0585703 +-0.0699027 0.158151 -0.0489236 +0.0362459 0.112339 0.00591924 +0.0367118 0.0920329 -0.0133924 +-0.0539202 0.0610131 0.0274265 +-0.0093317 0.127279 0.0279745 +-0.0726772 0.112018 0.047983 +-0.0451365 0.160644 -0.00892562 +-0.0209165 0.172715 -0.0146234 +-0.0477839 0.125387 0.0290716 +-0.0734873 0.156859 -0.0289164 +0.00860516 0.061703 0.0545256 +-0.0246606 0.0422329 0.0539554 +-0.0315436 0.153515 -0.00448892 +0.0345459 0.0571781 -0.011728 +-0.0791321 0.170818 -0.0399882 +0.0254504 0.0415949 -0.00563526 +0.0230318 0.0355156 0.0114574 +-0.0554984 0.107053 0.0399469 +-0.0296361 0.0522471 0.0373693 +-0.0438179 0.0928034 -0.0224841 +-0.0199243 0.0387302 -0.0112686 +0.0212455 0.0791286 -0.0267859 +-0.0532861 0.0527919 0.0115704 +0.00450017 0.0441843 0.0459802 +-0.0329932 0.0339759 0.0213799 +0.0553011 0.0604636 -0.000842819 +0.00165238 0.0932332 -0.0327923 +-0.0552284 0.0527023 0.00927604 +-0.0783599 0.0708413 0.0204513 +-0.0767777 0.176413 -0.0510191 +-0.0394918 0.104211 0.0396007 +0.0327921 0.0889736 0.0422708 +-0.00991923 0.0986226 0.0505787 +-0.0806729 0.108958 0.0307202 +-0.0822864 0.135367 0.0491747 +-0.0649369 0.0609076 0.00327394 +0.0386477 0.0715748 -0.0117783 +-0.0240415 0.126597 0.0109996 +-0.0781422 0.141688 -0.0047364 +-0.0427782 0.0841106 -0.0212812 +-0.0641686 0.178174 -0.0558405 +0.0252976 0.0661311 -0.0233121 +0.0189895 0.0631559 0.0484766 +0.0182463 0.0722224 -0.0290012 +-0.0777504 0.161717 -0.020949 +-0.051966 0.138521 0.000416067 +-0.0605353 0.155832 0.0177371 +0.0437866 0.098742 0.00716534 +-0.0494703 0.0370271 -0.0120635 +0.0464078 0.0806576 0.0101793 +0.0218218 0.116393 -0.0114503 +-0.0533273 0.132699 -0.00427378 +-0.0681775 0.0762505 0.039044 +-0.0250035 0.0896 -0.0352857 +0.000769534 0.0946028 -0.0322154 +-0.0158082 0.0346932 0.0474464 +-0.076979 0.148604 -0.00699397 +0.0467055 0.0730498 0.0181295 +-0.0496483 0.0634464 -0.0118311 +-0.0197535 0.0700012 -0.0382558 +0.0232727 0.0989983 -0.0208236 +-0.0777 0.16251 -0.0219398 +-0.0908755 0.147455 0.0141474 +-0.0334742 0.0638502 -0.015538 +0.00219672 0.0825025 -0.0349885 +-0.0814773 0.128835 0.0524787 +-0.0784807 0.13724 0.0497912 +0.0361312 0.11046 8.71157e-05 +-0.0454849 0.0931252 0.0434035 +-0.0635463 0.153079 -0.00800928 +-0.0529285 0.0339107 0.0244154 +-0.00862356 0.0451919 -0.0286362 +0.0192377 0.117984 0.0350388 +-0.000496915 0.0883839 0.0565827 +0.0316988 0.118246 0.0142694 +-0.0398347 0.169198 -0.01127 +0.0219416 0.125622 0.00635903 +-0.092876 0.129604 0.0142376 +-0.023566 0.0579721 0.0425175 +-0.0447621 0.126552 0.0211574 +-0.0390659 0.157734 -0.0109824 +-0.0038734 0.104505 -0.022849 +-0.0810823 0.146103 0.0405774 +-0.00499552 0.038756 0.0282379 +0.00659654 0.102942 0.0449664 +-0.0528078 0.0898592 -0.0221628 +-0.0415043 0.0340515 -0.0039392 +-0.0118724 0.166916 -0.0155725 +0.00801932 0.113693 0.0398597 +-0.0873717 0.0895698 0.0245766 +0.0235801 0.11767 -0.00881398 +-0.0592051 0.0411249 -0.00803844 +-0.0631955 0.174736 -0.0540401 +-0.00904474 0.102005 -0.0240096 +-0.0893459 0.0888735 0.0114634 +-0.0847817 0.111591 0.0313073 +-0.0318636 0.155275 -0.00893878 +0.020119 0.0578214 0.0483165 +-0.0884363 0.140505 0.0381916 +0.0268748 0.0768062 0.0459093 +0.00650425 0.06886 0.0554952 +-0.0600274 0.155812 0.00342033 +0.00439509 0.0433687 -0.0246925 +-0.0644393 0.157952 -0.0526177 +-0.0626717 0.152516 0.0345768 +-0.0686641 0.0435432 0.00268116 +-0.0668913 0.155545 0.00822429 +-0.0513204 0.0545255 0.0306253 +-0.0216946 0.055283 -0.031103 +0.0201038 0.121698 0.0313961 +-0.0435092 0.0973014 0.0425845 +-0.0598342 0.124083 0.0415696 +-0.0290584 0.0385824 0.0360072 +-0.0211666 0.0959679 -0.0277597 +0.0393164 0.0948581 -0.00836399 +-0.0465497 0.0354834 -0.0182685 +-0.0577953 0.0577539 0.0112722 +0.0343862 0.0533953 0.033694 +-0.0356597 0.12459 0.0229985 +-0.0703962 0.0382223 -0.000484462 +0.0394034 0.0772645 -0.00977482 +0.0374516 0.110677 0.0163977 +0.022681 0.0549804 0.0449373 +-0.00661876 0.0388692 0.029605 +-0.0298463 0.0958488 -0.0239617 +-0.0500656 0.165567 2.77718e-05 +-0.0624265 0.163056 -0.0535855 +0.0182459 0.035082 -0.00972071 +-0.0535426 0.139527 0.0278286 +0.0535157 0.0664189 0.0268642 +-0.0618871 0.044625 0.0401036 +0.0279315 0.0813321 -0.0222629 +-0.0364738 0.0959436 0.0435424 +-0.0648009 0.0867059 -0.0190299 +-0.0910478 0.113254 0.017639 +0.0328625 0.115479 0.000361714 +-5.55454e-05 0.1192 -0.0143689 +0.00440015 0.0419024 -0.0241382 +-0.0356548 0.0459643 -0.0252685 +-0.00874142 0.0699019 -0.0364843 +-0.0786816 0.173602 -0.0460003 +-0.0750442 0.11265 0.048722 +0.0132032 0.0850348 -0.0305799 +-0.0275703 0.070462 0.0404211 +-0.0333885 0.082189 -0.0265241 +-0.0498121 0.0912811 -0.0216901 +-0.0121305 0.129539 0.00953518 +-0.0888371 0.0942243 0.00943852 +-0.0733262 0.151241 -0.0368807 +0.0159012 0.0347663 0.0342789 +-0.0464698 0.0336288 0.00272222 +-0.0219797 0.0381347 0.0126751 +-0.0434985 0.112577 0.0357301 +0.0374146 0.0807844 0.0365828 +-0.0150623 0.160937 -0.0114195 +0.00882514 0.0347544 -0.00561715 +-0.0793646 0.150083 0.036366 +0.0444807 0.0526489 0.0324592 +-0.0140843 0.0382987 0.0177555 +0.0371109 0.0630101 -0.0117592 +-0.0795655 0.0711751 0.0181423 +0.0314182 0.0968966 0.040312 +0.0553211 0.0622297 0.0271921 +-0.0344916 0.0789231 0.04184 +-0.0708134 0.0893817 -0.0163657 +-0.0786856 0.174223 -0.045863 +-0.0497628 0.0345507 0.0333201 +-0.026557 0.0646504 0.0393284 +0.0499455 0.0733656 0.0164225 +0.0233132 0.0902311 0.0479207 +-0.0441494 0.163638 -0.00943446 +-0.048497 0.0464891 0.040915 +-0.0638143 0.15519 -0.0396115 +0.0296208 0.115866 0.0291818 +-0.0505003 0.100168 0.042883 +0.00450871 0.0910904 0.0550512 +0.0223914 0.093257 -0.0227104 +-0.0346391 0.0469045 -0.0241611 +0.0600903 0.0608951 0.0181821 +0.0174829 0.0976104 0.0472234 +0.0245219 0.0382712 0.0311236 +0.0373902 0.0561474 -0.00613784 +-0.0725233 0.143597 -0.0104167 +-0.0755086 0.133058 0.0519758 +-0.0469091 0.134066 0.0158053 +-0.0365004 0.0719314 0.0420432 +0.0599383 0.0692126 0.0131498 +-0.0228512 0.126901 0.0114323 +0.0370832 0.0408236 0.0259314 +0.0430366 0.0709859 0.0269587 +0.0442558 0.0917077 -0.00080891 +0.0366443 0.0915417 0.0373244 +0.0149217 0.127634 0.0251635 +-0.0260773 0.0547586 -0.0274003 +0.0223322 0.0348324 0.0210401 +-0.0674741 0.169344 -0.0310786 +-0.0943935 0.125559 0.0222675 +0.000334373 0.0554042 -0.031412 +-0.023822 0.0694685 0.046666 +0.024828 0.0768588 0.0482443 +-0.0593221 0.0615947 0.0254084 +-0.0274704 0.0506795 -0.0243965 +-0.0172176 0.177147 -0.0249576 +0.0433823 0.0490357 -0.00560381 +0.0244317 0.116294 -0.00934411 +0.0184177 0.0350663 0.0309125 +0.0404265 0.102791 0.0231613 +-0.0243375 0.1639 -0.00728245 +-0.0675442 0.151908 -0.0456642 +-0.0311974 0.0474073 0.0447828 +-0.0726957 0.175719 -0.0430358 +-0.0165027 0.0499584 0.0473896 +0.0323852 0.0461686 -0.00610484 +0.0214495 0.0822346 0.0504578 +0.016822 0.123899 -0.00554312 +-0.0694694 0.178653 -0.050518 +-0.0741019 0.156119 0.0187476 +0.0510202 0.0736047 0.0138558 +-0.0739033 0.14718 -0.0168588 +-0.0165785 0.162548 -0.00831661 +-0.0414778 0.0347327 0.0401772 +0.0319294 0.118052 0.0100791 +-0.0502835 0.146495 -0.00183305 +-0.0758664 0.116415 -0.00636144 +-0.0824071 0.136209 -0.001703 +-0.0519598 0.0335208 -0.000101812 +-0.0819554 0.0993316 0.0315904 +0.0213579 0.055075 -0.0266156 +-0.0422106 0.112435 -0.0169649 +0.0150002 0.128745 0.00378903 +-0.0430993 0.157658 -0.00954173 +-0.0816795 0.117485 0.0486704 +-0.00999143 0.0383941 0.00762464 +0.0248936 0.12332 0.00461274 +-0.0644877 0.0972949 0.0424471 +-0.032514 0.105674 0.0400124 +-0.0517751 0.0826668 -0.0215624 +0.00214252 0.103065 -0.0221511 +-0.0609083 0.169363 -0.0596932 +0.0270498 0.0919981 -0.0213752 +0.00735643 0.038818 0.0454516 +0.0115845 0.121127 -0.0125402 +0.0591992 0.0552614 0.014176 +-0.0901723 0.112303 0.0149799 +-0.0627834 0.035148 0.0195098 +-0.074757 0.111898 0.0475989 +0.0570719 0.0578424 0.00217676 +-0.0528487 0.0500508 0.0126245 +-0.00477608 0.0784365 -0.0374195 +-0.0645432 0.0673992 0.033354 +-0.0540085 0.145723 -0.00127177 +-0.010995 0.0388834 0.0322933 +0.00247314 0.0964836 0.053027 +-0.0624566 0.177245 -0.0586155 +0.0368789 0.0941727 0.035906 +-0.0219544 0.120804 -0.00985027 +0.0570851 0.0508934 0.0101876 +0.0102738 0.0724526 -0.032232 +0.0544954 0.0655564 0.000403771 +0.0210681 0.0415437 -0.0156999 +-0.0692317 0.155651 0.00154206 +0.0527009 0.0518645 -0.000768796 +0.0334294 0.116181 0.00636312 +0.0448957 0.0945828 0.0101613 +0.00249575 0.0952068 0.0540463 +-0.0124032 0.0388598 -0.00801871 +0.045282 0.0889737 0.0021781 +-0.00350234 0.0388725 -0.0137373 +-0.0678317 0.0335757 0.00383638 +0.00921578 0.0767579 -0.0331902 +-0.0534996 0.0987387 0.0427565 +-0.0124888 0.126191 0.0283067 +0.0103285 0.130654 0.00635323 +0.0314005 0.0446447 -0.00577901 +-0.0295471 0.0804664 0.0436378 +0.00584239 0.0374362 -0.00493399 +0.0435663 0.0408867 0.018056 +-0.0206234 0.0950485 -0.0308006 +-0.0216102 0.0408331 -0.028871 +-0.0256808 0.0663835 0.041558 +0.0103698 0.0351865 0.034574 +0.0249548 0.0809223 0.0484627 +-0.0551501 0.0641879 0.0328568 +-0.0633147 0.132484 0.0400888 +-0.062948 0.163113 -0.0275941 +-0.0620302 0.141028 0.0366839 +-0.0484797 0.126826 0.0298997 +0.00950548 0.107102 0.041296 +0.0390056 0.0914413 0.0336848 +0.0300323 0.108764 0.0348296 +-0.0198832 0.0335337 -0.0251748 +0.0128315 0.0391361 0.0445812 +-0.0263531 0.11244 -0.0170322 +0.0359611 0.109622 -0.00183337 +-0.0572001 0.0380562 0.0469117 +0.00550248 0.121034 0.0357708 +-0.0667821 0.14845 -0.031825 +-0.016957 0.186039 -0.0193264 +-0.0878947 0.131105 0.044958 +0.0363312 0.107346 0.0280412 +-0.0614985 0.0833224 0.0439406 +0.0542552 0.0478973 0.00920996 +-0.0787615 0.0867217 -0.0105634 +0.0226207 0.0360088 0.0127544 +0.00886878 0.0343168 0.00225753 +-0.0266191 0.0618553 -0.0304537 +-0.00302574 0.0387303 0.00142158 +-0.019905 0.038668 0.0324503 +0.0527798 0.0683653 0.00150186 +0.021964 0.0402022 -0.00870612 +-0.0126432 0.0481635 -0.0303259 +-0.0124951 0.0925417 0.056096 +-0.0373842 0.0433946 0.0425967 +0.0243858 0.124139 0.00725423 +-0.0540808 0.0434992 0.0186914 +-0.0590026 0.0609591 0.0242669 +-0.0846496 0.129332 -0.00265191 +0.0108129 0.0887938 0.0544498 +-0.0599027 0.106882 -0.0174092 +0.0235199 0.123889 0.00267512 +-0.0364958 0.116629 0.0319219 +-0.0274016 0.0386836 -0.0145853 +0.0575354 0.0620414 0.00218896 +-0.0617076 0.156842 -0.0315932 +-0.0566848 0.0344893 0.0422998 +-0.0515556 0.0459336 -0.00836292 +0.034036 0.037677 0.020853 +0.0440634 0.064827 -0.000963389 +-0.0783551 0.090033 0.0367591 +-0.0451437 0.162134 -0.00879907 +-0.0870992 0.0913786 0.00345195 +-0.0896332 0.0983435 0.0144056 +0.00267954 0.131212 0.00494959 +-0.0521038 0.0531706 0.024633 +0.033292 0.0856433 -0.0187503 +-0.0284873 0.0606333 -0.0264114 +-0.0366237 0.123115 -0.00817194 +-0.0417568 0.0797359 -0.0197866 +-0.0466787 0.0650533 -0.0138917 +0.0360448 0.0392022 -6.35907e-05 +-0.0192403 0.0387115 -0.0129795 +0.0431391 0.098698 0.00317491 +-0.0224767 0.091498 -0.0352097 +0.0093588 0.0524416 -0.0295377 +-0.0833358 0.105954 0.0271122 +-0.0146006 0.127548 0.000963555 +0.0122907 0.0652688 -0.0305463 +-0.0515682 0.0488001 -0.00762593 +0.0214986 0.122612 0.0290301 +-0.0271235 0.11599 -0.0147668 +0.0381316 0.109734 0.0151646 +-0.00681664 0.0854791 -0.0376549 +-0.0147515 0.07145 -0.0385454 +-0.0659657 0.129697 -0.00887578 +0.0359834 0.11203 0.00292702 +-0.0631298 0.144906 -0.0101196 +0.00903132 0.0343268 -0.014573 +-0.0348704 0.101474 -0.022105 +-0.0693077 0.0614952 0.0145437 +0.0349262 0.0896582 -0.0169179 +-0.037886 0.109925 -0.0191545 +-0.0372775 0.0472266 -0.0193178 +0.0112393 0.0349033 0.0350041 +0.0430009 0.0705508 -0.00279727 +0.0400623 0.0956447 -0.00679711 +-0.0676126 0.155322 0.00651001 +0.0598737 0.0581052 0.00916393 +-0.061495 0.100138 0.0425963 +-0.0575075 0.0435504 0.0160321 +0.0228298 0.0827896 -0.0258286 +-0.0115004 0.0925527 0.0561224 +-0.0223058 0.184466 -0.0180708 +-0.0624348 0.161527 -0.0435948 +-0.0143997 0.0383922 -0.000568703 +-0.0793362 0.0881239 -0.0095476 +-0.0548971 0.10981 -0.018029 +-0.0707512 0.156365 0.0199172 +0.0244407 0.0405616 0.0372831 +-0.0545055 0.113958 0.0351234 +-0.00749363 0.0547355 0.05304 +0.044284 0.0819099 0.0251484 +0.0117499 0.0519912 0.0501875 +-0.0706809 0.109318 0.0378585 +-0.0640006 0.161566 -0.01976 +-0.0122192 0.0378665 0.050479 +-0.0715061 0.148353 0.0408514 +-0.0652549 0.0667307 0.0320259 +0.0162842 0.118981 -0.0122323 +-0.0584978 0.0959813 0.0440843 +-0.0261553 0.169713 -0.0187023 +0.0163086 0.108997 -0.0174538 +0.019812 0.035154 0.0274956 +0.0403843 0.0547484 -0.00641578 +-0.0370524 0.128064 0.00917633 +-0.0181528 0.0388364 -0.0128782 +-0.0703699 0.144073 -0.0154773 +-0.0821317 0.15265 0.0057634 +-0.0121975 0.182647 -0.0286755 +-0.0179487 0.126229 0.0234428 +-0.0713342 0.065071 0.0216423 +-0.0135059 0.0357879 0.0504712 +-0.0551243 0.0482803 0.0389113 +-0.043841 0.0970933 -0.0219235 +0.0307935 0.0619124 0.0409121 +-0.0872404 0.149912 0.0282765 +-0.0777833 0.0694772 0.0182331 +-0.0479563 0.0699321 0.0400053 +-0.0325179 0.0704032 0.0404934 +-0.04199 0.0336868 -0.0166047 +0.00497409 0.0340864 0.0145521 +-0.0449304 0.0643377 0.0396087 +-0.0778694 0.106226 -0.00738941 +-0.0126221 0.0389953 0.033657 +-0.0632121 0.172304 -0.0615699 +-0.0276205 0.0874255 -0.0346253 +-0.0625254 0.138119 0.0359126 +0.00425284 0.0711834 -0.0342035 +-0.0788838 0.153282 0.0303949 +0.00652169 0.0362747 0.0255863 +-0.0662316 0.0345008 0.0140489 +-0.02106 0.174206 -0.0148174 +0.0185004 0.109841 0.0391791 +-0.0646081 0.0450546 0.000685835 +-0.0136021 0.0363077 -0.0261392 +-9.29522e-05 0.131467 0.0096514 +-0.0451771 0.128971 0.00184527 +0.00750493 0.0561002 0.0528313 +0.0361319 0.074097 0.0381795 +0.022807 0.125614 0.0138049 +-0.0196774 0.0509888 -0.0303435 +-0.0930693 0.120128 0.0262942 +-0.0230193 0.120798 -0.0098328 +-0.0271496 0.0384219 0.0311819 +-0.0748224 0.0935599 -0.014192 +-0.0354943 0.119369 0.0303337 +0.060906 0.0609648 0.0111554 +0.0112135 0.130703 0.0137986 +-0.0266186 0.0589226 0.0382515 +0.0218458 0.0672628 0.0473581 +0.00922858 0.116392 0.0380826 +-0.0579872 0.0576809 0.00662705 +-0.0151861 0.168246 -0.0215615 +0.0431809 0.0791159 0.0272636 +-0.0755673 0.0727762 -0.00660131 +0.0242315 0.0818412 -0.0251267 +-0.0250124 0.0782139 0.0518051 +-0.0338224 0.0338142 0.00692539 +-0.00946746 0.0362215 -0.025425 +-0.0416936 0.0652006 -0.0145392 +-0.0546754 0.0335075 0.00116676 +-0.0233106 0.15969 -0.00223977 +-0.0842752 0.141807 0.00320102 +-0.0818378 0.131303 0.0516681 +-0.0234556 0.161598 -0.0145283 +-0.0499699 0.150693 0.011804 +-0.010495 0.0471724 0.0477907 +0.0380379 0.075373 0.0356471 +-0.0450739 0.0363473 0.0448052 +-0.0737333 0.15548 -0.0259091 +-0.0716137 0.178389 -0.0484 +-0.0384987 0.0691035 0.0417776 +0.00141943 0.122927 0.0347542 +-0.057332 0.137224 -0.00518105 +-0.0557698 0.136063 -0.00393718 +0.0558337 0.0494217 0.00919997 +-0.0580135 0.04944 0.00163802 +-0.0357372 0.111668 -0.0181975 +-0.0550044 0.145721 -0.00143834 +0.00110225 0.0344701 0.00796988 +-0.0157589 0.038402 0.00281447 +-0.0521458 0.121812 -0.0107191 +-0.00850406 0.11834 0.0382239 +-0.0498654 0.102788 -0.0210486 +-0.0630574 0.15313 -0.033029 +-0.0734528 0.143001 -0.00787011 +-0.0577717 0.0334512 -0.00484461 +-0.0926703 0.124234 0.0402542 +-0.0236253 0.0450591 -0.0281331 +0.0444641 0.0686626 0.00115575 +-0.0394989 0.0620307 0.0413298 +-0.0489043 0.0531988 0.0353928 +-0.0549375 0.140991 0.0293007 +0.0134789 0.100443 0.0476777 +0.0344381 0.102088 0.0341795 +-0.0629237 0.112473 -0.0138486 +0.0456048 0.0918125 0.0071715 +-0.0679688 0.135528 -0.00836676 +-0.0561131 0.145329 0.0311927 +0.0222077 0.0403059 0.0403109 +-0.0930104 0.131018 0.0202297 +-0.073597 0.161047 -0.0349306 +-0.073142 0.0762988 0.0362199 +-0.0868887 0.102318 0.0233696 +-0.074876 0.107788 -0.00905848 +-0.061968 0.159998 -0.0366167 +0.0234524 0.0505688 0.0407158 +-0.0374809 0.113893 0.0340704 +-0.052457 0.144675 0.0183665 +0.000496502 0.103028 0.0440499 +-0.0107515 0.039289 0.0373765 +0.0177346 0.123618 -0.0052308 +-0.0278908 0.0903405 -0.0316075 +0.0555538 0.0665692 0.0013688 +-0.0679616 0.181138 -0.0572245 +-0.0246921 0.156571 -0.00408158 +-0.0295045 0.112518 0.0356692 +-0.0523224 0.146252 0.0184018 +-0.0831779 0.111548 0.00129095 +0.0381693 0.109765 0.0141664 +-0.0465876 0.132486 0.00741919 +0.0351546 0.112861 0.0227039 +0.00752051 0.0855871 0.0562726 +-0.0236256 0.0464233 -0.0274769 +-0.0820555 0.138062 0.0474469 +-0.0332203 0.171246 -0.00251328 +-0.0471051 0.157621 -0.00763511 +-0.0883909 0.0874867 0.0154625 +-0.0769362 0.0914256 0.0381174 +-0.075265 0.148568 -0.0158698 +0.015355 0.119233 -0.0124997 +-0.0073165 0.13056 0.0112981 +-0.0167502 0.070002 -0.0383082 +-0.0672167 0.147775 -0.0296135 +0.00424945 0.126892 0.0299609 +0.0188897 0.120837 -0.00821554 +-0.0628446 0.0334683 -0.00588606 +0.0333858 0.103442 0.0343819 +-0.0748011 0.0878022 -0.0147955 +0.00250445 0.0519435 0.0530423 +-0.0565994 0.0548437 -0.000400453 +-0.0657591 0.0794867 -0.0178324 +-0.0893947 0.113204 0.00833335 +0.00550466 0.122397 0.0349805 +-0.0593516 0.0471429 0.038917 +-0.0691412 0.109612 0.0381472 +0.012166 0.127075 0.0284779 +0.00215147 0.0340847 -0.0194818 +-0.0357383 0.152143 0.000762654 +-0.0225608 0.0608496 0.0442445 +-0.00675345 0.0727271 -0.0364938 +-0.0504985 0.0776737 0.0437561 +0.012653 0.128571 8.59956e-05 +-0.0775017 0.148428 0.039927 +0.0194833 0.0961991 0.0471957 +-0.00134544 0.0999407 0.0490888 +-0.00745251 0.100521 0.0469096 +0.0293349 0.108769 0.0355782 +-0.0628076 0.0881622 -0.0190458 +0.0438908 0.0973298 0.0041758 +-0.0618594 0.154827 0.00385225 +0.0224603 0.0878572 0.0487762 +-0.0684419 0.0805248 0.0412962 +-0.0414824 0.0817867 0.0423837 +-0.0394972 0.0591632 0.0405173 +-0.0699138 0.0616664 0.0106715 +-0.0256486 0.050648 -0.0266189 +-0.0189668 0.125144 0.0245507 +-0.0548939 0.161294 0.00305835 +0.0593671 0.0566851 0.00917266 +-0.0619624 0.0371632 0.0192279 +-0.0458599 0.129594 0.0221735 +-0.078334 0.175787 -0.0461739 +-0.00822607 0.100046 0.0481626 +-0.0580744 0.136937 -0.00566118 +-0.0915979 0.115467 0.0229868 +0.0255167 0.123738 0.0133816 +-0.0331932 0.0348891 0.047012 +-0.076964 0.129602 -0.00711544 +-0.0598599 0.0358888 0.0454954 +0.0450831 0.0463904 0.0280485 +-0.0315243 0.0802674 0.0412906 +-0.0239631 0.11903 -0.0119726 +-0.0346068 0.0483825 -0.0183276 +-0.0825971 0.103328 -0.00360734 +-0.0887132 0.118572 0.00232339 +-0.0188128 0.082729 -0.0390748 +-0.0866936 0.0833424 0.0154842 +0.00371617 0.0348648 0.0208524 +0.0267042 0.122545 0.0181085 +-0.0738109 0.0935956 -0.0146814 +0.0287557 0.0348074 0.0132587 +-0.0344434 0.174206 -0.0015497 +-0.053794 0.086942 -0.0216962 +-0.0584166 0.126929 0.0401124 +-0.0837712 0.127162 0.0508887 +-0.0249431 0.0907384 -0.0344432 +-0.0817429 0.0748341 0.0165378 +-0.0709721 0.148372 0.0407622 +0.0453179 0.0861686 0.00320477 +-0.052904 0.159748 -0.00276649 +-0.0630387 0.15529 -0.0125891 +-0.0628558 0.170957 -0.0505963 +0.0198342 0.0408002 0.0424386 +0.0114164 0.0403794 -0.0231815 +-0.0270194 0.12568 0.0143315 +-0.0340325 0.126267 0.001455 +-0.0096483 0.171546 -0.0270746 +0.0461889 0.0792428 0.016179 +-0.0314795 0.0774889 0.0410863 +0.00441886 0.0361314 -0.0238164 +0.0140504 0.0379362 -0.0217239 +-0.0064667 0.128955 -0.000718006 +-0.00729042 0.0388645 0.0312728 +-0.0537922 0.14151 -0.001138 +-0.0843649 0.125772 0.0501053 +-0.0489003 0.033496 0.00596365 +-0.00972794 0.166651 -0.0186764 +-0.0537672 0.0812389 -0.0213883 +-0.0327797 0.0337757 0.0180041 +-0.0738907 0.107101 0.0373066 +0.0441357 0.0659575 -7.19207e-05 +-0.0929503 0.128215 0.0122521 +-0.0898716 0.133794 0.0302191 +-0.0643705 0.154697 0.0294695 +0.023375 0.0504685 -0.0225374 +-0.052801 0.0690675 0.0379843 +-0.0823518 0.0966615 0.0320686 +0.00650836 0.0813916 0.0558754 +0.0249135 0.0390596 0.0323329 +0.0422621 0.0746939 -0.00581448 +-0.0239734 0.0636045 0.0427616 +-0.0648684 0.0967433 -0.0176098 +-0.0661842 0.163921 -0.0584969 +-0.0338218 0.0886934 -0.0246941 +-0.0545067 0.102902 0.0418134 +-0.0298032 0.034287 0.0163531 +0.00993007 0.126906 -0.00476687 +-0.0376745 0.0379475 0.0444361 +-0.0658844 0.114191 0.045149 +0.0205436 0.121905 -0.00538746 +-0.0134808 0.108609 0.0426611 +-0.0484883 0.0960313 0.0444485 +-0.0326323 0.125019 -0.000941466 +-0.0254216 0.0999543 -0.0239282 +-0.0410688 0.11258 -0.017122 +-0.0434945 0.0676224 0.0409141 +0.0153651 0.0493118 -0.0259325 +0.00422707 0.0782528 -0.0345112 +0.0285181 0.0968051 -0.0184722 +-0.0597676 0.0796261 -0.0193897 +-0.0714963 0.118989 0.0533881 +-0.0566004 0.0335105 0.0169198 +-0.0880799 0.113511 0.0432934 +-0.0208348 0.0956185 -0.0294009 +-0.010501 0.0759377 0.0571751 +-0.0797391 0.110092 0.0425713 +0.0423965 0.0704871 -0.00480867 +-0.071352 0.110742 0.0439553 +-0.0617103 0.0604885 0.000571471 +-0.000492298 0.0605899 0.0560413 +-0.0819087 0.121685 0.0492514 +0.0133657 0.116504 -0.0155461 +-0.0035043 0.0589584 0.0540181 +-0.0700245 0.0833021 0.0413654 +0.0410401 0.0656705 0.029359 +-0.0623583 0.164673 -0.0485921 +0.027252 0.0549488 0.0409918 +-0.0568093 0.0883611 -0.0215879 +0.0409151 0.0390283 0.00994476 +0.0189976 0.0408013 0.0429893 +0.038497 0.0527286 0.031838 +-0.0436566 0.0592613 -0.0123074 +-0.0456035 0.0504974 -0.010193 +-0.0427107 0.0335694 -0.0203532 +-0.0107484 0.0348144 0.0431359 +0.0366972 0.106807 -0.00382741 +-0.0475 0.109814 0.0383224 +-0.0581584 0.0685383 0.037238 +-0.0888985 0.128369 0.0446279 +-0.0618211 0.164489 -0.0586698 +-0.0622151 0.166391 -0.0605094 +0.000668194 0.039196 0.03081 +-0.0494963 0.0974185 0.0440407 +-0.0327214 0.154341 -0.00788327 +0.00831584 0.0624371 -0.0312473 +-0.0441024 0.124581 0.0229348 +-0.00474585 0.0712867 -0.0359934 +-0.0211964 0.0725528 0.0524066 +0.0440002 0.0888695 -0.00280666 +0.0083541 0.0524293 -0.0297113 +0.0104364 0.0472441 0.0475563 +0.0130443 0.113867 -0.0167218 +0.035717 0.0533288 0.0320909 +-0.0439793 0.169659 0.00035763 +-0.0261771 0.0395393 0.0541115 +0.0142627 0.0751304 -0.0300927 +0.0172008 0.0849074 -0.0286671 +-0.0301348 0.156065 -0.00950629 +0.0153602 0.0672491 0.0520407 +0.038354 0.0547461 -0.00609927 +0.0326073 0.112448 0.0288842 +-0.0230436 0.0879523 0.0537722 +-0.0507107 0.0708743 -0.0151986 +0.00170937 0.0361659 0.0210822 +-0.0106905 0.18126 -0.0286694 +-0.0543257 0.121248 0.0372193 +-0.086895 0.143263 0.0379805 +-0.0300853 0.179019 -0.00589649 +-0.0624495 0.15591 0.022857 +-0.0597659 0.0448149 0.0126042 +0.00226448 0.0346925 0.0189009 +0.00270214 0.10527 -0.0214784 +-0.0843731 0.110309 0.0377873 +-0.0603328 0.153535 0.00105643 +-0.00601124 0.0348376 0.0423067 +-0.0419337 0.160883 0.00416203 +0.025639 0.0740461 0.0458389 +-0.0724467 0.0361675 0.00255211 +-0.0515329 0.0431219 -0.00982617 +-0.0668209 0.036036 0.0339126 +0.0328708 0.0740673 0.0404957 +0.0429413 0.0682748 0.0268013 +-0.0687158 0.171626 -0.0372714 +0.0231488 0.116662 0.0336476 +0.0322304 0.0505255 0.0340589 +-0.0869233 0.112018 0.0232463 +-0.078057 0.0907599 -0.0115869 +-0.0538087 0.119788 0.0361741 +0.00650273 0.121045 0.0359095 +-0.00425882 0.128035 0.0283342 +-0.0558184 0.158024 -0.000144968 +-0.0699106 0.10657 -0.0124287 +0.0101685 0.124401 -0.00806495 +-0.0774125 0.06897 0.0169693 +-0.0204069 0.09844 -0.0243451 +-0.0678094 0.180556 -0.0587896 +-0.0490427 0.0341369 0.0285626 +-0.0112286 0.0338605 -0.0218986 +0.0300773 0.0754873 0.0435133 +0.00030024 0.0612559 -0.033673 +0.000950727 0.129943 0.000110463 +-0.083524 0.154076 0.0213615 +-0.0688604 0.0819375 0.0416515 +-0.0674926 0.0889102 0.043735 +-0.000658033 0.0525337 -0.0307361 +-0.0805064 0.103384 0.0314383 +-0.0596514 0.142474 0.0348633 +-0.00849673 0.105867 0.0437425 +-0.0317522 0.0735748 -0.0285005 +0.0171692 0.0345228 -0.00186568 +-0.0229141 0.111944 -0.0185359 +-0.00375332 0.07411 -0.0361467 +-0.00849121 0.103027 0.0437022 +-0.0323725 0.16532 -0.00484492 +0.0250885 0.119458 -0.00473925 +0.00228893 0.0341509 0.0103163 +0.03989 0.0630598 0.0312004 +-0.0146968 0.175692 -0.019662 +-0.00218576 0.0355897 -0.0160761 +0.0318792 0.0686784 0.0407831 +-0.0783091 0.16249 -0.0249404 +-0.0807007 0.0752735 0.0231846 +-0.00686818 0.0385321 0.0081342 +-0.0114932 0.036278 -0.0256312 +-0.076524 0.178854 -0.050295 +-0.093475 0.1283 0.0242551 +-0.063929 0.0354009 0.0416662 +-0.064733 0.15377 0.0322824 +0.0293628 0.105677 -0.0139766 +-0.0544684 0.119419 -0.0121872 +-0.0878486 0.143233 0.0360974 +-0.0866257 0.081991 0.0115028 +0.0324736 0.0490215 0.0326282 +-0.0472578 0.121113 0.0280085 +0.0275416 0.0349624 0.00541796 +-0.0827616 0.091206 0.0312465 +-0.0627318 0.159944 -0.0435973 +0.0444941 0.0637658 0.0284543 +0.0512305 0.0723962 0.00737259 +-0.0374845 0.100078 0.0419234 +0.00446502 0.0977292 0.050995 +-0.090055 0.132436 0.0352224 +-0.0771832 0.107237 0.0346968 +0.0132863 0.0695708 -0.0313558 +-0.0833513 0.099287 0.0301656 +-0.050588 0.0599426 0.0326193 +-0.0116999 0.0599414 -0.0352829 +-0.0629554 0.156782 -0.0386059 +0.0452979 0.0875774 0.0181674 +0.0367705 0.074074 0.0373409 +-0.0378297 0.12794 0.00447467 +0.000472166 0.0388678 0.0256446 +0.00293826 0.0356401 -0.0151121 +0.0194959 0.11257 0.0373879 +0.0178674 0.103889 -0.0200126 +-0.0197782 0.075693 -0.0390468 +-0.0162539 0.171251 -0.016682 +-0.0719027 0.156807 -0.0389123 +-0.0816716 0.0734987 0.0125379 +0.00248698 0.0399628 0.0461692 +-0.0118767 0.105907 -0.0227385 +-0.0633264 0.159631 -0.0180726 +-0.0147126 0.0384481 0.00298688 +-0.0598094 0.0896854 -0.0200419 +-0.0586861 0.0603162 0.0231261 +-0.0518133 0.0531756 0.0296409 +-0.0201151 0.123178 -0.00639815 +-0.0197736 0.0998405 0.0442778 +-0.00649912 0.118331 0.038456 +-0.0868133 0.0846987 0.0154763 +-0.0052065 0.0389581 0.0316148 +-0.0886495 0.113065 0.0417436 +0.0045077 0.107168 0.0418669 +-0.0635616 0.174109 -0.0525858 +-0.0657828 0.082373 -0.0185031 +0.00281465 0.0379685 -0.0135285 +-0.0863919 0.099468 0.00241821 +0.0544797 0.0539552 0.0258897 +-0.0865727 0.08823 0.0252282 +-0.0778042 0.156927 -0.0169128 +-0.00349196 0.114194 0.0413026 +-0.0523232 0.13528 0.029621 +0.0359531 0.0673443 0.0378699 +0.0103588 0.130588 0.0191927 +0.0383356 0.10264 -0.0058258 +-0.0906686 0.139207 0.0161786 +-0.0534974 0.0876167 0.045276 +-0.0609918 0.138116 0.0346365 +-0.010493 0.114167 0.0405696 +-0.0260866 0.0349169 0.0485155 +-0.0519529 0.0531525 0.0236322 +-0.0670544 0.153567 -0.0495044 +-0.000486159 0.0689333 0.056515 +-0.034827 0.0929417 -0.0239227 +0.0157074 0.0821031 0.0526782 +-0.0185046 0.116829 0.0366774 +-0.0357116 0.0358916 0.0155029 +-0.0711005 0.148774 -0.0369587 +-0.0146296 0.185817 -0.0244743 +-0.0871678 0.11039 0.0183619 +-0.0897192 0.129664 0.0425949 +-0.0278047 0.074956 0.0433932 +-0.0408028 0.033851 -0.0276993 +-0.0260362 0.165356 -0.00798775 +-0.022832 0.0348259 0.0458328 +-0.0327846 0.0346162 0.0403814 +0.0292084 0.0350186 0.0149853 +-0.0908558 0.14471 0.0151666 +-0.0389013 0.0336802 -0.0215651 +-0.00950572 0.0590791 0.0548422 +-0.0252687 0.0931263 -0.0308668 +0.00727173 0.0667978 -0.0321541 +-0.0478216 0.109884 -0.018362 +0.00164525 0.0348132 0.00406568 +0.0377191 0.0632143 0.0350986 +-0.0468821 0.108426 -0.0186436 +0.0252001 0.0818001 -0.0245703 +0.00238035 0.127411 0.0292755 +0.0255053 0.103245 -0.0173339 +0.011492 0.0445292 0.0444785 +0.0458991 0.0414061 0.011234 +-0.0302302 0.0537755 -0.0183734 +-0.0870355 0.111737 0.0342553 +0.0298569 0.0835122 0.0432289 +0.0344154 0.0409101 0.0271225 +0.00697892 0.131225 0.0065571 +0.0443985 0.0748779 -0.000803542 +-0.0703751 0.112557 0.0480687 +0.0398576 0.101362 0.0261824 +-0.0146217 0.0450296 -0.0279689 +0.0305372 0.0592022 0.0405121 +-0.0427308 0.169809 0.000879537 +-0.00260639 0.0419888 -0.0252454 +0.000821596 0.0412233 0.0465397 +0.0447686 0.0889311 -0.000811854 +-0.00992934 0.166943 -0.0180552 +-0.0743075 0.170773 -0.046055 +-0.0564797 0.0356812 -0.0108166 +0.0302902 0.078207 0.0438447 +-0.0601407 0.0410386 0.0173224 +-0.0404944 0.0478337 -0.0126145 +-0.00989846 0.0384846 0.0238656 +-0.0338875 0.0780022 -0.0265044 +-0.0309197 0.0805646 -0.0325792 +-0.0788495 0.1177 0.0505094 +0.00204515 0.0345955 -0.0162029 +-0.0115453 0.0445033 0.0495732 +-0.048476 0.116631 0.0320328 +-0.0121876 0.113225 -0.0179296 +-0.0193167 0.0754023 0.0546877 +-0.0653246 0.0648097 0.0284194 +-0.0417336 0.0739469 -0.0182277 +0.0129121 0.0806948 0.0538726 +-0.087913 0.0900756 0.00446758 +-0.0459794 0.167363 0.00259136 +-0.00407632 0.124795 0.032822 +0.00214512 0.131665 0.0104804 +-0.0242177 0.0387671 0.0542484 +-0.0864391 0.131188 0.0477462 +0.0208043 0.12624 0.020186 +-0.0682771 0.163789 -0.0539724 +-0.0225729 0.172715 -0.0135004 +-0.0434823 0.12913 0.00531313 +-0.0465355 0.0790498 0.0431447 +0.0415243 0.0623608 0.0290336 +0.0206713 0.0868458 -0.0260413 +-0.0616015 0.0614498 -0.00273471 +-0.0698033 0.087974 -0.016854 +0.00908719 0.0358267 -0.00842564 +-0.0333922 0.068118 -0.0184774 +-0.0820819 0.150001 0.0344048 +0.0348029 0.113058 0.00110003 +-0.00477205 0.0345951 0.0445699 +-0.0740526 0.172196 -0.0480444 +-0.0192069 0.125855 0.0229991 +-0.0404977 0.0520197 0.0394004 +-0.0367886 0.156481 -0.0105439 +-0.0531367 0.0490718 0.026657 +0.015473 0.0962531 0.0481291 +-0.0492612 0.115146 -0.0157671 +0.0536465 0.0728799 0.00890065 +-0.0263571 0.0549776 0.0383278 +0.0333229 0.0997779 -0.013667 +-0.0551968 0.138069 -0.00309725 +-0.0563111 0.122698 0.0396267 +-0.02088 0.107273 -0.0222055 +0.000924532 0.100829 -0.0227814 +-0.0907853 0.117276 0.00630342 +-0.0134985 0.11551 0.0389419 +-0.0921826 0.114725 0.0193089 +-0.0218136 0.116051 -0.0148581 +-0.0915139 0.140599 0.0171878 +-0.0723659 0.100858 0.0389128 +-0.0227439 0.0669905 -0.0360641 +0.0133914 0.0448806 -0.0247967 +-0.0334245 0.0346344 0.0419763 +-0.083931 0.103265 0.0277985 +-0.0172469 0.116672 -0.0155678 +0.0141307 0.108667 -0.0183815 +-0.0676215 0.0688155 -0.00772966 +-0.049646 0.138599 0.0173958 +-0.0836562 0.0966099 0.0305537 +-0.0662913 0.165749 -0.0234747 +0.0434836 0.0734019 -0.00279222 +-0.0672802 0.0405919 -0.00423161 +-0.0468922 0.0334761 -0.010008 +-0.00688399 0.107372 -0.022762 +-0.0471129 0.13404 0.0104021 +-0.0613177 0.0470312 0.00669678 +-0.0857102 0.0912822 0.000468321 +-0.0564836 0.0589584 -0.00242578 +-0.0544716 0.0607811 0.0269495 +0.0392359 0.0685928 0.0338195 +-0.0907738 0.125596 0.0437739 +-0.0123469 0.0383491 0.0216787 +-0.00750765 0.123161 -0.01054 +0.0441233 0.0959295 0.00318315 +0.0262791 0.0675449 -0.0231801 +-0.0432671 0.0465873 -0.0113888 +0.00633058 0.0567988 -0.0308016 +-0.0135852 0.123715 -0.00700086 +-0.00140945 0.12836 0.0278943 +-0.0283882 0.0380697 -0.0179434 +0.0478387 0.0734572 0.0126134 +0.0038745 0.0367677 -0.0140867 +-0.05057 0.0335281 0.00739754 +0.036728 0.111857 0.010401 +-0.00844614 0.128164 -0.00189615 +-0.0247501 0.0578943 0.0408638 +-0.0467618 0.0657183 0.0385512 +0.038544 0.0726461 0.034619 +-0.00748755 0.111393 0.0423782 +-0.0658988 0.116581 -0.00961273 +-0.0415297 0.118854 -0.0137293 +-0.062219 0.164671 -0.0505894 +-0.00870995 0.128748 0.0252759 +-0.0315128 0.115295 0.0334421 +0.0503991 0.0466746 0.0233055 +-0.0753594 0.113961 -0.00568407 +-0.0866603 0.10494 0.00737931 +-0.0457163 0.0345386 0.0341935 +-0.0466235 0.0548092 -0.0105711 +-0.0516722 0.0693248 0.037985 +-0.0826957 0.0898386 0.0312187 +-0.0154881 0.0758696 0.0561745 +-0.0518084 0.0913012 -0.0220555 +-0.0751346 0.145812 -0.00886348 +-0.0732189 0.155097 0.0278276 +-0.0127272 0.0348945 -0.0256797 +-0.0698308 0.071946 0.0353261 +-0.0657288 0.163321 -0.0189522 +-0.0464914 0.08757 0.0446532 +0.0296359 0.112746 0.0324848 +0.0275411 0.044881 0.0360262 +-0.0187772 0.186086 -0.0166294 +-0.0884282 0.0874635 0.00747939 +0.0325508 0.115423 -0.000329209 +-0.0410423 0.0336551 0.000178151 +-0.0638018 0.0632948 0.0265284 +-0.0224569 0.0524128 0.0435307 +0.057327 0.0700157 0.00587175 +0.0345611 0.0740948 0.0394254 +-0.0409173 0.0351021 0.0417247 +-0.0742127 0.154103 -0.0229066 +-0.0824094 0.151775 0.0307901 +-0.0803828 0.11899 0.049226 +-0.010458 0.0953808 -0.0330949 +-0.0630414 0.149018 -0.0195802 +-0.0293211 0.123712 0.0208659 +-0.0231795 0.0622145 0.0434152 +-0.0287301 0.172704 -0.00834509 +0.00364827 0.128043 -0.00393793 +-0.0642706 0.166732 -0.060237 +-0.0108397 0.175678 -0.0290324 +0.0244048 0.112688 0.0354614 +-0.047561 0.0361661 -0.0123414 +-0.0534987 0.0427392 0.045857 +-0.0231257 0.165273 -0.0171671 +0.0388181 0.104067 -0.00210374 +-0.0356652 0.156121 -0.0104266 +-0.072524 0.106883 0.0374001 +-0.0331471 0.172636 -0.0149853 +0.040265 0.0391745 0.017119 +-0.0342456 0.0708723 -0.0195447 +-0.0687416 0.11428 0.0497375 +-0.0559525 0.0473442 0.0115659 +-0.0244817 0.107102 0.0411704 +-0.00571075 0.0627939 -0.0354611 +0.00805559 0.124767 0.0327601 +-0.0144892 0.0800879 0.0568709 +-0.0444848 0.0775765 0.0423436 +-0.063261 0.129725 0.0418859 +0.0349031 0.111324 -0.00180439 +0.00654043 0.0954774 -0.0291051 +-0.0290961 0.0410008 0.0527549 +-0.0234218 0.0738847 0.0503501 +-0.0567453 0.0342237 0.02862 +0.0376516 0.0425419 0.0281451 +0.0336732 0.115326 0.0207292 +-0.0174938 0.122238 0.0311921 +-0.073145 0.152886 0.0338966 +0.0392908 0.0660103 -0.00977956 +-0.0671096 0.125666 0.0504247 +-0.0815589 0.10988 0.0387619 +-0.00472043 0.0655745 -0.0349603 +-0.0584923 0.0818911 0.043717 +0.0395145 0.0415874 0.025748 +-0.0134628 0.0989564 0.047529 +-0.086226 0.143316 0.0387173 +-0.0675131 0.145595 0.0418048 +-0.0142233 0.174199 -0.0261217 +-0.0564238 0.0718073 0.0399857 +-0.0748487 0.0664559 0.00653551 +0.0254329 0.0835701 0.0474102 +-0.0735012 0.145587 0.0437725 +-0.0684894 0.104161 0.0391613 +0.046334 0.0533506 -0.00578803 +0.0111342 0.034487 -0.019828 +-0.0362745 0.033679 0.00474125 +-0.0580289 0.129633 -0.0066561 +-0.0674348 0.171149 -0.0382253 +0.0172278 0.0353072 0.0394845 +0.0290523 0.120756 0.00899975 +-0.0788357 0.148682 -0.00186858 +-0.0257486 0.0365571 0.0540093 +-0.076603 0.120411 0.0526033 +-0.0107827 0.0784509 -0.0379132 +-0.0283013 0.0648191 -0.0294785 +-0.0318386 0.0929851 -0.0242124 +-0.0504991 0.156412 0.0101915 +0.0435836 0.0722927 0.0259867 +0.0187342 0.112585 -0.0153321 +-0.0434831 0.0762058 0.0427502 +-0.00415334 0.0367895 0.0481682 +-0.0469304 0.116649 -0.0154073 +-0.0434764 0.0335212 0.0034233 +-0.0527322 0.0723715 -0.0160877 +-0.0593593 0.0651443 0.0328932 +-0.05784 0.0926528 -0.0211082 +-0.07134 0.156839 -0.0007386 +-0.000856246 0.103081 -0.0226647 +-0.000582144 0.0347482 -0.0236897 +-0.0384944 0.0464446 0.0402202 +0.0567142 0.0522491 0.00518691 +-0.0616825 0.0346164 0.0411183 +0.00851655 0.0758606 0.0561295 +0.0196258 0.127091 0.0083394 +-0.0719446 0.159605 -0.0399328 +-0.0356475 0.0379034 -0.0136529 +0.0172444 0.125917 0.0260258 +0.0094903 0.116849 0.0377607 +0.0232634 0.124781 0.0210949 +-0.0349607 0.125018 0.0217662 +0.0185443 0.12732 0.00510228 +0.0118903 0.0349087 0.0279111 +-0.00450764 0.0842735 0.0572857 +-0.0148777 0.0364156 0.0513074 +-0.0861402 0.0859086 0.000475654 +-0.0472303 0.164057 -0.00679428 +0.010042 0.0970288 -0.0247384 +0.0134328 0.0846923 0.0528905 +0.0456558 0.0449086 0.0258493 +-0.00349992 0.0746709 0.0587938 +-0.0719223 0.112846 0.049279 +-0.0117304 0.0670858 -0.0365895 +-0.0107336 0.0670714 -0.0363227 +0.0281295 0.110111 0.0355841 +0.00524969 0.0395071 0.0332712 +-0.030417 0.0360576 0.0517185 +-0.0191865 0.172705 -0.0222871 +0.032634 0.0954843 -0.0150589 +-0.0901468 0.129651 0.0415795 +0.015143 0.0346779 0.0251566 +-0.0926446 0.122835 0.02928 +-0.0735699 0.131215 0.0516643 +-0.0342826 0.126777 0.01609 +0.00752119 0.0813632 0.0555605 +-0.0325031 0.116645 0.0321616 +0.0237641 0.0349876 0.0120857 +-0.0592101 0.142401 0.0336275 +0.0449966 0.0931749 0.00418165 +0.0373285 0.0874946 0.0364747 +0.0175277 0.0348888 -0.0135142 +0.0451983 0.0889806 0.0171667 +0.0123957 0.0434077 -0.0245497 +-0.0759299 0.126701 -0.00794305 +-0.0895421 0.090213 0.0124508 +0.0392717 0.0938049 -0.00924672 +-0.087269 0.112677 0.0244432 +0.0369017 0.0770479 -0.0128074 +-0.019615 0.127443 0.00679651 +-0.058632 0.131139 0.0380532 +-0.0759599 0.0675387 0.00855626 +-0.0867924 0.139107 0.00519652 +-0.051888 0.0528335 0.0130005 +-0.0604943 0.108372 0.0386396 +-0.0620497 0.155563 0.0244621 +-0.0414999 0.0690877 0.0417125 +-0.000194321 0.121911 -0.011267 +0.0260147 0.0563895 0.0427437 +-0.00627779 0.0395112 0.048561 +0.0073902 0.0433817 -0.0245369 +0.00650458 0.105723 0.0419107 +-0.0890324 0.144705 0.01118 +0.0241216 0.0968854 0.045587 +-0.0284948 0.111359 -0.0178892 +-0.0842319 0.104575 0.0266516 +-0.0575865 0.0586919 0.0194779 +-0.0281815 0.125725 0.0109634 +-0.0638193 0.158306 -0.0465978 +-0.0355455 0.11407 -0.0167228 +-0.0683421 0.111385 0.0423299 +-0.0144529 0.178665 -0.0210547 +-0.00977952 0.0372711 0.0498001 +-0.0625714 0.164724 -0.0395894 +-0.088699 0.0915828 0.0224195 +-0.0594754 0.144099 -0.00268098 +-0.0925679 0.116061 0.0213084 +-0.0317212 0.0350332 0.0489115 +-0.0106525 0.165176 -0.016643 +0.00734712 0.12316 -0.0106668 +-0.0554936 0.104327 0.041387 +0.00250176 0.0620246 0.0566613 +-0.00947595 0.130265 0.0133884 +0.0276842 0.0768145 0.0453329 +0.00629218 0.0639808 -0.0323017 +0.00798329 0.130466 0.00265255 +0.0573764 0.0621793 0.0248727 +-0.0628961 0.158419 -0.0175871 +-0.0639761 0.129691 -0.00851425 +-0.0630898 0.161515 -0.0224551 +-0.0838815 0.111187 0.0425305 +0.0464938 0.0778639 0.0121785 +-0.0265128 0.116639 0.0325108 +-0.0545075 0.047347 0.012948 +-0.0677458 0.149084 -0.0355035 +-0.0687437 0.173038 -0.0415702 +-0.0258142 0.0389536 0.0363636 +0.0354622 0.0808406 0.0390375 +-0.028407 0.156859 -0.0100656 +-0.0728523 0.100773 -0.0133449 +-0.000973441 0.0353569 0.0464761 +0.0217031 0.104101 -0.0182402 +-0.0900893 0.135135 0.0242145 +-0.0209098 0.0382599 0.00734769 +-0.0384975 0.0676842 0.0417259 +0.0505086 0.0461176 0.0032623 +-0.0324927 0.0932098 0.0444316 +-0.029469 0.17882 -0.00554327 +-0.0770271 0.0743283 0.0300122 +0.0313581 0.116535 0.0255569 +-0.0772285 0.173502 -0.0405421 +0.0114915 0.130592 0.00962923 +-0.0739058 0.125263 -0.00826143 +-0.0709356 0.0780686 0.0386829 +-0.0450603 0.156487 0.00667449 +-0.00258285 0.0361873 -0.0247048 +-0.00135222 0.101336 0.0444015 +-0.0894746 0.139279 0.0281819 +-0.00967152 0.0968708 -0.0306358 +-0.0704928 0.117562 0.0527864 +-0.0678494 0.155094 0.00351036 +-0.0752747 0.175704 -0.0425921 +-0.032145 0.0863362 -0.0265533 +-0.0345086 0.0775176 0.0416541 +0.0409071 0.0711839 0.0309718 +0.0182107 0.084868 -0.0280483 +0.037986 0.0861315 0.0356473 +-0.0158582 0.107196 -0.0215252 +-0.0536497 0.0382495 -0.0113033 +0.0400088 0.107038 0.00721094 +-0.0111671 0.0867859 -0.0382994 +-0.0758579 0.0963896 -0.0129621 +0.00275941 0.0343655 0.0174794 +-0.0528912 0.109829 -0.018387 +0.0352142 0.037348 0.0177424 +-0.0770086 0.090082 0.0382275 +-0.0537852 0.0344427 0.037794 +-0.0317722 0.0335835 -0.0256749 +-0.0533077 0.12062 -0.0114531 +-0.0670377 0.155239 -0.0519345 +0.0248201 0.0343822 0.00913252 +-0.077345 0.0838842 -0.0115833 +0.0143045 0.0638067 -0.0299257 +-0.00129201 0.123843 -0.0093277 +0.0380905 0.0941294 0.0341306 +-0.0932985 0.125478 0.0122618 +-0.034118 0.163722 -0.0147399 +0.0298704 0.114081 0.0310466 +0.0255132 0.110081 0.0370706 +-0.0476672 0.0405803 -0.0117113 +-0.0472716 0.130968 0.0245047 +-0.0619845 0.128209 -0.0080954 +-0.0644855 0.0917771 0.0443552 +0.00846054 0.0341727 0.000449307 +0.000942621 0.0347668 0.0167534 +-0.0160225 0.0958165 -0.0315688 +-0.0534556 0.0353304 0.0456783 +0.0142349 0.129723 0.0106274 +-0.0726014 0.0365856 0.00586956 +0.033081 0.038417 0.0236373 +-0.0678588 0.128454 0.0493479 +0.0276968 0.0797349 -0.0226793 +0.0317217 0.0639399 -0.0186866 +-0.00482566 0.0896201 -0.0359284 +-0.0704978 0.124601 0.053003 +-0.00149487 0.115594 0.0408235 +-0.0360812 0.0358497 0.0136623 +-0.00514848 0.0385788 0.00662082 +-0.0791696 0.110508 0.0441428 +-0.0215028 0.0448835 0.0530162 +0.0173223 0.0699836 0.0514025 +0.0379734 0.0672941 0.0355158 +-0.0858805 0.0926571 0.00145452 +0.00396412 0.0977772 0.0510597 +-0.0656399 0.11715 0.0490043 +-0.0771179 0.165222 -0.035974 +-0.0198829 0.0383003 0.00206982 +-0.0187849 0.159551 -0.0109781 +-0.0655235 0.0347285 0.0315692 +0.0298088 0.0848631 0.0431899 +-0.0202144 0.186446 -0.0187314 +-0.0737921 0.165213 -0.0399888 +-0.0287531 0.0767493 -0.0350292 +-0.0108764 0.178532 -0.0297831 +0.00248459 0.114158 0.0410016 +0.0523216 0.0588453 -0.00357691 +-0.0424144 0.147803 0.00244515 +-0.0387777 0.0827042 -0.0213153 +-0.0338762 0.105703 -0.0205658 +-0.087924 0.1365 0.0420055 +-0.0747046 0.0837005 -0.0145969 +-0.0657521 0.033742 -0.00672308 +-0.045381 0.0381676 -0.0212668 +-0.0868004 0.0846768 0.00848321 +0.0294149 0.118962 0.0248216 +-0.034174 0.107559 -0.0198979 +0.0280502 0.0740858 0.0440821 +-0.0776167 0.0914005 0.037394 +0.0235133 0.0407023 0.0389233 +-0.0568656 0.102623 -0.018982 +-0.0678684 0.063022 0.000880975 +0.0360361 0.100737 0.0329764 +-0.0922724 0.125575 0.0332589 +-0.0929242 0.120168 0.0332909 +-0.018498 0.108568 0.0416031 +0.0174435 0.128281 0.0160914 +-0.0242219 0.178615 -0.0196227 +-0.0704096 0.163806 -0.0479588 +-0.0810819 0.0814326 -0.00557353 +-0.0595808 0.0380953 -0.00917151 +-0.00023307 0.0988811 0.0510016 +0.00703854 0.0344034 -0.0150394 +-0.092972 0.125468 0.0112596 +-0.00348845 0.115565 0.0406522 +-0.000499736 0.11143 0.0424297 +-0.00349598 0.0562185 0.05401 +0.0274875 0.0380349 0.0264602 +-0.0191507 0.168261 -0.0198644 +-0.0708777 0.131245 0.0502751 +-0.0591241 0.1154 0.0371963 +0.015252 0.122005 -0.00948865 +-0.0238533 0.0958019 -0.0255967 +-0.0225065 0.111294 0.03935 +0.0394335 0.0834241 0.0342316 +-0.0599597 0.121237 0.0413621 +-0.0151227 0.160977 -0.0122661 +-0.0856126 0.0792275 0.0145081 +-0.0304111 0.0336116 -0.02356 +-0.0300276 0.0875944 -0.030572 +-0.0387164 0.0695709 -0.0161311 +-0.0658849 0.153363 -0.0443952 +-0.0108819 0.168382 -0.0176467 +0.0450682 0.090383 0.0171641 +-0.0624967 0.149081 -0.013576 +-0.0222042 0.178612 -0.0212581 +0.0294982 0.120461 0.0105965 +-0.0414977 0.115265 0.0337662 +-0.0499421 0.135837 0.0234945 +-0.0843142 0.152356 0.00793113 +-0.0410616 0.156231 -0.0095971 +-0.0238697 0.104438 -0.0232028 +-0.0067213 0.065597 -0.0353344 +-0.0108037 0.0827117 -0.0384206 +0.0138699 0.049008 0.0461763 +0.016266 0.0750624 -0.0291952 +-0.0813824 0.099165 -0.00657823 +-0.0355882 0.126454 -0.000576513 +-0.0627783 0.0343233 0.0272634 +-0.0864194 0.133874 0.0462429 +-0.0424946 0.0972875 0.0422451 +-0.00875136 0.116762 -0.015718 +-0.00610573 0.035829 0.0485597 +-0.0634859 0.146784 0.0381458 +0.00949393 0.109876 0.0399119 +-0.0286135 0.0817842 -0.0355888 +-0.0785092 0.126003 0.0529555 +-0.0564526 0.0602802 -0.00348733 +-0.0632263 0.153648 -0.0346156 +-0.0212315 0.0839098 0.0563274 +-0.0185478 0.0382321 0.00966598 +-0.0629734 0.126755 -0.00855487 +-0.0607657 0.139716 -0.00595313 +-0.0192289 0.178619 -0.0235673 +-0.0154933 0.0730227 0.0553537 +0.0208153 0.0564412 0.0475406 +-0.0390833 0.0486663 -0.0122287 +-0.065493 0.153273 0.0335324 +0.0608914 0.0637395 0.0141606 +-0.0153829 0.18014 -0.0206255 +-0.0822314 0.0842513 -0.00555381 +-0.0678037 0.0880304 -0.0174902 +0.0361089 0.0577094 0.0344737 +-0.0464121 0.035458 -0.0187253 +-0.0666201 0.0338653 0.00919115 +-0.0674808 0.0688292 0.0332504 +-0.0659293 0.156005 0.0129201 +-0.0294246 0.0861745 0.0444819 +-0.0581309 0.155502 0.017154 +-0.0726537 0.15621 0.0148854 +-0.0168438 0.180138 -0.0192059 +-0.0656741 0.0356447 0.0159226 +0.0163545 0.0507599 -0.025927 +-0.0293383 0.123554 -0.00265044 +0.00679991 0.131589 0.0107583 +-0.0398245 0.0942915 -0.0229995 +-0.0945717 0.122812 0.0182725 +0.00440363 0.0390362 -0.0241943 +-0.0798195 0.105901 -0.00558882 +-0.0117856 0.0813065 -0.0386038 +0.00749342 0.0372096 -0.0118978 +-0.0744971 0.176396 -0.0436946 +-0.00968478 0.0584187 -0.0340646 +0.0312312 0.117425 0.00123717 +0.0184875 0.0976002 0.0470854 +-0.0716235 0.0693585 0.0301698 +0.039816 0.0393083 0.00327619 +-0.0835287 0.11032 0.027366 +-0.0245014 0.043543 0.0534366 +0.0370893 0.106835 -0.00283087 +-0.0567623 0.154944 0.0190948 +-0.0275761 0.125766 0.0126577 +-0.00827698 0.0408222 0.049207 +0.0553826 0.0699889 0.0228528 +0.012476 0.0976634 0.0485624 +0.0597169 0.0580863 0.0181825 +-0.0261346 0.168251 -0.00989215 +-0.0319337 0.0680008 -0.0224492 +-0.0367004 0.0680804 -0.0157124 +-0.0192371 0.0959207 0.0497533 +-0.0482812 0.115062 -0.0157267 +-0.0625405 0.132491 0.039434 +-0.0464975 0.163768 0.00545168 +-0.0809296 0.0885877 0.0337432 +-0.0341216 0.0395911 0.0493113 +0.0322123 0.0856789 -0.0192748 +-0.0822934 0.0775365 0.000511811 +0.00709964 0.0342068 0.00386204 +-0.086438 0.0832915 0.00949498 +-0.0244616 0.0474336 0.050725 +0.00565547 0.0365592 0.0251573 +-0.0274618 0.045988 0.0503593 +0.010522 0.119127 0.036469 +-0.0736141 0.151246 -0.0348888 +-0.024687 0.0892375 0.0511394 +0.00296667 0.0390863 0.0277676 +-0.0494919 0.154959 0.0103413 +-0.058864 0.139321 -0.00549203 +-0.0327877 0.082138 -0.0285334 +-0.0423065 0.150496 -0.00548521 +-0.0631749 0.149 -0.0205832 +-0.0218319 0.0363367 -0.0187811 +-0.0723757 0.0638786 0.0154336 +-0.0358563 0.126885 0.000788129 +0.0192111 0.080597 -0.0276192 +-0.0620809 0.0336347 -0.00771095 +-0.0313625 0.0510794 -0.0143586 +-0.063822 0.115596 0.0429106 +-0.0645614 0.138204 0.0400205 +-0.0824235 0.124446 0.0510342 +0.0555936 0.0567472 0.0257684 +-0.0293723 0.0422984 0.0515712 +0.0526995 0.0702438 0.0035897 +-0.0647148 0.06349 0.0261636 +0.00450679 0.0702611 0.0557926 +-0.0421206 0.171253 -0.0079388 +-0.00823225 0.127328 0.0283641 +0.0085198 0.0716538 0.0557746 +-0.0603515 0.116839 0.0389782 +-0.0758447 0.151365 -0.0158827 +-0.0913489 0.117296 0.00730629 +-0.0787438 0.101744 -0.00857364 +-0.0758718 0.109158 -0.00765228 +0.0141976 0.0850086 -0.0301852 +0.0110282 0.0968851 -0.0245853 +-0.0821235 0.0802564 0.0295192 +-0.0500787 0.154631 -0.00525635 +-0.0278864 0.105837 -0.0222471 +-0.0355149 0.0804148 0.0426568 +0.0156112 0.0519525 0.0469795 +-0.0758417 0.114903 -0.00554375 +-0.00130995 0.124776 -0.00834251 +-0.0285122 0.180211 -0.00692909 +0.0124807 0.0949598 0.0504131 +-0.0679136 0.113718 -0.0102762 +-0.0871543 0.105024 0.0183639 +0.0375648 0.0926236 -0.0120119 +-0.0297787 0.125132 0.0177406 +-0.0253546 0.121816 0.0267508 +0.0463872 0.0806547 0.00917972 +-0.0386145 0.0492284 -0.011639 +-0.0604969 0.0918487 0.0452694 +-0.0754744 0.151328 -0.022882 +0.0184783 0.101734 0.0458501 +-0.0250671 0.0385158 0.031526 +-0.0384759 0.091717 0.0434324 +-0.0394992 0.0916803 0.0429883 +-0.0668335 0.143964 0.0420823 +-0.0653424 0.0629827 0.0247148 +-0.0644392 0.112372 0.0382632 +0.0242087 0.039076 0.0343007 +-0.0535427 0.0402957 -0.0106063 +-0.082326 0.0748249 0.00451639 +-0.0544972 0.0959632 0.0436086 +-0.020823 0.0868434 -0.0377816 +-0.0636947 0.167813 -0.0415938 +-0.0448731 0.128505 0.000263047 +-0.0608825 0.0996865 -0.0185327 +0.0079329 0.0630739 0.055296 +0.00434495 0.0973121 -0.027058 +-0.091323 0.113292 0.0153266 +-0.0074977 0.0801462 0.0578122 +-0.0899881 0.118599 0.00429898 +-0.072593 0.155911 0.00171291 +0.00944326 0.128939 -0.000930002 +-0.0669203 0.110822 0.0381745 +-0.0378406 0.0957387 -0.0228102 +-0.00994641 0.0339021 -0.0251924 +-0.0261195 0.0706905 0.0432458 +0.0285346 0.121033 0.017364 +-0.0702811 0.17421 -0.0421289 +-0.00949024 0.104446 0.0436658 +-0.0877186 0.105023 0.0153645 +0.0487537 0.043125 0.0102298 +-0.0709615 0.148056 -0.0324394 +-0.0785455 0.146115 0.0422588 +-0.0777749 0.150053 -0.00387978 +-0.0747481 0.158885 -0.00783629 +0.022966 0.0347513 0.0194226 +-0.000497806 0.0842866 0.0575088 +0.0329127 0.116986 0.00902312 +0.0303386 0.119339 0.00661655 +0.0335365 0.0483507 0.0312493 +-0.0506321 0.0530807 0.0328365 +-0.0283907 0.123379 0.0211752 +0.043167 0.0831963 -0.0047762 +-0.00976599 0.121876 -0.011136 +-0.0836817 0.0786288 0.0214472 +-0.0584699 0.0344613 0.0385122 +-0.031399 0.116965 -0.0137545 +-0.0679334 0.145349 0.0422649 +0.0355447 0.11347 0.012835 +-0.0343438 0.0384811 -0.00836679 +-0.0303159 0.0678299 -0.0274662 +0.030827 0.0835413 0.0428747 +-0.0367713 0.0871639 -0.0235593 +-0.0249824 0.117062 -0.0139085 +-0.0633873 0.169402 -0.0465883 +-0.0567938 0.0498747 0.00808849 +-0.0719281 0.148635 -0.0350398 +-0.0764024 0.150045 -0.00692327 +-0.085242 0.115675 0.000251725 +0.0352163 0.0367258 0.0146563 +-0.0476332 0.0345872 0.0389835 +-0.0306482 0.0819602 -0.032565 +-0.0258283 0.172717 -0.011167 +-0.0745076 0.115686 0.0517763 +-0.0625234 0.0413191 -0.00677899 +-0.02745 0.110307 -0.0187882 +-0.0444951 0.104328 0.0415155 +-0.0774643 0.155549 -0.0139037 +0.0154943 0.105779 0.0433144 +-0.00688511 0.0982482 0.0516445 +-0.0476227 0.122378 -0.0113753 +-0.0830725 0.139367 0.045586 +-0.0431901 0.039319 -0.0232745 +0.00551778 0.0828244 0.0566316 +-0.0364708 0.152123 0.0014574 +-0.00749897 0.0815283 0.0577578 +-0.0165021 0.118207 0.0361456 +0.013481 0.0358562 0.0436245 +0.0102178 0.0836927 -0.0316174 +0.0514697 0.0462224 0.00523719 +0.0399822 0.0910991 -0.010396 +-0.0510223 0.0339346 0.00874224 +-0.0327803 0.0793117 -0.0285199 +0.0549936 0.0732019 0.0123756 +0.0461994 0.0750316 0.00518987 +0.0371924 0.0391306 0.0220088 +-0.0737191 0.152664 -0.0318934 +-0.0548531 0.149577 0.0276913 +-0.00305215 0.125834 0.0316944 +-0.021742 0.0389771 0.0371835 +0.0252695 0.0532659 -0.021679 +-0.0633235 0.0388939 0.025715 +-0.053898 0.105542 -0.0189379 +-0.0718855 0.122345 -0.00846405 +-0.0334848 0.0561021 0.0379001 +-0.0635384 0.061476 -0.00191873 +0.0137785 0.0346695 0.0230735 +0.0204936 0.1267 0.00866396 +-0.0258672 0.156547 -0.00846874 +-0.089402 0.0996815 0.0144017 +-0.010288 0.172711 -0.0218803 +0.00772266 0.115023 0.0394097 +-0.0363729 0.176071 -0.00683571 +-0.0525546 0.0444744 -0.00849373 +-0.0577063 0.155408 0.0158579 +-0.0512663 0.12652 -0.00563382 +-0.0277699 0.0661915 -0.0304661 +-0.0394907 0.0422995 0.0416287 +-0.0592646 0.0346371 0.0433189 +-0.0917594 0.117442 0.030311 +0.0188028 0.0349604 -0.00569856 +-0.0184644 0.0528818 0.0482087 +-0.0649365 0.1467 -0.0209465 +-0.0397769 0.152293 -0.00702124 +0.056742 0.0696177 0.0218717 +0.0435205 0.0637429 0.0281056 +0.0514429 0.0626408 -0.00275857 +-0.0668197 0.100942 -0.0159632 +-0.078886 0.0812827 -0.00855752 +0.0483563 0.0710513 0.00477309 +-0.0415729 0.151549 -0.00635576 +-0.0122139 0.169818 -0.0178463 +-0.0454996 0.163749 0.00555272 +-0.0779251 0.168693 -0.0322923 +-0.0455017 0.0973341 0.0429686 +-0.0932761 0.122751 0.0112823 +-0.00193792 0.0388572 0.00152241 +0.0379602 0.108292 0.00117706 +0.0447742 0.0777119 -0.00080388 +-0.0365645 0.0341557 0.0276322 +-0.077566 0.155252 0.0102497 +-0.00781043 0.0346187 0.0439246 +0.0218954 0.061892 0.0473866 +0.0229726 0.108506 -0.0149598 +0.0350891 0.111006 -0.00183676 +0.00866181 0.128565 0.0271896 +0.00435977 0.0481043 -0.0288152 +-0.00551112 0.0390255 -0.00865823 +-0.0205328 0.113457 -0.0181494 +-0.0851368 0.0832799 0.0224738 +0.00348766 0.115539 0.0402625 +-0.0174898 0.105786 0.0424611 +-0.087451 0.133828 0.0444349 +0.00492538 0.111581 -0.020193 +0.0318279 0.0713659 0.0407221 +-0.0121811 0.0984293 0.0498089 +-0.0747959 0.149331 0.0394056 +-0.0571923 0.0344404 0.0353306 +0.0154304 0.0417921 -0.0229429 +-0.0481114 0.159106 -0.00699154 +-0.0285 0.0960446 0.0448096 +0.0354946 0.0642547 -0.0137843 +-0.0204882 0.0388257 0.0339872 +0.0353716 0.0741014 0.0388421 +-0.0157653 0.161968 -0.0148041 +0.00551566 0.0799926 0.0558154 +0.0181043 0.128017 0.0106305 +-0.0644854 0.0986987 0.0423063 +-0.0415014 0.0492193 0.0396812 +-0.0900528 0.132428 0.0342227 +-0.0126494 0.0496668 -0.0310907 +-0.0321289 0.0337822 0.0109163 +-0.0625403 0.149101 -0.00657536 +-0.0124899 0.104431 0.0434394 +-0.0728072 0.15012 0.0385587 +-0.0275374 0.156717 -0.00957418 +-0.0627683 0.04307 0.0276693 +0.00651507 0.0344231 0.0163793 +-0.0631947 0.163133 -0.0265887 +-0.0264832 0.105687 0.0411729 +0.0072963 0.0341516 -0.018557 +-0.018657 0.109944 -0.0204332 +-0.0843505 0.0842533 0.0274024 +-0.0531944 0.139931 -0.000456373 +-0.0741436 0.100877 0.037779 +-0.0658548 0.0952898 -0.0176963 +-0.0504071 0.163936 0.00393123 +-0.00384396 0.0384339 0.019723 +-0.0889438 0.137894 0.0261932 +-0.017832 0.0346972 0.047013 +0.0156145 0.128768 0.00543431 +-0.0517309 0.0489114 0.0216412 +-0.0358204 0.046598 -0.0238768 +-0.059344 0.139552 0.0335155 +0.0510761 0.0567889 0.0297952 +-0.0787812 0.166656 -0.0319662 +0.030718 0.111397 0.0323042 +0.0535299 0.049514 0.0226619 +-0.0446433 0.0346533 0.0343218 +-0.0169852 0.186593 -0.0230311 +-0.0743965 0.149892 -0.0310959 +-0.0373231 0.0354917 0.0439186 +-0.000691629 0.100255 0.0478272 +-0.0818959 0.141783 0.000186922 +-0.0304023 0.0382885 -0.00186367 +-0.00349386 0.0925503 0.0560196 +-0.088924 0.151541 0.0211005 +-0.0824519 0.0856305 -0.00554258 +0.0469336 0.0511672 0.030779 +-0.0852791 0.132127 -0.000702015 +-0.0891862 0.112803 0.0347042 +0.0229651 0.0928857 0.047441 +-0.0442655 0.127665 -0.00291939 +-0.0917744 0.132406 0.0242297 +0.00738689 0.0359942 0.0260187 +0.0456627 0.0890114 0.0111648 +-0.0860966 0.11232 0.0268196 +-0.0556879 0.117086 -0.0137514 +0.0093902 0.0739182 0.0557875 +-0.0794167 0.137236 0.0495785 +-0.0893497 0.130881 0.0042394 +-0.0656682 0.0337431 0.00949839 +-0.0263524 0.059005 -0.029433 +0.0104643 0.0346107 -0.00703394 +-0.0631576 0.119928 0.0457283 +0.0423355 0.0972587 0.0241615 +0.0603447 0.0595379 0.00916361 +0.0495034 0.0488243 -0.00166079 +-0.0740753 0.155198 0.0041876 +-0.0656926 0.125639 0.0489587 +-0.00648958 0.0503786 0.0513549 +0.0381951 0.102007 0.0289909 +-0.0592102 0.0595951 0.00211544 +0.0285202 0.0622348 -0.0207982 +-0.0876555 0.144675 0.00917716 +0.0519851 0.0567984 0.0293579 +-0.0300707 0.124739 0.00148409 +-0.0725865 0.0874189 0.0409577 +-0.00281209 0.0882041 -0.0358187 +-0.0637344 0.0736795 -0.0161836 +0.0142616 0.0794232 0.0540604 +0.0458875 0.0787805 0.0205292 +0.0245051 0.0849065 0.0478503 +-0.0617895 0.083881 -0.0194032 +0.0333636 0.0364347 0.0163708 +0.0165102 0.111269 0.0389693 +0.033894 0.111352 0.0280456 +-0.00616098 0.0344967 -0.0177303 +-0.0662325 0.14347 -0.0127636 +-0.0199914 0.0962147 -0.0280142 +-0.0259005 0.126064 0.0117956 +-0.0929641 0.121523 0.0342815 +0.00656148 0.101677 0.0461619 +-0.0600389 0.0627348 0.027804 +0.0335486 0.0889696 0.0416029 +-0.0688127 0.0908552 -0.0166124 +-0.0856608 0.0854539 0.0244177 +-0.0759458 0.0974591 -0.0125133 +-0.0667171 0.171901 -0.0422833 +-0.0191016 0.0431933 0.0528315 +-0.0589426 0.0357407 0.0458703 +0.013481 0.127543 -0.00145794 +-0.0239185 0.0383353 -0.00428996 +-0.0627701 0.0824471 -0.0192325 +-0.0614696 0.136692 0.0357094 +-0.0810116 0.0734375 0.0175497 +-0.0759173 0.12523 -0.00781198 +-0.00824401 0.0384507 0.0170014 +-0.0641628 0.157463 -0.0125984 +-0.0178575 0.122517 -0.00769635 +-0.0596856 0.0659756 -0.00895149 +-0.0807952 0.106052 0.0302403 +0.0156574 0.0925729 -0.0260099 +-0.081817 0.0734713 0.00853447 +-0.052947 0.1293 -0.00466978 +0.0313864 0.0929268 0.0420114 +-0.0242749 0.174204 -0.0124276 +-0.0678958 0.0610238 0.00808464 +-0.0477867 0.135371 0.0169352 +-0.0514248 0.0500855 0.0140283 +0.0463863 0.075041 0.00619921 +-0.0120829 0.121468 -0.0106691 +0.0474936 0.0651497 0.0284001 +-0.0370341 0.127886 0.0121304 +-0.0240288 0.0385625 0.0316972 +0.0484803 0.0651161 -0.0012457 +-0.0516556 0.0569841 0.0295138 +-0.0639861 0.131146 -0.00837414 +-0.0504965 0.087636 0.0455301 +0.03603 0.0808066 0.0380541 +-0.0869174 0.117103 0.00125292 +-0.0617229 0.155313 -0.01958 +-0.0631289 0.15403 -0.0107687 +0.00528045 0.114267 -0.0191116 +-0.0639453 0.167747 -0.0398404 +0.0288613 0.0520696 0.0379853 +-0.0623548 0.166257 -0.0465894 +0.000543528 0.123331 0.0344653 +0.0375704 0.0618629 0.0348997 +-0.0391935 0.128299 0.00543562 +-0.0593991 0.0472653 0.0079341 +-0.0244003 0.0390404 0.0383653 +-0.0676508 0.0338326 0.0090061 +-0.0292136 0.07193 -0.032514 +-0.0374976 0.0861098 0.0439188 +0.0247244 0.0549721 0.0426251 +-0.0892169 0.151457 0.0141575 +-0.02429 0.121354 -0.00839434 +-0.0618416 0.098205 -0.0180486 +-0.0320742 0.0383234 -0.000421092 +-0.0488761 0.107007 -0.0192731 +-0.0476462 0.123357 -0.010393 +0.0220922 0.12286 0.0278182 +-0.00150357 0.0647954 0.0567431 +0.000502823 0.0870298 0.0569751 +-0.0581295 0.0643065 0.0321224 +-0.0188005 0.0568615 0.0490899 +-0.0794271 0.0732336 0.00151817 +0.019219 0.0848258 -0.027423 +-0.0344972 0.116614 0.0320154 +0.000192029 0.0811649 -0.0359709 +-0.0741702 0.0968478 0.0394202 +0.00621596 0.083814 -0.033411 +-0.0671177 0.159814 -0.0107973 +-0.0187526 0.0641914 -0.0363857 +0.0556876 0.0493473 0.0181935 +-0.0364983 0.059104 0.0398977 +-0.071802 0.181053 -0.0556554 +-0.0116602 0.168404 -0.0170453 +-0.0478952 0.0713156 0.0406183 +0.0354015 0.0476244 -0.00628637 +-0.0262003 0.0750789 0.0460261 +-0.0550327 0.0674609 0.0370807 +-0.0565425 0.0415574 -0.00871771 +-0.0546448 0.115434 0.0349037 +-0.0682182 0.15577 -0.00101225 +-0.066899 0.132617 0.0454244 +-0.0743656 0.172848 -0.0365047 +-0.0734703 0.155395 0.00293075 +-0.0125152 0.0589286 0.0534547 +0.00233104 0.0554199 -0.0313859 +-0.0805618 0.101855 -0.00659893 +-0.0537592 0.0797599 -0.020636 +-0.0237797 0.125538 0.0184413 +-0.0508814 0.161419 0.0066624 +-0.0742588 0.0655235 0.0100016 +0.0457502 0.0805926 0.00319942 +-0.0764848 0.142819 0.0460732 +-0.0442438 0.113637 -0.0162318 +-0.00550074 0.0870334 0.0571343 +-0.059876 0.0997119 -0.0187764 +-0.069062 0.149033 -0.0371338 +-0.0598711 0.154188 0.0296083 +-0.044481 0.0973337 0.0428134 +0.0255359 0.118038 0.0305151 +-0.000498881 0.112805 0.0421187 +-0.073083 0.0981963 0.0397086 +-0.0766217 0.068534 0.0175211 +-0.038773 0.11398 -0.0166127 +0.0194763 0.0837958 0.0507486 +-0.0809353 0.145916 -0.000819165 +0.0301953 0.0476864 0.0346108 +-0.0284906 0.0932063 0.0444855 +-0.071967 0.162417 -0.0419522 +-0.0647895 0.0838376 -0.0190209 +-0.00994817 0.0389455 -0.0113423 +0.00268547 0.035256 0.0455248 +-0.0587181 0.0481161 0.00163754 +-0.0537032 0.140954 0.0276054 +-0.0166811 0.0377146 -0.0171581 +-0.0896263 0.0969991 0.0154111 +-0.0475653 0.166962 -0.00492463 +-0.0684985 0.0986495 0.0414678 +0.0399619 0.0730961 -0.00981181 +-0.0433911 0.121364 -0.0123522 +-0.0619851 0.167813 -0.0525933 +-0.0768904 0.0733563 0.0291265 +-0.058879 0.104045 -0.0185386 +-0.0154965 0.0573571 0.0513792 +-0.0115598 0.09531 -0.0330219 +-0.0335104 0.125389 -0.00127044 +0.0292004 0.119729 0.0233163 +-0.0141909 0.171251 -0.024451 +0.00225805 0.0711729 -0.0343766 +0.000838494 0.130009 0.0243594 +-0.0186635 0.0360947 0.0525267 +0.0441946 0.0874765 -0.00278813 +-0.0347028 0.122731 -0.00776716 +-0.0478246 0.129609 0.027299 +-0.0784918 0.144814 0.0436628 +0.020477 0.0989516 0.0463466 +-0.0870404 0.113136 0.0295379 +0.012093 0.120504 0.0352323 +0.00825492 0.0739666 -0.0336091 +0.00112807 0.104475 -0.0219821 +-0.0142621 0.120334 -0.0114431 +-0.0507965 0.0345143 0.033135 +0.0311896 0.0857114 -0.0197343 +-0.0894234 0.0956355 0.01542 +-0.0775093 0.0961888 -0.0115304 +-0.0358262 0.0929298 -0.0238031 +-0.0774962 0.131676 0.0527303 +-0.0421326 0.160667 -0.0107094 +-0.0276983 0.125752 0.00966815 +-0.045336 0.129618 0.020889 +-0.00368188 0.0613041 -0.0346439 +-0.0748644 0.171601 -0.033829 +-0.0207882 0.0770942 -0.0390427 +-0.044533 0.160785 0.0064482 +-0.0789135 0.0799145 -0.00757704 +-0.0700794 0.154941 0.0289273 +-0.0313268 0.0609036 -0.0184352 +-0.0853384 0.107683 0.0213404 +-0.0624789 0.152144 -0.0275875 +-0.0427656 0.0797392 -0.0197597 +0.00722196 0.0865913 -0.0328221 +-0.0720619 0.109399 0.0395074 +-0.0911632 0.132299 0.00922827 +-0.00610552 0.129863 0.0232869 +0.02524 0.115374 0.03316 +0.00541955 0.0912903 -0.0327619 +0.00896308 0.0344141 -0.00340754 +-0.0356782 0.0636593 -0.0138055 +-0.0555057 0.153886 0.023914 +0.0207355 0.0349558 0.0059225 +0.0360179 0.0848402 0.038086 +-0.0488433 0.098515 -0.0220378 +-0.0633934 0.178218 -0.0607118 +-0.0846638 0.0778105 0.0155166 +0.0437393 0.0720229 -0.000789276 +-0.0288953 0.122588 -0.00566495 +-0.025973 0.0851197 0.051146 +-0.0782416 0.0913778 0.0366028 +-0.0494978 0.0960237 0.0444817 +-0.0785831 0.0731535 -0.00247436 +-0.0698391 0.165209 -0.0499791 +-0.0586839 0.0335669 0.00570948 +-0.0610591 0.155387 0.024814 +-0.0642828 0.163385 -0.0227384 +-0.0658667 0.0334936 -0.00108817 +0.037341 0.0888457 0.0365275 +0.02301 0.0347163 0.00286296 +-0.0590207 0.126708 -0.0075139 +0.0463679 0.0792556 0.0081871 +-0.00960203 0.0406207 -0.0262166 +-0.0771598 0.160359 -0.0157997 +-0.0425011 0.163766 0.00491011 +-0.00971544 0.177216 -0.0294611 +0.021747 0.102101 0.0439088 +-0.087802 0.139216 0.0403868 +-0.0694557 0.0421945 0.00370163 +0.0173244 0.0580274 -0.0281164 +-0.011686 0.178646 -0.0240587 +-0.0245154 0.158144 -0.00224812 +0.021637 0.0948486 -0.0224193 +0.00951901 0.0504027 0.0504431 +-0.0252093 0.112572 -0.0171753 +-0.0736758 0.108402 0.0380105 +-0.0551152 0.0341599 0.0272668 +-0.0462814 0.155049 0.00841735 +-0.0164865 0.0730277 0.0553332 +-0.0853981 0.109039 0.0213496 +-0.0817879 0.0734817 0.0075372 +-0.0543644 0.15733 0.00977334 +-0.0391365 0.0406682 0.0418102 +0.00445432 0.130749 0.00275136 +0.0247455 0.105845 -0.0161092 +-0.0554962 0.0904299 0.0451691 +-0.00849692 0.0731924 0.0575239 +-0.0665361 0.11864 0.0512424 +-0.0771905 0.152834 -0.00389169 +-0.0684956 0.0958684 0.0422138 +-0.086559 0.0806364 0.0135028 +-0.065258 0.156162 0.0146042 +-0.0134788 0.105828 0.0432751 +-0.00273284 0.0712345 -0.035418 +0.0276777 0.0972525 -0.0189451 +-0.0768441 0.113421 -0.00459179 +-0.0291819 0.174148 -0.0171874 +-0.0392913 0.0344977 0.0373408 +-0.00249868 0.0965524 0.0536599 +-0.026518 0.10985 0.0386071 +-0.0272212 0.114809 -0.0155223 +-0.0617195 0.0669875 0.0343055 +-0.0824261 0.101938 -0.00456304 +-0.0889571 0.0955775 0.00843273 +-0.0288529 0.100117 -0.0233232 +-0.0899265 0.130893 0.00523191 +-0.0346189 0.112824 -0.0174204 +-0.0154754 0.111334 0.0410203 +-0.053649 0.0335392 -0.00958395 +-0.000215874 0.126274 0.0312521 +0.00810763 0.0366956 0.0273459 +-0.0915032 0.133721 0.0182157 +0.0193574 0.0537071 -0.027254 +-0.0617049 0.070743 -0.0146345 +-0.0745149 0.121791 0.0533186 +-0.070524 0.0682803 0.0295828 +-0.0206697 0.0697068 0.051972 +-0.0918785 0.141976 0.0181723 +-0.0408421 0.0345979 0.00840679 +-0.0738542 0.15551 0.00718209 +0.0055205 0.0427186 0.0455303 +-0.065431 0.168513 -0.0346313 +0.0194077 0.0659 0.0490938 +-0.0485039 0.0876217 0.0453743 +-0.0622817 0.0458517 0.0346831 +0.0349983 0.0362655 0.0094693 +-0.0912374 0.140583 0.0161703 +-0.0884146 0.113764 0.0250911 +0.0142472 0.0860448 0.0523279 +-0.0131413 0.127389 -0.000900164 +0.0289187 0.0580129 -0.0187889 +0.00423189 0.0768627 -0.0347545 +0.0204663 0.0385832 -0.00969847 +-0.0217971 0.0348633 0.0460203 +-0.0864575 0.101794 0.0247295 +0.00132582 0.0568889 -0.0321653 +-0.0697484 0.0793376 -0.0160307 +-0.0845391 0.102087 -0.000621587 +-0.0733924 0.0656461 0.018954 +-0.0391909 0.0342717 0.0287528 +-0.065551 0.112475 0.040245 +-0.0628947 0.161497 -0.0505862 +-0.0455612 0.125305 -0.00846085 +0.0204165 0.110729 -0.0153427 +-0.0119941 0.16759 -0.0225943 +-0.0778434 0.153328 0.00140062 +-0.0743032 0.152688 -0.027892 +-0.0719627 0.134048 -0.00796724 +-0.0322554 0.0722092 -0.0264952 +-0.0689145 0.123836 -0.00886831 +-0.0292201 0.0564848 -0.022383 +-0.0336564 0.0343441 0.0369141 +0.0587559 0.0579922 0.0215357 +0.0331644 0.1138 0.0262385 +0.0155789 0.125536 -0.0032763 +-0.0511913 0.034459 0.0313456 +0.0336899 0.0357287 0.00969367 +0.0540437 0.0734433 0.0120297 +-0.0588961 0.106893 -0.0176578 +-0.0158316 0.18484 -0.0207268 +0.0120317 0.0342138 -0.0138856 +0.0335354 0.0380053 0.0222769 +-0.0118847 0.117889 -0.0148923 +0.00991822 0.0342953 -0.00310719 +0.00806259 0.0342288 -0.0204182 +-0.00962665 0.0384388 0.00947704 +-0.00349166 0.0534503 0.0541192 +0.0248931 0.108132 -0.0145556 +-0.0355172 0.106999 0.038376 +0.0298839 0.118971 0.0235707 +-0.0896201 0.0969823 0.0124196 +0.00795856 0.126912 0.0298215 +-0.0734288 0.149863 -0.0358672 +-0.0513643 0.132495 0.031006 +-0.056967 0.0535025 0.000612409 +-0.0226813 0.0349023 0.0509736 +0.0573538 0.0634191 0.00214341 +-0.0178849 0.0387376 -0.0108688 +-0.0690262 0.170476 -0.0316587 +-0.0162544 0.183109 -0.0200888 +-0.0569078 0.052097 -0.000371255 +-0.0845703 0.11062 0.0357089 +0.035496 0.0454077 0.0303438 +-0.00267498 0.100539 0.0471075 +-0.080721 0.0845507 0.0336553 +-0.0900133 0.150126 0.0131697 +-0.0628916 0.0631016 0.0268901 +-0.0739067 0.163816 -0.0379732 +-0.0313311 0.0487062 0.0434625 +-0.036476 0.0533606 0.0387027 +-0.0636484 0.15559 0.00937973 +0.0135801 0.0874029 0.0531363 +-0.0259964 0.0967524 -0.0245741 +-0.0665286 0.168031 -0.0580342 +-0.0794099 0.141428 0.0463829 +-0.0496093 0.0334738 -0.00871292 +0.0373859 0.082128 0.0365587 +-0.00650329 0.0547609 0.0534371 +0.0253836 0.0503366 -0.0210264 +-0.00332845 0.128773 0.0271941 +0.0363318 0.0601344 -0.0117401 +-0.0258635 0.103016 -0.0235702 +-0.0251408 0.168241 -0.0184358 +0.018845 0.0956057 -0.0232473 +-0.0712372 0.167165 -0.0209901 +-0.0759412 0.151358 -0.0178788 +-0.0784019 0.152013 0.0336008 +0.000968412 0.0391138 -0.00557511 +-0.0865136 0.106289 0.0083757 +-0.0623969 0.0335761 0.00673913 +-0.0769787 0.135423 -0.00568624 +0.021851 0.0591836 0.0473037 +-0.0524335 0.115217 0.0341034 +-0.0884925 0.144689 0.01017 +-0.0774954 0.147028 0.0416906 +0.00429953 0.0340852 0.0162355 +-0.0489061 0.0346101 0.0421693 +-0.0377668 0.0812615 -0.0209367 +-0.0321125 0.0496937 -0.0183514 +-0.00333701 0.121977 -0.0113118 +-0.063853 0.129717 0.0428324 +0.0122687 0.0724051 -0.0314733 +-0.0295052 0.113904 0.0347936 +0.0428284 0.0676747 -0.00179274 +-0.0665096 0.0944832 0.0425185 +-0.0324964 0.117987 0.0309791 +-0.0240568 0.0972281 0.0446316 +-0.0729302 0.128204 -0.00868672 +-0.0930613 0.118852 0.0392987 +-0.0179932 0.0940702 -0.0337993 +-0.0276364 0.0917699 -0.0296042 +0.0270825 0.114018 -0.00875387 +-0.0701334 0.160982 -0.047936 +0.0160414 0.0343167 -0.00190332 +-0.0407181 0.0336157 0.00208844 +0.0537368 0.0581963 0.0283843 +0.0459393 0.0792136 0.00418579 +0.00219887 0.0866713 -0.0341557 +-0.0874475 0.125307 -0.000719081 +0.0171658 0.0974165 -0.0229214 +-0.0555243 0.0344634 0.0339194 +0.00337546 0.131746 0.0137901 +-0.037361 0.155079 0.00374727 +-0.00966712 0.0394179 0.0374824 +0.0401633 0.102703 -0.00178896 +-0.0792807 0.167978 -0.037009 +0.0137845 0.0344 -0.00993851 +-0.0224906 0.034851 -0.0281799 +-0.0815485 0.124491 0.0516101 +0.0440694 0.0973609 0.0121636 +-0.0361101 0.0351289 -0.0167641 +-0.0672139 0.168667 -0.0295504 +0.00726635 0.0696573 -0.0326992 +-0.0474987 0.0987688 0.0431343 +-0.0879643 0.115809 0.00328051 +0.0212116 0.083355 -0.0266295 +-0.0413155 0.0345032 0.0369079 +-0.0830031 0.148729 0.00315098 +-0.0365029 0.0818729 0.0434567 +-0.0265303 0.0632322 0.0390504 +0.0560084 0.0549549 0.0021707 +-0.00162661 0.100486 0.0474782 +-0.00782745 0.0882395 -0.0367822 +-0.0874416 0.113109 0.00532366 +-0.0755108 0.126011 0.0529241 +0.0317406 0.107408 0.0337947 +-0.0280888 0.121741 0.0242898 +-0.0114519 0.126605 -0.00415103 +-0.00942316 0.129915 0.019193 +0.0305901 0.117314 -0.000462026 +-0.00449008 0.116939 0.0397737 +-0.0174829 0.0365879 0.0522725 +-0.0480399 0.136313 0.0145941 +0.0078895 0.0386539 0.0453509 +-0.059976 0.125502 0.0413668 +0.00922467 0.131237 0.0102208 +-0.0164537 0.0924837 0.0552632 +-0.0397063 0.0680709 -0.01554 +0.0144891 0.0990552 0.047648 +-0.0194892 0.0771957 0.0553527 +0.00314961 0.0344334 0.00286196 +0.0322227 0.0828447 -0.0192606 +-0.086166 0.115735 0.00128445 +-0.0628659 0.161473 -0.0525859 +-0.0897633 0.133813 0.0392039 +-0.0931113 0.126933 0.0272608 +0.0442448 0.0902943 -0.00180307 +0.0383075 0.041189 0.0258499 +-0.038679 0.0636652 -0.0136088 +-0.0640888 0.165507 -0.029848 +0.00695321 0.13108 0.0193768 +-0.0281007 0.162292 -0.0150733 +0.0192374 0.0749637 -0.0278698 +0.0244608 0.0941673 -0.021671 +0.0131476 0.100265 -0.0227775 +-0.0301385 0.166718 -0.0165418 +-0.0651412 0.159482 -0.0565006 +0.0342867 0.0700233 0.0389954 +-0.0695171 0.141232 -0.00845814 +-0.0904292 0.148866 0.0241237 +-0.0253439 0.0693349 0.0439513 +-0.0623474 0.166249 -0.0485903 +-0.0193027 0.0445534 0.0525624 +-0.0258791 0.105846 -0.022482 +-0.0331634 0.0381954 -0.000525199 +-0.0640739 0.0617863 -0.0011495 +0.0413993 0.0942972 -0.00577735 +-0.030183 0.155051 -0.00785968 +-0.0209835 0.159643 -0.00415092 +0.0227131 0.118044 0.0330191 +-0.0268485 0.124528 0.000469072 +-0.0241773 0.17417 -0.0202285 +-0.012912 0.0339283 -0.0204101 +0.0235417 0.109895 0.0378397 +-0.0800641 0.107437 0.0308747 +-0.0374695 0.0383458 -0.0088734 +0.0372523 0.0646113 0.0362056 +-0.0324907 0.0817336 0.0416408 +0.0138217 0.125251 -0.00497301 +-0.0427639 0.126553 -0.0057736 +-0.0467249 0.0753156 -0.0175399 +-0.0861037 0.109061 0.0193453 +0.0206619 0.0348672 0.0224824 +-0.0804996 0.127434 0.052885 +0.00919876 0.0964636 -0.0261302 +-0.0321423 0.0806683 -0.0305334 +0.0242996 0.120934 0.0286395 +-0.0429021 0.171269 -0.00696466 +0.0145253 0.126603 0.0278836 +-0.0657391 0.142564 -0.0101503 +-0.0125598 0.0943837 -0.0340846 +-0.0809608 0.0720856 0.0135459 +-0.0230054 0.0386784 -0.0118395 +-0.0234022 0.157317 -0.0083471 +-0.0700956 0.06197 0.00856658 +0.0361469 0.0875521 0.038321 +-0.00703497 0.101085 0.0445106 +-0.0217097 0.181473 -0.0209735 +-0.0310875 0.179405 -0.00921261 +0.00340822 0.117733 -0.0168392 +-0.0306641 0.062253 -0.0214244 +-0.00851812 0.0604987 0.0555487 +-0.0105044 0.0745085 0.0567054 +-0.00265316 0.0511482 -0.0311061 +-0.0764634 0.157616 -0.00941011 +-0.0224335 0.0371726 0.0541058 +-0.0432016 0.171084 -0.00202068 +-0.0523174 0.057382 0.0266177 +0.0595665 0.0566863 0.0161765 +0.00171621 0.126464 -0.00619605 +-0.0635036 0.095949 0.0432601 +-0.00748541 0.0856517 0.0572176 +-0.0142172 0.114376 -0.0171381 +-0.0106623 0.0511436 -0.032067 +-0.0292482 0.0345559 -0.0204636 +-0.0369573 0.0340894 0.0258321 +-0.0544756 0.0413314 0.0465715 +-0.0940023 0.125512 0.016258 +-0.0685195 0.0916417 0.0424016 +-0.076491 0.140037 0.0480957 +-0.021763 0.159801 -0.0034487 +0.0107652 0.110575 -0.0191667 +-0.0296434 0.0486725 0.0446006 +0.0205709 0.0463131 0.0417824 +0.0371829 0.0726727 0.036151 +0.00170794 0.1258 0.0319097 +0.00812607 0.108726 -0.0199063 +-0.088847 0.0874807 0.0104655 +-0.0614823 0.0761372 0.0417782 +-0.077632 0.077285 -0.00766199 +-0.0914347 0.132413 0.0262297 +-0.0380759 0.16073 -0.01276 +-0.0580841 0.132712 -0.00634758 +-0.00546375 0.117984 -0.0150376 +-0.0825526 0.110518 0.0415894 +-0.0567945 0.0589511 -0.00142935 +-0.00849356 0.0842936 0.0575382 +-0.0464941 0.0987388 0.0427545 +0.0199235 0.0365522 0.038924 +-0.0181358 0.159669 -0.00704365 +0.0214919 0.0906421 0.0482356 +-0.0308996 0.107699 -0.0200324 +0.0310327 0.118783 0.0168832 +-0.049761 0.069112 0.038562 +-0.0388211 0.091456 -0.0235256 +-0.0139638 0.180133 -0.0220777 +0.0153381 0.127037 -0.000904662 +-0.0219975 0.107603 -0.0219593 +-0.0448317 0.0927682 -0.0220335 +-0.0127292 0.0909963 -0.036642 +0.0174939 0.0350076 -0.00788091 +-0.016176 0.165587 -0.0188354 +0.0276821 0.0862408 0.0453967 +-0.00121407 0.102594 0.0440764 +-0.0167645 0.162218 -0.0151135 +-0.0446938 0.0665983 -0.0153032 +-0.0709583 0.135514 -0.00804855 +0.0152869 0.0794603 0.0538116 +-0.028039 0.0849631 0.0475609 +-0.0252122 0.108563 -0.020971 +-0.0501485 0.141642 0.00337658 +-0.0802229 0.143442 0.044034 +-0.0728736 0.0659781 0.0205309 +-0.083982 0.134868 -0.000717316 +-0.070349 0.172644 -0.037875 +-0.015485 0.0673895 0.0543529 +-0.0374989 0.108379 0.0375203 +0.0194281 0.0399108 -0.0177171 +-0.0508059 0.0898498 -0.0218327 +-0.0916067 0.130926 0.00923792 +-0.0657827 0.158229 -0.0103034 +0.00352818 0.0386899 -0.0121702 +-0.0147383 0.10835 -0.0207588 +-0.0496313 0.111407 -0.0178803 +-0.0413837 0.128875 0.00906534 +-0.0523163 0.134709 -0.00240246 +0.00961512 0.122501 0.0348066 +-0.0755017 0.140041 0.0481 +-0.0678883 0.145704 -0.022127 +-0.0230319 0.0374462 0.0541561 +-0.00425848 0.0961384 -0.0318255 +-0.0895594 0.135155 0.0312102 +-0.0623104 0.0594537 0.00702264 +0.00422975 0.0796448 -0.0342885 +-0.0618471 0.153751 -0.0215773 +-0.00905798 0.034739 0.0470958 +-0.0575286 0.126935 0.0396404 +-0.0298496 0.180049 -0.0116061 +-0.0317613 0.0567558 -0.0133876 +-0.0839019 0.105911 0.0262878 +-0.0715304 0.102729 0.03849 +0.0144241 0.127312 -0.00121761 +-0.0787914 0.14589 -0.00282549 +-0.00925999 0.0421824 0.0495336 +-0.0284001 0.0385729 0.034376 +-0.0690967 0.148938 0.0398784 +-0.0561651 0.153258 0.0280528 +0.0408211 0.10424 0.0171662 +0.0569661 0.0701435 0.00568959 +-0.0318479 0.09723 -0.023215 +0.00233723 0.0391647 0.0293747 +-0.0839319 0.117006 0.0485566 +-0.0310508 0.0693178 -0.0264576 +-0.0270974 0.0794315 0.0481933 +-0.00975454 0.0728065 -0.0376393 +-0.0907216 0.131054 0.0332303 +-0.00149823 0.0535022 0.0547476 +-0.0920442 0.126938 0.0322524 +-0.049095 0.140149 0.0113941 +-0.0605441 0.113772 -0.0142303 +-0.00976932 0.0756525 -0.0380331 +-0.0878532 0.127045 0.0464651 +-0.010533 0.178644 -0.025906 +0.0593699 0.0691831 0.0171767 +-0.024781 0.0769658 -0.0376048 +0.0423711 0.0575006 -0.00528711 +0.0460928 0.061454 -0.00359733 +-0.0408554 0.101386 -0.0212924 +-0.0446853 0.169846 -0.00596698 +-0.0499657 0.0572278 0.0334797 +-0.0145604 0.127706 0.0231688 +-0.0624931 0.153672 -0.0316068 +0.0559752 0.0635544 0.0263749 +-0.0741944 0.0678888 0.022137 +0.0128784 0.0534523 0.0500797 +-0.014497 0.082865 0.0570346 +0.0100519 0.0351376 0.0435561 +-0.0764979 0.135856 0.0507679 +-0.0505672 0.0545537 0.0173366 +-0.073291 0.0682485 0.025526 +0.0168973 0.0504721 0.0453108 +0.0597511 0.0567143 0.0111681 +0.00962081 0.119433 -0.0146957 +-0.0261763 0.0931476 0.0454624 +-0.0034975 0.0661744 0.0565538 +-0.0174573 0.0601724 0.0514531 +0.0587589 0.059387 0.00417226 +-0.0388249 0.122181 0.0278208 +-0.0685252 0.175096 -0.0570393 +-0.0628061 0.0896011 -0.0190246 +0.0306772 0.118704 0.0210209 +-0.0655003 0.083298 0.0438708 +0.0560223 0.0713695 0.00682475 +-0.0298518 0.100096 -0.0230635 +-0.0422245 0.148296 -0.00246029 +-0.00149333 0.112805 0.0421166 +-0.0829153 0.0925695 0.0313446 +-0.0394018 0.0468721 -0.0179145 +-0.0784825 0.135851 0.0506454 +-0.0734876 0.127439 0.0525898 +-0.0280931 0.033441 -0.0266965 +0.0607571 0.0609589 0.0141669 +-0.0692316 0.172989 -0.0403442 +-0.0397906 0.162354 0.00198884 +-0.0505067 0.0805184 0.044061 +-0.0716519 0.156794 -0.0409079 +0.0407885 0.10564 0.00816522 +-0.00717727 0.0999816 0.0485274 +-0.0646289 0.156694 -0.0465976 +-0.089623 0.0983355 0.0134109 +0.00279805 0.0339767 -0.0211497 +-0.0142152 0.17272 -0.0253585 +-0.0396036 0.174135 -0.00601981 +-0.0669938 0.0358141 0.0313063 +-0.0497731 0.0627792 0.0345527 +0.0229897 0.121378 0.0295865 +-0.0457551 0.0336493 -0.0154708 +-0.0539285 0.152376 0.0223916 +-0.0664975 0.108359 0.0380432 +0.0293811 0.04325 -0.00550019 +-0.0166832 0.0525719 -0.0322771 +0.0164877 0.105762 0.0431793 +-0.0171637 0.0956465 -0.0313986 +-0.0314959 0.111117 0.0366419 +-0.0788622 0.169438 -0.0409605 +-0.0673163 0.13687 0.0448543 +-0.00450662 0.0828853 0.0572758 +-0.086732 0.125284 -0.00171301 +-0.0339024 0.123839 0.0236394 +-0.0665906 0.0686018 0.0336345 +-0.0647932 0.143933 0.0397518 +0.0283692 0.0466516 -0.00870467 +0.0329293 0.104175 -0.0123189 +-0.0761401 0.0728821 0.0296904 +-0.0142042 0.169737 -0.0232161 +-0.068634 0.151185 -0.044245 +-0.0135754 0.0347863 -0.0255909 +0.019989 0.0436019 0.0426848 +-0.015693 0.057044 -0.0346551 +-0.00164401 0.0482043 -0.0300627 +-0.0311183 0.172722 -0.00474304 +-0.0250193 0.118984 -0.0119284 +-0.0325683 0.124672 -0.00180773 +-0.0781672 0.0694403 0.0164131 +0.0335232 0.0673414 0.0396281 +-0.0927165 0.117489 0.0383035 +0.0402856 0.10561 0.017163 +-0.0284035 0.166813 -0.0078902 +-0.00473635 0.13076 0.00793547 +-0.0216948 0.0386212 -0.00966204 +-0.0436382 0.11786 -0.014681 +0.0533192 0.0587911 -0.00291354 +-0.0153516 0.0970497 -0.0288687 +-0.0434963 0.0661943 0.0406667 +-0.0466152 0.145766 -0.000178732 +-0.0206008 0.0386838 -0.0150911 +-0.0509261 0.0335608 -0.00538789 +-0.0896998 0.137926 0.0341919 +-0.0278811 0.0378156 0.0189805 +0.0364086 0.0854455 -0.0167057 +0.0349072 0.0875927 0.04003 +-0.0243811 0.0738035 0.0484997 +-0.0470246 0.133586 0.0187098 +0.00950521 0.0772084 0.0556135 +-0.0192998 0.0985099 -0.0244 +0.0447739 0.0438422 0.0248039 +-0.0504965 0.0819144 0.0441383 +-0.0346492 0.0577427 -0.0111408 +-0.048101 0.135891 0.0168055 +0.00147386 0.103921 -0.02207 +0.0494979 0.0678406 0.0265165 +0.00621357 0.0880484 -0.0332214 +-0.0763594 0.158279 -0.023921 +0.0359549 0.0646627 0.0378653 +-0.0462327 0.128102 0.0242709 +-0.0570384 0.142741 -0.0023851 +-0.0156536 0.0496375 -0.0309655 +-0.0157015 0.164 -0.0105798 +0.0160661 0.0349193 -0.0155613 +-0.0555615 0.0615422 -0.00607893 +-0.0506452 0.142899 0.00154993 +0.0227041 0.124378 0.0023667 +-0.0690811 0.0343024 0.0100819 +0.0296092 0.114943 -0.00583865 +0.0252655 0.0864752 -0.0236184 +-0.0579352 0.153021 -0.000467328 +-0.0699851 0.168026 -0.0510102 +-0.0649515 0.126767 -0.00875296 +-0.0310902 0.124844 0.00108587 +-0.07951 0.149797 0.0367578 +-0.0514931 0.156432 0.0104716 +-0.0854224 0.0885478 -0.00153705 +-0.0622051 0.0333895 -0.00205752 +-0.00958914 0.0376967 -0.0257201 +0.0438525 0.0874765 0.0251696 +-0.00448652 0.114189 0.0411781 +-0.0741351 0.0860483 0.039718 +-0.0162681 0.118552 -0.0135478 +-0.00571384 0.0655793 -0.035147 +-0.051609 0.164108 -0.000948719 +-0.0346229 0.116833 -0.0136016 +0.0105065 0.107115 0.0414414 +-0.0484736 0.0917654 0.0440291 +9.10767e-05 0.108392 -0.0207972 +0.0522547 0.0611036 -0.00320855 +0.00856462 0.11946 -0.0147195 +0.0326237 0.0768475 0.0419257 +0.0282302 0.0872832 -0.0216049 +-0.0693757 0.155378 0.0277002 +-0.0182673 0.180142 -0.0177524 +-0.0285043 0.0545632 0.0363758 +-0.0218074 0.0756618 -0.0388536 +-0.0633749 0.1608 -0.057006 +-0.0892506 0.151522 0.0201032 +-0.0472272 0.0642822 0.0376403 +-0.0699509 0.134055 -0.00826728 +-0.0820286 0.074884 0.0125291 +-0.0576046 0.151067 0.0326375 +-0.0425494 0.0346163 0.040046 +-0.0619058 0.105434 -0.0174028 +-0.0753497 0.108878 0.0391875 +-0.0594974 0.0946317 0.0447571 +0.013384 0.078066 0.0545225 +-0.0431375 0.160652 -0.0100842 +-0.0258359 0.0945143 -0.0266147 +-0.0245117 0.0536384 0.0409132 +-0.0664072 0.169883 -0.0364165 +-0.0726615 0.0640995 0.00799778 +-0.0451579 0.0395668 -0.0202936 +-0.00773777 0.0727528 -0.0370634 +0.0135086 0.116829 0.0366875 +-0.0836964 0.106272 0.0263573 +-0.0303071 0.0339954 0.0147064 +-0.000759903 0.102685 -0.0227147 +0.0258263 0.0624492 -0.0231007 +-0.0674047 0.179923 -0.0541082 +-0.0857367 0.111526 0.0418488 +-0.0560454 0.148678 -0.00182226 +-0.0476918 0.0635243 -0.0129244 +-0.0642806 0.164881 -0.0270495 +-0.0574962 0.108397 0.0389105 +0.00241269 0.0347278 -0.0230504 +-0.00449379 0.0548276 0.0540049 +-0.0627171 0.147502 -0.0125815 +-0.0213288 0.0581411 0.0459349 +-0.0608837 0.0367165 0.0449842 +0.0211328 0.126504 0.0131782 +0.00740015 0.0418656 -0.0238182 +-0.0737971 0.148055 0.0412991 +-0.00374732 0.0726737 -0.0357771 +-0.0204954 0.103009 0.0433484 +-0.0210495 0.127369 0.0106273 +0.0306407 0.0431175 0.0298982 +0.0109957 0.0698921 0.0545336 +-0.0439898 0.0350927 -0.0256307 +-0.0670986 0.0347786 0.0136227 +0.0215717 0.0401714 -0.00970048 +0.0214864 0.0934187 0.0477129 +-0.0174765 0.0715932 0.0547125 +-0.0246025 0.0824997 0.0540808 +-0.0774249 0.155543 -0.015906 +-0.00557868 0.109705 -0.0221876 +-0.00234233 0.10113 0.044176 +0.0314145 0.0384146 -0.00113672 +-0.0708385 0.0965734 -0.0156262 +-0.0358426 0.0345846 0.0397566 +0.0166934 0.111749 -0.0164123 +-0.0461447 0.0396778 -0.0162811 +0.0460542 0.0820303 0.0141751 +0.024254 0.0776067 -0.0252579 +-0.0585858 0.14384 -0.00236725 +-0.0590542 0.155341 0.0226214 +-0.0425019 0.049221 0.0396798 +-0.0737231 0.156865 -0.0279142 +-0.0640946 0.155219 -0.00966954 +-0.0136075 0.0420889 -0.0267571 +-0.0149109 0.0391012 0.0366853 +-0.0768619 0.116386 -0.00596474 +0.0464851 0.0651547 0.0281822 +-0.0672589 0.077344 0.0400985 +-0.0768893 0.176966 -0.046083 +-0.0870251 0.136346 0.00321516 +-0.046566 0.128368 -0.00156221 +-0.0881324 0.103677 0.0173573 +-0.0358716 0.10426 -0.0206916 +-0.00158589 0.110252 -0.0207823 +-0.0645869 0.117148 0.0471018 +-0.0493593 0.121175 0.032055 +0.00351232 0.0575709 0.0538233 +-0.0114209 0.107659 -0.022044 +-0.0134464 0.0388153 -0.00818864 +-0.0485053 0.108444 0.0391022 +-0.0783276 0.0839475 -0.0105972 +-0.0422429 0.129048 0.0117038 +0.0230175 0.0903576 -0.0236845 +-0.0840147 0.0993167 -0.00358504 +-0.0538991 0.108397 -0.0185513 +-0.00168424 0.0583535 -0.0329231 +0.00135578 0.0347199 0.040341 +-0.0858041 0.131212 0.0485351 +0.0546169 0.0694261 0.0240301 +0.0349752 0.0684447 -0.0157877 +0.0095201 0.0716259 0.0554078 +-0.00749453 0.0952341 0.0547544 +-0.019553 0.163976 -0.00913576 +-0.0640343 0.0457636 0.00169557 +-0.017901 0.0381554 0.0134869 +0.0133255 0.0594987 -0.0290386 +0.00648582 0.047441 0.0497645 +-0.0239518 0.123773 0.0227902 +-0.0318252 0.0609455 -0.0174329 +-0.0928746 0.122834 0.0282828 +0.00226062 0.131309 0.0062251 +-0.0414935 0.112526 0.0356807 +0.0202561 0.0791555 -0.0271913 +-0.0331056 0.0338156 0.0161014 +0.0297787 0.0446629 0.032196 +-0.0792621 0.084024 -0.00957002 +-0.0697175 0.155623 0.0028257 +-0.0391149 0.0337868 -0.0291782 +-0.0893977 0.135151 0.0292068 +0.04371 0.0987542 0.0111628 +-0.0281559 0.0380199 0.00608926 +0.0552084 0.0493743 0.00621284 +-0.0861539 0.149931 0.0300167 +0.042296 0.0775058 -0.00576261 +0.0415736 0.0765545 0.0302447 +-0.0532046 0.133931 0.0318349 +-0.0939252 0.118758 0.016301 +-0.027019 0.123094 -0.00421217 +-0.0471842 0.0355635 -0.0162689 +0.0137449 0.12859 0.0232984 +-0.0388402 0.0957243 -0.0226737 +0.0393482 0.0966985 0.0306886 +0.0405486 0.0596459 0.0301455 +-0.083332 0.0992842 -0.00460735 +0.0403123 0.0491555 -0.00629774 +-0.0135559 0.0378433 -0.0166597 +-0.0655014 0.0958911 0.0424957 +-0.00976126 0.0358952 0.049479 +-0.0624412 0.150596 -0.00171821 +-0.064981 0.131148 -0.00860586 +-0.0763864 0.109432 0.0420745 +-0.00149437 0.0801423 0.0576885 +-0.0163316 0.166866 -0.0132843 +-0.0862104 0.140486 0.00518463 +-0.0484837 0.159357 0.00832828 +-0.063685 0.169395 -0.0455915 +-0.0676574 0.0344024 0.0120657 +-0.0324957 0.0889348 0.0439847 +-0.0285919 0.0494861 -0.0235098 +-0.0925344 0.124191 0.0302708 +-0.0898664 0.135182 0.0372006 +-0.0675175 0.146991 0.0409028 +-0.0643109 0.0721294 0.0381075 +0.0336777 0.107392 0.0312726 +0.0416487 0.0806113 0.0304012 +0.0108925 0.130607 0.00797847 +0.00350574 0.071674 0.0559901 +-0.0687556 0.0680025 -0.00564855 +-0.0668955 0.116554 -0.00922261 +-0.0147132 0.0599449 -0.0358879 +-0.023059 0.0825255 0.0553698 +-0.0305016 0.108423 0.0388291 +-0.0575086 0.0507939 0.00466306 +-0.0811465 0.155009 0.0163089 +-0.0281138 0.125637 0.0139342 +0.00450187 0.0575756 0.0536585 +-0.0124992 0.0745024 0.0565746 +0.030795 0.119096 0.00823469 +0.0112449 0.0943173 -0.0278535 +-0.00350029 0.0856691 0.0572933 +-0.0135749 0.18083 -0.0284353 +-0.0387321 0.0724952 -0.0174162 +-0.0366243 0.151025 -0.00298791 +0.0282135 0.0579727 -0.0197309 +-0.0828916 0.0775885 0.00151125 +-0.00164877 0.0496874 -0.0307148 +0.0386307 0.106935 0.00116239 +-0.0871923 0.0861012 0.021463 +-0.0760841 0.104861 0.0354581 +-0.0244788 0.0486839 0.0492934 +-0.0883766 0.141855 0.0366703 +-0.0509887 0.143164 0.0163768 +-0.0496168 0.0561697 -0.00993077 +-0.00378208 0.0390472 -0.0102032 +-0.0843646 0.087116 -0.00354087 +0.00990951 0.0819581 0.0548044 +-0.0425006 0.0888114 0.0424593 +-0.0728637 0.099356 -0.013752 +-0.0206243 0.0436469 -0.0283402 +-0.0828496 0.117685 -0.00271563 +-0.0715585 0.181081 -0.0541999 +-0.0338561 0.0475081 -0.0226504 +0.00224005 0.0768974 -0.0352993 +-0.0935755 0.117419 0.0183042 +-0.0754318 0.155396 0.00808247 +-0.0674328 0.172594 -0.0425404 +0.027377 0.122298 0.0126488 +0.0174898 0.0874014 0.0499964 +0.0109848 0.123169 0.033628 +-0.0367194 0.0710436 -0.0172369 +-0.0285781 0.0423048 0.0521933 +0.033068 0.0984004 -0.0141329 +-0.0475947 0.0601221 0.0367025 +-0.0635768 0.155628 0.0253794 +0.0262764 0.100811 0.0416679 +0.0147323 0.129513 0.0122405 +0.0321413 0.0366814 0.019545 +-0.00794631 0.127212 -0.00487976 +0.0374618 0.0376657 0.00680115 +-0.0450017 0.0355455 0.0439167 +-0.0613089 0.0634913 0.028639 +-0.0275028 0.0988006 0.0435593 +0.051337 0.0560222 -0.00385605 +-0.0701879 0.175082 -0.0550269 +-0.0424973 0.155091 0.0068798 +-0.0156018 0.0435495 -0.027203 +-0.0387577 0.0797624 -0.0199123 +0.036687 0.0909845 -0.0142871 +-0.0621605 0.170953 -0.0526019 +-0.0503178 0.0515583 0.0186309 +0.0183954 0.0645286 0.0493775 +-0.0816036 0.0774754 -0.00149976 +-0.0167638 0.0728801 -0.0389011 +-0.0612458 0.141043 0.0360828 +-0.0650382 0.153613 0.000196596 +-0.0506214 0.0416531 0.0455899 +-0.0218256 0.086832 -0.0376579 +-0.0368977 0.110447 -0.0189068 +-0.0390704 0.124042 0.0247581 +-0.0145052 0.0544906 0.0506759 +0.0346875 0.0955379 0.0380285 +-0.0427281 0.0478381 -0.0112773 +-0.0589463 0.0436711 -0.00636451 +0.044641 0.0945606 0.00417916 +0.0417801 0.041383 0.0227466 +-0.066757 0.170863 -0.0580345 +-0.0104152 0.0998773 0.0473736 +-0.0467325 0.133652 0.0114554 +-0.0376877 0.163829 -0.000238726 +-0.0725153 0.142823 0.0458217 +0.0207674 0.103342 -0.0194283 +-0.00540678 0.121074 -0.0123374 +-0.0424989 0.102887 0.0413486 +-0.0462349 0.0354247 -0.01929 +0.0180016 0.125305 0.0262968 +-0.0162469 0.184587 -0.0200786 +-0.079084 0.0994215 0.0343706 +-0.0557053 0.132552 0.0352577 +-0.0512629 0.0388692 0.0464256 +-0.0515065 0.160835 0.00704803 +-0.0826893 0.152358 0.0291683 +-0.0584964 0.0932599 0.0452695 +0.024564 0.103479 -0.0175815 +-0.0846694 0.0831371 0.000497005 +-0.0865668 0.118992 0.0483015 +-0.0192412 0.184576 -0.0155995 +-0.00659114 0.03769 -0.0254352 +-0.0245806 0.124862 0.0196194 +-0.0368731 0.105664 -0.0202847 +-0.0621883 0.177235 -0.0596222 +-0.0672213 0.1608 -0.0122924 +-0.0303274 0.0375897 0.0276802 +-0.0234293 0.0522884 0.0423691 +0.0538492 0.0711959 0.0223128 +0.00550075 0.0772523 0.0562045 +0.0438483 0.076237 -0.00278527 +0.00633738 0.0581963 -0.0307089 +-0.0646256 0.0674757 -0.0084666 +-0.0310521 0.0450006 0.0489427 +0.0109104 0.126748 -0.00460652 +-0.0409513 0.128783 0.00774742 +-0.000502218 0.0938722 0.0552243 +-0.0166066 0.035315 -0.0186674 +-0.02118 0.169768 -0.013264 +-0.048723 0.166988 -0.000980568 +0.0301667 0.116977 -0.00204442 +-0.0129037 0.181603 -0.0240442 +-0.0461681 0.033576 -0.00628041 +0.0377831 0.0813859 -0.0147095 +-0.050774 0.143198 0.0153986 +-0.0591392 0.118534 -0.0111826 +0.0601642 0.0622865 0.0071402 +0.0055201 0.0674746 0.0556049 +0.0539548 0.0603844 -0.00239402 +0.0345037 0.0468848 0.0307194 +-0.0226112 0.04084 -0.0289768 +-0.088041 0.0995721 0.00642464 +0.0313753 0.111403 0.0314731 +-0.0818093 0.0776109 0.0245029 +0.0196586 0.112307 -0.0150514 +-0.0547371 0.114833 -0.0154193 +-0.00335753 0.11894 -0.0140663 +-0.0675878 0.0614559 0.0185068 +-0.0374891 0.0973119 0.0427062 +-0.0618754 0.0967815 -0.0181397 +-0.0177948 0.161129 -0.00657359 +-0.0762411 0.0901005 0.0388673 +-0.00749994 0.0647419 0.0560829 +-0.0872439 0.132483 0.0457019 +-0.0207923 0.0756874 -0.0390657 +0.00773677 0.0341095 0.00222437 +-0.00405506 0.101077 0.0451334 +-0.0537766 0.0826585 -0.0215583 +-0.0484986 0.0425777 0.0442245 +0.0370248 0.10907 0.0248298 +0.0550045 0.0727719 0.0183019 +-0.0531047 0.0345095 0.0361399 +0.0240424 0.122784 0.0256717 +-0.0321586 0.0349269 0.0472031 +-0.0487458 0.123267 -0.0102852 +0.0164927 0.107123 0.0418084 +-0.0518639 0.0999443 -0.0218198 +-0.0259535 0.0592275 0.0392168 +-0.0169683 0.186741 -0.0196674 +0.012157 0.123544 0.032833 +-0.0236685 0.0919017 0.0500491 +0.0048864 0.127407 -0.00526463 +-0.00324909 0.0389153 -0.000648163 +0.0108689 0.0576426 0.0524778 +0.0396737 0.107002 0.0161655 +-0.0816849 0.073475 0.00953613 +-0.0743109 0.165184 -0.0390136 +-0.0728909 0.120866 -0.00826881 +0.040969 0.0926354 0.0294955 +-0.00410534 0.0385566 0.0231802 +-0.0167703 0.0742961 -0.0390024 +0.0376363 0.109584 0.0207569 +0.00538144 0.0464854 -0.0270709 +-0.0503176 0.0388958 0.046006 +-0.0793777 0.154922 0.0242883 +-0.0476898 0.0679558 -0.0146484 +-0.0108886 0.108738 -0.0217426 +-0.0532571 0.151368 0.0204421 +-0.068651 0.163792 -0.0529788 +-0.0441151 0.0643553 0.040206 +-0.0275094 0.107088 0.0401149 +-0.0275566 0.0890776 0.0469337 +-0.0274957 0.102963 0.0425886 +-0.0266136 0.0837142 0.0504396 +0.015157 0.122808 -0.00836184 +-0.0234279 0.0636514 0.0436342 +-0.00941329 0.0943623 -0.0340451 +-0.0174189 0.178658 -0.0183022 +-0.0187779 0.183117 -0.0166827 +0.0130462 0.129592 0.0201813 +-0.0751825 0.149958 -0.0238676 +0.00897367 0.131122 0.0172577 +0.0483469 0.0589383 -0.00490848 +0.0422406 0.0986762 0.0221715 +-0.0921564 0.130934 0.011242 +-0.0327106 0.0764924 -0.028531 +0.0102149 0.0725802 0.055192 +-0.0636711 0.0593571 0.0158341 +-0.0123306 0.0394822 0.0386711 +-0.0718333 0.156164 0.022455 +-0.0864971 0.150096 0.00821548 +-0.0110742 0.123419 -0.00875247 +-0.080097 0.11274 -0.00201289 +-0.00271881 0.0655507 -0.0345764 +0.00140103 0.0390882 -0.0248121 +-0.0618299 0.0939366 -0.0189413 +-0.0716693 0.147461 -0.0281971 +-0.0231858 0.17269 -0.0205136 +-0.0637876 0.155678 -0.0402328 +-0.0228589 0.0637031 0.0444908 +-0.0238626 0.169762 -0.0118641 +-0.0752191 0.155599 0.0242023 +-0.0345019 0.0461718 -0.0254652 +-0.01605 0.0946681 0.0536372 +0.0246905 0.0477085 0.0389599 +0.0101881 0.0341976 -0.00109267 +-0.0293326 0.154386 -0.00360575 +0.00276097 0.131717 0.0121378 +-0.0859012 0.0899317 0.000454719 +-0.0297834 0.121969 -0.0069874 +-0.0297126 0.0508986 -0.0203549 +-0.0888501 0.151809 0.0151852 +-0.0824868 0.0965084 -0.00559576 +-0.0279025 0.124426 0.000511349 +-0.0111071 0.0879305 -0.0374747 +-0.0895782 0.133632 0.00522749 +-0.0325779 0.0341004 0.0231549 +-0.087069 0.100891 0.00537711 +-0.0182966 0.038653 -0.00715499 +-0.0181652 0.097581 -0.0254283 +0.00716304 0.0378885 -0.010707 +-0.0117789 0.0582633 0.0533407 +-0.0679898 0.154859 0.0296647 +0.0270346 0.0384464 0.0278157 +-0.0446977 0.147484 -0.0025954 +-0.0797208 0.0757926 0.0264575 +-0.0827795 0.113314 0.0464356 +-0.0405007 0.118003 0.0314814 +0.00913581 0.103011 -0.0206427 +-0.0712761 0.153449 0.0330143 +0.0296113 0.108994 -0.0114792 +0.0120747 0.0958655 -0.0254962 +-0.0357119 0.0695868 -0.0167299 +-0.0777217 0.159728 -0.0179219 +-0.0619192 0.0343817 0.0361087 +-0.0839142 0.0843714 -0.00355138 +0.0295472 0.11806 0.0262972 +-0.0344935 0.0733008 0.0417052 +0.0305902 0.0996469 -0.0155371 +-0.0731059 0.151228 -0.0378853 +-0.0740388 0.151266 -0.032878 +-0.0419789 0.152954 -0.00736227 +-0.00349089 0.112806 0.0419152 +0.00607582 0.0348373 0.023168 +-0.000568628 0.0388214 0.0254737 +0.0445611 0.0931651 0.0181595 +-0.0469298 0.126751 0.026776 +-0.0318643 0.104333 -0.0219242 +0.0119312 0.0725978 0.0541603 +-0.0435985 0.108724 -0.0190759 +-0.0274517 0.043312 0.0519115 +-0.00149233 0.077429 0.0585147 +-0.0618993 0.0433992 0.0415482 +0.0131559 0.129936 0.00738875 +0.00749621 0.107111 0.0412811 +0.0354668 0.0573224 -0.0106723 +-0.0211412 0.0652998 0.0483526 +-0.00680045 0.129424 0.0244883 +-0.0187344 0.126979 0.0202236 +0.00853139 0.0813381 0.0552215 +-0.0254455 0.0389929 0.0381911 +-0.0507728 0.111366 -0.017973 +-0.027716 0.0387019 -0.0165247 +-0.000266462 0.0936214 -0.0332218 +-0.0855847 0.0806062 0.0194802 +0.0100369 0.130324 0.00340984 +-0.0449017 0.148739 -0.00386394 +-0.0321132 0.0482449 -0.0223421 +-0.0893696 0.140675 0.0341739 +0.0448261 0.0875458 0.0221634 +-0.0454912 0.0719252 0.0419203 +-0.0718306 0.148291 -0.0327712 +-0.0812513 0.108802 0.0293202 +0.0429574 0.0859786 -0.00579554 +-0.0338336 0.0380945 -0.0153271 +-0.060738 0.148827 -0.00180261 +-0.0568701 0.141076 -0.0033696 +-0.0358396 0.125396 0.0214464 +-0.0789386 0.168616 -0.0354931 +-0.0315115 0.108439 0.0386203 +-0.0842691 0.117693 0.0488129 +-0.032501 0.101545 0.0423652 +-0.0289779 0.174216 -0.00689295 +-0.0622726 0.163207 -0.0582148 +-0.00885889 0.172674 -0.0247544 +-0.0519291 0.13698 0.0263868 +-0.0829532 0.112769 0.000219247 +-0.0237394 0.038003 0.0142418 +0.0321413 0.0513188 -0.0087021 +-0.0473947 0.0359569 0.0452833 +-0.0488828 0.108449 -0.0190525 +0.0415402 0.0928967 -0.0067838 +-0.0800241 0.0745873 0.0239149 +0.005197 0.0866258 -0.0333998 +0.00148166 0.107215 0.0427825 +-0.0694376 0.159556 -0.0509365 +-0.0306541 0.0650706 -0.0234343 +-0.0653365 0.167223 -0.0303028 +-0.0262324 0.15581 -0.00635861 +-0.0362329 0.165306 -0.00162934 +-0.00330758 0.0379537 -0.0147265 +-0.0267799 0.0893467 -0.0340353 +-0.0591073 0.155657 0.0168017 +-0.0331866 0.15511 0.000984746 +-0.0671323 0.152011 0.0359968 +0.0112495 0.0710359 -0.0320326 +-0.0289103 0.0508426 -0.0224168 +-0.0582351 0.043574 0.0153571 +-0.0770169 0.112922 0.0479771 +-0.0146932 0.0570315 -0.0346956 +-0.0735209 0.134443 0.0506533 +-0.0445794 0.130477 0.0137726 +-0.0744939 0.127436 0.052791 +-0.0376156 0.0492564 -0.0118933 +-0.0462534 0.123907 0.0259058 +-0.0434909 0.104315 0.0413728 +-0.0779429 0.0893818 -0.0115854 +-0.067492 0.10005 0.0413205 +-0.0882017 0.0949941 0.0238463 +0.0438775 0.06952 0.000229591 +-0.0171444 0.168289 -0.0207283 +-0.0236004 0.0383091 -0.00235181 +-0.0697889 0.172796 -0.0390999 +-0.0291426 0.042089 -0.0296009 +-0.0446441 0.0338442 0.00651202 +-0.000500925 0.121055 0.0369996 +0.022042 0.12426 0.000701449 +0.00803725 0.125889 0.0313 +-0.0517799 0.0840941 -0.0216716 +-0.0145005 0.0842486 0.056982 +-0.0886066 0.113065 0.00725433 +0.0156656 0.0713152 0.0525386 +-0.0164665 0.068805 0.0544258 +0.0182285 0.0820502 -0.0281776 +-0.00610364 0.0386755 0.000846714 +-0.0599938 0.126727 -0.00781868 +-0.0155017 0.100285 0.044225 +-0.0638562 0.0423917 -0.00506847 +-0.0444796 0.0338614 0.0280014 +-0.000499767 0.100727 0.0463954 +-0.0162094 0.172709 -0.0239586 +-0.0690346 0.0338087 0.00696066 +-0.062316 0.158431 -0.019584 +0.00644358 0.129282 -0.00129108 +0.0188124 0.0393785 0.042705 +-0.0847946 0.140657 0.0430258 +-0.0835274 0.0979539 0.0303801 +-0.0241902 0.160559 -0.0136368 +-0.06502 0.161419 -0.0172527 +-0.0772789 0.154395 0.0279022 +-0.0681261 0.15638 0.0193912 +-0.0337268 0.111492 -0.0180397 +-0.0323736 0.176483 -0.0134412 +-0.0291608 0.0806486 0.0445728 +-0.0846331 0.0781756 0.0181083 +-0.0498753 0.106996 -0.0192538 +0.00350083 0.0730867 0.0562031 +-0.0231171 0.0347933 0.0492623 +-0.0616059 0.0342155 0.0188015 +-0.0516 0.0545447 0.0296397 +-0.0763817 0.169448 -0.0429673 +-0.069513 0.17974 -0.0519891 +-0.0588484 0.13671 0.0342246 +-0.0780833 0.1597 -0.0209281 +0.00109253 0.113026 -0.0199046 +-0.0227366 0.157094 -0.00651614 +0.0344933 0.0929192 0.0394802 +-0.000408544 0.126448 -0.00615558 +-0.0805024 0.128853 0.052889 +-0.00020637 0.0947598 -0.0324026 +-0.089811 0.143072 0.0296513 +0.0321792 0.0929416 0.0413986 +-0.0145721 0.168692 -0.0222333 +0.0595491 0.0594739 0.0201736 +-0.0810451 0.0800939 -0.00453207 +-0.0267843 0.0880044 -0.0350453 +-0.040033 0.126629 -0.00388698 +-0.0208083 0.0348218 0.0462671 +-0.082826 0.11472 -0.00162443 +-0.0301654 0.12556 0.01613 +-0.0485613 0.0418518 -0.011173 +-0.0784181 0.163881 -0.0269512 +0.0387541 0.0617571 -0.00875906 +0.0464006 0.0792571 0.0121793 +-0.00359562 0.043415 -0.0257386 +-0.0333921 0.126443 0.0164188 +-0.00106292 0.130975 0.00499363 +-0.0668008 0.060458 0.0159676 +-0.0254977 0.107106 0.0408331 +-0.0682758 0.06442 0.0246162 +-0.0298175 0.125729 0.00888885 +-0.088267 0.147416 0.00925394 +0.0542609 0.050631 0.00222604 +0.0422118 0.100079 0.0191646 +-0.081175 0.14869 0.00117764 +-0.0344163 0.0346761 0.0417292 +-0.0623017 0.163119 -0.0425932 +-0.0298952 0.0565521 -0.0204023 +-0.076686 0.0781369 0.0338733 +-0.0338704 0.102893 -0.0218261 +-0.0355104 0.0775398 0.0419002 +-0.0584924 0.0630612 0.0296076 +0.0454221 0.0889974 0.0141646 +-0.0417964 0.0347181 0.00810808 +0.0363875 0.0505227 -0.00658574 +-0.053281 0.144674 0.0233765 +0.0262687 0.0352193 0.019674 +-0.0168964 0.123328 -0.00656517 +-0.0606083 0.118309 0.0403758 +0.00639612 0.0418759 -0.0239341 +0.0231261 0.0431609 -0.0107258 +-0.00718079 0.0390105 -0.0127195 +-0.00364386 0.0901332 -0.0356262 +-0.00854262 0.033753 -0.0231542 +-0.0124761 0.0531764 0.0512005 +-0.0231395 0.168252 -0.0189417 +0.0233331 0.0354178 0.02435 +-0.000241537 0.0397743 0.0467748 +-0.0723661 0.147118 -0.0228625 +-0.0517688 0.0612265 0.030932 +-0.063068 0.161146 -0.0557557 +-0.0279123 0.0793217 0.046185 +-0.0627986 0.0441541 -0.00325511 +-0.0165065 0.100263 0.0439632 +-0.0217072 0.0582569 -0.0327502 +0.0254642 0.12325 0.0062381 +-0.086501 0.0833246 0.0174861 +-0.074502 0.11613 0.052068 +0.032458 0.0910982 -0.0184345 +-0.0729629 0.155811 0.0249814 +-0.0506733 0.162525 0.00564316 +-0.0697867 0.034416 -0.00452426 +0.0189467 0.0754919 0.0520404 +-0.0165401 0.0997826 0.0440769 +-0.086829 0.0847067 0.0174745 +-0.0474936 0.146975 -0.00223523 +-0.065417 0.154594 -0.0449582 +-0.0614906 0.0590888 0.0075192 +-0.0686207 0.128453 0.0500102 +-0.023162 0.0958328 0.0451924 +-0.0258056 0.0550238 0.0391969 +-0.0102599 0.0407381 0.0498453 +-0.0664749 0.0875478 0.0443297 +0.0581415 0.0538012 0.00818348 +-0.0384918 0.0903063 0.0434643 +-0.0457684 0.132352 0.0133121 +-0.0728932 0.0941961 0.0410307 +-0.0809085 0.111715 -0.000772193 +-0.0833393 0.0979244 -0.00460929 +-0.0671961 0.15591 -0.00355939 +-0.0455114 0.0338265 0.027816 +0.01975 0.0343373 0.00255688 +-0.0875501 0.120326 0.0478169 +0.0353576 0.0505704 -0.00670224 +0.00356645 0.0339958 0.0125338 +0.0590653 0.0552605 0.0161784 +-0.084435 0.0791603 0.0205035 +-0.0255122 0.0349295 -0.0287387 +-0.0724789 0.110508 0.0438845 +0.00447986 0.0385716 -0.0118677 +-0.066989 0.136993 -0.00809827 +0.0384287 0.064558 0.0344028 +-0.0516036 0.0560273 -0.00839821 +-0.00350028 0.110017 0.0429859 +-0.0111634 0.0391658 0.035606 +0.0183426 0.0906063 -0.0259275 +-0.031909 0.154239 -0.00732019 +-0.0800971 0.0773092 -0.00453369 +-0.0190564 0.0920061 -0.0357108 +0.0133608 0.0494245 -0.0271921 +-0.0787339 0.140316 -0.00472414 +-0.0275167 0.116662 0.0324113 +0.00652621 0.104352 0.0432895 +0.0358497 0.0713653 0.0377445 +-0.0918605 0.116299 0.0240619 +-0.0522199 0.061167 0.0299696 +-0.0201447 0.166816 -0.0117812 +-0.0433732 0.122414 -0.0114499 +-0.0645963 0.0430073 0.0358234 +-0.0779043 0.1583 -0.0209193 +0.0367132 0.0547551 0.0317845 +-0.0351109 0.16372 -0.0144674 +-0.0434603 0.109995 -0.0184047 +-0.0576869 0.0677197 -0.0118328 +0.00623854 0.074018 -0.0343382 +0.0443987 0.0959613 0.0131589 +-0.089865 0.120262 0.0458544 +0.0103837 0.0449023 -0.0251665 +-0.0770006 0.139838 -0.00569476 +-0.072687 0.0955359 0.0408041 +-0.0569361 0.046073 0.0125834 +-0.0604913 0.0818799 0.0434166 +-0.0460645 0.151688 -0.00554828 +-0.015331 0.0349099 0.0491212 +-0.0229594 0.0811266 0.055321 +0.0274663 0.0754645 0.0450048 +-0.00267666 0.0374926 0.0135597 +-0.011518 0.0673875 0.054571 +0.013368 0.122467 -0.00997636 +-0.0722821 0.143895 -0.0129091 +0.0454962 0.0443878 0.000424365 +-0.0127602 0.0382241 0.0199007 +-0.091546 0.146121 0.023146 +0.00392744 0.0371222 0.0242968 +-0.0385489 0.119476 -0.0123722 +0.0114833 0.0936471 0.0518498 +-0.0643328 0.146767 0.0386771 +-0.0624894 0.163088 -0.0505885 +-0.0375004 0.0464372 0.040096 +0.0460037 0.0834239 0.0131685 +0.033027 0.108336 -0.00876159 +0.013228 0.0990749 -0.0229052 +0.034148 0.0442132 0.0295363 +-0.0907186 0.113289 0.0113419 +0.0210633 0.106016 0.0411627 +-0.0454948 0.119311 0.0290591 +-0.0676975 0.0607342 0.0101856 +-0.0195364 0.0461211 0.0518679 +0.0161339 0.0672434 0.0514025 +-0.0693216 0.0620201 0.0176481 +0.0429729 0.0944315 -0.00180352 +-0.0494828 0.135763 0.0221907 +-0.060805 0.0867676 -0.0196616 +-0.0247298 0.125997 0.0151584 +0.059297 0.0608379 0.0211666 +-0.080116 0.153024 0.0299773 +0.0574282 0.0681585 0.00377242 +-0.0535498 0.0486673 -0.00635158 +-0.0304741 0.177281 -0.004356 +-0.0855011 0.0792275 0.0175034 +-0.0804698 0.130248 0.0526854 +0.000343862 0.0539275 -0.0306641 +-0.0900062 0.133811 0.0372136 +0.0104354 0.0347372 0.0259595 +-0.0574962 0.0440189 0.0444763 +-0.0573422 0.0335757 0.00237022 +0.0404449 0.0739232 0.0320846 +-0.00464724 0.0496642 -0.0307417 +-0.0311133 0.0510509 -0.015361 +0.0169782 0.128539 0.0144983 +-0.0872732 0.151714 0.0113029 +-0.0345546 0.0409268 0.0482929 +-0.0745628 0.173554 -0.0490908 +-0.0213027 0.0381376 0.0110019 +0.0223647 0.0782061 0.0499784 +0.0111959 0.0879068 -0.0311136 +0.0141654 0.115006 -0.0159235 +-0.0175094 0.116845 0.0368185 +0.0185047 0.0369619 -0.0146835 +-0.0924063 0.129578 0.0112381 +-0.00949945 0.0517772 0.0514996 +-0.0666563 0.0656524 -0.0048951 +-0.0494962 0.100168 0.0429965 +0.00776642 0.130336 0.022539 +-0.0564976 0.0904367 0.0452654 +-0.0648339 0.153263 -0.0390895 +0.0140569 0.12802 0.0248446 +-0.00977705 0.174183 -0.0237537 +-0.0154865 0.0530505 0.0500296 +-0.0627622 0.0810191 -0.0190992 +-0.0385594 0.173184 -0.00190958 +-0.00314149 0.0972112 0.0530078 +-0.0418773 0.107078 -0.0201516 +0.0363342 0.109637 -0.000829727 +0.021507 0.126326 0.01189 +-0.030496 0.0988081 0.0439786 +-0.0769628 0.150462 0.0371334 +-0.0941104 0.126894 0.0182531 +-0.0255083 0.112568 0.0366767 +-0.0746801 0.157704 -0.00556618 +-0.0418449 0.0971142 -0.0220611 +-0.0359493 0.125342 -0.00457539 +-0.0258164 0.0853463 -0.0368715 +0.0497106 0.0482066 0.0259506 +-0.0716942 0.1568 -0.0399156 +-0.0618117 0.0590403 0.0165038 +-0.0714498 0.15679 -0.0419165 +-0.0701989 0.0368637 0.0105096 +0.0597267 0.0636404 0.0201833 +-0.0915748 0.124221 0.0431828 +-0.0690929 0.156328 0.0219534 +-0.0302767 0.0622182 -0.0224251 +-0.00771091 0.0627931 -0.0356131 +0.0394872 0.0513548 0.03224 +-0.0229845 0.0724431 0.0499564 +-0.0290201 0.125445 0.00626167 +-0.0729777 0.138423 -0.00695981 +-0.00991212 0.111561 -0.0201766 +0.000200297 0.0825801 -0.036136 +0.0364442 0.0590953 0.0349595 +0.0364996 0.0928818 0.0370772 +-0.0181329 0.0432293 0.0524811 +0.00280759 0.0350639 0.0204847 +-0.0626379 0.152126 -0.0285986 +-0.0704211 0.15543 0.027334 +0.000301963 0.100099 0.0481787 +-0.049492 0.0917757 0.044207 +-0.015502 0.0897786 0.0564851 +-0.0318792 0.156356 -0.0104816 +0.0416778 0.102863 0.015161 +0.0504722 0.048918 -0.000684915 +-0.0611415 0.0359024 -0.0090437 +-0.0264937 0.098817 0.0439871 +-0.000436317 0.122463 0.0356275 +-0.0875676 0.129767 0.0460862 +-0.0312863 0.0777611 -0.0325602 +-0.0303664 0.112853 -0.0174686 +-0.00773829 0.0684701 -0.0360951 +-0.0647534 0.156678 -0.0475943 +-0.0891175 0.0983455 0.0194044 +0.00833741 0.055373 -0.0305597 +-0.0550257 0.131065 -0.00539027 +-0.0305029 0.0689001 0.0393777 +-0.0596554 0.0343168 0.0331724 +0.0436089 0.0680569 -0.000247417 +-0.0786395 0.163873 -0.0279533 +-0.0574243 0.0613459 0.0260206 +-0.0338728 0.0483909 -0.0193366 +-0.0287306 0.074519 0.0412207 +0.016916 0.0577101 0.0489225 +-0.0184307 0.0347944 0.0485523 +-0.0655112 0.0803784 0.0426229 +-0.0332327 0.160967 -0.000804209 +-0.0533105 0.0541891 0.0115512 +-0.0356689 0.117866 -0.0126779 +-0.0699903 0.034504 0.00971713 +-0.0588141 0.0341524 0.0282501 +-0.0177813 0.0770869 -0.0388032 +0.0445157 0.0467554 0.0289718 +0.00964716 0.128306 -0.00229994 +-0.0666126 0.148623 0.0392621 +-0.0325544 0.0348985 0.0454309 +-0.0623108 0.039732 0.0166963 +-0.0917483 0.122888 0.0433845 +0.0271866 0.0819517 -0.0229154 +-0.00863658 0.0467032 -0.0298179 +-0.0620847 0.166243 -0.0515916 +-0.0912832 0.125583 0.0428488 +-0.0588072 0.0481223 0.00266039 +-0.0913122 0.133748 0.0212171 +0.0482658 0.0433313 0.0185611 +0.00774922 0.0351262 -0.0136823 +0.0357585 0.0562848 0.0339755 +-0.029123 0.166739 -0.016877 +-0.0338028 0.122413 -0.00742547 +0.0216799 0.0415358 -0.0117265 +-0.0257594 0.171231 -0.0110774 +-0.0641199 0.162494 -0.0212451 +-0.0535748 0.155622 0.0115317 +0.0531674 0.0736169 0.0146631 +0.0135129 0.0347107 0.0374491 +0.0227019 0.123147 0.0266031 +0.025252 0.0719314 -0.0249494 +0.0309797 0.118122 0.0225615 +0.0415492 0.0724945 0.03012 +0.000493498 0.119652 0.0380928 +0.0229975 0.123119 -0.000380287 +0.0234322 0.100371 -0.0202365 +-0.0620057 0.153738 -0.0265835 +-0.0398723 0.105663 -0.0203219 +-0.0632416 0.0445478 0.0366988 +-0.0310386 0.154131 -0.00157547 +-0.0042992 0.0348909 0.0408189 +-0.00181562 0.0826307 -0.0368615 +0.0388816 0.0927717 0.0335536 +-0.0335058 0.0760991 0.0415371 +-0.0314963 0.0917789 0.0442247 +-0.0512549 0.0612644 0.0318233 +-0.00281159 0.131227 0.0100802 +-0.0531145 0.157563 -0.00324336 +-0.0635867 0.03486 0.0405057 +-0.0627936 0.15522 -0.0356106 +0.0166245 0.122097 0.0315907 +-0.0106759 0.119083 -0.0141801 +-0.0465015 0.0689677 0.0402969 +-0.0626599 0.0423324 0.0141491 +-0.0515376 0.053149 0.0306286 +0.00413437 0.124074 -0.00964261 +-0.0105331 0.127013 0.0275477 +-0.042312 0.0337552 -0.0130352 +0.0472026 0.0681414 0.0256953 +0.0213439 0.0741385 0.0502206 +0.0156241 0.128368 0.0211329 +0.0358549 0.0843357 -0.0172902 +-0.0533892 0.064921 0.0343521 +0.0273368 0.091573 0.0449418 +-0.0440333 0.0423079 -0.0173091 +-0.0764978 0.13864 0.0490601 +0.00750117 0.0716903 0.0560753 +0.0454321 0.0861887 0.0181684 +-0.0812985 0.084505 0.0328118 +-0.0605375 0.155317 0.003221 +-0.0065332 0.130449 0.0187888 +0.0247646 0.122114 0.0259409 +-0.0711064 0.152637 0.0345827 +-0.0155013 0.0716083 0.0551341 +0.0277791 0.0822205 0.0455159 +-0.0445183 0.0675631 0.0404632 +-0.0772746 0.147261 -0.00486297 +-0.0868795 0.0927253 0.00342064 +-0.0458425 0.0985138 -0.0217256 +-0.0906083 0.131058 0.0342318 +-0.091547 0.146101 0.0191506 +-0.00249086 0.116945 0.0398999 +0.0385734 0.0699568 0.0346425 +-0.0129648 0.116833 -0.0157687 +0.0215791 0.120444 0.0319368 +-0.0899229 0.115405 0.0270455 +-0.0697992 0.0836733 -0.0171139 +-0.0415794 0.128056 0.0149128 +-0.0734779 0.180121 -0.0504836 +-0.0466973 0.0665278 -0.0146823 +-0.0673893 0.156703 -0.00509746 +0.00108438 0.119342 -0.0145393 +-0.019494 0.0842608 0.0571688 +0.0285713 0.0551672 -0.0188053 +0.00650695 0.0731027 0.0564796 +-0.0557862 0.0854763 -0.0214113 +-0.0743851 0.163815 -0.0369793 +-0.0286768 0.123948 -0.00103929 +-0.0301123 0.163751 -0.0154896 +0.0410386 0.099944 -0.00278716 +0.00848446 0.0518256 0.0516867 +-0.051108 0.0530218 0.0319282 +-0.0905758 0.113954 0.0388293 +-0.00470317 0.038779 0.00289117 +-0.0247258 0.0638997 -0.032873 +-0.04111 0.159177 -0.0108205 +-0.0892399 0.140676 0.0351725 +-0.075004 0.141334 -0.0064915 +-0.0463338 0.132474 0.00863126 +-0.0541416 0.034749 0.0443256 +-0.0781873 0.168068 -0.0319708 +0.0328915 0.0696754 -0.0177356 +0.0346158 0.0369318 0.00517598 +-0.0694908 0.124597 0.0526574 +0.0581844 0.0711857 0.0106064 +-0.0378081 0.0841771 -0.022143 +-0.0281622 0.169703 -0.0179592 +0.0305485 0.118199 0.0238252 +-0.0289649 0.0747374 -0.0345478 +-0.0272221 0.0904382 0.0465675 +-0.0514982 0.0848246 0.0453901 +-0.051623 0.0531083 0.0226238 +-0.0398125 0.0899922 -0.0232612 +-0.0236559 0.0709438 0.0478646 +-0.053816 0.0559281 -0.00642904 +0.0603322 0.0636924 0.0181801 +-0.0884616 0.136381 0.00620417 +-0.0394936 0.046476 0.0404962 +-0.0530638 0.0723343 0.0404003 +0.0102711 0.0695708 -0.0315811 +0.0339253 0.115718 0.0108315 +-0.0295473 0.0358282 0.0521362 +0.0116453 0.090034 0.0538428 +0.0450904 0.0875663 0.0201674 +0.0326336 0.0519746 0.0346532 +0.03367 0.072742 0.0398859 +0.024638 0.124378 0.010214 +0.0415181 0.0484385 0.0321463 +-0.044143 0.159411 0.00624881 +-0.0495653 0.047469 -0.00900107 +-0.0894571 0.131034 0.0422704 +-0.075804 0.161028 -0.0299559 +-0.0164919 0.0968814 -0.0286925 +0.0229929 0.0371968 0.0317242 +0.0352506 0.101471 -0.011425 +-0.049558 0.0389942 -0.0116749 +-0.0223649 0.171249 -0.0132085 +-0.0667327 0.078026 -0.0171522 +0.0442166 0.0846846 -0.00180459 +-0.0518774 0.104165 -0.0200373 +-0.0393536 0.0336231 0.00416845 +0.00720473 0.0823989 -0.0333538 +-0.0288578 0.101545 -0.0231915 +0.0245524 0.106048 0.0391612 +-0.0851811 0.0897279 0.0280525 +-0.00334607 0.0347739 0.0411187 +-0.0430221 0.128224 0.015861 +0.0243931 0.0503998 -0.0217952 +-0.0394902 0.0506047 0.0393469 +0.0293799 0.0892796 -0.0205263 +-0.0574934 0.0875623 0.0444505 +-0.0644211 0.0347126 0.0370276 +-0.0169241 0.181626 -0.0193127 +-0.0564978 0.0732565 0.0410435 +-0.0544221 0.144671 0.0284168 +0.0203184 0.0650483 -0.0276666 +-0.0648645 0.041891 0.032665 +-0.0451284 0.159142 -0.00893675 +0.0451235 0.093189 0.0121575 +-0.0577489 0.0479998 -0.00135721 +-0.0606371 0.0448145 0.012064 +0.0495086 0.0638139 0.0293036 +0.0458685 0.0862133 0.0111669 +-0.0531099 0.136165 -0.00197183 +0.0285441 0.0509095 -0.0177614 +-0.013074 0.0383381 0.00704947 +-0.0223231 0.0391341 0.0387105 +0.0393846 0.0429207 -0.00283799 +0.0202147 0.0847891 -0.0269071 +0.00923869 0.035402 -0.0117616 +-0.060367 0.11933 -0.00999174 +-0.0772797 0.157576 -0.0127941 +-0.0732669 0.179344 -0.0490063 +-0.0683896 0.0420777 -0.000309277 +-0.0539058 0.102757 -0.0202213 +-0.0453256 0.169857 -0.00299568 +-0.0616838 0.0659304 -0.00830259 +0.00414244 0.129952 4.9397e-05 +-0.0404915 0.113924 0.0347061 +-0.0942425 0.120105 0.0182851 +-0.0324906 0.080327 0.0414535 +0.0529677 0.0595446 0.0290441 +-0.0904857 0.114242 0.0332623 +-0.0703591 0.181312 -0.0565189 +-0.0475241 0.112407 -0.0169253 +0.0109831 0.0341684 -0.0140433 +-0.089612 0.139257 0.0251846 +-0.0373738 0.0365422 0.044687 +0.0564401 0.0662549 0.00171258 +-0.0581251 0.0334091 -0.00125013 +-0.0407273 0.0696207 -0.0166002 +-0.0669961 0.165196 -0.05701 +0.0131268 0.120538 0.0349816 +0.0367009 0.0812747 -0.0157528 +-0.0077824 0.0784642 -0.0379203 +-0.0647128 0.155185 0.0278857 +0.00549498 0.0951378 0.0528545 +-0.0108057 0.0342947 -0.0255969 +-0.0911579 0.129687 0.0342384 +-0.080608 0.0720682 0.0165498 +-0.073439 0.148627 -0.0298053 +-0.0271937 0.174158 -0.0183459 +-0.0244966 0.0509689 0.0431921 +-0.00162246 0.0450436 -0.027024 +-0.0775221 0.104823 0.0340694 +0.0154861 0.0927165 0.0506449 +-0.0599536 0.123822 -0.00839074 +-0.079866 0.0706372 0.0115498 +-0.0815235 0.0899003 0.0328752 +0.0313378 0.118325 0.00558524 +0.0248331 0.123944 0.0188283 +-0.0898787 0.112224 0.0169361 +-0.0662043 0.065068 0.0280019 +0.0246717 0.0434401 -0.00867806 +-0.0469681 0.134154 0.0128397 +-0.0291377 0.0860908 -0.0335904 +0.0147704 0.0519654 0.0475176 +-0.0296475 0.169744 -0.0079151 +-0.0211888 0.175661 -0.0220113 +-0.0347689 0.0780934 -0.0215038 +-0.013019 0.129549 0.0120959 +0.0421932 0.0662609 -0.00283376 +0.0111358 0.0352671 0.0436641 +-0.0705399 0.100871 0.0399167 +-0.0604975 0.0832903 0.0437356 +-0.0659485 0.126772 -0.00885106 +-0.0702518 0.06756 0.0285092 +-0.00688661 0.108791 -0.0226031 +-0.0786437 0.112204 0.0464731 +0.00637271 0.130879 0.0205945 +-0.066894 0.110895 -0.0121462 +0.0123118 0.0623753 -0.0299343 +-0.0285044 0.109801 0.0380702 +0.00650421 0.0883449 0.0558788 +-0.0545694 0.124267 -0.00721739 +-0.0626588 0.161511 -0.0455953 +-0.0861214 0.132549 0.0473951 +-0.0627776 0.125519 0.0444184 +-0.0177321 0.160293 -0.0123373 +-0.0490182 0.0345781 0.0369526 +-0.0297799 0.106834 -0.0211406 +-0.079558 0.151858 0.0332132 +-0.0404921 0.0648693 0.0415314 +-0.0530069 0.153493 0.0132253 +-0.0339683 0.0485791 0.0404406 +-0.0421354 0.0449426 -0.0173193 +-0.0517467 0.076797 -0.0188523 +-0.060863 0.0583083 0.0137477 +0.0112347 0.0794806 -0.0318525 +0.00351036 0.0856577 0.0572413 +-0.0648576 0.101039 -0.0173044 +-0.0601123 0.0381131 0.0455939 +-0.015494 0.0515277 0.0489706 +-0.0275254 0.1668 -0.00838328 +-0.0365126 0.077567 0.0421306 +-0.0195832 0.1596 -0.0115811 +0.00251466 0.0744821 0.0563666 +0.0589788 0.062133 0.0220601 +-0.066902 0.117219 0.0507079 +-0.0396194 0.0335538 -0.0253204 +-0.0297618 0.107877 -0.0202294 +-0.00601771 0.0990415 0.0504631 +-0.084398 0.0778007 0.013518 +0.0271613 0.0368693 0.0238228 +-0.0589877 0.0335902 0.00921609 +0.029871 0.0968887 0.0415927 +0.00949394 0.0426698 0.0450285 +-0.0697739 0.0382195 0.0100596 +0.0231426 0.0768603 0.0493195 +-0.00501253 0.125042 0.0324689 +-0.00710159 0.0387114 0.00061319 +-0.0177128 0.0599179 -0.0354327 +-0.045698 0.157938 0.00750606 +0.00190257 0.130874 0.00322319 +-0.0444648 0.0945053 0.0429498 +-0.0772757 0.148645 -0.0058688 +-0.069822 0.156776 -0.00162593 +-0.0445001 0.117958 0.0308281 +-0.0409685 0.0462375 -0.0173222 +-0.0305996 0.0509893 -0.0173575 +0.00196704 0.0385066 0.0244659 +-0.00668986 0.0584241 -0.0339312 +-0.0587805 0.0811174 -0.0202922 +-0.0492044 0.143127 0.00539863 +-0.0686509 0.155409 0.00612964 +-0.0404209 0.150087 -0.00469474 +-0.00449521 0.0925603 0.0561444 +-0.000397233 0.131333 0.0167016 +-0.0552402 0.138165 0.0306253 +0.0215752 0.056436 0.0468827 +-0.0248564 0.100174 -0.0239639 +-0.0165731 0.0386082 0.0295958 +0.0232801 0.125085 0.0182493 +0.0228318 0.0357435 0.0257706 +-0.0492021 0.127407 -0.00458885 +-0.0878029 0.112934 0.0313303 +0.0465727 0.0554592 0.0320923 +-0.0288967 0.0499669 0.0438168 +-0.000173892 0.120963 -0.0122496 +-0.0704499 0.154022 0.0317661 +-0.0151711 0.0346724 0.0458457 +-0.0640566 0.138182 0.0390191 +0.0398408 0.105612 0.0201716 +0.0444976 0.0583814 0.0318302 +0.031639 0.0370094 0.0209702 +-0.0104878 0.112778 0.0413082 +-0.0672962 0.0785128 0.0408262 +-0.0760729 0.0675487 0.00755458 +-0.0571409 0.0642584 0.0323718 +0.0261418 0.0859362 -0.0230192 +-0.015502 0.0856307 0.0568812 +0.0189265 0.119915 -0.00924366 +-0.0119328 0.103575 -0.0236984 +-0.00622128 0.0384574 0.0119659 +-0.0779451 0.128117 -0.00684087 +-0.0657248 0.120041 0.0506761 +-0.0623817 0.147548 -0.00757469 +-0.0875561 0.121673 0.0477803 +0.0222529 0.0365833 0.0139797 +-0.00142937 0.126525 -0.00622577 +-0.0226373 0.0386776 -0.0154938 +-0.0648114 0.0335165 0.00450366 +0.0210136 0.0713836 0.0497227 +-0.0348346 0.0347214 0.0345782 +-0.027609 0.0850124 0.048532 +-0.0856119 0.0819492 0.0204815 +-0.0601038 0.0347331 -0.00989443 +0.00929494 0.0956507 -0.0272714 +-0.0915391 0.118654 0.00731945 +-0.00449819 0.0604864 0.0551163 +0.0204818 0.0854612 -0.0266087 +-0.0429251 0.129071 0.00699388 +-0.0789967 0.138332 -0.00474353 +0.0343592 0.0519767 -0.00689954 +-0.0921408 0.125525 0.040859 +0.0516782 0.0702939 0.00352664 +-0.022659 0.0508417 -0.0286643 +-0.00138527 0.0424799 0.0468649 +0.0452912 0.0903849 0.0031762 +0.0401652 0.0717052 -0.00977551 +-0.0905185 0.148805 0.0131551 +-0.0470106 0.149195 0.00904699 +-0.0201874 0.0711262 0.0528634 +-0.0555353 0.0388223 -0.0103544 +-0.0714965 0.154091 0.0314059 +0.0232354 0.0968772 0.0460698 +-0.020264 0.0381835 0.0111715 +-0.0267635 0.177003 -0.0181719 +-0.0755105 0.151351 -0.0138965 +-0.00749931 0.0925693 0.0562701 +-0.063994 0.152679 -0.0352218 +0.0453927 0.0833662 0.00319518 +-0.0137973 0.081348 -0.0391911 +-0.0433806 0.120699 0.0278302 +0.0462048 0.0792353 0.00618416 +-0.0498122 0.141672 0.00439987 +-0.0592291 0.156682 0.00368263 +-0.0525972 0.055954 -0.00763978 +-0.0796979 0.108952 0.0363543 +-0.0334959 0.0335656 -0.024125 +0.0047441 0.131688 0.0100125 +-0.0530342 0.15087 0.0203968 +-0.0794975 0.133078 0.0519067 +0.0231582 0.125381 0.0124998 +-0.0898343 0.122953 0.0457467 +0.0336909 0.115719 0.00499933 +-0.0364989 0.0705154 0.0419282 +-0.0641133 0.155183 -0.0406054 +-0.0303694 0.034667 0.0426012 +-0.0474034 0.126784 0.0277907 +0.0312862 0.107094 -0.0114403 +-0.0399374 0.122179 0.0274746 +-0.0715157 0.106884 0.0372861 +0.0432452 0.100105 0.0111579 +-0.0264035 0.0386467 -0.0143525 +-0.053047 0.162457 0.00378602 +-0.0573985 0.155942 0.000257732 +-0.0104925 0.119661 0.037142 +-0.0107108 0.0656519 -0.03625 +0.0153129 0.0637748 -0.0295702 +-0.047649 0.128193 0.0275289 +-0.0395091 0.0986823 0.0417741 +0.0582857 0.0709436 0.0165587 +0.0144142 0.0418406 -0.0232939 +-0.0406818 0.0636695 -0.0135779 +-0.0700194 0.0408862 0.000674154 +-0.0898984 0.139201 0.0142132 +-0.0368759 0.102855 -0.0211016 +-0.031161 0.177923 -0.0048433 +-0.0216559 0.0380957 0.0145856 +-0.00121026 0.129846 0.000241032 +-0.0176504 0.0583335 0.0507279 +0.0492902 0.0704301 0.0235452 +0.008888 0.126629 0.0301427 +-0.0897638 0.136555 0.0361946 +-0.0903944 0.113745 0.0354564 +0.0327067 0.0659933 0.0401778 +-0.0167299 0.0383654 0.0243772 +0.0403616 0.0561214 -0.00579676 +-0.0891677 0.150225 0.0241083 +-0.0128992 0.165641 -0.0199242 +-0.0596113 0.0581543 0.0105384 +0.0326521 0.108705 0.0315863 +-0.0448105 0.126695 -0.00590468 +0.0440256 0.0973461 0.0131583 +-0.0694635 0.0618968 0.00696654 +-0.0667991 0.06462 0.0265045 +0.0388894 0.060327 0.0314833 +0.0120611 0.11304 -0.0178164 +-0.0635386 0.151731 -0.00361755 +-0.00656125 0.130634 0.0158888 +0.0344174 0.0430387 -0.00433126 +-0.00549778 0.129792 0.00189197 +-0.0499313 0.134148 0.000258943 +-0.0563569 0.155043 0.0148967 +-0.00737522 0.0388161 -0.00139235 +0.0283929 0.0347449 0.011384 +-0.010683 0.0908469 -0.0364652 +-0.048501 0.109818 0.0382143 +-0.0690431 0.169001 -0.0273587 +0.0102657 0.0954683 -0.0270889 +0.0126468 0.0820043 0.0535026 +-0.0507783 0.0613366 0.0327704 +0.00559724 0.128727 -0.00267638 +-0.044734 0.0724552 -0.0176324 +-0.0283736 0.0336157 -0.0231629 +-0.0679859 0.155562 0.00782161 +-0.0939853 0.126886 0.0172543 +-0.0238126 0.0840242 -0.0378907 +-0.0152029 0.16973 -0.0225848 +0.0303318 0.0382842 0.0249985 +-0.0463034 0.0382871 -0.0172845 +-0.012857 0.0968183 -0.0306036 +0.0139515 0.0933972 -0.0268828 +-0.0598089 0.0334419 -0.0052474 +-0.0682308 0.180685 -0.0584278 +-0.0564615 0.0452367 0.0437224 +0.0122525 0.036039 -0.0217262 +-0.0324956 0.119317 0.0295507 +-0.050852 0.0985174 -0.022094 +0.0359226 0.0926166 -0.0140085 +0.0475195 0.0583521 0.0315949 +0.00440154 0.12483 0.0329119 +-0.0725064 0.152612 -0.0398907 +-0.00124079 0.0388178 0.0271443 +-0.0855936 0.143251 0.00719107 +-0.0618131 0.161554 -0.0315928 +-0.0315498 0.0848744 -0.0295692 +-0.0167783 0.0770825 -0.0387039 +-0.024832 0.0930098 -0.0316179 +-0.0356976 0.121856 -0.0088333 +0.0456324 0.0875991 0.0131626 +0.0344601 0.0660136 0.0392214 +0.008313 0.0639391 -0.0318667 +0.0352496 0.0656442 -0.0147977 +-0.0468498 0.0999476 -0.0216953 +-0.0215077 0.111305 0.0395987 +-0.0345319 0.122423 0.0264163 +0.0333657 0.0835669 0.0412915 +-0.0594982 0.143919 0.0350801 +-0.0210079 0.184692 -0.0198306 +-0.09225 0.125605 0.0402535 +-0.0764966 0.117544 0.0520468 +0.0261457 0.100404 -0.0183041 +0.0314049 0.0431209 -0.00494122 +-0.000675964 0.056864 -0.0322097 +-0.0759667 0.135448 -0.00632576 +0.0194608 0.0865014 0.0497298 +0.0480114 0.0447211 0.0227621 +0.0382636 0.109749 0.0121659 +-0.0191397 0.0920316 0.0539979 +0.0148906 0.112386 -0.0170744 +-0.0156084 0.0378086 -0.0269252 +0.0166879 0.0355485 0.0409566 +-0.0719103 0.125286 -0.00863314 +0.0390766 0.0901064 0.0338413 +0.0238446 0.123573 0.0241681 +0.0180905 0.1262 -1.26099e-05 +-0.0241861 0.0351713 0.0521271 +-0.0864494 0.107673 0.0113573 +0.00554907 0.0341243 -0.0169616 +-0.0740319 0.152138 0.0351116 +-0.00773495 0.12664 -0.00628182 +-0.0408221 0.0343419 0.0301151 +0.0589083 0.0700926 0.0167877 +-0.0321537 0.168198 -0.0161712 +-0.0504087 0.0385253 -0.0116443 +-0.0719982 0.132651 0.0504199 +-0.0314938 0.0946271 0.0446065 +0.0415387 0.0610238 0.0295203 +0.0439094 0.0623682 -0.0025277 +-0.0745832 0.173457 -0.038075 +-0.0135013 0.163627 -0.011822 +0.00544999 0.097676 0.0507202 +-0.0233157 0.0695067 0.0475588 +0.0280693 0.112767 0.0337398 +0.0217645 0.057833 0.0471676 +-0.0875176 0.123015 0.0477063 +-0.0696847 0.0339658 -0.0022881 +-0.0251326 0.166747 -0.01768 +-0.0196064 0.177176 -0.0161969 +-0.0704588 0.109521 0.0380634 +-0.068398 0.171087 -0.0357069 +0.0111209 0.0908234 -0.0303895 +-0.0634854 0.149796 0.0371525 +0.00199826 0.122137 -0.0115071 +-0.0620402 0.161574 -0.0285866 +0.0543448 0.0567886 0.0274783 +0.00150309 0.0619973 0.0566118 +-0.0476286 0.0532889 -0.00972253 +0.0589424 0.064749 0.0219118 +0.00619535 0.0866083 -0.0331365 +0.00933928 0.0947261 -0.0283032 +0.0354634 0.113562 0.00993821 +-0.0622597 0.0337543 0.0119702 +-0.0286126 0.0778208 0.0441079 +-0.0291848 0.0649007 -0.0284708 +0.00716146 0.130043 0.000903466 +0.00854238 0.122369 -0.0118647 +0.0207709 0.0422154 0.0420468 +-0.0728566 0.114991 -0.00711315 +-0.062327 0.161572 -0.0265871 +-0.029645 0.121258 -0.00823608 +-0.0358448 0.0971832 -0.0228124 +-0.0241278 0.166765 -0.0179136 +-0.0833762 0.111067 0.0302504 +-0.0714085 0.0715566 0.0335759 +-0.0285052 0.11799 0.0309781 +-0.0436341 0.171062 -0.00299049 +-0.0254563 0.120601 0.0288472 +0.029856 0.0552774 -0.0168073 +-0.0277474 0.076815 -0.0357774 +-0.0305568 0.0845973 0.042796 +-0.0927119 0.117479 0.0363033 +0.00128405 0.131584 0.0158806 +-0.0853072 0.129862 0.0494994 +-0.0379579 0.11044 -0.0188969 +-0.0647113 0.0736859 -0.0158833 +-0.055064 0.0698751 0.038539 +-0.049499 0.0747526 0.0426395 +-0.0315694 0.0461612 0.0465874 +-0.0452548 0.169651 -0.00135352 +-0.0891941 0.0888738 0.0164555 +-0.0424866 0.0396651 0.043393 +-0.0870945 0.0846532 0.00548002 +-0.0530436 0.142764 -0.000526483 +-0.0664988 0.146992 0.0401715 +-0.0606301 0.0613516 -0.00265703 +-0.0321846 0.121876 0.025771 +0.0462743 0.0806463 0.0131736 +0.0355309 0.0527205 0.03199 +-0.0515418 0.0389441 -0.0114685 +0.0203586 0.0565379 -0.0271575 +-0.065976 0.0624665 0.0232686 +-0.0399438 0.0336374 -0.0217314 +-0.0584862 0.0833066 0.0438144 +-0.0449507 0.157934 0.00683281 +-0.0161733 0.168253 -0.0210405 +-0.0807961 0.0747709 0.0205502 +-0.0450711 0.153185 -0.00674331 +0.0122509 0.0766796 0.0546284 +-0.0165839 0.159908 -0.00982549 +-0.000693426 0.0367942 0.0054988 +-0.051438 0.0643214 0.0343604 +0.0173166 0.0411975 -0.0216758 +-0.0350925 0.0344983 0.0186791 +-0.0263041 0.10845 -0.0208491 +-0.0233997 0.0384863 0.0301002 +0.0336304 0.116029 0.0121428 +-0.084184 0.106292 0.0253661 +-0.0668605 0.102389 -0.0157781 +-0.0617744 0.0585089 0.0133805 +-0.037501 0.0634549 0.0414009 +0.0430852 0.0973049 0.0211625 +-0.0895621 0.0902365 0.017449 +0.0358939 0.0591552 0.0359628 +0.00041272 0.0994106 0.0497851 +0.0297429 0.112241 -0.00897067 +-0.0614607 0.155749 0.0232098 +-0.0190678 0.0347878 0.0501361 +0.0278403 0.121636 0.00711658 +-0.0293538 0.0475081 0.0471486 +-0.0878748 0.0861246 0.0134664 +-0.065267 0.132559 0.042478 +-0.0557536 0.0782586 -0.0197587 +0.0163546 0.0537375 -0.0279072 +-0.0768389 0.102007 -0.0101454 +-0.0762457 0.0708701 0.0261488 +-0.0434929 0.0410777 0.0433607 +-0.0820951 0.100566 -0.0055776 +-0.0124865 0.114128 0.0400495 +0.0495003 0.0496818 0.0274333 +0.0157351 0.0562704 0.0489701 +-0.0269138 0.0660937 -0.0314934 +-0.0205217 0.0448565 0.0528623 +-0.0147659 0.0742889 -0.0388052 +0.0292558 0.120076 0.0204837 +-0.0416192 0.0505822 -0.0110011 +0.00560187 0.0957087 -0.0293479 +-0.00449169 0.0575673 0.0538908 +0.0302324 0.0374168 2.32521e-05 +0.0404422 0.105635 0.0151656 +-0.0407521 0.0782965 -0.0192261 +-0.0321404 0.106348 -0.0206098 +0.0240312 0.1242 0.0213823 +0.0163901 0.0476981 -0.0240512 +-0.0540847 0.0341953 0.0274512 +0.0565883 0.0716209 0.0188851 +-0.063971 0.0343652 0.0164556 +0.0222263 0.0790988 -0.0263649 +-0.0480529 0.15019 -0.0042011 +-0.0364615 0.155102 -0.00949574 +-0.0107913 0.165034 -0.0192459 +-0.0720629 0.166594 -0.0198059 +0.0596228 0.0581166 0.00817617 +0.0193916 0.12656 0.0211758 +-0.029103 0.162278 -0.0149633 +-0.0114929 0.118282 0.0379089 +-0.0766495 0.0810868 -0.0106019 +-0.00184307 0.128669 -0.00252946 +-0.0100488 0.177211 -0.0257537 +-0.0544738 0.0624824 0.0299832 +-0.0840733 0.0966087 -0.0036103 +-0.0707265 0.080778 -0.0161096 +-0.0214771 0.122102 0.0291424 +-0.0428932 0.0358165 0.00869673 +0.0135568 0.129672 0.01894 +-0.00280854 0.081222 -0.0368531 +0.00517895 0.130408 0.0230466 +-0.067269 0.167119 -0.0252721 +-0.00747948 0.0919417 -0.035549 +-0.0365036 0.0478079 0.0395886 +-0.0569665 0.0548885 0.00161507 +-0.0744851 0.0663284 0.00571192 +0.0455621 0.0889987 0.00417598 +-0.0292503 0.036802 0.0530596 +-0.0435044 0.0605182 0.0400424 +-0.0915766 0.14196 0.0161629 +-0.0696706 0.14899 -0.0379959 +-0.0770107 0.152809 -0.00688788 +-0.0705529 0.0628294 0.0184736 +-0.044794 0.0870021 -0.0219374 +-0.0107414 0.120001 -0.0131465 +-0.000720709 0.0669492 -0.0343521 +-0.0214315 0.0906458 0.0534872 +-0.0354995 0.0619703 0.0405316 +-0.0628269 0.1502 -0.00476792 +-0.0640626 0.136748 0.0389546 +-0.0474986 0.102884 0.0412273 +-0.0116527 0.129557 0.00826831 +-0.0347732 0.0337732 -0.0208295 +-0.0214023 0.161048 -0.0139992 +-0.0752954 0.15636 -0.00353298 +-0.0688076 0.150274 -0.0424283 +-0.0238582 0.0382811 0.0283891 +-0.0935937 0.118737 0.0143019 +0.0184606 0.0475775 0.0422564 +0.00850874 0.0575011 0.0529664 +-0.0532082 0.149319 0.0233918 +-0.0320154 0.082069 -0.0305372 +-0.0190294 0.0739916 0.05444 +-0.00216392 0.0992947 0.0503069 +-0.0162644 0.11453 -0.017303 +0.0278981 0.113772 -0.00862034 +0.0459848 0.0602104 -0.00435135 +-0.0564936 0.0465915 0.0420515 +0.0169002 0.103075 -0.0211457 +-0.00731691 0.128182 0.0272242 +0.0205916 0.112587 0.0371117 +-0.0176105 0.0435992 -0.0276633 +-0.0274971 0.0619365 -0.0294418 +0.000272434 0.109746 -0.0202486 +0.0416377 0.084481 -0.00877138 +-0.0784224 0.0725404 0.0242536 +-0.00880164 0.0826803 -0.0379328 +-0.0147316 0.0685868 -0.0380387 +0.0333786 0.0476367 -0.00619535 +0.00348805 0.0413645 0.0460201 +-0.0227229 0.0625945 -0.0340193 +-0.0669932 0.138471 -0.00790807 +-0.037224 0.169679 -0.0130647 +0.0535575 0.0477942 0.0072134 +-0.0575878 0.158069 0.0020235 +0.0345395 0.0727588 0.0393885 +-0.0699466 0.072981 0.0361776 +0.020686 0.0367224 0.0371237 +-0.0728722 0.0355547 0.00103582 +0.00487825 0.131703 0.0129125 +0.0580945 0.0523756 0.014183 +-0.0866528 0.145956 0.0348405 +-0.00749813 0.125151 0.0317009 +0.0403042 0.0398794 0.0201445 +0.0355341 0.0875716 0.0391778 +-0.0249398 0.157384 -0.00964166 +0.00350274 0.0489558 0.0513808 +-0.00381736 0.131135 0.0125816 +-0.00837752 0.0353543 0.048476 +0.0140849 0.129676 0.00773008 +-0.010101 0.102023 -0.0240718 +0.0446756 0.091763 0.0191604 +-0.0637279 0.173384 -0.0513558 +-0.031495 0.061765 0.0382603 +0.0366571 0.0968397 -0.0108144 +-0.0285085 0.115306 0.0336868 +-0.00497421 0.126254 0.0309961 +0.00248615 0.104372 0.0430232 +0.00642086 0.116423 -0.0174422 +-0.0636795 0.0658475 -0.00727738 +-0.0891519 0.0956005 0.0104313 +-0.0860649 0.0994533 0.00140442 +-0.0735831 0.152654 -0.0328925 +0.00651157 0.066084 0.0555109 +0.0344822 0.102017 -0.0120204 +-0.0637552 0.15245 -0.00517189 +-0.077532 0.159745 -0.0169143 +0.00251128 0.0661582 0.0562906 +0.0151093 0.0887421 0.0518346 +-0.00945842 0.0387253 -0.00172767 +-0.0471724 0.133935 0.00981498 +-0.0188178 0.158773 -0.00942574 +-0.0194961 0.0654004 0.0509321 +-0.0774489 0.163906 -0.0229523 +-0.0267283 0.156621 -0.00899742 +-0.0465008 0.111213 0.0371008 +-0.00249784 0.0939038 0.0553992 +-0.0715513 0.0342218 0.00249626 +0.0107439 0.130936 0.0122066 +0.0266603 0.0421651 0.0343135 +0.011996 0.0344545 0.00276628 +-0.0653727 0.074532 0.0393295 +-0.0417745 0.172541 -0.00446528 +-0.0368752 0.0345479 0.0395694 +0.00440907 0.131695 0.0141669 +0.0189748 0.0699869 0.0502663 +-0.0690298 0.155601 0.00744971 +-0.0265663 0.0356908 0.0529027 +-0.0621593 0.13389 0.0382274 +-0.0375341 0.0356789 0.0117182 +-0.00861273 0.0434199 -0.0261503 +0.0317849 0.0490447 0.0333888 +-0.0637123 0.0445754 0.0336875 +0.0376665 0.0374378 0.0089364 +-0.058497 0.0904388 0.0452323 +-0.0442728 0.0437529 -0.0143172 +0.0204519 0.0357096 0.00704168 +0.0282191 0.0941913 -0.0197138 +-0.0688839 0.117973 -0.00851105 +0.0338372 0.104851 -0.0110391 +0.024912 0.0505255 0.0392969 +0.0125119 0.107097 0.0421465 +-0.00117532 0.0998676 -0.0237773 +0.0246952 0.0420222 0.0382704 +-0.0398433 0.0971287 -0.022179 +0.0268619 0.108823 -0.0133055 +-0.0799271 0.140795 0.0466609 +0.0180138 0.0808533 0.0524986 +-0.0868879 0.111328 0.0363925 +0.000567537 0.0921561 -0.0336854 +-0.0892038 0.0969467 0.00941895 +0.00816432 0.0904541 -0.0318561 +-0.064746 0.155508 0.00899366 +-0.0911853 0.113324 0.0173235 +-0.00120622 0.113981 -0.0187843 +-0.00924245 0.0407867 0.049553 +-0.00349897 0.0575855 0.053786 +-0.0375091 0.0407357 0.0441865 +-0.0584982 0.108398 0.0387966 +0.0391307 0.0786589 -0.0107679 +-0.0474967 0.100136 0.0424923 +0.0275962 0.102142 0.0400686 +0.0233313 0.0578274 -0.025582 +-0.0510235 0.0723937 0.0407728 +0.0280639 0.121158 0.0057742 +-0.0318235 0.0637622 -0.0194381 +-0.038893 0.0378836 0.042947 +-0.0455156 0.14919 0.00769333 +-0.0724664 0.0678961 0.0260135 +-0.0614699 0.156861 -0.0255852 +0.0511802 0.0687267 0.0256724 +-0.0639329 0.153712 -0.0368711 +-0.055548 0.0628794 0.0303893 +0.0228246 0.0344564 0.00866393 +0.0333583 0.0505553 -0.00686804 +-0.0436286 0.0534388 -0.0110764 +0.0170321 0.128388 0.0173658 +-0.0484634 0.122511 0.0297787 +-0.0908772 0.119982 0.00630567 +-0.0251882 0.121015 0.0283088 +-0.0621056 0.167818 -0.0515918 +-0.0434918 0.0451945 0.0416496 +-0.0261859 0.172679 -0.0191085 +0.0581533 0.0685799 0.00535861 +-0.0308235 0.12443 -0.00028071 +-0.088653 0.0982606 0.00741366 +0.000114549 0.110154 -0.0201623 +0.032895 0.11463 -0.00105927 +0.0393368 0.0984458 -0.00682083 +0.0171551 0.0988258 -0.0226279 +0.0605804 0.0651016 0.017176 +-0.0528261 0.149337 0.0214103 +-0.0213292 0.159914 -0.0125433 +0.000685965 0.124734 0.0330095 +0.0425127 0.0872289 0.028142 +-0.0754377 0.172239 -0.0469918 +-0.00949675 0.039136 0.0341772 +-0.0750736 0.0773173 0.0349007 +-0.0204972 0.104391 0.0429524 +0.044682 0.0804275 0.0241291 +0.0288766 0.0477511 0.0362254 +-0.0590849 0.0584397 0.0175987 +-0.0187468 0.0685918 -0.0381091 +-0.0908268 0.137853 0.0181986 +-0.0934137 0.128236 0.0152484 +-0.0722094 0.155629 0.00630789 +-0.0701241 0.109501 0.0382316 +-0.0833629 0.0829469 -0.00357326 +-0.0219158 0.177176 -0.0142605 +-0.0038834 0.0389548 -0.00453366 +-0.0468309 0.0956366 -0.0220125 +0.0589161 0.0621713 0.00415053 +-0.0518659 0.144686 0.0163701 +-0.0589723 0.0448133 0.0132235 +0.05973 0.0664208 0.00812497 +-0.0911185 0.128332 0.0402364 +0.0082766 0.0667723 -0.0317926 +-0.0557755 0.0826404 -0.0214196 +-0.0254275 0.181837 -0.00892324 +-0.0899879 0.140645 0.0281829 +-0.0725199 0.141421 0.0466976 +0.0173961 0.0343459 0.000212982 +-0.0435004 0.0424369 0.0431009 +-0.0397849 0.155107 0.00553982 +0.0474231 0.0702463 0.00356979 +0.00935197 0.130836 0.00599246 +-0.0466333 0.0562665 -0.0109539 +-0.0134154 0.0393527 0.0385623 +0.0202221 0.0721388 -0.0279345 +-0.0855696 0.139064 0.00222203 +-0.0690425 0.0382325 0.0107396 +-0.0147406 0.129011 0.0158201 +-0.0436768 0.0636379 -0.0137577 +0.058107 0.0694858 0.00643586 +-0.0523916 0.160438 -0.00307609 +-0.0208502 0.120881 -0.00994613 +-0.0144972 0.0772805 0.0565653 +0.0146633 0.0548535 0.0491553 +-0.0872189 0.103599 0.00739967 +-0.013497 0.0701643 0.0543951 +-0.0727808 0.161025 -0.0379399 +0.0541744 0.0495318 0.0218692 +-0.0180637 0.122407 0.0308158 +-0.0437406 0.150663 0.00676805 +-0.0471693 0.128157 0.0265222 +0.000324051 0.0583269 -0.0327186 +0.0183373 0.109817 -0.016338 +-0.0826495 0.137607 -0.000712655 +0.0256839 0.122773 0.00490001 +0.0354824 0.111268 -0.000157004 +-0.0457208 0.0643263 0.038969 +0.0547017 0.0700348 0.00381661 +-0.00761606 0.128811 0.0256727 +-0.0687402 0.156349 0.0177202 +-0.085121 0.108927 0.00536277 +-0.0739548 0.136937 -0.00691386 +-0.00649589 0.0884166 0.05709 +-0.068322 0.144999 -0.0199128 +-0.0891584 0.142048 0.0331685 +-0.0282821 0.0889315 -0.0326167 +-0.0270715 0.0381475 0.00619785 +0.0226739 0.0430625 -0.011732 +-0.0895091 0.147137 0.0278175 +-0.0396286 0.0534411 -0.011004 +-0.0570587 0.0521462 0.00466373 +-0.0421407 0.162162 -0.0108328 +-0.0831356 0.0816494 -0.00150376 +-0.0274399 0.180304 -0.00715734 +-0.055838 0.0927189 -0.0219026 +-0.0624754 0.163097 -0.0475912 +-0.064973 0.0365283 0.0405192 +-0.0434783 0.0690982 0.041489 +0.0407433 0.102836 0.021176 +-0.0588838 0.0468495 0.0306747 +0.00493781 0.100395 -0.0223096 +0.00122691 0.116615 -0.0176232 +-0.035551 0.0451135 -0.0264751 +-0.025842 0.091626 -0.0326108 +0.0509675 0.0463703 0.0218015 +-0.077144 0.164539 -0.0230622 +-0.0613807 0.122656 0.0428396 +0.0364941 0.0454217 0.0304675 +-0.0655017 0.0931357 0.0435076 +-0.0869021 0.114398 0.00327085 +-0.0624965 0.109755 0.0377659 +-0.0219613 0.124807 -0.00195706 +-0.0564977 0.109762 0.0379025 +-0.0489044 0.0413839 -0.0112514 +-0.0464999 0.104301 0.0412272 +-0.0689362 0.173831 -0.0430963 +-0.0274521 0.175685 -0.00821886 +-0.00850113 0.0633575 0.0560799 +-0.0350673 0.0752529 -0.020583 +-0.0702674 0.128451 0.0511564 +-0.0318141 0.156607 0.00124178 +0.0187844 0.127527 0.00803838 +-0.0133229 0.0978873 -0.0277326 +0.00349851 0.0356817 -6.66678e-05 +-0.0714787 0.0630924 0.012741 +-0.0723877 0.16801 -0.0460141 +-0.0314985 0.12639 0.0112101 +0.0103131 0.0935662 -0.0290602 +0.0162881 0.0708862 -0.0299631 +-0.0486922 0.0693814 -0.0146213 +-0.00965082 0.0496857 -0.0310806 +-0.0472721 0.035073 0.043832 +-0.0505797 0.0528906 0.0145102 +-0.00843296 0.037899 -0.0156923 +-0.0276376 0.0383723 -0.00322479 +-0.0394609 0.174124 -0.00699657 +-0.0444987 0.125316 -0.00848377 +0.0413134 0.0732089 -0.00778125 +-0.0654437 0.17819 -0.0606312 +-0.0194942 0.0498847 0.046612 +-0.0470957 0.0376632 0.0453493 +-0.0435029 0.0832144 0.0426759 +-0.0134871 0.123689 0.0319378 +-0.0174978 0.0744121 0.0553624 +0.0333782 0.11597 0.0192002 +-0.0203318 0.0946383 0.0508766 +-0.0412055 0.0419705 -0.0232873 +-0.0815038 0.0885533 0.0328994 +-0.0703591 0.0620888 0.0120183 +-0.0334658 0.0396217 0.0500837 +-0.036771 0.0343273 0.0309808 +-0.0165061 0.126041 -0.00139683 +0.0369819 0.102039 0.0307859 +-0.0207502 0.0626823 -0.0352205 +0.0061481 0.104478 -0.0212191 +0.0323926 0.117262 0.0173907 +-0.0357746 0.08137 -0.0222094 +-0.0375579 0.0341991 0.0273875 +-0.0503289 0.0543622 0.0156654 +-0.0287388 0.076371 0.0428795 +-0.0631791 0.0597373 0.0065938 +-0.00649181 0.104468 0.0439265 +0.00653601 0.0924318 -0.0319265 +-0.0371937 0.168177 -0.0134205 +-0.0375614 0.128197 0.00751871 +-0.0898903 0.135179 0.0352087 +0.037196 0.0699864 0.036159 +0.0276189 0.0564968 -0.0197599 +0.0447325 0.0931835 0.0161662 +0.0398803 0.0927067 0.0314285 +-0.0468272 0.125328 0.0268353 +-0.0715318 0.0347543 -0.000134182 +-0.0859938 0.0978404 0.0272064 +-0.0460065 0.0410789 -0.0142843 +-0.0499829 0.0586014 0.0334591 +-0.0614235 0.172219 -0.0618413 +0.00350193 0.0474397 0.0500395 +0.0226438 0.0875613 0.0487078 +0.0374992 0.0644481 -0.0117672 +-0.00648083 0.111994 -0.0206545 +-0.0934649 0.120072 0.0123034 +0.00542168 0.12935 -0.00135496 +-0.0765071 0.126009 0.0528667 +-0.0308338 0.109919 -0.0183719 +0.018594 0.125548 0.0250901 +-0.0205082 0.0474421 0.0508554 +-0.0252811 0.168282 -0.0104061 +-0.051716 0.150726 0.0145842 +-0.0317716 0.0863018 -0.027557 +-0.0793223 0.151473 0.000118749 +-0.0823192 0.154091 0.0115231 +0.0432611 0.071972 -0.00279979 +-0.0761461 0.154973 -0.00265921 +-0.032878 0.156591 -0.0107994 +0.0360211 0.0628935 -0.0127986 +-0.0321679 0.120788 0.027294 +-0.00521106 0.038426 0.0176436 +0.0377365 0.0388851 0.0205214 +0.0183131 0.127887 0.0164149 +-0.0580398 0.0608775 0.0245548 +-0.0791963 0.108632 0.0349508 +-0.00201716 0.131125 0.0175388 +0.0407504 0.0633497 -0.00473671 +0.0447287 0.0917385 0.00119217 +-0.0534928 0.0848236 0.0453456 +0.00605741 0.0346665 0.039556 +-0.0276244 0.0436594 -0.0289391 +-0.00868086 0.056987 -0.0336771 +-0.058573 0.0613666 -0.00334192 +0.00741372 0.0360842 -0.0231635 +0.00514996 0.0337963 0.0112147 +-0.064123 0.113942 -0.0123233 +0.0527625 0.0723674 0.0204268 +-0.0354974 0.0634085 0.0409173 +0.0287147 0.0352518 0.00538775 +-0.0522813 0.0461425 0.0206748 +0.0547864 0.0548406 0.00018303 +0.00557978 0.101599 0.0456072 +0.00472897 0.0950887 -0.030676 +0.0355131 0.0781566 0.0390786 +0.0402454 0.0843611 -0.0117637 +-0.0605819 0.0468615 0.000669297 +-0.0394923 0.074754 0.042367 +-0.0331798 0.0779303 -0.0275261 +-0.0683095 0.178205 -0.0587107 +-0.00995429 0.0389301 0.0324647 +-0.0495001 0.108413 0.0388185 +-0.0659124 0.113781 -0.0114133 +-0.0404538 0.105662 0.0393313 +-0.0654729 0.17978 -0.0563035 +-0.0614888 0.0918402 0.045217 +0.0333657 0.0640658 -0.0168115 +-0.0809488 0.144539 -0.000825536 +-0.0545043 0.0918174 0.0448821 +-0.0504943 0.147794 0.0128405 +-0.0745085 0.118967 0.0529255 +-0.0596424 0.0629313 -0.00554826 +0.0600133 0.0636587 0.00714888 +0.0272456 0.0746657 -0.023693 +0.0433693 0.0575272 -0.00543691 +-0.0084928 0.0591086 0.0550857 +0.0327041 0.0686805 0.0402125 +-0.0371896 0.166685 -0.0135589 +0.0115191 0.107071 0.0419973 +0.0398757 0.096658 0.0297176 +-0.0882102 0.118977 0.047099 +-0.0794917 0.134473 0.0511764 +-0.0147562 0.0388704 -0.0103641 +-0.0729608 0.135493 -0.0074448 +-0.0829718 0.144576 0.00217748 +0.0121355 0.107265 -0.0192728 +0.00249537 0.0427747 0.0458993 +-0.0590743 0.136941 -0.00615344 +-0.0740187 0.0822617 -0.01463 +0.0274881 0.0349726 0.0165028 +0.0249311 0.118938 0.0303034 +-0.0860712 0.137702 0.0022107 +-0.00546373 0.0337972 -0.022595 +-0.0425018 0.0506116 0.0394181 +0.0044907 0.119648 0.0370088 +-0.066886 0.129814 0.0472408 +-0.033949 0.0667384 -0.0165589 +0.0265464 0.0699406 0.043619 +-0.0486667 0.134012 0.00340208 +0.0201914 0.117982 0.0346477 +-0.033458 0.0353739 -0.0310204 +-0.0251991 0.0536651 0.0400375 +-0.0689113 0.147966 -0.0319204 +-0.0650665 0.151369 -0.0356223 +-0.065894 0.118002 -0.00906639 +-0.00150449 0.0350731 0.0394353 +0.00648653 0.0951017 0.0524749 +0.0322641 0.11194 -0.00663069 +0.0356067 0.113152 0.00567562 +-0.0317604 0.120314 -0.00921321 +-0.0666072 0.0846933 0.0437683 +-0.0745085 0.13306 0.0516401 +-0.0914301 0.133749 0.0202171 +-0.0271327 0.0917299 -0.030613 +0.0356733 0.107346 0.028881 +0.021724 0.104691 0.0421173 +-0.0214953 0.0474568 0.0509792 +0.0189666 0.119003 -0.0102495 +0.0330783 0.0534528 0.0353209 +-0.0796959 0.154266 0.00805358 +-0.0370933 0.175555 -0.00565624 +-0.0324183 0.116998 -0.0137964 +-0.015069 0.117815 -0.0147928 +-0.0541455 0.0482522 0.0392578 +-0.017538 0.18639 -0.0186026 +-0.0486882 0.138613 0.0123943 +-0.0134995 0.0786948 0.0569449 +-0.0792474 0.0803083 0.033239 +-0.0523607 0.12647 -0.00557636 +-0.0261456 0.180134 -0.00803266 +-0.0654933 0.0875673 0.0446215 +0.0410795 0.0647663 -0.00478377 +0.038759 0.104954 -0.0010414 +0.0213206 0.103387 0.0432887 +0.00249002 0.112797 0.0416669 +-0.02662 0.157614 -0.0107103 +-0.0524373 0.0487028 0.0136696 +0.0367672 0.0605146 0.0354804 +-0.0769184 0.0832691 0.0369336 +-0.0650248 0.0337055 0.00787315 +-0.0515046 0.159378 0.00834015 +-0.0547588 0.079768 -0.0207581 +-0.0799475 0.0796892 0.0318714 +-0.0819371 0.129486 -0.00455242 +0.0162371 0.0359566 0.0423025 +-0.052497 0.108432 0.038849 +-0.0330169 0.0750953 -0.0275046 +-0.0367909 0.0856326 -0.0224706 +-0.0909792 0.143017 0.0266346 +-0.0790213 0.169435 -0.0369802 +-0.0224887 0.120777 0.0306794 +-0.0714154 0.063966 0.00470687 +-0.0833338 0.121705 0.0492392 +-0.00224884 0.0410819 0.0473849 +-0.0064961 0.0647536 0.0562043 +-0.0154675 0.0382885 0.0102401 +0.0316901 0.0754766 0.0423249 +-0.0682663 0.0409329 0.00988698 +-0.0397472 0.0753921 -0.0181662 +-0.0404974 0.0534278 0.0394751 +-0.027235 0.0964545 -0.0242996 +0.01346 0.094917 0.0501359 +-0.0101655 0.178729 -0.0267529 +-0.0368558 0.0971787 -0.022608 +-0.0618627 0.061311 0.023361 +-0.00785703 0.0384956 0.0242725 +-0.00828946 0.0422134 0.0491908 +-0.0626761 0.177191 -0.057627 +-0.0197826 0.0770974 -0.0390157 +-0.0283747 0.0368322 -0.0186629 +-0.0678325 0.165206 -0.0549947 +-0.0762767 0.179149 -0.050884 +-0.0126939 0.0585083 -0.0350263 +0.0259904 0.108758 0.0377477 +0.042201 0.0819186 0.0294354 +0.0164623 0.11028 -0.0168584 +-0.000216315 0.0411702 0.046762 +-0.0166283 0.0393036 -0.0275139 +-0.0660426 0.171124 -0.0420386 +0.0456785 0.0862046 0.0141695 +0.00138117 0.044939 -0.0263139 +0.0461205 0.0704224 0.0223322 +-0.0776245 0.0703136 0.0210685 +-0.0756983 0.148597 -0.0138657 +-0.00849865 0.0773628 0.0576515 +-0.0145231 0.0446315 0.0506096 +-0.0683418 0.0625091 0.0209713 +0.0172542 0.0764235 -0.0285503 +0.00803706 0.0343648 -0.0148062 +0.02126 0.0748992 -0.0268979 +-0.0630463 0.113863 0.0385547 +-0.0145507 0.0980154 0.0489953 +-0.0546077 0.131128 0.0350935 +-0.012492 0.061843 0.0546212 +-0.028497 0.0550003 -0.0233987 +0.0217846 0.11532 -0.0122874 +-0.0931885 0.121553 0.0392843 +-0.0522878 0.055669 0.0133058 +-0.0592645 0.138135 0.0336221 +-0.0895773 0.139272 0.0261794 +-0.0653179 0.156011 -0.0499494 +0.0382996 0.103126 -0.00513692 +-0.00322923 0.0355467 -0.0162422 +0.0141613 0.0988714 -0.0229756 +-0.0404979 0.0776396 0.043177 +-0.000517251 0.0386237 0.0468325 +-0.0745039 0.117561 0.0526615 +-0.0404908 0.101464 0.0408992 +0.00150976 0.0562224 0.0541662 +-0.0302058 0.0649962 -0.0264588 +-0.0427465 0.0393017 -0.0242897 +-0.0680504 0.12005 0.0525411 +0.0105239 0.101777 0.0472989 +-0.051788 0.0855011 -0.0215694 +0.0121427 0.124109 -0.00776299 +-0.0714952 0.123214 0.0534125 +-0.0377025 0.0444987 -0.0253388 +-0.0285008 0.0573948 0.0366096 +-0.0557355 0.0753549 -0.0185519 +-0.0136024 0.0377623 -0.0264268 +-0.055443 0.13396 0.033868 +-0.0329956 0.122915 -0.00595413 +-0.0659107 0.120913 -0.00886784 +-0.00952503 0.0920885 -0.0357277 +-0.0437604 0.036567 -0.0252782 +-0.020729 0.181491 -0.0220031 +0.00793492 0.130935 0.0197362 +-0.00287417 0.10736 -0.0221559 +-0.0531678 0.0503031 -0.00638771 +-0.0649059 0.116607 -0.0100071 +0.0311853 0.0491232 0.0343139 +-0.0464498 0.034849 -0.0185661 +-0.0448976 0.168579 0.00154181 +0.0324248 0.0752705 -0.0187807 +0.00488488 0.0387234 -0.0100497 +-0.0607447 0.0752603 -0.0176616 +-0.0575406 0.0387439 -0.00960491 +-0.0874426 0.110454 0.0173412 +-0.0517698 0.0516016 0.0312301 +-0.0727656 0.156832 -0.0339136 +0.0123073 0.0638424 -0.0304488 +-0.00866157 0.0541436 -0.0334268 +0.00183737 0.0373069 0.04638 +-0.0298138 0.0344903 0.0411187 +-0.0674167 0.149888 -0.0375972 +-0.0770317 0.088754 0.0382806 +-0.0857815 0.0897033 0.0272482 +-0.0125983 0.037741 -0.0261872 +0.0182378 0.0893522 -0.0266421 +-0.0766704 0.154203 -0.00290271 +-0.0684648 0.0617211 0.0180797 +0.0505111 0.0637895 0.0291551 +-0.0497918 0.143216 0.0113941 +-0.0616227 0.156855 -0.0295846 +0.0290304 0.0968725 0.0421292 +-0.0756542 0.0679921 0.00394259 +-0.0526765 0.0514226 0.0124143 +-0.0625972 0.0348156 0.0215996 +-0.0544966 0.0791235 0.0440855 +-0.0544133 0.159808 0.00694146 +2.76528e-05 0.0391548 -0.0114154 +-0.00549746 0.0503818 0.0516227 +-0.0646199 0.0359342 0.0410351 +0.0410489 0.0445052 0.0289111 +-0.0356376 0.0548341 -0.0105043 +0.0272051 0.0465425 -0.0127095 +-0.0513967 0.161204 -0.00381805 +-0.0424671 0.124776 0.022048 +-0.0300883 0.0335187 -0.027157 +-0.0362553 0.0336801 0.0101688 +0.0513156 0.0588831 -0.00408417 +0.0399488 0.0688733 -0.0097971 +-0.0617146 0.155302 -0.0255819 +-0.0112103 0.129394 0.0199977 +-0.0552256 0.153277 0.0254807 +-0.0697772 0.0409122 0.00855159 +-0.0257631 0.0755055 -0.0369491 +-0.0601959 0.0422699 -0.00706205 +-0.0475933 0.134581 0.0184866 +0.0267481 0.0659374 0.0438828 +-0.0790343 0.0886679 0.0360671 +0.0606094 0.0637127 0.00915317 +-0.0823359 0.140394 0.000222625 +-0.0792589 0.1445 -0.00280742 +0.0288607 0.118772 0.0260462 +-0.000258207 0.0388058 4.93079e-05 +0.0142249 0.0779815 -0.0305449 +0.0279207 0.111816 -0.0105079 +-0.0649061 0.108122 -0.0141961 +0.0372666 0.0547889 -0.00619261 +-0.0258342 0.159627 -0.000620301 +-0.0761165 0.0874143 0.0388159 +0.0425599 0.101502 0.0121632 +0.0533305 0.0723883 0.0073663 +-0.0814882 0.139397 0.0468344 +-0.0119496 0.127575 -0.00116297 +0.0308488 0.116432 0.0267923 +-0.0342458 0.127284 0.0102001 +0.0488271 0.0733963 0.0130056 +-0.017912 0.059765 0.0509406 +0.0133103 0.0753629 0.0544488 +-0.0896061 0.126751 0.00429509 +0.034401 0.0461473 -0.00601616 +-0.0485411 0.166778 0.000587101 +0.0342862 0.0782566 -0.0167489 +-0.00549615 0.0925657 0.0562617 +-0.0700277 0.153659 -0.0489787 +0.00562336 0.034628 0.021452 +-0.0825014 0.0978733 -0.00561152 +-0.0665019 0.0818141 0.0428543 +-0.0628077 0.166262 -0.0415912 +0.0329576 0.0753133 -0.0177979 +0.0159612 0.0887478 0.0513106 +-0.0348521 0.0972102 -0.0229902 +0.00689753 0.13043 0.00224143 +0.0163113 0.0637479 -0.0291811 +-0.0681449 0.144372 -0.0168262 +-0.0709402 0.170831 -0.0510269 +-0.0618586 0.161576 -0.034591 +-0.05709 0.0562779 0.00261705 +-0.0511762 0.163872 0.00329038 +-0.0295002 0.0688631 0.0391758 +-0.0548706 0.0634738 0.0317723 +0.00519565 0.0838361 -0.0338494 +0.0412244 0.0703917 -0.00779979 +-0.0485608 0.164 0.00493162 +0.0405319 0.0913292 0.030651 +-0.0364055 0.0394201 0.0459276 +-0.0885895 0.126718 0.00227148 +-0.00135158 0.0925397 -0.0341169 +-0.0155034 0.0472755 0.0490261 +-0.0533709 0.0334238 -0.0075905 +-0.0135602 0.174221 -0.0197865 +0.0151695 0.0534137 0.0481113 +0.00249824 0.119676 0.0375233 +-0.0574904 0.0847348 0.0442092 +-0.0706266 0.111419 0.0453421 +-0.0498404 0.122243 -0.0112035 +-0.0580787 0.133988 -0.00600022 +-0.0856455 0.0845341 0.000486997 +-0.0677324 0.0847093 0.0432514 +-0.0516192 0.112658 -0.0171697 +-0.0294883 0.101537 0.0426799 +-0.0562967 0.0548357 0.00668262 +-0.0870689 0.0968011 0.00243877 +-0.0809104 0.126584 -0.00546143 +0.0226682 0.115322 0.0347114 +-0.0702279 0.156078 0.0244771 +0.00613975 0.0976727 -0.0254362 +-0.0654107 0.0782591 0.0414837 +0.0154936 0.104462 0.0445958 +-0.0557216 0.125528 0.0387388 +-0.0708946 0.1037 -0.0131771 +0.0207514 0.10232 -0.0203322 +0.040798 0.105646 0.00916422 +-0.0789759 0.136856 -0.00458832 +0.00163159 0.126824 0.0304308 +0.0217692 0.0444645 -0.0177596 +0.00149843 0.0965502 0.0531993 +0.00416774 0.034456 0.0194982 +-0.022279 0.185099 -0.0171819 +-0.0144819 0.0759021 0.0565083 +-0.062395 0.163038 -0.0545883 +0.0386856 0.0757975 -0.0108084 +0.0230618 0.0389706 0.0372995 +-0.0661823 0.154393 0.00121795 +-0.0751879 0.179229 -0.0530087 +-0.000499764 0.0590718 0.0548831 +-0.0616117 0.16 -0.0305904 +-0.0254372 0.0796492 0.0521904 +-0.087722 0.128407 0.0462822 +-0.0361331 0.122312 0.027301 +-0.0259579 0.0383264 -0.00469023 +-0.0615278 0.0399873 -0.00779984 +-0.0911978 0.147452 0.0151543 +-0.0776353 0.15693 -0.0189052 +-0.048662 0.0345502 0.0387985 +0.00500615 0.0390969 0.0281732 +-0.0664605 0.152204 -0.0437352 +-0.0514963 0.157854 0.00954267 +-0.0893902 0.139278 0.0291842 +-0.092072 0.128303 0.0302461 +-0.0166194 0.0421642 -0.027592 +-0.0880283 0.128084 0.00127828 +-0.06275 0.178179 -0.0598124 +-0.0242491 0.0796961 0.0538111 +-0.0575802 0.14965 0.0326026 +-0.0598499 0.0364094 -0.00954648 +0.0260337 0.0639191 -0.0225668 +-0.0215138 0.185205 -0.0184453 +0.00733204 0.0567933 -0.0307054 +-0.0394107 0.125604 0.021627 +-0.0805747 0.154604 0.0238516 +0.0319556 0.0942571 0.0410831 +-0.0503335 0.0345244 0.0401985 +-0.0521615 0.159088 -0.00368491 +-0.0816591 0.0828436 -0.00556986 +0.0120628 0.0346214 0.0245844 +0.00946799 0.112678 0.0395888 +-0.00501719 0.0348021 0.0425449 +-0.080434 0.0763484 0.0258387 +0.0419394 0.0802864 -0.00678235 +-0.0270715 0.179993 -0.0160072 +-0.00929516 0.17029 -0.0258484 +0.028889 0.0549767 0.0398373 +-0.0324184 0.123701 0.0227019 +-0.00768132 0.0976452 -0.0294292 +-0.0534956 0.0478266 0.0400304 +-0.0637998 0.0852745 -0.0191701 +0.0175395 0.0364962 0.0420884 +0.0289699 0.100814 0.0402993 +-0.0384924 0.0478181 0.0398313 +-0.00649796 0.0457161 0.0472731 +0.00861625 0.13122 0.00857267 +-0.0424707 0.0634258 0.0409808 +-0.0147714 0.163994 -0.0109737 +0.0514504 0.0735674 0.0125302 +0.0157166 0.0461353 0.0435597 +-0.0886232 0.152074 0.0182297 +-0.0732612 0.155462 -0.02991 +0.0560042 0.0728404 0.0157211 +-0.0465551 0.0447198 -0.0107805 +-0.020486 0.18455 -0.0138786 +0.00948927 0.0976692 0.0490505 +0.0112322 0.0342419 -0.000927635 +0.0153695 0.0617406 0.0502582 +-0.0137598 0.0382596 0.0196658 +0.0302365 0.0828976 -0.0200496 +-0.00484087 0.0994589 -0.0252596 +-0.0335771 0.177292 -0.00581839 +-0.0706171 0.160991 -0.0459386 +-0.0381352 0.155099 0.00439417 +0.0262713 0.112733 0.0346521 +-0.0288992 0.0377652 0.0242203 +-0.0741081 0.174769 -0.0407073 +0.0312687 0.106096 -0.0123707 +-0.0467828 0.168244 0.000200438 +-0.0544952 0.0440117 0.0450302 +0.00623037 0.129867 0.000104943 +-0.043169 0.163647 -0.0101027 +-0.0034944 0.103046 0.0439357 +-0.0265042 0.106069 -0.02235 +-0.0577843 0.0811473 -0.0206854 +-0.0358177 0.0886369 -0.024178 +-0.0726405 0.148337 -0.0310398 +-0.0454975 0.111194 0.0370842 +-0.0671848 0.0335335 0.00220964 +-0.0117936 0.0667192 0.0544625 +-0.0609674 0.125285 -0.00834926 +-0.080841 0.0760714 -0.00147772 +-0.0522091 0.118697 -0.0134778 +-0.074349 0.162439 -0.0349528 +-0.0740415 0.112641 0.0489542 +-0.0294567 0.0847909 0.044594 +-0.0204364 0.038385 0.0254029 +-0.0497015 0.070866 -0.0150622 +-0.0525829 0.113848 -0.0164008 +-0.0415348 0.163761 0.00444738 +-0.0644934 0.106993 0.039043 +0.0437981 0.0734503 -0.00176783 +-0.0284962 0.0946634 0.0451029 +0.0309795 0.0506032 0.0357766 +-0.0395331 0.128532 0.0067941 +-0.0424235 0.12018 -0.013117 +-0.0197167 0.103079 -0.0233045 +-0.0430994 0.12944 0.0113807 +-0.0913339 0.117411 0.0283055 +0.026348 0.0463448 0.037827 +-0.0406738 0.0606904 -0.0121867 +-0.071511 0.0930107 0.0417462 +-0.0866623 0.0964635 0.0264805 +0.00386952 0.131337 0.0182591 +0.0282305 0.08443 -0.0217055 +0.0128412 0.0347905 0.0282102 +0.00434097 0.053874 -0.0300717 +-0.0754795 0.0704499 0.0266608 +-0.0699695 0.135529 -0.00821968 +-0.0305143 0.0348089 0.0211376 +0.00750189 0.118272 0.0376599 +-0.0504996 0.108397 0.0385655 +-0.0779682 0.135412 -0.00525448 +-0.0273965 0.0380183 0.0261038 +-0.0520915 0.129726 0.0334448 +-0.0221568 0.157426 -0.00647102 +-0.0562219 0.0560519 -0.00142054 +-0.0817829 0.110167 0.0313299 +-0.0502435 0.0335698 -0.00160666 +0.0331444 0.0584441 -0.0147212 +-0.00651273 0.0760152 0.058184 +-0.0285619 0.108073 -0.0204718 +-0.0157027 0.123907 0.0301351 +-0.0175006 0.10024 0.0438179 +-0.0297515 0.154263 -0.00514597 +-0.0475033 0.113884 0.0346438 +-0.0154952 0.087016 0.0568367 +0.0435889 0.0706095 -0.000776861 +-0.0930208 0.116049 0.0173125 +-0.0783399 0.174997 -0.0480125 +-0.0650728 0.117149 0.0481049 +0.0600369 0.0650499 0.00814341 +-0.0678832 0.147765 -0.0303891 +-0.0802136 0.0813857 -0.00655277 +-0.0356852 0.127701 0.00820492 +0.0154871 0.0990335 0.0473819 +-0.019377 0.127678 0.00978651 +-0.0208657 0.123339 0.0268408 +-0.0553906 0.073233 0.0409139 +0.0560337 0.0553031 0.0245952 +-0.0306612 0.0816984 0.0420491 +0.04335 0.0902653 0.0251673 +-0.0137008 0.0599733 -0.0359611 +-0.0535493 0.045819 -0.00734382 +0.0152704 0.07093 -0.0305648 +-0.0706849 0.0819434 0.0406373 +0.0104915 0.114065 0.0387753 +-0.052073 0.150157 -0.00315276 +0.00150908 0.0458287 0.0477014 +-0.00149907 0.122451 0.0357652 +0.0346578 0.114254 0.0196698 +-0.0263079 0.125672 0.00579971 +-0.0662371 0.173912 -0.0594768 +-0.0111949 0.178453 -0.0296295 +-0.039457 0.0403768 -0.0273046 +-0.0321606 0.153429 -0.00535973 +0.0505072 0.0678423 0.0265215 +0.0377143 0.106919 0.0261871 +-0.0717609 0.172825 -0.0369735 +-0.034656 0.0592094 -0.011649 +-0.0237103 0.0348634 0.0507821 +-0.0409865 0.0355803 0.00929737 +0.0240747 0.0915746 0.0472686 +-0.0576816 0.0336048 -0.0104516 +0.034582 0.0563647 0.0357928 +-0.0304985 0.0631621 0.0381216 +-0.0145978 0.0392398 -0.0269855 +-0.0446029 0.130656 0.0108143 +0.0240159 0.124704 0.0156714 +0.00222038 0.0796794 -0.0348837 +-0.029229 0.179986 -0.0130226 +-0.0371614 0.0338798 0.00980443 +-0.0654857 0.101487 0.0416824 +-0.0386286 0.0534191 -0.0107521 +-0.0743388 0.0659419 0.0131754 +-0.0775178 0.172972 -0.0399134 +-0.0704983 0.0999903 0.0403231 +-0.0754673 0.153642 0.0315487 +-0.0567915 0.158113 0.00751453 +-0.0733158 0.165215 -0.0409863 +-0.0878452 0.096803 0.00445868 +0.02849 0.120167 0.00308975 +-0.0866911 0.107697 0.0133542 +-0.0422556 0.127428 -0.00269381 +-0.0684868 0.135467 0.0467048 +-0.0187173 0.108826 -0.0212527 +-0.0109134 0.038586 0.0018115 +-0.0689089 0.106601 -0.012938 +0.00232768 0.0597693 -0.0328325 +-0.0759088 0.150426 0.0375079 +-0.0642836 0.175364 -0.0612207 +-0.0626162 0.142488 0.0376248 +-0.0388973 0.150052 -0.00339157 +0.0187974 0.0398349 -0.0187285 +0.0404333 0.0725805 0.0320798 +-0.0863763 0.0991625 0.0261078 +0.0544186 0.0725633 0.0195702 +-0.076294 0.155585 0.0106948 +-0.0611522 0.045903 0.0393286 +-0.0167746 0.0756989 -0.0389455 +-0.0578115 0.0619893 0.0271205 +-0.0127071 0.179586 -0.0289228 +-0.0568431 0.0926948 -0.0216401 +-0.0900812 0.150215 0.0221142 +0.0222403 0.0416489 -0.00972259 +-0.0504069 0.135839 0.0247969 +-0.0304966 0.0545819 0.0366047 +-0.0103146 0.180354 -0.0288775 +0.0320122 0.117952 0.0129635 +0.0440424 0.0496996 0.0318585 +0.0393181 0.0603877 -0.00577734 +-0.071953 0.16101 -0.0409434 +-0.0437665 0.168716 0.00196199 +-0.0498819 0.105595 -0.0195612 +0.0217639 0.0458254 -0.0188683 +-0.0921421 0.116123 0.0383102 +-0.0636791 0.157483 -0.0138656 +0.0266706 0.04428 -0.00700704 +0.0433132 0.0818321 0.0274518 +-0.0580456 0.0494852 0.00468232 +-0.0735836 0.159386 -0.00731186 +-0.0544231 0.0344532 0.039385 +-0.00150237 0.089761 0.0564112 +0.015933 0.126357 0.0269718 +-0.0425015 0.0719333 0.0422422 +-0.0589488 0.147198 -0.00200697 +-0.087209 0.0941073 0.00444199 +-0.0120214 0.178126 -0.0292101 +-0.0835465 0.101952 0.0288636 +0.041496 0.0555737 0.0320634 +-0.0025007 0.0675576 0.0566246 +-0.0756877 0.15767 -0.00739081 +-0.0105023 0.0829243 0.0578427 +-0.00627368 0.128136 0.0276028 +-0.0404708 0.109814 0.0374017 +-0.00378356 0.130498 0.0212315 +0.0580765 0.0566038 0.0222343 +-0.0853725 0.111782 0.0273822 +0.0428559 0.0972978 0.0221679 +0.00122739 0.121444 0.0362285 +-0.0274798 0.0446461 0.0507675 +-0.0304832 0.12104 0.0263992 +-0.0371379 0.127502 0.0150528 +-0.0778671 0.177131 -0.0494084 +-0.0775564 0.166657 -0.0379504 +-0.0605167 0.0386224 -0.00865968 +-0.0171147 0.161213 -0.00734926 +-0.0726687 0.161352 -0.00991102 +0.032766 0.0700345 0.0403232 +-0.0458559 0.10138 -0.0215412 +0.017353 0.0374009 0.0430484 +0.000357196 0.0347559 0.0401008 +-0.0604421 0.0427792 0.0246961 +-0.0440271 0.128143 0.0184429 +0.0423724 0.056151 -0.00596664 +0.00534844 0.0596161 -0.0309806 +0.0320447 0.061134 -0.0177676 +-0.00279591 0.0988433 -0.0266823 +0.0289846 0.0664902 -0.0199255 +0.000300027 0.0360761 0.019065 +-0.0250833 0.0379957 0.0175874 +0.0345167 0.0754586 -0.0157294 +0.0153241 0.0623295 -0.0291944 +-0.0609083 0.0612023 0.0236586 +-0.0698972 0.0655268 -0.00153079 +0.00337067 0.115645 -0.0185908 +-0.0315398 0.0589058 0.0377684 +-0.00748372 0.0488969 0.0502433 +-0.0877886 0.0861226 0.0174689 +0.0414464 0.101443 0.020163 +0.0252372 0.0926012 -0.0220221 +-0.0572172 0.0498044 0.00711465 +-0.0384957 0.0719179 0.0419735 +0.0143485 0.0552312 -0.0288146 +-0.0512659 0.0360808 0.0462964 +-0.0880011 0.0941555 0.00641769 +-0.0508873 0.109845 -0.0186279 +-0.0514991 0.112527 0.0359192 +-0.0338144 0.0342727 0.0263277 +-0.0615036 0.0804118 0.0430159 +-0.0663263 0.0606754 0.0176657 +-0.0909825 0.11607 0.0303184 +0.0184707 0.107054 0.0413783 +-0.0243398 0.183957 -0.0138554 +-0.0158705 0.161111 -0.00904539 +-0.0335094 0.0647262 0.0398847 +-0.0782927 0.098997 -0.00960155 +0.0486963 0.0730972 0.0159514 +-0.0478872 0.0335336 -0.00475407 +-0.0154917 0.0883884 0.056678 +-0.077344 0.119067 0.051823 +-0.0560293 0.0674866 0.0368481 +-0.0635813 0.138158 0.0379352 +-0.0217661 0.0670215 -0.0366181 +0.0483442 0.0575601 -0.00531363 +-0.0237817 0.0727523 -0.0377511 +0.0443603 0.0490341 -0.0052894 +-0.0604973 0.0904382 0.0452731 +-0.0627563 0.152415 -0.0301468 +-0.0714195 0.067071 -0.00151156 +-0.0861662 0.147397 0.00721409 +0.011631 0.0474937 0.0464252 +0.0254946 0.0406248 0.0343049 +0.035443 0.111045 0.0256623 +-0.000588677 0.037658 -0.0249499 +-0.0388448 0.0971399 -0.0223049 +-0.0660244 0.166553 -0.0262486 +-0.048499 0.0848032 0.0451307 +0.0371019 0.111384 0.0119604 +-0.00927598 0.177254 -0.0287785 +-0.0389846 0.1533 -0.00797514 +-0.0351198 0.0484277 -0.0173281 +-0.00353807 0.0389271 0.0301841 +0.0132013 0.0864568 -0.0307211 +-0.0390625 0.110364 -0.0188163 +0.033372 0.106071 0.0326127 +-0.0831505 0.0857608 0.0304017 +0.0552187 0.0635647 0.027041 +0.0399168 0.0999289 0.0271558 +-0.0579697 0.0339719 0.0233097 +-0.0137397 0.178677 -0.0217984 +-0.0203244 0.0385446 0.0306811 +0.00122549 0.0359125 0.00298025 +0.0117447 0.0343946 -0.0103375 +-0.0913959 0.132306 0.0102259 +-0.0429194 0.0898997 -0.0223492 +-0.0511515 0.0337361 -0.0129379 +-0.0750027 0.155319 0.00677634 +-0.0771027 0.0689891 0.00817725 +-0.0353224 0.0340121 0.0244595 +-0.0291276 0.0386567 -0.0130433 +0.0303577 0.105377 -0.0136057 +0.0235082 0.12516 0.0112114 +-0.00249775 0.0787967 0.0582683 +0.0533686 0.0732758 0.0102917 +-0.0586915 0.0472669 0.00864036 +0.0328626 0.0738919 -0.0178203 +-0.017795 0.038392 0.00241319 +-0.044502 0.0478297 0.0399289 +-0.0747378 0.0687745 0.000531905 +0.0172248 0.12732 0.0217261 +0.0428517 0.0885116 0.026874 +-0.078089 0.159705 -0.0229182 +-0.00858725 0.0362397 -0.025275 +-0.0867205 0.102198 0.00542391 +-0.0926774 0.131034 0.0232376 +0.0167938 0.128074 0.00445644 +0.0541315 0.0553714 0.0271399 +-0.000925431 0.131188 0.0179397 +0.0288719 0.121048 0.0132077 +-0.00849451 0.0965679 0.0534544 +0.0226575 0.102902 -0.0189538 +-0.0787984 0.113337 -0.0032043 +-0.0099585 0.1135 -0.0182227 +-0.0282274 0.162443 -0.0041123 +-0.082525 0.0896742 -0.00660526 +-0.0477053 0.0708612 -0.0154107 +-0.0435026 0.0465062 0.0407289 +0.00126756 0.0669175 -0.0339113 +-0.0341799 0.0335887 -0.0224091 +-0.0623664 0.0443972 0.0296888 +-0.0374964 0.0676867 0.0416821 +0.00859545 0.0382141 0.0296981 +0.0458872 0.0834155 0.0151706 +-0.0908205 0.132399 0.0292201 +-0.0191683 0.0336751 -0.0214022 +-0.0140554 0.126614 -0.00210251 +-0.0260065 0.0335246 -0.026366 +0.0324259 0.0399358 -0.00240332 +-0.0296544 0.0346993 -0.0301222 +-0.0669615 0.129698 -0.00899609 +-0.0471845 0.0383965 -0.0142868 +-0.0572808 0.0345537 0.0438127 +-0.0627957 0.153425 0.0330074 +-0.0515105 0.13416 -0.00180112 +-0.0434907 0.171345 -0.00503558 +-0.0677742 0.0808646 -0.0174732 +0.00350312 0.0441648 0.0458711 +0.0291321 0.0686302 0.0420784 +0.0132792 0.0343795 0.0214237 +-0.0866978 0.12169 0.0483599 +-0.00350013 0.0801522 0.057807 +0.0371657 0.0997172 -0.00981258 +-0.0447383 0.0738987 -0.0178782 +-0.0605228 0.155495 0.0235493 +-0.0362392 0.151744 -0.00510561 +0.0454797 0.0637982 0.0288243 +-0.0672083 0.0609402 0.0172424 +0.0241031 0.0782197 0.0489777 +0.0442629 0.0672699 0.000591455 +-0.0289948 0.0522303 -0.0223864 +-0.0645013 0.0774777 0.0413253 +0.0444938 0.0959562 0.00517859 +-0.00459579 0.039143 -0.025596 +0.0184671 0.0913654 0.0479185 +0.0146407 0.129582 0.00935921 +-0.0505573 0.0439128 0.0441317 +-0.0141262 0.119616 -0.0126879 +-0.0849191 0.117035 0.0482987 +0.0280536 0.119554 5.13011e-05 +-0.0247655 0.0712486 -0.0365856 +0.0034971 0.091096 0.055256 +-0.0641848 0.0432086 0.0316934 +-0.0881185 0.151555 0.0230923 +-0.0680885 0.16093 -0.05501 +0.0474345 0.0682488 0.00159582 +0.0111403 0.105858 -0.0199086 +-0.0369545 0.0349347 0.0427177 +-0.0604782 0.144516 -0.00363507 +-0.0394712 0.08608 0.0435352 +-0.0548214 0.143869 0.0295389 +-0.028506 0.107069 0.0398546 +0.0281659 0.121502 0.0158045 +-0.0797197 0.143117 -0.0027917 +-0.0616803 0.166235 -0.0555923 +-0.0204271 0.0893191 -0.0369723 +0.0361287 0.085855 -0.0169039 +-0.00251199 0.107268 0.0437857 +-0.0114962 0.0842854 0.0575311 +-0.0738001 0.0651206 0.00865838 +-0.0114808 0.0353662 -0.0177045 +0.0391473 0.0421646 0.0269754 +-0.0565891 0.129759 0.0374849 +-0.0720408 0.171996 -0.0342175 +-0.0139288 0.0883705 -0.0380287 +-0.0562656 0.0335637 0.0133743 +-0.0196985 0.0957936 -0.0295783 +-0.00486881 0.104509 -0.0228932 +-0.0550525 0.129598 -0.0055846 +-0.0584858 0.0776493 0.0431837 +-0.0898534 0.121302 0.00430136 +-0.0191218 0.165312 -0.0179178 +-0.0249563 0.0383168 0.00102848 +-0.0199274 0.0958752 0.0490354 +-0.0574825 0.113918 0.0359516 +-0.00850157 0.101663 0.0440465 +-0.0873724 0.124348 0.0475064 +0.00764213 0.03621 -0.0128239 +-0.0264494 0.0648769 0.0395324 +0.0541546 0.0547912 -0.000791322 +-0.0434926 0.0789866 0.0425224 +0.0241906 0.121901 0.0271611 +-0.0866809 0.0819772 0.0124969 +-0.0717212 0.0344863 0.00580157 +0.0302841 0.11623 -0.00325108 +-0.0737112 0.155478 -0.0269075 +-0.0424683 0.108486 0.0389261 +0.0176716 0.0658898 0.0500991 +0.0494857 0.064014 -0.00214923 +-0.0514961 0.0945888 0.044111 +0.0340749 0.0901032 -0.0173771 +-0.0719584 0.0942006 0.0415089 +-0.0544894 0.0594391 0.0238452 +-0.0877192 0.101 0.0223776 +-0.0758319 0.173116 -0.0385323 +-0.0114857 0.119632 0.0369891 +-0.0313874 0.0581183 -0.0163942 +-0.0157652 0.0728861 -0.0388826 +0.0167046 0.0945555 -0.0241181 +-0.000498244 0.0647983 0.0567029 +0.0256473 0.0420743 0.0363142 +-0.0630437 0.12273 0.0457647 +-0.0540131 0.144678 0.0264098 +0.0135054 0.10711 0.0421551 +-0.00428335 0.124198 -0.00969837 +0.0415325 0.0816649 -0.00777347 +-0.0392229 0.0337594 -0.0179786 +0.0593141 0.0691549 0.00914325 +-0.0219522 0.0382139 0.00717586 +0.0288925 0.112764 0.0331675 +-0.0524014 0.152599 0.0134601 +-0.0628726 0.147915 -0.0152353 +-0.030456 0.158107 0.0014598 +0.0308953 0.0400111 0.0272142 +-0.0757616 0.109947 0.0435791 +0.0253341 0.0591059 -0.0237971 +-0.0261555 0.155801 -0.00568703 +-0.0679463 0.128236 -0.00906158 +-0.0156387 0.0377596 -0.0169892 +-0.0757064 0.112028 0.0472849 +-0.0155135 0.0631057 0.0533345 +-0.0512066 0.125627 -0.00670494 +-0.0896222 0.111892 0.015334 +-0.0493777 0.160927 -0.00574679 +-0.0630274 0.166296 -0.040584 +0.058244 0.0580344 0.0225642 +0.0413547 0.102812 0.0011821 +-0.0162922 0.125122 0.0270033 +0.02338 0.0632213 0.0460213 +0.0609114 0.0623534 0.0131596 +-0.0691061 0.164802 -0.0173282 +-0.0870447 0.0977755 0.0254107 +-0.00849378 0.112803 0.0415796 +0.0145027 0.115416 0.0371643 +-0.0184257 0.066889 0.0526426 +-0.0448982 0.123992 0.0241166 +-0.050497 0.0903958 0.0446608 +-0.0315626 0.0348573 0.0456798 +-0.0684915 0.0902546 0.0428415 +-0.0180785 0.0337977 -0.021304 +0.0043349 0.0389929 -0.00853324 +-0.0830349 0.153941 0.0230111 +-0.0800798 0.103192 -0.0065999 +0.0437731 0.0973301 0.016155 +0.00944321 0.131132 0.0160037 +-0.0514165 0.0627417 0.0327301 +-0.0528926 0.154865 0.0118243 +0.0187407 0.0740964 0.0517477 +-0.0721682 0.0657282 0.00147121 +0.00959045 0.131031 0.00893055 +-0.0694847 0.181423 -0.0563964 +-0.0569551 0.11454 -0.0150747 +-0.0821005 0.0885236 0.0320901 +-0.0174725 0.0383553 0.00432532 +-0.00258809 0.0348892 -0.0237423 +0.0413648 0.0939401 0.0283252 +-0.00375638 0.13079 0.0183493 +-0.0686466 0.0719376 -0.0111307 +-0.0688202 0.180176 -0.0531787 +-0.0397209 0.0710215 -0.0169451 +0.0184831 0.105752 0.0426872 +0.00809551 0.112572 -0.0192987 +0.0206432 0.121117 -0.00652883 +-0.0718516 0.0979698 -0.0147575 +-0.0662716 0.170413 -0.0392349 +0.0237477 0.0605032 -0.0251433 +-0.0340875 0.177472 -0.00744261 +-0.0167857 0.0784752 -0.0385587 +-0.0565291 0.0373798 -0.0104777 +0.00297843 0.0341587 0.014086 +-0.0667756 0.124253 0.0509201 +-0.026364 0.0359692 -0.029405 +-0.0550408 0.0334649 -0.000671931 +-0.0697701 0.0874139 0.0423816 +0.0246944 0.0835826 0.0481083 +0.0199488 0.115322 0.0360728 +0.0383916 0.042968 -0.00337479 +-0.0365829 0.0335193 -0.0246869 +-0.0355007 0.112502 0.0349387 +-0.0689238 0.125301 -0.00884615 +0.0395927 0.0385536 0.0157178 +-0.0889313 0.0875027 0.0114635 +0.0448665 0.0945715 0.00517989 +-0.0477042 0.0664777 -0.0141832 +-0.0434727 0.125255 -0.0084227 +-0.0166904 0.169787 -0.0155577 +-0.0134983 0.0501789 0.0495792 +-0.0624968 0.0833205 0.0441176 +-0.0342132 0.0345231 0.0384015 +0.043295 0.084533 0.027498 +-0.0819819 0.112797 -0.000848269 +0.0121624 0.129948 0.0198557 +-0.0674677 0.10143 0.0408399 +-0.0626754 0.059895 0.0191264 +-0.0367892 0.0459324 0.0404864 +-0.027194 0.0764697 0.0455544 +-0.0824053 0.0748814 0.00852871 +-0.0656294 0.0642362 -0.0044412 +0.032725 0.116988 0.0160848 +-0.0764226 0.102162 0.0358668 +0.00148048 0.0952613 0.0542408 +0.0228866 0.122341 0.0280976 +-0.0584486 0.139576 0.0330542 +-0.0402835 0.123242 -0.0103332 +-0.012241 0.0406566 0.0504983 +-0.0489426 0.0614374 0.0351759 +-0.0844851 0.0778045 0.00951927 +-0.0369817 0.156591 0.00432745 +-0.0882804 0.103688 0.0163664 +-0.0258065 0.0825691 -0.0373737 +-0.0355052 0.102861 0.0407303 +-0.0524183 0.131115 0.0329855 +-0.0227031 0.175691 -0.0136597 +0.050697 0.0684106 0.00144017 +0.000504835 0.0911354 0.0558722 +0.00231832 0.0583343 -0.0324165 +-0.0148886 0.169807 -0.0164639 +-0.0722033 0.152534 -0.0417656 +-0.0134817 0.073078 0.0557755 +-0.0255231 0.109882 0.0391184 +-0.0655581 0.135384 0.0421104 +-0.024745 0.0698061 -0.0360534 +0.0559546 0.0524347 0.0227151 +-0.0283257 0.118773 -0.011655 +-0.0335185 0.0974234 0.0440535 +-0.0817699 0.0748179 0.0155353 +-0.027189 0.162441 -0.00437298 +-0.0267454 0.0711222 -0.0350441 +-0.03015 0.171175 -0.0170282 +-0.026605 0.06607 0.0397555 +-0.074698 0.179765 -0.0510072 +0.0143367 0.0504741 0.0468665 +-0.0594975 0.111137 0.0367915 +-0.0346758 0.127158 0.0144691 +-0.0465015 0.0847604 0.0446321 +0.00381747 0.0354686 0.0455691 +0.0172732 0.0792708 -0.0288683 +0.0323738 0.104756 0.0346971 +-0.0794458 0.0813481 -0.00752304 +-0.0312226 0.0367355 -0.0304453 +-0.0110616 0.168437 -0.0238044 +-0.0579369 0.119806 -0.0105246 +-0.0337394 0.0355643 0.0323212 +0.0312129 0.0525777 -0.012761 +-0.0346988 0.120729 -0.0096591 +-0.0388776 0.0364147 0.043017 +-0.0271127 0.16377 -0.0158754 +-0.0114338 0.0347606 0.0448027 +-0.0897559 0.114544 0.00631807 +0.0408171 0.04213 0.0255289 +-0.0648854 0.102482 -0.0170908 +-0.0137359 0.061178 0.0537969 +-0.00359581 0.130946 0.00835725 +0.0439346 0.0959403 0.0181595 +-0.0194977 0.104404 0.0429832 +-0.0691323 0.0776098 0.0394254 +-0.00248627 0.097432 -0.0292057 +0.00445885 0.0387258 0.0265895 +0.0492859 0.0567642 0.0307116 +-0.077476 0.164468 -0.0240677 +-0.0666867 0.175728 -0.049503 +-0.0251661 0.0664206 0.0424455 +-0.027701 0.0549269 0.0368456 +-0.018943 0.164042 -0.0169159 +-0.0435133 0.0846552 0.0431729 +-0.0888345 0.136443 0.0400961 +0.00149473 0.112812 0.0419217 +-0.0298299 0.09304 -0.0247313 +-0.0836967 0.0790161 0.00252063 +-0.000924151 0.039273 -0.0117161 +-0.0567677 0.0811908 -0.0210238 +-0.0934681 0.120116 0.0253121 +-0.0429479 0.170625 -0.000616016 +-0.075975 0.156283 -0.00563956 +-0.00861288 0.0384077 0.0151551 +-0.00160584 0.0434015 -0.0251635 +-0.00451637 0.113738 -0.0185133 +-0.0780673 0.0690482 0.0132523 +-0.0237986 0.0784163 -0.0381462 +0.0404558 0.0643575 0.0302495 +0.00150103 0.0576486 0.0543674 +-0.0314973 0.0746234 0.0406619 +-0.0430409 0.0337266 -0.000289053 +-0.0303409 0.0462461 0.0481864 +0.0215433 0.04083 0.0414017 +-0.0328294 0.0901297 -0.0245803 +-0.0654933 0.0370192 -0.00733845 +-0.0128512 0.129269 0.0078276 +-0.0102634 0.129467 0.00444971 +-0.0525768 0.0530264 -0.00686565 +0.0152424 0.0737083 -0.0300265 +-0.0523202 0.0474101 0.0149978 +-0.03228 0.059616 -0.0144015 +0.0262796 0.0733084 -0.0244949 +-0.091934 0.128302 0.0312437 +-0.0556539 0.153362 0.0267778 +0.00449629 0.118272 0.0381357 +-0.00902947 0.129018 0.00125187 +-0.00169837 0.0391357 -0.00987107 +0.0277845 0.0849076 0.045525 +-0.0241779 0.1712 -0.0197595 +0.0450874 0.0847681 0.0221666 +-0.0251342 0.0878826 0.0516343 +0.00641806 0.0347537 -0.00236123 +-0.0411191 0.111396 -0.0179091 +0.027653 0.0506012 0.0379885 +0.0219297 0.123716 0.0263137 +-0.0688294 0.148429 -0.0341374 +-0.0315292 0.124197 -0.00202254 +0.00150698 0.0801002 0.0571866 +-0.0615835 0.0366556 0.0444374 +-0.0481389 0.160609 -0.00688834 +-0.0254054 0.0766649 0.0494071 +-0.0774728 0.155537 -0.0149084 +-0.0401214 0.159176 -0.0112287 +0.0596647 0.0691741 0.016158 +-0.011487 0.110004 0.0424075 +-0.0381186 0.128235 0.00584498 +0.048576 0.0464424 0.0249843 +-0.0923754 0.118793 0.0312942 +-0.0639323 0.123848 -0.00887264 +-0.0798905 0.126603 -0.00582167 +-0.0413231 0.0462396 -0.0163116 +-0.0908165 0.145736 0.0263481 +0.0446156 0.0959646 0.00916087 +-0.0821218 0.075868 0.0188618 +0.05068 0.0673838 0.000483718 +-0.0501479 0.0515412 0.017644 +-0.00617289 0.130741 0.0117189 +-0.051836 0.0956238 -0.0221428 +-0.074878 0.122304 -0.00772392 +-0.00159817 0.0419657 -0.0250292 +-0.0474982 0.162268 0.00647513 +-0.0331161 0.0498057 0.0395103 +0.00234342 0.0510926 -0.0302041 +-0.0851404 0.125756 0.0494653 +-0.0699016 0.160977 -0.0489386 +-0.0798846 0.0706301 0.0125498 +-0.0697873 0.0819627 0.0411407 +-0.0547576 0.161266 0.00105716 +-0.0895055 0.0902528 0.0184453 +-0.0261075 0.162258 -0.0150297 +0.046501 0.0611194 0.0308227 +0.0238707 0.0929061 0.0469915 +-0.0533713 0.0334322 -0.00211203 +0.0417012 0.085878 -0.00880084 +0.0288139 0.110493 -0.0110929 +-0.083716 0.087071 0.0295098 +-0.0798758 0.155212 0.019678 +0.0049172 0.0339971 0.00916661 +0.0160048 0.0590435 0.0493667 +0.0573849 0.0699459 0.0206376 +0.0345802 0.103262 -0.0113359 +-0.0797481 0.0789376 0.0314228 +-0.0346581 0.0340056 0.0228095 +-0.0631272 0.0656833 0.0316274 +-0.0145321 0.0459268 0.0498594 +-0.0364091 0.0339112 -0.0194195 +0.0181222 0.116444 -0.0134944 +0.0341932 0.113962 0.0237708 +-0.0761778 0.148614 -0.0108668 +-0.0044937 0.0473352 0.0489501 +-0.0328741 0.0807299 -0.0285171 +-0.0724981 0.121807 0.0536688 +-0.0657234 0.153927 0.0319321 +-0.0548973 0.112625 -0.01673 +0.0464212 0.0764513 0.00819032 +0.0272261 0.0451183 -0.00768323 +-0.0629092 0.156144 0.021238 +-0.0631603 0.151216 -0.00238889 +-0.0347632 0.076687 -0.0214942 +-0.0906385 0.147509 0.0131579 +-0.0122779 0.122169 -0.00937841 +-0.0588974 0.156171 0.00210438 +-0.0123378 0.123047 -0.00831897 +-0.0496312 0.0590927 -0.0108209 +-0.0409256 0.153594 0.00561766 +-0.0405007 0.0860467 0.0431081 +0.0445131 0.0735224 0.0237705 +-0.0213844 0.123724 -0.0049697 +-0.0633941 0.159891 -0.0485891 +0.0364077 0.044553 -0.00488844 +-0.0739928 0.155924 0.011504 +-0.0111043 0.0366055 0.0502176 +0.03375 0.0929319 0.0401542 +-0.00645978 0.0918654 -0.0354548 +-0.0827096 0.131285 0.0511192 +-0.0835459 0.133987 0.0490485 +-0.0294951 0.0617035 0.0376524 +-0.0493817 0.138599 0.0163919 +-0.055623 0.120216 -0.0109924 +-0.00449347 0.121049 0.0367461 +-0.048904 0.144756 0.0084067 +0.00645901 0.0392685 0.0301228 +-0.0913214 0.114759 0.0373166 +-0.0265805 0.0377426 0.0157053 +-0.00572231 0.0669806 -0.0352658 +-0.0525421 0.050441 0.0296546 +0.0313831 0.11825 0.0184294 +-0.0288441 0.0958675 -0.0242091 +-0.0149484 0.177196 -0.0200335 +0.0230906 0.0973761 -0.0211755 +-0.0134888 0.11412 0.0398002 +-0.0652337 0.169622 -0.0599681 +-0.069106 0.161031 -0.0101008 +-0.0147444 0.0700214 -0.0382575 +0.000412578 0.0376462 -0.0248548 +-0.0694764 0.165214 -0.0509787 +-0.0817245 0.100671 0.0313188 +-0.0464909 0.0704463 0.0410366 +-0.0604958 0.0890419 0.0453253 +-0.0356646 0.155102 0.0026804 +0.0313895 0.0549645 0.0381834 +-0.0390844 0.149487 -0.000628748 +-0.0799141 0.109193 0.0343277 +-0.033406 0.159477 0.0024166 +0.0461298 0.0806288 0.00519237 +-0.00455042 0.0384226 0.0105194 +0.054633 0.0708998 0.00492223 +0.0466692 0.0754291 0.0122452 +-0.0510158 0.118895 -0.0136999 +0.0442088 0.0931449 0.0211603 +-0.026052 0.036748 0.0540507 +-0.0121151 0.0568039 0.0522997 +-0.0605217 0.0372227 -0.00906293 +-0.0505374 0.138563 0.00240881 +-0.0499851 0.135487 0.00142097 +0.0375229 0.0590309 0.0330268 +0.00350924 0.0842701 0.0573364 +0.0132839 0.0652538 -0.0302637 +-0.0742776 0.161639 -0.0118948 +-0.0507685 0.164108 -0.00292996 +-0.0198709 0.104468 -0.0228058 +0.0376047 0.0616532 -0.0107499 +-0.0773811 0.108845 0.0387481 +0.0226208 0.102094 0.0434114 +-0.0882171 0.135133 0.0423395 +-0.0506614 0.0515945 0.0196285 +-0.0603044 0.155837 0.0105687 +-0.0124866 0.11001 0.0423152 +0.02167 0.125998 0.00768374 +0.0323984 0.0396183 0.0260504 +-0.0709343 0.126767 -0.00893718 +-0.0135132 0.116917 0.0382221 +-0.0116656 0.051126 -0.0319435 +-0.0309822 0.125744 0.00553845 +0.0459345 0.0862193 0.0101703 +0.00749696 0.119642 0.0368719 +-0.00350244 0.107276 0.0438161 +-0.0521339 0.128852 -0.00413976 +-0.0786185 0.152695 0.0319953 +0.0163345 0.0781449 0.0535802 +0.0377538 0.0771288 -0.0117747 +-0.0215296 0.0387791 0.0338148 +-0.0350693 0.0384092 -0.00660408 +-0.0919891 0.124178 0.0422069 +-0.0444587 0.11222 -0.0167423 +-0.0171725 0.0985232 -0.0244048 +-0.057494 0.112512 0.0360215 +0.0396241 0.0900718 0.0328369 +-0.0621913 0.163125 -0.0405922 +-0.0255449 0.0384207 -0.00839698 +0.0162606 0.0736784 -0.0295549 +-0.0663455 0.040996 0.0121932 +-0.0292314 0.114996 -0.0157151 +0.0252254 0.095572 0.0454222 +0.00388853 0.130454 0.00153712 +-0.0454814 0.0335414 -0.0134702 +-0.08387 0.148679 0.0348187 +-0.0174749 0.184587 -0.0183292 +0.0188962 0.0370007 -0.0126843 +-0.0625159 0.163122 -0.0305925 +-0.0433987 0.03363 -0.0131325 +0.0291629 0.037982 0.025034 +0.0129127 0.129715 0.00445998 +0.0182606 0.0778122 -0.0281935 +-0.0476906 0.0356242 -0.0142735 +-0.0190478 0.0404047 0.0529202 +-0.00364871 0.0982082 -0.0280452 +-0.0195235 0.184467 -0.0220738 +0.00382729 0.106411 -0.0207174 +0.00350781 0.064793 0.0565955 +-0.0205171 0.0383642 -0.00178242 +0.0122268 0.0836141 -0.0306261 +-0.0444606 0.147723 0.0056898 +-0.0869664 0.148754 0.00824898 +-0.0689807 0.155012 0.0293114 +0.0302795 0.0795477 0.0438394 +-0.0660235 0.174935 -0.0492702 +-0.0804891 0.133061 0.0515278 +-0.0447252 0.109884 -0.0183457 +-0.0902839 0.137831 0.0151959 +-0.0702292 0.153353 0.0333614 +-0.0915979 0.146114 0.0211525 +-0.0905232 0.122929 0.0450175 +0.00448177 0.0951431 0.0532987 +-0.0234909 0.120747 0.0300444 +0.0274801 0.0445395 -0.0065618 +-0.091814 0.116108 0.0403567 +-0.0537253 0.151161 0.0246275 +-0.0205455 0.126353 0.00242085 +-0.00205946 0.129266 -0.00113907 +0.00252933 0.0758769 0.0564116 +0.00824452 0.129671 0.000311795 +-0.000397685 0.0923281 -0.0338988 +-0.0559448 0.126938 0.0384169 +-0.0428369 0.0942645 -0.0226678 +-0.0598806 0.105454 -0.017999 +-0.0837054 0.10067 -0.00361944 +-0.0545817 0.152467 0.0257328 +0.0103827 0.0365006 0.0297934 +-0.0898089 0.133793 0.0332137 +-0.0618767 0.15376 -0.0175826 +-0.0665983 0.155819 0.0112334 +-0.0454977 0.108441 0.0393231 +0.000688563 0.105475 -0.0216898 +0.0156183 0.0348875 0.0323047 +0.0598096 0.0622539 0.00613597 +0.0222628 0.0359732 0.0163557 +-0.0492522 0.165358 0.00274428 +-0.018422 0.0583296 0.0500808 +-0.0233794 0.126748 0.0127038 +-0.0635915 0.172518 -0.0506017 +0.000120368 0.0351316 0.0162576 +-0.0286059 0.0564269 -0.0233938 +0.0373643 0.110979 0.0106211 +-0.0143444 0.162546 -0.0104323 +0.0174821 0.10039 0.0467276 +0.00834248 0.0609508 -0.0305126 +-0.0650557 0.129761 0.0446036 +0.0584157 0.0647883 0.022872 +0.0450662 0.0889731 0.0191643 +-0.0554099 0.0334223 -0.00251784 +-0.00144558 0.106667 0.0437112 +-0.0626402 0.0627915 -0.00434322 +-0.0406608 0.0335117 -0.0254825 +-0.0621215 0.15372 -0.0285871 +-0.0304827 0.0538056 -0.016375 +0.0276877 0.0607373 -0.0218456 +-0.0332153 0.107417 -0.0197253 +-0.0709666 0.138448 -0.00754922 +-0.0554983 0.0973521 0.0432389 +0.0051585 0.127708 0.0288034 +-0.0497318 0.0354763 -0.0126201 +-0.0713898 0.160567 -0.00801414 +-0.0135985 0.108507 -0.0209218 +-0.0701499 0.0695315 0.0320822 +-0.0618453 0.155287 -0.0285878 +-0.0774937 0.145636 0.0432119 +-0.0499442 0.140127 0.0163925 +-0.0622517 0.147555 -0.00557481 +0.0112895 0.0624411 -0.0303571 +-0.054281 0.0573695 -0.00641449 +-0.0468263 0.128888 -6.3255e-05 +0.0167125 0.0343686 0.00192575 +0.025374 0.0938744 -0.0213667 +0.0374202 0.110869 0.0135214 +-0.0202897 0.0381028 0.016664 +0.0122214 0.13032 0.0170232 +-0.0424979 0.0817557 0.0420871 +0.0247834 0.123596 0.021665 +0.0458295 0.0890233 0.00817039 +-0.0246722 0.05361 -0.0281576 +-0.0368219 0.0900544 -0.0239252 +-0.0331266 0.0338175 0.0106794 +-0.0863242 0.111849 0.0243217 +-0.0881544 0.121251 0.000301062 +-0.0639205 0.112438 -0.0133308 +0.00114374 0.101639 -0.0226194 +0.0117494 0.0671858 0.0538619 +-0.0177987 0.0336176 -0.0248428 +0.0384483 0.10837 0.0201721 +-0.0895436 0.0902218 0.014448 +-0.0441053 0.129054 0.00361434 +-0.0447524 0.033564 -0.0207541 +-0.040486 0.0346908 0.0404235 +0.0158804 0.124131 -0.00578699 +-0.0301445 0.169695 -0.0171502 +-0.0906194 0.139243 0.0211829 +-0.0653253 0.142516 0.0407395 +-0.0320761 0.0447291 -0.0281131 +-0.0764158 0.0699842 0.0233785 +-0.0254497 0.052221 0.0403383 +0.0262523 0.076131 -0.0243472 +-0.0174971 0.101623 0.0437353 +0.00533357 0.055349 -0.0305496 +-0.0493266 0.134948 0.0237381 +0.0053984 0.122421 -0.0118951 +0.038604 0.108395 0.0191762 +-0.0638345 0.0431637 0.0378429 +-0.0748055 0.0863518 -0.0148055 +0.0157558 0.127182 0.025475 +0.0337414 0.0384723 -6.48206e-05 +-0.0564853 0.0791423 0.0441771 +0.0234983 0.102092 0.0429315 +-0.00524932 0.101176 -0.023207 +-0.0804177 0.153092 0.00488677 +-0.0764988 0.13725 0.0499203 +-0.0550791 0.134447 -0.00412579 +0.0139517 0.124505 -0.00617757 +-0.0839821 0.127994 -0.00381712 +-0.0571198 0.115445 0.0365816 +-0.0622396 0.155257 -0.0325976 +-0.0454972 0.0761548 0.042184 +0.0313815 0.0461664 -0.00629419 +-0.0438412 0.0942345 -0.0223045 +-0.0236613 0.0852675 0.0544729 +-0.0616609 0.147135 -0.00399772 +-0.0600825 0.0413306 0.0227014 +-0.0105535 0.180959 -0.0288535 +-0.0676833 0.155656 0.026832 +0.0282931 0.118599 0.0272385 +-0.0871972 0.102223 0.00642609 +0.0103624 0.0494805 -0.028102 +0.0154246 0.0685991 0.0521564 +-0.0416312 0.117641 -0.0144485 +-0.0276264 0.046347 -0.026964 +-0.0916136 0.132311 0.0112256 +0.0178346 0.0505132 0.0449253 +-0.0444935 0.155066 0.00750552 +-0.037487 0.115255 0.0329307 +-0.0185008 0.119534 0.0344711 +-0.052516 0.0452355 0.0436109 +-0.00977222 0.11683 -0.0157853 +-0.0558279 0.0635792 0.0314789 +-0.0607324 0.0592584 0.00571875 +-0.0621725 0.160005 -0.022587 +-0.0603904 0.152423 0.000272984 +-0.0697355 0.134074 0.048407 +-0.0688943 0.103764 -0.0141878 +-0.0871513 0.117629 0.0474896 +0.0463722 0.0764454 0.00719365 +0.0582269 0.0686747 0.0208601 +0.0410646 0.07659 0.0312229 +-0.0298717 0.104385 -0.0225787 +-0.0346365 0.0766699 -0.022492 +-0.0639324 0.147049 -0.0189093 +0.0414492 0.10286 0.0161642 +0.041276 0.104245 0.0131611 +-0.0550666 0.151635 -0.00215779 +-0.0723648 0.0763024 0.0368597 +-0.0166996 0.0540293 -0.0329391 +-0.0108856 0.107334 -0.0222671 +-0.0609787 0.126745 -0.00811044 +-0.0495024 0.109811 0.0380885 +-0.0814376 0.0978185 -0.00662583 +-0.0771326 0.163938 -0.0219397 +-0.0690818 0.18144 -0.0564572 +0.031034 0.0964814 -0.0161287 +0.0445032 0.0555996 0.0323503 +-0.0335401 0.0732865 0.0413362 +0.0315592 0.035603 0.0149292 +-0.0625155 0.0344693 0.0376364 +0.0223706 0.0505198 -0.0231651 +-0.051638 0.0663266 -0.0117848 +0.0132667 0.0519749 0.0488584 +-0.0568732 0.108333 -0.017952 +0.0448639 0.0833492 0.023175 +-0.0316705 0.0806285 -0.0315587 +-0.0714676 0.155482 0.0269686 +0.0118001 0.034659 0.0389456 +-0.0860496 0.128472 0.048867 +-0.0155071 0.175699 -0.0190868 +-0.058019 0.131103 -0.00658932 +0.0113955 0.0434069 -0.0246972 +0.0568205 0.0566796 0.0240006 +-0.0267763 0.0365192 0.0538225 +-0.0564971 0.0987696 0.0431638 +0.0353453 0.0835128 0.0388598 +-0.0602464 0.144668 -0.00329576 +-0.00749863 0.0884246 0.0571361 +-0.0816964 0.0734472 0.00653139 +0.0399806 0.105624 0.0191716 +-0.0676913 0.172275 -0.0570278 +-0.0358314 0.0356542 0.0457978 +0.0503129 0.0516868 -0.00299828 +-0.0414959 0.0705202 0.0419075 +0.0246022 0.0942401 0.0462765 +-0.0735775 0.170801 -0.0470392 +0.0373196 0.105416 -0.00382358 +0.0463401 0.0518943 -0.00540594 +0.0400167 0.0646852 -0.00776271 +-0.0597593 0.07671 -0.0185219 +-0.0237194 0.0639841 -0.033754 +-0.0473867 0.0345201 0.0356021 +0.00159304 0.131118 0.00454966 +-0.073925 0.126728 -0.0084362 +-0.0243269 0.0616478 -0.0324508 +0.0457562 0.0904226 0.00816981 +-0.0688748 0.159133 -0.00709894 +-0.0394914 0.0944889 0.0427101 +-0.0687998 0.0822684 -0.0173873 +-0.0455924 0.119193 -0.014062 +-0.0369476 0.033676 0.00641963 +-0.09079 0.1297 0.0392322 +-0.0389556 0.0350986 0.042208 +-0.0414578 0.107073 0.0393054 +-0.00265934 0.098112 -0.0279111 +-0.0331649 0.0652734 -0.0174782 +-0.0343312 0.0836736 -0.0246034 +0.0134882 0.101805 0.0472084 +-0.0594997 0.0846925 0.0439263 +-0.0423306 0.040657 -0.0232664 +0.0092124 0.114671 -0.0175632 +0.0538026 0.0595499 0.0284925 +-0.0256867 0.0380701 0.0246091 +-0.0693658 0.16286 -0.0130912 +0.0333604 0.037057 0.0194583 +0.00949693 0.121023 0.0358683 +0.0321446 0.0360609 0.0164637 +0.0341544 0.0548861 0.0351403 +-0.000334987 0.0965293 -0.0302242 +0.0585628 0.0673807 0.0213416 +-0.053406 0.12345 -0.00838645 +-0.0749578 0.132548 -0.00734349 +0.0282219 0.0816125 -0.0219304 +-0.0351889 0.171161 -0.0140358 +0.00949153 0.0936876 0.0522363 +-0.0157849 0.172748 -0.017746 +-0.0175848 0.169785 -0.0150947 +-0.0835905 0.112379 0.0452164 +-0.0404862 0.0846544 0.0431896 +0.0231358 0.0404562 0.0392455 +-0.00366205 0.0540631 -0.0322696 +0.00959837 0.0403395 0.0451906 +-0.0692421 0.0422187 0.00798097 +-0.0285258 0.0717501 0.0402231 +-0.00789542 0.108803 -0.0224197 +0.0159009 0.113257 -0.0160529 +-0.00149436 0.0620061 0.056412 +-0.0420891 0.0363826 -0.0272583 +-0.00449341 0.104477 0.0440393 +-0.0683512 0.0607717 0.0117847 +-0.0927055 0.120137 0.0415853 +-0.0484911 0.115278 0.0334198 +0.02514 0.0350088 0.0196342 +-0.065935 0.125307 -0.00885715 +-0.0621483 0.0699034 0.036962 +-0.0178695 0.104461 -0.0227631 +0.0351768 0.0563002 0.0348659 +0.0105044 0.115477 0.0381888 +-0.0938558 0.126876 0.0162567 +-0.0632514 0.033799 0.0117273 +-0.0736013 0.0654333 0.0137843 +-0.0577792 0.0341881 0.0284371 +-0.0763952 0.0838159 -0.0125906 +-0.0296632 0.180174 -0.00867233 +0.00819029 0.0851531 -0.0324575 +-0.071633 0.174549 -0.0412084 +-0.0538265 0.0927341 -0.0220469 +-0.0471905 0.156504 0.00887867 +-0.0661815 0.0615106 0.0205126 +0.0144985 0.107111 0.0421568 +-0.0721929 0.152802 0.0342528 +0.0142765 0.0666697 -0.0302658 +0.0349485 0.0942163 0.0384062 +-0.0664891 0.0369705 -0.00688594 +-0.077495 0.158339 -0.0149115 +-0.0739383 0.160975 -0.0103701 +-0.00971429 0.0386927 -0.0148008 +-0.0618555 0.155289 -0.0295874 +-0.0621574 0.152203 -0.016578 +-0.032494 0.096035 0.0446186 +0.044345 0.0519693 -0.00630996 +0.0319954 0.0520213 0.0354999 +-0.0300925 0.0509394 -0.0183595 +-0.018449 0.0388382 0.0343981 +-0.0670639 0.154762 0.000889218 +0.0361767 0.0888967 0.0383392 +0.0262873 0.0942382 0.0451936 +0.0186534 0.103359 0.0446898 +-0.0523328 0.0334686 -0.00741897 +0.0507066 0.0540083 0.0292331 +0.0529037 0.0462692 0.0142047 +-0.0888522 0.0996312 0.00941041 +0.0275656 0.0563642 0.0414619 +-0.0371627 0.0336289 -0.0286501 +-0.0198294 0.0882519 -0.0375379 +-0.0907603 0.140585 0.0151783 +-0.00458896 0.0376652 -0.0252351 +-0.093041 0.12831 0.0262642 +-0.0743429 0.0955133 0.0396401 +-0.089704 0.111925 0.0143387 +0.0453684 0.0889907 0.0151607 +0.0456444 0.086201 0.0151659 +-0.0635175 0.0399079 -0.00714576 +-0.0294925 0.0903536 0.0441109 +-0.0888771 0.100994 0.011394 +-0.0121064 0.0869584 -0.0384624 +0.0373352 0.108319 0.0251875 +-0.0882187 0.112165 0.0210064 +0.0349174 0.110993 0.0268865 +-0.0849268 0.122064 -0.00322109 +0.0124968 0.112648 0.0387734 +-0.0662562 0.163203 -0.0177078 +-0.0640701 0.113939 0.0406208 +-0.0654246 0.0794919 0.0421931 +-0.0519669 0.0569186 0.0284516 +-0.0519207 0.0493094 0.0353906 +0.00333114 0.0341656 0.00499397 +-0.056914 0.133942 0.035273 +-0.0780215 0.158305 -0.0199209 +0.0276406 0.111416 0.0348725 +-0.0172565 0.181572 -0.0253576 +0.0372544 0.0379189 0.00466817 +-0.0211197 0.1653 -0.017528 +-0.0557637 0.121264 0.0386516 +0.0274329 0.121878 0.0183804 +-0.0623369 0.16467 -0.04959 +0.00450432 0.0883672 0.0562441 +-0.0649333 0.145142 -0.016034 +-0.0918355 0.118761 0.0292947 +0.0503561 0.073461 0.0121181 +-0.0732571 0.0860546 0.040246 +-0.0543933 0.14384 0.0284354 +0.0235922 0.124679 0.00697037 +0.049638 0.0724241 0.0192263 +-0.0691135 0.0647604 0.0241382 +-0.0277318 0.0385796 0.0327127 +0.0249679 0.0605263 0.0447882 +0.0220764 0.0741142 0.049509 +-0.012493 0.16839 -0.0164935 +0.0220311 0.0550166 0.0457656 +-0.0197467 0.0364265 -0.0184459 +0.000577278 0.0388845 -0.0129362 +-0.0178004 0.121647 -0.00876548 +-0.0516521 0.0334655 -0.0091126 +0.0221612 0.0754835 0.0496518 +-0.0384539 0.162349 0.000413916 +-0.0711225 0.0388168 0.00193457 +0.0334725 0.0950337 -0.0145821 +-0.00505247 0.102417 0.0438081 +0.0159216 0.0348476 0.0287894 +0.0277666 0.0347822 0.00749516 +-0.0675802 0.144972 -0.0192338 +-0.0477088 0.132967 0.0228963 +-0.0134912 0.0386664 0.0301779 +-0.0590273 0.134027 -0.00648451 +0.0244484 0.124114 0.020115 +0.0218798 0.0374214 -0.00364164 +-0.0658775 0.102439 -0.0164403 +-0.0743971 0.166132 -0.0206985 +-0.0634619 0.0339766 0.015084 +-0.0497324 0.138579 0.00441928 +-0.00151689 0.0428507 0.0468014 +0.00660528 0.0935786 -0.0311099 +-0.0862444 0.0819176 0.00849345 +-0.0634827 0.0876134 0.0450541 +0.0182388 0.0763952 -0.028136 +-0.0765343 0.0681368 0.0143622 +-0.092883 0.116038 0.0143172 +0.000494981 0.0442085 0.0460563 +-0.0518518 0.0970732 -0.0222063 +-0.0248173 0.0693751 0.0448313 +-0.089421 0.135156 0.0282104 +-0.0566159 0.0573558 0.0107416 +0.0312695 0.0800594 -0.0199503 +-0.03437 0.0738393 -0.0214808 +0.0226051 0.113885 -0.0127298 +-0.0658838 0.16421 -0.0204509 +-0.0417953 0.0435116 -0.0223513 +-0.0710782 0.156778 -0.0439119 +0.00348525 0.108604 0.0422849 +-0.0239399 0.118058 -0.0129545 +-0.0498545 0.0999668 -0.0218887 +0.0176793 0.0852191 -0.0283526 +-0.0426623 0.0592741 -0.0122692 +-0.0642751 0.044386 -0.00129652 +-0.0456062 0.127883 0.0223049 +-0.0818286 0.147374 0.0384552 +0.0125066 0.10443 0.0450477 +-0.0763281 0.174543 -0.0415648 +-0.0144887 0.0387707 -0.00835843 +-0.00853122 0.0430617 0.0490142 +-0.0783677 0.176339 -0.0480853 +-0.0408918 0.109911 -0.0187996 +-0.0634329 0.159891 -0.0505847 +-0.0278615 0.0987172 -0.0237448 +0.0172353 0.0806842 -0.0288156 +-0.0768582 0.104852 -0.0089026 +0.0310274 0.118497 0.0197321 +0.0262422 0.122687 0.00652555 +-0.000524008 0.041433 0.0467891 +0.0292827 0.060879 -0.0197951 +0.00853553 0.0366751 -0.00931803 +-0.092315 0.125571 0.0312621 +-0.000472926 0.0972534 -0.0289903 +-0.0604964 0.0861621 0.0446513 +0.0117525 0.0432202 0.0447834 +-0.0738828 0.103582 -0.0116089 +-0.00249719 0.0488761 0.0505372 +-0.0307845 0.0580469 -0.0184096 +-0.00234994 0.125819 -0.00745455 +-0.0301636 0.153871 -0.00371356 +-0.0815418 0.0912589 0.0328461 +-0.0901131 0.132441 0.0382173 +0.037389 0.0476423 -0.00613109 +-0.0646684 0.155196 -0.0425404 +-0.0928057 0.124227 0.0372672 +-0.0297999 0.12434 0.000117203 +-0.032492 0.0746402 0.0409516 +-0.0555716 0.122697 0.0389476 +-0.0717789 0.154685 0.0298089 +-0.0930714 0.12018 0.0352857 +0.0144798 0.109585 -0.0180587 +0.00343169 0.0361267 -0.0240106 +-0.0288758 0.046967 -0.0262149 +-0.0616418 0.158426 -0.0235923 +0.0103202 0.0609665 -0.0299301 +-0.0910325 0.14477 0.0261671 +-0.083926 0.0775674 0.0187821 +-0.0575363 0.138153 0.0326058 +-0.0295 0.0703058 0.0395502 +-0.0217308 0.0626511 -0.0346671 +-0.0640717 0.164086 -0.0255357 +-0.063271 0.158522 -0.0165888 +0.0210264 0.0895934 -0.0248804 +-0.0731992 0.145774 -0.0148545 +-0.0334943 0.0803079 0.0415842 +-0.0862122 0.111364 0.0347412 +0.0338239 0.11087 -0.00547119 +-0.0135288 0.0458914 0.0493586 +-0.0643715 0.139866 -0.00735458 +-0.0568939 0.158351 0.00118769 +-0.0405106 0.151258 -0.00613685 +-0.00551608 0.110856 -0.0214408 +-0.0787639 0.0696569 0.0125705 +0.00378339 0.0381062 0.0251953 +-0.0650446 0.154908 -0.0437098 +-0.089228 0.114813 0.0276717 +-0.00277394 0.0797805 -0.0365537 +-0.0661523 0.136835 0.0429956 +-0.0434818 0.0902492 0.04268 +-0.0184702 0.0959697 0.0503933 +-0.0801387 0.142096 0.0454029 +-0.00485582 0.0989472 0.0508482 +-0.0336234 0.153659 0.000337049 +0.00250661 0.0924946 0.055168 +-0.0729484 0.132565 -0.00781242 +0.0194715 0.127423 0.0125674 +0.00484292 0.129473 0.025811 +-0.0576054 0.0658547 0.0344063 +-0.0502601 0.0543084 0.0166402 +-0.027407 0.0396009 0.0539527 +-0.0105297 0.0560622 0.0527517 +-0.0456126 0.0519231 -0.010201 +0.000501847 0.0590908 0.0549783 +-0.0569845 0.0535242 0.00365398 +-0.0671097 0.0432428 -0.000257978 +0.0214666 0.0975514 0.0465681 +-0.08997 0.132328 0.0399309 +-0.0761969 0.167972 -0.0410261 +0.0170202 0.121328 -0.0087569 +-0.0138948 0.17568 -0.0202542 +-0.0281655 0.17267 -0.018055 +-0.0638531 0.04136 -0.00615806 +-0.0348821 0.0342989 0.0153052 +-0.000342105 0.0380462 0.00257941 +-0.00749789 0.0898138 0.0570783 +0.028524 0.0808687 0.0448153 +-0.0331206 0.0356024 -0.0184705 +0.0043586 0.119499 -0.0147306 +0.0467625 0.0462832 0.0266316 +0.0368364 0.111573 0.0161776 +0.00851174 0.0799624 0.0552814 +-0.00244825 0.112634 -0.0193375 +-0.0235385 0.11268 0.0379979 +-0.0115345 0.0922826 -0.0359317 +-0.09304 0.122895 0.0392709 +-0.0271645 0.17563 -0.018169 +-0.0772929 0.117422 0.0514809 +0.0179164 0.102978 -0.02104 +-0.0709646 0.0754682 0.0373385 +0.0216627 0.126095 0.0176515 +-0.0640284 0.119984 0.047923 +-0.0444795 0.0874935 0.0436599 +-0.0893861 0.0943037 0.0204146 +-0.0720651 0.173384 -0.0385311 +-0.0894927 0.14204 0.0311659 +-0.0454987 0.120637 0.0275066 +-0.0250745 0.0954862 -0.0252675 +-0.0895496 0.13918 0.0132126 +0.0192289 0.0820148 -0.027672 +-0.0154803 0.0645289 0.0535158 +0.0164872 0.108442 0.0405002 +-0.00663864 0.115688 -0.0165748 +-0.0494985 0.104247 0.040228 +-0.0673252 0.149334 0.0390086 +0.0300883 0.0872505 -0.0203879 +-0.0278877 0.0633808 -0.0294488 +0.0182732 0.069417 -0.0291542 +0.0171905 0.116688 -0.0137466 +0.0502632 0.0713497 0.022405 +0.0350985 0.114043 0.00837763 +-0.0505103 0.0452467 0.0429196 +0.0302544 0.113856 0.0308506 +-0.0605348 0.0333568 -0.0034971 +-0.00390558 0.0383472 0.0143493 +0.0270583 0.122199 0.00683201 +-0.0241505 0.0378782 0.0124647 +-0.0606031 0.0352186 0.0442288 +-0.0906667 0.113308 0.0195238 +-0.00876475 0.075634 -0.0378123 +-0.0531345 0.0641573 0.0333061 +-0.0262078 0.123609 -0.00273748 +-0.0629032 0.154793 0.00389792 +0.00322165 0.0782734 -0.0348651 +-0.0232226 0.0950277 -0.0288098 +-0.0497962 0.0869626 -0.02172 +0.0239811 0.109404 -0.0139261 +-0.00287196 0.105931 -0.0223953 +0.00350624 0.0619975 0.0564502 +0.0152965 0.129062 0.00674245 +-0.0198254 0.120831 -0.00989132 +-0.0672111 0.0749069 0.0386416 +-0.0199192 0.0375867 0.0533971 +-0.0507132 0.054338 0.0146004 +0.0338375 0.109906 -0.00644408 +-0.052068 0.0531865 0.02764 +-0.0665349 0.0638845 0.0254353 +-0.0340904 0.160759 -0.0135462 +-0.0456409 0.0577841 -0.0117617 +0.0425336 0.0678584 0.0273676 +-0.0549188 0.148123 0.0275408 +0.0178543 0.0352284 0.0378786 +-0.0254848 0.100235 0.0442056 +-0.014497 0.0856418 0.0570702 +0.0151023 0.0860518 0.0518047 +-0.0616341 0.0628646 -0.00472902 +0.02366 0.0848996 0.0483924 +-0.0496187 0.054694 -0.00943972 +-0.0328776 0.105721 -0.0208169 +-0.0144506 0.103914 0.0432646 +-0.0248813 0.105869 -0.0225199 +0.024788 0.0591582 0.0445118 +-0.0159391 0.0999021 -0.023843 +-0.0539979 0.153168 0.0186815 +-0.0738816 0.120852 -0.00799698 +0.0296461 0.118491 0.000643936 +-0.0540045 0.13652 -0.00234857 +-0.0593798 0.0335176 0.00740926 +0.0366379 0.08347 0.0371909 +-0.0520867 0.151648 -0.00355308 +-0.0188227 0.0387965 0.0325596 +0.00898388 0.131012 0.0072855 +-0.0682589 0.154325 -0.0506473 +-0.0521805 0.0531921 0.0266366 +-0.0617514 0.175333 -0.0614739 +-0.0169338 0.185679 -0.0240586 +0.015477 0.103104 0.045929 +-0.0729148 0.0713134 0.0317175 +-0.0172476 0.114664 -0.0174436 +-0.0126734 0.0384579 0.00339052 +-0.0832791 0.0884633 0.0304387 +-0.0858155 0.103519 0.00339021 +-0.0146369 0.0466344 -0.0294365 +-0.0773163 0.098935 -0.0105842 +-0.0145015 0.0631456 0.0536787 +-0.0689178 0.0717538 0.0356819 +-0.0255986 0.0394109 -0.0291464 +-0.0623671 0.0719748 0.0386642 +-0.0301518 0.0360809 0.0236741 +-0.030565 0.0383245 0.0341404 +-0.0574984 0.0918591 0.045399 +-0.0861528 0.0951452 0.0274373 +-0.0644941 0.0412041 -0.00599039 +-0.0363521 0.126723 0.0183002 +0.00755707 0.10303 0.0452955 +-0.0396625 0.0399023 -0.0274567 +-0.0838382 0.11616 -0.00137187 +0.0166591 0.0349342 0.0324763 +-0.0647933 0.15319 -0.00116291 +0.00911841 0.110151 -0.0195223 +-0.0697747 0.155761 0.0260978 +0.045415 0.0763654 0.00219579 +-0.0127734 0.171309 -0.0186592 +0.00748545 0.0964088 0.0510363 +0.0125027 0.109886 0.0398286 +-0.0779306 0.0866645 -0.0115691 +-0.0830177 0.0951656 -0.00554205 +-0.0184064 0.186879 -0.0179354 +-0.0866419 0.0923952 0.0266005 +0.026251 0.103389 0.0398709 +0.0333357 0.116389 0.013468 +-0.0452756 0.131436 0.0105618 +-0.035474 0.0519266 0.0383228 +-0.0536233 0.0657097 0.0353836 +0.0013977 0.0433563 -0.0248502 +0.0269244 0.118903 0.0281816 +0.0395 0.055533 0.0316092 +-0.0723024 0.111428 0.0467445 +-0.0364387 0.0357946 -0.0155844 +-0.0276413 0.159598 0.000270855 +-0.00596208 0.0394 0.0364646 +-0.00479094 0.0798443 -0.0373862 +-0.00779065 0.130523 0.0125627 +-0.0464848 0.12067 0.0277891 +-0.0645002 0.0889975 0.0448988 +-0.0896121 0.0902414 0.0154476 +0.0130231 0.0965172 -0.0241956 +-0.0452605 0.0391077 0.0445023 +0.0587398 0.0709245 0.0152557 +-0.0596114 0.0726835 0.0404064 +0.0240499 0.0348797 0.0195293 +-0.0682817 0.156606 -0.0532672 +0.0178388 0.104825 -0.0190099 +-0.0288938 0.180785 -0.00982491 +0.0323759 0.0738626 -0.0187418 +0.0314474 0.112439 -0.00717966 +-0.074091 0.144362 -0.00888576 +0.0510178 0.0461394 0.00424124 +0.00750963 0.0646928 0.0554932 +-0.0643093 0.0665984 0.0323388 +0.0133515 0.0566849 -0.029233 +-0.0243216 0.10004 -0.0240037 +-0.00749239 0.096543 0.0535421 +-0.00533786 0.0388247 -0.000985585 +-0.0884258 0.0996766 0.0213895 +-0.0320326 0.0609937 -0.0164107 +0.0535495 0.0533436 -0.000784809 +0.0393899 0.0533602 -0.00667374 +-0.0717205 0.168577 -0.0240459 +-0.0704919 0.126012 0.052539 +-0.0388888 0.109926 -0.019043 +-0.0507025 0.140081 0.0193694 +-0.0263231 0.034658 0.0434735 +0.0398861 0.0766416 0.0330246 +-0.0941682 0.126929 0.0222624 +-0.0117712 0.0770642 -0.0382004 +-0.0417668 0.040639 -0.0243092 +-0.0517327 0.164109 0.00103678 +-0.0721705 0.158208 -0.0379206 +-0.0356893 0.0651361 -0.0144415 +-0.065143 0.156205 -0.00860924 +0.00354988 0.0342019 -0.0174252 +0.00312416 0.107287 -0.0203844 +-0.0340011 0.127005 0.00589371 +-0.0418419 0.09571 -0.0225712 +-0.0333161 0.126997 0.0105451 +-0.0717391 0.165925 -0.0182956 +0.0559734 0.0494153 0.0101945 +0.0174969 0.108466 0.0401752 +-0.0507291 0.133637 -0.00121966 +0.0083246 0.0581885 -0.03043 +-0.0711713 0.176467 -0.0550529 +0.0165931 0.100464 -0.0223776 +-0.0544905 0.0862124 0.0452239 +-0.0574075 0.0649991 0.0334306 +0.0195092 0.092819 -0.0242669 +-0.0856512 0.0899172 -0.000541045 +0.0081342 0.104445 -0.020865 +-0.0752567 0.160324 -0.0108988 +-0.0376087 0.118212 -0.0130418 +-0.055019 0.14719 -0.00165707 +-0.04909 0.0628007 0.0352845 +-0.018783 0.0770899 -0.0389016 +-0.0336421 0.175583 -0.0129563 +-0.082659 0.0871422 0.0312687 +-0.0621779 0.061949 0.0245023 +-0.0782836 0.162467 -0.0289415 +0.0339055 0.0599168 -0.014725 +-0.0414124 0.128336 0.00169512 +-0.0398827 0.035133 -0.0101165 +-0.00781609 0.0854881 -0.0377912 +0.0082433 0.13138 0.00986533 +-0.0358714 0.105673 -0.0204021 +0.00749975 0.0589567 0.0535286 +-0.072631 0.0670284 0.0231935 +0.0525192 0.0691267 0.0251103 +-0.0688901 0.0621533 0.0194032 +-0.0824666 0.11008 0.0383967 +-0.0438038 0.0884337 -0.0219011 +-0.00534725 0.0379464 -0.0151277 +-0.0425045 0.0478596 0.0401075 +0.0214753 0.11175 -0.0144217 +-0.000497779 0.0489051 0.0509033 +0.0236032 0.116718 -0.00979024 +-0.0648062 0.0852609 -0.0190538 +-0.0395435 0.101505 0.0409276 +0.0209425 0.124573 -0.000263497 +-0.0286807 0.0383267 -0.00339493 +-0.0585081 0.0422988 0.0170665 +-0.0316383 0.0367739 0.0511824 +-0.085482 0.104867 0.00337403 +-0.00926648 0.100073 0.0477845 +-0.00448593 0.118295 0.0389891 +-0.0377467 0.0768482 -0.0188928 +-0.0640837 0.156142 0.0179222 +-0.0515285 0.144709 0.0153879 +-0.0267903 0.0866521 -0.0358137 +-0.0626407 0.163129 -0.0295903 +-0.00752629 0.0443832 0.0481509 +-0.0750304 0.169881 -0.0295693 +-0.0907748 0.12133 0.00629364 +0.0164129 0.0417834 -0.0225068 +-0.0317772 0.169741 -0.00573949 +-0.0546238 0.0527377 0.0100793 +0.0453589 0.0561811 -0.00597324 +-0.0651505 0.0366918 0.0402161 +-0.032507 0.108409 0.0384637 +0.0185107 0.108486 0.0398481 +0.0450172 0.0749324 0.00120229 +0.00251449 0.0702821 0.0560425 +-0.0434424 0.160833 0.00573037 +0.056541 0.064854 0.0254614 +-0.0648306 0.156078 0.013307 +-0.00545884 0.111961 -0.020621 +-0.0222505 0.0336283 -0.0219672 +-0.0319114 0.16826 -0.00591385 +0.0045246 0.0828376 0.0569094 +-0.0849678 0.0844642 -0.00152644 +0.0277057 0.120723 0.00280565 +-0.0133613 0.182397 -0.0284169 +-0.0569294 0.13993 -0.00415472 +-0.0104844 0.118266 0.038122 +-0.0725121 0.144203 0.0447958 +-0.0661037 0.0713259 0.0366501 +-0.050851 0.138527 0.021367 +-0.0580927 0.0577897 0.0147789 +-0.0157117 0.033701 -0.0245127 +-0.00261732 0.0341102 -0.0185505 +-0.0614975 0.10975 0.0377559 +0.00661243 0.131425 0.00784474 +-0.0602206 0.142504 0.0358229 +0.0126673 0.104052 -0.020179 +-0.0624955 0.0904382 0.0452713 +0.0164839 0.0699861 0.0519409 +-0.0334933 0.0946149 0.0444857 +-0.0904058 0.114907 0.0416618 +-0.0182558 0.178619 -0.0243596 +-0.0436529 0.0346111 0.0345638 +-0.00297107 0.0340356 -0.0204416 +-0.0246065 0.0394112 -0.0290873 +-0.0257404 0.0712076 -0.0359148 +-0.0285156 0.0433359 0.0513164 +0.0262381 0.119658 0.0279158 +-0.0734823 0.0649094 0.0160661 +0.0249492 0.109234 -0.0137375 +-0.0651326 0.157423 -0.0100634 +-0.0578906 0.0600472 -0.00173427 +-0.0868853 0.0847213 0.0144753 +-0.0610173 0.135506 -0.00686914 +0.0547011 0.0728313 0.00929699 +0.00513733 0.104474 -0.0214038 +-0.0199542 0.180019 -0.0229778 +0.022195 0.0344915 0.00477409 +-0.0509846 0.123023 -0.00999375 +0.0173702 0.0506958 -0.0254566 +0.0327797 0.0727287 0.040356 +-0.0376189 0.0505906 -0.0108802 +-0.057408 0.0521648 0.00264452 +-0.0845698 0.111358 0.0279354 +0.045113 0.0861573 0.00219478 +-0.0694333 0.0348816 0.0112742 +-0.0621334 0.15599 0.0157191 +0.0379075 0.0398433 0.0233434 +-0.0695824 0.180796 -0.0534457 +0.00287682 0.0368053 -0.01432 +0.0592296 0.0635939 0.00512091 +-0.0326951 0.0680731 -0.0204474 +-0.017619 0.161286 -0.0140538 +-0.00121244 0.0358159 0.011737 +-0.0485025 0.167013 -0.00296472 +0.0139694 0.0974449 -0.0231882 +0.0336763 0.102539 -0.0125747 +-0.0769165 0.147253 -0.00586064 +-0.0894763 0.140666 0.0321759 +-0.079441 0.139988 0.0475582 +-0.019773 0.0742847 -0.0390372 +-0.066871 0.0626922 0.0228964 +-0.0473301 0.134807 0.0120125 +0.0244991 0.106997 0.0390493 +0.0296386 0.114736 0.0306143 +0.0275719 0.0433403 0.0342886 +-0.0524918 0.107066 0.0397432 +-0.0544973 0.0427375 0.0458563 +-0.0837407 0.129905 0.0507752 +0.0390362 0.108381 0.0141662 +0.0136873 0.0685864 0.0531495 +-0.0780988 0.162499 -0.0239377 +-0.0804325 0.078146 0.029561 +-0.0720693 0.0709772 0.0321852 +-0.036497 0.0903135 0.0436162 +-0.0157593 0.121529 -0.00864145 +-0.0640118 0.135519 -0.00771971 +-0.0096474 0.0481504 -0.030386 +-0.0889991 0.11248 0.0367803 +-0.0718704 0.117956 -0.00810673 +-0.00253303 0.110473 -0.0210263 +-0.0151271 0.118705 -0.0137294 +-0.0533766 0.126536 -0.00565695 +-0.050165 0.0501393 0.0176523 +-0.0617795 0.126914 0.0422805 +-0.0077906 0.079881 -0.0380243 +-0.0181903 0.172708 -0.0227977 +0.0362974 0.0657667 -0.0137187 +-0.0193672 0.122992 0.0288371 +0.0118921 0.127946 0.0270512 +-0.0528594 0.0344415 0.0327571 +-0.0440834 0.0344755 0.0328349 +0.00820576 0.0343954 0.0203732 +-0.0384853 0.0819001 0.0436414 +0.0279153 0.112797 -0.00956049 +-0.0233818 0.177171 -0.0128784 +0.00211138 0.110155 -0.0201605 +-0.0214231 0.0385184 -0.00765668 +-0.0590379 0.13549 -0.00623086 +-0.0654804 0.152163 -0.03833 +-0.0328363 0.0957996 -0.0235469 +-0.0574937 0.0333307 -0.00285911 +-0.0723124 0.154022 -0.038905 +-0.00125765 0.0383424 0.0470318 +0.022422 0.125761 0.0150782 +-0.0285891 0.0935252 -0.0252241 +-0.0395009 0.16971 0.00189803 +-0.0211973 0.0363196 0.0534993 +-0.0671438 0.037039 0.0145094 +-0.0455015 0.115241 0.0333765 +-0.0416597 0.057808 -0.0117566 +-0.0597745 0.0434652 0.0436848 +-0.0594246 0.0334838 0.00203125 +-0.0609255 0.122379 -0.00879585 +-0.0633414 0.0357702 0.0187502 +-0.0629834 0.0594485 0.00869517 +-0.0240199 0.0537379 0.0416895 +-0.0382462 0.044597 -0.024375 +-0.00732189 0.100225 -0.0241674 +-0.0425982 0.0463965 -0.0133084 +-0.0889045 0.133745 0.0416542 +0.00049898 0.0385943 0.0466363 +-0.0295864 0.0462965 0.0488628 +0.00439164 0.0448792 -0.025855 +-0.0608362 0.0341593 0.0278122 +-0.0547243 0.0723714 -0.0165135 +-0.0274694 0.155208 -0.00473974 +0.0246484 0.0713321 0.0461382 +0.0124372 0.0548875 0.0512192 +-0.00549842 0.0828666 0.0570203 +-0.0616148 0.0337181 0.0103501 +-0.0346312 0.0752701 -0.0214845 +-0.0629229 0.058915 0.0109817 +-0.0424386 0.147805 0.00141712 +-0.0363751 0.12414 0.0242241 +0.0176113 0.111464 -0.0161155 +-0.0314976 0.0603384 0.0380002 +-0.0138112 0.128252 0.0219818 +-0.0603076 0.0409502 -0.0078507 +-0.0735166 0.141431 0.0469479 +0.0326456 0.111384 0.0297678 +-0.0635438 0.0341847 -0.00786744 +0.02297 0.122414 -0.00191144 +0.0401375 0.0953636 -0.00688813 +-0.0141538 0.0965092 0.052175 +-0.00422659 0.0383846 0.0124357 +-0.0311024 0.0343581 0.019624 +-0.0780471 0.153854 0.029137 +-0.0581213 0.151582 -0.000807379 +-0.0267449 0.0725846 -0.0356647 +-0.0191918 0.174184 -0.0227992 +-0.00378536 0.0798194 -0.0370348 +-0.0249464 0.0349691 -0.0199992 +-0.0564664 0.0423189 0.0186897 +0.0266976 0.119444 -0.00271582 +-0.023525 0.0349287 -0.0283944 +-0.0800951 0.15261 0.00324045 +0.0268493 0.119915 0.0267269 +0.0354747 0.0390827 0.0235255 +-0.0127812 0.17424 -0.0204206 +-0.0338617 0.168258 -0.00349456 +-0.0144845 0.0744882 0.056153 +0.0261935 0.0402752 0.032238 +0.0102706 0.0681153 -0.0309054 +-0.00974239 0.0387292 0.0290909 +-0.0644512 0.125591 0.047275 +0.010367 0.0479585 -0.0270631 +-0.0246099 0.0984431 -0.024327 +-0.0476227 0.0370311 -0.0128189 +-0.0780422 0.0846436 0.0366002 +-0.0566171 0.135321 0.0339425 +-0.0556004 0.0505584 -0.00338763 +-0.0907186 0.136468 0.0172046 +-0.0245124 0.180278 -0.0098524 +0.00742535 0.0346722 0.0416328 +-0.0699342 0.0651273 0.0236486 +-0.0124071 0.172769 -0.0198823 +-0.041856 0.149196 0.00419837 +-0.0809107 0.103235 -0.00559799 +-0.0631328 0.0335051 0.0030611 +-0.00851461 0.0647289 0.0558918 +0.0154483 0.127759 0.0239281 +0.0255922 0.123349 0.0191129 +0.0138934 0.0631004 0.0516475 +0.00118569 0.0983354 -0.0261952 +-0.0325387 0.118791 -0.011658 +-0.000757843 0.0354065 0.0103826 +-0.0248998 0.158417 -0.0112592 +-0.035233 0.0374002 -0.014964 +-0.0541243 0.156074 -0.00260128 +-0.0584646 0.0588965 0.0024905 +-0.0615294 0.0333928 -0.00373148 +-0.0602915 0.0343294 0.0347628 +0.0265767 0.0994658 0.0420977 +0.0347214 0.0712416 -0.0157876 +-0.040399 0.128703 0.00942739 +0.00251855 0.096887 -0.0286022 +-0.076485 0.148385 0.0403892 +-0.0606115 0.155938 0.0148123 +0.010878 0.0806434 0.0544608 +0.0384784 0.105492 -0.00082855 +0.0438672 0.0916755 -0.00180444 +-0.0513529 0.0733082 0.0416893 +0.0451032 0.0777437 0.000209071 +-0.0817242 0.148679 0.0369003 +0.0461375 0.0834298 0.00718398 +-0.0514739 0.135214 -0.000924577 +-0.00531173 0.100039 -0.0239686 +-0.0176147 0.042187 -0.0278695 +0.00727636 0.114035 -0.0188609 +0.0268989 0.0632714 0.044083 +0.0102735 0.0924657 -0.0299319 +0.010651 0.121836 0.0349107 +0.00895558 0.0361581 -0.0106394 +-0.0905601 0.144393 0.0275534 +0.043756 0.0467626 0.0296361 +-0.0417806 0.126404 -0.00562318 +-0.0358424 0.095771 -0.0231986 +-0.0809037 0.153834 0.0267225 +-0.0777263 0.156926 -0.0159116 +0.00417967 0.034897 0.044357 +-0.0351879 0.125718 0.0201989 +-0.0284012 0.038721 -0.0148192 +-0.0351226 0.169652 -0.0145814 +-0.0203438 0.180146 -0.0154935 +0.0345359 0.11019 -0.00473263 +-0.0932568 0.121548 0.0382795 +-0.0334767 0.152548 -0.00159465 +-0.0271731 0.174192 -0.00959576 +0.0159989 0.11444 -0.0153318 +-0.054238 0.13299 -0.00459005 +0.0366798 0.105376 -0.00582172 +0.0386277 0.0672715 0.0346845 +-0.0227209 0.162682 -0.0153632 +-0.0760409 0.0677685 0.0130189 +0.00250507 0.0772798 0.0565792 +-0.0345053 0.101515 0.0417518 +-0.0546003 0.0541349 0.0100271 +-0.000643212 0.127926 -0.00376413 +0.00284904 0.131659 0.0150261 +-0.0184884 0.186846 -0.021092 +0.0335193 0.114014 -0.000843968 +0.00632048 0.123167 -0.0106939 +-0.0564752 0.0624455 0.0290854 +-0.0138322 0.105995 -0.0224296 +0.00423384 0.0754618 -0.0348642 +-0.0281096 0.0778495 0.0450018 +-0.0776289 0.158329 -0.0159141 +0.0148253 0.0447411 0.0439981 +-0.0859023 0.122521 -0.0027014 +-0.0578481 0.0940916 -0.0211113 +0.00150378 0.0842858 0.0575429 +0.0326379 0.0849202 0.042017 +-0.0549752 0.0499938 0.0105067 +-0.0568824 0.10976 -0.0175883 +-0.00970298 0.0627929 -0.0357349 +-0.0178968 0.163686 -0.0167578 +-0.074969 0.105672 0.0364824 +0.00650677 0.0702743 0.0558788 +0.00487604 0.0992462 -0.0230983 +0.042474 0.101514 0.0131646 +-0.0643723 0.0593574 0.0120942 +0.0593748 0.0580631 0.00716733 +-0.00149842 0.111423 0.0424113 +-0.00749339 0.119159 -0.0142858 +-0.0771313 0.0754374 0.0308061 +-0.0477996 0.0869772 -0.0218762 +0.014411 0.0833733 0.0525453 +-0.0202678 0.159643 -0.00488449 +-0.0159305 0.0950186 -0.0327431 +-0.0279294 0.0931359 -0.0265478 +-0.0855021 0.102147 0.00137916 +-0.0938092 0.125562 0.0252741 +-0.058744 0.140559 -0.00481674 +-0.031677 0.126244 0.00820251 +-0.0264922 0.0447022 0.0511549 +-0.0205862 0.0382221 0.00925741 +-0.053491 0.104292 0.0408761 +-0.0370674 0.156264 -0.0103696 +-0.0634966 0.109514 0.0378318 +-0.0867621 0.084687 0.0184803 +-0.0830364 0.104646 0.028271 +0.0442212 0.0804374 0.0252067 +-0.0448473 0.0339909 -0.0230279 +-0.0037539 0.0755488 -0.0365646 +-0.0661663 0.158028 -0.0551775 +-0.0238007 0.0741774 -0.0380398 +-0.018731 0.0627665 -0.0359648 +0.0446574 0.0720977 0.0012022 +-0.0927955 0.121487 0.0416389 +-0.0620012 0.1241 0.0437622 +0.0300963 0.0995295 0.0401727 +-0.0719316 0.149607 -0.0394232 +0.0355637 0.0889227 0.0392444 +0.0493081 0.0547033 -0.00484617 +-0.0668328 0.0604514 0.0106116 +0.00304719 0.123088 -0.0105402 +-0.0255191 0.118043 0.0319974 +-0.0394865 0.115305 0.0335817 +-0.0326614 0.0592947 -0.0125392 +0.0575508 0.0523393 0.00818574 +-0.0893959 0.0942918 0.0174254 +-0.0269084 0.160002 -0.0134029 +-0.0506856 0.0345547 0.0383582 +-0.0800885 0.0739226 0.0209531 +-0.0277305 0.073972 -0.0353872 +-0.0320496 0.0849187 -0.0285721 +-0.0217999 0.0866355 0.0553929 +-0.0322022 0.0465812 -0.0258568 +-0.0442317 0.12547 0.021384 +0.0214935 0.0781932 0.0504764 +-0.0444883 0.150664 0.00744383 +-0.0303843 0.0566029 -0.0193937 +-0.0723854 0.155427 -0.0359059 +-0.0245149 0.0811097 0.0540325 +0.0189031 0.068639 0.0501604 +-0.0650109 0.041163 0.0307556 +-0.0194954 0.107168 0.0420699 +-0.0325124 0.113906 0.0343195 +-0.0544418 0.118427 -0.0131672 +-0.0536811 0.113759 -0.0162997 +-0.0559476 0.153959 0.0252069 +-0.0675391 0.124252 0.0515729 +0.0440796 0.0450784 0.0271934 +-0.0594971 0.101543 0.0424741 +-0.0184988 0.100234 0.0438197 +0.0434554 0.0790039 -0.00377815 +0.0140981 0.0343905 -0.0079847 +-0.0615105 0.0406302 -0.00752326 +0.0320683 0.0578123 0.0392046 +0.0144666 0.0962642 0.0485999 +-0.0315047 0.0631978 0.0384961 +-0.0306251 0.038441 -0.00943325 +-0.0847861 0.0804507 0.00450965 +-0.0549519 0.160962 0.00433648 +-0.0470839 0.131413 0.00333034 +-0.00104546 0.0391448 0.0323048 +-0.0526926 0.151783 0.016281 +-0.0223808 0.0958588 0.045836 +-0.0841478 0.15365 0.0123539 +0.0536189 0.0735747 0.0133449 +-0.00350831 0.0975151 -0.0292875 +-0.0571277 0.155869 0.0117051 +0.00341369 0.131576 0.0166618 +-0.0237378 0.0654511 -0.0345337 +-0.0858145 0.0991904 0.0269676 +-0.0759199 0.0783227 -0.00959072 +0.032684 0.0640121 -0.0177767 +-0.056282 0.132113 -0.00567386 +0.00328959 0.131137 0.0194851 +0.00882643 0.110931 -0.0195298 +-0.00876485 0.1716 -0.0262973 +-0.0151483 0.0405525 0.0515137 +-0.0498071 0.0343093 0.00865348 +-0.0569766 0.0339283 0.0235563 +-0.0226683 0.0381298 0.00891697 +-0.0855438 0.106245 0.00446783 +0.0454924 0.0651146 0.027904 +0.0150017 0.0576648 0.0496654 +0.00644791 0.119491 -0.0147367 +-0.0156486 0.0481142 -0.0300898 +-0.0650134 0.13537 0.0410634 +0.0113952 0.116794 -0.0158535 +0.0173388 0.0781757 0.0532571 +0.0536226 0.0587546 -0.00269037 +-0.0709897 0.0340252 0.000991695 +0.038384 0.106978 0.0241932 +-0.0385431 0.038993 -0.0286239 +-0.0451337 0.127804 0.0210049 +-0.0690676 0.152436 0.0353067 +-0.0883368 0.137775 0.00920322 +-0.0714828 0.0362083 0.00943052 +-0.0717062 0.159603 -0.040933 +-0.0255949 0.125933 0.00752005 +-0.047874 0.0346487 0.0423594 +0.0367516 0.111162 0.00316661 +-0.00949217 0.110042 0.0428369 +-0.0572015 0.0336196 0.0184714 +0.0150246 0.0392642 0.0442415 +-0.00832489 0.0993422 -0.0252442 +-0.0304761 0.0342807 0.0180201 +-0.026997 0.0382812 -0.00486026 +-0.0916784 0.144722 0.0181573 +-0.0703317 0.172249 -0.0530308 +-0.0159101 0.1643 -0.0176565 +-0.0850976 0.106195 0.00337687 +-0.035284 0.173981 -0.0126295 +-0.032733 0.155408 -0.00943888 +0.00217615 0.12934 0.0262849 +0.00123579 0.075497 -0.0355058 +-0.0332024 0.0455956 -0.0269373 +-0.0155006 0.103015 0.0432792 +0.0396392 0.106988 0.00416547 +-0.021523 0.118151 0.0342827 +-0.0184974 0.103009 0.0434402 +-0.047784 0.038449 -0.0122332 +-0.0104903 0.0604984 0.0550813 +0.0293518 0.0659692 0.0423806 +0.0185572 0.0930309 -0.0244868 +0.0173756 0.109987 -0.0165543 +-0.0865489 0.109072 0.0153468 +0.0363255 0.10537 -0.00683316 +-0.0394998 0.076195 0.0426907 +-0.0603651 0.0470889 0.0366883 +-0.0144951 0.119623 0.0361429 +0.0406661 0.105634 0.0121644 +0.0383891 0.0460848 -0.00524865 +0.0295409 0.0942529 0.0428642 +0.0373159 0.0880544 -0.0152271 +-0.0784316 0.0799342 0.0337318 +-0.0548348 0.124111 0.0382711 +0.0178682 0.0672532 0.0504022 +-0.0788979 0.123682 -0.00614143 +-0.0298552 0.0986755 -0.0232224 +-0.0771653 0.156191 -0.0114635 +-0.0923833 0.130942 0.0122392 +-0.0651094 0.121429 0.0498115 +-0.042493 0.0690949 0.0416622 +0.0416337 0.0792551 0.0303335 +0.0189066 0.0808659 0.0520326 +-0.029145 0.125694 0.0135548 +-0.0619967 0.14761 -0.00462246 +0.0255017 0.0449453 0.0383425 +-0.0925798 0.11747 0.0343056 +-0.00233027 0.0339229 -0.0220991 +0.00799401 0.0819204 0.0555296 +-0.0699548 0.147947 -0.0321477 +0.0415131 0.0394077 0.00724875 +-0.0712173 0.0846981 0.0410753 +-0.0880447 0.0874003 0.00446864 +0.00798497 0.0890814 -0.0324293 +-0.0117258 0.0656807 -0.0365783 +-0.0114796 0.112753 0.0411508 +-0.0817304 0.107364 -0.00260486 +-0.0293156 0.0820403 0.0446588 +-0.0495645 0.0375773 -0.0119604 +-0.043838 0.0956679 -0.0221641 +-0.00869681 0.129559 0.00358698 +-0.0933816 0.129671 0.0222434 +-0.0700603 0.163804 -0.0489659 +-0.00755399 0.0384559 0.0207545 +0.0159604 0.125249 0.0284184 +-0.0514974 0.0791051 0.0438079 +-0.0840796 0.0818676 0.0264914 +0.037525 0.0785071 -0.0127982 +0.0299804 0.119686 0.0179058 +-0.0638039 0.0881523 -0.0190251 +-0.0272788 0.0350567 0.0515587 +-0.00562089 0.115673 -0.0165634 +-0.0104428 0.0347186 0.0450504 +-0.0427898 0.116428 -0.015168 +0.0165768 0.126998 0.000104849 +-0.0238911 0.0738255 0.0493988 +-0.0485539 0.0376116 -0.0123218 +-0.0396922 0.0460798 -0.021311 +-0.0485652 0.0335345 -0.00306359 +0.0414749 0.104231 0.00716597 +-0.0445241 0.0409237 -0.0192998 +-0.0220397 0.0354083 0.0523916 +-0.0380711 0.0340829 0.00944176 +0.0139247 0.0348347 0.0392218 +-0.0297288 0.0335868 -0.0252735 +-0.00107263 0.0385746 0.00195199 +0.0117524 0.0352863 0.00381322 +0.0170772 0.0847646 0.051153 +-0.0656775 0.067321 -0.00750664 +-0.00543271 0.0918052 -0.0353894 +0.0133691 0.0343357 -0.00620151 +0.0451372 0.0875619 0.0011816 +0.0503362 0.0703636 0.0239238 +-0.0474927 0.0804818 0.0437565 +-0.00542063 0.0391587 0.0349931 +0.00193935 0.03568 -0.0153447 +-0.0774115 0.160346 -0.0169397 +0.049877 0.0727457 0.00893584 +-0.0640788 0.0598458 0.0171155 +-0.00650105 0.0472142 0.0482843 +-0.0241121 0.163789 -0.0160029 +-0.0173263 0.0611887 0.051725 +0.0171559 0.100271 -0.022436 +-0.0604932 0.155795 0.0206537 +-0.0609595 0.142497 0.0365005 +-0.0668489 0.0966702 -0.0167929 +-0.0149394 0.183104 -0.021718 +-0.0321779 0.0750041 -0.0285287 +-0.0226305 0.0710127 0.0496427 +0.0463117 0.0820487 0.00917902 +-0.0795939 0.112319 0.0461682 +-0.0658419 0.0995396 -0.0165139 +-0.0810165 0.134048 0.0507919 +-0.0486855 0.131027 0.0278379 +-0.0788429 0.112725 -0.00283498 +-0.0784933 0.0832425 0.0356821 +-0.0258381 0.0781035 0.0498012 +0.0426426 0.0858997 0.0283401 +-0.0677549 0.154168 0.0312275 +-0.0306743 0.0383989 -0.00386137 +-0.0857757 0.0926386 -0.000557841 +-0.0210104 0.0417331 0.053591 +0.0161529 0.100264 -0.0224296 +0.0387814 0.0821002 0.0350599 +0.0484193 0.0639761 -0.00211304 +-0.0858985 0.111778 0.0253403 +-0.0389634 0.128304 0.0114309 +-0.0634823 0.0352819 -0.00824664 +0.0395163 0.0646366 -0.0087647 +-0.0591064 0.0435686 0.0148077 +0.00621882 0.12419 0.0335647 +-0.0171539 0.0347559 0.0453522 +-0.0314811 0.0546225 0.0370229 +-0.0182701 0.114743 -0.017523 +-0.0605388 0.141029 0.0353291 +-0.063605 0.126943 0.0449774 +-0.03749 0.0533987 0.0390423 +-0.0573191 0.0507885 0.00568774 +-0.0424884 0.109818 0.0380938 +-0.082569 0.0790202 0.0265184 +-0.0653913 0.0757553 0.0400472 +-0.0105137 0.0589924 0.0541839 +0.0198393 0.0700116 0.0497622 +-0.0814721 0.135361 0.0497671 +0.00809889 0.111578 -0.0196036 +-0.0276072 0.038217 0.0294729 +-0.0647783 0.173212 -0.0488362 +-0.0760415 0.0675654 0.00655947 +-0.0322855 0.0610195 -0.0154117 +-0.00948933 0.0674612 0.0553354 +-0.0922478 0.11733 0.00930597 +0.0325339 0.116751 0.00316678 +-0.0788837 0.117794 -0.00533035 +0.0177807 0.10571 -0.0179484 +-0.0648315 0.0895741 -0.0187043 +-0.0303114 0.0384164 -0.0075003 +-0.0728418 0.0685704 -0.00149472 +0.0396278 0.103602 -0.00160767 +-0.0575003 0.109781 0.0378101 +-0.0359224 0.034124 0.026018 +-0.0230844 0.126658 0.00843513 +-0.0904612 0.131068 0.0382266 +-0.0782718 0.165861 -0.029036 +0.0284552 0.0607955 -0.0208488 +-0.0495337 0.163976 0.00447865 +-0.0665318 0.134006 0.0442059 +-0.0622043 0.0590015 0.0092504 +0.0124693 0.0962821 0.0494059 +0.0199668 0.115907 -0.0129188 +-0.0101559 0.0386047 0.027311 +-0.0224495 0.0580629 0.0442448 +-0.0768471 0.09916 -0.0110394 +-0.0438495 0.0999429 -0.0214407 +-0.0642587 0.173261 -0.0500973 +-0.0291541 0.123106 -0.00418201 +-0.0785185 0.16527 -0.0289621 +-0.0773807 0.0774654 0.0325309 +0.0184997 0.0892768 0.0486726 +-0.0147168 0.0628748 -0.03682 +0.0133075 0.062355 -0.0296823 +0.0174899 0.111215 0.038757 +-0.0829923 0.130939 -0.00341376 +-0.0749763 0.152739 -0.0169005 +-0.00979029 0.0798633 -0.0379189 +-0.0243904 0.183518 -0.0110527 +0.0382626 0.0899111 -0.0131489 +0.0353274 0.107617 -0.00596632 +-0.0649093 0.06918 0.0352438 +0.0545625 0.0595427 0.0278248 +-0.0664402 0.128427 0.0478848 +0.0302544 0.035019 0.00964843 +-0.0212084 0.186026 -0.0155815 +-0.00559653 0.0391515 -0.0257085 +-0.00382316 0.0854518 -0.0372434 +0.0556932 0.0688929 0.00299188 +0.0435925 0.0958855 0.00119521 +-0.061875 0.156868 -0.0195857 +-0.0283944 0.174224 -0.00779385 +0.000326986 0.131385 0.00837406 +0.0583787 0.0621209 0.00318289 +0.0262357 0.0740751 0.0449841 +-0.0747322 0.0729443 0.0316828 +-0.0650821 0.148822 -0.0290175 +-0.0436469 0.0601588 0.0398932 +0.0443703 0.0410834 0.0161644 +-0.0674507 0.155183 -0.000720573 +-0.0165017 0.177176 -0.0187481 +0.0352588 0.0755049 -0.0148105 +0.00551455 0.110936 0.0415028 +0.0248664 0.0898261 -0.023121 +0.00550646 0.078617 0.0558754 +-0.0698407 0.127049 0.051763 +-0.0375072 0.123454 -0.00854988 +-0.052616 0.0657163 0.0355847 +-0.0748963 0.0690517 0.0244939 +0.023431 0.11936 -0.00662051 +-0.0185076 0.120924 0.0327413 +0.0394332 0.101324 0.027167 +-0.00864992 0.124983 -0.00848236 +-0.0872247 0.152479 0.0216964 +-0.0215688 0.0623472 0.0460467 +-0.0475797 0.035695 0.0449374 +-0.0510737 0.151654 -0.00393732 +-0.0415 0.0930514 0.0423592 +-0.0544965 0.100156 0.0427594 +0.049267 0.0717276 0.00605578 +0.0292141 0.0815364 -0.0209002 +-0.0052585 0.095242 -0.0329133 +0.0151527 0.129419 0.0109697 +-0.0294996 0.100187 0.0432585 +0.0363367 0.0432226 0.0290731 +0.0327757 0.035977 0.0148418 +0.00349523 0.0427434 0.0456833 +0.046121 0.0848311 0.00917504 +-0.067462 0.157723 -0.00658264 +-0.0876012 0.0995367 0.00546504 +-0.0356487 0.0352259 -0.0310792 +-0.0585981 0.0658974 0.0341563 +-0.0639239 0.116652 -0.0103062 +-0.0525394 0.0472909 -0.00733632 +-0.0398304 0.034299 0.0303636 +0.0252131 0.0803965 -0.024704 +-0.0721022 0.165224 -0.0439746 +-0.058758 0.148538 -0.00150368 +-0.0625812 0.150647 -0.00957658 +-0.0878641 0.137757 0.00720039 +0.0109534 0.0475021 0.0472035 +-0.0699012 0.105141 -0.0130553 +0.0318353 0.0540522 -0.0127622 +-0.0866591 0.107689 0.0123597 +0.0552547 0.0595292 0.0270628 +0.0320484 0.11465 0.0272407 +0.0433462 0.0818009 -0.00379375 +-0.0294668 0.176906 -0.0160057 +-0.0169961 0.094658 0.0531741 +-0.0202578 0.0596247 0.0476545 +-0.0798939 0.123658 -0.00558813 +0.0482025 0.0703533 0.0231278 +-0.0206189 0.186125 -0.0151754 +0.0100127 0.0349584 -0.0111996 +-0.0661914 0.152591 -0.0424622 +-0.0478408 0.098515 -0.0219326 +0.026913 0.0619271 0.0440949 +-0.0328507 0.126562 0.0151396 +-0.0689146 0.108019 -0.0123122 +-0.00583756 0.0390351 0.0332216 +-0.0125377 0.0365668 -0.017148 +-0.0373858 0.0446552 0.0411638 +-0.0759006 0.161818 -0.014334 +0.0304033 0.107421 -0.0117891 +-0.0654084 0.175187 -0.050486 +-0.0633716 0.143922 0.0382956 +0.0194957 0.0920261 0.0477827 +-0.0288404 0.0972702 -0.0238091 +-0.00475508 0.0741241 -0.036385 +-0.0104985 0.0362063 -0.0254961 +-0.0625516 0.147537 -0.0115723 +-0.0816708 0.0869142 -0.00660013 +-0.00823999 0.130343 0.0167173 +-0.0809733 0.130966 -0.00434035 +-0.0437659 0.0811743 -0.0201658 +0.00743904 0.129465 0.0253135 +-0.00451238 0.0760575 0.0586977 +0.0302883 0.103408 0.0369471 +-0.0379006 0.151906 -0.00621808 +-0.00550346 0.076042 0.0585145 +-0.0217032 0.0597401 -0.0334972 +-0.0868755 0.112781 0.0262639 +-0.0336701 0.155604 -0.00983793 +-0.0126927 0.0599517 -0.0357172 +-0.0638978 0.150075 -0.0288161 +-0.0144059 0.112046 -0.0186792 +-0.00421023 0.0383902 0.0178766 +-0.0453052 0.113634 -0.0162273 +0.0147972 0.102084 -0.0220848 +-0.0484999 0.105649 0.0400819 +0.0216294 0.0875507 0.0490393 +-0.0124184 0.175705 -0.0216387 +-0.0328373 0.163842 -0.00376818 +-0.0666614 0.0672261 -0.0064803 +-0.0395052 0.119385 0.0302298 +-0.0489243 0.0675117 0.0383488 +-0.0552807 0.0343936 0.0305403 +0.00553119 0.0603997 0.0554086 +-0.0914264 0.14884 0.0201323 +0.0231929 0.110938 -0.0135659 +-0.065154 0.164972 -0.0244937 +-0.050496 0.074792 0.0427038 +-0.0657515 0.154274 -0.0462128 +-0.0343486 0.0367995 -0.0305331 +-0.0826303 0.103323 0.0293175 +-0.0597443 0.0338929 0.0194732 +-0.0425056 0.0591222 0.0401769 +-0.0743438 0.156862 -0.0249223 +-0.00222977 0.0396912 0.0474006 +-0.00562206 0.0388337 0.0298422 +-0.0338556 0.0723894 -0.0214737 +-0.0635465 0.0333817 0.00128463 +-0.0330138 0.0356955 0.0305887 +-0.0730865 0.16659 -0.0202232 +-0.0570856 0.153101 -0.000954757 +0.0275543 0.0960379 -0.019637 +-0.0229677 0.169763 -0.0123298 +0.0217819 0.106251 -0.0165369 +-0.0575003 0.0630187 0.0298519 +-0.00864981 0.171144 -0.0247734 +-0.053919 0.0587242 -0.00741756 +-0.0595 0.105675 0.0404663 +0.0351077 0.0740897 -0.0147891 +-0.0620479 0.155306 -0.016587 +0.0278721 0.0522836 -0.0197543 +0.0325208 0.0469245 0.0310812 +-0.06629 0.139698 0.0427919 +-0.078132 0.172939 -0.0407193 +-0.0294988 0.0559628 0.0364214 +-0.0374897 0.0562507 0.0395531 +-0.0662219 0.155662 0.00991681 +-0.0408786 0.0346362 0.0386374 +-0.0208999 0.185581 -0.0139755 +-0.0330517 0.0624982 -0.0144201 +-0.0767419 0.164619 -0.0220172 +-0.0697905 0.0865423 -0.0170841 +-0.0784816 0.0755217 0.0287043 +0.0172033 0.118701 -0.0119316 +-0.0185134 0.0473863 0.05026 +0.00729554 0.0653986 -0.0323322 +-0.0415011 0.0506114 0.0394281 +-0.0541424 0.033642 0.0190888 +-0.0921005 0.132392 0.0222257 +-0.0136741 0.0384938 0.00315386 +-0.0383322 0.163825 0.00056966 +-0.0762889 0.0738479 0.0305832 +-0.0875285 0.133568 0.00229932 +-0.0736181 0.0688668 0.0266732 +0.02687 0.0981666 0.0425225 +-0.051308 0.153569 0.0116824 +4.86222e-05 0.11836 -0.0154829 +-0.0517937 0.0583908 0.0296448 +0.0605105 0.0595417 0.010156 +-0.0573945 0.0371513 -0.0102727 +0.00965733 0.0345667 0.0223294 +0.0463647 0.0703187 0.00350637 +-0.0625718 0.1468 0.0377209 +-0.089178 0.137924 0.0381661 +-0.0134956 0.0759117 0.0568004 +-0.00574286 0.0755721 -0.037104 +0.0261865 0.123233 0.0107875 +-0.0580499 0.11553 -0.0140963 +-0.00762589 0.0451743 -0.028662 +0.0535357 0.0635428 0.028124 +-0.0718987 0.123811 -0.00847645 +-0.0635357 0.119961 0.0469254 +0.00211859 0.130671 0.0219319 +0.00252859 0.0358017 0.021576 +0.0527591 0.0693467 0.00250314 +-0.0451218 0.0335948 -0.0116042 +-0.0769111 0.100434 -0.0105662 +0.0223237 0.0564658 -0.026195 +0.0394644 0.107011 0.0181712 +-0.0776021 0.0994637 0.0357144 +-0.0632381 0.170981 -0.0495819 +-0.00862433 0.122038 -0.0113292 +-0.0548269 0.0450002 0.0157095 +-0.0506815 0.134691 -0.000340536 +-0.0495888 0.146296 0.0105853 +-0.00908464 0.173025 -0.027717 +-0.00410488 0.0346022 0.0429088 +-0.0260906 0.0386266 -0.0124061 +0.0283176 0.118208 -0.00273298 +-0.0318098 0.121167 -0.00811427 +-0.0737276 0.154081 -0.027902 +0.0162665 0.119939 -0.0112703 +-0.0270805 0.0349584 0.0482667 +-0.0284917 0.101554 0.0428228 +-0.0249764 0.159657 -0.0011434 +-0.0585904 0.142433 0.0328417 +-0.0486888 0.138617 0.0104009 +-0.0234979 0.0724108 0.049066 +-0.019247 0.158526 -0.00845424 +-0.0716194 0.0382939 0.000706648 +-0.0412769 0.0356814 0.042879 +0.0483353 0.0532726 -0.00489034 +0.0606695 0.0664968 0.0121468 +-0.069489 0.104131 0.0386578 +0.00750734 0.0990008 0.0480837 +-0.0624532 0.126929 0.0430601 +-0.0629568 0.15367 -0.0336031 +-0.0374985 0.0747273 0.041938 +0.0426086 0.0930422 0.0261716 +-0.0849422 0.153595 0.0209155 +-0.0543959 0.12661 -0.00573734 +-0.0742502 0.161028 -0.0329547 +-0.0627767 0.112367 0.0371562 +-0.0532977 0.158553 0.00873827 +-0.0769168 0.123731 -0.00719316 +0.0393533 0.0847596 0.0341247 +-0.0692244 0.15634 0.0190049 +0.0343018 0.0936044 -0.01506 +-0.0165008 0.0800909 0.0572191 +-0.014166 0.184338 -0.0242563 +-0.0631574 0.159924 -0.0465929 +-0.0374857 0.0519831 0.0389557 +0.03646 0.112262 0.0117392 +-0.0411413 0.0364371 -0.0278037 +0.0185712 0.126949 0.0207922 +-0.0603223 0.0385556 0.0217181 +-0.0769591 0.131054 -0.00672048 +-0.0295123 0.0565107 -0.0214026 +0.0430875 0.0930739 0.0251589 +-0.00582403 0.0390405 -0.0106025 +-0.0553855 0.0337802 0.0222515 +0.014479 0.100435 0.047468 +-0.0548752 0.0984577 -0.0213117 +-0.0501571 0.0529434 0.0176286 +0.0183573 0.0461568 -0.0227219 +-0.0554809 0.0440191 0.0450323 +-0.0877934 0.0860475 0.0044818 +0.00321463 0.130705 0.0223233 +-0.0505315 0.0389504 -0.011562 +-0.0819835 0.132406 -0.00340088 +-0.0758067 0.0877331 -0.0139103 +-0.091338 0.14476 0.0251578 +-0.0649682 0.034557 0.0300942 +-0.0283013 0.113756 -0.016413 +0.0259713 0.0619044 0.0444933 +-0.0535159 0.0640852 0.0330775 +-0.0046427 0.0482096 -0.0303136 +-0.0584956 0.0861498 0.0443498 +-0.0655423 0.145055 -0.0169033 +-0.0423586 0.123855 0.0235885 +-0.0864234 0.0806346 0.0145003 +-0.033107 0.125984 0.00180258 +0.000400525 0.0433705 -0.0249688 +-0.0337351 0.126905 0.0148106 +0.0594437 0.0677773 0.0191638 +-0.0433018 0.0342732 -0.0267127 +-0.0668634 0.040937 0.011312 +-0.0651408 0.146773 0.0392721 +0.0142259 0.080787 -0.0303234 +-0.0564981 0.0973554 0.0431547 +0.0234826 0.113521 -0.012343 +-0.022737 0.0385766 -0.00982941 +-0.0695434 0.0352232 -0.00418951 +0.060768 0.0651161 0.0111484 +-0.00338536 0.100168 0.0483773 +-0.0154942 0.0772732 0.0564359 +-0.0581438 0.114319 -0.0148345 +-0.0758612 0.165153 -0.0370257 +-0.0666041 0.164889 -0.0207192 +-0.0401309 0.160681 -0.0117333 +-0.00727995 0.0389199 -0.00704692 +-0.0726288 0.07489 0.035733 +0.0572537 0.0657957 0.00220085 +-0.0564793 0.151056 0.0307055 +-0.0459743 0.153608 0.00885524 +-0.046245 0.034596 0.0410145 +-0.0611658 0.168359 -0.0606871 +-0.0242347 0.0401682 0.0541848 +0.0432765 0.10012 0.00816425 +0.0330202 0.102118 0.0356213 +-0.00368236 0.0583856 -0.0334327 +-0.016783 0.0973001 -0.0271368 +0.018711 0.100467 -0.0223545 +-0.0500289 0.122604 0.03284 +-0.063243 0.0333437 -0.00222576 +-0.0187202 0.0613304 -0.0355606 +-0.0268504 0.0548324 -0.0264063 +0.0215374 0.086463 -0.0256391 +-0.0138967 0.099791 -0.0237429 +-0.00550708 0.0774167 0.0583085 +0.055466 0.0507517 0.00421414 +0.00822806 0.0344179 0.00390084 +0.028423 0.0535254 0.0391477 +-0.00689074 0.103109 -0.0232386 +-0.0320031 0.0370471 -0.0177181 +-0.0255422 0.0377889 0.0158759 +-0.0476682 0.165409 0.0039929 +-0.0673807 0.115762 0.049991 +0.00348136 0.111402 0.0420175 +-0.081586 0.0734778 0.0135382 +0.0427229 0.10007 0.00318201 +-0.0456223 0.0548403 -0.0108081 +-0.0226179 0.0464363 -0.0275647 +-0.0201905 0.172698 -0.0217858 +0.0374948 0.0941477 0.0350502 +0.0227469 0.0686119 0.0468992 +-0.012216 0.174205 -0.0276647 +-0.0906322 0.112714 0.0163744 +-0.0599044 0.111127 -0.0158584 +0.00535116 0.0480874 -0.0284111 +-0.0295604 0.158116 0.000994125 +0.0104513 0.122961 -0.0105071 +-0.0619452 0.123832 -0.00870252 +0.00605345 0.0341614 0.00369541 +-0.0696099 0.138316 0.0468524 +0.00349102 0.11963 0.0373483 +-0.0495577 0.0338416 0.0269497 +-0.0500211 0.0529295 0.0155558 +-0.0534917 0.0491191 0.0286591 +0.0546976 0.0478581 0.0131951 +-0.0803392 0.0841108 -0.00756769 +-0.0693719 0.180628 -0.057909 +-0.0247145 0.161052 -0.00252569 +0.0299408 0.0713176 0.0415086 +-0.0779905 0.173544 -0.0470087 +-0.0168218 0.086916 -0.0386596 +-0.0658968 0.109505 -0.0131657 +0.0326969 0.10609 0.0333845 +0.0191388 0.0356129 -0.00667825 +-0.0168818 0.100112 -0.0240537 +-0.0620293 0.135502 -0.00717407 +0.0377405 0.110012 0.0179226 +0.0360001 0.0381146 0.00239588 +-0.0151683 0.160834 -0.010917 +-0.0894324 0.117571 0.0455052 +0.0402874 0.063301 -0.00576463 +0.000231956 0.0755133 -0.0357459 +-0.0663652 0.0422587 0.0107808 +-0.0908359 0.114163 0.0368153 +0.0456753 0.0833922 0.00418733 +-0.0426429 0.0563425 -0.0115708 +-0.0472127 0.168412 -0.001987 +0.0163989 0.0433061 -0.0232691 +-0.0181224 0.165314 -0.018178 +0.014203 0.08785 -0.0301032 +0.00716038 0.0832586 0.0561062 +0.0547452 0.0661481 0.0263648 +0.0207672 0.0700064 0.0493524 +-0.0820552 0.1102 0.0401793 +0.0336664 0.0753805 -0.0167583 +-0.0827158 0.108829 0.000295564 +0.0250546 0.0420912 0.0376641 +-0.0866523 0.0868042 0.0239447 +-0.082018 0.151309 0.00327526 +0.0209029 0.107601 -0.0159886 +-0.0134952 0.0659366 0.0537869 +-0.0902062 0.143054 0.0286714 +0.0484774 0.0431365 0.00824398 +0.00679595 0.0352467 -0.0139815 +0.0154 0.0448131 -0.0240573 +-0.0715189 0.0972122 0.0409969 +0.0152962 0.0652155 -0.0297912 +0.0106046 0.128135 -0.0020835 +0.0273536 0.106086 0.0379553 +-0.0176729 0.0540415 -0.0325983 +-0.00110521 0.131378 0.0121444 +-0.0724827 0.124619 0.0532114 +-0.0738593 0.174047 -0.0391959 +-0.0646169 0.109762 0.0377795 +0.00521659 0.0824462 -0.0340286 +-0.0280135 0.0591603 -0.0264206 +-0.0676617 0.0433934 0.000689977 +0.0407264 0.0999947 0.0251764 +-0.0322885 0.177691 -0.00536129 +-0.0547546 0.035972 0.0465789 +-0.0425002 0.115266 0.0336474 +-0.0687451 0.0708436 0.0347552 +-0.0375019 0.0804666 0.0432825 +-0.0182946 0.181579 -0.0243778 +-0.0789826 0.115456 0.0491224 +-0.0415063 0.0534301 0.0394734 +-0.0708913 0.0403263 0.00282802 +-0.0548298 0.0927311 -0.0220321 +-0.0745142 0.138634 0.0488155 +-0.0807745 0.102028 0.0317433 +-0.0249646 0.181509 -0.0170525 +-0.0727415 0.154031 -0.0358995 +-0.0698172 0.0908437 -0.0164973 +-0.0366476 0.0577363 -0.0111372 +-0.0192308 0.0947234 -0.0324688 +-0.0118669 0.165326 -0.0197278 +-0.0804375 0.137229 0.0490949 +0.0134351 0.129972 0.01319 +0.0457654 0.0791979 0.00319646 +-0.0469166 0.129554 0.0250362 +-0.0581769 0.137607 -0.00562722 +0.04256 0.0817421 -0.00578018 +-0.0478101 0.0884245 -0.0219224 +-0.0424147 0.0344885 0.0314161 +-0.0645764 0.139638 0.0400104 +0.00451352 0.10035 0.0463879 +0.0423459 0.0915624 -0.00580854 +-0.0833163 0.106091 -0.000625527 +-0.0510681 0.0429687 0.0449412 +-0.0258019 0.0564099 0.0391373 +-0.0908661 0.142018 0.0261694 +-0.0222707 0.180155 -0.0129798 +-0.0375032 0.0987213 0.042382 +-0.0135516 0.0445689 0.0502862 +-0.0749157 0.0818909 0.0378096 +-0.042351 0.0336287 -0.0184783 +-0.0104895 0.0660607 0.0552117 +-0.0713722 0.163817 -0.0449613 +-0.0170629 0.040485 0.0522671 +-0.0629502 0.151043 -0.0063137 +-0.0420636 0.159404 0.00394669 +-0.0438717 0.105649 -0.0205239 +0.00352724 0.10161 0.0446753 +-0.00861199 0.118019 -0.01506 +-0.0658335 0.0881117 -0.0184537 +0.00251222 0.126485 0.0307749 +-0.0485567 0.0390246 -0.0119389 +-0.0600846 0.0399274 0.0217122 +0.0128427 0.034706 0.0391137 +-0.0306178 0.0409006 -0.0300462 +-0.0635449 0.0356868 -0.00823988 +-0.0063607 0.125295 -0.00886018 +-0.025376 0.059259 0.0400414 +0.0015066 0.0490028 0.0513272 +-0.0107915 0.0798668 -0.0380291 +0.0455381 0.0540654 0.0323771 +-0.0645999 0.0347243 0.0265296 +-0.074389 0.0874223 0.0399149 +0.0147945 0.0909396 -0.0283095 +-0.0256418 0.0382997 -0.00275652 +-0.0249427 0.17123 -0.0116584 +-0.0860007 0.147303 0.0341634 +-0.00989368 0.129282 0.00314288 +-0.056803 0.119986 -0.0107265 +0.0131837 0.129339 0.0031365 +0.0204173 0.0925165 -0.0239466 +-0.0881399 0.122604 0.000302573 +-0.0687931 0.166618 -0.053004 +-0.0116307 0.0337076 -0.023716 +-0.0395047 0.0776369 0.0429957 +-0.0435015 0.086056 0.04322 +0.0313221 0.0899509 -0.0192278 +-0.0512591 0.0544504 0.0206222 +0.0450165 0.0718833 0.00186291 +-0.0240342 0.0381218 0.00683415 +-0.0643335 0.153058 -0.000307605 +-0.0553413 0.0491317 -0.00437815 +0.0461434 0.0834347 0.0111711 +0.0469552 0.0427274 0.0188429 +0.0403147 0.061632 0.0300225 +-0.0345217 0.127119 0.00425139 +-0.0560415 0.0335011 -0.000906542 +0.0458803 0.0848141 0.013166 +0.0355169 0.0713149 -0.0148173 +-0.00649249 0.0978569 0.0522238 +-0.0720202 0.152598 -0.0428872 +0.00936768 0.0509673 -0.0289075 +-0.017803 0.0813337 -0.0391893 +-0.0164921 0.101629 0.0439544 +-0.0749763 0.136928 -0.00646616 +-0.018438 0.165372 -0.011068 +-0.0749694 0.0749712 0.0333987 +-0.0344916 0.0547205 0.0381399 +-0.0252176 0.0351344 0.0519405 +-0.0785113 0.10447 -0.00758869 +-0.0837382 0.0804711 0.0245022 +0.0352492 0.043109 0.0289456 +-0.0657408 0.0353871 0.0379044 +-0.0633722 0.04322 0.0387983 +0.0187703 0.0504962 0.0444745 +0.0134519 0.128957 0.00181284 +0.00181742 0.106617 -0.0209271 +-0.069971 0.156225 0.0143836 +-0.0793623 0.0739499 0.024599 +0.0192573 0.0903239 -0.0256184 +-0.0785673 0.0716608 0.0214639 +0.0207235 0.123161 0.0287274 +-0.0694864 0.116115 0.0518347 +-0.022007 0.0754165 0.0531212 +0.00541958 0.0361021 -0.0235849 +0.0126937 0.0345417 0.0229719 +-0.0272554 0.0377383 0.0173779 +0.0183414 0.126234 0.023568 +-0.0782171 0.159705 -0.021925 +0.0319954 0.11684 0.00152318 +-0.0364949 0.0747255 0.0419725 +-0.00631217 0.0422986 0.0485312 +-0.0696892 0.0733745 -0.0120577 +-0.0574743 0.0452883 0.0435332 +0.0270163 0.115378 0.0322111 +0.0100342 0.126121 -0.00591235 +-0.0765631 0.160404 -0.0136187 +0.0104935 0.0976882 0.0488434 +-0.088546 0.102334 0.0113879 +-0.0488628 0.0600536 0.0351294 +-0.0102645 0.038442 0.0220215 +-0.0471272 0.159118 -0.00765489 +0.0282711 0.0480264 -0.0137299 +0.0106928 0.0341923 -0.0160349 +-0.0413207 0.122297 -0.0113384 +-0.0112299 0.173502 -0.0278641 +-0.0702692 0.146349 -0.0238997 +-0.0311686 0.0820079 -0.0315681 +-0.058698 0.0349789 0.0448461 +0.0225489 0.0444802 -0.0157666 +0.00650352 0.0547197 0.0529464 +0.0375985 0.10834 0.0241868 +0.026474 0.110098 0.0367031 +0.0104332 0.0344417 -0.0125223 +-0.00834994 0.0943471 -0.0340215 +-0.0726673 0.155437 -0.0339106 +-0.0830075 0.0762889 0.0105229 +-0.0846192 0.0805533 0.0214764 +-0.0805239 0.148418 0.0381727 +-0.087237 0.106355 0.0143591 +-0.0447805 0.0423866 -0.0153071 +-0.0837301 0.147364 0.00414541 +-0.0832136 0.0770175 0.0194025 +-0.0259181 0.0649186 0.0404266 +0.0449079 0.0931824 0.0151569 +0.0348585 0.0808647 0.0399076 +-0.000497657 0.066177 0.0565989 +-0.081976 0.138997 -0.000769762 +-0.0164973 0.088378 0.056467 +-0.0655061 0.041163 -0.00538315 +0.0250139 0.0449606 -0.012685 +-0.0684343 0.0667749 -0.00454154 +0.0313723 0.0597573 -0.0175925 +-0.073748 0.0805288 0.0380979 +-0.0431166 0.0378307 0.0441123 +-0.0704863 0.169511 -0.0510127 +-0.0418064 0.0884466 -0.0220226 +-0.0725566 0.0737794 0.034925 +-0.0432285 0.12305 0.0247373 +0.0537086 0.0670896 0.000808459 +-0.0318715 0.0510682 0.0382665 +0.00533718 0.124533 0.0332195 +-0.0234982 0.0988724 0.0447778 +-0.0873895 0.143261 0.0370491 +0.0450408 0.0625178 -0.00265494 +-0.0618764 0.138649 -0.0067701 +-0.0637266 0.174609 -0.0527846 +-0.0739864 0.158247 -0.0289285 +-0.0616651 0.174109 -0.0575903 +-0.0346424 0.0780819 -0.0225024 +-0.0310543 0.0337173 -0.0219116 +-0.0769455 0.154831 -0.00883158 +-0.0339952 0.0752026 -0.0244888 +0.0354333 0.111001 -0.000827134 +-0.0790203 0.0935614 -0.0105962 +-0.0879913 0.136375 0.00520661 +-0.0582272 0.048399 0.00675942 +-0.00714757 0.130278 0.00704353 +0.0114556 0.0340617 0.001148 +0.0458421 0.0876102 0.0101629 +0.00312017 0.129984 5.00643e-07 +-0.0376568 0.0591992 -0.0116433 +0.00923557 0.129984 0.00166977 +-0.0579608 0.139021 -0.00516612 +-0.0909934 0.148856 0.0221303 +-0.0611919 0.0341824 0.0259657 +-0.0917869 0.115969 0.00931507 +0.00445187 0.116712 -0.0177471 +0.00711096 0.111601 -0.019782 +-0.00341693 0.115827 -0.0167447 +0.0411288 0.0792971 0.0313687 +-0.0358185 0.0337288 -0.0209957 +-0.0304972 0.0703216 0.0396594 +-0.076218 0.0887607 0.0388797 +-0.0701244 0.0632147 0.00385793 +0.0432229 0.0888059 -0.00480108 +-0.0321931 0.123411 -0.0044713 +0.0221624 0.0959197 -0.0219723 +0.0234605 0.0367801 -0.00165856 +-0.0234711 0.183379 -0.010712 +-0.0461137 0.0368295 -0.0192985 +0.023814 0.119372 0.031074 +-0.0617151 0.0722545 -0.0157777 +-0.0697425 0.164473 -0.0161193 +-0.0700395 0.077854 0.0390736 +-0.0793237 0.108591 -0.00458021 +-0.0622625 0.155951 0.0127725 +-0.0579896 0.126711 -0.00710506 +-0.0819874 0.0788394 -0.00151395 +-0.051802 0.111349 -0.0178923 +-0.0548009 0.0547174 0.00969263 +0.0456361 0.0819814 0.00319705 +-0.0362696 0.0447516 0.0428152 +-0.0678285 0.156225 0.0151421 +-0.0441012 0.15765 -0.00916962 +-0.0698712 0.102299 -0.0142744 +-0.0434973 0.0719505 0.0423325 +-0.0385101 0.124563 -0.00772445 +-0.0720478 0.154003 -0.0409023 +-0.0415192 0.155101 0.00654483 +0.030443 0.0496674 -0.00974777 +0.0100263 0.0352289 0.0272451 +-0.0657931 0.0349145 0.0296068 +-0.00453349 0.0975685 -0.029357 +-0.0575464 0.0576229 0.00774375 +-0.0675655 0.156308 0.0210392 +-0.0625478 0.177823 -0.0603383 +-0.0164994 0.107189 0.0421238 +-0.0628199 0.164682 -0.0345962 +-0.0725695 0.162422 -0.0399552 +-0.0295698 0.0377598 0.0258888 +-0.0285577 0.048864 -0.0238529 +-0.051128 0.0487627 0.0151791 +0.0297172 0.11319 -0.0079908 +-0.0129858 0.0389757 -0.0119758 +-0.0519687 0.0514416 0.0131188 +0.00659366 0.0345497 0.005308 +0.0431201 0.0959054 0.0231686 +0.0426395 0.101487 0.00716583 +-0.0326038 0.039499 -0.0302708 +-0.022273 0.0879769 0.0544159 +-0.0501719 0.132485 0.029178 +-0.0104724 0.123683 0.0330383 +0.0158783 0.103153 -0.0212298 +-0.0380583 0.0406922 0.0433465 +-0.05672 0.0341106 -0.0113244 +0.00284082 0.0994342 -0.0233056 +-0.00189869 0.037664 0.017192 +0.00849573 0.122392 0.0350922 +-0.0911887 0.13375 0.0222165 +0.0145889 0.124413 0.0307966 +0.0365837 0.0686678 0.0370221 +0.00534141 0.0341316 0.016402 +-0.0652159 0.16242 -0.0585196 +-0.0708983 0.120893 -0.00865195 +-0.0790974 0.103427 0.0328545 +-0.0233223 0.0386973 -0.0137829 +-0.0870669 0.0909973 0.0256595 +-0.0237781 0.0389651 0.0367703 +-0.0314981 0.107032 0.0395669 +-0.0488684 0.125064 -0.00815774 +0.0188255 0.104686 -0.0188612 +-0.0214383 0.162534 -0.00657802 +-0.0923673 0.124202 0.041188 +-0.0116952 0.0383509 0.0145738 +-0.0933085 0.117399 0.0213072 +0.00147085 0.0388322 0.0258794 +0.041327 0.0986069 0.0251647 +-0.063339 0.160302 -0.0538579 +0.0235731 0.114695 -0.0116124 +-0.0828981 0.101969 0.02963 +-0.0616452 0.139553 0.0354433 +-0.0343725 0.0357923 0.047703 +-0.0451209 0.0377458 0.0446873 +-0.0920088 0.118668 0.00830639 +-0.0495672 0.135498 0.00241956 +-0.0603606 0.0633645 0.0289482 +-0.067238 0.175347 -0.0588701 +0.053058 0.0705565 0.0234346 +0.0380671 0.0821074 0.0357563 +-0.0797544 0.0720045 0.0191472 +-0.0844521 0.153452 0.0225801 +-0.0749035 0.113464 -0.00617122 +-0.0384926 0.0605846 0.0409778 +-0.075255 0.0832856 0.0380964 +-0.0198342 0.0855003 -0.0383524 +-0.0649244 0.113824 -0.0119395 +0.0421 0.0690665 -0.00478535 +-0.0615968 0.0595411 0.0052883 +0.0357976 0.0378059 0.0192762 +-0.0314223 0.0343059 -0.0206653 +-0.0805979 0.0786983 -0.00455339 +-0.0516467 0.0481272 0.0388737 +-0.0325014 0.0618008 0.0386259 +0.0188656 0.11384 -0.0146811 +0.0360105 0.106014 0.0293761 +-0.0489136 0.125469 0.0310273 +-0.0702125 0.173659 -0.0540385 +0.0100557 0.112263 -0.0189498 +-0.0643724 0.0341771 0.0147182 +-0.023212 0.165344 -0.00918469 +0.059734 0.0692161 0.0111359 +0.0164747 0.104398 0.044527 +-0.0870127 0.10633 0.011369 +0.030786 0.0765476 -0.0208061 +-0.0657333 0.121445 0.0506733 +-0.00450341 0.0703715 0.0573471 +-0.0525943 0.0544911 -0.00726112 +-0.0226202 0.181624 -0.0117104 +0.00179227 0.0340095 -0.0213712 +-0.0768516 0.103431 -0.00952853 +-0.0773369 0.105608 0.0341784 +-0.0364954 0.0987325 0.0427313 +-0.0532526 0.161216 -0.00188451 +-0.0658747 0.0981197 -0.0167177 +-0.00202406 0.126832 0.0305449 +0.0396296 0.0392572 0.0187428 +0.0114981 0.0658063 0.0534716 +-0.0660116 0.154522 0.0303582 +0.0322049 0.0871235 -0.0192744 +-0.0161934 0.116736 -0.0156361 +-0.00805531 0.101876 -0.0238922 +-0.0425065 0.0548487 0.0395533 +-0.0623557 0.152158 -0.0235797 +-0.0550956 0.0333795 -0.00606735 +0.0194036 0.123725 -0.00335403 +0.0149002 0.0348014 0.0340409 +-0.0174953 0.112701 0.0395679 +-0.0824727 0.0992304 -0.00559052 +-0.0428553 0.101381 -0.0214106 +-0.0291214 0.0621103 -0.0254198 +-0.0530392 0.146248 0.021397 +-0.0658806 0.040185 0.0344505 +0.0298766 0.0889056 0.0433386 +0.0206783 0.0361727 0.0176735 +-0.029331 0.0791866 0.0433726 +-0.0474654 0.135069 0.0155888 +-0.0798447 0.116298 -0.00419638 +0.0278259 0.115624 -0.00659973 +-0.0400692 0.157713 -0.010751 +-0.087695 0.0860952 0.016472 +0.0119148 0.0630446 0.0522963 +-0.0586388 0.0367329 -0.00984378 +-0.0545581 0.0628278 0.0306388 +-0.0904983 0.133768 0.0272133 +0.0424823 0.0958192 -0.00180898 +-0.085893 0.115781 0.0473131 +-0.0827739 0.0762807 0.0135216 +-0.0783317 0.109572 0.0415234 +-0.0535658 0.132546 0.0330634 +-0.0901834 0.114057 0.0406088 +0.0134074 0.0463149 -0.0249889 +0.0112253 0.0952809 -0.0268838 +0.0150227 0.080777 0.0534508 +-0.0278391 0.168266 -0.00883037 +-0.0698489 0.175309 -0.0448893 +-0.0895811 0.137877 0.0241855 +-0.0790004 0.100402 -0.00859092 +-0.062851 0.116991 0.0425454 +0.0239206 0.0352552 0.0228022 +-0.000501715 0.0634055 0.0567322 +0.046037 0.0806318 0.0171753 +-0.0766672 0.154399 0.00327135 +-0.0117177 0.129576 0.0183624 +-0.0885031 0.148521 0.0281728 +-0.0728479 0.14776 0.0416103 +-0.015205 0.175685 -0.0260892 +-0.082938 0.100617 -0.00458659 +0.0398543 0.102779 0.025179 +-0.0336965 0.120802 0.028215 +-0.0625742 0.17727 -0.0581696 +-0.00806953 0.0988363 -0.0267114 +-0.0560752 0.0602595 -0.0044615 +0.0597447 0.0594744 0.0191904 +-0.0106444 0.0481591 -0.0303544 +0.00351281 0.081445 0.056735 +-0.0672464 0.173921 -0.0582812 +0.00251634 0.0459065 0.0480561 +0.000471055 0.038278 0.000679374 +-0.0002129 0.122901 -0.0103152 +-0.0382613 0.0393263 0.043596 +0.00848754 0.0426921 0.0451471 +-0.0482154 0.137103 0.0123981 +-0.015727 0.0657542 -0.0377517 +-0.0282054 0.0676114 -0.0305119 +-0.0306807 0.0363386 -0.0186663 +-0.0476849 0.119711 0.0291692 +-0.0663764 0.12565 0.049733 +-0.0488788 0.134867 0.0224297 +-0.0877229 0.0888584 0.0234132 +-0.0756171 0.172473 -0.0369846 +-0.033348 0.0384446 -0.00813352 +-0.0442894 0.126542 0.0198398 +0.0235131 0.101506 -0.0194672 +0.0538716 0.0661448 0.0268494 +-0.073604 0.148628 -0.0255988 +-0.0671901 0.0335697 -0.00322908 +-0.0886344 0.0949473 0.0228281 +-0.0761608 0.175035 -0.0499961 +0.0306065 0.111866 -0.00856301 +-0.0317456 0.124703 -0.000629789 +-0.0904268 0.150188 0.0141369 +-0.0639022 0.10675 -0.0154602 +-0.0541798 0.157923 -0.00210942 +-0.00323215 0.0940338 -0.0336602 +-0.0164901 0.115444 0.0380258 +0.053298 0.0648217 0.0277585 +-0.0843615 0.0993477 -0.00259153 +-0.00674006 0.0712942 -0.0362643 +-0.0653258 0.140047 -0.00770568 +-0.00635478 0.123294 -0.010702 +-0.055158 0.0361639 -0.0112393 +0.00412979 0.113096 -0.0199676 +-0.064574 0.0418551 0.0316967 +0.0525746 0.0462075 0.0162071 +-0.0234833 0.0448815 0.0530288 +-0.071322 0.138326 0.0479203 +0.0425401 0.0986672 0.000167984 +0.0273648 0.102724 -0.0167839 +0.0332874 0.111381 0.0289227 +-0.0537039 0.0594504 0.0244709 +-0.0227345 0.0390118 0.0369431 +-0.00354236 0.0429091 0.0474905 +-0.0724136 0.156792 -0.00114359 +-0.00249623 0.0689511 0.056733 +-0.0482461 0.131793 0.0256765 +-0.0515081 0.0490357 0.0376444 +-0.0944953 0.125552 0.0212653 +0.00638447 0.0346255 0.0414585 +0.0141724 0.0940368 0.0505038 +-0.0688973 0.120914 -0.00896239 +-0.0520364 0.14934 0.0173988 +0.00422853 0.0810435 -0.0341743 +-0.0515685 0.0473635 -0.00788512 +-0.0237608 0.156715 -0.0053038 +-0.0356104 0.127425 0.0141251 +0.035299 0.113666 0.0170439 +0.0334236 0.0903004 0.0414245 +-0.0251823 0.172681 -0.0196186 +-0.08807 0.113074 0.0239452 +0.0189601 0.036126 0.0191857 +0.00788239 0.0363273 0.00580236 +-0.0173959 0.0348327 0.0487444 +-0.0878896 0.111968 0.039224 +-0.064655 0.115706 0.0452756 +0.0311169 0.0445787 0.030603 +0.0441778 0.076309 0.025099 +-0.0896358 0.0915718 0.0124456 +-0.065807 0.090969 -0.0181206 +-0.0709064 0.123821 -0.00862928 +0.00649864 0.0924086 0.053834 +-0.0704989 0.134077 0.0490714 +-0.0596081 0.0614162 -0.00289701 +0.0242732 0.0346695 0.0161217 +-0.0464984 0.101529 0.041912 +-0.0498635 0.101385 -0.021584 +0.00433106 0.0496013 -0.0292546 +0.0107427 0.041795 0.045086 +-0.0739382 0.132552 -0.00766265 +-0.0162071 0.174195 -0.0247085 +-0.0886736 0.132413 0.0428724 +0.0320792 0.05838 -0.0156698 +-0.0192343 0.038226 0.00590432 +-0.0445033 0.11527 0.0334071 +-0.0847891 0.15265 0.0254465 +-0.0933214 0.129622 0.0172404 +-0.0346417 0.056288 -0.0107606 +-0.072488 0.172225 -0.0500329 +0.0233375 0.0606402 -0.0253621 +0.0366723 0.106016 0.0285439 +-0.0276074 0.0356491 0.0527176 +-0.053407 0.152198 0.0189083 +-0.0742721 0.166608 -0.0409997 +-0.0457331 0.0753099 -0.0177194 +-0.00672552 0.0670096 -0.035497 +-0.00219357 0.131295 0.0117423 +-0.0261647 0.0620468 0.0393395 +-0.0553241 0.0335005 0.00825618 +-0.0228582 0.119091 -0.0120569 +0.0213076 0.110412 -0.0149847 +-0.0314817 0.0889488 0.0439042 +0.0313336 0.0477022 -0.006755 +-0.0386183 0.174771 -0.00621679 +0.040988 0.0392554 0.0153655 +0.0608733 0.0623548 0.014161 +-0.00841473 0.0366574 -0.0164161 +-0.0191613 0.038383 0.000326194 +-0.00880856 0.0882704 -0.0368626 +-0.0596465 0.149865 -0.00094307 +0.00994371 0.0978413 -0.0235989 +0.0455086 0.055594 0.0323303 +-0.0860233 0.102167 0.0034068 +-0.0281256 0.165243 -0.0164075 +0.00425042 0.072607 -0.0344972 +0.0235113 0.118015 0.0324132 +-0.000261091 0.0350803 0.00896105 +-0.0532978 0.147774 0.0234078 +-0.0554295 0.0433 -0.00807812 +-0.0771312 0.155572 -0.0108986 +-0.0841536 0.0790628 0.0035277 +-0.0900384 0.135039 0.0102136 +-0.0727986 0.0849862 -0.0158247 +0.0336101 0.0962478 -0.0138935 +-0.0284441 0.0732827 -0.0345293 +0.00969167 0.0357093 0.0447693 +-0.0267255 0.0380235 0.0244373 +-0.0572883 0.132547 0.0364836 +-0.0528311 0.0941603 -0.0218064 +0.0400501 0.0644468 0.0314841 +-0.036531 0.116238 -0.0149852 +-0.00649604 0.0912014 0.0567618 +0.0144842 0.101799 0.0469727 +0.00323629 0.131729 0.0108817 +-0.0308992 0.0734931 -0.0305082 +0.0172066 0.068625 0.0512164 +-0.0657497 0.0765846 -0.017077 +-0.0737602 0.111876 0.0478461 +-0.0694356 0.066827 -0.00357005 +-0.0585001 0.119809 0.0399342 +0.0441644 0.0931187 0.000177172 +-0.0843417 0.0952366 0.029868 +-0.054753 0.0782755 -0.0197234 +-0.00738705 0.0379427 -0.0155249 +-0.0910658 0.143334 0.0151805 +-0.00249685 0.08015 0.0577289 +0.0340507 0.0835544 0.0405264 +-0.0523382 0.161184 -0.00281855 +-0.0812419 0.109765 0.0353982 +-0.0582589 0.129739 0.0385905 +0.0543559 0.049285 0.0042337 +0.015086 0.0406501 0.0443863 +-0.0280294 0.0835807 0.0475884 +-0.0393811 0.128131 0.00244283 +0.0208178 0.0415166 -0.0167046 +-0.0881465 0.111869 0.0203319 +0.0179003 0.0347727 0.0238228 +-0.0656433 0.0657616 -0.0058195 +-0.0840769 0.0911454 0.0297191 +0.00624923 0.0796338 -0.0339546 +0.0328487 0.0876389 0.0423414 +0.0276661 0.034679 0.0131567 +-0.00286572 0.104506 -0.0226523 +-0.0862889 0.10771 0.0183439 +0.0408829 0.0937805 -0.00720194 +0.000164408 0.0895345 -0.0346177 +-0.0843436 0.144613 0.00514953 +-0.0675701 0.180805 -0.0555973 +0.0220024 0.0727679 0.0493999 +-0.0156461 0.186781 -0.0233704 +-0.0187078 0.0364661 -0.0182818 +-0.0254003 0.0649585 0.0413183 +0.0122459 0.0780339 -0.0313519 +-0.0555013 0.0547806 0.00866941 +-0.0521449 0.157571 -0.00396744 +-0.073564 0.156227 0.0174776 +-0.00865052 0.104822 -0.0230347 +-0.0529425 0.0516633 -0.00638853 +-0.0652396 0.0384193 0.0154218 +0.0233172 0.0809188 0.0496338 +-0.0494012 0.054529 0.0344155 +0.0222475 0.0847573 -0.0259093 +0.0413844 0.0438265 0.0277643 +-0.0818597 0.146076 0.0399402 +0.0111047 0.0345035 -0.00868495 +-0.006336 0.10011 -0.0240468 +0.0245413 0.0819542 -0.0249712 +-0.00496439 0.130958 0.0121612 +-0.00978935 0.0841125 -0.0382567 +0.00551162 0.104351 0.0429177 +-0.0384918 0.0874952 0.0437107 +0.00946556 0.123094 -0.0106511 +-0.0897739 0.137922 0.033196 +-0.0653284 0.0349129 0.0366619 +0.00350126 0.104382 0.0428343 +-0.0368171 0.04253 -0.0279956 +-0.0634962 0.0775171 0.0416907 +-0.0558399 0.0666 0.0358943 +-0.033501 0.113967 -0.0166209 +-0.0105678 0.0384807 0.0255376 +-0.0875349 0.110472 0.0163392 +-0.0221423 0.0430524 0.0536615 +-0.0485662 0.0337988 0.0271958 +-0.0681764 0.0335792 0.00196619 +-0.00165753 0.05399 -0.0314052 +0.0457818 0.0746903 0.0202853 +-0.0845781 0.148672 0.0341151 +0.0452897 0.0861791 0.0201631 +0.00831626 0.0356874 -0.00657792 +-0.0196215 0.042233 -0.0284571 +-0.0649431 0.145366 0.0395451 +-0.0704953 0.104114 0.0382884 +-0.0414996 0.117985 0.0314618 +-0.0712521 0.17555 -0.0439596 +0.0452514 0.0931962 0.00916141 +0.00133085 0.058325 -0.0325937 +-0.0620033 0.158406 -0.0355965 +0.030344 0.1101 0.0335023 +0.0463602 0.0692197 0.00260588 +0.0444762 0.0945372 0.00319063 +-0.0491293 0.0430398 0.0442413 +-0.0789669 0.172206 -0.0419919 +0.0106503 0.130383 0.00504386 +-0.0484141 0.113756 -0.016334 +0.00450584 0.0547654 0.053433 +0.0441531 0.0720542 0.000197496 +-0.0134923 0.120989 0.0351213 +-0.0907438 0.135107 0.0202099 +-0.0590287 0.0481317 0.00366474 +0.0364319 0.108205 -0.00282023 +0.0178615 0.122874 -0.00643626 +-0.0356427 0.112876 -0.017464 +-0.0668607 0.154942 0.00387089 +-0.0486527 0.162759 0.00599863 +-0.00949915 0.105857 0.0435217 +-0.0615042 0.121243 0.0426924 +-0.0784762 0.0731416 -0.000473316 +-0.0740322 0.156054 0.0216877 +-0.0847959 0.101901 0.0272869 +-0.0596957 0.14074 -0.00502874 +-0.050497 0.0987878 0.0435099 +-0.071801 0.0745407 0.0361884 +-0.0549619 0.14242 0.0292765 +-0.0427321 0.0739589 -0.0183224 +-0.0508117 0.0354248 -0.0125858 +-0.0642011 0.0410429 0.0143098 +-0.0132685 0.101107 0.0437078 +-0.0475187 0.0790945 0.0436556 +0.0209941 0.0373175 -0.00464913 +-0.0204991 0.100239 0.044421 +-0.0684679 0.110537 0.0393979 +0.0243777 0.124503 0.0143821 +-0.0830368 0.0762381 0.00350806 +-0.073622 0.0747015 -0.00970199 +-0.0461368 0.13275 0.0116924 +0.0104091 0.0389479 -0.0231008 +0.0155004 0.116786 0.0363781 +0.0387891 0.096727 0.0316453 +0.0196906 0.074125 0.0513576 +-0.0225582 0.0383546 -0.00218286 +0.0487458 0.0724992 0.00846572 +-0.0668418 0.138273 0.0438208 +-0.0309771 0.0339917 0.0163773 +0.0411176 0.0661976 -0.00575682 +-0.0229076 0.0852723 0.0551257 +0.000828067 0.123861 -0.00936286 +-0.0250326 0.0621165 0.0410328 +-0.0651714 0.128382 0.0462127 +-0.0434333 0.15941 0.00551467 +-0.0264854 0.0348879 0.0467436 +-0.0628107 0.150584 -0.0245802 +-0.0123081 0.181626 -0.0249909 +-0.00919366 0.172678 -0.0237455 +0.0126063 0.0576596 0.0514859 +-0.0332159 0.0709306 -0.0214641 +0.0240158 0.0658883 0.0452055 +-0.0660765 0.124251 0.0501642 +-0.0588552 0.0351368 -0.0102919 +0.0124134 0.0346609 0.020994 +0.0122384 0.0644368 0.0527864 +0.0452304 0.0763569 0.00121116 +0.0242611 0.0448626 -0.0136813 +-0.0304238 0.12007 0.0279522 +0.0145126 0.0347575 0.026768 +-0.0217663 0.065545 -0.0358558 +0.00816067 0.125635 -0.0073679 +0.0183075 0.0679765 -0.028974 +-0.0180555 0.0909221 -0.0366017 +0.00824317 0.0602927 0.0539848 +-0.0687967 0.0894213 -0.0168337 +-0.0450098 0.146255 0.00342574 +-0.0335022 0.0661629 0.0402747 +-0.0781465 0.155117 0.0246877 +0.00450914 0.0758818 0.0564153 +-0.0135396 0.0366033 -0.0173816 +0.045728 0.077798 0.00320493 +-0.0913745 0.142001 0.0211607 +-0.0284862 0.102933 0.0423265 +-0.0302445 0.16108 -0.00171322 +0.0327554 0.116907 0.00609585 +0.0201031 0.0379621 0.0410367 +-0.090178 0.113449 0.0375353 +0.0422255 0.0887323 -0.00780894 +-0.0632995 0.045657 0.000708444 +-0.0344955 0.0889014 0.0434521 +-0.0735138 0.0874308 0.0404487 +-0.081144 0.11 0.0405445 +-0.046701 0.144949 0.00345496 +0.0239825 0.114006 0.0348506 +0.00951792 0.0799496 0.0550675 +-0.0589753 0.0343808 0.0315144 +-0.0715764 0.0724969 0.0344898 +-0.0763465 0.151411 -0.00788806 +0.0476241 0.0444058 0.00228058 +-0.0865319 0.0910336 0.0265354 +-0.0761893 0.0686573 0.0192806 +-0.0738377 0.169377 -0.0450494 +-0.013497 0.089796 0.0568243 +-0.003677 0.129286 0.0256231 +0.00334505 0.0372684 -0.00154693 +0.0285394 0.0735396 -0.0227021 +-0.067513 0.132633 0.0463034 +0.0459145 0.0862168 0.00717824 +-0.0631406 0.152896 -0.00931447 +-0.0777879 0.113218 0.0476364 +-0.023707 0.0340979 -0.0208155 +-0.0144671 0.110884 -0.0194361 +0.0102739 0.0667155 -0.0310192 +-0.00350236 0.0842813 0.0574606 +-0.0664798 0.0832826 0.043443 +-0.0635622 0.0403137 0.0257086 +-0.0426942 0.0666296 -0.0154091 +-0.017221 0.187225 -0.0211553 +-0.0336762 0.062222 -0.0135529 +-0.0673972 0.0641749 0.025006 +-0.0740248 0.149858 -0.0328754 +-0.0467235 0.128128 0.0253508 +-0.0262045 0.163884 -0.00647025 +-0.0271883 0.118982 0.0306038 +0.033772 0.0543003 -0.00971113 +-0.0758953 0.12228 -0.00740649 +0.00448236 0.11415 0.0407558 +-0.0698932 0.103728 -0.0136756 +-0.0567617 0.0782351 -0.019665 +0.0543638 0.0534389 0.000229046 +-0.081811 0.11456 0.047449 +-0.0565132 0.053486 0.0056729 +-0.057003 0.128342 0.0386502 +-0.0664962 0.0370022 0.0293944 +-0.0624918 0.101519 0.0421076 +-0.0687869 0.155336 0.00316719 +-0.0685122 0.141137 0.0449382 +-0.0527211 0.0709092 -0.0154358 +-0.00549985 0.0703921 0.057296 +-0.0709113 0.107952 -0.0112859 +0.00912605 0.108716 -0.0196568 +0.0361188 0.0794771 0.0382118 +-0.0588731 0.101172 -0.0189069 +-0.068257 0.129831 0.0487832 +0.0374605 0.0754022 0.0365814 +-0.032324 0.161031 -0.00122654 +0.0285746 0.0351013 0.0166057 +0.0394117 0.0870933 -0.0127933 +0.0113423 0.0644371 0.0532354 +-0.0583019 0.0447396 0.0435847 +-0.00749863 0.0773617 0.0576592 +-0.050194 0.116459 -0.0151638 +-0.0481437 0.0545922 0.0360102 +-0.0104704 0.100279 -0.0242341 +-0.0347529 0.111555 -0.0180951 +-0.0155011 0.120965 0.0341268 +-0.0784442 0.154274 0.027518 +0.0120599 0.0739551 0.0543847 +-0.0633352 0.0436031 0.0119653 +0.0217763 0.115313 0.0351727 +-0.0415089 0.165252 0.00421093 +0.0335736 0.0700381 0.039723 +0.00251112 0.0647983 0.0566425 +-0.0654261 0.0391693 0.0381077 +-0.0695564 0.114278 0.0502908 +-0.00162211 0.0369274 0.0160989 +-0.058966 0.123797 -0.00809452 +-0.0942641 0.126921 0.0212556 +-0.0335104 0.175675 -0.00315318 +-0.0368415 0.0943464 -0.0233446 +0.0133357 0.128238 -0.000223601 +0.00322397 0.0768846 -0.0351052 +0.00583724 0.038604 -0.0097514 +0.0244991 0.0390622 0.0333159 +0.039204 0.0699354 0.0337973 +-0.00749309 0.122405 0.0352331 +-0.0204932 0.0624346 0.0477982 +-0.0366651 0.0353042 0.023032 +0.0167127 0.0887461 0.050636 +-0.0697357 0.167099 -0.0218834 +0.0364696 0.0632797 0.0368445 +-0.0745038 0.141441 0.0470955 +-0.0621205 0.0458041 0.0366793 +-0.0544906 0.0820201 0.0451936 +-0.0645123 0.172574 -0.0485643 +-0.0421309 0.128083 -3.62159e-05 +0.0281636 0.121218 0.0186511 +-0.0121987 0.171236 -0.0257581 +-0.0281113 0.0605968 -0.0274147 +-0.0631879 0.0449558 -0.00115255 +-0.056884 0.0955743 -0.0213395 +-0.0516987 0.131736 -0.00321408 +0.00826283 0.110977 0.0402103 +-0.0738401 0.154086 -0.0269016 +0.00525204 0.071179 -0.0340737 +-0.0710521 0.173649 -0.0530415 +-0.0508226 0.162642 -0.00385759 +-0.0802179 0.141741 -0.00280512 +-0.0104908 0.12238 0.0346088 +-0.082839 0.145958 0.00218243 +-0.0764995 0.134472 0.0515165 +0.0572674 0.0552579 0.0228777 +-0.0459192 0.038241 -0.0182827 +0.0212995 0.0664627 -0.0275106 +-0.00266999 0.131274 0.0130017 +-0.0615996 0.159996 -0.0335919 +-0.0172476 0.12413 0.0281151 +0.0257469 0.104744 0.0391433 +0.033213 0.112692 0.0276861 +0.0156033 0.0352036 -0.0174539 +-0.030256 0.0608147 -0.0214135 +-0.0554996 0.0746996 0.0418498 +0.0250243 0.0618819 0.0448807 +0.0333333 0.0528011 -0.00875184 +0.0462789 0.0820452 0.011174 +0.0413782 0.0519867 -0.00685663 +-0.0228771 0.11806 -0.0129657 +-0.0608849 0.0381036 0.0449409 +-0.0255027 0.103002 0.0430099 +-0.0102615 0.128766 0.00159795 +-0.0140304 0.0389318 -0.0121434 +0.0242826 0.0691154 -0.0252241 +-0.0262141 0.0383199 -0.0177378 +0.000134491 0.116503 -0.0174981 +-0.0556551 0.0575 -0.00342108 +-0.0641179 0.115013 -0.0114251 +-0.0523454 0.059725 0.0287459 +-0.039493 0.0888698 0.0432118 +-0.0635876 0.0600882 0.0187607 +-0.0527647 0.138519 0.0263974 +-0.0421778 0.150669 0.00550662 +-0.0898169 0.147438 0.0111767 +-0.0440117 0.149183 0.00634807 +-0.0124981 0.0842783 0.057419 +-0.041501 0.0888244 0.0425932 +0.0390954 0.0814754 -0.0127535 +-0.00978632 0.0812687 -0.0379822 +-0.0143122 0.127128 -0.000614565 +0.043146 0.0650339 -0.00117659 +0.0508787 0.0465582 0.0223162 +-0.0187679 0.0341854 -0.027695 +0.0104088 0.0403968 -0.0232872 +-0.0615714 0.111062 0.0370307 +-0.0574772 0.0344195 0.038759 +-0.029988 0.0381577 0.0326274 +-0.0293835 0.0775974 -0.0345936 +-0.0174998 0.115454 0.0379182 +-0.0492034 0.0336154 -0.00143623 +-0.0160718 0.124871 -0.00420428 +0.0153397 0.120197 -0.0115352 +-0.0588103 0.157344 0.00530008 +-0.0448304 0.0956436 -0.0219722 +0.0199962 0.120682 0.0326204 +0.050389 0.0482108 0.0251806 +0.0208954 0.116644 -0.0117151 +-0.079388 0.147286 -0.00182539 +-0.0747645 0.0849032 -0.0147477 +-0.0505016 0.107064 0.0390734 +-0.0174992 0.03427 -0.0197565 +-0.01005 0.166619 -0.017705 +-0.0581312 0.0342101 0.0265873 +-0.0613803 0.17096 -0.0575947 +-0.0304965 0.0917653 0.0441169 +-0.0458806 0.10564 -0.0201801 +0.0202101 0.0833915 -0.0271395 +0.0323169 0.0376319 0.0223694 +-0.0223063 0.0380908 0.0216787 +0.035616 0.10962 -0.00284805 +0.0484836 0.0582148 0.031165 +-0.0809138 0.125107 -0.00520991 +-0.00566591 0.0540919 -0.0326394 +-0.00149662 0.114206 0.0415504 +-0.0263202 0.0930635 -0.029586 +-0.0680426 0.110046 0.0381289 +0.0249883 0.12025 -0.003603 +-0.0736149 0.155479 0.0262237 +-0.0299566 0.122268 0.0236125 +0.0238471 0.107154 -0.0155051 +-0.0566015 0.0451895 0.0246815 +-0.028491 0.0987621 0.0434122 +-0.0338535 0.0870951 -0.024854 +-0.0478322 0.0956344 -0.0220665 +-0.0226614 0.177177 -0.0135831 +-0.0810787 0.154935 0.0192662 +0.0439336 0.0428821 0.0236685 +-0.0114115 0.128814 0.0228458 +-0.0417827 0.0840916 -0.0212196 +0.0249862 0.118037 0.0310154 +-0.0641215 0.0336259 -0.00810847 +-0.0795112 0.081834 0.0339273 +-0.041505 0.119362 0.0299569 +-0.0033398 0.119986 -0.0131833 +0.0411805 0.0745986 -0.0077775 +-0.0446675 0.0636475 -0.0137193 +0.00937092 0.0937948 -0.0292997 +0.0415042 0.104246 0.00816492 +-0.0792333 0.169423 -0.0379787 +-0.0414888 0.0437926 0.0421195 +-0.00148881 0.0760516 0.0586512 +-0.0126769 0.0541386 -0.0335166 +-0.00577674 0.0385885 0.0246132 +-0.0394947 0.0676998 0.0417669 +0.0147262 0.129115 0.00511474 +-0.0045144 0.0774415 0.0584948 +0.0334512 0.0365216 0.00521608 +-0.0662857 0.0625946 -0.00141881 +-0.0659868 0.0418098 -0.00430732 +-0.0485691 0.0460686 -0.00963735 +0.0269239 0.0493817 -0.018692 +-0.0652895 0.175332 -0.0607504 +0.0558431 0.0722822 0.0186151 +0.0389971 0.039341 0.0203664 +-0.0252734 0.05785 0.0399799 +-0.0537245 0.0723552 -0.016258 +-0.0214963 0.104399 0.0429755 +-0.0649507 0.13395 0.041174 +-0.0641915 0.179229 -0.0572988 +-0.00649249 0.110023 0.0430195 +-0.0925801 0.120153 0.0312943 +0.0364682 0.111067 0.00216795 +-0.0487462 0.118344 0.031163 +0.0272987 0.047751 0.0374572 +-0.0235246 0.079724 0.0545007 +0.044563 0.0819287 0.0241608 +0.018083 0.0887399 0.0491141 +0.0180337 0.115273 -0.0142355 +-0.0838753 0.135332 0.0479212 +-0.0707318 0.154624 0.0301689 +-0.0897339 0.0916034 0.0174376 +-0.0487526 0.0782553 -0.019094 +-0.021696 0.0567795 -0.0319795 +-0.0524624 0.139899 0.000243693 +-0.016317 0.0384896 0.0261516 +-0.0172081 0.172701 -0.0233314 +-0.0664965 0.109745 0.0377695 +-0.0117557 0.0345134 -0.025836 +-0.000654571 0.0391799 -0.00969942 +0.00820345 0.083757 -0.0326005 +-0.0458982 0.107069 -0.0194756 +-0.0567459 0.15948 0.00480369 +0.00650779 0.0575337 0.0533257 +0.037787 0.0377202 0.0142753 +0.00846774 0.13132 0.015646 +-0.0475009 0.0425468 0.0439593 +-0.0766415 0.100814 0.0361238 +-0.028614 0.0408765 -0.0296027 +0.00929873 0.115842 -0.01682 +-0.0828745 0.119161 -0.00328383 +-0.0769895 0.0790529 0.034321 +-0.0878006 0.151251 0.0245374 +0.0208653 0.122279 0.030221 +-0.00768551 0.130297 0.0183702 +-0.0545511 0.0430136 -0.00860983 +0.030217 0.0843227 -0.0201565 +-0.0467665 0.152145 0.00944802 +-0.0631219 0.156103 0.0153645 +-0.0681832 0.155264 -0.0517309 +0.0142805 0.0345676 -0.0138073 +-0.0664934 0.0624679 -0.000297249 +-0.0641994 0.16384 -0.059407 +0.0464327 0.0769932 0.014129 +-0.041507 0.0591281 0.0403212 +0.0223695 0.0993436 -0.0211483 +-0.088603 0.087513 0.0164636 +0.00038562 0.0392239 -0.00953586 +0.0270604 0.0795391 0.0462139 +-0.0684865 0.0611195 0.0150424 +0.0105195 0.053345 0.0519069 +-0.0620106 0.15528 -0.0315878 +-0.00991465 0.0385501 0.00204441 +-0.0151984 0.171233 -0.0237028 +-0.026193 0.171192 -0.0190186 +0.0404914 0.0541681 0.032094 +-0.0115119 0.181449 -0.0261319 +-0.027122 0.166756 -0.0173778 +0.0338583 0.105892 -0.0101458 +-0.0671444 0.0628365 -0.000338348 +-0.0788571 0.120751 -0.0060883 +-0.0525645 0.0417313 -0.0101531 +0.0278652 0.0996344 -0.0174729 +-0.0681363 0.122845 0.0524474 +-0.0228108 0.0770465 -0.0385748 +-0.0135961 0.12464 -0.00600832 +-0.00365126 0.0525899 -0.0316543 +-0.068996 0.139931 -0.00789046 +-0.0310262 0.153728 -0.00354608 +-0.0497211 0.131062 0.0298847 +-0.00109314 0.103948 0.0441727 +-0.0204702 0.16083 -0.0136222 +-0.0865394 0.109089 0.0183378 +0.0400949 0.095337 0.0300286 +-0.0693797 0.128452 0.0506772 +-0.0438868 0.107083 -0.0199439 +-0.0470477 0.150201 -0.00445632 +-0.0370064 0.121579 0.0285082 +0.0198288 0.120602 -0.00797301 +-0.0549804 0.0334872 0.0101333 +0.00782186 0.127915 -0.00384433 +-0.0495314 0.12548 0.031876 +-0.0926082 0.117405 0.0243082 +-0.0215209 0.0382567 0.0252967 +0.00181128 0.125691 -0.00735123 +-0.0771897 0.117737 0.0516815 +-0.0554751 0.0519418 -0.00338574 +-0.0771699 0.154422 0.00455736 +-0.00649896 0.092559 0.0563419 +-0.0704303 0.164039 -0.0149268 +-0.036643 0.118048 -0.0128637 +-0.0535056 0.136701 0.0296589 +-0.0594928 0.0761776 0.0424443 +-0.00649656 0.0856337 0.0569558 +-0.0586618 0.0637687 0.0307411 +-0.0650964 0.155112 0.00596226 +-0.0626129 0.0371673 0.0184653 +0.0330114 0.107386 0.0320976 +0.0333812 0.0490928 -0.00645546 +-0.069711 0.1744 -0.043385 +-0.00744712 0.0961017 -0.0318028 +0.0413373 0.0392631 0.0117259 +-0.0487556 0.137056 0.00741027 +-0.0845701 0.112449 0.0449336 +0.0531449 0.0608429 -0.00288049 +-0.0358592 0.10284 -0.0213952 +-0.0778493 0.11932 -0.00645768 +0.0172333 0.0750251 -0.0287502 +-0.0195083 0.11546 0.0373373 +-0.0542618 0.0348321 -0.0120282 +-0.0344386 0.125663 -0.00162003 +-0.0690003 0.160066 -0.00858817 +0.0285895 0.0979793 -0.017709 +0.015268 0.0341755 -6.02454e-05 +-0.012432 0.12921 0.00653602 +-0.0222335 0.171216 -0.0204735 +-0.0656059 0.0615317 0.0026003 +-0.0324965 0.174231 -0.00238999 +-0.0398336 0.0384391 -0.0280596 +-0.0513902 0.122634 0.0344378 +-0.0735123 0.142806 0.0460464 +-0.0703661 0.16678 -0.0206717 +0.0128439 0.0343776 -0.0158182 +-0.074941 0.152735 -0.0189 +-0.0785348 0.0771858 -0.00655705 +0.0347176 0.114447 0.00679736 +-0.0192836 0.0385916 0.0308544 +-0.00226925 0.130756 0.00454173 +-0.0622845 0.161545 -0.0405978 +-0.0687671 0.0900946 0.0427048 +-0.028252 0.050761 -0.0234049 +-0.0818245 0.107456 0.0283887 +0.0216927 0.103078 -0.0191449 +-0.0539655 0.0364915 -0.0115887 +-0.0577688 0.142406 -0.00278963 +0.0347443 0.08354 0.0397721 +0.041088 0.0912985 0.0296287 +0.0209984 0.0578395 0.0478214 +-0.0607897 0.155834 0.0118473 +-0.0427999 0.167662 -0.00952768 +-0.0135045 0.0870342 0.0571061 +0.0551275 0.0637038 0.000299703 +-0.0500088 0.124901 -0.00796654 +0.040891 0.0917758 -0.00909975 +-0.057302 0.152908 0.030569 +-0.0490908 0.140152 0.0103957 +-0.062514 0.0399436 -0.00751704 +-0.0901142 0.14065 0.0241685 +-0.0614977 0.0847334 0.0442553 +0.00401707 0.125848 -0.00755459 +-0.0295217 0.0402041 -0.0298306 +-0.0770884 0.0866038 -0.0125752 +0.00250242 0.0441898 0.0459568 +-0.0884166 0.13498 0.0042424 +-0.0144984 0.11138 0.0412273 +-0.0543527 0.155034 0.0127444 +-0.0485461 0.135607 0.0194861 +-0.0763654 0.155962 0.0179624 +0.0194741 0.0351845 0.0201392 +0.0604235 0.0678625 0.0131519 +-0.0147437 0.0383723 0.00849375 +0.0123077 0.035562 0.0436453 +-0.0878555 0.0861109 0.00948006 +0.0461918 0.0820393 0.0121748 +-0.0376617 0.0344352 0.0359896 +-0.0640313 0.13251 0.040793 +0.00650251 0.122426 0.0350167 +0.046473 0.0747304 0.00699979 +-0.090578 0.13228 0.00723516 +-0.0665138 0.0986787 0.0417758 +-0.0753611 0.0724331 0.0302407 +-0.0737585 0.160179 -0.00884095 +-0.0875779 0.102333 0.0213648 +-0.0213902 0.0905176 -0.0361974 +-0.0663379 0.132604 0.0444522 +0.0420458 0.0817019 -0.00677657 +-0.0739471 0.131099 -0.00783391 +-0.00249367 0.0925505 0.0559214 +-0.0748382 0.149925 -0.0278668 +-0.0734967 0.126028 0.0530224 +-0.0386362 0.117281 -0.0140679 +0.00347668 0.0964809 0.0526894 +0.0453833 0.074968 0.00220665 +0.012072 0.11405 -0.0168987 +-0.0774663 0.168085 -0.0299733 +-0.0534988 0.0761753 0.0426023 +-0.0233682 0.126286 0.00541909 +-0.00704598 0.0392708 0.0363567 +-0.0791658 0.0990564 -0.00863296 +-0.0464518 0.0945568 0.0436355 +-0.0404194 0.128239 0.00205017 +0.0393898 0.107905 0.00701069 +-0.0398611 0.0338561 -0.0163385 +-0.0665222 0.156255 0.0214077 +-0.0672076 0.171872 -0.0410051 +-0.0708261 0.144835 -0.0182015 +-0.0650483 0.0701635 0.0361166 +-0.00764186 0.11082 -0.0214014 +-0.0836837 0.151385 0.0303528 +-0.0496912 0.162854 0.00564102 +-0.0114821 0.125053 0.0306553 +-0.0713615 0.158186 -0.0419305 +-0.0348112 0.0336186 -0.0263013 +-0.0652015 0.0334423 0.00269659 +-0.00682217 0.0390777 -0.0108403 +-0.0745121 0.155307 0.0054919 +0.00849016 0.0441134 0.0451901 +-0.041821 0.0914074 -0.0230213 +0.0243874 0.048835 -0.0205112 +-0.0578612 0.158406 0.00308521 +-0.0781467 0.116431 0.0503206 +0.0429791 0.071952 -0.00379352 +-0.00196689 0.131088 0.00752604 +-0.0728984 0.156837 -0.0329194 +0.00543206 0.119469 -0.0147017 +-0.00442631 0.0386612 0.00487339 +-0.089531 0.0983552 0.0174009 +0.00679264 0.0379024 -0.00704418 +-0.0255688 0.0356598 0.0531386 +-0.0343151 0.0794495 -0.0245241 +-0.0124944 0.0870249 0.0570339 +-0.0710693 0.155098 0.0285743 +-0.0663511 0.0350877 0.0310837 +0.00349789 0.122445 0.0347995 +-0.0414975 0.045132 0.0414403 +0.0348194 0.0365264 0.00732462 +-0.0740113 0.141343 -0.00688783 +-0.0303332 0.0706347 -0.0294852 +0.0503042 0.0691243 0.0253774 +-0.0701319 0.158154 -0.0479233 +-0.0358242 0.0915039 -0.0239402 +-0.0645394 0.0596403 0.015406 +0.0213135 0.0650138 -0.0271409 +0.0262112 0.0873747 -0.0229809 +-0.052671 0.112615 -0.017101 +-0.0592898 0.045994 0.0417021 +-0.0717164 0.163822 -0.0439567 +0.0178664 0.127935 0.017674 +-0.0655034 0.108381 0.0382088 +0.0278762 0.0942373 0.043974 +-0.0457869 0.0855328 -0.0217062 +-0.0643109 0.169365 -0.0428818 +0.0100266 0.0346111 0.0241784 +-0.00361434 0.0341476 -0.0187856 +-0.0389438 0.047744 -0.0146455 +-0.0676963 0.0648397 0.0261272 +-0.0374998 0.0691046 0.0417769 +-0.0568378 0.0613597 0.0260949 +-0.0369296 0.036554 0.0451414 +-0.0284901 0.0688983 0.0393825 +-0.0534824 0.0340932 0.0259063 +-0.0631168 0.15992 -0.0455978 +-0.0444353 0.0335419 -0.0188134 +-0.0168224 0.0960286 0.0515795 +-0.076233 0.145832 -0.00587217 +-0.0231748 0.0709692 0.0487695 +-0.0104382 0.0354056 -0.0175403 +-0.0897878 0.136555 0.0351995 +-0.0717761 0.0344583 0.000444464 +0.0353682 0.103387 0.0319873 +-0.00977607 0.0770524 -0.0379416 +0.00551406 0.0375423 0.0260562 +-0.00350144 0.0675505 0.0564719 +-0.0564947 0.102955 0.042036 +-0.061361 0.0336079 0.00692461 +0.00850062 0.121038 0.0360118 +0.0202826 0.0693621 -0.0284085 +-0.00908512 0.169637 -0.0217386 +0.0255848 0.123614 0.0162626 +0.0234098 0.0871372 -0.0242525 +0.0269727 0.112042 -0.0107557 +0.0262833 0.0935743 -0.0210485 +-0.059 0.0412164 0.021703 +0.0345357 0.0373492 0.0194302 +0.0530102 0.0462982 0.0132036 +-0.00365111 0.0511553 -0.0312289 +-0.0591025 0.0338635 0.0178635 +-0.0144888 0.0673806 0.0542261 +-0.0416194 0.0336308 -0.0257822 +-0.0186097 0.0407857 -0.0282477 +-0.0298888 0.0474725 0.0462905 +-0.00306646 0.0386027 0.0233477 +0.0330707 0.110451 -0.00703014 +0.0146846 0.037467 0.0442233 +-0.0390505 0.154795 -0.00905663 +-0.0306702 0.0891071 -0.0265975 +-0.090498 0.131069 0.0362301 +-0.0189866 0.10628 -0.022556 +-0.0125142 0.181139 -0.0289621 +-0.0236648 0.0522261 -0.0284113 +-0.0564969 0.100177 0.0431307 +-0.0314961 0.10429 0.0412052 +-0.0509168 0.0335668 6.7085e-05 +-0.0773495 0.081875 0.035997 +-0.0834254 0.141805 0.00220396 +0.00104126 0.108173 -0.0205653 +0.0181741 0.0988563 -0.0226017 +-0.0797776 0.115912 0.0485816 +-0.0816869 0.0734846 0.011537 +0.00150486 0.0856703 0.0573817 +-0.00849476 0.0745791 0.0575173 +-0.00549893 0.0939194 0.0556385 +0.0221626 0.0490425 0.0405889 +0.0363661 0.0873006 -0.0164353 +0.0491174 0.0712134 0.0219878 +-0.079214 0.155524 0.0184351 +-0.0654627 0.0598015 0.0150426 +0.0330982 0.0626311 -0.0167961 +-0.0839336 0.126519 -0.00402298 +-0.00950667 0.125161 0.0310898 +0.0292092 0.0563773 0.0403225 +-0.0273861 0.0720614 0.0416635 +-0.0647467 0.0379255 0.0402853 +-0.0521847 0.140082 0.0224024 +-0.0276164 0.0422898 -0.0293674 +0.0360108 0.100867 -0.0107814 +-0.0946899 0.124172 0.0202666 +0.0446233 0.0903218 -0.000806954 +-0.00230838 0.0348204 0.04129 +0.00391726 0.126651 -0.0064175 +-0.0633881 0.0336212 0.00649796 +0.00838362 0.046349 -0.0258656 +-0.0577252 0.156918 0.00853143 +-0.0693669 0.17099 -0.0332104 +0.0249955 0.0347512 0.0143719 +0.00961895 0.12141 -0.0128393 +0.021665 0.0416371 -0.0126942 +-0.0521438 0.0568294 0.0272279 +-0.0628733 0.0996403 -0.0179913 +0.0218834 0.0415901 -0.0107198 +-0.0546838 0.0435714 0.0206922 +-0.0176301 0.183064 -0.0184359 +-0.00750517 0.0471136 0.0478292 +-0.0520933 0.154615 -0.00405641 +-0.0865732 0.0860822 0.023453 +-0.0665787 0.163768 -0.0579853 +0.00636801 0.0479975 -0.0276935 +0.0368613 0.0587703 -0.00975684 +-0.0879266 0.10368 0.0183585 +-0.016623 0.0450359 -0.0278307 +-0.0895401 0.135156 0.0272131 +0.000356348 0.0496808 -0.0306188 +-0.0836962 0.138005 0.0462469 +0.0441945 0.077668 0.0251701 +-0.0685147 0.0930476 0.0422841 +-0.0232574 0.100051 -0.0240138 +-0.03748 0.0548048 0.0392179 +-0.0293599 0.15815 -0.0119938 +-0.021522 0.0336815 -0.0237529 +0.00128503 0.0655494 -0.0343406 +-0.0861178 0.0953813 0.000442214 +0.0350885 0.099465 0.0350983 +-0.0779853 0.13835 -0.00526914 +-0.0857179 0.124363 0.0486993 +-0.0309707 0.163858 -0.00458082 +-0.0722468 0.174258 -0.0400013 +-0.0149026 0.105901 -0.0222117 +-0.0673665 0.165482 -0.0209987 +-0.0876017 0.152029 0.0126504 +-0.0220763 0.0666765 0.0478151 +-0.0624814 0.094591 0.0443423 +-0.0196147 0.0379102 -0.0280301 +-0.0346582 0.0422066 0.0469558 +-0.0199036 0.0739897 0.0538964 +-0.00877818 0.0387104 -0.00343461 +0.000535895 0.0548656 0.0545076 +-0.0454881 0.10014 0.0423159 +-0.0404927 0.0958661 0.0421915 +-5.87354e-05 0.100974 -0.0229378 +-0.0283024 0.0362399 -0.0299084 +0.026308 0.0822369 0.0469135 +-0.06337 0.156813 -0.0136043 +-0.0624231 0.0357528 0.0196573 +-0.0709978 0.0698591 0.0316215 +-0.00550273 0.0661441 0.0562254 +0.00539692 0.0418924 -0.0240197 +-0.0711187 0.0642492 0.0206358 +-0.0614458 0.0606683 0.0222701 +0.0189142 0.0353585 0.00519133 +0.0315596 0.0497964 -0.00774264 +-0.0548596 0.0462919 -0.006395 +0.0010398 0.0392387 0.0326514 +0.0448141 0.0889533 0.0211601 +-0.0898897 0.136442 0.013225 +0.0409408 0.0873455 0.0311847 +-0.0866496 0.106304 0.00937201 +0.0315171 0.118424 0.0085036 +-0.091229 0.14471 0.0161551 +-0.00263717 0.12924 0.026005 +0.0142425 0.0645148 0.0521595 +-0.0509259 0.0571242 0.0316152 +-0.0585706 0.155353 0.0213449 +0.0242207 0.111888 -0.0125803 +-0.0305755 0.0788685 0.0415824 +-0.0664528 0.145477 0.0410093 +-0.00432524 0.0423738 0.047881 +-0.0434528 0.12491 0.0216806 +-0.0610445 0.045667 0.0306816 +-0.0148175 0.0855384 -0.0388203 +0.0594886 0.0594575 0.00616841 +-0.0740871 0.156873 -0.0259173 +-0.0414785 0.105663 0.0400022 +-0.0376995 0.0680509 -0.0154542 +-0.0698935 0.122364 -0.00881274 +-0.00848477 0.0718045 0.0573713 +-0.0394932 0.127549 -0.000886358 +-0.0856022 0.136615 0.0453504 +-0.0889467 0.143422 0.0321606 +-0.0738723 0.109242 -0.00905672 +-0.0222267 0.0906414 0.0528718 +0.00551724 0.0661119 0.0558057 +-0.0588983 0.0582416 0.00880815 +0.0225876 0.0388978 0.0383164 +0.0022443 0.0974458 0.0519249 +-0.056455 0.12554 0.0394323 +-0.00949777 0.091187 0.0566315 +0.00149085 0.103013 0.043912 +-0.00374904 0.0712712 -0.0357267 +-0.0394946 0.119701 -0.0126173 +-0.0631669 0.152168 -0.0312981 +-0.0139477 0.0625843 0.0539847 +-0.0604937 0.100137 0.0425915 +-0.0749718 0.138395 -0.00644263 +0.00624486 0.0401371 0.0456279 +0.0193551 0.0475975 0.0417872 +-0.0303971 0.0890708 -0.0275789 +0.0196022 0.0462781 0.0421275 +0.0317544 0.0632771 0.0405733 +-0.0662966 0.156977 -0.00759157 +0.0183734 0.0506657 -0.0252113 +0.0404388 0.0427247 -0.00185446 +0.0115151 0.105777 0.0436811 +-0.0301364 0.0349235 0.0476426 +0.0254917 0.0369057 0.0252691 +-0.0850483 0.109026 0.0223524 +0.0157867 0.112048 -0.0167369 +0.0360751 0.0370336 0.00715793 +-0.0781026 0.0818813 0.0353359 +-0.00650962 0.0773868 0.0579538 +-0.0494324 0.0586474 0.0343285 +0.0112135 0.116429 0.0374582 +-0.0555782 0.159581 0.0063787 +-0.0454954 0.160804 0.00677344 +-0.0709975 0.139911 -0.00751202 +-0.0547852 0.0339346 -0.0120065 +-0.079504 0.128859 0.053141 +-0.0155349 0.0459646 0.0502157 +-0.0704857 0.116111 0.0520944 +-0.0454716 0.0404727 0.0442216 +-0.0890267 0.148493 0.027289 +0.0192952 0.126057 0.00111502 +0.00542039 0.0392223 0.0299552 +-0.0509634 0.152153 0.0121451 +0.0432798 0.100122 0.00916351 +-0.0722295 0.16736 -0.0213426 +-0.0311459 0.0354418 0.0504241 +-0.0834736 0.114211 -0.000781836 +-0.0258217 0.181482 -0.0160394 +-0.0517798 0.115481 0.0337859 +-0.0763629 0.108471 -0.00759882 +-0.0757916 0.155001 0.00503825 +-0.0893649 0.111932 0.017326 +-0.0619999 0.132592 -0.00773229 +-0.033844 0.171255 -0.00164046 +-0.0352015 0.153653 0.00157065 +-0.0722895 0.147809 -0.0265569 +-0.0217088 0.114301 -0.017023 +0.026785 0.0955535 0.0441601 +-0.0481378 0.0672057 0.0386531 +-0.026667 0.0823364 0.0504973 +0.00619086 0.131536 0.009113 +-0.0526119 0.0580506 0.0248562 +0.00250286 0.0576093 0.0540213 +-0.0810169 0.0953587 0.0335948 +0.029848 0.0875415 0.0432926 +0.0464379 0.0778615 0.0131806 +-0.0134997 0.0856507 0.057198 +0.0263535 0.0795425 0.0469281 +-0.0265857 0.0603669 0.0385952 +-0.0334943 0.11802 0.0311453 +-0.00337868 0.117905 -0.0149619 +-0.0660268 0.177263 -0.0521591 +-0.0238887 0.156697 -0.00604726 +-0.00760592 0.125948 -0.00752899 +-0.0221488 0.0383333 0.0268965 +-0.0293863 0.155004 -0.00725783 +0.0105543 0.126889 0.0293082 +0.0501729 0.0446765 0.00723117 +0.0310879 0.115727 -0.00269046 +-0.0191314 0.122285 0.0303949 +-0.0777065 0.155692 0.0145746 +-0.0797904 0.152563 0.0316147 +-0.0710154 0.0391332 0.00421404 +-0.0889531 0.100999 0.0124002 +-0.0147295 0.0942902 -0.0339999 +-0.0812191 0.0785924 0.0290188 +-0.0766463 0.0803349 -0.0100768 +-0.0435275 0.152141 0.00710463 +-0.0608313 0.092512 -0.0191943 +0.0227948 0.124775 0.0223512 +-0.0831943 0.132626 0.0501472 +-0.0317593 0.0449779 0.048226 +0.00552401 0.0633596 0.0561453 +-0.0492065 0.128269 0.0305743 +-0.0634388 0.152153 -0.00650488 +-0.0568117 0.135044 -0.00489316 +0.0252231 0.117755 -0.00691168 +-0.0716366 0.0874136 0.0414306 +-0.0725279 0.091561 0.0413901 +-0.0764449 0.084677 0.0378167 +-0.00880306 0.0841017 -0.0380883 +-0.0688616 0.033602 -0.00179476 +0.0161578 0.0988387 -0.0226848 +-0.0829912 0.0966357 0.0312921 +0.00854504 0.101743 0.0468013 +-0.0161113 0.0419173 0.0519008 +-0.0115772 0.0991016 -0.0249869 +0.026625 0.0839457 -0.0229857 +0.0451532 0.0931968 0.0111604 +-0.0264982 0.113889 0.035131 +-0.00351628 0.0442826 0.04692 +-0.0202282 0.0639107 0.048901 +0.0154069 0.0403121 -0.0220991 +-0.0725345 0.140015 0.0475615 +-0.0340447 0.1653 -0.00374721 +0.00850451 0.0883096 0.055394 +-0.0516913 0.0680528 0.0372779 +-0.070167 0.162396 -0.0479528 +-0.0174382 0.127681 0.00469302 +0.0354105 0.0965418 -0.0122281 +-0.0427202 0.152139 0.00651185 +-0.00023381 0.123831 -0.00932637 +-0.073929 0.152666 -0.0308896 +0.0244967 0.0375596 0.0281073 +-0.038496 0.0450464 0.0406484 +0.0424477 0.0803262 -0.00578172 +-0.017618 0.163994 -0.00984759 +0.042638 0.101488 0.0111603 +-0.0114747 0.111375 0.0418865 +-0.0878262 0.152428 0.0199936 +-0.0605498 0.0341606 0.0243603 +-0.0474966 0.088987 0.0447599 +0.0139221 0.0913152 -0.0287052 +-0.0182228 0.038194 0.0115761 +-0.0697006 0.0619862 0.0158161 +0.0317346 0.0619381 0.0405155 +0.0470668 0.0701831 0.0226957 +-0.0222639 0.0783263 0.0546841 +-0.0624118 0.148891 -0.00459657 +-0.0245152 0.111258 0.0385919 +-0.0623581 0.164692 -0.0425931 +0.0189449 0.0348191 0.0239933 +-0.0489525 0.123989 0.0308621 +-0.0294789 0.0732089 0.0403736 +-0.0912678 0.12968 0.0332366 +0.0188735 0.102787 -0.0208351 +-0.0542898 0.0343509 0.030786 +0.0541934 0.0628656 -0.00090927 +-0.024607 0.037979 -0.0290368 +-0.0461075 0.164061 -0.00779976 +-0.00480748 0.0854817 -0.0373491 +-0.0398973 0.160894 0.00183362 +0.0122013 0.0878954 -0.0308742 +-0.0609826 0.13955 0.0346529 +0.01801 0.126774 0.0220214 +-0.0720383 0.149669 -0.0395937 +0.0268545 0.0350543 0.018119 +-0.00249757 0.0952299 0.0546317 +-0.0177632 0.0728777 -0.0388934 +-0.00835092 0.0354934 -0.0172056 +-0.0123646 0.109877 -0.0203825 +-0.0385 0.120755 0.0293207 +-0.0614467 0.0335533 -0.00933279 +-0.0144984 0.108621 0.0424908 +-0.071459 0.151188 -0.0433221 +-0.0227544 0.0753712 0.0524561 +-0.0581897 0.157381 0.00697939 +-0.0588054 0.0825509 -0.0205914 +-0.0254269 0.0781373 0.050782 +-0.0176233 0.0450417 -0.02779 +-0.0345002 0.10287 0.040969 +0.0398172 0.0390737 0.00420564 +-0.0642915 0.169488 -0.0607786 +-0.0391909 0.150688 0.00279786 +-0.0817139 0.108721 -0.00159489 +-0.0691226 0.174646 -0.044619 +0.0542982 0.0579702 -0.00188368 +-0.0903603 0.143336 0.0142018 +-0.0554977 0.109766 0.0379077 +-0.0646073 0.15754 -0.0113176 +-0.0857257 0.0994313 0.000394941 +-0.0634657 0.0730594 0.0392535 +-0.0114926 0.0604332 0.0544994 +0.00136064 0.0481752 -0.0296995 +-0.0476605 0.124307 -0.00939578 +0.00152589 0.0731231 0.0568629 +0.0454513 0.0412382 0.0102351 +-0.0555526 0.124119 0.0389742 +0.0111749 0.035437 0.032711 +-0.0631468 0.156791 -0.0395997 +-0.0364943 0.115224 0.0327734 +-0.0687764 0.180487 -0.0583042 +-0.0558353 0.0912839 -0.0220329 +-0.0487756 0.0826651 -0.0212781 +0.0222353 0.0804964 -0.0261413 +-0.0698715 0.11424 0.0504282 +-0.0534972 0.0732542 0.0410474 +-0.0354707 0.0874527 0.0429689 +-0.0522647 0.117566 -0.0142997 +-0.0687471 0.158212 -0.0056007 +0.0254863 0.0578069 0.043747 +-0.0625026 0.0973365 0.0428841 +-0.00849427 0.0925522 0.0562249 +-0.076914 0.17371 -0.0479126 +0.0285085 0.121244 0.0144975 +-0.0649629 0.0620542 -0.00149187 +-0.0487919 0.135536 0.0203921 +-0.0406031 0.160882 0.00257136 +-0.0717214 0.0807275 -0.0154713 +-0.0759462 0.128163 -0.00785989 +0.0065117 0.129736 0.0249737 +-0.00106791 0.0391062 -0.00597311 +-0.0539473 0.03352 0.0103166 +0.0264479 0.103016 -0.017087 +0.0368588 0.0672041 -0.0137655 +-0.0209608 0.0380992 0.0183358 +-0.0922682 0.12272 0.00827864 +-0.0758891 0.119352 -0.00728174 +-0.0619808 0.0469192 0.00268857 +0.0286963 0.0991802 -0.016993 +0.0173223 0.125777 -0.00156033 +-0.071812 0.0879125 -0.0161091 +-0.0634945 0.102894 0.0414572 +-0.0534816 0.0491363 0.0336594 +-0.0677428 0.164471 -0.018256 +0.0418243 0.102828 0.00318021 +-0.0345003 0.0347932 0.0310568 +-0.0508009 0.0912872 -0.0218676 +0.0344847 0.0868408 -0.0179179 +0.0193386 0.0579734 -0.027391 +-0.0621388 0.0334692 0.00329381 +-0.017215 0.175671 -0.0245809 +-0.0538714 0.0449084 0.0167075 +0.0201621 0.124133 -0.00175315 +0.00612185 0.108732 -0.0201634 +0.0101112 0.110138 -0.0193681 +0.0407992 0.0698146 0.0307925 +-0.0186672 0.0495328 -0.0300927 +-0.0804551 0.134426 0.050865 +-0.0719585 0.0377493 0.00378419 +0.00950065 0.0688226 0.0549942 +0.0451024 0.091769 0.003186 +0.0116064 0.121838 0.0345253 +-0.07744 0.155698 0.0205089 +0.0154982 0.118174 0.0357451 +0.0455409 0.0918154 0.00916522 +-0.0825371 0.14737 0.037761 +0.00019241 0.0853625 -0.035651 +-0.0413557 0.0405762 -0.0252979 +-0.00795135 0.129264 0.0240771 +-0.00779714 0.0812765 -0.0379169 +0.0279176 0.0508447 -0.0187774 +-0.0851867 0.0791254 0.00650076 +-0.071556 0.161392 -0.00951947 +0.0302201 0.119789 0.0108648 +-0.0664004 0.120055 0.0514481 +-0.0652563 0.0459546 0.00568144 +-0.0484523 0.0349311 0.00836568 +0.050668 0.0451751 0.0191374 +0.0235092 0.118527 -0.00774096 +-0.0799897 0.135372 -0.00407226 +0.0454193 0.0875784 0.00318139 +0.0218862 0.107458 -0.0158341 +0.0519418 0.0525693 0.0274887 +-0.0174883 0.044685 0.0517611 +-0.0503006 0.134918 0.0263293 +-0.0797918 0.11331 -0.00252121 +0.0170867 0.039703 -0.0206999 +-0.00603107 0.130744 0.0146461 +-0.0614566 0.0372076 0.0201515 +-0.0634342 0.039353 0.0417984 +-0.0520389 0.0545474 0.0246248 +-0.0700192 0.172057 -0.036324 +0.0425828 0.0778099 0.0282065 +-0.0943409 0.12415 0.0172628 +-0.03739 0.165304 0.000185179 +0.0380556 0.0834519 0.0357476 +-0.0140374 0.0384483 0.0012996 +-0.0834291 0.14469 0.0401339 +-0.055347 0.0335038 0.00284205 +-0.0577441 0.0590406 0.000553128 +-0.0586534 0.154964 0.024223 +-0.0627416 0.148221 0.0374769 +-0.0597552 0.0781833 -0.0189903 +-0.0882134 0.141936 0.0111996 +0.0441966 0.0973694 0.0101636 +0.00324014 0.0740573 -0.0349749 +-0.0320743 0.0763998 -0.0305477 +0.0424682 0.0642865 0.0278791 +0.00647808 0.111357 0.041027 +0.0241747 0.0351145 0.0138772 +-0.0842625 0.100702 -0.00260902 +-0.0538049 0.0486373 0.0382673 +0.0033632 0.097467 -0.0272178 +-0.0526204 0.141613 0.022402 +0.0331357 0.0570437 -0.0137102 +0.00753436 0.104363 0.0436686 +-0.029494 0.0631194 0.0377814 +0.0357221 0.0994501 0.0342567 +0.0398205 0.0604422 -0.00479028 +-0.0134826 0.109991 0.0421694 +-0.0618817 0.161578 -0.0325898 +-0.00560304 0.0434101 -0.0260312 +-0.0274608 0.0473022 0.0495228 +-0.065855 0.0967089 -0.0173163 +-0.00276158 0.0698244 -0.0351738 +-0.00250067 0.110029 0.0428965 +0.0142116 0.123033 -0.00860213 +-0.0633963 0.145356 0.0382744 +-0.033621 0.0519746 -0.0102559 +0.0385319 0.0997972 -0.00779458 +0.0312326 0.118751 0.0098088 +-0.011143 0.128894 0.00267925 +-0.0574832 0.0833327 0.0441985 +-0.0668542 0.114225 0.0472279 +0.0369848 0.0561762 0.0322 +-0.0688663 0.102328 -0.014772 +-0.0246521 0.0478035 -0.0267776 +-0.0806498 0.110292 0.0422048 +-0.0475911 0.163428 -0.00670042 +-0.00358669 0.0376696 -0.025221 +-0.0499193 0.118992 -0.0138138 +-0.0766944 0.171427 -0.0358927 +0.0174979 0.126711 0.000451693 +-0.0107378 0.177152 -0.0244143 +0.0397983 0.0672171 0.0328832 +0.00289976 0.039936 0.0460731 +0.030847 0.0875798 0.0429743 +-0.0394926 0.102848 0.0402648 +0.00332264 0.0568618 -0.0316357 +-0.0367537 0.0783235 -0.0195335 +-0.038823 0.0928858 -0.0233898 +-0.0644838 0.0931562 0.0439721 +-0.0298466 0.0385336 -0.0167929 +-0.0548009 0.0449973 0.0226803 +0.0118375 0.0344099 -0.0160341 +-0.0683506 0.181259 -0.055895 +-0.0107728 0.0387832 -0.00390135 +-0.0300375 0.0890464 -0.0285748 +-0.0710857 0.168903 -0.0252489 +-0.0757782 0.149978 -0.0188682 +0.030839 0.0995119 0.0394948 +-0.0329249 0.0369927 0.0503412 +-0.0732448 0.144163 -0.0109449 +-0.0897565 0.140652 0.029182 +-0.0735905 0.154201 0.0306806 +0.00579855 0.0347845 0.042995 +-0.0519166 0.0545256 0.0236155 +-0.01212 0.102458 0.0438351 +-0.0211595 0.178661 -0.0149212 +-0.014608 0.0421127 -0.0270124 +-0.0885789 0.0922253 0.0228661 +-0.0145885 0.128899 0.00863716 +0.010498 0.0909888 0.0536897 +-0.0066489 0.0388823 -0.00316153 +-0.0258212 0.0839605 -0.0371412 +-0.0797525 0.15498 0.0124103 +-0.0414563 0.108465 0.0385585 +-0.0525315 0.149847 0.0192949 +-0.0156627 0.184575 -0.0209705 +0.0428837 0.0887839 -0.00581701 +0.0242564 0.0734016 -0.0257301 +0.0192994 0.062217 -0.0274738 +-0.0310269 0.122601 -0.0056394 +-0.0569847 0.153801 0.0277423 +-0.0526515 0.0504392 0.0286525 +0.00150192 0.0634213 0.0567922 +-0.0838556 0.139345 0.0449552 +-0.0476133 0.0562658 -0.0107838 +-0.0527007 0.0693372 -0.0141095 +-0.0311494 0.157393 -0.0113544 +0.00313658 0.0348497 0.0441849 +-0.0311581 0.17265 -0.0162683 +0.0453494 0.0847845 0.0201731 +0.0285114 0.0619268 0.0428923 +0.000499004 0.0634057 0.0567297 +0.00751117 0.0575089 0.0530994 +-0.000499443 0.114191 0.0415203 +-0.0794921 0.146102 0.0417961 +-0.0252738 0.0381933 0.0263814 +-0.0376796 0.16681 0.00156763 +0.0387661 0.0870401 -0.0137857 +0.0296088 0.12015 0.0163431 +-0.0938694 0.121489 0.0252875 +-0.0396002 0.125498 -0.0067103 +0.0370837 0.103994 -0.00683208 +-0.0465559 0.0461276 -0.0102455 +0.0404351 0.0389029 0.0137659 +-0.0424925 0.100104 0.042001 +-0.0285717 0.12063 0.0270994 +-0.0800863 0.148726 0.0380799 +0.00214563 0.119376 -0.0145717 +-0.0288792 0.104408 -0.0227314 +-0.0312735 0.034639 0.0229335 +-0.0669165 0.12238 -0.00897156 +-0.0890273 0.0956446 0.021399 +-0.0897683 0.091592 0.0154417 +-0.0739499 0.156872 -0.0269145 +0.00919729 0.039194 0.0451612 +-0.0374937 0.109757 0.0368609 +0.0523694 0.0545712 -0.00274385 +-0.0339801 0.0348087 0.0434578 +-0.00541562 0.128879 0.0264449 +-0.0636022 0.151642 0.0357576 +-0.0693902 0.0672718 0.0289371 +-0.0220481 0.121595 -0.00868192 +-0.0390536 0.127857 0.00108873 +-0.090122 0.144414 0.0285066 +-0.0629168 0.114269 -0.0126902 +-0.0930993 0.129616 0.0162363 +-0.0325132 0.0575193 0.0378292 +-0.0193156 0.162502 -0.00702982 +0.00550789 0.0910775 0.054811 +-0.0234801 0.168298 -0.011313 +0.0473422 0.0575607 -0.00551801 +0.0214637 0.0989203 0.04607 +-0.0827604 0.106087 -0.00164696 +-7.52397e-05 0.037877 0.020989 +-0.0345343 0.126083 0.0189612 +-0.0512338 0.164096 -0.00192926 +-0.0477776 0.0826677 -0.0211258 +-0.0368214 0.16531 -0.000729186 +-0.0673944 0.162815 -0.015253 +-0.0186701 0.0971551 0.0477534 +-0.0366241 0.0360289 0.0452882 +-0.0195815 0.0341867 -0.0200865 +0.0298019 0.0862025 0.0431971 +-0.0932655 0.120203 0.038289 +-0.000505415 0.110024 0.0426421 +-0.0191383 0.16678 -0.0189611 +0.0173062 0.0421724 0.0440438 +0.0105403 0.105742 0.0436489 +-0.0345641 0.11594 -0.0146748 +-0.0944618 0.125537 0.019259 +-0.0679091 0.108046 -0.0128123 +0.0268137 0.118694 -0.00391821 +-0.0577288 0.0738232 -0.0175832 +-0.0494959 0.0988033 0.0435442 +0.0425948 0.0873487 -0.0068057 +-0.0366079 0.114094 -0.0167422 +-0.0064886 0.118022 -0.0150746 +-0.0694599 0.155751 0.00874428 +-0.0727804 0.0887809 0.0411113 +-0.0921325 0.117269 0.0252198 +-0.0769942 0.154149 -0.012901 +0.00413641 0.0979047 -0.0256761 +-0.0504737 0.113932 0.0347324 +-0.00655213 0.0389811 -0.00882376 +-0.021105 0.0431099 0.0534593 +-0.0732611 0.161033 -0.0359392 +-0.0668535 0.0938084 -0.0173106 +0.0523234 0.0724358 0.00729932 +-0.02575 0.0536249 0.0391706 +-0.0529014 0.114056 -0.0162353 +-0.0887923 0.1378 0.0112057 +-0.0604332 0.0585193 0.0100455 +-0.0105014 0.0546468 0.0522278 +0.0475389 0.0482604 0.0280949 +0.00247406 0.123881 0.0337357 +0.0282809 0.0389301 0.0276504 +-0.0903128 0.141958 0.0142327 +-0.0457178 0.0724199 -0.0170809 +-0.0393802 0.149525 0.00137589 +-0.0384762 0.128323 0.0101316 +-0.0387951 0.0343342 0.0305488 +-0.0627886 0.154765 0.0285735 +-0.044804 0.0884409 -0.0220028 +0.00621048 0.0851628 -0.0331463 +-0.0124997 0.0938947 0.0551641 +-0.0760018 0.163203 -0.0170986 +-0.0568081 0.154369 0.0248865 +0.0141304 0.056278 0.0501629 +-0.000201542 0.0357861 0.0174114 +-0.0687337 0.0764635 -0.0155195 +-0.0465141 0.0518831 0.0377757 +0.0306859 0.0377485 0.0237503 +-0.0887758 0.149859 0.0255696 +-0.0468066 0.088437 -0.0220186 +-0.0104567 0.111397 0.0420636 +0.00949238 0.0487693 0.0494463 +-0.0344171 0.0343826 0.0278837 +-0.0747225 0.161031 -0.0319529 +-0.00127097 0.123959 0.0338052 +0.0484686 0.0511467 0.0294828 +0.0216142 0.042218 0.0415059 +0.0159587 0.0874032 0.0512942 +-0.0579584 0.0336225 0.00939861 +0.0262865 0.0689766 -0.0234385 +-0.0457839 0.11676 -0.0154906 +-0.0431023 0.149502 -0.00451393 +0.0575358 0.0592738 0.00218909 +-0.0907151 0.116093 0.0293225 +-0.0626986 0.0658458 -0.00782349 +-0.0680529 0.0874243 0.0435129 +-0.0323521 0.0336874 -0.0296376 +-0.0208013 0.108893 -0.0213287 +0.00800637 0.0345135 0.0400968 +0.0600686 0.0650603 0.0191749 +-0.0881094 0.0861284 0.0104766 +-0.0292466 0.166794 -0.00735295 +-0.0455037 0.159315 0.00726546 +-0.0361152 0.127822 0.0095198 +-0.00430156 0.130062 0.00233767 +-0.032509 0.0506603 0.0384213 +-0.0316129 0.119551 -0.0104429 +0.0414143 0.104258 0.0111621 +-0.075527 0.0733333 0.0311756 +-0.0549715 0.161246 0.00205939 +-0.0503915 0.140104 0.0183826 +0.0152276 0.0835585 -0.0295949 +-0.0464862 0.0718998 0.0415251 +-0.00551998 0.0732424 0.0584734 +-0.0900165 0.133639 0.00622839 +-0.069719 0.0887582 0.0422978 +0.00474777 0.0367585 0.0247919 +-0.027126 0.165248 -0.0165316 +-0.0283135 0.0350192 0.0513697 +-0.0318897 0.0721821 -0.0275085 +0.0437433 0.0945326 0.0221692 +-0.0126802 0.0961728 -0.031918 +-0.0567215 0.04662 0.0276747 +-0.00532834 0.0367049 -0.0158504 +-0.0529595 0.0335568 -0.000338033 +-0.0240311 0.112816 -0.0174462 +0.01097 0.0520216 0.0508135 +-0.0328411 0.0915526 -0.0242438 +-0.0552728 0.0335199 0.0136226 +-0.0820994 0.104661 -0.00359906 +0.035799 0.0558975 -0.00871505 +-0.0868952 0.0991223 0.0252196 +-0.0296012 0.120713 0.0267425 +-0.0695324 0.125657 0.0522171 +-0.0424937 0.0790081 0.0428161 +-0.0632658 0.0419596 0.040132 +-0.0699149 0.161541 -0.0103834 +-0.0345105 0.0676457 0.041143 +-0.00514301 0.0997589 0.0492461 +-0.0697588 0.147131 -0.0275571 +0.0580762 0.0648724 0.00314588 +0.0241035 0.1245 0.0085821 +0.0377445 0.110141 0.00501649 +0.0413546 0.0999884 -0.00181466 +0.0180964 0.0604579 0.0488964 +-0.0341434 0.0780256 -0.025502 +0.0365014 0.0756142 -0.0127863 +0.0485013 0.0651587 0.0285278 +-0.0331365 0.162399 -0.0024379 +-0.0578171 0.08688 -0.0211007 +-0.0591308 0.125513 0.0408421 +-0.0248084 0.0826031 -0.0377611 +-0.00847175 0.0920515 -0.0356471 +-0.0281451 0.166722 -0.0170726 +0.0321478 0.0740867 0.0412125 +-0.0318598 0.0496767 -0.0173511 +-0.0683644 0.0381281 -0.00463362 +-0.0293612 0.0383343 -0.00169706 +-0.0546971 0.0334232 0.00665025 +-0.0604511 0.0584329 0.0155226 +0.0356702 0.108162 -0.00482135 +-0.087994 0.0981671 0.00544953 +0.042672 0.0737568 0.0282004 +-0.0414969 0.095865 0.0421344 +0.0227593 0.0727654 0.0487302 +0.0247922 0.121532 -0.00113746 +0.0282353 0.0775351 -0.0225519 +-0.0487687 0.0559317 0.0351683 +-0.0192566 0.180095 -0.0235875 +-0.0250606 0.0603159 -0.031412 +-0.0310964 0.160762 -0.0139612 +0.0143682 0.0767494 0.0542274 +-0.0714649 0.159596 -0.0419316 +0.0454023 0.0875829 0.0161653 +-0.0354973 0.0470472 -0.0223112 +-0.0465703 0.0490167 -0.00974944 +0.025334 0.0435501 0.0381106 +-0.0785372 0.168054 -0.0329755 +-0.0148858 0.0985034 0.047376 +-0.0302927 0.117007 -0.0138211 +-0.0802651 0.0963563 -0.00854135 +-0.030624 0.0348272 -0.0303515 +-0.000406928 0.0996624 0.04942 +-0.0576871 0.0335309 0.00594357 +-0.0923088 0.114683 0.0143254 +0.00732004 0.0351406 -0.00439972 +-0.00948171 0.174183 -0.0285537 +-0.0320503 0.12646 0.00953655 +0.0270529 0.0822264 0.0462092 +-0.0900419 0.139254 0.023178 +-0.0498185 0.0927102 -0.0215416 +-0.00751389 0.102333 0.0437439 +-0.0775302 0.161724 -0.0197184 +-0.044496 0.0451943 0.0419603 +-0.0362032 0.160944 0.000172036 +-0.0314741 0.053189 0.0369367 +-0.072385 0.158213 -0.0369175 +-0.0860963 0.145967 0.0357039 +-0.0554937 0.100184 0.0430705 +-0.0523102 0.116406 -0.0150785 +-0.0518166 0.09273 -0.0219218 +-0.024907 0.0916549 -0.0335476 +-0.0634479 0.141036 0.0381413 +0.0152366 0.121915 0.0327966 +-0.0631227 0.0445391 0.0377156 +-0.0865336 0.141884 0.00820248 +0.00748358 0.11412 0.0398951 +-0.071965 0.136965 -0.0074383 +-0.0608999 0.058839 0.0168686 +-0.0886398 0.102364 0.0173768 +-0.0688031 0.0659098 0.026726 +0.02824 0.0686155 0.0425458 +-0.0196877 0.127428 0.0169554 +0.0332508 0.0906175 -0.0178979 +0.019654 0.122236 -0.00577023 +-0.0457281 0.151677 -0.00565337 +-0.0685681 0.156629 -0.0529972 +0.0455148 0.0801982 0.0216904 +0.0232513 0.0734458 -0.026356 +-0.0856264 0.110331 0.00634317 +0.032415 0.0383305 -0.000488607 +-0.0697489 0.17084 -0.0530327 +0.0127518 0.0887452 0.0537008 +-0.0650469 0.168333 -0.0359323 +-0.0312058 0.066507 -0.0244549 +-0.0481456 0.14427 0.00342034 +-0.0250932 0.0385898 -0.0121739 +-0.0268796 0.181867 -0.0133655 +-0.0624905 0.0804598 0.0431805 +-0.0664501 0.0353918 0.0342807 +-0.0287674 0.078167 -0.0351681 +0.0384815 0.0729589 -0.0117402 +-0.0325668 0.0347124 0.0262002 +0.0258782 0.0645831 0.0443789 +-0.0486546 0.0620591 -0.0122264 +-0.086684 0.149909 0.029141 +0.0138472 0.123867 0.0319554 +-0.0513866 0.0584422 0.0306256 +-0.00251219 0.0378133 0.00785027 +-0.00926128 0.126278 0.029483 +0.0147315 0.0347337 -0.0176578 +0.0417187 0.066227 -0.00378154 +-0.0149615 0.0883672 -0.0380383 +-0.0678931 0.0900993 0.043242 +0.0149683 0.113515 -0.0163113 +-0.0719356 0.110274 0.042413 +-0.0333618 0.0751438 -0.0264858 +0.0116984 0.034577 0.0227351 +-0.0670519 0.166375 -0.0237602 +-0.0454276 0.0345386 0.0307405 +-0.00249621 0.0883993 0.0567366 +-0.0235661 0.115415 0.0353667 +-0.0944357 0.121484 0.0222838 +0.0334736 0.0940135 -0.0155006 +-0.0436018 0.0519969 -0.0109067 +-0.0781065 0.0948585 -0.0115273 +0.0456581 0.0729488 0.0206934 +-0.0274951 0.157765 -0.0111917 +-0.00306441 0.100922 0.0454807 +-0.0618021 0.116863 0.0404147 +-0.0344937 0.041903 -0.0294247 +-0.0427476 0.159417 0.00474491 +0.0374917 0.0484328 0.0317174 +-0.00814387 0.0339061 -0.0213361 +-0.0737927 0.132633 0.0513524 +-0.0397231 0.116184 -0.0149076 +-0.00950395 0.0773592 0.0576807 +-0.0505908 0.03436 0.0298011 +0.0187381 0.119283 0.0342968 +0.00523462 0.075444 -0.0346019 +-0.0321194 0.165225 -0.0156285 +-0.0276791 0.1239 0.019992 +0.0190254 0.061825 0.0484929 +-0.0821717 0.11152 0.00033013 +0.0241621 0.0505303 0.0399762 +0.0378012 0.0604211 0.0334272 +-0.0182252 0.159192 -0.00975232 +0.0423754 0.100105 0.0181719 +-0.0546942 0.0661242 -0.0103565 +-0.0685912 0.131247 0.0482807 +0.000498438 0.0938703 0.0551155 +-0.0281544 0.168213 -0.0175818 +-0.0417796 0.0485307 -0.0113147 +0.0287445 0.109341 -0.0118595 +-0.00260812 0.130913 0.0187596 +-0.0454889 0.0660999 0.0395126 +-0.0655106 0.0972881 0.0421527 +-0.0194848 0.0869694 0.0563134 +-0.0264967 0.121204 -0.00819998 +0.00829502 0.0653838 -0.032076 +-0.0287456 0.0753309 -0.0348961 +-0.0727338 0.0821447 -0.0156124 +-0.0470607 0.146242 0.00718592 +-0.0209665 0.0386858 -0.0114366 +-0.0600079 0.128191 -0.00754937 +-0.0653109 0.180421 -0.0593142 +-0.0559148 0.0548054 0.00768529 +-0.0524976 0.0917711 0.0441581 +0.0212182 0.0847586 -0.026404 +-0.0579878 0.0414274 -0.0083271 +-0.0726954 0.0791971 -0.0139413 +-0.0307256 0.0915724 -0.0247467 +-0.0556334 0.11822 -0.0129265 +-0.0457806 0.0841121 -0.0213757 +0.00438413 0.0465246 -0.0275852 +-0.010477 0.110005 0.0426237 +-0.0896333 0.0929554 0.018431 +0.0397783 0.106996 0.0151622 +-0.0127593 0.0728576 -0.0383837 +0.0319543 0.0766492 -0.0197037 +0.00131984 0.0612266 -0.0334746 +-0.0834451 0.136657 0.0474496 +-0.0558128 0.0869147 -0.0214989 +0.00250708 0.0474439 0.0499052 +0.0125018 0.115423 0.0374065 +-0.00563766 0.13083 0.0104776 +-0.0658527 0.144237 -0.0148815 +-0.089646 0.0929438 0.0164332 +0.0436072 0.041137 0.00426675 +0.0444767 0.0889055 -0.00179899 +-0.057137 0.0562876 0.0015684 +0.00522768 0.0810328 -0.0339223 +-0.0137183 0.0628763 -0.0368336 +0.00133514 0.0554198 -0.0315391 +-0.0188851 0.0334951 -0.0249427 +0.052927 0.0495927 0.0235839 +0.0522184 0.0461787 0.0182078 +0.0165976 0.0348504 0.0271124 +-0.0589342 0.12267 0.0410891 +-0.0669714 0.163891 -0.0179699 +-0.0703202 0.132668 0.0493213 +-0.0776493 0.0787462 -0.00818258 +-0.0881736 0.132451 0.0437642 +-0.0632228 0.141176 -0.0069873 +-0.0713401 0.171022 -0.0310853 +-0.047409 0.166836 0.00227952 +-0.0141433 0.181604 -0.0223083 +-0.0619045 0.104018 -0.0180451 +-0.0483068 0.13712 0.0113971 +0.0136813 0.0952834 0.0497668 +0.035272 0.0660164 0.0386352 +0.0461881 0.0785676 0.017326 +-0.0532105 0.0335853 0.013987 +-0.0171786 0.0971676 0.04907 +-0.0725346 0.145512 -0.0179133 +-0.0333802 0.0498304 -0.01435 +0.0509184 0.0496314 0.0259504 +-0.0572784 0.0576838 0.00160501 +-0.0619689 0.153737 -0.0245819 +-0.0544985 0.104295 0.0412117 +-0.0500704 0.137041 0.0213927 +-0.0191411 0.0697535 0.053261 +0.0582061 0.0634965 0.00313887 +-0.0204853 0.0800483 0.0563065 +-0.0472097 0.0335059 -0.0119372 +-0.0749299 0.155492 -0.0209193 +-0.0698715 0.116492 -0.00825865 +0.0375436 0.055493 0.03143 +-0.0538462 0.137744 -0.0016929 +-0.0607335 0.034496 0.0414254 +0.0295159 0.107768 -0.0121736 +-0.0689178 0.168027 -0.0530164 +-0.0779935 0.171503 -0.0379488 +-0.0881443 0.0887489 0.00447233 +-0.00442605 0.128738 0.0268092 +0.00451348 0.0633892 0.056472 +-0.0818952 0.134036 0.0502533 +-0.0372574 0.124492 0.0238955 +0.0138426 0.11139 -0.0180298 +-0.0818741 0.119187 -0.00382424 +-0.0756587 0.0744591 -0.00795246 +-0.026115 0.158145 -0.00104516 +0.037495 0.0513025 0.031739 +0.0589255 0.0580383 0.0211692 +0.0434376 0.0874432 0.0261531 +-0.0260776 0.125932 0.00880255 +-0.0740662 0.155757 0.0246008 +-0.0178239 0.0387614 0.0327968 +0.0417114 0.091515 -0.00780409 +-0.0241449 0.0905492 0.0505682 +-0.074497 0.124608 0.0532356 +-0.0458334 0.0927472 -0.0217986 +-0.0804383 0.111326 0.0449881 +-0.00529252 0.125273 -0.00885488 +-0.0889223 0.0888194 0.00846703 +-0.00624295 0.130196 0.00449841 +-0.0669483 0.0447271 0.0026821 +-0.0548497 0.0941617 -0.0218342 +-0.0534962 0.0931826 0.0441514 +-0.0347147 0.0696617 -0.0176192 +-0.0440132 0.0366004 -0.0242792 +-0.0474979 0.0464882 0.040801 +-0.0653409 0.0600919 0.00943789 +-0.0231718 0.171204 -0.0201308 +-0.00587295 0.130011 0.00319127 +-0.0664676 0.0383698 -0.00648508 +-0.0886456 0.0935942 0.0229142 +-0.0447618 0.116708 -0.0154556 +0.0194756 0.100345 0.0462123 +-0.0154951 0.0911415 0.0560918 +-0.0371641 0.0342638 0.0291868 +0.0162971 0.0651874 -0.0294171 +-0.0291548 0.169699 -0.0175574 +-0.0704877 0.0623972 0.0153213 +-0.0774944 0.092744 0.0372295 +-0.00984328 0.0975178 -0.0293224 +-0.0784995 0.162482 -0.0259435 +-0.0145068 0.0730096 0.0554058 +0.0203473 0.0727595 0.0505294 +-0.0616196 0.156864 -0.0215888 +-0.0832232 0.0789707 0.00151853 +0.0163786 0.0403059 -0.0216745 +0.000325641 0.0568761 -0.0321896 +-0.0192766 0.0554309 0.0481999 +-0.00592104 0.0389465 -0.0049376 +-0.0499986 0.143197 0.012378 +-0.0355049 0.076131 0.0419036 +0.053394 0.0525543 0.0260735 +0.00630024 0.125509 0.0321214 +-0.0349082 0.033686 0.00682403 +-0.0714928 0.117552 0.0529474 +-0.0589919 0.15382 0.0299308 +0.0585035 0.0621132 0.0229868 +0.00569406 0.0341002 0.00181761 +-0.0155184 0.118264 0.0365807 +-0.0424989 0.16674 0.00381643 +-0.0863225 0.128011 -0.00168174 +-0.0553953 0.118382 0.0373919 +0.0469197 0.0444607 0.00136465 +-0.056091 0.0334157 -0.00629765 +-0.0361548 0.166687 -0.0142688 +-0.0127937 0.0386426 -0.0153707 +-0.0118501 0.11995 -0.013068 +-0.00670797 0.0627873 -0.0354975 +-0.079327 0.169353 -0.0390258 +-0.0437872 0.0855322 -0.0215732 +-0.0280896 0.0549613 -0.0243859 +-0.0584052 0.033525 -0.00869675 +-0.0482395 0.144672 0.00644062 +-0.0554929 0.0932384 0.0449182 +-0.0347045 0.0851136 -0.0245778 +-0.0494996 0.0791204 0.0440794 +0.0372047 0.0385834 0.00228863 +0.0193241 0.0607694 -0.0271316 +0.00852018 0.0702413 0.0555324 +-0.0778099 0.148638 -0.00388521 +-0.06539 0.178765 -0.0548301 +-0.04996 0.133052 -0.000571002 +-0.0847199 0.0939171 -0.00356265 +-0.0326229 0.0385148 -0.00990233 +0.032773 0.036599 0.0179277 +0.0427869 0.0611675 -0.0033403 +-0.0366336 0.0548529 -0.010755 +-0.0870489 0.0900041 0.00248653 +0.0416085 0.0656213 0.0284032 +0.00293844 0.100629 -0.0225769 +-0.0728162 0.0907583 -0.0154663 +-0.0718707 0.116473 -0.00776413 +-0.0937263 0.121427 0.0132848 +0.00471758 0.0346554 0.0428856 +-0.0704897 0.0719829 -0.0097429 +-0.050201 0.0344166 0.0315946 +-0.0796522 0.0704439 0.0152371 +-0.0425023 0.0986936 0.0421906 +0.0383887 0.0445417 -0.00444706 +0.0311086 0.103751 -0.0138751 +-0.0667119 0.155932 -0.00484005 +-0.0912006 0.121567 0.0443209 +-0.019019 0.0418114 0.0529435 +-0.0892823 0.141954 0.0132429 +-0.0221125 0.0389367 0.0353489 +-0.0563218 0.0335364 0.00802021 +-0.0896372 0.0929496 0.0174335 +0.0130767 0.125591 0.0302496 +0.0537776 0.0692651 0.00258827 +0.0106605 0.0363802 0.031763 +-0.0297187 0.0523119 -0.0193651 +-0.0140732 0.0383739 0.00681638 +0.0269054 0.0726895 0.0441444 +0.0246103 0.075474 0.0479027 +-0.00359864 0.0405713 -0.0254999 +0.0269298 0.0804165 -0.0233375 +-0.0488158 0.0912881 -0.0217052 +-0.00415439 0.0390536 -0.00654274 +0.000507304 0.0828912 0.0574668 +-0.0158173 0.038248 0.0138275 +-0.0624172 0.0599054 0.00479638 +0.0162074 0.0821136 -0.0291532 +-0.0419982 0.0337727 -0.000124238 +0.0250957 0.0348061 0.00319961 +-0.0309108 0.0608665 -0.0194213 +-0.0387236 0.174145 -0.00898261 +0.0464355 0.0778581 0.0101835 +-0.0639936 0.132595 -0.00811291 +-0.0340062 0.0381682 0.049242 +-0.0477004 0.131837 0.0244001 +-0.00268932 0.130846 0.00581897 +0.0302059 0.0857499 -0.020278 +0.0384903 0.0499056 0.0320993 +0.010384 0.0463357 -0.0254801 +-0.00660048 0.0405957 -0.0258634 +-0.0114989 0.0366056 -0.0169842 +0.0105059 0.0348976 0.020389 +-0.0487973 0.070279 0.0395574 +-0.0394971 0.057712 0.040203 +-0.0253679 0.125634 0.0163937 +0.0361389 0.0902387 0.0383091 +-0.0654905 0.0889779 0.0446185 +-0.0197462 0.0656505 -0.036857 +0.0320676 0.117774 0.0158308 +0.00351414 0.0661565 0.0562774 +-0.0226137 0.0422636 -0.0288734 +-0.019191 0.123923 -0.00519119 +-0.0532423 0.046246 0.0226735 +-0.021638 0.0464604 -0.0276852 +0.0272834 0.0689403 -0.022937 +0.0211914 0.124678 0.000362022 +0.04653 0.0760573 0.0105389 +-0.0338201 0.127158 0.00888963 +-0.077651 0.154407 0.00585132 +-0.0417202 0.0710768 -0.017536 +-0.0887218 0.0874968 0.0134639 +0.0165095 0.0354073 -0.0166384 +-0.0454406 0.0336534 -0.00804117 +-0.0504088 0.153575 0.0112235 +-0.0286428 0.107004 -0.0213195 +-0.0218765 0.0933131 0.0510401 +0.0329715 0.116865 0.0119087 +-0.0914625 0.148845 0.019136 +-0.0596259 0.155781 0.0151651 +0.0375784 0.099381 0.0316743 +-0.0157845 0.0784788 -0.0385671 +-0.0795217 0.123111 0.0512585 +-0.0418108 0.0343847 0.029868 +0.0389991 0.108356 0.0151637 +-0.0709225 0.109376 -0.0106672 +0.0579353 0.0634887 0.0239229 +-0.058577 0.0727277 0.0406017 +-0.062479 0.152546 0.000181648 +-0.0544934 0.0834141 0.0452404 +0.0357112 0.102065 0.0324889 +-0.0715263 0.0944187 0.0416527 +-0.0651404 0.112408 0.0390225 +-0.0545541 0.160714 0.00540511 +-0.0144079 0.183333 -0.0275579 +-0.0621531 0.152198 -0.0185797 +-0.0657166 0.14722 -0.0249021 +-0.0460756 0.154674 -0.00723534 +0.01519 0.127729 0.000331934 +-0.0489579 0.137072 0.00640402 +-0.0485683 0.0335187 -0.00854361 +-0.0885037 0.114225 0.0283481 +-0.0540375 0.141288 -0.0013423 +-0.0472373 0.134368 0.0171539 +-0.0272298 0.037736 0.022792 +-0.0518585 0.0985114 -0.0220738 +-0.0110867 0.180248 -0.025982 +-0.0236236 0.0593674 0.0425181 +-0.0408247 0.092859 -0.0231395 +0.0561988 0.0567015 0.0248562 +-0.0086058 0.172644 -0.0268228 +0.0163504 0.0552051 -0.0284322 +-0.0344945 0.0336038 -0.0243554 +-0.0556539 0.0345276 0.0424927 +-0.0348371 0.155104 0.00211833 +0.0276605 0.0605608 0.0434107 +-0.0623508 0.146001 -0.00658982 +-0.0248115 0.081196 -0.037776 +0.0240847 0.110594 -0.013209 +-0.0895075 0.148492 0.0263454 +-0.0926235 0.124077 0.00926903 +0.0292051 0.0843756 -0.0209031 +-0.0353048 0.127501 0.00687019 +-0.0859011 0.134922 0.00126737 +-0.0742444 0.0756609 0.0347079 +-0.0752605 0.157705 -0.0064221 +-0.0337955 0.0808164 -0.0255276 +-0.0288635 0.154571 -0.00355817 +0.0360371 0.0547702 0.0325687 +-0.0101249 0.0392126 0.0357767 +0.0288986 0.120838 0.016073 +-0.0106831 0.0570151 -0.0340192 +-0.0628045 0.144114 -0.00718004 +-0.0895701 0.151478 0.0161361 +-0.0176156 0.0385615 0.0294218 +-0.0211148 0.0389017 0.0355855 +0.0329392 0.0541774 -0.0107445 +-0.00428899 0.0367463 -0.0156853 +-0.0458368 0.0956376 -0.0219211 +0.0381262 0.080772 0.035847 +0.0268148 0.0976356 -0.019356 +-0.0625367 0.161521 -0.0446005 +-0.0517979 0.0869425 -0.0216307 +0.0344672 0.111064 -0.00366583 +-0.0911264 0.115738 0.024682 +-0.0753098 0.0805155 0.0368289 +-0.0133248 0.129244 0.00909724 +-0.0272428 0.0370384 -0.018628 +-0.0384762 0.0423266 0.0418914 +0.0203738 0.0521374 -0.0257342 +0.0585485 0.0552063 0.00817117 +0.0134367 0.121611 -0.0110511 +-0.089438 0.113514 0.0412091 +0.0444691 0.0790854 -0.00178456 +-0.000786355 0.0797462 -0.0360298 +-0.0269011 0.155694 -0.0071882 +-0.08839 0.0995952 0.00742201 +-0.0662162 0.0396687 0.0135434 +-0.0355277 0.0846755 0.0433772 +-0.0858238 0.104979 0.0223569 +-0.0778773 0.120773 -0.00663343 +-0.0263675 0.107348 -0.0216948 +-0.0927086 0.12286 0.0332776 +-0.0661966 0.15171 0.0363078 +-0.0202018 0.177138 -0.0227808 +-0.0855834 0.141979 0.0409477 +-0.0504886 0.0946205 0.0445363 +-0.0604928 0.101522 0.0423039 +0.0379519 0.0659398 0.0354557 +-0.0840048 0.140674 0.0436515 +-0.0558989 0.109796 -0.0177742 +0.00991096 0.0343624 0.00242681 +-0.0506409 0.0514954 0.0146147 +-0.0324809 0.117911 -0.0127388 +-0.0621631 0.164652 -0.0535815 +0.0025214 0.130289 0.0235241 +-0.0506513 0.150706 0.0125676 +-0.0175006 0.0829087 0.0576844 +-0.00809599 0.0347439 0.04196 +-0.0340295 0.0384544 -0.00643688 +-0.0694928 0.101384 0.0400561 +0.0446992 0.0776181 0.0241159 +-0.0935142 0.126862 0.0142561 +0.0248702 0.121138 0.0274186 +0.00114443 0.118463 -0.015597 +-0.053795 0.115431 0.0343764 +-0.0905823 0.131055 0.0352302 +-0.00177837 0.0811944 -0.0365591 +0.0316669 0.110076 0.0318865 +0.0355137 0.0902592 0.0391607 +-0.0911524 0.122908 0.0442317 +-0.0909787 0.118866 0.0441649 +-0.0647368 0.0350417 0.0261211 +-0.0694997 0.166373 -0.0203616 +-0.0256221 0.0450194 -0.0280788 +-0.0652445 0.171051 -0.0600934 +-0.0773393 0.152802 -0.0018868 +-0.00223434 0.118045 -0.0151238 +-0.0662482 0.063188 0.0243484 +0.0400602 0.0922366 -0.00959201 +-0.00562712 0.0451708 -0.0285409 +0.000501495 0.0457296 0.0472541 +-0.0123701 0.125297 0.0298351 +-0.0778681 0.101964 -0.00928868 +-0.0609537 0.123826 -0.00859412 +0.0224677 0.112582 -0.013341 +0.00921575 0.0781468 -0.0329463 +-0.0349236 0.126603 0.0011375 +-0.00878487 0.0784493 -0.0377777 +0.00650569 0.075888 0.056486 +0.0412418 0.0802411 -0.00774788 +-0.093262 0.128309 0.02526 +-0.0314363 0.171254 -0.00518552 +-0.0520579 0.0336325 0.0248414 +-0.0815026 0.127419 0.0524098 +-0.0894637 0.136534 0.031204 +-0.084288 0.111698 0.0438155 +0.0333653 0.0918289 -0.0171871 +-0.0324333 0.126109 0.00355422 +-0.00141447 0.0391026 0.0304627 +0.00110904 0.0340429 -0.0196452 +-0.0650297 0.138462 -0.00769967 +-0.015954 0.105864 -0.0221228 +-0.0523859 0.0626167 0.0314055 +0.026783 0.122575 0.00815739 +-0.0385209 0.128019 0.0130694 +-0.029395 0.125597 0.00758806 +-0.0328882 0.0666632 -0.0184721 +-0.0494036 0.13704 0.0193807 +-0.0782331 0.109897 -0.00456592 +0.0157741 0.036715 -0.0196413 +-0.0294956 0.0660091 0.0384906 +-0.0679029 0.105215 -0.0140793 +-0.0620463 0.158428 -0.0205873 +-0.0703503 0.159267 -0.00619145 +-0.0378682 0.104226 -0.0203027 +-0.0918252 0.118761 0.028299 +-0.0411447 0.163664 -0.0114686 +-0.0574975 0.0426993 0.0453715 +-0.0747471 0.147201 -0.0128585 +-0.0134963 0.0744967 0.0564394 +-0.054142 0.0722337 0.0402304 +-0.0642908 0.169609 -0.0607929 +-0.0154978 0.0977476 0.0489325 +-0.0800099 0.07203 0.0185532 +-0.0921132 0.115989 0.0103178 +0.00725505 0.0754138 -0.0341479 +0.0536301 0.0568087 0.0282148 +-0.0479854 0.0346149 0.0371396 +-0.00149257 0.0746611 0.0586297 +0.0203189 0.05934 -0.026848 +-0.0115998 0.0391898 -0.02633 +-0.0295596 0.0663471 -0.0284716 +0.00348965 0.105764 0.0424132 +-0.0703543 0.0703917 0.033048 +-0.0606347 0.0629111 -0.00512698 +-0.01408 0.166026 -0.0199736 +-0.061044 0.0400333 0.0227114 +-0.0810735 0.143155 -0.000828212 +-0.0617474 0.0766736 -0.0179709 +0.0217467 0.124535 0.0248197 +0.00507814 0.101571 -0.0215886 +0.0346034 0.0592134 0.0376264 +-0.0712039 0.0342165 0.00436442 +-0.0288195 0.0384506 0.0326078 +-0.053518 0.1534 0.0145047 +-0.0556759 0.0661408 -0.010195 +-0.0677895 0.175109 -0.0580246 +-0.0699291 0.0421822 0.0072491 +-0.0067422 0.0741543 -0.0369448 +0.0199779 0.0885978 -0.0258535 +-0.0488263 0.0941792 -0.0218889 +0.0343607 0.0505331 -0.00657713 +-0.0725404 0.162229 -0.0113532 +-0.00793663 0.0384098 0.0134736 +-0.0556415 0.043673 0.0216881 +-0.0145298 0.100345 0.0444168 +-0.0815281 0.1484 0.0374104 +-0.0387388 0.0753845 -0.0180569 +-0.0116442 0.0481633 -0.0303354 +0.0363562 0.0559126 -0.00774494 +-0.0652193 0.1682 -0.0598394 +-0.0776736 0.10169 -0.00957801 +-0.0196644 0.0494984 -0.0297043 +-0.0282432 0.0763981 0.0437868 +-0.0328471 0.033696 0.0126517 +0.00347146 0.128699 -0.00262952 +0.0461484 0.0806375 0.015174 +0.0337656 0.111689 0.027893 +-0.0271752 0.172675 -0.0185845 +-0.0693701 0.141497 -0.00893397 +0.0317719 0.115994 -0.000976469 +0.0347163 0.0544411 -0.00865089 +-0.0651886 0.172101 -0.0460875 +-0.0678768 0.1616 -0.0125361 +-0.0634522 0.0423282 0.0135276 +0.0601313 0.0581272 0.0101639 +-0.0107388 0.117999 -0.0150205 +0.0339646 0.0916099 0.0404552 +-0.0498374 0.138571 0.0183794 +-0.0934962 0.117401 0.0173034 +0.0383972 0.0491164 -0.00642484 +-0.0280195 0.0378733 -0.0295429 +-0.0146147 0.12166 -0.00880985 +0.0372641 0.0686531 0.0362559 +0.0239959 0.0549509 0.0433236 +0.00994394 0.0362916 0.0335003 +-0.0208017 0.0799082 -0.0390716 +0.0233991 0.0534151 -0.0239637 +0.00722024 0.0851796 -0.0327872 +-0.0639758 0.128226 -0.00858393 +0.0238189 0.124864 0.00990899 +0.00150975 0.0474485 0.049901 +-0.0361905 0.168183 -0.0140562 +-0.0174884 0.0801344 0.0573382 +-0.0918829 0.116106 0.0333156 +0.00614351 0.12581 -0.00755937 +0.0340287 0.115127 0.0194375 +-0.0908622 0.135106 0.0192089 +-0.000650637 0.0496936 -0.0307015 +-0.0856199 0.144636 0.00717286 +0.0438423 0.0804362 -0.00278861 +-0.00949487 0.0503088 0.0507661 +0.0271211 0.103444 0.039376 +-0.0386188 0.04066 -0.0277325 +-0.0654456 0.154232 -0.00436037 +-0.0264896 0.100224 0.0439794 +-0.0715324 0.144165 0.0446205 +-0.0694829 0.118967 0.0529378 +0.0378869 0.110163 0.00793964 +0.0353212 0.108669 0.0283742 +0.0601522 0.0581329 0.0151721 +-0.0542607 0.057796 0.0208407 +0.00222051 0.130562 0.00190808 +-0.0641033 0.156361 -0.011127 +0.0432299 0.0944972 0.0241641 +-0.0229686 0.033489 -0.025736 +-0.0221215 0.127119 0.0131583 +-0.0671797 0.0604061 0.0141816 +-0.0288776 0.0903901 -0.0295833 +0.0603694 0.0609168 0.00815448 +-0.0494359 0.138587 0.00541192 +-0.0023893 0.0424447 0.047211 +-0.0543474 0.135324 0.0319505 +0.0228597 0.125444 0.016672 +-0.0334812 0.0737514 -0.024477 +0.0348071 0.0781711 0.0398247 +0.0054972 0.0547598 0.0532635 +0.00645879 0.122419 -0.0119062 +-0.0438011 0.128754 0.0022734 +-0.0849152 0.0791131 0.00550947 +-0.0506838 0.0678366 -0.0132392 +0.0126337 0.110109 -0.0186257 +-0.0497701 0.140145 0.0153991 +-0.0724387 0.0819305 0.0395669 +0.0576036 0.0717386 0.0163116 +0.00802743 0.0346823 0.0237027 +0.00218868 0.098191 -0.0260404 +-0.0368205 0.162344 -0.00074381 +-0.070799 0.0908224 -0.0163205 +-0.0539828 0.0700164 0.038652 +0.0135945 0.128354 0.000408423 +-0.0264981 0.0959784 0.0437675 +0.0190214 0.118116 -0.0113006 +-0.0618485 0.153752 -0.0205795 +-0.0552085 0.151192 0.0284379 +-0.0266144 0.0408668 -0.0293519 +0.00698354 0.131641 0.013682 +-0.0316463 0.0595496 -0.0164023 +-0.0758985 0.159659 -0.0269354 +-0.0491601 0.160603 -0.00598464 +-0.00858383 0.0384847 0.0096485 +-0.0717673 0.146065 -0.0213605 +-0.0899696 0.15095 0.0147905 +-0.00955085 0.0385956 0.00389466 +-0.0607249 0.0737695 -0.0169262 +-0.0751542 0.0995011 0.0375123 +-0.0707959 0.0850638 -0.0167146 +-0.0312047 0.123257 -0.00431908 +-0.053995 0.0675039 0.0372692 +-0.0419532 0.0345214 0.0385087 +-0.0289695 0.0380956 -0.0297496 +-0.0121936 0.163667 -0.0136225 +0.021294 0.0721108 -0.027322 +0.0597965 0.0678036 0.00914167 +-0.0657015 0.0736405 -0.0152375 +0.00697022 0.12731 -0.00520393 +0.033357 0.100796 0.0361067 +0.0587791 0.0686289 0.0199155 +0.00149398 0.0394449 0.0343588 +-0.0875531 0.12123 -0.000692815 +-0.0744527 0.154114 -0.0209063 +-0.0172261 0.0356447 0.0515267 +-0.0200013 0.0389743 0.053287 +-0.0569508 0.0343746 0.0319473 +-0.0184875 0.0829081 0.0576141 +-0.019368 0.183116 -0.0157888 +-0.0626506 0.153382 -0.0318715 +-0.00943219 0.095325 -0.0330289 +0.0431395 0.100108 0.0121576 +-0.0608162 0.0881975 -0.019441 +0.0357777 0.070014 0.0376374 +0.0505254 0.0735568 0.0151501 +0.0307633 0.0476275 0.0336614 +0.0294554 0.0416168 0.02991 +-0.0611913 0.173613 -0.0615062 +-0.0146115 0.109635 -0.0201085 +0.0379445 0.0686366 0.0354907 +-0.076675 0.154077 0.000107436 +-0.0315189 0.0351239 -0.0306591 +-0.0768434 0.109781 0.0434593 +-0.0522791 0.0490314 0.0356585 +-0.0380005 0.12652 0.0191796 +-0.0861323 0.103534 0.00440203 +-0.0659084 0.106679 -0.0142087 +0.000468869 0.0388702 -0.00172096 +-0.0623487 0.141045 -0.00649873 +-0.0484952 0.0862244 0.0454118 +-0.0685451 0.170527 -0.0328985 +-0.037499 0.101465 0.0412127 +0.0274201 0.0431121 -0.00573463 +-0.0197554 0.158352 -0.00754965 +-0.0567366 0.0753362 -0.0185878 +0.0533817 0.063336 -0.00140725 +0.0135006 0.105771 0.0435499 +-0.0631905 0.166285 -0.0395881 +-0.0932173 0.122834 0.0272862 +-0.0284888 0.0396421 0.053637 +-0.0134794 0.0559661 0.0512091 +-0.04424 0.130203 0.0124253 +0.0196407 0.0940896 -0.0236062 +-0.0625219 0.151129 0.0359075 +-0.0585008 0.0732388 0.0410714 +0.0608111 0.0651191 0.0151635 +-0.0275116 0.0560234 0.0370088 +-0.0127931 0.0799092 -0.038653 +-0.0544725 0.0478754 0.0402183 +-0.0905041 0.147099 0.0259896 +0.0291224 0.0877617 -0.0209279 +0.0381679 0.0993665 0.0307411 +0.00549435 0.0474709 0.0500045 +-0.0842531 0.102059 -0.0016008 +0.0164869 0.128389 0.00575868 +-0.043156 0.162156 -0.0100947 +0.0445553 0.0846952 0.000180444 +0.0409145 0.07739 -0.0077683 +0.0297353 0.111221 -0.00987421 +-0.0220481 0.0379707 0.0182323 +-0.0636401 0.0337302 0.00992182 +-0.0277909 0.0796672 -0.0363416 +-0.0247513 0.0944605 0.0453863 +-0.0291577 0.0733109 -0.0335988 +-0.0264744 0.0486202 0.0485825 +-0.0654948 0.104238 0.0403184 +-0.054309 0.153692 0.0171048 +0.000886988 0.0365316 0.0205866 +0.025787 0.114054 0.0339562 +-0.0624998 0.091833 0.0450322 +-0.0825753 0.107428 -0.000626511 +-0.0879726 0.100935 0.0073995 +-0.0849555 0.110375 0.0243559 +-0.00450509 0.0815118 0.0573962 +0.0411647 0.0886413 -0.00977915 +0.00923376 0.0823418 -0.0323881 +0.0250818 0.0983923 -0.0201688 +-0.0460388 0.0353834 -0.0203139 +-0.0563344 0.154371 0.0236088 +-0.0786725 0.15564 0.0171569 +-0.0174933 0.120917 0.0332266 +-0.0405771 0.0447491 -0.0223069 +-0.0706839 0.0363372 -0.00115986 +-0.0827485 0.134001 0.0496722 +-0.0566419 0.0336495 -0.0102846 +-0.0932956 0.12823 0.014251 +-0.0183957 0.116542 -0.0154107 +0.03698 0.0590759 0.0339965 +-0.0709427 0.132583 -0.00826816 +-0.0697213 0.0778913 -0.0154943 +-0.0222445 0.159024 -0.0114139 +-0.0571999 0.0684533 0.0375014 +-0.04663 0.0533425 -0.0102323 +0.00628325 0.0668147 -0.0324472 +-0.0477443 0.0767654 -0.0182192 +0.000336625 0.0525175 -0.0304496 +-0.0562455 0.0345922 0.0440034 +-0.00249349 0.0474079 0.0491587 +-0.00849662 0.115566 0.0401952 +-0.0346349 0.176996 -0.009991 +-0.0315471 0.0665587 -0.0224416 +-0.0114919 0.121016 0.0357517 +-0.00348929 0.0884115 0.0568027 +-0.0275554 0.0689002 0.0398598 +0.0463861 0.080656 0.0111753 +-0.0335046 0.109774 0.0374515 +-0.0104184 0.179993 -0.0295246 +0.0299649 0.0370453 0.0224182 +-0.0229027 0.109901 -0.0203838 +0.0326144 0.117295 0.0103313 +0.0369028 0.0954111 -0.0108822 +-0.0564742 0.041367 0.0464242 +-0.0770729 0.168746 -0.0303374 +-0.0310065 0.124592 0.0202545 +-0.06762 0.17339 -0.0440641 +-0.0124743 0.0632507 0.0548154 +-0.06879 0.067714 0.0304363 +-0.0188136 0.124392 0.0261122 +-0.0775236 0.155819 0.0175602 +-0.0744868 0.14835 0.0408614 +-0.0798509 0.120721 -0.00541034 +-0.0474977 0.0747299 0.0422594 +-0.0819076 0.08016 -0.00254028 +-0.0104535 0.0366522 -0.0168147 +0.0107598 0.0346122 0.0387698 +-0.0618853 0.158437 -0.0215849 +-0.0248668 0.103031 -0.023615 +0.0521945 0.0697716 0.0245573 +0.0156704 0.0936059 -0.0251021 +0.0371318 0.111041 0.00479819 +-0.0835634 0.0897492 -0.00557879 +0.00648846 0.118239 0.0378444 +-0.0454996 0.0464888 0.0408011 +0.00251072 0.0388788 0.0260522 +-0.0757603 0.10082 0.036651 +-0.072674 0.131225 0.051196 +-0.0107806 0.0770662 -0.0381287 +-0.0336363 0.153436 -0.00674709 +-0.0843022 0.0938821 0.0298739 +-0.00957953 0.177197 -0.0268263 +-0.06621 0.148552 -0.030869 +-0.0367939 0.127143 0.000444502 +0.0450752 0.0819431 0.00117926 +0.00252922 0.0387278 -0.0124032 +0.0124259 0.130345 0.00996559 +-0.039483 0.112566 0.0355031 +-0.0896451 0.11724 0.00430849 +-0.0307561 0.0876495 -0.0285591 +-0.0336555 0.0363317 0.0490618 +0.00481949 0.0349074 0.0372909 +0.0324749 0.095557 0.0400886 +-0.0601974 0.126918 0.041055 +0.0561271 0.0494063 0.0121912 +-0.0663732 0.0796127 0.0418746 +-0.0634873 0.105626 0.040045 +-0.0348887 0.174114 -0.0129217 +-0.0331172 0.123673 -0.00477506 +-0.0158191 0.0855498 -0.0389623 +-0.0630684 0.138136 0.036884 +0.00839558 0.0418967 -0.0238735 +-0.000234213 0.0957245 -0.0313684 +-0.00270805 0.0387067 0.00335713 +-0.0066107 0.0434378 -0.0261152 +0.0267348 0.0889072 0.0458132 +-0.057498 0.0762057 0.0428357 +-0.0559977 0.128155 -0.00607843 +-0.0652856 0.176792 -0.0608019 +-0.0847322 0.10481 0.00139005 +0.0045205 0.0842507 0.0571459 +-0.0540417 0.148675 -0.00217424 +0.00157845 0.0388465 -0.0127005 +-0.0649294 0.123847 -0.00887936 +0.0268943 0.0906576 -0.0219805 +-0.0692389 0.149629 -0.0402111 +0.0424058 0.101483 0.00416631 +-0.069135 0.0354547 0.0122501 +-0.0311414 0.168206 -0.0166543 +0.0247254 0.0405634 0.0363023 +-0.035656 0.0591967 -0.0115208 +-0.0492298 0.13342 0.00108021 +0.0186953 0.0943115 -0.0238444 +-0.0632815 0.159908 -0.0475928 +-0.0744952 0.144184 0.0450216 +-0.0273351 0.0750142 0.0443436 +0.0129485 0.0726239 0.0538836 +-0.0256504 0.178665 -0.00908499 +-0.0152817 0.126335 -0.00175389 +0.0171854 0.035921 0.00432788 +0.00536983 0.0385261 0.026955 +-0.069701 0.0749104 -0.0135814 +-0.0936513 0.125496 0.0142597 +-0.0218218 0.0854612 -0.0381675 +-0.0670338 0.0819342 0.0426575 +-0.0637771 0.0824308 -0.0191299 +-0.0579197 0.0410941 0.0197057 +0.004329 0.114453 -0.0192954 +-0.0743852 0.111313 0.0463698 +0.0153242 0.0566704 -0.0288596 +0.0201589 0.0349933 -0.00358051 +-0.0674387 0.0336478 0.00564073 +0.0380425 0.109755 0.0161689 +0.0214264 0.0348625 -0.00133145 +0.0129483 0.0405423 0.0447572 +-0.00171529 0.0627358 -0.0345403 +-0.0206569 0.0494682 -0.0293042 +0.0369479 0.0784891 -0.0137448 +-0.0877279 0.139146 0.00920485 +-0.0228745 0.0383806 -0.00412065 +0.0407791 0.105635 0.00716484 +-0.0164884 0.161116 -0.0081783 +0.0261701 0.115347 0.0327443 +-0.0171143 0.0393698 0.0395766 +0.0364251 0.0840505 -0.0167267 +-0.0413094 0.0336719 -0.0183114 +-0.00449481 0.0619627 0.0557718 +0.0354002 0.054813 0.0334165 +0.0257124 0.0795754 0.0477924 +-0.0900689 0.132434 0.0392074 +0.0111597 0.124256 -0.00791398 +0.023574 0.105697 0.0395934 +0.0172046 0.061784 0.0493931 +-0.0738846 0.110669 -0.00843945 +0.00601824 0.128477 0.0276707 +-0.0581623 0.155642 0.0142378 +-0.046474 0.0903329 0.04369 +-0.0204963 0.0988407 0.0444811 +0.0448392 0.0847511 0.0231667 +-0.0246346 0.0464142 -0.0272665 +-0.0164056 0.0347921 0.0489909 +-0.048358 0.146267 0.00883601 +-0.0626778 0.0407451 0.0424121 +-0.06586 0.154377 -0.00304604 +0.0375072 0.103901 -0.00584413 +-0.00221994 0.0380783 -0.0146251 +0.00247871 0.110023 0.0425049 +0.0588331 0.0552392 0.0181818 +-0.0156079 0.0352742 -0.0184368 +-0.0112854 0.0344473 -0.0186905 +-0.0170355 0.0338392 -0.0211402 +-0.0137571 0.128142 0.00234571 +0.0353694 0.082169 0.0388786 +-0.065182 0.160968 -0.0576695 +-0.0324895 0.0874934 0.0434306 +-0.0637445 0.0781022 -0.0180675 +-0.0882379 0.0914593 0.00646904 +0.0256941 0.120543 -0.00190068 +-0.0750751 0.149943 -0.025867 +-0.0477253 0.135673 0.0140062 +-0.0678845 0.116524 -0.00880656 +-0.0627671 0.15529 -0.013592 +-0.0588282 0.0408079 0.0456406 +-0.056691 0.0506774 -0.00137882 +-0.0828622 0.0910525 -0.0066104 +-0.0499126 0.0515141 0.0166499 +-0.0490107 0.146266 0.00962371 +0.0122318 0.130219 0.0070475 +-0.0116803 0.0570084 -0.0342026 +-0.0651676 0.167884 -0.0330971 +-0.0730453 0.0699885 -0.00346826 +0.0174821 0.0990004 0.0469682 +-0.0908453 0.133761 0.025216 +-0.0657306 0.150277 -0.0347821 +-0.0671422 0.159475 -0.0561779 +-0.00377564 0.078412 -0.0370359 +-0.0617811 0.042326 0.0146867 +-0.0252077 0.0348536 0.0435448 +-0.028493 0.0602587 0.0370952 +-0.08903 0.119932 0.00232561 +-0.0345174 0.105629 0.0392495 +-0.0234134 0.181486 -0.0190275 +-0.0664685 0.0611724 0.00451786 +0.0367619 0.0414833 0.0270934 +-0.0275613 0.121213 -0.00819283 +0.0347392 0.0848817 0.0397697 +-0.0655835 0.0626949 -0.00273961 +-0.0187525 0.0671388 -0.037784 +-0.0904123 0.13106 0.0392156 +0.0183728 0.0521803 -0.0265242 +-0.0394837 0.113931 0.0345962 +-0.050497 0.0848226 0.0453947 +-0.026736 0.125755 0.00710307 +-0.0284884 0.0890334 0.0453918 +-0.0441667 0.0657175 0.0402548 +0.0109368 0.035027 0.0276086 +-0.0219243 0.0335307 -0.0255712 +-0.0865855 0.100865 0.00437928 +-0.0114057 0.038823 -0.00778731 +-0.0606205 0.136712 0.0351771 +-0.0938957 0.124187 0.0252761 +-0.0877217 0.151511 0.024071 +0.0027861 0.0392982 -0.00725238 +-0.0435747 0.127942 -0.00117905 +0.00626863 0.114136 -0.0189815 +-0.0182416 0.0386382 0.0310248 +-0.065785 0.145733 -0.0198954 +-0.0867571 0.0833567 0.0144816 +0.0263294 0.0517767 -0.02097 +0.0205436 0.0357642 -0.00368285 +-0.0174561 0.0544373 0.0497557 +0.0051136 0.11017 -0.0202785 +0.0320036 0.0972394 -0.014969 +0.018368 0.0537078 -0.0275601 +0.00449367 0.115547 0.0400425 +0.030957 0.0564285 0.0393343 +-0.0480871 0.166778 0.00155196 +-0.0374511 0.122567 -0.00961353 +-0.067466 0.154933 0.00219081 +-0.0645473 0.0334176 0.0010517 +-0.0507826 0.0530079 0.0196214 +-0.0269873 0.0549465 0.0375414 +-0.0318114 0.0361324 -0.0187 +0.0211923 0.12581 0.0217553 +-0.0485738 0.111377 -0.0178292 +-0.0790938 0.10996 -0.003593 +0.0410408 0.0408917 0.00130956 +-0.0171973 0.174198 -0.0240623 +-0.0136738 0.0526181 -0.0325173 +-0.0194987 0.0828823 0.05729 +-0.00149547 0.119691 0.0381347 +0.0125362 0.127772 -0.00169738 +0.00352032 0.0772514 0.0561756 +-0.0037108 0.0392109 0.0335024 +-0.0682887 0.164315 -0.0170259 +-0.0861823 0.107654 0.00936346 +0.0116633 0.0616767 0.0519085 +-0.0828359 0.104706 -0.00261356 +-0.0473623 0.129578 0.0262098 +0.0143608 0.0508459 -0.0270896 +-0.0265586 0.171236 -0.0104749 +0.0203688 0.0459169 -0.020834 +-0.0404996 0.0591463 0.0404229 +-0.0164937 0.0758406 0.0558352 +-0.00649647 0.0898144 0.056995 +-0.070489 0.118975 0.0531649 +-0.0665486 0.169315 -0.0336077 +-0.0869443 0.101766 0.0237835 +0.0413201 0.104267 0.012164 +-0.0705201 0.0646959 0.0221381 +-0.0345088 0.104256 0.0402356 +0.0590657 0.0691634 0.0182335 +0.0274527 0.103904 -0.0160338 +-0.0321732 0.0461161 0.0457813 +-0.0446011 0.0519723 -0.0106716 +-0.0932418 0.125562 0.0272746 +-0.0458642 0.128671 0.00011454 +-0.0885465 0.0902329 0.022415 +-0.0693724 0.136902 0.0471868 +0.0383558 0.102292 -0.0062663 +-0.0638617 0.125566 0.0463833 +-0.017504 0.0870094 0.0567302 +-0.0370734 0.0393951 0.0451959 +0.00329134 0.119473 -0.0147093 +-0.0543235 0.0334648 0.00849253 +0.0274945 0.0381011 -0.00197122 +-0.0703836 0.151592 -0.0450749 +0.0441667 0.0973563 0.00616912 +0.0240844 0.0547426 -0.0237664 +-0.015779 0.0770791 -0.0385675 +-0.0731035 0.0667848 0.0215468 +0.0455074 0.0569933 0.0321208 +-0.0438752 0.128361 0.000408951 +-0.0622566 0.0709345 0.0378148 +-0.0713089 0.156055 0.0109968 +0.0323876 0.047596 -0.00623106 +-0.0610541 0.068813 0.0363796 +-0.0175437 0.119111 -0.0121224 +-0.0136792 0.0541002 -0.0332811 +-0.0477406 0.135604 0.0113959 +-0.0709176 0.112214 -0.00951227 +0.0301974 0.0887542 -0.0200097 +-0.0734581 0.168 -0.0440151 +-0.0685258 0.165031 -0.0185494 +-0.0264962 0.0690788 0.0415599 +-0.0249134 0.0383716 -0.00452352 +-0.086697 0.114875 0.0460769 +-0.0752073 0.156095 0.0183637 +-0.0189411 0.0376177 0.0530488 +-0.0634886 0.064446 0.0291098 +-0.0261594 0.066324 0.0406106 +-0.0142604 0.0974009 0.0506069 +-0.0316679 0.0763713 -0.0315414 +-0.040787 0.0855384 -0.021437 +0.0590343 0.06983 0.00945078 +-0.07763 0.165322 -0.0259443 +-0.0631195 0.176032 -0.0554618 +-0.0918958 0.129686 0.0292517 +-0.029505 0.0545565 0.0362962 +-0.0356809 0.123888 -0.0070042 +0.0421291 0.070468 -0.00580336 +0.0297749 0.0920783 -0.0194766 +-0.0415439 0.148326 -0.00168489 +-0.090059 0.136447 0.0142016 +-0.0555057 0.0946 0.044463 +-0.0945025 0.125547 0.0202583 +-0.0304869 0.0532061 0.0367531 +0.00830607 0.0917456 -0.031199 +0.0182274 0.125477 -0.00123802 +0.0138055 0.0712841 0.0533593 +0.0294478 0.0506302 0.0370841 +-0.0802909 0.104732 0.0311813 +0.0308738 0.115323 0.0282321 +-0.0889738 0.137888 0.0281941 +-0.0750897 0.149941 -0.0248696 +0.0395014 0.0469731 0.0315971 +-0.0599935 0.0586398 0.0172334 +-0.0790056 0.166641 -0.0359617 +-0.00233373 0.114874 -0.0177321 +-0.0241436 0.180147 -0.0104229 +-0.0746876 0.0700138 0.0272066 +-0.00503592 0.13043 0.00494647 +-0.069435 0.179317 -0.0579979 +-0.0896062 0.137812 0.0131974 +-0.0625358 0.155244 -0.0346054 +-0.071543 0.155755 0.00800576 +-0.0746181 0.165272 -0.019163 +-0.0386347 0.0548667 -0.0110053 +0.00350742 0.103001 0.0436938 +-0.0629079 0.15056 -0.0255866 +0.0200283 0.0371524 -0.00668325 +-0.0375331 0.127856 0.0134298 +-0.075576 0.155851 0.0124034 +-0.0145239 0.118305 0.0371093 +-0.0528711 0.15259 0.0147483 +-0.0639569 0.158297 -0.0475943 +-0.0437953 0.0869983 -0.0218056 +0.0183 0.0651194 -0.0285252 +0.0410434 0.0689808 -0.00777311 +-0.0391241 0.157933 0.00465789 +-0.0617079 0.155317 -0.0205813 +0.049194 0.055373 0.030576 +-0.0577821 0.0826022 -0.0210434 +0.00750154 0.123796 0.0339733 +-0.0844011 0.0777797 0.0105147 +-0.0508742 0.137048 0.0234112 +-0.0487311 0.13178 0.0269763 +-0.0224768 0.123487 0.0248086 +0.0572102 0.0550739 0.00417234 +0.0523558 0.0647992 0.0281407 +-0.0804668 0.131637 0.0521945 +0.0276827 0.0480336 -0.0156964 +-0.0121824 0.178673 -0.0292354 +-0.0228778 0.10587 -0.0225138 +-0.0644637 0.0743344 0.0396953 +-0.0655821 0.153706 -0.0431373 +-0.0176845 0.0525387 -0.0318817 +0.0256228 0.0363687 8.49366e-07 +-0.0208533 0.0866413 0.055877 +-0.0490886 0.157599 -0.00632625 +0.00958152 0.0417197 0.0451866 +-0.0135001 0.0800899 0.0570677 +-0.0885594 0.112819 0.0222051 +0.0440561 0.0945388 0.0201582 +0.00630898 0.0624816 -0.0315869 +-0.0560997 0.155362 -0.00113519 +-0.0238123 0.0867774 -0.0372362 +-0.0711896 0.155374 -0.0449035 +0.018728 0.0549999 0.0480114 +-0.0696134 0.172257 -0.054028 +-0.00359831 0.101107 0.0440537 +-0.033095 0.0723179 -0.02347 +0.0338305 0.107861 -0.00824999 +-0.0354812 0.0383051 -0.00290933 +-0.0238593 0.0838986 0.0547079 +0.0239371 0.103424 0.0418106 +-0.076687 0.14724 -0.00686649 +-0.0113442 0.129847 0.0112634 +-0.0595215 0.131137 0.0385262 +-0.00250336 0.0633801 0.0564795 +-0.0765967 0.152807 -0.00988734 +0.00617007 0.126444 0.0306412 +0.0264293 0.0400385 -0.00421056 +-0.0261224 0.165258 -0.0166522 +-0.00669164 0.129496 0.00145082 +-0.0531001 0.154605 -0.00338641 +0.0347186 0.113797 0.00249877 +-0.0746345 0.0660496 0.0075612 +-0.0897609 0.0915993 0.0164407 +-0.0848984 0.0965537 0.0289739 +-0.0217829 0.111029 -0.0195757 +-0.0890662 0.123985 0.0032876 +0.0609254 0.0637423 0.0131584 +-0.0495476 0.147557 -0.00269468 +-0.00609162 0.0391352 -0.0126175 +-0.047607 0.144918 0.0010701 +-0.0484709 0.165547 -0.00491912 +0.0489576 0.0466396 0.0248167 +-0.0391315 0.160685 -0.012118 +-0.0530423 0.14778 0.0224018 +-0.0471085 0.0683456 0.0397676 +-0.0785029 0.128864 0.0532728 +0.0368255 0.109713 0.0241821 +0.0163171 0.0686116 0.0516854 +-0.0729482 0.0914984 0.0411605 +-0.0805357 0.113778 0.0465863 +0.0302378 0.0727042 0.0419554 +-0.0625354 0.122703 0.0447625 +-0.0615083 0.170965 -0.0565878 +-0.0124852 0.0659775 0.0542376 +0.0219313 0.0605513 0.0474343 +-0.048186 0.135579 0.00839494 +-0.014696 0.0585192 -0.0354314 +-0.0818834 0.109932 0.0368633 +-0.0564976 0.101562 0.0427397 +-0.0692156 0.0343564 -0.00463486 +-0.0924819 0.125444 0.00927262 +-0.0116015 0.0406252 -0.0263738 +0.000388646 0.0448955 -0.0263577 +-0.0474886 0.05462 0.0367747 +-0.0150651 0.12575 -0.00315467 +-0.0225002 0.104414 0.0430095 +-0.016108 0.038364 0.00641286 +-0.0474972 0.105664 0.0404447 +0.053572 0.0650953 0.0274823 +-0.068963 0.0874301 0.0429809 +-0.0206158 0.0422474 -0.0286271 +-0.0745126 0.131657 0.0521168 +0.0246516 0.122175 0.000230276 +-0.00982514 0.16696 -0.0220459 +-0.00885716 0.0385311 0.024037 +-0.0568241 0.063612 0.0312362 +-0.0787856 0.109366 0.039802 +0.0392221 0.075321 0.0338531 +-0.0725057 0.102685 0.0380563 +0.0318729 0.0380045 0.0237472 +-0.0704322 0.13832 0.0474328 +-0.0325018 0.177105 -0.00443384 +-0.0226059 0.0381278 0.0251854 +-0.00949201 0.129843 0.00617837 +-0.00878563 0.110674 -0.0212403 +0.0347324 0.0882263 -0.0174421 +-0.046782 0.0841151 -0.0215173 +-0.0692662 0.0692944 0.0324707 +0.00925419 0.0696192 -0.0318888 +-0.0303184 0.0423041 0.0510935 +-0.0780856 0.0784826 -0.00760345 +0.0256389 0.0929167 0.0460121 +0.00457646 0.108164 0.0418882 +-0.0519222 0.0461016 0.019678 +0.00234204 0.0367065 0.0225428 +0.0457266 0.0847913 0.00519644 +0.0292205 0.0857953 -0.020938 +-0.0196964 0.0384682 0.0290787 +0.0127826 0.0926962 0.0520031 +0.0390362 0.0980073 0.030266 +0.0186124 0.127837 0.0122439 +-0.0535608 0.0430661 -0.00900679 +-0.0509276 0.0346131 0.0417321 +0.0233086 0.0634336 -0.024957 +0.00850697 0.0546686 0.0524774 +-0.0275662 0.123979 -0.00112939 +-0.0688326 0.13265 0.047942 +0.0112159 0.0922395 -0.029689 +0.00233442 0.0539469 -0.0306143 +-0.0446508 0.040942 -0.0182992 +-0.00948977 0.114167 0.0408028 +0.0254079 0.10205 -0.0180571 +-0.0850056 0.146006 0.00617966 +-0.00850241 0.0870443 0.0572609 +0.0097783 0.1251 0.0319006 +-0.0222638 0.126605 0.016039 +-0.0722117 0.0348867 0.00176609 +-0.0327045 0.111423 -0.0179721 +-0.057835 0.0897878 -0.0213715 +-0.076573 0.153595 0.0311713 +0.0595629 0.058084 0.0191786 +-0.0323163 0.155148 0.000487548 +0.0120506 0.0505153 0.0488388 +-0.0524497 0.140085 0.0234103 +-0.0325359 0.172727 -0.00270207 +-0.0711683 0.149278 -0.039104 +-0.0641214 0.155412 0.0266328 +0.0288394 0.112544 -0.00929606 +-0.0217358 0.0384567 0.028668 +-0.0719124 0.168014 -0.0470137 +-0.0448486 0.0351369 -0.0234128 +0.0159855 0.12897 0.0112743 +0.0311432 0.0373381 0.0223917 +-0.000793766 0.0867716 -0.0355698 +-0.0900654 0.132428 0.033223 +-0.0935895 0.122834 0.0262964 +-0.0520638 0.0723523 0.0405753 +-0.0111299 0.129809 0.0171219 +-0.0491641 0.0344528 0.0317811 +-0.0849325 0.0938555 0.0290926 +-0.0809703 0.132422 -0.00393108 +-0.0887798 0.140493 0.0370948 +-0.0577868 0.0840301 -0.0211707 +-0.0814849 0.0872077 0.0329213 +0.0191348 0.102061 0.0453843 +0.0573171 0.0523102 0.00718519 +0.039991 0.0847392 0.0332858 +-0.0668403 0.0335301 0.004077 +-0.0117893 0.0392416 0.0372019 +0.0216437 0.120011 -0.00733339 +-0.0125093 0.0883992 0.0567932 +-0.0378236 0.125803 -0.00505851 +-0.0750347 0.154671 0.0286993 +-0.0887093 0.112351 0.0387402 +-0.0638899 0.102518 -0.0176142 +-0.0600535 0.138395 -0.00620678 +-0.0103882 0.129888 0.00873113 +-0.0610188 0.119808 0.0416066 +0.0158574 0.104091 -0.0202309 +-0.0839121 0.122095 -0.00374203 +-0.0841686 0.143365 0.0409129 +-0.00166671 0.12799 -0.00382866 +-0.0434723 0.0647942 0.0406198 +0.0406639 0.0815903 -0.00978474 +-0.0652464 0.154114 0.00157024 +-0.0257535 0.0740897 -0.0368116 +-0.0739579 0.13841 -0.00677972 +-0.0288788 0.0592582 -0.0244095 +0.0093177 0.0926652 -0.0301396 +-0.0452267 0.150119 -0.00491516 +-0.0319894 0.0384633 -0.00603174 +-0.0794952 0.0854073 -0.00956797 +-0.0675492 0.129835 0.0480321 +-0.0523266 0.033478 -0.00194369 +-0.00450192 0.0718383 0.058171 +-0.0535372 0.0578641 0.0215172 +-0.0140108 0.0596764 0.0527295 +-0.000532268 0.111266 -0.0199168 +0.0523683 0.0540101 0.0281247 +0.0211966 0.123092 -0.002693 +-0.00468835 0.0598784 -0.0344633 +-0.0718785 0.102239 -0.0132694 +-0.0678239 0.15109 -0.0436673 +0.0350895 0.0686836 0.0383949 +0.0422361 0.101506 0.0151693 +0.0317521 0.0794454 -0.0197442 +-0.0577724 0.0796775 -0.0200459 +-0.0461631 0.0335506 -0.0117706 +-0.0827169 0.105982 0.0279083 +-0.0922534 0.122854 0.0424865 +0.0128317 0.0712714 0.0536973 +-0.0126798 0.126321 -0.00380105 +-0.00116162 0.0980337 0.0521962 +-0.0814909 0.0788596 0.028943 +-0.0501013 0.15611 -0.00554414 +0.00939521 0.0609325 -0.0302492 +-0.030101 0.160758 -0.0141091 +-0.031497 0.117989 0.0308563 +0.0231755 0.0916964 -0.0230758 +0.0434109 0.0987186 0.0151565 +-0.0514982 0.108428 0.0386132 +-0.0644896 0.0833289 0.0440861 +-0.0238622 0.101613 -0.0238665 +0.04258 0.0422624 0.0239479 +0.0354547 0.103863 -0.00997386 +0.0217345 0.0994968 0.0456553 +-0.0743457 0.168929 -0.0264214 +0.01504 0.0343531 -0.00213727 +0.00148487 0.0399885 0.0464307 +0.0273636 0.0699427 0.0430425 +-0.0548013 0.086928 -0.0216118 +-0.0729344 0.0901459 0.0411907 +0.0305961 0.110839 -0.00946183 +-0.0721093 0.0846859 0.0405598 +-0.067036 0.180898 -0.0568882 +0.0496382 0.068363 0.00147832 +-0.0149904 0.165173 -0.0188028 +-0.0928971 0.117368 0.0123132 +-0.000378579 0.101174 0.0451223 +-0.00167056 0.0392225 0.0339103 +0.0308479 0.0567691 -0.0158074 +0.00821609 0.0823703 -0.0328688 +0.0179771 0.0393777 0.0432522 +-0.0917891 0.141969 0.0171701 +0.0284614 0.0398271 -0.00325429 +-0.0273719 0.0335777 -0.022929 +-0.0799767 0.138308 -0.00390962 +0.0224205 0.0519815 -0.0241272 +-0.0206006 0.0393656 -0.0285093 +-0.075081 0.147222 -0.0118498 +-0.0748806 0.0992858 -0.0126164 +0.0126717 0.127043 -0.00291981 +-0.0321779 0.0474216 0.0442941 +0.0248435 0.0822524 0.0483141 +-0.087169 0.0964235 0.0255876 +-0.00114332 0.0356309 -0.0159104 +-0.0674627 0.138295 0.0446438 +-0.0656974 0.169193 -0.0361564 +-0.065794 0.155512 0.00862557 +0.0346025 0.0754478 0.0394941 +-0.0145323 0.043279 0.0510718 +-0.0739879 0.139879 -0.00672352 +-0.0921938 0.132347 0.0162256 +-0.077508 0.174998 -0.0490226 +-0.0161182 0.180144 -0.0199393 +0.0442692 0.0973579 0.00816486 +-0.0885535 0.112746 0.0331115 +-0.0527601 0.0447727 0.0186838 +-0.0301237 0.12585 0.013192 +-0.0359512 0.151053 -0.00163407 +-0.0579079 0.121934 -0.00872095 +-0.0709562 0.158172 -0.0439179 +-0.00996463 0.114432 -0.0172214 +-0.0308542 0.0986541 -0.0229751 +-0.0199407 0.0381449 0.0130842 +-0.0439068 0.129921 0.011069 +0.0290675 0.120111 0.00471365 +-0.0203588 0.175699 -0.0155519 +0.0542673 0.0491964 0.0212031 +-0.0348545 0.0986254 -0.0227182 +0.0413986 0.0830578 -0.00877387 +-0.0554939 0.0477978 0.0398952 +-0.0760774 0.166574 -0.0390172 +0.0438486 0.0846749 0.0261721 +0.0021495 0.0388151 -0.00319944 +0.04114 0.104231 0.00317036 +0.0165359 0.0912212 -0.0265781 +-0.0518469 0.0545626 0.0286406 +-0.0568589 0.0562507 0.00563881 +-0.0383911 0.127983 0.00280515 +-0.0857603 0.130763 -0.000714461 +-0.0173678 0.0389666 0.0345056 +-0.0266954 0.125077 0.00273937 +0.0143393 0.0349605 0.0410018 +0.0132369 0.0709965 -0.0314873 +-0.0317622 0.0338243 0.0127586 +-0.0767072 0.0724697 0.0281768 +-0.0694593 0.040787 -0.000292884 +0.013984 0.129601 0.0176686 +-0.00527436 0.124342 -0.0098488 +-0.0749724 0.149924 -0.0268701 +-0.0188238 0.0855077 -0.0385626 +-0.0577531 0.141417 -0.00374252 +-0.0506075 0.0335251 -0.00346549 +-0.0105008 0.103039 0.0436514 +-0.062498 0.0847471 0.0443617 +-0.0166725 0.0495705 -0.0306349 +-0.0368813 0.108512 -0.0198737 +0.0510305 0.0733741 0.0168194 +-0.0275083 0.112548 0.0360564 +-0.0636421 0.0627085 -0.00368166 +0.0411669 0.104244 0.0141607 +-0.00149973 0.0965741 0.0536819 +-0.0288186 0.0862428 0.0454609 +-0.0526183 0.0343668 0.0293685 +-0.0601235 0.15512 0.0251504 +-0.0378644 0.111663 -0.0181901 +0.0344602 0.0726275 -0.0157808 +-0.0144826 0.0530653 0.0501401 +-0.0700881 0.131265 0.0496481 +-0.0878883 0.0914318 0.00546674 +-0.0415923 0.0491549 -0.0111971 +0.0234288 0.0618809 0.0460892 +-0.0630663 0.151874 -0.00782908 +-0.0866506 0.128453 0.0480393 +-0.0781275 0.152854 0.000107941 +-0.0106285 0.174518 -0.0286758 +-0.0596993 0.0345337 0.0416145 +-0.0579832 0.0466328 -0.00336399 +-0.0265008 0.124041 -0.00116405 +-0.0254725 0.0400777 0.0541415 +-0.0178664 0.12824 0.013233 +-0.0206926 0.0385034 0.0288434 +-0.0534934 0.0747559 0.0420439 +-0.0652623 0.158339 -0.0115587 +-0.0767656 0.152802 -0.00889022 +0.0245199 0.0520168 0.0405174 +0.0264125 0.0450979 -0.0096842 +-0.012488 0.107228 0.0430572 +-0.078668 0.170753 -0.0430283 +-0.0625286 0.164689 -0.038593 +-0.0241791 0.159685 -0.00173809 +0.00849261 0.092349 0.0531984 +-0.0759472 0.132533 -0.00707033 +-0.0806057 0.0720192 0.00754007 +0.00646347 0.117501 -0.0166002 +-0.0178266 0.0947205 0.0526193 +0.000481761 0.10723 0.0430499 +-0.013526 0.162053 -0.0127433 +-0.0186103 0.042208 -0.0281438 +-0.0252891 0.0336623 -0.0225985 +0.00751041 0.0688465 0.0554032 +0.0252903 0.0675893 -0.0238235 +-0.065902 0.112354 -0.012152 +-0.0476622 0.0620749 -0.0123691 +-0.0940806 0.122789 0.0152778 +-0.0229201 0.115998 -0.0147881 +-0.0344826 0.0519106 0.0380623 +-0.0890068 0.11621 0.0451247 +0.0107555 0.0404168 0.045078 +-0.0894686 0.136415 0.011209 +-0.0757697 0.145819 -0.00688494 +-0.071833 0.152571 -0.043913 +0.0235861 0.0352777 0.0154316 +-0.0926495 0.129588 0.0122381 +-0.0647445 0.0780775 -0.0178137 +-0.00582898 0.0896214 -0.0360418 +0.0559073 0.0721087 0.0082759 +-0.0261702 0.0823861 0.0514348 +-0.0558857 0.0970202 -0.0212239 +-0.0630553 0.148575 -0.0182369 +0.00714931 0.123902 0.0338795 +0.0304322 0.0902625 -0.0195701 +-0.0137593 0.0388335 -0.0101314 +0.0427673 0.0818692 0.0284169 +-0.0651233 0.155698 0.0103085 +-0.0897032 0.113874 0.0229056 +-0.0447211 0.129823 0.00637961 +-0.0575 0.0588269 0.0212602 +0.0104936 0.11823 0.0368787 +0.0202805 0.12337 -0.00295598 +-0.0340138 0.155107 0.00155033 +0.0602047 0.0622908 0.0181797 +-0.0859874 0.153017 0.0132012 +0.0433237 0.0846089 -0.00479162 +-0.0678527 0.0937535 -0.0166708 +0.0608755 0.0651235 0.0141559 +-0.0737739 0.0878479 -0.0153893 +0.0296171 0.11988 0.0191943 +-0.00324005 0.038276 0.0477168 +-0.0806315 0.139432 0.0474021 +0.0455013 0.0583861 0.0319381 +-0.0740734 0.172255 -0.0349568 +0.0224678 0.0975265 0.046211 +-0.0525514 0.0389481 -0.0113995 +0.0281531 0.119463 0.0257844 +-0.0765864 0.155527 -0.0189073 +-0.0289503 0.0931616 -0.025199 +-0.0573663 0.0338673 0.0217593 +0.0396386 0.064502 0.0326274 +0.00539495 0.0433546 -0.0245866 +0.0256558 0.0782254 0.0477034 +0.0162437 0.0764684 -0.0291666 +0.0272037 0.100805 0.0412523 +-0.0316694 0.0357391 0.0272619 +-0.0623836 0.163119 -0.0315939 +0.0275463 0.095549 0.0435012 +0.0393856 0.0475887 -0.00567863 +-0.0394934 0.163848 0.00245451 +0.0242993 0.0928305 -0.0222726 +-0.0271788 0.0358787 -0.0194139 +-0.0734977 0.124615 0.0532793 +-0.0883817 0.123968 0.00128346 +-0.0257849 0.174205 -0.0110873 +-0.0281104 0.163768 -0.0157424 +-0.0662143 0.0386042 0.0318887 +-0.0109132 0.103533 -0.0236899 +-0.0616548 0.140062 -0.00630976 +-0.060057 0.135486 -0.00665791 +0.0434691 0.0624283 0.0290897 +-0.0236196 0.0436733 -0.0286374 +0.043495 0.0610671 0.0301862 +-0.0910584 0.133686 0.0122173 +0.0291029 0.0938741 -0.0193597 +-0.0261534 0.0383869 0.0314189 +0.00850666 0.0896726 0.0548038 +-0.0247527 0.0340557 -0.0209813 +-0.0186132 0.0436215 -0.0279143 +-0.0124858 0.0911558 0.0565265 +0.0053433 0.0524636 -0.0297405 +0.0403239 0.0999619 0.0261672 +-0.0522155 0.149331 0.0183918 +-0.0534968 0.0973516 0.0432358 +-0.0284959 0.10431 0.0415782 +-0.0908913 0.139194 0.0171389 +0.0264487 0.0948748 -0.0204583 +-0.0834511 0.149763 0.0335021 +-0.00425208 0.0941246 -0.0337645 +-0.0337113 0.0652961 -0.0165207 +-0.0405229 0.128682 0.00643622 +0.025364 0.0547555 -0.0216571 +0.0209176 0.124997 0.0245115 +0.0147936 0.104084 -0.0202238 +-0.0510936 0.156101 -0.00485677 +-0.00104637 0.116277 -0.0172455 +-0.0564804 0.0613799 -0.00459099 +-0.0261657 0.11885 -0.0117616 +-0.0612216 0.155927 0.0131437 +-0.0264503 0.181668 -0.00853376 +0.0163083 0.0594423 -0.028212 +-0.0188061 0.081321 -0.0390856 +-0.0660982 0.156586 -0.0534726 +-0.0596936 0.155857 0.0122367 +-0.0656404 0.0608118 0.00501538 +0.00550383 0.0716948 0.0562222 +-0.0473457 0.134062 0.00939848 +0.0233312 0.0436331 0.0404882 +0.0342215 0.0827959 -0.0185003 +0.00407718 0.131556 0.00833758 +-0.0524976 0.0931679 0.0439324 +-0.0206125 0.0553712 0.0467047 +-0.0499367 0.0345722 0.0419808 +-0.0720303 0.169416 -0.0480254 +0.0463102 0.0820482 0.0101764 +0.0239273 0.0383233 0.0327312 +-0.0556472 0.0657358 0.0349277 +0.0082124 0.0879974 -0.0324239 +-0.0483251 0.123967 0.0299918 +-0.00979541 0.0826872 -0.0380854 +-0.0104818 0.0688481 0.0551963 +-0.0738713 0.116445 -0.00712552 +-0.0783268 0.0804305 0.0341941 +-0.0318616 0.0386777 -0.0303614 +-0.0685663 0.0335043 0.000153325 +0.0419445 0.0972272 0.0251571 +-0.0324967 0.0831278 0.0417023 +-0.0385753 0.165326 0.00202421 +-0.0574991 0.105703 0.0407441 +-0.0735089 0.120392 0.0535609 +-0.0194999 0.105809 0.042534 +-0.0918084 0.11461 0.0202058 +0.0373089 0.0604869 0.0345236 +-0.0397982 0.0885212 -0.0227204 +-0.0838603 0.0771078 0.0156983 +-0.0683511 0.16683 -0.0228013 +0.00825384 0.0357096 0.0264477 +-0.0487592 0.0797294 -0.0200154 +-0.067984 0.13847 -0.00792156 +-0.0205709 0.127392 0.00935219 +0.0158596 0.0940217 0.0494261 +-0.00476401 0.100643 0.0463697 +-0.0144795 0.0617481 0.0535104 +-0.0635003 0.0931972 0.0443921 +-0.06148 0.0371866 -0.00855801 +-0.0235696 0.0368882 0.0541538 +-0.00084278 0.129714 0.0251926 +-0.0857238 0.0792489 0.0165033 +-0.00382707 0.0868147 -0.0366286 +-0.0623716 0.0433162 0.04063 +-0.0481783 0.127343 -0.00452632 +0.0258208 0.0577421 -0.0227411 +-0.0464997 0.109825 0.0383354 +-0.0632202 0.150553 -0.0275915 +0.0594014 0.060828 0.00515272 +-0.0379322 0.0359407 -0.029738 +-0.0628566 0.163115 -0.0590591 +0.032875 0.0504741 0.0332188 +-0.0798256 0.114817 -0.00349908 +0.00979876 0.0631089 0.0545118 +-0.00479883 0.0826783 -0.0376925 +-0.0586564 0.152453 0.0326111 +-0.0847868 0.0979024 0.0288114 +-0.0248237 0.0853842 -0.0372699 +-0.00156343 0.13088 0.0191419 +-0.0624949 0.0729745 0.0395167 +-0.0208752 0.105853 -0.0224653 +0.0381305 0.0743398 -0.0117665 +0.00679871 0.128004 -0.00391746 +-0.0769289 0.125211 -0.00745968 +-0.0251918 0.111615 -0.0181703 +-0.0538836 0.0984784 -0.021806 +-0.0535445 0.0444164 -0.0080927 +0.0449223 0.0903552 0.00117592 +0.00748556 0.116867 0.0384917 +0.0479919 0.0426572 0.0134999 +0.0269115 0.116892 -0.00595645 +0.0287509 0.0911639 -0.0204971 +-0.00583539 0.0910195 -0.0356702 +0.0122548 0.126063 0.0299441 +-0.0732964 0.0791377 0.0376894 +-0.0578898 0.108324 -0.0176181 +-0.0316803 0.111369 -0.0179291 +-0.00248889 0.101618 0.0440339 +0.0583601 0.0593964 0.0227402 +-0.0568793 0.105485 -0.0183902 +0.0313941 0.108732 0.0332945 +-0.0104953 0.0801622 0.0580036 +-0.0799858 0.150056 0.000166757 +-0.0448968 0.146123 0.00263093 +-0.0595037 0.0344238 0.0383245 +-0.0836036 0.133464 -0.00169527 +-0.0115063 0.0575113 0.0530742 +-0.0112578 0.037897 0.0501369 +-0.0404967 0.071918 0.0419528 +-0.024201 0.0373653 0.0542269 +-0.063129 0.0366622 0.0429743 +0.0461067 0.069238 0.0238359 +-0.0217169 0.0945664 0.0494448 +0.0519577 0.0621966 0.0293389 +0.0286828 0.072686 0.0432253 +0.0389262 0.103315 -0.00332456 +-0.0908979 0.126784 0.00627265 +-0.0604951 0.097348 0.0432235 +0.00320361 0.0838721 -0.0343861 +-0.0615214 0.155998 0.0173864 +0.0174482 0.090927 -0.0262636 +-0.0428815 0.108469 -0.0193857 +0.0528827 0.0476533 0.00520477 +-0.0692155 0.155426 0.0044718 +-0.0116319 0.126956 0.0271535 +0.0555832 0.0661715 0.0258304 +-0.0669079 0.139705 0.0437201 +0.0208911 0.120687 0.0321527 +-0.0692559 0.157013 -0.00287665 +-0.0642658 0.131126 0.0422113 +-0.00350345 0.108655 0.04343 +0.00595359 0.131311 0.0061803 +-0.0652676 0.179645 -0.0602668 +0.0113097 0.0609536 -0.0296395 +0.0202287 0.0385462 -0.010699 +-0.0528896 0.0556157 0.0124842 +-0.0830831 0.152763 0.0275295 +-0.0929926 0.121477 0.0272936 +-0.0679169 0.115123 -0.00939662 +-0.0715189 0.150138 -0.0417489 +0.0502478 0.0496891 0.0267596 +-0.088826 0.122625 0.00229599 +0.045739 0.0876044 0.00618298 +0.0276204 0.0364605 0.0224657 +0.0550864 0.0576626 -0.000774412 +-0.0601415 0.0397484 0.0187938 +-0.0467117 0.131872 0.0218067 +-0.00211002 0.131247 0.0146415 +0.0400335 0.107013 0.011165 +-0.0875275 0.141918 0.0101858 +-0.0321386 0.0511687 -0.0124242 +-0.05996 0.047085 0.0381143 +-0.0771576 0.158311 -0.0229061 +-0.0910473 0.139231 0.0181913 +0.0586943 0.0552354 0.0191792 +0.0541025 0.0616928 -0.00172111 +0.0193458 0.0347743 -0.00166328 +-0.0785503 0.175004 -0.046006 +0.0361753 0.0767902 0.0382584 +-0.00218115 0.0950603 -0.0327048 +-0.00446475 0.03907 -0.00848801 +-0.0509412 0.0543847 0.0317288 +-0.031974 0.126184 0.0154629 +-0.0517139 0.047497 0.0206563 +0.0390432 0.106963 0.0211652 +-0.0661031 0.169296 -0.0348743 +-0.0461189 0.0353483 0.0438447 +-0.0618314 0.155872 0.0114752 +-0.0414861 0.169687 0.00162271 +-0.0640913 0.154089 -0.00821335 +-0.0474977 0.0776489 0.0433419 +-0.000495324 0.0870356 0.0569136 +0.0572432 0.0508915 0.0131865 +0.0162675 0.0348087 0.0361219 +-0.0561497 0.0697401 0.0384165 +-0.0632023 0.166731 -0.0605917 +-0.0297129 0.0382953 0.00190139 +-0.00511763 0.0345398 -0.0175639 +-0.0614326 0.0342559 0.0293559 +-0.0526737 0.0678526 -0.0129346 +0.0213104 0.092205 -0.0236008 +0.0197097 0.119321 0.0339587 +-0.0214979 0.120818 0.0311972 +0.0121652 0.0940439 -0.0275601 +0.0264769 0.122884 0.00946172 +-0.0236707 0.0536853 -0.0289139 +-0.0413464 0.0470648 -0.0139804 +0.0254796 0.122858 0.0219249 +-0.0924012 0.125564 0.030262 +-0.0879683 0.133795 0.0435491 +-0.0521211 0.0500618 0.0133132 +-0.0655655 0.115703 0.0473772 +-0.0739163 0.0808829 -0.0136046 +-0.0678507 0.166619 -0.0550103 +-0.0116556 0.127143 -0.00273206 +-0.0318682 0.101497 -0.022474 +-0.0710899 0.143489 -0.012899 +-0.0174739 0.0587291 0.0509898 +-0.0238083 0.125586 0.00234805 +-0.0296624 0.0691842 -0.029462 +0.00123889 0.0998292 0.0485145 +-0.0648099 0.0910089 -0.0186372 +-0.0624633 0.170945 -0.051605 +-0.0911968 0.145718 0.0253129 +-0.0208075 0.0827095 -0.0389174 +-0.0156288 0.184043 -0.0262877 +0.0422094 0.0873179 -0.00779978 +0.00273738 0.0943137 -0.0318997 +-0.082233 0.0925905 0.0320729 +-0.0782161 0.110396 0.044452 +-0.0842181 0.153993 0.0196689 +-0.00949468 0.0532459 0.0520833 +-0.0867806 0.115997 0.0469199 +-0.0547757 0.0826557 -0.0215494 +-0.0382309 0.0365042 0.0436563 +0.021227 0.0727783 0.05004 +-0.00441949 0.0338393 -0.022426 +-0.0712771 0.0648585 0.00216525 +-0.0364976 0.111093 0.0360234 +-0.0669244 0.123843 -0.00898539 +-0.0178669 0.0554748 0.0496143 +0.020489 0.0906324 0.0482147 +-0.00549595 0.0605287 0.0555985 +-0.0289733 0.0536405 -0.0223788 +0.0191474 0.0435971 0.0432171 +0.00434602 0.0346139 0.0410512 +-0.0400219 0.111533 -0.0180322 +0.012127 0.0534588 0.0507501 +0.0284176 0.0415874 -0.00471776 +-0.0270737 0.125279 0.00405866 +-0.0221888 0.0348068 0.0442295 +-0.0447592 0.0797381 -0.0197229 +-0.0304968 0.172715 -0.00561384 +-0.0762362 0.0865455 -0.0135615 +0.0197685 0.0371215 -0.00768223 +0.0379293 0.0417908 0.0270611 +-0.0809612 0.0747382 0.0015261 +0.00168043 0.0346784 0.042239 +0.0257721 0.0915784 0.0461947 +-0.0898405 0.133789 0.0312158 +-0.0355388 0.0441134 -0.0275262 +0.00710192 0.0379595 0.027814 +-0.0620019 0.0401372 0.0237075 +0.0429025 0.100097 0.0151567 +-0.00267325 0.0569172 -0.0326724 +-0.0285904 0.110146 -0.0186081 +-0.0762074 0.0906406 -0.013533 +0.0535161 0.0677623 0.0259787 +-0.00262958 0.0466399 -0.0290845 +-0.0839307 0.125043 -0.00388859 +-0.0340047 0.0386047 -0.0302796 +0.0184751 0.082463 0.0515958 +-0.0574796 0.115365 0.0367006 +-0.0420623 0.154724 -0.00848194 +-0.0860758 0.0924352 0.0274562 +-0.0930739 0.122895 0.0382751 +0.051883 0.0734548 0.0112114 +-0.0811474 0.0769537 0.0251701 +-0.0618709 0.0338217 0.0137712 +0.0195119 0.0370935 -0.00868114 +0.00449835 0.0590783 0.0547231 +-0.0645467 0.148975 -0.0280488 +0.0404587 0.0426892 0.0267677 +-0.0712073 0.146616 -0.0240304 +-0.0512571 0.0488673 0.0206327 +-0.00789661 0.098211 -0.0280331 +-0.0821992 0.0980013 0.0318751 +0.0249936 0.037232 0.0266864 +-0.00349731 0.0456721 0.0469862 +0.0464132 0.0472054 -0.00271728 +-0.0659208 0.0390922 0.037189 +-0.0655814 0.167928 -0.031824 +-0.0726143 0.1704 -0.0286759 +-0.032982 0.0423452 0.0495212 +-0.0442602 0.153622 0.00782588 +0.0320708 0.117667 0.00585111 +0.0181014 0.0354956 -0.0136744 +-0.0756189 0.168382 -0.0269354 +-0.0302725 0.114038 -0.0167089 +-0.06455 0.166996 -0.0328772 +-0.0136948 0.125921 0.0278767 +-0.0594946 0.0973472 0.0432255 +-0.0660053 0.138467 -0.00776776 +-0.0538886 0.161243 -0.000916627 +-0.0521229 0.0491646 0.0356345 +-0.0669695 0.167967 -0.0280306 +-0.0692702 0.0635509 0.00193084 +-0.057893 0.109749 -0.0172343 +0.0162169 0.116863 -0.0139359 +-0.0837452 0.0818387 0.0274964 +-0.0188705 0.104448 -0.0228566 +0.017085 0.0604224 0.0492086 +-0.0636469 0.11387 0.0394431 +0.0060852 0.126695 -0.00651247 +-0.0563559 0.0448266 0.0148606 +-0.0534962 0.0959644 0.0436141 +0.0587007 0.0538335 0.0141792 +0.00148321 0.105804 0.0429258 +-0.0696571 0.0662079 0.0262916 +0.0292497 0.0745452 -0.0220465 +-0.0363535 0.0380033 0.0459253 +-0.0388642 0.104209 -0.02036 +0.0363189 0.106784 -0.00482843 +-0.0506381 0.0473796 0.0176699 +0.0415736 0.0738523 0.0301911 +0.00841968 0.0357631 -0.0122614 +-0.0449132 0.130768 0.0151196 +-0.0348253 0.0822923 -0.0236386 +-0.0756565 0.0672218 0.011813 +-0.0840475 0.0856522 0.0284432 +0.0358352 0.11315 0.0115155 +0.0378536 0.10688 -0.000832307 +0.0327708 0.0862789 0.0422215 +-0.0510409 0.034583 0.0365198 +0.0285939 0.108783 0.0362583 +-0.0291219 0.163733 -0.0155493 +-0.0075062 0.071811 0.0576623 +-0.0285902 0.125327 0.00496117 +0.022493 0.120697 0.0309281 +-0.081164 0.0734408 0.004547 +-0.011709 0.0628424 -0.0363307 +-0.0258651 0.101595 -0.0237434 +0.0205831 0.11206 -0.0147671 +0.0444356 0.0931566 0.0191609 +-0.04739 0.113671 -0.0162364 +-0.0489307 0.0334882 -0.00491951 +-0.0129236 0.118879 -0.0139348 +-0.0161652 0.0382063 0.017415 +-0.00495697 0.0978375 0.052341 +-0.0277397 0.0605536 -0.0284245 +-0.00547292 0.0385489 0.021098 +-0.00115741 0.0949656 -0.0326157 +-0.0444374 0.124419 -0.00954541 +-0.0821611 0.0761834 0.00152312 +-0.0144467 0.0348076 0.0441223 +-0.0715687 0.153984 -0.0439053 +-0.00636015 0.130593 0.00877385 +-0.0127796 0.0382227 0.0144711 +0.0370519 0.110502 0.0205344 +-0.0322265 0.0637977 -0.0184499 +-0.0106706 0.054151 -0.0336931 +-0.0455975 0.169625 -0.00241942 +0.0182033 0.0435661 0.0436183 +-0.0718144 0.147892 -0.0304457 +-0.0577521 0.050802 0.00265023 +-0.0586963 0.0588331 0.00348495 +-0.0866227 0.109058 0.0173532 +-0.0383512 0.122877 -0.00994551 +-0.070675 0.0778663 -0.0147995 +-0.0181879 0.174194 -0.0234207 +-0.0587357 0.153161 0.0315118 +-0.0350971 0.16074 -0.013448 +0.00536912 0.049521 -0.0287338 +-0.0474407 0.134003 0.00841493 +-0.0624554 0.1522 -0.0115838 +-0.0760236 0.150016 -0.00789124 +-0.0261434 0.0379494 0.0119939 +-0.068707 0.0613453 0.00749837 +0.0495547 0.0702574 0.0035522 +0.0608929 0.0651253 0.0121512 +0.0417276 0.0683416 0.0285931 +-0.0322652 0.177059 -0.0129859 +-0.027328 0.0951114 -0.0248637 +-0.0207784 0.0714012 -0.0384405 +-0.0483231 0.128062 -0.00327126 +-0.0424968 0.0449805 -0.0163196 +-0.0550216 0.142767 -0.00162505 +-0.0444981 0.112567 0.0357183 +0.039909 0.107011 0.00616363 +0.0103602 0.0524141 -0.0291489 +-0.0621527 0.0372105 -0.00831557 +0.0052003 0.124064 -0.00964829 +0.0584567 0.0701808 0.018095 +0.0154065 0.0880419 -0.0292971 +-0.0675878 0.0672405 -0.0057657 +0.0141143 0.129082 0.00347211 +-0.0769907 0.154191 -0.00889586 +-0.0351753 0.160922 -0.000113952 +-0.0865124 0.0819745 0.0105022 +-0.0802058 0.0759672 -0.0035211 +0.0412042 0.046738 0.0312341 +0.0531089 0.0539671 0.0274209 +-0.0202736 0.0966137 -0.0264451 +-0.021864 0.108885 -0.0213157 +0.0172909 0.0900542 0.0497289 +0.0151151 0.0645034 0.0516546 +-0.00371721 0.100591 0.046739 +-0.0281684 0.117044 -0.0138686 +0.044615 0.0762444 0.0239446 +0.00250222 0.0504849 0.0522926 +-0.0407291 0.0724971 -0.0177035 +-0.076873 0.114866 -0.00505023 +-0.0509699 0.0334609 -0.0108109 +-0.0307494 0.125973 0.00854668 +-0.0842046 0.10344 -0.000635192 +-0.0637785 0.0335481 0.00468656 +0.0573103 0.0709688 0.0191461 +-0.0548852 0.0344475 0.0323271 +-0.0566985 0.0694351 -0.0145553 +0.0116873 0.128578 0.0254498 +-0.0635208 0.0384034 0.0165311 +-0.0193913 0.161115 -0.00536021 +-0.0517184 0.0708739 -0.0153462 +-0.0355107 0.0789772 0.0422885 +-0.0308674 0.0359912 0.0254031 +-0.0496962 0.137023 0.0203775 +-0.000496498 0.0549075 0.0548747 +0.0203519 0.0506032 0.0432764 +-0.00603714 0.0387093 0.0280658 +-0.0424971 0.165251 0.00449932 +-0.088747 0.148763 0.0102254 +0.0140119 0.072675 0.0536492 +-0.0355033 0.109745 0.0370663 +-0.0495176 0.0451863 0.0426306 +0.0161864 0.128058 0.00281004 +-0.0689044 0.110844 -0.0111483 +-0.0648164 0.0412793 0.0318749 +-0.0594946 0.0959853 0.0440949 +-0.0201946 0.0918367 -0.0355405 +-0.00451061 0.0534011 0.0538125 +-0.0256167 0.0422692 -0.0291044 +-0.0366019 0.0472824 -0.0203909 +-0.0714721 0.152551 -0.0449162 +-0.0686495 0.0395764 0.0103048 +-0.0916814 0.147477 0.020141 +0.0344933 0.0646793 0.0392567 +0.0354037 0.0848596 0.0389463 +0.0335837 0.114911 0.0235455 +-0.00948608 0.0488348 0.0496357 +0.0162564 0.0875946 -0.0288434 +-0.0495004 0.0876335 0.045502 +-0.00788756 0.107371 -0.0226705 +0.0279061 0.0479696 -0.0147397 +-0.0593675 0.145365 0.0352791 +-0.0297371 0.179987 -0.0120259 +-0.00152895 0.1273 -0.00507098 +-0.053021 0.0473885 0.0142865 +-0.031661 0.0351392 -0.0196159 +-0.0428508 0.127424 0.0174253 +0.00853656 0.103079 0.0455737 +-0.0428329 0.0928281 -0.0227901 +-0.0533229 0.121583 -0.0104498 +-0.0281276 0.163902 -0.00573037 +0.00550696 0.0647473 0.0560963 +-0.0786632 0.155487 0.0200952 +0.0373574 0.0841251 -0.0157743 +0.00845531 0.04577 0.0469205 +-0.0816426 0.140732 0.045535 +-0.0198636 0.184564 -0.0147357 +-0.0441 0.149758 -0.00480897 +-0.0394895 0.0478295 0.0398724 +-0.0902912 0.136455 0.0152001 +-0.0912584 0.116106 0.0417079 +-0.078373 0.161039 -0.0249642 +-0.0823003 0.143183 0.00115625 +-0.0366712 0.0621691 -0.0130418 +0.0483193 0.0518215 -0.00445791 +-0.0647832 0.179003 -0.0560548 +-0.066692 0.1555 0.0271809 +0.0251524 0.123931 0.0146708 +-0.0729716 0.175028 -0.0520538 +0.0249807 0.0645674 0.0448324 +0.0189844 0.127654 0.0109555 +-0.023546 0.114036 0.0366055 +-0.0166929 0.178668 -0.0190282 +-0.0838411 0.0884243 0.0295799 +0.0340178 0.106064 0.0317678 +0.0172301 0.0834905 -0.0285819 +-0.0836745 0.0939124 0.0306595 +0.00650612 0.0856084 0.0565927 +-0.00650337 0.0633626 0.0562557 +0.00724714 0.123914 -0.00950504 +-0.04049 0.0677003 0.0417506 +-0.083014 0.0816043 0.0289568 +-0.0791181 0.10724 -0.00560787 +-0.0643983 0.155173 -0.0416037 +-0.0194853 0.0382676 0.0257029 +0.017193 0.0407686 0.0438767 +-0.0578741 0.0997697 -0.0193936 +-0.00470039 0.0340249 -0.0188849 +0.009491 0.0923319 0.053062 +-0.0679779 0.0615132 0.00568001 +-0.00851004 0.0960786 -0.0317903 +0.0222567 0.0734747 -0.02675 +0.0396829 0.102719 -0.00275708 +0.0333394 0.0519958 0.0339463 +-0.0317958 0.166782 -0.0057687 +-0.0851069 0.104842 0.00238218 +0.040355 0.0712163 0.0319238 +-0.0796414 0.0719293 0.00453596 +-0.00871509 0.0670095 -0.035665 +-0.04676 0.0797358 -0.0197068 +0.00759602 0.120603 -0.0139518 +-0.00757253 0.0384534 0.015324 +0.027396 0.0902329 0.0450202 +-0.0837001 0.104608 0.0275279 +-0.0648437 0.159826 -0.0567739 +-0.0182921 0.113707 -0.0184295 +-0.0318101 0.0499111 0.0410759 +0.0042017 0.130577 0.0226921 +-0.0882785 0.102304 0.00940329 +-0.0669196 0.157864 -0.00782765 +-0.0574974 0.104327 0.0414929 +-0.028183 0.0499752 0.0445203 +0.0437475 0.087439 -0.00380588 +0.047365 0.0735855 0.0109418 +-0.0355275 0.04785 0.0396404 +-0.00564979 0.0511569 -0.0315211 +-0.0622081 0.163133 -0.0355907 +-0.0126796 0.0555759 -0.033924 +-0.0434133 0.12436 -0.00948612 +0.0325363 0.0605817 0.0399114 +0.00828387 0.0859903 0.0560092 +-0.0377619 0.0480619 -0.0149351 +-0.0152064 0.0377587 0.0513804 +0.0337034 0.0740969 0.0399489 +0.0386678 0.106943 0.0231645 +-0.0568902 0.10122 -0.0192994 +-0.0629975 0.158364 -0.0415982 +0.0174963 0.116768 0.0361173 +-0.018574 0.174216 -0.0164984 +-0.0916005 0.147489 0.0211447 +0.0351839 0.113522 0.00409669 +-0.0642224 0.175708 -0.0529566 +-0.0646189 0.0691309 -0.0109873 +-0.0744709 0.159641 -0.0299365 +-0.0810037 0.0777776 0.0280061 +-0.0468539 0.0397424 -0.0132276 +-0.0387576 0.152152 0.00343994 +-0.0355301 0.0350253 0.0446914 +-0.0252945 0.179999 -0.0179968 +-0.0594833 0.0440844 0.0256893 +-0.0262483 0.175689 -0.00998917 +-0.0357 0.0344414 0.0311095 +-0.0348452 0.0957896 -0.0233484 +-0.0694619 0.0701676 0.0334316 +-0.0704025 0.156596 -0.000355665 +0.0197946 0.0872171 -0.0264236 +-0.00225576 0.119004 -0.0141489 +0.0447595 0.0819096 0.000199099 +-0.0414725 0.16704 -0.0108149 +0.0383695 0.0533606 -0.00654853 +0.0436976 0.0763605 0.0261605 +-0.059412 0.0342492 0.0297869 +-0.0105538 0.0962042 -0.0319333 +0.0354985 0.0483762 0.03122 +-0.0232213 0.183101 -0.0108227 +-0.0454832 0.0704956 0.0415155 +-0.0818632 0.143391 0.0428465 +-0.00588211 0.0384235 0.0193174 +-0.0715611 0.065876 0.0226562 +-0.0557658 0.0561367 -0.00241411 +-0.007704 0.0613485 -0.0352024 +-0.050582 0.13546 0.000440434 +-0.0239591 0.0958294 0.044594 +-0.0344217 0.156595 0.00275895 +-0.0721769 0.146332 -0.0246714 +-0.00172768 0.0683482 -0.0343533 +0.0465137 0.0736858 0.00606841 +-0.0379081 0.0345108 0.0393807 +-0.0536272 0.0632225 -0.00927695 +0.0216001 0.0346735 0.00635285 +-0.00546011 0.130518 0.00622904 +0.025022 0.0994981 0.0433749 +-0.059626 0.14292 -0.00334389 +-0.0662647 0.160967 -0.0574681 +-0.086688 0.0937529 0.026595 +-0.0292509 0.122699 0.0223824 +-0.020881 0.0609703 0.0467992 +-0.0727056 0.0704556 0.030746 +-0.0670342 0.154632 -0.0510962 +-0.0818617 0.117704 -0.00327392 +-0.00930377 0.0384012 0.0113924 +-0.0294534 0.0382504 0.0532249 +-0.0428028 0.034428 0.0296237 +0.034591 0.113857 0.0224952 +0.0260945 0.0981604 0.0431638 +0.0157288 0.0740195 0.0526622 +0.00528348 0.0654438 -0.0329345 +0.0342272 0.113045 -0.000582475 +0.0177023 0.127344 0.0204737 +-0.00349601 0.0619414 0.0556852 +-0.0633856 0.13531 0.0381918 +-0.0187732 0.0742782 -0.038946 +-0.0714922 0.124606 0.0531293 +-0.0387588 0.0432047 -0.0253505 +-0.0377685 0.112865 -0.0174473 +-0.0811078 0.0831466 0.0326628 +0.0121734 0.0347014 0.0407838 +-0.0423463 0.0344667 0.0367209 +-0.0247884 0.0905387 0.0498003 +-0.0589097 0.111154 -0.0162513 +-0.0119878 0.0389387 -0.0117395 +-0.0746688 0.0730125 -0.00771761 +-0.0636783 0.0344406 0.016873 +-0.0718387 0.063614 0.0140147 +-0.0537353 0.0753205 -0.0183524 +0.0399868 0.0793585 0.0332409 +0.0342696 0.0686799 0.038964 +0.0283038 0.121367 0.00870899 +0.020694 0.101208 -0.0211426 +-0.0607079 0.149875 -0.000940868 +-0.0663226 0.0771733 0.0404118 +-0.0856352 0.151298 0.0280417 +0.00450086 0.0533884 0.0535142 +0.0193556 0.0370965 -0.0106758 +-0.073245 0.152646 -0.0348949 +-0.0311279 0.168264 -0.00654632 +-0.0314769 0.122323 0.024544 +-0.00965298 0.0383614 0.0149817 +0.0322912 0.117174 0.00450048 +-0.0303956 0.0833549 -0.0325649 +-0.0305081 0.109824 0.0377476 +0.060267 0.0581373 0.011162 +-0.0782363 0.119072 0.0512696 +-0.0819743 0.130956 -0.00393996 +0.0125568 0.129953 0.0057397 +-0.0750314 0.165158 -0.038026 +-0.0842614 0.0857549 -0.00354776 +-0.0194949 0.122198 0.0303074 +-0.0885869 0.0914877 0.00746285 +0.0183032 0.0622432 -0.0278633 +-0.0188389 0.0383463 0.00224079 +0.0169223 0.0354899 -0.0154522 +-0.0510859 0.154625 -0.00472421 +-0.04134 0.171235 -0.00891614 +-0.00271064 0.0641639 -0.0348647 +-0.0404957 0.119327 0.0301663 +0.0161104 0.038261 0.0437952 +-0.0788559 0.0706244 0.0187647 +-0.0565382 0.0387829 -0.00997998 +0.00406092 0.0347375 0.0390843 +-0.052431 0.0503969 0.0246465 +-0.0548238 0.136818 -0.00273484 +-0.0168361 0.163394 -0.0165332 +0.0085002 0.0589241 0.0531764 +-0.00349833 0.104479 0.0440938 +0.041165 0.0675922 -0.00677134 +-0.0766837 0.0941158 0.0377884 +-0.0715005 0.108276 0.0374406 +-0.0514917 0.154976 0.0111 +-0.0766573 0.0758638 -0.0078194 +-0.0708734 0.116483 -0.00801313 +-0.0584915 0.0333664 -0.00308936 +-0.0132404 0.0420117 0.0507817 +0.0504568 0.0627892 -0.00292241 +0.0181009 0.0617863 0.0489038 +-0.0686053 0.155434 -0.0518073 +-0.0866142 0.111799 0.023338 +-0.0087012 0.0613261 -0.0351009 +-0.0667075 0.179209 -0.0538653 +0.0133269 0.036855 0.044466 +-0.0308424 0.0930072 -0.0244625 +-0.0526579 0.118327 0.034303 +-0.0802651 0.0940224 0.034298 +-0.0895241 0.094286 0.0154262 +-0.0580951 0.0448084 0.0137644 +0.0187472 0.0369987 -0.01368 +-0.0174935 0.0786826 0.056671 +-0.026682 0.0779832 0.0478067 +0.0449566 0.0931917 0.0141646 +-0.0598355 0.0968573 -0.0194316 +-0.015743 0.0388551 0.0331436 +0.045657 0.07639 0.00319799 +0.00221136 0.0782941 -0.0352071 +-0.0725589 0.0360747 0.00146649 +-0.0641358 0.117113 0.0460384 +-0.0709488 0.0833216 0.0408543 +0.0230126 0.0366914 0.0285839 +0.0164832 0.101772 0.0464774 +-0.0114886 0.10724 0.0431864 +-0.0748949 0.0968349 0.0387401 +-0.0428468 0.0368545 0.044028 +-0.0121243 0.183164 -0.0282842 +-0.0110799 0.0973863 0.0517395 +-0.0283441 0.0346627 0.0430398 +-0.0591236 0.0454581 0.0276809 +0.0359903 0.0834983 0.0380665 +-0.0894731 0.112826 0.0381953 +-0.0633619 0.165109 -0.0324564 +-0.0893245 0.139298 0.0361742 +-0.0113718 0.177173 -0.0236196 +0.0314957 0.0386039 0.0249642 +-0.0153586 0.171251 -0.0171482 +-0.0501632 0.165541 -0.000963216 +-0.0125979 0.0362885 -0.0258846 +-0.0109041 0.121705 -0.010941 +-0.01134 0.181374 -0.0292688 +-0.0636417 0.067527 -0.00924444 +-0.0645561 0.151545 -0.0345673 +0.0234128 0.0685823 0.0460905 +-0.0204536 0.184888 -0.0139868 +-0.0362035 0.16829 0.000195359 +-0.0423655 0.0354607 0.0428683 +0.029434 0.0414849 -0.00426139 +-0.0548859 0.0335879 0.0154264 +0.0301337 0.0958138 -0.0174156 +-0.0231819 0.174173 -0.0207431 +0.0495183 0.0596792 0.0306871 +-0.0615314 0.169388 -0.0555899 +-0.0645149 0.156191 0.0192193 +-0.0808163 0.150056 0.00117383 +-0.0203106 0.127423 0.0152774 +-0.048501 0.0946267 0.0446158 +-0.0621404 0.0458224 0.0356845 +0.014817 0.0713159 0.0530708 +-0.0482359 0.0600875 0.0359237 +0.0583839 0.0607371 0.00317993 +0.0532979 0.0476993 0.0202039 +-0.00334167 0.13115 0.0113211 +-0.0451105 0.146112 0.00345863 +-0.0728436 0.0965116 -0.0147387 +-0.00290701 0.128667 -0.00250924 +-0.0175351 0.0472943 0.0498404 +-0.0710465 0.156278 0.000878407 +0.0130461 0.106823 -0.0191157 +-0.0241467 0.169732 -0.0193183 +0.0184844 0.092024 0.0477707 +-0.0849646 0.0925759 -0.00355765 +-0.0135115 0.0617879 0.0541775 +0.0358003 0.0371828 0.0161878 +-0.0563756 0.0338236 0.0220041 +-0.0344987 0.119335 0.0301753 +-0.0207895 0.0363821 -0.0186131 +0.0366896 0.0394563 0.0234361 +0.0454465 0.0903989 0.00417224 +-0.0686026 0.0339552 0.0087048 +-0.0248008 0.0797877 -0.0377608 +-0.0253831 0.0645504 -0.0324979 +-0.0924079 0.114699 0.0153245 +0.0404169 0.104204 0.0201615 +-0.0864551 0.137921 0.0433346 +0.0453383 0.0861836 0.0191712 +-0.0550359 0.12552 0.0379729 +0.0499773 0.0719552 0.0208312 +-0.0878453 0.10502 0.0133698 +0.0226563 0.0416586 -0.00875234 +0.00847112 0.0503629 0.0509458 +0.0193029 0.12103 0.032512 +-0.0288694 0.102979 -0.023086 +-0.0655006 0.155906 0.0116223 +-0.0865291 0.125714 0.0480303 +-0.0762092 0.103511 0.0356214 +0.027039 0.0433782 0.0352623 +-0.00878391 0.0340179 -0.0196776 +0.01688 0.104029 -0.0201606 +-0.0779922 0.155321 0.011561 +0.012978 0.0975651 -0.0232996 +-0.0570356 0.142438 0.0315884 +0.00678439 0.0392286 0.0320303 +-0.0187316 0.184448 -0.0230478 +-0.05583 0.0898375 -0.0220234 +-0.0624118 0.168239 -0.0611966 +-0.019552 0.0381879 0.0203532 +-0.0619388 0.0647772 0.0309092 +-0.0929984 0.129612 0.0152364 +0.0241882 0.0633761 -0.0240832 +-0.0154901 0.11097 -0.019533 +0.0335254 0.101204 -0.0131717 +0.0440036 0.0411539 0.00525252 +0.0443474 0.05051 -0.00579969 +-0.00564997 0.0526431 -0.0322774 +0.024909 0.124002 0.00889289 +-0.0551719 0.0344352 0.0357625 +-0.00149801 0.0828985 0.0574954 +-0.0649207 0.122383 -0.00889091 +-0.0371067 0.163706 -0.0138205 +-0.013511 0.0673225 0.0538556 +-0.0664425 0.121454 0.0513831 +-0.0749127 0.151363 0.0363064 +-0.0786131 0.166659 -0.0369473 +0.0259941 0.0889184 0.046498 +-0.0508607 0.133588 0.0291236 +-0.0624206 0.150641 -0.0155752 +-0.0345377 0.0353482 -0.0311793 +-0.0926334 0.130971 0.0152338 +0.00420379 0.0852404 -0.0337772 +0.0493319 0.0575419 -0.00502247 +0.0210858 0.0848756 0.0499424 +-0.0209282 0.0711316 0.0521839 +-0.0556334 0.121157 -0.00996616 +-0.0578782 0.0955404 -0.0210377 +-0.0636177 0.149382 -0.0259273 +-0.023437 0.0753613 0.0517266 +-0.0424368 0.033567 0.00359466 +-0.0366861 0.0651313 -0.0144389 +0.00275029 0.0392893 0.0311503 +-0.0858603 0.137915 0.0441653 +0.00249981 0.0938632 0.054785 +-0.0405815 0.125646 -0.00686289 +0.00652265 0.0633208 0.0557678 +-0.0736187 0.0665006 0.01992 +0.0178849 0.106917 -0.0172488 +-0.0404999 0.16823 0.00286674 +-0.0578818 0.101192 -0.0190391 +0.0415111 0.0596706 0.0303495 +0.0445386 0.0917351 0.000179816 +0.0404099 0.0926692 0.0304567 +-0.0715386 0.177351 -0.0469381 +-0.00955325 0.129382 0.0220461 +-0.0304508 0.11875 -0.0116176 +-0.0553453 0.138992 -0.00307013 +0.0373215 0.0444316 0.0300039 +-0.0439866 0.0342955 -0.0250034 +0.0438502 0.081834 0.0262681 +0.0105117 0.057471 0.0526043 +-0.0609073 0.0423237 0.0152297 +-0.0566933 0.0478983 -0.00338525 +-0.0882052 0.0955366 0.00643448 +-0.0697305 0.146842 -0.0262196 +-0.0654573 0.131176 0.0439868 +-0.0332792 0.168261 -0.00439757 +0.0262829 0.0520004 0.03955 +-0.0246803 0.0386712 -0.0158919 +-0.0243119 0.0382419 0.00485642 +-0.0650689 0.0416148 -0.00522845 +-0.0224969 0.105778 0.0423492 +-0.0675666 0.163787 -0.0559757 +-0.0625249 0.0642497 0.029495 +-0.066705 0.170483 -0.0379595 +-0.0387912 0.0855771 -0.0218281 +-0.0362227 0.121033 0.0288309 +-0.0351413 0.166693 -0.0148789 +0.0484731 0.0728694 0.00986875 +-0.0715958 0.035386 0.00909438 +-0.0654475 0.0414866 0.0340095 +-0.0897915 0.135018 0.00821888 +-0.0256856 0.161028 -0.00218154 +-0.0294591 0.0367076 -0.0187628 +-0.0318602 0.0341892 0.0214236 +-0.0741619 0.0781636 -0.0115723 +-0.0759684 0.138187 -0.00615578 +-0.0746432 0.067744 0.0203901 +-0.0481968 0.058714 0.0359259 +-0.0809888 0.100705 0.031995 +0.0223647 0.0795488 0.0499944 +-0.0164996 0.0587643 0.0515064 +-0.0843239 0.0775269 0.0169616 +-0.0474174 0.157905 0.00867917 +0.0256365 0.0450396 -0.0116814 +-0.0560862 0.153109 -0.0014946 +-0.0364777 0.0491722 0.0391199 +-0.0353775 0.172711 -0.013245 +0.0345426 0.0361041 0.0132537 +-0.0476575 0.0606291 -0.0121142 +0.0517359 0.0693876 0.00244776 +-0.0895642 0.139283 0.0271809 +-0.0554895 0.087587 0.0448409 +-0.00460242 0.0419996 -0.0255341 +-0.0747436 0.0846695 0.0389578 +-0.0522959 0.0518057 0.0276471 +0.0344259 0.0713949 0.0392126 +-0.0858246 0.111645 0.00429163 +7.90085e-05 0.131159 0.00541676 +-0.0876151 0.1105 0.015342 +-0.0308705 0.0385373 -0.0301935 +-0.0174841 0.088353 0.056296 +-0.0717036 0.179379 -0.0498901 +-0.0872579 0.113355 0.0275168 +-0.0132522 0.180136 -0.0286131 +0.0147067 0.111012 -0.0176211 +0.0100468 0.0698695 0.0549195 +-0.00549411 0.130838 0.0134037 +-0.0444864 0.070528 0.0418968 +-0.0694946 0.0902043 0.0422251 +-0.0125029 0.0673483 0.0540527 +-0.0889341 0.0928773 0.0104474 +-0.049902 0.0335302 0.00572664 +0.0224871 0.0436168 0.0410219 +-0.0391731 0.163682 -0.0125377 +-0.0389872 0.0336658 0.00601497 +0.0423783 0.0676875 -0.00279832 +-0.0314483 0.177007 -0.0139273 +0.0365023 0.0700019 0.0369139 +-0.0817843 0.113273 -0.0014411 +-0.0155011 0.0786732 0.0567092 +-0.0616004 0.115786 -0.012288 +0.0336937 0.0994802 0.0365924 +-0.0819199 0.0775142 -0.000486403 +-0.0620032 0.154899 0.00420466 +-0.0689571 0.134062 -0.00839151 +0.0341993 0.115326 0.00949444 +-0.0853268 0.127125 0.0496018 +-0.0075399 0.0430305 0.0487452 +-0.000964681 0.0992981 -0.0251507 +-0.0896495 0.146064 0.0111487 +0.0457169 0.0792126 0.021174 +-0.0677903 0.180834 -0.0585489 +-0.0525855 0.0528134 0.0122839 +0.045458 0.0847917 0.019171 +-0.0620511 0.164652 -0.0545872 +-0.0012817 0.0411143 0.047028 +-0.0620444 0.166711 -0.0606187 +0.0416044 0.0774454 -0.0068035 +-0.0180891 0.0568831 0.0497969 +0.0289502 0.0888845 0.043761 +-0.0361509 0.0471597 -0.0213258 +0.0209931 0.0505428 0.042434 +-0.081698 0.0939818 0.0329068 +-0.0701548 0.148741 -0.0366493 +-0.0726057 0.158224 -0.0359121 +0.0452801 0.0777562 0.00119407 +0.0034868 0.107186 0.0422902 +-0.0603898 0.116109 -0.0126519 +-0.0799294 0.154987 0.0226092 +-0.0412543 0.0342017 0.0283816 +-0.073067 0.0692219 0.0282366 +-0.0232836 0.0382816 -0.000419572 +-0.0843726 0.0952582 -0.00357113 +-0.0871856 0.0923586 0.0257303 +0.0415318 0.09261 0.0284783 +-0.0528539 0.1113 -0.0177773 +-0.0653767 0.0770838 0.0407622 +0.0608603 0.0609709 0.0131614 +0.0163938 0.128844 0.0100049 +-0.028759 0.0386585 -0.0166912 +-0.0688752 0.11651 -0.00852528 +-0.00266028 0.0525834 -0.0313625 +0.0395925 0.0979794 0.0293107 +-0.063517 0.0417383 0.0266777 +-0.0206145 0.038142 0.0147556 +-0.0746919 0.0745094 -0.0088781 +-0.0730235 0.16103 -0.0369405 +-0.0511023 0.141628 0.018382 +0.026686 0.0963684 -0.0200186 +0.00049039 0.0952019 0.0544773 +-0.0374215 0.0466159 -0.0218044 +-0.0396639 0.0592228 -0.0116772 +0.0589085 0.0593684 0.0217913 +-0.069935 0.128232 -0.00913858 +-0.0154583 0.128246 0.0199229 +-0.082956 0.0762572 0.0165263 +-0.0698527 0.139727 0.0465118 +-0.0793995 0.0962934 -0.0095136 +0.029447 0.119051 0.00204245 +-0.0406195 0.0505975 -0.0111291 +-0.0337259 0.125903 0.000119567 +-0.00361865 0.109419 -0.0218821 +-0.0324923 0.0845615 0.0419149 +-0.0304819 0.0903593 0.0440392 +-0.0289421 0.0848695 0.0456392 +-0.067993 0.172429 -0.0412978 +-0.0699656 0.167828 -0.0233999 +-0.0633908 0.0664235 0.0326881 +-0.0328103 0.178226 -0.00982944 +-0.0144938 0.0897854 0.0566872 +-0.00301248 0.0391855 -0.0120497 +-0.0467348 0.10982 -0.0182008 +-0.0347751 0.123588 -0.00668109 +-0.081672 0.0966878 0.0327979 +0.0208066 0.08618 0.0495337 +-0.0294922 0.102919 0.0420695 +-0.0514977 0.0917694 0.0441515 +-0.0561584 0.13394 0.0346041 +0.0587961 0.055231 0.00916964 +0.0239769 0.0672243 0.0451455 +-0.0590987 0.135299 0.0356206 +-0.0833215 0.153324 0.00972396 +-0.0775565 0.148654 -0.00488618 +0.0134356 0.129163 0.0217505 +0.00242681 0.0392303 -0.00913048 +-0.00111738 0.0369593 -0.0152505 +-0.0884159 0.102321 0.0103913 +0.0452046 0.0684536 0.0248447 +-0.0107692 0.1278 -0.0014358 +-0.067702 0.169446 -0.0560134 +-0.0645991 0.162478 -0.0199783 +-0.0384905 0.0591295 0.0404813 +-0.0133897 0.0383025 0.0215062 +-0.0335039 0.113859 0.0341437 +0.00725148 0.0739904 -0.0339985 +-0.0197912 0.0347004 -0.0276305 +-0.0364291 0.0383909 -0.00870817 +-0.0382525 0.154358 -0.00883541 +-0.0576615 0.0645392 -0.00788705 +0.0271486 0.0677873 -0.0226945 +-0.0484929 0.0776741 0.0437591 +-0.0538207 0.0913026 -0.0221948 +-0.0414756 0.102877 0.0407886 +-0.0194769 0.0384097 -0.0016118 +0.0409764 0.0725373 0.0310711 +-0.046711 0.0723683 -0.0164352 +-0.0169229 0.0385492 -0.0161043 +0.0274461 0.0888981 0.0450769 +0.0384486 0.0446185 0.0300797 +-0.0498739 0.120141 -0.01301 +-0.0147995 0.0382136 0.0194957 +-0.034222 0.0422724 0.0479221 +-0.00554376 0.0388664 -0.0141367 +-0.00771915 0.0642161 -0.0356843 +0.0380609 0.108343 0.0221716 +-0.0496329 0.05762 -0.010324 +-0.0640324 0.0336604 0.00811729 +0.0288939 0.0349903 0.0075309 +-0.0369254 0.170672 -0.0129456 +0.0567415 0.0605855 0.00115011 +-0.026353 0.0382316 0.0044532 +-0.088166 0.0963498 0.023753 +-0.0332851 0.0368458 -0.0306141 +-0.0138558 0.0387296 -0.0044727 +0.0597512 0.0650182 0.00715554 +-0.0267551 0.0740245 -0.0360482 +0.0214915 0.0369736 0.0352586 +-0.0515738 0.0559395 0.0296214 +0.00622241 0.123988 -0.00957575 +0.0558148 0.0493476 0.0171957 +-0.0766567 0.112144 0.0469767 +0.0408877 0.0928069 -0.00817715 +-0.0862272 0.0886081 0.000477626 +-0.0341682 0.0723955 -0.0204945 +0.0468003 0.0745424 0.0107517 +-0.00983206 0.0896484 -0.0366649 +-0.00782261 0.0985178 0.051315 +-0.070543 0.17193 -0.0350862 +0.0371254 0.0869172 -0.0157926 +-0.059432 0.152725 0.0327387 +-0.0644942 0.149793 0.0375095 +-0.02966 0.0875784 -0.0315907 +0.0234483 0.0350084 0.0101439 +-0.0672661 0.155709 0.00954294 +0.0249549 0.0915796 0.0467751 +-0.0750729 0.0675817 0.0186826 +-0.065557 0.158804 -0.0559152 +-0.0869809 0.112371 0.0426661 +-0.0388924 0.0336117 -0.0270987 +-0.0925871 0.117342 0.0103086 +-0.0285134 0.0559644 0.0364164 +-0.0592485 0.148248 0.0355123 +-0.0386245 0.0472623 -0.0172994 +0.0417415 0.0676611 -0.00475281 +0.017067 0.127696 0.00312982 +-0.00768714 0.116771 -0.0157299 +-0.0210692 0.0667823 0.0496379 +0.0306718 0.0605569 0.0407187 +-0.086202 0.0805924 0.0105044 +0.0248868 0.0727438 0.0465386 +-0.0226479 0.182963 -0.0190305 +-0.064868 0.0953298 -0.0181139 +-0.0212331 0.0553385 0.0459146 +-0.0900228 0.148451 0.0254546 +-0.0659345 0.109414 0.0377967 +-0.0156357 0.0466082 -0.0291798 +-0.0783295 0.108958 0.0384425 +-0.0353519 0.169773 -0.000327923 +-0.0576724 0.155657 0.012957 +0.0299243 0.0902598 0.0434097 +-0.0938789 0.125503 0.0152603 +0.00849738 0.0910108 0.0540495 +-0.0924729 0.117499 0.0403021 +-0.0538856 0.101336 -0.0209374 +0.0230068 0.125355 0.00960117 +-0.0753773 0.0887668 0.039456 +-0.0164714 0.0348128 0.0436847 +-0.0124833 0.108618 0.0427908 +0.00650022 0.0937602 0.0531051 +-0.0254901 0.101602 0.0435889 +-0.0681644 0.132655 0.0471068 +0.0116725 0.130674 0.0125466 +-0.0658455 0.0693268 0.0349111 +0.0131057 0.0346676 0.0247536 +0.0111453 0.0752893 0.0548169 +-0.0414315 0.120058 -0.0129928 +-0.0667828 0.0837809 -0.018353 +-0.0558768 0.105489 -0.0184971 +-0.0646849 0.0705888 -0.0125799 +0.00250861 0.0634123 0.0567384 +-0.0102337 0.0987343 -0.0266102 +-0.0475686 0.0376232 -0.0123457 +0.0326729 0.0388984 0.0249367 +-0.0754158 0.14997 -0.0218646 +0.0149498 0.0475024 0.0442108 +-0.0897923 0.144692 0.013139 +-0.065193 0.0597221 0.0116014 +-0.0777759 0.113375 -0.00398806 +-0.0457101 0.131722 0.0089192 +-0.0575663 0.0481384 0.0346641 +-0.0838122 0.128533 0.0508937 +-0.0104939 0.0933018 -0.0349679 +0.0252085 0.0464911 -0.0166174 +-0.0789879 0.13894 -0.00474105 +-0.0475728 0.0656919 0.0379498 +0.0110822 0.113195 -0.0179885 +-0.0649225 0.170267 -0.0430968 +-0.00871405 0.112847 -0.0195489 +0.0452857 0.0889846 0.0161633 +-0.0171038 0.128182 0.00771491 +-0.0114919 0.0911558 0.0564108 +-0.0672347 0.158081 -0.05503 +-0.0375789 0.0335576 -0.0249215 +-0.028354 0.0521667 -0.0233844 +-0.0687469 0.179151 -0.0517127 +-0.0635972 0.164728 -0.0295802 +-0.00849416 0.0661021 0.0557034 +0.0018938 0.131459 0.00752669 +-0.0104875 0.10724 0.0431922 +0.0420847 0.0764929 0.0291356 +-0.0164676 0.125926 0.0254562 +-0.0666931 0.162075 -0.0149837 +0.000392133 0.0405199 -0.0247969 +-0.062597 0.0740287 0.040345 +-0.038486 0.115285 0.0333239 +-0.0134767 0.0545379 0.0508338 +-0.0379773 0.128134 0.0117903 +0.0282176 0.0746072 -0.022898 +-0.00949856 0.0898059 0.0569552 +-0.0633588 0.166271 -0.0375898 +-0.088608 0.0874693 0.0094764 +-0.00658802 0.126776 -0.00645935 +0.00550371 0.0533623 0.0533002 +0.0568364 0.0723477 0.016027 +-0.0746813 0.077485 -0.0103851 +0.0599778 0.0622697 0.0191849 +-0.0834343 0.143353 0.0415913 +0.0461466 0.0773319 0.0190905 +-0.0643928 0.0366139 0.0414145 +0.017105 0.0913787 0.0494605 +0.0113838 0.0463423 -0.025328 +0.00150906 0.0925101 0.0553138 +-0.0905552 0.131061 0.0372264 +0.0271939 0.0479684 -0.0167032 +0.0118641 0.130407 0.00833975 +-0.0534963 0.0413918 0.0463882 +-0.00348783 0.0548509 0.0542207 +-0.0241218 0.165279 -0.0170232 +0.0526044 0.0736805 0.0129696 +0.00493694 0.0358587 0.023833 +-0.0308996 0.0862326 -0.0295626 +-0.0749566 0.152744 -0.0158977 +0.022407 0.0700249 0.0481925 +-0.0644326 0.152123 0.0354487 +-0.083145 0.0762813 0.00952219 +-0.0066641 0.130277 0.00578337 +-0.0503124 0.0487527 0.0166746 +-0.0857975 0.0926505 0.000473688 +0.0319954 0.0554568 -0.0137989 +-0.0325248 0.0371997 0.032926 +-0.0378236 0.0914714 -0.0236656 +0.0107752 0.0603237 0.0523688 +-0.0709378 0.0995366 0.0403447 +0.00229927 0.0641027 -0.0339638 +0.0301658 0.0510827 -0.0137422 +-0.0152122 0.0387061 -0.0065833 +0.0328168 0.0373031 0.0209449 +-0.0564976 0.0959787 0.0438593 +-0.0530296 0.137293 -0.00118635 +-0.0114929 0.0745162 0.0566704 +0.0339687 0.0768049 0.0403387 +0.0229251 0.0476731 0.039919 +0.0153286 0.0594649 -0.0285327 +-0.0650165 0.0356472 0.0166692 +-0.0872319 0.104968 0.0093836 +0.0317565 0.0752189 -0.019756 +0.0174897 0.107108 0.0415537 +0.00650555 0.0716952 0.056225 +0.0214733 0.0808843 0.0504673 +-0.0157973 0.0382489 0.019257 +-0.073889 0.119392 -0.00790358 +-0.0588895 0.0969269 -0.0201624 +-0.0614701 0.166956 -0.0604533 +-0.0411287 0.160673 -0.0112161 +-0.0558134 0.0883826 -0.0218608 +-0.0206962 0.0385843 -0.00942784 +0.0401892 0.0759203 -0.00879733 +0.0191194 0.0349494 -0.00374623 +-0.0414976 0.113906 0.0346806 +-0.00581815 0.0854694 -0.0375201 +-0.0859756 0.0805547 0.00750576 +-0.0833395 0.103378 -0.00262342 +-0.0446335 0.126046 -0.00723965 +0.0260088 0.0910229 -0.0223512 +0.034944 0.10998 0.0278542 +-0.00248857 0.0703789 0.0573235 +-0.0102702 0.0385128 0.00564525 +-0.0283572 0.0578046 -0.0244014 +-0.0210295 0.0958616 0.0473023 +-0.0141375 0.0347096 0.0460356 +-0.0244241 0.178665 -0.0108375 +0.00749812 0.109597 0.0408218 +-0.0356643 0.0606925 -0.0124069 +-0.0638002 0.166551 -0.0354938 +-0.0862312 0.0940245 0.00140199 +-0.0365789 0.0337187 0.00826156 +0.0240933 0.0685753 0.045325 +-0.0891661 0.132396 0.0419315 +-0.0177346 0.065722 -0.0374816 +-0.0224613 0.12203 0.0284859 +-0.0509119 0.055753 0.0316394 +-0.0340805 0.0680941 -0.0175876 +-0.0166639 0.0364717 -0.017882 +0.0347021 0.0768104 0.0396564 +0.0213412 0.0565052 -0.0267347 +-0.0707159 0.179287 -0.0569572 +-0.0748092 0.0790936 0.0363823 +-0.0577944 0.0460393 0.0120187 +-0.0302932 0.123607 -0.00301843 +0.00749105 0.050377 0.0513506 +-0.0641553 0.162388 -0.0586672 +-0.0197076 0.059653 0.0484949 +0.0376477 0.110588 0.00928033 +-0.0151896 0.0391404 0.0514631 +0.020848 0.0400652 -0.0117024 +-0.0208303 0.119929 -0.0109428 +0.0157129 0.124796 -0.00448994 +-0.00658665 0.0388228 -0.0143041 +0.0254417 0.121647 0.000551492 +0.0535789 0.0658041 0.000119664 +0.0473148 0.0518659 -0.00495567 +0.0299175 0.0524736 -0.0157475 +-0.0183959 0.112492 -0.0191613 +-0.0893828 0.0916068 0.0204288 +-0.0614858 0.175719 -0.0606762 +-0.0901396 0.13244 0.0372222 +-0.0238257 0.0881589 -0.0366228 +-0.0218791 0.0383442 -0.00388387 +0.00124143 0.0390154 -0.00356473 +-0.0669805 0.1589 -0.00929727 +0.0483233 0.0547304 -0.00526262 +-0.0444857 0.0661533 0.0401374 +-0.0514919 0.076238 0.0430598 +-0.0301912 0.0664057 -0.0274649 +-0.0408343 0.0942887 -0.0229156 +-0.00749956 0.121159 -0.0124082 +-0.061476 0.158429 -0.028587 +-0.0675029 0.109729 0.0377486 +-0.0697083 0.1638 -0.0499695 +-0.062151 0.152195 -0.0205783 +0.0342924 0.0619556 0.0389482 \ No newline at end of file diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/cube_ran.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/cube_ran.pts new file mode 100644 index 000000000000..ae0320923a7d --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/cube_ran.pts @@ -0,0 +1,582 @@ +581 +-9496.000158 -6621.999660 73324.000108 +1941.000008 -502.999956 53448.000262 +-13993.000076 -9472.000458 73547.999893 +-3165.000198 2805.999696 53841.000158 +3941.000109 -826.999564 53350.999780 +-13992.999698 -6391.999696 73548.000325 +-4629.000334 -2729.999756 72919.999638 +-14544.000229 7643.999701 62169.999969 +-3539.000009 -7617.000066 72743.000159 +-3569.999951 1963.000330 53954.000331 +4099.000115 540.000082 55720.000195 +3946.000208 3611.000347 54343.000242 +3942.000336 -1955.000290 53845.000430 +24.000106 -8480.000056 72560.000446 +-2817.999819 -7080.000021 72739.999999 +274.999768 2681.999578 53612.999729 +-5673.000363 -8522.000312 72919.999924 +-3569.999681 5328.999917 53954.000391 +7057.000447 22.999921 72019.999778 +-7114.999994 -4259.000412 73100.000243 +3129.999877 -1020.000207 53119.999650 +-14575.999938 2064.000292 60412.000409 +-8087.999603 -2692.999873 73164.999998 +-9496.000263 -8099.000270 73323.999696 +-14575.999757 4785.999619 60412.000416 +1767.000453 -2710.000440 72380.000399 +4723.999558 2984.999684 72199.999829 +4173.000154 -1942.000364 57518.000224 +-14185.000047 -8155.999786 69664.999947 +8462.999751 -2789.999723 72019.999998 +-14475.999680 -6322.000368 63961.000010 +-14185.000218 -6669.000381 69665.000452 +-14411.999521 8769.999611 63528.000202 +-3929.999793 121.999623 53660.000393 +-3538.999885 -6227.999801 72743.000078 +5664.000221 8483.999673 72199.999788 +4160.000223 3746.999664 57257.999712 +16.999585 1061.999516 53479.999584 +3441.000482 4789.999724 53120.000035 +3941.000301 861.000216 53350.999558 +3941.000166 186.000103 53350.999891 +-5672.999756 5721.000193 72920.000053 +-14411.999799 1051.999879 63528.000013 +3441.000192 5308.999633 53119.999836 +-13970.999556 -6778.999631 71592.999827 +-5673.000352 1448.000308 72919.999896 +1941.000287 3661.000398 53448.000221 +4159.999588 2681.999997 57257.999788 +2098.999573 1058.000232 53299.999983 +-3569.999774 280.000127 53953.999842 +-3538.999679 -9006.000017 72743.000111 +-3570.000143 -1402.000081 53954.000006 +-7115.000060 5734.999820 73099.999872 +-1026.999875 -1026.999558 53479.999537 +7056.999811 -4195.999750 72020.000402 +-3570.000168 3085.000137 53954.000020 +-13970.999844 -9803.999811 71592.999532 +17.000252 6285.000424 53479.999576 +-14322.999690 -2587.000320 65092.999918 +-5387.999792 -1969.999910 72920.000067 +-1426.999888 2743.999772 53744.000433 +-3538.999950 -2059.999970 72742.999563 +-14412.000000 6664.999905 63527.999948 +-3570.000271 3646.000059 53954.000087 +-3929.999828 -1973.999852 53659.999952 +-4237.999601 -7080.000344 72740.000252 +-14373.000194 -7866.999965 65785.999683 +3946.000001 2584.000490 54343.000220 +3941.000101 2886.999557 53350.999752 +4160.000230 551.000414 57257.999512 +4264.000084 1686.000457 60564.000497 +-9495.999646 -3667.999852 73323.999965 +4288.000261 1950.999734 60834.000001 +1432.000381 -1938.999865 53464.000475 +-5126.999748 3887.999847 72980.999916 +4287.999632 278.999662 60833.999729 +-2072.000101 17.000308 53479.999547 +-14411.999918 5261.999514 63527.999544 +-14185.000455 -5180.999602 69665.000041 +4263.999685 -536.999855 60563.999513 +4724.000258 1575.000409 72200.000149 +4159.999987 4812.999838 57258.000035 +-3930.000140 4837.999779 53659.999939 +-8543.000324 -8542.999590 73099.999989 +-3570.000177 840.999915 53954.000138 +3941.000105 1874.000098 53351.000382 +3946.000349 4637.999658 54342.999822 +8462.999539 8462.999818 72019.999892 +5664.000082 4253.999844 72200.000354 +-5387.999671 2302.000049 72920.000121 +-5388.000189 166.000459 72919.999521 +5664.000053 -4206.999676 72200.000476 +2473.999900 -2709.999879 72380.000265 +16.999506 -1027.000446 53479.999576 +4263.999639 -1647.999637 60564.000406 +3441.000140 1676.999539 53120.000327 +-9496.000107 -5145.000342 73323.999932 +-13992.999533 -4852.000259 73548.000110 +4287.999970 6968.000328 60833.999686 +275.000199 3746.999653 53612.999629 +-14412.000182 -350.999721 63528.000472 +-13992.999868 -4338.000196 73547.999622 +-8543.000347 -4259.000087 73100.000032 +16.999876 5240.000063 53479.999960 +-14372.999770 -9301.999508 65786.000118 +-5127.000314 8129.000114 72980.999503 +-1394.000093 -4227.999771 72560.000486 +4098.999711 3673.000482 55719.999928 +3946.000083 -1523.000092 54342.999694 +4724.000061 -1246.000449 72200.000281 +-13720.999502 -5353.000086 73556.000360 +4723.999887 7215.000403 72200.000242 +-14184.999932 -2754.999701 67936.999780 +1437.000194 -5630.999670 72380.000099 +-5444.999665 -9188.000372 72930.000378 +-4238.000442 -8500.999822 72740.000263 +-8542.999594 4307.000192 73099.999910 +-5388.000269 6574.999714 72920.000493 +-1394.000324 -2811.000366 72559.999570 +16.999584 16.999963 53479.999782 +-14327.000037 -2687.000254 67063.000303 +-1027.000347 6284.999698 53480.000414 +2850.999763 -5631.000213 72380.000333 +-14543.999669 -8982.999787 62170.000241 +-1426.999789 563.000156 53743.999616 +-5127.000214 -2474.000449 72980.999585 +-8542.999689 5734.999797 73100.000259 +-13993.000354 -8958.999738 73548.000223 +1057.999632 3139.999725 53299.999575 +7056.999573 1429.999852 72020.000196 +-13412.999816 -2989.999795 73597.999993 +-14411.999793 5963.000061 63527.999980 +-14544.000399 3487.000172 62169.999836 +4723.999840 869.999743 72200.000174 +1940.999817 5742.999710 53447.999666 +-14411.999874 7365.999941 63528.000371 +3441.000223 5827.000153 53120.000059 +1941.000349 1579.000153 53447.999990 +4723.999767 5099.999678 72199.999767 +-5444.999773 -6354.000185 72929.999902 +-11526.999785 -8253.000306 73393.000090 +4287.999859 5853.000374 60833.999882 +-3538.999732 -3449.999625 72742.999793 +-13993.000364 -7932.000020 73548.000260 +-14373.000228 -3563.000378 65785.999768 +4253.999995 -7026.999870 72200.000060 +-3164.999721 -539.000085 53841.000259 +3940.999621 -1165.000187 53351.000040 +4251.999655 -1611.999954 58826.000287 +3130.000441 1055.000205 53119.999800 +-7114.999827 -7115.000264 73100.000269 +-5388.000004 5151.000233 72919.999833 +-14543.999690 -4825.999812 62169.999558 +-3929.999555 6411.000130 53659.999733 +1940.999639 4702.000362 53447.999846 +-14411.999716 2454.999607 63527.999612 +3440.999501 -915.999922 53119.999778 +4288.000012 -1950.999731 60833.999534 +275.000261 1616.000437 53612.999949 +-1427.000136 -527.000171 53743.999568 +4251.999503 -525.000281 58825.999809 +-260.999615 -1966.999943 53479.999718 +7057.000208 -5603.000018 72020.000259 +-5127.000479 6715.000320 72980.999619 +-1427.000327 3834.000257 53744.000353 +3440.999911 6346.000423 53120.000030 +2850.999822 -7045.000455 72380.000243 +5664.000435 -1386.999766 72200.000059 +-14412.000002 3156.999581 63527.999801 +-8543.000189 -7115.000435 73099.999877 +3445.999629 2566.999931 53380.000265 +3440.999872 -1434.999562 53119.999546 +-3165.000457 5035.000031 53841.000213 +-3929.999582 2218.000457 53659.999557 +3445.999965 -1512.999532 53379.999504 +-1958.000338 -1957.000101 53738.999698 +275.000452 -1581.000215 53613.000308 +-14088.000048 -2934.999842 70989.999715 +-14373.000177 -4997.999695 65786.000128 +8462.999777 5649.999794 72019.999678 +1058.000275 6263.000038 53300.000358 +-7102.000019 -2619.000327 73101.999718 +-8542.999951 -5687.000307 73099.999616 +-3930.000250 2741.999930 53660.000203 +1300.999742 -1960.999792 53299.999640 +4723.999966 4394.999535 72200.000035 +4098.999994 1583.999527 55720.000241 +-13992.999829 -8445.999614 73548.000422 +4098.999861 -1548.999788 55719.999858 +-3930.000368 -1449.999960 53660.000492 +4287.999872 3066.000210 60833.999876 +4287.999522 2508.000016 60833.999841 +-5445.000250 -3519.000073 72930.000344 +-14232.999547 -8002.000380 67645.000212 +-5126.999777 -1767.000240 72980.999857 +3129.999543 5204.999843 53119.999708 +3946.000005 530.999826 54343.000175 +-13721.000221 -3816.000216 73556.000357 +8463.000349 22.999637 72020.000002 +4724.000003 3690.000471 72200.000108 +1058.000380 4180.999601 53300.000207 +274.999810 5879.000134 53613.000459 +354.000245 -2715.999978 72560.000238 +1437.000165 -4217.000476 72380.000479 +3940.999844 4913.000151 53350.999582 +-2895.000382 -1945.000376 53846.999541 +2099.000389 2099.000230 53300.000474 +8463.000426 1430.000487 72020.000078 +4252.000374 561.000004 58826.000032 +3940.999558 523.000164 53351.000416 +1437.000253 -2804.000496 72380.000323 +-14543.999762 -3440.999829 62169.999916 +-14543.999982 -6211.999551 62170.000041 +3441.000291 2714.999685 53119.999987 +5663.999985 -2797.000025 72200.000024 +-14411.999984 -1051.999942 63528.000370 +3440.999562 4271.000407 53120.000029 +-3539.000186 2107.000409 72743.000388 +1057.999822 -1024.000255 53300.000171 +3945.999666 5664.999689 54342.999562 +-5126.999539 5301.000010 72981.000462 +-14575.999627 -3379.999597 60411.999811 +3180.999744 -2710.000374 72380.000052 +-1026.999719 4195.999827 53480.000234 +-3165.000176 575.999615 53840.999507 +3941.000445 -151.999807 53351.000391 +-14576.000174 -657.999845 60411.999636 +-2349.999962 -1966.999590 53479.999902 +-14411.999854 3858.999681 63528.000283 +-10090.000319 -2795.000040 73260.999652 +3941.000477 5924.999710 53350.999731 +4085.000468 -1954.000357 55213.000428 +4253.999936 -8436.999819 72199.999776 +-1394.000360 -8479.999946 72559.999636 +-3569.999726 -841.000285 53953.999993 +-9083.999507 -2718.999761 73217.000072 +3441.000399 640.000398 53120.000050 +4287.999748 -1394.000023 60833.999874 +5664.000340 7073.999686 72199.999963 +-5387.999666 4438.999817 72919.999562 +7056.999636 -7010.000061 72019.999662 +1057.999689 5222.000173 53299.999663 +-5673.000248 4296.000142 72920.000031 +-1027.000260 5239.999713 53480.000273 +-7114.999766 -8543.000300 73100.000022 +274.999590 551.000141 53612.999775 +-3929.999711 -926.000493 53660.000132 +4288.000365 -836.000403 60833.999756 +3446.000332 3586.999913 53379.999531 +3887.999686 -2709.999801 72379.999876 +-3539.000418 -670.999562 72742.999614 +4251.999963 1648.000235 58826.000350 +7056.999875 -1382.999580 72019.999867 +-11526.999831 -9757.999777 73393.000349 +3130.000328 4167.000247 53120.000320 +8463.000402 2837.000196 72020.000275 +3446.000436 -493.000175 53380.000405 +-1427.000357 6013.999828 53744.000254 +-13993.000352 -5365.000211 73547.999983 +3130.000064 6241.999698 53120.000243 +-1393.999680 -7061.999503 72559.999762 +-3929.999947 3266.000354 53660.000396 +-5388.000052 8711.000308 72919.999522 +-5387.999641 5862.999935 72920.000126 +-5673.000220 24.000330 72919.999842 +4160.000111 -514.999580 57257.999620 +3445.999928 527.000347 53379.999914 +-8542.999580 7162.000367 73099.999863 +2947.999993 -1968.000009 53405.999963 +-3929.999592 -1974.000291 53659.999860 +-1305.999625 -1967.000077 53480.000398 +3129.999665 3130.000305 53119.999882 +-4237.999635 -4237.999904 72739.999541 +7057.000491 4243.000297 72019.999582 +-14576.000246 -6102.000206 60411.999747 +4264.000083 2796.999726 60563.999829 +4724.000254 5805.000459 72199.999985 +-5672.999808 -7097.000478 72920.000322 +-7114.999930 1452.000036 73099.999694 +-3929.999839 4313.999708 53660.000336 +-13971.000086 -5267.000118 71592.999574 +-3164.999892 1691.000266 53840.999559 +3941.000485 1198.999988 53351.000119 +-2071.999680 1062.000046 53480.000119 +-3930.000107 5362.999664 53659.999659 +-13972.000434 -2989.999797 73073.000355 +-5387.999734 1589.999640 72920.000470 +-14575.999747 6147.000157 60412.000152 +-3539.000484 4885.000479 72743.000415 +-8543.000350 23.999745 73100.000201 +4159.999933 5878.999799 57258.000196 +-5444.999733 -7771.000335 72929.999842 +-14372.999532 -6432.999688 65786.000443 +3941.000032 5250.000483 53350.999566 +-2817.999801 -4237.999840 72739.999681 +2099.000054 4180.999939 53300.000374 +3440.999903 121.000021 53120.000493 +-14575.999797 -4741.000478 60411.999775 +3940.999685 1535.999624 53351.000429 +-14576.000473 702.999598 60412.000428 +-14475.999775 -4911.999679 63960.999993 +-14131.000326 -2857.999672 69963.000289 +2099.000221 -1024.000206 53299.999555 +-3539.000177 -4839.000490 72742.999973 +-5672.999696 -4248.999669 72919.999901 +1057.999780 16.999883 53300.000257 +5663.999977 5663.999867 72199.999515 +5663.999992 -8436.999738 72200.000314 +-14412.000335 8068.000149 63527.999665 +-5388.000218 -545.999702 72919.999648 +4264.000448 3907.999781 60564.000285 +3129.999620 2092.000354 53120.000415 +1062.999967 -2715.999634 72560.000024 +3940.999708 -1840.000490 53351.000006 +23.999785 -4227.999646 72560.000090 +-3165.000129 -1654.000323 53840.999660 +-5127.000159 2474.000343 72981.000044 +3941.000234 2210.999659 53351.000276 +1436.999565 -7045.000204 72380.000395 +-1426.999662 1654.000050 53744.000497 +4159.999762 -1580.999657 57257.999765 +2099.000277 6263.000009 53300.000166 +-14233.000173 -9461.999637 67644.999640 +4724.000132 6510.000452 72199.999686 +-5388.000295 3014.999741 72919.999528 +4107.000341 -1973.999932 55973.999842 +-1027.000486 1061.999561 53480.000336 +4263.999763 5018.999546 60563.999509 +-3126.999968 6305.999575 53660.000329 +-1062.999814 -2715.999805 72559.999701 +3441.000092 -398.000054 53119.999576 +23.999882 -5645.000302 72559.999942 +-5126.999834 4594.000338 72980.999829 +4252.000254 4907.999952 58825.999554 +-3569.999712 4767.999673 53953.999940 +-14476.000032 -9143.000078 63960.999819 +4071.000131 -1967.999892 54460.000432 +3440.999875 3752.000283 53120.000467 +-14576.000485 3424.999842 60411.999944 +-5160.999508 -2520.999928 72949.000110 +4287.999692 3622.999957 60834.000077 +-5127.000118 1767.000066 72980.999700 +5663.999655 24.000344 72200.000194 +-14576.000480 7508.000120 60411.999689 +-2881.999956 -1974.000116 53659.999591 +3129.999776 16.999790 53119.999905 +-13993.000072 -5879.000105 73548.000170 +4723.999855 -2656.000037 72200.000312 +3940.999633 4574.999653 53351.000095 +17.000159 3150.999751 53479.999993 +-13721.000066 -6890.000008 73555.999864 +-5673.000136 8569.000239 72919.999812 +4287.999834 1393.999656 60834.000047 +-5127.000002 3181.000499 72980.999577 +1437.000111 -8457.999664 72379.999810 +-1027.000182 3151.000481 53480.000213 +8462.999880 -5602.999786 72020.000397 +5663.999998 -7027.000337 72200.000179 +-2071.999836 5240.000427 53480.000403 +3445.999729 4607.000036 53380.000383 +-1394.000136 -5645.000011 72559.999949 +-3127.000033 2113.999786 53660.000272 +3941.000324 2548.999788 53350.999985 +3940.999570 -1502.000342 53351.000013 +-3126.999914 -1030.999894 53659.999552 +-4238.000253 -2817.999880 72739.999988 +3440.999843 -1953.999504 53120.000421 +259.999737 -1960.999636 53300.000138 +-245.000117 -1948.999943 53618.999915 +-11526.999811 -5243.000037 73392.999756 +4724.000234 165.000038 72199.999547 +-3126.999977 3161.999991 53659.999978 +-3569.999564 4207.000094 53953.999501 +275.000170 -514.999842 53613.000034 +-11526.999613 -6747.999928 73392.999616 +-7390.999730 -5035.000249 73077.999705 +275.000340 4813.000352 53612.999844 +-2071.999948 3150.999602 53480.000403 +4251.999765 2735.000064 58826.000103 +-7115.000351 -5686.999885 73100.000358 +4098.999827 2628.999611 55719.999560 +8463.000124 -7010.000397 72020.000009 +-14232.999615 -6543.000442 67645.000485 +-3930.000232 5887.000299 53659.999634 +-14544.000461 2101.000409 62170.000359 +3372.000265 -1954.000261 53119.999806 +-14412.000115 1754.000439 63527.999500 +-14438.999828 -2520.999738 64242.999578 +-14329.999599 -2661.000068 66073.000238 +1941.000120 -1544.000357 53448.000031 +-4238.000332 -5659.000491 72740.000442 +4098.999594 -505.000192 55720.000025 +-2818.000128 -5658.999652 72739.999655 +4288.000306 -278.999978 60833.999586 +-1026.999893 17.000290 53480.000077 +-7114.999937 2878.999603 73099.999625 +4251.999706 3821.999721 58825.999856 +-14544.000411 -7596.999761 62170.000298 +-3539.000189 6273.999627 72742.999519 +-8542.999929 8590.000255 73100.000232 +-14544.000350 715.999575 62170.000076 +-9495.999848 -9576.000383 73323.999907 +-14576.000232 -7462.000020 60411.999731 +-14184.999642 -9643.999972 69665.000056 +-13970.999811 -8291.000315 71593.000038 +-5126.999814 1060.000113 72981.000052 +-7115.000366 7162.000434 73099.999958 +-3165.000448 6150.000036 53840.999507 +8462.999808 4242.999904 72020.000254 +7057.000202 -2790.000123 72020.000020 +-2071.999832 -1026.999844 53479.999642 +-7114.999518 -1404.000177 73100.000300 +3941.000476 3223.999580 53351.000151 +-3569.999782 1402.000069 53953.999777 +-3570.000289 7012.000244 53953.999930 +-5388.000194 877.999982 72919.999818 +-5126.999702 6008.000102 72980.999919 +4263.999700 6130.999796 60564.000158 +-8543.000290 1452.000226 73100.000426 +2850.999705 -4217.000056 72379.999818 +7056.999509 7057.000433 72019.999792 +-13992.999692 -3312.000439 73548.000061 +2850.999879 -8457.999587 72380.000259 +-3538.999600 718.000352 72742.999931 +-3930.000315 646.000457 53659.999635 +4264.000193 573.999697 60564.000002 +2099.000093 5221.999649 53300.000412 +-2071.999917 6284.999527 53479.999583 +4723.999862 7920.000427 72199.999887 +4330.999705 -1963.000266 59887.000081 +2851.000238 -2803.999644 72380.000218 +3440.999720 2195.999826 53119.999530 +-14543.999739 -2055.000043 62170.000137 +-14544.000178 -669.999739 62170.000308 +-14411.999915 351.000242 63527.999545 +3940.999876 5587.999982 53351.000452 +-11526.999792 -3737.999544 73392.999629 +3940.999584 4236.999929 53351.000136 +-7115.000083 -2831.999613 73099.999909 +-14232.999742 -5082.999812 67645.000324 +-3570.000011 -1963.000243 53954.000457 +-14575.999963 -8822.999905 60411.999771 +-3196.999729 -2722.999629 72739.999728 +4270.999791 -1943.999513 59089.999553 +-3930.000132 -402.000411 53659.999785 +4287.999518 -1951.000148 60834.000344 +1057.999742 2098.999992 53299.999970 +24.000007 -2810.999989 72560.000497 +-3570.000037 -280.000196 53954.000365 +7056.999709 -8415.999536 72020.000349 +7057.000090 5650.000225 72020.000014 +4099.000497 4718.000121 55719.999993 +-7115.000395 24.000272 73099.999724 +-14476.000166 -3502.000326 63961.000485 +-3569.999717 6450.999920 53954.000143 +-1163.000334 -1973.999751 53745.000092 +4723.999824 -541.000100 72200.000243 +3940.999990 3899.999923 53350.999622 +-3127.000218 5257.999652 53659.999673 +8463.000217 -1382.999504 72019.999695 +-14232.999844 -3624.000203 67645.000238 +-7390.999511 -3588.999711 73077.999992 +-5127.000472 352.999759 72981.000130 +2099.000363 16.999945 53300.000261 +-7390.999682 -6480.000469 73077.999642 +-5387.999952 7999.000376 72920.000277 +-3569.999553 2524.000332 53954.000210 +3445.999802 5627.000372 53380.000121 +-8543.000137 2878.999786 73100.000062 +-11225.000154 -2878.000184 73429.000219 +-5444.999752 -4937.000206 72929.999910 +-3539.000116 3495.999641 72743.000028 +4724.000434 -1950.999984 72200.000236 +-5387.999758 7287.000091 72920.000451 +3694.000162 -1947.999707 53364.999539 +-14412.000272 -1753.999800 63528.000480 +4724.000342 8625.000362 72199.999560 +2341.999734 -1961.000092 53299.999848 +-2071.999756 4196.000324 53480.000336 +-8543.000296 -2832.000371 73099.999810 +-5127.000024 8834.999681 72980.999971 +-13992.999602 -3825.000472 73548.000110 +3446.000174 1546.999928 53380.000489 +-3127.000366 4209.999619 53659.999561 +-5387.999685 -1258.000068 72920.000033 +-13720.999529 -8426.000197 73555.999797 +4135.999975 -1958.000343 56742.000312 +1058.000030 1057.999685 53299.999642 +2194.000288 -1954.000142 53438.999837 +1821.999693 -1961.000245 53300.000177 +-2486.000272 -2723.000311 72740.000113 +4251.999519 5994.999969 58825.999706 +-782.999723 -1966.999702 53480.000385 +-14184.999503 -3694.000155 69664.999741 +-7391.000162 -7925.000424 73077.999760 +3941.000365 3562.000286 53350.999697 +-5673.000072 -2824.999976 72920.000076 +-3929.999836 3789.999783 53660.000108 +4288.000033 5295.999782 60834.000285 +8463.000290 -4195.999621 72020.000158 +-1026.999905 2106.000122 53480.000172 +-14544.000315 6258.000031 62169.999860 +2098.999845 3140.000130 53300.000384 +17.000326 2105.999614 53480.000329 +-2817.999707 -2817.999500 72740.000297 +-5127.000216 7421.999889 72980.999545 +-14035.000213 -2961.999816 72026.999857 +3941.000206 -490.000295 53351.000305 +-3127.000000 1065.999857 53660.000041 +-14412.000070 4560.000349 63527.999884 +-1427.000275 -1616.999797 53744.000069 +-6126.000265 -2593.999720 73030.000099 +4099.000391 5762.000184 55719.999589 +3440.999902 1159.000232 53119.999985 +23.999963 -7062.000133 72559.999953 +-3164.999618 3921.000274 53840.999514 +3940.999690 6263.000241 53351.000160 +5663.999668 1434.000202 72199.999998 +3946.000045 -496.000294 54342.999676 +-3538.999923 7662.999718 72742.999936 +3946.000069 1557.999781 54343.000397 +-13992.999519 -7419.000292 73548.000211 +-14576.000246 -2018.999804 60411.999775 +4724.000039 2279.999748 72200.000311 +4253.999732 -5616.999621 72199.999908 +1940.999753 2619.999683 53447.999667 +3441.000116 3234.000032 53120.000379 +-7114.999901 4307.000119 73100.000483 +4288.000399 4738.000285 60834.000007 +4253.999724 -2797.000058 72199.999720 +5664.000222 2843.999541 72200.000437 +7056.999584 8463.000456 72020.000228 +-3930.000418 1694.000154 53659.999991 +-353.999670 -2715.999787 72559.999549 +-14162.999975 -2781.999699 68944.999901 +4287.999827 4180.999517 60834.000197 +-2071.999586 2105.999678 53480.000453 +-7390.999953 -9370.000271 73077.999510 +8462.999606 7057.000057 72020.000254 +7056.999555 2837.000361 72019.999548 +-7114.999806 8589.999936 73100.000030 +-5126.999903 -1060.000339 72980.999664 +8463.000265 -8415.999563 72019.999761 +-14475.999815 -7732.000263 63960.999905 +-14411.999736 -2454.999933 63528.000161 +4253.999680 -4207.000000 72200.000403 +-5341.000241 -2729.999555 72920.000190 +2853.000367 -1953.999662 53119.999629 +-3406.000346 -1973.999690 53659.999516 +-1775.999547 -2723.000080 72740.000246 +4217.999913 -1960.999660 58299.999623 +-12252.999887 -2905.000019 73451.999641 +-8542.999786 -1404.000473 73099.999728 +-3126.999630 16.999618 53660.000475 +4159.999910 1615.999982 57258.000198 +-2818.000192 -8501.000061 72739.999578 +-5673.000319 -5673.000048 72919.999599 +-5126.999657 -352.999916 72981.000008 +-14543.999526 4873.000287 62170.000355 +5664.000113 -5617.000339 72200.000484 +-13992.999970 -6905.000388 73548.000167 +-3906.999574 -2723.000211 72740.000342 +-5672.999570 -1399.999715 72920.000026 +-3569.999982 5890.000467 53954.000331 +4288.000173 6409.999525 60833.999858 +-5387.999815 -2682.000374 72920.000431 +-13971.000415 -3755.000354 71592.999978 +-3930.000128 1170.000156 53659.999938 +-1828.000158 -1966.999726 53479.999657 +17.000335 4196.000427 53479.999613 +-1427.000066 4924.000037 53743.999863 +-13721.000451 -9963.000322 73555.999557 +-5388.000021 3727.000164 72919.999832 +1941.000051 538.000495 53448.000163 +4287.999864 836.000460 60833.999839 +780.999670 -1960.999553 53299.999658 +-5673.000397 7144.999809 72919.999807 +-5673.000146 2871.999537 72920.000249 +533.000383 -1965.000046 53607.999748 +-13992.999662 -9985.999679 73548.000146 +4582.999714 -2702.999761 72199.999726 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/fin b/Alpha_shapes_3/demo/Alpha_shapes_3/data/fin new file mode 100644 index 000000000000..7b20bc03c7fc --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/fin @@ -0,0 +1,8 @@ +7 +5.51274721097227705 8.87625776353026552 1.95944807904169238 +9.0973375091665627 3.5350701520269201 4.7238755547204434 +0.911806739546155987 6.95856700036594145 2.36699662526417143 +5.36336900378107373 1.05840486239320186 1.22179856797203001 +0.289239615689291796 9.24621240074391082 2.17110435171762095 +1.39772879354093327 3.51084799856703622 9.44541630320511771 +7.31227573940480369 2.67306741439382023 0.511378392640958745 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/fout b/Alpha_shapes_3/demo/Alpha_shapes_3/data/fout new file mode 100644 index 000000000000..016012bd00cc --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/fout @@ -0,0 +1,17 @@ +5.51275 8.87626 1.95945 +0.911807 6.95857 2.367 +5.36337 1.0584 1.2218 +7.31228 2.67307 0.511378 +9.09734 3.53507 4.72388 +1.39773 3.51085 9.44542 +0.28924 9.24621 2.1711 +4 5 0 +5 6 0 +1 0 6 +3 2 4 +4 0 3 +2 3 1 +0 1 3 +2 5 4 +5 2 1 +6 5 1 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/head_ran.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/head_ran.pts new file mode 100644 index 000000000000..c9cacabc3ff2 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/head_ran.pts @@ -0,0 +1,857 @@ +856 +304.000000 483.000000 110.000433 +173.000000 315.000000 150.000135 +389.000000 259.000000 110.000009 +197.000000 341.000000 130.000097 +390.000000 329.000000 69.999907 +87.000000 189.000000 119.999588 +427.000000 391.000000 19.999914 +219.000000 283.000000 159.999587 +228.000000 410.000000 149.999687 +176.000000 356.000000 150.000143 +36.000000 243.000000 40.000174 +409.000000 409.000000 9.999581 +345.000000 395.000000 130.000241 +378.000000 336.000000 79.999859 +405.000000 442.000000 29.999878 +437.000000 388.000000 20.000099 +385.000000 345.000000 90.000418 +223.000000 509.000000 10.000330 +253.000000 62.000000 10.000304 +339.000000 498.000000 40.000232 +418.000000 406.000000 20.000279 +203.000000 86.000000 99.999776 +96.000000 159.000000 120.000081 +390.000000 320.000000 69.999762 +344.000000 362.000000 139.999772 +157.000000 57.000000 -0.000304 +130.000000 480.000000 40.000064 +190.000000 294.000000 160.000245 +407.000000 398.000000 30.000234 +396.000000 436.000000 40.000360 +387.000000 332.000000 49.999562 +192.000000 317.000000 149.999693 +90.000000 134.000000 99.999822 +92.000000 252.000000 130.000028 +164.000000 251.000000 159.999649 +161.000000 448.000000 120.000467 +380.000000 453.000000 50.000039 +76.000000 423.000000 39.999921 +410.000000 176.000000 40.000464 +346.000000 238.000000 140.000280 +278.000000 464.000000 130.000458 +318.000000 464.000000 110.000374 +421.000000 273.000000 39.999857 +320.000000 85.000000 9.999990 +230.000000 60.000000 40.000167 +403.000000 443.000000 9.999941 +377.000000 278.000000 129.999965 +211.000000 75.000000 79.999614 +396.000000 451.000000 19.999695 +379.000000 323.000000 100.000100 +138.000000 162.000000 149.999904 +373.000000 359.000000 119.999709 +298.000000 154.000000 140.000005 +377.000000 481.000000 19.999977 +405.000000 280.000000 99.999667 +412.000000 329.000000 20.000329 +392.000000 320.000000 80.000343 +155.000000 323.000000 159.999924 +171.000000 323.000000 149.999700 +70.000000 369.000000 60.000396 +270.000000 512.000000 100.000031 +62.000000 359.000000 10.000338 +401.000000 300.000000 49.999758 +366.000000 156.000000 99.999742 +125.000000 289.000000 150.000344 +306.000000 417.000000 140.000297 +189.000000 303.000000 160.000009 +215.000000 339.000000 140.000396 +346.000000 349.000000 139.999537 +73.000000 365.000000 69.999577 +127.000000 77.000000 70.000150 +108.000000 80.000000 9.999701 +416.000000 396.000000 29.999763 +355.000000 471.000000 70.000335 +383.000000 332.000000 79.999789 +279.000000 495.000000 109.999962 +182.000000 392.000000 139.999695 +418.000000 194.000000 20.000169 +399.000000 396.000000 49.999602 +323.000000 406.000000 139.999632 +401.000000 296.000000 70.000372 +116.000000 94.000000 90.000421 +408.000000 302.000000 39.999870 +398.000000 444.000000 39.999970 +391.000000 316.000000 59.999679 +34.000000 233.000000 29.999582 +406.000000 412.000000 20.000116 +75.000000 278.000000 109.999973 +36.000000 251.000000 19.999539 +387.000000 142.000000 -0.000290 +415.000000 231.000000 60.000112 +114.000000 84.000000 59.999969 +176.000000 309.000000 159.999733 +104.000000 469.000000 79.999782 +134.000000 80.000000 80.000475 +365.000000 453.000000 60.000166 +76.000000 325.000000 100.000301 +372.000000 346.000000 120.000425 +384.000000 160.000000 79.999710 +352.000000 318.000000 129.999934 +385.000000 317.000000 40.000493 +381.000000 319.000000 110.000497 +103.000000 84.000000 19.999857 +400.000000 406.000000 40.000279 +354.000000 491.000000 60.000459 +419.000000 282.000000 10.000487 +203.000000 507.000000 60.000487 +235.000000 510.000000 89.999674 +444.000000 387.000000 29.999811 +391.000000 313.000000 99.999893 +398.000000 450.000000 9.999883 +131.000000 300.000000 150.000225 +83.000000 110.000000 40.000016 +187.000000 503.000000 -0.000434 +155.000000 323.000000 150.000140 +212.000000 54.000000 19.999945 +97.000000 291.000000 129.999725 +148.000000 308.000000 149.999883 +343.000000 211.000000 139.999546 +198.000000 328.000000 120.000389 +431.000000 405.000000 19.999725 +400.000000 300.000000 89.999605 +400.000000 184.000000 80.000122 +362.000000 340.000000 129.999568 +347.000000 272.000000 140.000053 +104.000000 251.000000 140.000464 +71.000000 131.000000 59.999648 +110.000000 94.000000 79.999923 +374.000000 479.000000 40.000239 +372.000000 328.000000 99.999759 +374.000000 456.000000 49.999600 +217.000000 466.000000 129.999695 +207.000000 340.000000 119.999813 +394.000000 298.000000 109.999600 +398.000000 158.000000 20.000463 +376.000000 422.000000 69.999535 +419.000000 204.000000 39.999848 +397.000000 425.000000 39.999772 +425.000000 394.000000 -0.000166 +395.000000 469.000000 0.000180 +203.000000 347.000000 130.000090 +175.000000 356.000000 159.999756 +337.000000 482.000000 79.999700 +403.000000 290.000000 100.000395 +384.000000 441.000000 59.999825 +103.000000 268.000000 139.999921 +88.000000 158.000000 110.000417 +420.000000 264.000000 49.999543 +394.000000 309.000000 59.999763 +403.000000 385.000000 49.999907 +398.000000 274.000000 109.999683 +398.000000 396.000000 30.000477 +188.000000 376.000000 149.999695 +251.000000 467.000000 129.999727 +410.000000 173.000000 -0.000375 +419.000000 388.000000 30.000459 +53.000000 178.000000 70.000064 +386.000000 456.000000 29.999720 +230.000000 432.000000 139.999657 +209.000000 102.000000 119.999952 +399.000000 261.000000 100.000481 +34.000000 263.000000 9.999982 +387.000000 185.000000 100.000227 +166.000000 200.000000 160.000091 +397.000000 459.000000 10.000459 +112.000000 355.000000 119.999623 +151.000000 416.000000 119.999934 +387.000000 396.000000 70.000126 +414.000000 205.000000 59.999887 +84.000000 431.000000 49.999623 +54.000000 333.000000 40.000151 +226.000000 489.000000 120.000098 +210.000000 331.000000 139.999959 +62.000000 355.000000 59.999599 +128.000000 201.000000 149.999744 +399.000000 310.000000 40.000499 +285.000000 137.000000 129.999978 +271.000000 90.000000 79.999948 +392.000000 406.000000 39.999814 +126.000000 71.000000 19.999775 +395.000000 316.000000 69.999631 +196.000000 340.000000 140.000123 +172.000000 101.000000 119.999703 +386.000000 386.000000 20.000299 +412.000000 373.000000 20.000375 +368.000000 337.000000 119.999973 +192.000000 56.000000 29.999926 +326.000000 425.000000 129.999868 +328.000000 124.000000 100.000456 +419.000000 252.000000 60.000317 +101.000000 187.000000 130.000292 +282.000000 510.000000 40.000476 +48.000000 169.000000 19.999612 +368.000000 263.000000 130.000181 +106.000000 86.000000 40.000336 +137.000000 485.000000 60.000020 +337.000000 498.000000 10.000284 +179.000000 390.000000 149.999695 +57.000000 165.000000 60.000363 +370.000000 319.000000 119.999686 +159.000000 305.000000 159.999920 +380.000000 410.000000 69.999540 +66.000000 161.000000 80.000411 +211.000000 325.000000 120.000116 +207.000000 322.000000 110.000247 +136.000000 139.000000 139.999844 +425.000000 364.000000 0.000175 +46.000000 181.000000 50.000130 +407.000000 374.000000 39.999586 +410.000000 170.000000 9.999842 +416.000000 288.000000 40.000290 +301.000000 198.000000 149.999552 +368.000000 431.000000 79.999967 +95.000000 115.000000 89.999527 +190.000000 504.000000 40.000392 +431.000000 381.000000 39.999951 +389.000000 385.000000 60.000331 +111.000000 236.000000 139.999941 +305.000000 86.000000 49.999887 +174.000000 344.000000 150.000400 +406.000000 290.000000 79.999632 +411.000000 176.000000 30.000029 +403.000000 401.000000 0.000395 +186.000000 371.000000 149.999597 +396.000000 378.000000 19.999972 +407.000000 393.000000 50.000248 +314.000000 84.000000 30.000111 +82.000000 442.000000 40.000237 +190.000000 63.000000 59.999546 +418.000000 280.000000 50.000063 +107.000000 109.000000 99.999534 +429.000000 377.000000 20.000148 +241.000000 399.000000 149.999519 +231.000000 480.000000 119.999633 +293.000000 494.000000 110.000320 +386.000000 395.000000 50.000398 +189.000000 304.000000 150.000129 +359.000000 426.000000 100.000239 +404.000000 445.000000 20.000042 +390.000000 362.000000 60.000269 +255.000000 393.000000 149.999647 +266.000000 511.000000 60.000270 +445.000000 377.000000 19.999922 +238.000000 512.000000 80.000183 +263.000000 74.000000 60.000051 +345.000000 327.000000 130.000341 +297.000000 510.000000 69.999558 +204.000000 336.000000 110.000464 +93.000000 273.000000 130.000439 +156.000000 143.000000 149.999849 +214.000000 414.000000 150.000013 +208.000000 475.000000 130.000315 +174.000000 350.000000 149.999545 +406.000000 179.000000 59.999608 +397.000000 418.000000 39.999645 +197.000000 340.000000 109.999887 +305.000000 95.000000 70.000078 +223.000000 451.000000 130.000063 +67.000000 291.000000 99.999993 +374.000000 461.000000 59.999831 +395.000000 317.000000 89.999780 +140.000000 482.000000 100.000201 +364.000000 361.000000 129.999692 +396.000000 462.000000 0.000002 +403.000000 421.000000 10.000436 +373.000000 174.000000 109.999736 +393.000000 458.000000 19.999949 +379.000000 456.000000 39.999971 +396.000000 240.000000 100.000184 +71.000000 118.000000 20.000391 +364.000000 427.000000 90.000438 +390.000000 440.000000 49.999887 +44.000000 183.000000 0.000039 +75.000000 348.000000 90.000315 +405.000000 315.000000 0.000238 +320.000000 96.000000 60.000082 +85.000000 447.000000 50.000024 +391.000000 313.000000 40.000474 +303.000000 506.000000 29.999976 +346.000000 147.000000 110.000432 +203.000000 323.000000 120.000169 +185.000000 502.000000 90.000110 +135.000000 94.000000 100.000385 +385.000000 326.000000 99.999934 +388.000000 474.000000 39.999867 +43.000000 221.000000 70.000067 +415.000000 267.000000 79.999572 +401.000000 300.000000 80.000252 +54.000000 190.000000 79.999547 +388.000000 414.000000 49.999501 +400.000000 435.000000 29.999929 +179.000000 325.000000 149.999681 +390.000000 475.000000 20.000480 +210.000000 329.000000 110.000432 +124.000000 264.000000 149.999656 +380.000000 357.000000 110.000447 +35.000000 221.000000 0.000130 +422.000000 256.000000 -0.000478 +297.000000 502.000000 100.000074 +387.000000 404.000000 40.000484 +121.000000 142.000000 129.999588 +363.000000 488.000000 49.999644 +81.000000 441.000000 -0.000224 +310.000000 125.000000 110.000381 +202.000000 330.000000 129.999580 +154.000000 79.000000 90.000488 +349.000000 281.000000 139.999939 +266.000000 452.000000 139.999876 +419.000000 273.000000 60.000253 +60.000000 291.000000 90.000373 +53.000000 160.000000 30.000462 +401.000000 327.000000 29.999868 +388.000000 333.000000 90.000054 +409.000000 393.000000 39.999876 +329.000000 501.000000 19.999774 +66.000000 203.000000 99.999570 +84.000000 101.000000 0.000252 +378.000000 372.000000 110.000496 +177.000000 378.000000 160.000055 +378.000000 208.000000 120.000080 +39.000000 260.000000 49.999598 +113.000000 439.000000 90.000322 +386.000000 404.000000 50.000352 +88.000000 335.000000 110.000457 +408.000000 239.000000 80.000309 +385.000000 339.000000 79.999563 +65.000000 359.000000 -0.000186 +388.000000 339.000000 70.000118 +194.000000 479.000000 130.000054 +205.000000 359.000000 150.000249 +308.000000 366.000000 149.999771 +411.000000 305.000000 9.999644 +336.000000 473.000000 90.000141 +107.000000 380.000000 100.000196 +413.000000 210.000000 69.999762 +417.000000 191.000000 9.999593 +422.000000 243.000000 30.000485 +290.000000 76.000000 39.999602 +387.000000 321.000000 99.999700 +107.000000 439.000000 79.999777 +240.000000 254.000000 160.000437 +422.000000 265.000000 9.999794 +49.000000 243.000000 79.999624 +396.000000 392.000000 29.999964 +69.000000 389.000000 9.999977 +393.000000 327.000000 79.999595 +383.000000 337.000000 90.000313 +124.000000 155.000000 139.999884 +390.000000 328.000000 89.999610 +388.000000 310.000000 109.999974 +401.000000 437.000000 20.000420 +181.000000 305.000000 149.999817 +122.000000 121.000000 119.999998 +81.000000 441.000000 20.000065 +107.000000 303.000000 129.999801 +51.000000 295.000000 60.000192 +97.000000 458.000000 70.000150 +112.000000 293.000000 140.000309 +392.000000 147.000000 29.999844 +395.000000 458.000000 -0.000345 +396.000000 471.000000 20.000089 +205.000000 445.000000 139.999722 +392.000000 425.000000 49.999927 +407.000000 291.000000 60.000455 +364.000000 329.000000 109.999573 +334.000000 449.000000 110.000287 +377.000000 296.000000 129.999513 +202.000000 396.000000 149.999929 +68.000000 386.000000 19.999990 +376.000000 332.000000 89.999690 +442.000000 399.000000 20.000326 +388.000000 295.000000 120.000295 +387.000000 341.000000 50.000408 +112.000000 81.000000 49.999621 +410.000000 386.000000 50.000226 +59.000000 311.000000 80.000359 +330.000000 499.000000 80.000308 +199.000000 332.000000 110.000351 +202.000000 332.000000 140.000116 +38.000000 196.000000 30.000366 +206.000000 407.000000 150.000108 +385.000000 458.000000 39.999801 +178.000000 370.000000 150.000203 +74.000000 419.000000 10.000074 +417.000000 405.000000 29.999702 +47.000000 272.000000 69.999870 +164.000000 373.000000 160.000203 +408.000000 409.000000 29.999548 +376.000000 335.000000 99.999615 +399.000000 396.000000 19.999683 +334.000000 491.000000 79.999633 +379.000000 478.000000 -0.000167 +303.000000 471.000000 120.000457 +291.000000 478.000000 120.000436 +400.000000 433.000000 0.000031 +90.000000 450.000000 59.999865 +319.000000 291.000000 150.000192 +33.000000 256.000000 20.000497 +445.000000 393.000000 10.000151 +341.000000 497.000000 69.999978 +390.000000 240.000000 110.000036 +276.000000 69.000000 19.999504 +173.000000 57.000000 40.000059 +209.000000 359.000000 139.999774 +387.000000 392.000000 20.000481 +318.000000 503.000000 89.999523 +378.000000 478.000000 39.999991 +84.000000 285.000000 119.999551 +337.000000 335.000000 140.000134 +117.000000 372.000000 109.999629 +359.000000 458.000000 79.999820 +146.000000 67.000000 60.000076 +377.000000 406.000000 90.000477 +381.000000 316.000000 109.999684 +48.000000 183.000000 60.000220 +302.000000 452.000000 130.000413 +138.000000 100.000000 109.999758 +268.000000 511.000000 20.000319 +210.000000 324.000000 109.999505 +331.000000 180.000000 139.999527 +354.000000 422.000000 109.999787 +287.000000 509.000000 80.000157 +217.000000 437.000000 139.999915 +348.000000 294.000000 139.999826 +145.000000 109.000000 119.999748 +86.000000 413.000000 69.999800 +407.000000 365.000000 39.999844 +393.000000 458.000000 29.999694 +180.000000 409.000000 139.999597 +79.000000 429.000000 0.000369 +385.000000 468.000000 50.000300 +167.000000 68.000000 70.000425 +424.000000 392.000000 40.000496 +334.000000 328.000000 139.999843 +88.000000 115.000000 79.999614 +185.000000 284.000000 160.000326 +178.000000 122.000000 140.000324 +96.000000 434.000000 69.999906 +138.000000 390.000000 119.999927 +379.000000 449.000000 60.000479 +383.000000 360.000000 100.000229 +394.000000 447.000000 40.000372 +429.000000 374.000000 0.000267 +250.000000 447.000000 140.000291 +374.000000 395.000000 99.999977 +421.000000 400.000000 29.999804 +173.000000 498.000000 100.000223 +112.000000 80.000000 29.999608 +397.000000 307.000000 69.999990 +94.000000 95.000000 30.000227 +365.000000 214.000000 130.000457 +69.000000 124.000000 -0.000140 +214.000000 342.000000 129.999922 +378.000000 324.000000 50.000407 +170.000000 92.000000 110.000496 +396.000000 206.000000 99.999936 +385.000000 359.000000 89.999911 +262.000000 483.000000 120.000212 +73.000000 418.000000 0.000094 +263.000000 117.000000 120.000412 +392.000000 469.000000 40.000013 +203.000000 340.000000 120.000411 +206.000000 141.000000 149.999614 +65.000000 250.000000 100.000372 +408.000000 263.000000 89.999711 +356.000000 326.000000 120.000249 +390.000000 318.000000 90.000241 +357.000000 369.000000 129.999641 +200.000000 332.000000 149.999692 +356.000000 314.000000 130.000478 +206.000000 335.000000 150.000105 +388.000000 349.000000 79.999724 +422.000000 361.000000 29.999572 +336.000000 384.000000 139.999898 +371.000000 477.000000 49.999938 +383.000000 332.000000 70.000333 +358.000000 117.000000 49.999606 +228.000000 511.000000 109.999685 +391.000000 449.000000 50.000425 +210.000000 331.000000 130.000294 +414.000000 332.000000 10.000205 +79.000000 429.000000 20.000389 +425.000000 348.000000 19.999522 +188.000000 500.000000 120.000132 +414.000000 395.000000 19.999694 +333.000000 502.000000 0.000474 +163.000000 74.000000 80.000256 +414.000000 352.000000 0.000273 +396.000000 471.000000 29.999511 +161.000000 113.000000 130.000121 +38.000000 271.000000 0.000064 +406.000000 390.000000 29.999509 +255.000000 136.000000 140.000180 +143.000000 362.000000 130.000256 +205.000000 348.000000 149.999703 +370.000000 484.000000 39.999679 +361.000000 394.000000 119.999961 +236.000000 511.000000 69.999764 +161.000000 344.000000 150.000324 +271.000000 99.000000 100.000087 +347.000000 129.000000 90.000352 +383.000000 473.000000 20.000348 +418.000000 261.000000 69.999636 +342.000000 477.000000 80.000249 +240.000000 212.000000 159.999945 +93.000000 387.000000 89.999525 +214.000000 335.000000 130.000266 +434.000000 365.000000 19.999711 +377.000000 248.000000 120.000476 +84.000000 227.000000 120.000431 +391.000000 462.000000 39.999559 +390.000000 473.000000 -0.000072 +442.000000 378.000000 29.999932 +357.000000 126.000000 69.999812 +64.000000 143.000000 49.999661 +339.000000 310.000000 139.999787 +376.000000 446.000000 69.999556 +421.000000 272.000000 29.999579 +383.000000 398.000000 79.999947 +377.000000 339.000000 90.000050 +357.000000 461.000000 70.000494 +381.000000 346.000000 99.999989 +198.000000 335.000000 129.999550 +383.000000 383.000000 89.999876 +392.000000 395.000000 50.000489 +385.000000 318.000000 50.000068 +196.000000 506.000000 109.999506 +183.000000 138.000000 150.000295 +434.000000 396.000000 0.000059 +38.000000 219.000000 50.000182 +390.000000 284.000000 120.000395 +365.000000 347.000000 129.999830 +74.000000 118.000000 30.000426 +207.000000 122.000000 140.000380 +113.000000 116.000000 109.999784 +416.000000 292.000000 30.000362 +414.000000 279.000000 80.000030 +441.000000 386.000000 0.000095 +144.000000 337.000000 139.999525 +386.000000 148.000000 60.000351 +93.000000 409.000000 79.999575 +170.000000 409.000000 129.999719 +104.000000 348.000000 119.999514 +377.000000 416.000000 80.000066 +392.000000 410.000000 40.000224 +322.000000 258.000000 150.000354 +387.000000 142.000000 39.999842 +378.000000 327.000000 109.999670 +403.000000 268.000000 99.999822 +219.000000 183.000000 160.000476 +196.000000 361.000000 150.000187 +436.000000 397.000000 30.000102 +187.000000 334.000000 150.000416 +361.000000 476.000000 60.000302 +265.000000 462.000000 129.999811 +357.000000 334.000000 129.999518 +397.000000 317.000000 80.000196 +201.000000 110.000000 129.999544 +170.000000 292.000000 159.999874 +376.000000 342.000000 110.000096 +288.000000 382.000000 150.000470 +385.000000 328.000000 40.000208 +380.000000 263.000000 120.000184 +279.000000 96.000000 90.000454 +298.000000 508.000000 10.000017 +391.000000 274.000000 119.999504 +80.000000 121.000000 70.000114 +414.000000 240.000000 70.000303 +72.000000 385.000000 50.000489 +312.000000 443.000000 129.999958 +381.000000 307.000000 119.999893 +147.000000 60.000000 29.999771 +233.000000 512.000000 49.999755 +129.000000 479.000000 69.999985 +383.000000 474.000000 -0.000300 +119.000000 474.000000 50.000440 +162.000000 87.000000 99.999822 +388.000000 320.000000 60.000475 +208.000000 92.000000 110.000454 +402.000000 441.000000 -0.000434 +247.000000 61.000000 30.000254 +60.000000 177.000000 89.999508 +375.000000 338.000000 100.000112 +388.000000 475.000000 30.000200 +169.000000 361.000000 150.000305 +73.000000 138.000000 69.999613 +151.000000 130.000000 140.000243 +292.000000 428.000000 139.999652 +43.000000 288.000000 40.000209 +411.000000 196.000000 69.999886 +191.000000 440.000000 139.999870 +188.000000 393.000000 150.000062 +379.000000 331.000000 100.000426 +421.000000 211.000000 10.000373 +151.000000 489.000000 110.000018 +214.000000 501.000000 120.000350 +186.000000 475.000000 130.000205 +119.000000 171.000000 139.999644 +166.000000 495.000000 49.999638 +94.000000 139.000000 110.000263 +361.000000 113.000000 30.000475 +287.000000 462.000000 129.999600 +119.000000 472.000000 0.000324 +336.000000 499.000000 59.999701 +397.000000 309.000000 79.999503 +396.000000 468.000000 9.999539 +418.000000 219.000000 50.000021 +188.000000 53.000000 9.999892 +317.000000 484.000000 99.999771 +87.000000 99.000000 9.999789 +440.000000 400.000000 10.000026 +77.000000 414.000000 50.000086 +59.000000 334.000000 69.999692 +389.000000 473.000000 10.000131 +93.000000 364.000000 99.999586 +191.000000 380.000000 140.000324 +397.000000 463.000000 20.000440 +314.000000 83.000000 -0.000144 +404.000000 252.000000 89.999526 +192.000000 55.000000 0.000057 +37.000000 211.000000 39.999811 +408.000000 337.000000 0.000463 +386.000000 321.000000 50.000145 +57.000000 307.000000 69.999726 +399.000000 434.000000 9.999597 +440.000000 394.000000 0.000167 +194.000000 347.000000 139.999819 +187.000000 359.000000 160.000408 +82.000000 430.000000 30.000265 +292.000000 510.000000 90.000293 +179.000000 291.000000 160.000422 +346.000000 484.000000 69.999785 +433.000000 395.000000 19.999927 +238.000000 463.000000 129.999988 +431.000000 404.000000 10.000165 +125.000000 346.000000 130.000258 +364.000000 483.000000 50.000249 +152.000000 60.000000 10.000471 +412.000000 390.000000 50.000296 +167.000000 492.000000 119.999873 +162.000000 360.000000 140.000440 +76.000000 394.000000 60.000355 +404.000000 389.000000 0.000108 +131.000000 68.000000 10.000393 +79.000000 430.000000 9.999539 +414.000000 282.000000 59.999976 +171.000000 344.000000 160.000494 +140.000000 307.000000 150.000051 +371.000000 276.000000 130.000475 +410.000000 320.000000 9.999772 +399.000000 300.000000 60.000152 +410.000000 275.000000 90.000213 +178.000000 501.000000 69.999844 +396.000000 463.000000 29.999717 +270.000000 511.000000 0.000287 +105.000000 365.000000 110.000111 +36.000000 263.000000 29.999728 +42.000000 269.000000 60.000204 +152.000000 382.000000 129.999554 +139.000000 124.000000 129.999830 +178.000000 499.000000 9.999512 +380.000000 329.000000 60.000364 +195.000000 398.000000 149.999704 +105.000000 138.000000 120.000289 +130.000000 480.000000 19.999848 +241.000000 504.000000 110.000227 +249.000000 61.000000 0.000215 +149.000000 63.000000 50.000394 +435.000000 381.000000 19.999612 +370.000000 120.000000 19.999582 +395.000000 363.000000 50.000173 +390.000000 455.000000 0.000083 +345.000000 465.000000 89.999529 +321.000000 451.000000 120.000069 +232.000000 72.000000 69.999566 +78.000000 441.000000 10.000433 +411.000000 254.000000 79.999644 +349.000000 104.000000 9.999972 +40.000000 224.000000 59.999868 +401.000000 417.000000 30.000379 +55.000000 328.000000 60.000186 +136.000000 66.000000 39.999869 +387.000000 459.000000 19.999694 +238.000000 120.000000 129.999648 +380.000000 232.000000 119.999852 +387.000000 336.000000 59.999680 +386.000000 316.000000 100.000192 +202.000000 323.000000 110.000169 +421.000000 243.000000 39.999865 +378.000000 477.000000 19.999946 +403.000000 407.000000 0.000441 +117.000000 473.000000 10.000461 +388.000000 454.000000 40.000397 +36.000000 209.000000 9.999788 +344.000000 158.000000 120.000283 +167.000000 319.000000 160.000206 +80.000000 432.000000 39.999684 +124.000000 318.000000 139.999804 +379.000000 285.000000 130.000148 +420.000000 205.000000 29.999982 +364.000000 457.000000 60.000173 +314.000000 319.000000 150.000372 +271.000000 387.000000 149.999929 +405.000000 324.000000 -0.000038 +393.000000 305.000000 49.999780 +380.000000 472.000000 50.000100 +392.000000 455.000000 10.000360 +430.000000 366.000000 30.000433 +88.000000 433.000000 60.000203 +400.000000 426.000000 20.000350 +198.000000 506.000000 19.999553 +369.000000 321.000000 109.999993 +389.000000 376.000000 70.000300 +447.000000 391.000000 19.999590 +78.000000 255.000000 120.000420 +201.000000 310.000000 150.000380 +385.000000 330.000000 99.999671 +313.000000 506.000000 50.000090 +398.000000 286.000000 110.000315 +366.000000 325.000000 119.999806 +431.000000 389.000000 39.999680 +71.000000 122.000000 9.999706 +416.000000 393.000000 -0.000388 +339.000000 98.000000 40.000373 +354.000000 120.000000 59.999789 +163.000000 480.000000 119.999792 +209.000000 78.000000 90.000471 +340.000000 454.000000 100.000347 +344.000000 120.000000 79.999566 +34.000000 221.000000 20.000076 +130.000000 440.000000 100.000378 +367.000000 328.000000 100.000402 +372.000000 485.000000 29.999664 +35.000000 247.000000 -0.000266 +230.000000 454.000000 130.000398 +155.000000 314.000000 150.000438 +386.000000 168.000000 89.999942 +423.000000 398.000000 20.000409 +252.000000 68.000000 49.999609 +405.000000 314.000000 30.000086 +78.000000 140.000000 90.000406 +373.000000 453.000000 60.000142 +159.000000 328.000000 150.000142 +74.000000 417.000000 30.000409 +330.000000 91.000000 20.000081 +388.000000 332.000000 80.000109 +385.000000 328.000000 60.000013 +174.000000 447.000000 130.000073 +316.000000 226.000000 149.999931 +393.000000 453.000000 30.000415 +361.000000 321.000000 119.999624 +376.000000 465.000000 60.000467 +366.000000 448.000000 79.999941 +58.000000 346.000000 50.000010 +391.000000 384.000000 50.000228 +162.000000 396.000000 129.999672 +425.000000 378.000000 40.000076 +421.000000 278.000000 -0.000240 +179.000000 381.000000 150.000273 +355.000000 483.000000 60.000125 +82.000000 442.000000 29.999998 +83.000000 108.000000 50.000310 +407.000000 175.000000 49.999596 +74.000000 418.000000 19.999690 +132.000000 415.000000 109.999606 +327.000000 489.000000 90.000109 +408.000000 211.000000 79.999683 +416.000000 201.000000 50.000427 +69.000000 380.000000 40.000280 +235.000000 151.000000 150.000472 +369.000000 307.000000 130.000229 +396.000000 164.000000 70.000265 +308.000000 338.000000 149.999970 +175.000000 330.000000 159.999778 +150.000000 349.000000 139.999937 +421.000000 219.000000 -0.000068 +444.000000 384.000000 9.999661 +407.000000 335.000000 29.999975 +123.000000 480.000000 90.000020 +388.000000 207.000000 110.000124 +190.000000 372.000000 140.000446 +127.000000 482.000000 30.000090 +276.000000 476.000000 120.000370 +413.000000 289.000000 49.999591 +240.000000 510.000000 30.000054 +410.000000 316.000000 20.000107 +354.000000 109.000000 -0.000420 +56.000000 226.000000 90.000305 +55.000000 346.000000 20.000297 +373.000000 329.000000 109.999831 +421.000000 269.000000 20.000125 +417.000000 194.000000 -0.000244 +377.000000 477.000000 10.000096 +311.000000 136.000000 120.000023 +355.000000 326.000000 130.000433 +84.000000 110.000000 60.000454 +202.000000 506.000000 80.000296 +398.000000 392.000000 0.000118 +261.000000 501.000000 110.000266 +386.000000 140.000000 10.000112 +75.000000 210.000000 110.000483 +418.000000 392.000000 39.999772 +47.000000 172.000000 39.999530 +201.000000 61.000000 50.000348 +174.000000 426.000000 129.999769 +406.000000 287.000000 89.999588 +406.000000 294.000000 50.000482 +178.000000 464.000000 129.999690 +379.000000 481.000000 0.000359 +66.000000 135.000000 40.000472 +439.000000 380.000000 -0.000057 +410.000000 300.000000 0.000483 +400.000000 198.000000 90.000463 +396.000000 305.000000 99.999628 +112.000000 327.000000 129.999537 +400.000000 351.000000 39.999731 +285.000000 445.000000 140.000481 +194.000000 345.000000 120.000109 +395.000000 373.000000 49.999714 +417.000000 277.000000 69.999982 +220.000000 511.000000 100.000036 +368.000000 181.000000 119.999800 +330.000000 162.000000 130.000194 +355.000000 188.000000 130.000376 +158.000000 58.000000 20.000298 +402.000000 419.000000 0.000043 +389.000000 147.000000 50.000103 +77.000000 161.000000 99.999915 +99.000000 98.000000 69.999881 +383.000000 472.000000 10.000356 +123.000000 366.000000 120.000131 +109.000000 78.000000 -0.000493 +441.000000 394.000000 29.999848 +118.000000 405.000000 100.000021 +148.000000 454.000000 109.999506 +416.000000 405.000000 10.000422 +214.000000 331.000000 120.000073 +377.000000 481.000000 9.999558 +381.000000 413.000000 59.999620 +400.000000 448.000000 30.000243 +185.000000 358.000000 149.999663 +194.000000 362.000000 139.999629 +184.000000 183.000000 160.000453 +391.000000 348.000000 50.000085 +378.000000 477.000000 30.000336 +314.000000 349.000000 150.000272 +159.000000 302.000000 150.000093 +70.000000 396.000000 29.999689 +186.000000 428.000000 140.000092 +384.000000 460.000000 50.000420 +240.000000 438.000000 139.999721 +384.000000 426.000000 59.999785 +396.000000 389.000000 50.000117 +210.000000 348.000000 139.999537 +46.000000 171.000000 9.999837 +173.000000 498.000000 30.000387 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/skull.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/skull.pts new file mode 100644 index 000000000000..563ef228171a --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/skull.pts @@ -0,0 +1,27088 @@ + 106.2500 116.5000 -8.0 + 104.5000 117.2500 -8.0 + 102.2500 119.5000 -8.0 + 97.2500 129.5000 -8.0 + 93.5000 139.2500 -8.0 + 93.2500 147.5000 -8.0 + 94.2500 149.5000 -8.0 + 95.2500 155.5000 -8.0 + 99.2500 161.5000 -8.0 + 102.2500 163.5000 -8.0 + 106.5000 163.7500 -8.0 + 110.5000 160.7500 -8.0 + 113.7500 151.5000 -8.0 + 117.5000 143.7500 -8.0 + 118.5000 138.7500 -8.0 + 118.7500 131.5000 -8.0 + 115.7500 120.5000 -8.0 + 112.7500 116.5000 -8.0 + 105.2500 106.5000 -10.0 + 100.5000 108.2500 -10.0 + 96.2500 112.5000 -10.0 + 92.5000 119.2500 -10.0 + 91.2500 125.5000 -10.0 + 87.5000 135.2500 -10.0 + 87.2500 153.5000 -10.0 + 89.2500 159.5000 -10.0 + 89.2500 163.5000 -10.0 + 94.2500 173.5000 -10.0 + 95.5000 173.7500 -10.0 + 97.5000 175.7500 -10.0 + 102.5000 176.7500 -10.0 + 111.5000 173.7500 -10.0 + 114.7500 170.5000 -10.0 + 119.7500 160.5000 -10.0 + 121.7500 151.5000 -10.0 + 123.7500 147.5000 -10.0 + 125.7500 140.5000 -10.0 + 126.7500 133.5000 -10.0 + 125.7500 131.5000 -10.0 + 125.7500 127.5000 -10.0 + 122.7500 116.5000 -10.0 + 118.7500 110.5000 -10.0 + 111.7500 106.5000 -10.0 + 103.2500 100.5000 -12.0 + 97.5000 103.2500 -12.0 + 92.5000 108.2500 -12.0 + 87.2500 117.5000 -12.0 + 85.2500 126.5000 -12.0 + 83.2500 130.5000 -12.0 + 81.5000 139.2500 -12.0 + 81.2500 148.5000 -12.0 + 82.2500 150.5000 -12.0 + 82.2500 155.5000 -12.0 + 83.2500 157.5000 -12.0 + 84.2500 165.5000 -12.0 + 87.2500 175.5000 -12.0 + 93.5000 181.7500 -12.0 + 100.2500 183.5000 -12.0 + 104.5000 183.7500 -12.0 + 115.5000 179.7500 -12.0 + 121.7500 172.5000 -12.0 + 124.7500 166.5000 -12.0 + 127.7500 151.5000 -12.0 + 131.5000 140.7500 -12.0 + 131.7500 127.5000 -12.0 + 130.7500 125.5000 -12.0 + 129.7500 119.5000 -12.0 + 124.7500 109.5000 -12.0 + 119.5000 104.2500 -12.0 + 112.7500 100.5000 -12.0 + 102.2500 95.5000 -14.0 + 96.5000 98.2500 -14.0 + 88.2500 106.5000 -14.0 + 83.2500 114.5000 -14.0 + 77.5000 137.2500 -14.0 + 77.2500 152.5000 -14.0 + 78.2500 154.5000 -14.0 + 78.2500 160.5000 -14.0 + 79.2500 162.5000 -14.0 + 79.2500 167.5000 -14.0 + 83.2500 178.5000 -14.0 + 87.2500 183.5000 -14.0 + 91.5000 186.7500 -14.0 + 103.5000 188.7500 -14.0 + 105.5000 187.7500 -14.0 + 110.5000 187.7500 -14.0 + 118.5000 183.7500 -14.0 + 125.7500 176.5000 -14.0 + 130.5000 168.7500 -14.0 + 132.7500 152.5000 -14.0 + 135.5000 143.7500 -14.0 + 136.7500 129.5000 -14.0 + 135.7500 127.5000 -14.0 + 134.7500 119.5000 -14.0 + 128.7500 107.5000 -14.0 + 121.5000 100.2500 -14.0 + 112.7500 95.5000 -14.0 + 107.7500 123.5000 -14.0 + 108.5000 122.7500 -14.0 + 109.2500 123.5000 -14.0 + 109.2500 133.5000 -14.0 + 110.2500 135.5000 -14.0 + 109.5000 137.2500 -14.0 + 109.2500 142.5000 -14.0 + 110.2500 144.5000 -14.0 + 110.2500 147.5000 -14.0 + 112.2500 151.5000 -14.0 + 112.2500 153.5000 -14.0 + 111.2500 156.5000 -14.0 + 108.5000 160.2500 -14.0 + 106.5000 161.2500 -14.0 + 104.5000 156.2500 -14.0 + 101.5000 157.2500 -14.0 + 100.5000 159.2500 -14.0 + 98.5000 158.2500 -14.0 + 92.7500 153.5000 -14.0 + 92.7500 149.5000 -14.0 + 94.5000 147.7500 -14.0 + 96.5000 146.7500 -14.0 + 94.7500 143.5000 -14.0 + 94.7500 138.5000 -14.0 + 96.7500 136.5000 -14.0 + 99.5000 132.7500 -14.0 + 101.2500 133.5000 -14.0 + 101.2500 136.5000 -14.0 + 103.2500 138.5000 -14.0 + 105.7500 137.5000 -14.0 + 101.2500 91.5000 -16.0 + 95.5000 94.2500 -16.0 + 87.5000 101.2500 -16.0 + 84.2500 105.5000 -16.0 + 78.2500 117.5000 -16.0 + 73.5000 137.2500 -16.0 + 73.2500 153.5000 -16.0 + 74.2500 155.5000 -16.0 + 74.2500 163.5000 -16.0 + 75.2500 165.5000 -16.0 + 75.2500 169.5000 -16.0 + 76.2500 171.5000 -16.0 + 76.2500 173.5000 -16.0 + 81.2500 183.5000 -16.0 + 86.2500 188.5000 -16.0 + 91.2500 191.5000 -16.0 + 100.5000 191.7500 -16.0 + 102.2500 192.5000 -16.0 + 111.7500 192.5000 -16.0 + 118.5000 189.7500 -16.0 + 127.7500 181.5000 -16.0 + 135.7500 168.5000 -16.0 + 140.7500 133.5000 -16.0 + 139.7500 131.5000 -16.0 + 139.7500 124.5000 -16.0 + 138.7500 122.5000 -16.0 + 137.7500 116.5000 -16.0 + 133.7500 107.5000 -16.0 + 126.7500 99.5000 -16.0 + 122.5000 96.2500 -16.0 + 112.7500 91.5000 -16.0 + 105.7500 108.5000 -16.0 + 107.5000 107.7500 -16.0 + 109.2500 110.5000 -16.0 + 115.5000 114.7500 -16.0 + 117.2500 117.5000 -16.0 + 117.2500 120.5000 -16.0 + 115.5000 129.2500 -16.0 + 115.2500 135.5000 -16.0 + 114.2500 137.5000 -16.0 + 115.2500 139.5000 -16.0 + 115.2500 150.5000 -16.0 + 116.2500 152.5000 -16.0 + 115.5000 153.2500 -16.0 + 115.2500 160.5000 -16.0 + 111.5000 171.2500 -16.0 + 102.5000 170.2500 -16.0 + 98.5000 172.2500 -16.0 + 92.7500 169.5000 -16.0 + 92.7500 166.5000 -16.0 + 90.7500 162.5000 -16.0 + 90.7500 159.5000 -16.0 + 89.7500 157.5000 -16.0 + 89.7500 149.5000 -16.0 + 90.5000 147.7500 -16.0 + 90.7500 140.5000 -16.0 + 94.5000 134.7500 -16.0 + 96.5000 126.7500 -16.0 + 96.7500 121.5000 -16.0 + 98.7500 115.5000 -16.0 + 102.5000 112.7500 -16.0 + 93.7500 176.5000 -16.0 + 95.5000 175.7500 -16.0 + 97.2500 177.5000 -16.0 + 96.5000 181.2500 -16.0 + 104.2500 87.5000 -18.0 + 103.5000 88.2500 -18.0 + 99.5000 88.2500 -18.0 + 91.5000 93.2500 -18.0 + 87.5000 96.2500 -18.0 + 81.2500 103.5000 -18.0 + 75.5000 114.2500 -18.0 + 75.2500 116.5000 -18.0 + 74.2500 118.5000 -18.0 + 73.2500 123.5000 -18.0 + 72.5000 125.2500 -18.0 + 71.2500 133.5000 -18.0 + 70.5000 135.2500 -18.0 + 70.2500 160.5000 -18.0 + 71.2500 162.5000 -18.0 + 71.2500 169.5000 -18.0 + 72.2500 171.5000 -18.0 + 72.5000 173.7500 -18.0 + 76.2500 182.5000 -18.0 + 82.2500 189.5000 -18.0 + 86.5000 192.7500 -18.0 + 88.5000 193.7500 -18.0 + 90.2500 194.5000 -18.0 + 95.5000 194.7500 -18.0 + 102.5000 195.7500 -18.0 + 104.2500 196.5000 -18.0 + 111.7500 196.5000 -18.0 + 120.5000 192.7500 -18.0 + 128.5000 186.7500 -18.0 + 134.7500 179.5000 -18.0 + 138.7500 169.5000 -18.0 + 139.5000 167.7500 -18.0 + 139.7500 164.5000 -18.0 + 140.5000 162.7500 -18.0 + 140.7500 157.5000 -18.0 + 141.7500 148.5000 -18.0 + 142.5000 146.7500 -18.0 + 142.7500 140.5000 -18.0 + 143.5000 138.7500 -18.0 + 143.7500 129.5000 -18.0 + 142.7500 127.5000 -18.0 + 142.7500 122.5000 -18.0 + 141.7500 120.5000 -18.0 + 141.7500 117.5000 -18.0 + 139.7500 113.5000 -18.0 + 139.7500 111.5000 -18.0 + 134.7500 103.5000 -18.0 + 131.7500 99.5000 -18.0 + 124.5000 93.2500 -18.0 + 118.5000 90.2500 -18.0 + 114.7500 88.5000 -18.0 + 112.5000 88.2500 -18.0 + 110.7500 87.5000 -18.0 + 104.7500 102.5000 -18.0 + 105.5000 101.7500 -18.0 + 107.2500 102.5000 -18.0 + 108.2500 104.5000 -18.0 + 119.2500 116.5000 -18.0 + 119.2500 122.5000 -18.0 + 120.2500 124.5000 -18.0 + 120.2500 131.5000 -18.0 + 121.2500 134.5000 -18.0 + 120.5000 136.2500 -18.0 + 120.2500 141.5000 -18.0 + 119.5000 143.2500 -18.0 + 119.2500 160.5000 -18.0 + 117.2500 169.5000 -18.0 + 112.5000 176.2500 -18.0 + 109.5000 176.2500 -18.0 + 107.7500 175.5000 -18.0 + 102.5000 175.2500 -18.0 + 100.5000 178.2500 -18.0 + 100.2500 180.5000 -18.0 + 98.5000 184.2500 -18.0 + 94.5000 184.2500 -18.0 + 92.5000 186.2500 -18.0 + 89.5000 186.2500 -18.0 + 86.7500 181.5000 -18.0 + 83.7500 175.5000 -18.0 + 84.7500 173.5000 -18.0 + 87.5000 170.7500 -18.0 + 87.7500 168.5000 -18.0 + 86.7500 166.5000 -18.0 + 86.7500 160.5000 -18.0 + 85.7500 158.5000 -18.0 + 85.7500 156.5000 -18.0 + 86.7500 149.5000 -18.0 + 87.7500 140.5000 -18.0 + 92.7500 130.5000 -18.0 + 93.7500 121.5000 -18.0 + 94.7500 118.5000 -18.0 + 96.5000 114.7500 -18.0 + 98.7500 108.5000 -18.0 + 100.5000 104.7500 -18.0 + 102.2500 84.5000 -20.0 + 101.5000 85.2500 -20.0 + 99.2500 85.5000 -20.0 + 92.5000 88.2500 -20.0 + 87.5000 92.2500 -20.0 + 85.5000 93.2500 -20.0 + 83.2500 95.5000 -20.0 + 80.5000 99.2500 -20.0 + 77.2500 103.5000 -20.0 + 72.2500 113.5000 -20.0 + 70.2500 122.5000 -20.0 + 69.2500 124.5000 -20.0 + 68.2500 133.5000 -20.0 + 67.5000 135.2500 -20.0 + 67.2500 166.5000 -20.0 + 68.2500 168.5000 -20.0 + 68.5000 173.7500 -20.0 + 72.2500 182.5000 -20.0 + 76.2500 187.5000 -20.0 + 77.2500 189.5000 -20.0 + 78.5000 189.7500 -20.0 + 82.2500 193.5000 -20.0 + 86.5000 196.7500 -20.0 + 88.5000 197.7500 -20.0 + 90.2500 198.5000 -20.0 + 99.5000 198.7500 -20.0 + 101.2500 199.5000 -20.0 + 113.5000 199.7500 -20.0 + 118.5000 197.7500 -20.0 + 122.5000 194.7500 -20.0 + 128.7500 191.5000 -20.0 + 137.7500 181.5000 -20.0 + 141.7500 171.5000 -20.0 + 142.5000 169.7500 -20.0 + 142.7500 165.5000 -20.0 + 143.5000 163.7500 -20.0 + 143.7500 158.5000 -20.0 + 144.5000 156.7500 -20.0 + 144.7500 150.5000 -20.0 + 145.5000 148.7500 -20.0 + 145.7500 140.5000 -20.0 + 146.5000 138.7500 -20.0 + 146.7500 130.5000 -20.0 + 145.7500 128.5000 -20.0 + 145.7500 123.5000 -20.0 + 144.7500 121.5000 -20.0 + 144.7500 117.5000 -20.0 + 141.7500 108.5000 -20.0 + 136.7500 100.5000 -20.0 + 135.7500 98.5000 -20.0 + 130.7500 93.5000 -20.0 + 124.5000 89.2500 -20.0 + 118.5000 86.2500 -20.0 + 113.5000 85.2500 -20.0 + 111.7500 84.5000 -20.0 + 103.7500 97.5000 -20.0 + 105.5000 96.7500 -20.0 + 107.2500 98.5000 -20.0 + 109.2500 102.5000 -20.0 + 118.2500 113.5000 -20.0 + 122.2500 120.5000 -20.0 + 122.2500 124.5000 -20.0 + 124.2500 128.5000 -20.0 + 124.2500 131.5000 -20.0 + 126.2500 133.5000 -20.0 + 125.5000 135.2500 -20.0 + 124.2500 154.5000 -20.0 + 119.2500 177.5000 -20.0 + 121.2500 179.5000 -20.0 + 121.2500 184.5000 -20.0 + 117.5000 187.2500 -20.0 + 115.5000 187.2500 -20.0 + 109.5000 184.2500 -20.0 + 105.7500 180.5000 -20.0 + 102.2500 180.5000 -20.0 + 100.2500 184.5000 -20.0 + 96.5000 188.2500 -20.0 + 94.5000 188.2500 -20.0 + 92.5000 189.2500 -20.0 + 89.5000 188.2500 -20.0 + 83.7500 181.5000 -20.0 + 83.7500 179.5000 -20.0 + 82.7500 177.5000 -20.0 + 82.7500 173.5000 -20.0 + 83.5000 171.7500 -20.0 + 82.7500 170.5000 -20.0 + 82.7500 151.5000 -20.0 + 83.5000 149.7500 -20.0 + 83.7500 138.5000 -20.0 + 89.5000 130.7500 -20.0 + 89.7500 125.5000 -20.0 + 93.5000 116.7500 -20.0 + 93.7500 114.5000 -20.0 + 98.7500 104.5000 -20.0 + 99.7500 99.5000 -20.0 + 101.5000 97.7500 -20.0 + 103.2500 81.5000 -22.0 + 102.5000 82.2500 -22.0 + 98.2500 82.5000 -22.0 + 87.5000 87.2500 -22.0 + 81.2500 92.5000 -22.0 + 78.5000 96.2500 -22.0 + 75.2500 100.5000 -22.0 + 69.2500 112.5000 -22.0 + 67.2500 121.5000 -22.0 + 66.2500 126.5000 -22.0 + 65.2500 133.5000 -22.0 + 64.5000 135.2500 -22.0 + 64.2500 142.5000 -22.0 + 63.2500 151.5000 -22.0 + 64.2500 153.5000 -22.0 + 64.2500 169.5000 -22.0 + 65.2500 171.5000 -22.0 + 65.2500 174.5000 -22.0 + 66.5000 177.7500 -22.0 + 69.2500 184.5000 -22.0 + 77.2500 193.5000 -22.0 + 83.2500 198.5000 -22.0 + 88.2500 201.5000 -22.0 + 99.5000 201.7500 -22.0 + 101.2500 202.5000 -22.0 + 114.5000 202.7500 -22.0 + 128.5000 195.7500 -22.0 + 135.5000 189.7500 -22.0 + 138.7500 185.5000 -22.0 + 142.7500 177.5000 -22.0 + 144.5000 173.7500 -22.0 + 144.7500 171.5000 -22.0 + 145.5000 169.7500 -22.0 + 145.7500 165.5000 -22.0 + 146.5000 163.7500 -22.0 + 146.7500 158.5000 -22.0 + 147.5000 156.7500 -22.0 + 147.7500 148.5000 -22.0 + 148.5000 146.7500 -22.0 + 148.7500 125.5000 -22.0 + 147.7500 123.5000 -22.0 + 147.7500 118.5000 -22.0 + 146.7500 116.5000 -22.0 + 146.7500 114.5000 -22.0 + 145.7500 112.5000 -22.0 + 145.7500 110.5000 -22.0 + 139.7500 98.5000 -22.0 + 134.7500 93.5000 -22.0 + 133.7500 91.5000 -22.0 + 132.5000 91.2500 -22.0 + 129.5000 88.2500 -22.0 + 119.5000 83.2500 -22.0 + 114.5000 82.2500 -22.0 + 112.7500 81.5000 -22.0 + 101.7500 93.5000 -22.0 + 102.5000 92.7500 -22.0 + 105.5000 92.7500 -22.0 + 108.2500 95.5000 -22.0 + 108.2500 97.5000 -22.0 + 111.2500 103.5000 -22.0 + 115.5000 106.7500 -22.0 + 120.2500 113.5000 -22.0 + 126.2500 125.5000 -22.0 + 126.2500 127.5000 -22.0 + 127.2500 130.5000 -22.0 + 128.5000 130.7500 -22.0 + 130.2500 132.5000 -22.0 + 129.5000 133.2500 -22.0 + 129.2500 140.5000 -22.0 + 127.2500 158.5000 -22.0 + 126.2500 163.5000 -22.0 + 125.5000 165.2500 -22.0 + 125.2500 170.5000 -22.0 + 124.2500 173.5000 -22.0 + 123.5000 175.2500 -22.0 + 123.2500 187.5000 -22.0 + 121.5000 188.2500 -22.0 + 115.5000 191.2500 -22.0 + 108.5000 188.2500 -22.0 + 104.5000 184.2500 -22.0 + 101.5000 185.2500 -22.0 + 96.5000 190.2500 -22.0 + 93.5000 190.2500 -22.0 + 91.5000 191.2500 -22.0 + 88.5000 190.2500 -22.0 + 83.7500 184.5000 -22.0 + 81.7500 180.5000 -22.0 + 81.7500 177.5000 -22.0 + 79.7500 173.5000 -22.0 + 79.7500 166.5000 -22.0 + 78.7500 164.5000 -22.0 + 78.7500 157.5000 -22.0 + 79.5000 155.7500 -22.0 + 79.7500 139.5000 -22.0 + 81.7500 135.5000 -22.0 + 84.5000 131.7500 -22.0 + 84.7500 129.5000 -22.0 + 86.5000 125.7500 -22.0 + 86.7500 123.5000 -22.0 + 88.7500 121.5000 -22.0 + 89.7500 119.5000 -22.0 + 93.7500 109.5000 -22.0 + 98.5000 101.7500 -22.0 + 98.7500 99.5000 -22.0 + 99.2500 79.5000 -24.0 + 95.5000 81.2500 -24.0 + 93.5000 81.2500 -24.0 + 81.5000 87.2500 -24.0 + 72.2500 99.5000 -24.0 + 65.2500 115.5000 -24.0 + 61.5000 137.2500 -24.0 + 61.2500 168.5000 -24.0 + 62.2500 170.5000 -24.0 + 62.2500 175.5000 -24.0 + 66.2500 183.5000 -24.0 + 66.2500 185.5000 -24.0 + 69.2500 189.5000 -24.0 + 79.2500 199.5000 -24.0 + 86.2500 203.5000 -24.0 + 90.2500 204.5000 -24.0 + 103.5000 204.7500 -24.0 + 105.2500 205.5000 -24.0 + 113.5000 205.7500 -24.0 + 115.5000 204.7500 -24.0 + 117.5000 204.7500 -24.0 + 132.5000 196.7500 -24.0 + 140.5000 188.7500 -24.0 + 144.5000 181.7500 -24.0 + 148.5000 168.7500 -24.0 + 148.7500 161.5000 -24.0 + 150.5000 151.7500 -24.0 + 151.7500 132.5000 -24.0 + 150.7500 130.5000 -24.0 + 150.7500 122.5000 -24.0 + 149.7500 120.5000 -24.0 + 149.7500 116.5000 -24.0 + 148.7500 114.5000 -24.0 + 148.5000 111.2500 -24.0 + 142.7500 98.5000 -24.0 + 135.7500 89.5000 -24.0 + 127.7500 83.5000 -24.0 + 116.7500 79.5000 -24.0 + 101.7500 90.5000 -24.0 + 102.5000 89.7500 -24.0 + 106.5000 89.7500 -24.0 + 109.2500 94.5000 -24.0 + 109.2500 97.5000 -24.0 + 111.5000 102.7500 -24.0 + 117.5000 105.7500 -24.0 + 121.2500 109.5000 -24.0 + 127.2500 121.5000 -24.0 + 127.2500 123.5000 -24.0 + 133.2500 130.5000 -24.0 + 133.2500 135.5000 -24.0 + 132.2500 138.5000 -24.0 + 133.2500 140.5000 -24.0 + 132.5000 142.2500 -24.0 + 132.2500 149.5000 -24.0 + 130.2500 159.5000 -24.0 + 129.5000 161.2500 -24.0 + 129.2500 167.5000 -24.0 + 128.2500 176.5000 -24.0 + 125.5000 180.2500 -24.0 + 125.2500 182.5000 -24.0 + 123.5000 186.2500 -24.0 + 123.2500 188.5000 -24.0 + 120.5000 192.2500 -24.0 + 118.5000 193.2500 -24.0 + 112.5000 195.2500 -24.0 + 110.7500 194.5000 -24.0 + 109.7500 192.5000 -24.0 + 105.5000 190.2500 -24.0 + 103.5000 189.2500 -24.0 + 101.5000 190.2500 -24.0 + 99.5000 190.2500 -24.0 + 95.5000 192.2500 -24.0 + 92.5000 192.2500 -24.0 + 90.5000 194.2500 -24.0 + 88.5000 194.2500 -24.0 + 85.5000 193.2500 -24.0 + 84.7500 191.5000 -24.0 + 78.7500 179.5000 -24.0 + 78.7500 177.5000 -24.0 + 77.7500 175.5000 -24.0 + 77.7500 173.5000 -24.0 + 76.7500 171.5000 -24.0 + 76.7500 163.5000 -24.0 + 75.7500 161.5000 -24.0 + 75.7500 152.5000 -24.0 + 76.5000 150.7500 -24.0 + 76.7500 137.5000 -24.0 + 79.7500 131.5000 -24.0 + 82.7500 124.5000 -24.0 + 85.5000 121.7500 -24.0 + 89.5000 114.7500 -24.0 + 89.7500 111.5000 -24.0 + 97.5000 102.7500 -24.0 + 97.7500 98.5000 -24.0 + 104.2500 76.5000 -26.0 + 103.5000 77.2500 -26.0 + 98.5000 77.2500 -26.0 + 96.5000 78.2500 -26.0 + 93.5000 78.2500 -26.0 + 85.5000 82.2500 -26.0 + 83.5000 82.2500 -26.0 + 81.5000 84.2500 -26.0 + 79.5000 85.2500 -26.0 + 77.2500 87.5000 -26.0 + 74.5000 91.2500 -26.0 + 70.2500 97.5000 -26.0 + 66.2500 105.5000 -26.0 + 64.5000 109.2500 -26.0 + 63.2500 115.5000 -26.0 + 62.5000 117.2500 -26.0 + 62.2500 122.5000 -26.0 + 61.5000 124.2500 -26.0 + 60.2500 132.5000 -26.0 + 59.5000 134.2500 -26.0 + 59.2500 143.5000 -26.0 + 58.5000 145.2500 -26.0 + 58.2500 150.5000 -26.0 + 59.2500 152.5000 -26.0 + 59.2500 160.5000 -26.0 + 58.5000 162.2500 -26.0 + 58.2500 168.5000 -26.0 + 59.2500 170.5000 -26.0 + 59.2500 174.5000 -26.0 + 61.2500 178.5000 -26.0 + 61.2500 180.5000 -26.0 + 66.2500 190.5000 -26.0 + 72.2500 196.5000 -26.0 + 79.5000 202.7500 -26.0 + 85.5000 205.7500 -26.0 + 87.2500 206.5000 -26.0 + 103.5000 206.7500 -26.0 + 105.2500 207.5000 -26.0 + 117.5000 207.7500 -26.0 + 133.5000 199.7500 -26.0 + 139.5000 193.7500 -26.0 + 142.7500 189.5000 -26.0 + 147.7500 181.5000 -26.0 + 148.7500 176.5000 -26.0 + 149.7500 173.5000 -26.0 + 150.5000 171.7500 -26.0 + 150.7500 167.5000 -26.0 + 151.5000 165.7500 -26.0 + 151.7500 155.5000 -26.0 + 152.5000 153.7500 -26.0 + 152.7500 146.5000 -26.0 + 153.5000 144.7500 -26.0 + 153.7500 131.5000 -26.0 + 152.7500 129.5000 -26.0 + 152.7500 121.5000 -26.0 + 151.7500 119.5000 -26.0 + 151.7500 114.5000 -26.0 + 149.7500 110.5000 -26.0 + 149.5000 108.2500 -26.0 + 146.7500 101.5000 -26.0 + 141.7500 93.5000 -26.0 + 140.7500 91.5000 -26.0 + 133.7500 84.5000 -26.0 + 127.7500 80.5000 -26.0 + 121.5000 78.2500 -26.0 + 119.7500 77.5000 -26.0 + 114.5000 77.2500 -26.0 + 112.7500 76.5000 -26.0 + 102.5000 86.7500 -26.0 + 104.5000 86.7500 -26.0 + 106.5000 87.7500 -26.0 + 110.2500 90.5000 -26.0 + 110.2500 94.5000 -26.0 + 112.2500 98.5000 -26.0 + 112.2500 100.5000 -26.0 + 114.5000 102.7500 -26.0 + 118.5000 104.7500 -26.0 + 123.5000 105.7500 -26.0 + 127.2500 112.5000 -26.0 + 127.2500 114.5000 -26.0 + 130.2500 121.5000 -26.0 + 134.2500 125.5000 -26.0 + 138.2500 133.5000 -26.0 + 137.5000 134.2500 -26.0 + 137.2500 139.5000 -26.0 + 136.5000 141.2500 -26.0 + 136.2500 148.5000 -26.0 + 135.2500 150.5000 -26.0 + 134.2500 159.5000 -26.0 + 133.5000 161.2500 -26.0 + 133.2500 169.5000 -26.0 + 132.2500 174.5000 -26.0 + 130.5000 178.2500 -26.0 + 128.2500 184.5000 -26.0 + 124.5000 188.2500 -26.0 + 124.2500 190.5000 -26.0 + 122.5000 192.2500 -26.0 + 115.5000 196.2500 -26.0 + 112.5000 196.2500 -26.0 + 107.5000 195.2500 -26.0 + 103.5000 192.2500 -26.0 + 101.5000 193.2500 -26.0 + 97.5000 193.2500 -26.0 + 89.5000 197.2500 -26.0 + 87.5000 197.2500 -26.0 + 83.7500 194.5000 -26.0 + 80.7500 188.5000 -26.0 + 76.7500 181.5000 -26.0 + 76.7500 179.5000 -26.0 + 74.7500 175.5000 -26.0 + 74.7500 170.5000 -26.0 + 73.7500 168.5000 -26.0 + 73.7500 162.5000 -26.0 + 72.7500 160.5000 -26.0 + 72.7500 143.5000 -26.0 + 73.7500 138.5000 -26.0 + 72.7500 136.5000 -26.0 + 73.7500 134.5000 -26.0 + 78.7500 125.5000 -26.0 + 79.7500 123.5000 -26.0 + 90.7500 108.5000 -26.0 + 91.7500 106.5000 -26.0 + 93.7500 105.5000 -26.0 + 96.5000 101.7500 -26.0 + 95.7500 99.5000 -26.0 + 96.5000 97.7500 -26.0 + 96.7500 94.5000 -26.0 + 98.5000 93.7500 -26.0 + 99.5000 91.7500 -26.0 + 99.7500 89.5000 -26.0 + 103.2500 74.5000 -28.0 + 102.5000 75.2500 -28.0 + 97.5000 75.2500 -28.0 + 95.5000 76.2500 -28.0 + 92.5000 76.2500 -28.0 + 90.5000 77.2500 -28.0 + 88.5000 77.2500 -28.0 + 80.5000 81.2500 -28.0 + 73.2500 88.5000 -28.0 + 68.2500 96.5000 -28.0 + 62.2500 108.5000 -28.0 + 61.2500 113.5000 -28.0 + 60.5000 115.2500 -28.0 + 60.2500 121.5000 -28.0 + 59.5000 123.2500 -28.0 + 58.2500 131.5000 -28.0 + 57.5000 133.2500 -28.0 + 57.2500 140.5000 -28.0 + 56.5000 142.2500 -28.0 + 56.2500 171.5000 -28.0 + 57.2500 173.5000 -28.0 + 57.2500 176.5000 -28.0 + 58.2500 178.5000 -28.0 + 58.2500 180.5000 -28.0 + 64.2500 192.5000 -28.0 + 72.2500 200.5000 -28.0 + 78.5000 204.7500 -28.0 + 85.2500 208.5000 -28.0 + 103.5000 208.7500 -28.0 + 105.2500 209.5000 -28.0 + 119.5000 209.7500 -28.0 + 131.5000 203.7500 -28.0 + 135.5000 200.7500 -28.0 + 137.7500 199.5000 -28.0 + 140.5000 195.7500 -28.0 + 145.5000 189.7500 -28.0 + 149.5000 182.7500 -28.0 + 151.7500 176.5000 -28.0 + 152.5000 174.7500 -28.0 + 152.7500 170.5000 -28.0 + 153.5000 168.7500 -28.0 + 153.7500 161.5000 -28.0 + 154.5000 159.7500 -28.0 + 154.7500 148.5000 -28.0 + 155.5000 146.7500 -28.0 + 155.7500 130.5000 -28.0 + 154.7500 128.5000 -28.0 + 154.7500 122.5000 -28.0 + 153.7500 120.5000 -28.0 + 153.7500 116.5000 -28.0 + 152.7500 114.5000 -28.0 + 152.7500 111.5000 -28.0 + 150.7500 105.5000 -28.0 + 146.5000 96.2500 -28.0 + 141.7500 89.5000 -28.0 + 137.5000 84.2500 -28.0 + 129.7500 78.5000 -28.0 + 123.5000 76.2500 -28.0 + 121.7500 75.5000 -28.0 + 117.5000 75.2500 -28.0 + 115.7500 74.5000 -28.0 + 100.7500 85.5000 -28.0 + 101.5000 84.7500 -28.0 + 105.5000 84.7500 -28.0 + 107.2500 86.5000 -28.0 + 109.5000 86.7500 -28.0 + 112.5000 85.7500 -28.0 + 114.2500 87.5000 -28.0 + 113.5000 88.2500 -28.0 + 112.2500 92.5000 -28.0 + 113.2500 95.5000 -28.0 + 116.2500 98.5000 -28.0 + 120.5000 98.7500 -28.0 + 124.5000 100.7500 -28.0 + 129.2500 107.5000 -28.0 + 131.2500 111.5000 -28.0 + 131.2500 114.5000 -28.0 + 132.2500 116.5000 -28.0 + 132.2500 118.5000 -28.0 + 134.2500 120.5000 -28.0 + 135.5000 122.7500 -28.0 + 137.5000 123.7500 -28.0 + 142.2500 132.5000 -28.0 + 141.5000 134.2500 -28.0 + 141.2500 138.5000 -28.0 + 140.5000 140.2500 -28.0 + 140.2500 145.5000 -28.0 + 139.5000 147.2500 -28.0 + 139.2500 155.5000 -28.0 + 138.5000 157.2500 -28.0 + 138.2500 162.5000 -28.0 + 137.2500 164.5000 -28.0 + 136.2500 173.5000 -28.0 + 135.2500 178.5000 -28.0 + 134.2500 181.5000 -28.0 + 131.5000 184.2500 -28.0 + 129.5000 185.2500 -28.0 + 123.5000 193.2500 -28.0 + 119.5000 196.2500 -28.0 + 117.5000 196.2500 -28.0 + 113.5000 198.2500 -28.0 + 109.5000 198.2500 -28.0 + 103.5000 195.2500 -28.0 + 101.5000 196.2500 -28.0 + 95.5000 196.2500 -28.0 + 91.5000 199.2500 -28.0 + 89.5000 200.2500 -28.0 + 83.7500 197.5000 -28.0 + 80.7500 193.5000 -28.0 + 77.7500 188.5000 -28.0 + 72.7500 178.5000 -28.0 + 72.7500 176.5000 -28.0 + 71.7500 174.5000 -28.0 + 71.7500 162.5000 -28.0 + 68.7500 158.5000 -28.0 + 68.7500 153.5000 -28.0 + 69.5000 151.7500 -28.0 + 69.7500 134.5000 -28.0 + 70.5000 132.7500 -28.0 + 73.7500 127.5000 -28.0 + 74.7500 125.5000 -28.0 + 89.5000 107.7500 -28.0 + 93.5000 104.7500 -28.0 + 93.7500 101.5000 -28.0 + 92.7500 99.5000 -28.0 + 92.7500 96.5000 -28.0 + 93.7500 94.5000 -28.0 + 92.7500 91.5000 -28.0 + 93.5000 89.7500 -28.0 + 96.5000 90.7500 -28.0 + 103.2500 72.5000 -30.0 + 102.5000 73.2500 -30.0 + 96.5000 73.2500 -30.0 + 94.5000 74.2500 -30.0 + 91.5000 74.2500 -30.0 + 89.5000 75.2500 -30.0 + 87.5000 75.2500 -30.0 + 77.5000 80.2500 -30.0 + 75.2500 82.5000 -30.0 + 72.5000 86.2500 -30.0 + 69.2500 90.5000 -30.0 + 67.2500 94.5000 -30.0 + 64.2500 98.5000 -30.0 + 60.2500 108.5000 -30.0 + 58.5000 112.2500 -30.0 + 58.2500 116.5000 -30.0 + 57.2500 125.5000 -30.0 + 56.2500 128.5000 -30.0 + 55.2500 137.5000 -30.0 + 54.5000 139.2500 -30.0 + 54.2500 157.5000 -30.0 + 53.5000 159.2500 -30.0 + 53.2500 164.5000 -30.0 + 54.2500 166.5000 -30.0 + 54.2500 174.5000 -30.0 + 55.2500 176.5000 -30.0 + 55.2500 178.5000 -30.0 + 56.2500 180.5000 -30.0 + 56.2500 182.5000 -30.0 + 62.2500 194.5000 -30.0 + 69.2500 201.5000 -30.0 + 75.5000 205.7500 -30.0 + 82.2500 209.5000 -30.0 + 84.5000 209.7500 -30.0 + 86.2500 210.5000 -30.0 + 92.5000 210.7500 -30.0 + 94.5000 209.7500 -30.0 + 97.5000 209.7500 -30.0 + 99.2500 210.5000 -30.0 + 105.5000 210.7500 -30.0 + 107.2500 211.5000 -30.0 + 118.5000 211.7500 -30.0 + 120.5000 210.7500 -30.0 + 122.5000 210.7500 -30.0 + 131.5000 206.7500 -30.0 + 136.5000 202.7500 -30.0 + 138.5000 201.7500 -30.0 + 147.7500 190.5000 -30.0 + 153.7500 179.5000 -30.0 + 154.7500 174.5000 -30.0 + 155.5000 172.7500 -30.0 + 155.7500 168.5000 -30.0 + 156.5000 166.7500 -30.0 + 156.7500 154.5000 -30.0 + 157.7500 145.5000 -30.0 + 158.5000 143.7500 -30.0 + 158.7500 137.5000 -30.0 + 157.7500 135.5000 -30.0 + 157.7500 129.5000 -30.0 + 156.7500 127.5000 -30.0 + 156.7500 123.5000 -30.0 + 155.7500 121.5000 -30.0 + 155.7500 117.5000 -30.0 + 154.7500 115.5000 -30.0 + 154.7500 112.5000 -30.0 + 153.7500 110.5000 -30.0 + 153.7500 107.5000 -30.0 + 145.7500 91.5000 -30.0 + 140.7500 85.5000 -30.0 + 139.7500 83.5000 -30.0 + 133.7500 78.5000 -30.0 + 128.5000 75.2500 -30.0 + 123.5000 74.2500 -30.0 + 121.7500 73.5000 -30.0 + 117.5000 73.2500 -30.0 + 115.7500 72.5000 -30.0 +} -30.0 +{ -30.0 + 102.7500 82.5000 -30.0 + 104.5000 81.7500 -30.0 + 107.2500 85.5000 -30.0 + 109.5000 85.7500 -30.0 + 113.5000 83.7500 -30.0 + 117.2500 85.5000 -30.0 + 115.5000 92.2500 -30.0 + 116.5000 93.7500 -30.0 + 118.5000 94.7500 -30.0 + 123.5000 95.7500 -30.0 + 126.2500 98.5000 -30.0 + 135.2500 112.5000 -30.0 + 135.2500 114.5000 -30.0 + 137.2500 120.5000 -30.0 + 143.2500 127.5000 -30.0 + 145.2500 131.5000 -30.0 + 145.2500 135.5000 -30.0 + 144.2500 137.5000 -30.0 + 142.2500 151.5000 -30.0 + 143.2500 153.5000 -30.0 + 141.5000 158.2500 -30.0 + 141.2500 165.5000 -30.0 + 140.2500 167.5000 -30.0 + 141.2500 169.5000 -30.0 + 140.5000 170.2500 -30.0 + 140.2500 175.5000 -30.0 + 138.2500 180.5000 -30.0 + 135.5000 184.2500 -30.0 + 133.5000 185.2500 -30.0 + 126.2500 192.5000 -30.0 + 125.2500 194.5000 -30.0 + 116.5000 199.2500 -30.0 + 109.5000 200.2500 -30.0 + 102.5000 198.2500 -30.0 + 98.5000 200.2500 -30.0 + 96.5000 199.2500 -30.0 + 92.5000 201.2500 -30.0 + 86.5000 201.2500 -30.0 + 82.7500 198.5000 -30.0 + 76.7500 191.5000 -30.0 + 68.7500 176.5000 -30.0 + 68.7500 164.5000 -30.0 + 65.7500 158.5000 -30.0 + 65.7500 154.5000 -30.0 + 66.5000 152.7500 -30.0 + 66.7500 135.5000 -30.0 + 65.7500 133.5000 -30.0 + 68.7500 129.5000 -30.0 + 71.7500 123.5000 -30.0 + 76.5000 119.7500 -30.0 + 79.7500 115.5000 -30.0 + 83.5000 108.7500 -30.0 + 86.7500 99.5000 -30.0 + 90.5000 95.7500 -30.0 + 90.7500 93.5000 -30.0 + 89.7500 91.5000 -30.0 + 97.5000 84.7500 -30.0 + 98.2500 85.5000 -30.0 + 100.5000 84.7500 -30.0 + 104.2500 70.5000 -32.0 + 103.5000 71.2500 -32.0 + 96.5000 71.2500 -32.0 + 94.5000 72.2500 -32.0 + 90.5000 72.2500 -32.0 + 88.5000 73.2500 -32.0 + 86.5000 73.2500 -32.0 + 76.5000 78.2500 -32.0 + 70.2500 85.5000 -32.0 + 65.2500 93.5000 -32.0 + 59.5000 104.2500 -32.0 + 57.2500 110.5000 -32.0 + 56.5000 112.2500 -32.0 + 56.2500 116.5000 -32.0 + 55.2500 125.5000 -32.0 + 54.2500 127.5000 -32.0 + 53.2500 136.5000 -32.0 + 52.5000 138.2500 -32.0 + 52.2500 153.5000 -32.0 + 51.5000 155.2500 -32.0 + 51.2500 171.5000 -32.0 + 52.2500 173.5000 -32.0 + 52.2500 177.5000 -32.0 + 54.2500 181.5000 -32.0 + 54.2500 183.5000 -32.0 + 60.2500 195.5000 -32.0 + 68.5000 203.7500 -32.0 + 76.5000 208.7500 -32.0 + 78.5000 209.7500 -32.0 + 82.2500 211.5000 -32.0 + 101.5000 211.7500 -32.0 + 108.5000 212.7500 -32.0 + 110.2500 213.5000 -32.0 + 118.5000 213.7500 -32.0 + 120.5000 212.7500 -32.0 + 122.5000 212.7500 -32.0 + 124.5000 211.7500 -32.0 + 126.5000 211.7500 -32.0 + 134.5000 206.7500 -32.0 + 136.5000 205.7500 -32.0 + 144.7500 197.5000 -32.0 + 147.5000 193.7500 -32.0 + 150.7500 189.5000 -32.0 + 154.5000 182.7500 -32.0 + 156.7500 176.5000 -32.0 + 157.5000 174.7500 -32.0 + 157.7500 170.5000 -32.0 + 158.5000 168.7500 -32.0 + 158.7500 157.5000 -32.0 + 159.7500 148.5000 -32.0 + 160.5000 146.7500 -32.0 + 160.7500 137.5000 -32.0 + 159.7500 135.5000 -32.0 + 159.7500 129.5000 -32.0 + 158.7500 127.5000 -32.0 + 158.7500 123.5000 -32.0 + 157.7500 121.5000 -32.0 + 157.7500 119.5000 -32.0 + 156.7500 117.5000 -32.0 + 156.7500 112.5000 -32.0 + 155.7500 110.5000 -32.0 + 155.7500 107.5000 -32.0 + 147.7500 91.5000 -32.0 + 144.7500 87.5000 -32.0 + 143.7500 85.5000 -32.0 + 136.5000 78.2500 -32.0 + 128.5000 73.2500 -32.0 + 123.5000 72.2500 -32.0 + 121.7500 71.5000 -32.0 + 115.5000 71.2500 -32.0 + 113.7500 70.5000 -32.0 + 102.7500 80.5000 -32.0 + 103.5000 79.7500 -32.0 + 105.2500 80.5000 -32.0 + 107.2500 84.5000 -32.0 + 111.5000 84.7500 -32.0 + 115.5000 82.7500 -32.0 + 117.5000 82.7500 -32.0 + 121.2500 86.5000 -32.0 + 123.5000 86.7500 -32.0 + 124.2500 88.5000 -32.0 + 129.2500 94.5000 -32.0 + 128.5000 96.2500 -32.0 + 129.2500 97.5000 -32.0 + 130.2500 99.5000 -32.0 + 133.2500 103.5000 -32.0 + 136.2500 109.5000 -32.0 + 139.2500 113.5000 -32.0 + 139.2500 115.5000 -32.0 + 143.2500 123.5000 -32.0 + 144.5000 125.7500 -32.0 + 146.5000 126.7500 -32.0 + 148.2500 129.5000 -32.0 + 148.2500 134.5000 -32.0 + 147.5000 136.2500 -32.0 + 147.2500 141.5000 -32.0 + 146.2500 144.5000 -32.0 + 145.5000 146.2500 -32.0 + 145.2500 154.5000 -32.0 + 144.5000 156.2500 -32.0 + 144.2500 170.5000 -32.0 + 143.2500 175.5000 -32.0 + 140.2500 182.5000 -32.0 + 137.5000 185.2500 -32.0 + 135.5000 186.2500 -32.0 + 125.5000 196.2500 -32.0 + 120.5000 199.2500 -32.0 + 118.5000 199.2500 -32.0 + 112.5000 202.2500 -32.0 + 109.5000 202.2500 -32.0 + 103.5000 200.2500 -32.0 + 99.5000 202.2500 -32.0 + 94.5000 202.2500 -32.0 + 92.5000 203.2500 -32.0 + 88.5000 203.2500 -32.0 + 85.5000 202.2500 -32.0 + 76.5000 193.2500 -32.0 + 74.5000 192.2500 -32.0 + 70.7500 185.5000 -32.0 + 65.7500 175.5000 -32.0 + 65.7500 169.5000 -32.0 + 64.7500 167.5000 -32.0 + 64.7500 161.5000 -32.0 + 63.7500 159.5000 -32.0 + 63.7500 135.5000 -32.0 + 62.7500 132.5000 -32.0 + 64.5000 131.7500 -32.0 + 67.5000 125.7500 -32.0 + 67.7500 123.5000 -32.0 + 76.7500 114.5000 -32.0 + 79.7500 108.5000 -32.0 + 80.7500 103.5000 -32.0 + 85.5000 97.7500 -32.0 + 87.5000 96.7500 -32.0 + 88.7500 94.5000 -32.0 + 87.7500 92.5000 -32.0 + 89.7500 88.5000 -32.0 + 95.5000 83.7500 -32.0 + 97.2500 84.5000 -32.0 + 99.5000 84.7500 -32.0 + 97.2500 69.5000 -34.0 + 96.5000 70.2500 -34.0 + 91.5000 70.2500 -34.0 + 89.5000 71.2500 -34.0 + 86.2500 71.5000 -34.0 + 77.5000 75.2500 -34.0 + 70.5000 82.2500 -34.0 + 66.2500 88.5000 -34.0 + 65.2500 90.5000 -34.0 + 60.2500 98.5000 -34.0 + 56.2500 106.5000 -34.0 + 55.2500 111.5000 -34.0 + 54.5000 113.2500 -34.0 + 54.2500 117.5000 -34.0 + 53.2500 124.5000 -34.0 + 52.2500 129.5000 -34.0 + 51.5000 131.2500 -34.0 + 51.2500 135.5000 -34.0 + 50.5000 137.2500 -34.0 + 50.2500 151.5000 -34.0 + 49.5000 153.2500 -34.0 + 49.2500 173.5000 -34.0 + 50.2500 175.5000 -34.0 + 50.2500 177.5000 -34.0 + 51.2500 179.5000 -34.0 + 51.2500 182.5000 -34.0 + 58.2500 196.5000 -34.0 + 64.2500 202.5000 -34.0 + 70.2500 207.5000 -34.0 + 77.5000 211.7500 -34.0 + 82.5000 212.7500 -34.0 + 84.2500 213.5000 -34.0 + 97.5000 213.7500 -34.0 + 99.5000 212.7500 -34.0 + 100.2500 213.5000 -34.0 + 106.5000 213.7500 -34.0 + 108.2500 214.5000 -34.0 + 121.5000 214.7500 -34.0 + 123.5000 213.7500 -34.0 + 125.5000 213.7500 -34.0 + 135.5000 208.7500 -34.0 + 144.7500 200.5000 -34.0 + 147.5000 196.7500 -34.0 + 152.5000 190.7500 -34.0 + 156.5000 183.7500 -34.0 + 158.7500 177.5000 -34.0 + 159.5000 175.7500 -34.0 + 159.7500 172.5000 -34.0 + 160.5000 170.7500 -34.0 + 160.7500 164.5000 -34.0 + 161.5000 162.7500 -34.0 + 161.7500 150.5000 -34.0 + 162.5000 148.7500 -34.0 + 162.7500 140.5000 -34.0 + 161.7500 138.5000 -34.0 + 161.7500 130.5000 -34.0 + 160.7500 128.5000 -34.0 + 160.7500 123.5000 -34.0 + 159.7500 121.5000 -34.0 + 159.7500 119.5000 -34.0 + 158.7500 117.5000 -34.0 + 158.7500 114.5000 -34.0 + 157.7500 112.5000 -34.0 + 157.7500 109.5000 -34.0 + 156.7500 107.5000 -34.0 + 156.7500 105.5000 -34.0 + 153.7500 99.5000 -34.0 + 148.7500 90.5000 -34.0 + 146.7500 86.5000 -34.0 + 143.7500 83.5000 -34.0 + 142.7500 81.5000 -34.0 + 135.5000 75.2500 -34.0 + 127.5000 71.2500 -34.0 + 125.7500 70.5000 -34.0 + 122.5000 70.2500 -34.0 + 120.7500 69.5000 -34.0 + 102.7500 78.5000 -34.0 + 104.5000 77.7500 -34.0 + 106.2500 79.5000 -34.0 + 106.2500 81.5000 -34.0 + 108.2500 83.5000 -34.0 + 112.5000 83.7500 -34.0 + 116.5000 81.7500 -34.0 + 121.5000 83.7500 -34.0 + 125.2500 86.5000 -34.0 + 129.5000 91.7500 -34.0 + 131.5000 92.7500 -34.0 + 133.2500 96.5000 -34.0 + 139.2500 104.5000 -34.0 + 138.2500 107.5000 -34.0 + 141.2500 113.5000 -34.0 + 151.2500 127.5000 -34.0 + 150.2500 128.5000 -34.0 + 151.2500 130.5000 -34.0 + 150.5000 131.2500 -34.0 + 150.2500 133.5000 -34.0 + 151.2500 136.5000 -34.0 + 150.2500 139.5000 -34.0 + 147.5000 151.2500 -34.0 + 147.2500 160.5000 -34.0 + 146.2500 162.5000 -34.0 + 147.2500 164.5000 -34.0 + 145.2500 176.5000 -34.0 + 142.2500 183.5000 -34.0 + 127.5000 197.2500 -34.0 + 122.5000 200.2500 -34.0 + 120.5000 200.2500 -34.0 + 112.5000 204.2500 -34.0 + 102.5000 203.2500 -34.0 + 98.5000 205.2500 -34.0 + 93.5000 204.2500 -34.0 + 91.5000 205.2500 -34.0 + 89.5000 205.2500 -34.0 + 83.5000 201.2500 -34.0 + 74.7500 194.5000 -34.0 + 73.7500 192.5000 -34.0 + 69.7500 189.5000 -34.0 + 69.7500 187.5000 -34.0 + 66.7500 183.5000 -34.0 + 62.7500 175.5000 -34.0 + 62.7500 170.5000 -34.0 + 61.7500 168.5000 -34.0 + 62.7500 167.5000 -34.0 + 61.7500 165.5000 -34.0 + 61.7500 143.5000 -34.0 + 60.7500 141.5000 -34.0 + 60.7500 135.5000 -34.0 + 59.7500 133.5000 -34.0 + 62.5000 129.7500 -34.0 + 63.7500 123.5000 -34.0 + 67.5000 119.7500 -34.0 + 69.5000 118.7500 -34.0 + 69.7500 117.5000 -34.0 + 71.5000 115.7500 -34.0 + 74.7500 105.5000 -34.0 + 80.5000 98.7500 -34.0 + 82.5000 98.7500 -34.0 + 84.7500 95.5000 -34.0 + 83.7500 93.5000 -34.0 + 83.7500 90.5000 -34.0 + 92.5000 83.7500 -34.0 + 94.5000 83.7500 -34.0 + 96.5000 84.7500 -34.0 + 99.5000 83.7500 -34.0 + 143.7500 191.5000 -34.0 + 145.5000 190.7500 -34.0 + 147.2500 191.5000 -34.0 + 145.5000 192.2500 -34.0 + 104.2500 67.5000 -36.0 + 103.5000 68.2500 -36.0 + 93.5000 68.2500 -36.0 + 91.5000 69.2500 -36.0 + 88.5000 69.2500 -36.0 + 86.5000 70.2500 -36.0 + 84.5000 70.2500 -36.0 + 79.5000 72.2500 -36.0 + 75.5000 75.2500 -36.0 + 73.5000 76.2500 -36.0 + 68.2500 82.5000 -36.0 + 59.2500 96.5000 -36.0 + 55.2500 104.5000 -36.0 + 53.2500 113.5000 -36.0 + 52.2500 120.5000 -36.0 + 51.2500 125.5000 -36.0 + 50.5000 127.2500 -36.0 + 49.2500 135.5000 -36.0 + 48.5000 137.2500 -36.0 + 48.2500 143.5000 -36.0 + 47.5000 145.2500 -36.0 + 47.2500 159.5000 -36.0 + 46.2500 166.5000 -36.0 + 47.2500 168.5000 -36.0 + 47.2500 174.5000 -36.0 + 48.2500 176.5000 -36.0 + 48.2500 178.5000 -36.0 + 50.5000 184.7500 -36.0 + 55.2500 195.5000 -36.0 + 60.2500 201.5000 -36.0 + 67.5000 207.7500 -36.0 + 75.5000 212.7500 -36.0 + 80.5000 213.7500 -36.0 + 82.2500 214.5000 -36.0 + 101.5000 214.7500 -36.0 + 110.5000 215.7500 -36.0 + 112.2500 216.5000 -36.0 + 119.5000 216.7500 -36.0 + 121.5000 215.7500 -36.0 + 124.5000 215.7500 -36.0 + 138.5000 208.7500 -36.0 + 148.7500 198.5000 -36.0 + 151.5000 194.7500 -36.0 + 154.7500 190.5000 -36.0 + 160.7500 179.5000 -36.0 + 161.7500 172.5000 -36.0 + 162.5000 170.7500 -36.0 + 162.7500 163.5000 -36.0 + 163.5000 161.7500 -36.0 + 163.7500 135.5000 -36.0 + 162.7500 133.5000 -36.0 + 162.7500 127.5000 -36.0 + 161.7500 125.5000 -36.0 + 161.7500 121.5000 -36.0 + 160.7500 119.5000 -36.0 + 160.7500 117.5000 -36.0 + 159.7500 115.5000 -36.0 + 159.7500 111.5000 -36.0 + 158.7500 109.5000 -36.0 + 158.7500 106.5000 -36.0 + 149.7500 88.5000 -36.0 + 143.7500 81.5000 -36.0 + 142.7500 79.5000 -36.0 + 136.5000 74.2500 -36.0 + 127.7500 69.5000 -36.0 + 125.5000 69.2500 -36.0 + 123.7500 68.5000 -36.0 + 118.5000 68.2500 -36.0 + 116.7500 67.5000 -36.0 + 101.7500 77.5000 -36.0 + 102.5000 76.7500 -36.0 + 104.5000 76.7500 -36.0 + 106.5000 79.7500 -36.0 + 110.2500 82.5000 -36.0 + 113.5000 82.7500 -36.0 + 117.5000 80.7500 -36.0 + 119.5000 80.7500 -36.0 + 124.5000 81.7500 -36.0 + 126.2500 83.5000 -36.0 + 132.2500 87.5000 -36.0 + 134.2500 91.5000 -36.0 + 136.2500 97.5000 -36.0 + 141.2500 103.5000 -36.0 + 144.2500 108.5000 -36.0 + 144.2500 110.5000 -36.0 + 149.2500 120.5000 -36.0 + 153.2500 127.5000 -36.0 + 153.2500 135.5000 -36.0 + 152.5000 137.2500 -36.0 + 151.2500 145.5000 -36.0 + 150.5000 147.2500 -36.0 + 150.2500 154.5000 -36.0 + 149.5000 156.2500 -36.0 + 149.2500 166.5000 -36.0 + 148.5000 168.2500 -36.0 + 148.2500 173.5000 -36.0 + 147.2500 176.5000 -36.0 + 145.5000 180.2500 -36.0 + 145.2500 182.5000 -36.0 + 142.5000 186.2500 -36.0 + 140.5000 187.2500 -36.0 + 129.5000 198.2500 -36.0 + 122.5000 202.2500 -36.0 + 120.5000 202.2500 -36.0 + 114.5000 205.2500 -36.0 + 112.5000 205.2500 -36.0 + 110.5000 206.2500 -36.0 + 108.5000 206.2500 -36.0 + 106.7500 205.5000 -36.0 + 102.5000 205.2500 -36.0 + 100.5000 206.2500 -36.0 + 96.5000 206.2500 -36.0 + 87.5000 205.2500 -36.0 + 79.5000 200.2500 -36.0 + 77.5000 199.2500 -36.0 + 72.7500 194.5000 -36.0 + 71.7500 192.5000 -36.0 + 69.5000 190.2500 -36.0 + 67.5000 189.2500 -36.0 + 63.7500 182.5000 -36.0 + 60.7500 176.5000 -36.0 + 60.7500 174.5000 -36.0 + 59.7500 172.5000 -36.0 + 59.7500 161.5000 -36.0 + 58.7500 158.5000 -36.0 + 59.5000 156.7500 -36.0 + 59.7500 147.5000 -36.0 + 58.7500 145.5000 -36.0 + 58.7500 141.5000 -36.0 + 57.7500 139.5000 -36.0 + 58.5000 138.7500 -36.0 + 57.7500 137.5000 -36.0 + 57.7500 133.5000 -36.0 + 60.5000 127.7500 -36.0 + 60.7500 123.5000 -36.0 + 63.7500 120.5000 -36.0 + 71.7500 104.5000 -36.0 + 76.7500 98.5000 -36.0 + 75.7500 95.5000 -36.0 + 80.5000 88.7500 -36.0 + 82.5000 87.7500 -36.0 + 86.5000 84.7500 -36.0 + 89.5000 84.7500 -36.0 + 92.5000 81.7500 -36.0 + 94.2500 82.5000 -36.0 + 97.5000 82.7500 -36.0 + 101.5000 79.7500 -36.0 + 145.7500 191.5000 -36.0 + 146.5000 190.7500 -36.0 + 147.2500 191.5000 -36.0 + 146.5000 192.2500 -36.0 + 97.2500 66.5000 -38.0 + 96.5000 67.2500 -38.0 + 90.5000 67.2500 -38.0 + 88.5000 68.2500 -38.0 + 85.2500 68.5000 -38.0 + 76.5000 72.2500 -38.0 + 71.5000 76.2500 -38.0 + 66.5000 82.2500 -38.0 + 62.2500 88.5000 -38.0 + 57.2500 96.5000 -38.0 + 54.2500 102.5000 -38.0 + 53.2500 107.5000 -38.0 + 52.2500 109.5000 -38.0 + 51.2500 116.5000 -38.0 + 50.2500 121.5000 -38.0 + 49.2500 123.5000 -38.0 + 48.2500 132.5000 -38.0 + 47.5000 134.2500 -38.0 + 46.2500 142.5000 -38.0 + 45.5000 144.2500 -38.0 + 45.2500 158.5000 -38.0 + 44.2500 167.5000 -38.0 + 45.2500 169.5000 -38.0 + 45.2500 174.5000 -38.0 + 46.2500 176.5000 -38.0 + 46.2500 179.5000 -38.0 + 48.5000 185.7500 -38.0 + 52.2500 194.5000 -38.0 + 57.2500 200.5000 -38.0 + 58.2500 202.5000 -38.0 + 64.2500 207.5000 -38.0 + 70.5000 211.7500 -38.0 + 74.5000 213.7500 -38.0 + 76.2500 214.5000 -38.0 + 79.5000 214.7500 -38.0 + 81.2500 215.5000 -38.0 + 100.5000 215.7500 -38.0 + 107.5000 216.7500 -38.0 + 109.2500 217.5000 -38.0 + 121.5000 217.7500 -38.0 + 123.5000 216.7500 -38.0 + 125.5000 216.7500 -38.0 + 136.5000 211.7500 -38.0 + 147.7500 202.5000 -38.0 + 150.5000 198.7500 -38.0 + 155.5000 192.7500 -38.0 + 159.5000 186.7500 -38.0 + 162.7500 177.5000 -38.0 + 163.5000 175.7500 -38.0 + 163.7500 172.5000 -38.0 + 164.5000 170.7500 -38.0 + 164.7500 162.5000 -38.0 + 165.5000 160.7500 -38.0 + 165.7500 142.5000 -38.0 + 164.7500 140.5000 -38.0 + 164.7500 133.5000 -38.0 + 163.7500 131.5000 -38.0 + 163.7500 125.5000 -38.0 + 162.7500 123.5000 -38.0 + 162.7500 120.5000 -38.0 + 161.7500 118.5000 -38.0 + 161.7500 114.5000 -38.0 + 160.7500 112.5000 -38.0 + 160.7500 109.5000 -38.0 + 158.7500 105.5000 -38.0 + 158.7500 103.5000 -38.0 + 150.7500 87.5000 -38.0 + 147.7500 84.5000 -38.0 + 146.7500 82.5000 -38.0 + 138.7500 74.5000 -38.0 + 132.7500 70.5000 -38.0 + 126.5000 68.2500 -38.0 + 124.7500 67.5000 -38.0 + 121.5000 67.2500 -38.0 + 119.7500 66.5000 -38.0 + 101.7500 75.5000 -38.0 + 103.5000 74.7500 -38.0 + 105.2500 75.5000 -38.0 + 105.5000 77.7500 -38.0 + 109.2500 80.5000 -38.0 + 116.5000 80.7500 -38.0 + 120.5000 78.7500 -38.0 + 122.2500 79.5000 -38.0 + 123.5000 78.7500 -38.0 + 127.2500 79.5000 -38.0 + 128.2500 81.5000 -38.0 + 129.5000 81.7500 -38.0 + 137.2500 91.5000 -38.0 + 137.2500 95.5000 -38.0 + 139.2500 100.5000 -38.0 + 146.2500 107.5000 -38.0 + 146.2500 109.5000 -38.0 + 155.2500 127.5000 -38.0 + 155.2500 135.5000 -38.0 + 153.5000 142.2500 -38.0 + 153.2500 154.5000 -38.0 + 152.5000 156.2500 -38.0 + 151.2500 171.5000 -38.0 + 146.2500 185.5000 -38.0 + 144.5000 186.2500 -38.0 + 129.5000 200.2500 -38.0 + 122.5000 204.2500 -38.0 + 119.5000 204.2500 -38.0 + 113.5000 207.2500 -38.0 + 102.5000 207.2500 -38.0 + 100.5000 208.2500 -38.0 + 90.5000 207.2500 -38.0 + 84.5000 205.2500 -38.0 + 76.5000 200.2500 -38.0 + 64.7500 187.5000 -38.0 + 58.7500 177.5000 -38.0 + 58.7500 175.5000 -38.0 + 57.7500 173.5000 -38.0 + 57.7500 167.5000 -38.0 + 56.7500 165.5000 -38.0 + 56.7500 155.5000 -38.0 + 57.5000 153.7500 -38.0 + 57.7500 147.5000 -38.0 + 56.7500 145.5000 -38.0 + 56.7500 140.5000 -38.0 + 55.7500 138.5000 -38.0 + 55.7500 134.5000 -38.0 + 54.7500 131.5000 -38.0 + 57.5000 128.7500 -38.0 + 58.7500 123.5000 -38.0 + 61.7500 119.5000 -38.0 + 69.5000 102.7500 -38.0 + 71.7500 94.5000 -38.0 + 79.5000 86.7500 -38.0 + 81.5000 86.7500 -38.0 + 84.5000 83.7500 -38.0 + 86.5000 83.7500 -38.0 + 89.5000 80.7500 -38.0 + 94.5000 80.7500 -38.0 + 96.5000 79.7500 -38.0 + 99.5000 79.7500 -38.0 + 101.5000 77.7500 -38.0 + 50.7500 182.5000 -38.0 + 51.5000 181.7500 -38.0 + 52.2500 182.5000 -38.0 + 51.5000 183.2500 -38.0 + 95.2500 65.5000 -40.0 + 94.5000 66.2500 -40.0 + 90.5000 66.2500 -40.0 + 88.5000 67.2500 -40.0 + 84.5000 67.2500 -40.0 + 74.5000 72.2500 -40.0 + 70.5000 75.2500 -40.0 + 65.5000 81.2500 -40.0 + 61.5000 87.2500 -40.0 + 58.2500 91.5000 -40.0 + 53.2500 101.5000 -40.0 + 52.2500 106.5000 -40.0 + 51.2500 108.5000 -40.0 + 49.2500 118.5000 -40.0 + 47.2500 127.5000 -40.0 + 46.2500 134.5000 -40.0 + 45.5000 136.2500 -40.0 + 44.2500 144.5000 -40.0 + 43.5000 146.2500 -40.0 + 43.2500 174.5000 -40.0 + 44.2500 176.5000 -40.0 + 44.2500 178.5000 -40.0 + 45.2500 180.5000 -40.0 + 45.2500 182.5000 -40.0 + 46.5000 185.7500 -40.0 + 50.2500 194.5000 -40.0 + 59.5000 205.7500 -40.0 + 63.2500 208.5000 -40.0 + 67.5000 211.7500 -40.0 + 74.2500 215.5000 -40.0 + 77.5000 215.7500 -40.0 + 79.2500 216.5000 -40.0 + 99.5000 216.7500 -40.0 + 106.5000 217.7500 -40.0 + 108.2500 218.5000 -40.0 + 122.5000 218.7500 -40.0 + 124.5000 217.7500 -40.0 + 126.5000 217.7500 -40.0 + 137.5000 212.7500 -40.0 + 148.5000 203.7500 -40.0 + 157.7500 192.5000 -40.0 + 163.5000 181.7500 -40.0 + 163.7500 179.5000 -40.0 + 164.7500 176.5000 -40.0 + 165.5000 174.7500 -40.0 + 165.7500 170.5000 -40.0 + 166.5000 168.7500 -40.0 + 166.7500 161.5000 -40.0 + 167.5000 159.7500 -40.0 + 167.7500 149.5000 -40.0 + 166.7500 147.5000 -40.0 + 166.7500 138.5000 -40.0 + 165.7500 136.5000 -40.0 + 165.7500 132.5000 -40.0 + 164.7500 130.5000 -40.0 + 164.7500 124.5000 -40.0 + 163.7500 122.5000 -40.0 + 163.7500 117.5000 -40.0 + 161.7500 113.5000 -40.0 + 161.7500 110.5000 -40.0 + 160.7500 108.5000 -40.0 + 160.7500 106.5000 -40.0 + 159.7500 104.5000 -40.0 + 159.7500 102.5000 -40.0 + 152.7500 88.5000 -40.0 + 147.7500 82.5000 -40.0 + 144.7500 78.5000 -40.0 + 137.5000 72.2500 -40.0 + 127.5000 67.2500 -40.0 + 125.7500 66.5000 -40.0 + 122.5000 66.2500 -40.0 + 120.7500 65.5000 -40.0 + 101.7500 73.5000 -40.0 + 102.5000 72.7500 -40.0 + 104.5000 73.7500 -40.0 + 106.2500 74.5000 -40.0 + 106.2500 77.5000 -40.0 + 110.2500 79.5000 -40.0 + 117.5000 79.7500 -40.0 + 121.5000 77.7500 -40.0 + 129.5000 77.7500 -40.0 + 133.2500 82.5000 -40.0 + 136.2500 88.5000 -40.0 + 140.2500 92.5000 -40.0 + 140.2500 95.5000 -40.0 + 142.2500 97.5000 -40.0 + 141.5000 99.2500 -40.0 + 142.2500 101.5000 -40.0 + 146.2500 105.5000 -40.0 + 150.2500 113.5000 -40.0 + 150.2500 115.5000 -40.0 + 153.2500 119.5000 -40.0 + 156.2500 124.5000 -40.0 + 156.2500 127.5000 -40.0 + 157.2500 130.5000 -40.0 + 156.2500 139.5000 -40.0 + 155.5000 141.2500 -40.0 + 155.2500 158.5000 -40.0 + 154.2500 163.5000 -40.0 + 153.2500 172.5000 -40.0 + 151.2500 178.5000 -40.0 + 149.2500 183.5000 -40.0 + 148.5000 185.2500 -40.0 + 146.5000 186.2500 -40.0 + 139.5000 193.2500 -40.0 + 129.5000 202.2500 -40.0 + 119.5000 207.2500 -40.0 + 116.5000 207.2500 -40.0 + 112.5000 209.2500 -40.0 + 108.5000 209.2500 -40.0 + 103.5000 208.2500 -40.0 + 101.5000 209.2500 -40.0 + 98.5000 209.2500 -40.0 + 96.7500 208.5000 -40.0 + 90.5000 208.2500 -40.0 + 85.5000 207.2500 -40.0 + 83.5000 206.2500 -40.0 + 75.5000 201.2500 -40.0 + 63.7500 188.5000 -40.0 + 60.7500 184.5000 -40.0 + 57.7500 179.5000 -40.0 + 57.7500 177.5000 -40.0 + 55.7500 173.5000 -40.0 + 55.7500 169.5000 -40.0 + 54.7500 167.5000 -40.0 + 54.7500 140.5000 -40.0 + 53.7500 138.5000 -40.0 + 53.7500 133.5000 -40.0 + 52.7500 131.5000 -40.0 + 53.7500 129.5000 -40.0 + 62.5000 112.7500 -40.0 + 62.7500 110.5000 -40.0 + 67.7500 100.5000 -40.0 + 68.5000 98.7500 -40.0 + 68.7500 94.5000 -40.0 + 72.5000 88.7500 -40.0 + 74.7500 87.5000 -40.0 + 81.5000 82.7500 -40.0 + 83.5000 82.7500 -40.0 + 83.7500 81.5000 -40.0 + 85.5000 79.7500 -40.0 + 91.5000 79.7500 -40.0 + 93.5000 78.7500 -40.0 + 95.5000 78.7500 -40.0 + 99.5000 76.7500 -40.0 + 99.7500 74.5000 -40.0 + 143.7500 95.5000 -40.0 + 144.5000 94.7500 -40.0 + 145.2500 95.5000 -40.0 + 144.5000 97.2500 -40.0 + 66.7500 204.5000 -40.0 + 67.5000 203.7500 -40.0 + 68.2500 204.5000 -40.0 + 67.5000 205.2500 -40.0 + 95.2500 64.5000 -42.0 + 94.5000 65.2500 -42.0 + 89.5000 65.2500 -42.0 + 87.5000 66.2500 -42.0 + 84.2500 66.5000 -42.0 + 75.5000 70.2500 -42.0 + 70.5000 74.2500 -42.0 + 68.5000 75.2500 -42.0 + 68.2500 76.5000 -42.0 + 64.5000 80.2500 -42.0 + 58.2500 88.5000 -42.0 + 53.5000 97.2500 -42.0 + 53.2500 99.5000 -42.0 + 51.2500 103.5000 -42.0 + 50.2500 108.5000 -42.0 + 49.2500 110.5000 -42.0 + 48.2500 117.5000 -42.0 + 47.5000 119.2500 -42.0 + 46.2500 127.5000 -42.0 + 45.5000 129.2500 -42.0 + 44.2500 137.5000 -42.0 + 43.2500 139.5000 -42.0 + 42.2500 146.5000 -42.0 + 41.5000 148.2500 -42.0 + 41.2500 154.5000 -42.0 + 40.2500 156.5000 -42.0 + 41.2500 158.5000 -42.0 + 41.2500 173.5000 -42.0 + 42.2500 175.5000 -42.0 + 42.2500 179.5000 -42.0 + 44.2500 183.5000 -42.0 + 44.2500 185.5000 -42.0 + 50.2500 197.5000 -42.0 + 58.2500 206.5000 -42.0 + 64.2500 211.5000 -42.0 + 70.5000 215.7500 -42.0 + 75.5000 216.7500 -42.0 + 77.2500 217.5000 -42.0 + 98.5000 217.7500 -42.0 + 105.5000 218.7500 -42.0 + 107.2500 219.5000 -42.0 + 124.5000 219.7500 -42.0 + 132.5000 215.7500 -42.0 + 134.5000 215.7500 -42.0 + 140.5000 211.7500 -42.0 + 142.5000 210.7500 -42.0 + 148.5000 204.7500 -42.0 + 150.5000 203.7500 -42.0 + 154.5000 198.7500 -42.0 + 159.5000 192.7500 -42.0 + 163.5000 185.7500 -42.0 + 163.7500 183.5000 -42.0 + 165.7500 179.5000 -42.0 + 166.7500 174.5000 -42.0 + 167.5000 172.7500 -42.0 + 167.7500 167.5000 -42.0 + 168.5000 165.7500 -42.0 + 168.7500 147.5000 -42.0 + 167.7500 145.5000 -42.0 + 167.7500 138.5000 -42.0 + 166.7500 136.5000 -42.0 + 166.7500 132.5000 -42.0 + 165.7500 130.5000 -42.0 + 165.7500 123.5000 -42.0 + 164.7500 121.5000 -42.0 + 164.7500 118.5000 -42.0 + 163.7500 116.5000 -42.0 + 163.7500 114.5000 -42.0 + 162.7500 112.5000 -42.0 + 162.7500 108.5000 -42.0 + 160.7500 104.5000 -42.0 + 160.7500 102.5000 -42.0 + 158.7500 98.5000 -42.0 + 156.5000 92.2500 -42.0 + 151.7500 85.5000 -42.0 + 150.7500 83.5000 -42.0 + 139.7500 72.5000 -42.0 + 132.7500 68.5000 -42.0 + 126.5000 66.2500 -42.0 + 124.7500 65.5000 -42.0 + 121.5000 65.2500 -42.0 + 119.7500 64.5000 -42.0 + 99.7500 72.5000 -42.0 + 100.5000 71.7500 -42.0 + 104.5000 71.7500 -42.0 + 108.2500 74.5000 -42.0 + 108.2500 76.5000 -42.0 + 109.5000 76.7500 -42.0 + 111.2500 77.5000 -42.0 + 116.5000 77.7500 -42.0 + 118.5000 76.7500 -42.0 + 121.5000 76.7500 -42.0 + 123.5000 75.7500 -42.0 + 130.5000 75.7500 -42.0 + 132.2500 76.5000 -42.0 + 132.2500 78.5000 -42.0 + 135.2500 82.5000 -42.0 + 137.2500 86.5000 -42.0 + 144.2500 95.5000 -42.0 + 145.2500 97.5000 -42.0 + 147.2500 98.5000 -42.0 + 147.2500 101.5000 -42.0 + 149.2500 105.5000 -42.0 + 149.2500 107.5000 -42.0 + 154.2500 117.5000 -42.0 + 157.2500 122.5000 -42.0 + 157.2500 126.5000 -42.0 + 158.2500 128.5000 -42.0 + 158.2500 132.5000 -42.0 + 157.5000 134.2500 -42.0 + 157.2500 142.5000 -42.0 + 156.2500 144.5000 -42.0 + 157.2500 146.5000 -42.0 + 157.2500 160.5000 -42.0 + 156.5000 162.2500 -42.0 + 156.2500 169.5000 -42.0 + 155.2500 174.5000 -42.0 + 154.2500 177.5000 -42.0 + 151.2500 184.5000 -42.0 + 136.5000 198.2500 -42.0 + 129.5000 204.2500 -42.0 + 124.5000 207.2500 -42.0 + 122.5000 207.2500 -42.0 + 118.5000 209.2500 -42.0 + 116.5000 209.2500 -42.0 + 114.5000 210.2500 -42.0 + 112.5000 210.2500 -42.0 + 109.5000 211.2500 -42.0 + 103.5000 209.2500 -42.0 + 98.5000 211.2500 -42.0 + 96.7500 209.5000 -42.0 + 90.5000 209.2500 -42.0 + 83.5000 208.2500 -42.0 + 79.5000 205.2500 -42.0 + 75.5000 203.2500 -42.0 + 59.7500 186.5000 -42.0 + 54.7500 176.5000 -42.0 + 54.7500 174.5000 -42.0 + 53.7500 172.5000 -42.0 + 53.7500 168.5000 -42.0 + 52.7500 166.5000 -42.0 + 52.7500 134.5000 -42.0 + 51.7500 132.5000 -42.0 + 51.7500 130.5000 -42.0 + 52.7500 127.5000 -42.0 + 54.7500 122.5000 -42.0 + 57.5000 118.7500 -42.0 + 58.7500 114.5000 -42.0 + 60.5000 110.7500 -42.0 + 60.7500 108.5000 -42.0 + 63.7500 104.5000 -42.0 + 66.7500 98.5000 -42.0 + 67.7500 89.5000 -42.0 + 71.5000 86.7500 -42.0 + 75.5000 84.7500 -42.0 + 82.5000 78.7500 -42.0 + 84.5000 77.7500 -42.0 + 86.2500 78.5000 -42.0 + 90.5000 78.7500 -42.0 + 91.5000 76.7500 -42.0 + 94.5000 76.7500 -42.0 + 97.5000 75.7500 -42.0 + 97.7500 73.5000 -42.0 + 46.7500 142.5000 -42.0 + 47.5000 141.7500 -42.0 + 48.2500 142.5000 -42.0 + 47.5000 144.2500 -42.0 + 96.2500 63.5000 -44.0 + 95.5000 64.2500 -44.0 + 90.5000 64.2500 -44.0 + 88.5000 65.2500 -44.0 + 86.5000 65.2500 -44.0 + 84.5000 66.2500 -44.0 + 82.5000 66.2500 -44.0 + 70.5000 72.2500 -44.0 + 65.5000 77.2500 -44.0 + 60.5000 83.2500 -44.0 + 57.2500 87.5000 -44.0 + 51.2500 99.5000 -44.0 + 50.2500 104.5000 -44.0 + 49.2500 106.5000 -44.0 + 47.2500 115.5000 -44.0 + 46.5000 117.2500 -44.0 + 46.2500 121.5000 -44.0 + 45.5000 123.2500 -44.0 + 44.2500 131.5000 -44.0 + 43.2500 133.5000 -44.0 + 40.2500 148.5000 -44.0 + 39.5000 150.2500 -44.0 + 39.2500 170.5000 -44.0 + 40.2500 172.5000 -44.0 + 40.2500 177.5000 -44.0 + 41.2500 179.5000 -44.0 + 41.2500 181.5000 -44.0 + 43.2500 185.5000 -44.0 + 43.2500 187.5000 -44.0 + 47.2500 195.5000 -44.0 + 50.2500 199.5000 -44.0 + 51.2500 201.5000 -44.0 + 59.5000 209.7500 -44.0 + 63.2500 212.5000 -44.0 + 69.5000 216.7500 -44.0 + 74.5000 217.7500 -44.0 + 76.2500 218.5000 -44.0 + 97.5000 218.7500 -44.0 + 104.5000 219.7500 -44.0 + 106.2500 220.5000 -44.0 + 122.5000 220.7500 -44.0 + 124.5000 219.7500 -44.0 + 127.7500 219.5000 -44.0 + 138.5000 214.7500 -44.0 + 143.5000 210.7500 -44.0 + 145.5000 209.7500 -44.0 + 155.5000 199.7500 -44.0 + 160.5000 193.7500 -44.0 + 165.7500 184.5000 -44.0 + 166.7500 179.5000 -44.0 + 168.7500 173.5000 -44.0 + 169.7500 164.5000 -44.0 + 170.5000 162.7500 -44.0 + 170.7500 156.5000 -44.0 + 169.7500 154.5000 -44.0 + 169.7500 145.5000 -44.0 + 168.7500 143.5000 -44.0 + 168.7500 138.5000 -44.0 + 167.7500 136.5000 -44.0 + 167.7500 131.5000 -44.0 + 166.7500 129.5000 -44.0 + 166.7500 124.5000 -44.0 + 165.7500 122.5000 -44.0 + 165.7500 118.5000 -44.0 + 164.7500 116.5000 -44.0 + 164.7500 114.5000 -44.0 + 163.7500 112.5000 -44.0 + 163.7500 108.5000 -44.0 + 161.7500 104.5000 -44.0 + 161.7500 102.5000 -44.0 + 158.7500 96.5000 -44.0 + 158.7500 94.5000 -44.0 + 153.7500 86.5000 -44.0 + 152.7500 84.5000 -44.0 + 147.7500 79.5000 -44.0 + 146.7500 77.5000 -44.0 + 138.5000 71.2500 -44.0 + 131.7500 67.5000 -44.0 + 125.5000 65.2500 -44.0 + 123.7500 64.5000 -44.0 + 119.5000 64.2500 -44.0 + 117.7500 63.5000 -44.0 + 97.5000 70.7500 -44.0 + 99.5000 70.7500 -44.0 + 101.5000 71.7500 -44.0 + 104.5000 70.7500 -44.0 + 106.2500 72.5000 -44.0 + 109.5000 72.7500 -44.0 + 114.5000 74.7500 -44.0 + 120.5000 71.7500 -44.0 + 123.2500 74.5000 -44.0 + 132.5000 74.7500 -44.0 + 134.2500 76.5000 -44.0 + 134.2500 79.5000 -44.0 + 138.2500 83.5000 -44.0 + 140.2500 87.5000 -44.0 + 144.2500 91.5000 -44.0 + 150.2500 101.5000 -44.0 + 150.2500 104.5000 -44.0 + 155.2500 114.5000 -44.0 + 155.2500 116.5000 -44.0 + 158.2500 120.5000 -44.0 + 158.2500 123.5000 -44.0 + 159.2500 125.5000 -44.0 + 159.2500 136.5000 -44.0 + 158.5000 138.2500 -44.0 + 158.2500 145.5000 -44.0 + 159.2500 147.5000 -44.0 + 159.2500 163.5000 -44.0 + 158.5000 165.2500 -44.0 + 158.2500 173.5000 -44.0 + 157.2500 176.5000 -44.0 + 154.2500 183.5000 -44.0 + 147.5000 190.2500 -44.0 + 137.5000 199.2500 -44.0 + 130.5000 205.2500 -44.0 + 125.5000 208.2500 -44.0 + 123.5000 208.2500 -44.0 + 117.5000 211.2500 -44.0 + 115.5000 211.2500 -44.0 + 113.5000 212.2500 -44.0 + 108.5000 212.2500 -44.0 + 106.7500 211.5000 -44.0 + 100.5000 211.2500 -44.0 + 98.5000 212.2500 -44.0 + 96.7500 210.5000 -44.0 + 88.5000 210.2500 -44.0 + 83.5000 209.2500 -44.0 + 75.5000 204.2500 -44.0 + 73.5000 203.2500 -44.0 + 58.7500 187.5000 -44.0 + 55.7500 183.5000 -44.0 + 55.7500 181.5000 -44.0 + 52.7500 175.5000 -44.0 + 52.7500 173.5000 -44.0 + 51.7500 171.5000 -44.0 + 51.7500 168.5000 -44.0 + 50.7500 166.5000 -44.0 + 50.7500 146.5000 -44.0 + 51.5000 144.7500 -44.0 + 51.7500 139.5000 -44.0 + 50.7500 137.5000 -44.0 + 50.7500 131.5000 -44.0 + 49.7500 128.5000 -44.0 + 56.7500 114.5000 -44.0 + 57.5000 112.7500 -44.0 + 57.7500 108.5000 -44.0 + 62.7500 100.5000 -44.0 + 64.7500 90.5000 -44.0 + 67.5000 87.7500 -44.0 + 72.5000 84.7500 -44.0 + 74.7500 83.5000 -44.0 + 77.5000 79.7500 -44.0 + 81.5000 76.7500 -44.0 + 86.5000 76.7500 -44.0 + 90.5000 72.7500 -44.0 + 92.2500 73.5000 -44.0 + 94.5000 73.7500 -44.0 + 98.2500 62.5000 -46.0 + 97.5000 63.2500 -46.0 + 92.5000 63.2500 -46.0 + 90.5000 64.2500 -46.0 + 87.5000 64.2500 -46.0 + 85.5000 65.2500 -46.0 + 82.2500 65.5000 -46.0 + 73.5000 69.2500 -46.0 + 67.5000 74.2500 -46.0 + 65.5000 75.2500 -46.0 + 59.5000 82.2500 -46.0 + 56.2500 86.5000 -46.0 + 50.2500 98.5000 -46.0 + 48.2500 107.5000 -46.0 + 47.2500 109.5000 -46.0 + 44.2500 124.5000 -46.0 + 40.2500 142.5000 -46.0 + 39.5000 144.2500 -46.0 + 38.2500 152.5000 -46.0 + 37.5000 154.2500 -46.0 + 37.2500 167.5000 -46.0 + 38.2500 169.5000 -46.0 + 38.2500 175.5000 -46.0 + 39.2500 177.5000 -46.0 + 39.2500 180.5000 -46.0 + 41.2500 184.5000 -46.0 + 41.5000 186.7500 -46.0 + 45.2500 195.5000 -46.0 + 49.2500 200.5000 -46.0 + 50.2500 202.5000 -46.0 + 57.2500 209.5000 -46.0 + 63.2500 214.5000 -46.0 + 68.5000 217.7500 -46.0 + 73.5000 218.7500 -46.0 + 75.2500 219.5000 -46.0 + 83.5000 219.7500 -46.0 + 85.5000 220.7500 -46.0 + 87.5000 219.7500 -46.0 + 96.5000 219.7500 -46.0 + 105.5000 220.7500 -46.0 + 107.2500 221.5000 -46.0 + 122.5000 221.7500 -46.0 + 124.5000 220.7500 -46.0 + 127.5000 220.7500 -46.0 + 143.5000 212.7500 -46.0 + 158.5000 198.7500 -46.0 + 162.7500 192.5000 -46.0 + 167.7500 182.5000 -46.0 + 169.7500 173.5000 -46.0 + 170.5000 171.7500 -46.0 + 170.7500 167.5000 -46.0 + 171.5000 165.7500 -46.0 + 171.7500 156.5000 -46.0 + 170.7500 154.5000 -46.0 + 170.7500 146.5000 -46.0 + 169.7500 144.5000 -46.0 + 169.7500 139.5000 -46.0 + 168.7500 137.5000 -46.0 + 168.7500 131.5000 -46.0 + 167.7500 129.5000 -46.0 + 167.7500 125.5000 -46.0 + 166.7500 123.5000 -46.0 + 166.7500 120.5000 -46.0 + 165.7500 118.5000 -46.0 + 165.7500 114.5000 -46.0 + 164.7500 112.5000 -46.0 + 164.7500 109.5000 -46.0 + 162.7500 105.5000 -46.0 + 162.7500 103.5000 -46.0 + 160.7500 99.5000 -46.0 + 160.7500 97.5000 -46.0 + 154.7500 85.5000 -46.0 + 146.7500 76.5000 -46.0 + 142.5000 73.2500 -46.0 + 138.7500 70.5000 -46.0 + 131.7500 66.5000 -46.0 + 129.5000 66.2500 -46.0 + 125.5000 64.2500 -46.0 + 118.5000 63.2500 -46.0 + 116.7500 62.5000 -46.0 + 82.5000 69.7500 -46.0 + 96.5000 69.7500 -46.0 + 102.5000 72.7500 -46.0 + 102.7500 70.5000 -46.0 + 104.5000 69.7500 -46.0 + 106.5000 71.7500 -46.0 + 108.5000 70.7500 -46.0 + 110.5000 70.7500 -46.0 + 117.5000 71.7500 -46.0 + 120.5000 70.7500 -46.0 + 125.5000 72.7500 -46.0 + 127.2500 73.5000 -46.0 + 132.5000 73.7500 -46.0 + 134.2500 74.5000 -46.0 + 137.2500 80.5000 -46.0 + 141.5000 83.7500 -46.0 + 143.5000 84.7500 -46.0 + 147.2500 90.5000 -46.0 + 147.2500 92.5000 -46.0 + 148.2500 95.5000 -46.0 + 151.2500 99.5000 -46.0 + 151.2500 102.5000 -46.0 + 152.2500 104.5000 -46.0 + 152.2500 106.5000 -46.0 + 155.2500 110.5000 -46.0 + 155.2500 112.5000 -46.0 + 159.2500 120.5000 -46.0 + 159.2500 122.5000 -46.0 + 160.2500 124.5000 -46.0 + 160.2500 126.5000 -46.0 + 161.2500 128.5000 -46.0 + 160.5000 130.2500 -46.0 + 160.2500 135.5000 -46.0 + 159.5000 137.2500 -46.0 + 159.2500 143.5000 -46.0 + 160.2500 145.5000 -46.0 + 160.2500 148.5000 -46.0 + 161.2500 150.5000 -46.0 + 161.2500 162.5000 -46.0 + 160.5000 164.2500 -46.0 + 160.2500 174.5000 -46.0 + 158.2500 178.5000 -46.0 + 157.2500 183.5000 -46.0 + 155.5000 184.2500 -46.0 + 149.5000 190.2500 -46.0 + 136.2500 202.5000 -46.0 + 129.5000 207.2500 -46.0 + 124.5000 210.2500 -46.0 + 122.5000 210.2500 -46.0 + 118.5000 212.2500 -46.0 + 115.5000 212.2500 -46.0 + 113.5000 213.2500 -46.0 + 109.5000 213.2500 -46.0 + 104.5000 212.2500 -46.0 + 102.5000 211.2500 -46.0 + 100.5000 212.2500 -46.0 + 98.5000 212.2500 -46.0 + 96.7500 211.5000 -46.0 + 88.5000 211.2500 -46.0 + 83.5000 210.2500 -46.0 + 75.5000 206.2500 -46.0 + 71.5000 203.2500 -46.0 + 69.5000 202.2500 -46.0 + 68.7500 200.5000 -46.0 + 54.7500 185.5000 -46.0 + 54.7500 183.5000 -46.0 + 51.7500 177.5000 -46.0 + 51.7500 175.5000 -46.0 + 49.7500 171.5000 -46.0 + 49.7500 168.5000 -46.0 + 48.7500 166.5000 -46.0 + 48.7500 147.5000 -46.0 + 49.5000 145.7500 -46.0 + 49.7500 130.5000 -46.0 + 48.7500 127.5000 -46.0 + 49.5000 125.7500 -46.0 + 49.7500 122.5000 -46.0 + 51.7500 118.5000 -46.0 + 56.5000 109.7500 -46.0 + 56.7500 107.5000 -46.0 + 60.5000 99.7500 -46.0 + 60.7500 95.5000 -46.0 + 63.7500 89.5000 -46.0 + 69.5000 84.7500 -46.0 + 71.5000 83.7500 -46.0 + 73.7500 81.5000 -46.0 + 72.7500 79.5000 -46.0 + 77.5000 76.7500 -46.0 + 81.5000 74.7500 -46.0 + 81.7500 73.5000 -46.0 + 80.7500 71.5000 -46.0 + 100.2500 61.5000 -48.0 + 99.5000 62.2500 -48.0 + 93.5000 62.2500 -48.0 + 91.5000 63.2500 -48.0 + 88.5000 63.2500 -48.0 + 86.5000 64.2500 -48.0 + 83.2500 64.5000 -48.0 + 72.5000 69.2500 -48.0 + 68.5000 72.2500 -48.0 + 66.5000 73.2500 -48.0 + 59.5000 80.2500 -48.0 + 56.2500 84.5000 -48.0 + 50.2500 96.5000 -48.0 + 49.2500 101.5000 -48.0 + 47.2500 105.5000 -48.0 + 46.2500 110.5000 -48.0 + 45.5000 112.2500 -48.0 + 44.2500 120.5000 -48.0 + 43.2500 125.5000 -48.0 + 42.2500 128.5000 -48.0 + 40.2500 137.5000 -48.0 + 39.2500 142.5000 -48.0 + 38.2500 144.5000 -48.0 + 37.2500 151.5000 -48.0 + 36.5000 153.2500 -48.0 + 36.2500 159.5000 -48.0 + 35.2500 162.5000 -48.0 + 36.2500 164.5000 -48.0 + 36.2500 171.5000 -48.0 + 37.2500 173.5000 -48.0 + 37.2500 176.5000 -48.0 + 38.2500 178.5000 -48.0 + 38.2500 180.5000 -48.0 + 39.2500 182.5000 -48.0 + 39.2500 184.5000 -48.0 + 43.2500 192.5000 -48.0 + 43.2500 194.5000 -48.0 + 46.2500 198.5000 -48.0 + 47.2500 200.5000 -48.0 + 55.2500 209.5000 -48.0 + 61.2500 214.5000 -48.0 + 66.2500 217.5000 -48.0 + 72.5000 219.7500 -48.0 + 81.5000 220.7500 -48.0 + 86.5000 221.7500 -48.0 + 88.5000 220.7500 -48.0 + 90.5000 220.7500 -48.0 + 95.5000 221.7500 -48.0 + 98.5000 220.7500 -48.0 + 100.2500 221.5000 -48.0 + 105.5000 221.7500 -48.0 + 107.2500 222.5000 -48.0 + 116.5000 222.7500 -48.0 + 118.5000 221.7500 -48.0 + 125.5000 221.7500 -48.0 + 127.5000 220.7500 -48.0 + 129.7500 220.5000 -48.0 + 142.5000 214.7500 -48.0 + 154.5000 203.7500 -48.0 + 156.5000 202.7500 -48.0 + 156.7500 201.5000 -48.0 + 162.7500 194.5000 -48.0 + 166.5000 187.7500 -48.0 + 169.7500 178.5000 -48.0 + 171.7500 169.5000 -48.0 + 172.5000 167.7500 -48.0 + 172.7500 157.5000 -48.0 + 171.7500 155.5000 -48.0 + 171.7500 147.5000 -48.0 + 170.7500 145.5000 -48.0 + 170.7500 139.5000 -48.0 + 169.7500 137.5000 -48.0 + 169.7500 133.5000 -48.0 + 168.7500 131.5000 -48.0 + 168.7500 127.5000 -48.0 + 167.7500 125.5000 -48.0 + 167.7500 121.5000 -48.0 + 166.7500 119.5000 -48.0 + 166.7500 117.5000 -48.0 + 165.7500 115.5000 -48.0 + 165.7500 110.5000 -48.0 + 163.7500 106.5000 -48.0 + 163.7500 104.5000 -48.0 + 160.7500 98.5000 -48.0 + 160.7500 96.5000 -48.0 + 158.7500 92.5000 -48.0 + 158.7500 90.5000 -48.0 + 154.7500 84.5000 -48.0 + 153.7500 82.5000 -48.0 + 145.7500 74.5000 -48.0 + 139.5000 70.2500 -48.0 + 127.5000 64.2500 -48.0 + 122.5000 63.2500 -48.0 + 120.7500 62.5000 -48.0 + 115.5000 62.2500 -48.0 + 113.7500 61.5000 -48.0 + 81.7500 69.5000 -48.0 + 82.5000 68.7500 -48.0 + 87.5000 69.7500 -48.0 + 89.5000 68.7500 -48.0 + 92.5000 68.7500 -48.0 + 94.5000 69.7500 -48.0 + 99.5000 70.7500 -48.0 + 102.5000 71.7500 -48.0 + 102.7500 70.5000 -48.0 + 104.5000 68.7500 -48.0 + 106.5000 70.7500 -48.0 + 108.5000 69.7500 -48.0 + 110.5000 69.7500 -48.0 + 112.5000 68.7500 -48.0 + 115.5000 68.7500 -48.0 + 117.2500 69.5000 -48.0 + 123.5000 69.7500 -48.0 + 128.5000 71.7500 -48.0 + 132.2500 73.5000 -48.0 + 135.5000 73.7500 -48.0 + 138.2500 78.5000 -48.0 + 139.2500 80.5000 -48.0 + 140.5000 80.7500 -48.0 + 142.5000 82.7500 -48.0 + 144.5000 83.7500 -48.0 + 147.2500 87.5000 -48.0 + 149.2500 91.5000 -48.0 + 149.2500 93.5000 -48.0 + 152.2500 99.5000 -48.0 + 152.2500 103.5000 -48.0 + 158.2500 115.5000 -48.0 + 158.2500 117.5000 -48.0 + 160.2500 119.5000 -48.0 + 160.2500 121.5000 -48.0 + 161.2500 123.5000 -48.0 + 161.2500 125.5000 -48.0 + 162.2500 127.5000 -48.0 + 161.5000 128.2500 -48.0 + 161.2500 134.5000 -48.0 + 160.5000 136.2500 -48.0 + 160.2500 142.5000 -48.0 + 161.2500 144.5000 -48.0 + 161.2500 146.5000 -48.0 + 162.2500 148.5000 -48.0 + 162.2500 169.5000 -48.0 + 161.2500 176.5000 -48.0 + 159.5000 180.2500 -48.0 + 159.2500 182.5000 -48.0 + 146.5000 195.2500 -48.0 + 135.5000 204.2500 -48.0 + 131.5000 207.2500 -48.0 + 119.5000 213.2500 -48.0 + 116.5000 213.2500 -48.0 + 114.5000 214.2500 -48.0 + 109.5000 214.2500 -48.0 + 104.5000 213.2500 -48.0 + 102.5000 212.2500 -48.0 + 100.5000 213.2500 -48.0 + 98.5000 213.2500 -48.0 + 94.7500 211.5000 -48.0 + 93.5000 212.2500 -48.0 + 90.5000 212.2500 -48.0 + 88.7500 211.5000 -48.0 + 82.5000 211.2500 -48.0 + 72.5000 206.2500 -48.0 + 53.7500 186.5000 -48.0 + 51.7500 182.5000 -48.0 + 51.7500 180.5000 -48.0 + 49.7500 176.5000 -48.0 + 49.7500 174.5000 -48.0 + 47.7500 170.5000 -48.0 + 47.7500 164.5000 -48.0 + 46.7500 162.5000 -48.0 + 46.7500 148.5000 -48.0 + 47.7500 143.5000 -48.0 + 48.5000 141.7500 -48.0 + 48.7500 129.5000 -48.0 + 47.7500 127.5000 -48.0 + 49.7500 118.5000 -48.0 + 58.7500 100.5000 -48.0 + 59.5000 98.7500 -48.0 + 59.7500 94.5000 -48.0 + 61.7500 90.5000 -48.0 + 63.5000 89.7500 -48.0 + 63.7500 88.5000 -48.0 + 69.7500 81.5000 -48.0 + 72.5000 77.7500 -48.0 + 74.5000 77.7500 -48.0 + 76.5000 75.7500 -48.0 + 79.5000 70.7500 -48.0 + 101.2500 60.5000 -50.0 + 100.5000 61.2500 -50.0 + 94.5000 61.2500 -50.0 + 92.5000 62.2500 -50.0 + 89.5000 62.2500 -50.0 + 87.5000 63.2500 -50.0 + 85.5000 63.2500 -50.0 + 83.5000 64.2500 -50.0 + 81.5000 64.2500 -50.0 + 69.5000 70.2500 -50.0 + 63.5000 75.2500 -50.0 + 59.5000 78.2500 -50.0 + 55.2500 84.5000 -50.0 + 51.2500 92.5000 -50.0 + 49.5000 96.2500 -50.0 + 49.2500 99.5000 -50.0 + 46.2500 105.5000 -50.0 + 43.2500 120.5000 -50.0 + 41.2500 129.5000 -50.0 + 40.2500 132.5000 -50.0 + 39.5000 134.2500 -50.0 + 39.2500 137.5000 -50.0 + 38.2500 140.5000 -50.0 + 36.2500 149.5000 -50.0 + 35.2500 156.5000 -50.0 + 34.5000 158.2500 -50.0 + 34.2500 167.5000 -50.0 + 35.2500 169.5000 -50.0 + 35.2500 174.5000 -50.0 + 36.2500 176.5000 -50.0 + 36.2500 179.5000 -50.0 + 38.2500 183.5000 -50.0 + 38.5000 185.7500 -50.0 + 41.2500 192.5000 -50.0 + 46.2500 200.5000 -50.0 + 47.2500 202.5000 -50.0 + 59.2500 214.5000 -50.0 + 68.5000 219.7500 -50.0 + 75.5000 220.7500 -50.0 + 77.2500 221.5000 -50.0 + 84.5000 221.7500 -50.0 + 86.5000 222.7500 -50.0 + 88.5000 221.7500 -50.0 + 90.5000 221.7500 -50.0 + 92.2500 222.5000 -50.0 + 105.5000 222.7500 -50.0 + 110.5000 223.7500 -50.0 + 112.5000 222.7500 -50.0 + 125.5000 222.7500 -50.0 + 129.5000 220.7500 -50.0 + 131.7500 220.5000 -50.0 + 140.5000 216.7500 -50.0 + 144.5000 213.7500 -50.0 + 146.5000 212.7500 -50.0 + 157.7500 202.5000 -50.0 + 160.5000 198.7500 -50.0 + 163.7500 194.5000 -50.0 + 169.7500 182.5000 -50.0 + 170.7500 177.5000 -50.0 + 171.7500 175.5000 -50.0 + 172.7500 168.5000 -50.0 + 173.5000 166.7500 -50.0 + 173.7500 161.5000 -50.0 + 172.7500 159.5000 -50.0 + 172.7500 150.5000 -50.0 + 171.7500 148.5000 -50.0 + 171.7500 141.5000 -50.0 + 170.7500 139.5000 -50.0 + 170.7500 135.5000 -50.0 + 169.7500 133.5000 -50.0 + 169.7500 130.5000 -50 + 168.7500 128.5000 -50.0 + 168.7500 122.5000 -50.0 + 167.7500 120.5000 -50.0 + 167.7500 118.5000 -50.0 + 166.7500 116.5000 -50.0 + 166.7500 114.5000 -50.0 + 165.7500 112.5000 -50.0 + 165.7500 108.5000 -50.0 + 162.7500 102.5000 -50.0 + 162.7500 100.5000 -50.0 + 159.7500 94.5000 -50.0 + 159.5000 92.2500 -50.0 + 156.7500 85.5000 -50.0 + 152.7500 80.5000 -50.0 + 151.7500 78.5000 -50.0 + 145.5000 73.2500 -50.0 + 134.7500 66.5000 -50.0 + 132.5000 66.2500 -50.0 + 126.5000 63.2500 -50.0 + 121.5000 62.2500 -50.0 + 119.7500 61.5000 -50.0 + 114.5000 61.2500 -50.0 + 112.7500 60.5000 -50.0 + 112.7500 68.5000 -50.0 + 113.5000 67.7500 -50.0 + 114.2500 68.5000 -50.0 + 115.5000 67.7500 -50.0 + 117.5000 67.7500 -50.0 + 124.5000 68.7500 -50.0 + 129.5000 69.7500 -50.0 + 133.2500 72.5000 -50.0 + 135.5000 72.7500 -50.0 + 140.2500 78.5000 -50.0 + 141.5000 80.7500 -50.0 + 143.5000 81.7500 -50.0 + 149.2500 88.5000 -50.0 + 149.2500 90.5000 -50.0 + 152.2500 96.5000 -50.0 + 152.2500 100.5000 -50.0 + 153.2500 102.5000 -50.0 + 153.2500 104.5000 -50.0 + 156.2500 108.5000 -50.0 + 161.2500 118.5000 -50.0 + 161.2500 121.5000 -50.0 + 162.2500 123.5000 -50.0 + 162.2500 126.5000 -50.0 + 161.5000 128.2500 -50.0 + 161.2500 135.5000 -50.0 + 162.2500 137.5000 -50.0 + 162.2500 144.5000 -50.0 + 163.2500 146.5000 -50.0 + 163.2500 156.5000 -50.0 + 164.2500 158.5000 -50.0 + 164.2500 166.5000 -50.0 + 163.2500 173.5000 -50.0 + 162.2500 178.5000 -50.0 + 159.2500 184.5000 -50.0 + 144.5000 198.2500 -50.0 + 133.5000 207.2500 -50.0 + 124.5000 212.2500 -50.0 + 122.5000 212.2500 -50.0 + 118.5000 214.2500 -50.0 + 116.5000 214.2500 -50.0 + 114.5000 215.2500 -50.0 + 110.5000 215.2500 -50.0 + 108.7500 214.5000 -50.0 + 99.5000 214.2500 -50.0 + 95.7500 212.5000 -50.0 + 92.5000 212.2500 -50.0 + 90.5000 213.2500 -50.0 + 88.7500 212.5000 -50.0 + 84.5000 212.2500 -50.0 + 79.5000 211.2500 -50.0 + 71.5000 207.2500 -50.0 + 61.5000 197.2500 -50.0 + 56.7500 190.5000 -50.0 + 50.7500 185.5000 -50.0 + 50.7500 182.5000 -50.0 + 48.7500 178.5000 -50.0 + 48.7500 176.5000 -50.0 + 45.7500 170.5000 -50.0 + 45.7500 164.5000 -50.0 + 44.7500 162.5000 -50.0 + 45.5000 161.7500 -50.0 + 44.7500 160.5000 -50.0 + 44.7500 147.5000 -50.0 + 46.7500 141.5000 -50.0 + 47.5000 139.7500 -50.0 + 47.7500 127.5000 -50.0 + 46.7500 125.5000 -50.0 + 47.7500 124.5000 -50.0 + 49.7500 115.5000 -50.0 + 57.7500 99.5000 -50.0 + 58.5000 97.7500 -50.0 + 58.7500 93.5000 -50.0 + 60.7500 91.5000 -50.0 + 63.5000 87.7500 -50.0 + 63.7500 84.5000 -50.0 + 67.5000 81.7500 -50.0 + 69.5000 80.7500 -50.0 + 69.7500 79.5000 -50.0 + 71.5000 77.7500 -50.0 + 73.5000 76.7500 -50.0 + 79.5000 69.7500 -50.0 + 82.5000 69.7500 -50.0 + 84.5000 68.7500 -50.0 + 98.5000 68.7500 -50.0 + 100.2500 70.5000 -50.0 + 102.5000 70.7500 -50.0 + 102.7500 69.5000 -50.0 + 104.5000 68.7500 -50.0 + 106.5000 69.7500 -50.0 + 108.5000 68.7500 -50.0 + 39.7500 179.5000 -50.0 + 40.5000 178.7500 -50.0 + 41.2500 179.5000 -50.0 + 40.5000 180.2500 -50.0 + 100.2500 59.5000 -52.0 + 99.5000 60.2500 -52.0 + 94.5000 60.2500 -52.0 + 92.5000 61.2500 -52.0 + 90.5000 61.2500 -52.0 + 88.5000 62.2500 -52.0 + 86.5000 62.2500 -52.0 + 84.5000 63.2500 -52.0 + 82.2500 63.5000 -52.0 + 73.5000 67.2500 -52.0 + 65.5000 72.2500 -52.0 + 63.5000 73.2500 -52.0 + 58.5000 78.2500 -52.0 + 55.2500 82.5000 -52.0 + 52.2500 88.5000 -52.0 + 51.5000 90.2500 -52.0 + 48.2500 99.5000 -52.0 + 47.5000 101.2500 -52.0 + 45.2500 107.5000 -52.0 + 43.2500 116.5000 -52.0 + 41.2500 126.5000 -52.0 + 40.2500 128.5000 -52.0 + 39.2500 133.5000 -52.0 + 38.2500 136.5000 -52.0 + 36.2500 145.5000 -52.0 + 35.2500 150.5000 -52.0 + 34.5000 152.2500 -52.0 + 34.2500 156.5000 -52.0 + 33.5000 158.2500 -52.0 + 33.2500 169.5000 -52.0 + 34.2500 171.5000 -52.0 + 34.2500 175.5000 -52.0 + 35.2500 177.5000 -52.0 + 35.2500 180.5000 -52.0 + 37.2500 184.5000 -52.0 + 37.2500 186.5000 -52.0 + 41.2500 194.5000 -52.0 + 44.2500 199.5000 -52.0 + 45.2500 201.5000 -52.0 + 59.5000 215.7500 -52.0 + 68.2500 220.5000 -52.0 + 70.5000 220.7500 -52.0 + 72.2500 221.5000 -52.0 + 76.5000 221.7500 -52.0 + 78.2500 222.5000 -52.0 + 88.5000 222.7500 -52.0 + 90.2500 223.5000 -52.0 + 120.5000 223.7500 -52.0 + 122.5000 222.7500 -52.0 + 127.5000 222.7500 -52.0 + 133.7500 220.5000 -52.0 + 142.5000 216.7500 -52.0 + 147.5000 212.7500 -52.0 + 149.5000 211.7500 -52.0 + 160.5000 200.7500 -52.0 + 164.7500 194.5000 -52.0 + 170.7500 182.5000 -52.0 + 172.7500 173.5000 -52.0 + 173.5000 171.7500 -52.0 + 173.7500 153.5000 -52.0 + 172.7500 151.5000 -52.0 + 172.7500 144.5000 -52.0 + 171.7500 142.5000 -52.0 + 171.7500 137.5000 -52.0 + 170.7500 135.5000 -52.0 + 170.7500 132.5000 -52.0 + 169.7500 130.5000 -52.0 + 169.7500 126.5000 -52.0 + 168.7500 124.5000 -52.0 + 168.7500 120.5000 -52.0 + 167.7500 118.5000 -52.0 + 167.7500 116.5000 -52.0 + 166.7500 114.5000 -52.0 + 166.7500 112.5000 -52.0 + 165.7500 110.5000 -52.0 + 165.7500 108.5000 -52.0 + 164.7500 106.5000 -52.0 + 164.7500 104.5000 -52.0 + 161.7500 98.5000 -52.0 + 161.5000 96.2500 -52.0 + 158.5000 89.2500 -52.0 + 155.7500 82.5000 -52.0 + 150.5000 76.2500 -52.0 + 146.7500 73.5000 -52.0 + 140.5000 69.2500 -52.0 + 131.7500 64.5000 -52.0 + 125.5000 62.2500 -52.0 + 123.7500 61.5000 -52.0 + 115.5000 60.2500 -52.0 + 113.7500 59.5000 -52.0 + 108.5000 60.7500 -52.0 + 111.5000 60.7500 -52.0 + 113.2500 62.5000 -52.0 + 111.5000 64.2500 -52.0 + 108.5000 64.2500 -52.0 + 106.7500 62.5000 -52.0 + 119.7500 66.5000 -52.0 + 120.5000 65.7500 -52.0 + 123.5000 66.7500 -52.0 + 129.2500 69.5000 -52.0 + 131.5000 69.7500 -52.0 + 135.2500 72.5000 -52.0 + 137.5000 72.7500 -52.0 + 143.2500 78.5000 -52.0 + 143.2500 80.5000 -52.0 + 148.2500 85.5000 -52.0 + 148.2500 87.5000 -52.0 + 151.2500 91.5000 -52.0 + 151.2500 93.5000 -52.0 + 152.2500 95.5000 -52.0 + 152.2500 98.5000 -52.0 + 154.2500 102.5000 -52.0 + 154.2500 104.5000 -52.0 + 159.2500 110.5000 -52.0 + 159.2500 112.5000 -52.0 + 162.2500 118.5000 -52.0 + 162.2500 120.5000 -52.0 + 163.2500 123.5000 -52.0 + 162.2500 125.5000 -52.0 + 161.2500 132.5000 -52.0 + 162.2500 134.5000 -52.0 + 162.2500 138.5000 -52.0 + 163.2500 140.5000 -52.0 + 163.2500 142.5000 -52.0 + 164.2500 144.5000 -52.0 + 164.2500 147.5000 -52.0 + 165.2500 149.5000 -52.0 + 164.5000 150.2500 -52.0 + 164.2500 153.5000 -52.0 + 165.2500 155.5000 -52.0 + 165.2500 169.5000 -52.0 + 163.2500 178.5000 -52.0 + 159.2500 186.5000 -52.0 + 145.2500 199.5000 -52.0 + 138.5000 204.2500 -52.0 + 130.5000 210.2500 -52.0 + 124.5000 213.2500 -52.0 + 122.5000 213.2500 -52.0 + 118.5000 215.2500 -52.0 + 108.5000 215.2500 -52.0 + 101.5000 214.2500 -52.0 + 98.5000 215.2500 -52.0 + 96.7500 213.5000 -52.0 + 84.5000 213.2500 -52.0 + 79.5000 212.2500 -52.0 + 70.5000 208.2500 -52.0 + 65.7500 203.5000 -52.0 + 56.7500 193.5000 -52.0 + 55.7500 191.5000 -52.0 + 53.7500 190.5000 -52.0 + 52.7500 188.5000 -52.0 + 51.5000 188.2500 -52.0 + 48.7500 185.5000 -52.0 + 48.7500 182.5000 -52.0 + 47.7500 180.5000 -52.0 + 47.7500 178.5000 -52.0 + 45.7500 174.5000 -52.0 + 45.7500 172.5000 -52.0 + 43.7500 168.5000 -52.0 + 43.7500 155.5000 -52.0 + 42.7500 153.5000 -52.0 + 42.7500 148.5000 -52.0 + 44.7500 142.5000 -52.0 + 46.5000 138.7500 -52.0 + 46.7500 124.5000 -52.0 + 47.7500 119.5000 -52.0 + 49.7500 113.5000 -52.0 + 53.7500 104.5000 -52.0 + 56.5000 100.7500 -52.0 + 57.7500 94.5000 -52.0 + 58.7500 92.5000 -52.0 + 61.5000 88.7500 -52.0 + 61.7500 86.5000 -52.0 + 62.7500 83.5000 -52.0 + 67.7500 80.5000 -52.0 + 69.7500 76.5000 -52.0 + 71.5000 75.7500 -52.0 + 78.5000 69.7500 -52.0 + 80.5000 69.7500 -52.0 + 84.5000 67.7500 -52.0 + 89.5000 67.7500 -52.0 + 92.5000 68.7500 -52.0 + 94.5000 67.7500 -52.0 + 99.5000 67.7500 -52.0 + 100.2500 69.5000 -52.0 + 102.5000 69.7500 -52.0 + 104.5000 67.7500 -52.0 + 105.5000 68.7500 -52.0 + 109.5000 66.7500 -52.0 + 110.2500 67.5000 -52.0 + 116.5000 67.7500 -52.0 + 37.7500 179.5000 -52.0 + 38.5000 178.7500 -52.0 + 40.2500 179.5000 -52.0 + 39.5000 181.2500 -52.0 + 163.7500 187.5000 -52.0 + 164.5000 186.7500 -52.0 + 165.2500 187.5000 -52.0 + 164.5000 188.2500 -52.0 + 98.2500 58.5000 -54.0 + 97.5000 59.2500 -54.0 + 94.5000 59.2500 -54.0 + 92.5000 60.2500 -54.0 + 88.5000 60.2500 -54.0 + 84.5000 62.2500 -54.0 + 82.2500 62.5000 -54.0 + 69.5000 68.2500 -54.0 + 61.5000 74.2500 -54.0 + 59.5000 75.2500 -54.0 + 59.2500 76.5000 -54.0 + 56.2500 79.5000 -54.0 + 52.5000 86.2500 -54.0 + 50.2500 92.5000 -54.0 + 48.5000 96.2500 -54.0 + 48.2500 98.5000 -54.0 + 45.2500 104.5000 -54.0 + 44.2500 109.5000 -54.0 + 40.2500 127.5000 -54.0 + 39.2500 129.5000 -54.0 + 37.2500 138.5000 -54.0 + 36.2500 141.5000 -54.0 + 35.5000 143.2500 -54.0 + 35.2500 147.5000 -54.0 + 34.2500 150.5000 -54.0 + 33.5000 152.2500 -54.0 + 33.2500 156.5000 -54.0 + 32.5000 158.2500 -54.0 + 32.2500 170.5000 -54.0 + 33.2500 172.5000 -54.0 + 33.2500 175.5000 -54.0 + 34.2500 177.5000 -54.0 + 34.2500 179.5000 -54.0 + 37.5000 188.7500 -54.0 + 40.2500 195.5000 -54.0 + 46.2500 203.5000 -54.0 + 47.2500 205.5000 -54.0 + 49.5000 207.7500 -54.0 + 51.5000 208.7500 -54.0 + 52.5000 210.7500 -54.0 + 54.5000 211.7500 -54.0 + 59.5000 216.7500 -54.0 + 68.2500 221.5000 -54.0 + 76.5000 222.7500 -54.0 + 85.5000 223.7500 -54.0 + 92.5000 224.7500 -54.0 + 94.5000 223.7500 -54.0 + 98.5000 223.7500 -54.0 + 100.2500 224.5000 -54.0 + 114.5000 224.7500 -54.0 + 116.5000 223.7500 -54.0 + 125.5000 223.7500 -54.0 + 127.5000 222.7500 -54.0 + 129.5000 222.7500 -54.0 + 131.5000 221.7500 -54.0 + 133.7500 221.5000 -54.0 + 142.5000 217.7500 -54.0 + 147.5000 213.7500 -54.0 + 149.5000 212.7500 -54.0 + 157.5000 204.7500 -54.0 + 163.7500 197.5000 -54.0 + 170.5000 184.7500 -54.0 + 170.7500 182.5000 -54.0 + 172.7500 178.5000 -54.0 + 173.7500 173.5000 -54.0 + 174.5000 171.7500 -54.0 + 174.7500 156.5000 -54.0 + 173.7500 154.5000 -54.0 + 173.7500 147.5000 -54.0 + 172.7500 145.5000 -54.0 + 172.7500 140.5000 -54.0 + 171.7500 138.5000 -54.0 + 171.7500 134.5000 -54.0 + 170.7500 132.5000 -54.0 + 170.7500 129.5000 -54.0 + 169.7500 127.5000 -54.0 + 169.7500 123.5000 -54.0 + 168.7500 121.5000 -54.0 + 168.7500 118.5000 -54.0 + 167.7500 116.5000 -54.0 + 167.7500 113.5000 -54.0 + 165.7500 109.5000 -54.0 + 165.7500 107.5000 -54.0 + 164.7500 105.5000 -54.0 + 164.7500 103.5000 -54.0 + 161.7500 97.5000 -54.0 + 161.5000 95.2500 -54.0 + 157.5000 86.2500 -54.0 + 154.7500 79.5000 -54.0 + 151.7500 76.5000 -54.0 + 145.7500 71.5000 -54.0 + 140.5000 68.2500 -54.0 + 129.7500 62.5000 -54.0 + 127.5000 62.2500 -54.0 + 123.5000 60.2500 -54.0 + 116.5000 59.2500 -54.0 + 114.7500 58.5000 -54.0 + 106.7500 60.5000 -54.0 + 107.5000 59.7500 -54.0 + 111.5000 59.7500 -54.0 + 113.2500 60.5000 -54.0 + 114.2500 62.5000 -54.0 + 112.5000 63.2500 -54.0 + 110.5000 64.2500 -54.0 + 106.5000 64.2500 -54.0 + 105.7500 62.5000 -54.0 + 98.7500 61.5000 -54.0 + 99.5000 60.7500 -54.0 + 101.5000 60.7500 -54.0 + 103.2500 61.5000 -54.0 + 102.5000 63.2500 -54.0 + 99.5000 63.2500 -54.0 + 119.7500 65.5000 -54.0 + 120.5000 64.7500 -54.0 + 122.5000 64.7500 -54.0 + 125.5000 65.7500 -54.0 + 129.2500 68.5000 -54.0 + 134.2500 71.5000 -54.0 + 137.5000 71.7500 -54.0 + 141.2500 74.5000 -54.0 + 144.2500 78.5000 -54.0 + 144.2500 80.5000 -54.0 + 149.2500 85.5000 -54.0 + 149.2500 87.5000 -54.0 + 153.2500 95.5000 -54.0 + 153.2500 98.5000 -54.0 + 155.2500 103.5000 -54.0 + 160.2500 109.5000 -54.0 + 160.2500 111.5000 -54.0 + 163.2500 117.5000 -54.0 + 163.2500 123.5000 -54.0 + 162.5000 125.2500 -54.0 + 162.2500 135.5000 -54.0 + 163.2500 137.5000 -54.0 + 163.2500 139.5000 -54.0 + 164.2500 141.5000 -54.0 + 164.2500 143.5000 -54.0 + 165.2500 145.5000 -54.0 + 165.2500 156.5000 -54.0 + 166.2500 158.5000 -54.0 + 166.2500 171.5000 -54.0 + 165.2500 174.5000 -54.0 + 164.5000 176.2500 -54.0 + 164.2500 179.5000 -54.0 + 163.2500 182.5000 -54.0 + 159.2500 187.5000 -54.0 + 158.2500 189.5000 -54.0 + 148.5000 198.2500 -54.0 + 144.5000 201.2500 -54.0 + 130.5000 211.2500 -54.0 + 125.5000 214.2500 -54.0 + 122.5000 214.2500 -54.0 + 120.5000 215.2500 -54.0 + 118.5000 215.2500 -54.0 + 114.5000 217.2500 -54.0 + 111.5000 217.2500 -54.0 + 108.5000 216.2500 -54.0 + 106.7500 215.5000 -54.0 + 99.5000 215.2500 -54.0 + 97.7500 214.5000 -54.0 + 92.5000 214.2500 -54.0 + 90.5000 215.2500 -54.0 + 83.5000 214.2500 -54.0 + 74.5000 212.2500 -54.0 + 67.5000 206.2500 -54.0 + 65.5000 205.2500 -54.0 + 50.7500 189.5000 -54.0 + 49.7500 187.5000 -54.0 + 48.5000 187.2500 -54.0 + 47.7500 185.5000 -54.0 + 46.7500 183.5000 -54.0 + 46.7500 181.5000 -54.0 + 45.7500 179.5000 -54.0 + 45.7500 177.5000 -54.0 + 42.7500 171.5000 -54.0 + 42.7500 163.5000 -54.0 + 41.7500 161.5000 -54.0 + 41.7500 146.5000 -54.0 + 45.5000 138.7500 -54.0 + 45.7500 136.5000 -54.0 + 46.7500 131.5000 -54.0 + 45.7500 129.5000 -54.0 + 45.7500 123.5000 -54.0 + 46.7500 121.5000 -54.0 + 47.7500 116.5000 -54.0 + 49.5000 112.7500 -54.0 + 49.7500 110.5000 -54.0 + 52.7500 104.5000 -54.0 + 56.5000 97.7500 -54.0 + 56.7500 95.5000 -54.0 + 59.5000 89.7500 -54.0 + 59.7500 85.5000 -54.0 + 63.5000 81.7500 -54.0 + 65.5000 80.7500 -54.0 + 69.5000 75.7500 -54.0 + 73.5000 73.7500 -54.0 + 76.5000 70.7500 -54.0 + 83.5000 66.7500 -54.0 + 92.5000 66.7500 -54.0 + 94.5000 65.7500 -54.0 + 99.5000 66.7500 -54.0 + 101.5000 68.7500 -54.0 + 103.5000 67.7500 -54.0 + 105.5000 67.7500 -54.0 + 109.5000 65.7500 -54.0 + 110.2500 66.5000 -54.0 + 116.5000 66.7500 -54.0 + 37.7500 180.5000 -54.0 + 38.5000 179.7500 -54.0 + 39.2500 180.5000 -54.0 + 38.5000 181.2500 -54.0 + 97.2500 57.5000 -56.0 + 96.5000 58.2500 -56.0 + 92.5000 58.2500 -56.0 + 90.5000 59.2500 -56.0 + 88.5000 59.2500 -56.0 + 84.5000 61.2500 -56.0 + 82.5000 61.2500 -56.0 + 68.5000 68.2500 -56.0 + 66.2500 69.5000 -56.0 + 59.5000 74.2500 -56.0 + 56.2500 78.5000 -56.0 + 52.2500 86.5000 -56.0 + 49.5000 92.2500 -56.0 + 49.2500 94.5000 -56.0 + 45.2500 102.5000 -56.0 + 43.2500 112.5000 -56.0 + 42.2500 115.5000 -56.0 + 40.2500 124.5000 -56.0 + 39.2500 126.5000 -56.0 + 38.2500 133.5000 -56.0 + 36.2500 137.5000 -56.0 + 34.2500 147.5000 -56.0 + 33.2500 149.5000 -56.0 + 32.2500 158.5000 -56.0 + 31.5000 160.2500 -56.0 + 31.2500 171.5000 -56.0 + 32.2500 173.5000 -56.0 + 32.2500 175.5000 -56.0 + 33.2500 177.5000 -56.0 + 33.2500 179.5000 -56.0 + 36.5000 188.7500 -56.0 + 39.2500 195.5000 -56.0 + 45.2500 203.5000 -56.0 + 46.2500 205.5000 -56.0 + 59.2500 217.5000 -56.0 + 66.2500 221.5000 -56.0 + 72.5000 222.7500 -56.0 + 74.2500 223.5000 -56.0 + 82.5000 223.7500 -56.0 + 84.2500 224.5000 -56.0 + 101.5000 224.7500 -56.0 + 103.2500 225.5000 -56.0 + 111.5000 225.7500 -56.0 + 113.5000 224.7500 -56.0 + 122.5000 224.7500 -56.0 + 124.5000 223.7500 -56.0 + 128.5000 223.7500 -56.0 + 130.5000 222.7500 -56.0 + 132.7500 222.5000 -56.0 + 139.5000 219.7500 -56.0 + 147.5000 214.7500 -56.0 + 149.5000 213.7500 -56.0 + 158.5000 204.7500 -56.0 + 163.5000 198.7500 -56.0 + 166.7500 193.5000 -56.0 + 168.7500 189.5000 -56.0 + 170.5000 185.7500 -56.0 + 173.7500 176.5000 -56.0 + 174.5000 174.7500 -56.0 + 174.7500 152.5000 -56.0 + 173.7500 150.5000 -56.0 + 173.7500 144.5000 -56.0 + 172.7500 142.5000 -56.0 + 172.7500 138.5000 -56.0 + 171.7500 136.5000 -56.0 + 171.7500 132.5000 -56.0 + 170.7500 130.5000 -56.0 + 170.7500 127.5000 -56.0 + 169.7500 125.5000 -56.0 + 169.7500 122.5000 -56.0 + 168.7500 120.5000 -56.0 + 168.7500 117.5000 -56.0 + 167.7500 115.5000 -56.0 + 167.7500 112.5000 -56.0 + 165.7500 108.5000 -56.0 + 165.7500 106.5000 -56.0 + 164.7500 104.5000 -56.0 + 164.7500 102.5000 -56.0 + 160.7500 94.5000 -56.0 + 160.7500 92.5000 -56.0 + 154.7500 80.5000 -56.0 + 154.7500 78.5000 -56.0 + 148.7500 72.5000 -56.0 + 140.5000 67.2500 -56.0 + 124.5000 59.2500 -56.0 + 117.5000 58.2500 -56.0 + 115.7500 57.5000 -56.0 + 99.7500 59.5000 -56.0 + 101.5000 58.7500 -56.0 + 103.2500 59.5000 -56.0 + 104.2500 61.5000 -56.0 + 103.5000 63.2500 -56.0 + 97.5000 63.2500 -56.0 + 95.7500 61.5000 -56.0 + 97.5000 59.7500 -56.0 + 105.7500 59.5000 -56.0 + 106.5000 58.7500 -56.0 + 111.5000 58.7500 -56.0 + 113.2500 59.5000 -56.0 + 114.2500 61.5000 -56.0 + 111.5000 63.2500 -56.0 + 109.5000 63.2500 -56.0 + 107.5000 64.2500 -56.0 + 105.5000 63.2500 -56.0 + 104.7500 61.5000 -56.0 + 114.7500 60.5000 -56.0 + 115.5000 59.7500 -56.0 + 117.5000 59.7500 -56.0 + 119.2500 61.5000 -56.0 + 116.5000 63.2500 -56.0 + 115.7500 62.5000 -56.0 + 119.7500 64.5000 -56.0 + 120.5000 63.7500 -56.0 + 122.5000 63.7500 -56.0 + 127.5000 65.7500 -56.0 + 130.2500 68.5000 -56.0 + 135.2500 71.5000 -56.0 + 139.5000 71.7500 -56.0 + 144.2500 76.5000 -56.0 + 144.2500 78.5000 -56.0 + 146.5000 81.7500 -56.0 + 148.5000 82.7500 -56.0 + 150.2500 85.5000 -56.0 + 150.2500 89.5000 -56.0 + 153.2500 95.5000 -56.0 + 153.2500 97.5000 -56.0 + 155.2500 101.5000 -56.0 + 161.2500 109.5000 -56.0 + 161.2500 111.5000 -56.0 + 163.2500 115.5000 -56.0 + 163.2500 118.5000 -56.0 + 164.2500 120.5000 -56.0 + 162.5000 124.2500 -56.0 + 162.2500 133.5000 -56.0 + 163.2500 135.5000 -56.0 + 163.2500 139.5000 -56.0 + 165.2500 143.5000 -56.0 + 165.2500 147.5000 -56.0 + 166.2500 149.5000 -56.0 + 166.2500 159.5000 -56.0 + 167.2500 161.5000 -56.0 + 167.2500 169.5000 -56.0 + 166.5000 171.2500 -56.0 + 165.2500 179.5000 -56.0 + 163.5000 183.2500 -56.0 + 159.5000 189.2500 -56.0 + 146.2500 201.5000 -56.0 + 139.5000 206.2500 -56.0 + 137.2500 207.5000 -56.0 + 130.5000 212.2500 -56.0 + 124.5000 215.2500 -56.0 + 121.5000 215.2500 -56.0 + 119.5000 216.2500 -56.0 + 117.5000 216.2500 -56.0 + 113.5000 218.2500 -56.0 + 110.5000 218.2500 -56.0 + 107.5000 217.2500 -56.0 + 105.7500 216.5000 -56.0 + 100.5000 216.2500 -56.0 + 98.7500 215.5000 -56.0 + 92.5000 215.2500 -56.0 + 90.5000 216.2500 -56.0 + 88.5000 216.2500 -56.0 + 86.5000 215.2500 -56.0 + 77.5000 214.2500 -56.0 + 74.5000 213.2500 -56.0 + 70.5000 210.2500 -56.0 + 68.5000 209.2500 -56.0 + 45.7500 185.5000 -56.0 + 45.7500 182.5000 -56.0 + 43.7500 178.5000 -56.0 + 43.7500 176.5000 -56.0 + 40.7500 170.5000 -56.0 + 41.7500 168.5000 -56.0 + 40.7500 166.5000 -56.0 + 40.7500 147.5000 -56.0 + 41.7500 144.5000 -56.0 + 44.5000 138.7500 -56.0 + 44.7500 136.5000 -56.0 + 45.5000 134.7500 -56.0 + 45.7500 126.5000 -56.0 + 44.7500 124.5000 -56.0 + 45.7500 119.5000 -56.0 + 47.7500 115.5000 -56.0 + 48.7500 110.5000 -56.0 + 51.5000 104.7500 -56.0 + 55.5000 97.7500 -56.0 + 55.7500 95.5000 -56.0 + 57.5000 91.7500 -56.0 + 57.7500 88.5000 -56.0 + 58.7500 85.5000 -56.0 + 63.5000 80.7500 -56.0 + 65.5000 79.7500 -56.0 + 66.7500 77.5000 -56.0 + 67.7500 75.5000 -56.0 + 72.5000 73.7500 -56.0 + 72.7500 72.5000 -56.0 + 74.5000 71.7500 -56.0 + 80.5000 67.7500 -56.0 + 84.5000 65.7500 -56.0 + 87.5000 65.7500 -56.0 + 90.5000 64.7500 -56.0 + 99.5000 65.7500 -56.0 + 101.2500 66.5000 -56.0 + 106.5000 66.7500 -56.0 + 108.5000 65.7500 -56.0 + 115.5000 65.7500 -56.0 + 117.5000 64.7500 -56.0 + 69.7500 70.5000 -56.0 + 70.5000 69.7500 -56.0 + 71.2500 70.5000 -56.0 + 70.5000 71.2500 -56.0 + 104.2500 55.5000 -58.0 + 103.5000 56.2500 -58.0 + 96.5000 56.2500 -58.0 + 94.5000 57.2500 -58.0 + 90.5000 57.2500 -58.0 + 86.5000 59.2500 -58.0 + 84.5000 59.2500 -58.0 + 64.5000 69.2500 -58.0 + 58.2500 74.5000 -58.0 + 49.5000 91.2500 -58.0 + 49.2500 93.5000 -58.0 + 44.2500 103.5000 -58.0 + 43.2500 110.5000 -58.0 + 42.5000 112.2500 -58.0 + 41.2500 120.5000 -58.0 + 39.2500 124.5000 -58.0 + 38.2500 131.5000 -58.0 + 36.2500 135.5000 -58.0 + 34.2500 144.5000 -58.0 + 33.2500 146.5000 -58.0 + 32.2500 153.5000 -58.0 + 31.5000 155.2500 -58.0 + 31.2500 160.5000 -58.0 + 30.5000 162.2500 -58.0 + 30.2500 170.5000 -58.0 + 31.2500 172.5000 -58.0 + 31.2500 176.5000 -58.0 + 33.2500 180.5000 -58.0 + 33.2500 183.5000 -58.0 + 42.2500 201.5000 -58.0 + 47.2500 207.5000 -58.0 + 56.2500 215.5000 -58.0 + 60.5000 218.7500 -58.0 + 67.2500 222.5000 -58.0 + 69.5000 222.7500 -58.0 + 71.2500 223.5000 -58.0 + 78.5000 223.7500 -58.0 + 80.2500 224.5000 -58.0 + 85.5000 224.7500 -58.0 + 87.2500 225.5000 -58.0 + 93.5000 225.7500 -58.0 + 95.5000 224.7500 -58.0 + 97.2500 225.5000 -58.0 + 118.5000 225.7500 -58.0 + 120.5000 224.7500 -58.0 + 127.5000 224.7500 -58.0 + 129.5000 223.7500 -58.0 + 131.7500 223.5000 -58.0 + 144.5000 217.7500 -58.0 + 148.5000 214.7500 -58.0 + 150.5000 213.7500 -58.0 + 158.5000 205.7500 -58.0 + 163.5000 199.7500 -58.0 + 167.7500 192.5000 -58.0 + 172.7500 182.5000 -58.0 + 173.7500 177.5000 -58.0 + 174.5000 175.7500 -58.0 + 174.7500 170.5000 -58.0 + 175.5000 168.7500 -58.0 + 175.7500 159.5000 -58.0 + 174.7500 157.5000 -58.0 + 174.7500 149.5000 -58.0 + 173.7500 147.5000 -58.0 + 173.7500 140.5000 -58.0 + 172.7500 138.5000 -58.0 + 172.7500 136.5000 -58.0 + 171.7500 134.5000 -58.0 + 171.7500 130.5000 -58.0 + 170.7500 128.5000 -58.0 + 170.7500 126.5000 -58.0 + 169.7500 124.5000 -58.0 + 169.7500 121.5000 -58.0 + 168.7500 119.5000 -58.0 + 168.7500 116.5000 -58.0 + 167.7500 114.5000 -58.0 + 167.7500 112.5000 -58.0 + 166.7500 110.5000 -58.0 + 166.7500 108.5000 -58.0 + 164.7500 104.5000 -58.0 + 164.7500 102.5000 -58.0 + 162.7500 98.5000 -58.0 + 162.7500 96.5000 -58.0 + 158.7500 88.5000 -58.0 + 158.7500 86.5000 -58.0 + 155.7500 82.5000 -58.0 + 153.7500 76.5000 -58.0 + 148.7500 71.5000 -58.0 + 140.5000 66.2500 -58.0 + 131.5000 61.2500 -58.0 + 125.5000 58.2500 -58.0 + 120.5000 57.2500 -58.0 + 118.7500 56.5000 -58.0 + 111.5000 56.2500 -58.0 + 109.7500 55.5000 -58.0 + 99.7500 58.5000 -58.0 + 100.5000 57.7500 -58.0 + 102.5000 57.7500 -58.0 + 104.5000 58.7500 -58.0 + 106.5000 57.7500 -58.0 + 112.5000 57.7500 -58.0 + 121.5000 59.7500 -58.0 + 123.2500 61.5000 -58.0 + 121.5000 63.2500 -58.0 + 117.5000 63.2500 -58.0 + 113.5000 61.2500 -58.0 + 109.5000 63.2500 -58.0 + 107.5000 63.2500 -58.0 + 105.5000 62.2500 -58.0 + 103.5000 63.2500 -58.0 + 94.5000 63.2500 -58.0 + 90.7500 61.5000 -58.0 + 94.5000 58.7500 -58.0 + 118.7500 64.5000 -58.0 + 119.5000 63.7500 -58.0 + 123.5000 63.7500 -58.0 + 128.5000 65.7500 -58.0 + 132.5000 69.7500 -58.0 + 134.5000 70.7500 -58.0 + 136.2500 71.5000 -58.0 + 140.5000 71.7500 -58.0 + 142.2500 73.5000 -58.0 + 146.5000 80.7500 -58.0 + 148.5000 81.7500 -58.0 + 151.2500 86.5000 -58.0 + 151.2500 90.5000 -58.0 + 152.2500 92.5000 -58.0 + 154.5000 98.7500 -58.0 + 162.2500 108.5000 -58.0 + 162.2500 110.5000 -58.0 + 163.2500 112.5000 -58.0 + 163.2500 116.5000 -58.0 + 164.2500 118.5000 -58.0 + 163.2500 123.5000 -58.0 + 162.5000 125.2500 -58.0 + 163.2500 126.5000 -58.0 + 163.2500 137.5000 -58.0 + 165.2500 141.5000 -58.0 + 165.2500 143.5000 -58.0 + 166.2500 145.5000 -58.0 + 166.2500 150.5000 -58.0 + 167.2500 152.5000 -58.0 + 167.2500 172.5000 -58.0 + 166.5000 174.2500 -58.0 + 166.2500 179.5000 -58.0 + 164.5000 183.2500 -58.0 + 160.2500 189.5000 -58.0 + 159.2500 191.5000 -58.0 + 157.5000 192.2500 -58.0 + 151.5000 198.2500 -58.0 + 144.5000 204.2500 -58.0 + 140.5000 206.2500 -58.0 + 135.5000 210.2500 -58.0 + 123.5000 216.2500 -58.0 + 121.5000 216.2500 -58.0 + 119.5000 217.2500 -58.0 + 117.5000 217.2500 -58.0 + 115.5000 218.2500 -58.0 + 108.5000 218.2500 -58.0 + 106.7500 217.5000 -58.0 + 101.5000 217.2500 -58.0 + 95.5000 215.2500 -58.0 + 91.5000 217.2500 -58.0 + 87.5000 217.2500 -58.0 + 82.5000 216.2500 -58.0 + 80.7500 215.5000 -58.0 + 76.5000 215.2500 -58.0 + 70.5000 212.2500 -58.0 + 55.7500 198.5000 -58.0 + 54.7500 196.5000 -58.0 + 43.7500 184.5000 -58.0 + 43.7500 182.5000 -58.0 + 42.7500 180.5000 -58.0 + 42.7500 177.5000 -58.0 + 39.7500 171.5000 -58.0 + 39.7500 149.5000 -58.0 + 40.7500 142.5000 -58.0 + 43.7500 136.5000 -58.0 + 44.7500 131.5000 -58.0 + 45.5000 129.7500 -58.0 + 45.7500 125.5000 -58.0 + 44.7500 123.5000 -58.0 + 45.7500 116.5000 -58.0 + 46.7500 113.5000 -58.0 + 51.5000 102.7500 -58.0 + 55.5000 95.7500 -58.0 + 55.7500 93.5000 -58.0 + 56.7500 88.5000 -58.0 + 57.7500 85.5000 -58.0 + 62.5000 80.7500 -58.0 + 64.7500 79.5000 -58.0 + 66.7500 75.5000 -58.0 + 72.5000 71.7500 -58.0 + 86.5000 64.7500 -58.0 + 99.5000 64.7500 -58.0 + 105.5000 66.7500 -58.0 + 109.5000 64.7500 -58.0 + 68.5000 69.7500 -58.0 + 70.2500 70.5000 -58.0 + 68.5000 72.2500 -58.0 + 66.7500 71.5000 -58.0 + 34.7500 175.5000 -58.0 + 35.5000 174.7500 -58.0 + 36.2500 176.5000 -58.0 + 35.5000 178.2500 -58.0 + 34.7500 177.5000 -58.0 + 169.7500 177.5000 -58.0 + 170.5000 176.7500 -58.0 + 171.2500 177.5000 -58.0 + 170.5000 178.2500 -58.0 + 100.2500 54.5000 -60.0 + 99.5000 55.2500 -60.0 + 93.5000 55.2500 -60.0 + 91.5000 56.2500 -60.0 + 88.5000 56.2500 -60.0 + 62.5000 69.2500 -60.0 + 59.5000 72.2500 -60.0 + 56.2500 77.5000 -60.0 + 49.2500 91.5000 -60.0 + 46.2500 98.5000 -60.0 + 44.5000 102.2500 -60.0 + 41.2500 118.5000 -60.0 + 40.2500 120.5000 -60.0 + 39.2500 125.5000 -60.0 + 37.2500 131.5000 -60.0 + 36.5000 133.2500 -60.0 + 36.2500 136.5000 -60.0 + 34.2500 140.5000 -60.0 + 32.2500 150.5000 -60.0 + 31.5000 152.2500 -60.0 + 31.2500 156.5000 -60.0 + 30.5000 158.2500 -60.0 + 30.2500 174.5000 -60.0 + 31.2500 176.5000 -60.0 + 31.2500 179.5000 -60.0 + 33.2500 183.5000 -60.0 + 33.2500 185.5000 -60.0 + 41.2500 201.5000 -60.0 + 47.2500 208.5000 -60.0 + 54.5000 214.7500 -60.0 + 58.2500 217.5000 -60.0 + 62.5000 220.7500 -60.0 + 66.5000 222.7500 -60.0 + 71.5000 223.7500 -60.0 + 73.2500 224.5000 -60.0 + 82.5000 224.7500 -60.0 + 84.2500 225.5000 -60.0 + 101.5000 225.7500 -60.0 + 103.2500 226.5000 -60.0 + 109.5000 226.7500 -60.0 + 111.5000 225.7500 -60.0 + 123.5000 225.7500 -60.0 + 125.5000 224.7500 -60.0 + 130.5000 224.7500 -60.0 + 148.5000 215.7500 -60.0 + 156.5000 208.7500 -60.0 + 162.7500 201.5000 -60.0 + 167.7500 193.5000 -60.0 + 170.7500 187.5000 -60.0 + 171.5000 185.7500 -60.0 + 173.7500 179.5000 -60.0 + 174.5000 177.7500 -60.0 + 174.7500 173.5000 -60.0 + 175.5000 171.7500 -60.0 + 175.7500 154.5000 -60.0 + 174.7500 152.5000 -60.0 + 174.7500 145.5000 -60.0 + 173.7500 143.5000 -60.0 + 173.7500 139.5000 -60.0 + 172.7500 137.5000 -60.0 + 172.7500 134.5000 -60.0 + 171.7500 132.5000 -60.0 + 171.7500 129.5000 -60.0 + 170.7500 127.5000 -60.0 + 170.7500 125.5000 -60.0 + 169.7500 123.5000 -60.0 + 169.7500 120.5000 -60.0 + 168.7500 118.5000 -60.0 + 168.7500 116.5000 -60.0 + 167.7500 114.5000 -60.0 + 167.7500 112.5000 -60.0 + 160.7500 91.5000 -60.0 + 152.7500 74.5000 -60.0 + 148.7500 70.5000 -60.0 + 135.5000 62.2500 -60.0 + 124.5000 56.2500 -60.0 + 117.5000 55.2500 -60.0 + 115.7500 54.5000 -60.0 + 97.7500 57.5000 -60.0 + 98.5000 56.7500 -60.0 + 103.5000 56.7500 -60.0 + 105.2500 58.5000 -60.0 + 107.5000 56.7500 -60.0 + 115.5000 56.7500 -60.0 + 117.5000 57.7500 -60.0 + 122.5000 58.7500 -60.0 + 126.2500 61.5000 -60.0 + 124.5000 63.2500 -60.0 + 120.5000 63.2500 -60.0 + 117.5000 62.2500 -60.0 + 115.7500 61.5000 -60.0 + 112.5000 61.2500 -60.0 + 107.5000 63.2500 -60.0 + 105.5000 62.2500 -60.0 + 103.5000 63.2500 -60.0 + 99.5000 63.2500 -60.0 + 96.5000 62.2500 -60.0 + 94.5000 63.2500 -60.0 + 88.5000 63.2500 -60.0 + 84.5000 65.2500 -60.0 + 82.5000 65.2500 -60.0 + 81.7500 63.5000 -60.0 + 85.5000 60.7500 -60.0 + 87.5000 60.7500 -60.0 + 93.5000 57.7500 -60.0 + 96.7500 64.5000 -60.0 + 97.5000 63.7500 -60.0 + 99.2500 64.5000 -60.0 + 101.5000 64.7500 -60.0 + 103.2500 65.5000 -60.0 + 107.5000 65.7500 -60.0 + 111.5000 63.7500 -60.0 + 113.2500 64.5000 -60.0 + 121.5000 64.7500 -60.0 + 123.5000 63.7500 -60.0 + 126.5000 64.7500 -60.0 + 132.2500 67.5000 -60.0 + 133.2500 69.5000 -60.0 + 134.5000 69.7500 -60.0 + 136.2500 71.5000 -60.0 + 138.5000 71.7500 -60.0 + 142.2500 73.5000 -60.0 + 144.2500 77.5000 -60.0 + 148.2500 81.5000 -60.0 + 151.2500 85.5000 -60.0 + 151.2500 87.5000 -60.0 + 152.2500 89.5000 -60.0 + 152.2500 91.5000 -60.0 + 154.2500 97.5000 -60.0 + 158.2500 101.5000 -60.0 + 163.2500 109.5000 -60.0 + 163.2500 114.5000 -60.0 + 164.2500 116.5000 -60.0 + 164.2500 118.5000 -60.0 + 163.5000 120.2500 -60.0 + 163.2500 134.5000 -60.0 + 164.2500 136.5000 -60.0 + 164.2500 138.5000 -60.0 + 165.2500 140.5000 -60.0 + 165.2500 142.5000 -60.0 + 166.2500 144.5000 -60.0 + 166.2500 146.5000 -60.0 + 167.2500 148.5000 -60.0 + 167.2500 162.5000 -60.0 + 168.2500 164.5000 -60.0 + 167.5000 166.2500 -60.0 + 167.2500 173.5000 -60.0 + 166.2500 180.5000 -60.0 + 163.2500 186.5000 -60.0 + 152.5000 199.2500 -60.0 + 150.5000 200.2500 -60.0 + 148.2500 202.5000 -60.0 + 141.5000 207.2500 -60.0 + 133.5000 212.2500 -60.0 + 123.5000 217.2500 -60.0 + 120.5000 217.2500 -60.0 + 118.5000 218.2500 -60.0 + 114.5000 218.2500 -60.0 + 112.5000 219.2500 -60.0 + 103.5000 218.2500 -60.0 + 98.5000 217.2500 -60.0 + 96.7500 216.5000 -60.0 + 95.5000 217.2500 -60.0 + 79.5000 217.2500 -60.0 + 69.5000 212.2500 -60.0 + 55.7500 199.5000 -60.0 + 46.7500 189.5000 -60.0 + 44.7500 185.5000 -60.0 + 41.7500 182.5000 -60.0 + 41.7500 180.5000 -60.0 + 40.7500 178.5000 -60.0 + 40.7500 176.5000 -60.0 + 38.7500 172.5000 -60.0 + 38.7500 154.5000 -60.0 + 39.5000 152.7500 -60.0 + 38.7500 151.5000 -60.0 + 39.5000 149.7500 -60.0 + 39.7500 143.5000 -60.0 + 41.7500 139.5000 -60.0 + 42.7500 134.5000 -60.0 + 44.7500 130.5000 -60.0 + 45.7500 125.5000 -60.0 + 43.7500 121.5000 -60.0 + 44.7500 120.5000 -60.0 + 45.7500 113.5000 -60.0 + 48.7500 107.5000 -60.0 + 49.7500 102.5000 -60.0 + 50.5000 100.7500 -60.0 + 53.7500 96.5000 -60.0 + 54.7500 94.5000 -60.0 + 55.5000 92.7500 -60.0 + 55.7500 89.5000 -60.0 + 57.7500 84.5000 -60.0 + 61.5000 80.7500 -60.0 + 63.7500 79.5000 -60.0 + 64.7500 77.5000 -60.0 + 70.5000 71.7500 -60.0 + 78.5000 67.7500 -60.0 + 82.5000 67.7500 -60.0 + 88.5000 64.7500 -60.0 + 65.7500 71.5000 -60.0 + 66.5000 70.7500 -60.0 + 68.2500 71.5000 -60.0 + 67.5000 72.2500 -60.0 + 154.7500 95.5000 -60.0 + 155.5000 94.7500 -60.0 + 156.2500 95.5000 -60.0 + 155.5000 96.2500 -60.0 + 170.7500 173.5000 -60.0 + 171.5000 172.7500 -60.0 + 172.2500 173.5000 -60.0 + 171.5000 175.2500 -60.0 + 95.2500 53.5000 -62.0 + 94.5000 54.2500 -62.0 + 92.5000 54.2500 -62.0 + 90.5000 55.2500 -62.0 + 87.5000 55.2500 -62.0 + 65.5000 66.2500 -62.0 + 60.5000 70.2500 -62.0 + 55.2500 78.5000 -62.0 + 49.5000 89.2500 -62.0 + 49.2500 91.5000 -62.0 + 44.2500 101.5000 -62.0 + 43.2500 108.5000 -62.0 + 41.2500 117.5000 -62.0 + 40.2500 120.5000 -62.0 + 39.5000 122.2500 -62.0 + 39.2500 125.5000 -62.0 + 37.2500 129.5000 -62.0 + 36.2500 134.5000 -62.0 + 34.2500 138.5000 -62.0 + 32.2500 147.5000 -62.0 + 31.2500 152.5000 -62.0 + 30.5000 154.2500 -62.0 + 30.2500 158.5000 -62.0 + 29.5000 160.2500 -62.0 + 29.2500 172.5000 -62.0 + 30.2500 174.5000 -62.0 + 30.2500 177.5000 -62.0 + 33.2500 186.5000 -62.0 + 39.5000 199.7500 -62.0 + 44.2500 206.5000 -62.0 + 56.2500 217.5000 -62.0 + 62.2500 221.5000 -62.0 + 68.5000 223.7500 -62.0 + 70.2500 224.5000 -62.0 + 79.5000 224.7500 -62.0 + 81.2500 225.5000 -62.0 + 86.5000 225.7500 -62.0 + 88.2500 226.5000 -62.0 + 114.5000 226.7500 -62.0 + 116.5000 225.7500 -62.0 + 128.5000 225.7500 -62.0 + 130.5000 224.7500 -62.0 + 132.7500 224.5000 -62.0 + 143.5000 219.7500 -62.0 + 152.5000 212.7500 -62.0 + 154.5000 211.7500 -62.0 + 156.5000 208.7500 -62.0 + 158.5000 207.7500 -62.0 + 158.7500 206.5000 -62.0 + 163.5000 201.7500 -62.0 + 168.7500 192.5000 -62.0 + 173.7500 182.5000 -62.0 + 174.7500 175.5000 -62.0 + 175.5000 173.7500 -62.0 + 175.7500 151.5000 -62.0 + 174.7500 149.5000 -62.0 + 174.7500 142.5000 -62.0 + 173.7500 140.5000 -62.0 + 173.7500 137.5000 -62.0 + 172.7500 135.5000 -62.0 + 172.7500 132.5000 -62.0 + 171.7500 130.5000 -62.0 + 171.7500 128.5000 -62.0 + 170.7500 126.5000 -62.0 + 170.7500 124.5000 -62.0 + 169.7500 122.5000 -62.0 + 169.7500 120.5000 -62.0 + 168.7500 118.5000 -62.0 + 168.7500 116.5000 -62.0 + 167.7500 114.5000 -62.0 + 167.7500 112.5000 -62.0 + 166.7500 110.5000 -62.0 + 166.7500 108.5000 -62.0 + 164.7500 104.5000 -62.0 + 164.7500 102.5000 -62.0 + 162.7500 98.5000 -62.0 + 162.7500 95.5000 -62.0 + 152.7500 75.5000 -62.0 + 152.7500 73.5000 -62.0 + 148.7500 69.5000 -62.0 + 136.7500 61.5000 -62.0 + 129.7500 57.5000 -62.0 + 120.5000 54.2500 -62.0 + 118.7500 53.5000 -62.0 + 108.7500 55.5000 -62.0 + 110.5000 54.7500 -62.0 + 117.5000 55.7500 -62.0 + 121.2500 57.5000 -62.0 + 123.5000 57.7500 -62.0 + 127.2500 60.5000 -62.0 + 128.2500 62.5000 -62.0 + 125.5000 64.2500 -62.0 + 114.7500 60.5000 -62.0 + 112.5000 60.2500 -62.0 + 106.5000 63.2500 -62.0 + 104.5000 62.2500 -62.0 + 102.5000 63.2500 -62.0 + 95.5000 62.2500 -62.0 + 93.5000 63.2500 -62.0 + 91.5000 63.2500 -62.0 + 85.5000 66.2500 -62.0 + 81.5000 66.2500 -62.0 + 79.7500 65.5000 -62.0 + 78.7500 63.5000 -62.0 + 80.5000 61.7500 -62.0 + 84.5000 59.7500 -62.0 + 86.5000 59.7500 -62.0 + 92.5000 56.7500 -62.0 + 102.5000 55.7500 -62.0 + 104.5000 56.7500 -62.0 + 92.7500 64.5000 -62.0 + 93.5000 63.7500 -62.0 + 97.5000 63.7500 -62.0 + 102.5000 64.7500 -62.0 + 105.5000 65.7500 -62.0 + 107.5000 64.7500 -62.0 + 109.5000 64.7500 -62.0 + 111.5000 63.7500 -62.0 + 113.2500 64.5000 -62.0 + 116.5000 64.7500 -62.0 + 121.5000 65.7500 -62.0 + 123.5000 64.7500 -62.0 + 126.5000 64.7500 -62.0 + 131.5000 66.7500 -62.0 + 136.2500 71.5000 -62.0 + 142.5000 73.7500 -62.0 + 149.2500 81.5000 -62.0 + 153.2500 89.5000 -62.0 + 153.2500 91.5000 -62.0 + 154.2500 93.5000 -62.0 + 154.2500 95.5000 -62.0 + 158.2500 99.5000 -62.0 + 163.2500 108.5000 -62.0 + 163.2500 114.5000 -62.0 + 164.2500 116.5000 -62.0 + 163.5000 118.2500 -62.0 + 163.2500 132.5000 -62.0 + 164.2500 134.5000 -62.0 + 164.2500 138.5000 -62.0 + 166.2500 142.5000 -62.0 + 166.2500 146.5000 -62.0 + 167.2500 148.5000 -62.0 + 167.2500 151.5000 -62.0 + 168.2500 153.5000 -62.0 + 167.2500 162.5000 -62.0 + 168.2500 165.5000 -62.0 + 167.5000 167.2500 -62.0 + 167.2500 178.5000 -62.0 + 163.2500 186.5000 -62.0 + 156.2500 195.5000 -62.0 + 153.5000 199.2500 -62.0 + 151.5000 200.2500 -62.0 + 151.2500 201.5000 -62.0 + 148.5000 203.2500 -62.0 + 144.5000 206.2500 -62.0 + 136.5000 211.2500 -62.0 + 126.5000 217.2500 -62.0 + 123.5000 217.2500 -62.0 + 121.5000 218.2500 -62.0 + 118.5000 218.2500 -62.0 + 116.5000 219.2500 -62.0 + 113.5000 219.2500 -62.0 + 111.5000 220.2500 -62.0 + 109.7500 219.5000 -62.0 + 98.5000 218.2500 -62.0 + 96.5000 217.2500 -62.0 + 93.5000 218.2500 -62.0 + 91.7500 217.5000 -62.0 + 90.5000 218.2500 -62.0 + 86.5000 218.2500 -62.0 + 77.5000 217.2500 -62.0 + 72.5000 215.2500 -62.0 + 66.7500 210.5000 -62.0 + 62.5000 207.2500 -62.0 + 60.5000 206.2500 -62.0 + 54.5000 200.2500 -62.0 + 46.7500 190.5000 -62.0 + 43.7500 186.5000 -62.0 + 40.7500 181.5000 -62.0 + 38.7500 177.5000 -62.0 + 38.7500 175.5000 -62.0 + 37.7500 173.5000 -62.0 + 37.7500 166.5000 -62.0 + 36.7500 164.5000 -62.0 + 37.5000 163.7500 -62.0 + 37.7500 155.5000 -62.0 + 38.5000 153.7500 -62.0 + 38.7500 147.5000 -62.0 + 39.5000 145.7500 -62.0 + 39.7500 140.5000 -62.0 + 41.7500 134.5000 -62.0 + 44.5000 128.7500 -62.0 + 44.7500 126.5000 -62.0 + 45.7500 124.5000 -62.0 + 43.7500 120.5000 -62.0 + 44.5000 118.7500 -62.0 + 44.7500 114.5000 -62.0 + 47.5000 108.7500 -62.0 + 47.7500 104.5000 -62.0 + 49.7500 98.5000 -62.0 + 55.5000 91.7500 -62.0 + 55.7500 89.5000 -62.0 + 57.7500 83.5000 -62.0 + 62.5000 78.7500 -62.0 + 64.5000 77.7500 -62.0 + 64.7500 76.5000 -62.0 + 74.5000 67.7500 -62.0 + 81.5000 67.7500 -62.0 + 84.5000 68.7500 -62.0 + 87.7500 66.5000 -62.0 + 133.7500 65.5000 -62.0 + 135.5000 64.7500 -62.0 + 137.2500 66.5000 -62.0 + 135.5000 67.2500 -62.0 + 155.7500 95.5000 -62.0 + 156.5000 94.7500 -62.0 + 157.2500 95.5000 -62.0 + 156.5000 96.2500 -62.0 + 35.7500 185.5000 -62.0 + 36.5000 184.7500 -62.0 + 37.2500 185.5000 -62.0 + 36.5000 186.2500 -62.0 + 110.2500 51.5000 -64.0 + 109.5000 52.2500 -64.0 + 96.5000 52.2500 -64.0 + 94.5000 53.2500 -64.0 + 91.5000 53.2500 -64.0 + 87.5000 55.2500 -64.0 + 85.5000 55.2500 -64.0 + 65.5000 65.2500 -64.0 + 61.5000 68.2500 -64.0 + 57.2500 75.5000 -64.0 + 50.5000 86.2500 -64.0 + 50.2500 88.5000 -64.0 + 45.2500 98.5000 -64.0 + 41.2500 116.5000 -64.0 + 40.2500 118.5000 -64.0 + 39.2500 123.5000 -64.0 + 33.2500 141.5000 -64.0 + 31.2500 150.5000 -64.0 + 30.5000 152.2500 -64.0 + 30.2500 156.5000 -64.0 + 29.5000 158.2500 -64.0 + 29.2500 174.5000 -64.0 + 30.2500 176.5000 -64.0 + 30.2500 179.5000 -64.0 + 33.5000 188.7500 -64.0 + 37.2500 197.5000 -64.0 + 43.2500 205.5000 -64.0 + 44.2500 207.5000 -64.0 + 54.2500 216.5000 -64.0 + 58.5000 219.7500 -64.0 + 66.5000 223.7500 -64.0 + 68.2500 224.5000 -64.0 + 72.5000 224.7500 -64.0 + 74.2500 225.5000 -64.0 + 84.5000 225.7500 -64.0 + 86.2500 226.5000 -64.0 + 126.5000 226.7500 -64.0 + 128.5000 225.7500 -64.0 + 130.5000 225.7500 -64.0 + 132.5000 224.7500 -64.0 + 134.7500 224.5000 -64.0 + 141.5000 221.7500 -64.0 + 149.5000 215.7500 -64.0 + 151.5000 214.7500 -64.0 + 161.5000 204.7500 -64.0 + 165.7500 198.5000 -64.0 + 170.7500 189.5000 -64.0 + 171.7500 187.5000 -64.0 + 173.7500 182.5000 -64.0 + 174.5000 180.7500 -64.0 + 174.7500 177.5000 -64.0 + 175.5000 175.7500 -64.0 + 175.7500 166.5000 -64.0 + 176.5000 164.7500 -64.0 + 176.7500 158.5000 -64.0 + 175.7500 156.5000 -64.0 + 175.7500 147.5000 -64.0 + 174.7500 145.5000 -64.0 + 174.7500 140.5000 -64.0 + 173.7500 138.5000 -64.0 + 173.7500 135.5000 -64.0 + 172.7500 133.5000 -64.0 + 172.7500 130.5000 -64.0 + 171.7500 128.5000 -64.0 + 171.7500 125.5000 -64.0 + 169.7500 121.5000 -64.0 + 169.7500 118.5000 -64.0 + 167.7500 114.5000 -64.0 + 167.7500 112.5000 -64.0 + 160.5000 91.2500 -64.0 + 157.7500 84.5000 -64.0 + 152.7500 76.5000 -64.0 + 152.7500 74.5000 -64.0 + 151.7500 71.5000 -64.0 + 144.5000 65.2500 -64.0 + 136.5000 60.2500 -64.0 + 128.5000 56.2500 -64.0 + 126.7500 55.5000 -64.0 + 120.5000 53.2500 -64.0 + 118.7500 52.5000 -64.0 + 113.5000 52.2500 -64.0 +} -64.0 +{ -64.0 + 106.7500 54.5000 -64.0 + 107.5000 53.7500 -64.0 + 114.5000 53.7500 -64.0 + 118.2500 55.5000 -64.0 + 120.5000 55.7500 -64.0 + 128.5000 59.7500 -64.0 + 131.2500 63.5000 -64.0 + 133.5000 63.7500 -64.0 + 136.2500 66.5000 -64.0 + 137.5000 65.7500 -64.0 + 139.5000 66.7500 -64.0 + 142.2500 69.5000 -64.0 + 141.5000 70.2500 -64.0 + 138.5000 70.2500 -64.0 + 136.7500 69.5000 -64.0 + 135.7500 67.5000 -64.0 + 134.5000 68.2500 -64.0 + 132.5000 68.2500 -64.0 + 128.7500 65.5000 -64.0 + 125.5000 65.2500 -64.0 + 120.5000 64.2500 -64.0 + 116.7500 62.5000 -64.0 + 103.5000 62.2500 -64.0 + 100.5000 63.2500 -64.0 + 98.7500 62.5000 -64.0 + 94.5000 62.2500 -64.0 + 91.5000 63.2500 -64.0 + 87.5000 66.2500 -64.0 + 79.5000 66.2500 -64.0 + 77.7500 65.5000 -64.0 + 76.7500 63.5000 -64.0 + 78.5000 61.7500 -64.0 + 86.5000 57.7500 -64.0 + 89.5000 57.7500 -64.0 + 93.5000 55.7500 -64.0 + 96.5000 55.7500 -64.0 + 98.5000 54.7500 -64.0 + 101.5000 54.7500 -64.0 + 103.5000 55.7500 -64.0 +} -64.0 +{ -64.0 + 92.7500 64.5000 -64.0 + 93.5000 63.7500 -64.0 + 97.5000 63.7500 -64.0 + 102.5000 64.7500 -64.0 + 104.5000 65.7500 -64.0 + 106.5000 64.7500 -64.0 + 115.5000 64.7500 -64.0 + 122.5000 67.7500 -64.0 + 124.5000 66.7500 -64.0 + 126.5000 66.7500 -64.0 + 129.5000 67.7500 -64.0 + 136.2500 73.5000 -64.0 + 141.5000 73.7500 -64.0 + 144.5000 74.7500 -64.0 + 149.2500 81.5000 -64.0 + 150.2500 83.5000 -64.0 + 155.2500 91.5000 -64.0 + 155.2500 95.5000 -64.0 + 158.2500 98.5000 -64.0 + 161.2500 103.5000 -64.0 + 163.2500 107.5000 -64.0 + 163.2500 112.5000 -64.0 + 164.2500 115.5000 -64.0 + 163.5000 117.2500 -64.0 + 163.2500 130.5000 -64.0 + 164.2500 132.5000 -64.0 + 164.2500 135.5000 -64.0 + 165.2500 137.5000 -64.0 + 165.2500 139.5000 -64.0 + 166.2500 141.5000 -64.0 + 166.2500 144.5000 -64.0 + 167.2500 146.5000 -64.0 + 167.2500 150.5000 -64.0 + 168.2500 152.5000 -64.0 + 168.2500 156.5000 -64.0 + 167.2500 161.5000 -64.0 + 168.2500 163.5000 -64.0 + 168.2500 176.5000 -64.0 + 162.2500 188.5000 -64.0 + 159.2500 192.5000 -64.0 + 158.2500 194.5000 -64.0 + 148.5000 204.2500 -64.0 + 146.2500 205.5000 -64.0 + 139.5000 210.2500 -64.0 + 129.5000 216.2500 -64.0 + 125.5000 218.2500 -64.0 + 121.5000 218.2500 -64.0 + 119.5000 219.2500 -64.0 + 117.5000 219.2500 -64.0 + 115.5000 220.2500 -64.0 + 109.5000 220.2500 -64.0 + 107.7500 219.5000 -64.0 + 97.5000 219.2500 -64.0 + 95.7500 218.5000 -64.0 + 79.5000 218.2500 -64.0 + 74.5000 217.2500 -64.0 + 67.7500 212.5000 -64.0 + 58.5000 205.2500 -64.0 + 56.5000 204.2500 -64.0 + 46.7500 192.5000 -64.0 + 43.7500 188.5000 -64.0 + 36.7500 174.5000 -64.0 + 36.7500 158.5000 -64.0 + 37.7500 153.5000 -64.0 + 38.7500 144.5000 -64.0 + 39.7500 137.5000 -64.0 + 40.7500 134.5000 -64.0 + 41.5000 132.7500 -64.0 + 44.7500 127.5000 -64.0 + 45.7500 122.5000 -64.0 + 44.7500 120.5000 -64.0 + 44.7500 113.5000 -64.0 + 46.7500 107.5000 -64.0 + 47.5000 105.7500 -64.0 + 47.7500 101.5000 -64.0 + 48.7500 98.5000 -64.0 + 55.5000 90.7500 -64.0 + 55.7500 87.5000 -64.0 + 57.7500 82.5000 -64.0 + 64.5000 75.7500 -64.0 + 66.5000 74.7500 -64.0 + 74.5000 67.7500 -64.0 + 77.5000 67.7500 -64.0 + 86.5000 68.7500 -64.0 + 90.5000 65.7500 -64.0 + 68.7500 68.5000 -64.0 + 69.5000 67.7500 -64.0 + 70.2500 68.5000 -64.0 + 69.5000 69.2500 -64.0 + 108.2500 50.5000 -66.0 + 107.5000 51.2500 -66.0 + 98.5000 51.2500 -66.0 + 96.5000 52.2500 -66.0 + 94.5000 52.2500 -66.0 + 92.5000 53.2500 -66.0 + 89.5000 53.2500 -66.0 + 85.5000 55.2500 -66.0 + 83.5000 55.2500 -66.0 + 63.5000 65.2500 -66.0 + 60.5000 68.2500 -66.0 + 58.2500 74.5000 -66.0 + 54.2500 79.5000 -66.0 + 50.5000 86.2500 -66.0 + 50.2500 88.5000 -66.0 + 45.2500 98.5000 -66.0 + 44.2500 103.5000 -66.0 + 42.2500 112.5000 -66.0 + 41.2500 114.5000 -66.0 + 40.2500 119.5000 -66.0 + 38.2500 125.5000 -66.0 + 36.5000 129.2500 -66.0 + 35.2500 135.5000 -66.0 + 33.2500 139.5000 -66.0 + 31.2500 148.5000 -66.0 + 30.2500 151.5000 -66.0 + 29.2500 160.5000 -66.0 + 28.2500 167.5000 -66.0 + 29.2500 169.5000 -66.0 + 29.2500 176.5000 -66.0 + 30.2500 178.5000 -66.0 + 30.2500 181.5000 -66.0 + 32.2500 185.5000 -66.0 + 32.2500 187.5000 -66.0 + 39.2500 201.5000 -66.0 + 44.2500 207.5000 -66.0 + 45.2500 209.5000 -66.0 + 50.2500 213.5000 -66.0 + 57.5000 219.7500 -66.0 + 66.2500 224.5000 -66.0 + 68.5000 224.7500 -66.0 + 70.2500 225.5000 -66.0 + 79.5000 225.7500 -66.0 + 88.5000 226.7500 -66.0 + 90.2500 227.5000 -66.0 + 110.5000 227.7500 -66.0 + 112.5000 226.7500 -66.0 + 128.5000 226.7500 -66.0 + 130.5000 225.7500 -66.0 + 132.5000 225.7500 -66.0 + 138.5000 223.7500 -66.0 + 146.5000 218.7500 -66.0 + 148.5000 217.7500 -66.0 + 157.5000 209.7500 -66.0 + 162.5000 203.7500 -66.0 + 166.7500 197.5000 -66.0 + 173.7500 183.5000 -66.0 + 174.5000 181.7500 -66.0 + 174.7500 178.5000 -66.0 + 175.5000 176.7500 -66.0 + 175.7500 171.5000 -66.0 + 176.5000 169.7500 -66.0 + 176.7500 153.5000 -66.0 + 175.7500 151.5000 -66.0 + 175.7500 143.5000 -66.0 + 174.7500 141.5000 -66.0 + 174.7500 136.5000 -66.0 + 173.7500 134.5000 -66.0 + 173.7500 131.5000 -66.0 + 172.7500 129.5000 -66.0 + 172.7500 126.5000 -66.0 + 170.7500 122.5000 -66.0 + 170.7500 120.5000 -66.0 + 168.7500 116.5000 -66.0 + 168.7500 113.5000 -66.0 + 166.7500 109.5000 -66.0 + 166.7500 107.5000 -66.0 + 162.7500 99.5000 -66.0 + 162.7500 97.5000 -66.0 + 161.7500 95.5000 -66.0 + 161.7500 93.5000 -66.0 + 155.7500 81.5000 -66.0 + 152.7500 76.5000 -66.0 + 152.7500 73.5000 -66.0 + 151.7500 71.5000 -66.0 + 151.7500 69.5000 -66.0 + 147.7500 66.5000 -66.0 + 141.5000 62.2500 -66.0 + 127.5000 55.2500 -66.0 + 125.7500 54.5000 -66.0 + 119.5000 52.2500 -66.0 + 117.7500 51.5000 -66.0 + 113.5000 51.2500 -66.0 + 111.7500 50.5000 -66.0 +} -66.0 +{ -66.0 + 105.7500 53.5000 -66.0 + 106.5000 52.7500 -66.0 + 113.5000 52.7500 -66.0 + 116.5000 53.7500 -66.0 + 126.5000 57.7500 -66.0 + 130.2500 59.5000 -66.0 + 131.2500 61.5000 -66.0 + 136.5000 65.7500 -66.0 + 138.5000 66.7500 -66.0 + 144.2500 69.5000 -66.0 + 143.5000 71.2500 -66.0 + 141.5000 71.2500 -66.0 + 139.7500 70.5000 -66.0 + 138.5000 71.2500 -66.0 + 136.7500 69.5000 -66.0 + 135.5000 70.2500 -66.0 + 133.5000 70.2500 -66.0 + 129.5000 68.2500 -66.0 + 127.7500 67.5000 -66.0 + 121.5000 67.2500 -66.0 + 117.7500 63.5000 -66.0 + 111.5000 63.2500 -66.0 + 109.7500 62.5000 -66.0 + 103.5000 62.2500 -66.0 + 101.5000 63.2500 -66.0 + 98.5000 63.2500 -66.0 + 96.5000 62.2500 -66.0 + 94.5000 63.2500 -66.0 + 92.5000 63.2500 -66.0 + 86.5000 67.2500 -66.0 + 84.7500 66.5000 -66.0 + 79.5000 66.2500 -66.0 + 76.5000 65.2500 -66.0 + 75.7500 63.5000 -66.0 + 77.5000 61.7500 -66.0 + 87.5000 56.7500 -66.0 + 89.5000 56.7500 -66.0 + 91.5000 55.7500 -66.0 + 93.5000 55.7500 -66.0 + 95.5000 54.7500 -66.0 + 98.5000 54.7500 -66.0 + 100.5000 53.7500 -66.0 + 103.2500 55.5000 -66.0 +} -66.0 +{ -66.0 + 93.7500 64.5000 -66.0 + 94.5000 63.7500 -66.0 + 97.5000 63.7500 -66.0 + 99.2500 64.5000 -66.0 + 111.5000 64.7500 -66.0 + 118.5000 65.7500 -66.0 + 120.5000 68.7500 -66.0 + 122.5000 69.7500 -66.0 + 125.5000 68.7500 -66.0 + 132.5000 71.7500 -66.0 + 136.2500 74.5000 -66.0 + 138.5000 74.7500 -66.0 + 140.5000 73.7500 -66.0 + 143.5000 73.7500 -66.0 + 150.2500 81.5000 -66.0 + 152.2500 85.5000 -66.0 + 156.2500 90.5000 -66.0 + 156.2500 94.5000 -66.0 + 157.2500 96.5000 -66.0 + 162.2500 104.5000 -66.0 + 162.2500 106.5000 -66.0 + 164.2500 110.5000 -66.0 + 163.5000 111.2500 -66.0 + 164.2500 112.5000 -66.0 + 162.2500 121.5000 -66.0 + 163.2500 123.5000 -66.0 + 163.2500 130.5000 -66.0 + 164.2500 132.5000 -66.0 + 164.2500 135.5000 -66.0 + 165.2500 137.5000 -66.0 + 165.2500 139.5000 -66.0 + 166.2500 141.5000 -66.0 + 166.2500 144.5000 -66.0 + 167.2500 146.5000 -66.0 + 167.2500 152.5000 -66.0 + 168.2500 154.5000 -66.0 + 168.2500 158.5000 -66.0 + 167.2500 161.5000 -66.0 + 168.2500 163.5000 -66.0 + 168.2500 165.5000 -66.0 + 169.2500 167.5000 -66.0 + 168.5000 168.2500 -66.0 + 168.2500 171.5000 -66.0 + 169.2500 174.5000 -66.0 + 160.2500 192.5000 -66.0 + 148.5000 205.2500 -66.0 + 143.5000 208.2500 -66.0 + 141.2500 209.5000 -66.0 + 134.5000 214.2500 -66.0 + 127.5000 218.2500 -66.0 + 124.5000 218.2500 -66.0 + 122.5000 219.2500 -66.0 + 119.5000 219.2500 -66.0 + 117.5000 220.2500 -66.0 + 115.5000 220.2500 -66.0 + 113.5000 221.2500 -66.0 + 111.5000 221.2500 -66.0 + 109.7500 220.5000 -66.0 + 104.5000 220.2500 -66.0 + 102.7500 219.5000 -66.0 + 101.5000 220.2500 -66.0 + 99.5000 220.2500 -66.0 + 97.7500 219.5000 -66.0 + 83.5000 219.2500 -66.0 + 76.5000 218.2500 -66.0 + 70.5000 215.2500 -66.0 + 64.7500 210.5000 -66.0 + 57.7500 206.5000 -66.0 + 56.7500 204.5000 -66.0 + 55.5000 204.2500 -66.0 + 49.7500 197.5000 -66.0 + 43.7500 189.5000 -66.0 + 39.7500 182.5000 -66.0 + 39.7500 180.5000 -66.0 + 35.7500 172.5000 -66.0 + 35.7500 162.5000 -66.0 + 36.5000 160.7500 -66.0 + 36.7500 153.5000 -66.0 + 37.7500 151.5000 -66.0 + 38.7500 142.5000 -66.0 + 39.7500 135.5000 -66.0 + 44.7500 127.5000 -66.0 + 45.7500 122.5000 -66.0 + 44.7500 119.5000 -66.0 + 45.5000 117.7500 -66.0 + 45.7500 113.5000 -66.0 + 44.7500 111.5000 -66.0 + 46.7500 107.5000 -66.0 + 47.5000 105.7500 -66.0 + 47.7500 101.5000 -66.0 + 49.7500 95.5000 -66.0 + 55.5000 89.7500 -66.0 + 55.7500 86.5000 -66.0 + 58.7500 79.5000 -66.0 + 64.5000 75.7500 -66.0 + 66.5000 74.7500 -66.0 + 72.5000 69.7500 -66.0 + 76.5000 66.7500 -66.0 + 78.2500 67.5000 -66.0 + 80.5000 67.7500 -66.0 + 82.2500 68.5000 -66.0 + 87.5000 68.7500 -66.0 + 89.5000 66.7500 -66.0 +} -66.0 +{ -66.0 + 64.7500 70.5000 -66.0 + 65.5000 69.7500 -66.0 + 67.2500 70.5000 -66.0 + 66.5000 71.2500 -66.0 +} -66.0 +v 253 z -68.000000 -64.0 +{ -68.0 + 99.2500 50.5000 -68.0 + 98.5000 51.2500 -68.0 + 95.5000 51.2500 -68.0 + 91.5000 53.2500 -68.0 + 88.5000 53.2500 -68.0 + 82.5000 56.2500 -68.0 + 79.2500 56.5000 -68.0 + 68.5000 61.2500 -68.0 + 60.5000 67.2500 -68.0 + 58.2500 74.5000 -68.0 + 54.2500 79.5000 -68.0 + 46.5000 95.2500 -68.0 + 46.2500 97.5000 -68.0 + 45.2500 99.5000 -68.0 + 44.2500 104.5000 -68.0 + 43.2500 107.5000 -68.0 + 42.5000 109.2500 -68.0 + 42.2500 112.5000 -68.0 + 40.2500 116.5000 -68.0 + 39.2500 121.5000 -68.0 + 37.5000 125.2500 -68.0 + 37.2500 127.5000 -68.0 + 35.2500 131.5000 -68.0 + 34.2500 136.5000 -68.0 + 33.2500 138.5000 -68.0 + 32.2500 143.5000 -68.0 + 31.2500 145.5000 -68.0 + 30.2500 152.5000 -68.0 + 29.5000 154.2500 -68.0 + 29.2500 159.5000 -68.0 + 28.5000 161.2500 -68.0 + 28.2500 170.5000 -68.0 + 29.2500 172.5000 -68.0 + 29.2500 177.5000 -68.0 + 30.2500 179.5000 -68.0 + 30.2500 182.5000 -68.0 + 32.2500 186.5000 -68.0 + 32.2500 188.5000 -68.0 + 38.2500 200.5000 -68.0 + 41.2500 204.5000 -68.0 + 42.2500 206.5000 -68.0 + 49.2500 213.5000 -68.0 + 56.5000 219.7500 -68.0 + 64.5000 223.7500 -68.0 + 68.2500 225.5000 -68.0 + 78.5000 225.7500 -68.0 + 85.5000 226.7500 -68.0 + 87.2500 227.5000 -68.0 + 117.5000 227.7500 -68.0 + 120.5000 226.7500 -68.0 + 122.5000 227.7500 -68.0 + 124.5000 226.7500 -68.0 + 130.5000 226.7500 -68.0 + 132.5000 225.7500 -68.0 + 134.5000 225.7500 -68.0 + 144.5000 220.7500 -68.0 + 148.5000 217.7500 -68.0 + 150.5000 216.7500 -68.0 + 160.7500 206.5000 -68.0 + 163.5000 202.7500 -68.0 + 167.7500 196.5000 -68.0 + 171.5000 189.7500 -68.0 + 173.7500 183.5000 -68.0 + 174.5000 181.7500 -68.0 + 175.7500 173.5000 -68.0 + 176.5000 171.7500 -68.0 + 176.7500 149.5000 -68.0 + 175.7500 147.5000 -68.0 + 175.7500 138.5000 -68.0 + 174.7500 136.5000 -68.0 + 174.7500 132.5000 -68.0 + 173.7500 130.5000 -68.0 + 173.7500 128.5000 -68.0 + 171.7500 124.5000 -68.0 + 171.7500 122.5000 -68.0 + 169.7500 118.5000 -68.0 + 169.7500 116.5000 -68.0 + 167.7500 112.5000 -68.0 + 167.7500 110.5000 -68.0 + 166.7500 108.5000 -68.0 + 166.7500 106.5000 -68.0 + 161.7500 96.5000 -68.0 + 161.7500 94.5000 -68.0 + 151.7500 74.5000 -68.0 + 152.5000 73.7500 -68.0 + 152.7500 70.5000 -68.0 + 151.7500 68.5000 -68.0 + 147.5000 65.2500 -68.0 + 143.7500 62.5000 -68.0 + 137.5000 58.2500 -68.0 + 132.5000 57.2500 -68.0 + 126.7500 54.5000 -68.0 + 117.5000 51.2500 -68.0 + 115.7500 50.5000 -68.0 +} -68.0 +{ -68.0 + 105.7500 52.5000 -68.0 + 106.5000 51.7500 -68.0 + 113.5000 51.7500 -68.0 + 117.2500 53.5000 -68.0 + 119.5000 53.7500 -68.0 + 123.2500 56.5000 -68.0 + 126.5000 56.7500 -68.0 + 130.2500 59.5000 -68.0 + 131.2500 61.5000 -68.0 + 136.2500 65.5000 -68.0 + 136.2500 69.5000 -68.0 + 134.5000 71.2500 -68.0 + 132.5000 71.2500 -68.0 + 129.5000 70.2500 -68.0 + 125.7500 68.5000 -68.0 + 121.5000 68.2500 -68.0 + 119.7500 66.5000 -68.0 + 118.7500 64.5000 -68.0 + 113.5000 64.2500 -68.0 + 103.5000 62.2500 -68.0 + 101.5000 63.2500 -68.0 + 96.5000 63.2500 -68.0 + 88.5000 67.2500 -68.0 + 84.5000 67.2500 -68.0 + 82.7500 65.5000 -68.0 + 79.5000 65.2500 -68.0 + 77.7500 64.5000 -68.0 + 76.7500 62.5000 -68.0 + 79.5000 59.7500 -68.0 + 81.5000 59.7500 -68.0 + 87.5000 56.7500 -68.0 + 89.5000 56.7500 -68.0 + 93.5000 54.7500 -68.0 + 95.5000 54.7500 -68.0 + 97.5000 53.7500 -68.0 + 101.5000 53.7500 -68.0 + 103.2500 54.5000 -68.0 +} -68.0 +{ -68.0 + 71.7500 64.5000 -68.0 + 72.5000 63.7500 -68.0 + 74.2500 64.5000 -68.0 + 73.5000 65.2500 -68.0 + 69.5000 68.2500 -68.0 + 68.7500 66.5000 -68.0 +} -68.0 +{ -68.0 + 93.7500 65.5000 -68.0 + 94.5000 64.7500 -68.0 + 107.5000 64.7500 -68.0 + 116.5000 65.7500 -68.0 + 118.2500 66.5000 -68.0 + 119.5000 68.7500 -68.0 + 121.5000 69.7500 -68.0 + 123.2500 70.5000 -68.0 + 126.5000 70.7500 -68.0 + 128.5000 71.7500 -68.0 + 133.5000 72.7500 -68.0 + 135.2500 74.5000 -68.0 + 144.5000 74.7500 -68.0 + 148.2500 78.5000 -68.0 + 154.2500 85.5000 -68.0 + 154.2500 87.5000 -68.0 + 156.2500 89.5000 -68.0 + 156.2500 92.5000 -68.0 + 163.2500 106.5000 -68.0 + 162.5000 108.2500 -68.0 + 162.2500 111.5000 -68.0 + 163.2500 113.5000 -68.0 + 162.5000 115.2500 -68.0 + 162.2500 121.5000 -68.0 + 163.2500 123.5000 -68.0 + 163.2500 129.5000 -68.0 + 164.2500 131.5000 -68.0 + 164.2500 134.5000 -68.0 + 165.2500 136.5000 -68.0 + 165.2500 138.5000 -68.0 + 166.2500 140.5000 -68.0 + 166.2500 143.5000 -68.0 + 167.2500 145.5000 -68.0 + 167.2500 159.5000 -68.0 + 168.2500 161.5000 -68.0 + 168.2500 164.5000 -68.0 + 169.2500 166.5000 -68.0 + 169.2500 170.5000 -68.0 + 170.2500 172.5000 -68.0 + 169.5000 173.2500 -68.0 + 169.2500 175.5000 -68.0 + 162.2500 189.5000 -68.0 + 159.2500 193.5000 -68.0 + 158.2500 195.5000 -68.0 + 150.5000 204.2500 -68.0 + 146.5000 207.2500 -68.0 + 141.5000 210.2500 -68.0 + 133.5000 215.2500 -68.0 + 125.5000 219.2500 -68.0 + 123.5000 219.2500 -68.0 + 121.5000 220.2500 -68.0 + 117.5000 220.2500 -68.0 + 115.5000 221.2500 -68.0 + 109.5000 221.2500 -68.0 + 107.7500 220.5000 -68.0 + 97.5000 220.2500 -68.0 + 95.7500 219.5000 -68.0 + 88.5000 219.2500 -68.0 + 86.5000 220.2500 -68.0 + 85.7500 219.5000 -68.0 + 84.5000 220.2500 -68.0 + 82.7500 219.5000 -68.0 + 79.5000 219.2500 -68.0 + 74.5000 218.2500 -68.0 + 68.7500 214.5000 -68.0 + 62.5000 210.2500 -68.0 + 60.5000 209.2500 -68.0 + 51.7500 201.5000 -68.0 + 50.5000 199.2500 -68.0 + 42.7500 189.5000 -68.0 + 39.7500 183.5000 -68.0 + 39.7500 181.5000 -68.0 + 36.7500 175.5000 -68.0 + 36.7500 173.5000 -68.0 + 34.7500 169.5000 -68.0 + 34.7500 165.5000 -68.0 + 35.5000 163.7500 -68.0 + 35.7500 157.5000 -68.0 + 36.5000 155.7500 -68.0 + 37.7500 147.5000 -68.0 + 38.5000 145.7500 -68.0 + 39.7500 137.5000 -68.0 + 44.7500 126.5000 -68.0 + 45.5000 124.7500 -68.0 + 45.7500 121.5000 -68.0 + 44.7500 119.5000 -68.0 + 45.5000 117.7500 -68.0 + 45.7500 110.5000 -68.0 + 46.7500 108.5000 -68.0 + 48.7500 99.5000 -68.0 + 49.7500 94.5000 -68.0 + 51.5000 93.7500 -68.0 + 54.5000 90.7500 -68.0 + 54.7500 88.5000 -68.0 + 55.7500 83.5000 -68.0 + 58.5000 79.7500 -68.0 + 62.5000 76.7500 -68.0 + 64.5000 75.7500 -68.0 + 68.5000 72.7500 -68.0 + 71.5000 72.7500 -68.0 + 71.7500 71.5000 -68.0 + 73.5000 69.7500 -68.0 + 77.5000 67.7500 -68.0 + 86.5000 68.7500 -68.0 +} -68.0 +{ -68.0 + 66.7500 68.5000 -68.0 + 67.5000 67.7500 -68.0 + 68.2500 69.5000 -68.0 + 65.5000 71.2500 -68.0 + 63.7500 70.5000 -68.0 +} -68.0 +{ -68.0 + 142.7500 69.5000 -68.0 + 144.5000 68.7500 -68.0 + 146.2500 70.5000 -68.0 + 145.5000 71.2500 -68.0 + 139.5000 71.2500 -68.0 + 137.7500 70.5000 -68.0 + 138.5000 69.7500 -68.0 +} -68.0 +v 195 z -70.000000 -68.0 +{ -68.0 + 101.2500 49.5000 -70.0 + 97.5000 51.2500 -70.0 + 94.5000 51.2500 -70.0 + 90.5000 53.2500 -70.0 + 88.5000 53.2500 -70.0 + 82.5000 56.2500 -70.0 + 81.5000 55.2500 -70.0 + 79.5000 56.2500 -70.0 + 77.5000 56.2500 -70.0 + 66.5000 61.2500 -70.0 + 60.2500 66.5000 -70.0 + 59.2500 73.5000 -70.0 + 53.2500 81.5000 -70.0 + 50.2500 88.5000 -70.0 + 47.5000 92.2500 -70.0 + 42.5000 108.2500 -70.0 + 41.2500 114.5000 -70.0 + 37.5000 123.2500 -70.0 + 37.2500 126.5000 -70.0 + 32.2500 139.5000 -70.0 + 31.2500 146.5000 -70.0 + 30.2500 148.5000 -70.0 + 29.2500 157.5000 -70.0 + 28.5000 159.2500 -70.0 + 28.2500 171.5000 -70.0 + 29.2500 173.5000 -70.0 + 29.2500 178.5000 -70.0 + 32.2500 188.5000 -70.0 + 38.2500 201.5000 -70.0 + 43.2500 208.5000 -70.0 + 49.5000 214.7500 -70.0 + 57.5000 220.7500 -70.0 + 67.2500 225.5000 -70.0 + 76.5000 225.7500 -70.0 + 85.2500 227.5000 -70.0 + 109.5000 228.7500 -70.0 + 111.5000 227.7500 -70.0 + 126.5000 227.7500 -70.0 + 128.5000 226.7500 -70.0 + 135.5000 225.7500 -70.0 + 143.5000 221.7500 -70.0 + 155.5000 212.7500 -70.0 + 164.5000 201.7500 -70.0 + 172.5000 188.7500 -70.0 + 172.7500 186.5000 -70.0 + 174.7500 182.5000 -70.0 + 175.7500 173.5000 -70.0 + 176.5000 171.7500 -70.0 + 176.7500 143.5000 -70.0 + 175.7500 141.5000 -70.0 + 175.7500 135.5000 -70.0 + 174.7500 133.5000 -70.0 + 174.7500 130.5000 -70.0 + 172.7500 126.5000 -70.0 + 172.7500 123.5000 -70.0 + 169.7500 117.5000 -70.0 + 169.7500 115.5000 -70.0 + 167.7500 111.5000 -70.0 + 167.7500 109.5000 -70.0 + 164.7500 103.5000 -70.0 + 164.7500 101.5000 -70.0 + 161.7500 97.5000 -70.0 + 161.7500 95.5000 -70.0 + 151.7500 75.5000 -70.0 + 152.5000 73.7500 -70.0 + 152.7500 68.5000 -70.0 + 145.7500 61.5000 -70.0 + 138.7500 57.5000 -70.0 + 134.5000 56.2500 -70.0 + 132.5000 57.2500 -70.0 + 126.5000 53.2500 -70.0 + 112.7500 49.5000 -70.0 +} -70.0 +{ -70.0 + 106.5000 51.7500 -70.0 + 115.5000 51.7500 -70.0 + 125.5000 56.7500 -70.0 + 129.2500 58.5000 -70.0 + 129.2500 61.5000 -70.0 + 132.5000 64.7500 -70.0 + 135.5000 63.7500 -70.0 + 141.5000 66.7500 -70.0 + 143.2500 70.5000 -70.0 + 141.5000 71.2500 -70.0 + 139.5000 72.2500 -70.0 + 138.7500 71.5000 -70.0 + 134.5000 70.2500 -70.0 + 132.5000 71.2500 -70.0 + 128.5000 71.2500 -70.0 + 121.5000 68.2500 -70.0 + 117.7500 64.5000 -70.0 + 111.5000 64.2500 -70.0 + 105.5000 62.2500 -70.0 + 103.5000 63.2500 -70.0 + 100.5000 63.2500 -70.0 + 98.5000 64.2500 -70.0 + 95.5000 64.2500 -70.0 + 89.5000 68.2500 -70.0 + 86.5000 68.2500 -70.0 + 84.7500 67.5000 -70.0 + 82.7500 63.5000 -70.0 + 80.7500 62.5000 -70.0 + 84.5000 58.7500 -70.0 + 86.5000 58.7500 -70.0 + 90.5000 55.7500 -70.0 + 92.5000 55.7500 -70.0 + 98.5000 52.7500 -70.0 + 101.5000 52.7500 -70.0 + 104.5000 53.7500 -70.0 +} -70.0 +{ -70.0 + 71.7500 64.5000 -70.0 + 72.5000 63.7500 -70.0 + 75.5000 63.7500 -70.0 + 77.2500 65.5000 -70.0 + 76.5000 66.2500 -70.0 + 72.5000 66.2500 -70.0 +} -70.0 +{ -70.0 + 103.7500 64.5000 -70.0 + 105.5000 63.7500 -70.0 + 109.2500 65.5000 -70.0 + 115.5000 65.7500 -70.0 + 118.5000 66.7500 -70.0 + 119.2500 68.5000 -70.0 + 127.2500 72.5000 -70.0 + 130.5000 72.7500 -70.0 + 136.5000 75.7500 -70.0 + 138.5000 74.7500 -70.0 + 141.5000 74.7500 -70.0 + 151.5000 80.7500 -70.0 + 154.2500 84.5000 -70.0 + 154.2500 87.5000 -70.0 + 156.2500 91.5000 -70.0 + 156.2500 93.5000 -70.0 + 162.2500 105.5000 -70.0 + 162.2500 120.5000 -70.0 + 164.2500 126.5000 -70.0 + 164.2500 132.5000 -70.0 + 166.2500 138.5000 -70.0 + 166.2500 142.5000 -70.0 + 167.2500 144.5000 -70.0 + 167.2500 151.5000 -70.0 + 168.2500 153.5000 -70.0 + 168.2500 163.5000 -70.0 + 170.2500 169.5000 -70.0 + 169.5000 171.2500 -70.0 + 169.2500 175.5000 -70.0 + 162.5000 189.2500 -70.0 + 157.2500 197.5000 -70.0 + 147.5000 207.2500 -70.0 + 127.5000 219.2500 -70.0 + 124.5000 219.2500 -70.0 + 122.5000 220.2500 -70.0 + 112.5000 222.2500 -70.0 + 102.5000 220.2500 -70.0 + 99.5000 221.2500 -70.0 + 97.7500 220.5000 -70.0 + 80.5000 220.2500 -70.0 + 72.5000 217.2500 -70.0 + 64.5000 212.2500 -70.0 + 51.7500 202.5000 -70.0 + 43.7500 191.5000 -70.0 + 37.7500 179.5000 -70.0 + 37.7500 177.5000 -70.0 + 35.7500 173.5000 -70.0 + 34.7500 164.5000 -70.0 + 39.7500 138.5000 -70.0 + 45.5000 125.7500 -70.0 + 45.7500 120.5000 -70.0 + 44.7500 118.5000 -70.0 + 46.7500 113.5000 -70.0 + 45.7500 110.5000 -70.0 + 47.7500 106.5000 -70.0 + 49.7500 96.5000 -70.0 + 54.5000 88.7500 -70.0 + 56.7500 80.5000 -70.0 + 66.5000 73.7500 -70.0 + 70.5000 73.7500 -70.0 + 76.5000 69.7500 -70.0 + 78.5000 69.7500 -70.0 + 80.5000 68.7500 -70.0 + 89.5000 69.7500 -70.0 + 98.5000 64.7500 -70.0 +} -70.0 +{ -70.0 + 68.5000 65.7500 -70.0 + 69.2500 66.5000 -70.0 + 68.5000 68.2500 -70.0 + 66.7500 67.5000 -70.0 +} -70.0 +{ -70.0 + 63.7500 69.5000 -70.0 + 64.5000 68.7500 -70.0 + 65.2500 69.5000 -70.0 + 64.5000 71.2500 -70.0 +} -70.0 +{ -70.0 + 66.7500 70.5000 -70.0 + 67.5000 69.7500 -70.0 + 69.2500 70.5000 -70.0 + 68.5000 72.2500 -70.0 +} -70.0 +{ -70.0 + 144.7500 70.5000 -70.0 + 145.5000 69.7500 -70.0 + 149.2500 71.5000 -70.0 + 147.5000 73.2500 -70.0 + 145.7500 72.5000 -70.0 +} -70.0 +v 256 z -72.000000 -64.0 +{ -72.0 + 101.2500 49.5000 -72.0 + 100.5000 50.2500 -72.0 + 98.5000 50.2500 -72.0 + 94.5000 52.2500 -72.0 + 92.5000 52.2500 -72.0 + 90.5000 53.2500 -72.0 + 87.5000 53.2500 -72.0 + 83.5000 55.2500 -72.0 + 78.5000 55.2500 -72.0 + 76.5000 56.2500 -72.0 + 74.5000 56.2500 -72.0 + 67.5000 59.2500 -72.0 + 62.5000 63.2500 -72.0 + 60.5000 64.2500 -72.0 + 59.2500 67.5000 -72.0 + 60.2500 69.5000 -72.0 + 59.2500 74.5000 -72.0 + 57.5000 76.2500 -72.0 + 54.2500 80.5000 -72.0 + 47.5000 93.2500 -72.0 + 47.2500 95.5000 -72.0 + 44.2500 104.5000 -72.0 + 42.5000 108.2500 -72.0 + 42.2500 110.5000 -72.0 + 41.2500 113.5000 -72.0 + 40.5000 115.2500 -72.0 + 37.2500 124.5000 -72.0 + 36.5000 126.2500 -72.0 + 33.2500 135.5000 -72.0 + 32.5000 137.2500 -72.0 + 31.2500 145.5000 -72.0 + 30.2500 147.5000 -72.0 + 29.2500 156.5000 -72.0 + 28.5000 158.2500 -72.0 + 28.2500 172.5000 -72.0 + 29.2500 174.5000 -72.0 + 29.2500 179.5000 -72.0 + 30.2500 181.5000 -72.0 + 30.2500 183.5000 -72.0 + 31.2500 185.5000 -72.0 + 31.5000 187.7500 -72.0 + 37.2500 200.5000 -72.0 + 40.2500 204.5000 -72.0 + 41.2500 206.5000 -72.0 + 52.2500 217.5000 -72.0 + 56.5000 220.7500 -72.0 + 62.5000 223.7500 -72.0 + 66.2500 225.5000 -72.0 + 68.5000 225.7500 -72.0 + 73.5000 226.7500 -72.0 + 75.5000 225.7500 -72.0 + 77.2500 226.5000 -72.0 + 80.5000 226.7500 -72.0 + 87.5000 227.7500 -72.0 + 89.2500 228.5000 -72.0 + 112.5000 228.7500 -72.0 + 114.5000 227.7500 -72.0 + 127.5000 227.7500 -72.0 + 129.5000 226.7500 -72.0 + 133.5000 226.7500 -72.0 + 145.5000 220.7500 -72.0 + 149.5000 217.7500 -72.0 + 151.5000 216.7500 -72.0 + 158.5000 209.7500 -72.0 + 163.5000 203.7500 -72.0 + 167.7500 197.5000 -72.0 + 171.5000 190.7500 -72.0 + 173.7500 184.5000 -72.0 + 174.5000 182.7500 -72.0 + 175.7500 174.5000 -72.0 + 176.5000 172.7500 -72.0 + 176.7500 139.5000 -72.0 + 175.7500 137.5000 -72.0 + 175.7500 134.5000 -72.0 + 174.7500 132.5000 -72.0 + 174.7500 130.5000 -72.0 + 173.7500 128.5000 -72.0 + 173.7500 126.5000 -72.0 + 171.7500 122.5000 -72.0 + 171.7500 120.5000 -72.0 + 169.7500 116.5000 -72.0 + 169.7500 114.5000 -72.0 + 166.7500 108.5000 -72.0 + 166.7500 106.5000 -72.0 + 154.7500 82.5000 -72.0 + 151.7500 77.5000 -72.0 + 151.7500 75.5000 -72.0 + 154.7500 68.5000 -72.0 + 150.7500 64.5000 -72.0 + 149.7500 62.5000 -72.0 + 147.5000 61.2500 -72.0 + 141.5000 58.2500 -72.0 + 139.7500 57.5000 -72.0 + 136.5000 57.2500 -72.0 + 136.2500 58.5000 -72.0 + 137.5000 59.7500 -72.0 + 139.5000 60.7500 -72.0 + 144.2500 66.5000 -72.0 + 146.2500 70.5000 -72.0 + 143.5000 73.2500 -72.0 + 141.5000 73.2500 -72.0 + 139.5000 74.2500 -72.0 + 136.5000 74.2500 -72.0 + 132.5000 72.2500 -72.0 + 125.5000 71.2500 -72.0 + 117.7500 65.5000 -72.0 + 110.5000 65.2500 -72.0 + 105.7500 61.5000 -72.0 + 101.5000 64.2500 -72.0 + 96.5000 64.2500 -72.0 + 88.5000 70.2500 -72.0 + 84.5000 67.2500 -72.0 + 78.5000 70.2500 -72.0 + 73.5000 70.2500 -72.0 + 69.7500 68.5000 -72.0 + 69.7500 66.5000 -72.0 + 70.7500 63.5000 -72.0 + 73.5000 61.7500 -72.0 + 77.5000 59.7500 -72.0 + 81.5000 56.7500 -72.0 + 83.5000 55.7500 -72.0 + 85.2500 57.5000 -72.0 + 85.2500 60.5000 -72.0 + 89.7500 58.5000 -72.0 + 90.7500 56.5000 -72.0 + 92.5000 55.7500 -72.0 + 98.5000 52.7500 -72.0 + 103.5000 52.7500 -72.0 + 107.5000 50.7500 -72.0 + 112.5000 50.7500 -72.0 + 118.2500 53.5000 -72.0 + 120.5000 53.7500 -72.0 + 124.5000 57.7500 -72.0 + 126.5000 58.7500 -72.0 + 128.5000 56.7500 -72.0 + 130.5000 56.7500 -72.0 + 130.7500 55.5000 -72.0 + 126.7500 53.5000 -72.0 + 124.5000 53.2500 -72.0 + 115.5000 50.2500 -72.0 + 113.7500 49.5000 -72.0 +} -72.0 +{ -72.0 + 102.7500 65.5000 -72.0 + 103.5000 64.7500 -72.0 + 107.5000 64.7500 -72.0 + 111.5000 67.7500 -72.0 + 113.5000 66.7500 -72.0 + 117.5000 66.7500 -72.0 + 119.2500 68.5000 -72.0 + 123.5000 71.7500 -72.0 + 125.5000 72.7500 -72.0 + 126.2500 74.5000 -72.0 + 131.5000 74.7500 -72.0 + 135.5000 76.7500 -72.0 + 137.5000 75.7500 -72.0 + 142.5000 75.7500 -72.0 + 144.5000 77.7500 -72.0 + 151.2500 81.5000 -72.0 + 154.2500 86.5000 -72.0 + 153.2500 88.5000 -72.0 + 156.2500 94.5000 -72.0 + 160.2500 101.5000 -72.0 + 160.2500 107.5000 -72.0 + 161.2500 109.5000 -72.0 + 161.2500 111.5000 -72.0 + 162.2500 113.5000 -72.0 + 162.2500 118.5000 -72.0 + 163.2500 120.5000 -72.0 + 163.2500 122.5000 -72.0 + 164.2500 124.5000 -72.0 + 164.2500 126.5000 -72.0 + 165.2500 128.5000 -72.0 + 165.2500 133.5000 -72.0 + 166.2500 135.5000 -72.0 + 166.2500 139.5000 -72.0 + 167.2500 141.5000 -72.0 + 167.2500 145.5000 -72.0 + 168.2500 147.5000 -72.0 + 168.2500 162.5000 -72.0 + 171.2500 168.5000 -72.0 + 169.5000 171.2500 -72.0 + 169.2500 174.5000 -72.0 + 168.2500 179.5000 -72.0 + 165.2500 183.5000 -72.0 + 163.2500 187.5000 -72.0 + 158.2500 195.5000 -72.0 + 156.2500 199.5000 -72.0 + 146.5000 208.2500 -72.0 + 144.5000 209.2500 -72.0 + 136.5000 214.2500 -72.0 + 127.5000 219.2500 -72.0 + 125.5000 219.2500 -72.0 + 121.5000 221.2500 -72.0 + 119.5000 221.2500 -72.0 + 117.5000 222.2500 -72.0 + 110.5000 222.2500 -72.0 + 108.7500 221.5000 -72.0 + 99.5000 221.2500 -72.0 + 92.5000 220.2500 -72.0 + 90.5000 221.2500 -72.0 + 84.5000 221.2500 -72.0 + 79.5000 220.2500 -72.0 + 76.5000 219.2500 -72.0 + 66.7500 214.5000 -72.0 + 60.5000 210.2500 -72.0 + 58.5000 209.2500 -72.0 + 49.7500 200.5000 -72.0 + 40.7500 188.5000 -72.0 + 40.7500 186.5000 -72.0 + 37.7500 180.5000 -72.0 + 37.7500 178.5000 -72.0 + 35.7500 174.5000 -72.0 + 35.7500 169.5000 -72.0 + 34.7500 167.5000 -72.0 + 34.7500 163.5000 -72.0 + 33.7500 161.5000 -72.0 + 35.7500 158.5000 -72.0 + 36.7500 151.5000 -72.0 + 37.7500 146.5000 -72.0 + 41.7500 134.5000 -72.0 + 45.5000 125.7500 -72.0 + 45.7500 116.5000 -72.0 + 46.5000 114.7500 -72.0 + 46.7500 108.5000 -72.0 + 48.5000 104.7500 -72.0 + 48.7500 101.5000 -72.0 + 49.7500 98.5000 -72.0 + 52.5000 92.7500 -72.0 + 55.7500 83.5000 -72.0 + 57.5000 79.7500 -72.0 + 62.5000 76.7500 -72.0 + 66.5000 73.7500 -72.0 + 68.5000 73.7500 -72.0 + 71.5000 74.7500 -72.0 + 75.5000 72.7500 -72.0 + 77.2500 73.5000 -72.0 + 80.5000 73.7500 -72.0 + 80.7500 72.5000 -72.0 + 82.5000 70.7500 -72.0 + 87.5000 71.7500 -72.0 + 93.5000 68.7500 -72.0 + 98.5000 65.7500 -72.0 +} -72.0 +{ -72.0 + 64.7500 67.5000 -72.0 + 65.5000 66.7500 -72.0 + 68.2500 70.5000 -72.0 + 67.5000 71.2500 -72.0 + 63.7500 69.5000 -72.0 +} -72.0 +{ -72.0 + 147.7500 71.5000 -72.0 + 148.5000 70.7500 -72.0 + 150.2500 71.5000 -72.0 + 150.2500 73.5000 -72.0 + 149.5000 75.2500 -72.0 + 147.7500 73.5000 -72.0 +} -72.0 +{ -72.0 + 61.7500 72.5000 -72.0 + 62.5000 71.7500 -72.0 + 63.2500 72.5000 -72.0 + 62.5000 73.2500 -72.0 +} -72.0 +v 199 z -74.000000 -64.0 +{ -74.0 + 105.2500 48.5000 -74.0 + 104.5000 49.2500 -74.0 + 100.5000 49.2500 -74.0 + 92.5000 53.2500 -74.0 + 90.5000 53.2500 -74.0 + 88.5000 54.2500 -74.0 + 91.2500 58.5000 -74.0 + 94.5000 55.7500 -74.0 + 98.5000 52.7500 -74.0 + 100.5000 52.7500 -74.0 + 102.5000 51.7500 -74.0 + 105.5000 52.7500 -74.0 + 106.5000 50.7500 -74.0 + 112.5000 50.7500 -74.0 + 120.2500 54.5000 -74.0 + 121.5000 56.7500 -74.0 + 123.5000 57.7500 -74.0 + 124.7500 54.5000 -74.0 + 113.7500 49.5000 -74.0 + 111.5000 49.2500 -74.0 + 109.7500 48.5000 -74.0 +} -74.0 +{ -74.0 + 68.2500 57.5000 -74.0 + 66.5000 58.2500 -74.0 + 59.5000 64.2500 -74.0 + 59.2500 68.5000 -74.0 + 60.2500 71.5000 -74.0 + 58.2500 76.5000 -74.0 + 55.2500 79.5000 -74.0 + 47.5000 94.2500 -74.0 + 47.2500 96.5000 -74.0 + 32.2500 137.5000 -74.0 + 28.5000 157.2500 -74.0 + 28.2500 172.5000 -74.0 + 29.2500 174.5000 -74.0 + 29.2500 179.5000 -74.0 + 30.2500 181.5000 -74.0 + 31.2500 188.5000 -74.0 + 39.2500 204.5000 -74.0 + 43.2500 208.5000 -74.0 + 44.5000 210.7500 -74.0 + 54.5000 219.7500 -74.0 + 61.2500 223.5000 -74.0 + 69.2500 226.5000 -74.0 + 81.5000 226.7500 -74.0 + 86.2500 228.5000 -74.0 + 107.5000 229.7500 -74.0 + 109.5000 228.7500 -74.0 + 113.5000 228.7500 -74.0 + 115.5000 227.7500 -74.0 + 128.5000 227.7500 -74.0 + 130.5000 226.7500 -74.0 + 132.5000 226.7500 -74.0 + 143.5000 222.7500 -74.0 + 150.5000 217.7500 -74.0 + 160.7500 207.5000 -74.0 + 170.5000 193.7500 -74.0 + 173.7500 184.5000 -74.0 + 176.5000 172.7500 -74.0 + 177.7500 157.5000 -74.0 + 176.7500 155.5000 -74.0 + 177.7500 143.5000 -74.0 + 176.7500 141.5000 -74.0 + 176.7500 137.5000 -74.0 + 175.7500 135.5000 -74.0 + 174.7500 128.5000 -74.0 + 172.7500 124.5000 -74.0 + 172.7500 122.5000 -74.0 + 169.7500 116.5000 -74.0 + 169.7500 114.5000 -74.0 + 165.7500 106.5000 -74.0 + 163.7500 100.5000 -74.0 + 158.7500 92.5000 -74.0 + 154.7500 82.5000 -74.0 + 151.7500 79.5000 -74.0 + 151.7500 75.5000 -74.0 + 155.5000 69.7500 -74.0 + 155.7500 67.5000 -74.0 + 152.7500 63.5000 -74.0 + 148.7500 60.5000 -74.0 + 143.5000 59.2500 -74.0 + 143.2500 61.5000 -74.0 + 145.2500 63.5000 -74.0 + 148.2500 69.5000 -74.0 + 147.5000 70.2500 -74.0 + 147.2500 72.5000 -74.0 + 145.5000 74.2500 -74.0 + 141.5000 76.2500 -74.0 + 139.5000 76.2500 -74.0 + 139.2500 77.5000 -74.0 + 142.5000 77.7500 -74.0 + 148.5000 80.7500 -74.0 + 153.2500 88.5000 -74.0 + 153.2500 90.5000 -74.0 + 159.2500 101.5000 -74.0 + 159.2500 106.5000 -74.0 + 161.2500 110.5000 -74.0 + 163.2500 120.5000 -74.0 + 165.2500 124.5000 -74.0 + 165.2500 126.5000 -74.0 + 166.2500 128.5000 -74.0 + 166.2500 134.5000 -74.0 + 167.2500 136.5000 -74.0 + 167.2500 140.5000 -74.0 + 169.2500 147.5000 -74.0 + 169.2500 162.5000 -74.0 + 171.2500 166.5000 -74.0 + 169.5000 168.2500 -74.0 + 169.2500 175.5000 -74.0 + 167.5000 179.2500 -74.0 + 167.2500 181.5000 -74.0 + 155.2500 200.5000 -74.0 + 146.5000 208.2500 -74.0 + 125.5000 220.2500 -74.0 + 123.5000 220.2500 -74.0 + 119.5000 222.2500 -74.0 + 109.5000 222.2500 -74.0 + 107.7500 221.5000 -74.0 + 101.5000 221.2500 -74.0 + 99.5000 222.2500 -74.0 + 97.7500 221.5000 -74.0 + 81.5000 221.2500 -74.0 + 72.5000 218.2500 -74.0 + 60.5000 211.2500 -74.0 + 50.5000 202.2500 -74.0 + 42.7500 191.5000 -74.0 + 37.7500 181.5000 -74.0 + 37.7500 179.5000 -74.0 + 35.7500 175.5000 -74.0 + 35.7500 170.5000 -74.0 + 34.7500 168.5000 -74.0 + 34.7500 159.5000 -74.0 + 36.7500 149.5000 -74.0 + 45.5000 125.7500 -74.0 + 46.7500 113.5000 -74.0 + 48.5000 111.7500 -74.0 + 48.7500 109.5000 -74.0 + 46.7500 107.5000 -74.0 + 49.7500 102.5000 -74.0 + 50.7500 97.5000 -74.0 + 53.7500 91.5000 -74.0 + 52.7500 89.5000 -74.0 + 54.7500 84.5000 -74.0 + 57.5000 80.7500 -74.0 + 65.5000 74.7500 -74.0 + 67.5000 74.7500 -74.0 + 73.5000 76.7500 -74.0 + 75.5000 74.7500 -74.0 + 79.2500 76.5000 -74.0 + 81.5000 76.7500 -74.0 + 83.5000 74.7500 -74.0 + 85.5000 74.7500 -74.0 + 87.5000 72.7500 -74.0 + 96.7500 67.5000 -74.0 + 94.5000 67.2500 -74.0 + 90.5000 69.2500 -74.0 + 88.5000 69.2500 -74.0 + 82.5000 73.2500 -74.0 + 72.5000 73.2500 -74.0 + 69.5000 72.2500 -74.0 + 66.7500 69.5000 -74.0 + 67.7500 64.5000 -74.0 + 74.7500 57.5000 -74.0 +} -74.0 +{ -74.0 + 105.2500 61.5000 -74.0 + 105.2500 62.5000 -74.0 + 100.5000 66.2500 -74.0 + 97.5000 66.2500 -74.0 + 98.2500 67.5000 -74.0 + 101.5000 67.7500 -74.0 + 103.5000 65.7500 -74.0 + 108.5000 65.7500 -74.0 + 110.5000 68.7500 -74.0 + 112.5000 67.7500 -74.0 + 117.5000 67.7500 -74.0 + 123.2500 73.5000 -74.0 + 125.2500 77.5000 -74.0 + 125.2500 79.5000 -74.0 + 126.5000 79.7500 -74.0 + 128.5000 77.7500 -74.0 + 135.5000 77.7500 -74.0 + 136.7500 76.5000 -74.0 + 131.5000 76.2500 -74.0 + 125.5000 73.2500 -74.0 + 122.7500 68.5000 -74.0 + 120.5000 68.2500 -74.0 + 115.5000 66.2500 -74.0 + 113.5000 67.2500 -74.0 + 111.5000 67.2500 -74.0 +} -74.0 +{ -74.0 + 62.7500 69.5000 -74.0 + 63.5000 68.7500 -74.0 + 65.2500 69.5000 -74.0 + 65.2500 71.5000 -74.0 + 63.5000 73.2500 -74.0 + 61.7500 72.5000 -74.0 + 62.5000 71.7500 -74.0 +} -74.0 +{ -74.0 + 150.5000 71.7500 -74.0 + 151.2500 72.5000 -74.0 + 150.2500 75.5000 -74.0 + 148.5000 76.2500 -74.0 + 147.7500 74.5000 -74.0 +} -74.0 +v 191 z -76.000000 -74.0 +{ -74.0 + 103.2500 48.5000 -74.0 + 101.5000 49.2500 -74.0 + 93.5000 54.2500 -74.0 + 93.2500 61.5000 -74.0 + 96.5000 54.7500 -74.0 + 102.5000 51.7500 -74.0 + 104.5000 51.7500 -74.0 + 106.2500 53.5000 -74.0 + 107.5000 51.7500 -74.0 + 113.5000 51.7500 -74.0 + 116.5000 52.7500 -74.0 + 120.2500 56.5000 -74.0 + 120.2500 59.5000 -74.0 + 121.7500 56.5000 -74.0 + 120.7500 53.5000 -74.0 + 111.7500 48.5000 -74.0 +} -74.0 +{ -74.0 + 65.2500 58.5000 -74.0 + 63.5000 59.2500 -74.0 + 57.5000 65.2500 -74.0 + 60.2500 70.5000 -74.0 + 60.2500 72.5000 -74.0 + 57.5000 78.2500 -74.0 + 54.2500 82.5000 -74.0 + 48.2500 94.5000 -74.0 + 38.2500 121.5000 -74.0 + 32.2500 135.5000 -74.0 + 31.2500 140.5000 -74.0 + 28.5000 156.2500 -74.0 + 28.2500 172.5000 -74.0 + 29.2500 174.5000 -74.0 + 29.2500 179.5000 -74.0 + 30.2500 181.5000 -74.0 + 30.2500 184.5000 -74.0 + 35.2500 197.5000 -74.0 + 41.2500 207.5000 -74.0 + 56.2500 221.5000 -74.0 + 68.2500 226.5000 -74.0 + 78.5000 226.7500 -74.0 + 89.2500 229.5000 -74.0 + 110.5000 229.7500 -74.0 + 112.5000 228.7500 -74.0 + 125.5000 228.7500 -74.0 + 127.5000 227.7500 -74.0 + 130.5000 227.7500 -74.0 + 143.5000 222.7500 -74.0 + 153.5000 215.7500 -74.0 + 160.7500 207.5000 -74.0 + 170.5000 193.7500 -74.0 + 173.7500 184.5000 -74.0 + 176.5000 172.7500 -74.0 + 176.7500 165.5000 -74.0 + 177.5000 163.7500 -74.0 + 177.7500 141.5000 -74.0 + 176.7500 139.5000 -74.0 + 176.7500 134.5000 -74.0 + 174.7500 130.5000 -74.0 + 174.7500 127.5000 -74.0 + 163.7500 101.5000 -74.0 + 155.7500 89.5000 -74.0 + 155.7500 87.5000 -74.0 + 151.7500 79.5000 -74.0 + 151.7500 76.5000 -74.0 + 152.7500 73.5000 -74.0 + 156.5000 70.7500 -74.0 + 156.7500 67.5000 -74.0 + 154.5000 64.2500 -74.0 + 150.7500 61.5000 -74.0 + 147.5000 61.2500 -74.0 + 147.2500 62.5000 -74.0 + 149.2500 66.5000 -74.0 + 149.2500 70.5000 -74.0 + 147.2500 75.5000 -74.0 + 148.5000 75.7500 -74.0 + 150.2500 77.5000 -74.0 + 149.5000 79.2500 -74.0 + 147.5000 78.2500 -74.0 + 146.7500 76.5000 -74.0 + 145.5000 76.2500 -74.0 + 141.5000 78.2500 -74.0 + 138.5000 78.2500 -74.0 + 136.5000 79.2500 -74.0 + 134.7500 78.5000 -74.0 + 125.5000 78.2500 -74.0 + 120.7500 68.5000 -74.0 + 110.5000 68.2500 -74.0 + 106.7500 63.5000 -74.0 + 104.5000 64.2500 -74.0 + 101.5000 68.2500 -74.0 + 99.5000 68.2500 -74.0 + 100.5000 69.7500 -74.0 + 103.5000 68.7500 -74.0 + 103.7500 66.5000 -74.0 + 105.5000 64.7500 -74.0 + 107.2500 65.5000 -74.0 + 110.5000 69.7500 -74.0 + 112.5000 68.7500 -74.0 + 115.5000 68.7500 -74.0 + 117.2500 69.5000 -74.0 + 123.2500 76.5000 -74.0 + 123.2500 78.5000 -74.0 + 125.2500 80.5000 -74.0 + 136.5000 80.7500 -74.0 + 139.5000 81.7500 -74.0 + 143.5000 79.7500 -74.0 + 145.5000 80.7500 -74.0 + 147.2500 84.5000 -74.0 + 151.2500 88.5000 -74.0 + 151.2500 91.5000 -74.0 + 153.2500 93.5000 -74.0 + 156.2500 98.5000 -74.0 + 156.2500 102.5000 -74.0 + 161.2500 110.5000 -74.0 + 161.2500 112.5000 -74.0 + 164.2500 118.5000 -74.0 + 164.2500 121.5000 -74.0 + 166.2500 125.5000 -74.0 + 166.2500 129.5000 -74.0 + 168.2500 136.5000 -74.0 + 168.2500 141.5000 -74.0 + 170.2500 147.5000 -74.0 + 170.2500 161.5000 -74.0 + 171.2500 163.5000 -74.0 + 171.2500 165.5000 -74.0 + 169.5000 167.2500 -74.0 + 169.2500 175.5000 -74.0 + 167.5000 179.2500 -74.0 + 167.2500 181.5000 -74.0 + 158.2500 195.5000 -74.0 + 151.5000 204.2500 -74.0 + 149.2500 205.5000 -74.0 + 148.2500 207.5000 -74.0 + 140.5000 212.2500 -74.0 + 125.5000 220.2500 -74.0 + 123.5000 220.2500 -74.0 + 119.5000 222.2500 -74.0 + 108.5000 222.2500 -74.0 + 103.5000 221.2500 -74.0 + 101.5000 222.2500 -74.0 + 98.5000 222.2500 -74.0 + 96.7500 221.5000 -74.0 + 80.5000 221.2500 -74.0 + 71.7500 217.5000 -74.0 + 69.5000 217.2500 -74.0 + 64.5000 213.2500 -74.0 + 58.5000 210.2500 -74.0 + 49.7500 201.5000 -74.0 + 43.7500 193.5000 -74.0 + 37.7500 181.5000 -74.0 + 37.7500 179.5000 -74.0 + 35.7500 175.5000 -74.0 + 35.7500 173.5000 -74.0 + 34.7500 171.5000 -74.0 + 34.7500 159.5000 -74.0 + 33.7500 157.5000 -74.0 + 35.5000 154.7500 -74.0 + 36.7500 148.5000 -74.0 + 45.5000 125.7500 -74.0 + 46.7500 117.5000 -74.0 + 49.5000 111.7500 -74.0 + 49.7500 107.5000 -74.0 + 48.7500 105.5000 -74.0 + 48.7500 103.5000 -74.0 + 51.7500 100.5000 -74.0 + 52.7500 95.5000 -74.0 + 54.7500 84.5000 -74.0 + 64.5000 75.7500 -74.0 + 67.5000 75.7500 -74.0 + 69.2500 77.5000 -74.0 + 80.5000 78.7500 -74.0 + 86.5000 75.7500 -74.0 + 93.7500 69.5000 -74.0 + 90.5000 69.2500 -74.0 + 89.5000 71.2500 -74.0 + 81.5000 76.2500 -74.0 + 76.5000 76.2500 -74.0 + 67.5000 74.2500 -74.0 + 65.7500 72.5000 -74.0 + 65.7500 64.5000 -74.0 + 69.7500 58.5000 -74.0 +} -74.0 +{ -74.0 + 62.7500 72.5000 -74.0 + 63.5000 71.7500 -74.0 + 64.2500 72.5000 -74.0 + 63.5000 73.2500 -74.0 +} -74.0 +{ -74.0 + 149.7500 73.5000 -74.0 + 150.5000 72.7500 -74.0 + 151.2500 73.5000 -74.0 + 150.5000 74.2500 -74.0 +} -74.0 +{ -74.0 + 61.7500 217.5000 -74.0 + 62.5000 216.7500 -74.0 + 63.2500 217.5000 -74.0 + 62.5000 218.2500 -74.0 +} -74.0 +v 184 z -78.000000 -64.0 +{ -78.0 + 105.2500 47.5000 -78.0 + 104.5000 48.2500 -78.0 + 102.5000 48.2500 -78.0 + 97.5000 52.2500 -78.0 + 95.5000 53.2500 -78.0 + 94.5000 55.2500 -78.0 + 94.2500 60.5000 -78.0 + 95.5000 60.7500 -78.0 + 95.7500 58.5000 -78.0 + 96.7500 55.5000 -78.0 + 101.5000 52.7500 -78.0 + 105.5000 52.7500 -78.0 + 107.5000 54.7500 -78.0 + 111.5000 52.7500 -78.0 + 113.2500 53.5000 -78.0 + 115.5000 53.7500 -78.0 + 118.2500 56.5000 -78.0 + 118.2500 58.5000 -78.0 + 119.5000 61.7500 -78.0 + 119.7500 54.5000 -78.0 + 114.5000 50.2500 -78.0 + 110.5000 48.2500 -78.0 + 108.7500 47.5000 -78.0 +} -78.0 +{ -78.0 + 64.2500 58.5000 -78.0 + 60.5000 60.2500 -78.0 + 58.2500 62.5000 -78.0 + 56.2500 66.5000 -78.0 + 60.2500 70.5000 -78.0 + 60.2500 73.5000 -78.0 + 49.5000 92.2500 -78.0 + 31.5000 137.2500 -78.0 + 31.2500 139.5000 -78.0 + 28.5000 155.2500 -78.0 + 28.2500 172.5000 -78.0 + 29.2500 174.5000 -78.0 + 29.2500 179.5000 -78.0 + 30.2500 181.5000 -78.0 + 30.2500 184.5000 -78.0 + 35.2500 197.5000 -78.0 + 41.2500 207.5000 -78.0 + 53.5000 219.7500 -78.0 + 60.2500 223.5000 -78.0 + 66.5000 225.7500 -78.0 + 74.2500 227.5000 -78.0 + 75.5000 226.7500 -78.0 + 93.2500 230.5000 -78.0 + 106.5000 230.7500 -78.0 + 108.5000 229.7500 -78.0 + 112.5000 229.7500 -78.0 + 114.5000 228.7500 -78.0 + 126.5000 228.7500 -78.0 + 128.5000 227.7500 -78.0 + 132.5000 227.7500 -78.0 + 140.5000 223.7500 -78.0 + 142.5000 223.7500 -78.0 + 154.5000 214.7500 -78.0 + 166.5000 199.7500 -78.0 + 172.7500 188.5000 -78.0 + 174.7500 181.5000 -78.0 + 175.7500 174.5000 -78.0 + 177.5000 164.7500 -78.0 + 177.7500 139.5000 -78.0 + 176.7500 137.5000 -78.0 + 175.7500 130.5000 -78.0 + 173.7500 126.5000 -78.0 + 173.5000 124.2500 -78.0 + 160.7500 96.5000 -78.0 + 155.7500 90.5000 -78.0 + 151.7500 82.5000 -78.0 + 151.7500 75.5000 -78.0 + 157.5000 70.7500 -78.0 + 157.7500 68.5000 -78.0 + 156.5000 65.2500 -78.0 + 152.7500 62.5000 -78.0 + 149.2500 62.5000 -78.0 + 151.2500 68.5000 -78.0 + 148.2500 74.5000 -78.0 + 149.2500 77.5000 -78.0 + 146.5000 80.2500 -78.0 + 142.7500 79.5000 -78.0 + 141.5000 80.2500 -78.0 + 127.5000 81.2500 -78.0 + 124.5000 80.2500 -78.0 + 122.5000 77.2500 -78.0 + 122.2500 79.5000 -78.0 + 123.5000 80.7500 -78.0 + 129.2500 83.5000 -78.0 + 138.5000 83.7500 -78.0 + 144.2500 86.5000 -78.0 + 144.2500 88.5000 -78.0 + 146.5000 88.7500 -78.0 + 149.5000 92.7500 -78.0 + 153.2500 95.5000 -78.0 + 151.2500 96.5000 -78.0 + 152.2500 99.5000 -78.0 + 157.2500 104.5000 -78.0 + 163.2500 113.5000 -78.0 + 163.2500 115.5000 -78.0 + 165.2500 119.5000 -78.0 + 165.2500 122.5000 -78.0 + 167.2500 126.5000 -78.0 + 168.2500 135.5000 -78.0 + 170.2500 137.5000 -78.0 + 169.5000 138.2500 -78.0 + 169.2500 142.5000 -78.0 + 170.2500 144.5000 -78.0 + 170.2500 152.5000 -78.0 + 171.2500 155.5000 -78.0 + 170.2500 158.5000 -78.0 + 172.2500 162.5000 -78.0 + 169.5000 167.2500 -78.0 + 169.2500 171.5000 -78.0 + 170.2500 173.5000 -78.0 + 169.2500 177.5000 -78.0 + 167.5000 179.2500 -78.0 + 167.2500 181.5000 -78.0 + 157.2500 197.5000 -78.0 + 148.5000 207.2500 -78.0 + 130.5000 218.2500 -78.0 + 120.5000 222.2500 -78.0 + 118.5000 222.2500 -78.0 + 116.5000 223.2500 -78.0 + 97.5000 222.2500 -78.0 + 95.7500 221.5000 -78.0 + 90.5000 221.2500 -78.0 + 88.5000 222.2500 -78.0 + 76.5000 220.2500 -78.0 + 68.7500 216.5000 -78.0 + 58.5000 210.2500 -78.0 + 50.7500 203.5000 -78.0 + 44.7500 195.5000 -78.0 + 38.7500 184.5000 -78.0 + 38.7500 182.5000 -78.0 + 35.7500 176.5000 -78.0 + 35.7500 172.5000 -78.0 + 34.7500 170.5000 -78.0 + 34.7500 152.5000 -78.0 + 36.7500 146.5000 -78.0 + 43.5000 130.7500 -78.0 + 46.7500 118.5000 -78.0 + 50.5000 110.7500 -78.0 + 51.7500 101.5000 -78.0 + 54.5000 95.7500 -78.0 + 54.7500 87.5000 -78.0 + 56.7500 82.5000 -78.0 + 59.5000 79.7500 -78.0 + 65.5000 76.7500 -78.0 + 69.2500 79.5000 -78.0 + 74.5000 79.7500 -78.0 + 76.2500 80.5000 -78.0 + 77.2500 82.5000 -78.0 + 80.7500 82.5000 -78.0 + 81.7500 80.5000 -78.0 + 84.7500 78.5000 -78.0 + 72.5000 78.2500 -78.0 + 66.5000 75.2500 -78.0 + 63.7500 69.5000 -78.0 + 63.7500 66.5000 -78.0 + 66.5000 59.7500 -78.0 + 65.7500 58.5000 -78.0 +} -78.0 +{ -78.0 + 104.2500 64.5000 -78.0 + 102.5000 70.2500 -78.0 + 99.5000 70.2500 -78.0 + 100.5000 71.7500 -78.0 + 102.5000 70.7500 -78.0 + 105.7500 71.5000 -78.0 + 104.7500 69.5000 -78.0 +} -78.0 +{ -78.0 + 108.2500 65.5000 -78.0 + 108.5000 69.7500 -78.0 + 110.5000 70.7500 -78.0 + 112.5000 69.7500 -78.0 + 109.7500 68.5000 -78.0 +} -78.0 +{ -78.0 + 92.2500 70.5000 -78.0 + 91.2500 72.5000 -78.0 + 88.2500 75.5000 -78.0 + 87.2500 77.5000 -78.0 + 88.5000 77.7500 -78.0 + 93.7500 70.5000 -78.0 +} -78.0 +{ -78.0 + 119.2500 71.5000 -78.0 + 118.5000 72.2500 -78.0 + 119.2500 74.5000 -78.0 + 121.7500 76.5000 -78.0 + 120.7500 74.5000 -78.0 + 120.7500 72.5000 -78.0 +} -78.0 +v 194 z -80.000000 -64.0 +{ -80.0 + 106.2500 46.5000 -80.0 + 102.5000 48.2500 -80.0 + 95.5000 55.2500 -80.0 + 95.2500 60.5000 -80.0 + 96.5000 59.7500 -80.0 + 96.7500 57.5000 -80.0 + 98.5000 55.7500 -80.0 + 105.5000 54.7500 -80.0 + 108.5000 55.7500 -80.0 + 110.5000 54.7500 -80.0 + 115.5000 54.7500 -80.0 + 118.5000 58.7500 -80.0 + 118.7500 56.5000 -80.0 + 114.7500 50.5000 -80.0 + 107.7500 46.5000 -80.0 +} -80.0 +{ -80.0 + 61.2500 59.5000 -80.0 + 56.5000 63.2500 -80.0 + 56.5000 67.7500 -80.0 + 60.2500 70.5000 -80.0 + 60.2500 75.5000 -80.0 + 58.2500 79.5000 -80.0 + 54.5000 85.2500 -80.0 + 54.2500 87.5000 -80.0 + 48.5000 95.2500 -80.0 + 48.2500 97.5000 -80.0 + 45.2500 103.5000 -80.0 + 44.2500 108.5000 -80.0 + 38.2500 120.5000 -80.0 + 31.2500 138.5000 -80.0 + 29.5000 145.2500 -80.0 + 29.2500 152.5000 -80.0 + 28.5000 154.2500 -80.0 + 28.2500 171.5000 -80.0 + 29.2500 173.5000 -80.0 + 29.2500 178.5000 -80.0 + 30.2500 180.5000 -80.0 + 31.5000 188.7500 -80.0 + 37.2500 201.5000 -80.0 + 41.2500 207.5000 -80.0 + 51.2500 217.5000 -80.0 + 57.2500 222.5000 -80.0 + 59.5000 222.7500 -80.0 + 65.5000 225.7500 -80.0 + 72.2500 227.5000 -80.0 + 79.5000 227.7500 -80.0 + 95.2500 231.5000 -80.0 + 104.5000 231.7500 -80.0 + 106.5000 230.7500 -80.0 + 115.5000 229.7500 -80.0 + 117.5000 228.7500 -80.0 + 118.2500 229.5000 -80.0 + 119.5000 228.7500 -80.0 + 126.5000 228.7500 -80.0 + 128.5000 227.7500 -80.0 + 135.5000 226.7500 -80.0 + 147.5000 220.7500 -80.0 + 155.5000 213.7500 -80.0 + 166.7500 199.5000 -80.0 + 172.7500 188.5000 -80.0 + 175.7500 177.5000 -80.0 + 176.7500 168.5000 -80.0 + 177.5000 166.7500 -80.0 + 177.7500 154.5000 -80.0 + 178.7500 147.5000 -80.0 + 177.7500 145.5000 -80.0 + 177.7500 138.5000 -80.0 + 172.7500 121.5000 -80.0 + 160.7500 96.5000 -80.0 + 152.7500 87.5000 -80.0 + 152.7500 85.5000 -80.0 + 149.7500 81.5000 -80.0 + 152.7500 74.5000 -80.0 + 158.5000 71.7500 -80.0 + 158.7500 69.5000 -80.0 + 157.7500 66.5000 -80.0 + 154.7500 63.5000 -80.0 + 151.2500 63.5000 -80.0 + 152.2500 65.5000 -80.0 + 152.2500 68.5000 -80.0 + 151.2500 71.5000 -80.0 + 146.5000 77.2500 -80.0 + 147.2500 78.5000 -80.0 + 145.2500 79.5000 -80.0 + 144.2500 81.5000 -80.0 + 145.2500 83.5000 -80.0 + 145.2500 89.5000 -80.0 + 144.5000 91.2500 -80.0 + 140.7500 85.5000 -80.0 + 140.7500 81.5000 -80.0 + 139.5000 81.2500 -80.0 + 135.5000 83.2500 -80.0 + 133.5000 83.2500 -80.0 + 131.5000 84.2500 -80.0 + 130.7500 83.5000 -80.0 + 128.5000 83.2500 -80.0 + 128.2500 84.5000 -80.0 + 133.2500 87.5000 -80.0 + 137.5000 87.7500 -80.0 + 157.2500 103.5000 -80.0 + 163.2500 112.5000 -80.0 + 163.2500 114.5000 -80.0 + 166.2500 120.5000 -80.0 + 166.2500 122.5000 -80.0 + 168.2500 126.5000 -80.0 + 169.2500 133.5000 -80.0 + 171.2500 137.5000 -80.0 + 170.5000 139.2500 -80.0 + 170.2500 144.5000 -80.0 + 171.2500 146.5000 -80.0 + 171.2500 157.5000 -80.0 + 172.2500 160.5000 -80.0 + 170.5000 164.2500 -80.0 + 169.5000 169.2500 -80.0 + 170.2500 170.5000 -80.0 + 170.2500 173.5000 -80.0 + 167.2500 181.5000 -80.0 + 157.2500 197.5000 -80.0 + 148.2500 207.5000 -80.0 + 141.5000 212.2500 -80.0 + 132.5000 217.2500 -80.0 + 118.5000 223.2500 -80.0 + 104.5000 222.2500 -80.0 + 102.5000 223.2500 -80.0 + 78.5000 221.2500 -80.0 + 72.5000 219.2500 -80.0 + 65.7500 214.5000 -80.0 + 56.5000 209.2500 -80.0 + 48.7500 201.5000 -80.0 + 45.7500 197.5000 -80.0 + 37.7500 182.5000 -80.0 + 37.7500 180.5000 -80.0 + 35.7500 176.5000 -80.0 + 35.7500 172.5000 -80.0 + 34.7500 170.5000 -80.0 + 34.7500 159.5000 -80.0 + 35.5000 157.7500 -80.0 + 35.7500 152.5000 -80.0 + 34.7500 150.5000 -80.0 + 34.7500 147.5000 -80.0 + 37.5000 141.7500 -80.0 + 37.7500 139.5000 -80.0 + 44.7500 125.5000 -80.0 + 46.7500 116.5000 -80.0 + 50.7500 110.5000 -80.0 + 51.7500 105.5000 -80.0 + 53.5000 103.7500 -80.0 + 53.7500 100.5000 -80.0 + 57.5000 94.7500 -80.0 + 57.7500 90.5000 -80.0 + 56.7500 88.5000 -80.0 + 56.7500 86.5000 -80.0 + 59.7500 80.5000 -80.0 + 62.5000 78.7500 -80.0 + 67.5000 78.7500 -80.0 + 69.2500 80.5000 -80.0 + 71.5000 80.7500 -80.0 + 75.2500 83.5000 -80.0 + 79.5000 83.7500 -80.0 + 81.2500 84.5000 -80.0 + 87.7500 80.5000 -80.0 + 88.7500 78.5000 -80.0 + 84.5000 81.2500 -80.0 + 75.5000 80.2500 -80.0 + 69.5000 78.2500 -80.0 + 65.7500 75.5000 -80.0 + 62.7500 69.5000 -80.0 + 63.7500 59.5000 -80.0 +} -80.0 +{ -80.0 + 118.2500 61.5000 -80.0 + 118.2500 63.5000 -80.0 + 118.7500 62.5000 -80.0 +} -80.0 +{ -80.0 + 104.2500 63.5000 -80.0 + 104.2500 65.5000 -80.0 + 105.7500 63.5000 -80.0 +} -80.0 +{ -80.0 + 107.2500 63.5000 -80.0 + 108.2500 64.5000 -80.0 + 108.7500 63.5000 -80.0 +} -80.0 +{ -80.0 + 108.2500 66.5000 -80.0 + 108.2500 71.5000 -80.0 + 111.5000 71.7500 -80.0 +} -80.0 +{ -80.0 + 104.2500 68.5000 -80.0 + 104.2500 70.5000 -80.0 + 102.5000 72.7500 -80.0 + 104.5000 71.7500 -80.0 + 105.2500 72.5000 -80.0 + 106.5000 71.7500 -80.0 +} -80.0 +{ -80.0 + 117.2500 73.5000 -80.0 + 120.2500 79.5000 -80.0 + 121.5000 79.7500 -80.0 + 119.7500 76.5000 -80.0 + 119.7500 73.5000 -80.0 +} -80.0 +{ -80.0 + 153.7500 92.5000 -80.0 + 154.5000 91.7500 -80.0 + 155.2500 92.5000 -80.0 + 154.5000 93.2500 -80.0 +} -80.0 +v 203 z -82.000000 -64.0 +{ -82.0 + 106.2500 45.5000 -82.0 + 104.5000 46.2500 -82.0 + 96.5000 55.2500 -82.0 + 96.7500 58.5000 -82.0 + 98.5000 56.7500 -82.0 + 100.5000 56.7500 -82.0 + 102.5000 55.7500 -82.0 + 106.5000 55.7500 -82.0 + 108.5000 56.7500 -82.0 + 110.5000 55.7500 -82.0 + 114.5000 55.7500 -82.0 + 116.2500 56.5000 -82.0 + 117.2500 58.5000 -82.0 + 118.5000 58.7500 -82.0 + 118.7500 57.5000 -82.0 + 117.7500 54.5000 -82.0 + 108.7500 45.5000 -82.0 +} -82.0 +{ -82.0 + 60.2500 60.5000 -82.0 + 58.5000 61.2500 -82.0 + 55.5000 64.2500 -82.0 + 55.2500 67.5000 -82.0 + 58.5000 69.7500 -82.0 + 61.2500 73.5000 -82.0 + 61.2500 78.5000 -82.0 + 55.2500 86.5000 -82.0 + 56.2500 88.5000 -82.0 + 55.5000 90.2500 -82.0 + 54.7500 88.5000 -82.0 + 53.5000 88.2500 -82.0 + 52.2500 90.5000 -82.0 + 31.2500 136.5000 -82.0 + 29.5000 143.2500 -82.0 + 29.2500 152.5000 -82.0 + 28.5000 154.2500 -82.0 + 28.2500 171.5000 -82.0 + 29.2500 173.5000 -82.0 + 30.2500 183.5000 -82.0 + 31.2500 185.5000 -82.0 + 31.5000 188.7500 -82.0 + 37.2500 201.5000 -82.0 + 41.2500 207.5000 -82.0 + 52.2500 218.5000 -82.0 + 56.5000 221.7500 -82.0 + 71.2500 227.5000 -82.0 + 80.5000 227.7500 -82.0 + 84.5000 229.7500 -82.0 + 91.2500 231.5000 -82.0 + 103.5000 232.7500 -82.0 + 113.5000 229.7500 -82.0 + 121.5000 229.7500 -82.0 + 123.5000 228.7500 -82.0 + 126.5000 228.7500 -82.0 + 134.7500 226.5000 -82.0 + 147.5000 220.7500 -82.0 + 154.5000 214.7500 -82.0 + 163.5000 203.7500 -82.0 + 171.5000 190.7500 -82.0 + 171.7500 188.5000 -82.0 + 173.7500 184.5000 -82.0 + 175.7500 175.5000 -82.0 + 177.5000 166.7500 -82.0 + 178.7500 143.5000 -82.0 + 177.7500 141.5000 -82.0 + 177.7500 137.5000 -82.0 + 176.7500 135.5000 -82.0 + 175.7500 129.5000 -82.0 + 173.7500 125.5000 -82.0 + 173.7500 123.5000 -82.0 + 162.7500 101.5000 -82.0 + 157.5000 93.2500 -82.0 + 153.7500 90.5000 -82.0 + 152.7500 88.5000 -82.0 + 150.5000 88.2500 -82.0 + 147.7500 83.5000 -82.0 + 148.7500 80.5000 -82.0 + 150.5000 79.7500 -82.0 + 153.7500 74.5000 -82.0 + 158.5000 72.7500 -82.0 + 159.5000 70.7500 -82.0 + 158.7500 67.5000 -82.0 + 153.5000 64.2500 -82.0 + 153.2500 67.5000 -82.0 + 150.5000 74.2500 -82.0 + 148.5000 75.2500 -82.0 + 143.5000 80.2500 -82.0 + 134.5000 85.2500 -82.0 + 126.5000 85.2500 -82.0 + 127.2500 87.5000 -82.0 + 128.5000 87.7500 -82.0 + 131.2500 91.5000 -82.0 + 143.5000 92.7500 -82.0 + 143.7500 90.5000 -82.0 + 141.7500 88.5000 -82.0 + 139.5000 90.2500 -82.0 + 135.5000 90.2500 -82.0 + 133.7500 89.5000 -82.0 + 136.5000 86.7500 -82.0 + 140.5000 86.7500 -82.0 + 140.7500 84.5000 -82.0 + 142.5000 82.7500 -82.0 + 143.2500 83.5000 -82.0 + 143.2500 85.5000 -82.0 + 146.2500 87.5000 -82.0 + 145.5000 91.2500 -82.0 + 148.5000 92.7500 -82.0 + 151.2500 95.5000 -82.0 + 153.2500 99.5000 -82.0 + 161.2500 108.5000 -82.0 + 165.2500 116.5000 -82.0 + 165.2500 118.5000 -82.0 + 167.2500 120.5000 -82.0 + 167.2500 123.5000 -82.0 + 170.2500 129.5000 -82.0 + 170.2500 132.5000 -82.0 + 171.2500 134.5000 -82.0 + 171.2500 140.5000 -82.0 + 170.2500 142.5000 -82.0 + 171.2500 144.5000 -82.0 + 171.2500 151.5000 -82.0 + 172.2500 153.5000 -82.0 + 172.2500 158.5000 -82.0 + 170.5000 163.2500 -82.0 + 170.2500 173.5000 -82.0 + 167.2500 181.5000 -82.0 + 154.2500 201.5000 -82.0 + 147.5000 208.2500 -82.0 + 143.5000 211.2500 -82.0 + 122.5000 222.2500 -82.0 + 120.5000 222.2500 -82.0 + 114.5000 224.2500 -82.0 + 113.7500 223.5000 -82.0 + 109.5000 223.2500 -82.0 + 106.5000 222.2500 -82.0 + 104.5000 223.2500 -82.0 + 82.5000 222.2500 -82.0 + 74.5000 220.2500 -82.0 + 56.5000 209.2500 -82.0 + 46.7500 199.5000 -82.0 + 37.7500 182.5000 -82.0 + 37.7500 180.5000 -82.0 + 35.7500 176.5000 -82.0 + 35.7500 172.5000 -82.0 + 34.7500 170.5000 -82.0 + 34.7500 158.5000 -82.0 + 35.5000 156.7500 -82.0 + 35.7500 145.5000 -82.0 + 34.7500 142.5000 -82.0 + 37.5000 136.7500 -82.0 + 40.7500 132.5000 -82.0 + 42.7500 128.5000 -82.0 + 47.7500 113.5000 -82.0 + 50.5000 110.7500 -82.0 + 51.7500 106.5000 -82.0 + 56.5000 97.7500 -82.0 + 60.5000 94.7500 -82.0 + 60.7500 92.5000 -82.0 + 65.7500 87.5000 -82.0 + 61.5000 87.2500 -82.0 + 59.7500 83.5000 -82.0 + 63.5000 80.7500 -82.0 + 66.5000 80.7500 -82.0 + 75.2500 85.5000 -82.0 + 81.5000 85.7500 -82.0 + 84.7500 84.5000 -82.0 + 85.7500 82.5000 -82.0 + 84.5000 83.2500 -82.0 + 80.5000 83.2500 -82.0 + 67.5000 78.2500 -82.0 + 63.7500 73.5000 -82.0 + 63.7500 71.5000 -82.0 + 61.7500 67.5000 -82.0 + 61.7500 63.5000 -82.0 + 62.5000 61.7500 -82.0 + 61.7500 60.5000 -82.0 +} -82.0 +{ -82.0 + 104.2500 68.5000 -82.0 + 104.2500 69.5000 -82.0 + 103.2500 72.5000 -82.0 + 104.5000 71.7500 -82.0 + 105.5000 72.7500 -82.0 + 107.5000 71.7500 -82.0 + 108.2500 72.5000 -82.0 + 110.5000 72.7500 -82.0 + 108.7500 70.5000 -82.0 + 108.5000 68.2500 -82.0 + 108.2500 70.5000 -82.0 + 106.5000 71.2500 -82.0 +} -82.0 +{ -82.0 + 93.2500 73.5000 -82.0 + 92.2500 76.5000 -82.0 + 94.5000 74.7500 -82.0 +} -82.0 +{ -82.0 + 117.2500 74.5000 -82.0 + 117.2500 76.5000 -82.0 + 118.5000 77.7500 -82.0 + 118.7500 74.5000 -82.0 +} -82.0 +{ -82.0 + 106.7500 49.5000 -82.0 + 107.5000 48.7500 -82.0 + 108.2500 49.5000 -82.0 + 108.2500 53.5000 -82.0 + 106.5000 54.2500 -82.0 + 105.7500 52.5000 -82.0 +} -82.0 +{ -82.0 + 150.7500 91.5000 -82.0 + 152.5000 90.7500 -82.0 + 153.2500 92.5000 -82.0 + 151.5000 93.2500 -82.0 +} -82.0 +v 193 z -84.000000 -82.0 +{ -64.0 + 106.2500 43.5000 -84.0 + 105.2500 44.5000 -84.0 + 96.5000 56.2500 -84.0 + 96.5000 60.7500 -84.0 + 96.7500 58.5000 -84.0 + 99.5000 56.7500 -84.0 + 103.5000 56.7500 -84.0 + 105.5000 54.7500 -84.0 + 105.7500 47.5000 -84.0 + 107.5000 46.7500 -84.0 + 109.2500 48.5000 -84.0 + 109.2500 52.5000 -84.0 + 108.2500 55.5000 -84.0 + 112.2500 57.5000 -84.0 + 115.5000 57.7500 -84.0 + 117.5000 58.7500 -84.0 + 117.7500 56.5000 -84.0 + 116.7500 53.5000 -84.0 + 112.7500 49.5000 -84.0 + 108.7500 43.5000 -84.0 +} -84.0 +{ -84.0 + 57.2500 62.5000 -84.0 + 55.5000 64.2500 -84.0 + 55.2500 68.5000 -84.0 + 59.2500 70.5000 -84.0 + 63.2500 78.5000 -84.0 + 62.2500 81.5000 -84.0 + 59.5000 84.2500 -84.0 + 59.2500 86.5000 -84.0 + 60.2500 88.5000 -84.0 + 56.5000 90.2500 -84.0 + 55.7500 89.5000 -84.0 + 55.7500 87.5000 -84.0 + 54.5000 88.2500 -84.0 + 51.2500 93.5000 -84.0 + 31.2500 135.5000 -84.0 + 28.5000 149.2500 -84.0 + 28.2500 170.5000 -84.0 + 29.2500 172.5000 -84.0 + 29.2500 177.5000 -84.0 + 30.2500 179.5000 -84.0 + 31.2500 186.5000 -84.0 + 35.2500 197.5000 -84.0 + 41.2500 207.5000 -84.0 + 53.2500 219.5000 -84.0 + 60.2500 223.5000 -84.0 + 71.2500 227.5000 -84.0 + 82.5000 228.7500 -84.0 + 86.5000 230.7500 -84.0 + 93.2500 232.5000 -84.0 + 107.5000 232.7500 -84.0 + 111.5000 230.7500 -84.0 + 116.5000 230.7500 -84.0 + 122.5000 228.7500 -84.0 + 126.5000 228.7500 -84.0 + 128.5000 227.7500 -84.0 + 130.5000 227.7500 -84.0 + 147.5000 220.7500 -84.0 + 156.5000 212.7500 -84.0 + 163.7500 203.5000 -84.0 + 172.7500 187.5000 -84.0 + 176.5000 173.7500 -84.0 + 177.7500 160.5000 -84.0 + 178.5000 158.7500 -84.0 + 178.7500 141.5000 -84.0 + 176.7500 134.5000 -84.0 + 175.7500 128.5000 -84.0 + 173.7500 124.5000 -84.0 + 173.7500 122.5000 -84.0 + 168.7500 112.5000 -84.0 + 157.7500 93.5000 -84.0 + 152.5000 90.2500 -84.0 + 151.5000 92.2500 -84.0 + 149.7500 91.5000 -84.0 + 150.7500 89.5000 -84.0 + 147.7500 88.5000 -84.0 + 149.5000 87.7500 -84.0 + 149.7500 85.5000 -84.0 + 145.7500 84.5000 -84.0 + 147.5000 79.7500 -84.0 + 149.7500 80.5000 -84.0 + 151.7500 76.5000 -84.0 + 154.5000 73.7500 -84.0 + 159.5000 73.7500 -84.0 + 159.7500 71.5000 -84.0 + 158.7500 68.5000 -84.0 + 155.7500 65.5000 -84.0 + 154.5000 66.2500 -84.0 + 152.2500 72.5000 -84.0 + 146.5000 78.2500 -84.0 + 138.5000 84.2500 -84.0 + 139.5000 86.7500 -84.0 + 141.5000 85.7500 -84.0 + 143.2500 86.5000 -84.0 + 142.5000 88.2500 -84.0 + 140.5000 88.2500 -84.0 + 134.5000 90.2500 -84.0 + 133.7500 88.5000 -84.0 + 135.5000 86.2500 -84.0 + 131.5000 88.2500 -84.0 + 124.2500 87.5000 -84.0 + 128.2500 92.5000 -84.0 + 135.5000 92.7500 -84.0 + 137.5000 90.7500 -84.0 + 144.5000 90.7500 -84.0 + 147.5000 91.7500 -84.0 + 151.2500 94.5000 -84.0 + 155.2500 101.5000 -84.0 + 163.2500 109.5000 -84.0 + 165.2500 113.5000 -84.0 + 165.2500 115.5000 -84.0 + 168.2500 119.5000 -84.0 + 168.2500 121.5000 -84.0 + 170.2500 125.5000 -84.0 + 170.2500 127.5000 -84.0 + 171.2500 129.5000 -84.0 + 171.2500 135.5000 -84.0 + 172.2500 137.5000 -84.0 + 171.5000 139.2500 -84.0 + 171.2500 148.5000 -84.0 + 173.2500 152.5000 -84.0 + 173.2500 155.5000 -84.0 + 170.5000 164.2500 -84.0 + 170.2500 173.5000 -84.0 + 168.5000 177.2500 -84.0 + 168.2500 179.5000 -84.0 + 161.2500 191.5000 -84.0 + 154.2500 201.5000 -84.0 + 147.5000 208.2500 -84.0 + 132.5000 218.2500 -84.0 + 130.5000 218.2500 -84.0 + 122.5000 222.2500 -84.0 + 120.5000 222.2500 -84.0 + 116.5000 224.2500 -84.0 + 104.5000 223.2500 -84.0 + 102.5000 224.2500 -84.0 + 99.5000 224.2500 -84.0 + 94.7500 222.5000 -84.0 + 79.5000 222.2500 -84.0 + 70.7500 218.5000 -84.0 + 60.5000 211.2500 -84.0 + 56.5000 209.2500 -84.0 + 46.7500 199.5000 -84.0 + 39.7500 187.5000 -84.0 + 39.7500 185.5000 -84.0 + 35.7500 177.5000 -84.0 + 35.7500 174.5000 -84.0 + 34.7500 172.5000 -84.0 + 34.7500 156.5000 -84.0 + 35.5000 154.7500 -84.0 + 35.7500 145.5000 -84.0 + 34.7500 143.5000 -84.0 + 35.5000 141.7500 -84.0 + 35.7500 137.5000 -84.0 + 40.5000 131.7500 -84.0 + 49.5000 108.7500 -84.0 + 49.7500 106.5000 -84.0 + 52.5000 102.7500 -84.0 + 52.7500 100.5000 -84.0 + 55.7500 97.5000 -84.0 + 62.5000 92.7500 -84.0 + 69.5000 91.7500 -84.0 + 73.5000 89.7500 -84.0 + 83.7500 87.5000 -84.0 + 85.5000 84.2500 -84.0 + 83.5000 85.2500 -84.0 + 78.5000 85.2500 -84.0 + 72.7500 81.5000 -84.0 + 70.5000 81.2500 -84.0 + 64.7500 74.5000 -84.0 + 60.7500 66.5000 -84.0 + 60.7500 62.5000 -84.0 +} -84.0 +{ -84.0 + 109.2500 70.5000 -84.0 + 109.5000 73.7500 -84.0 + 111.5000 74.7500 -84.0 + 112.5000 74.2500 -84.0 + 110.5000 73.2500 -84.0 +} -84.0 +{ -84.0 + 94.2500 75.5000 -84.0 + 93.2500 76.5000 -84.0 + 94.7500 76.5000 -84.0 +} -84.0 +{ -84.0 + 115.2500 75.5000 -84.0 + 116.2500 76.5000 -84.0 + 116.7500 75.5000 -84.0 +} -84.0 +{ -84.0 + 63.7500 87.5000 -84.0 + 64.5000 86.7500 -84.0 + 67.5000 86.7500 -84.0 + 69.2500 88.5000 -84.0 + 67.5000 89.2500 -84.0 + 63.5000 91.2500 -84.0 + 62.7500 90.5000 -84.0 +} -84.0 +{ -84.0 + 144.7500 89.5000 -84.0 + 145.5000 88.7500 -84.0 + 146.2500 89.5000 -84.0 + 145.5000 90.2500 -84.0 +} -84.0 +v 247 z -86.000000 -64.0 +{ -86.0 + 107.2500 40.5000 -86.0 + 105.2500 42.5000 -86.0 + 103.2500 46.5000 -86.0 + 97.5000 54.2500 -86.0 + 97.2500 57.5000 -86.0 + 98.5000 57.7500 -86.0 + 101.7500 56.5000 -86.0 + 105.5000 48.7500 -86.0 + 105.7500 46.5000 -86.0 + 107.5000 44.7500 -86.0 + 109.2500 46.5000 -86.0 + 109.2500 49.5000 -86.0 + 111.2500 53.5000 -86.0 + 111.2500 56.5000 -86.0 + 113.2500 58.5000 -86.0 + 114.5000 57.7500 -86.0 + 117.5000 57.7500 -86.0 + 117.7500 56.5000 -86.0 + 114.7500 50.5000 -86.0 + 111.7500 47.5000 -86.0 + 111.7500 44.5000 -86.0 + 108.7500 40.5000 -86.0 +} -86.0 +{ -86.0 + 96.2500 58.5000 -86.0 + 96.2500 60.5000 -86.0 + 96.7500 59.5000 -86.0 +} -86.0 +{ -86.0 + 57.2500 63.5000 -86.0 + 55.5000 65.2500 -86.0 + 55.2500 69.5000 -86.0 + 59.2500 70.5000 -86.0 + 62.2500 76.5000 -86.0 + 65.2500 77.5000 -86.0 + 65.2500 81.5000 -86.0 + 68.5000 84.7500 -86.0 + 70.5000 83.7500 -86.0 + 75.5000 84.7500 -86.0 + 76.2500 86.5000 -86.0 + 78.2500 87.5000 -86.0 + 78.7500 86.5000 -86.0 + 76.5000 84.2500 -86.0 + 70.5000 81.2500 -86.0 + 63.7500 73.5000 -86.0 + 60.7500 67.5000 -86.0 + 60.7500 65.5000 -86.0 + 59.7500 63.5000 -86.0 +} -86.0 +{ -86.0 + 154.2500 67.5000 -86.0 + 153.5000 68.2500 -86.0 + 153.2500 70.5000 -86.0 + 152.2500 73.5000 -86.0 + 144.2500 80.5000 -86.0 + 143.2500 82.5000 -86.0 + 145.5000 82.7500 -86.0 + 147.5000 80.7500 -86.0 + 148.2500 81.5000 -86.0 + 154.5000 74.7500 -86.0 + 159.5000 74.7500 -86.0 + 160.7500 73.5000 -86.0 + 159.7500 71.5000 -86.0 + 159.7500 69.5000 -86.0 + 157.7500 67.5000 -86.0 +} -86.0 +{ -86.0 + 114.2500 76.5000 -86.0 + 113.5000 77.2500 -86.0 + 115.2500 78.5000 -86.0 + 115.7500 77.5000 -86.0 +} -86.0 +{ -86.0 + 63.2500 82.5000 -86.0 + 63.2500 83.5000 -86.0 + 62.5000 85.2500 -86.0 + 62.2500 87.5000 -86.0 + 59.5000 91.2500 -86.0 + 57.5000 91.2500 -86.0 + 55.7500 89.5000 -86.0 + 56.7500 87.5000 -86.0 + 54.5000 89.2500 -86.0 + 51.2500 94.5000 -86.0 + 36.5000 123.2500 -86.0 + 36.2500 125.5000 -86.0 + 30.2500 137.5000 -86.0 + 29.2500 146.5000 -86.0 + 28.5000 148.2500 -86.0 + 28.2500 168.5000 -86.0 + 29.2500 170.5000 -86.0 + 29.2500 175.5000 -86.0 + 30.2500 177.5000 -86.0 + 30.2500 181.5000 -86.0 + 31.2500 183.5000 -86.0 + 31.2500 185.5000 -86.0 + 32.2500 187.5000 -86.0 + 32.5000 190.7500 -86.0 + 37.2500 201.5000 -86.0 + 41.2500 206.5000 -86.0 + 42.2500 208.5000 -86.0 + 51.2500 217.5000 -86.0 + 55.5000 220.7500 -86.0 + 65.5000 225.7500 -86.0 + 74.5000 227.7500 -86.0 + 76.2500 228.5000 -86.0 + 80.5000 228.7500 -86.0 + 82.2500 229.5000 -86.0 + 88.5000 231.7500 -86.0 + 90.2500 232.5000 -86.0 + 94.5000 232.7500 -86.0 + 96.2500 233.5000 -86.0 + 104.5000 233.7500 -86.0 + 106.5000 232.7500 -86.0 + 108.5000 232.7500 -86.0 + 112.5000 230.7500 -86.0 + 116.5000 230.7500 -86.0 + 118.5000 229.7500 -86.0 + 120.5000 229.7500 -86.0 + 122.5000 228.7500 -86.0 + 126.5000 228.7500 -86.0 + 128.5000 227.7500 -86.0 + 130.5000 227.7500 -86.0 + 134.5000 225.7500 -86.0 + 136.5000 225.7500 -86.0 + 148.5000 219.7500 -86.0 + 155.5000 213.7500 -86.0 + 162.5000 204.7500 -86.0 + 166.7500 198.5000 -86.0 + 171.7500 189.5000 -86.0 + 172.7500 184.5000 -86.0 + 174.7500 180.5000 -86.0 + 175.7500 175.5000 -86.0 + 176.5000 173.7500 -86.0 + 176.7500 169.5000 -86.0 + 177.5000 167.7500 -86.0 + 177.7500 161.5000 -86.0 + 178.5000 159.7500 -86.0 + 178.7500 140.5000 -86.0 + 177.7500 138.5000 -86.0 + 177.7500 135.5000 -86.0 + 176.7500 133.5000 -86.0 + 176.7500 131.5000 -86.0 + 173.5000 122.2500 -86.0 + 170.7500 115.5000 -86.0 + 165.7500 107.5000 -86.0 + 161.7500 100.5000 -86.0 + 160.7500 98.5000 -86.0 + 154.5000 91.2500 -86.0 + 150.5000 89.2500 -86.0 + 148.5000 91.2500 -86.0 + 146.7500 87.5000 -86.0 + 145.5000 87.2500 -86.0 + 143.5000 85.2500 -86.0 + 143.2500 87.5000 -86.0 + 142.5000 89.2500 -86.0 + 140.5000 89.2500 -86.0 + 137.5000 88.2500 -86.0 + 135.5000 89.2500 -86.0 + 133.5000 89.2500 -86.0 + 131.5000 90.2500 -86.0 + 125.5000 90.2500 -86.0 + 122.7500 87.5000 -86.0 + 122.2500 88.5000 -86.0 + 127.5000 94.7500 -86.0 + 130.5000 93.7500 -86.0 + 133.5000 90.7500 -86.0 + 142.5000 90.7500 -86.0 + 145.5000 91.7500 -86.0 + 147.2500 92.5000 -86.0 + 150.5000 92.7500 -86.0 + 153.2500 97.5000 -86.0 + 154.2500 99.5000 -86.0 + 161.2500 106.5000 -86.0 + 164.2500 110.5000 -86.0 + 169.2500 119.5000 -86.0 + 169.2500 121.5000 -86.0 + 171.2500 125.5000 -86.0 + 171.2500 129.5000 -86.0 + 172.2500 131.5000 -86.0 + 172.2500 138.5000 -86.0 + 171.2500 143.5000 -86.0 + 172.2500 145.5000 -86.0 + 172.2500 147.5000 -86.0 + 174.2500 151.5000 -86.0 + 172.5000 154.2500 -86.0 + 171.2500 165.5000 -86.0 + 170.5000 167.2500 -86.0 + 170.2500 172.5000 -86.0 + 169.2500 177.5000 -86.0 + 165.2500 183.5000 -86.0 + 163.2500 187.5000 -86.0 + 158.2500 195.5000 -86.0 + 157.2500 197.5000 -86.0 + 150.5000 205.2500 -86.0 + 143.5000 211.2500 -86.0 + 135.5000 216.2500 -86.0 + 123.5000 222.2500 -86.0 + 120.5000 222.2500 -86.0 + 116.5000 224.2500 -86.0 + 112.5000 224.2500 -86.0 + 107.5000 223.2500 -86.0 + 105.5000 224.2500 -86.0 + 99.5000 224.2500 -86.0 + 92.5000 223.2500 -86.0 + 90.7500 222.5000 -86.0 + 78.5000 222.2500 -86.0 + 68.5000 217.2500 -86.0 + 64.7500 214.5000 -86.0 + 58.5000 210.2500 -86.0 + 56.5000 209.2500 -86.0 + 46.7500 199.5000 -86.0 + 43.7500 194.5000 -86.0 + 39.7500 187.5000 -86.0 + 39.7500 185.5000 -86.0 + 35.7500 177.5000 -86.0 + 35.7500 175.5000 -86.0 + 34.7500 173.5000 -86.0 + 34.7500 154.5000 -86.0 + 35.5000 152.7500 -86.0 + 35.7500 146.5000 -86.0 + 34.7500 144.5000 -86.0 + 34.7500 141.5000 -86.0 + 36.5000 137.7500 -86.0 + 36.7500 133.5000 -86.0 + 38.5000 132.7500 -86.0 + 38.7500 131.5000 -86.0 + 40.5000 129.7500 -86.0 + 41.7500 125.5000 -86.0 + 43.7500 120.5000 -86.0 + 44.5000 118.7500 -86.0 + 47.7500 109.5000 -86.0 + 50.7500 105.5000 -86.0 + 52.7500 101.5000 -86.0 + 53.5000 99.7500 -86.0 + 58.5000 93.7500 -86.0 + 62.5000 90.7500 -86.0 + 64.5000 90.7500 -86.0 + 66.5000 89.7500 -86.0 + 69.5000 89.7500 -86.0 + 71.2500 90.5000 -86.0 + 78.5000 90.7500 -86.0 + 80.5000 89.7500 -86.0 + 82.5000 89.7500 -86.0 + 86.5000 87.7500 -86.0 + 86.5000 86.2500 -86.0 + 82.5000 88.2500 -86.0 + 80.5000 88.2500 -86.0 + 77.5000 89.2500 -86.0 + 72.5000 87.2500 -86.0 + 70.5000 88.2500 -86.0 + 69.5000 87.2500 -86.0 + 67.5000 86.2500 -86.0 + 67.2500 87.5000 -86.0 + 64.5000 89.2500 -86.0 + 63.7500 87.5000 -86.0 + 64.5000 85.7500 -86.0 + 64.7500 82.5000 -86.0 +} -86.0 +v 190 z -88.000000 -64.0 +{ -88.0 + 108.2500 35.5000 -88.0 + 106.2500 36.5000 -88.0 + 104.5000 40.2500 -88.0 + 104.2500 44.5000 -88.0 + 97.5000 55.2500 -88.0 + 97.2500 57.5000 -88.0 + 98.5000 56.7500 -88.0 + 101.5000 56.7500 -88.0 + 102.5000 54.7500 -88.0 + 103.7500 46.5000 -88.0 + 106.5000 42.7500 -88.0 + 109.5000 42.7500 -88.0 + 111.2500 45.5000 -88.0 + 111.2500 53.5000 -88.0 + 114.2500 57.5000 -88.0 + 117.7500 57.5000 -88.0 + 115.7500 53.5000 -88.0 + 115.7500 51.5000 -88.0 + 111.7500 45.5000 -88.0 + 112.7500 43.5000 -88.0 + 111.7500 41.5000 -88.0 + 111.7500 39.5000 -88.0 + 109.7500 35.5000 -88.0 +} -88.0 +{ -88.0 + 56.2500 64.5000 -88.0 + 54.5000 67.2500 -88.0 + 54.2500 69.5000 -88.0 + 55.2500 71.5000 -88.0 + 56.5000 70.7500 -88.0 + 59.5000 70.7500 -88.0 + 62.2500 76.5000 -88.0 + 64.7500 76.5000 -88.0 + 61.7500 70.5000 -88.0 + 61.7500 68.5000 -88.0 + 59.7500 64.5000 -88.0 +} -88.0 +{ -88.0 + 155.2500 67.5000 -88.0 + 152.5000 70.2500 -88.0 + 151.2500 74.5000 -88.0 + 147.5000 78.2500 -88.0 + 145.2500 79.5000 -88.0 + 144.2500 81.5000 -88.0 + 147.5000 81.7500 -88.0 + 155.5000 74.7500 -88.0 + 158.5000 75.7500 -88.0 + 159.2500 77.5000 -88.0 + 160.5000 77.7500 -88.0 + 160.7500 71.5000 -88.0 + 157.7500 67.5000 -88.0 +} -88.0 +{ -88.0 + 65.2500 77.5000 -88.0 + 67.2500 81.5000 -88.0 + 67.2500 83.5000 -88.0 + 69.5000 83.7500 -88.0 + 71.5000 82.7500 -88.0 + 66.7500 77.5000 -88.0 +} -88.0 +{ -88.0 + 95.2500 79.5000 -88.0 + 93.5000 81.2500 -88.0 + 93.2500 83.5000 -88.0 + 96.5000 80.7500 -88.0 + 99.5000 80.7500 -88.0 + 99.7500 79.5000 -88.0 +} -88.0 +{ -88.0 + 115.2500 79.5000 -88.0 + 114.2500 81.5000 -88.0 + 117.2500 85.5000 -88.0 + 119.7500 87.5000 -88.0 + 117.7500 83.5000 -88.0 + 117.7500 81.5000 -88.0 +} -88.0 +{ -88.0 + 90.2500 85.5000 -88.0 + 90.2500 86.5000 -88.0 + 91.7500 85.5000 -88.0 +} -88.0 +{ -88.0 + 62.2500 86.5000 -88.0 + 61.2500 88.5000 -88.0 + 58.5000 91.2500 -88.0 + 57.7500 90.5000 -88.0 + 57.7500 87.5000 -88.0 + 55.5000 88.2500 -88.0 + 45.2500 105.5000 -88.0 + 31.2500 134.5000 -88.0 + 28.5000 148.2500 -88.0 + 28.2500 166.5000 -88.0 + 29.2500 168.5000 -88.0 + 29.2500 174.5000 -88.0 + 30.2500 176.5000 -88.0 + 30.2500 180.5000 -88.0 + 31.2500 182.5000 -88.0 + 33.2500 192.5000 -88.0 + 39.2500 204.5000 -88.0 + 47.2500 213.5000 -88.0 + 54.5000 219.7500 -88.0 + 62.5000 224.7500 -88.0 + 76.2500 228.5000 -88.0 + 80.5000 228.7500 -88.0 + 86.5000 231.7500 -88.0 + 93.2500 233.5000 -88.0 + 106.5000 233.7500 -88.0 + 110.5000 231.7500 -88.0 + 112.5000 231.7500 -88.0 + 123.5000 228.7500 -88.0 + 129.5000 227.7500 -88.0 + 146.5000 220.7500 -88.0 + 154.5000 214.7500 -88.0 + 165.7500 199.5000 -88.0 + 173.5000 183.7500 -88.0 + 176.7500 170.5000 -88.0 + 178.5000 161.7500 -88.0 + 178.7500 140.5000 -88.0 + 177.7500 138.5000 -88.0 + 176.7500 130.5000 -88.0 + 168.7500 111.5000 -88.0 + 155.7500 92.5000 -88.0 + 150.7500 89.5000 -88.0 + 147.5000 90.2500 -88.0 + 145.7500 88.5000 -88.0 + 144.5000 89.2500 -88.0 + 141.5000 88.2500 -88.0 + 137.5000 90.2500 -88.0 + 132.5000 89.2500 -88.0 + 130.2500 91.5000 -88.0 + 135.5000 91.7500 -88.0 + 137.5000 90.7500 -88.0 + 143.5000 90.7500 -88.0 + 148.2500 92.5000 -88.0 + 149.5000 91.7500 -88.0 + 151.2500 93.5000 -88.0 + 153.2500 97.5000 -88.0 + 163.2500 107.5000 -88.0 + 166.2500 111.5000 -88.0 + 171.2500 121.5000 -88.0 + 172.2500 130.5000 -88.0 + 173.2500 132.5000 -88.0 + 173.2500 145.5000 -88.0 + 174.2500 147.5000 -88.0 + 174.2500 149.5000 -88.0 + 172.5000 154.2500 -88.0 + 170.2500 174.5000 -88.0 + 165.2500 184.5000 -88.0 + 155.2500 200.5000 -88.0 + 148.5000 207.2500 -88.0 + 130.5000 219.2500 -88.0 + 128.5000 219.2500 -88.0 + 126.5000 221.2500 -88.0 + 120.5000 222.2500 -88.0 + 116.5000 224.2500 -88.0 + 107.5000 224.2500 -88.0 + 105.5000 225.2500 -88.0 + 104.7500 224.5000 -88.0 + 95.5000 224.2500 -88.0 + 86.7500 222.5000 -88.0 + 78.5000 222.2500 -88.0 + 66.5000 216.2500 -88.0 + 56.5000 209.2500 -88.0 + 47.7500 200.5000 -88.0 + 40.7500 189.5000 -88.0 + 40.7500 187.5000 -88.0 + 35.7500 177.5000 -88.0 + 35.7500 175.5000 -88.0 + 34.7500 173.5000 -88.0 + 34.7500 153.5000 -88.0 + 35.5000 151.7500 -88.0 + 35.7500 146.5000 -88.0 + 34.7500 144.5000 -88.0 + 34.7500 140.5000 -88.0 + 36.5000 136.7500 -88.0 + 36.7500 134.5000 -88.0 + 35.7500 132.5000 -88.0 + 40.7500 126.5000 -88.0 + 41.7500 121.5000 -88.0 + 44.7500 115.5000 -88.0 + 45.7500 110.5000 -88.0 + 50.7500 105.5000 -88.0 + 56.7500 93.5000 -88.0 + 65.5000 88.7500 -88.0 + 71.5000 88.7500 -88.0 + 77.2500 91.5000 -88.0 + 80.5000 91.7500 -88.0 + 82.5000 90.7500 -88.0 + 85.5000 90.7500 -88.0 + 87.5000 88.7500 -88.0 + 86.5000 88.2500 -88.0 + 80.5000 90.2500 -88.0 + 76.7500 86.5000 -88.0 + 74.5000 87.2500 -88.0 + 72.7500 86.5000 -88.0 + 71.5000 87.2500 -88.0 + 67.5000 87.2500 -88.0 + 64.5000 88.2500 -88.0 + 63.7500 86.5000 -88.0 +} -88.0 +{ -88.0 + 120.2500 88.5000 -88.0 + 125.2500 96.5000 -88.0 + 127.5000 95.7500 -88.0 + 127.7500 93.5000 -88.0 + 126.5000 93.2500 -88.0 +} -88.0 +///v 207 z -90.000000 -90.0 +{ -90.0 + 106.2500 33.5000 -90.0 + 105.5000 34.2500 -90.0 + 107.2500 35.5000 -90.0 + 109.5000 35.7500 -90.0 + 111.5000 34.7500 -90.0 + 110.7500 33.5000 -90.0 +} -90.0 +{ -90.0 + 104.2500 37.5000 -90.0 + 103.5000 38.2500 -90.0 + 103.2500 44.5000 -90.0 + 99.5000 49.2500 -90.0 + 99.2500 51.5000 -90.0 + 97.2500 56.5000 -90.0 + 98.5000 56.7500 -90.0 + 100.5000 55.7500 -90.0 + 102.5000 55.7500 -90.0 + 102.7500 49.5000 -90.0 + 103.7500 44.5000 -90.0 + 104.5000 42.7500 -90.0 + 104.7500 38.5000 -90.0 +} -90.0 +{ -90.0 + 112.2500 37.5000 -90.0 + 112.2500 46.5000 -90.0 + 111.2500 51.5000 -90.0 + 114.2500 54.5000 -90.0 + 114.2500 57.5000 -90.0 + 116.5000 57.7500 -90.0 + 115.7500 50.5000 -90.0 + 112.7500 44.5000 -90.0 + 113.5000 42.7500 -90.0 + 113.7500 37.5000 -90.0 +} -90.0 +{ -90.0 + 57.2500 64.5000 -90.0 + 53.5000 68.2500 -90.0 + 53.2500 71.5000 -90.0 + 54.5000 72.7500 -90.0 + 58.5000 70.7500 -90.0 + 60.2500 71.5000 -90.0 + 63.2500 76.5000 -90.0 + 63.2500 78.5000 -90.0 + 64.5000 77.7500 -90.0 + 64.7500 75.5000 -90.0 + 61.7500 69.5000 -90.0 + 61.7500 66.5000 -90.0 + 59.7500 64.5000 -90.0 +} -90.0 +{ -90.0 + 155.2500 67.5000 -90.0 + 152.5000 69.2500 -90.0 + 151.2500 73.5000 -90.0 + 145.5000 80.2500 -90.0 + 147.2500 81.5000 -90.0 + 148.5000 79.7500 -90.0 + 156.5000 74.7500 -90.0 + 159.2500 78.5000 -90.0 + 161.5000 78.7500 -90.0 + 161.7500 74.5000 -90.0 + 158.7500 68.5000 -90.0 +} -90.0 +{ -90.0 + 105.2500 81.5000 -90.0 + 104.5000 82.2500 -90.0 + 101.5000 82.2500 -90.0 + 101.2500 84.5000 -90.0 + 104.2500 86.5000 -90.0 + 108.5000 84.7500 -90.0 + 108.7500 83.5000 -90.0 +} -90.0 +{ -90.0 + 93.2500 84.5000 -90.0 + 93.2500 85.5000 -90.0 + 90.5000 88.7500 -90.0 + 94.5000 86.7500 -90.0 + 94.7500 85.5000 -90.0 +} -90.0 +{ -90.0 + 117.2500 85.5000 -90.0 + 116.5000 87.2500 -90.0 + 114.5000 87.2500 -90.0 + 114.5000 88.7500 -90.0 + 116.5000 89.7500 -90.0 + 120.2500 93.5000 -90.0 + 123.5000 98.7500 -90.0 + 125.5000 97.7500 -90.0 + 125.7500 95.5000 -90.0 + 121.5000 93.2500 -90.0 +} -90.0 +{ -90.0 + 66.2500 86.5000 -90.0 + 64.5000 88.2500 -90.0 + 61.5000 87.2500 -90.0 + 61.2500 88.5000 -90.0 + 59.5000 89.2500 -90.0 + 58.7500 87.5000 -90.0 + 57.5000 87.2500 -90.0 + 55.2500 89.5000 -90.0 + 48.5000 100.2500 -90.0 + 32.2500 130.5000 -90.0 + 28.5000 147.2500 -90.0 + 28.2500 164.5000 -90.0 + 29.2500 166.5000 -90.0 + 29.2500 173.5000 -90.0 + 30.2500 175.5000 -90.0 + 30.2500 179.5000 -90.0 + 31.2500 181.5000 -90.0 + 32.2500 187.5000 -90.0 + 38.2500 202.5000 -90.0 + 46.2500 212.5000 -90.0 + 56.5000 220.7500 -90.0 + 63.2500 224.5000 -90.0 + 74.5000 227.7500 -90.0 + 92.2500 233.5000 -90.0 + 106.5000 233.7500 -90.0 + 108.5000 232.7500 -90.0 + 110.5000 232.7500 -90.0 + 114.5000 230.7500 -90.0 + 116.5000 230.7500 -90.0 + 118.5000 229.7500 -90.0 + 122.5000 229.7500 -90.0 + 126.5000 227.7500 -90.0 + 129.5000 227.7500 -90.0 + 133.5000 225.7500 -90.0 + 135.5000 225.7500 -90.0 + 150.5000 217.7500 -90.0 + 161.7500 205.5000 -90.0 + 166.7500 197.5000 -90.0 + 172.7500 185.5000 -90.0 + 173.7500 180.5000 -90.0 + 175.5000 176.7500 -90.0 + 178.5000 162.7500 -90.0 + 178.7500 141.5000 -90.0 + 177.7500 139.5000 -90.0 + 177.7500 133.5000 -90.0 + 175.7500 129.5000 -90.0 + 175.7500 126.5000 -90.0 + 171.7500 118.5000 -90.0 + 171.7500 116.5000 -90.0 + 167.5000 109.2500 -90.0 + 155.5000 93.2500 -90.0 + 151.7500 90.5000 -90.0 + 146.5000 90.2500 -90.0 + 142.5000 88.2500 -90.0 + 138.5000 90.2500 -90.0 + 135.5000 90.2500 -90.0 + 133.7500 89.5000 -90.0 + 130.5000 91.2500 -90.0 + 130.5000 92.7500 -90.0 + 137.5000 90.7500 -90.0 + 144.5000 90.7500 -90.0 + 153.2500 94.5000 -90.0 + 153.2500 96.5000 -90.0 + 156.2500 99.5000 -90.0 + 159.5000 104.7500 -90.0 + 161.5000 105.7500 -90.0 + 166.2500 111.5000 -90.0 + 169.2500 116.5000 -90.0 + 169.2500 118.5000 -90.0 + 173.2500 126.5000 -90.0 + 173.2500 130.5000 -90.0 + 174.2500 132.5000 -90.0 + 174.2500 141.5000 -90.0 + 175.2500 144.5000 -90.0 + 172.5000 156.2500 -90.0 + 170.2500 174.5000 -90.0 + 166.5000 180.2500 -90.0 + 166.2500 182.5000 -90.0 + 157.2500 197.5000 -90.0 + 151.5000 204.2500 -90.0 + 140.5000 213.2500 -90.0 + 125.5000 221.2500 -90.0 + 123.5000 221.2500 -90.0 + 119.5000 223.2500 -90.0 + 117.5000 223.2500 -90.0 + 115.5000 224.2500 -90.0 + 109.5000 224.2500 -90.0 + 107.5000 225.2500 -90.0 + 98.5000 223.2500 -90.0 + 92.5000 225.2500 -90.0 + 84.7500 222.5000 -90.0 + 78.5000 222.2500 -90.0 + 66.5000 216.2500 -90.0 + 56.5000 209.2500 -90.0 + 47.7500 200.5000 -90.0 + 44.7500 196.5000 -90.0 + 37.7500 182.5000 -90.0 + 37.7500 180.5000 -90.0 + 35.7500 176.5000 -90.0 + 35.7500 173.5000 -90.0 + 34.7500 171.5000 -90.0 + 34.7500 159.5000 -90.0 + 33.7500 156.5000 -90.0 + 34.7500 154.5000 -90.0 + 35.7500 147.5000 -90.0 + 34.7500 145.5000 -90.0 + 35.7500 129.5000 -90.0 + 37.7500 127.5000 -90.0 + 41.5000 120.7500 -90.0 + 41.7500 118.5000 -90.0 + 46.7500 106.5000 -90.0 + 52.7500 100.5000 -90.0 + 54.5000 96.7500 -90.0 + 56.5000 95.7500 -90.0 + 56.7500 94.5000 -90.0 + 61.5000 89.7500 -90.0 + 70.5000 88.7500 -90.0 + 68.7500 86.5000 -90.0 +} -90.0 +{ -90.0 + 76.2500 86.5000 -90.0 + 75.5000 88.2500 -90.0 + 72.5000 88.2500 -90.0 + 80.2500 92.5000 -90.0 + 84.5000 92.7500 -90.0 + 87.5000 91.7500 -90.0 + 88.5000 90.2500 -90.0 + 86.5000 91.2500 -90.0 + 80.5000 91.2500 -90.0 + 77.7500 87.5000 -90.0 +} -90.0 +{ -90.0 + 103.2500 154.5000 -90.0 + 103.2500 155.5000 -90.0 + 104.5000 155.7500 -90.0 + 104.7500 154.5000 -90.0 +} -90.0 +v 178 z -92.000000 -64.0 +{ -92.0 + 114.2500 35.5000 -92.0 + 113.5000 36.2500 -92.0 + 113.2500 45.5000 -92.0 + 112.2500 50.5000 -92.0 + 114.2500 52.5000 -92.0 + 114.2500 56.5000 -92.0 + 115.5000 56.7500 -92.0 + 115.7500 48.5000 -92.0 + 114.7500 46.5000 -92.0 + 114.7500 36.5000 -92.0 +} -92.0 +{ -92.0 + 103.2500 36.5000 -92.0 + 102.2500 44.5000 -92.0 + 99.5000 48.2500 -92.0 + 99.5000 55.7500 -92.0 + 101.5000 54.7500 -92.0 + 103.7500 37.5000 -92.0 +} -92.0 +{ -92.0 + 57.2500 64.5000 -92.0 + 54.2500 67.5000 -92.0 + 53.2500 69.5000 -92.0 + 52.2500 74.5000 -92.0 + 53.5000 74.7500 -92.0 + 57.5000 71.7500 -92.0 + 60.5000 71.7500 -92.0 + 64.2500 78.5000 -92.0 + 65.5000 78.7500 -92.0 + 65.7500 76.5000 -92.0 + 62.7500 70.5000 -92.0 + 61.7500 65.5000 -92.0 + 59.7500 64.5000 -92.0 +} -92.0 +{ -92.0 + 153.2500 67.5000 -92.0 + 151.5000 70.2500 -92.0 + 151.2500 73.5000 -92.0 + 146.5000 78.2500 -92.0 + 146.2500 80.5000 -92.0 + 147.5000 80.7500 -92.0 + 153.5000 75.7500 -92.0 + 157.5000 75.7500 -92.0 + 161.2500 79.5000 -92.0 + 162.5000 77.7500 -92.0 + 161.7500 74.5000 -92.0 + 158.7500 68.5000 -92.0 + 156.7500 67.5000 -92.0 +} -92.0 +{ -92.0 + 94.2500 85.5000 -92.0 + 93.2500 87.5000 -92.0 + 94.7500 86.5000 -92.0 +} -92.0 +{ -92.0 + 60.2500 86.5000 -92.0 + 56.5000 88.2500 -92.0 + 56.2500 89.5000 -92.0 + 43.2500 108.5000 -92.0 + 31.5000 132.2500 -92.0 + 28.5000 147.2500 -92.0 + 28.2500 162.5000 -92.0 + 29.2500 164.5000 -92.0 + 29.2500 172.5000 -92.0 + 30.2500 174.5000 -92.0 + 30.2500 177.5000 -92.0 + 32.2500 184.5000 -92.0 + 33.2500 190.5000 -92.0 + 41.2500 206.5000 -92.0 + 51.2500 216.5000 -92.0 + 66.5000 225.7500 -92.0 + 80.5000 229.7500 -92.0 + 91.2500 233.5000 -92.0 + 107.5000 233.7500 -92.0 + 109.5000 232.7500 -92.0 + 111.5000 232.7500 -92.0 + 115.5000 230.7500 -92.0 + 122.5000 229.7500 -92.0 + 126.5000 227.7500 -92.0 + 129.5000 227.7500 -92.0 + 139.5000 223.7500 -92.0 + 147.5000 218.7500 -92.0 + 155.5000 212.7500 -92.0 + 164.7500 200.5000 -92.0 + 170.7500 188.5000 -92.0 + 175.7500 174.5000 -92.0 + 178.5000 163.7500 -92.0 + 178.7500 142.5000 -92.0 + 177.7500 140.5000 -92.0 + 177.7500 135.5000 -92.0 + 176.7500 133.5000 -92.0 + 175.7500 126.5000 -92.0 + 172.7500 120.5000 -92.0 + 170.7500 114.5000 -92.0 + 165.7500 106.5000 -92.0 + 155.5000 93.2500 -92.0 + 151.7500 90.5000 -92.0 + 140.5000 89.2500 -92.0 + 142.2500 90.5000 -92.0 + 145.5000 90.7500 -92.0 + 150.5000 92.7500 -92.0 + 154.2500 95.5000 -92.0 + 156.2500 101.5000 -92.0 + 155.2500 103.5000 -92.0 + 158.2500 105.5000 -92.0 + 161.5000 105.7500 -92.0 + 166.2500 110.5000 -92.0 + 169.2500 116.5000 -92.0 + 169.2500 118.5000 -92.0 + 171.2500 122.5000 -92.0 + 171.2500 124.5000 -92.0 + 174.2500 130.5000 -92.0 + 174.2500 150.5000 -92.0 + 172.2500 157.5000 -92.0 + 170.2500 173.5000 -92.0 + 163.2500 187.5000 -92.0 + 152.2500 203.5000 -92.0 + 150.5000 204.2500 -92.0 + 140.5000 213.2500 -92.0 + 128.5000 220.2500 -92.0 + 126.5000 220.2500 -92.0 + 122.5000 222.2500 -92.0 + 109.5000 225.2500 -92.0 + 105.5000 223.2500 -92.0 + 103.5000 224.2500 -92.0 + 102.7500 223.5000 -92.0 + 97.5000 223.2500 -92.0 + 93.5000 225.2500 -92.0 + 89.5000 225.2500 -92.0 + 84.5000 223.2500 -92.0 + 79.5000 222.2500 -92.0 + 62.5000 214.2500 -92.0 + 52.7500 205.5000 -92.0 + 43.7500 195.5000 -92.0 + 43.7500 193.5000 -92.0 + 37.7500 181.5000 -92.0 + 37.7500 179.5000 -92.0 + 35.7500 175.5000 -92.0 + 35.7500 171.5000 -92.0 + 34.7500 169.5000 -92.0 + 34.7500 163.5000 -92.0 + 33.7500 161.5000 -92.0 + 34.7500 142.5000 -92.0 + 33.7500 140.5000 -92.0 + 33.7500 138.5000 -92.0 + 36.7500 125.5000 -92.0 + 39.5000 121.7500 -92.0 + 39.7500 119.5000 -92.0 + 45.7500 107.5000 -92.0 + 54.5000 95.7500 -92.0 + 56.5000 94.7500 -92.0 + 56.7500 93.5000 -92.0 + 63.5000 88.7500 -92.0 + 76.5000 88.7500 -92.0 + 77.5000 87.2500 -92.0 + 75.5000 86.2500 -92.0 + 73.5000 88.2500 -92.0 + 71.5000 88.2500 -92.0 + 69.7500 86.5000 -92.0 + 67.5000 86.2500 -92.0 + 62.5000 88.2500 -92.0 + 60.7500 87.5000 -92.0 + 61.7500 86.5000 -92.0 +} -92.0 +{ -92.0 + 102.2500 87.5000 -92.0 + 101.2500 89.5000 -92.0 + 102.7500 88.5000 -92.0 +} -92.0 +{ -92.0 + 78.2500 89.5000 -92.0 + 77.5000 90.2500 -92.0 + 78.2500 91.5000 -92.0 + 80.5000 91.7500 -92.0 +} -92.0 +{ -92.0 + 136.2500 90.5000 -92.0 + 132.5000 92.2500 -92.0 + 131.5000 91.2500 -92.0 + 128.5000 92.2500 -92.0 + 128.5000 93.7500 -92.0 + 130.5000 92.7500 -92.0 + 133.5000 92.7500 -92.0 + 137.5000 90.7500 -92.0 + 139.7500 90.5000 -92.0 +} -92.0 +{ -92.0 + 83.2500 93.5000 -92.0 + 83.5000 94.7500 -92.0 + 87.5000 96.7500 -92.0 + 89.5000 93.2500 -92.0 + 86.5000 94.2500 -92.0 +} -92.0 +{ -92.0 + 123.2500 98.5000 -92.0 + 121.5000 99.2500 -92.0 + 121.2500 100.5000 -92.0 + 123.5000 100.7500 -92.0 +} -92.0 +v 171 z -94.000000 -92.0 +{ -64.0 + 114.2500 35.5000 -94.0 + 114.2500 48.5000 -94.0 + 113.5000 50.2500 -94.0 + 115.2500 51.5000 -94.0 + 114.2500 54.5000 -94.0 + 115.5000 55.7500 -94.0 + 116.7500 49.5000 -94.0 + 115.7500 47.5000 -94.0 + 115.7500 38.5000 -94.0 +} -94.0 +{ -94.0 + 102.2500 38.5000 -94.0 + 102.2500 40.5000 -94.0 + 98.2500 48.5000 -94.0 + 99.2500 50.5000 -94.0 + 99.2500 54.5000 -94.0 + 101.5000 54.7500 -94.0 + 101.7500 52.5000 -94.0 + 100.7500 50.5000 -94.0 + 102.5000 43.7500 -94.0 + 102.7500 39.5000 -94.0 +} -94.0 +{ -94.0 + 57.2500 64.5000 -94.0 + 55.2500 66.5000 -94.0 + 51.5000 73.2500 -94.0 + 51.5000 75.7500 -94.0 + 57.5000 71.7500 -94.0 + 60.5000 71.7500 -94.0 + 65.2500 78.5000 -94.0 + 66.5000 78.7500 -94.0 + 66.7500 76.5000 -94.0 + 63.7500 70.5000 -94.0 + 63.7500 68.5000 -94.0 + 60.7500 64.5000 -94.0 +} -94.0 +{ -94.0 + 152.2500 67.5000 -94.0 + 150.2500 74.5000 -94.0 + 146.5000 78.2500 -94.0 + 146.2500 80.5000 -94.0 + 154.5000 75.7500 -94.0 + 157.5000 75.7500 -94.0 + 160.5000 78.7500 -94.0 + 162.5000 79.7500 -94.0 + 162.7500 77.5000 -94.0 + 160.7500 71.5000 -94.0 + 157.7500 67.5000 -94.0 +} -94.0 +{ -94.0 + 75.2500 85.5000 -94.0 + 74.5000 87.2500 -94.0 + 67.5000 86.2500 -94.0 + 63.5000 88.2500 -94.0 + 61.7500 87.5000 -94.0 + 58.2500 87.5000 -94.0 + 47.5000 101.2500 -94.0 + 32.2500 129.5000 -94.0 + 28.5000 147.2500 -94.0 + 28.2500 161.5000 -94.0 + 29.2500 163.5000 -94.0 + 29.2500 171.5000 -94.0 + 30.2500 173.5000 -94.0 + 31.2500 182.5000 -94.0 + 33.2500 186.5000 -94.0 + 34.2500 192.5000 -94.0 + 40.2500 204.5000 -94.0 + 47.2500 212.5000 -94.0 + 53.2500 217.5000 -94.0 + 68.2500 226.5000 -94.0 + 71.5000 226.7500 -94.0 + 84.5000 231.7500 -94.0 + 91.2500 233.5000 -94.0 + 107.5000 233.7500 -94.0 + 109.5000 232.7500 -94.0 + 115.5000 231.7500 -94.0 + 119.5000 229.7500 -94.0 + 126.5000 228.7500 -94.0 + 130.5000 226.7500 -94.0 + 132.5000 226.7500 -94.0 + 144.5000 220.7500 -94.0 + 151.5000 215.7500 -94.0 + 157.7500 209.5000 -94.0 + 163.7500 201.5000 -94.0 + 173.5000 181.7500 -94.0 + 178.5000 163.7500 -94.0 + 178.7500 143.5000 -94.0 + 177.7500 141.5000 -94.0 + 177.7500 136.5000 -94.0 + 176.7500 134.5000 -94.0 + 176.7500 130.5000 -94.0 + 174.7500 126.5000 -94.0 + 174.7500 124.5000 -94.0 + 170.7500 114.5000 -94.0 + 165.7500 106.5000 -94.0 + 152.7500 91.5000 -94.0 + 146.7500 89.5000 -94.0 + 140.5000 89.2500 -94.0 + 137.2500 90.5000 -94.0 + 146.5000 90.7500 -94.0 + 153.2500 95.5000 -94.0 + 154.2500 97.5000 -94.0 + 153.2500 102.5000 -94.0 + 155.2500 104.5000 -94.0 + 160.5000 104.7500 -94.0 + 168.2500 113.5000 -94.0 + 168.2500 115.5000 -94.0 + 171.2500 121.5000 -94.0 + 171.2500 123.5000 -94.0 + 173.2500 127.5000 -94.0 + 173.2500 130.5000 -94.0 + 174.2500 132.5000 -94.0 + 174.2500 151.5000 -94.0 + 170.2500 171.5000 -94.0 + 166.2500 182.5000 -94.0 + 161.5000 189.2500 -94.0 + 156.2500 198.5000 -94.0 + 142.2500 211.5000 -94.0 + 130.5000 219.2500 -94.0 + 128.5000 219.2500 -94.0 + 118.5000 223.2500 -94.0 + 116.5000 223.2500 -94.0 + 114.5000 224.2500 -94.0 + 110.5000 224.2500 -94.0 + 98.5000 222.2500 -94.0 + 94.5000 225.2500 -94.0 + 88.5000 225.2500 -94.0 + 76.7500 220.5000 -94.0 + 74.5000 220.2500 -94.0 + 62.5000 214.2500 -94.0 + 59.5000 211.2500 -94.0 + 57.5000 210.2500 -94.0 + 56.7500 208.5000 -94.0 + 54.7500 207.5000 -94.0 + 53.5000 205.2500 -94.0 + 51.5000 204.2500 -94.0 + 50.7500 202.5000 -94.0 + 45.7500 197.5000 -94.0 + 38.7500 184.5000 -94.0 + 38.7500 182.5000 -94.0 + 36.7500 178.5000 -94.0 + 36.7500 175.5000 -94.0 + 34.7500 168.5000 -94.0 + 34.7500 163.5000 -94.0 + 33.7500 161.5000 -94.0 + 33.7500 152.5000 -94.0 + 34.5000 150.7500 -94.0 + 34.7500 142.5000 -94.0 + 33.7500 140.5000 -94.0 + 33.7500 135.5000 -94.0 + 34.7500 130.5000 -94.0 + 37.7500 122.5000 -94.0 + 44.5000 111.7500 -94.0 + 46.7500 105.5000 -94.0 + 49.5000 102.7500 -94.0 + 53.7500 95.5000 -94.0 + 55.5000 94.7500 -94.0 + 58.5000 91.7500 -94.0 + 66.5000 87.7500 -94.0 + 76.5000 87.7500 -94.0 + 80.2500 92.5000 -94.0 + 82.7500 92.5000 -94.0 + 79.7500 88.5000 -94.0 +} -94.0 +{ -94.0 + 129.2500 91.5000 -94.0 + 127.2500 94.5000 -94.0 + 130.7500 94.5000 -94.0 +} -94.0 +{ -94.0 + 100.2500 94.5000 -94.0 + 99.2500 95.5000 -94.0 + 100.7500 95.5000 -94.0 +} -94.0 +{ -94.0 + 86.2500 97.5000 -94.0 + 88.7500 99.5000 -94.0 + 87.7500 97.5000 -94.0 +} -94.0 +{ -94.0 + 100.2500 97.5000 -94.0 + 100.5000 97.7500 -94.0 + 102.5000 98.7500 -94.0 + 101.7500 97.5000 -94.0 +} -94.0 +{ -94.0 + 102.2500 157.5000 -94.0 + 101.2500 159.5000 -94.0 + 102.5000 159.7500 -94.0 +} -94.0 +v 173 z -96.000000 -64.0 +{ -96.0 + 115.2500 37.5000 -96.0 + 115.2500 45.5000 -96.0 + 114.5000 47.2500 -96.0 + 114.2500 54.5000 -96.0 + 115.5000 54.7500 -96.0 + 117.7500 48.5000 -96.0 + 116.7500 46.5000 -96.0 + 116.7500 40.5000 -96.0 +} -96.0 +{ -96.0 + 101.2500 40.5000 -96.0 + 100.2500 44.5000 -96.0 + 97.5000 48.2500 -96.0 + 99.2500 51.5000 -96.0 + 99.2500 53.5000 -96.0 + 100.5000 54.7500 -96.0 + 101.7500 41.5000 -96.0 +} -96.0 +{ -96.0 + 59.2500 63.5000 -96.0 + 57.5000 64.2500 -96.0 + 55.2500 66.5000 -96.0 + 51.5000 73.2500 -96.0 + 51.5000 75.7500 -96.0 + 57.5000 71.7500 -96.0 + 60.5000 71.7500 -96.0 + 63.2500 75.5000 -96.0 + 64.5000 75.7500 -96.0 + 67.2500 78.5000 -96.0 + 67.7500 77.5000 -96.0 + 62.7500 67.5000 -96.0 + 62.7500 65.5000 -96.0 + 60.7500 63.5000 -96.0 +} -96.0 +{ -96.0 + 153.2500 66.5000 -96.0 + 151.5000 68.2500 -96.0 + 150.2500 73.5000 -96.0 + 147.2500 76.5000 -96.0 + 145.2500 80.5000 -96.0 + 149.5000 77.7500 -96.0 + 151.5000 77.7500 -96.0 + 155.5000 74.7500 -96.0 + 158.5000 75.7500 -96.0 + 161.2500 79.5000 -96.0 + 162.5000 78.7500 -96.0 + 162.7500 76.5000 -96.0 + 160.7500 70.5000 -96.0 + 156.7500 66.5000 -96.0 +} -96.0 +{ -96.0 + 76.2500 85.5000 -96.0 + 75.5000 86.2500 -96.0 + 73.2500 87.5000 -96.0 + 77.5000 88.7500 -96.0 + 82.5000 93.7500 -96.0 + 84.5000 92.7500 -96.0 + 83.7500 91.5000 -96.0 + 82.5000 92.2500 -96.0 + 81.7500 91.5000 -96.0 + 80.7500 89.5000 -96.0 +} -96.0 +{ -96.0 + 67.2500 86.5000 -96.0 + 66.5000 87.2500 -96.0 + 59.5000 87.2500 -96.0 + 48.5000 100.2500 -96.0 + 44.2500 106.5000 -96.0 + 41.2500 112.5000 -96.0 + 36.5000 120.2500 -96.0 + 36.2500 123.5000 -96.0 + 37.7500 122.5000 -96.0 + 40.7500 116.5000 -96.0 + 45.5000 109.7500 -96.0 + 46.7500 105.5000 -96.0 + 52.5000 98.7500 -96.0 + 55.5000 93.7500 -96.0 + 57.5000 93.7500 -96.0 + 59.5000 91.7500 -96.0 + 67.5000 87.7500 -96.0 + 69.5000 87.7500 -96.0 + 70.7500 86.5000 -96.0 +} -96.0 +{ -96.0 + 137.2500 89.5000 -96.0 + 135.5000 91.2500 -96.0 + 136.5000 91.7500 -96.0 + 138.5000 90.7500 -96.0 + 143.5000 90.7500 -96.0 + 148.5000 92.7500 -96.0 + 152.2500 95.5000 -96.0 + 152.5000 102.7500 -96.0 + 156.2500 104.5000 -96.0 + 160.5000 104.7500 -96.0 + 164.2500 107.5000 -96.0 + 169.2500 116.5000 -96.0 + 169.2500 118.5000 -96.0 + 172.2500 124.5000 -96.0 + 172.2500 129.5000 -96.0 + 174.2500 133.5000 -96.0 + 174.2500 149.5000 -96.0 + 173.5000 151.2500 -96.0 + 173.2500 157.5000 -96.0 + 171.2500 164.5000 -96.0 + 170.2500 171.5000 -96.0 + 163.5000 186.2500 -96.0 + 152.5000 202.2500 -96.0 + 138.5000 214.2500 -96.0 + 129.5000 219.2500 -96.0 + 127.5000 219.2500 -96.0 + 121.5000 222.2500 -96.0 + 118.5000 222.2500 -96.0 + 114.5000 224.2500 -96.0 + 109.5000 224.2500 -96.0 + 104.7500 222.5000 -96.0 + 98.5000 222.2500 -96.0 + 94.5000 225.2500 -96.0 + 87.5000 225.2500 -96.0 + 74.7500 219.5000 -96.0 + 65.5000 216.2500 -96.0 + 58.5000 211.2500 -96.0 + 44.7500 195.5000 -96.0 + 38.7500 183.5000 -96.0 + 38.7500 181.5000 -96.0 + 36.7500 177.5000 -96.0 + 36.7500 174.5000 -96.0 + 34.7500 168.5000 -96.0 + 34.7500 164.5000 -96.0 + 33.7500 162.5000 -96.0 + 33.7500 150.5000 -96.0 + 34.5000 148.7500 -96.0 + 34.7500 142.5000 -96.0 + 33.7500 140.5000 -96.0 + 33.7500 134.5000 -96.0 + 35.7500 125.5000 -96.0 + 34.5000 125.2500 -96.0 + 32.2500 130.5000 -96.0 + 28.5000 149.2500 -96.0 + 28.2500 159.5000 -96.0 + 29.2500 161.5000 -96.0 + 29.2500 169.5000 -96.0 + 30.2500 171.5000 -96.0 + 30.2500 175.5000 -96.0 + 31.2500 177.5000 -96.0 + 33.2500 187.5000 -96.0 + 38.2500 200.5000 -96.0 + 45.5000 210.7500 -96.0 + 61.5000 222.7500 -96.0 + 71.5000 227.7500 -96.0 + 78.5000 228.7500 -96.0 + 84.5000 231.7500 -96.0 + 91.2500 233.5000 -96.0 + 107.5000 233.7500 -96.0 + 109.5000 232.7500 -96.0 + 119.5000 230.7500 -96.0 + 123.5000 228.7500 -96.0 + 129.5000 227.7500 -96.0 + 141.5000 221.7500 -96.0 + 154.5000 212.7500 -96.0 + 163.7500 200.5000 -96.0 + 173.7500 180.5000 -96.0 + 178.5000 163.7500 -96.0 + 178.7500 144.5000 -96.0 + 177.7500 142.5000 -96.0 + 176.7500 133.5000 -96.0 + 175.7500 131.5000 -96.0 + 175.7500 129.5000 -96.0 + 167.7500 109.5000 -96.0 + 152.7500 91.5000 -96.0 + 149.5000 91.2500 -96.0 + 145.7500 89.5000 -96.0 + 144.5000 90.2500 -96.0 + 143.7500 89.5000 -96.0 +} -96.0 +{ -96.0 + 127.2500 92.5000 -96.0 + 126.5000 93.2500 -96.0 + 126.2500 95.5000 -96.0 + 128.7500 95.5000 -96.0 + 129.7500 93.5000 -96.0 +} -96.0 +{ -96.0 + 94.2500 108.5000 -96.0 + 93.2500 109.5000 -96.0 + 94.7500 109.5000 -96.0 +} -96.0 +{ -96.0 + 154.7500 71.5000 -96.0 + 155.5000 70.7500 -96.0 + 157.2500 71.5000 -96.0 + 156.5000 72.2500 -96.0 +} -96.0 +v 169 z -98.000000 -64.0 +{ -98.0 + 101.2500 38.5000 -98.0 + 100.2500 39.5000 -98.0 + 99.2500 44.5000 -98.0 + 96.5000 48.2500 -98.0 + 99.2500 51.5000 -98.0 + 99.5000 53.7500 -98.0 + 99.7500 48.5000 -98.0 + 101.7500 39.5000 -98.0 +} -98.0 +{ -98.0 + 116.2500 38.5000 -98.0 + 116.2500 44.5000 -98.0 + 115.2500 46.5000 -98.0 + 116.2500 48.5000 -98.0 + 115.5000 49.2500 -98.0 + 115.2500 53.5000 -98.0 + 116.5000 53.7500 -98.0 + 118.7500 48.5000 -98.0 + 117.7500 46.5000 -98.0 + 117.7500 43.5000 -98.0 +} -98.0 +{ -98.0 + 58.2500 63.5000 -98.0 + 55.5000 66.2500 -98.0 + 52.5000 71.2500 -98.0 + 52.2500 75.5000 -98.0 + 57.5000 71.7500 -98.0 + 60.5000 71.7500 -98.0 + 66.2500 77.5000 -98.0 + 68.5000 77.7500 -98.0 + 68.7500 76.5000 -98.0 + 63.7500 70.5000 -98.0 + 63.7500 67.5000 -98.0 + 61.7500 63.5000 -98.0 +} -98.0 +{ -98.0 + 153.2500 66.5000 -98.0 + 149.2500 74.5000 -98.0 + 143.5000 80.2500 -98.0 + 144.2500 81.5000 -98.0 + 147.5000 77.7500 -98.0 + 151.5000 77.7500 -98.0 + 154.5000 74.7500 -98.0 + 157.5000 74.7500 -98.0 + 160.2500 78.5000 -98.0 + 162.5000 78.7500 -98.0 + 162.7500 76.5000 -98.0 + 160.7500 70.5000 -98.0 + 157.7500 66.5000 -98.0 +} -98.0 +{ -98.0 + 60.2500 87.5000 -98.0 + 50.2500 98.5000 -98.0 + 44.2500 106.5000 -98.0 + 37.2500 119.5000 -98.0 + 32.2500 131.5000 -98.0 + 28.5000 150.2500 -98.0 + 28.2500 159.5000 -98.0 + 29.2500 161.5000 -98.0 + 29.2500 167.5000 -98.0 + 30.2500 169.5000 -98.0 + 30.2500 173.5000 -98.0 + 31.2500 175.5000 -98.0 + 32.2500 183.5000 -98.0 + 34.2500 187.5000 -98.0 + 34.2500 190.5000 -98.0 + 40.2500 202.5000 -98.0 + 46.2500 210.5000 -98.0 + 58.2500 220.5000 -98.0 + 71.5000 227.7500 -98.0 + 80.5000 229.7500 -98.0 + 84.5000 231.7500 -98.0 + 91.2500 233.5000 -98.0 + 107.5000 233.7500 -98.0 + 109.5000 232.7500 -98.0 + 116.5000 231.7500 -98.0 + 126.5000 227.7500 -98.0 + 129.5000 227.7500 -98.0 + 147.5000 217.7500 -98.0 + 156.7500 209.5000 -98.0 + 162.7500 201.5000 -98.0 + 171.7500 184.5000 -98.0 + 175.7500 170.5000 -98.0 + 178.5000 163.7500 -98.0 + 178.7500 147.5000 -98.0 + 177.7500 145.5000 -98.0 + 177.7500 140.5000 -98.0 + 175.7500 133.5000 -98.0 + 174.5000 126.2500 -98.0 + 165.7500 106.5000 -98.0 + 155.7500 96.5000 -98.0 + 153.7500 92.5000 -98.0 + 141.5000 90.2500 -98.0 + 142.2500 91.5000 -98.0 + 145.5000 91.7500 -98.0 + 147.2500 93.5000 -98.0 + 149.5000 93.7500 -98.0 + 152.2500 96.5000 -98.0 + 151.2500 98.5000 -98.0 + 153.2500 102.5000 -98.0 + 163.2500 106.5000 -98.0 + 172.2500 124.5000 -98.0 + 172.2500 130.5000 -98.0 + 174.2500 136.5000 -98.0 + 174.2500 147.5000 -98.0 + 173.5000 149.2500 -98.0 + 173.2500 158.5000 -98.0 + 172.2500 160.5000 -98.0 + 170.2500 170.5000 -98.0 + 166.2500 181.5000 -98.0 + 157.2500 196.5000 -98.0 + 147.5000 207.2500 -98.0 + 140.5000 213.2500 -98.0 + 132.5000 218.2500 -98.0 + 130.5000 218.2500 -98.0 + 124.5000 221.2500 -98.0 + 122.5000 221.2500 -98.0 + 118.5000 223.2500 -98.0 + 115.5000 223.2500 -98.0 + 112.5000 224.2500 -98.0 + 107.7500 222.5000 -98.0 + 100.5000 222.2500 -98.0 + 94.5000 225.2500 -98.0 + 86.5000 225.2500 -98.0 + 70.7500 217.5000 -98.0 + 65.5000 216.2500 -98.0 + 56.5000 208.2500 -98.0 + 54.5000 207.2500 -98.0 + 53.7500 205.5000 -98.0 + 44.7500 194.5000 -98.0 + 40.7500 186.5000 -98.0 + 36.7500 176.5000 -98.0 + 36.7500 174.5000 -98.0 + 35.7500 172.5000 -98.0 + 35.7500 168.5000 -98.0 + 34.7500 166.5000 -98.0 + 34.7500 156.5000 -98.0 + 33.7500 154.5000 -98.0 + 34.7500 142.5000 -98.0 + 33.7500 140.5000 -98.0 + 34.7500 128.5000 -98.0 + 36.7500 124.5000 -98.0 + 48.7500 102.5000 -98.0 + 53.7500 97.5000 -98.0 + 54.7500 95.5000 -98.0 + 59.5000 91.7500 -98.0 + 61.5000 91.7500 -98.0 + 65.5000 89.7500 -98.0 + 73.5000 88.7500 -98.0 + 79.5000 90.7500 -98.0 + 83.2500 94.5000 -98.0 + 84.5000 93.7500 -98.0 + 84.7500 91.5000 -98.0 + 81.5000 90.2500 -98.0 + 80.7500 88.5000 -98.0 + 69.5000 87.2500 -98.0 + 67.5000 88.2500 -98.0 + 66.7500 87.5000 -98.0 +} -98.0 +{ -98.0 + 135.2500 89.5000 -98.0 + 133.5000 91.2500 -98.0 + 134.5000 91.7500 -98.0 + 137.5000 90.7500 -98.0 + 137.7500 89.5000 -98.0 +} -98.0 +{ -98.0 + 128.2500 93.5000 -98.0 + 126.2500 96.5000 -98.0 + 127.5000 96.7500 -98.0 + 129.5000 94.7500 -98.0 +} -98.0 +{ -98.0 + 57.7500 68.5000 -98.0 + 58.5000 67.7500 -98.0 + 59.2500 68.5000 -98.0 + 58.5000 69.2500 -98.0 +} -98.0 +{ -98.0 + 154.7500 70.5000 -98.0 + 155.5000 69.7500 -98.0 + 157.2500 70.5000 -98.0 + 156.5000 72.2500 -98.0 + 154.5000 72.2500 -98.0 + 152.7500 71.5000 -98.0 +} -98.0 +v 192 z -100.000000 -98.0 +{ -98.0 + 116.2500 37.5000 -100.0 + 117.2500 39.5000 -100.0 + 117.2500 47.5000 -100.0 + 116.2500 52.5000 -100.0 + 116.7500 53.5000 -100.0 + 117.7500 51.5000 -100.0 + 121.5000 49.7500 -100.0 + 118.7500 45.5000 -100.0 + 117.7500 38.5000 -100.0 +} -100.0 +{ -100.0 + 100.2500 38.5000 -100.0 + 98.5000 42.2500 -100.0 + 98.2500 44.5000 -100.0 + 95.2500 48.5000 -100.0 + 96.5000 48.7500 -100.0 + 98.2500 50.5000 -100.0 + 98.2500 52.5000 -100.0 + 99.5000 52.7500 -100.0 + 99.7500 51.5000 -100.0 + 98.7500 48.5000 -100.0 + 100.7500 39.5000 -100.0 +} -100.0 +{ -100.0 + 59.2500 62.5000 -100.0 + 56.5000 64.2500 -100.0 + 52.5000 71.2500 -100.0 + 52.2500 74.5000 -100.0 + 53.5000 74.7500 -100.0 + 57.5000 71.7500 -100.0 + 60.5000 71.7500 -100.0 + 62.2500 72.5000 -100.0 + 63.2500 74.5000 -100.0 + 68.7500 77.5000 -100.0 + 63.7500 69.5000 -100.0 + 63.7500 66.5000 -100.0 + 60.7500 62.5000 -100.0 +} -100.0 +{ -100.0 + 154.2500 65.5000 -100.0 + 151.5000 69.2500 -100.0 + 151.2500 71.5000 -100.0 + 146.5000 76.2500 -100.0 + 146.5000 77.7500 -100.0 + 148.5000 76.7500 -100.0 + 151.5000 76.7500 -100.0 + 154.5000 73.7500 -100.0 + 156.5000 73.7500 -100.0 + 160.5000 77.7500 -100.0 + 162.5000 78.7500 -100.0 + 162.7500 75.5000 -100.0 + 160.7500 69.5000 -100.0 + 157.7500 65.5000 -100.0 +} -100.0 +{ -100.0 + 143.2500 79.5000 -100.0 + 142.2500 80.5000 -100.0 + 144.5000 80.7500 -100.0 + 144.7500 79.5000 -100.0 +} -100.0 +{ -100.0 + 61.2500 87.5000 -100.0 + 59.5000 88.2500 -100.0 + 59.2500 89.5000 -100.0 + 51.2500 97.5000 -100.0 + 45.2500 105.5000 -100.0 + 35.2500 124.5000 -100.0 + 31.5000 134.2500 -100.0 + 29.2500 149.5000 -100.0 + 28.5000 151.2500 -100.0 + 28.2500 159.5000 -100.0 + 29.2500 161.5000 -100.0 + 29.2500 165.5000 -100.0 + 30.2500 167.5000 -100.0 + 30.2500 172.5000 -100.0 + 31.2500 174.5000 -100.0 + 31.2500 177.5000 -100.0 + 37.2500 196.5000 -100.0 + 43.2500 206.5000 -100.0 + 50.5000 213.7500 -100.0 + 52.5000 214.7500 -100.0 + 53.2500 216.5000 -100.0 + 54.5000 216.7500 -100.0 + 57.5000 219.7500 -100.0 + 65.5000 224.7500 -100.0 + 84.5000 231.7500 -100.0 + 91.2500 233.5000 -100.0 + 106.5000 233.7500 -100.0 + 108.5000 232.7500 -100.0 + 112.5000 232.7500 -100.0 + 114.5000 231.7500 -100.0 + 116.5000 231.7500 -100.0 + 126.5000 227.7500 -100.0 + 129.7500 227.5000 -100.0 + 136.5000 224.7500 -100.0 + 149.5000 215.7500 -100.0 + 158.5000 206.7500 -100.0 + 162.7500 200.5000 -100.0 + 171.7500 183.5000 -100.0 + 175.7500 169.5000 -100.0 + 178.5000 162.7500 -100.0 + 178.7500 148.5000 -100.0 + 177.7500 146.5000 -100.0 + 177.7500 142.5000 -100.0 + 175.7500 135.5000 -100.0 + 173.7500 124.5000 -100.0 + 163.7500 104.5000 -100.0 + 152.7500 92.5000 -100.0 + 148.5000 92.2500 -100.0 + 146.7500 91.5000 -100.0 + 145.5000 92.2500 -100.0 + 141.5000 91.2500 -100.0 + 145.2500 93.5000 -100.0 + 147.5000 93.7500 -100.0 + 151.2500 96.5000 -100.0 + 151.2500 99.5000 -100.0 + 154.2500 102.5000 -100.0 + 160.5000 104.7500 -100.0 + 163.2500 107.5000 -100.0 + 165.2500 111.5000 -100.0 + 165.2500 113.5000 -100.0 + 166.5000 113.7500 -100.0 + 169.2500 117.5000 -100.0 + 169.2500 119.5000 -100.0 + 172.2500 125.5000 -100.0 + 172.2500 133.5000 -100.0 + 174.2500 137.5000 -100.0 + 174.2500 140.5000 -100.0 + 175.2500 142.5000 -100.0 + 174.5000 143.2500 -100.0 + 173.2500 148.5000 -100.0 + 172.2500 153.5000 -100.0 + 173.2500 155.5000 -100.0 + 169.2500 173.5000 -100.0 + 157.5000 196.2500 -100.0 + 149.5000 205.2500 -100.0 + 139.5000 214.2500 -100.0 + 130.5000 219.2500 -100.0 + 128.5000 219.2500 -100.0 + 122.5000 222.2500 -100.0 + 120.5000 222.2500 -100.0 + 118.5000 223.2500 -100.0 + 111.5000 223.2500 -100.0 + 100.5000 221.2500 -100.0 + 98.5000 223.2500 -100.0 + 94.5000 225.2500 -100.0 + 87.5000 225.2500 -100.0 + 82.5000 224.2500 -100.0 + 74.5000 219.2500 -100.0 + 64.5000 215.2500 -100.0 + 57.7500 209.5000 -100.0 + 45.7500 195.5000 -100.0 + 38.7500 182.5000 -100.0 + 38.7500 179.5000 -100.0 + 36.7500 175.5000 -100.0 + 36.7500 173.5000 -100.0 + 35.7500 171.5000 -100.0 + 35.7500 167.5000 -100.0 + 34.7500 165.5000 -100.0 + 34.7500 143.5000 -100.0 + 33.7500 141.5000 -100.0 + 33.7500 132.5000 -100.0 + 38.7500 122.5000 -100.0 + 42.7500 112.5000 -100.0 + 46.5000 109.7500 -100.0 + 47.7500 105.5000 -100.0 + 55.7500 94.5000 -100.0 + 58.5000 92.7500 -100.0 + 61.5000 92.7500 -100.0 + 63.5000 90.7500 -100.0 + 67.5000 90.7500 -100.0 + 69.5000 89.7500 -100.0 + 71.5000 89.7500 -100.0 + 72.7500 88.5000 -100.0 + 69.5000 88.2500 -100.0 + 67.5000 89.2500 -100.0 + 64.7500 87.5000 -100.0 +} -100.0 +{ -100.0 + 75.2500 89.5000 -100.0 + 74.5000 90.2500 -100.0 + 81.2500 94.5000 -100.0 + 84.5000 94.7500 -100.0 + 82.7500 91.5000 -100.0 + 81.7500 89.5000 -100.0 +} -100.0 +{ -100.0 + 133.2500 91.5000 -100.0 + 132.5000 92.2500 -100.0 + 133.5000 92.7500 -100.0 + 134.7500 91.5000 -100.0 +} -100.0 +{ -100.0 + 127.2500 94.5000 -100.0 + 125.2500 97.5000 -100.0 + 126.5000 97.7500 -100.0 + 128.5000 95.7500 -100.0 +} -100.0 +{ -100.0 + 110.2500 103.5000 -100.0 + 109.2500 104.5000 -100.0 + 110.7500 104.5000 -100.0 +} -100.0 +{ -100.0 + 58.7500 66.5000 -100.0 + 59.5000 65.7500 -100.0 + 60.2500 66.5000 -100.0 + 59.5000 68.2500 -100.0 +} -100.0 +{ -100.0 + 154.7500 69.5000 -100.0 + 155.5000 68.7500 -100.0 + 156.2500 69.5000 -100.0 + 155.5000 70.2500 -100.0 +} -100.0 +v 186 z -102.000000 -64.0 +{ -102.0 + 100.2500 37.5000 -102.0 + 96.5000 45.2500 -102.0 + 94.5000 46.2500 -102.0 + 92.2500 49.5000 -102.0 + 96.5000 49.7500 -102.0 + 98.5000 52.7500 -102.0 + 98.7500 49.5000 -102.0 + 97.7500 47.5000 -102.0 + 98.7500 42.5000 -102.0 + 100.7500 38.5000 -102.0 +} -102.0 +{ -102.0 + 117.2500 38.5000 -102.0 + 117.2500 39.5000 -102.0 + 118.2500 41.5000 -102.0 + 118.2500 49.5000 -102.0 + 117.5000 51.2500 -102.0 + 117.5000 53.7500 -102.0 + 119.5000 50.7500 -102.0 + 124.5000 51.7500 -102.0 + 124.7500 50.5000 -102.0 + 119.7500 45.5000 -102.0 + 119.7500 43.5000 -102.0 +} -102.0 +{ -102.0 + 58.2500 62.5000 -102.0 + 56.2500 64.5000 -102.0 + 52.5000 71.2500 -102.0 + 52.2500 73.5000 -102.0 + 54.5000 73.7500 -102.0 + 57.5000 70.7500 -102.0 + 60.5000 70.7500 -102.0 + 63.5000 73.7500 -102.0 + 68.7500 76.5000 -102.0 + 67.7500 73.5000 -102.0 + 63.7500 69.5000 -102.0 + 63.7500 66.5000 -102.0 + 61.7500 62.5000 -102.0 +} -102.0 +{ -102.0 + 120.2500 64.5000 -102.0 + 119.5000 65.2500 -102.0 + 121.2500 67.5000 -102.0 + 121.5000 70.7500 -102.0 + 121.7500 67.5000 -102.0 +} -102.0 +{ -102.0 + 154.2500 64.5000 -102.0 + 152.5000 66.2500 -102.0 + 150.2500 72.5000 -102.0 + 148.5000 73.2500 -102.0 + 145.2500 77.5000 -102.0 + 150.5000 75.7500 -102.0 + 153.5000 71.7500 -102.0 + 156.5000 71.7500 -102.0 + 160.2500 77.5000 -102.0 + 162.5000 77.7500 -102.0 + 162.7500 74.5000 -102.0 + 160.7500 70.5000 -102.0 + 160.7500 68.5000 -102.0 + 157.7500 64.5000 -102.0 +} -102.0 +{ -102.0 + 142.2500 79.5000 -102.0 + 140.2500 81.5000 -102.0 + 142.5000 81.7500 -102.0 + 143.7500 79.5000 -102.0 +} -102.0 +{ -102.0 + 122.2500 82.5000 -102.0 + 121.2500 84.5000 -102.0 + 125.5000 84.7500 -102.0 + 123.7500 82.5000 -102.0 +} -102.0 +{ -102.0 + 77.2500 87.5000 -102.0 + 76.2500 89.5000 -102.0 + 74.2500 90.5000 -102.0 + 78.5000 91.7500 -102.0 + 84.5000 95.7500 -102.0 + 84.7500 94.5000 -102.0 + 81.7500 88.5000 -102.0 +} -102.0 +{ -102.0 + 60.2500 88.5000 -102.0 + 52.5000 96.2500 -102.0 + 46.5000 104.2500 -102.0 + 33.2500 129.5000 -102.0 + 29.5000 146.2500 -102.0 + 28.2500 157.5000 -102.0 + 30.2500 163.5000 -102.0 + 30.2500 170.5000 -102.0 + 32.2500 177.5000 -102.0 + 33.2500 183.5000 -102.0 + 39.5000 199.7500 -102.0 + 46.5000 209.7500 -102.0 + 48.5000 210.7500 -102.0 + 60.2500 221.5000 -102.0 + 73.2500 228.5000 -102.0 + 86.2500 232.5000 -102.0 + 112.5000 232.7500 -102.0 + 114.5000 231.7500 -102.0 + 117.5000 231.7500 -102.0 + 127.5000 227.7500 -102.0 + 129.5000 227.7500 -102.0 + 135.5000 224.7500 -102.0 + 146.5000 217.7500 -102.0 + 152.5000 211.7500 -102.0 + 154.5000 210.7500 -102.0 + 162.7500 199.5000 -102.0 + 171.5000 182.7500 -102.0 + 174.7500 171.5000 -102.0 + 178.5000 161.7500 -102.0 + 178.7500 150.5000 -102.0 + 176.7500 143.5000 -102.0 + 174.7500 129.5000 -102.0 + 172.7500 125.5000 -102.0 + 172.7500 123.5000 -102.0 + 161.7500 102.5000 -102.0 + 155.7500 97.5000 -102.0 + 153.7500 93.5000 -102.0 + 150.5000 92.2500 -102.0 + 147.5000 93.2500 -102.0 + 145.7500 91.5000 -102.0 + 144.5000 92.2500 -102.0 + 139.2500 91.5000 -102.0 + 142.2500 93.5000 -102.0 + 147.5000 94.7500 -102.0 + 151.2500 98.5000 -102.0 + 151.2500 100.5000 -102.0 + 157.2500 104.5000 -102.0 + 159.5000 104.7500 -102.0 + 163.2500 108.5000 -102.0 + 163.2500 110.5000 -102.0 + 170.2500 121.5000 -102.0 + 170.2500 123.5000 -102.0 + 172.2500 127.5000 -102.0 + 171.2500 128.5000 -102.0 + 172.2500 130.5000 -102.0 + 172.2500 134.5000 -102.0 + 174.2500 138.5000 -102.0 + 174.2500 145.5000 -102.0 + 172.5000 149.2500 -102.0 + 172.2500 160.5000 -102.0 + 171.2500 162.5000 -102.0 + 170.2500 169.5000 -102.0 + 162.2500 188.5000 -102.0 + 155.2500 198.5000 -102.0 + 147.5000 207.2500 -102.0 + 140.5000 213.2500 -102.0 + 125.5000 221.2500 -102.0 + 122.5000 221.2500 -102.0 + 118.5000 223.2500 -102.0 + 111.5000 223.2500 -102.0 + 107.5000 221.2500 -102.0 + 104.5000 222.2500 -102.0 + 101.5000 221.2500 -102.0 + 93.5000 225.2500 -102.0 + 90.5000 225.2500 -102.0 + 80.5000 223.2500 -102.0 + 72.7500 218.5000 -102.0 + 66.5000 216.2500 -102.0 + 59.5000 211.2500 -102.0 + 51.7500 203.5000 -102.0 + 45.7500 194.5000 -102.0 + 37.7500 178.5000 -102.0 + 36.7500 171.5000 -102.0 + 33.7500 160.5000 -102.0 + 34.5000 159.7500 -102.0 + 34.7500 144.5000 -102.0 + 33.7500 142.5000 -102.0 + 33.7500 136.5000 -102.0 + 34.7500 133.5000 -102.0 + 42.7500 113.5000 -102.0 + 46.7500 109.5000 -102.0 + 49.7500 102.5000 -102.0 + 52.5000 99.7500 -102.0 + 56.5000 93.7500 -102.0 + 59.5000 93.7500 -102.0 + 65.5000 90.7500 -102.0 + 67.5000 90.7500 -102.0 + 72.5000 88.7500 -102.0 + 71.5000 88.2500 -102.0 + 69.5000 89.2500 -102.0 +} -102.0 +{ -102.0 + 129.2500 91.5000 -102.0 + 127.5000 92.2500 -102.0 + 124.2500 97.5000 -102.0 + 125.5000 97.7500 -102.0 + 129.5000 94.7500 -102.0 + 128.7500 93.5000 -102.0 + 129.7500 92.5000 -102.0 +} -102.0 +{ -102.0 + 134.2500 91.5000 -102.0 + 130.2500 93.5000 -102.0 + 134.5000 94.7500 -102.0 + 135.7500 91.5000 -102.0 +} -102.0 +{ -102.0 + 111.2500 104.5000 -102.0 + 110.2500 105.5000 -102.0 + 111.7500 105.5000 -102.0 +} -102.0 +{ -102.0 + 58.7500 66.5000 -102.0 + 59.5000 65.7500 -102.0 + 61.2500 66.5000 -102.0 + 60.5000 67.2500 -102.0 +} -102.0 +v 208 z -104.000000 -64.0 +{ -104.0 + 99.2500 38.5000 -104.0 + 97.5000 41.2500 -104.0 + 97.2500 43.5000 -104.0 + 90.5000 49.2500 -104.0 + 90.5000 50.7500 -104.0 + 92.5000 51.7500 -104.0 + 93.5000 49.7500 -104.0 + 95.5000 48.7500 -104.0 + 97.2500 50.5000 -104.0 + 97.5000 52.7500 -104.0 + 97.7500 45.5000 -104.0 + 99.7500 39.5000 -104.0 +} -104.0 +{ -104.0 + 118.2500 39.5000 -104.0 + 118.2500 44.5000 -104.0 + 119.2500 46.5000 -104.0 + 118.2500 53.5000 -104.0 + 121.5000 50.7500 -104.0 + 123.2500 53.5000 -104.0 + 124.5000 53.7500 -104.0 + 127.7500 52.5000 -104.0 + 128.7500 50.5000 -104.0 + 125.5000 49.2500 -104.0 + 121.7500 46.5000 -104.0 +} -104.0 +{ -104.0 + 121.2500 59.5000 -104.0 + 120.2500 61.5000 -104.0 + 121.2500 63.5000 -104.0 + 120.5000 65.2500 -104.0 + 123.2500 66.5000 -104.0 + 123.2500 68.5000 -104.0 + 124.5000 68.7500 -104.0 + 123.7500 67.5000 -104.0 + 123.7500 64.5000 -104.0 +} -104.0 +{ -104.0 + 58.2500 61.5000 -104.0 + 54.5000 66.2500 -104.0 + 52.5000 72.7500 -104.0 + 54.5000 73.7500 -104.0 + 58.5000 69.7500 -104.0 + 60.5000 68.7500 -104.0 + 63.5000 72.7500 -104.0 + 69.5000 75.7500 -104.0 + 69.7500 74.5000 -104.0 + 63.7500 67.5000 -104.0 + 63.7500 65.5000 -104.0 + 61.7500 61.5000 -104.0 +} -104.0 +{ -104.0 + 93.2500 61.5000 -104.0 + 92.5000 62.2500 -104.0 + 92.2500 64.5000 -104.0 + 93.5000 64.7500 -104.0 + 93.7500 62.5000 -104.0 +} -104.0 +{ -104.0 + 153.2500 62.5000 -104.0 + 152.2500 63.5000 -104.0 + 151.2500 68.5000 -104.0 + 145.5000 76.2500 -104.0 + 146.5000 76.7500 -104.0 + 153.5000 69.7500 -104.0 + 155.5000 69.7500 -104.0 + 159.2500 73.5000 -104.0 + 159.2500 75.5000 -104.0 + 162.5000 77.7500 -104.0 + 162.7500 74.5000 -104.0 + 159.7500 65.5000 -104.0 + 156.7500 62.5000 -104.0 +} -104.0 +{ -104.0 + 71.2500 77.5000 -104.0 + 71.5000 78.7500 -104.0 + 73.5000 79.7500 -104.0 +} -104.0 +{ -104.0 + 61.2500 88.5000 -104.0 + 59.5000 89.2500 -104.0 + 59.2500 90.5000 -104.0 + 56.5000 93.2500 -104.0 + 54.5000 94.2500 -104.0 + 54.2500 95.5000 -104.0 + 47.5000 103.2500 -104.0 + 34.2500 128.5000 -104.0 + 30.2500 145.5000 -104.0 + 28.2500 155.5000 -104.0 + 30.2500 162.5000 -104.0 + 30.2500 168.5000 -104.0 + 32.2500 175.5000 -104.0 + 33.2500 181.5000 -104.0 + 39.5000 198.7500 -104.0 + 45.2500 207.5000 -104.0 + 53.2500 214.5000 -104.0 + 54.2500 216.5000 -104.0 + 65.5000 224.7500 -104.0 + 79.5000 230.7500 -104.0 + 86.2500 232.5000 -104.0 + 111.5000 232.7500 -104.0 + 113.5000 231.7500 -104.0 + 120.5000 230.7500 -104.0 + 135.7500 224.5000 -104.0 + 144.5000 218.7500 -104.0 + 151.5000 211.7500 -104.0 + 153.5000 210.7500 -104.0 + 162.7500 198.5000 -104.0 + 169.5000 185.7500 -104.0 + 178.5000 160.7500 -104.0 + 178.7500 151.5000 -104.0 + 176.7500 144.5000 -104.0 + 175.7500 137.5000 -104.0 + 171.7500 123.5000 -104.0 + 163.7500 106.5000 -104.0 + 159.7500 100.5000 -104.0 + 154.7500 96.5000 -104.0 + 153.7500 94.5000 -104.0 + 150.5000 93.2500 -104.0 + 148.5000 94.2500 -104.0 + 146.5000 94.2500 -104.0 + 144.7500 92.5000 -104.0 + 144.7500 90.5000 -104.0 + 143.2500 93.5000 -104.0 + 150.2500 98.5000 -104.0 + 150.2500 100.5000 -104.0 + 154.5000 104.7500 -104.0 + 159.5000 105.7500 -104.0 + 161.2500 107.5000 -104.0 + 163.2500 113.5000 -104.0 + 164.5000 113.7500 -104.0 + 165.2500 115.5000 -104.0 + 168.2500 118.5000 -104.0 + 168.2500 120.5000 -104.0 + 171.2500 126.5000 -104.0 + 171.2500 132.5000 -104.0 + 172.2500 134.5000 -104.0 + 172.2500 136.5000 -104.0 + 174.2500 140.5000 -104.0 + 174.2500 145.5000 -104.0 + 172.5000 149.2500 -104.0 + 172.2500 159.5000 -104.0 + 168.2500 174.5000 -104.0 + 163.5000 184.2500 -104.0 + 163.2500 186.5000 -104.0 + 154.5000 198.2500 -104.0 + 145.2500 209.5000 -104.0 + 133.5000 217.2500 -104.0 + 131.5000 217.2500 -104.0 + 127.5000 220.2500 -104.0 + 125.5000 220.2500 -104.0 + 121.5000 222.2500 -104.0 + 114.5000 223.2500 -104.0 + 106.5000 221.2500 -104.0 + 104.5000 222.2500 -104.0 + 103.7500 221.5000 -104.0 + 100.5000 221.2500 -104.0 + 96.5000 224.2500 -104.0 + 91.5000 225.2500 -104.0 + 81.5000 223.2500 -104.0 + 73.5000 219.2500 -104.0 + 61.5000 212.2500 -104.0 + 51.7500 202.5000 -104.0 + 48.7500 198.5000 -104.0 + 38.7500 180.5000 -104.0 + 38.7500 178.5000 -104.0 + 36.7500 174.5000 -104.0 + 35.7500 166.5000 -104.0 + 33.7500 159.5000 -104.0 + 34.5000 158.7500 -104.0 + 34.7500 146.5000 -104.0 + 33.7500 143.5000 -104.0 + 34.5000 141.7500 -104.0 + 34.7500 134.5000 -104.0 + 37.5000 128.7500 -104.0 + 37.7500 126.5000 -104.0 + 41.7500 116.5000 -104.0 + 45.5000 112.7500 -104.0 + 48.5000 107.7500 -104.0 + 48.7500 105.5000 -104.0 + 57.5000 93.7500 -104.0 + 60.5000 93.7500 -104.0 + 62.5000 91.7500 -104.0 + 64.5000 91.7500 -104.0 + 70.7500 89.5000 -104.0 + 67.5000 89.2500 -104.0 + 64.5000 90.2500 -104.0 + 62.7500 88.5000 -104.0 +} -104.0 +{ -104.0 + 76.2500 88.5000 -104.0 + 74.5000 90.2500 -104.0 + 75.2500 91.5000 -104.0 + 78.5000 90.7500 -104.0 + 82.2500 96.5000 -104.0 + 85.5000 96.7500 -104.0 + 85.7500 95.5000 -104.0 + 82.5000 88.2500 -104.0 + 80.5000 89.2500 -104.0 +} -104.0 +{ -104.0 + 127.2500 92.5000 -104.0 + 121.5000 96.2500 -104.0 + 120.5000 99.7500 -104.0 + 123.5000 98.7500 -104.0 + 126.5000 95.7500 -104.0 + 128.5000 95.7500 -104.0 + 130.5000 93.7500 -104.0 + 135.5000 94.7500 -104.0 + 137.5000 93.7500 -104.0 + 140.7500 93.5000 -104.0 + 136.7500 92.5000 -104.0 +} -104.0 +{ -104.0 + 58.7500 65.5000 -104.0 + 59.5000 64.7500 -104.0 + 61.2500 65.5000 -104.0 + 60.5000 66.2500 -104.0 +} -104.0 +{ -104.0 + 80.7500 91.5000 -104.0 + 81.5000 90.7500 -104.0 + 83.2500 92.5000 -104.0 + 82.5000 93.2500 -104.0 +} -104.0 +{ -104.0 + 152.7500 97.5000 -104.0 + 153.5000 96.7500 -104.0 + 154.2500 97.5000 -104.0 + 157.2500 101.5000 -104.0 + 156.5000 102.2500 -104.0 + 154.5000 101.2500 -104.0 +} -104.0 +//v 230 z -106.000000 -64.0 +{ -64.0 + 99.2500 37.5000 -64.0 + 95.5000 44.2500 -64.0 + 87.5000 50.2500 -64.0 + 91.2500 55.5000 -64.0 + 91.2500 63.5000 -64.0 + 93.5000 63.7500 -64.0 + 91.7500 61.5000 -64.0 + 91.7500 59.5000 -64.0 + 94.7500 55.5000 -64.0 + 93.5000 55.2500 -64.0 + 91.7500 53.5000 -64.0 + 92.5000 49.7500 -64.0 + 94.5000 48.7500 -64.0 + 97.5000 52.7500 -64.0 + 97.7500 49.5000 -64.0 + 96.7500 47.5000 -64.0 + 97.7500 43.5000 -64.0 + 100.7500 37.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 38.5000 -64.0 + 118.2500 39.5000 -64.0 + 119.2500 41.5000 -64.0 + 119.2500 47.5000 -64.0 + 120.2500 49.5000 -64.0 + 119.5000 50.2500 -64.0 + 119.2500 52.5000 -64.0 + 121.5000 51.7500 -64.0 + 123.2500 52.5000 -64.0 + 124.5000 50.7500 -64.0 + 126.5000 50.7500 -64.0 + 128.5000 52.7500 -64.0 + 130.5000 53.7500 -64.0 + 134.5000 51.7500 -64.0 + 132.7500 50.5000 -64.0 + 130.5000 50.2500 -64.0 + 124.5000 48.2500 -64.0 + 121.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 59.2500 59.5000 -64.0 + 57.2500 61.5000 -64.0 + 52.2500 71.5000 -64.0 + 53.2500 73.5000 -64.0 + 59.5000 67.7500 -64.0 + 62.5000 67.7500 -64.0 + 64.2500 70.5000 -64.0 + 64.2500 72.5000 -64.0 + 69.5000 74.7500 -64.0 + 69.7500 73.5000 -64.0 + 65.7500 69.5000 -64.0 + 63.7500 65.5000 -64.0 + 62.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 152.2500 59.5000 -64.0 + 151.5000 60.2500 -64.0 + 151.2500 63.5000 -64.0 + 150.2500 66.5000 -64.0 + 149.5000 68.2500 -64.0 + 146.5000 73.2500 -64.0 + 147.2500 74.5000 -64.0 + 149.7500 72.5000 -64.0 + 150.7500 70.5000 -64.0 + 153.5000 68.7500 -64.0 + 155.5000 68.7500 -64.0 + 157.2500 70.5000 -64.0 + 159.2500 74.5000 -64.0 + 162.2500 78.5000 -64.0 + 163.5000 77.7500 -64.0 + 163.7500 75.5000 -64.0 + 160.7500 69.5000 -64.0 + 160.7500 67.5000 -64.0 + 159.7500 64.5000 -64.0 + 154.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 65.5000 -64.0 + 126.2500 67.5000 -64.0 + 127.7500 67.5000 -64.0 + 126.7500 65.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 82.5000 -64.0 + 92.2500 83.5000 -64.0 + 93.5000 83.7500 -64.0 +} -64.0 +{ -64.0 + 118.2500 83.5000 -64.0 + 116.2500 86.5000 -64.0 + 120.5000 84.7500 -64.0 +} -64.0 +{ -64.0 + 60.2500 89.5000 -64.0 + 58.5000 92.2500 -64.0 + 56.5000 93.2500 -64.0 + 51.2500 98.5000 -64.0 + 38.5000 120.2500 -64.0 + 38.2500 122.5000 -64.0 + 34.2500 130.5000 -64.0 + 29.5000 148.2500 -64.0 + 29.2500 158.5000 -64.0 + 30.2500 160.5000 -64.0 + 30.2500 165.5000 -64.0 + 32.2500 172.5000 -64.0 + 33.2500 181.5000 -64.0 + 39.2500 196.5000 -64.0 + 45.2500 206.5000 -64.0 + 58.2500 219.5000 -64.0 + 68.2500 226.5000 -64.0 + 79.5000 230.7500 -64.0 + 88.2500 232.5000 -64.0 + 108.5000 232.7500 -64.0 + 110.5000 231.7500 -64.0 + 117.5000 231.7500 -64.0 + 121.5000 229.7500 -64.0 + 124.5000 229.7500 -64.0 + 136.5000 223.7500 -64.0 + 147.5000 215.7500 -64.0 + 158.5000 203.7500 -64.0 + 162.7500 197.5000 -64.0 + 169.5000 184.7500 -64.0 + 178.5000 159.7500 -64.0 + 178.7500 152.5000 -64.0 + 176.7500 146.5000 -64.0 + 176.7500 142.5000 -64.0 + 174.7500 138.5000 -64.0 + 171.7500 124.5000 -64.0 + 160.7500 102.5000 -64.0 + 152.7500 94.5000 -64.0 + 150.5000 94.2500 -64.0 + 148.5000 95.2500 -64.0 + 138.5000 94.2500 -64.0 + 134.5000 92.2500 -64.0 + 131.5000 93.2500 -64.0 + 128.5000 92.2500 -64.0 + 125.5000 95.2500 -64.0 + 122.5000 95.2500 -64.0 + 121.5000 93.2500 -64.0 + 121.2500 98.5000 -64.0 + 117.5000 104.7500 -64.0 + 119.5000 103.7500 -64.0 + 123.5000 97.7500 -64.0 + 129.5000 94.7500 -64.0 + 140.5000 94.7500 -64.0 + 144.2500 96.5000 -64.0 + 145.2500 98.5000 -64.0 + 148.5000 98.7500 -64.0 + 155.2500 108.5000 -64.0 + 159.2500 109.5000 -64.0 + 161.5000 113.7500 -64.0 + 163.5000 114.7500 -64.0 + 166.2500 118.5000 -64.0 + 170.2500 126.5000 -64.0 + 171.2500 136.5000 -64.0 + 173.2500 140.5000 -64.0 + 173.2500 145.5000 -64.0 + 171.2500 150.5000 -64.0 + 172.2500 152.5000 -64.0 + 171.2500 164.5000 -64.0 + 168.2500 173.5000 -64.0 + 164.5000 181.2500 -64.0 + 164.2500 183.5000 -64.0 + 161.2500 186.5000 -64.0 + 158.2500 192.5000 -64.0 + 147.5000 207.2500 -64.0 + 139.5000 213.2500 -64.0 + 121.5000 222.2500 -64.0 + 118.5000 222.2500 -64.0 + 116.5000 223.2500 -64.0 + 101.5000 220.2500 -64.0 + 95.5000 224.2500 -64.0 + 88.5000 224.2500 -64.0 + 81.5000 223.2500 -64.0 + 69.5000 217.2500 -64.0 + 56.7500 207.5000 -64.0 + 50.7500 200.5000 -64.0 + 38.7500 181.5000 -64.0 + 38.7500 179.5000 -64.0 + 37.7500 177.5000 -64.0 + 36.7500 170.5000 -64.0 + 33.7500 159.5000 -64.0 + 34.5000 157.7500 -64.0 + 34.7500 141.5000 -64.0 + 35.7500 139.5000 -64.0 + 34.7500 136.5000 -64.0 + 38.5000 127.7500 -64.0 + 40.7500 119.5000 -64.0 + 48.5000 112.7500 -64.0 + 48.7500 106.5000 -64.0 + 57.5000 94.7500 -64.0 + 60.5000 94.7500 -64.0 + 64.5000 91.7500 -64.0 + 69.5000 91.7500 -64.0 + 69.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 76.2500 89.5000 -64.0 + 75.5000 90.2500 -64.0 + 73.5000 90.2500 -64.0 + 71.5000 91.2500 -64.0 + 73.2500 92.5000 -64.0 + 75.5000 92.7500 -64.0 + 77.5000 91.7500 -64.0 + 79.5000 91.7500 -64.0 + 81.2500 93.5000 -64.0 + 80.2500 95.5000 -64.0 + 85.2500 98.5000 -64.0 + 87.5000 98.7500 -64.0 + 87.7500 96.5000 -64.0 + 86.5000 95.2500 -64.0 + 84.5000 96.2500 -64.0 + 81.7500 94.5000 -64.0 + 82.5000 93.7500 -64.0 + 84.7500 93.5000 -64.0 + 82.5000 90.2500 -64.0 + 80.5000 91.2500 -64.0 +} -64.0 +{ -64.0 + 143.2500 89.5000 -64.0 + 143.2500 90.5000 -64.0 + 144.5000 90.7500 -64.0 +} -64.0 +{ -64.0 + 118.2500 118.5000 -64.0 + 117.5000 121.7500 -64.0 + 121.2500 124.5000 -64.0 + 121.7500 123.5000 -64.0 + 119.7500 121.5000 -64.0 + 119.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 144.2500 132.5000 -64.0 + 143.2500 134.5000 -64.0 + 144.2500 136.5000 -64.0 + 147.5000 136.7500 -64.0 + 147.7500 132.5000 -64.0 +} -64.0 +{ -64.0 + 59.7500 63.5000 -64.0 + 60.5000 62.7500 -64.0 + 61.2500 63.5000 -64.0 + 60.5000 65.2500 -64.0 +} -64.0 +{ -64.0 + 153.7500 65.5000 -64.0 + 155.5000 64.7500 -64.0 + 157.2500 65.5000 -64.0 + 156.5000 67.2500 -64.0 + 154.5000 67.2500 -64.0 +} -64.0 +{ -64.0 + 151.7500 97.5000 -64.0 + 152.5000 96.7500 -64.0 + 155.2500 99.5000 -64.0 + 156.2500 101.5000 -64.0 + 155.5000 103.2500 -64.0 + 152.7500 99.5000 -64.0 +} -64.0 +v 251 z -108.000000 -64.0 +{ -64.0 + 98.2500 38.5000 -64.0 + 95.2500 44.5000 -64.0 + 92.2500 46.5000 -64.0 + 81.5000 50.2500 -64.0 + 84.5000 52.7500 -64.0 + 88.5000 50.7500 -64.0 + 91.7500 53.5000 -64.0 + 90.7500 51.5000 -64.0 + 92.5000 48.7500 -64.0 + 95.5000 49.7500 -64.0 + 97.5000 53.7500 -64.0 + 97.7500 50.5000 -64.0 + 96.7500 48.5000 -64.0 + 96.7500 45.5000 -64.0 + 98.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 39.5000 -64.0 + 119.2500 42.5000 -64.0 + 120.2500 44.5000 -64.0 + 119.5000 52.7500 -64.0 + 122.5000 51.7500 -64.0 + 123.5000 49.7500 -64.0 + 125.5000 49.7500 -64.0 + 132.2500 52.5000 -64.0 + 132.7500 57.5000 -64.0 + 133.7500 55.5000 -64.0 + 136.5000 53.7500 -64.0 + 141.5000 53.7500 -64.0 + 144.5000 54.7500 -64.0 + 149.2500 59.5000 -64.0 + 149.2500 63.5000 -64.0 + 145.5000 71.2500 -64.0 + 145.2500 73.5000 -64.0 + 147.5000 73.7500 -64.0 + 147.7500 72.5000 -64.0 + 153.5000 67.7500 -64.0 + 157.2500 69.5000 -64.0 + 160.2500 74.5000 -64.0 + 160.2500 76.5000 -64.0 + 163.2500 80.5000 -64.0 + 164.7500 79.5000 -64.0 + 163.7500 77.5000 -64.0 + 163.7500 74.5000 -64.0 + 157.7500 60.5000 -64.0 + 152.7500 56.5000 -64.0 + 140.7500 51.5000 -64.0 + 128.5000 49.2500 -64.0 + 122.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 62.2500 56.5000 -64.0 + 60.5000 57.2500 -64.0 + 58.2500 59.5000 -64.0 + 52.5000 70.2500 -64.0 + 52.2500 73.5000 -64.0 + 53.5000 73.7500 -64.0 + 59.5000 66.7500 -64.0 + 62.5000 66.7500 -64.0 + 68.2500 73.5000 -64.0 + 69.7500 73.5000 -64.0 + 64.7500 65.5000 -64.0 + 64.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 64.5000 -64.0 + 131.5000 65.2500 -64.0 + 132.5000 65.7500 -64.0 + 133.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 79.5000 -64.0 + 106.5000 84.7500 -64.0 + 106.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 82.5000 -64.0 + 93.2500 83.5000 -64.0 + 94.5000 83.7500 -64.0 + 94.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 84.5000 -64.0 + 119.2500 85.5000 -64.0 + 120.5000 85.7500 -64.0 +} -64.0 +{ -64.0 + 140.2500 86.5000 -64.0 + 142.7500 88.5000 -64.0 + 141.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 123.2500 88.5000 -64.0 + 122.2500 89.5000 -64.0 + 124.5000 89.7500 -64.0 + 124.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 81.2500 89.5000 -64.0 + 81.2500 92.5000 -64.0 + 79.5000 93.2500 -64.0 + 77.5000 91.2500 -64.0 + 75.5000 92.2500 -64.0 + 72.5000 92.2500 -64.0 + 70.5000 90.2500 -64.0 + 68.5000 91.2500 -64.0 + 60.5000 90.2500 -64.0 + 50.5000 100.2500 -64.0 + 35.5000 129.2500 -64.0 + 29.5000 149.2500 -64.0 + 29.2500 156.5000 -64.0 + 31.2500 163.5000 -64.0 + 31.2500 168.5000 -64.0 + 32.2500 170.5000 -64.0 + 33.2500 179.5000 -64.0 + 40.2500 197.5000 -64.0 + 49.2500 209.5000 -64.0 + 58.2500 219.5000 -64.0 + 68.2500 226.5000 -64.0 + 78.2500 230.5000 -64.0 + 83.2500 231.5000 -64.0 + 114.5000 231.7500 -64.0 + 116.5000 230.7500 -64.0 + 119.5000 230.7500 -64.0 + 129.5000 227.7500 -64.0 + 139.5000 221.7500 -64.0 + 147.7500 214.5000 -64.0 + 156.7500 204.5000 -64.0 + 163.7500 194.5000 -64.0 + 169.7500 182.5000 -64.0 + 177.5000 161.7500 -64.0 + 178.7500 153.5000 -64.0 + 177.7500 151.5000 -64.0 + 174.7500 137.5000 -64.0 + 172.7500 133.5000 -64.0 + 172.7500 130.5000 -64.0 + 170.7500 126.5000 -64.0 + 170.7500 124.5000 -64.0 + 159.7500 102.5000 -64.0 + 152.7500 95.5000 -64.0 + 149.5000 95.2500 -64.0 + 145.5000 97.2500 -64.0 + 140.5000 94.2500 -64.0 + 138.5000 95.2500 -64.0 + 135.5000 94.2500 -64.0 + 132.2500 95.5000 -64.0 + 140.5000 95.7500 -64.0 + 145.5000 100.7500 -64.0 + 148.5000 99.7500 -64.0 + 152.2500 106.5000 -64.0 + 152.5000 108.7500 -64.0 + 158.5000 111.7500 -64.0 + 167.2500 122.5000 -64.0 + 167.2500 124.5000 -64.0 + 169.2500 128.5000 -64.0 + 169.2500 133.5000 -64.0 + 170.2500 135.5000 -64.0 + 170.2500 137.5000 -64.0 + 172.2500 139.5000 -64.0 + 171.2500 153.5000 -64.0 + 172.2500 155.5000 -64.0 + 172.2500 160.5000 -64.0 + 167.5000 174.2500 -64.0 + 167.2500 176.5000 -64.0 + 165.5000 178.2500 -64.0 + 165.2500 180.5000 -64.0 + 160.5000 185.2500 -64.0 + 158.2500 191.5000 -64.0 + 150.2500 203.5000 -64.0 + 145.2500 208.5000 -64.0 + 138.5000 213.2500 -64.0 + 123.5000 221.2500 -64.0 + 121.5000 221.2500 -64.0 + 119.5000 222.2500 -64.0 + 101.5000 220.2500 -64.0 + 93.5000 224.2500 -64.0 + 88.5000 224.2500 -64.0 + 83.5000 223.2500 -64.0 + 73.5000 219.2500 -64.0 + 63.5000 213.2500 -64.0 + 50.7500 200.5000 -64.0 + 44.7500 189.5000 -64.0 + 39.7500 181.5000 -64.0 + 39.7500 179.5000 -64.0 + 36.7500 173.5000 -64.0 + 35.7500 163.5000 -64.0 + 34.7500 161.5000 -64.0 + 34.7500 145.5000 -64.0 + 35.5000 143.7500 -64.0 + 35.7500 134.5000 -64.0 + 39.5000 126.7500 -64.0 + 40.7500 121.5000 -64.0 + 45.5000 114.7500 -64.0 + 49.5000 112.7500 -64.0 + 49.7500 105.5000 -64.0 + 58.5000 95.7500 -64.0 + 60.5000 95.7500 -64.0 + 64.5000 92.7500 -64.0 + 76.5000 93.7500 -64.0 + 79.5000 96.7500 -64.0 + 81.5000 97.7500 -64.0 + 86.5000 98.7500 -64.0 + 86.7500 97.5000 -64.0 + 84.5000 97.2500 -64.0 + 82.7500 93.5000 -64.0 + 83.5000 92.7500 -64.0 + 82.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 90.5000 -64.0 + 89.2500 91.5000 -64.0 + 90.5000 91.7500 -64.0 +} -64.0 +{ -64.0 + 128.2500 92.5000 -64.0 + 126.2500 95.5000 -64.0 + 128.5000 95.7500 -64.0 + 129.7500 92.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 94.5000 -64.0 + 122.2500 97.5000 -64.0 + 123.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 102.5000 -64.0 + 118.5000 106.2500 -64.0 + 119.5000 106.7500 -64.0 + 120.7500 103.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 120.5000 -64.0 + 119.2500 124.5000 -64.0 + 120.5000 124.7500 -64.0 + 126.2500 130.5000 -64.0 + 131.2500 133.5000 -64.0 + 135.5000 133.7500 -64.0 + 138.5000 134.7500 -64.0 + 139.2500 136.5000 -64.0 + 142.2500 138.5000 -64.0 + 147.5000 139.7500 -64.0 + 149.5000 138.7500 -64.0 + 150.7500 132.5000 -64.0 + 145.5000 129.2500 -64.0 + 142.5000 130.2500 -64.0 + 135.7500 126.5000 -64.0 + 133.5000 126.2500 -64.0 + 130.5000 127.2500 -64.0 + 125.7500 125.5000 -64.0 + 126.7500 122.5000 -64.0 + 124.5000 122.2500 -64.0 + 123.5000 124.2500 -64.0 + 121.5000 124.2500 -64.0 + 118.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 61.5000 -64.0 + 153.5000 60.7500 -64.0 + 154.2500 61.5000 -64.0 + 157.2500 65.5000 -64.0 + 156.5000 66.2500 -64.0 + 154.5000 66.2500 -64.0 + 152.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 98.5000 -64.0 + 153.5000 97.7500 -64.0 + 155.2500 99.5000 -64.0 + 155.2500 101.5000 -64.0 + 154.5000 103.2500 -64.0 + 151.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 155.5000 104.7500 -64.0 + 156.2500 106.5000 -64.0 + 155.5000 108.2500 -64.0 + 153.7500 106.5000 -64.0 +} -64.0 +{ -64.0 + 157.7500 107.5000 -64.0 + 158.5000 106.7500 -64.0 + 159.2500 107.5000 -64.0 + 158.5000 108.2500 -64.0 +} -64.0 +{ -64.0 + 173.7500 149.5000 -64.0 + 174.5000 148.7500 -64.0 + 175.2500 149.5000 -64.0 + 174.5000 150.2500 -64.0 +} -64.0 +v 304 z -110.000000 -64.0 +{ -64.0 + 97.2500 40.5000 -64.0 + 96.2500 42.5000 -64.0 + 93.5000 45.2500 -64.0 + 88.5000 48.2500 -64.0 + 86.5000 48.2500 -64.0 + 84.5000 49.2500 -64.0 + 75.5000 49.2500 -64.0 + 73.5000 50.2500 -64.0 + 71.5000 50.2500 -64.0 + 63.5000 54.2500 -64.0 + 59.2500 57.5000 -64.0 + 56.2500 63.5000 -64.0 + 52.2500 69.5000 -64.0 + 51.2500 74.5000 -64.0 + 52.5000 74.7500 -64.0 + 60.5000 65.7500 -64.0 + 62.5000 65.7500 -64.0 + 68.5000 71.7500 -64.0 + 68.7500 68.5000 -64.0 + 66.7500 64.5000 -64.0 + 66.7500 61.5000 -64.0 + 68.5000 56.7500 -64.0 + 72.5000 53.7500 -64.0 + 84.5000 54.7500 -64.0 + 83.7500 51.5000 -64.0 + 85.5000 49.7500 -64.0 + 90.5000 49.7500 -64.0 + 92.5000 48.7500 -64.0 + 94.5000 48.7500 -64.0 + 97.5000 52.7500 -64.0 + 97.7500 50.5000 -64.0 + 96.7500 48.5000 -64.0 + 96.7500 44.5000 -64.0 + 97.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 41.5000 -64.0 + 120.2500 48.5000 -64.0 + 119.2500 53.5000 -64.0 + 121.5000 52.7500 -64.0 + 121.7500 51.5000 -64.0 + 123.5000 49.7500 -64.0 + 127.5000 49.7500 -64.0 + 131.2500 51.5000 -64.0 + 133.2500 55.5000 -64.0 + 133.2500 63.5000 -64.0 + 135.5000 63.7500 -64.0 + 135.7500 58.5000 -64.0 + 136.5000 56.7500 -64.0 + 143.5000 56.7500 -64.0 + 146.2500 60.5000 -64.0 + 145.2500 63.5000 -64.0 + 148.2500 65.5000 -64.0 + 148.2500 70.5000 -64.0 + 151.5000 67.7500 -64.0 + 153.5000 67.7500 -64.0 + 157.2500 69.5000 -64.0 + 161.2500 76.5000 -64.0 + 161.2500 78.5000 -64.0 + 166.5000 84.7500 -64.0 + 166.7500 81.5000 -64.0 + 164.7500 77.5000 -64.0 + 164.7500 75.5000 -64.0 + 160.7500 67.5000 -64.0 + 158.7500 61.5000 -64.0 + 153.5000 56.2500 -64.0 + 145.5000 52.2500 -64.0 + 128.5000 49.2500 -64.0 + 122.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 63.5000 -64.0 + 140.5000 64.2500 -64.0 + 140.2500 66.5000 -64.0 + 141.7500 66.5000 -64.0 + 142.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 147.2500 71.5000 -64.0 + 143.2500 74.5000 -64.0 + 145.5000 74.7500 -64.0 + 147.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 86.5000 -64.0 + 118.2500 90.5000 -64.0 + 119.5000 89.7500 -64.0 + 122.5000 89.7500 -64.0 +} -64.0 +{ -64.0 + 87.2500 87.5000 -64.0 + 89.2500 88.5000 -64.0 + 89.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 60.2500 91.5000 -64.0 + 56.2500 94.5000 -64.0 + 55.2500 96.5000 -64.0 + 52.5000 98.2500 -64.0 + 35.5000 130.2500 -64.0 + 35.2500 133.5000 -64.0 + 32.2500 139.5000 -64.0 + 29.5000 150.2500 -64.0 + 29.2500 154.5000 -64.0 + 31.2500 160.5000 -64.0 + 31.2500 165.5000 -64.0 + 32.2500 167.5000 -64.0 + 32.2500 170.5000 -64.0 + 36.2500 187.5000 -64.0 + 45.2500 203.5000 -64.0 + 60.2500 220.5000 -64.0 + 64.5000 223.7500 -64.0 + 73.5000 228.7500 -64.0 + 87.2500 231.5000 -64.0 + 104.5000 231.7500 -64.0 + 106.5000 230.7500 -64.0 + 118.5000 230.7500 -64.0 + 131.7500 226.5000 -64.0 + 140.5000 220.7500 -64.0 + 150.7500 210.5000 -64.0 + 159.7500 199.5000 -64.0 + 168.7500 183.5000 -64.0 + 177.5000 159.7500 -64.0 + 177.7500 149.5000 -64.0 + 176.7500 147.5000 -64.0 + 175.7500 141.5000 -64.0 + 172.7500 135.5000 -64.0 + 172.7500 133.5000 -64.0 + 170.7500 129.5000 -64.0 + 169.7500 124.5000 -64.0 + 165.5000 117.2500 -64.0 + 159.7500 103.5000 -64.0 + 153.7500 97.5000 -64.0 + 150.5000 97.2500 -64.0 + 148.5000 98.2500 -64.0 + 134.7500 95.5000 -64.0 + 133.5000 96.2500 -64.0 + 134.2500 97.5000 -64.0 + 140.5000 97.7500 -64.0 + 141.5000 99.7500 -64.0 + 145.2500 102.5000 -64.0 + 147.5000 102.7500 -64.0 + 150.2500 106.5000 -64.0 + 150.5000 108.7500 -64.0 + 156.5000 111.7500 -64.0 + 162.2500 117.5000 -64.0 + 169.2500 130.5000 -64.0 + 169.2500 132.5000 -64.0 + 171.2500 138.5000 -64.0 + 170.5000 140.2500 -64.0 + 171.2500 142.5000 -64.0 + 170.5000 144.2500 -64.0 + 170.2500 152.5000 -64.0 + 171.2500 154.5000 -64.0 + 171.2500 162.5000 -64.0 + 170.2500 169.5000 -64.0 + 165.5000 176.2500 -64.0 + 164.2500 180.5000 -64.0 + 161.2500 183.5000 -64.0 + 157.2500 191.5000 -64.0 + 148.2500 205.5000 -64.0 + 132.5000 216.2500 -64.0 + 120.5000 222.2500 -64.0 + 115.5000 222.2500 -64.0 + 101.5000 219.2500 -64.0 + 95.5000 223.2500 -64.0 + 91.5000 223.2500 -64.0 + 89.5000 224.2500 -64.0 + 84.5000 223.2500 -64.0 + 66.5000 215.2500 -64.0 + 51.7500 201.5000 -64.0 + 47.7500 194.5000 -64.0 + 47.7500 192.5000 -64.0 + 44.7500 188.5000 -64.0 + 38.7500 176.5000 -64.0 + 38.7500 174.5000 -64.0 + 36.7500 170.5000 -64.0 + 36.7500 168.5000 -64.0 + 35.7500 166.5000 -64.0 + 35.7500 159.5000 -64.0 + 34.7500 157.5000 -64.0 + 34.7500 151.5000 -64.0 + 35.5000 149.7500 -64.0 + 36.7500 132.5000 -64.0 + 40.5000 128.7500 -64.0 + 40.7500 124.5000 -64.0 + 43.7500 117.5000 -64.0 + 48.5000 112.7500 -64.0 + 50.5000 112.7500 -64.0 + 50.7500 110.5000 -64.0 + 49.7500 108.5000 -64.0 + 50.7500 105.5000 -64.0 + 58.5000 96.7500 -64.0 + 62.2500 97.5000 -64.0 + 74.5000 97.7500 -64.0 + 76.2500 100.5000 -64.0 + 77.5000 99.7500 -64.0 + 82.5000 99.7500 -64.0 + 83.7500 98.5000 -64.0 + 82.7500 96.5000 -64.0 + 82.7500 94.5000 -64.0 + 84.5000 92.7500 -64.0 + 87.7500 92.5000 -64.0 + 83.5000 91.2500 -64.0 + 79.5000 96.2500 -64.0 + 72.5000 94.2500 -64.0 + 70.5000 95.2500 -64.0 + 64.5000 92.2500 -64.0 +} -64.0 +{ -64.0 + 120.2500 94.5000 -64.0 + 121.2500 95.5000 -64.0 + 122.5000 94.7500 -64.0 + 124.2500 95.5000 -64.0 + 124.2500 97.5000 -64.0 + 130.7500 96.5000 -64.0 + 126.5000 96.2500 -64.0 + 125.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 99.5000 -64.0 + 120.5000 100.2500 -64.0 + 119.2500 104.5000 -64.0 + 117.5000 105.2500 -64.0 + 119.2500 107.5000 -64.0 + 119.2500 109.5000 -64.0 + 119.7500 108.5000 -64.0 + 121.5000 104.7500 -64.0 + 121.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 100.5000 -64.0 + 88.2500 102.5000 -64.0 + 88.7500 101.5000 -64.0 +} -64.0 +{ -64.0 + 88.2500 120.5000 -64.0 + 88.2500 121.5000 -64.0 + 89.5000 121.7500 -64.0 + 90.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 122.5000 -64.0 + 119.2500 124.5000 -64.0 + 122.5000 127.7500 -64.0 + 128.5000 130.7500 -64.0 + 131.2500 136.5000 -64.0 + 133.2500 137.5000 -64.0 + 136.5000 136.7500 -64.0 + 148.5000 142.7500 -64.0 + 153.7500 140.5000 -64.0 + 154.7500 138.5000 -64.0 + 153.7500 136.5000 -64.0 + 153.7500 130.5000 -64.0 + 152.7500 128.5000 -64.0 + 151.5000 129.2500 -64.0 + 151.2500 133.5000 -64.0 + 152.2500 135.5000 -64.0 + 151.5000 137.2500 -64.0 + 149.5000 137.2500 -64.0 + 147.5000 139.2500 -64.0 + 146.7500 138.5000 -64.0 + 146.7500 133.5000 -64.0 + 145.7500 131.5000 -64.0 + 145.7500 127.5000 -64.0 + 142.5000 129.2500 -64.0 + 139.5000 125.2500 -64.0 + 137.5000 124.2500 -64.0 + 132.5000 123.2500 -64.0 + 130.5000 124.2500 -64.0 + 125.5000 124.2500 -64.0 + 126.2500 126.5000 -64.0 + 124.5000 127.2500 -64.0 + 120.7500 124.5000 -64.0 + 119.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 134.7500 53.5000 -64.0 + 135.5000 52.7500 -64.0 + 137.2500 53.5000 -64.0 + 136.5000 54.2500 -64.0 +} -64.0 +{ -64.0 + 148.7500 58.5000 -64.0 + 150.5000 57.7500 -64.0 + 154.2500 60.5000 -64.0 + 157.2500 65.5000 -64.0 + 156.5000 66.2500 -64.0 + 153.5000 66.2500 -64.0 + 151.7500 62.5000 -64.0 + 150.5000 62.2500 -64.0 +} -64.0 +{ -64.0 + 62.7500 63.5000 -64.0 + 64.5000 62.7500 -64.0 + 65.2500 64.5000 -64.0 + 63.5000 65.2500 -64.0 +} -64.0 +{ -64.0 + 151.7500 99.5000 -64.0 + 152.5000 98.7500 -64.0 + 154.2500 101.5000 -64.0 + 155.2500 103.5000 -64.0 + 153.5000 105.2500 -64.0 + 150.7500 101.5000 -64.0 +} -64.0 +{ -64.0 + 154.7500 105.5000 -64.0 + 156.5000 104.7500 -64.0 + 158.2500 105.5000 -64.0 + 157.2500 107.5000 -64.0 + 155.5000 108.2500 -64.0 + 153.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 133.7500 126.5000 -64.0 + 135.5000 125.7500 -64.0 + 136.2500 127.5000 -64.0 + 134.5000 128.2500 -64.0 +} -64.0 +{ -64.0 + 132.7500 130.5000 -64.0 + 134.5000 129.7500 -64.0 + 136.2500 131.5000 -64.0 + 135.5000 132.2500 -64.0 + 133.5000 132.2500 -64.0 +} -64.0 +{ -64.0 + 139.7500 131.5000 -64.0 + 140.5000 130.7500 -64.0 + 142.2500 131.5000 -64.0 + 140.5000 133.2500 -64.0 +} -64.0 +{ -64.0 + 171.7500 148.5000 -64.0 + 172.5000 147.7500 -64.0 + 174.2500 148.5000 -64.0 + 175.2500 150.5000 -64.0 + 173.5000 151.2500 -64.0 + 171.7500 150.5000 -64.0 +} -64.0 +{ -64.0 + 99.7500 225.5000 -64.0 + 100.5000 224.7500 -64.0 + 101.2500 225.5000 -64.0 + 100.5000 226.2500 -64.0 +} -64.0 +v 387 z -112.000000 -64.0 +{ -64.0 + 97.2500 40.5000 -64.0 + 95.2500 44.5000 -64.0 + 89.5000 48.2500 -64.0 + 85.5000 48.2500 -64.0 + 83.5000 49.2500 -64.0 + 81.5000 49.2500 -64.0 + 79.5000 48.2500 -64.0 + 77.5000 49.2500 -64.0 + 72.5000 49.2500 -64.0 + 68.5000 51.2500 -64.0 + 66.5000 51.2500 -64.0 + 59.5000 57.2500 -64.0 + 49.5000 75.2500 -64.0 + 49.2500 77.5000 -64.0 + 51.5000 76.7500 -64.0 + 51.7500 75.5000 -64.0 + 59.5000 65.7500 -64.0 + 62.5000 65.7500 -64.0 + 65.5000 66.7500 -64.0 + 68.2500 70.5000 -64.0 + 71.5000 70.7500 -64.0 + 70.7500 69.5000 -64.0 + 72.5000 67.7500 -64.0 + 72.5000 65.2500 -64.0 + 70.5000 68.2500 -64.0 + 68.7500 67.5000 -64.0 + 67.7500 65.5000 -64.0 + 69.5000 64.7500 -64.0 + 69.7500 61.5000 -64.0 + 73.7500 57.5000 -64.0 + 75.7500 53.5000 -64.0 + 78.5000 50.7500 -64.0 + 80.5000 50.7500 -64.0 + 82.5000 51.7500 -64.0 + 86.5000 49.7500 -64.0 + 90.5000 49.7500 -64.0 + 92.5000 48.7500 -64.0 + 94.5000 48.7500 -64.0 + 97.5000 52.7500 -64.0 + 97.7500 50.5000 -64.0 + 95.7500 45.5000 -64.0 + 97.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 43.5000 -64.0 + 121.2500 48.5000 -64.0 + 118.5000 52.2500 -64.0 + 118.2500 56.5000 -64.0 + 119.5000 54.7500 -64.0 + 121.5000 53.7500 -64.0 + 121.7500 50.5000 -64.0 + 125.5000 48.7500 -64.0 + 122.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 51.5000 -64.0 + 133.2500 55.5000 -64.0 + 134.5000 55.7500 -64.0 + 135.5000 53.7500 -64.0 + 138.2500 55.5000 -64.0 + 138.7500 54.5000 -64.0 + 140.5000 53.7500 -64.0 + 141.2500 55.5000 -64.0 + 139.2500 56.5000 -64.0 + 140.2500 58.5000 -64.0 + 142.5000 57.7500 -64.0 + 146.5000 59.7500 -64.0 + 149.2500 63.5000 -64.0 + 149.2500 68.5000 -64.0 + 153.5000 66.7500 -64.0 + 157.2500 69.5000 -64.0 + 169.5000 91.7500 -64.0 + 169.7500 86.5000 -64.0 + 167.7500 82.5000 -64.0 + 167.7500 80.5000 -64.0 + 160.7500 66.5000 -64.0 + 155.7500 58.5000 -64.0 + 151.5000 55.2500 -64.0 + 145.7500 52.5000 -64.0 + 141.5000 52.2500 -64.0 + 139.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 58.5000 -64.0 + 107.2500 60.5000 -64.0 + 107.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 59.5000 -64.0 + 118.2500 64.5000 -64.0 + 119.5000 64.7500 -64.0 + 119.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 62.5000 -64.0 + 135.5000 63.7500 -64.0 + 138.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 82.5000 -64.0 + 105.2500 84.5000 -64.0 + 105.7500 85.5000 -64.0 + 106.7500 83.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 84.5000 -64.0 + 92.2500 85.5000 -64.0 + 93.7500 84.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 86.5000 -64.0 + 89.2500 87.5000 -64.0 + 91.5000 87.7500 -64.0 +} -64.0 +{ -64.0 + 118.2500 86.5000 -64.0 + 118.2500 87.5000 -64.0 + 119.2500 89.5000 -64.0 + 120.7500 89.5000 -64.0 + 119.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 87.5000 -64.0 + 93.2500 88.5000 -64.0 + 94.5000 88.7500 -64.0 + 94.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 90.5000 -64.0 + 83.2500 91.5000 -64.0 + 85.5000 91.7500 -64.0 + 84.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 60.2500 92.5000 -64.0 + 59.5000 93.2500 -64.0 + 57.5000 94.2500 -64.0 + 52.5000 99.2500 -64.0 + 49.2500 104.5000 -64.0 + 42.2500 118.5000 -64.0 + 37.5000 127.2500 -64.0 + 35.2500 133.5000 -64.0 + 34.5000 135.2500 -64.0 + 31.2500 144.5000 -64.0 + 30.5000 146.2500 -64.0 + 30.2500 156.5000 -64.0 + 31.2500 158.5000 -64.0 + 31.2500 162.5000 -64.0 + 32.2500 164.5000 -64.0 + 32.2500 167.5000 -64.0 + 33.2500 169.5000 -64.0 + 33.2500 172.5000 -64.0 + 34.2500 174.5000 -64.0 + 34.2500 176.5000 -64.0 + 35.2500 178.5000 -64.0 + 35.2500 181.5000 -64.0 + 36.2500 183.5000 -64.0 + 36.2500 185.5000 -64.0 + 42.2500 197.5000 -64.0 + 48.2500 205.5000 -64.0 + 57.2500 216.5000 -64.0 + 58.2500 218.5000 -64.0 + 59.5000 218.7500 -64.0 + 61.2500 220.5000 -64.0 + 65.5000 223.7500 -64.0 + 74.5000 228.7500 -64.0 + 81.5000 229.7500 -64.0 + 83.2500 230.5000 -64.0 + 107.5000 230.7500 -64.0 + 109.5000 229.7500 -64.0 + 120.5000 229.7500 -64.0 + 122.5000 228.7500 -64.0 + 124.5000 228.7500 -64.0 + 135.5000 223.7500 -64.0 + 141.5000 218.7500 -64.0 + 143.5000 217.7500 -64.0 + 147.5000 212.7500 -64.0 + 153.7500 205.5000 -64.0 + 162.7500 193.5000 -64.0 + 163.7500 191.5000 -64.0 + 166.5000 187.7500 -64.0 + 169.7500 179.5000 -64.0 + 170.5000 177.7500 -64.0 + 174.7500 165.5000 -64.0 + 176.5000 161.7500 -64.0 + 176.7500 159.5000 -64.0 + 177.5000 157.7500 -64.0 + 177.7500 149.5000 -64.0 + 176.7500 147.5000 -64.0 + 176.7500 145.5000 -64.0 + 173.7500 139.5000 -64.0 + 169.7500 127.5000 -64.0 + 157.7500 101.5000 -64.0 + 154.7500 98.5000 -64.0 + 151.5000 98.2500 -64.0 + 147.5000 100.2500 -64.0 + 142.5000 100.2500 -64.0 + 137.5000 99.2500 -64.0 + 133.7500 97.5000 -64.0 + 131.5000 99.2500 -64.0 + 130.7500 98.5000 -64.0 + 123.5000 98.2500 -64.0 + 121.5000 100.2500 -64.0 + 121.2500 102.5000 -64.0 + 119.5000 104.2500 -64.0 + 117.5000 104.2500 -64.0 + 115.5000 105.2500 -64.0 + 116.5000 105.7500 -64.0 + 118.2500 106.5000 -64.0 + 119.2500 108.5000 -64.0 + 120.5000 108.7500 -64.0 + 122.5000 106.7500 -64.0 + 122.7500 102.5000 -64.0 + 127.5000 99.7500 -64.0 + 130.5000 99.7500 -64.0 + 133.5000 102.7500 -64.0 + 137.5000 104.7500 -64.0 + 141.2500 106.5000 -64.0 + 144.5000 106.7500 -64.0 + 146.5000 104.7500 -64.0 + 147.2500 105.5000 -64.0 + 148.2500 107.5000 -64.0 + 155.5000 113.7500 -64.0 + 157.5000 114.7500 -64.0 + 164.2500 122.5000 -64.0 + 167.2500 127.5000 -64.0 + 167.2500 129.5000 -64.0 + 168.2500 131.5000 -64.0 + 168.2500 133.5000 -64.0 + 169.2500 135.5000 -64.0 + 169.2500 141.5000 -64.0 + 168.2500 150.5000 -64.0 + 170.2500 154.5000 -64.0 + 170.2500 160.5000 -64.0 + 169.2500 167.5000 -64.0 + 162.2500 181.5000 -64.0 + 161.5000 183.2500 -64.0 + 154.2500 194.5000 -64.0 + 151.2500 200.5000 -64.0 + 144.5000 207.2500 -64.0 + 142.2500 208.5000 -64.0 + 135.5000 213.2500 -64.0 + 131.5000 216.2500 -64.0 + 119.5000 222.2500 -64.0 + 115.5000 222.2500 -64.0 + 113.5000 221.2500 -64.0 + 106.5000 220.2500 -64.0 + 101.5000 218.2500 -64.0 + 97.5000 222.2500 -64.0 + 95.5000 222.2500 -64.0 + 93.5000 223.2500 -64.0 + 88.5000 223.2500 -64.0 + 81.5000 222.2500 -64.0 + 75.5000 219.2500 -64.0 + 66.5000 214.2500 -64.0 + 64.5000 213.2500 -64.0 + 51.7500 200.5000 -64.0 + 48.7500 195.5000 -64.0 + 48.7500 193.5000 -64.0 + 43.7500 185.5000 -64.0 + 39.7500 177.5000 -64.0 + 39.7500 175.5000 -64.0 + 37.7500 171.5000 -64.0 + 37.7500 169.5000 -64.0 + 36.7500 167.5000 -64.0 + 36.7500 161.5000 -64.0 + 37.7500 159.5000 -64.0 + 35.7500 155.5000 -64.0 + 35.7500 145.5000 -64.0 + 36.5000 143.7500 -64.0 + 36.7500 136.5000 -64.0 + 40.7500 128.5000 -64.0 + 41.7500 123.5000 -64.0 + 43.7500 118.5000 -64.0 + 48.5000 113.7500 -64.0 + 50.5000 112.7500 -64.0 + 52.7500 110.5000 -64.0 + 51.7500 108.5000 -64.0 + 51.7500 106.5000 -64.0 + 50.7500 104.5000 -64.0 + 52.5000 102.7500 -64.0 + 54.5000 102.7500 -64.0 + 60.5000 97.7500 -64.0 + 64.2500 99.5000 -64.0 + 72.5000 99.7500 -64.0 + 76.5000 101.7500 -64.0 + 78.2500 102.5000 -64.0 + 82.5000 102.7500 -64.0 + 85.5000 101.7500 -64.0 + 88.2500 105.5000 -64.0 + 88.7500 104.5000 -64.0 + 86.7500 100.5000 -64.0 + 82.5000 99.2500 -64.0 + 80.5000 100.2500 -64.0 + 78.5000 100.2500 -64.0 + 73.7500 96.5000 -64.0 + 67.5000 96.2500 -64.0 + 66.7500 94.5000 -64.0 + 63.5000 93.2500 -64.0 + 61.7500 92.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 119.5000 -64.0 + 88.5000 121.2500 -64.0 + 86.5000 121.2500 -64.0 + 82.5000 123.2500 -64.0 + 80.5000 122.2500 -64.0 + 79.2500 126.5000 -64.0 + 81.5000 126.7500 -64.0 + 88.7500 123.5000 -64.0 + 90.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 122.5000 -64.0 + 127.5000 125.2500 -64.0 + 126.5000 128.2500 -64.0 + 121.5000 126.2500 -64.0 + 121.2500 127.5000 -64.0 + 124.2500 130.5000 -64.0 + 129.5000 130.7500 -64.0 + 131.5000 129.7500 -64.0 + 136.5000 129.7500 -64.0 + 138.2500 130.5000 -64.0 + 137.5000 132.2500 -64.0 + 133.5000 134.2500 -64.0 + 131.5000 134.2500 -64.0 + 131.2500 137.5000 -64.0 + 134.2500 139.5000 -64.0 + 141.5000 139.7500 -64.0 + 149.2500 144.5000 -64.0 + 153.5000 144.7500 -64.0 + 153.7500 143.5000 -64.0 + 155.5000 142.7500 -64.0 + 156.7500 139.5000 -64.0 + 155.7500 137.5000 -64.0 + 153.5000 137.2500 -64.0 + 153.2500 138.5000 -64.0 + 151.5000 139.2500 -64.0 + 153.2500 142.5000 -64.0 + 152.5000 144.2500 -64.0 + 149.7500 140.5000 -64.0 + 146.7500 138.5000 -64.0 + 146.7500 132.5000 -64.0 + 142.7500 128.5000 -64.0 + 140.7500 124.5000 -64.0 + 140.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 123.5000 -64.0 + 150.2500 124.5000 -64.0 + 151.5000 124.7500 -64.0 + 153.2500 126.5000 -64.0 + 153.5000 130.7500 -64.0 + 155.5000 129.7500 -64.0 + 153.7500 128.5000 -64.0 + 154.5000 126.7500 -64.0 + 154.7500 124.5000 -64.0 + 152.7500 123.5000 -64.0 +} -64.0 +{ -64.0 + 67.7500 54.5000 -64.0 + 68.5000 53.7500 -64.0 + 70.5000 53.7500 -64.0 + 72.2500 54.5000 -64.0 + 68.5000 58.2500 -64.0 + 68.2500 60.5000 -64.0 + 66.5000 61.2500 -64.0 + 66.2500 62.5000 -64.0 + 65.5000 64.2500 -64.0 + 62.5000 64.2500 -64.0 + 60.7500 62.5000 -64.0 + 63.5000 60.7500 -64.0 + 63.7500 57.5000 -64.0 + 65.5000 55.7500 -64.0 +} -64.0 +{ -64.0 + 144.7500 56.5000 -64.0 + 145.5000 55.7500 -64.0 + 150.5000 57.7500 -64.0 + 154.2500 60.5000 -64.0 + 157.2500 65.5000 -64.0 + 156.5000 67.2500 -64.0 + 154.5000 66.2500 -64.0 + 153.7500 64.5000 -64.0 + 150.7500 62.5000 -64.0 + 149.7500 60.5000 -64.0 + 145.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 132.7500 99.5000 -64.0 + 133.5000 98.7500 -64.0 + 135.2500 99.5000 -64.0 + 134.5000 100.2500 -64.0 +} -64.0 +{ -64.0 + 150.7500 101.5000 -64.0 + 152.5000 100.7500 -64.0 + 153.2500 102.5000 -64.0 + 151.5000 103.2500 -64.0 +} -64.0 +{ -64.0 + 156.7500 109.5000 -64.0 + 157.5000 108.7500 -64.0 + 158.2500 109.5000 -64.0 + 157.5000 110.2500 -64.0 +} -64.0 +{ -64.0 + 132.7500 124.5000 -64.0 + 134.5000 123.7500 -64.0 + 136.2500 124.5000 -64.0 + 134.5000 126.2500 -64.0 + 135.2500 127.5000 -64.0 + 134.5000 128.2500 -64.0 + 132.5000 128.2500 -64.0 + 131.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 170.7500 144.5000 -64.0 + 171.5000 143.7500 -64.0 + 173.2500 144.5000 -64.0 + 173.2500 146.5000 -64.0 + 174.2500 148.5000 -64.0 + 174.2500 150.5000 -64.0 + 172.5000 151.2500 -64.0 + 170.7500 150.5000 -64.0 + 170.7500 148.5000 -64.0 + 169.7500 146.5000 -64.0 +} -64.0 +{ -64.0 + 172.7500 153.5000 -64.0 + 173.5000 152.7500 -64.0 + 174.2500 153.5000 -64.0 + 173.5000 154.2500 -64.0 +} -64.0 +v 392 z -114.000000 -64.0 +{ -64.0 + 95.2500 43.5000 -64.0 + 94.5000 45.2500 -64.0 + 88.5000 48.2500 -64.0 + 91.2500 50.5000 -64.0 + 92.5000 49.7500 -64.0 + 96.2500 50.5000 -64.0 + 97.2500 52.5000 -64.0 + 98.7500 52.5000 -64.0 + 95.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 44.5000 -64.0 + 121.2500 47.5000 -64.0 + 118.5000 53.2500 -64.0 + 118.2500 55.5000 -64.0 + 121.5000 53.7500 -64.0 + 120.7500 51.5000 -64.0 + 122.5000 49.7500 -64.0 + 125.5000 49.7500 -64.0 +} -64.0 +{ -64.0 + 78.2500 49.5000 -64.0 + 77.5000 50.2500 -64.0 + 71.5000 50.2500 -64.0 + 65.5000 52.2500 -64.0 + 61.5000 55.2500 -64.0 + 55.2500 63.5000 -64.0 + 46.5000 79.2500 -64.0 + 46.5000 82.7500 -64.0 + 53.5000 73.7500 -64.0 + 57.5000 67.7500 -64.0 + 61.5000 64.7500 -64.0 + 63.5000 64.7500 -64.0 + 67.2500 67.5000 -64.0 + 68.2500 69.5000 -64.0 + 70.2500 70.5000 -64.0 + 70.7500 69.5000 -64.0 + 67.7500 66.5000 -64.0 + 67.7500 60.5000 -64.0 + 64.5000 60.2500 -64.0 + 64.2500 62.5000 -64.0 + 62.5000 63.2500 -64.0 + 60.5000 64.2500 -64.0 + 58.7500 63.5000 -64.0 + 64.5000 56.7500 -64.0 + 68.5000 53.7500 -64.0 + 70.5000 53.7500 -64.0 + 71.2500 55.5000 -64.0 + 72.5000 55.7500 -64.0 + 72.7500 54.5000 -64.0 + 75.5000 51.7500 -64.0 + 77.5000 51.7500 -64.0 + 79.5000 50.7500 -64.0 + 83.5000 50.7500 -64.0 + 84.7500 49.5000 -64.0 +} -64.0 +{ -64.0 + 137.2500 52.5000 -64.0 + 136.2500 54.5000 -64.0 + 142.5000 55.7500 -64.0 + 148.5000 59.7500 -64.0 + 147.7500 58.5000 -64.0 + 148.5000 57.7500 -64.0 + 151.5000 58.7500 -64.0 + 157.2500 65.5000 -64.0 + 155.5000 66.2500 -64.0 + 151.7500 63.5000 -64.0 + 150.7500 61.5000 -64.0 + 149.2500 60.5000 -64.0 + 150.2500 62.5000 -64.0 + 149.5000 67.7500 -64.0 + 151.5000 66.7500 -64.0 + 154.5000 66.7500 -64.0 + 158.2500 70.5000 -64.0 + 164.2500 82.5000 -64.0 + 167.2500 85.5000 -64.0 + 167.2500 88.5000 -64.0 + 169.2500 92.5000 -64.0 + 169.2500 98.5000 -64.0 + 170.5000 98.7500 -64.0 + 170.7500 89.5000 -64.0 + 169.7500 87.5000 -64.0 + 169.7500 85.5000 -64.0 + 167.7500 81.5000 -64.0 + 167.7500 79.5000 -64.0 + 165.5000 76.2500 -64.0 + 160.7500 65.5000 -64.0 + 155.7500 58.5000 -64.0 + 150.5000 55.2500 -64.0 +} -64.0 +{ -64.0 + 107.2500 57.5000 -64.0 + 107.2500 65.5000 -64.0 + 108.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 70.2500 58.5000 -64.0 + 70.2500 59.5000 -64.0 + 71.5000 59.7500 -64.0 +} -64.0 +{ -64.0 + 93.2500 84.5000 -64.0 + 91.2500 87.5000 -64.0 + 94.5000 87.7500 -64.0 + 94.7500 84.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 85.5000 -64.0 + 72.2500 86.5000 -64.0 + 73.5000 86.7500 -64.0 + 73.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 87.5000 -64.0 + 118.5000 88.2500 -64.0 + 118.5000 90.7500 -64.0 + 120.5000 89.7500 -64.0 +} -64.0 +{ -64.0 + 81.2500 89.5000 -64.0 + 82.2500 90.5000 -64.0 + 85.5000 90.7500 -64.0 + 83.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 59.2500 94.5000 -64.0 + 57.5000 95.2500 -64.0 + 52.5000 100.2500 -64.0 + 48.5000 107.2500 -64.0 + 48.2500 109.5000 -64.0 + 39.2500 124.5000 -64.0 + 33.2500 139.5000 -64.0 + 30.5000 147.2500 -64.0 + 30.2500 155.5000 -64.0 + 32.2500 161.5000 -64.0 + 33.2500 169.5000 -64.0 + 35.2500 176.5000 -64.0 + 36.2500 183.5000 -64.0 + 39.2500 189.5000 -64.0 + 39.2500 191.5000 -64.0 + 59.2500 218.5000 -64.0 + 60.5000 218.7500 -64.0 + 66.5000 223.7500 -64.0 + 74.5000 227.7500 -64.0 + 81.2500 229.5000 -64.0 + 115.5000 229.7500 -64.0 + 117.5000 228.7500 -64.0 + 121.5000 228.7500 -64.0 + 123.5000 227.7500 -64.0 + 125.5000 227.7500 -64.0 + 133.5000 223.7500 -64.0 + 141.5000 218.7500 -64.0 + 155.7500 201.5000 -64.0 + 157.7500 197.5000 -64.0 + 159.5000 196.7500 -64.0 + 163.7500 190.5000 -64.0 + 169.7500 179.5000 -64.0 + 173.7500 165.5000 -64.0 + 176.7500 159.5000 -64.0 + 177.7500 150.5000 -64.0 + 176.7500 148.5000 -64.0 + 176.7500 146.5000 -64.0 + 170.7500 132.5000 -64.0 + 166.7500 120.5000 -64.0 + 158.7500 103.5000 -64.0 + 155.5000 100.2500 -64.0 + 153.5000 99.2500 -64.0 + 147.5000 102.2500 -64.0 + 135.2500 101.5000 -64.0 + 136.2500 103.5000 -64.0 + 135.5000 104.2500 -64.0 + 130.7500 101.5000 -64.0 + 127.5000 101.2500 -64.0 + 124.5000 102.2500 -64.0 + 120.5000 106.2500 -64.0 + 119.7500 105.5000 -64.0 + 114.5000 105.2500 -64.0 + 114.2500 106.5000 -64.0 + 115.5000 105.7500 -64.0 + 118.5000 106.7500 -64.0 + 121.5000 109.7500 -64.0 + 123.5000 110.7500 -64.0 + 124.7500 106.5000 -64.0 + 127.5000 104.7500 -64.0 + 137.5000 105.7500 -64.0 + 141.2500 108.5000 -64.0 + 143.5000 108.7500 -64.0 + 149.2500 111.5000 -64.0 + 149.2500 113.5000 -64.0 + 144.5000 118.2500 -64.0 + 144.2500 120.5000 -64.0 + 149.2500 125.5000 -64.0 + 151.5000 125.7500 -64.0 + 154.5000 124.7500 -64.0 + 154.7500 123.5000 -64.0 + 156.5000 122.7500 -64.0 + 158.2500 123.5000 -64.0 + 157.5000 124.2500 -64.0 + 157.2500 126.5000 -64.0 + 153.5000 129.2500 -64.0 + 153.2500 131.5000 -64.0 + 156.2500 133.5000 -64.0 + 156.2500 135.5000 -64.0 + 159.5000 132.7500 -64.0 + 157.7500 128.5000 -64.0 + 159.5000 126.7500 -64.0 + 158.7500 125.5000 -64.0 + 159.5000 121.7500 -64.0 + 161.2500 123.5000 -64.0 + 161.2500 125.5000 -64.0 + 163.5000 125.7500 -64.0 + 167.2500 132.5000 -64.0 + 167.2500 135.5000 -64.0 + 170.2500 137.5000 -64.0 + 167.5000 140.2500 -64.0 + 167.2500 145.5000 -64.0 + 165.5000 147.2500 -64.0 + 165.2500 149.5000 -64.0 + 169.2500 155.5000 -64.0 + 169.2500 162.5000 -64.0 + 167.2500 170.5000 -64.0 + 162.2500 178.5000 -64.0 + 161.2500 183.5000 -64.0 + 158.5000 186.2500 -64.0 + 148.2500 202.5000 -64.0 + 135.5000 213.2500 -64.0 + 129.2500 216.5000 -64.0 + 122.5000 221.2500 -64.0 + 119.5000 221.2500 -64.0 + 117.5000 222.2500 -64.0 + 112.5000 221.2500 -64.0 + 108.7500 219.5000 -64.0 + 105.5000 219.2500 -64.0 + 101.5000 217.2500 -64.0 + 101.2500 218.5000 -64.0 + 96.5000 222.2500 -64.0 + 83.5000 222.2500 -64.0 + 78.5000 220.2500 -64.0 + 65.5000 213.2500 -64.0 + 51.5000 199.2500 -64.0 + 47.7500 188.5000 -64.0 + 43.7500 184.5000 -64.0 + 39.7500 176.5000 -64.0 + 39.7500 174.5000 -64.0 + 37.7500 170.5000 -64.0 + 37.7500 157.5000 -64.0 + 36.7500 155.5000 -64.0 + 36.7500 143.5000 -64.0 + 37.7500 141.5000 -64.0 + 36.7500 139.5000 -64.0 + 38.7500 135.5000 -64.0 + 42.7500 121.5000 -64.0 + 47.5000 115.7500 -64.0 + 55.5000 109.7500 -64.0 + 53.7500 106.5000 -64.0 + 52.5000 107.2500 -64.0 + 50.7500 106.5000 -64.0 + 53.5000 102.7500 -64.0 + 54.2500 103.5000 -64.0 + 54.2500 105.5000 -64.0 + 58.7500 102.5000 -64.0 + 59.7500 100.5000 -64.0 + 61.5000 99.7500 -64.0 + 63.2500 100.5000 -64.0 + 71.5000 100.7500 -64.0 + 73.2500 102.5000 -64.0 + 75.5000 102.7500 -64.0 + 74.7500 100.5000 -64.0 + 67.7500 98.5000 -64.0 + 68.5000 96.7500 -64.0 + 67.7500 95.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 94.5000 -64.0 + 96.5000 95.2500 -64.0 + 97.2500 96.5000 -64.0 + 98.7500 96.5000 -64.0 + 99.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 95.5000 -64.0 + 111.5000 97.7500 -64.0 + 113.5000 96.7500 -64.0 + 111.7500 95.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 101.5000 -64.0 + 79.5000 103.2500 -64.0 + 76.2500 103.5000 -64.0 + 78.5000 106.7500 -64.0 + 82.5000 104.7500 -64.0 + 84.5000 104.7500 -64.0 + 88.2500 107.5000 -64.0 + 88.7500 106.5000 -64.0 + 83.7500 101.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 117.5000 -64.0 + 132.2500 118.5000 -64.0 + 133.5000 119.7500 -64.0 + 133.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 120.5000 -64.0 + 88.5000 122.2500 -64.0 + 83.5000 125.2500 -64.0 + 77.5000 125.2500 -64.0 + 75.7500 124.5000 -64.0 + 76.5000 123.7500 -64.0 + 75.5000 123.2500 -64.0 + 75.2500 124.5000 -64.0 + 68.2500 128.5000 -64.0 + 69.2500 130.5000 -64.0 + 77.2500 132.5000 -64.0 + 79.5000 131.7500 -64.0 + 79.7500 130.5000 -64.0 + 82.5000 127.7500 -64.0 + 88.5000 124.7500 -64.0 + 91.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 120.5000 -64.0 + 142.2500 121.5000 -64.0 + 142.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 122.5000 -64.0 + 119.2500 125.5000 -64.0 + 120.7500 125.5000 -64.0 + 119.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 133.2500 122.5000 -64.0 + 132.5000 123.2500 -64.0 + 130.5000 123.2500 -64.0 + 124.5000 128.2500 -64.0 + 122.5000 127.2500 -64.0 + 122.2500 128.5000 -64.0 + 123.5000 129.7500 -64.0 + 125.5000 130.7500 -64.0 + 127.2500 131.5000 -64.0 + 130.5000 131.7500 -64.0 + 132.2500 132.5000 -64.0 + 132.2500 137.5000 -64.0 + 133.5000 138.7500 -64.0 + 139.5000 141.7500 -64.0 + 141.2500 142.5000 -64.0 + 142.5000 141.7500 -64.0 + 144.5000 141.7500 -64.0 + 152.2500 147.5000 -64.0 + 160.5000 147.7500 -64.0 + 160.7500 145.5000 -64.0 + 157.7500 142.5000 -64.0 + 155.5000 142.2500 -64.0 + 155.2500 143.5000 -64.0 + 154.5000 145.2500 -64.0 + 153.7500 144.5000 -64.0 + 152.7500 142.5000 -64.0 + 147.7500 139.5000 -64.0 + 147.7500 135.5000 -64.0 + 148.5000 133.7500 -64.0 + 147.5000 132.2500 -64.0 + 145.5000 131.2500 -64.0 + 143.7500 130.5000 -64.0 + 141.7500 126.5000 -64.0 + 140.5000 124.2500 -64.0 + 138.5000 123.2500 -64.0 + 136.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 147.2500 127.5000 -64.0 + 148.2500 129.5000 -64.0 + 148.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 61.2500 130.5000 -64.0 + 60.2500 133.5000 -64.0 + 61.2500 135.5000 -64.0 + 64.5000 135.7500 -64.0 + 66.5000 132.7500 -64.0 + 65.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 150.7500 103.5000 -64.0 + 151.5000 102.7500 -64.0 + 153.5000 102.7500 -64.0 + 155.2500 103.5000 -64.0 + 155.2500 106.5000 -64.0 + 153.5000 108.2500 -64.0 + 151.5000 109.2500 -64.0 + 149.7500 107.5000 -64.0 + 150.5000 105.7500 -64.0 +} -64.0 +{ -64.0 + 154.7500 108.5000 -64.0 + 155.5000 107.7500 -64.0 + 157.2500 108.5000 -64.0 + 158.2500 110.5000 -64.0 + 157.5000 112.2500 -64.0 + 155.5000 112.2500 -64.0 + 153.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 131.7500 125.5000 -64.0 + 133.5000 124.7500 -64.0 + 134.2500 126.5000 -64.0 + 133.5000 128.2500 -64.0 + 131.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 136.7500 126.5000 -64.0 + 137.5000 125.7500 -64.0 + 139.2500 126.5000 -64.0 + 138.5000 128.2500 -64.0 + 138.2500 130.5000 -64.0 + 136.5000 131.2500 -64.0 + 134.7500 130.5000 -64.0 + 136.5000 128.7500 -64.0 +} -64.0 +{ -64.0 + 139.7500 130.5000 -64.0 + 141.5000 129.7500 -64.0 + 143.2500 131.5000 -64.0 + 140.5000 135.2500 -64.0 + 139.7500 134.5000 -64.0 +} -64.0 +{ -64.0 + 168.7500 140.5000 -64.0 + 169.5000 139.7500 -64.0 + 170.2500 140.5000 -64.0 + 169.5000 142.2500 -64.0 +} -64.0 +{ -64.0 + 146.7500 141.5000 -64.0 + 147.5000 140.7500 -64.0 + 150.2500 142.5000 -64.0 + 148.5000 143.2500 -64.0 +} -64.0 +{ -64.0 + 168.7500 144.5000 -64.0 + 170.5000 143.7500 -64.0 + 172.2500 144.5000 -64.0 + 174.2500 148.5000 -64.0 + 173.5000 150.2500 -64.0 + 174.2500 151.5000 -64.0 + 174.2500 154.5000 -64.0 + 172.5000 155.2500 -64.0 + 169.7500 152.5000 -64.0 +} -64.0 +v 440 z -116.000000 -64.0 +{ -64.0 + 96.2500 42.5000 -64.0 + 94.5000 45.2500 -64.0 + 90.5000 48.2500 -64.0 + 92.2500 49.5000 -64.0 + 97.5000 49.7500 -64.0 + 96.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 43.5000 -64.0 + 120.2500 49.5000 -64.0 + 121.2500 51.5000 -64.0 + 122.5000 49.7500 -64.0 + 125.5000 49.7500 -64.0 + 121.7500 45.5000 -64.0 + 121.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 51.5000 -64.0 + 71.5000 52.2500 -64.0 + 66.5000 52.2500 -64.0 + 62.5000 55.2500 -64.0 + 60.5000 56.2500 -64.0 + 55.2500 62.5000 -64.0 + 44.2500 82.5000 -64.0 + 43.2500 87.5000 -64.0 + 43.7500 88.5000 -64.0 + 47.7500 80.5000 -64.0 + 52.7500 74.5000 -64.0 + 53.7500 72.5000 -64.0 + 58.5000 66.7500 -64.0 + 62.5000 63.7500 -64.0 + 65.5000 64.7500 -64.0 + 68.2500 67.5000 -64.0 + 69.2500 69.5000 -64.0 + 70.5000 69.7500 -64.0 + 68.7500 66.5000 -64.0 + 68.7500 61.5000 -64.0 + 67.5000 58.2500 -64.0 + 61.5000 63.2500 -64.0 + 59.7500 62.5000 -64.0 + 59.7500 60.5000 -64.0 + 64.5000 56.7500 -64.0 + 68.5000 54.7500 -64.0 + 70.2500 55.5000 -64.0 + 72.5000 53.7500 -64.0 + 74.5000 52.7500 -64.0 + 77.7500 53.5000 -64.0 + 78.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 137.2500 54.5000 -64.0 + 139.5000 54.7500 -64.0 + 141.5000 56.7500 -64.0 + 143.5000 55.7500 -64.0 + 145.5000 56.7500 -64.0 + 148.2500 59.5000 -64.0 + 149.5000 57.7500 -64.0 + 152.5000 59.7500 -64.0 + 157.2500 64.5000 -64.0 + 156.5000 66.2500 -64.0 + 151.5000 62.2500 -64.0 + 150.2500 66.5000 -64.0 + 156.5000 67.7500 -64.0 + 159.2500 70.5000 -64.0 + 167.2500 88.5000 -64.0 + 167.2500 90.5000 -64.0 + 168.2500 92.5000 -64.0 + 168.2500 99.5000 -64.0 + 166.5000 103.2500 -64.0 + 166.2500 108.5000 -64.0 + 164.5000 110.2500 -64.0 + 159.7500 105.5000 -64.0 + 158.7500 103.5000 -64.0 + 154.5000 100.2500 -64.0 + 145.5000 105.2500 -64.0 + 143.5000 105.2500 -64.0 + 141.5000 106.2500 -64.0 + 138.5000 105.2500 -64.0 + 133.5000 100.2500 -64.0 + 127.5000 104.2500 -64.0 + 124.5000 104.2500 -64.0 + 124.2500 107.5000 -64.0 + 122.5000 108.2500 -64.0 + 119.5000 105.2500 -64.0 + 117.5000 104.2500 -64.0 + 116.2500 107.5000 -64.0 + 121.5000 108.7500 -64.0 + 125.5000 112.7500 -64.0 + 127.5000 113.7500 -64.0 + 128.5000 111.7500 -64.0 + 126.7500 108.5000 -64.0 + 126.7500 106.5000 -64.0 + 128.5000 105.7500 -64.0 + 130.2500 106.5000 -64.0 + 133.2500 110.5000 -64.0 + 132.5000 111.2500 -64.0 + 132.2500 113.5000 -64.0 + 133.5000 113.7500 -64.0 + 136.5000 108.7500 -64.0 + 138.2500 109.5000 -64.0 + 137.2500 111.5000 -64.0 + 138.2500 113.5000 -64.0 + 138.2500 115.5000 -64.0 + 141.2500 116.5000 -64.0 + 140.5000 117.2500 -64.0 + 137.5000 117.2500 -64.0 + 135.7500 115.5000 -64.0 + 135.2500 116.5000 -64.0 + 142.2500 122.5000 -64.0 + 152.5000 125.7500 -64.0 + 156.5000 121.7500 -64.0 + 158.2500 124.5000 -64.0 + 157.5000 125.2500 -64.0 + 155.5000 124.2500 -64.0 + 154.2500 130.5000 -64.0 + 152.5000 131.2500 -64.0 + 150.7500 129.5000 -64.0 + 149.5000 132.2500 -64.0 + 143.5000 132.2500 -64.0 + 141.7500 129.5000 -64.0 + 141.7500 127.5000 -64.0 + 136.7500 122.5000 -64.0 + 134.5000 124.2500 -64.0 + 130.5000 124.2500 -64.0 + 129.5000 126.2500 -64.0 + 127.5000 127.2500 -64.0 + 125.7500 125.5000 -64.0 + 124.2500 125.5000 -64.0 + 125.2500 127.5000 -64.0 + 124.5000 128.2500 -64.0 + 120.7500 125.5000 -64.0 + 120.7500 123.5000 -64.0 + 119.5000 123.2500 -64.0 + 119.2500 125.5000 -64.0 + 122.2500 128.5000 -64.0 + 128.5000 132.7500 -64.0 + 134.2500 139.5000 -64.0 + 138.5000 140.7500 -64.0 + 142.2500 144.5000 -64.0 + 145.5000 144.7500 -64.0 + 153.2500 148.5000 -64.0 + 159.5000 148.7500 -64.0 + 162.5000 149.7500 -64.0 + 168.2500 156.5000 -64.0 + 168.2500 162.5000 -64.0 + 167.2500 167.5000 -64.0 + 164.2500 173.5000 -64.0 + 161.5000 177.2500 -64.0 + 160.2500 183.5000 -64.0 + 156.5000 187.2500 -64.0 + 150.2500 198.5000 -64.0 + 143.5000 206.2500 -64.0 + 131.5000 215.2500 -64.0 + 120.5000 221.2500 -64.0 + 112.5000 221.2500 -64.0 + 108.7500 218.5000 -64.0 + 104.5000 218.2500 -64.0 + 102.7500 216.5000 -64.0 + 99.5000 219.2500 -64.0 + 93.5000 222.2500 -64.0 + 82.5000 221.2500 -64.0 + 74.7500 217.5000 -64.0 + 64.5000 211.2500 -64.0 + 58.7500 205.5000 -64.0 + 57.5000 203.2500 -64.0 + 53.7500 200.5000 -64.0 + 50.7500 196.5000 -64.0 + 50.7500 193.5000 -64.0 + 48.7500 187.5000 -64.0 + 43.7500 183.5000 -64.0 + 37.7500 169.5000 -64.0 + 38.7500 157.5000 -64.0 + 37.7500 155.5000 -64.0 + 37.7500 146.5000 -64.0 + 38.7500 143.5000 -64.0 + 37.5000 143.2500 -64.0 + 36.7500 141.5000 -64.0 + 39.5000 139.7500 -64.0 + 40.7500 129.5000 -64.0 + 43.7500 122.5000 -64.0 + 47.5000 118.7500 -64.0 + 49.5000 117.7500 -64.0 + 49.7500 116.5000 -64.0 + 56.5000 110.7500 -64.0 + 56.7500 107.5000 -64.0 + 61.5000 101.7500 -64.0 + 63.5000 102.7500 -64.0 + 68.2500 107.5000 -64.0 + 70.5000 107.7500 -64.0 + 72.5000 105.7500 -64.0 + 77.5000 108.7500 -64.0 + 81.5000 105.7500 -64.0 + 83.5000 105.7500 -64.0 + 84.2500 107.5000 -64.0 + 86.5000 109.7500 -64.0 + 91.7500 107.5000 -64.0 + 89.5000 107.2500 -64.0 + 81.7500 102.5000 -64.0 + 79.2500 104.5000 -64.0 + 78.2500 106.5000 -64.0 + 76.5000 107.2500 -64.0 + 75.7500 105.5000 -64.0 + 74.5000 105.2500 -64.0 + 71.7500 101.5000 -64.0 + 72.5000 100.2500 -64.0 + 69.5000 101.2500 -64.0 + 68.7500 99.5000 -64.0 + 67.5000 99.2500 -64.0 + 67.2500 100.5000 -64.0 + 65.5000 101.2500 -64.0 + 64.7500 99.5000 -64.0 + 66.5000 98.7500 -64.0 + 66.7500 97.5000 -64.0 + 58.5000 96.2500 -64.0 + 55.2500 97.5000 -64.0 + 41.2500 120.5000 -64.0 + 32.2500 142.5000 -64.0 + 30.2500 152.5000 -64.0 + 31.2500 154.5000 -64.0 + 31.2500 158.5000 -64.0 + 33.2500 162.5000 -64.0 + 33.2500 166.5000 -64.0 + 35.2500 173.5000 -64.0 + 36.2500 180.5000 -64.0 + 41.2500 193.5000 -64.0 + 44.2500 196.5000 -64.0 + 50.5000 205.7500 -64.0 + 58.2500 215.5000 -64.0 + 65.5000 221.7500 -64.0 + 74.5000 226.7500 -64.0 + 81.2500 228.5000 -64.0 + 116.5000 228.7500 -64.0 + 118.5000 227.7500 -64.0 + 122.5000 227.7500 -64.0 + 132.5000 223.7500 -64.0 + 142.5000 216.7500 -64.0 + 154.7500 201.5000 -64.0 + 156.7500 197.5000 -64.0 + 160.7500 193.5000 -64.0 + 168.7500 180.5000 -64.0 + 172.7500 166.5000 -64.0 + 175.5000 160.7500 -64.0 + 176.5000 156.7500 -64.0 + 176.7500 146.5000 -64.0 + 169.7500 132.5000 -64.0 + 169.7500 130.5000 -64.0 + 167.7500 126.5000 -64.0 + 167.7500 124.5000 -64.0 + 166.7500 122.5000 -64.0 + 166.7500 118.5000 -64.0 + 170.5000 104.7500 -64.0 + 170.7500 90.5000 -64.0 + 169.7500 88.5000 -64.0 + 169.7500 86.5000 -64.0 + 167.7500 82.5000 -64.0 + 167.7500 80.5000 -64.0 + 164.7500 74.5000 -64.0 + 162.7500 68.5000 -64.0 + 157.7500 60.5000 -64.0 + 151.7500 56.5000 -64.0 + 148.5000 56.2500 -64.0 + 143.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 58.5000 -64.0 + 107.5000 64.7500 -64.0 + 107.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 145.2500 71.5000 -64.0 + 144.2500 73.5000 -64.0 + 145.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 85.5000 -64.0 + 91.2500 87.5000 -64.0 + 93.5000 87.7500 -64.0 +} -64.0 +{ -64.0 + 119.2500 88.5000 -64.0 + 118.5000 90.2500 -64.0 + 116.5000 91.2500 -64.0 + 115.2500 97.5000 -64.0 + 116.5000 96.7500 -64.0 + 117.7500 92.5000 -64.0 + 119.7500 91.5000 -64.0 + 120.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 89.5000 -64.0 + 83.2500 90.5000 -64.0 + 85.5000 90.7500 -64.0 + 85.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 105.2500 91.5000 -64.0 + 104.2500 93.5000 -64.0 + 101.5000 96.2500 -64.0 + 98.5000 96.2500 -64.0 + 99.2500 97.5000 -64.0 + 101.5000 96.7500 -64.0 + 102.2500 98.5000 -64.0 + 103.5000 97.7500 -64.0 + 103.7500 95.5000 -64.0 + 105.5000 94.7500 -64.0 + 111.2500 101.5000 -64.0 + 112.7500 101.5000 -64.0 + 111.7500 99.5000 -64.0 + 111.7500 97.5000 -64.0 + 109.7500 96.5000 -64.0 + 108.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 97.5000 -64.0 + 96.5000 98.7500 -64.0 + 100.5000 100.7500 -64.0 + 101.7500 99.5000 -64.0 + 98.5000 99.2500 -64.0 +} -64.0 +{ -64.0 + 90.2500 120.5000 -64.0 + 90.2500 121.5000 -64.0 + 84.5000 126.2500 -64.0 + 82.5000 126.2500 -64.0 + 78.7500 124.5000 -64.0 + 79.5000 123.7500 -64.0 + 81.5000 123.7500 -64.0 + 81.5000 122.2500 -64.0 + 79.5000 123.2500 -64.0 + 75.7500 121.5000 -64.0 + 73.5000 121.2500 -64.0 + 68.5000 123.2500 -64.0 + 65.5000 127.2500 -64.0 + 62.5000 127.2500 -64.0 + 60.5000 129.2500 -64.0 + 60.2500 131.5000 -64.0 + 63.2500 137.5000 -64.0 + 61.5000 138.2500 -64.0 + 62.5000 138.7500 -64.0 + 64.5000 137.7500 -64.0 + 66.5000 137.7500 -64.0 + 70.5000 135.7500 -64.0 + 72.5000 135.7500 -64.0 + 75.5000 136.7500 -64.0 + 77.7500 134.5000 -64.0 + 78.7500 132.5000 -64.0 + 79.5000 130.7500 -64.0 + 78.7500 129.5000 -64.0 + 80.5000 127.7500 -64.0 + 85.5000 127.7500 -64.0 + 87.5000 125.7500 -64.0 + 89.5000 124.7500 -64.0 + 91.5000 121.7500 -64.0 +} -64.0 +{ -64.0 + 60.2500 122.5000 -64.0 + 60.2500 123.5000 -64.0 + 61.5000 123.7500 -64.0 +} -64.0 +{ -64.0 + 55.2500 126.5000 -64.0 + 53.5000 129.2500 -64.0 + 54.2500 130.5000 -64.0 + 55.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 58.2500 136.5000 -64.0 + 59.2500 137.5000 -64.0 + 59.7500 136.5000 -64.0 +} -64.0 +{ -64.0 + 65.7500 61.5000 -64.0 + 66.5000 60.7500 -64.0 + 67.2500 61.5000 -64.0 + 66.5000 62.2500 -64.0 +} -64.0 +{ -64.0 + 59.5000 97.7500 -64.0 + 60.2500 98.5000 -64.0 + 58.5000 100.2500 -64.0 + 57.7500 99.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 103.5000 -64.0 + 154.5000 102.7500 -64.0 + 156.2500 104.5000 -64.0 + 155.5000 108.2500 -64.0 + 158.2500 109.5000 -64.0 + 151.5000 113.2500 -64.0 + 149.7500 112.5000 -64.0 + 147.7500 108.5000 -64.0 + 150.5000 104.7500 -64.0 +} -64.0 +{ -64.0 + 52.7500 104.5000 -64.0 + 53.5000 103.7500 -64.0 + 55.2500 104.5000 -64.0 + 54.5000 105.2500 -64.0 + 55.2500 106.5000 -64.0 + 55.2500 108.5000 -64.0 + 53.5000 110.2500 -64.0 + 51.7500 109.5000 -64.0 + 52.5000 107.7500 -64.0 +} -64.0 +{ -64.0 + 140.7500 107.5000 -64.0 + 141.5000 106.7500 -64.0 + 143.2500 107.5000 -64.0 + 141.5000 109.2500 -64.0 +} -64.0 +{ -64.0 + 152.7500 113.5000 -64.0 + 153.5000 112.7500 -64.0 + 158.5000 112.7500 -64.0 + 160.2500 113.5000 -64.0 + 161.2500 115.5000 -64.0 + 160.5000 117.2500 -64.0 + 154.5000 120.2500 -64.0 + 152.5000 120.2500 -64.0 + 148.5000 123.2500 -64.0 + 146.7500 122.5000 -64.0 + 147.7500 117.5000 -64.0 + 148.5000 115.7500 -64.0 +} -64.0 +{ -64.0 + 132.7500 127.5000 -64.0 + 133.5000 126.7500 -64.0 + 135.2500 128.5000 -64.0 + 134.5000 129.2500 -64.0 +} -64.0 +{ -64.0 + 163.7500 130.5000 -64.0 + 165.5000 129.7500 -64.0 + 167.2500 131.5000 -64.0 + 167.2500 133.5000 -64.0 + 170.2500 137.5000 -64.0 + 167.5000 140.2500 -64.0 + 165.5000 140.2500 -64.0 + 165.2500 141.5000 -64.0 + 167.2500 142.5000 -64.0 + 168.5000 144.7500 -64.0 + 168.7500 142.5000 -64.0 + 170.5000 140.7500 -64.0 + 173.2500 143.5000 -64.0 + 172.2500 145.5000 -64.0 + 173.2500 147.5000 -64.0 + 171.5000 152.2500 -64.0 + 169.5000 152.2500 -64.0 + 165.7500 149.5000 -64.0 + 167.5000 147.7500 -64.0 + 167.7500 145.5000 -64.0 + 165.5000 146.2500 -64.0 + 163.7500 145.5000 -64.0 + 161.5000 146.2500 -64.0 + 161.2500 147.5000 -64.0 + 159.5000 148.2500 -64.0 + 157.7500 146.5000 -64.0 + 158.5000 145.7500 -64.0 + 160.5000 145.7500 -64.0 + 159.7500 144.5000 -64.0 + 154.5000 144.2500 -64.0 + 147.7500 138.5000 -64.0 + 147.7500 136.5000 -64.0 + 150.7500 132.5000 -64.0 + 152.5000 131.7500 -64.0 + 156.2500 134.5000 -64.0 + 155.5000 136.2500 -64.0 + 158.2500 139.5000 -64.0 + 160.2500 143.5000 -64.0 + 161.7500 142.5000 -64.0 + 160.7500 140.5000 -64.0 + 161.7500 137.5000 -64.0 + 158.7500 134.5000 -64.0 + 159.5000 132.7500 -64.0 + 161.5000 132.7500 -64.0 +} -64.0 +{ -64.0 + 136.7500 131.5000 -64.0 + 137.5000 130.7500 -64.0 + 138.2500 131.5000 -64.0 + 137.5000 132.2500 -64.0 +} -64.0 +{ -64.0 + 169.7500 154.5000 -64.0 + 171.5000 153.7500 -64.0 + 173.2500 155.5000 -64.0 + 171.5000 157.2500 -64.0 + 169.7500 156.5000 -64.0 +} -64.0 +v 505 z -118.000000 -64.0 +{ -64.0 + 96.2500 43.5000 -64.0 + 91.5000 48.2500 -64.0 + 92.2500 49.5000 -64.0 + 94.5000 49.7500 -64.0 + 96.7500 47.5000 -64.0 + 95.7500 45.5000 -64.0 + 96.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 46.5000 -64.0 + 122.2500 50.5000 -64.0 + 123.7500 50.5000 -64.0 + 124.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 52.5000 -64.0 + 68.5000 54.2500 -64.0 + 66.5000 53.2500 -64.0 + 58.5000 57.2500 -64.0 + 54.2500 63.5000 -64.0 + 43.5000 84.2500 -64.0 + 42.5000 88.2500 -64.0 + 42.2500 96.5000 -64.0 + 42.7500 97.5000 -64.0 + 46.7500 83.5000 -64.0 + 57.5000 66.7500 -64.0 + 61.5000 63.7500 -64.0 + 64.5000 63.7500 -64.0 + 68.7500 66.5000 -64.0 + 67.7500 63.5000 -64.0 + 64.7500 60.5000 -64.0 + 59.5000 63.2500 -64.0 + 58.7500 62.5000 -64.0 + 59.5000 61.7500 -64.0 + 59.7500 59.5000 -64.0 + 65.5000 55.7500 -64.0 + 69.2500 56.5000 -64.0 + 73.5000 52.7500 -64.0 + 77.7500 52.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 55.5000 -64.0 + 140.5000 56.2500 -64.0 + 137.5000 56.2500 -64.0 + 138.2500 58.5000 -64.0 + 139.5000 58.7500 -64.0 + 141.5000 56.7500 -64.0 + 145.5000 56.7500 -64.0 + 150.2500 60.5000 -64.0 + 151.5000 58.7500 -64.0 + 156.2500 62.5000 -64.0 + 154.5000 63.2500 -64.0 + 152.7500 62.5000 -64.0 + 151.2500 64.5000 -64.0 + 150.2500 66.5000 -64.0 + 155.5000 66.7500 -64.0 + 159.2500 70.5000 -64.0 + 163.2500 78.5000 -64.0 + 163.2500 80.5000 -64.0 + 165.2500 84.5000 -64.0 + 165.2500 86.5000 -64.0 + 168.2500 92.5000 -64.0 + 169.5000 90.7500 -64.0 + 169.7500 88.5000 -64.0 + 168.7500 86.5000 -64.0 + 168.7500 84.5000 -64.0 + 167.7500 82.5000 -64.0 + 167.7500 80.5000 -64.0 + 163.7500 72.5000 -64.0 + 163.7500 70.5000 -64.0 + 161.7500 65.5000 -64.0 + 156.5000 59.2500 -64.0 + 152.5000 57.2500 -64.0 + 150.7500 56.5000 -64.0 + 146.5000 56.2500 -64.0 + 144.7500 55.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 57.5000 -64.0 + 67.2500 58.5000 -64.0 + 68.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 145.2500 70.5000 -64.0 + 144.2500 72.5000 -64.0 + 145.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 89.5000 -64.0 + 127.2500 90.5000 -64.0 + 129.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 90.5000 -64.0 + 95.2500 91.5000 -64.0 + 95.5000 93.7500 -64.0 + 95.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 105.2500 91.5000 -64.0 + 102.5000 95.2500 -64.0 + 102.2500 97.5000 -64.0 + 100.5000 99.2500 -64.0 + 98.2500 99.5000 -64.0 + 99.2500 102.5000 -64.0 + 104.5000 98.7500 -64.0 + 107.2500 100.5000 -64.0 + 108.2500 102.5000 -64.0 + 109.5000 102.7500 -64.0 + 109.7500 98.5000 -64.0 + 107.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 92.5000 -64.0 + 117.5000 93.2500 -64.0 + 117.5000 95.7500 -64.0 + 119.5000 94.7500 -64.0 +} -64.0 +{ -64.0 + 168.2500 94.5000 -64.0 + 168.2500 95.5000 -64.0 + 167.2500 98.5000 -64.0 + 164.2500 102.5000 -64.0 + 163.2500 104.5000 -64.0 + 161.5000 105.2500 -64.0 + 157.7500 101.5000 -64.0 + 154.5000 101.2500 -64.0 + 152.5000 103.2500 -64.0 + 147.5000 106.2500 -64.0 + 145.5000 106.2500 -64.0 + 143.5000 107.2500 -64.0 + 141.5000 107.2500 -64.0 + 134.5000 106.2500 -64.0 + 132.2500 109.5000 -64.0 + 131.2500 111.5000 -64.0 + 133.2500 112.5000 -64.0 + 133.2500 115.5000 -64.0 + 137.2500 119.5000 -64.0 + 142.2500 122.5000 -64.0 + 144.5000 122.7500 -64.0 + 146.5000 123.7500 -64.0 + 151.5000 124.7500 -64.0 + 156.5000 126.7500 -64.0 + 158.2500 130.5000 -64.0 + 156.5000 132.2500 -64.0 + 153.5000 132.2500 -64.0 + 149.7500 130.5000 -64.0 + 147.5000 131.2500 -64.0 + 147.2500 132.5000 -64.0 + 145.5000 133.2500 -64.0 + 143.5000 134.2500 -64.0 + 141.7500 132.5000 -64.0 + 141.7500 128.5000 -64.0 + 138.7500 125.5000 -64.0 + 138.7500 123.5000 -64.0 + 137.5000 124.2500 -64.0 + 135.5000 125.2500 -64.0 + 130.5000 124.2500 -64.0 + 132.2500 126.5000 -64.0 + 131.5000 127.2500 -64.0 + 129.5000 127.2500 -64.0 + 129.2500 128.5000 -64.0 + 128.5000 130.2500 -64.0 + 124.7500 128.5000 -64.0 + 123.7500 126.5000 -64.0 + 120.5000 125.2500 -64.0 + 120.2500 126.5000 -64.0 + 131.2500 136.5000 -64.0 + 136.2500 139.5000 -64.0 + 138.5000 139.7500 -64.0 + 141.2500 142.5000 -64.0 + 151.2500 148.5000 -64.0 + 157.5000 149.7500 -64.0 + 163.2500 152.5000 -64.0 + 164.2500 154.5000 -64.0 + 165.7500 155.5000 -64.0 + 164.7500 153.5000 -64.0 + 165.5000 151.7500 -64.0 + 167.5000 150.7500 -64.0 + 165.7500 149.5000 -64.0 + 164.7500 147.5000 -64.0 + 163.5000 147.2500 -64.0 + 164.2500 148.5000 -64.0 + 163.5000 149.2500 -64.0 + 160.5000 149.2500 -64.0 + 158.7500 147.5000 -64.0 + 157.5000 145.2500 -64.0 + 151.5000 142.2500 -64.0 + 148.7500 138.5000 -64.0 + 148.7500 136.5000 -64.0 + 150.5000 135.7500 -64.0 + 150.7500 134.5000 -64.0 + 152.5000 132.7500 -64.0 + 156.2500 135.5000 -64.0 + 156.2500 137.5000 -64.0 + 158.2500 138.5000 -64.0 + 160.2500 142.5000 -64.0 + 163.5000 142.7500 -64.0 + 160.7500 140.5000 -64.0 + 160.7500 138.5000 -64.0 + 157.7500 134.5000 -64.0 + 159.5000 132.7500 -64.0 + 161.5000 132.7500 -64.0 + 164.2500 135.5000 -64.0 + 166.5000 133.7500 -64.0 + 170.2500 137.5000 -64.0 + 169.2500 138.5000 -64.0 + 168.2500 140.5000 -64.0 + 167.5000 142.2500 -64.0 + 165.5000 142.2500 -64.0 + 167.2500 144.5000 -64.0 + 166.5000 145.7500 -64.0 + 168.5000 144.7500 -64.0 + 169.5000 145.7500 -64.0 + 171.5000 146.7500 -64.0 + 173.2500 150.5000 -64.0 + 172.5000 152.2500 -64.0 + 172.2500 155.5000 -64.0 + 171.5000 157.2500 -64.0 + 166.5000 157.2500 -64.0 + 166.2500 162.5000 -64.0 + 165.2500 169.5000 -64.0 + 163.2500 173.5000 -64.0 + 160.5000 177.2500 -64.0 + 160.2500 179.5000 -64.0 + 159.2500 182.5000 -64.0 + 154.2500 188.5000 -64.0 + 150.2500 196.5000 -64.0 + 143.2500 205.5000 -64.0 + 133.5000 213.2500 -64.0 + 131.2500 214.5000 -64.0 + 124.5000 219.2500 -64.0 + 121.5000 219.2500 -64.0 + 117.5000 221.2500 -64.0 + 114.5000 221.2500 -64.0 + 108.7500 218.5000 -64.0 + 106.5000 218.2500 -64.0 + 102.7500 215.5000 -64.0 + 98.5000 219.2500 -64.0 + 94.5000 221.2500 -64.0 + 84.5000 221.2500 -64.0 + 81.5000 220.2500 -64.0 + 77.7500 218.5000 -64.0 + 65.5000 210.2500 -64.0 + 63.5000 209.2500 -64.0 + 54.7500 199.5000 -64.0 + 51.7500 195.5000 -64.0 + 51.7500 193.5000 -64.0 + 50.7500 191.5000 -64.0 + 50.7500 188.5000 -64.0 + 44.7500 182.5000 -64.0 + 41.7500 178.5000 -64.0 + 41.7500 176.5000 -64.0 + 39.7500 172.5000 -64.0 + 39.7500 170.5000 -64.0 + 38.7500 168.5000 -64.0 + 38.7500 165.5000 -64.0 + 39.5000 163.7500 -64.0 + 39.7500 158.5000 -64.0 + 38.7500 156.5000 -64.0 + 38.7500 148.5000 -64.0 + 40.5000 144.2500 -64.0 + 38.5000 143.2500 -64.0 + 36.7500 142.5000 -64.0 + 36.7500 140.5000 -64.0 + 38.5000 139.7500 -64.0 + 42.5000 141.7500 -64.0 + 42.7500 139.5000 -64.0 + 40.7500 135.5000 -64.0 + 40.7500 133.5000 -64.0 + 42.7500 127.5000 -64.0 + 44.5000 123.7500 -64.0 + 43.7500 121.5000 -64.0 + 45.5000 119.7500 -64.0 + 46.2500 120.5000 -64.0 + 47.2500 122.5000 -64.0 + 51.2500 126.5000 -64.0 + 52.5000 125.7500 -64.0 + 53.2500 126.5000 -64.0 + 55.7500 122.5000 -64.0 + 60.5000 120.7500 -64.0 + 61.5000 118.7500 -64.0 + 63.5000 117.7500 -64.0 + 65.7500 112.5000 -64.0 + 64.5000 112.2500 -64.0 + 61.5000 115.2500 -64.0 + 58.5000 115.2500 -64.0 + 60.2500 117.5000 -64.0 + 60.2500 119.5000 -64.0 + 58.5000 120.2500 -64.0 + 56.5000 121.2500 -64.0 + 52.7500 118.5000 -64.0 + 52.7500 116.5000 -64.0 + 55.5000 113.7500 -64.0 + 58.5000 113.7500 -64.0 + 58.7500 112.5000 -64.0 + 61.5000 108.7500 -64.0 + 65.5000 110.7500 -64.0 + 66.5000 108.7500 -64.0 + 68.5000 109.7500 -64.0 + 70.2500 110.5000 -64.0 + 71.5000 109.7500 -64.0 + 76.7500 109.5000 -64.0 + 77.7500 107.5000 -64.0 + 81.5000 103.7500 -64.0 + 81.7500 101.5000 -64.0 + 78.5000 104.2500 -64.0 + 76.7500 102.5000 -64.0 + 76.7500 100.5000 -64.0 + 75.5000 101.2500 -64.0 + 69.5000 103.2500 -64.0 + 61.7500 98.5000 -64.0 + 59.5000 98.2500 -64.0 + 57.5000 97.2500 -64.0 + 55.5000 98.2500 -64.0 + 52.2500 102.5000 -64.0 + 51.2500 104.5000 -64.0 + 46.5000 110.2500 -64.0 + 43.5000 115.2500 -64.0 + 41.2500 121.5000 -64.0 + 40.5000 123.2500 -64.0 + 38.2500 129.5000 -64.0 + 32.2500 142.5000 -64.0 + 31.5000 144.2500 -64.0 + 31.2500 156.5000 -64.0 + 33.2500 160.5000 -64.0 + 33.2500 163.5000 -64.0 + 34.2500 165.5000 -64.0 + 34.2500 169.5000 -64.0 + 35.2500 171.5000 -64.0 + 35.2500 173.5000 -64.0 + 36.2500 175.5000 -64.0 + 36.2500 177.5000 -64.0 + 40.2500 189.5000 -64.0 + 47.2500 198.5000 -64.0 + 52.2500 206.5000 -64.0 + 55.2500 210.5000 -64.0 + 59.5000 215.7500 -64.0 + 63.2500 218.5000 -64.0 + 69.5000 222.7500 -64.0 + 77.5000 226.7500 -64.0 + 91.5000 228.7500 -64.0 + 93.5000 227.7500 -64.0 + 117.5000 227.7500 -64.0 + 119.5000 226.7500 -64.0 + 123.5000 226.7500 -64.0 + 135.5000 220.7500 -64.0 + 142.5000 214.7500 -64.0 + 144.5000 213.7500 -64.0 + 153.7500 201.5000 -64.0 + 155.7500 197.5000 -64.0 + 159.5000 193.7500 -64.0 + 162.7500 189.5000 -64.0 + 170.7500 173.5000 -64.0 + 171.7500 168.5000 -64.0 + 172.7500 165.5000 -64.0 + 174.5000 161.7500 -64.0 + 174.7500 159.5000 -64.0 + 175.5000 157.7500 -64.0 + 175.7500 144.5000 -64.0 + 166.7500 126.5000 -64.0 + 166.7500 116.5000 -64.0 + 168.7500 110.5000 -64.0 + 169.5000 108.7500 -64.0 + 169.7500 97.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 100.5000 -64.0 + 128.2500 102.5000 -64.0 + 124.5000 104.2500 -64.0 + 125.2500 105.5000 -64.0 + 124.5000 107.2500 -64.0 + 122.5000 107.2500 -64.0 + 120.7500 105.5000 -64.0 + 118.2500 105.5000 -64.0 + 117.2500 107.5000 -64.0 + 123.5000 108.7500 -64.0 + 125.5000 107.7500 -64.0 + 126.2500 108.5000 -64.0 + 128.5000 108.7500 -64.0 + 127.7500 107.5000 -64.0 + 127.7500 104.5000 -64.0 + 129.5000 102.7500 -64.0 + 131.7500 102.5000 -64.0 + 130.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 104.5000 -64.0 + 83.2500 107.5000 -64.0 + 79.2500 111.5000 -64.0 + 78.2500 113.5000 -64.0 + 79.5000 113.7500 -64.0 + 89.5000 107.7500 -64.0 + 91.5000 107.7500 -64.0 + 91.7500 105.5000 -64.0 + 86.5000 107.2500 -64.0 + 84.7500 106.5000 -64.0 + 84.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 108.5000 -64.0 + 114.2500 109.5000 -64.0 + 115.5000 109.7500 -64.0 + 115.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 111.5000 -64.0 + 122.5000 111.7500 -64.0 + 124.5000 112.7500 -64.0 + 123.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 66.2500 117.5000 -64.0 + 67.2500 119.5000 -64.0 + 67.2500 123.5000 -64.0 + 63.2500 126.5000 -64.0 + 60.5000 130.2500 -64.0 + 60.2500 132.5000 -64.0 + 62.2500 134.5000 -64.0 + 62.2500 136.5000 -64.0 + 63.5000 136.7500 -64.0 + 64.2500 138.5000 -64.0 + 61.5000 140.2500 -64.0 + 59.7500 138.5000 -64.0 + 56.5000 138.2500 -64.0 + 56.2500 139.5000 -64.0 + 58.2500 140.5000 -64.0 + 65.5000 140.7500 -64.0 + 71.5000 136.7500 -64.0 + 72.2500 137.5000 -64.0 + 75.5000 137.7500 -64.0 + 77.5000 135.7500 -64.0 + 77.7500 133.5000 -64.0 + 76.7500 131.5000 -64.0 + 71.5000 131.2500 -64.0 + 68.7500 128.5000 -64.0 + 69.5000 127.7500 -64.0 + 77.5000 127.7500 -64.0 + 79.2500 128.5000 -64.0 + 84.5000 128.7500 -64.0 + 87.5000 127.7500 -64.0 + 90.5000 124.7500 -64.0 + 90.7500 121.5000 -64.0 + 89.5000 121.2500 -64.0 + 86.5000 125.2500 -64.0 + 82.5000 127.2500 -64.0 + 80.7500 125.5000 -64.0 + 81.7500 123.5000 -64.0 + 79.5000 123.2500 -64.0 + 77.5000 121.2500 -64.0 + 73.5000 119.2500 -64.0 + 71.5000 120.2500 -64.0 + 68.5000 120.2500 -64.0 + 67.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 118.5000 -64.0 + 120.5000 119.2500 -64.0 + 120.5000 120.7500 -64.0 + 123.5000 119.7500 -64.0 + 122.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 58.5000 99.7500 -64.0 + 60.2500 100.5000 -64.0 + 59.5000 102.2500 -64.0 + 59.2500 104.5000 -64.0 + 56.5000 108.2500 -64.0 + 53.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 64.7500 103.5000 -64.0 + 65.5000 102.7500 -64.0 + 67.2500 103.5000 -64.0 + 66.5000 104.2500 -64.0 +} -64.0 +{ -64.0 + 154.7500 103.5000 -64.0 + 155.5000 102.7500 -64.0 + 157.2500 106.5000 -64.0 + 154.2500 110.5000 -64.0 + 147.5000 113.2500 -64.0 + 145.7500 112.5000 -64.0 + 145.7500 110.5000 -64.0 + 152.5000 104.7500 -64.0 +} -64.0 +{ -64.0 + 69.7500 105.5000 -64.0 + 70.5000 104.7500 -64.0 + 71.2500 105.5000 -64.0 + 70.5000 106.2500 -64.0 +} -64.0 +{ -64.0 + 52.7500 106.5000 -64.0 + 53.5000 105.7500 -64.0 + 55.2500 108.5000 -64.0 + 54.5000 110.2500 -64.0 + 52.5000 110.2500 -64.0 + 51.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 73.7500 107.5000 -64.0 + 74.5000 106.7500 -64.0 + 76.2500 107.5000 -64.0 + 75.5000 108.2500 -64.0 +} -64.0 +{ -64.0 + 134.7500 109.5000 -64.0 + 135.5000 108.7500 -64.0 + 138.2500 110.5000 -64.0 + 137.5000 112.2500 -64.0 + 135.5000 111.2500 -64.0 +} -64.0 +{ -64.0 + 139.7500 110.5000 -64.0 + 140.5000 109.7500 -64.0 + 142.2500 110.5000 -64.0 + 140.5000 112.2500 -64.0 +} -64.0 +{ -64.0 + 153.7500 112.5000 -64.0 + 154.5000 111.7500 -64.0 + 162.5000 111.7500 -64.0 + 165.2500 114.5000 -64.0 + 165.2500 116.5000 -64.0 + 163.5000 118.2500 -64.0 + 159.5000 120.2500 -64.0 + 157.2500 120.5000 -64.0 + 150.5000 123.2500 -64.0 + 145.5000 122.2500 -64.0 + 143.7500 120.5000 -64.0 + 144.7500 117.5000 -64.0 + 147.5000 113.7500 -64.0 + 150.5000 113.7500 -64.0 +} -64.0 +{ -64.0 + 134.7500 113.5000 -64.0 + 135.5000 112.7500 -64.0 + 136.2500 113.5000 -64.0 + 135.5000 114.2500 -64.0 +} -64.0 +{ -64.0 + 50.5000 120.7500 -64.0 + 52.2500 121.5000 -64.0 + 52.2500 123.5000 -64.0 + 50.5000 124.2500 -64.0 + 48.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 72.7500 123.5000 -64.0 + 73.5000 122.7500 -64.0 + 75.2500 124.5000 -64.0 + 74.5000 126.2500 -64.0 +} -64.0 +{ -64.0 + 168.7500 143.5000 -64.0 + 169.5000 142.7500 -64.0 + 170.2500 143.5000 -64.0 + 169.5000 144.2500 -64.0 +} -64.0 +{ -64.0 + 152.7500 145.5000 -64.0 + 153.5000 144.7500 -64.0 + 154.2500 145.5000 -64.0 + 153.5000 146.2500 -64.0 +} -64.0 +v 552 z -120.000000 -64.0 +{ -64.0 + 95.2500 45.5000 -64.0 + 94.2500 47.5000 -64.0 + 92.5000 48.2500 -64.0 + 92.2500 49.5000 -64.0 + 93.5000 49.7500 -64.0 + 95.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 47.5000 -64.0 + 125.2500 49.5000 -64.0 + 125.2500 51.5000 -64.0 + 127.5000 51.7500 -64.0 + 125.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 70.2500 53.5000 -64.0 + 69.5000 54.2500 -64.0 + 63.5000 54.2500 -64.0 + 59.5000 57.2500 -64.0 + 56.2500 61.5000 -64.0 + 45.2500 83.5000 -64.0 + 44.5000 85.2500 -64.0 + 43.2500 93.5000 -64.0 + 42.5000 95.2500 -64.0 + 42.2500 108.5000 -64.0 + 43.2500 110.5000 -64.0 + 43.2500 114.5000 -64.0 + 42.2500 121.5000 -64.0 + 40.2500 127.5000 -64.0 + 37.5000 133.2500 -64.0 + 33.5000 140.2500 -64.0 + 33.2500 148.5000 -64.0 + 32.2500 150.5000 -64.0 + 33.2500 152.5000 -64.0 + 33.2500 157.5000 -64.0 + 34.2500 159.5000 -64.0 + 34.2500 161.5000 -64.0 + 35.2500 163.5000 -64.0 + 35.2500 167.5000 -64.0 + 36.2500 169.5000 -64.0 + 36.2500 171.5000 -64.0 + 37.2500 173.5000 -64.0 + 37.2500 176.5000 -64.0 + 39.2500 180.5000 -64.0 + 39.2500 182.5000 -64.0 + 42.2500 189.5000 -64.0 + 46.2500 193.5000 -64.0 + 49.2500 198.5000 -64.0 + 54.2500 206.5000 -64.0 + 55.2500 208.5000 -64.0 + 63.5000 216.7500 -64.0 + 67.2500 219.5000 -64.0 + 73.2500 223.5000 -64.0 + 79.5000 225.7500 -64.0 + 81.2500 226.5000 -64.0 + 85.5000 226.7500 -64.0 + 87.2500 227.5000 -64.0 + 94.5000 227.7500 -64.0 + 96.5000 226.7500 -64.0 + 119.5000 226.7500 -64.0 + 121.5000 225.7500 -64.0 + 124.5000 225.7500 -64.0 + 134.5000 220.7500 -64.0 + 138.5000 217.7500 -64.0 + 140.5000 216.7500 -64.0 + 147.5000 209.7500 -64.0 + 153.7500 201.5000 -64.0 + 155.7500 197.5000 -64.0 + 160.5000 192.7500 -64.0 + 164.5000 186.7500 -64.0 + 168.5000 179.7500 -64.0 + 168.7500 177.5000 -64.0 + 171.7500 171.5000 -64.0 + 172.7500 166.5000 -64.0 + 174.7500 160.5000 -64.0 + 175.5000 158.7500 -64.0 + 175.7500 143.5000 -64.0 + 171.7500 135.5000 -64.0 + 166.5000 129.2500 -64.0 + 164.5000 128.2500 -64.0 + 163.5000 130.2500 -64.0 + 158.5000 133.2500 -64.0 + 155.5000 133.2500 -64.0 + 151.7500 131.5000 -64.0 + 148.5000 131.2500 -64.0 + 146.5000 133.2500 -64.0 + 143.5000 133.2500 -64.0 + 141.7500 132.5000 -64.0 + 139.7500 128.5000 -64.0 + 139.5000 125.2500 -64.0 + 136.5000 126.2500 -64.0 + 133.5000 125.2500 -64.0 + 131.7500 121.5000 -64.0 + 133.5000 119.7500 -64.0 + 136.5000 119.7500 -64.0 + 138.2500 121.5000 -64.0 + 139.2500 123.5000 -64.0 + 140.5000 122.7500 -64.0 + 142.5000 123.7500 -64.0 + 144.5000 122.7500 -64.0 + 148.2500 124.5000 -64.0 + 155.5000 124.7500 -64.0 + 161.5000 127.7500 -64.0 + 164.5000 126.7500 -64.0 + 164.7500 123.5000 -64.0 + 163.7500 121.5000 -64.0 + 158.5000 121.2500 -64.0 + 154.5000 123.2500 -64.0 + 149.5000 123.2500 -64.0 + 146.5000 122.2500 -64.0 + 142.7500 120.5000 -64.0 + 143.5000 118.7500 -64.0 + 146.7500 113.5000 -64.0 + 147.7500 111.5000 -64.0 + 148.5000 109.7500 -64.0 + 149.2500 110.5000 -64.0 + 150.2500 112.5000 -64.0 + 151.5000 112.7500 -64.0 + 153.5000 111.7500 -64.0 + 155.5000 111.7500 -64.0 + 157.5000 110.7500 -64.0 + 161.5000 110.7500 -64.0 + 166.7500 111.5000 -64.0 + 169.5000 107.7500 -64.0 + 169.7500 105.5000 -64.0 + 167.7500 101.5000 -64.0 + 164.5000 101.2500 -64.0 + 162.5000 102.2500 -64.0 + 157.5000 101.2500 -64.0 + 148.5000 109.2500 -64.0 + 145.5000 108.2500 -64.0 + 143.5000 109.2500 -64.0 + 134.5000 107.2500 -64.0 + 134.2500 110.5000 -64.0 + 137.2500 112.5000 -64.0 + 135.5000 114.2500 -64.0 + 133.5000 114.2500 -64.0 + 132.5000 116.2500 -64.0 + 129.5000 116.2500 -64.0 + 127.5000 117.2500 -64.0 + 126.7500 116.5000 -64.0 + 125.2500 116.5000 -64.0 + 123.2500 120.5000 -64.0 + 127.5000 120.7500 -64.0 + 131.2500 124.5000 -64.0 + 134.2500 128.5000 -64.0 + 133.5000 129.2500 -64.0 + 132.5000 128.2500 -64.0 + 130.5000 127.2500 -64.0 + 131.2500 128.5000 -64.0 + 130.5000 129.2500 -64.0 + 128.5000 130.2500 -64.0 + 126.7500 129.5000 -64.0 + 123.7500 125.5000 -64.0 + 124.5000 124.7500 -64.0 + 122.5000 123.2500 -64.0 + 122.2500 126.5000 -64.0 + 125.2500 130.5000 -64.0 + 130.2500 133.5000 -64.0 + 131.2500 135.5000 -64.0 + 136.2500 138.5000 -64.0 + 140.5000 138.7500 -64.0 + 142.2500 139.5000 -64.0 + 143.5000 141.7500 -64.0 + 145.5000 142.7500 -64.0 + 151.5000 148.7500 -64.0 + 161.5000 152.7500 -64.0 + 161.7500 149.5000 -64.0 + 159.7500 148.5000 -64.0 + 158.5000 149.2500 -64.0 + 155.5000 148.2500 -64.0 + 154.7500 146.5000 -64.0 + 151.5000 145.2500 -64.0 + 149.7500 141.5000 -64.0 + 151.7500 140.5000 -64.0 + 150.7500 137.5000 -64.0 + 153.5000 133.7500 -64.0 + 155.5000 133.7500 -64.0 + 159.2500 137.5000 -64.0 + 160.2500 139.5000 -64.0 + 161.5000 137.2500 -64.0 + 159.5000 136.2500 -64.0 + 158.7500 134.5000 -64.0 + 160.5000 133.7500 -64.0 + 165.5000 134.7500 -64.0 + 166.2500 136.5000 -64.0 + 168.5000 136.7500 -64.0 + 170.2500 138.5000 -64.0 + 170.2500 141.5000 -64.0 + 172.2500 143.5000 -64.0 + 172.2500 145.5000 -64.0 + 174.2500 147.5000 -64.0 + 173.5000 148.2500 -64.0 + 173.2500 150.5000 -64.0 + 171.5000 151.2500 -64.0 + 169.7500 149.5000 -64.0 + 169.5000 147.2500 -64.0 + 169.2500 151.5000 -64.0 + 170.5000 151.7500 -64.0 + 172.2500 152.5000 -64.0 + 172.2500 156.5000 -64.0 + 168.5000 159.2500 -64.0 + 166.7500 158.5000 -64.0 + 165.5000 156.2500 -64.0 + 165.2500 163.5000 -64.0 + 164.5000 165.2500 -64.0 + 164.2500 170.5000 -64.0 + 162.2500 174.5000 -64.0 + 159.5000 178.2500 -64.0 + 159.2500 181.5000 -64.0 + 156.5000 185.2500 -64.0 + 153.2500 189.5000 -64.0 + 149.2500 197.5000 -64.0 + 145.2500 202.5000 -64.0 + 142.5000 206.2500 -64.0 + 134.5000 212.2500 -64.0 + 132.2500 213.5000 -64.0 + 125.5000 218.2500 -64.0 + 123.5000 218.2500 -64.0 + 119.5000 220.2500 -64.0 + 112.5000 220.2500 -64.0 + 108.5000 216.2500 -64.0 + 101.5000 215.2500 -64.0 + 99.5000 217.2500 -64.0 + 95.5000 220.2500 -64.0 + 86.5000 220.2500 -64.0 + 81.5000 219.2500 -64.0 + 77.5000 216.2500 -64.0 + 75.5000 215.2500 -64.0 + 68.7500 210.5000 -64.0 + 62.7500 206.5000 -64.0 + 56.7500 199.5000 -64.0 + 53.7500 195.5000 -64.0 + 53.7500 193.5000 -64.0 + 52.7500 191.5000 -64.0 + 52.7500 187.5000 -64.0 + 45.7500 181.5000 -64.0 + 42.7500 176.5000 -64.0 + 42.7500 174.5000 -64.0 + 41.7500 172.5000 -64.0 + 41.7500 170.5000 -64.0 + 40.7500 168.5000 -64.0 + 40.7500 166.5000 -64.0 + 42.7500 160.5000 -64.0 + 40.7500 156.5000 -64.0 + 40.7500 149.5000 -64.0 + 42.5000 147.7500 -64.0 + 46.5000 145.7500 -64.0 + 48.7500 145.5000 -64.0 + 49.7500 143.5000 -64.0 + 47.5000 143.2500 -64.0 + 46.7500 141.5000 -64.0 + 45.5000 141.2500 -64.0 + 44.5000 143.2500 -64.0 + 40.5000 145.2500 -64.0 + 39.7500 144.5000 -64.0 + 37.7500 140.5000 -64.0 + 38.5000 138.7500 -64.0 + 40.5000 138.7500 -64.0 + 44.2500 140.5000 -64.0 + 45.5000 139.7500 -64.0 + 43.7500 136.5000 -64.0 + 41.5000 136.2500 -64.0 + 40.7500 134.5000 -64.0 + 42.7500 132.5000 -64.0 + 43.7500 130.5000 -64.0 + 44.5000 128.7500 -64.0 + 43.7500 127.5000 -64.0 + 42.7500 125.5000 -64.0 + 46.5000 120.7500 -64.0 + 48.2500 121.5000 -64.0 + 49.2500 123.5000 -64.0 + 51.5000 122.7500 -64.0 + 50.7500 120.5000 -64.0 + 52.5000 119.7500 -64.0 + 51.7500 117.5000 -64.0 + 53.5000 116.7500 -64.0 + 55.2500 117.5000 -64.0 + 54.2500 120.5000 -64.0 + 55.2500 122.5000 -64.0 + 58.5000 122.7500 -64.0 + 61.5000 121.7500 -64.0 + 62.5000 119.7500 -64.0 + 64.5000 118.7500 -64.0 + 66.5000 119.7500 -64.0 + 68.5000 118.7500 -64.0 + 75.5000 112.7500 -64.0 + 81.5000 109.7500 -64.0 + 83.2500 110.5000 -64.0 + 81.5000 112.7500 -64.0 + 84.5000 111.7500 -64.0 + 88.5000 107.7500 -64.0 + 90.7500 106.5000 -64.0 + 91.7500 104.5000 -64.0 + 89.5000 106.2500 -64.0 + 87.5000 106.2500 -64.0 + 85.7500 105.5000 -64.0 + 86.7500 103.5000 -64.0 + 85.5000 103.2500 -64.0 + 85.2500 104.5000 -64.0 + 80.5000 109.2500 -64.0 + 78.7500 108.5000 -64.0 + 76.7500 104.5000 -64.0 + 69.5000 104.2500 -64.0 + 65.5000 102.2500 -64.0 + 58.7500 98.5000 -64.0 + 56.5000 98.2500 -64.0 + 49.5000 105.2500 -64.0 + 47.5000 106.2500 -64.0 + 45.7500 104.5000 -64.0 + 45.7500 93.5000 -64.0 + 46.7500 88.5000 -64.0 + 48.7500 83.5000 -64.0 + 53.7500 72.5000 -64.0 + 58.5000 66.7500 -64.0 + 62.5000 63.7500 -64.0 + 66.5000 63.7500 -64.0 + 68.5000 64.7500 -64.0 + 68.7500 62.5000 -64.0 + 66.5000 62.2500 -64.0 + 64.7500 60.5000 -64.0 + 65.5000 59.2500 -64.0 + 62.5000 60.2500 -64.0 + 60.7500 59.5000 -64.0 + 61.5000 58.7500 -64.0 + 65.5000 55.7500 -64.0 + 67.5000 55.7500 -64.0 + 69.2500 56.5000 -64.0 + 68.5000 57.2500 -64.0 + 69.5000 57.7500 -64.0 + 72.5000 53.7500 -64.0 + 74.7500 53.5000 -64.0 +} -64.0 +{ -64.0 + 142.2500 56.5000 -64.0 + 141.5000 57.2500 -64.0 + 135.2500 57.5000 -64.0 + 141.5000 57.7500 -64.0 + 143.5000 56.7500 -64.0 + 145.5000 56.7500 -64.0 + 148.5000 57.7500 -64.0 + 152.2500 61.5000 -64.0 + 153.2500 63.5000 -64.0 + 151.5000 65.2500 -64.0 + 149.5000 66.2500 -64.0 + 150.5000 66.7500 -64.0 + 152.5000 65.7500 -64.0 + 154.5000 65.7500 -64.0 + 161.2500 72.5000 -64.0 + 164.2500 78.5000 -64.0 + 164.2500 80.5000 -64.0 + 166.2500 84.5000 -64.0 + 166.2500 87.5000 -64.0 + 168.5000 87.7500 -64.0 + 168.7500 81.5000 -64.0 + 164.7500 73.5000 -64.0 + 164.5000 71.2500 -64.0 + 161.7500 64.5000 -64.0 + 156.5000 59.2500 -64.0 + 152.5000 57.2500 -64.0 + 150.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 86.5000 -64.0 + 93.2500 87.5000 -64.0 + 93.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 87.5000 -64.0 + 126.2500 90.5000 -64.0 + 128.5000 90.7500 -64.0 + 131.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 91.5000 -64.0 + 95.2500 93.5000 -64.0 + 96.5000 92.7500 -64.0 + 95.7500 91.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 91.5000 -64.0 + 105.2500 93.5000 -64.0 + 106.5000 93.7500 -64.0 + 108.2500 95.5000 -64.0 + 108.7500 94.5000 -64.0 + 107.7500 91.5000 -64.0 +} -64.0 +{ -64.0 + 104.2500 94.5000 -64.0 + 102.2500 97.5000 -64.0 + 103.2500 99.5000 -64.0 + 100.2500 101.5000 -64.0 + 101.2500 104.5000 -64.0 + 106.5000 101.7500 -64.0 + 106.7500 98.5000 -64.0 + 103.7500 97.5000 -64.0 + 104.7500 95.5000 -64.0 +} -64.0 +{ -64.0 + 80.2500 99.5000 -64.0 + 78.5000 102.2500 -64.0 + 78.2500 104.5000 -64.0 + 80.5000 103.7500 -64.0 + 83.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 99.5000 -64.0 + 127.2500 101.5000 -64.0 + 129.5000 101.7500 -64.0 +} -64.0 +{ -64.0 + 109.2500 101.5000 -64.0 + 108.5000 102.2500 -64.0 + 108.2500 105.5000 -64.0 + 109.5000 105.7500 -64.0 + 110.7500 102.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 104.5000 -64.0 + 120.2500 105.5000 -64.0 + 118.5000 107.7500 -64.0 + 120.5000 106.7500 -64.0 + 120.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 107.5000 -64.0 + 95.5000 108.2500 -64.0 + 96.2500 109.5000 -64.0 + 96.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 107.5000 -64.0 + 113.2500 108.5000 -64.0 + 114.7500 109.5000 -64.0 + 115.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 156.2500 113.5000 -64.0 + 155.5000 114.2500 -64.0 + 150.2500 118.5000 -64.0 + 151.2500 120.5000 -64.0 + 153.5000 120.7500 -64.0 + 153.7500 118.5000 -64.0 + 156.5000 115.7500 -64.0 + 158.2500 116.5000 -64.0 + 157.5000 118.2500 -64.0 + 155.2500 119.5000 -64.0 + 158.5000 119.7500 -64.0 + 161.5000 118.7500 -64.0 + 163.7500 115.5000 -64.0 + 162.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 116.5000 -64.0 + 117.2500 118.5000 -64.0 + 117.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 70.2500 120.5000 -64.0 + 67.2500 123.5000 -64.0 + 65.2500 127.5000 -64.0 + 67.5000 127.7500 -64.0 + 68.2500 129.5000 -64.0 + 67.5000 131.2500 -64.0 + 65.7500 130.5000 -64.0 + 64.7500 128.5000 -64.0 + 63.5000 128.2500 -64.0 + 60.5000 129.2500 -64.0 + 60.2500 131.5000 -64.0 + 61.2500 134.5000 -64.0 + 59.2500 138.5000 -64.0 + 60.5000 138.7500 -64.0 + 62.5000 137.7500 -64.0 + 66.2500 139.5000 -64.0 + 64.5000 141.2500 -64.0 + 58.5000 141.2500 -64.0 + 59.2500 142.5000 -64.0 + 63.5000 142.7500 -64.0 + 66.5000 141.7500 -64.0 + 70.5000 137.7500 -64.0 + 75.5000 137.7500 -64.0 + 77.5000 136.7500 -64.0 + 77.7500 134.5000 -64.0 + 76.7500 131.5000 -64.0 + 71.5000 130.2500 -64.0 + 70.7500 128.5000 -64.0 + 71.5000 126.7500 -64.0 + 73.5000 126.7500 -64.0 + 77.2500 129.5000 -64.0 + 84.5000 129.7500 -64.0 + 87.5000 128.7500 -64.0 + 90.5000 125.7500 -64.0 + 90.7500 123.5000 -64.0 + 89.5000 123.2500 -64.0 + 87.5000 125.2500 -64.0 + 83.5000 127.2500 -64.0 + 81.7500 125.5000 -64.0 + 82.7500 124.5000 -64.0 + 77.7500 121.5000 -64.0 + 73.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 48.2500 124.5000 -64.0 + 46.2500 127.5000 -64.0 + 47.5000 127.7500 -64.0 + 49.2500 129.5000 -64.0 + 49.2500 131.5000 -64.0 + 48.2500 133.5000 -64.0 + 50.5000 133.7500 -64.0 + 52.5000 127.7500 -64.0 + 54.5000 128.7500 -64.0 + 54.5000 126.2500 -64.0 + 52.5000 125.2500 -64.0 + 51.5000 127.2500 -64.0 + 49.5000 127.2500 -64.0 +} -64.0 +{ -64.0 + 59.2500 125.5000 -64.0 + 59.2500 126.5000 -64.0 + 60.5000 126.7500 -64.0 + 60.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 56.2500 139.5000 -64.0 + 55.2500 141.5000 -64.0 + 56.7500 140.5000 -64.0 +} -64.0 +{ -64.0 + 164.2500 141.5000 -64.0 + 164.2500 143.5000 -64.0 + 165.5000 144.7500 -64.0 + 165.7500 141.5000 -64.0 +} -64.0 +{ -64.0 + 152.2500 142.5000 -64.0 + 156.2500 145.5000 -64.0 + 156.7500 144.5000 -64.0 + 153.7500 142.5000 -64.0 +} -64.0 +{ -64.0 + 163.2500 152.5000 -64.0 + 162.5000 153.2500 -64.0 + 163.5000 153.7500 -64.0 + 164.7500 152.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 60.5000 -64.0 + 153.5000 59.7500 -64.0 + 157.2500 62.5000 -64.0 + 155.5000 63.2500 -64.0 +} -64.0 +{ -64.0 + 57.7500 63.5000 -64.0 + 58.5000 62.7500 -64.0 + 59.2500 63.5000 -64.0 + 58.5000 64.2500 -64.0 +} -64.0 +{ -64.0 + 56.7500 101.5000 -64.0 + 58.5000 100.7500 -64.0 + 60.2500 101.5000 -64.0 + 62.2500 107.5000 -64.0 + 59.5000 111.2500 -64.0 + 55.7500 109.5000 -64.0 + 53.5000 109.2500 -64.0 + 52.7500 107.5000 -64.0 + 53.5000 105.7500 -64.0 + 55.5000 105.7500 -64.0 +} -64.0 +{ -64.0 + 72.7500 106.5000 -64.0 + 73.5000 105.7500 -64.0 + 76.2500 107.5000 -64.0 + 76.2500 110.5000 -64.0 + 74.5000 111.2500 -64.0 + 72.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 165.5000 106.7500 -64.0 + 166.2500 107.5000 -64.0 + 164.5000 109.2500 -64.0 + 163.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 51.7500 111.5000 -64.0 + 53.5000 110.7500 -64.0 + 56.5000 111.7500 -64.0 + 57.2500 113.5000 -64.0 + 56.5000 115.2500 -64.0 + 52.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 137.7500 112.5000 -64.0 + 138.5000 111.7500 -64.0 + 140.5000 111.7500 -64.0 + 142.2500 112.5000 -64.0 + 142.2500 114.5000 -64.0 + 140.5000 115.2500 -64.0 + 138.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 68.7500 124.5000 -64.0 + 70.5000 123.7500 -64.0 + 71.2500 125.5000 -64.0 + 69.5000 126.2500 -64.0 +} -64.0 +{ -64.0 + 74.7500 124.5000 -64.0 + 75.5000 123.7500 -64.0 + 76.2500 124.5000 -64.0 + 75.5000 126.2500 -64.0 +} -64.0 +{ -64.0 + 37.7500 146.5000 -64.0 + 38.5000 145.7500 -64.0 + 40.2500 146.5000 -64.0 + 38.5000 149.2500 -64.0 + 37.7500 148.5000 -64.0 +} -64.0 +v 442 z -122.000000 -64.0 +{ -64.0 + 95.2500 45.5000 -64.0 + 92.2500 49.5000 -64.0 + 93.5000 49.7500 -64.0 + 95.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 50.5000 -64.0 + 126.2500 52.5000 -64.0 + 127.5000 52.7500 -64.0 + 127.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 65.2500 54.5000 -64.0 + 59.5000 57.2500 -64.0 + 53.5000 66.2500 -64.0 + 53.2500 68.5000 -64.0 + 48.5000 76.2500 -64.0 + 48.2500 78.5000 -64.0 + 46.2500 82.5000 -64.0 + 47.2500 84.5000 -64.0 + 48.7500 83.5000 -64.0 + 53.7500 72.5000 -64.0 + 59.5000 65.7500 -64.0 + 65.5000 62.7500 -64.0 + 69.2500 64.5000 -64.0 + 69.7500 63.5000 -64.0 + 64.7500 60.5000 -64.0 + 66.5000 58.2500 -64.0 + 64.5000 59.2500 -64.0 + 62.7500 58.5000 -64.0 + 66.5000 55.7500 -64.0 + 68.2500 56.5000 -64.0 + 67.2500 57.5000 -64.0 + 69.5000 57.7500 -64.0 + 69.7500 56.5000 -64.0 + 73.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 145.2500 56.5000 -64.0 + 144.5000 57.2500 -64.0 + 141.2500 57.5000 -64.0 + 148.5000 57.7500 -64.0 + 152.2500 61.5000 -64.0 + 152.2500 63.5000 -64.0 + 149.5000 65.2500 -64.0 + 147.5000 65.2500 -64.0 + 146.2500 68.5000 -64.0 + 152.5000 65.7500 -64.0 + 155.5000 66.7500 -64.0 + 158.2500 69.5000 -64.0 + 161.2500 73.5000 -64.0 + 165.2500 81.5000 -64.0 + 166.5000 81.7500 -64.0 + 166.7500 78.5000 -64.0 + 164.7500 74.5000 -64.0 + 164.7500 72.5000 -64.0 + 162.7500 68.5000 -64.0 + 162.7500 66.5000 -64.0 + 158.7500 61.5000 -64.0 + 152.7500 57.5000 -64.0 + 150.5000 57.2500 -64.0 +} -64.0 +{ -64.0 + 154.2500 80.5000 -64.0 + 154.2500 82.5000 -64.0 + 155.5000 83.7500 -64.0 + 155.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 88.5000 -64.0 + 90.5000 89.7500 -64.0 + 94.5000 91.7500 -64.0 + 93.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 88.5000 -64.0 + 127.2500 89.5000 -64.0 + 130.5000 89.7500 -64.0 + 130.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 90.5000 -64.0 + 106.2500 92.5000 -64.0 + 107.5000 92.7500 -64.0 + 107.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 91.5000 -64.0 + 121.2500 92.5000 -64.0 + 122.5000 92.7500 -64.0 + 122.7500 91.5000 -64.0 +} -64.0 +{ -64.0 + 45.2500 92.5000 -64.0 + 42.5000 98.2500 -64.0 + 42.2500 104.5000 -64.0 + 44.2500 111.5000 -64.0 + 43.2500 122.5000 -64.0 + 34.5000 139.2500 -64.0 + 34.2500 143.5000 -64.0 + 33.5000 145.2500 -64.0 + 33.2500 155.5000 -64.0 + 38.2500 176.5000 -64.0 + 43.2500 189.5000 -64.0 + 49.2500 196.5000 -64.0 + 52.2500 202.5000 -64.0 + 59.2500 211.5000 -64.0 + 67.5000 218.7500 -64.0 + 73.2500 222.5000 -64.0 + 86.2500 226.5000 -64.0 + 94.5000 226.7500 -64.0 + 96.5000 225.7500 -64.0 + 119.5000 225.7500 -64.0 + 121.5000 224.7500 -64.0 + 124.5000 224.7500 -64.0 + 132.5000 220.7500 -64.0 + 142.5000 213.7500 -64.0 + 152.7500 201.5000 -64.0 + 155.7500 195.5000 -64.0 + 163.7500 186.5000 -64.0 + 171.7500 170.5000 -64.0 + 174.5000 160.7500 -64.0 + 175.7500 147.5000 -64.0 + 171.7500 136.5000 -64.0 + 167.7500 132.5000 -64.0 + 164.5000 132.2500 -64.0 + 162.5000 133.2500 -64.0 + 160.5000 133.2500 -64.0 + 163.2500 134.5000 -64.0 + 161.5000 136.2500 -64.0 + 162.2500 138.5000 -64.0 + 165.7500 139.5000 -64.0 + 164.7500 137.5000 -64.0 + 165.5000 135.7500 -64.0 + 170.5000 137.7500 -64.0 + 172.2500 141.5000 -64.0 + 171.5000 142.2500 -64.0 + 173.2500 145.5000 -64.0 + 172.5000 147.2500 -64.0 + 173.2500 148.5000 -64.0 + 172.5000 149.2500 -64.0 + 170.5000 148.2500 -64.0 + 168.5000 149.2500 -64.0 + 170.2500 150.5000 -64.0 + 170.2500 156.5000 -64.0 + 169.5000 158.2500 -64.0 + 167.5000 159.2500 -64.0 + 165.5000 164.2500 -64.0 + 164.7500 163.5000 -64.0 + 164.7500 161.5000 -64.0 + 162.7500 155.5000 -64.0 + 161.5000 156.2500 -64.0 + 160.7500 155.5000 -64.0 + 160.2500 156.5000 -64.0 + 163.2500 159.5000 -64.0 + 161.2500 173.5000 -64.0 + 158.2500 177.5000 -64.0 + 157.2500 182.5000 -64.0 + 151.2500 190.5000 -64.0 + 146.2500 200.5000 -64.0 + 139.5000 207.2500 -64.0 + 126.5000 216.2500 -64.0 + 124.5000 216.2500 -64.0 + 118.5000 219.2500 -64.0 + 112.5000 219.2500 -64.0 + 108.7500 215.5000 -64.0 + 104.5000 215.2500 -64.0 + 103.7500 213.5000 -64.0 + 101.5000 213.2500 -64.0 + 99.5000 216.2500 -64.0 + 95.5000 219.2500 -64.0 + 92.5000 219.2500 -64.0 + 89.5000 218.2500 -64.0 + 87.5000 219.2500 -64.0 + 85.5000 219.2500 -64.0 + 73.5000 213.2500 -64.0 + 67.5000 208.2500 -64.0 + 63.5000 206.2500 -64.0 + 57.7500 199.5000 -64.0 + 54.7500 193.5000 -64.0 + 53.7500 186.5000 -64.0 + 47.7500 181.5000 -64.0 + 44.7500 177.5000 -64.0 + 42.7500 168.5000 -64.0 + 43.7500 158.5000 -64.0 + 41.7500 154.5000 -64.0 + 41.7500 152.5000 -64.0 + 44.5000 148.7500 -64.0 + 48.5000 146.7500 -64.0 + 51.5000 146.7500 -64.0 + 55.5000 144.7500 -64.0 + 59.5000 144.7500 -64.0 + 65.7500 142.5000 -64.0 + 68.5000 138.7500 -64.0 + 72.5000 138.7500 -64.0 + 75.7500 137.5000 -64.0 + 77.7500 133.5000 -64.0 + 89.5000 127.7500 -64.0 + 89.7500 125.5000 -64.0 + 88.5000 125.2500 -64.0 + 84.5000 127.2500 -64.0 + 82.7500 126.5000 -64.0 + 84.5000 124.7500 -64.0 + 84.5000 123.2500 -64.0 + 82.5000 124.2500 -64.0 + 80.5000 124.2500 -64.0 + 77.5000 121.2500 -64.0 + 75.5000 122.2500 -64.0 + 70.5000 121.2500 -64.0 + 66.5000 126.2500 -64.0 + 68.2500 128.5000 -64.0 + 67.5000 132.2500 -64.0 + 66.7500 131.5000 -64.0 + 66.7500 129.5000 -64.0 + 64.5000 129.2500 -64.0 + 62.5000 130.2500 -64.0 + 61.7500 129.5000 -64.0 + 58.5000 129.2500 -64.0 + 58.2500 130.5000 -64.0 + 62.2500 138.5000 -64.0 + 64.5000 138.7500 -64.0 + 65.2500 140.5000 -64.0 + 59.5000 143.2500 -64.0 + 58.7500 142.5000 -64.0 + 56.5000 142.2500 -64.0 + 54.7500 140.5000 -64.0 + 53.5000 143.2500 -64.0 + 52.5000 142.2500 -64.0 + 47.5000 146.2500 -64.0 + 45.7500 145.5000 -64.0 + 44.5000 147.2500 -64.0 + 42.5000 146.2500 -64.0 + 40.5000 147.2500 -64.0 + 37.7500 140.5000 -64.0 + 39.5000 138.7500 -64.0 + 42.7500 138.5000 -64.0 + 43.7500 136.5000 -64.0 + 42.7500 134.5000 -64.0 + 44.7500 133.5000 -64.0 + 46.5000 129.7500 -64.0 + 51.5000 130.7500 -64.0 + 54.5000 129.7500 -64.0 + 55.5000 127.7500 -64.0 + 56.7500 128.5000 -64.0 + 57.7500 126.5000 -64.0 + 56.5000 126.2500 -64.0 + 54.7500 124.5000 -64.0 + 61.5000 120.7500 -64.0 + 64.5000 120.7500 -64.0 + 76.5000 112.7500 -64.0 + 76.7500 111.5000 -64.0 + 68.5000 110.2500 -64.0 + 67.7500 108.5000 -64.0 + 71.5000 106.7500 -64.0 + 75.2500 107.5000 -64.0 + 75.2500 109.5000 -64.0 + 76.5000 109.7500 -64.0 + 78.5000 108.7500 -64.0 + 75.5000 104.2500 -64.0 + 71.5000 106.2500 -64.0 + 68.5000 106.2500 -64.0 + 64.7500 103.5000 -64.0 + 60.5000 102.2500 -64.0 + 57.5000 99.2500 -64.0 + 55.5000 98.2500 -64.0 + 51.5000 101.2500 -64.0 + 49.5000 101.2500 -64.0 + 46.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 104.2500 94.5000 -64.0 + 104.2500 101.5000 -64.0 + 102.5000 103.2500 -64.0 + 103.2500 104.5000 -64.0 + 103.2500 107.5000 -64.0 + 101.2500 108.5000 -64.0 + 106.5000 108.7500 -64.0 + 107.2500 110.5000 -64.0 + 110.5000 110.7500 -64.0 + 114.2500 113.5000 -64.0 + 114.7500 112.5000 -64.0 + 111.7500 108.5000 -64.0 + 109.5000 108.2500 -64.0 + 107.7500 106.5000 -64.0 + 108.5000 104.7500 -64.0 + 107.5000 104.2500 -64.0 + 107.2500 105.5000 -64.0 + 105.5000 106.2500 -64.0 + 103.7500 104.5000 -64.0 + 105.5000 100.7500 -64.0 + 106.2500 101.5000 -64.0 + 107.5000 100.7500 -64.0 + 106.7500 97.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 97.5000 -64.0 + 81.5000 99.2500 -64.0 + 82.5000 99.7500 -64.0 + 84.5000 98.7500 -64.0 +} -64.0 +{ -64.0 + 128.2500 98.5000 -64.0 + 127.2500 99.5000 -64.0 + 128.7500 99.5000 -64.0 +} -64.0 +{ -64.0 + 161.2500 102.5000 -64.0 + 159.5000 105.2500 -64.0 + 159.5000 106.7500 -64.0 + 165.5000 109.7500 -64.0 + 167.5000 108.7500 -64.0 + 167.7500 104.5000 -64.0 + 163.7500 102.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 105.5000 -64.0 + 91.2500 106.5000 -64.0 + 92.5000 106.7500 -64.0 +} -64.0 +{ -64.0 + 98.2500 108.5000 -64.0 + 96.2500 112.5000 -64.0 + 97.5000 112.7500 -64.0 + 99.5000 109.7500 -64.0 +} -64.0 +{ -64.0 + 136.2500 109.5000 -64.0 + 136.2500 110.5000 -64.0 + 137.2500 112.5000 -64.0 + 136.2500 113.5000 -64.0 + 133.5000 117.2500 -64.0 + 129.5000 117.2500 -64.0 + 128.5000 119.2500 -64.0 + 126.5000 120.2500 -64.0 + 125.5000 122.2500 -64.0 + 126.2500 123.5000 -64.0 + 127.2500 125.5000 -64.0 + 126.2500 128.5000 -64.0 + 128.5000 131.7500 -64.0 + 130.5000 130.7500 -64.0 + 132.2500 131.5000 -64.0 + 132.2500 133.5000 -64.0 + 133.2500 136.5000 -64.0 + 134.5000 136.7500 -64.0 + 136.2500 138.5000 -64.0 + 138.5000 138.7500 -64.0 + 143.5000 139.7500 -64.0 + 147.2500 143.5000 -64.0 + 159.2500 154.5000 -64.0 + 159.7500 153.5000 -64.0 + 160.5000 151.7500 -64.0 + 162.7500 150.5000 -64.0 + 158.7500 147.5000 -64.0 + 157.7500 145.5000 -64.0 + 151.5000 145.2500 -64.0 + 149.7500 142.5000 -64.0 + 150.5000 140.7500 -64.0 + 151.7500 141.5000 -64.0 + 150.7500 139.5000 -64.0 + 151.7500 136.5000 -64.0 + 152.5000 134.7500 -64.0 + 154.5000 133.7500 -64.0 + 151.7500 131.5000 -64.0 + 148.5000 131.2500 -64.0 + 145.5000 132.2500 -64.0 + 145.2500 133.5000 -64.0 + 143.5000 135.2500 -64.0 + 144.2500 136.5000 -64.0 + 142.5000 138.2500 -64.0 + 140.5000 138.2500 -64.0 + 138.7500 137.5000 -64.0 + 139.7500 135.5000 -64.0 + 138.7500 133.5000 -64.0 + 138.7500 131.5000 -64.0 + 140.5000 130.7500 -64.0 + 138.7500 129.5000 -64.0 + 137.7500 127.5000 -64.0 + 135.5000 127.2500 -64.0 + 133.7500 125.5000 -64.0 + 132.7500 123.5000 -64.0 + 133.5000 121.7500 -64.0 + 135.5000 120.7500 -64.0 + 138.5000 121.7500 -64.0 + 142.5000 125.7500 -64.0 + 145.5000 124.7500 -64.0 + 152.5000 125.7500 -64.0 + 154.5000 124.7500 -64.0 + 159.5000 124.7500 -64.0 + 161.2500 125.5000 -64.0 + 162.7500 124.5000 -64.0 + 159.5000 122.2500 -64.0 + 153.5000 124.2500 -64.0 + 151.7500 123.5000 -64.0 + 150.5000 124.2500 -64.0 + 148.5000 123.2500 -64.0 + 142.7500 120.5000 -64.0 + 141.7500 118.5000 -64.0 + 144.5000 114.7500 -64.0 + 144.7500 111.5000 -64.0 + 141.5000 111.2500 -64.0 + 137.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 85.2500 110.5000 -64.0 + 85.2500 111.5000 -64.0 + 87.5000 111.7500 -64.0 + 87.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 160.2500 111.5000 -64.0 + 159.5000 112.2500 -64.0 + 157.5000 112.2500 -64.0 + 153.2500 115.5000 -64.0 + 155.5000 115.7500 -64.0 + 157.5000 113.7500 -64.0 + 159.5000 113.7500 -64.0 + 162.5000 112.7500 -64.0 + 164.7500 114.5000 -64.0 + 163.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 115.5000 -64.0 + 117.5000 118.7500 -64.0 + 117.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 116.5000 -64.0 + 150.5000 117.2500 -64.0 + 151.5000 117.7500 -64.0 + 152.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 117.5000 -64.0 + 89.2500 118.5000 -64.0 + 89.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 162.2500 117.5000 -64.0 + 159.2500 119.5000 -64.0 + 161.5000 119.7500 -64.0 + 163.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 123.5000 -64.0 + 116.2500 124.5000 -64.0 + 119.2500 127.5000 -64.0 + 119.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 156.2500 134.5000 -64.0 + 158.2500 135.5000 -64.0 + 159.7500 134.5000 -64.0 +} -64.0 +{ -64.0 + 152.2500 142.5000 -64.0 + 153.2500 143.5000 -64.0 + 153.7500 142.5000 -64.0 +} -64.0 +{ -64.0 + 59.5000 61.7500 -64.0 + 60.2500 62.5000 -64.0 + 57.5000 65.2500 -64.0 + 56.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 157.7500 65.5000 -64.0 + 158.5000 64.7500 -64.0 + 160.2500 66.5000 -64.0 + 159.5000 68.2500 -64.0 + 158.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 55.7500 101.5000 -64.0 + 57.5000 100.7500 -64.0 + 63.2500 107.5000 -64.0 + 61.5000 110.2500 -64.0 + 59.7500 109.5000 -64.0 + 55.5000 109.2500 -64.0 + 52.7500 106.5000 -64.0 + 54.5000 105.7500 -64.0 +} -64.0 +{ -64.0 + 49.7500 108.5000 -64.0 + 50.5000 107.7500 -64.0 + 52.5000 108.7500 -64.0 + 61.5000 112.7500 -64.0 + 64.2500 118.5000 -64.0 + 61.5000 120.2500 -64.0 + 58.5000 120.2500 -64.0 + 55.7500 117.5000 -64.0 + 53.5000 117.2500 -64.0 + 46.7500 111.5000 -64.0 + 47.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 51.7500 119.5000 -64.0 + 52.5000 118.7500 -64.0 + 53.2500 119.5000 -64.0 + 54.2500 121.5000 -64.0 + 53.5000 123.2500 -64.0 + 51.5000 123.2500 -64.0 + 50.7500 121.5000 -64.0 +} -64.0 +v 430 z -124.000000 -64.0 +{ -64.0 + 96.2500 44.5000 -64.0 + 95.2500 45.5000 -64.0 + 96.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 44.5000 -64.0 + 109.2500 49.5000 -64.0 + 108.2500 52.5000 -64.0 + 109.2500 54.5000 -64.0 + 110.7500 52.5000 -64.0 + 109.7500 50.5000 -64.0 + 109.7500 47.5000 -64.0 + 110.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 46.5000 -64.0 + 91.5000 49.2500 -64.0 + 92.2500 50.5000 -64.0 + 93.7500 49.5000 -64.0 + 94.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 50.5000 -64.0 + 127.2500 53.5000 -64.0 + 127.7500 52.5000 -64.0 + 126.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 66.2500 54.5000 -64.0 + 60.5000 57.2500 -64.0 + 56.2500 62.5000 -64.0 + 48.5000 77.2500 -64.0 + 48.2500 81.5000 -64.0 + 49.5000 80.7500 -64.0 + 54.7500 71.5000 -64.0 + 64.5000 62.7500 -64.0 + 66.5000 62.7500 -64.0 + 70.7500 64.5000 -64.0 + 69.7500 61.5000 -64.0 + 66.5000 61.2500 -64.0 + 65.7500 59.5000 -64.0 + 68.5000 56.7500 -64.0 + 72.5000 54.7500 -64.0 +} -64.0 +{ -64.0 + 142.2500 57.5000 -64.0 + 146.5000 57.7500 -64.0 + 152.5000 60.7500 -64.0 + 153.2500 62.5000 -64.0 + 152.5000 64.2500 -64.0 + 151.7500 63.5000 -64.0 + 148.5000 63.2500 -64.0 + 146.5000 65.2500 -64.0 + 146.2500 67.5000 -64.0 + 147.5000 67.7500 -64.0 + 149.5000 65.7500 -64.0 + 154.5000 65.7500 -64.0 + 163.5000 75.7500 -64.0 + 163.5000 71.2500 -64.0 + 160.7500 64.5000 -64.0 + 156.7500 60.5000 -64.0 + 151.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 154.2500 79.5000 -64.0 + 153.5000 80.2500 -64.0 + 153.2500 83.5000 -64.0 + 155.5000 85.7500 -64.0 + 155.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 87.5000 -64.0 + 90.5000 88.2500 -64.0 + 92.2500 89.5000 -64.0 + 92.2500 91.5000 -64.0 + 93.5000 91.7500 -64.0 + 93.7500 90.5000 -64.0 + 92.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 88.5000 -64.0 + 106.5000 89.2500 -64.0 + 106.2500 94.5000 -64.0 + 107.5000 93.7500 -64.0 + 107.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 88.5000 -64.0 + 127.2500 89.5000 -64.0 + 129.5000 89.7500 -64.0 + 129.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 90.5000 -64.0 + 121.5000 92.2500 -64.0 + 122.5000 92.7500 -64.0 + 123.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 46.2500 96.5000 -64.0 + 43.5000 99.2500 -64.0 + 43.2500 105.5000 -64.0 + 45.5000 107.7500 -64.0 + 47.5000 106.7500 -64.0 + 51.5000 106.7500 -64.0 + 61.2500 111.5000 -64.0 + 63.5000 111.7500 -64.0 + 66.2500 116.5000 -64.0 + 65.5000 118.2500 -64.0 + 63.2500 119.5000 -64.0 + 66.5000 119.7500 -64.0 + 71.5000 117.7500 -64.0 + 76.5000 112.7500 -64.0 + 74.7500 109.5000 -64.0 + 76.5000 107.7500 -64.0 + 75.7500 105.5000 -64.0 + 74.5000 105.2500 -64.0 + 68.5000 108.2500 -64.0 + 64.7500 105.5000 -64.0 + 59.5000 105.2500 -64.0 + 57.5000 107.2500 -64.0 + 54.5000 105.2500 -64.0 + 53.7500 103.5000 -64.0 + 54.5000 101.7500 -64.0 + 56.5000 101.7500 -64.0 + 57.2500 103.5000 -64.0 + 58.5000 103.7500 -64.0 + 57.7500 100.5000 -64.0 + 55.7500 98.5000 -64.0 + 53.5000 98.2500 -64.0 + 49.7500 96.5000 -64.0 +} -64.0 +{ -64.0 + 48.2500 109.5000 -64.0 + 47.2500 110.5000 -64.0 + 48.2500 113.5000 -64.0 + 51.7500 114.5000 -64.0 + 50.7500 112.5000 -64.0 + 50.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 109.5000 -64.0 + 98.5000 110.2500 -64.0 + 95.2500 115.5000 -64.0 + 98.5000 112.7500 -64.0 + 103.5000 112.7500 -64.0 + 105.5000 111.7500 -64.0 + 108.5000 111.7500 -64.0 + 111.5000 112.7500 -64.0 + 115.2500 115.5000 -64.0 + 118.2500 119.5000 -64.0 + 119.7500 119.5000 -64.0 + 114.5000 113.2500 -64.0 + 112.5000 112.2500 -64.0 + 110.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 161.2500 111.5000 -64.0 + 152.5000 116.2500 -64.0 + 151.5000 117.7500 -64.0 + 153.5000 116.7500 -64.0 + 155.5000 116.7500 -64.0 + 157.5000 114.7500 -64.0 + 163.5000 112.7500 -64.0 + 165.5000 114.7500 -64.0 + 165.7500 112.5000 -64.0 + 163.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 85.2500 112.5000 -64.0 + 83.5000 117.2500 -64.0 + 81.7500 116.5000 -64.0 + 82.7500 114.5000 -64.0 + 77.5000 114.2500 -64.0 + 75.2500 117.5000 -64.0 + 78.2500 118.5000 -64.0 + 78.2500 120.5000 -64.0 + 73.5000 123.2500 -64.0 + 70.5000 122.2500 -64.0 + 66.5000 126.2500 -64.0 + 66.2500 129.5000 -64.0 + 64.5000 131.2500 -64.0 + 63.7500 130.5000 -64.0 + 61.5000 130.2500 -64.0 + 57.5000 127.2500 -64.0 + 55.5000 129.2500 -64.0 + 53.5000 129.2500 -64.0 + 49.7500 127.5000 -64.0 + 47.5000 127.2500 -64.0 + 45.7500 125.5000 -64.0 + 42.2500 128.5000 -64.0 + 36.5000 136.2500 -64.0 + 34.5000 142.2500 -64.0 + 34.2500 156.5000 -64.0 + 35.2500 158.5000 -64.0 + 36.2500 168.5000 -64.0 + 40.2500 178.5000 -64.0 + 40.2500 180.5000 -64.0 + 45.2500 190.5000 -64.0 + 48.2500 192.5000 -64.0 + 55.2500 204.5000 -64.0 + 65.5000 215.7500 -64.0 + 73.2500 221.5000 -64.0 + 86.2500 225.5000 -64.0 + 101.5000 225.7500 -64.0 + 103.5000 224.7500 -64.0 + 115.5000 225.7500 -64.0 + 117.5000 224.7500 -64.0 + 120.5000 224.7500 -64.0 + 131.5000 220.7500 -64.0 + 138.5000 215.7500 -64.0 + 150.5000 202.7500 -64.0 + 156.7500 192.5000 -64.0 + 161.7500 187.5000 -64.0 + 165.7500 181.5000 -64.0 + 172.7500 165.5000 -64.0 + 174.5000 156.7500 -64.0 + 174.7500 147.5000 -64.0 + 173.7500 145.5000 -64.0 + 172.7500 139.5000 -64.0 + 167.7500 133.5000 -64.0 + 163.5000 133.2500 -64.0 + 162.2500 139.5000 -64.0 + 165.5000 139.7500 -64.0 + 169.5000 137.7500 -64.0 + 171.2500 140.5000 -64.0 + 167.5000 143.2500 -64.0 + 168.2500 144.5000 -64.0 + 167.2500 148.5000 -64.0 + 169.5000 148.7500 -64.0 + 170.2500 150.5000 -64.0 + 169.2500 152.5000 -64.0 + 171.2500 156.5000 -64.0 + 167.5000 158.2500 -64.0 + 167.2500 164.5000 -64.0 + 166.5000 166.2500 -64.0 + 164.7500 165.5000 -64.0 + 164.7500 163.5000 -64.0 + 163.7500 161.5000 -64.0 + 163.7500 150.5000 -64.0 + 161.5000 150.2500 -64.0 + 156.7500 145.5000 -64.0 + 155.7500 143.5000 -64.0 + 151.7500 142.5000 -64.0 + 150.7500 140.5000 -64.0 + 147.7500 139.5000 -64.0 + 150.5000 137.7500 -64.0 + 153.5000 133.7500 -64.0 + 159.5000 135.7500 -64.0 + 159.7500 134.5000 -64.0 + 153.5000 133.2500 -64.0 + 152.7500 131.5000 -64.0 + 146.7500 128.5000 -64.0 + 148.5000 126.7500 -64.0 + 151.5000 126.7500 -64.0 + 156.7500 124.5000 -64.0 + 150.5000 124.2500 -64.0 + 141.7500 120.5000 -64.0 + 139.5000 120.2500 -64.0 + 137.7500 118.5000 -64.0 + 138.5000 117.7500 -64.0 + 141.5000 117.7500 -64.0 + 143.7500 115.5000 -64.0 + 138.7500 112.5000 -64.0 + 137.2500 112.5000 -64.0 + 136.2500 114.5000 -64.0 + 132.5000 118.2500 -64.0 + 132.2500 120.5000 -64.0 + 138.5000 121.7500 -64.0 + 140.2500 124.5000 -64.0 + 137.5000 127.2500 -64.0 + 134.5000 127.2500 -64.0 + 131.7500 123.5000 -64.0 + 131.7500 121.5000 -64.0 + 129.5000 121.2500 -64.0 + 128.2500 124.5000 -64.0 + 129.2500 127.5000 -64.0 + 133.2500 129.5000 -64.0 + 132.5000 130.2500 -64.0 + 132.2500 134.5000 -64.0 + 134.2500 136.5000 -64.0 + 139.2500 139.5000 -64.0 + 146.2500 141.5000 -64.0 + 147.5000 143.7500 -64.0 + 149.5000 144.7500 -64.0 + 150.2500 146.5000 -64.0 + 153.5000 147.7500 -64.0 + 157.2500 150.5000 -64.0 + 162.2500 160.5000 -64.0 + 162.2500 169.5000 -64.0 + 147.5000 194.2500 -64.0 + 147.2500 197.5000 -64.0 + 141.2500 204.5000 -64.0 + 130.5000 212.2500 -64.0 + 118.5000 218.2500 -64.0 + 116.5000 218.2500 -64.0 + 114.5000 219.2500 -64.0 + 111.7500 217.5000 -64.0 + 108.5000 213.2500 -64.0 + 105.5000 214.2500 -64.0 + 101.5000 211.2500 -64.0 + 99.5000 214.2500 -64.0 + 95.5000 217.2500 -64.0 + 83.5000 217.2500 -64.0 + 73.5000 212.2500 -64.0 + 68.5000 207.2500 -64.0 + 64.5000 205.2500 -64.0 + 60.7500 201.5000 -64.0 + 56.7500 194.5000 -64.0 + 54.7500 185.5000 -64.0 + 50.5000 181.2500 -64.0 + 48.5000 180.2500 -64.0 + 45.7500 175.5000 -64.0 + 45.7500 171.5000 -64.0 + 44.7500 169.5000 -64.0 + 44.7500 157.5000 -64.0 + 43.7500 154.5000 -64.0 + 44.7500 151.5000 -64.0 + 48.5000 148.7500 -64.0 + 52.5000 148.7500 -64.0 + 76.5000 136.7500 -64.0 + 80.5000 132.7500 -64.0 + 88.5000 128.7500 -64.0 + 88.5000 126.2500 -64.0 + 86.5000 125.2500 -64.0 + 84.5000 127.2500 -64.0 + 80.5000 127.2500 -64.0 + 76.7500 124.5000 -64.0 + 80.5000 120.7500 -64.0 + 84.5000 118.7500 -64.0 + 87.7500 119.5000 -64.0 + 85.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 54.2500 115.5000 -64.0 + 54.5000 115.7500 -64.0 + 57.7500 117.5000 -64.0 + 56.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 47.2500 116.5000 -64.0 + 46.5000 117.2500 -64.0 + 46.2500 121.5000 -64.0 + 48.2500 125.5000 -64.0 + 49.5000 125.7500 -64.0 + 51.5000 124.7500 -64.0 + 56.5000 121.7500 -64.0 + 59.5000 121.7500 -64.0 + 62.7500 120.5000 -64.0 + 58.5000 120.2500 -64.0 + 52.5000 117.2500 -64.0 + 50.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 118.5000 -64.0 + 109.2500 119.5000 -64.0 + 111.5000 120.7500 -64.0 + 112.5000 120.2500 -64.0 +} -64.0 +{ -64.0 + 161.2500 118.5000 -64.0 + 159.5000 120.2500 -64.0 + 157.2500 120.5000 -64.0 + 160.5000 120.7500 -64.0 + 162.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 121.5000 -64.0 + 96.5000 122.2500 -64.0 + 97.5000 122.7500 -64.0 + 98.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 121.5000 -64.0 + 115.2500 123.5000 -64.0 + 118.2500 129.5000 -64.0 + 121.2500 131.5000 -64.0 + 126.5000 131.7500 -64.0 + 126.7500 128.5000 -64.0 + 125.7500 125.5000 -64.0 + 124.5000 125.2500 -64.0 + 126.2500 128.5000 -64.0 + 123.5000 131.2500 -64.0 + 119.7500 128.5000 -64.0 + 117.7500 124.5000 -64.0 + 114.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 160.2500 122.5000 -64.0 + 159.2500 123.5000 -64.0 + 161.5000 123.7500 -64.0 + 161.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 47.2500 137.5000 -64.0 + 47.2500 138.5000 -64.0 + 48.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 62.5000 58.7500 -64.0 + 63.2500 59.5000 -64.0 + 57.5000 66.2500 -64.0 + 56.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 157.7500 66.5000 -64.0 + 158.5000 65.7500 -64.0 + 159.2500 66.5000 -64.0 + 158.5000 67.2500 -64.0 +} -64.0 +{ -64.0 + 45.7500 101.5000 -64.0 + 47.5000 100.7500 -64.0 + 48.2500 102.5000 -64.0 + 50.2500 103.5000 -64.0 + 47.5000 105.2500 -64.0 + 45.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 71.7500 108.5000 -64.0 + 72.5000 107.7500 -64.0 + 74.2500 109.5000 -64.0 + 72.5000 112.2500 -64.0 + 68.5000 112.2500 -64.0 + 67.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 140.7500 126.5000 -64.0 + 142.5000 125.7500 -64.0 + 146.2500 133.5000 -64.0 + 145.5000 135.2500 -64.0 + 146.2500 137.5000 -64.0 + 145.5000 139.2500 -64.0 + 141.7500 134.5000 -64.0 + 142.7500 132.5000 -64.0 +} -64.0 +{ -64.0 + 71.5000 126.7500 -64.0 + 73.2500 127.5000 -64.0 + 70.5000 129.2500 -64.0 + 69.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 53.7500 130.5000 -64.0 + 54.5000 129.7500 -64.0 + 56.5000 129.7500 -64.0 + 60.2500 133.5000 -64.0 + 60.2500 135.5000 -64.0 + 61.5000 136.7500 -64.0 + 63.5000 137.7500 -64.0 + 65.2500 138.5000 -64.0 + 64.2500 140.5000 -64.0 + 61.5000 142.2500 -64.0 + 59.5000 142.2500 -64.0 + 56.5000 145.2500 -64.0 + 54.7500 144.5000 -64.0 + 54.7500 141.5000 -64.0 + 53.2500 141.5000 -64.0 + 54.2500 143.5000 -64.0 + 52.5000 146.2500 -64.0 + 51.7500 145.5000 -64.0 + 49.5000 145.2500 -64.0 + 48.5000 147.2500 -64.0 + 44.5000 147.2500 -64.0 + 42.5000 149.2500 -64.0 + 42.2500 151.5000 -64.0 + 40.5000 152.2500 -64.0 + 38.7500 149.5000 -64.0 + 38.7500 145.5000 -64.0 + 40.7500 144.5000 -64.0 + 41.7500 142.5000 -64.0 + 38.5000 142.2500 -64.0 + 37.7500 140.5000 -64.0 + 39.5000 139.7500 -64.0 + 40.5000 137.7500 -64.0 + 42.5000 137.7500 -64.0 + 42.7500 136.5000 -64.0 + 41.7500 134.5000 -64.0 + 43.5000 132.7500 -64.0 + 45.5000 133.7500 -64.0 + 45.7500 131.5000 -64.0 + 47.5000 130.7500 -64.0 + 49.2500 131.5000 -64.0 + 48.2500 133.5000 -64.0 + 50.5000 133.7500 -64.0 + 50.7500 132.5000 -64.0 +} -64.0 +{ -64.0 + 160.7500 154.5000 -64.0 + 161.5000 153.7500 -64.0 + 163.2500 154.5000 -64.0 + 162.5000 155.2500 -64.0 +} -64.0 +v 424 z -126.000000 -64.0 +{ -64.0 + 110.2500 34.5000 -64.0 + 110.2500 37.5000 -64.0 + 109.5000 39.2500 -64.0 + 109.2500 43.5000 -64.0 + 110.5000 43.7500 -64.0 + 111.5000 41.7500 -64.0 + 111.7500 34.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 43.5000 -64.0 + 92.2500 48.5000 -64.0 + 91.2500 50.5000 -64.0 + 92.7500 51.5000 -64.0 + 98.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 43.5000 -64.0 + 120.2500 44.5000 -64.0 + 123.2500 47.5000 -64.0 + 126.2500 52.5000 -64.0 + 127.5000 54.7500 -64.0 + 131.2500 57.5000 -64.0 + 132.7500 57.5000 -64.0 + 127.7500 53.5000 -64.0 + 127.7500 51.5000 -64.0 + 121.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 50.5000 -64.0 + 109.2500 55.5000 -64.0 + 110.5000 53.7500 -64.0 + 110.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 66.2500 55.5000 -64.0 + 65.5000 56.2500 -64.0 + 63.5000 56.2500 -64.0 + 59.5000 59.2500 -64.0 + 56.2500 63.5000 -64.0 + 55.2500 65.5000 -64.0 + 52.5000 71.2500 -64.0 + 52.2500 73.5000 -64.0 + 63.5000 62.7500 -64.0 + 67.5000 62.7500 -64.0 + 71.7500 64.5000 -64.0 + 70.7500 61.5000 -64.0 + 68.5000 60.2500 -64.0 + 66.5000 61.2500 -64.0 + 65.7500 60.5000 -64.0 + 64.7500 58.5000 -64.0 + 68.5000 55.7500 -64.0 + 75.7500 55.5000 -64.0 +} -64.0 +{ -64.0 + 143.2500 57.5000 -64.0 + 141.2500 58.5000 -64.0 + 145.2500 59.5000 -64.0 + 151.5000 59.7500 -64.0 + 153.2500 61.5000 -64.0 + 152.5000 63.2500 -64.0 + 147.2500 63.5000 -64.0 + 145.2500 67.5000 -64.0 + 147.5000 65.7500 -64.0 + 149.5000 65.7500 -64.0 + 151.5000 64.7500 -64.0 + 152.2500 65.5000 -64.0 + 153.5000 64.7500 -64.0 + 155.5000 65.7500 -64.0 + 159.5000 70.7500 -64.0 + 161.5000 71.7500 -64.0 + 161.7500 69.5000 -64.0 + 159.7500 64.5000 -64.0 + 152.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 59.2500 76.5000 -64.0 + 58.2500 79.5000 -64.0 + 59.7500 80.5000 -64.0 + 61.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 79.5000 -64.0 + 152.2500 82.5000 -64.0 + 153.5000 85.7500 -64.0 + 155.5000 86.7500 -64.0 + 155.7500 81.5000 -64.0 + 154.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 88.2500 86.5000 -64.0 + 87.5000 87.2500 -64.0 + 88.5000 87.7500 -64.0 + 89.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 87.5000 -64.0 + 107.2500 89.5000 -64.0 + 107.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 87.5000 -64.0 + 127.2500 88.5000 -64.0 + 129.5000 89.7500 -64.0 + 129.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 123.2500 88.5000 -64.0 + 123.2500 90.5000 -64.0 + 124.5000 89.7500 -64.0 +} -64.0 +{ -64.0 + 93.2500 89.5000 -64.0 + 92.2500 91.5000 -64.0 + 93.5000 92.7500 -64.0 +} -64.0 +{ -64.0 + 124.2500 93.5000 -64.0 + 126.2500 95.5000 -64.0 + 127.5000 94.7500 -64.0 + 126.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 50.2500 97.5000 -64.0 + 47.5000 99.2500 -64.0 + 45.5000 99.2500 -64.0 + 44.2500 102.5000 -64.0 + 45.2500 105.5000 -64.0 + 47.5000 105.7500 -64.0 + 50.5000 104.7500 -64.0 + 52.2500 105.5000 -64.0 + 54.5000 104.7500 -64.0 + 54.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 73.2500 106.5000 -64.0 + 67.5000 110.2500 -64.0 + 66.7500 109.5000 -64.0 + 64.2500 109.5000 -64.0 + 67.2500 113.5000 -64.0 + 67.2500 117.5000 -64.0 + 65.5000 119.2500 -64.0 + 59.5000 121.2500 -64.0 + 55.7500 119.5000 -64.0 + 57.5000 118.7500 -64.0 + 54.7500 117.5000 -64.0 + 53.5000 118.2500 -64.0 + 49.5000 118.2500 -64.0 + 48.5000 120.2500 -64.0 + 48.5000 123.7500 -64.0 + 50.5000 122.7500 -64.0 + 56.5000 122.7500 -64.0 + 62.5000 120.7500 -64.0 + 66.5000 120.7500 -64.0 + 68.5000 119.7500 -64.0 + 70.5000 119.7500 -64.0 + 72.5000 117.7500 -64.0 + 75.5000 117.7500 -64.0 + 77.2500 119.5000 -64.0 + 77.2500 121.5000 -64.0 + 74.5000 124.2500 -64.0 + 70.7500 122.5000 -64.0 + 68.2500 127.5000 -64.0 + 70.2500 128.5000 -64.0 + 69.5000 130.2500 -64.0 + 68.5000 129.2500 -64.0 + 66.5000 130.2500 -64.0 + 62.5000 130.2500 -64.0 + 60.7500 128.5000 -64.0 + 58.5000 128.2500 -64.0 + 55.5000 129.2500 -64.0 + 61.2500 134.5000 -64.0 + 62.2500 136.5000 -64.0 + 63.5000 136.7500 -64.0 + 64.2500 138.5000 -64.0 + 60.5000 142.2500 -64.0 + 58.5000 142.2500 -64.0 + 57.5000 144.2500 -64.0 + 53.5000 146.2500 -64.0 + 51.7500 144.5000 -64.0 + 49.5000 145.2500 -64.0 + 49.2500 149.5000 -64.0 + 47.5000 150.2500 -64.0 + 45.2500 158.5000 -64.0 + 43.5000 159.2500 -64.0 + 41.7500 156.5000 -64.0 + 41.7500 152.5000 -64.0 + 38.7500 149.5000 -64.0 + 37.7500 147.5000 -64.0 + 38.7500 144.5000 -64.0 + 40.7500 143.5000 -64.0 + 39.7500 141.5000 -64.0 + 43.5000 135.7500 -64.0 + 48.5000 136.7500 -64.0 + 46.7500 134.5000 -64.0 + 41.7500 133.5000 -64.0 + 42.5000 132.7500 -64.0 + 46.5000 132.7500 -64.0 + 48.5000 130.7500 -64.0 + 49.2500 131.5000 -64.0 + 53.5000 131.7500 -64.0 + 54.7500 130.5000 -64.0 + 42.5000 129.2500 -64.0 + 39.2500 133.5000 -64.0 + 35.5000 141.2500 -64.0 + 35.2500 148.5000 -64.0 + 34.2500 153.5000 -64.0 + 35.2500 155.5000 -64.0 + 35.2500 159.5000 -64.0 + 36.2500 161.5000 -64.0 + 37.2500 170.5000 -64.0 + 39.2500 174.5000 -64.0 + 39.2500 176.5000 -64.0 + 44.2500 186.5000 -64.0 + 48.2500 190.5000 -64.0 + 59.2500 207.5000 -64.0 + 67.2500 215.5000 -64.0 + 71.5000 218.7500 -64.0 + 79.5000 222.7500 -64.0 + 86.2500 224.5000 -64.0 + 101.5000 224.7500 -64.0 + 103.5000 223.7500 -64.0 + 114.5000 224.7500 -64.0 + 116.5000 223.7500 -64.0 + 120.5000 223.7500 -64.0 + 126.5000 221.7500 -64.0 + 136.5000 215.7500 -64.0 + 147.5000 204.7500 -64.0 + 151.7500 198.5000 -64.0 + 158.5000 190.7500 -64.0 + 165.7500 179.5000 -64.0 + 170.7500 169.5000 -64.0 + 173.5000 157.7500 -64.0 + 173.7500 147.5000 -64.0 + 172.7500 145.5000 -64.0 + 171.7500 139.5000 -64.0 + 166.7500 133.5000 -64.0 + 163.5000 133.2500 -64.0 + 160.5000 134.2500 -64.0 + 155.7500 132.5000 -64.0 + 154.5000 133.2500 -64.0 + 152.7500 128.5000 -64.0 + 154.5000 126.7500 -64.0 + 161.5000 122.7500 -64.0 + 160.5000 122.2500 -64.0 + 156.5000 124.2500 -64.0 + 149.5000 124.2500 -64.0 + 136.5000 119.2500 -64.0 + 140.2500 124.5000 -64.0 + 137.5000 127.2500 -64.0 + 134.5000 127.2500 -64.0 + 133.2500 134.5000 -64.0 + 134.5000 134.7500 -64.0 + 134.7500 132.5000 -64.0 + 137.5000 129.7500 -64.0 + 141.2500 130.5000 -64.0 + 141.2500 135.5000 -64.0 + 137.2500 138.5000 -64.0 + 146.5000 141.7500 -64.0 + 147.2500 143.5000 -64.0 + 150.2500 145.5000 -64.0 + 152.5000 145.7500 -64.0 + 156.2500 148.5000 -64.0 + 162.2500 156.5000 -64.0 + 162.2500 158.5000 -64.0 + 163.2500 160.5000 -64.0 + 163.2500 164.5000 -64.0 + 154.2500 181.5000 -64.0 + 149.5000 187.2500 -64.0 + 146.5000 192.2500 -64.0 + 146.2500 194.5000 -64.0 + 143.5000 200.2500 -64.0 + 131.5000 209.2500 -64.0 + 117.5000 217.2500 -64.0 + 114.5000 217.2500 -64.0 + 109.5000 211.2500 -64.0 + 107.5000 212.2500 -64.0 + 105.5000 212.2500 -64.0 + 102.7500 208.5000 -64.0 + 101.5000 208.2500 -64.0 + 95.5000 215.2500 -64.0 + 83.5000 215.2500 -64.0 + 74.5000 211.2500 -64.0 + 68.5000 205.2500 -64.0 + 64.5000 203.2500 -64.0 + 59.7500 195.5000 -64.0 + 59.7500 193.5000 -64.0 + 53.7500 181.5000 -64.0 + 47.7500 174.5000 -64.0 + 47.7500 169.5000 -64.0 + 46.7500 167.5000 -64.0 + 46.7500 153.5000 -64.0 + 50.5000 150.7500 -64.0 + 52.5000 150.7500 -64.0 + 55.7500 148.5000 -64.0 + 58.5000 144.7500 -64.0 + 65.5000 140.7500 -64.0 + 75.5000 136.7500 -64.0 + 79.5000 132.7500 -64.0 + 77.7500 130.5000 -64.0 + 78.5000 128.7500 -64.0 + 79.2500 129.5000 -64.0 + 85.5000 129.7500 -64.0 + 85.7500 126.5000 -64.0 + 83.7500 125.5000 -64.0 + 82.7500 123.5000 -64.0 + 84.5000 121.7500 -64.0 + 84.7500 118.5000 -64.0 + 81.5000 120.2500 -64.0 + 80.7500 119.5000 -64.0 + 81.7500 116.5000 -64.0 + 79.7500 114.5000 -64.0 + 76.5000 114.2500 -64.0 + 74.7500 111.5000 -64.0 + 74.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 47.2500 108.5000 -64.0 + 47.5000 108.7500 -64.0 + 49.5000 109.7500 -64.0 + 53.2500 111.5000 -64.0 + 53.7500 110.5000 -64.0 + 51.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 102.2500 110.5000 -64.0 + 96.5000 113.2500 -64.0 + 93.5000 117.7500 -64.0 + 99.5000 113.7500 -64.0 + 102.5000 113.7500 -64.0 + 105.5000 112.7500 -64.0 + 110.5000 113.7500 -64.0 + 111.2500 115.5000 -64.0 + 113.5000 115.7500 -64.0 + 119.2500 119.5000 -64.0 + 119.7500 118.5000 -64.0 + 118.5000 118.2500 -64.0 + 116.5000 115.2500 -64.0 + 112.5000 113.2500 -64.0 + 109.5000 110.2500 -64.0 + 106.5000 111.2500 -64.0 +} -64.0 +{ -64.0 + 161.2500 111.5000 -64.0 + 149.5000 117.2500 -64.0 + 150.2500 119.5000 -64.0 + 160.5000 113.7500 -64.0 + 163.5000 113.7500 -64.0 + 164.7500 115.5000 -64.0 + 165.7500 113.5000 -64.0 + 164.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 113.5000 -64.0 + 135.2500 116.5000 -64.0 + 136.5000 117.7500 -64.0 + 138.5000 116.7500 -64.0 + 140.5000 116.7500 -64.0 + 140.7500 115.5000 -64.0 + 137.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 57.2500 114.5000 -64.0 + 58.2500 116.5000 -64.0 + 59.7500 116.5000 -64.0 + 58.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 162.2500 117.5000 -64.0 + 160.5000 118.2500 -64.0 + 159.5000 119.7500 -64.0 + 162.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 105.2500 118.5000 -64.0 + 105.2500 119.5000 -64.0 + 110.5000 119.7500 -64.0 + 108.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 119.5000 -64.0 + 100.5000 120.2500 -64.0 + 98.5000 120.2500 -64.0 + 95.2500 123.5000 -64.0 + 93.2500 127.5000 -64.0 + 99.5000 121.7500 -64.0 + 103.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 121.5000 -64.0 + 117.5000 128.7500 -64.0 + 117.7500 124.5000 -64.0 + 114.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 122.5000 -64.0 + 122.2500 123.5000 -64.0 + 126.2500 129.5000 -64.0 + 125.5000 131.2500 -64.0 + 119.5000 131.2500 -64.0 + 120.2500 132.5000 -64.0 + 124.5000 133.7500 -64.0 + 128.5000 131.7500 -64.0 + 128.7500 127.5000 -64.0 + 126.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 43.2500 147.5000 -64.0 + 42.5000 151.2500 -64.0 + 43.7500 152.5000 -64.0 + 44.7500 150.5000 -64.0 +} -64.0 +{ -64.0 + 59.7500 61.5000 -64.0 + 60.5000 60.7500 -64.0 + 62.2500 61.5000 -64.0 + 58.5000 65.2500 -64.0 + 57.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 71.5000 109.7500 -64.0 + 73.2500 110.5000 -64.0 + 71.5000 112.2500 -64.0 + 69.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 76.7500 124.5000 -64.0 + 78.5000 123.7500 -64.0 + 79.2500 125.5000 -64.0 + 77.5000 127.2500 -64.0 + 75.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 80.7500 126.5000 -64.0 + 81.5000 125.7500 -64.0 + 82.2500 126.5000 -64.0 + 81.5000 127.2500 -64.0 +} -64.0 +{ -64.0 + 141.7500 126.5000 -64.0 + 142.5000 125.7500 -64.0 + 143.2500 126.5000 -64.0 + 142.5000 127.2500 -64.0 +} -64.0 +{ -64.0 + 142.7500 131.5000 -64.0 + 143.5000 130.7500 -64.0 + 145.5000 130.7500 -64.0 + 147.2500 132.5000 -64.0 + 148.2500 134.5000 -64.0 + 146.5000 135.2500 -64.0 + 146.2500 137.5000 -64.0 + 147.2500 139.5000 -64.0 + 146.5000 140.2500 -64.0 + 142.7500 136.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 135.5000 -64.0 + 153.5000 134.7500 -64.0 + 157.5000 134.7500 -64.0 + 159.2500 135.5000 -64.0 + 160.5000 134.7500 -64.0 + 162.2500 135.5000 -64.0 + 165.2500 139.5000 -64.0 + 167.5000 139.7500 -64.0 + 169.2500 141.5000 -64.0 + 168.5000 143.2500 -64.0 + 169.2500 144.5000 -64.0 + 168.5000 146.2500 -64.0 + 170.2500 148.5000 -64.0 + 171.2500 150.5000 -64.0 + 169.5000 152.2500 -64.0 + 171.2500 154.5000 -64.0 + 171.2500 157.5000 -64.0 + 165.5000 160.2500 -64.0 + 162.7500 157.5000 -64.0 + 163.5000 156.7500 -64.0 + 163.7500 154.5000 -64.0 + 164.5000 152.7500 -64.0 + 164.5000 150.2500 -64.0 + 162.5000 153.2500 -64.0 + 161.5000 152.2500 -64.0 + 156.7500 145.5000 -64.0 + 156.7500 143.5000 -64.0 + 153.5000 143.2500 -64.0 + 149.7500 140.5000 -64.0 + 149.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 140.7500 138.5000 -64.0 + 141.5000 137.7500 -64.0 + 143.2500 138.5000 -64.0 + 142.5000 139.2500 -64.0 +} -64.0 +v 396 z -128.000000 -64.0 +{ -64.0 + 111.2500 35.5000 -64.0 + 110.5000 36.2500 -64.0 + 108.5000 37.2500 -64.0 + 108.2500 38.5000 -64.0 + 110.2500 40.5000 -64.0 + 113.5000 40.7500 -64.0 + 113.7500 38.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 41.5000 -64.0 + 99.5000 42.2500 -64.0 + 97.5000 43.2500 -64.0 + 92.5000 48.2500 -64.0 + 91.2500 54.5000 -64.0 + 92.5000 54.7500 -64.0 + 92.7500 51.5000 -64.0 + 95.5000 47.7500 -64.0 + 97.5000 46.7500 -64.0 + 99.5000 43.7500 -64.0 + 101.5000 42.7500 -64.0 + 101.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 41.5000 -64.0 + 109.2500 43.5000 -64.0 + 110.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 42.5000 -64.0 + 118.2500 43.5000 -64.0 + 122.2500 46.5000 -64.0 + 121.5000 47.7500 -64.0 + 123.5000 48.7500 -64.0 + 127.2500 54.5000 -64.0 + 127.5000 56.7500 -64.0 + 127.7500 51.5000 -64.0 + 123.5000 45.2500 -64.0 + 119.7500 42.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 51.5000 -64.0 + 109.5000 52.2500 -64.0 + 109.2500 57.5000 -64.0 + 110.5000 55.7500 -64.0 + 110.7500 52.5000 -64.0 +} -64.0 +{ -64.0 + 67.2500 55.5000 -64.0 + 62.5000 57.2500 -64.0 + 59.5000 60.2500 -64.0 + 56.5000 65.2500 -64.0 + 56.2500 68.5000 -64.0 + 64.5000 61.7500 -64.0 + 68.5000 61.7500 -64.0 + 73.7500 65.5000 -64.0 + 71.7500 60.5000 -64.0 + 66.5000 60.2500 -64.0 + 65.7500 58.5000 -64.0 + 67.5000 56.7500 -64.0 + 75.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 58.5000 -64.0 + 140.2500 59.5000 -64.0 + 142.5000 59.7500 -64.0 + 144.2500 61.5000 -64.0 + 144.2500 66.5000 -64.0 + 145.5000 66.7500 -64.0 + 149.5000 63.7500 -64.0 + 154.5000 63.7500 -64.0 + 154.7500 62.5000 -64.0 + 151.7500 59.5000 -64.0 + 146.5000 59.2500 -64.0 + 144.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 60.2500 75.5000 -64.0 + 59.5000 76.2500 -64.0 + 59.5000 81.7500 -64.0 + 61.5000 80.7500 -64.0 + 61.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 79.5000 -64.0 + 152.5000 80.2500 -64.0 + 152.2500 85.5000 -64.0 + 153.5000 86.7500 -64.0 + 155.5000 87.7500 -64.0 + 155.7500 84.5000 -64.0 + 154.7500 82.5000 -64.0 + 154.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 80.5000 -64.0 + 92.2500 81.5000 -64.0 + 93.2500 83.5000 -64.0 + 91.5000 85.2500 -64.0 + 93.2500 88.5000 -64.0 + 93.5000 90.7500 -64.0 + 93.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 82.5000 -64.0 + 123.2500 84.5000 -64.0 + 125.5000 83.7500 -64.0 +} -64.0 +{ -64.0 + 88.2500 83.5000 -64.0 + 87.5000 84.2500 -64.0 + 87.5000 86.7500 -64.0 + 89.5000 85.7500 -64.0 +} -64.0 +{ -64.0 + 126.2500 84.5000 -64.0 + 126.2500 87.5000 -64.0 + 129.5000 87.7500 -64.0 + 131.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 123.2500 87.5000 -64.0 + 123.2500 88.5000 -64.0 + 122.2500 91.5000 -64.0 + 123.5000 91.7500 -64.0 + 125.2500 92.5000 -64.0 + 126.7500 92.5000 -64.0 + 127.7500 90.5000 -64.0 + 126.5000 90.2500 -64.0 + 124.7500 89.5000 -64.0 + 124.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 48.2500 100.5000 -64.0 + 46.2500 102.5000 -64.0 + 48.7500 102.5000 -64.0 + 49.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 46.2500 107.5000 -64.0 + 44.5000 109.7500 -64.0 + 46.5000 108.7500 -64.0 + 54.5000 112.7500 -64.0 + 52.5000 110.2500 -64.0 + 48.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 71.2500 109.5000 -64.0 + 67.5000 112.2500 -64.0 + 69.2500 116.5000 -64.0 + 67.5000 118.2500 -64.0 + 61.5000 121.2500 -64.0 + 58.5000 121.2500 -64.0 + 55.5000 120.2500 -64.0 + 50.5000 119.2500 -64.0 + 48.5000 120.2500 -64.0 + 49.2500 121.5000 -64.0 + 53.2500 122.5000 -64.0 + 60.5000 122.7500 -64.0 + 62.5000 121.7500 -64.0 + 64.5000 121.7500 -64.0 + 66.5000 122.7500 -64.0 + 68.5000 121.7500 -64.0 + 70.5000 121.7500 -64.0 + 70.7500 119.5000 -64.0 + 72.5000 117.7500 -64.0 + 76.5000 117.7500 -64.0 + 78.5000 116.7500 -64.0 + 78.5000 115.2500 -64.0 + 74.7500 113.5000 -64.0 + 74.7500 111.5000 -64.0 + 73.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 160.2500 110.5000 -64.0 + 159.5000 111.2500 -64.0 + 155.5000 114.2500 -64.0 + 150.5000 117.2500 -64.0 + 152.5000 119.7500 -64.0 + 152.7500 117.5000 -64.0 + 155.5000 115.7500 -64.0 + 157.5000 115.7500 -64.0 + 159.5000 113.7500 -64.0 + 161.2500 114.5000 -64.0 + 160.2500 117.5000 -64.0 + 157.5000 119.2500 -64.0 + 158.5000 119.7500 -64.0 + 161.5000 118.7500 -64.0 + 164.5000 114.7500 -64.0 + 164.7500 112.5000 -64.0 + 161.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 102.2500 112.5000 -64.0 + 101.5000 113.2500 -64.0 + 99.5000 113.2500 -64.0 + 96.5000 114.2500 -64.0 + 94.2500 116.5000 -64.0 + 97.5000 116.7500 -64.0 + 99.5000 115.7500 -64.0 + 101.5000 115.7500 -64.0 + 105.5000 113.7500 -64.0 + 108.5000 114.7500 -64.0 + 109.2500 116.5000 -64.0 + 112.5000 116.7500 -64.0 + 114.2500 118.5000 -64.0 + 118.5000 119.7500 -64.0 + 117.5000 117.2500 -64.0 + 113.7500 114.5000 -64.0 + 111.5000 114.2500 -64.0 + 109.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 55.2500 113.5000 -64.0 + 58.2500 115.5000 -64.0 + 59.7500 115.5000 -64.0 + 56.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 114.5000 -64.0 + 137.2500 116.5000 -64.0 + 138.7500 116.5000 -64.0 + 139.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 119.5000 -64.0 + 99.5000 120.2500 -64.0 + 94.5000 126.2500 -64.0 + 94.2500 128.5000 -64.0 + 95.7500 125.5000 -64.0 + 98.5000 122.7500 -64.0 + 103.5000 119.7500 -64.0 + 107.5000 119.7500 -64.0 + 112.5000 121.7500 -64.0 + 115.2500 124.5000 -64.0 + 118.5000 130.7500 -64.0 + 118.7500 128.5000 -64.0 + 117.7500 126.5000 -64.0 + 117.7500 124.5000 -64.0 + 115.5000 122.2500 -64.0 + 109.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 79.2500 121.5000 -64.0 + 73.5000 124.2500 -64.0 + 71.5000 128.2500 -64.0 + 68.5000 128.2500 -64.0 + 66.5000 131.2500 -64.0 + 61.7500 128.5000 -64.0 + 58.5000 128.2500 -64.0 + 53.2500 130.5000 -64.0 + 55.5000 130.7500 -64.0 + 59.5000 132.7500 -64.0 + 61.2500 136.5000 -64.0 + 63.5000 136.7500 -64.0 + 67.5000 133.7500 -64.0 + 68.2500 135.5000 -64.0 + 66.5000 137.2500 -64.0 + 64.5000 137.2500 -64.0 + 64.2500 138.5000 -64.0 + 65.5000 137.7500 -64.0 + 70.5000 137.7500 -64.0 + 75.5000 135.7500 -64.0 + 78.7500 131.5000 -64.0 + 77.7500 129.5000 -64.0 + 77.7500 127.5000 -64.0 + 81.5000 125.7500 -64.0 + 83.2500 126.5000 -64.0 + 86.2500 131.5000 -64.0 + 92.7500 131.5000 -64.0 + 88.5000 130.2500 -64.0 + 84.7500 126.5000 -64.0 + 86.7500 122.5000 -64.0 + 82.5000 124.2500 -64.0 + 81.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 121.5000 -64.0 + 120.2500 122.5000 -64.0 + 126.2500 128.5000 -64.0 + 127.2500 130.5000 -64.0 + 125.5000 132.2500 -64.0 + 119.5000 132.2500 -64.0 + 120.5000 133.7500 -64.0 + 125.5000 134.7500 -64.0 + 129.5000 132.7500 -64.0 + 129.7500 128.5000 -64.0 + 128.7500 126.5000 -64.0 + 126.5000 126.2500 -64.0 + 124.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 139.2500 121.5000 -64.0 + 141.2500 123.5000 -64.0 + 142.2500 130.5000 -64.0 + 144.5000 130.7500 -64.0 + 148.2500 132.5000 -64.0 + 147.2500 135.5000 -64.0 + 149.2500 136.5000 -64.0 + 148.5000 137.2500 -64.0 + 145.5000 137.2500 -64.0 + 142.5000 136.2500 -64.0 + 141.5000 134.2500 -64.0 + 138.2500 139.5000 -64.0 + 142.5000 136.7500 -64.0 + 146.2500 139.5000 -64.0 + 145.5000 140.2500 -64.0 + 142.5000 139.2500 -64.0 + 142.2500 140.5000 -64.0 + 144.5000 140.7500 -64.0 + 149.2500 144.5000 -64.0 + 152.5000 144.7500 -64.0 + 155.2500 147.5000 -64.0 + 162.2500 157.5000 -64.0 + 162.2500 163.5000 -64.0 + 160.5000 164.2500 -64.0 + 157.2500 163.5000 -64.0 + 156.2500 170.5000 -64.0 + 157.2500 172.5000 -64.0 + 154.2500 179.5000 -64.0 + 147.2500 188.5000 -64.0 + 144.2500 195.5000 -64.0 + 141.5000 199.2500 -64.0 + 124.5000 211.2500 -64.0 + 122.5000 211.2500 -64.0 + 118.5000 214.2500 -64.0 + 115.5000 214.2500 -64.0 + 109.7500 209.5000 -64.0 + 108.5000 210.2500 -64.0 + 105.5000 210.2500 -64.0 + 103.7500 208.5000 -64.0 + 103.7500 205.5000 -64.0 + 100.2500 205.5000 -64.0 + 98.2500 209.5000 -64.0 + 94.5000 213.2500 -64.0 + 87.5000 213.2500 -64.0 + 85.5000 214.2500 -64.0 + 79.5000 212.2500 -64.0 + 72.5000 207.2500 -64.0 + 71.5000 205.2500 -64.0 + 63.7500 199.5000 -64.0 + 61.7500 195.5000 -64.0 + 61.7500 192.5000 -64.0 + 60.7500 189.5000 -64.0 + 56.7500 184.5000 -64.0 + 48.7500 169.5000 -64.0 + 48.7500 166.5000 -64.0 + 47.7500 164.5000 -64.0 + 47.7500 155.5000 -64.0 + 51.5000 150.7500 -64.0 + 56.7500 146.5000 -64.0 + 59.5000 142.7500 -64.0 + 63.5000 139.7500 -64.0 + 62.5000 139.2500 -64.0 + 51.5000 146.2500 -64.0 + 49.5000 146.2500 -64.0 + 45.2500 157.5000 -64.0 + 43.5000 158.2500 -64.0 + 41.7500 157.5000 -64.0 + 40.7500 149.5000 -64.0 + 38.7500 148.5000 -64.0 + 38.7500 144.5000 -64.0 + 37.7500 141.5000 -64.0 + 42.5000 135.7500 -64.0 + 45.5000 137.7500 -64.0 + 46.5000 135.7500 -64.0 + 45.7500 133.5000 -64.0 + 46.5000 131.7500 -64.0 + 50.2500 132.5000 -64.0 + 52.7500 131.5000 -64.0 + 44.7500 129.5000 -64.0 + 42.5000 130.2500 -64.0 + 39.2500 134.5000 -64.0 + 37.2500 138.5000 -64.0 + 35.5000 146.2500 -64.0 + 35.2500 155.5000 -64.0 + 37.2500 161.5000 -64.0 + 37.2500 168.5000 -64.0 + 39.2500 172.5000 -64.0 + 39.2500 174.5000 -64.0 + 42.2500 180.5000 -64.0 + 59.2500 205.5000 -64.0 + 66.5000 212.7500 -64.0 + 74.5000 218.7500 -64.0 + 80.5000 221.7500 -64.0 + 90.5000 223.7500 -64.0 + 92.5000 222.7500 -64.0 + 97.5000 223.7500 -64.0 + 99.5000 222.7500 -64.0 + 100.2500 223.5000 -64.0 + 102.5000 223.7500 -64.0 + 104.5000 222.7500 -64.0 + 118.5000 222.7500 -64.0 + 127.5000 219.7500 -64.0 + 135.5000 214.7500 -64.0 + 140.5000 209.7500 -64.0 + 142.5000 208.7500 -64.0 + 161.5000 185.7500 -64.0 + 161.7500 183.5000 -64.0 + 166.7500 175.5000 -64.0 + 170.5000 167.7500 -64.0 + 172.5000 158.7500 -64.0 + 172.7500 146.5000 -64.0 + 171.7500 144.5000 -64.0 + 171.7500 142.5000 -64.0 + 168.7500 136.5000 -64.0 + 164.5000 133.2500 -64.0 + 162.5000 134.2500 -64.0 + 158.5000 133.2500 -64.0 + 155.7500 130.5000 -64.0 + 155.7500 127.5000 -64.0 + 160.5000 122.7500 -64.0 + 159.5000 122.2500 -64.0 + 157.5000 124.2500 -64.0 + 154.5000 124.2500 -64.0 + 151.5000 125.2500 -64.0 + 143.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 153.7500 134.5000 -64.0 + 154.5000 133.7500 -64.0 + 156.2500 134.5000 -64.0 + 161.5000 134.7500 -64.0 + 162.2500 136.5000 -64.0 + 164.2500 137.5000 -64.0 + 165.2500 139.5000 -64.0 + 167.5000 139.7500 -64.0 + 169.2500 140.5000 -64.0 + 169.2500 143.5000 -64.0 + 170.2500 145.5000 -64.0 + 168.5000 148.2500 -64.0 + 170.2500 153.5000 -64.0 + 169.5000 155.2500 -64.0 + 169.2500 158.5000 -64.0 + 167.5000 160.2500 -64.0 + 165.7500 159.5000 -64.0 + 163.7500 155.5000 -64.0 + 164.5000 153.7500 -64.0 + 163.5000 153.2500 -64.0 + 159.7500 151.5000 -64.0 + 156.7500 146.5000 -64.0 + 156.7500 144.5000 -64.0 + 155.5000 144.2500 -64.0 + 152.5000 141.2500 -64.0 + 150.5000 140.2500 -64.0 + 148.7500 139.5000 -64.0 + 149.5000 138.7500 -64.0 + 151.5000 137.7500 -64.0 +} -64.0 +v 408 z -130.000000 -64.0 +{ -64.0 + 104.2500 39.5000 -64.0 + 94.2500 45.5000 -64.0 + 92.2500 49.5000 -64.0 + 93.5000 49.7500 -64.0 + 93.7500 48.5000 -64.0 + 95.7500 47.5000 -64.0 + 96.7500 45.5000 -64.0 + 101.5000 42.7500 -64.0 + 102.2500 43.5000 -64.0 + 97.5000 48.2500 -64.0 + 97.5000 49.7500 -64.0 + 102.5000 45.7500 -64.0 + 102.7500 43.5000 -64.0 + 106.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 40.5000 -64.0 + 107.2500 41.5000 -64.0 + 108.5000 41.7500 -64.0 +} -64.0 +{ -64.0 + 115.2500 40.5000 -64.0 + 115.5000 41.7500 -64.0 + 119.5000 43.7500 -64.0 + 127.2500 52.5000 -64.0 + 127.7500 51.5000 -64.0 + 124.7500 45.5000 -64.0 + 116.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 42.5000 -64.0 + 109.2500 44.5000 -64.0 + 110.5000 44.7500 -64.0 + 112.5000 43.7500 -64.0 + 110.7500 42.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 44.5000 -64.0 + 117.2500 47.5000 -64.0 + 122.2500 50.5000 -64.0 + 122.7500 49.5000 -64.0 + 115.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 49.5000 -64.0 + 108.5000 52.2500 -64.0 + 108.5000 69.7500 -64.0 + 111.5000 57.7500 -64.0 + 111.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 67.2500 56.5000 -64.0 + 63.5000 59.2500 -64.0 + 65.2500 60.5000 -64.0 + 71.5000 61.7500 -64.0 + 74.5000 64.7500 -64.0 + 74.7500 58.5000 -64.0 + 78.7500 56.5000 -64.0 + 75.5000 56.2500 -64.0 + 72.5000 57.2500 -64.0 + 70.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 138.2500 59.5000 -64.0 + 139.5000 59.7500 -64.0 + 142.2500 63.5000 -64.0 + 142.2500 65.5000 -64.0 + 143.7500 65.5000 -64.0 + 145.7500 61.5000 -64.0 + 143.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 61.2500 75.5000 -64.0 + 60.2500 77.5000 -64.0 + 59.2500 82.5000 -64.0 + 61.5000 82.7500 -64.0 + 62.5000 80.7500 -64.0 + 62.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 79.5000 -64.0 + 151.2500 83.5000 -64.0 + 152.2500 85.5000 -64.0 + 152.2500 87.5000 -64.0 + 155.5000 89.7500 -64.0 + 155.7500 86.5000 -64.0 + 154.7500 84.5000 -64.0 + 154.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 80.5000 -64.0 + 125.2500 82.5000 -64.0 + 126.2500 84.5000 -64.0 + 126.2500 86.5000 -64.0 + 131.5000 85.7500 -64.0 + 132.5000 84.2500 -64.0 + 127.5000 83.2500 -64.0 +} -64.0 +{ -64.0 + 86.2500 82.5000 -64.0 + 86.2500 84.5000 -64.0 + 87.5000 85.7500 -64.0 + 89.5000 84.7500 -64.0 + 91.2500 85.5000 -64.0 + 92.2500 87.5000 -64.0 + 93.5000 87.7500 -64.0 + 93.7500 85.5000 -64.0 + 92.7500 83.5000 -64.0 + 90.5000 84.2500 -64.0 + 89.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 123.2500 86.5000 -64.0 + 123.2500 89.5000 -64.0 + 124.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 45.2500 107.5000 -64.0 + 44.5000 108.2500 -64.0 + 44.2500 110.5000 -64.0 + 45.5000 110.7500 -64.0 + 45.7500 109.5000 -64.0 + 47.5000 108.7500 -64.0 + 49.2500 110.5000 -64.0 + 51.5000 110.7500 -64.0 + 57.5000 115.7500 -64.0 + 59.5000 116.7500 -64.0 + 59.5000 115.2500 -64.0 + 55.5000 113.2500 -64.0 + 49.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 159.2500 109.5000 -64.0 + 152.5000 115.2500 -64.0 + 152.2500 118.5000 -64.0 + 154.2500 119.5000 -64.0 + 157.5000 119.7500 -64.0 + 161.5000 117.7500 -64.0 + 162.7500 113.5000 -64.0 + 160.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 110.5000 -64.0 + 68.5000 112.2500 -64.0 + 69.2500 114.5000 -64.0 + 71.2500 115.5000 -64.0 + 62.5000 121.2500 -64.0 + 54.5000 121.2500 -64.0 + 52.7500 119.5000 -64.0 + 49.5000 119.2500 -64.0 + 49.2500 120.5000 -64.0 + 60.2500 125.5000 -64.0 + 57.2500 127.5000 -64.0 + 56.2500 129.5000 -64.0 + 58.5000 132.7500 -64.0 + 60.5000 133.7500 -64.0 + 61.2500 135.5000 -64.0 + 63.5000 135.7500 -64.0 + 63.7500 134.5000 -64.0 + 62.7500 132.5000 -64.0 + 65.5000 130.7500 -64.0 + 63.7500 129.5000 -64.0 + 63.7500 127.5000 -64.0 + 65.5000 125.7500 -64.0 + 68.2500 130.5000 -64.0 + 67.5000 131.2500 -64.0 + 68.2500 132.5000 -64.0 + 67.5000 134.2500 -64.0 + 69.5000 137.7500 -64.0 + 77.7500 134.5000 -64.0 + 78.7500 132.5000 -64.0 + 77.7500 130.5000 -64.0 + 77.7500 125.5000 -64.0 + 76.7500 123.5000 -64.0 + 73.5000 123.2500 -64.0 + 71.7500 121.5000 -64.0 + 71.7500 119.5000 -64.0 + 75.7500 116.5000 -64.0 + 76.7500 114.5000 -64.0 + 74.7500 112.5000 -64.0 + 75.5000 111.7500 -64.0 + 74.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 104.2500 113.5000 -64.0 + 98.5000 116.2500 -64.0 + 95.5000 116.2500 -64.0 + 93.2500 118.5000 -64.0 + 97.5000 118.7500 -64.0 + 99.5000 117.7500 -64.0 + 102.5000 117.7500 -64.0 + 105.5000 114.7500 -64.0 + 114.2500 119.5000 -64.0 + 116.5000 119.7500 -64.0 + 115.7500 118.5000 -64.0 + 107.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 120.5000 -64.0 + 87.5000 122.2500 -64.0 + 83.5000 124.2500 -64.0 + 83.2500 130.5000 -64.0 + 86.2500 132.5000 -64.0 + 92.7500 132.5000 -64.0 + 93.7500 130.5000 -64.0 + 92.5000 131.2500 -64.0 + 87.5000 131.2500 -64.0 + 84.7500 128.5000 -64.0 + 84.7500 126.5000 -64.0 + 89.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 120.5000 -64.0 + 98.5000 121.2500 -64.0 + 94.5000 126.2500 -64.0 + 94.2500 129.5000 -64.0 + 95.5000 127.7500 -64.0 + 95.7500 125.5000 -64.0 + 97.5000 123.7500 -64.0 + 103.5000 120.7500 -64.0 +} -64.0 +{ -64.0 + 108.2500 120.5000 -64.0 + 115.5000 123.7500 -64.0 + 117.2500 126.5000 -64.0 + 119.5000 132.7500 -64.0 + 123.2500 135.5000 -64.0 + 129.5000 135.7500 -64.0 + 130.7500 128.5000 -64.0 + 129.5000 127.2500 -64.0 + 126.5000 128.2500 -64.0 + 126.2500 129.5000 -64.0 + 129.2500 130.5000 -64.0 + 126.5000 133.2500 -64.0 + 121.5000 132.2500 -64.0 + 118.7500 129.5000 -64.0 + 118.7500 127.5000 -64.0 + 116.7500 122.5000 -64.0 + 112.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 120.5000 -64.0 + 117.5000 121.7500 -64.0 + 123.2500 125.5000 -64.0 + 123.2500 127.5000 -64.0 + 124.7500 127.5000 -64.0 + 123.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 121.5000 -64.0 + 141.2500 122.5000 -64.0 + 144.2500 128.5000 -64.0 + 143.2500 131.5000 -64.0 + 144.5000 130.7500 -64.0 + 146.2500 132.5000 -64.0 + 148.2500 136.5000 -64.0 + 147.2500 138.5000 -64.0 + 148.5000 138.7500 -64.0 + 150.2500 139.5000 -64.0 + 148.5000 141.2500 -64.0 + 145.5000 141.2500 -64.0 + 148.2500 143.5000 -64.0 + 151.5000 143.7500 -64.0 + 155.2500 147.5000 -64.0 + 157.2500 151.5000 -64.0 + 158.7500 150.5000 -64.0 + 156.7500 144.5000 -64.0 + 155.5000 144.2500 -64.0 + 150.7500 138.5000 -64.0 + 151.7500 136.5000 -64.0 + 154.5000 133.7500 -64.0 + 157.5000 133.7500 -64.0 + 160.5000 134.7500 -64.0 + 162.2500 135.5000 -64.0 + 163.2500 137.5000 -64.0 + 164.5000 137.7500 -64.0 + 165.2500 139.5000 -64.0 + 168.2500 141.5000 -64.0 + 168.2500 143.5000 -64.0 + 169.2500 146.5000 -64.0 + 168.5000 148.2500 -64.0 + 170.2500 150.5000 -64.0 + 170.2500 152.5000 -64.0 + 168.5000 154.2500 -64.0 + 169.2500 155.5000 -64.0 + 169.2500 159.5000 -64.0 + 166.5000 162.2500 -64.0 + 164.7500 161.5000 -64.0 + 164.5000 158.2500 -64.0 + 162.5000 157.2500 -64.0 + 160.7500 156.5000 -64.0 + 159.7500 154.5000 -64.0 + 157.5000 154.2500 -64.0 + 157.2500 155.5000 -64.0 + 156.5000 157.2500 -64.0 + 156.2500 171.5000 -64.0 + 154.2500 177.5000 -64.0 + 150.2500 182.5000 -64.0 + 147.5000 186.2500 -64.0 + 144.2500 190.5000 -64.0 + 143.2500 192.5000 -64.0 + 138.2500 197.5000 -64.0 + 134.5000 204.2500 -64.0 + 128.5000 207.2500 -64.0 + 125.5000 207.2500 -64.0 + 119.5000 210.2500 -64.0 + 116.5000 210.2500 -64.0 + 114.7500 209.5000 -64.0 + 113.7500 207.5000 -64.0 + 112.5000 207.2500 -64.0 + 110.5000 208.2500 -64.0 + 106.5000 208.2500 -64.0 + 104.7500 205.5000 -64.0 + 104.7500 202.5000 -64.0 + 102.7500 200.5000 -64.0 + 102.7500 198.5000 -64.0 + 101.5000 198.2500 -64.0 + 99.2500 203.5000 -64.0 + 93.5000 210.2500 -64.0 + 89.5000 210.2500 -64.0 + 85.5000 212.2500 -64.0 + 83.5000 212.2500 -64.0 + 80.5000 211.2500 -64.0 + 70.5000 202.2500 -64.0 + 66.5000 200.2500 -64.0 + 63.7500 196.5000 -64.0 + 63.7500 193.5000 -64.0 + 61.7500 187.5000 -64.0 + 57.7500 183.5000 -64.0 + 51.7500 172.5000 -64.0 + 48.7500 167.5000 -64.0 + 48.7500 165.5000 -64.0 + 47.7500 163.5000 -64.0 + 47.7500 161.5000 -64.0 + 46.7500 159.5000 -64.0 + 46.7500 157.5000 -64.0 + 50.7500 148.5000 -64.0 + 53.5000 146.7500 -64.0 + 57.5000 144.7500 -64.0 + 61.7500 140.5000 -64.0 + 59.5000 140.2500 -64.0 + 55.5000 143.2500 -64.0 + 53.5000 143.2500 -64.0 + 50.2500 145.5000 -64.0 + 49.2500 147.5000 -64.0 + 48.5000 149.2500 -64.0 + 46.2500 149.5000 -64.0 + 47.2500 151.5000 -64.0 + 45.2500 155.5000 -64.0 + 44.5000 157.2500 -64.0 + 42.7500 156.5000 -64.0 + 42.7500 154.5000 -64.0 + 44.5000 153.7500 -64.0 + 44.5000 152.2500 -64.0 + 42.5000 153.2500 -64.0 + 40.5000 152.2500 -64.0 + 38.7500 147.5000 -64.0 + 39.7500 144.5000 -64.0 + 37.7500 142.5000 -64.0 + 39.7500 139.5000 -64.0 + 40.7500 137.5000 -64.0 + 47.5000 134.7500 -64.0 + 46.7500 132.5000 -64.0 + 48.5000 131.7500 -64.0 + 50.5000 132.7500 -64.0 + 53.5000 131.7500 -64.0 + 53.5000 130.2500 -64.0 + 51.5000 131.2500 -64.0 + 49.5000 131.2500 -64.0 + 46.5000 130.2500 -64.0 + 44.7500 129.5000 -64.0 + 43.5000 130.2500 -64.0 + 40.2500 134.5000 -64.0 + 38.2500 138.5000 -64.0 + 37.5000 140.2500 -64.0 + 37.2500 143.5000 -64.0 + 36.5000 145.2500 -64.0 + 36.2500 155.5000 -64.0 + 37.2500 157.5000 -64.0 + 37.2500 165.5000 -64.0 + 40.2500 171.5000 -64.0 + 40.2500 173.5000 -64.0 + 47.2500 187.5000 -64.0 + 53.2500 194.5000 -64.0 + 54.2500 196.5000 -64.0 + 61.2500 204.5000 -64.0 + 62.2500 206.5000 -64.0 + 70.2500 213.5000 -64.0 + 74.5000 216.7500 -64.0 + 82.5000 220.7500 -64.0 + 84.2500 221.5000 -64.0 + 116.5000 221.7500 -64.0 + 118.5000 220.7500 -64.0 + 121.5000 220.7500 -64.0 + 129.5000 216.7500 -64.0 + 133.5000 213.7500 -64.0 + 135.5000 212.7500 -64.0 + 140.5000 207.7500 -64.0 + 142.7500 206.5000 -64.0 + 143.7500 204.5000 -64.0 + 149.7500 198.5000 -64.0 + 158.7500 188.5000 -64.0 + 169.7500 166.5000 -64.0 + 170.5000 164.7500 -64.0 + 170.7500 161.5000 -64.0 + 171.5000 159.7500 -64.0 + 171.7500 145.5000 -64.0 + 169.7500 141.5000 -64.0 + 169.7500 139.5000 -64.0 + 164.7500 133.5000 -64.0 + 160.5000 133.2500 -64.0 + 158.7500 131.5000 -64.0 + 157.7500 129.5000 -64.0 + 158.7500 124.5000 -64.0 + 157.5000 123.2500 -64.0 + 153.5000 125.2500 -64.0 + 151.5000 125.2500 -64.0 + 148.5000 124.2500 -64.0 + 145.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 134.5000 -64.0 + 138.5000 136.2500 -64.0 + 138.2500 138.5000 -64.0 + 139.2500 140.5000 -64.0 + 143.7500 140.5000 -64.0 + 140.5000 140.2500 -64.0 + 139.7500 138.5000 -64.0 + 140.7500 135.5000 -64.0 +} -64.0 +{ -64.0 + 63.2500 138.5000 -64.0 + 62.2500 139.5000 -64.0 + 63.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 155.7500 115.5000 -64.0 + 157.5000 114.7500 -64.0 + 159.2500 115.5000 -64.0 + 158.5000 117.2500 -64.0 + 156.5000 118.2500 -64.0 + 154.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 66.7500 121.5000 -64.0 + 68.5000 120.7500 -64.0 + 70.2500 121.5000 -64.0 + 69.5000 123.2500 -64.0 + 67.5000 124.2500 -64.0 + 65.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 68.7500 130.5000 -64.0 + 69.5000 129.7500 -64.0 + 71.5000 129.7500 -64.0 + 73.2500 130.5000 -64.0 + 74.2500 132.5000 -64.0 + 72.5000 134.2500 -64.0 + 70.5000 134.2500 -64.0 + 68.7500 132.5000 -64.0 +} -64.0 +v 390 z -132.000000 -64.0 +{ -64.0 + 105.2500 38.5000 -64.0 + 101.5000 41.2500 -64.0 + 95.2500 43.5000 -64.0 + 92.2500 49.5000 -64.0 + 97.5000 44.7500 -64.0 + 106.7500 38.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 39.5000 -64.0 + 115.2500 40.5000 -64.0 + 118.5000 42.7500 -64.0 + 120.5000 43.7500 -64.0 + 125.2500 49.5000 -64.0 + 126.2500 51.5000 -64.0 + 128.2500 52.5000 -64.0 + 128.7500 51.5000 -64.0 + 125.7500 47.5000 -64.0 + 125.7500 45.5000 -64.0 + 124.5000 44.2500 -64.0 + 118.5000 41.2500 -64.0 +} -64.0 +{ -64.0 + 105.2500 43.5000 -64.0 + 103.5000 45.2500 -64.0 + 103.2500 47.5000 -64.0 + 101.5000 49.2500 -64.0 + 100.7500 48.5000 -64.0 + 95.5000 50.2500 -64.0 + 95.2500 53.5000 -64.0 + 96.5000 54.7500 -64.0 + 102.5000 50.7500 -64.0 + 104.2500 51.5000 -64.0 + 103.2500 54.5000 -64.0 + 106.2500 58.5000 -64.0 + 106.2500 64.5000 -64.0 + 108.2500 68.5000 -64.0 + 108.2500 73.5000 -64.0 + 109.5000 72.7500 -64.0 + 109.7500 70.5000 -64.0 + 117.5000 56.7500 -64.0 + 120.5000 56.7500 -64.0 + 124.2500 62.5000 -64.0 + 125.5000 62.7500 -64.0 + 125.7500 58.5000 -64.0 + 120.5000 51.2500 -64.0 + 116.7500 49.5000 -64.0 + 116.7500 47.5000 -64.0 + 112.7500 43.5000 -64.0 + 110.5000 43.2500 -64.0 + 108.5000 44.2500 -64.0 + 107.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 79.2500 56.5000 -64.0 + 78.5000 57.2500 -64.0 + 75.5000 57.2500 -64.0 + 73.5000 59.2500 -64.0 + 75.5000 61.7500 -64.0 + 77.5000 62.7500 -64.0 + 77.7500 59.5000 -64.0 + 80.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 135.2500 58.5000 -64.0 + 138.2500 60.5000 -64.0 + 140.2500 64.5000 -64.0 + 141.5000 63.7500 -64.0 + 141.7500 61.5000 -64.0 + 136.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 60.2500 76.5000 -64.0 + 60.2500 77.5000 -64.0 + 59.2500 84.5000 -64.0 + 60.5000 84.7500 -64.0 + 62.7500 81.5000 -64.0 + 63.7500 79.5000 -64.0 + 62.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 77.5000 -64.0 + 90.2500 78.5000 -64.0 + 87.5000 81.2500 -64.0 + 84.5000 81.2500 -64.0 + 86.2500 83.5000 -64.0 + 87.5000 82.7500 -64.0 + 88.2500 84.5000 -64.0 + 90.5000 84.7500 -64.0 + 92.5000 86.7500 -64.0 + 92.5000 84.2500 -64.0 + 90.5000 83.2500 -64.0 + 89.7500 81.5000 -64.0 + 91.5000 79.7500 -64.0 +} -64.0 +{ -64.0 + 126.2500 80.5000 -64.0 + 126.2500 83.5000 -64.0 + 127.2500 86.5000 -64.0 + 129.5000 84.7500 -64.0 + 132.5000 84.7500 -64.0 + 133.7500 83.5000 -64.0 + 129.7500 82.5000 -64.0 + 128.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 152.2500 80.5000 -64.0 + 151.5000 81.2500 -64.0 + 151.2500 86.5000 -64.0 + 152.2500 89.5000 -64.0 + 155.5000 92.7500 -64.0 + 155.7500 88.5000 -64.0 + 154.7500 86.5000 -64.0 + 154.7500 83.5000 -64.0 + 153.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 85.5000 -64.0 + 123.5000 86.2500 -64.0 + 123.2500 88.5000 -64.0 + 125.5000 86.7500 -64.0 +} -64.0 +{ -64.0 + 48.2500 106.5000 -64.0 + 46.5000 107.2500 -64.0 + 46.2500 111.5000 -64.0 + 48.5000 114.7500 -64.0 + 50.5000 115.7500 -64.0 + 48.7500 112.5000 -64.0 + 49.5000 110.7500 -64.0 + 51.5000 110.7500 -64.0 + 54.5000 113.7500 -64.0 + 56.5000 114.7500 -64.0 + 57.2500 116.5000 -64.0 + 58.7500 116.5000 -64.0 + 57.7500 113.5000 -64.0 + 53.5000 111.2500 -64.0 + 50.7500 106.5000 -64.0 +} -64.0 +{ -64.0 + 157.2500 107.5000 -64.0 + 156.2500 110.5000 -64.0 + 153.5000 113.2500 -64.0 + 153.2500 116.5000 -64.0 + 154.2500 118.5000 -64.0 + 158.7500 118.5000 -64.0 + 161.5000 114.7500 -64.0 + 160.7500 113.5000 -64.0 + 160.7500 109.5000 -64.0 + 158.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 74.2500 110.5000 -64.0 + 72.2500 111.5000 -64.0 + 71.2500 113.5000 -64.0 + 73.2500 114.5000 -64.0 + 71.5000 116.2500 -64.0 + 60.5000 122.2500 -64.0 + 57.5000 122.2500 -64.0 + 51.5000 119.2500 -64.0 + 51.2500 121.5000 -64.0 + 54.2500 124.5000 -64.0 + 55.2500 126.5000 -64.0 + 52.5000 129.2500 -64.0 + 48.5000 131.2500 -64.0 + 44.7500 129.5000 -64.0 + 42.2500 132.5000 -64.0 + 38.5000 139.2500 -64.0 + 37.5000 144.2500 -64.0 + 37.2500 156.5000 -64.0 + 38.2500 158.5000 -64.0 + 38.2500 163.5000 -64.0 + 41.2500 169.5000 -64.0 + 41.2500 172.5000 -64.0 + 49.2500 188.5000 -64.0 + 56.2500 195.5000 -64.0 + 57.2500 197.5000 -64.0 + 64.2500 205.5000 -64.0 + 77.5000 216.7500 -64.0 + 83.2500 219.5000 -64.0 + 92.5000 219.7500 -64.0 + 94.2500 220.5000 -64.0 + 108.5000 220.7500 -64.0 + 110.5000 219.7500 -64.0 + 118.5000 219.7500 -64.0 + 127.5000 216.7500 -64.0 + 135.5000 210.7500 -64.0 + 156.5000 189.7500 -64.0 + 160.7500 183.5000 -64.0 + 168.7500 167.5000 -64.0 + 171.7500 151.5000 -64.0 + 170.7500 149.5000 -64.0 + 170.5000 144.2500 -64.0 + 167.7500 137.5000 -64.0 + 159.7500 130.5000 -64.0 + 159.7500 127.5000 -64.0 + 157.5000 123.2500 -64.0 + 153.5000 125.2500 -64.0 + 150.5000 125.2500 -64.0 + 147.5000 122.2500 -64.0 + 143.5000 120.2500 -64.0 + 143.5000 125.7500 -64.0 + 147.2500 128.5000 -64.0 + 147.2500 130.5000 -64.0 + 148.5000 130.7500 -64.0 + 149.2500 132.5000 -64.0 + 147.5000 133.2500 -64.0 + 145.7500 129.5000 -64.0 + 142.5000 131.2500 -64.0 + 145.2500 132.5000 -64.0 + 149.2500 138.5000 -64.0 + 150.5000 138.7500 -64.0 + 150.7500 137.5000 -64.0 + 155.5000 132.7500 -64.0 + 156.2500 133.5000 -64.0 + 160.5000 133.7500 -64.0 + 166.2500 140.5000 -64.0 + 168.2500 146.5000 -64.0 + 167.5000 148.2500 -64.0 + 169.2500 150.5000 -64.0 + 168.5000 152.2500 -64.0 + 166.5000 152.2500 -64.0 + 169.2500 156.5000 -64.0 + 169.2500 158.5000 -64.0 + 167.5000 162.2500 -64.0 + 165.5000 163.2500 -64.0 + 163.7500 161.5000 -64.0 + 163.7500 159.5000 -64.0 + 159.7500 158.5000 -64.0 + 159.7500 155.5000 -64.0 + 157.5000 155.2500 -64.0 + 155.5000 152.2500 -64.0 + 155.2500 157.5000 -64.0 + 156.2500 159.5000 -64.0 + 156.2500 169.5000 -64.0 + 153.2500 177.5000 -64.0 + 147.5000 183.2500 -64.0 + 143.2500 189.5000 -64.0 + 135.5000 198.2500 -64.0 + 135.2500 201.5000 -64.0 + 131.5000 204.2500 -64.0 + 126.5000 203.2500 -64.0 + 123.5000 206.2500 -64.0 + 120.5000 206.2500 -64.0 + 116.7500 204.5000 -64.0 + 114.5000 204.2500 -64.0 + 110.5000 206.2500 -64.0 + 107.7500 204.5000 -64.0 + 107.7500 200.5000 -64.0 + 106.5000 197.2500 -64.0 + 104.5000 196.2500 -64.0 + 103.7500 194.5000 -64.0 + 101.2500 194.5000 -64.0 + 96.5000 202.2500 -64.0 + 94.5000 203.2500 -64.0 + 94.2500 204.5000 -64.0 + 91.5000 206.2500 -64.0 + 89.5000 206.2500 -64.0 + 85.5000 210.2500 -64.0 + 81.5000 210.2500 -64.0 + 73.7500 203.5000 -64.0 + 72.7500 201.5000 -64.0 + 67.7500 198.5000 -64.0 + 64.7500 194.5000 -64.0 + 64.7500 190.5000 -64.0 + 61.7500 184.5000 -64.0 + 57.7500 180.5000 -64.0 + 52.7500 170.5000 -64.0 + 49.7500 166.5000 -64.0 + 49.7500 164.5000 -64.0 + 47.7500 158.5000 -64.0 + 47.7500 154.5000 -64.0 + 49.7500 149.5000 -64.0 + 54.5000 144.7500 -64.0 + 64.7500 139.5000 -64.0 + 62.5000 139.2500 -64.0 + 58.5000 141.2500 -64.0 + 56.5000 141.2500 -64.0 + 51.5000 143.2500 -64.0 + 47.5000 148.2500 -64.0 + 45.5000 149.2500 -64.0 + 44.5000 152.2500 -64.0 + 42.5000 153.2500 -64.0 + 40.7500 151.5000 -64.0 + 40.7500 148.5000 -64.0 + 38.7500 147.5000 -64.0 + 40.5000 145.7500 -64.0 + 41.5000 146.7500 -64.0 + 42.7500 136.5000 -64.0 + 44.5000 135.7500 -64.0 + 48.5000 131.7500 -64.0 + 49.5000 132.7500 -64.0 + 52.5000 131.7500 -64.0 + 61.5000 132.7500 -64.0 + 61.7500 130.5000 -64.0 + 65.5000 127.7500 -64.0 + 67.2500 128.5000 -64.0 + 66.5000 129.2500 -64.0 + 68.2500 131.5000 -64.0 + 68.2500 133.5000 -64.0 + 70.2500 137.5000 -64.0 + 71.7500 137.5000 -64.0 + 72.7500 135.5000 -64.0 + 68.7500 132.5000 -64.0 + 67.7500 127.5000 -64.0 + 70.5000 124.7500 -64.0 + 75.7500 126.5000 -64.0 + 74.7500 124.5000 -64.0 + 74.7500 122.5000 -64.0 + 72.7500 120.5000 -64.0 + 72.7500 118.5000 -64.0 + 75.5000 115.7500 -64.0 + 75.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 105.2500 114.5000 -64.0 + 99.5000 118.2500 -64.0 + 97.2500 118.5000 -64.0 + 90.5000 121.2500 -64.0 + 86.5000 125.2500 -64.0 + 84.5000 124.2500 -64.0 + 82.5000 125.2500 -64.0 + 82.5000 130.7500 -64.0 + 86.2500 133.5000 -64.0 + 91.5000 133.7500 -64.0 + 97.5000 124.7500 -64.0 + 101.5000 121.7500 -64.0 + 103.7500 121.5000 -64.0 + 99.5000 121.2500 -64.0 + 96.2500 123.5000 -64.0 + 91.5000 131.2500 -64.0 + 85.5000 131.2500 -64.0 + 83.7500 127.5000 -64.0 + 87.5000 125.7500 -64.0 + 90.5000 122.7500 -64.0 + 100.5000 118.7500 -64.0 + 106.5000 117.7500 -64.0 + 111.2500 119.5000 -64.0 + 110.2500 121.5000 -64.0 + 113.5000 122.7500 -64.0 + 116.2500 125.5000 -64.0 + 120.2500 133.5000 -64.0 + 125.2500 136.5000 -64.0 + 129.5000 136.7500 -64.0 + 129.7500 134.5000 -64.0 + 131.7500 130.5000 -64.0 + 130.7500 128.5000 -64.0 + 128.2500 130.5000 -64.0 + 125.5000 134.2500 -64.0 + 122.7500 128.5000 -64.0 + 123.7500 125.5000 -64.0 + 122.7500 123.5000 -64.0 + 119.5000 123.2500 -64.0 + 107.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 139.2500 133.5000 -64.0 + 137.5000 134.2500 -64.0 + 138.2500 140.5000 -64.0 + 142.5000 141.7500 -64.0 + 139.7500 137.5000 -64.0 + 139.7500 135.5000 -64.0 + 140.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 139.5000 -64.0 + 151.5000 141.2500 -64.0 + 147.5000 141.2500 -64.0 + 153.2500 145.5000 -64.0 + 156.2500 151.5000 -64.0 + 157.7500 150.5000 -64.0 + 156.7500 148.5000 -64.0 + 157.5000 147.7500 -64.0 + 157.7500 145.5000 -64.0 + 154.7500 144.5000 -64.0 + 155.5000 143.7500 -64.0 + 153.7500 141.5000 -64.0 + 154.5000 140.7500 -64.0 +} -64.0 +{ -64.0 + 111.5000 43.7500 -64.0 + 112.2500 44.5000 -64.0 + 111.5000 46.2500 -64.0 + 109.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 110.7500 49.5000 -64.0 + 112.5000 48.7500 -64.0 + 114.2500 51.5000 -64.0 + 114.2500 54.5000 -64.0 + 111.5000 58.2500 -64.0 + 110.7500 57.5000 -64.0 + 110.7500 54.5000 -64.0 + 109.5000 54.2500 -64.0 + 107.7500 52.5000 -64.0 + 110.5000 50.7500 -64.0 +} -64.0 +{ -64.0 + 107.7500 55.5000 -64.0 + 108.5000 54.7500 -64.0 + 110.2500 56.5000 -64.0 + 108.5000 58.2500 -64.0 + 107.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 156.7500 114.5000 -64.0 + 157.5000 113.7500 -64.0 + 158.2500 115.5000 -64.0 + 156.5000 117.2500 -64.0 + 154.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 66.7500 122.5000 -64.0 + 67.5000 121.7500 -64.0 + 68.2500 122.5000 -64.0 + 67.5000 123.2500 -64.0 +} -64.0 +{ -64.0 + 63.7500 123.5000 -64.0 + 64.5000 122.7500 -64.0 + 65.2500 123.5000 -64.0 + 64.5000 125.2500 -64.0 +} -64.0 +{ -64.0 + 117.7500 124.5000 -64.0 + 118.5000 123.7500 -64.0 + 120.5000 123.7500 -64.0 + 122.2500 124.5000 -64.0 + 122.2500 127.5000 -64.0 + 120.5000 129.2500 -64.0 + 119.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 54.7500 130.5000 -64.0 + 55.5000 129.7500 -64.0 + 56.2500 130.5000 -64.0 + 55.5000 131.2500 -64.0 +} -64.0 +v 423 z -134.000000 -64.0 +{ -64.0 + 107.2500 36.5000 -64.0 + 105.5000 37.2500 -64.0 + 103.2500 39.5000 -64.0 + 106.5000 39.7500 -64.0 + 106.7500 38.5000 -64.0 + 108.7500 36.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 36.5000 -64.0 + 114.2500 38.5000 -64.0 + 114.2500 40.5000 -64.0 + 121.5000 43.7500 -64.0 + 122.2500 45.5000 -64.0 + 126.5000 49.7500 -64.0 + 128.5000 50.7500 -64.0 + 128.7500 49.5000 -64.0 + 124.7500 43.5000 -64.0 + 119.7500 40.5000 -64.0 + 117.5000 40.2500 -64.0 + 113.7500 36.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 40.5000 -64.0 + 99.5000 41.2500 -64.0 + 95.5000 41.2500 -64.0 + 92.2500 48.5000 -64.0 + 93.5000 48.7500 -64.0 + 94.5000 46.7500 -64.0 + 102.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 43.5000 -64.0 + 107.5000 44.2500 -64.0 + 108.5000 44.7500 -64.0 + 110.5000 43.7500 -64.0 + 112.5000 44.7500 -64.0 + 112.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 48.5000 -64.0 + 110.2500 49.5000 -64.0 + 108.5000 51.2500 -64.0 + 107.7500 50.5000 -64.0 + 105.5000 50.2500 -64.0 + 100.5000 49.2500 -64.0 + 97.5000 50.2500 -64.0 + 97.2500 53.5000 -64.0 + 98.7500 53.5000 -64.0 + 99.7500 51.5000 -64.0 + 101.5000 50.7500 -64.0 + 103.2500 51.5000 -64.0 + 96.5000 57.2500 -64.0 + 96.2500 63.5000 -64.0 + 99.5000 61.7500 -64.0 + 99.7500 56.5000 -64.0 + 101.5000 55.7500 -64.0 + 103.2500 56.5000 -64.0 + 103.2500 58.5000 -64.0 + 105.2500 60.5000 -64.0 + 104.2500 61.5000 -64.0 + 103.2500 63.5000 -64.0 + 101.5000 64.2500 -64.0 + 101.2500 65.5000 -64.0 + 103.2500 67.5000 -64.0 + 109.5000 79.7500 -64.0 + 109.7500 73.5000 -64.0 + 110.7500 70.5000 -64.0 + 113.5000 68.7500 -64.0 + 114.2500 69.5000 -64.0 + 115.7500 69.5000 -64.0 + 118.5000 65.7500 -64.0 + 118.5000 63.2500 -64.0 + 116.5000 62.2500 -64.0 + 115.7500 60.5000 -64.0 + 116.5000 58.7500 -64.0 + 116.7500 54.5000 -64.0 + 118.5000 52.7500 -64.0 + 122.2500 54.5000 -64.0 + 122.2500 56.5000 -64.0 + 125.2500 59.5000 -64.0 + 125.2500 61.5000 -64.0 + 126.5000 60.7500 -64.0 + 126.7500 58.5000 -64.0 + 125.5000 57.2500 -64.0 + 123.7500 52.5000 -64.0 + 119.5000 49.2500 -64.0 + 114.5000 51.2500 -64.0 +} -64.0 +{ -64.0 + 79.2500 57.5000 -64.0 + 78.5000 58.2500 -64.0 + 78.2500 61.5000 -64.0 + 79.5000 61.7500 -64.0 + 81.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 57.5000 -64.0 + 134.2500 58.5000 -64.0 + 138.2500 62.5000 -64.0 + 138.5000 68.7500 -64.0 + 138.7500 60.5000 -64.0 + 135.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 62.5000 -64.0 + 121.5000 63.2500 -64.0 + 121.2500 66.5000 -64.0 + 124.2500 69.5000 -64.0 + 125.5000 68.7500 -64.0 + 125.7500 65.5000 -64.0 + 124.5000 65.2500 -64.0 + 123.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 70.5000 -64.0 + 125.2500 79.5000 -64.0 + 127.2500 81.5000 -64.0 + 127.2500 83.5000 -64.0 + 128.7500 80.5000 -64.0 + 125.7500 74.5000 -64.0 +} -64.0 +{ -64.0 + 61.2500 76.5000 -64.0 + 58.5000 86.2500 -64.0 + 59.2500 87.5000 -64.0 + 60.5000 86.7500 -64.0 + 63.5000 81.7500 -64.0 + 63.7500 78.5000 -64.0 + 62.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 76.5000 -64.0 + 87.5000 80.2500 -64.0 + 84.2500 80.5000 -64.0 + 85.2500 82.5000 -64.0 + 91.5000 78.7500 -64.0 + 91.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 81.5000 -64.0 + 88.5000 83.2500 -64.0 + 92.5000 86.7500 -64.0 + 92.7500 83.5000 -64.0 +} -64.0 +{ -64.0 + 133.2500 81.5000 -64.0 + 131.5000 82.2500 -64.0 + 131.2500 85.5000 -64.0 + 132.5000 85.7500 -64.0 + 134.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 81.5000 -64.0 + 151.2500 82.5000 -64.0 + 150.2500 84.5000 -64.0 + 151.2500 86.5000 -64.0 + 151.2500 89.5000 -64.0 + 154.2500 93.5000 -64.0 + 154.2500 95.5000 -64.0 + 155.5000 94.7500 -64.0 + 155.7500 92.5000 -64.0 + 154.7500 90.5000 -64.0 + 154.7500 87.5000 -64.0 + 153.7500 85.5000 -64.0 + 153.7500 83.5000 -64.0 + 152.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 84.5000 -64.0 + 124.2500 85.5000 -64.0 + 123.2500 88.5000 -64.0 + 124.5000 88.7500 -64.0 + 124.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 52.2500 104.5000 -64.0 + 50.5000 105.2500 -64.0 + 47.2500 110.5000 -64.0 + 48.2500 113.5000 -64.0 + 50.5000 115.7500 -64.0 + 55.5000 116.7500 -64.0 + 57.5000 115.7500 -64.0 + 57.7500 113.5000 -64.0 + 52.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 155.2500 104.5000 -64.0 + 155.2500 108.5000 -64.0 + 153.2500 114.5000 -64.0 + 154.2500 117.5000 -64.0 + 158.7500 117.5000 -64.0 + 160.7500 113.5000 -64.0 + 159.7500 111.5000 -64.0 + 159.7500 108.5000 -64.0 + 156.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 111.5000 -64.0 + 72.2500 112.5000 -64.0 + 73.5000 112.7500 -64.0 + 73.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 73.2500 115.5000 -64.0 + 68.5000 118.2500 -64.0 + 66.5000 118.2500 -64.0 + 60.5000 122.2500 -64.0 + 56.5000 122.2500 -64.0 + 52.5000 120.2500 -64.0 + 52.2500 123.5000 -64.0 + 53.2500 125.5000 -64.0 + 52.2500 127.5000 -64.0 + 48.5000 130.2500 -64.0 + 45.5000 130.2500 -64.0 + 41.5000 134.2500 -64.0 + 39.2500 140.5000 -64.0 + 37.2500 150.5000 -64.0 + 38.2500 152.5000 -64.0 + 38.2500 158.5000 -64.0 + 39.2500 160.5000 -64.0 + 39.2500 163.5000 -64.0 + 43.2500 171.5000 -64.0 + 43.2500 173.5000 -64.0 + 50.2500 187.5000 -64.0 + 69.2500 207.5000 -64.0 + 70.2500 209.5000 -64.0 + 71.5000 209.7500 -64.0 + 77.5000 214.7500 -64.0 + 83.2500 217.5000 -64.0 + 107.5000 218.7500 -64.0 + 109.5000 217.7500 -64.0 + 120.7500 217.5000 -64.0 + 127.5000 214.7500 -64.0 + 134.5000 209.7500 -64.0 + 148.5000 195.7500 -64.0 + 150.5000 194.7500 -64.0 + 158.7500 184.5000 -64.0 + 164.7500 173.5000 -64.0 + 168.7500 163.5000 -64.0 + 170.5000 156.7500 -64.0 + 170.7500 149.5000 -64.0 + 169.7500 147.5000 -64.0 + 169.7500 144.5000 -64.0 + 167.7500 137.5000 -64.0 + 162.7500 132.5000 -64.0 + 159.5000 127.2500 -64.0 + 157.5000 126.2500 -64.0 + 156.7500 124.5000 -64.0 + 155.5000 124.2500 -64.0 + 152.5000 125.2500 -64.0 + 149.5000 124.2500 -64.0 + 145.5000 120.2500 -64.0 + 143.5000 119.2500 -64.0 + 143.2500 120.5000 -64.0 + 145.2500 126.5000 -64.0 + 147.5000 126.7500 -64.0 + 150.2500 131.5000 -64.0 + 148.5000 134.2500 -64.0 + 145.7500 130.5000 -64.0 + 143.5000 130.2500 -64.0 + 139.5000 132.2500 -64.0 + 135.5000 132.2500 -64.0 + 131.7500 128.5000 -64.0 + 129.5000 131.2500 -64.0 + 127.5000 131.2500 -64.0 + 125.5000 133.2500 -64.0 + 122.7500 130.5000 -64.0 + 123.5000 124.2500 -64.0 + 108.7500 117.5000 -64.0 + 104.5000 117.2500 -64.0 + 90.2500 122.5000 -64.0 + 89.2500 124.5000 -64.0 + 90.2500 126.5000 -64.0 + 89.5000 128.2500 -64.0 + 87.5000 129.2500 -64.0 + 88.2500 131.5000 -64.0 + 86.5000 132.2500 -64.0 + 84.7500 131.5000 -64.0 + 83.7500 129.5000 -64.0 + 84.5000 127.7500 -64.0 + 82.7500 125.5000 -64.0 + 81.5000 126.2500 -64.0 + 81.2500 130.5000 -64.0 + 82.2500 133.5000 -64.0 + 84.2500 134.5000 -64.0 + 85.5000 133.7500 -64.0 + 91.5000 133.7500 -64.0 + 95.7500 126.5000 -64.0 + 101.5000 121.7500 -64.0 + 103.5000 121.7500 -64.0 + 108.5000 119.7500 -64.0 + 109.2500 121.5000 -64.0 + 114.5000 123.7500 -64.0 + 117.2500 126.5000 -64.0 + 119.2500 130.5000 -64.0 + 123.2500 135.5000 -64.0 + 128.2500 138.5000 -64.0 + 130.5000 138.7500 -64.0 + 130.7500 136.5000 -64.0 + 127.7500 135.5000 -64.0 + 129.5000 133.7500 -64.0 + 131.5000 133.7500 -64.0 + 133.2500 135.5000 -64.0 + 136.5000 135.7500 -64.0 + 141.2500 140.5000 -64.0 + 147.5000 140.7500 -64.0 + 145.7500 139.5000 -64.0 + 147.5000 137.7500 -64.0 + 152.7500 138.5000 -64.0 + 151.7500 136.5000 -64.0 + 151.7500 134.5000 -64.0 + 153.5000 132.7500 -64.0 + 158.5000 132.7500 -64.0 + 161.5000 133.7500 -64.0 + 165.2500 136.5000 -64.0 + 165.2500 139.5000 -64.0 + 168.2500 143.5000 -64.0 + 166.5000 146.2500 -64.0 + 168.2500 148.5000 -64.0 + 167.5000 152.2500 -64.0 + 164.2500 152.5000 -64.0 + 165.2500 155.5000 -64.0 + 166.5000 154.7500 -64.0 + 168.2500 155.5000 -64.0 + 168.2500 158.5000 -64.0 + 167.2500 161.5000 -64.0 + 165.5000 162.2500 -64.0 + 163.7500 161.5000 -64.0 + 163.7500 159.5000 -64.0 + 162.5000 160.2500 -64.0 + 160.7500 159.5000 -64.0 + 159.7500 157.5000 -64.0 + 157.5000 159.2500 -64.0 + 155.5000 158.2500 -64.0 + 155.2500 171.5000 -64.0 + 151.2500 179.5000 -64.0 + 139.2500 190.5000 -64.0 + 138.2500 192.5000 -64.0 + 131.5000 197.2500 -64.0 + 122.5000 198.2500 -64.0 + 114.5000 202.2500 -64.0 + 112.5000 202.2500 -64.0 + 110.7500 200.5000 -64.0 + 110.7500 196.5000 -64.0 + 107.7500 193.5000 -64.0 + 106.7500 191.5000 -64.0 + 104.5000 190.2500 -64.0 + 100.5000 192.2500 -64.0 + 100.2500 193.5000 -64.0 + 94.5000 197.2500 -64.0 + 92.2500 200.5000 -64.0 + 87.5000 202.2500 -64.0 + 87.2500 203.5000 -64.0 + 84.5000 206.2500 -64.0 + 80.5000 206.2500 -64.0 + 76.7500 203.5000 -64.0 + 72.5000 198.2500 -64.0 + 70.5000 197.2500 -64.0 + 67.7500 193.5000 -64.0 + 67.7500 191.5000 -64.0 + 61.7500 181.5000 -64.0 + 56.7500 176.5000 -64.0 + 51.7500 167.5000 -64.0 + 51.7500 159.5000 -64.0 + 48.7500 153.5000 -64.0 + 50.7500 147.5000 -64.0 + 55.5000 142.7500 -64.0 + 58.5000 142.7500 -64.0 + 66.5000 138.7500 -64.0 + 63.5000 137.2500 -64.0 + 61.5000 138.2500 -64.0 + 58.5000 138.2500 -64.0 + 54.5000 140.2500 -64.0 + 48.2500 147.5000 -64.0 + 47.2500 152.5000 -64.0 + 45.5000 154.2500 -64.0 + 44.7500 152.5000 -64.0 + 42.5000 153.2500 -64.0 + 40.7500 151.5000 -64.0 + 41.7500 146.5000 -64.0 + 40.7500 144.5000 -64.0 + 40.7500 141.5000 -64.0 + 42.7500 139.5000 -64.0 + 44.7500 135.5000 -64.0 + 46.5000 134.7500 -64.0 + 49.5000 131.7500 -64.0 + 55.5000 131.7500 -64.0 + 57.2500 133.5000 -64.0 + 59.5000 131.7500 -64.0 + 61.5000 131.7500 -64.0 + 61.7500 129.5000 -64.0 + 64.5000 126.7500 -64.0 + 66.2500 127.5000 -64.0 + 67.5000 126.7500 -64.0 + 66.7500 124.5000 -64.0 + 67.7500 121.5000 -64.0 + 71.5000 118.7500 -64.0 + 74.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 71.2500 120.5000 -64.0 + 72.2500 122.5000 -64.0 + 74.5000 122.7500 -64.0 + 72.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 130.5000 -64.0 + 69.2500 131.5000 -64.0 + 70.5000 138.7500 -64.0 + 72.5000 135.7500 -64.0 + 72.7500 133.5000 -64.0 + 69.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 148.2500 141.5000 -64.0 + 151.2500 144.5000 -64.0 + 153.2500 148.5000 -64.0 + 154.7500 149.5000 -64.0 + 157.5000 145.7500 -64.0 + 157.5000 144.2500 -64.0 + 155.5000 143.2500 -64.0 + 156.2500 144.5000 -64.0 + 154.5000 145.2500 -64.0 + 150.7500 141.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 152.5000 -64.0 + 153.2500 153.5000 -64.0 + 154.7500 156.5000 -64.0 + 155.7500 154.5000 -64.0 +} -64.0 +{ -64.0 + 151.7500 86.5000 -64.0 + 152.5000 85.7500 -64.0 + 154.2500 87.5000 -64.0 + 153.5000 89.2500 -64.0 +} -64.0 +{ -64.0 + 49.7500 111.5000 -64.0 + 51.5000 110.7500 -64.0 + 54.5000 111.7500 -64.0 + 55.2500 113.5000 -64.0 + 54.5000 115.2500 -64.0 + 52.5000 115.2500 -64.0 +} -64.0 +{ -64.0 + 156.7500 112.5000 -64.0 + 157.5000 111.7500 -64.0 + 158.2500 113.5000 -64.0 + 156.5000 115.2500 -64.0 + 155.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 96.7500 121.5000 -64.0 + 98.5000 120.7500 -64.0 + 100.2500 121.5000 -64.0 + 99.5000 122.2500 -64.0 + 97.5000 122.2500 -64.0 + 92.5000 128.2500 -64.0 + 90.7500 127.5000 -64.0 + 90.7500 123.5000 -64.0 + 92.5000 122.7500 -64.0 +} -64.0 +{ -64.0 + 117.7500 124.5000 -64.0 + 118.5000 123.7500 -64.0 + 121.5000 123.7500 -64.0 + 122.2500 125.5000 -64.0 + 121.5000 127.2500 -64.0 + 119.5000 127.2500 -64.0 +} -64.0 +{ -64.0 + 141.7500 132.5000 -64.0 + 143.5000 131.7500 -64.0 + 145.2500 134.5000 -64.0 + 144.5000 138.2500 -64.0 + 142.5000 138.2500 -64.0 + 138.7500 135.5000 -64.0 + 139.5000 133.7500 -64.0 +} -64.0 +v 451 z -136.000000 -64.0 +{ -64.0 + 107.2500 34.5000 -64.0 + 100.5000 39.2500 -64.0 + 95.5000 39.2500 -64.0 + 92.2500 46.5000 -64.0 + 92.7500 47.5000 -64.0 + 95.5000 43.7500 -64.0 + 98.7500 43.5000 -64.0 + 99.7500 41.5000 -64.0 + 103.5000 38.7500 -64.0 + 105.5000 38.7500 -64.0 + 109.5000 35.7500 -64.0 + 108.7500 34.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 34.5000 -64.0 + 112.2500 35.5000 -64.0 + 113.2500 37.5000 -64.0 + 120.5000 41.7500 -64.0 + 122.2500 45.5000 -64.0 + 128.2500 48.5000 -64.0 + 128.7500 47.5000 -64.0 + 125.7500 43.5000 -64.0 + 126.7500 42.5000 -64.0 + 125.7500 39.5000 -64.0 + 117.5000 38.2500 -64.0 + 114.7500 34.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 42.5000 -64.0 + 108.5000 46.2500 -64.0 + 106.5000 46.2500 -64.0 + 104.5000 45.2500 -64.0 + 100.2500 46.5000 -64.0 + 99.2500 48.5000 -64.0 + 100.5000 47.7500 -64.0 + 101.2500 48.5000 -64.0 + 104.5000 48.7500 -64.0 + 110.2500 54.5000 -64.0 + 112.5000 54.7500 -64.0 + 117.5000 48.7500 -64.0 + 122.2500 50.5000 -64.0 + 125.2500 56.5000 -64.0 + 125.2500 60.5000 -64.0 + 127.5000 68.7500 -64.0 + 127.7500 66.5000 -64.0 + 126.7500 64.5000 -64.0 + 126.7500 62.5000 -64.0 + 128.7500 60.5000 -64.0 + 124.7500 52.5000 -64.0 + 124.7500 50.5000 -64.0 + 121.7500 47.5000 -64.0 + 117.5000 47.2500 -64.0 + 115.5000 46.2500 -64.0 + 113.5000 47.2500 -64.0 + 111.7500 45.5000 -64.0 + 112.7500 42.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 50.5000 -64.0 + 95.2500 54.5000 -64.0 + 95.7500 55.5000 -64.0 + 97.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 56.5000 -64.0 + 80.5000 60.2500 -64.0 + 81.2500 61.5000 -64.0 + 81.2500 64.5000 -64.0 + 82.5000 64.7500 -64.0 + 82.7500 63.5000 -64.0 + 81.7500 61.5000 -64.0 + 83.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 56.5000 -64.0 + 136.2500 62.5000 -64.0 + 135.2500 65.5000 -64.0 + 137.2500 69.5000 -64.0 + 137.2500 74.5000 -64.0 + 135.2500 76.5000 -64.0 + 137.5000 76.7500 -64.0 + 138.5000 73.7500 -64.0 + 138.7500 69.5000 -64.0 + 137.7500 67.5000 -64.0 + 137.7500 61.5000 -64.0 + 136.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 69.5000 -64.0 + 91.5000 70.2500 -64.0 + 92.2500 71.5000 -64.0 + 91.2500 73.5000 -64.0 + 86.5000 79.2500 -64.0 + 84.5000 79.2500 -64.0 + 84.2500 82.5000 -64.0 + 85.5000 82.7500 -64.0 + 85.7500 81.5000 -64.0 + 88.5000 78.7500 -64.0 + 89.2500 79.5000 -64.0 + 89.2500 81.5000 -64.0 + 92.7500 74.5000 -64.0 + 93.5000 72.7500 -64.0 + 93.7500 69.5000 -64.0 +} -64.0 +{ -64.0 + 103.2500 71.5000 -64.0 + 102.2500 73.5000 -64.0 + 104.5000 74.7500 -64.0 + 104.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 76.5000 -64.0 + 127.2500 79.5000 -64.0 + 129.2500 80.5000 -64.0 + 125.5000 82.2500 -64.0 + 123.7500 78.5000 -64.0 + 122.2500 78.5000 -64.0 + 124.5000 83.7500 -64.0 + 129.5000 84.7500 -64.0 + 133.5000 86.7500 -64.0 + 132.7500 84.5000 -64.0 + 133.7500 81.5000 -64.0 + 132.5000 81.2500 -64.0 + 131.7500 79.5000 -64.0 + 128.5000 78.2500 -64.0 +} -64.0 +{ -64.0 + 62.2500 77.5000 -64.0 + 60.5000 80.2500 -64.0 + 58.2500 89.5000 -64.0 + 59.5000 89.7500 -64.0 + 60.7500 88.5000 -64.0 + 64.5000 80.7500 -64.0 + 63.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 77.5000 -64.0 + 108.2500 80.5000 -64.0 + 109.5000 80.7500 -64.0 + 111.5000 78.7500 -64.0 + 109.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 82.5000 -64.0 + 90.2500 85.5000 -64.0 + 91.5000 85.7500 -64.0 + 91.7500 83.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 82.5000 -64.0 + 150.5000 84.2500 -64.0 + 150.2500 88.5000 -64.0 + 151.2500 90.5000 -64.0 + 151.2500 93.5000 -64.0 + 153.2500 97.5000 -64.0 + 153.2500 99.5000 -64.0 + 154.2500 101.5000 -64.0 + 154.2500 114.5000 -64.0 + 155.2500 116.5000 -64.0 + 157.5000 116.7500 -64.0 + 159.5000 114.7500 -64.0 + 159.7500 111.5000 -64.0 + 158.7500 109.5000 -64.0 + 158.7500 107.5000 -64.0 + 155.7500 101.5000 -64.0 + 155.7500 95.5000 -64.0 + 154.7500 93.5000 -64.0 + 154.7500 91.5000 -64.0 + 151.7500 90.5000 -64.0 + 152.5000 86.7500 -64.0 + 153.5000 87.7500 -64.0 + 153.7500 84.5000 -64.0 + 152.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 54.2500 102.5000 -64.0 + 52.5000 103.2500 -64.0 + 49.5000 108.2500 -64.0 + 49.2500 113.5000 -64.0 + 52.2500 115.5000 -64.0 + 54.5000 115.7500 -64.0 + 56.5000 114.7500 -64.0 + 56.7500 110.5000 -64.0 + 53.7500 107.5000 -64.0 + 55.7500 102.5000 -64.0 +} -64.0 +{ -64.0 + 67.2500 117.5000 -64.0 + 66.5000 118.2500 -64.0 + 64.5000 118.2500 -64.0 + 62.5000 120.2500 -64.0 + 58.5000 123.2500 -64.0 + 54.7500 121.5000 -64.0 + 53.2500 121.5000 -64.0 + 50.2500 127.5000 -64.0 + 43.5000 133.2500 -64.0 + 40.2500 138.5000 -64.0 + 39.2500 143.5000 -64.0 + 38.5000 145.2500 -64.0 + 38.2500 153.5000 -64.0 + 39.2500 155.5000 -64.0 + 39.2500 158.5000 -64.0 + 40.2500 160.5000 -64.0 + 40.2500 163.5000 -64.0 + 47.2500 177.5000 -64.0 + 47.2500 179.5000 -64.0 + 51.2500 185.5000 -64.0 + 52.2500 187.5000 -64.0 + 58.2500 193.5000 -64.0 + 64.2500 200.5000 -64.0 + 65.2500 202.5000 -64.0 + 75.2500 211.5000 -64.0 + 82.2500 215.5000 -64.0 + 86.5000 215.7500 -64.0 + 88.2500 216.5000 -64.0 + 89.5000 215.7500 -64.0 + 95.5000 215.7500 -64.0 + 97.2500 216.5000 -64.0 + 103.5000 216.7500 -64.0 + 105.5000 215.7500 -64.0 + 120.5000 215.7500 -64.0 + 130.5000 210.7500 -64.0 + 138.5000 203.7500 -64.0 + 151.7500 191.5000 -64.0 + 154.5000 187.7500 -64.0 + 157.7500 183.5000 -64.0 + 167.7500 163.5000 -64.0 + 168.5000 161.7500 -64.0 + 168.7500 158.5000 -64.0 + 169.5000 156.7500 -64.0 + 169.7500 144.5000 -64.0 + 168.7500 142.5000 -64.0 + 168.7500 140.5000 -64.0 + 166.7500 136.5000 -64.0 + 165.5000 134.2500 -64.0 + 161.7500 131.5000 -64.0 + 160.7500 129.5000 -64.0 + 155.7500 126.5000 -64.0 + 152.5000 126.2500 -64.0 + 148.7500 122.5000 -64.0 + 144.5000 119.2500 -64.0 + 144.2500 124.5000 -64.0 + 145.5000 125.7500 -64.0 + 147.5000 124.7500 -64.0 + 149.5000 124.7500 -64.0 + 152.2500 127.5000 -64.0 + 150.5000 131.2500 -64.0 + 150.2500 133.5000 -64.0 + 148.5000 135.2500 -64.0 + 147.7500 133.5000 -64.0 + 146.5000 133.2500 -64.0 + 146.2500 136.5000 -64.0 + 144.5000 138.2500 -64.0 + 134.5000 133.2500 -64.0 + 132.7500 132.5000 -64.0 + 133.5000 131.7500 -64.0 + 135.5000 130.7500 -64.0 + 135.7500 129.5000 -64.0 + 134.5000 129.2500 -64.0 + 130.5000 131.2500 -64.0 + 132.2500 132.5000 -64.0 + 131.5000 133.2500 -64.0 + 128.5000 133.2500 -64.0 + 126.7500 132.5000 -64.0 + 128.5000 130.2500 -64.0 + 124.7500 127.5000 -64.0 + 125.5000 125.7500 -64.0 + 124.5000 124.2500 -64.0 + 118.5000 121.2500 -64.0 + 113.5000 120.2500 -64.0 + 111.7500 119.5000 -64.0 + 100.5000 119.2500 -64.0 + 96.5000 121.2500 -64.0 + 93.5000 121.2500 -64.0 + 91.5000 122.2500 -64.0 + 89.5000 122.2500 -64.0 + 89.2500 126.5000 -64.0 + 91.2500 128.5000 -64.0 + 90.5000 130.2500 -64.0 + 88.5000 130.2500 -64.0 + 86.7500 128.5000 -64.0 + 84.5000 128.2500 -64.0 + 82.7500 126.5000 -64.0 + 80.5000 126.2500 -64.0 + 79.5000 128.2500 -64.0 + 79.2500 130.5000 -64.0 + 82.2500 134.5000 -64.0 + 87.5000 134.7500 -64.0 + 90.5000 133.7500 -64.0 + 93.7500 129.5000 -64.0 + 94.7500 127.5000 -64.0 + 98.5000 124.7500 -64.0 + 103.5000 121.7500 -64.0 + 109.5000 121.7500 -64.0 + 112.5000 122.7500 -64.0 + 120.5000 129.7500 -64.0 + 122.5000 128.7500 -64.0 + 124.5000 128.7500 -64.0 + 126.2500 131.5000 -64.0 + 125.5000 132.2500 -64.0 + 123.5000 133.2500 -64.0 + 123.2500 136.5000 -64.0 + 127.5000 139.7500 -64.0 + 132.5000 140.7500 -64.0 + 132.7500 139.5000 -64.0 + 135.5000 136.7500 -64.0 + 137.5000 136.7500 -64.0 + 147.5000 140.7500 -64.0 + 148.5000 138.7500 -64.0 + 150.5000 137.7500 -64.0 + 152.2500 138.5000 -64.0 + 153.2500 140.5000 -64.0 + 155.5000 140.7500 -64.0 + 155.7500 139.5000 -64.0 + 154.5000 139.2500 -64.0 + 151.7500 136.5000 -64.0 + 151.7500 134.5000 -64.0 + 154.5000 131.7500 -64.0 + 157.5000 131.7500 -64.0 + 163.5000 134.7500 -64.0 + 166.2500 138.5000 -64.0 + 166.2500 140.5000 -64.0 + 167.2500 142.5000 -64.0 + 166.2500 145.5000 -64.0 + 168.2500 147.5000 -64.0 + 168.2500 150.5000 -64.0 + 167.5000 152.2500 -64.0 + 164.5000 152.2500 -64.0 + 162.5000 153.2500 -64.0 + 160.5000 152.2500 -64.0 + 162.2500 155.5000 -64.0 + 157.5000 160.2500 -64.0 + 155.5000 159.2500 -64.0 + 153.7500 156.5000 -64.0 + 153.7500 154.5000 -64.0 + 152.2500 154.5000 -64.0 + 154.2500 158.5000 -64.0 + 154.2500 172.5000 -64.0 + 150.2500 178.5000 -64.0 + 149.2500 180.5000 -64.0 + 142.5000 186.2500 -64.0 + 140.5000 187.2500 -64.0 + 132.5000 192.2500 -64.0 + 128.5000 195.2500 -64.0 + 126.5000 195.2500 -64.0 + 124.5000 196.2500 -64.0 + 119.5000 196.2500 -64.0 + 114.5000 195.2500 -64.0 + 111.5000 194.2500 -64.0 + 107.7500 190.5000 -64.0 + 106.7500 188.5000 -64.0 + 104.5000 186.2500 -64.0 + 100.5000 191.2500 -64.0 + 96.5000 194.2500 -64.0 + 93.5000 194.2500 -64.0 + 89.5000 197.2500 -64.0 + 86.5000 197.2500 -64.0 + 80.5000 199.2500 -64.0 + 75.5000 197.2500 -64.0 + 69.7500 189.5000 -64.0 + 67.7500 185.5000 -64.0 + 56.7500 174.5000 -64.0 + 52.7500 167.5000 -64.0 + 52.7500 159.5000 -64.0 + 53.7500 156.5000 -64.0 + 50.7500 153.5000 -64.0 + 50.7500 148.5000 -64.0 + 51.7500 145.5000 -64.0 + 57.5000 139.7500 -64.0 + 61.5000 137.7500 -64.0 + 63.5000 137.7500 -64.0 + 64.7500 136.5000 -64.0 + 59.5000 136.2500 -64.0 + 56.5000 137.2500 -64.0 + 55.5000 139.2500 -64.0 + 53.5000 140.2500 -64.0 + 53.2500 141.5000 -64.0 + 49.5000 145.2500 -64.0 + 49.2500 147.5000 -64.0 + 47.5000 148.2500 -64.0 + 48.2500 149.5000 -64.0 + 48.2500 152.5000 -64.0 + 47.5000 154.2500 -64.0 + 45.5000 155.2500 -64.0 + 43.7500 151.5000 -64.0 + 41.7500 150.5000 -64.0 + 41.7500 139.5000 -64.0 + 43.7500 138.5000 -64.0 + 45.7500 134.5000 -64.0 + 46.5000 132.7500 -64.0 + 50.5000 130.7500 -64.0 + 53.5000 130.7500 -64.0 + 56.5000 133.7500 -64.0 + 58.5000 132.7500 -64.0 + 60.5000 132.7500 -64.0 + 62.5000 131.7500 -64.0 + 62.7500 129.5000 -64.0 + 64.5000 127.7500 -64.0 + 66.7500 127.5000 -64.0 + 65.7500 125.5000 -64.0 + 69.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 69.2500 129.5000 -64.0 + 69.2500 130.5000 -64.0 + 71.2500 132.5000 -64.0 + 70.2500 134.5000 -64.0 + 68.5000 135.2500 -64.0 + 68.2500 136.5000 -64.0 + 70.5000 136.7500 -64.0 + 74.5000 132.7500 -64.0 + 74.5000 131.2500 -64.0 + 72.5000 130.2500 -64.0 + 70.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 130.5000 -64.0 + 141.2500 131.5000 -64.0 + 145.5000 132.7500 -64.0 + 143.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 148.2500 141.5000 -64.0 + 148.2500 142.5000 -64.0 + 151.2500 146.5000 -64.0 + 150.5000 148.2500 -64.0 + 150.2500 150.5000 -64.0 + 153.5000 147.7500 -64.0 + 152.7500 145.5000 -64.0 + 151.5000 145.2500 -64.0 + 150.7500 143.5000 -64.0 +} -64.0 +{ -64.0 + 131.5000 81.7500 -64.0 + 132.2500 82.5000 -64.0 + 131.5000 84.2500 -64.0 + 129.7500 83.5000 -64.0 +} -64.0 +{ -64.0 + 155.7500 109.5000 -64.0 + 156.5000 108.7500 -64.0 + 157.2500 109.5000 -64.0 + 157.2500 112.5000 -64.0 + 156.5000 114.2500 -64.0 + 155.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 51.7500 110.5000 -64.0 + 52.5000 109.7500 -64.0 + 55.2500 112.5000 -64.0 + 53.5000 114.2500 -64.0 + 51.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 94.7500 122.5000 -64.0 + 95.5000 121.7500 -64.0 + 97.5000 121.7500 -64.0 + 99.2500 122.5000 -64.0 + 98.5000 123.2500 -64.0 + 96.5000 123.2500 -64.0 + 94.5000 126.2500 -64.0 + 92.5000 127.2500 -64.0 + 90.7500 126.5000 -64.0 + 90.7500 124.5000 -64.0 + 91.5000 122.7500 -64.0 +} -64.0 +{ -64.0 + 113.7500 122.5000 -64.0 + 114.5000 121.7500 -64.0 + 119.5000 122.7500 -64.0 + 122.5000 123.7500 -64.0 + 123.2500 125.5000 -64.0 + 122.5000 127.2500 -64.0 + 120.5000 127.2500 -64.0 + 118.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 82.7500 129.5000 -64.0 + 84.5000 128.7500 -64.0 + 86.2500 129.5000 -64.0 + 87.2500 131.5000 -64.0 + 85.5000 133.2500 -64.0 +} -64.0 +{ -64.0 + 126.7500 135.5000 -64.0 + 128.5000 134.7500 -64.0 + 130.2500 135.5000 -64.0 + 129.5000 137.2500 -64.0 + 127.5000 137.2500 -64.0 +} -64.0 +{ -64.0 + 165.5000 158.7500 -64.0 + 166.2500 159.5000 -64.0 + 165.5000 161.2500 -64.0 + 163.7500 160.5000 -64.0 +} -64.0 +{ -64.0 + 105.7500 200.5000 -64.0 + 106.5000 199.7500 -64.0 + 107.2500 201.5000 -64.0 + 105.5000 205.2500 -64.0 + 103.7500 202.5000 -64.0 + 105.5000 201.7500 -64.0 +} -64.0 +v 464 z -138.000000 -64.0 +{ -64.0 + 107.2500 32.5000 -64.0 + 104.5000 35.2500 -64.0 + 101.5000 35.2500 -64.0 + 99.5000 37.2500 -64.0 + 95.5000 37.2500 -64.0 + 92.5000 42.2500 -64.0 + 91.2500 46.5000 -64.0 + 94.5000 46.7500 -64.0 + 95.7500 45.5000 -64.0 + 94.7500 42.5000 -64.0 + 96.5000 41.7500 -64.0 + 99.5000 42.7500 -64.0 + 101.5000 38.7500 -64.0 + 103.5000 38.7500 -64.0 + 105.5000 36.7500 -64.0 + 107.5000 37.7500 -64.0 + 109.7500 34.5000 -64.0 + 108.7500 32.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 32.5000 -64.0 + 112.5000 33.2500 -64.0 + 112.2500 35.5000 -64.0 + 114.2500 37.5000 -64.0 + 116.5000 37.7500 -64.0 + 117.5000 39.7500 -64.0 + 121.2500 41.5000 -64.0 + 122.2500 43.5000 -64.0 + 119.5000 45.2500 -64.0 + 116.7500 43.5000 -64.0 + 114.5000 44.2500 -64.0 + 112.7500 40.5000 -64.0 + 109.5000 40.2500 -64.0 + 108.5000 43.2500 -64.0 + 106.5000 43.2500 -64.0 + 104.5000 44.2500 -64.0 + 103.5000 43.2500 -64.0 + 100.5000 44.2500 -64.0 + 96.5000 49.2500 -64.0 + 94.2500 55.5000 -64.0 + 94.7500 56.5000 -64.0 + 98.7500 47.5000 -64.0 + 101.5000 45.7500 -64.0 + 106.5000 46.7500 -64.0 + 109.5000 49.7500 -64.0 + 111.5000 50.7500 -64.0 + 117.5000 45.7500 -64.0 + 123.2500 49.5000 -64.0 + 126.2500 54.5000 -64.0 + 126.2500 58.5000 -64.0 + 125.2500 60.5000 -64.0 + 126.2500 62.5000 -64.0 + 126.2500 65.5000 -64.0 + 128.2500 69.5000 -64.0 + 129.5000 69.7500 -64.0 + 134.5000 67.7500 -64.0 + 136.2500 69.5000 -64.0 + 136.2500 71.5000 -64.0 + 134.5000 73.2500 -64.0 + 129.5000 73.2500 -64.0 + 129.2500 76.5000 -64.0 + 133.5000 77.7500 -64.0 + 136.5000 76.7500 -64.0 + 138.5000 73.7500 -64.0 + 138.7500 66.5000 -64.0 + 137.7500 64.5000 -64.0 + 137.7500 61.5000 -64.0 + 135.5000 58.2500 -64.0 + 134.5000 63.2500 -64.0 + 128.5000 66.2500 -64.0 + 126.7500 65.5000 -64.0 + 127.5000 61.7500 -64.0 + 129.7500 61.5000 -64.0 + 130.7500 59.5000 -64.0 + 127.7500 57.5000 -64.0 + 127.7500 55.5000 -64.0 + 125.7500 51.5000 -64.0 + 125.7500 49.5000 -64.0 + 122.7500 45.5000 -64.0 + 123.5000 44.7500 -64.0 + 128.5000 46.7500 -64.0 + 128.7500 43.5000 -64.0 + 126.7500 37.5000 -64.0 + 124.5000 37.2500 -64.0 + 120.5000 35.2500 -64.0 + 118.5000 36.2500 -64.0 + 116.7500 33.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 49.5000 -64.0 + 89.5000 50.2500 -64.0 + 90.2500 51.5000 -64.0 + 92.5000 51.7500 -64.0 +} -64.0 +{ -64.0 + 130.2500 49.5000 -64.0 + 129.5000 50.2500 -64.0 + 129.2500 52.5000 -64.0 + 130.5000 52.7500 -64.0 + 134.5000 54.7500 -64.0 + 134.7500 52.5000 -64.0 + 132.7500 51.5000 -64.0 + 132.7500 49.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 57.5000 -64.0 + 82.5000 60.2500 -64.0 + 82.2500 65.5000 -64.0 + 83.5000 64.7500 -64.0 + 86.2500 66.5000 -64.0 + 88.5000 66.7500 -64.0 + 84.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 60.5000 -64.0 + 94.2500 62.5000 -64.0 + 94.7500 61.5000 -64.0 +} -64.0 +{ -64.0 + 81.2500 67.5000 -64.0 + 81.2500 69.5000 -64.0 + 82.5000 72.7500 -64.0 + 82.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 72.5000 -64.0 + 84.2500 73.5000 -64.0 + 88.5000 73.7500 -64.0 + 86.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 76.5000 -64.0 + 93.5000 77.2500 -64.0 + 93.2500 79.5000 -64.0 + 91.5000 81.2500 -64.0 + 88.5000 81.2500 -64.0 + 89.5000 82.7500 -64.0 + 91.5000 81.7500 -64.0 + 93.5000 81.7500 -64.0 + 96.5000 77.7500 -64.0 + 95.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 62.2500 78.5000 -64.0 + 60.5000 82.2500 -64.0 + 60.2500 84.5000 -64.0 + 62.5000 82.7500 -64.0 + 63.2500 83.5000 -64.0 + 62.2500 86.5000 -64.0 + 59.5000 88.2500 -64.0 + 58.2500 96.5000 -64.0 + 50.5000 108.2500 -64.0 + 50.2500 112.5000 -64.0 + 52.2500 114.5000 -64.0 + 54.5000 114.7500 -64.0 + 56.5000 113.7500 -64.0 + 56.7500 108.5000 -64.0 + 55.7500 105.5000 -64.0 + 59.5000 96.7500 -64.0 + 60.7500 90.5000 -64.0 + 63.5000 87.7500 -64.0 + 64.7500 81.5000 -64.0 + 63.7500 78.5000 -64.0 +} -64.0 +{ -64.0 + 86.2500 79.5000 -64.0 + 84.5000 80.2500 -64.0 + 84.2500 82.5000 -64.0 + 87.5000 80.7500 -64.0 +} -64.0 +{ -64.0 + 128.2500 80.5000 -64.0 + 128.2500 81.5000 -64.0 + 127.5000 83.2500 -64.0 + 125.5000 82.2500 -64.0 + 126.2500 83.5000 -64.0 + 129.5000 83.7500 -64.0 + 132.2500 86.5000 -64.0 + 131.5000 87.2500 -64.0 + 134.2500 89.5000 -64.0 + 134.7500 88.5000 -64.0 + 131.7500 84.5000 -64.0 + 131.7500 82.5000 -64.0 + 129.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 83.5000 -64.0 + 150.5000 84.2500 -64.0 + 150.2500 94.5000 -64.0 + 152.2500 98.5000 -64.0 + 152.2500 100.5000 -64.0 + 154.2500 104.5000 -64.0 + 154.2500 115.5000 -64.0 + 156.2500 116.5000 -64.0 + 159.5000 113.7500 -64.0 + 159.7500 111.5000 -64.0 + 158.7500 109.5000 -64.0 + 158.7500 107.5000 -64.0 + 155.7500 101.5000 -64.0 + 155.7500 99.5000 -64.0 + 154.7500 97.5000 -64.0 + 155.7500 94.5000 -64.0 + 153.7500 90.5000 -64.0 + 153.7500 86.5000 -64.0 + 152.7500 83.5000 -64.0 +} -64.0 +{ -64.0 + 65.2500 117.5000 -64.0 + 62.2500 121.5000 -64.0 + 58.5000 124.2500 -64.0 + 54.5000 122.2500 -64.0 + 53.5000 125.2500 -64.0 + 51.5000 124.2500 -64.0 + 47.2500 130.5000 -64.0 + 44.2500 132.5000 -64.0 + 39.5000 142.2500 -64.0 + 39.2500 152.5000 -64.0 + 40.2500 154.5000 -64.0 + 42.2500 164.5000 -64.0 + 50.2500 181.5000 -64.0 + 62.2500 196.5000 -64.0 + 72.2500 206.5000 -64.0 + 76.5000 209.7500 -64.0 + 83.2500 213.5000 -64.0 + 96.5000 213.7500 -64.0 + 99.5000 214.7500 -64.0 + 101.5000 213.7500 -64.0 + 104.5000 214.7500 -64.0 + 106.5000 213.7500 -64.0 + 116.5000 213.7500 -64.0 + 127.5000 209.7500 -64.0 + 133.5000 203.7500 -64.0 + 142.5000 196.7500 -64.0 + 153.5000 186.7500 -64.0 + 156.7500 182.5000 -64.0 + 160.5000 175.7500 -64.0 + 160.7500 173.5000 -64.0 + 166.7500 163.5000 -64.0 + 169.5000 152.7500 -64.0 + 169.7500 143.5000 -64.0 + 165.7500 133.5000 -64.0 + 162.7500 131.5000 -64.0 + 160.5000 131.2500 -64.0 + 160.2500 132.5000 -64.0 + 162.5000 132.7500 -64.0 + 166.2500 139.5000 -64.0 + 164.2500 143.5000 -64.0 + 166.5000 143.7500 -64.0 + 168.2500 146.5000 -64.0 + 167.5000 148.2500 -64.0 + 168.2500 149.5000 -64.0 + 167.5000 151.2500 -64.0 + 164.5000 151.2500 -64.0 + 162.5000 153.2500 -64.0 + 160.5000 153.2500 -64.0 + 160.2500 157.5000 -64.0 + 158.5000 159.2500 -64.0 + 156.5000 159.2500 -64.0 + 154.7500 157.5000 -64.0 + 154.7500 155.5000 -64.0 + 151.2500 154.5000 -64.0 + 153.2500 160.5000 -64.0 + 153.2500 165.5000 -64.0 + 152.5000 167.2500 -64.0 + 153.2500 168.5000 -64.0 + 152.2500 171.5000 -64.0 + 146.5000 181.2500 -64.0 + 134.5000 189.2500 -64.0 + 132.5000 189.2500 -64.0 + 124.5000 193.2500 -64.0 + 114.5000 193.2500 -64.0 + 111.5000 192.2500 -64.0 + 107.7500 188.5000 -64.0 + 105.5000 184.2500 -64.0 + 103.5000 183.2500 -64.0 + 102.2500 186.5000 -64.0 + 99.5000 190.2500 -64.0 + 95.5000 193.2500 -64.0 + 81.5000 193.2500 -64.0 + 77.7500 191.5000 -64.0 + 75.5000 191.2500 -64.0 + 72.7500 186.5000 -64.0 + 60.7500 177.5000 -64.0 + 57.7500 173.5000 -64.0 + 53.7500 165.5000 -64.0 + 54.7500 152.5000 -64.0 + 53.5000 151.2500 -64.0 + 51.5000 154.2500 -64.0 + 50.7500 153.5000 -64.0 + 50.7500 148.5000 -64.0 + 52.5000 147.7500 -64.0 + 54.7500 142.5000 -64.0 + 57.5000 139.7500 -64.0 + 61.7500 137.5000 -64.0 + 59.5000 137.2500 -64.0 + 53.5000 140.2500 -64.0 + 53.2500 141.5000 -64.0 + 51.2500 143.5000 -64.0 + 49.5000 150.2500 -64.0 + 44.5000 149.2500 -64.0 + 42.5000 151.2500 -64.0 + 40.7500 149.5000 -64.0 + 41.7500 148.5000 -64.0 + 40.7500 145.5000 -64.0 + 42.5000 143.7500 -64.0 + 44.7500 136.5000 -64.0 + 46.5000 135.7500 -64.0 + 46.7500 133.5000 -64.0 + 48.5000 131.7500 -64.0 + 52.5000 129.7500 -64.0 + 54.5000 130.7500 -64.0 + 56.5000 133.7500 -64.0 + 63.5000 131.7500 -64.0 + 63.7500 130.5000 -64.0 + 65.5000 129.7500 -64.0 + 65.7500 127.5000 -64.0 + 64.5000 127.2500 -64.0 + 63.7500 125.5000 -64.0 + 65.5000 124.7500 -64.0 + 68.5000 118.7500 -64.0 + 67.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 119.5000 -64.0 + 99.5000 120.2500 -64.0 + 96.2500 120.5000 -64.0 + 99.5000 120.7500 -64.0 + 100.2500 122.5000 -64.0 + 98.5000 123.2500 -64.0 + 92.5000 127.2500 -64.0 + 89.7500 125.5000 -64.0 + 89.7500 123.5000 -64.0 + 92.5000 121.7500 -64.0 + 95.7500 121.5000 -64.0 + 92.5000 121.2500 -64.0 + 88.5000 123.2500 -64.0 + 88.2500 126.5000 -64.0 + 91.2500 128.5000 -64.0 + 94.5000 128.7500 -64.0 + 96.5000 126.7500 -64.0 + 100.5000 123.7500 -64.0 + 106.5000 121.7500 -64.0 + 111.5000 122.7500 -64.0 + 115.5000 125.7500 -64.0 + 117.5000 126.7500 -64.0 + 118.2500 128.5000 -64.0 + 123.5000 130.7500 -64.0 + 124.2500 132.5000 -64.0 + 123.5000 134.2500 -64.0 + 123.2500 137.5000 -64.0 + 127.5000 140.7500 -64.0 + 129.5000 141.7500 -64.0 + 131.2500 142.5000 -64.0 + 135.5000 142.7500 -64.0 + 135.7500 139.5000 -64.0 + 138.5000 137.7500 -64.0 + 139.2500 138.5000 -64.0 + 141.5000 138.7500 -64.0 + 145.2500 140.5000 -64.0 + 148.2500 144.5000 -64.0 + 147.5000 146.2500 -64.0 + 147.2500 148.5000 -64.0 + 148.2500 150.5000 -64.0 + 149.5000 152.7500 -64.0 + 149.7500 150.5000 -64.0 + 150.5000 148.7500 -64.0 + 152.5000 147.7500 -64.0 + 150.7500 146.5000 -64.0 + 147.7500 140.5000 -64.0 + 148.7500 138.5000 -64.0 + 147.5000 137.2500 -64.0 + 145.5000 136.2500 -64.0 + 144.5000 138.2500 -64.0 + 141.5000 137.2500 -64.0 + 139.7500 136.5000 -64.0 + 135.5000 136.2500 -64.0 + 132.5000 139.2500 -64.0 + 131.7500 138.5000 -64.0 + 129.7500 134.5000 -64.0 + 127.5000 134.2500 -64.0 + 125.7500 133.5000 -64.0 + 125.7500 130.5000 -64.0 + 124.5000 129.2500 -64.0 + 120.5000 127.2500 -64.0 + 113.7500 122.5000 -64.0 + 114.5000 121.7500 -64.0 + 118.5000 121.7500 -64.0 + 123.5000 123.7500 -64.0 + 130.2500 131.5000 -64.0 + 134.5000 131.7500 -64.0 + 136.2500 132.5000 -64.0 + 137.5000 131.7500 -64.0 + 142.5000 131.7500 -64.0 + 139.7500 129.5000 -64.0 + 137.5000 129.2500 -64.0 + 134.5000 128.2500 -64.0 + 133.5000 130.2500 -64.0 + 130.5000 130.2500 -64.0 + 128.7500 128.5000 -64.0 + 128.7500 126.5000 -64.0 + 124.5000 123.2500 -64.0 + 122.5000 122.2500 -64.0 + 120.7500 121.5000 -64.0 + 117.5000 121.2500 -64.0 + 115.7500 120.5000 -64.0 + 105.5000 120.2500 -64.0 +} -64.0 +{ -64.0 + 144.2500 120.5000 -64.0 + 143.2500 122.5000 -64.0 + 145.2500 124.5000 -64.0 + 147.5000 122.7500 -64.0 + 149.7500 122.5000 -64.0 + 146.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 78.2500 127.5000 -64.0 + 77.5000 128.2500 -64.0 + 71.5000 128.2500 -64.0 + 71.2500 129.5000 -64.0 + 72.5000 129.7500 -64.0 + 74.2500 131.5000 -64.0 + 73.5000 132.2500 -64.0 + 69.5000 134.2500 -64.0 + 69.5000 135.7500 -64.0 + 71.5000 134.7500 -64.0 + 73.5000 134.7500 -64.0 + 75.5000 133.7500 -64.0 + 76.2500 134.5000 -64.0 + 78.5000 134.7500 -64.0 + 81.5000 133.7500 -64.0 + 83.5000 136.7500 -64.0 + 89.7500 134.5000 -64.0 + 90.7500 132.5000 -64.0 + 89.7500 130.5000 -64.0 + 87.5000 130.2500 -64.0 + 87.2500 131.5000 -64.0 + 86.5000 133.2500 -64.0 + 82.5000 131.2500 -64.0 + 80.7500 130.5000 -64.0 + 81.5000 129.7500 -64.0 + 86.5000 129.7500 -64.0 + 86.7500 128.5000 -64.0 + 83.5000 128.2500 -64.0 + 81.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 154.2500 127.5000 -64.0 + 154.2500 128.5000 -64.0 + 151.5000 131.2500 -64.0 + 149.2500 137.5000 -64.0 + 152.5000 137.7500 -64.0 + 151.7500 136.5000 -64.0 + 151.7500 133.5000 -64.0 + 155.5000 130.7500 -64.0 + 157.5000 131.7500 -64.0 + 159.5000 130.7500 -64.0 + 156.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 154.2500 139.5000 -64.0 + 154.2500 140.5000 -64.0 + 155.5000 140.7500 -64.0 +} -64.0 +{ -64.0 + 150.7500 88.5000 -64.0 + 151.5000 87.7500 -64.0 + 153.2500 88.5000 -64.0 + 153.2500 91.5000 -64.0 + 152.5000 93.2500 -64.0 + 150.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 154.7500 106.5000 -64.0 + 155.5000 105.7500 -64.0 + 157.2500 107.5000 -64.0 + 157.2500 111.5000 -64.0 + 156.5000 113.2500 -64.0 + 155.7500 111.5000 -64.0 + 154.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 52.7500 110.5000 -64.0 + 54.5000 109.7500 -64.0 + 55.2500 111.5000 -64.0 + 53.5000 112.2500 -64.0 +} -64.0 +{ -64.0 + 60.7500 128.5000 -64.0 + 61.5000 127.7500 -64.0 + 63.2500 128.5000 -64.0 + 62.5000 129.2500 -64.0 +} -64.0 +{ -64.0 + 126.7500 136.5000 -64.0 + 128.5000 135.7500 -64.0 + 129.2500 137.5000 -64.0 + 128.5000 139.2500 -64.0 + 126.7500 138.5000 -64.0 +} -64.0 +{ -64.0 + 45.7500 151.5000 -64.0 + 46.5000 150.7500 -64.0 + 48.2500 151.5000 -64.0 + 49.2500 153.5000 -64.0 + 47.5000 155.2500 -64.0 + 45.5000 155.2500 -64.0 + 44.7500 153.5000 -64.0 +} -64.0 +{ -64.0 + 104.5000 195.7500 -64.0 + 105.2500 196.5000 -64.0 + 103.5000 198.2500 -64.0 + 102.7500 197.5000 -64.0 +} -64.0 +v 452 z -140.000000 -64.0 +{ -64.0 + 106.2500 31.5000 -64.0 + 103.5000 33.2500 -64.0 + 100.5000 33.2500 -64.0 + 100.2500 35.5000 -64.0 + 103.5000 37.7500 -64.0 + 105.5000 36.7500 -64.0 + 108.7500 36.5000 -64.0 + 109.7500 34.5000 -64.0 + 111.5000 33.7500 -64.0 + 114.5000 37.7500 -64.0 + 116.5000 36.7500 -64.0 + 118.2500 39.5000 -64.0 + 121.2500 40.5000 -64.0 + 120.5000 41.2500 -64.0 + 114.5000 41.2500 -64.0 + 113.7500 39.5000 -64.0 + 109.5000 38.2500 -64.0 + 106.5000 41.2500 -64.0 + 104.5000 41.2500 -64.0 + 102.5000 42.2500 -64.0 + 100.7500 41.5000 -64.0 + 100.7500 38.5000 -64.0 + 97.5000 35.2500 -64.0 + 95.5000 36.2500 -64.0 + 91.5000 42.2500 -64.0 + 91.2500 45.5000 -64.0 + 96.2500 46.5000 -64.0 + 96.2500 48.5000 -64.0 + 94.5000 50.2500 -64.0 + 90.7500 46.5000 -64.0 + 89.5000 47.2500 -64.0 + 89.2500 49.5000 -64.0 + 90.2500 51.5000 -64.0 + 94.2500 52.5000 -64.0 + 94.2500 54.5000 -64.0 + 99.5000 45.7500 -64.0 + 103.5000 42.7500 -64.0 + 108.5000 43.7500 -64.0 + 111.2500 46.5000 -64.0 + 116.5000 43.7500 -64.0 + 121.5000 44.7500 -64.0 + 127.2500 53.5000 -64.0 + 127.2500 55.5000 -64.0 + 125.5000 60.2500 -64.0 + 126.2500 61.5000 -64.0 + 126.2500 64.5000 -64.0 + 129.2500 70.5000 -64.0 + 129.5000 76.7500 -64.0 + 134.5000 77.7500 -64.0 + 138.5000 74.7500 -64.0 + 138.7500 65.5000 -64.0 + 137.7500 63.5000 -64.0 + 137.7500 60.5000 -64.0 + 136.5000 59.2500 -64.0 + 134.5000 62.2500 -64.0 + 129.5000 65.2500 -64.0 + 127.7500 64.5000 -64.0 + 127.7500 62.5000 -64.0 + 130.5000 60.7500 -64.0 + 130.7500 58.5000 -64.0 + 129.5000 58.2500 -64.0 + 127.7500 56.5000 -64.0 + 127.7500 53.5000 -64.0 + 128.5000 51.7500 -64.0 + 133.5000 54.7500 -64.0 + 134.5000 56.7500 -64.0 + 136.5000 57.7500 -64.0 + 136.7500 55.5000 -64.0 + 135.7500 53.5000 -64.0 + 135.7500 51.5000 -64.0 + 133.7500 50.5000 -64.0 + 132.5000 48.2500 -64.0 + 130.5000 47.2500 -64.0 + 127.5000 50.2500 -64.0 + 124.7500 46.5000 -64.0 + 125.5000 44.7500 -64.0 + 129.5000 45.7500 -64.0 + 129.7500 43.5000 -64.0 + 127.7500 36.5000 -64.0 + 124.5000 36.2500 -64.0 + 120.5000 33.2500 -64.0 + 118.5000 34.2500 -64.0 + 116.7500 31.5000 -64.0 + 113.5000 31.2500 -64.0 + 111.5000 32.2500 -64.0 + 109.7500 31.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 60.5000 -64.0 + 82.2500 64.5000 -64.0 + 87.5000 66.7500 -64.0 + 89.5000 65.7500 -64.0 + 89.7500 63.5000 -64.0 + 87.7500 62.5000 -64.0 + 86.7500 60.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 65.5000 -64.0 + 91.2500 67.5000 -64.0 + 92.7500 66.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 68.5000 -64.0 + 82.2500 71.5000 -64.0 + 86.5000 74.7500 -64.0 + 90.5000 72.7500 -64.0 + 89.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 62.2500 79.5000 -64.0 + 61.2500 84.5000 -64.0 + 63.5000 82.7500 -64.0 + 64.2500 83.5000 -64.0 + 63.2500 87.5000 -64.0 + 61.5000 89.2500 -64.0 + 60.7500 88.5000 -64.0 + 59.5000 89.2500 -64.0 + 58.2500 95.5000 -64.0 + 50.2500 109.5000 -64.0 + 52.5000 112.7500 -64.0 + 54.5000 113.7500 -64.0 + 56.5000 112.7500 -64.0 + 57.7500 102.5000 -64.0 + 64.5000 88.7500 -64.0 + 64.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 79.5000 -64.0 + 88.5000 81.2500 -64.0 + 85.5000 80.2500 -64.0 + 83.5000 83.7500 -64.0 + 85.5000 82.7500 -64.0 + 92.5000 81.7500 -64.0 +} -64.0 +{ -64.0 + 151.2500 84.5000 -64.0 + 149.5000 87.2500 -64.0 + 149.2500 95.5000 -64.0 + 153.2500 103.5000 -64.0 + 153.2500 106.5000 -64.0 + 154.2500 108.5000 -64.0 + 154.2500 113.5000 -64.0 + 155.2500 115.5000 -64.0 + 156.7500 115.5000 -64.0 + 159.5000 111.7500 -64.0 + 158.7500 110.5000 -64.0 + 157.7500 104.5000 -64.0 + 155.7500 100.5000 -64.0 + 155.7500 95.5000 -64.0 + 153.7500 91.5000 -64.0 + 153.7500 87.5000 -64.0 + 152.7500 84.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 117.5000 -64.0 + 64.2500 118.5000 -64.0 + 59.5000 124.2500 -64.0 + 55.5000 124.2500 -64.0 + 54.5000 126.2500 -64.0 + 50.5000 126.2500 -64.0 + 50.2500 127.5000 -64.0 + 44.5000 132.2500 -64.0 + 40.5000 139.2500 -64.0 + 40.2500 141.5000 -64.0 + 39.5000 143.2500 -64.0 + 39.2500 147.5000 -64.0 + 40.2500 149.5000 -64.0 + 40.2500 152.5000 -64.0 + 42.2500 156.5000 -64.0 + 42.2500 158.5000 -64.0 + 43.2500 160.5000 -64.0 + 43.2500 162.5000 -64.0 + 52.2500 180.5000 -64.0 + 53.5000 182.7500 -64.0 + 55.5000 183.7500 -64.0 + 65.2500 195.5000 -64.0 + 77.2500 206.5000 -64.0 + 81.5000 209.7500 -64.0 + 83.5000 210.7500 -64.0 + 85.2500 211.5000 -64.0 + 96.5000 211.7500 -64.0 + 98.2500 212.5000 -64.0 + 105.5000 212.7500 -64.0 + 107.5000 211.7500 -64.0 + 113.5000 211.7500 -64.0 + 115.5000 210.7500 -64.0 + 118.5000 210.7500 -64.0 + 125.5000 203.7500 -64.0 + 127.5000 203.7500 -64.0 + 130.5000 200.7500 -64.0 + 142.5000 191.7500 -64.0 + 149.5000 187.7500 -64.0 + 155.7500 180.5000 -64.0 + 158.5000 176.7500 -64.0 + 158.7500 174.5000 -64.0 + 161.7500 168.5000 -64.0 + 166.5000 159.7500 -64.0 + 166.7500 157.5000 -64.0 + 168.7500 152.5000 -64.0 + 169.5000 150.7500 -64.0 + 169.7500 144.5000 -64.0 + 167.7500 140.5000 -64.0 + 167.7500 138.5000 -64.0 + 164.7500 132.5000 -64.0 + 157.5000 128.2500 -64.0 + 154.2500 129.5000 -64.0 + 160.5000 130.7500 -64.0 + 161.2500 132.5000 -64.0 + 160.2500 135.5000 -64.0 + 158.5000 136.2500 -64.0 + 158.2500 137.5000 -64.0 + 163.5000 135.7500 -64.0 + 165.2500 140.5000 -64.0 + 164.2500 145.5000 -64.0 + 167.2500 147.5000 -64.0 + 167.2500 149.5000 -64.0 + 165.5000 151.2500 -64.0 + 166.2500 152.5000 -64.0 + 166.2500 154.5000 -64.0 + 162.5000 158.2500 -64.0 + 160.5000 156.2500 -64.0 + 158.5000 157.2500 -64.0 + 156.5000 157.2500 -64.0 + 155.7500 155.5000 -64.0 + 152.5000 155.2500 -64.0 + 149.7500 151.5000 -64.0 + 150.7500 148.5000 -64.0 + 152.5000 147.7500 -64.0 + 149.7500 145.5000 -64.0 + 149.7500 142.5000 -64.0 + 148.7500 139.5000 -64.0 + 147.5000 139.2500 -64.0 + 146.7500 137.5000 -64.0 + 146.2500 138.5000 -64.0 + 145.5000 140.2500 -64.0 + 143.5000 140.2500 -64.0 + 143.2500 143.5000 -64.0 + 151.2500 159.5000 -64.0 + 151.2500 168.5000 -64.0 + 147.2500 176.5000 -64.0 + 139.5000 184.2500 -64.0 + 129.5000 189.2500 -64.0 + 127.5000 189.2500 -64.0 + 123.5000 191.2500 -64.0 + 119.5000 191.2500 -64.0 + 117.5000 192.2500 -64.0 + 112.5000 191.2500 -64.0 + 109.7500 188.5000 -64.0 + 106.7500 184.5000 -64.0 + 104.7500 178.5000 -64.0 + 103.5000 179.2500 -64.0 + 101.2500 186.5000 -64.0 + 96.5000 191.2500 -64.0 + 88.5000 191.2500 -64.0 + 79.5000 188.2500 -64.0 + 72.5000 185.2500 -64.0 + 69.5000 182.2500 -64.0 + 67.5000 181.2500 -64.0 + 59.7500 174.5000 -64.0 + 55.7500 167.5000 -64.0 + 55.7500 150.5000 -64.0 + 54.7500 147.5000 -64.0 + 56.7500 142.5000 -64.0 + 61.5000 137.2500 -64.0 + 58.5000 138.2500 -64.0 + 54.5000 144.2500 -64.0 + 52.7500 143.5000 -64.0 + 50.5000 145.2500 -64.0 + 48.5000 145.2500 -64.0 + 48.2500 146.5000 -64.0 + 52.5000 146.7500 -64.0 + 54.2500 150.5000 -64.0 + 52.5000 152.2500 -64.0 + 52.2500 154.5000 -64.0 + 51.5000 156.2500 -64.0 + 50.7500 154.5000 -64.0 + 48.5000 152.2500 -64.0 + 46.5000 151.2500 -64.0 + 43.7500 147.5000 -64.0 + 44.5000 145.7500 -64.0 + 44.7500 142.5000 -64.0 + 43.7500 140.5000 -64.0 + 45.5000 138.7500 -64.0 + 47.5000 138.7500 -64.0 + 46.7500 137.5000 -64.0 + 46.7500 132.5000 -64.0 + 49.5000 129.7500 -64.0 + 54.5000 129.7500 -64.0 + 56.2500 133.5000 -64.0 + 57.5000 133.7500 -64.0 + 59.5000 131.7500 -64.0 + 60.2500 132.5000 -64.0 + 63.5000 132.7500 -64.0 + 64.5000 130.7500 -64.0 + 66.7500 129.5000 -64.0 + 67.7500 127.5000 -64.0 + 69.5000 126.7500 -64.0 + 75.5000 128.7500 -64.0 + 77.2500 129.5000 -64.0 + 81.5000 129.7500 -64.0 + 86.5000 127.7500 -64.0 + 87.7500 124.5000 -64.0 + 91.7500 121.5000 -64.0 + 89.5000 121.2500 -64.0 + 81.5000 128.2500 -64.0 + 77.5000 126.2500 -64.0 + 75.5000 127.2500 -64.0 + 73.5000 127.2500 -64.0 + 67.5000 125.2500 -64.0 + 66.7500 123.5000 -64.0 + 65.7500 121.5000 -64.0 + 67.5000 119.7500 -64.0 + 67.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 99.2500 119.5000 -64.0 + 98.5000 120.2500 -64.0 + 96.2500 120.5000 -64.0 + 100.5000 120.7500 -64.0 + 101.2500 122.5000 -64.0 + 94.5000 126.2500 -64.0 + 91.5000 126.2500 -64.0 + 87.5000 128.2500 -64.0 + 87.2500 131.5000 -64.0 + 86.5000 133.2500 -64.0 + 81.5000 133.2500 -64.0 + 79.5000 134.2500 -64.0 + 77.5000 134.2500 -64.0 + 74.5000 133.2500 -64.0 + 70.5000 135.2500 -64.0 + 67.2500 135.5000 -64.0 + 76.5000 135.7500 -64.0 + 78.2500 137.5000 -64.0 + 86.5000 137.7500 -64.0 + 89.7500 134.5000 -64.0 + 90.7500 132.5000 -64.0 + 88.7500 130.5000 -64.0 + 89.5000 128.7500 -64.0 + 94.5000 128.7500 -64.0 + 95.7500 127.5000 -64.0 + 102.5000 122.7500 -64.0 + 109.5000 122.7500 -64.0 + 115.5000 125.7500 -64.0 + 120.2500 130.5000 -64.0 + 123.2500 134.5000 -64.0 + 123.2500 139.5000 -64.0 + 124.5000 140.7500 -64.0 + 128.2500 143.5000 -64.0 + 137.5000 143.7500 -64.0 + 139.5000 142.7500 -64.0 + 138.7500 141.5000 -64.0 + 136.5000 141.2500 -64.0 + 134.5000 142.2500 -64.0 + 132.5000 142.2500 -64.0 + 130.7500 140.5000 -64.0 + 130.7500 138.5000 -64.0 + 129.7500 135.5000 -64.0 + 126.5000 135.2500 -64.0 + 124.7500 133.5000 -64.0 + 124.7500 131.5000 -64.0 + 117.5000 125.2500 -64.0 + 113.7500 122.5000 -64.0 + 114.5000 121.7500 -64.0 + 120.5000 121.7500 -64.0 + 123.5000 122.7500 -64.0 + 132.2500 132.5000 -64.0 + 133.5000 131.7500 -64.0 + 136.5000 131.7500 -64.0 + 135.7500 130.5000 -64.0 + 137.5000 129.7500 -64.0 + 136.5000 128.2500 -64.0 + 132.5000 130.2500 -64.0 + 131.7500 128.5000 -64.0 + 126.5000 123.2500 -64.0 + 122.5000 121.2500 -64.0 + 113.5000 120.2500 -64.0 + 111.5000 121.2500 -64.0 + 109.7500 120.5000 -64.0 + 102.5000 120.2500 -64.0 +} -64.0 +{ -64.0 + 144.2500 119.5000 -64.0 + 143.5000 121.2500 -64.0 + 145.2500 123.5000 -64.0 + 146.5000 121.7500 -64.0 + 149.7500 121.5000 -64.0 + 147.5000 121.2500 -64.0 + 145.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 133.5000 -64.0 + 150.2500 138.5000 -64.0 + 151.5000 138.7500 -64.0 + 151.7500 134.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 139.5000 -64.0 + 153.2500 140.5000 -64.0 + 154.5000 141.7500 -64.0 + 154.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 158.2500 142.5000 -64.0 + 158.2500 143.5000 -64.0 + 159.5000 143.7500 -64.0 + 159.7500 142.5000 -64.0 +} -64.0 +{ -64.0 + 158.2500 153.5000 -64.0 + 159.2500 154.5000 -64.0 + 159.7500 153.5000 -64.0 +} -64.0 +{ -64.0 + 110.7500 40.5000 -64.0 + 111.5000 39.7500 -64.0 + 112.2500 40.5000 -64.0 + 111.5000 41.2500 -64.0 +} -64.0 +{ -64.0 + 94.7500 41.5000 -64.0 + 95.5000 40.7500 -64.0 + 97.5000 40.7500 -64.0 + 99.2500 42.5000 -64.0 + 98.5000 44.2500 -64.0 + 95.5000 43.2500 -64.0 +} -64.0 +{ -64.0 + 123.7500 42.5000 -64.0 + 124.5000 41.7500 -64.0 + 125.2500 42.5000 -64.0 + 124.5000 44.2500 -64.0 +} -64.0 +{ -64.0 + 132.7500 68.5000 -64.0 + 133.5000 67.7500 -64.0 + 135.5000 67.7500 -64.0 + 137.2500 69.5000 -64.0 + 136.5000 70.2500 -64.0 + 132.5000 72.2500 -64.0 + 130.5000 72.2500 -64.0 + 129.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 150.7500 88.5000 -64.0 + 151.5000 87.7500 -64.0 + 152.2500 89.5000 -64.0 + 153.2500 91.5000 -64.0 + 153.2500 94.5000 -64.0 + 152.5000 96.2500 -64.0 + 151.7500 94.5000 -64.0 + 150.7500 92.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 98.5000 -64.0 + 153.5000 97.7500 -64.0 + 154.2500 99.5000 -64.0 + 153.5000 101.2500 -64.0 + 152.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 154.7500 105.5000 -64.0 + 155.5000 104.7500 -64.0 + 156.2500 105.5000 -64.0 + 155.5000 106.2500 -64.0 +} -64.0 +{ -64.0 + 53.7500 106.5000 -64.0 + 54.5000 105.7500 -64.0 + 55.2500 106.5000 -64.0 + 55.2500 109.5000 -64.0 + 54.5000 111.2500 -64.0 + 53.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 154.7500 108.5000 -64.0 + 155.5000 107.7500 -64.0 + 156.2500 108.5000 -64.0 + 157.2500 110.5000 -64.0 + 156.5000 112.2500 -64.0 + 154.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 63.5000 124.7500 -64.0 + 65.5000 124.7500 -64.0 + 66.2500 126.5000 -64.0 + 63.5000 128.2500 -64.0 + 61.5000 129.2500 -64.0 + 59.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 125.7500 137.5000 -64.0 + 127.5000 136.7500 -64.0 + 129.2500 137.5000 -64.0 + 129.2500 140.5000 -64.0 + 127.5000 141.2500 -64.0 + 125.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 45.7500 153.5000 -64.0 + 46.5000 152.7500 -64.0 + 48.2500 153.5000 -64.0 + 47.5000 154.2500 -64.0 +} -64.0 +v 420 z -142.000000 -64.0 +{ -64.0 + 105.2500 30.5000 -64.0 + 104.5000 31.2500 -64.0 + 101.5000 31.2500 -64.0 + 99.5000 33.2500 -64.0 + 101.5000 35.7500 -64.0 + 103.5000 36.7500 -64.0 + 105.5000 35.7500 -64.0 + 108.5000 36.7500 -64.0 + 111.5000 32.7500 -64.0 + 114.5000 36.7500 -64.0 + 116.5000 35.7500 -64.0 + 118.2500 37.5000 -64.0 + 117.5000 39.2500 -64.0 + 115.5000 39.2500 -64.0 + 113.7500 37.5000 -64.0 + 110.5000 37.2500 -64.0 + 106.5000 39.2500 -64.0 + 104.5000 39.2500 -64.0 + 102.5000 40.2500 -64.0 + 101.7500 38.5000 -64.0 + 97.5000 34.2500 -64.0 + 94.5000 35.2500 -64.0 + 92.2500 39.5000 -64.0 + 90.2500 43.5000 -64.0 + 96.2500 46.5000 -64.0 + 94.5000 48.2500 -64.0 + 91.7500 45.5000 -64.0 + 89.5000 45.2500 -64.0 + 88.2500 48.5000 -64.0 + 90.5000 50.7500 -64.0 + 94.5000 52.7500 -64.0 + 96.7500 47.5000 -64.0 + 102.5000 40.7500 -64.0 + 104.5000 40.7500 -64.0 + 109.5000 41.7500 -64.0 + 109.7500 39.5000 -64.0 + 111.5000 37.7500 -64.0 + 113.2500 39.5000 -64.0 + 112.5000 41.2500 -64.0 + 113.5000 42.7500 -64.0 + 115.5000 41.7500 -64.0 + 121.5000 41.7500 -64.0 + 123.2500 43.5000 -64.0 + 126.2500 49.5000 -64.0 + 126.2500 51.5000 -64.0 + 127.2500 53.5000 -64.0 + 129.5000 52.7500 -64.0 + 133.2500 55.5000 -64.0 + 133.2500 57.5000 -64.0 + 136.5000 57.7500 -64.0 + 136.7500 55.5000 -64.0 + 135.7500 53.5000 -64.0 + 135.7500 51.5000 -64.0 + 131.5000 46.2500 -64.0 + 127.5000 48.2500 -64.0 + 125.7500 45.5000 -64.0 + 126.5000 44.7500 -64.0 + 129.5000 44.7500 -64.0 + 132.5000 43.7500 -64.0 + 132.5000 42.2500 -64.0 + 130.5000 41.2500 -64.0 + 128.7500 40.5000 -64.0 + 128.7500 35.5000 -64.0 + 127.7500 33.5000 -64.0 + 126.5000 34.2500 -64.0 + 124.5000 35.2500 -64.0 + 122.7500 32.5000 -64.0 + 120.5000 32.2500 -64.0 + 118.5000 33.2500 -64.0 + 116.7500 30.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 56.5000 -64.0 + 126.5000 57.2500 -64.0 + 126.2500 60.5000 -64.0 + 127.2500 63.5000 -64.0 + 127.7500 62.5000 -64.0 + 130.7500 60.5000 -64.0 + 131.7500 58.5000 -64.0 + 128.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 58.5000 -64.0 + 82.5000 62.2500 -64.0 + 83.2500 64.5000 -64.0 + 88.2500 66.5000 -64.0 + 91.7500 65.5000 -64.0 + 92.7500 63.5000 -64.0 + 89.5000 62.2500 -64.0 + 86.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 59.5000 -64.0 + 130.5000 64.2500 -64.0 + 128.5000 64.2500 -64.0 + 128.2500 69.5000 -64.0 + 129.2500 71.5000 -64.0 + 129.2500 75.5000 -64.0 + 131.2500 76.5000 -64.0 + 137.7500 76.5000 -64.0 + 139.7500 72.5000 -64.0 + 138.7500 70.5000 -64.0 + 134.5000 70.2500 -64.0 + 130.5000 72.2500 -64.0 + 129.7500 71.5000 -64.0 + 130.5000 69.7500 -64.0 + 132.5000 69.7500 -64.0 + 134.5000 67.7500 -64.0 + 137.7500 67.5000 -64.0 + 138.7500 65.5000 -64.0 + 137.7500 63.5000 -64.0 + 137.7500 60.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 68.5000 -64.0 + 82.2500 69.5000 -64.0 + 84.2500 73.5000 -64.0 + 88.5000 73.7500 -64.0 + 90.5000 72.7500 -64.0 + 90.5000 70.2500 -64.0 + 86.7500 68.5000 -64.0 +} -64.0 +{ -64.0 + 63.2500 79.5000 -64.0 + 61.5000 83.2500 -64.0 + 61.2500 86.5000 -64.0 + 59.2500 90.5000 -64.0 + 58.2500 95.5000 -64.0 + 55.5000 101.2500 -64.0 + 51.5000 107.2500 -64.0 + 51.2500 110.5000 -64.0 + 53.2500 112.5000 -64.0 + 55.7500 112.5000 -64.0 + 57.7500 108.5000 -64.0 + 58.7500 101.5000 -64.0 + 62.7500 95.5000 -64.0 + 65.5000 89.7500 -64.0 + 65.7500 83.5000 -64.0 + 64.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 82.5000 -64.0 + 85.2500 83.5000 -64.0 + 87.5000 83.7500 -64.0 + 88.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 84.5000 -64.0 + 81.5000 85.7500 -64.0 + 84.7500 84.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 84.5000 -64.0 + 148.5000 90.2500 -64.0 + 148.2500 96.5000 -64.0 + 151.2500 100.5000 -64.0 + 151.7500 99.5000 -64.0 + 150.7500 97.5000 -64.0 + 149.7500 90.5000 -64.0 + 151.5000 88.7500 -64.0 + 152.2500 89.5000 -64.0 + 152.2500 92.5000 -64.0 + 153.2500 94.5000 -64.0 + 152.2500 96.5000 -64.0 + 155.2500 102.5000 -64.0 + 154.5000 104.2500 -64.0 + 152.7500 101.5000 -64.0 + 152.2500 102.5000 -64.0 + 154.2500 108.5000 -64.0 + 153.2500 111.5000 -64.0 + 154.2500 114.5000 -64.0 + 157.5000 114.7500 -64.0 + 158.5000 112.7500 -64.0 + 158.7500 107.5000 -64.0 + 157.7500 105.5000 -64.0 + 157.7500 103.5000 -64.0 + 155.7500 99.5000 -64.0 + 155.7500 96.5000 -64.0 + 153.7500 92.5000 -64.0 + 153.7500 88.5000 -64.0 + 152.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 65.2500 116.5000 -64.0 + 63.2500 120.5000 -64.0 + 59.5000 124.2500 -64.0 + 56.5000 124.2500 -64.0 + 56.2500 125.5000 -64.0 + 50.2500 128.5000 -64.0 + 54.5000 128.7500 -64.0 + 56.2500 131.5000 -64.0 + 56.2500 133.5000 -64.0 + 59.5000 134.7500 -64.0 + 61.5000 133.7500 -64.0 + 64.5000 133.7500 -64.0 + 66.2500 135.5000 -64.0 + 65.5000 136.2500 -64.0 + 65.5000 137.7500 -64.0 + 69.5000 135.7500 -64.0 + 72.5000 135.7500 -64.0 + 75.2500 138.5000 -64.0 + 74.2500 141.5000 -64.0 + 79.5000 141.7500 -64.0 + 82.5000 138.7500 -64.0 + 87.5000 138.7500 -64.0 + 89.5000 136.7500 -64.0 + 89.7500 131.5000 -64.0 + 94.5000 128.7500 -64.0 + 103.7500 121.5000 -64.0 + 98.2500 119.5000 -64.0 + 99.2500 121.5000 -64.0 + 99.2500 123.5000 -64.0 + 97.2500 125.5000 -64.0 + 89.2500 128.5000 -64.0 + 85.5000 134.2500 -64.0 + 83.7500 133.5000 -64.0 + 81.5000 134.2500 -64.0 + 79.5000 137.2500 -64.0 + 75.7500 135.5000 -64.0 + 69.5000 135.2500 -64.0 + 65.5000 133.2500 -64.0 + 64.7500 131.5000 -64.0 + 58.7500 129.5000 -64.0 + 58.7500 127.5000 -64.0 + 61.5000 123.7500 -64.0 + 66.5000 123.7500 -64.0 + 66.7500 121.5000 -64.0 + 65.7500 119.5000 -64.0 + 66.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 144.2500 118.5000 -64.0 + 143.2500 119.5000 -64.0 + 144.2500 121.5000 -64.0 + 145.5000 120.7500 -64.0 + 145.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 120.5000 -64.0 + 113.5000 122.2500 -64.0 + 111.2500 122.5000 -64.0 + 119.2500 129.5000 -64.0 + 122.2500 133.5000 -64.0 + 123.2500 140.5000 -64.0 + 125.2500 144.5000 -64.0 + 127.5000 144.7500 -64.0 + 124.7500 140.5000 -64.0 + 125.5000 136.7500 -64.0 + 130.7500 140.5000 -64.0 + 129.7500 138.5000 -64.0 + 129.7500 136.5000 -64.0 + 125.5000 136.2500 -64.0 + 123.7500 131.5000 -64.0 + 117.7500 125.5000 -64.0 + 116.7500 123.5000 -64.0 + 117.5000 121.7500 -64.0 + 119.5000 120.7500 -64.0 + 124.5000 121.7500 -64.0 + 128.2500 125.5000 -64.0 + 132.5000 132.7500 -64.0 + 134.5000 131.7500 -64.0 + 135.2500 132.5000 -64.0 + 136.7500 132.5000 -64.0 + 130.7500 127.5000 -64.0 + 128.5000 123.2500 -64.0 + 124.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 88.2500 121.5000 -64.0 + 84.5000 125.2500 -64.0 + 78.5000 129.2500 -64.0 + 76.5000 129.2500 -64.0 + 78.5000 130.7500 -64.0 + 80.5000 129.7500 -64.0 + 82.5000 129.7500 -64.0 + 84.7500 126.5000 -64.0 + 89.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 126.5000 -64.0 + 69.2500 127.5000 -64.0 + 66.2500 129.5000 -64.0 + 70.5000 129.7500 -64.0 + 74.5000 127.7500 -64.0 + 76.5000 127.7500 -64.0 + 76.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 47.2500 129.5000 -64.0 + 45.2500 131.5000 -64.0 + 40.5000 141.2500 -64.0 + 40.2500 149.5000 -64.0 + 43.2500 155.5000 -64.0 + 44.2500 161.5000 -64.0 + 48.5000 168.7500 -64.0 + 52.2500 177.5000 -64.0 + 61.5000 187.7500 -64.0 + 65.5000 189.7500 -64.0 + 68.2500 192.5000 -64.0 + 69.2500 194.5000 -64.0 + 72.5000 196.7500 -64.0 + 80.5000 202.7500 -64.0 + 84.5000 204.7500 -64.0 + 88.2500 208.5000 -64.0 + 96.5000 209.7500 -64.0 + 100.2500 211.5000 -64.0 + 103.5000 211.7500 -64.0 + 105.5000 210.7500 -64.0 + 108.5000 210.7500 -64.0 + 113.5000 208.7500 -64.0 + 114.7500 204.5000 -64.0 + 120.5000 200.7500 -64.0 + 122.7500 200.5000 -64.0 + 131.5000 196.7500 -64.0 + 138.7500 190.5000 -64.0 + 147.5000 186.7500 -64.0 + 151.7500 182.5000 -64.0 + 158.5000 172.7500 -64.0 + 160.5000 164.7500 -64.0 + 162.5000 163.7500 -64.0 + 165.5000 158.7500 -64.0 + 168.5000 150.7500 -64.0 + 168.7500 142.5000 -64.0 + 166.7500 138.5000 -64.0 + 166.7500 135.5000 -64.0 + 161.7500 129.5000 -64.0 + 159.5000 129.2500 -64.0 + 161.2500 132.5000 -64.0 + 155.5000 138.2500 -64.0 + 152.5000 138.2500 -64.0 + 149.5000 141.2500 -64.0 + 145.2500 141.5000 -64.0 + 146.2500 143.5000 -64.0 + 144.5000 145.2500 -64.0 + 141.7500 143.5000 -64.0 + 133.5000 143.2500 -64.0 + 131.7500 141.5000 -64.0 + 130.5000 143.2500 -64.0 + 130.2500 145.5000 -64.0 + 138.5000 145.7500 -64.0 + 144.2500 148.5000 -64.0 + 147.2500 154.5000 -64.0 + 147.2500 156.5000 -64.0 + 149.2500 160.5000 -64.0 + 149.2500 168.5000 -64.0 + 145.2500 176.5000 -64.0 + 135.5000 184.2500 -64.0 + 125.5000 189.2500 -64.0 + 123.5000 189.2500 -64.0 + 121.5000 190.2500 -64.0 + 116.5000 190.2500 -64.0 + 111.5000 188.2500 -64.0 + 108.7500 184.5000 -64.0 + 105.7500 178.5000 -64.0 + 105.5000 174.2500 -64.0 + 103.5000 173.2500 -64.0 + 101.2500 184.5000 -64.0 + 97.5000 188.2500 -64.0 + 93.5000 190.2500 -64.0 + 84.5000 188.2500 -64.0 + 77.7500 185.5000 -64.0 + 75.5000 185.2500 -64.0 + 61.7500 174.5000 -64.0 + 56.7500 164.5000 -64.0 + 58.7500 145.5000 -64.0 + 56.5000 141.2500 -64.0 + 56.2500 145.5000 -64.0 + 54.5000 146.2500 -64.0 + 52.7500 144.5000 -64.0 + 53.7500 141.5000 -64.0 + 51.5000 143.2500 -64.0 + 48.5000 143.2500 -64.0 + 47.2500 147.5000 -64.0 + 45.5000 149.2500 -64.0 + 43.7500 148.5000 -64.0 + 42.7500 146.5000 -64.0 + 45.5000 144.7500 -64.0 + 45.7500 141.5000 -64.0 + 44.7500 139.5000 -64.0 + 48.7500 133.5000 -64.0 + 47.7500 131.5000 -64.0 + 48.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 126.7500 35.5000 -64.0 + 127.5000 34.7500 -64.0 + 128.2500 35.5000 -64.0 + 127.5000 36.2500 -64.0 +} -64.0 +{ -64.0 + 94.7500 40.5000 -64.0 + 95.5000 39.7500 -64.0 + 98.2500 41.5000 -64.0 + 96.5000 42.2500 -64.0 +} -64.0 +{ -64.0 + 61.7500 84.5000 -64.0 + 62.5000 83.7500 -64.0 + 64.2500 84.5000 -64.0 + 64.2500 87.5000 -64.0 + 62.5000 91.2500 -64.0 + 60.7500 90.5000 -64.0 + 61.5000 88.7500 -64.0 +} -64.0 +{ -64.0 + 59.7500 94.5000 -64.0 + 60.5000 93.7500 -64.0 + 61.2500 94.5000 -64.0 + 60.5000 96.2500 -64.0 +} -64.0 +{ -64.0 + 55.7500 103.5000 -64.0 + 56.5000 102.7500 -64.0 + 57.2500 103.5000 -64.0 + 56.5000 105.2500 -64.0 + 56.2500 108.5000 -64.0 + 54.5000 110.2500 -64.0 + 53.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 154.7500 107.5000 -64.0 + 155.5000 106.7500 -64.0 + 156.2500 107.5000 -64.0 + 156.2500 109.5000 -64.0 + 155.5000 111.2500 -64.0 + 154.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 159.5000 135.7500 -64.0 + 161.5000 135.7500 -64.0 + 163.2500 136.5000 -64.0 + 163.2500 138.5000 -64.0 + 162.5000 140.2500 -64.0 + 163.5000 140.7500 -64.0 + 165.2500 143.5000 -64.0 + 165.2500 147.5000 -64.0 + 164.5000 149.2500 -64.0 + 165.2500 150.5000 -64.0 + 165.2500 154.5000 -64.0 + 161.5000 156.2500 -64.0 + 159.7500 155.5000 -64.0 + 159.7500 153.5000 -64.0 + 154.7500 148.5000 -64.0 + 154.7500 146.5000 -64.0 + 157.5000 143.7500 -64.0 + 161.5000 143.7500 -64.0 + 161.7500 142.5000 -64.0 + 158.5000 142.2500 -64.0 + 156.7500 141.5000 -64.0 + 156.7500 138.5000 -64.0 +} -64.0 +{ -64.0 + 50.7500 147.5000 -64.0 + 52.5000 146.7500 -64.0 + 55.5000 147.7500 -64.0 + 57.2500 150.5000 -64.0 + 56.5000 152.2500 -64.0 + 52.5000 154.2500 -64.0 + 50.5000 154.2500 -64.0 + 47.7500 150.5000 -64.0 +} -64.0 +{ -64.0 + 49.7500 157.5000 -64.0 + 50.5000 156.7500 -64.0 + 51.2500 157.5000 -64.0 + 50.5000 158.2500 -64.0 +} -64.0 +v 388 z -144.000000 -64.0 +{ -64.0 + 106.2500 29.5000 -64.0 + 104.5000 31.2500 -64.0 + 101.2500 30.5000 -64.0 + 98.5000 34.2500 -64.0 + 96.5000 33.2500 -64.0 + 94.5000 35.2500 -64.0 + 94.2500 38.5000 -64.0 + 91.5000 40.2500 -64.0 + 91.2500 43.5000 -64.0 + 89.5000 45.2500 -64.0 + 89.2500 48.5000 -64.0 + 93.2500 52.5000 -64.0 + 95.5000 50.7500 -64.0 + 95.7500 48.5000 -64.0 + 99.5000 41.7500 -64.0 + 103.5000 38.7500 -64.0 + 107.5000 38.7500 -64.0 + 111.5000 36.7500 -64.0 + 113.2500 37.5000 -64.0 + 114.2500 39.5000 -64.0 + 116.5000 39.7500 -64.0 + 118.5000 38.7500 -64.0 + 121.5000 39.7500 -64.0 + 126.2500 47.5000 -64.0 + 126.2500 50.5000 -64.0 + 128.2500 55.5000 -64.0 + 126.5000 57.2500 -64.0 + 126.2500 60.5000 -64.0 + 128.2500 62.5000 -64.0 + 128.2500 68.5000 -64.0 + 129.5000 69.7500 -64.0 + 133.5000 67.7500 -64.0 + 136.5000 67.7500 -64.0 + 138.5000 66.7500 -64.0 + 138.7500 62.5000 -64.0 + 137.7500 60.5000 -64.0 + 135.5000 60.2500 -64.0 + 132.5000 61.2500 -64.0 + 129.5000 64.2500 -64.0 + 128.7500 62.5000 -64.0 + 136.5000 56.7500 -64.0 + 136.7500 54.5000 -64.0 + 134.7500 52.5000 -64.0 + 134.7500 49.5000 -64.0 + 132.7500 48.5000 -64.0 + 132.7500 46.5000 -64.0 + 130.7500 44.5000 -64.0 + 131.5000 43.7500 -64.0 + 131.7500 40.5000 -64.0 + 127.7500 39.5000 -64.0 + 128.5000 37.2500 -64.0 + 126.5000 38.2500 -64.0 + 122.7500 37.5000 -64.0 + 124.5000 34.7500 -64.0 + 121.7500 30.5000 -64.0 + 118.5000 31.2500 -64.0 + 116.7500 29.5000 -64.0 + 113.5000 29.2500 -64.0 + 111.5000 30.2500 -64.0 + 110.7500 29.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 31.5000 -64.0 + 130.2500 32.5000 -64.0 + 130.7500 31.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 57.5000 -64.0 + 83.5000 58.2500 -64.0 + 82.2500 62.5000 -64.0 + 87.2500 65.5000 -64.0 + 90.5000 65.7500 -64.0 + 91.2500 67.5000 -64.0 + 91.7500 66.5000 -64.0 + 92.5000 64.7500 -64.0 + 92.5000 60.2500 -64.0 + 90.5000 61.2500 -64.0 + 86.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 67.5000 -64.0 + 82.2500 71.5000 -64.0 + 84.2500 73.5000 -64.0 + 89.5000 73.7500 -64.0 + 91.5000 72.7500 -64.0 + 91.7500 70.5000 -64.0 + 86.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 133.2500 70.5000 -64.0 + 129.5000 72.2500 -64.0 + 129.2500 74.5000 -64.0 + 130.2500 76.5000 -64.0 + 137.5000 76.7500 -64.0 + 140.5000 73.7500 -64.0 + 140.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 63.2500 80.5000 -64.0 + 62.2500 84.5000 -64.0 + 59.2500 90.5000 -64.0 + 58.2500 95.5000 -64.0 + 52.5000 106.2500 -64.0 + 52.2500 109.5000 -64.0 + 55.5000 111.7500 -64.0 + 57.5000 110.7500 -64.0 + 57.7500 106.5000 -64.0 + 59.7500 101.5000 -64.0 + 66.5000 91.7500 -64.0 + 66.7500 86.5000 -64.0 + 64.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 85.5000 -64.0 + 150.2500 87.5000 -64.0 + 147.5000 90.2500 -64.0 + 147.2500 95.5000 -64.0 + 148.2500 98.5000 -64.0 + 153.2500 103.5000 -64.0 + 153.2500 105.5000 -64.0 + 156.2500 107.5000 -64.0 + 155.5000 111.2500 -64.0 + 153.5000 108.2500 -64.0 + 153.2500 113.5000 -64.0 + 155.2500 114.5000 -64.0 + 157.5000 113.7500 -64.0 + 158.5000 111.7500 -64.0 + 158.7500 108.5000 -64.0 + 157.7500 106.5000 -64.0 + 157.7500 103.5000 -64.0 + 153.7500 93.5000 -64.0 + 153.7500 89.5000 -64.0 + 152.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 143.2500 117.5000 -64.0 + 143.5000 119.7500 -64.0 + 145.5000 118.7500 -64.0 + 144.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 118.5000 -64.0 + 64.5000 122.7500 -64.0 + 67.7500 121.5000 -64.0 + 66.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 118.5000 -64.0 + 116.5000 122.2500 -64.0 + 116.2500 124.5000 -64.0 + 117.2500 127.5000 -64.0 + 122.2500 133.5000 -64.0 + 122.2500 143.5000 -64.0 + 125.2500 147.5000 -64.0 + 128.5000 147.7500 -64.0 + 130.5000 146.7500 -64.0 + 138.5000 146.7500 -64.0 + 142.2500 149.5000 -64.0 + 145.2500 153.5000 -64.0 + 145.2500 155.5000 -64.0 + 147.2500 159.5000 -64.0 + 147.2500 168.5000 -64.0 + 146.2500 171.5000 -64.0 + 140.5000 177.2500 -64.0 + 129.5000 185.2500 -64.0 + 127.5000 185.2500 -64.0 + 123.5000 187.2500 -64.0 + 121.5000 187.2500 -64.0 + 119.5000 188.2500 -64.0 + 112.5000 186.2500 -64.0 + 107.7500 179.5000 -64.0 + 107.7500 177.5000 -64.0 + 106.7500 175.5000 -64.0 + 106.5000 168.2500 -64.0 + 104.5000 167.2500 -64.0 + 102.5000 170.2500 -64.0 + 102.2500 176.5000 -64.0 + 100.2500 182.5000 -64.0 + 95.5000 187.2500 -64.0 + 91.5000 187.2500 -64.0 + 79.5000 184.2500 -64.0 + 68.5000 178.2500 -64.0 + 61.7500 171.5000 -64.0 + 58.7500 165.5000 -64.0 + 58.7500 153.5000 -64.0 + 59.7500 150.5000 -64.0 + 62.5000 146.7500 -64.0 + 62.7500 140.5000 -64.0 + 68.5000 137.7500 -64.0 + 70.2500 138.5000 -64.0 + 71.2500 140.5000 -64.0 + 70.2500 142.5000 -64.0 + 81.5000 143.7500 -64.0 + 83.5000 142.7500 -64.0 + 85.5000 142.7500 -64.0 + 89.5000 138.7500 -64.0 + 90.7500 133.5000 -64.0 + 99.5000 124.7500 -64.0 + 99.7500 121.5000 -64.0 + 97.2500 119.5000 -64.0 + 98.2500 121.5000 -64.0 + 98.2500 124.5000 -64.0 + 87.5000 132.2500 -64.0 + 87.2500 134.5000 -64.0 + 85.5000 135.2500 -64.0 + 82.5000 134.2500 -64.0 + 82.2500 135.5000 -64.0 + 83.2500 138.5000 -64.0 + 78.5000 140.2500 -64.0 + 72.7500 136.5000 -64.0 + 67.5000 136.2500 -64.0 + 65.7500 133.5000 -64.0 + 66.5000 132.7500 -64.0 + 66.7500 130.5000 -64.0 + 63.5000 133.2500 -64.0 + 59.5000 132.2500 -64.0 + 57.7500 130.5000 -64.0 + 57.7500 124.5000 -64.0 + 56.5000 124.2500 -64.0 + 55.2500 125.5000 -64.0 + 50.5000 127.2500 -64.0 + 50.5000 128.7500 -64.0 + 53.5000 127.7500 -64.0 + 55.2500 129.5000 -64.0 + 55.2500 132.5000 -64.0 + 54.5000 134.2500 -64.0 + 55.5000 135.7500 -64.0 + 57.5000 134.7500 -64.0 + 59.5000 134.7500 -64.0 + 62.2500 138.5000 -64.0 + 60.5000 140.2500 -64.0 + 60.2500 143.5000 -64.0 + 58.5000 145.2500 -64.0 + 56.7500 144.5000 -64.0 + 56.2500 145.5000 -64.0 + 54.5000 146.2500 -64.0 + 53.7500 144.5000 -64.0 + 55.5000 143.7500 -64.0 + 55.7500 142.5000 -64.0 + 53.5000 142.2500 -64.0 + 51.5000 143.2500 -64.0 + 47.5000 142.2500 -64.0 + 45.7500 140.5000 -64.0 + 46.5000 136.7500 -64.0 + 48.5000 135.7500 -64.0 + 47.7500 133.5000 -64.0 + 48.5000 131.7500 -64.0 + 47.7500 129.5000 -64.0 + 46.5000 129.2500 -64.0 + 43.5000 134.2500 -64.0 + 41.5000 141.2500 -64.0 + 41.2500 148.5000 -64.0 + 45.2500 156.5000 -64.0 + 45.2500 158.5000 -64.0 + 47.2500 160.5000 -64.0 + 49.5000 158.7500 -64.0 + 50.2500 159.5000 -64.0 + 50.2500 161.5000 -64.0 + 48.2500 163.5000 -64.0 + 52.2500 173.5000 -64.0 + 63.5000 185.7500 -64.0 + 67.5000 187.7500 -64.0 + 81.2500 197.5000 -64.0 + 86.5000 197.7500 -64.0 + 89.5000 198.7500 -64.0 + 97.2500 203.5000 -64.0 + 97.2500 206.5000 -64.0 + 100.2500 209.5000 -64.0 + 106.5000 209.7500 -64.0 + 108.7500 206.5000 -64.0 + 107.7500 204.5000 -64.0 + 107.7500 202.5000 -64.0 + 111.5000 198.7500 -64.0 + 113.5000 198.7500 -64.0 + 117.5000 196.7500 -64.0 + 124.5000 195.7500 -64.0 + 129.5000 193.7500 -64.0 + 134.5000 189.7500 -64.0 + 146.5000 183.7500 -64.0 + 151.7500 178.5000 -64.0 + 156.5000 169.7500 -64.0 + 156.7500 163.5000 -64.0 + 159.5000 160.7500 -64.0 + 162.7500 160.5000 -64.0 + 167.5000 150.7500 -64.0 + 167.7500 140.5000 -64.0 + 165.7500 136.5000 -64.0 + 165.7500 134.5000 -64.0 + 161.7500 130.5000 -64.0 + 158.5000 134.2500 -64.0 + 156.5000 134.2500 -64.0 + 155.5000 137.2500 -64.0 + 153.5000 137.2500 -64.0 + 153.2500 139.5000 -64.0 + 154.2500 141.5000 -64.0 + 151.5000 144.2500 -64.0 + 142.7500 142.5000 -64.0 + 139.5000 144.2500 -64.0 + 134.5000 144.2500 -64.0 + 130.5000 146.2500 -64.0 + 128.5000 146.2500 -64.0 + 126.7500 144.5000 -64.0 + 127.5000 140.7500 -64.0 + 129.5000 140.7500 -64.0 + 129.7500 136.5000 -64.0 + 128.5000 137.2500 -64.0 + 124.7500 136.5000 -64.0 + 123.7500 131.5000 -64.0 + 119.5000 128.2500 -64.0 + 117.7500 125.5000 -64.0 + 118.7500 121.5000 -64.0 + 120.5000 119.7500 -64.0 + 129.5000 124.7500 -64.0 + 129.7500 123.5000 -64.0 + 122.5000 119.2500 -64.0 +} -64.0 +{ -64.0 + 85.2500 123.5000 -64.0 + 82.5000 126.2500 -64.0 + 76.5000 129.2500 -64.0 + 76.2500 130.5000 -64.0 + 81.5000 129.7500 -64.0 + 86.7500 123.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 125.5000 -64.0 + 130.2500 127.5000 -64.0 + 130.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 129.5000 -64.0 + 132.2500 131.5000 -64.0 + 132.2500 137.5000 -64.0 + 133.5000 137.7500 -64.0 + 134.5000 134.7500 -64.0 + 132.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 141.5000 -64.0 + 133.2500 142.5000 -64.0 + 133.7500 141.5000 -64.0 +} -64.0 +{ -64.0 + 110.7500 33.5000 -64.0 + 111.5000 32.7500 -64.0 + 113.2500 34.5000 -64.0 + 111.5000 35.2500 -64.0 +} -64.0 +{ -64.0 + 128.5000 43.7500 -64.0 + 130.2500 44.5000 -64.0 + 128.5000 46.2500 -64.0 + 126.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 92.7500 45.5000 -64.0 + 93.5000 44.7500 -64.0 + 95.2500 45.5000 -64.0 + 94.5000 47.2500 -64.0 +} -64.0 +{ -64.0 + 62.7500 85.5000 -64.0 + 64.5000 84.7500 -64.0 + 66.2500 86.5000 -64.0 + 63.2500 93.5000 -64.0 + 58.5000 101.2500 -64.0 + 57.7500 99.5000 -64.0 + 61.5000 91.7500 -64.0 +} -64.0 +{ -64.0 + 149.7500 90.5000 -64.0 + 150.5000 89.7500 -64.0 + 152.2500 91.5000 -64.0 + 152.2500 96.5000 -64.0 + 155.2500 102.5000 -64.0 + 154.5000 104.2500 -64.0 + 153.7500 103.5000 -64.0 + 153.7500 101.5000 -64.0 + 150.5000 98.2500 -64.0 + 148.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 56.7500 102.5000 -64.0 + 57.5000 101.7500 -64.0 + 58.2500 102.5000 -64.0 + 57.5000 103.2500 -64.0 + 56.2500 107.5000 -64.0 + 55.5000 109.2500 -64.0 + 54.7500 108.5000 -64.0 + 54.7500 106.5000 -64.0 +} -64.0 +{ -64.0 + 158.7500 135.5000 -64.0 + 159.5000 134.7500 -64.0 + 162.5000 134.7500 -64.0 + 164.2500 136.5000 -64.0 + 164.2500 138.5000 -64.0 + 160.5000 143.2500 -64.0 + 157.7500 139.5000 -64.0 + 157.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 163.5000 142.7500 -64.0 + 165.5000 142.7500 -64.0 + 167.2500 144.5000 -64.0 + 165.2500 148.5000 -64.0 + 166.2500 150.5000 -64.0 + 164.5000 154.2500 -64.0 + 160.5000 154.2500 -64.0 + 158.7500 152.5000 -64.0 + 159.7500 150.5000 -64.0 + 156.7500 148.5000 -64.0 + 157.5000 147.7500 -64.0 + 156.7500 146.5000 -64.0 + 157.5000 144.7500 -64.0 + 161.5000 144.7500 -64.0 +} -64.0 +{ -64.0 + 142.7500 145.5000 -64.0 + 143.5000 144.7500 -64.0 + 147.2500 146.5000 -64.0 + 146.2500 148.5000 -64.0 + 144.5000 149.2500 -64.0 + 142.7500 147.5000 -64.0 +} -64.0 +{ -64.0 + 53.5000 147.7500 -64.0 + 55.5000 147.7500 -64.0 + 57.2500 148.5000 -64.0 + 57.2500 151.5000 -64.0 + 55.5000 153.2500 -64.0 + 53.5000 153.2500 -64.0 + 51.7500 152.5000 -64.0 + 50.7500 150.5000 -64.0 +} -64.0 +v 402 z -146.000000 -64.0 +{ -64.0 + 108.2500 27.5000 -64.0 + 104.5000 30.2500 -64.0 + 101.2500 29.5000 -64.0 + 98.5000 33.2500 -64.0 + 96.5000 32.2500 -64.0 + 94.2500 35.5000 -64.0 + 95.2500 37.5000 -64.0 + 92.5000 39.2500 -64.0 + 92.2500 41.5000 -64.0 + 93.2500 43.5000 -64.0 + 90.5000 45.2500 -64.0 + 90.2500 48.5000 -64.0 + 92.2500 50.5000 -64.0 + 94.7500 50.5000 -64.0 + 95.7500 48.5000 -64.0 + 94.7500 46.5000 -64.0 + 98.5000 43.7500 -64.0 + 98.7500 41.5000 -64.0 + 101.7500 37.5000 -64.0 + 104.5000 35.7500 -64.0 + 109.5000 35.7500 -64.0 + 111.5000 33.7500 -64.0 + 115.5000 36.7500 -64.0 + 117.5000 35.7500 -64.0 + 119.5000 35.7500 -64.0 + 123.2500 39.5000 -64.0 + 125.2500 43.5000 -64.0 + 129.2500 44.5000 -64.0 + 125.5000 48.2500 -64.0 + 125.5000 50.7500 -64.0 + 127.5000 51.7500 -64.0 + 128.2500 53.5000 -64.0 + 126.2500 57.5000 -64.0 + 127.2500 60.5000 -64.0 + 129.5000 60.7500 -64.0 + 136.5000 56.7500 -64.0 + 136.7500 54.5000 -64.0 + 134.7500 52.5000 -64.0 + 134.7500 50.5000 -64.0 + 131.7500 48.5000 -64.0 + 132.7500 46.5000 -64.0 + 130.7500 44.5000 -64.0 + 131.7500 41.5000 -64.0 + 130.7500 39.5000 -64.0 + 126.7500 38.5000 -64.0 + 128.7500 35.5000 -64.0 + 124.7500 34.5000 -64.0 + 126.5000 32.7500 -64.0 + 128.7500 32.5000 -64.0 + 124.5000 32.2500 -64.0 + 123.5000 30.2500 -64.0 + 121.5000 29.2500 -64.0 + 118.5000 30.2500 -64.0 + 116.7500 27.5000 -64.0 + 113.5000 27.2500 -64.0 + 111.5000 29.2500 -64.0 +} -64.0 +{ -64.0 + 85.2500 56.5000 -64.0 + 82.2500 61.5000 -64.0 + 83.2500 63.5000 -64.0 + 86.5000 63.7500 -64.0 + 91.2500 67.5000 -64.0 + 89.5000 68.2500 -64.0 + 82.5000 66.2500 -64.0 + 80.5000 69.2500 -64.0 + 81.5000 70.7500 -64.0 + 81.7500 68.5000 -64.0 + 83.5000 67.7500 -64.0 + 85.2500 68.5000 -64.0 + 84.5000 69.2500 -64.0 + 85.2500 72.5000 -64.0 + 83.5000 73.2500 -64.0 + 81.7500 72.5000 -64.0 + 81.2500 73.5000 -64.0 + 91.5000 73.7500 -64.0 + 92.5000 69.7500 -64.0 + 92.7500 63.5000 -64.0 + 91.7500 60.5000 -64.0 + 86.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 59.5000 -64.0 + 129.5000 64.2500 -64.0 + 129.2500 66.5000 -64.0 + 130.2500 68.5000 -64.0 + 132.5000 68.7500 -64.0 + 133.2500 70.5000 -64.0 + 134.5000 69.7500 -64.0 + 133.7500 68.5000 -64.0 + 136.7500 63.5000 -64.0 + 134.7500 61.5000 -64.0 + 136.5000 60.7500 -64.0 + 138.2500 62.5000 -64.0 + 138.2500 66.5000 -64.0 + 139.5000 65.7500 -64.0 + 139.7500 63.5000 -64.0 + 138.7500 60.5000 -64.0 +} -64.0 +{ -64.0 + 138.2500 69.5000 -64.0 + 137.2500 72.5000 -64.0 + 140.5000 70.7500 -64.0 + 139.7500 69.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 71.5000 -64.0 + 130.5000 72.2500 -64.0 + 130.2500 74.5000 -64.0 + 131.5000 75.7500 -64.0 + 136.5000 76.7500 -64.0 + 135.5000 76.2500 -64.0 + 131.7500 73.5000 -64.0 + 132.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 142.2500 73.5000 -64.0 + 142.2500 74.5000 -64.0 + 141.5000 76.2500 -64.0 + 142.5000 76.7500 -64.0 + 142.7500 74.5000 -64.0 +} -64.0 +{ -64.0 + 63.2500 81.5000 -64.0 + 58.5000 92.2500 -64.0 + 57.2500 98.5000 -64.0 + 53.5000 104.2500 -64.0 + 53.2500 108.5000 -64.0 + 54.2500 110.5000 -64.0 + 57.5000 110.7500 -64.0 + 58.5000 108.7500 -64.0 + 58.7500 102.5000 -64.0 + 67.7500 92.5000 -64.0 + 68.7500 87.5000 -64.0 + 65.7500 84.5000 -64.0 + 65.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 85.5000 -64.0 + 150.2500 87.5000 -64.0 + 146.5000 91.2500 -64.0 + 146.2500 95.5000 -64.0 + 147.2500 97.5000 -64.0 + 147.2500 99.5000 -64.0 + 152.5000 101.7500 -64.0 + 152.7500 99.5000 -64.0 + 150.5000 99.2500 -64.0 + 147.7500 95.5000 -64.0 + 147.7500 92.5000 -64.0 + 150.5000 89.7500 -64.0 + 152.2500 93.5000 -64.0 + 152.2500 95.5000 -64.0 + 155.2500 101.5000 -64.0 + 155.2500 105.5000 -64.0 + 156.2500 108.5000 -64.0 + 155.5000 110.2500 -64.0 + 153.7500 109.5000 -64.0 + 153.7500 106.5000 -64.0 + 152.5000 107.2500 -64.0 + 152.2500 109.5000 -64.0 + 153.5000 112.7500 -64.0 + 155.5000 113.7500 -64.0 + 157.5000 112.7500 -64.0 + 157.7500 104.5000 -64.0 + 153.7500 94.5000 -64.0 + 153.7500 90.5000 -64.0 + 152.7500 88.5000 -64.0 + 152.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 115.5000 -64.0 + 117.2500 116.5000 -64.0 + 117.2500 120.5000 -64.0 + 116.2500 123.5000 -64.0 + 122.2500 134.5000 -64.0 + 121.2500 149.5000 -64.0 + 124.5000 150.7500 -64.0 + 126.5000 149.7500 -64.0 + 130.5000 149.7500 -64.0 + 132.5000 148.7500 -64.0 + 137.5000 148.7500 -64.0 + 141.2500 151.5000 -64.0 + 144.2500 155.5000 -64.0 + 144.2500 157.5000 -64.0 + 145.2500 159.5000 -64.0 + 145.2500 164.5000 -64.0 + 143.2500 170.5000 -64.0 + 132.5000 180.2500 -64.0 + 126.5000 183.2500 -64.0 + 124.5000 183.2500 -64.0 + 122.5000 184.2500 -64.0 + 117.5000 184.2500 -64.0 + 114.5000 183.2500 -64.0 + 111.7500 180.5000 -64.0 + 108.7500 175.5000 -64.0 + 108.7500 168.5000 -64.0 + 112.7500 159.5000 -64.0 + 110.5000 159.2500 -64.0 + 106.5000 162.2500 -64.0 + 100.2500 162.5000 -64.0 + 101.2500 164.5000 -64.0 + 101.2500 173.5000 -64.0 + 98.5000 180.2500 -64.0 + 94.5000 183.2500 -64.0 + 89.5000 183.2500 -64.0 + 87.5000 182.2500 -64.0 + 78.5000 181.2500 -64.0 + 64.7500 172.5000 -64.0 + 60.7500 165.5000 -64.0 + 60.7500 161.5000 -64.0 + 59.7500 159.5000 -64.0 + 60.5000 158.7500 -64.0 + 60.7500 153.5000 -64.0 + 63.7500 147.5000 -64.0 + 67.5000 144.7500 -64.0 + 74.5000 144.7500 -64.0 + 79.2500 146.5000 -64.0 + 84.5000 146.7500 -64.0 + 87.7500 144.5000 -64.0 + 90.5000 138.7500 -64.0 + 90.7500 134.5000 -64.0 + 98.5000 124.7500 -64.0 + 98.7500 122.5000 -64.0 + 97.5000 121.2500 -64.0 + 97.2500 125.5000 -64.0 + 94.5000 128.2500 -64.0 + 90.5000 130.2500 -64.0 + 88.2500 134.5000 -64.0 + 84.2500 137.5000 -64.0 + 87.2500 141.5000 -64.0 + 86.2500 143.5000 -64.0 + 83.5000 145.2500 -64.0 + 81.7500 144.5000 -64.0 + 82.5000 142.7500 -64.0 + 81.5000 141.2500 -64.0 + 77.5000 143.2500 -64.0 + 75.5000 143.2500 -64.0 + 69.7500 138.5000 -64.0 + 65.5000 138.2500 -64.0 + 64.7500 136.5000 -64.0 + 65.5000 134.7500 -64.0 + 67.7500 133.5000 -64.0 + 64.5000 133.2500 -64.0 + 62.5000 134.2500 -64.0 + 59.5000 134.2500 -64.0 + 57.7500 133.5000 -64.0 + 54.7500 127.5000 -64.0 + 49.5000 127.2500 -64.0 + 46.2500 130.5000 -64.0 + 43.5000 136.2500 -64.0 + 43.2500 148.5000 -64.0 + 47.5000 157.7500 -64.0 + 49.5000 158.7500 -64.0 + 52.2500 162.5000 -64.0 + 52.2500 167.5000 -64.0 + 59.5000 178.7500 -64.0 + 67.5000 184.7500 -64.0 + 80.2500 191.5000 -64.0 + 83.5000 191.7500 -64.0 + 85.2500 193.5000 -64.0 + 88.5000 193.7500 -64.0 + 90.5000 192.7500 -64.0 + 91.2500 193.5000 -64.0 + 106.5000 193.7500 -64.0 + 108.5000 194.7500 -64.0 + 110.5000 193.7500 -64.0 + 114.5000 193.7500 -64.0 + 121.5000 191.7500 -64.0 + 127.5000 190.7500 -64.0 + 140.5000 183.7500 -64.0 + 146.5000 179.7500 -64.0 + 152.5000 168.7500 -64.0 + 153.7500 163.5000 -64.0 + 152.7500 160.5000 -64.0 + 155.5000 156.7500 -64.0 + 155.7500 154.5000 -64.0 + 154.7500 151.5000 -64.0 + 153.5000 151.2500 -64.0 + 151.7500 149.5000 -64.0 + 151.7500 147.5000 -64.0 + 149.7500 145.5000 -64.0 + 145.5000 144.2500 -64.0 + 143.5000 145.2500 -64.0 + 140.5000 144.2500 -64.0 + 138.5000 145.2500 -64.0 + 136.5000 145.2500 -64.0 + 134.5000 143.2500 -64.0 + 134.2500 145.5000 -64.0 + 131.5000 147.2500 -64.0 + 129.5000 147.2500 -64.0 + 127.7500 145.5000 -64.0 + 128.7500 143.5000 -64.0 + 127.2500 142.5000 -64.0 + 125.5000 146.2500 -64.0 + 123.7500 144.5000 -64.0 + 123.7500 140.5000 -64.0 + 125.5000 138.7500 -64.0 + 127.2500 140.5000 -64.0 + 128.5000 139.7500 -64.0 + 129.2500 140.5000 -64.0 + 130.5000 138.7500 -64.0 + 132.5000 138.7500 -64.0 + 132.7500 129.5000 -64.0 + 130.5000 126.2500 -64.0 + 128.5000 125.2500 -64.0 + 130.2500 127.5000 -64.0 + 130.2500 131.5000 -64.0 + 129.5000 133.2500 -64.0 + 125.5000 135.2500 -64.0 + 123.7500 131.5000 -64.0 + 121.7500 130.5000 -64.0 + 118.7500 125.5000 -64.0 + 118.7500 122.5000 -64.0 + 119.5000 120.7500 -64.0 + 125.5000 123.7500 -64.0 + 122.7500 120.5000 -64.0 + 118.7500 119.5000 -64.0 + 119.5000 117.7500 -64.0 + 128.2500 122.5000 -64.0 + 128.7500 121.5000 -64.0 + 121.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 143.2500 115.5000 -64.0 + 142.5000 116.2500 -64.0 + 142.5000 117.7500 -64.0 + 144.5000 118.7500 -64.0 + 144.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 66.2500 117.5000 -64.0 + 65.2500 119.5000 -64.0 + 67.5000 119.7500 -64.0 + 67.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 117.5000 -64.0 + 89.2500 118.5000 -64.0 + 91.5000 118.7500 -64.0 + 92.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 126.5000 -64.0 + 79.5000 129.2500 -64.0 + 77.5000 130.2500 -64.0 + 77.5000 131.7500 -64.0 + 80.5000 130.7500 -64.0 + 83.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 161.2500 131.5000 -64.0 + 161.2500 132.5000 -64.0 + 159.5000 134.2500 -64.0 + 155.5000 134.2500 -64.0 + 153.5000 133.2500 -64.0 + 153.5000 136.7500 -64.0 + 157.5000 145.7500 -64.0 + 159.5000 146.7500 -64.0 + 162.5000 145.7500 -64.0 + 164.2500 147.5000 -64.0 + 163.5000 149.2500 -64.0 + 162.2500 155.5000 -64.0 + 164.7500 153.5000 -64.0 + 165.7500 151.5000 -64.0 + 166.5000 149.7500 -64.0 + 166.7500 141.5000 -64.0 + 165.7500 139.5000 -64.0 + 165.7500 137.5000 -64.0 + 162.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 119.7500 32.5000 -64.0 + 120.5000 31.7500 -64.0 + 122.2500 32.5000 -64.0 + 121.5000 33.2500 -64.0 +} -64.0 +{ -64.0 + 133.7500 55.5000 -64.0 + 134.5000 54.7500 -64.0 + 135.2500 55.5000 -64.0 + 134.5000 56.2500 -64.0 +} -64.0 +{ -64.0 + 85.7500 69.5000 -64.0 + 86.5000 68.7500 -64.0 + 87.2500 69.5000 -64.0 + 86.5000 70.2500 -64.0 +} -64.0 +{ -64.0 + 63.7500 85.5000 -64.0 + 64.5000 84.7500 -64.0 + 66.2500 86.5000 -64.0 + 66.2500 88.5000 -64.0 + 65.2500 91.5000 -64.0 + 63.5000 95.2500 -64.0 + 58.5000 101.2500 -64.0 + 57.7500 100.5000 -64.0 + 58.7500 97.5000 -64.0 + 61.5000 91.7500 -64.0 + 61.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 55.7500 104.5000 -64.0 + 56.5000 103.7500 -64.0 + 58.2500 104.5000 -64.0 + 57.2500 106.5000 -64.0 + 56.5000 108.2500 -64.0 + 54.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 51.7500 129.5000 -64.0 + 53.5000 128.7500 -64.0 + 55.2500 131.5000 -64.0 + 55.2500 133.5000 -64.0 + 53.5000 134.7500 -64.0 + 55.5000 135.7500 -64.0 + 57.2500 138.5000 -64.0 + 57.2500 140.5000 -64.0 + 58.5000 140.7500 -64.0 + 59.2500 142.5000 -64.0 + 58.5000 144.2500 -64.0 + 54.5000 142.2500 -64.0 + 52.5000 143.2500 -64.0 + 48.5000 143.2500 -64.0 + 46.7500 142.5000 -64.0 + 46.7500 140.5000 -64.0 + 45.7500 138.5000 -64.0 + 46.7500 136.5000 -64.0 + 48.5000 135.7500 -64.0 +} -64.0 +{ -64.0 + 160.5000 134.7500 -64.0 + 163.2500 136.5000 -64.0 + 162.2500 141.5000 -64.0 + 161.5000 143.2500 -64.0 + 159.7500 142.5000 -64.0 + 159.7500 139.5000 -64.0 + 157.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 86.7500 137.5000 -64.0 + 87.5000 136.7500 -64.0 + 88.2500 137.5000 -64.0 + 87.5000 139.2500 -64.0 +} -64.0 +v 547 z -148.000000 -64.0 +{ -64.0 + 107.2500 26.5000 -64.0 + 105.5000 27.2500 -64.0 + 104.5000 30.2500 -64.0 + 102.7500 28.5000 -64.0 + 100.5000 28.2500 -64.0 + 98.5000 31.2500 -64.0 + 97.7500 30.5000 -64.0 + 95.5000 31.2500 -64.0 + 94.2500 34.5000 -64.0 + 95.2500 36.5000 -64.0 + 94.5000 37.2500 -64.0 + 91.2500 37.5000 -64.0 + 93.5000 37.7500 -64.0 + 96.2500 40.5000 -64.0 + 93.5000 42.2500 -64.0 + 93.2500 43.5000 -64.0 + 91.5000 45.2500 -64.0 + 91.2500 47.5000 -64.0 + 92.2500 49.5000 -64.0 + 95.5000 49.7500 -64.0 + 95.7500 47.5000 -64.0 + 94.7500 44.5000 -64.0 + 98.5000 42.7500 -64.0 + 98.7500 38.5000 -64.0 + 100.7500 37.5000 -64.0 + 101.7500 35.5000 -64.0 + 105.5000 32.7500 -64.0 + 106.2500 33.5000 -64.0 + 109.7500 33.5000 -64.0 + 110.7500 31.5000 -64.0 + 112.5000 30.7500 -64.0 + 113.5000 32.7500 -64.0 + 115.5000 33.7500 -64.0 + 117.5000 32.7500 -64.0 + 121.5000 33.7500 -64.0 + 123.2500 37.5000 -64.0 + 123.2500 41.5000 -64.0 + 129.2500 43.5000 -64.0 + 125.5000 47.2500 -64.0 + 125.2500 50.5000 -64.0 + 128.5000 50.7500 -64.0 + 131.7500 47.5000 -64.0 + 132.7500 45.5000 -64.0 + 129.7500 43.5000 -64.0 + 131.5000 42.7500 -64.0 + 131.7500 39.5000 -64.0 + 126.5000 38.2500 -64.0 + 125.7500 36.5000 -64.0 + 129.5000 34.7500 -64.0 + 129.7500 32.5000 -64.0 + 128.7500 30.5000 -64.0 + 126.5000 30.2500 -64.0 + 122.5000 32.2500 -64.0 + 121.7500 30.5000 -64.0 + 123.5000 29.7500 -64.0 + 123.5000 28.2500 -64.0 + 121.5000 27.2500 -64.0 + 119.5000 28.2500 -64.0 + 117.7500 26.5000 -64.0 + 114.5000 26.2500 -64.0 + 112.5000 27.2500 -64.0 + 110.7500 26.5000 -64.0 +} -64.0 +{ -64.0 + 135.2500 43.5000 -64.0 + 134.2500 47.5000 -64.0 + 129.5000 52.2500 -64.0 + 127.5000 53.2500 -64.0 + 127.2500 54.5000 -64.0 + 129.2500 55.5000 -64.0 + 129.2500 59.5000 -64.0 + 132.5000 56.7500 -64.0 + 133.2500 57.5000 -64.0 + 133.2500 59.5000 -64.0 + 133.7500 58.5000 -64.0 + 135.5000 57.7500 -64.0 + 138.7500 60.5000 -64.0 + 136.7500 54.5000 -64.0 + 137.7500 52.5000 -64.0 + 136.7500 50.5000 -64.0 + 136.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 55.5000 -64.0 + 81.5000 59.2500 -64.0 + 82.2500 60.5000 -64.0 + 82.2500 64.5000 -64.0 + 83.5000 63.7500 -64.0 + 85.2500 64.5000 -64.0 + 86.5000 63.7500 -64.0 + 89.2500 65.5000 -64.0 + 87.5000 66.2500 -64.0 + 90.2500 70.5000 -64.0 + 91.5000 67.7500 -64.0 + 95.5000 67.7500 -64.0 + 93.7500 66.5000 -64.0 + 95.5000 65.7500 -64.0 + 94.7500 64.5000 -64.0 + 97.5000 62.7500 -64.0 + 95.7500 61.5000 -64.0 + 94.5000 62.2500 -64.0 + 92.7500 61.5000 -64.0 + 91.7500 59.5000 -64.0 + 86.7500 55.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 58.5000 -64.0 + 125.2500 59.5000 -64.0 + 127.5000 59.7500 -64.0 +} -64.0 +{ -64.0 + 102.2500 59.5000 -64.0 + 103.2500 60.5000 -64.0 + 108.5000 60.7500 -64.0 + 111.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 59.5000 -64.0 + 139.2500 61.5000 -64.0 + 140.2500 63.5000 -64.0 + 140.2500 65.5000 -64.0 + 141.5000 65.7500 -64.0 + 141.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 60.5000 -64.0 + 133.5000 61.2500 -64.0 + 135.5000 65.7500 -64.0 + 135.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 63.5000 -64.0 + 111.5000 65.2500 -64.0 + 103.5000 66.2500 -64.0 + 105.2500 67.5000 -64.0 + 118.5000 67.7500 -64.0 + 127.5000 68.7500 -64.0 + 130.5000 69.7500 -64.0 + 131.2500 71.5000 -64.0 + 131.7500 70.5000 -64.0 + 130.7500 68.5000 -64.0 + 133.5000 66.7500 -64.0 + 131.7500 65.5000 -64.0 + 131.7500 63.5000 -64.0 + 129.5000 63.2500 -64.0 + 129.2500 64.5000 -64.0 + 130.2500 66.5000 -64.0 + 128.5000 67.2500 -64.0 + 119.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 83.2500 71.5000 -64.0 + 83.2500 72.5000 -64.0 + 84.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 71.5000 -64.0 + 86.2500 72.5000 -64.0 + 89.2500 74.5000 -64.0 + 97.5000 74.2500 -64.0 + 88.7500 72.5000 -64.0 + 89.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 77.2500 72.5000 -64.0 + 76.5000 73.2500 -64.0 + 73.5000 73.2500 -64.0 + 71.5000 74.2500 -64.0 + 69.5000 74.2500 -64.0 + 67.5000 75.2500 -64.0 + 64.2500 75.5000 -64.0 + 71.5000 75.7500 -64.0 + 72.2500 77.5000 -64.0 + 71.2500 80.5000 -64.0 + 72.5000 79.7500 -64.0 + 82.5000 74.7500 -64.0 + 81.5000 74.2500 -64.0 + 79.5000 75.2500 -64.0 + 77.7500 73.5000 -64.0 + 78.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 72.5000 -64.0 + 129.5000 73.2500 -64.0 + 133.2500 76.5000 -64.0 + 132.5000 77.2500 -64.0 + 130.5000 77.2500 -64.0 + 128.7500 76.5000 -64.0 + 122.5000 76.2500 -64.0 + 122.2500 80.5000 -64.0 + 123.5000 79.7500 -64.0 + 129.5000 77.7500 -64.0 + 131.5000 78.7500 -64.0 + 133.5000 77.7500 -64.0 + 136.5000 77.7500 -64.0 +} -64.0 +{ -64.0 + 144.2500 72.5000 -64.0 + 143.5000 73.2500 -64.0 + 145.2500 74.5000 -64.0 + 142.5000 77.2500 -64.0 + 145.2500 79.5000 -64.0 + 146.5000 78.7500 -64.0 + 147.2500 79.5000 -64.0 + 150.5000 79.7500 -64.0 + 152.2500 80.5000 -64.0 + 159.5000 80.7500 -64.0 + 148.5000 75.2500 -64.0 + 146.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 81.5000 -64.0 + 53.2500 106.5000 -64.0 + 55.2500 110.5000 -64.0 + 57.5000 110.7500 -64.0 + 58.7500 109.5000 -64.0 + 59.7500 104.5000 -64.0 + 58.5000 103.2500 -64.0 + 58.2500 105.5000 -64.0 + 56.5000 107.2500 -64.0 + 55.7500 106.5000 -64.0 + 55.7500 104.5000 -64.0 + 58.5000 100.7500 -64.0 + 57.7500 99.5000 -64.0 + 64.5000 85.7500 -64.0 + 65.2500 87.5000 -64.0 + 67.2500 88.5000 -64.0 + 67.2500 91.5000 -64.0 + 64.5000 95.2500 -64.0 + 62.2500 96.5000 -64.0 + 61.2500 98.5000 -64.0 + 64.5000 96.7500 -64.0 + 66.5000 96.7500 -64.0 + 68.7500 92.5000 -64.0 + 69.7500 87.5000 -64.0 + 67.7500 85.5000 -64.0 + 65.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 139.2500 81.5000 -64.0 + 139.2500 82.5000 -64.0 + 138.5000 84.2500 -64.0 + 138.2500 86.5000 -64.0 + 139.2500 88.5000 -64.0 + 139.2500 91.5000 -64.0 + 140.5000 92.7500 -64.0 + 140.7500 88.5000 -64.0 + 139.7500 86.5000 -64.0 + 139.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 85.5000 -64.0 + 150.2500 87.5000 -64.0 + 152.2500 91.5000 -64.0 + 153.2500 97.5000 -64.0 + 155.2500 101.5000 -64.0 + 155.2500 108.5000 -64.0 + 154.5000 110.2500 -64.0 + 153.7500 109.5000 -64.0 + 153.7500 105.5000 -64.0 + 152.5000 105.2500 -64.0 + 152.2500 107.5000 -64.0 + 153.2500 109.5000 -64.0 + 153.2500 112.5000 -64.0 + 155.5000 112.7500 -64.0 + 157.5000 111.7500 -64.0 + 157.7500 107.5000 -64.0 + 156.7500 105.5000 -64.0 + 155.7500 99.5000 -64.0 + 152.7500 93.5000 -64.0 + 152.7500 87.5000 -64.0 + 151.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 147.2500 97.5000 -64.0 + 148.2500 99.5000 -64.0 + 151.5000 99.7500 -64.0 + 151.7500 98.5000 -64.0 +} -64.0 +{ -64.0 + 105.2500 109.5000 -64.0 + 104.5000 110.2500 -64.0 + 99.5000 113.2500 -64.0 + 97.5000 113.2500 -64.0 + 95.5000 114.2500 -64.0 + 93.5000 114.2500 -64.0 + 88.5000 116.2500 -64.0 + 86.2500 119.5000 -64.0 + 84.2500 123.5000 -64.0 + 85.5000 123.7500 -64.0 + 87.5000 121.7500 -64.0 + 94.5000 117.7500 -64.0 + 96.5000 117.7500 -64.0 + 100.5000 115.7500 -64.0 + 104.5000 115.7500 -64.0 + 106.2500 116.5000 -64.0 + 105.5000 118.2500 -64.0 + 105.2500 121.5000 -64.0 + 107.2500 123.5000 -64.0 + 108.5000 122.7500 -64.0 + 110.5000 122.7500 -64.0 + 110.7500 118.5000 -64.0 + 109.7500 116.5000 -64.0 + 110.5000 115.7500 -64.0 + 113.5000 116.7500 -64.0 + 117.2500 118.5000 -64.0 + 117.2500 124.5000 -64.0 + 119.2500 128.5000 -64.0 + 123.2500 135.5000 -64.0 + 123.2500 140.5000 -64.0 + 121.5000 142.2500 -64.0 + 118.2500 151.5000 -64.0 + 115.5000 154.2500 -64.0 + 107.5000 159.2500 -64.0 + 101.5000 159.2500 -64.0 + 97.7500 156.5000 -64.0 + 95.5000 156.2500 -64.0 + 91.5000 154.2500 -64.0 + 91.2500 156.5000 -64.0 + 95.2500 161.5000 -64.0 + 99.2500 168.5000 -64.0 + 99.2500 172.5000 -64.0 + 96.5000 176.2500 -64.0 + 92.5000 178.2500 -64.0 + 90.5000 178.2500 -64.0 + 87.5000 177.2500 -64.0 + 85.5000 178.2500 -64.0 + 84.7500 177.5000 -64.0 + 83.5000 178.2500 -64.0 + 79.5000 178.2500 -64.0 + 73.5000 175.2500 -64.0 + 67.5000 170.2500 -64.0 + 62.7500 163.5000 -64.0 + 62.7500 161.5000 -64.0 + 61.7500 159.5000 -64.0 + 61.7500 157.5000 -64.0 + 63.7500 151.5000 -64.0 + 68.5000 146.7500 -64.0 + 70.5000 146.7500 -64.0 + 72.5000 145.7500 -64.0 + 84.2500 151.5000 -64.0 + 89.5000 151.7500 -64.0 + 89.7500 148.5000 -64.0 + 90.5000 146.7500 -64.0 + 90.7500 136.5000 -64.0 + 92.7500 131.5000 -64.0 + 97.5000 126.7500 -64.0 + 97.7500 122.5000 -64.0 + 96.5000 124.2500 -64.0 + 96.2500 126.5000 -64.0 + 89.5000 132.2500 -64.0 + 89.2500 135.5000 -64.0 + 88.5000 137.2500 -64.0 + 86.7500 135.5000 -64.0 + 84.5000 135.2500 -64.0 + 82.7500 132.5000 -64.0 + 82.7500 128.5000 -64.0 + 81.2500 131.5000 -64.0 + 80.5000 133.2500 -64.0 + 81.5000 134.7500 -64.0 + 83.5000 135.7500 -64.0 + 84.2500 137.5000 -64.0 + 88.2500 139.5000 -64.0 + 88.2500 141.5000 -64.0 + 86.5000 143.2500 -64.0 + 84.5000 143.2500 -64.0 + 84.2500 144.5000 -64.0 + 83.5000 146.2500 -64.0 + 81.5000 146.2500 -64.0 + 78.5000 143.2500 -64.0 + 76.5000 144.2500 -64.0 + 74.7500 143.5000 -64.0 + 72.5000 143.2500 -64.0 + 70.7500 142.5000 -64.0 + 69.7500 140.5000 -64.0 + 67.5000 138.2500 -64.0 + 67.2500 140.5000 -64.0 + 69.2500 142.5000 -64.0 + 68.5000 143.2500 -64.0 + 67.7500 142.5000 -64.0 + 65.5000 144.2500 -64.0 + 63.7500 142.5000 -64.0 + 63.7500 138.5000 -64.0 + 65.7500 137.5000 -64.0 + 66.7500 135.5000 -64.0 + 62.5000 135.2500 -64.0 + 60.5000 136.2500 -64.0 + 58.5000 136.2500 -64.0 + 56.5000 137.2500 -64.0 + 55.7500 136.5000 -64.0 + 55.7500 134.5000 -64.0 + 56.5000 132.7500 -64.0 + 55.7500 131.5000 -64.0 + 55.7500 129.5000 -64.0 + 53.7500 127.5000 -64.0 + 51.5000 127.2500 -64.0 + 48.5000 128.2500 -64.0 + 45.5000 132.2500 -64.0 + 45.2500 137.5000 -64.0 + 44.5000 139.2500 -64.0 + 44.2500 146.5000 -64.0 + 45.2500 148.5000 -64.0 + 45.5000 150.7500 -64.0 + 49.2500 153.5000 -64.0 + 51.2500 157.5000 -64.0 + 52.5000 157.7500 -64.0 + 55.2500 161.5000 -64.0 + 55.2500 164.5000 -64.0 + 57.5000 167.7500 -64.0 + 61.2500 176.5000 -64.0 + 62.5000 176.7500 -64.0 + 68.5000 181.7500 -64.0 + 76.5000 185.7500 -64.0 + 78.2500 186.5000 -64.0 + 81.5000 186.7500 -64.0 + 83.2500 187.5000 -64.0 + 91.5000 187.7500 -64.0 + 93.2500 188.5000 -64.0 + 102.5000 188.7500 -64.0 + 104.5000 189.7500 -64.0 + 106.5000 188.7500 -64.0 + 108.2500 189.5000 -64.0 + 112.5000 189.7500 -64.0 + 114.5000 188.7500 -64.0 + 118.5000 188.7500 -64.0 + 120.5000 187.7500 -64.0 + 124.5000 187.7500 -64.0 + 126.5000 186.7500 -64.0 + 128.5000 186.7500 -64.0 + 130.5000 185.7500 -64.0 + 132.7500 185.5000 -64.0 + 142.7500 178.5000 -64.0 + 145.5000 174.7500 -64.0 + 147.7500 168.5000 -64.0 + 150.5000 162.7500 -64.0 + 150.7500 149.5000 -64.0 + 148.7500 147.5000 -64.0 + 146.5000 147.2500 -64.0 + 146.2500 149.5000 -64.0 + 144.5000 151.2500 -64.0 + 134.5000 146.2500 -64.0 + 132.5000 148.2500 -64.0 + 130.5000 148.2500 -64.0 + 128.7500 147.5000 -64.0 + 126.7500 143.5000 -64.0 + 127.5000 141.7500 -64.0 + 126.7500 140.5000 -64.0 + 126.7500 136.5000 -64.0 + 128.5000 134.7500 -64.0 + 131.5000 134.7500 -64.0 + 131.7500 131.5000 -64.0 + 130.7500 129.5000 -64.0 + 131.7500 122.5000 -64.0 + 130.7500 119.5000 -64.0 + 128.7500 118.5000 -64.0 + 121.7500 114.5000 -64.0 + 115.5000 113.2500 -64.0 + 109.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 142.2500 114.5000 -64.0 + 141.5000 115.2500 -64.0 + 142.2500 116.5000 -64.0 + 144.5000 116.7500 -64.0 +} -64.0 +{ -64.0 + 67.2500 115.5000 -64.0 + 66.5000 116.2500 -64.0 + 66.5000 117.7500 -64.0 + 68.5000 118.7500 -64.0 + 68.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 160.2500 131.5000 -64.0 + 160.2500 132.5000 -64.0 + 159.5000 134.2500 -64.0 + 156.5000 134.2500 -64.0 + 153.5000 133.2500 -64.0 + 159.2500 145.5000 -64.0 + 163.2500 150.5000 -64.0 + 164.5000 149.7500 -64.0 + 164.7500 137.5000 -64.0 + 161.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 77.2500 139.5000 -64.0 + 82.5000 142.7500 -64.0 + 83.5000 142.2500 -64.0 + 79.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 113.7500 27.5000 -64.0 + 115.5000 26.7500 -64.0 + 117.2500 27.5000 -64.0 + 116.5000 29.2500 -64.0 +} -64.0 +{ -64.0 + 125.7500 33.5000 -64.0 + 126.5000 32.7500 -64.0 + 127.2500 33.5000 -64.0 + 126.5000 35.2500 -64.0 +} -64.0 +{ -64.0 + 132.7500 52.5000 -64.0 + 133.5000 51.7500 -64.0 + 135.2500 53.5000 -64.0 + 133.5000 54.2500 -64.0 +} -64.0 +{ -64.0 + 83.7500 57.5000 -64.0 + 85.5000 56.7500 -64.0 + 87.2500 57.5000 -64.0 + 85.5000 59.2500 -64.0 + 86.2500 62.5000 -64.0 + 84.5000 63.2500 -64.0 + 82.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 92.7500 116.5000 -64.0 + 93.5000 115.7500 -64.0 + 94.2500 116.5000 -64.0 + 93.5000 117.2500 -64.0 +} -64.0 +{ -64.0 + 119.7500 116.5000 -64.0 + 120.5000 115.7500 -64.0 + 121.2500 116.5000 -64.0 + 120.5000 117.2500 -64.0 +} -64.0 +{ -64.0 + 121.7500 117.5000 -64.0 + 122.5000 116.7500 -64.0 + 123.2500 117.5000 -64.0 + 122.5000 118.2500 -64.0 +} -64.0 +{ -64.0 + 107.7500 119.5000 -64.0 + 108.5000 118.7500 -64.0 + 109.2500 119.5000 -64.0 + 108.5000 120.2500 -64.0 +} -64.0 +{ -64.0 + 118.7500 119.5000 -64.0 + 119.5000 118.7500 -64.0 + 120.2500 119.5000 -64.0 + 124.5000 120.7500 -64.0 + 129.2500 125.5000 -64.0 + 128.5000 127.2500 -64.0 + 125.5000 125.2500 -64.0 + 123.5000 124.2500 -64.0 +} -64.0 +{ -64.0 + 126.7500 120.5000 -64.0 + 127.5000 119.7500 -64.0 + 128.2500 120.5000 -64.0 + 127.5000 121.2500 -64.0 +} -64.0 +{ -64.0 + 117.7500 121.5000 -64.0 + 118.5000 120.7500 -64.0 + 119.2500 121.5000 -64.0 + 120.2500 123.5000 -64.0 + 121.5000 123.7500 -64.0 + 123.5000 125.7500 -64.0 + 127.2500 128.5000 -64.0 + 127.2500 131.5000 -64.0 + 125.5000 133.2500 -64.0 + 123.5000 133.2500 -64.0 + 120.7500 129.5000 -64.0 + 120.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 49.7500 132.5000 -64.0 + 51.5000 131.7500 -64.0 + 53.2500 133.5000 -64.0 + 53.2500 135.5000 -64.0 + 55.2500 137.5000 -64.0 + 55.2500 139.5000 -64.0 + 51.5000 143.2500 -64.0 + 48.5000 143.2500 -64.0 + 45.7500 139.5000 -64.0 + 47.5000 135.7500 -64.0 + 49.7500 135.5000 -64.0 + 48.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 129.7500 152.5000 -64.0 + 130.5000 151.7500 -64.0 + 137.5000 151.7500 -64.0 + 142.2500 156.5000 -64.0 + 142.2500 159.5000 -64.0 + 143.2500 161.5000 -64.0 + 143.2500 166.5000 -64.0 + 141.2500 168.5000 -64.0 + 140.2500 170.5000 -64.0 + 135.2500 174.5000 -64.0 + 128.5000 179.2500 -64.0 + 126.5000 179.2500 -64.0 + 124.5000 180.2500 -64.0 + 120.5000 180.2500 -64.0 + 114.7500 177.5000 -64.0 + 111.7500 172.5000 -64.0 + 111.7500 167.5000 -64.0 + 114.5000 163.7500 -64.0 + 116.5000 162.7500 -64.0 + 122.5000 155.7500 -64.0 + 127.5000 152.7500 -64.0 +} -64.0 +{ -64.0 + 101.7500 165.5000 -64.0 + 102.5000 164.7500 -64.0 + 103.5000 165.7500 -64.0 + 105.5000 164.7500 -64.0 + 106.2500 165.5000 -64.0 + 106.2500 167.5000 -64.0 + 105.5000 169.2500 -64.0 + 103.5000 169.2500 -64.0 +} -64.0 +v 616 z -150.000000 -64.0 +{ -64.0 + 106.2500 26.5000 -64.0 + 111.2500 27.5000 -64.0 + 109.2500 28.5000 -64.0 + 107.5000 32.2500 -64.0 + 105.7500 30.5000 -64.0 + 105.7500 27.5000 -64.0 + 101.5000 27.2500 -64.0 + 102.5000 27.7500 -64.0 + 104.2500 31.5000 -64.0 + 102.5000 32.2500 -64.0 + 100.7500 30.5000 -64.0 + 100.7500 28.5000 -64.0 + 95.5000 31.2500 -64.0 + 94.7500 29.5000 -64.0 + 93.2500 29.5000 -64.0 + 91.2500 33.5000 -64.0 + 90.5000 36.7500 -64.0 + 92.5000 35.7500 -64.0 + 94.2500 37.5000 -64.0 + 95.5000 36.7500 -64.0 + 96.2500 37.5000 -64.0 + 98.5000 37.7500 -64.0 + 99.5000 39.7500 -64.0 + 99.7500 37.5000 -64.0 + 97.7500 35.5000 -64.0 + 99.5000 32.7500 -64.0 + 101.2500 33.5000 -64.0 + 101.2500 35.5000 -64.0 + 105.5000 31.7500 -64.0 + 106.2500 32.5000 -64.0 + 109.5000 32.7500 -64.0 + 112.5000 29.7500 -64.0 + 113.2500 31.5000 -64.0 + 115.5000 32.7500 -64.0 + 117.5000 31.7500 -64.0 + 120.5000 31.7500 -64.0 + 122.7500 27.5000 -64.0 + 120.7500 26.5000 -64.0 + 119.5000 27.2500 -64.0 + 117.5000 26.2500 -64.0 + 118.2500 29.5000 -64.0 + 116.5000 30.2500 -64.0 + 115.7500 28.5000 -64.0 + 112.7500 27.5000 -64.0 + 113.7500 26.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 29.5000 -64.0 + 123.5000 32.2500 -64.0 + 121.5000 32.2500 -64.0 + 122.2500 35.5000 -64.0 + 123.5000 33.7500 -64.0 + 126.5000 33.7500 -64.0 + 128.2500 34.5000 -64.0 + 129.5000 33.7500 -64.0 + 129.7500 29.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 36.5000 -64.0 + 127.2500 38.5000 -64.0 + 128.5000 37.7500 -64.0 + 130.2500 38.5000 -64.0 + 130.2500 41.5000 -64.0 + 129.5000 43.2500 -64.0 + 130.2500 46.5000 -64.0 + 133.2500 47.5000 -64.0 + 132.2500 52.5000 -64.0 + 133.5000 49.7500 -64.0 + 135.2500 50.5000 -64.0 + 135.5000 55.7500 -64.0 + 137.7500 47.5000 -64.0 + 136.7500 45.5000 -64.0 + 136.7500 43.5000 -64.0 + 132.5000 43.2500 -64.0 + 130.7500 42.5000 -64.0 + 130.7500 39.5000 -64.0 + 133.5000 36.7500 -64.0 + 132.5000 36.2500 -64.0 + 130.5000 37.2500 -64.0 +} -64.0 +{ -64.0 + 123.2500 38.5000 -64.0 + 123.2500 40.5000 -64.0 + 123.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 135.2500 39.5000 -64.0 + 134.5000 40.2500 -64.0 + 136.2500 41.5000 -64.0 + 136.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 98.2500 40.5000 -64.0 + 97.2500 41.5000 -64.0 + 98.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 43.5000 -64.0 + 87.2500 46.5000 -64.0 + 85.5000 50.2500 -64.0 + 81.5000 50.2500 -64.0 + 79.5000 51.2500 -64.0 + 80.2500 52.5000 -64.0 + 80.2500 55.5000 -64.0 + 79.5000 57.2500 -64.0 + 78.7500 56.5000 -64.0 + 78.2500 57.5000 -64.0 + 80.5000 60.7500 -64.0 + 80.7500 58.5000 -64.0 + 85.5000 53.7500 -64.0 + 86.5000 54.7500 -64.0 + 88.7500 46.5000 -64.0 + 90.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 95.2500 43.5000 -64.0 + 94.2500 44.5000 -64.0 + 93.2500 49.5000 -64.0 + 94.5000 49.7500 -64.0 + 96.5000 48.7500 -64.0 + 96.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 43.5000 -64.0 + 126.2500 44.5000 -64.0 + 124.5000 46.2500 -64.0 + 124.2500 48.5000 -64.0 + 125.2500 50.5000 -64.0 + 127.5000 50.7500 -64.0 + 126.7500 49.5000 -64.0 + 127.5000 48.7500 -64.0 + 128.2500 49.5000 -64.0 + 128.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 49.5000 -64.0 + 116.2500 50.5000 -64.0 + 117.5000 50.7500 -64.0 + 120.2500 53.5000 -64.0 + 118.5000 54.2500 -64.0 + 117.5000 54.7500 -64.0 + 119.5000 55.7500 -64.0 + 121.2500 56.5000 -64.0 + 120.2500 58.5000 -64.0 + 124.5000 58.7500 -64.0 + 124.7500 56.5000 -64.0 + 125.5000 54.7500 -64.0 + 119.7500 49.5000 -64.0 +} -64.0 +{ -64.0 + 145.2500 53.5000 -64.0 + 144.5000 54.2500 -64.0 + 142.2500 54.5000 -64.0 + 144.5000 54.7500 -64.0 + 146.5000 53.7500 -64.0 + 148.7500 53.5000 -64.0 +} -64.0 +{ -64.0 + 111.2500 56.5000 -64.0 + 110.5000 57.2500 -64.0 + 107.5000 57.2500 -64.0 + 105.5000 58.2500 -64.0 + 101.5000 58.2500 -64.0 + 100.5000 60.2500 -64.0 + 99.7500 59.5000 -64.0 + 98.5000 60.2500 -64.0 + 96.5000 60.2500 -64.0 + 94.5000 61.2500 -64.0 + 92.5000 61.2500 -64.0 + 90.7500 57.5000 -64.0 + 89.5000 58.2500 -64.0 + 89.2500 60.5000 -64.0 + 88.5000 62.2500 -64.0 + 90.2500 65.5000 -64.0 + 92.5000 65.7500 -64.0 + 97.5000 66.7500 -64.0 + 99.5000 65.7500 -64.0 + 101.5000 65.7500 -64.0 + 103.2500 66.5000 -64.0 + 127.7500 66.5000 -64.0 + 123.5000 66.2500 -64.0 + 121.7500 65.5000 -64.0 + 122.7500 63.5000 -64.0 + 118.5000 63.2500 -64.0 + 116.5000 64.2500 -64.0 + 114.5000 64.2500 -64.0 + 112.5000 65.2500 -64.0 + 101.5000 65.2500 -64.0 + 99.7500 64.5000 -64.0 + 100.5000 62.7500 -64.0 + 102.5000 62.7500 -64.0 + 104.5000 61.7500 -64.0 + 107.5000 61.7500 -64.0 + 109.5000 60.7500 -64.0 + 112.5000 60.7500 -64.0 + 114.5000 59.7500 -64.0 + 117.5000 59.7500 -64.0 + 114.5000 58.2500 -64.0 + 113.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 57.5000 -64.0 + 149.5000 58.2500 -64.0 + 143.5000 58.2500 -64.0 + 141.5000 59.2500 -64.0 + 136.5000 59.2500 -64.0 + 137.5000 59.7500 -64.0 + 139.2500 60.5000 -64.0 + 140.5000 59.7500 -64.0 + 141.2500 60.5000 -64.0 + 143.5000 60.7500 -64.0 + 144.2500 62.5000 -64.0 + 142.5000 63.2500 -64.0 + 144.2500 65.5000 -64.0 + 143.5000 66.2500 -64.0 + 141.2500 67.5000 -64.0 + 143.2500 71.5000 -64.0 + 143.2500 73.5000 -64.0 + 141.5000 74.2500 -64.0 + 146.2500 77.5000 -64.0 + 147.2500 79.5000 -64.0 + 152.2500 82.5000 -64.0 + 152.7500 81.5000 -64.0 + 153.5000 79.7500 -64.0 + 155.2500 80.5000 -64.0 + 161.5000 82.7500 -64.0 + 160.7500 81.5000 -64.0 + 156.5000 78.2500 -64.0 + 154.5000 77.2500 -64.0 + 152.7500 76.5000 -64.0 + 147.5000 76.2500 -64.0 + 145.7500 74.5000 -64.0 + 147.5000 73.7500 -64.0 + 147.7500 72.5000 -64.0 + 143.7500 70.5000 -64.0 + 142.7500 68.5000 -64.0 + 144.5000 66.7500 -64.0 + 146.5000 66.7500 -64.0 + 148.5000 65.7500 -64.0 + 155.5000 65.7500 -64.0 + 155.7500 64.5000 -64.0 + 153.7500 63.5000 -64.0 + 152.5000 64.2500 -64.0 + 150.5000 64.2500 -64.0 + 148.7500 63.5000 -64.0 + 149.5000 62.7500 -64.0 + 151.5000 62.7500 -64.0 + 153.5000 61.7500 -64.0 + 152.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 85.2500 58.5000 -64.0 + 85.2500 60.5000 -64.0 + 85.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 61.5000 -64.0 + 65.2500 62.5000 -64.0 + 75.5000 63.7500 -64.0 + 72.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 63.5000 -64.0 + 129.2500 66.5000 -64.0 + 130.5000 65.7500 -64.0 + 132.5000 66.7500 -64.0 +} -64.0 +{ -64.0 + 72.2500 65.5000 -64.0 + 70.5000 66.2500 -64.0 + 77.2500 69.5000 -64.0 + 77.5000 71.7500 -64.0 + 77.7500 68.5000 -64.0 + 75.7500 67.5000 -64.0 + 75.7500 65.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 69.5000 -64.0 + 128.2500 71.5000 -64.0 + 125.5000 74.2500 -64.0 + 92.5000 73.2500 -64.0 + 93.2500 74.5000 -64.0 + 91.5000 75.2500 -64.0 + 89.7500 73.5000 -64.0 + 91.5000 72.7500 -64.0 + 91.7500 70.5000 -64.0 + 88.5000 72.2500 -64.0 + 89.2500 74.5000 -64.0 + 87.5000 75.2500 -64.0 + 88.2500 76.5000 -64.0 + 93.5000 77.7500 -64.0 + 97.2500 81.5000 -64.0 + 100.5000 79.7500 -64.0 + 98.7500 76.5000 -64.0 + 100.5000 75.7500 -64.0 + 103.5000 76.7500 -64.0 + 105.5000 75.7500 -64.0 + 110.5000 76.7500 -64.0 + 113.5000 75.7500 -64.0 + 115.2500 76.5000 -64.0 + 114.5000 78.2500 -64.0 + 117.5000 79.7500 -64.0 + 118.2500 81.5000 -64.0 + 116.5000 83.2500 -64.0 + 116.2500 85.5000 -64.0 + 118.5000 83.7500 -64.0 + 120.5000 83.7500 -64.0 + 124.5000 81.7500 -64.0 + 125.5000 83.7500 -64.0 + 129.5000 80.7500 -64.0 + 131.5000 80.7500 -64.0 + 134.5000 77.2500 -64.0 + 132.5000 78.2500 -64.0 + 127.5000 77.2500 -64.0 + 126.7500 75.5000 -64.0 + 128.5000 73.7500 -64.0 + 130.5000 73.7500 -64.0 +} -64.0 +{ -64.0 + 75.2500 73.5000 -64.0 + 74.5000 74.2500 -64.0 + 69.5000 74.2500 -64.0 + 67.5000 75.2500 -64.0 + 61.5000 75.2500 -64.0 + 59.5000 76.2500 -64.0 + 57.5000 76.2500 -64.0 + 55.5000 77.2500 -64.0 + 53.2500 77.5000 -64.0 + 60.5000 77.7500 -64.0 + 62.5000 76.7500 -64.0 + 67.5000 76.7500 -64.0 + 69.2500 77.5000 -64.0 + 67.5000 78.2500 -64.0 + 61.5000 81.2500 -64.0 + 63.2500 82.5000 -64.0 + 61.5000 86.2500 -64.0 + 61.2500 88.5000 -64.0 + 58.2500 94.5000 -64.0 + 57.2500 99.5000 -64.0 + 54.5000 103.2500 -64.0 + 54.2500 107.5000 -64.0 + 55.2500 109.5000 -64.0 + 58.5000 109.7500 -64.0 + 59.7500 106.5000 -64.0 + 60.5000 104.7500 -64.0 + 59.7500 102.5000 -64.0 + 57.5000 106.2500 -64.0 + 56.7500 105.5000 -64.0 + 56.7500 101.5000 -64.0 + 60.7500 93.5000 -64.0 + 65.5000 85.7500 -64.0 + 67.5000 87.7500 -64.0 + 69.5000 88.7500 -64.0 + 69.7500 86.5000 -64.0 + 68.5000 86.2500 -64.0 + 66.7500 83.5000 -64.0 + 66.7500 81.5000 -64.0 + 70.5000 78.7500 -64.0 + 72.2500 79.5000 -64.0 + 77.5000 74.7500 -64.0 + 79.5000 74.7500 -64.0 + 78.5000 74.2500 -64.0 + 76.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 103.2500 82.5000 -64.0 + 103.5000 82.7500 -64.0 + 105.5000 83.7500 -64.0 + 104.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 84.5000 -64.0 + 130.5000 85.2500 -64.0 + 130.2500 87.5000 -64.0 + 131.5000 87.7500 -64.0 + 131.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 84.5000 -64.0 + 149.5000 88.2500 -64.0 + 152.2500 92.5000 -64.0 + 152.5000 94.7500 -64.0 + 152.7500 90.5000 -64.0 + 153.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 91.5000 -64.0 + 67.5000 92.2500 -64.0 + 62.2500 96.5000 -64.0 + 66.5000 96.7500 -64.0 + 68.7500 92.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 95.5000 -64.0 + 153.2500 97.5000 -64.0 + 153.7500 96.5000 -64.0 +} -64.0 +{ -64.0 + 154.2500 98.5000 -64.0 + 154.2500 99.5000 -64.0 + 155.2500 101.5000 -64.0 + 155.2500 108.5000 -64.0 + 154.5000 110.2500 -64.0 + 153.5000 109.2500 -64.0 + 153.5000 111.7500 -64.0 + 155.5000 112.7500 -64.0 + 157.5000 110.7500 -64.0 + 157.7500 108.5000 -64.0 + 156.7500 106.5000 -64.0 + 156.7500 103.5000 -64.0 +} -64.0 +{ -64.0 + 152.2500 106.5000 -64.0 + 152.2500 108.5000 -64.0 + 152.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 108.5000 -64.0 + 94.5000 114.2500 -64.0 + 91.5000 114.2500 -64.0 + 87.2500 116.5000 -64.0 + 89.5000 116.7500 -64.0 + 96.5000 114.7500 -64.0 + 97.2500 116.5000 -64.0 + 95.5000 118.2500 -64.0 + 91.5000 118.2500 -64.0 + 85.5000 121.2500 -64.0 + 84.7500 119.5000 -64.0 + 86.7500 117.5000 -64.0 + 84.5000 117.2500 -64.0 + 81.5000 120.2500 -64.0 + 83.2500 122.5000 -64.0 + 83.2500 126.5000 -64.0 + 88.5000 121.7500 -64.0 + 90.2500 122.5000 -64.0 + 89.5000 124.2500 -64.0 + 92.2500 130.5000 -64.0 + 88.5000 133.2500 -64.0 + 86.7500 132.5000 -64.0 + 86.7500 130.5000 -64.0 + 83.5000 128.2500 -64.0 + 81.5000 131.2500 -64.0 + 81.2500 134.5000 -64.0 + 87.2500 138.5000 -64.0 + 87.2500 140.5000 -64.0 + 85.5000 141.2500 -64.0 + 84.5000 143.2500 -64.0 + 85.2500 145.5000 -64.0 + 84.5000 147.2500 -64.0 + 81.5000 147.2500 -64.0 + 79.5000 144.2500 -64.0 + 77.5000 143.2500 -64.0 + 73.5000 146.2500 -64.0 + 71.5000 145.2500 -64.0 + 70.7500 143.5000 -64.0 + 66.7500 140.5000 -64.0 + 64.5000 140.2500 -64.0 + 60.5000 138.2500 -64.0 + 59.2500 139.5000 -64.0 + 56.5000 145.2500 -64.0 + 55.5000 144.2500 -64.0 + 52.5000 149.2500 -64.0 + 52.2500 151.5000 -64.0 + 53.5000 152.7500 -64.0 + 55.5000 151.7500 -64.0 + 57.2500 152.5000 -64.0 + 58.2500 161.5000 -64.0 + 63.2500 174.5000 -64.0 + 75.2500 182.5000 -64.0 + 91.5000 182.7500 -64.0 + 91.7500 181.5000 -64.0 + 93.5000 179.7500 -64.0 + 94.2500 180.5000 -64.0 + 96.5000 180.7500 -64.0 + 98.5000 178.7500 -64.0 + 100.2500 180.5000 -64.0 + 100.2500 184.5000 -64.0 + 104.2500 185.5000 -64.0 + 105.5000 184.7500 -64.0 + 107.7500 178.5000 -64.0 + 105.7500 174.5000 -64.0 + 105.7500 171.5000 -64.0 + 107.5000 169.7500 -64.0 + 110.2500 175.5000 -64.0 + 110.2500 177.5000 -64.0 + 111.5000 177.7500 -64.0 + 112.2500 179.5000 -64.0 + 116.5000 180.7500 -64.0 + 119.2500 183.5000 -64.0 + 127.5000 183.7500 -64.0 + 137.5000 178.7500 -64.0 + 143.5000 172.7500 -64.0 + 146.7500 162.5000 -64.0 + 145.7500 159.5000 -64.0 + 141.5000 157.2500 -64.0 + 140.7500 155.5000 -64.0 + 134.7500 150.5000 -64.0 + 128.5000 150.2500 -64.0 + 125.7500 147.5000 -64.0 + 125.7500 142.5000 -64.0 + 124.5000 142.2500 -64.0 + 121.2500 145.5000 -64.0 + 118.5000 151.2500 -64.0 + 109.5000 157.2500 -64.0 + 101.5000 157.2500 -64.0 + 94.7500 151.5000 -64.0 + 91.7500 146.5000 -64.0 + 91.7500 142.5000 -64.0 + 90.7500 140.5000 -64.0 + 90.7500 135.5000 -64.0 + 91.7500 132.5000 -64.0 + 97.5000 125.7500 -64.0 + 97.7500 123.5000 -64.0 + 96.5000 122.2500 -64.0 + 94.5000 125.2500 -64.0 + 92.7500 124.5000 -64.0 + 93.5000 123.7500 -64.0 + 91.7500 121.5000 -64.0 + 94.5000 119.7500 -64.0 + 96.5000 119.7500 -64.0 + 98.5000 117.7500 -64.0 + 102.5000 115.7500 -64.0 + 104.2500 116.5000 -64.0 + 105.2500 122.5000 -64.0 + 108.5000 124.7500 -64.0 + 111.5000 121.7500 -64.0 + 111.7500 117.5000 -64.0 + 113.5000 116.7500 -64.0 + 115.2500 117.5000 -64.0 + 118.2500 121.5000 -64.0 + 118.2500 124.5000 -64.0 + 121.2500 130.5000 -64.0 + 121.2500 133.5000 -64.0 + 122.2500 136.5000 -64.0 + 123.7500 136.5000 -64.0 + 124.7500 134.5000 -64.0 + 121.7500 130.5000 -64.0 + 122.5000 128.7500 -64.0 + 127.2500 135.5000 -64.0 + 127.2500 138.5000 -64.0 + 129.5000 138.7500 -64.0 + 131.5000 135.7500 -64.0 + 131.7500 126.5000 -64.0 + 133.5000 124.7500 -64.0 + 133.7500 122.5000 -64.0 + 132.7500 120.5000 -64.0 + 130.5000 122.2500 -64.0 + 131.2500 123.5000 -64.0 + 130.5000 124.2500 -64.0 + 128.7500 122.5000 -64.0 + 126.5000 122.2500 -64.0 + 124.7500 120.5000 -64.0 + 120.5000 119.2500 -64.0 + 117.7500 116.5000 -64.0 + 118.5000 114.7500 -64.0 + 128.2500 119.5000 -64.0 + 129.7500 118.5000 -64.0 + 122.7500 114.5000 -64.0 + 117.5000 113.2500 -64.0 + 110.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 142.2500 113.5000 -64.0 + 142.2500 114.5000 -64.0 + 143.5000 114.7500 -64.0 +} -64.0 +{ -64.0 + 68.2500 114.5000 -64.0 + 67.2500 116.5000 -64.0 + 69.5000 116.7500 -64.0 + 69.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 50.2500 128.5000 -64.0 + 48.5000 129.2500 -64.0 + 46.5000 133.2500 -64.0 + 46.2500 140.5000 -64.0 + 45.2500 142.5000 -64.0 + 46.2500 144.5000 -64.0 + 46.2500 147.5000 -64.0 + 47.5000 148.7500 -64.0 + 50.5000 144.7500 -64.0 + 50.7500 142.5000 -64.0 + 49.5000 142.2500 -64.0 + 46.7500 138.5000 -64.0 + 49.5000 135.7500 -64.0 + 54.5000 137.7500 -64.0 + 55.5000 134.7500 -64.0 + 53.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 158.2500 131.5000 -64.0 + 157.5000 132.2500 -64.0 + 154.2500 132.5000 -64.0 + 158.2500 140.5000 -64.0 + 161.2500 144.5000 -64.0 + 162.7500 144.5000 -64.0 + 161.7500 142.5000 -64.0 + 161.7500 138.5000 -64.0 + 162.5000 136.7500 -64.0 + 161.7500 135.5000 -64.0 + 161.7500 133.5000 -64.0 + 159.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 125.7500 30.5000 -64.0 + 126.5000 29.7500 -64.0 + 128.2500 30.5000 -64.0 + 129.2500 32.5000 -64.0 + 127.5000 33.2500 -64.0 +} -64.0 +{ -64.0 + 93.7500 35.5000 -64.0 + 94.5000 34.7500 -64.0 + 95.2500 35.5000 -64.0 + 94.5000 36.2500 -64.0 +} -64.0 +{ -64.0 + 97.7500 64.5000 -64.0 + 98.5000 63.7500 -64.0 + 99.2500 64.5000 -64.0 + 98.5000 65.2500 -64.0 +} -64.0 +{ -64.0 + 150.7500 78.5000 -64.0 + 151.5000 77.7500 -64.0 + 152.2500 78.5000 -64.0 + 151.5000 79.2500 -64.0 +} -64.0 +{ -64.0 + 118.7500 82.5000 -64.0 + 119.5000 81.7500 -64.0 + 120.2500 82.5000 -64.0 + 119.5000 83.2500 -64.0 +} -64.0 +{ -64.0 + 106.7500 118.5000 -64.0 + 108.5000 117.7500 -64.0 + 109.2500 119.5000 -64.0 + 108.5000 121.2500 -64.0 + 106.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 122.5000 122.7500 -64.0 + 125.5000 123.7500 -64.0 + 128.2500 127.5000 -64.0 + 127.5000 129.2500 -64.0 + 123.5000 124.2500 -64.0 + 121.5000 125.2500 -64.0 + 120.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 72.7500 149.5000 -64.0 + 73.5000 148.7500 -64.0 + 75.5000 149.7500 -64.0 + 78.5000 152.7500 -64.0 + 80.5000 153.7500 -64.0 + 84.5000 158.7500 -64.0 + 89.2500 165.5000 -64.0 + 89.2500 168.5000 -64.0 + 85.5000 172.2500 -64.0 + 82.5000 172.2500 -64.0 + 80.5000 173.2500 -64.0 + 79.7500 172.5000 -64.0 + 77.5000 172.2500 -64.0 + 72.5000 170.2500 -64.0 + 69.5000 167.2500 -64.0 + 67.5000 166.2500 -64.0 + 64.7500 162.5000 -64.0 + 64.7500 160.5000 -64.0 + 63.7500 158.5000 -64.0 + 63.7500 156.5000 -64.0 + 69.5000 149.7500 -64.0 +} -64.0 +{ -64.0 + 121.7500 152.5000 -64.0 + 122.5000 151.7500 -64.0 + 123.2500 152.5000 -64.0 + 122.5000 153.2500 -64.0 +} -64.0 +{ -64.0 + 128.7500 156.5000 -64.0 + 129.5000 155.7500 -64.0 + 135.5000 155.7500 -64.0 + 140.2500 159.5000 -64.0 + 140.2500 162.5000 -64.0 + 138.2500 166.5000 -64.0 + 135.5000 170.2500 -64.0 + 131.5000 173.2500 -64.0 + 127.5000 175.2500 -64.0 + 122.5000 175.2500 -64.0 + 118.7500 172.5000 -64.0 + 118.7500 169.5000 -64.0 + 119.5000 167.7500 -64.0 + 123.7500 161.5000 -64.0 + 124.7500 159.5000 -64.0 +} -64.0 +v 544 z -152.000000 -64.0 +{ -64.0 + 105.2500 26.5000 -64.0 + 104.5000 27.2500 -64.0 + 101.5000 27.2500 -64.0 + 100.2500 28.5000 -64.0 + 101.2500 30.5000 -64.0 + 101.2500 32.5000 -64.0 + 102.5000 32.7500 -64.0 + 104.5000 30.7500 -64.0 + 108.5000 30.7500 -64.0 + 112.5000 28.7500 -64.0 + 114.2500 29.5000 -64.0 + 117.5000 29.7500 -64.0 + 119.5000 27.7500 -64.0 + 122.5000 27.7500 -64.0 + 121.7500 26.5000 -64.0 + 118.5000 26.2500 -64.0 + 117.5000 28.2500 -64.0 + 114.5000 28.2500 -64.0 + 112.7500 27.5000 -64.0 + 113.7500 26.5000 -64.0 + 110.5000 26.2500 -64.0 + 112.2500 27.5000 -64.0 + 111.5000 28.2500 -64.0 + 107.5000 30.2500 -64.0 + 105.7500 28.5000 -64.0 + 106.7500 26.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 29.5000 -64.0 + 92.2500 32.5000 -64.0 + 90.5000 33.2500 -64.0 + 90.2500 36.5000 -64.0 + 92.5000 33.7500 -64.0 + 93.2500 34.5000 -64.0 + 94.5000 33.7500 -64.0 + 95.2500 34.5000 -64.0 + 94.5000 35.2500 -64.0 + 96.5000 36.7500 -64.0 + 96.7500 34.5000 -64.0 + 98.5000 32.7500 -64.0 + 98.5000 30.2500 -64.0 + 94.5000 32.2500 -64.0 +} -64.0 +{ -64.0 + 126.2500 29.5000 -64.0 + 126.2500 30.5000 -64.0 + 127.2500 32.5000 -64.0 + 128.7500 32.5000 -64.0 + 130.5000 29.2500 -64.0 + 128.5000 30.2500 -64.0 +} -64.0 +{ -64.0 + 131.2500 32.5000 -64.0 + 129.2500 33.5000 -64.0 + 132.5000 33.7500 -64.0 + 133.7500 32.5000 -64.0 +} -64.0 +{ -64.0 + 99.2500 33.5000 -64.0 + 99.2500 36.5000 -64.0 + 97.5000 37.7500 -64.0 + 102.5000 38.7500 -64.0 + 99.7500 36.5000 -64.0 + 100.7500 33.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 35.5000 -64.0 + 129.5000 36.7500 -64.0 + 132.5000 35.7500 -64.0 + 133.2500 37.5000 -64.0 + 135.7500 35.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 37.5000 -64.0 + 122.2500 39.5000 -64.0 + 122.7500 38.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 38.5000 -64.0 + 91.2500 40.5000 -64.0 + 91.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 39.5000 -64.0 + 133.2500 40.5000 -64.0 + 135.5000 40.7500 -64.0 + 136.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 42.5000 -64.0 + 87.5000 47.2500 -64.0 + 88.2500 49.5000 -64.0 + 90.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 95.2500 43.5000 -64.0 + 95.2500 44.5000 -64.0 + 96.5000 44.7500 -64.0 + 97.2500 46.5000 -64.0 + 96.5000 48.2500 -64.0 + 94.2500 49.5000 -64.0 + 96.5000 49.7500 -64.0 + 98.2500 50.5000 -64.0 + 92.5000 55.2500 -64.0 + 90.5000 56.2500 -64.0 + 90.5000 57.7500 -64.0 + 92.5000 56.7500 -64.0 + 95.5000 56.7500 -64.0 + 107.5000 50.7500 -64.0 + 109.5000 50.7500 -64.0 + 109.7500 49.5000 -64.0 + 108.5000 49.2500 -64.0 + 106.7500 47.5000 -64.0 + 102.5000 47.2500 -64.0 + 98.5000 45.2500 -64.0 +} -64.0 +{ -64.0 + 133.2500 43.5000 -64.0 + 134.2500 45.5000 -64.0 + 135.5000 44.7500 -64.0 + 134.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 45.5000 -64.0 + 137.5000 47.2500 -64.0 + 134.5000 47.2500 -64.0 + 136.2500 48.5000 -64.0 + 135.2500 50.5000 -64.0 + 137.2500 54.5000 -64.0 + 136.2500 55.5000 -64.0 + 142.5000 55.7500 -64.0 + 143.7500 54.5000 -64.0 + 139.5000 54.2500 -64.0 + 137.7500 53.5000 -64.0 + 136.7500 51.5000 -64.0 + 144.5000 47.7500 -64.0 + 144.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 46.5000 -64.0 + 114.2500 47.5000 -64.0 + 115.7500 46.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 46.5000 -64.0 + 121.5000 47.2500 -64.0 + 119.2500 47.5000 -64.0 + 122.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 48.5000 -64.0 + 121.2500 51.5000 -64.0 + 121.2500 53.5000 -64.0 + 119.5000 54.2500 -64.0 + 116.5000 53.2500 -64.0 + 114.5000 54.2500 -64.0 + 113.7500 53.5000 -64.0 + 114.7500 52.5000 -64.0 + 111.5000 52.2500 -64.0 + 112.2500 54.5000 -64.0 + 105.2500 58.5000 -64.0 + 107.5000 58.7500 -64.0 + 114.5000 56.7500 -64.0 + 115.5000 57.7500 -64.0 + 118.5000 56.7500 -64.0 + 122.5000 53.7500 -64.0 + 124.5000 54.7500 -64.0 + 123.7500 53.5000 -64.0 + 125.7500 50.5000 -64.0 + 122.5000 50.2500 -64.0 + 118.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 50.5000 -64.0 + 70.5000 51.2500 -64.0 + 74.5000 56.7500 -64.0 + 76.5000 57.7500 -64.0 + 75.7500 56.5000 -64.0 + 76.5000 54.7500 -64.0 + 80.2500 56.5000 -64.0 + 85.5000 56.7500 -64.0 + 87.5000 54.7500 -64.0 + 86.5000 53.2500 -64.0 + 82.5000 56.2500 -64.0 + 80.7500 55.5000 -64.0 + 79.7500 53.5000 -64.0 + 74.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 57.5000 -64.0 + 120.2500 58.5000 -64.0 + 125.5000 58.7500 -64.0 + 124.7500 57.5000 -64.0 +} -64.0 +{ -64.0 + 77.2500 58.5000 -64.0 + 76.5000 59.2500 -64.0 + 73.5000 59.2500 -64.0 + 75.2500 60.5000 -64.0 + 78.5000 60.7500 -64.0 + 78.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 148.2500 58.5000 -64.0 + 146.5000 60.2500 -64.0 + 143.5000 60.2500 -64.0 + 145.2500 61.5000 -64.0 + 144.5000 62.2500 -64.0 + 140.2500 62.5000 -64.0 + 141.2500 64.5000 -64.0 + 140.2500 65.5000 -64.0 + 141.2500 67.5000 -64.0 + 143.5000 67.7500 -64.0 + 145.2500 69.5000 -64.0 + 144.5000 70.2500 -64.0 + 138.2500 70.5000 -64.0 + 142.5000 70.7500 -64.0 + 144.2500 71.5000 -64.0 + 143.5000 72.2500 -64.0 + 140.5000 72.7500 -64.0 + 146.2500 75.5000 -64.0 + 149.5000 75.7500 -64.0 + 155.2500 78.5000 -64.0 + 154.5000 80.2500 -64.0 + 147.5000 77.2500 -64.0 + 147.2500 78.5000 -64.0 + 151.5000 81.7500 -64.0 + 155.5000 83.7500 -64.0 + 157.5000 81.7500 -64.0 + 159.2500 82.5000 -64.0 + 163.5000 82.7500 -64.0 + 160.5000 81.2500 -64.0 + 156.7500 77.5000 -64.0 + 157.7500 76.5000 -64.0 + 152.7500 73.5000 -64.0 + 150.5000 73.2500 -64.0 + 148.7500 71.5000 -64.0 + 150.5000 69.7500 -64.0 + 152.7500 69.5000 -64.0 + 144.7500 66.5000 -64.0 + 145.5000 65.7500 -64.0 + 144.7500 64.5000 -64.0 + 145.5000 63.7500 -64.0 + 149.5000 63.7500 -64.0 + 150.5000 61.7500 -64.0 + 153.5000 61.7500 -64.0 + 153.7500 60.5000 -64.0 + 150.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 59.5000 -64.0 + 93.2500 60.5000 -64.0 + 91.2500 62.5000 -64.0 + 93.5000 62.7500 -64.0 + 95.2500 63.5000 -64.0 + 97.5000 62.7500 -64.0 + 101.2500 64.5000 -64.0 + 108.5000 64.7500 -64.0 + 112.5000 66.7500 -64.0 + 114.5000 65.7500 -64.0 + 116.5000 65.7500 -64.0 + 118.5000 64.7500 -64.0 + 125.5000 64.7500 -64.0 + 126.7500 62.5000 -64.0 + 118.5000 62.2500 -64.0 + 120.2500 63.5000 -64.0 + 119.5000 64.2500 -64.0 + 116.5000 63.2500 -64.0 + 114.7500 62.5000 -64.0 + 95.5000 62.2500 -64.0 + 93.7500 61.5000 -64.0 + 95.5000 60.7500 -64.0 +} -64.0 +{ -64.0 + 76.2500 63.5000 -64.0 + 70.2500 67.5000 -64.0 + 76.5000 67.7500 -64.0 + 78.5000 68.7500 -64.0 + 78.7500 65.5000 -64.0 + 77.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 63.5000 -64.0 + 128.5000 64.2500 -64.0 + 129.5000 65.7500 -64.0 + 131.5000 66.7500 -64.0 + 130.7500 65.5000 -64.0 + 130.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 67.5000 -64.0 + 128.5000 68.2500 -64.0 + 122.5000 68.2500 -64.0 + 123.2500 69.5000 -64.0 + 125.5000 68.7500 -64.0 + 130.5000 69.7500 -64.0 +} -64.0 +{ -64.0 + 76.2500 69.5000 -64.0 + 74.5000 71.7500 -64.0 + 76.5000 72.7500 -64.0 + 79.5000 71.7500 -64.0 + 78.5000 71.2500 -64.0 + 77.7500 69.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 70.5000 -64.0 + 96.2500 74.5000 -64.0 + 94.5000 75.2500 -64.0 + 91.5000 74.2500 -64.0 + 90.5000 72.2500 -64.0 + 87.5000 76.2500 -64.0 + 86.7500 75.5000 -64.0 + 86.2500 76.5000 -64.0 + 90.5000 81.7500 -64.0 + 91.5000 76.7500 -64.0 + 97.2500 82.5000 -64.0 + 98.2500 84.5000 -64.0 + 101.2500 85.5000 -64.0 + 102.5000 84.7500 -64.0 + 105.5000 84.7500 -64.0 + 106.2500 86.5000 -64.0 + 107.5000 86.7500 -64.0 + 110.5000 85.7500 -64.0 + 110.7500 84.5000 -64.0 + 105.7500 83.5000 -64.0 + 105.7500 80.5000 -64.0 + 101.7500 74.5000 -64.0 + 98.5000 73.2500 -64.0 + 94.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 71.5000 -64.0 + 131.5000 72.2500 -64.0 + 127.5000 72.2500 -64.0 + 129.2500 73.5000 -64.0 + 131.5000 73.7500 -64.0 + 134.5000 74.7500 -64.0 +} -64.0 +{ -64.0 + 121.2500 72.5000 -64.0 + 117.5000 75.2500 -64.0 + 118.5000 75.7500 -64.0 + 119.2500 77.5000 -64.0 + 120.5000 76.7500 -64.0 + 121.2500 77.5000 -64.0 + 123.5000 75.7500 -64.0 + 122.5000 75.2500 -64.0 +} -64.0 +{ -64.0 + 104.2500 73.5000 -64.0 + 107.2500 75.5000 -64.0 + 108.7500 75.5000 -64.0 + 109.7500 73.5000 -64.0 + 108.5000 73.2500 -64.0 + 106.5000 74.2500 -64.0 + 105.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 76.5000 -64.0 + 124.2500 78.5000 -64.0 + 125.7500 76.5000 -64.0 +} -64.0 +{ -64.0 + 69.2500 77.5000 -64.0 + 66.5000 79.2500 -64.0 + 64.5000 79.2500 -64.0 + 60.5000 82.2500 -64.0 + 61.5000 82.7500 -64.0 + 63.5000 81.7500 -64.0 + 64.2500 82.5000 -64.0 + 62.2500 86.5000 -64.0 + 54.2500 106.5000 -64.0 + 55.2500 108.5000 -64.0 + 58.7500 108.5000 -64.0 + 61.5000 102.7500 -64.0 + 61.7500 100.5000 -64.0 + 60.5000 100.2500 -64.0 + 60.2500 101.5000 -64.0 + 58.5000 103.2500 -64.0 + 56.7500 102.5000 -64.0 + 61.5000 92.7500 -64.0 + 61.7500 90.5000 -64.0 + 64.7500 86.5000 -64.0 + 66.5000 85.7500 -64.0 + 68.2500 86.5000 -64.0 + 68.2500 88.5000 -64.0 + 70.2500 89.5000 -64.0 + 64.5000 94.2500 -64.0 + 62.5000 94.2500 -64.0 + 62.2500 95.5000 -64.0 + 66.5000 96.7500 -64.0 + 66.7500 95.5000 -64.0 + 69.7500 92.5000 -64.0 + 70.7500 90.5000 -64.0 + 71.5000 87.2500 -64.0 + 69.5000 86.2500 -64.0 + 65.7500 80.5000 -64.0 + 71.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 151.2500 85.5000 -64.0 + 148.5000 88.2500 -64.0 + 151.2500 90.5000 -64.0 + 152.2500 95.5000 -64.0 + 150.5000 96.2500 -64.0 + 154.2500 99.5000 -64.0 + 154.2500 104.5000 -64.0 + 153.5000 106.2500 -64.0 + 151.5000 103.2500 -64.0 + 151.2500 105.5000 -64.0 + 154.2500 111.5000 -64.0 + 156.5000 111.7500 -64.0 + 156.7500 104.5000 -64.0 + 155.7500 102.5000 -64.0 + 155.7500 100.5000 -64.0 + 153.7500 96.5000 -64.0 + 153.7500 94.5000 -64.0 + 152.7500 92.5000 -64.0 + 152.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 146.2500 89.5000 -64.0 + 143.5000 91.2500 -64.0 + 144.2500 92.5000 -64.0 + 147.7500 89.5000 -64.0 +} -64.0 +{ -64.0 + 146.2500 96.5000 -64.0 + 146.5000 96.7500 -64.0 + 148.5000 97.7500 -64.0 + 148.7500 96.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 107.5000 -64.0 + 105.5000 108.2500 -64.0 + 94.5000 114.2500 -64.0 + 92.2500 114.5000 -64.0 + 97.5000 114.7500 -64.0 + 99.2500 115.5000 -64.0 + 96.5000 118.2500 -64.0 + 88.5000 122.2500 -64.0 + 86.5000 122.2500 -64.0 + 83.5000 123.2500 -64.0 + 81.7500 120.5000 -64.0 + 82.7500 118.5000 -64.0 + 80.5000 118.2500 -64.0 + 78.5000 120.7500 -64.0 + 82.2500 123.5000 -64.0 + 82.2500 126.5000 -64.0 + 80.2500 132.5000 -64.0 + 81.2500 135.5000 -64.0 + 84.2500 137.5000 -64.0 + 90.5000 134.7500 -64.0 + 90.7500 132.5000 -64.0 + 89.5000 131.2500 -64.0 + 87.5000 130.2500 -64.0 + 85.7500 129.5000 -64.0 + 87.7500 125.5000 -64.0 + 94.5000 121.7500 -64.0 + 96.5000 121.7500 -64.0 + 102.5000 114.7500 -64.0 + 103.2500 116.5000 -64.0 + 102.2500 118.5000 -64.0 + 103.2500 121.5000 -64.0 + 106.2500 124.5000 -64.0 + 110.7500 124.5000 -64.0 + 113.7500 118.5000 -64.0 + 114.5000 116.7500 -64.0 + 117.2500 119.5000 -64.0 + 117.5000 122.7500 -64.0 + 119.5000 123.7500 -64.0 + 123.2500 126.5000 -64.0 + 123.2500 128.5000 -64.0 + 124.2500 130.5000 -64.0 + 122.5000 131.2500 -64.0 + 121.5000 133.2500 -64.0 + 121.2500 135.5000 -64.0 + 126.5000 138.7500 -64.0 + 128.5000 137.7500 -64.0 + 130.7500 137.5000 -64.0 + 132.7500 133.5000 -64.0 + 131.7500 131.5000 -64.0 + 131.7500 127.5000 -64.0 + 133.5000 123.7500 -64.0 + 136.5000 123.7500 -64.0 + 136.7500 122.5000 -64.0 + 133.7500 120.5000 -64.0 + 131.2500 125.5000 -64.0 + 129.5000 126.2500 -64.0 + 125.7500 123.5000 -64.0 + 124.7500 121.5000 -64.0 + 123.5000 121.2500 -64.0 + 115.7500 115.5000 -64.0 + 116.5000 113.7500 -64.0 + 118.5000 114.7500 -64.0 + 123.5000 115.7500 -64.0 + 127.2500 118.5000 -64.0 + 129.5000 118.7500 -64.0 + 127.5000 117.2500 -64.0 + 113.5000 110.2500 -64.0 + 109.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 69.2500 113.5000 -64.0 + 68.5000 114.7500 -64.0 + 70.5000 115.7500 -64.0 + 70.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 115.5000 -64.0 + 85.5000 116.2500 -64.0 + 85.2500 117.5000 -64.0 + 90.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 51.2500 129.5000 -64.0 + 49.2500 130.5000 -64.0 + 47.5000 134.2500 -64.0 + 47.2500 142.5000 -64.0 + 48.2500 144.5000 -64.0 + 50.5000 142.7500 -64.0 + 53.5000 137.7500 -64.0 + 53.7500 131.5000 -64.0 + 52.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 141.5000 -64.0 + 87.5000 142.2500 -64.0 + 86.5000 145.2500 -64.0 + 86.2500 149.5000 -64.0 + 84.5000 151.2500 -64.0 + 81.7500 148.5000 -64.0 + 77.5000 148.2500 -64.0 + 76.5000 150.2500 -64.0 + 74.5000 150.2500 -64.0 + 72.5000 151.2500 -64.0 + 71.7500 150.5000 -64.0 + 68.5000 150.2500 -64.0 + 66.7500 146.5000 -64.0 + 62.5000 143.2500 -64.0 + 60.5000 144.2500 -64.0 + 60.2500 151.5000 -64.0 + 61.2500 153.5000 -64.0 + 61.2500 156.5000 -64.0 + 63.2500 160.5000 -64.0 + 64.2500 168.5000 -64.0 + 66.2500 172.5000 -64.0 + 71.2500 175.5000 -64.0 + 73.5000 174.7500 -64.0 + 80.5000 176.7500 -64.0 + 83.5000 175.7500 -64.0 + 85.5000 172.7500 -64.0 + 89.5000 170.7500 -64.0 + 89.7500 168.5000 -64.0 + 91.5000 167.7500 -64.0 + 93.2500 168.5000 -64.0 + 96.5000 167.7500 -64.0 + 101.5000 168.7500 -64.0 + 104.2500 171.5000 -64.0 + 107.5000 166.7500 -64.0 + 109.5000 165.7500 -64.0 + 112.5000 166.7500 -64.0 + 115.5000 169.7500 -64.0 + 117.5000 170.7500 -64.0 + 118.2500 172.5000 -64.0 + 121.5000 172.7500 -64.0 + 123.5000 171.7500 -64.0 + 126.2500 175.5000 -64.0 + 131.5000 175.7500 -64.0 + 137.5000 172.7500 -64.0 + 140.7500 168.5000 -64.0 + 139.7500 166.5000 -64.0 + 139.7500 163.5000 -64.0 + 136.7500 159.5000 -64.0 + 130.5000 154.2500 -64.0 + 127.5000 155.2500 -64.0 + 125.7500 154.5000 -64.0 + 126.7500 151.5000 -64.0 + 124.7500 150.5000 -64.0 + 121.5000 150.2500 -64.0 + 119.5000 152.2500 -64.0 + 108.5000 159.2500 -64.0 + 105.7500 157.5000 -64.0 + 100.5000 156.2500 -64.0 + 97.5000 153.2500 -64.0 + 95.5000 152.2500 -64.0 + 90.7500 144.5000 -64.0 + 90.7500 142.5000 -64.0 +} -64.0 +{ -64.0 + 122.7500 51.5000 -64.0 + 123.5000 50.7500 -64.0 + 124.2500 51.5000 -64.0 + 123.5000 52.2500 -64.0 +} -64.0 +{ -64.0 + 121.7500 63.5000 -64.0 + 122.5000 62.7500 -64.0 + 124.2500 63.5000 -64.0 + 123.5000 64.2500 -64.0 +} -64.0 +{ -64.0 + 107.7500 118.5000 -64.0 + 108.5000 117.7500 -64.0 + 110.5000 117.7500 -64.0 + 111.2500 119.5000 -64.0 + 109.5000 121.2500 -64.0 + 107.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 88.7500 153.5000 -64.0 + 90.5000 152.7500 -64.0 + 93.2500 156.5000 -64.0 + 92.5000 158.2500 -64.0 + 90.5000 158.2500 -64.0 + 88.7500 156.5000 -64.0 +} -64.0 +{ -64.0 + 120.7500 156.5000 -64.0 + 121.5000 155.7500 -64.0 + 122.2500 156.5000 -64.0 + 121.5000 157.2500 -64.0 +} -64.0 +{ -64.0 + 71.7500 160.5000 -64.0 + 73.5000 159.7500 -64.0 + 75.2500 161.5000 -64.0 + 74.5000 163.2500 -64.0 + 73.7500 162.5000 -64.0 + 72.5000 163.2500 -64.0 + 71.7500 162.5000 -64.0 +} -64.0 +v 350 z -154.000000 -64.0 +{ -64.0 + 105.2500 26.5000 -64.0 + 103.5000 27.2500 -64.0 + 105.2500 28.5000 -64.0 + 107.5000 28.7500 -64.0 + 105.7500 27.5000 -64.0 + 106.5000 26.7500 -64.0 + 108.2500 27.5000 -64.0 + 114.5000 27.7500 -64.0 + 116.5000 26.7500 -64.0 +} -64.0 +{ -64.0 + 122.2500 27.5000 -64.0 + 123.2500 28.5000 -64.0 + 123.7500 27.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 28.5000 -64.0 + 100.2500 29.5000 -64.0 + 102.5000 29.7500 -64.0 +} -64.0 +{ -64.0 + 97.2500 30.5000 -64.0 + 98.2500 31.5000 -64.0 + 98.5000 33.7500 -64.0 + 98.7500 30.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 30.5000 -64.0 + 126.2500 33.5000 -64.0 + 128.5000 33.7500 -64.0 + 128.7500 32.5000 -64.0 + 127.7500 30.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 34.5000 -64.0 + 96.2500 35.5000 -64.0 + 97.5000 35.7500 -64.0 + 97.7500 34.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 36.5000 -64.0 + 91.2500 38.5000 -64.0 + 92.5000 37.7500 -64.0 + 94.2500 38.5000 -64.0 + 94.2500 40.5000 -64.0 + 92.2500 41.5000 -64.0 + 94.5000 41.7500 -64.0 + 94.7500 38.5000 -64.0 + 93.7500 36.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 36.5000 -64.0 + 129.5000 37.2500 -64.0 + 130.2500 38.5000 -64.0 + 130.2500 41.5000 -64.0 + 131.2500 43.5000 -64.0 + 130.2500 44.5000 -64.0 + 131.2500 46.5000 -64.0 + 130.5000 48.2500 -64.0 + 126.7500 46.5000 -64.0 + 125.5000 47.2500 -64.0 + 127.2500 49.5000 -64.0 + 129.5000 48.7500 -64.0 + 132.5000 49.7500 -64.0 + 135.2500 53.5000 -64.0 + 135.2500 55.5000 -64.0 + 134.2500 58.5000 -64.0 + 135.7500 57.5000 -64.0 + 136.7500 55.5000 -64.0 + 135.7500 52.5000 -64.0 + 131.7500 47.5000 -64.0 + 133.7500 43.5000 -64.0 + 134.5000 41.7500 -64.0 + 134.5000 40.2500 -64.0 + 132.5000 41.2500 -64.0 + 130.7500 40.5000 -64.0 + 130.7500 38.5000 -64.0 + 132.5000 37.7500 -64.0 + 132.7500 36.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 39.5000 -64.0 + 96.2500 40.5000 -64.0 + 97.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 95.2500 45.5000 -64.0 + 94.5000 46.2500 -64.0 + 94.5000 47.7500 -64.0 + 96.5000 48.7500 -64.0 + 96.7500 47.5000 -64.0 + 98.5000 45.7500 -64.0 + 100.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 52.5000 -64.0 + 126.2500 53.5000 -64.0 + 126.7500 54.5000 -64.0 + 127.7500 52.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 53.5000 -64.0 + 114.2500 54.5000 -64.0 + 118.5000 54.7500 -64.0 + 121.7500 53.5000 -64.0 + 119.5000 53.2500 -64.0 + 117.5000 54.2500 -64.0 +} -64.0 +{ -64.0 + 85.2500 54.5000 -64.0 + 82.5000 56.2500 -64.0 + 80.7500 55.5000 -64.0 + 76.5000 55.2500 -64.0 + 76.2500 56.5000 -64.0 + 81.2500 60.5000 -64.0 + 83.5000 56.7500 -64.0 + 86.5000 56.7500 -64.0 + 86.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 56.5000 -64.0 + 89.2500 57.5000 -64.0 + 90.5000 56.7500 -64.0 + 91.2500 57.5000 -64.0 + 91.7500 56.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 59.5000 -64.0 + 126.5000 61.2500 -64.0 + 124.5000 61.2500 -64.0 + 124.2500 62.5000 -64.0 + 130.7500 61.5000 -64.0 + 128.5000 61.2500 -64.0 +} -64.0 +{ -64.0 + 91.2500 62.5000 -64.0 + 90.2500 63.5000 -64.0 + 95.5000 63.7500 -64.0 +} -64.0 +{ -64.0 + 83.2500 64.5000 -64.0 + 81.5000 65.7500 -64.0 + 83.5000 66.7500 -64.0 + 84.5000 64.7500 -64.0 + 87.5000 65.7500 -64.0 + 86.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 88.2500 66.5000 -64.0 + 89.2500 68.5000 -64.0 + 88.5000 70.2500 -64.0 + 86.7500 69.5000 -64.0 + 85.5000 71.2500 -64.0 + 83.5000 71.2500 -64.0 + 84.2500 72.5000 -64.0 + 87.5000 72.7500 -64.0 + 90.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 65.2500 82.5000 -64.0 + 59.5000 92.2500 -64.0 + 55.5000 102.2500 -64.0 + 55.5000 107.7500 -64.0 + 57.5000 108.7500 -64.0 + 62.5000 100.7500 -64.0 + 61.7500 99.5000 -64.0 + 58.5000 105.2500 -64.0 + 57.7500 104.5000 -64.0 + 57.7500 101.5000 -64.0 + 61.5000 93.7500 -64.0 + 61.7500 91.5000 -64.0 + 65.7500 85.5000 -64.0 + 67.5000 84.7500 -64.0 + 70.2500 87.5000 -64.0 + 70.2500 89.5000 -64.0 + 66.5000 93.2500 -64.0 + 63.5000 93.2500 -64.0 + 63.2500 94.5000 -64.0 + 64.5000 94.7500 -64.0 + 65.2500 96.5000 -64.0 + 70.5000 92.7500 -64.0 + 73.5000 87.7500 -64.0 + 71.7500 85.5000 -64.0 + 69.5000 85.2500 -64.0 + 67.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 85.5000 -64.0 + 147.2500 87.5000 -64.0 + 142.5000 89.2500 -64.0 + 142.2500 91.5000 -64.0 + 143.2500 94.5000 -64.0 + 149.2500 100.5000 -64.0 + 152.2500 106.5000 -64.0 + 153.2500 111.5000 -64.0 + 154.5000 111.7500 -64.0 + 156.5000 110.7500 -64.0 + 156.7500 103.5000 -64.0 + 155.7500 101.5000 -64.0 + 155.7500 99.5000 -64.0 + 153.7500 95.5000 -64.0 + 153.7500 92.5000 -64.0 + 151.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 107.5000 -64.0 + 106.5000 108.2500 -64.0 + 100.5000 111.2500 -64.0 + 98.5000 111.2500 -64.0 + 92.5000 114.2500 -64.0 + 90.5000 114.2500 -64.0 + 86.5000 116.2500 -64.0 + 84.5000 116.2500 -64.0 + 84.2500 117.5000 -64.0 + 85.5000 116.7500 -64.0 + 87.5000 116.7500 -64.0 + 91.5000 114.7500 -64.0 + 96.5000 114.7500 -64.0 + 98.2500 115.5000 -64.0 + 97.2500 118.5000 -64.0 + 94.5000 121.2500 -64.0 + 92.5000 121.2500 -64.0 + 90.5000 122.2500 -64.0 + 90.5000 123.7500 -64.0 + 92.5000 122.7500 -64.0 + 96.5000 122.7500 -64.0 + 98.5000 121.7500 -64.0 + 98.7500 118.5000 -64.0 + 99.7500 115.5000 -64.0 + 102.5000 113.7500 -64.0 + 103.2500 114.5000 -64.0 + 103.2500 116.5000 -64.0 + 102.2500 119.5000 -64.0 + 103.2500 121.5000 -64.0 + 104.5000 123.7500 -64.0 + 108.5000 125.7500 -64.0 + 112.5000 122.7500 -64.0 + 112.7500 120.5000 -64.0 + 113.5000 118.7500 -64.0 + 112.7500 117.5000 -64.0 + 112.7500 115.5000 -64.0 + 114.5000 114.7500 -64.0 + 116.2500 116.5000 -64.0 + 116.2500 120.5000 -64.0 + 117.2500 123.5000 -64.0 + 119.2500 124.5000 -64.0 + 120.5000 123.7500 -64.0 + 122.5000 122.7500 -64.0 + 123.2500 124.5000 -64.0 + 121.5000 126.2500 -64.0 + 121.2500 133.5000 -64.0 + 123.2500 137.5000 -64.0 + 129.5000 137.7500 -64.0 + 132.5000 134.7500 -64.0 + 132.7500 131.5000 -64.0 + 130.7500 127.5000 -64.0 + 132.7500 123.5000 -64.0 + 131.5000 123.2500 -64.0 + 131.2500 124.5000 -64.0 + 129.5000 126.2500 -64.0 + 128.5000 125.2500 -64.0 + 128.2500 127.5000 -64.0 + 129.2500 129.5000 -64.0 + 129.2500 133.5000 -64.0 + 127.5000 134.2500 -64.0 + 125.7500 133.5000 -64.0 + 125.7500 131.5000 -64.0 + 127.5000 129.2500 -64.0 + 125.5000 128.2500 -64.0 + 124.7500 126.5000 -64.0 + 125.7500 123.5000 -64.0 + 123.7500 121.5000 -64.0 + 121.5000 121.2500 -64.0 + 117.7500 118.5000 -64.0 + 117.7500 115.5000 -64.0 + 119.5000 114.7500 -64.0 + 124.5000 115.7500 -64.0 + 121.7500 113.5000 -64.0 + 119.5000 113.2500 -64.0 + 116.5000 112.2500 -64.0 + 111.5000 110.2500 -64.0 + 108.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 70.2500 112.5000 -64.0 + 70.2500 114.5000 -64.0 + 71.5000 114.7500 -64.0 + 71.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 125.2500 116.5000 -64.0 + 125.5000 116.7500 -64.0 + 127.5000 117.7500 -64.0 + 130.2500 120.5000 -64.0 + 133.5000 120.7500 -64.0 + 134.5000 120.2500 -64.0 + 132.5000 119.2500 -64.0 + 126.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 77.2500 119.5000 -64.0 + 75.2500 122.5000 -64.0 + 76.5000 121.7500 -64.0 + 81.5000 121.7500 -64.0 + 80.5000 121.2500 -64.0 + 79.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 122.5000 -64.0 + 136.2500 123.5000 -64.0 + 138.2500 124.5000 -64.0 + 139.7500 124.5000 -64.0 + 138.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 123.5000 -64.0 + 80.5000 130.2500 -64.0 + 80.2500 132.5000 -64.0 + 82.2500 136.5000 -64.0 + 87.5000 136.7500 -64.0 + 90.5000 131.7500 -64.0 + 88.7500 129.5000 -64.0 + 88.7500 125.5000 -64.0 + 86.5000 125.2500 -64.0 +} -64.0 +{ -64.0 + 139.2500 131.5000 -64.0 + 138.5000 132.2500 -64.0 + 139.5000 132.7500 -64.0 + 140.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 50.2500 134.5000 -64.0 + 49.5000 136.2500 -64.0 + 49.2500 140.5000 -64.0 + 50.5000 140.7500 -64.0 + 52.5000 138.7500 -64.0 + 52.7500 136.5000 -64.0 + 51.7500 134.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 148.5000 -64.0 + 89.5000 150.2500 -64.0 + 87.5000 150.2500 -64.0 + 87.2500 152.5000 -64.0 + 84.5000 154.2500 -64.0 + 86.2500 158.5000 -64.0 + 87.5000 157.7500 -64.0 + 88.2500 158.5000 -64.0 + 88.2500 160.5000 -64.0 + 93.2500 161.5000 -64.0 + 95.5000 160.7500 -64.0 + 98.7500 156.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 153.5000 -64.0 + 115.2500 156.5000 -64.0 + 114.2500 158.5000 -64.0 + 117.5000 159.7500 -64.0 + 119.5000 158.7500 -64.0 + 121.5000 158.7500 -64.0 + 123.7500 155.5000 -64.0 + 122.7500 153.5000 -64.0 +} -64.0 +{ -64.0 + 65.2500 157.5000 -64.0 + 65.2500 158.5000 -64.0 + 66.2500 160.5000 -64.0 + 66.2500 163.5000 -64.0 + 67.7500 161.5000 -64.0 + 66.7500 158.5000 -64.0 +} -64.0 +{ -64.0 + 71.2500 160.5000 -64.0 + 71.2500 166.5000 -64.0 + 74.5000 166.7500 -64.0 + 76.7500 163.5000 -64.0 + 73.7500 160.5000 -64.0 +} -64.0 +{ -64.0 + 104.2500 161.5000 -64.0 + 103.2500 162.5000 -64.0 + 104.2500 165.5000 -64.0 + 105.5000 164.7500 -64.0 + 105.7500 161.5000 -64.0 +} -64.0 +{ -64.0 + 148.5000 87.7500 -64.0 + 149.2500 88.5000 -64.0 + 151.2500 92.5000 -64.0 + 151.2500 94.5000 -64.0 + 154.2500 100.5000 -64.0 + 154.2500 104.5000 -64.0 + 153.5000 106.2500 -64.0 + 150.7500 101.5000 -64.0 + 150.7500 99.5000 -64.0 + 148.7500 98.5000 -64.0 + 148.7500 96.5000 -64.0 + 145.7500 93.5000 -64.0 + 144.7500 91.5000 -64.0 +} -64.0 +{ -64.0 + 108.7500 116.5000 -64.0 + 109.5000 115.7500 -64.0 + 111.2500 117.5000 -64.0 + 110.5000 119.2500 -64.0 + 109.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 104.7500 117.5000 -64.0 + 105.5000 116.7500 -64.0 + 107.2500 117.5000 -64.0 + 106.5000 119.2500 -64.0 + 108.2500 121.5000 -64.0 + 107.5000 122.2500 -64.0 + 104.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 82.7500 131.5000 -64.0 + 84.5000 130.7500 -64.0 + 85.2500 132.5000 -64.0 + 83.5000 133.2500 -64.0 +} -64.0 +v 204 z -156.000000 -64.0 +{ -64.0 + 89.2500 58.5000 -64.0 + 88.5000 59.2500 -64.0 + 88.5000 60.7500 -64.0 + 90.5000 61.7500 -64.0 + 90.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 135.2500 65.5000 -64.0 + 134.2500 67.5000 -64.0 + 135.5000 67.7500 -64.0 +} -64.0 +{ -64.0 + 80.2500 72.5000 -64.0 + 77.5000 74.2500 -64.0 + 77.2500 76.5000 -64.0 + 80.5000 76.7500 -64.0 + 82.5000 75.7500 -64.0 + 82.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 136.2500 73.5000 -64.0 + 135.5000 74.2500 -64.0 + 136.5000 74.7500 -64.0 + 139.7500 75.5000 -64.0 + 138.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 75.5000 -64.0 + 131.5000 76.2500 -64.0 + 131.2500 78.5000 -64.0 + 133.7500 80.5000 -64.0 + 132.7500 77.5000 -64.0 + 134.7500 75.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 76.5000 -64.0 + 140.2500 77.5000 -64.0 + 139.2500 80.5000 -64.0 + 140.5000 79.7500 -64.0 + 140.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 66.2500 81.5000 -64.0 + 58.5000 94.2500 -64.0 + 55.2500 106.5000 -64.0 + 57.2500 108.5000 -64.0 + 58.5000 107.7500 -64.0 + 63.5000 98.7500 -64.0 + 62.5000 97.2500 -64.0 + 62.2500 99.5000 -64.0 + 59.5000 103.2500 -64.0 + 58.7500 102.5000 -64.0 + 58.7500 99.5000 -64.0 + 60.5000 95.7500 -64.0 + 60.7500 93.5000 -64.0 + 66.5000 84.7500 -64.0 + 68.5000 84.7500 -64.0 + 72.2500 87.5000 -64.0 + 66.5000 93.2500 -64.0 + 64.2500 92.5000 -64.0 + 65.2500 95.5000 -64.0 + 66.5000 95.7500 -64.0 + 73.7500 89.5000 -64.0 + 74.7500 87.5000 -64.0 + 73.7500 85.5000 -64.0 + 71.5000 85.2500 -64.0 + 67.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 148.2500 85.5000 -64.0 + 145.5000 87.2500 -64.0 + 143.5000 87.2500 -64.0 + 141.5000 88.2500 -64.0 + 141.2500 91.5000 -64.0 + 145.2500 95.5000 -64.0 + 152.2500 106.5000 -64.0 + 153.2500 111.5000 -64.0 + 154.5000 111.7500 -64.0 + 156.5000 110.7500 -64.0 + 156.7500 103.5000 -64.0 + 154.7500 99.5000 -64.0 + 154.7500 97.5000 -64.0 + 153.7500 95.5000 -64.0 + 153.7500 91.5000 -64.0 + 150.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 72.2500 110.5000 -64.0 + 71.2500 112.5000 -64.0 + 72.5000 112.7500 -64.0 +} -64.0 +{ -64.0 + 105.2500 110.5000 -64.0 + 103.5000 114.2500 -64.0 + 103.2500 122.5000 -64.0 + 105.2500 124.5000 -64.0 + 110.5000 124.7500 -64.0 + 113.5000 119.7500 -64.0 + 112.7500 116.5000 -64.0 + 109.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 95.2500 112.5000 -64.0 + 94.5000 113.2500 -64.0 + 91.5000 113.2500 -64.0 + 83.5000 117.2500 -64.0 + 81.5000 117.2500 -64.0 + 77.5000 119.2500 -64.0 + 75.5000 119.2500 -64.0 + 76.2500 120.5000 -64.0 + 76.5000 122.7500 -64.0 + 79.5000 118.7500 -64.0 + 83.5000 118.7500 -64.0 + 91.5000 114.7500 -64.0 + 96.5000 114.7500 -64.0 + 98.2500 115.5000 -64.0 + 95.2500 120.5000 -64.0 + 90.2500 122.5000 -64.0 + 89.2500 127.5000 -64.0 + 87.5000 128.2500 -64.0 + 88.2500 130.5000 -64.0 + 87.5000 132.2500 -64.0 + 85.5000 133.2500 -64.0 + 83.7500 132.5000 -64.0 + 83.7500 130.5000 -64.0 + 84.7500 127.5000 -64.0 + 86.5000 126.7500 -64.0 + 86.7500 125.5000 -64.0 + 84.5000 122.2500 -64.0 + 84.2500 124.5000 -64.0 + 83.2500 127.5000 -64.0 + 80.5000 130.2500 -64.0 + 80.2500 133.5000 -64.0 + 83.2500 136.5000 -64.0 + 88.5000 136.7500 -64.0 + 93.5000 128.7500 -64.0 + 93.7500 126.5000 -64.0 + 94.5000 124.7500 -64.0 + 98.5000 121.7500 -64.0 + 98.7500 116.5000 -64.0 + 101.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 113.5000 -64.0 + 117.2500 117.5000 -64.0 + 116.5000 118.2500 -64.0 + 116.2500 120.5000 -64.0 + 121.2500 130.5000 -64.0 + 121.2500 137.5000 -64.0 + 122.2500 139.5000 -64.0 + 125.5000 139.7500 -64.0 + 130.5000 137.7500 -64.0 + 134.5000 134.7500 -64.0 + 136.5000 134.7500 -64.0 + 140.5000 130.2500 -64.0 + 138.5000 131.2500 -64.0 + 133.5000 131.2500 -64.0 + 130.7500 127.5000 -64.0 + 131.7500 126.5000 -64.0 + 132.7500 121.5000 -64.0 + 127.7500 116.5000 -64.0 + 122.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 82.2500 120.5000 -64.0 + 83.2500 121.5000 -64.0 + 83.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 121.5000 -64.0 + 137.2500 123.5000 -64.0 + 138.5000 122.7500 -64.0 + 141.5000 122.7500 -64.0 + 139.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 74.2500 128.5000 -64.0 + 75.2500 130.5000 -64.0 + 77.5000 130.7500 -64.0 + 75.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 146.5000 -64.0 + 107.5000 149.2500 -64.0 + 103.5000 149.2500 -64.0 + 99.7500 147.5000 -64.0 + 97.5000 147.2500 -64.0 + 97.2500 148.5000 -64.0 + 98.5000 149.7500 -64.0 + 106.5000 153.7500 -64.0 + 112.5000 150.7500 -64.0 + 114.7500 150.5000 -64.0 + 115.7500 148.5000 -64.0 + 114.7500 146.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 154.5000 -64.0 + 92.2500 156.5000 -64.0 + 93.5000 156.7500 -64.0 + 93.7500 155.5000 -64.0 +} -64.0 +{ -64.0 + 146.7500 88.5000 -64.0 + 148.5000 87.7500 -64.0 + 150.2500 89.5000 -64.0 + 150.2500 91.5000 -64.0 + 153.2500 97.5000 -64.0 + 154.2500 102.5000 -64.0 + 153.5000 104.2500 -64.0 + 143.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 108.7500 115.5000 -64.0 + 109.5000 114.7500 -64.0 + 110.2500 115.5000 -64.0 + 111.2500 117.5000 -64.0 + 110.5000 119.2500 -64.0 + 108.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 118.7500 115.5000 -64.0 + 119.5000 114.7500 -64.0 + 121.5000 114.7500 -64.0 + 127.5000 117.7500 -64.0 + 130.2500 121.5000 -64.0 + 130.2500 125.5000 -64.0 + 129.5000 127.2500 -64.0 + 130.2500 128.5000 -64.0 + 128.5000 132.2500 -64.0 + 126.5000 133.2500 -64.0 + 123.7500 130.5000 -64.0 + 121.7500 126.5000 -64.0 + 121.7500 123.5000 -64.0 + 120.5000 123.2500 -64.0 + 119.7500 121.5000 -64.0 + 117.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 104.7500 116.5000 -64.0 + 105.5000 115.7500 -64.0 + 107.2500 116.5000 -64.0 + 107.2500 119.5000 -64.0 + 106.5000 121.2500 -64.0 + 104.7500 119.5000 -64.0 +} -64.0 +v 273 z -158.000000 -64.0 +{ -64.0 + 128.2500 61.5000 -64.0 + 128.2500 62.5000 -64.0 + 127.2500 64.5000 -64.0 + 128.2500 66.5000 -64.0 + 128.2500 68.5000 -64.0 + 127.5000 70.2500 -64.0 + 122.5000 70.2500 -64.0 + 120.5000 71.2500 -64.0 + 113.5000 71.2500 -64.0 + 110.2500 72.5000 -64.0 + 121.5000 72.7500 -64.0 + 123.5000 71.7500 -64.0 + 129.5000 71.7500 -64.0 + 128.7500 70.5000 -64.0 + 128.7500 66.5000 -64.0 + 129.5000 64.7500 -64.0 + 131.5000 63.7500 -64.0 +} -64.0 +{ -64.0 + 136.2500 62.5000 -64.0 + 135.5000 63.2500 -64.0 + 136.5000 63.7500 -64.0 + 137.2500 65.5000 -64.0 + 138.7500 62.5000 -64.0 +} -64.0 +{ -64.0 + 81.2500 63.5000 -64.0 + 80.5000 65.2500 -64.0 + 75.5000 64.2500 -64.0 + 74.5000 67.2500 -64.0 + 76.2500 71.5000 -64.0 + 78.5000 68.7500 -64.0 + 81.5000 68.7500 -64.0 + 83.2500 70.5000 -64.0 + 83.5000 73.7500 -64.0 + 83.7500 69.5000 -64.0 + 81.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 68.5000 -64.0 + 149.5000 69.2500 -64.0 + 147.5000 69.2500 -64.0 + 141.5000 72.2500 -64.0 + 139.7500 71.5000 -64.0 + 137.5000 72.2500 -64.0 + 138.2500 73.5000 -64.0 + 139.5000 72.7500 -64.0 + 142.5000 72.7500 -64.0 + 144.2500 73.5000 -64.0 + 142.2500 74.5000 -64.0 + 143.2500 76.5000 -64.0 + 143.2500 78.5000 -64.0 + 145.7500 78.5000 -64.0 + 146.7500 76.5000 -64.0 + 144.7500 75.5000 -64.0 + 146.5000 73.7500 -64.0 + 148.5000 73.7500 -64.0 + 149.5000 71.7500 -64.0 + 153.5000 69.7500 -64.0 + 155.5000 69.7500 -64.0 + 154.7500 68.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 72.5000 -64.0 + 131.2500 73.5000 -64.0 + 127.5000 75.2500 -64.0 + 127.2500 76.5000 -64.0 + 129.2500 77.5000 -64.0 + 127.5000 79.2500 -64.0 + 121.5000 79.2500 -64.0 + 119.7500 78.5000 -64.0 + 101.5000 78.2500 -64.0 + 99.7500 77.5000 -64.0 + 88.5000 77.2500 -64.0 + 84.7500 75.5000 -64.0 + 81.5000 78.2500 -64.0 + 78.2500 78.5000 -64.0 + 79.2500 81.5000 -64.0 + 82.5000 81.7500 -64.0 + 85.5000 78.7500 -64.0 + 89.5000 78.7500 -64.0 + 91.5000 79.7500 -64.0 + 93.5000 78.7500 -64.0 + 109.5000 78.7500 -64.0 + 111.2500 79.5000 -64.0 + 128.5000 80.7500 -64.0 + 130.5000 78.7500 -64.0 + 131.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 79.5000 -64.0 + 131.2500 80.5000 -64.0 + 132.5000 80.7500 -64.0 +} -64.0 +{ -64.0 + 67.2500 80.5000 -64.0 + 65.5000 81.2500 -64.0 + 65.2500 82.5000 -64.0 + 58.2500 95.5000 -64.0 + 57.2500 100.5000 -64.0 + 55.2500 104.5000 -64.0 + 56.2500 107.5000 -64.0 + 58.7500 107.5000 -64.0 + 64.7500 96.5000 -64.0 + 63.5000 96.2500 -64.0 + 63.2500 97.5000 -64.0 + 59.5000 102.2500 -64.0 + 58.7500 101.5000 -64.0 + 59.7500 97.5000 -64.0 + 64.7500 87.5000 -64.0 + 68.5000 83.7500 -64.0 + 73.2500 85.5000 -64.0 + 73.2500 87.5000 -64.0 + 65.2500 93.5000 -64.0 + 66.2500 95.5000 -64.0 + 74.5000 89.7500 -64.0 + 76.5000 86.7500 -64.0 + 75.5000 85.2500 -64.0 +} -64.0 +{ -64.0 + 148.2500 80.5000 -64.0 + 151.2500 82.5000 -64.0 + 157.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 149.2500 83.5000 -64.0 + 147.2500 86.5000 -64.0 + 148.5000 86.7500 -64.0 + 151.2500 91.5000 -64.0 + 151.2500 93.5000 -64.0 + 153.2500 97.5000 -64.0 + 153.2500 99.5000 -64.0 + 154.2500 101.5000 -64.0 + 153.5000 103.2500 -64.0 + 151.7500 102.5000 -64.0 + 150.7500 100.5000 -64.0 + 149.5000 101.2500 -64.0 + 152.2500 106.5000 -64.0 + 153.2500 111.5000 -64.0 + 154.5000 111.7500 -64.0 + 156.5000 110.7500 -64.0 + 156.7500 105.5000 -64.0 + 154.7500 101.5000 -64.0 + 154.7500 99.5000 -64.0 + 153.7500 97.5000 -64.0 + 153.7500 92.5000 -64.0 + 151.7500 88.5000 -64.0 + 151.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 139.2500 88.5000 -64.0 + 139.2500 91.5000 -64.0 + 142.5000 92.7500 -64.0 + 148.7500 98.5000 -64.0 + 147.7500 95.5000 -64.0 + 140.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 73.2500 109.5000 -64.0 + 72.2500 111.5000 -64.0 + 73.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 112.5000 -64.0 + 88.5000 114.2500 -64.0 + 84.5000 118.2500 -64.0 + 84.2500 120.5000 -64.0 + 85.2500 122.5000 -64.0 + 85.2500 125.5000 -64.0 + 82.5000 128.2500 -64.0 + 80.5000 129.2500 -64.0 + 73.7500 126.5000 -64.0 + 72.2500 126.5000 -64.0 + 76.2500 129.5000 -64.0 + 80.2500 136.5000 -64.0 + 85.2500 138.5000 -64.0 + 89.5000 138.7500 -64.0 + 91.5000 136.7500 -64.0 + 91.7500 132.5000 -64.0 + 94.5000 128.7500 -64.0 + 94.7500 126.5000 -64.0 + 98.5000 120.7500 -64.0 + 99.7500 114.5000 -64.0 + 97.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 112.5000 -64.0 + 104.5000 113.2500 -64.0 + 103.2500 116.5000 -64.0 + 102.2500 121.5000 -64.0 + 107.2500 124.5000 -64.0 + 108.5000 123.7500 -64.0 + 111.5000 123.7500 -64.0 + 113.5000 121.7500 -64.0 + 113.7500 119.5000 -64.0 + 111.7500 114.5000 -64.0 + 108.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 113.5000 -64.0 + 117.5000 114.2500 -64.0 + 117.2500 118.5000 -64.0 + 116.5000 120.2500 -64.0 + 118.2500 123.5000 -64.0 + 118.2500 125.5000 -64.0 + 122.2500 133.5000 -64.0 + 121.2500 136.5000 -64.0 + 118.2500 140.5000 -64.0 + 117.2500 142.5000 -64.0 + 112.5000 145.2500 -64.0 + 108.5000 147.2500 -64.0 + 105.5000 147.2500 -64.0 + 96.5000 144.2500 -64.0 + 93.5000 145.2500 -64.0 + 93.2500 146.5000 -64.0 + 94.2500 148.5000 -64.0 + 100.2500 152.5000 -64.0 + 102.5000 152.7500 -64.0 + 104.2500 154.5000 -64.0 + 106.5000 154.7500 -64.0 + 112.5000 151.7500 -64.0 + 118.7500 149.5000 -64.0 + 119.7500 147.5000 -64.0 + 118.7500 144.5000 -64.0 + 119.5000 142.7500 -64.0 + 121.5000 141.7500 -64.0 + 123.5000 142.7500 -64.0 + 125.5000 141.7500 -64.0 + 127.5000 141.7500 -64.0 + 131.5000 139.7500 -64.0 + 132.7500 135.5000 -64.0 + 139.5000 130.7500 -64.0 + 141.5000 129.7500 -64.0 + 138.5000 128.2500 -64.0 + 134.5000 131.2500 -64.0 + 131.7500 129.5000 -64.0 + 131.7500 127.5000 -64.0 + 130.5000 126.2500 -64.0 + 130.2500 129.5000 -64.0 + 128.5000 131.2500 -64.0 + 124.5000 131.2500 -64.0 + 121.7500 128.5000 -64.0 + 118.7500 122.5000 -64.0 + 118.7500 119.5000 -64.0 + 120.5000 115.7500 -64.0 + 125.5000 115.7500 -64.0 + 128.2500 118.5000 -64.0 + 130.5000 122.7500 -64.0 + 130.7500 120.5000 -64.0 + 129.7500 118.5000 -64.0 + 123.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 74.2500 118.5000 -64.0 + 75.5000 118.7500 -64.0 + 77.2500 120.5000 -64.0 + 79.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 91.7500 115.5000 -64.0 + 92.5000 114.7500 -64.0 + 95.5000 114.7500 -64.0 + 97.2500 116.5000 -64.0 + 93.5000 124.2500 -64.0 + 93.2500 126.5000 -64.0 + 90.5000 129.2500 -64.0 + 87.5000 129.2500 -64.0 + 85.7500 127.5000 -64.0 + 85.7500 119.5000 -64.0 + 88.5000 115.7500 -64.0 +} -64.0 +{ -64.0 + 104.7500 115.5000 -64.0 + 105.5000 114.7500 -64.0 + 107.2500 115.5000 -64.0 + 107.2500 117.5000 -64.0 + 108.7500 117.5000 -64.0 + 107.7500 115.5000 -64.0 + 108.5000 114.7500 -64.0 + 111.2500 116.5000 -64.0 + 111.2500 120.5000 -64.0 + 109.5000 122.2500 -64.0 + 108.7500 121.5000 -64.0 + 106.5000 122.2500 -64.0 + 103.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 125.7500 136.5000 -64.0 + 127.5000 135.7500 -64.0 + 129.2500 136.5000 -64.0 + 127.5000 137.2500 -64.0 +} -64.0 +{ -64.0 + 113.7500 147.5000 -64.0 + 114.5000 146.7500 -64.0 + 115.2500 148.5000 -64.0 + 113.5000 150.2500 -64.0 + 111.5000 150.2500 -64.0 + 109.7500 149.5000 -64.0 +} -64.0 +{ -64.0 + 97.7500 148.5000 -64.0 + 99.5000 147.7500 -64.0 + 103.2500 150.5000 -64.0 + 102.5000 151.2500 -64.0 + 101.7500 150.5000 -64.0 + 99.5000 150.2500 -64.0 +} -64.0 +{ -64.0 + 104.7500 151.5000 -64.0 + 105.5000 150.7500 -64.0 + 106.2500 151.5000 -64.0 + 105.5000 152.2500 -64.0 +} -64.0 +v 370 z -160.000000 -64.0 +{ -64.0 + 105.2500 33.5000 -64.0 + 103.2500 34.5000 -64.0 + 106.5000 34.7500 -64.0 + 108.5000 33.7500 -64.0 + 110.5000 34.7500 -64.0 + 112.5000 33.7500 -64.0 + 117.5000 34.7500 -64.0 + 119.2500 36.5000 -64.0 + 120.5000 35.7500 -64.0 + 122.7500 39.5000 -64.0 + 123.7500 37.5000 -64.0 + 122.7500 35.5000 -64.0 + 120.5000 35.2500 -64.0 + 118.7500 33.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 38.5000 -64.0 + 87.5000 42.2500 -64.0 + 87.2500 45.5000 -64.0 + 89.2500 47.5000 -64.0 + 92.5000 43.7500 -64.0 + 93.7500 44.5000 -64.0 + 94.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 43.5000 -64.0 + 96.5000 44.2500 -64.0 + 94.5000 45.2500 -64.0 + 97.2500 47.5000 -64.0 + 96.2500 50.5000 -64.0 + 98.5000 48.7500 -64.0 + 100.5000 48.7500 -64.0 + 100.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 80.2500 47.5000 -64.0 + 78.5000 48.2500 -64.0 + 81.2500 50.5000 -64.0 + 81.2500 54.5000 -64.0 + 79.5000 58.2500 -64.0 + 78.5000 57.2500 -64.0 + 78.2500 62.5000 -64.0 + 75.5000 65.2500 -64.0 + 77.5000 68.7500 -64.0 + 79.5000 65.7500 -64.0 + 79.7500 63.5000 -64.0 + 82.5000 59.7500 -64.0 + 83.2500 60.5000 -64.0 + 83.5000 65.7500 -64.0 + 83.7500 62.5000 -64.0 + 85.7500 58.5000 -64.0 + 86.7500 53.5000 -64.0 + 88.5000 51.7500 -64.0 + 88.7500 49.5000 -64.0 + 83.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 143.2500 51.5000 -64.0 + 140.2500 54.5000 -64.0 + 139.2500 56.5000 -64.0 + 135.5000 59.2500 -64.0 + 135.2500 61.5000 -64.0 + 136.5000 61.7500 -64.0 + 138.5000 60.7500 -64.0 + 140.2500 61.5000 -64.0 + 140.2500 64.5000 -64.0 + 141.7500 62.5000 -64.0 + 140.7500 60.5000 -64.0 + 141.5000 59.2500 -64.0 + 139.5000 60.2500 -64.0 + 138.7500 58.5000 -64.0 + 141.5000 56.7500 -64.0 + 142.2500 58.5000 -64.0 + 148.7500 57.5000 -64.0 + 149.7500 55.5000 -64.0 + 147.7500 54.5000 -64.0 + 145.5000 55.2500 -64.0 + 143.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 52.5000 -64.0 + 93.5000 52.7500 -64.0 + 103.2500 59.5000 -64.0 + 103.2500 61.5000 -64.0 + 97.5000 64.2500 -64.0 + 95.5000 64.2500 -64.0 + 92.2500 66.5000 -64.0 + 91.2500 68.5000 -64.0 + 98.5000 68.7500 -64.0 + 105.5000 66.7500 -64.0 + 114.5000 65.7500 -64.0 + 122.5000 62.7500 -64.0 + 120.7500 61.5000 -64.0 + 111.5000 61.2500 -64.0 + 94.7500 52.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 61.5000 -64.0 + 127.2500 62.5000 -64.0 + 127.7500 61.5000 -64.0 +} -64.0 +{ -64.0 + 55.2500 62.5000 -64.0 + 56.2500 64.5000 -64.0 + 60.2500 65.5000 -64.0 + 66.5000 65.7500 -64.0 + 65.7500 64.5000 -64.0 + 59.5000 63.2500 -64.0 +} -64.0 +{ -64.0 + 152.2500 67.5000 -64.0 + 151.5000 68.2500 -64.0 + 148.2500 68.5000 -64.0 + 150.5000 68.7500 -64.0 + 152.2500 69.5000 -64.0 + 149.5000 72.2500 -64.0 + 145.5000 75.2500 -64.0 + 143.5000 76.2500 -64.0 + 144.5000 77.7500 -64.0 + 146.5000 76.7500 -64.0 + 148.5000 76.7500 -64.0 + 150.5000 77.7500 -64.0 + 152.5000 76.7500 -64.0 + 155.5000 76.7500 -64.0 + 154.7500 74.5000 -64.0 + 159.5000 70.7500 -64.0 + 159.7500 68.5000 -64.0 + 157.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 68.5000 -64.0 + 111.5000 71.2500 -64.0 + 112.2500 72.5000 -64.0 + 125.7500 72.5000 -64.0 + 120.7500 71.5000 -64.0 + 123.5000 69.7500 -64.0 + 127.5000 69.7500 -64.0 + 127.7500 68.5000 -64.0 + 126.5000 69.2500 -64.0 + 125.7500 68.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 72.5000 -64.0 + 68.5000 73.7500 -64.0 + 72.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 86.2500 72.5000 -64.0 + 86.2500 73.5000 -64.0 + 87.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 72.5000 -64.0 + 128.2500 73.5000 -64.0 + 126.5000 75.2500 -64.0 + 128.2500 77.5000 -64.0 + 124.5000 79.2500 -64.0 + 122.7500 78.5000 -64.0 + 104.5000 78.2500 -64.0 + 102.7500 77.5000 -64.0 + 85.5000 76.2500 -64.0 + 84.7500 74.5000 -64.0 + 82.5000 75.2500 -64.0 + 84.2500 76.5000 -64.0 + 88.2500 77.5000 -64.0 + 82.5000 80.2500 -64.0 + 81.7500 79.5000 -64.0 + 79.5000 79.2500 -64.0 + 81.2500 80.5000 -64.0 + 81.2500 83.5000 -64.0 + 84.5000 81.7500 -64.0 + 88.5000 82.7500 -64.0 + 88.7500 80.5000 -64.0 + 90.5000 79.7500 -64.0 + 95.5000 80.7500 -64.0 + 97.5000 82.7500 -64.0 + 99.5000 81.7500 -64.0 + 103.2500 82.5000 -64.0 + 101.5000 83.2500 -64.0 + 104.2500 84.5000 -64.0 + 105.5000 83.7500 -64.0 + 104.7500 82.5000 -64.0 + 105.5000 81.7500 -64.0 + 107.2500 82.5000 -64.0 + 117.5000 83.7500 -64.0 + 121.5000 81.7500 -64.0 + 124.2500 83.5000 -64.0 + 123.2500 87.5000 -64.0 + 125.2500 88.5000 -64.0 + 124.2500 91.5000 -64.0 + 125.5000 91.7500 -64.0 + 126.2500 93.5000 -64.0 + 124.2500 95.5000 -64.0 + 125.7500 95.5000 -64.0 + 128.7500 88.5000 -64.0 + 132.5000 84.7500 -64.0 + 136.7500 82.5000 -64.0 + 133.5000 82.2500 -64.0 + 131.5000 83.2500 -64.0 + 129.7500 82.5000 -64.0 + 130.7500 77.5000 -64.0 + 129.5000 77.2500 -64.0 + 127.7500 75.5000 -64.0 + 129.7500 72.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 78.5000 -64.0 + 63.5000 79.2500 -64.0 + 58.5000 79.2500 -64.0 + 54.5000 82.2500 -64.0 + 52.5000 82.2500 -64.0 + 50.5000 83.2500 -64.0 + 50.2500 85.5000 -64.0 + 51.5000 84.7500 -64.0 + 53.5000 84.7500 -64.0 + 55.5000 83.7500 -64.0 + 58.5000 83.7500 -64.0 + 62.5000 81.7500 -64.0 + 64.5000 81.7500 -64.0 + 65.2500 83.5000 -64.0 + 64.2500 86.5000 -64.0 + 57.2500 98.5000 -64.0 + 56.2500 105.5000 -64.0 + 57.2500 107.5000 -64.0 + 58.7500 107.5000 -64.0 + 59.7500 105.5000 -64.0 + 62.7500 98.5000 -64.0 + 59.5000 101.2500 -64.0 + 58.7500 100.5000 -64.0 + 59.5000 99.7500 -64.0 + 59.7500 97.5000 -64.0 + 66.7500 83.5000 -64.0 + 68.5000 82.7500 -64.0 + 68.7500 81.5000 -64.0 + 69.5000 79.7500 -64.0 + 71.7500 78.5000 -64.0 +} -64.0 +{ -64.0 + 75.2500 79.5000 -64.0 + 75.2500 80.5000 -64.0 + 72.5000 83.2500 -64.0 + 72.2500 87.5000 -64.0 + 69.5000 91.2500 -64.0 + 67.2500 92.5000 -64.0 + 66.2500 94.5000 -64.0 + 67.5000 94.7500 -64.0 + 69.5000 92.7500 -64.0 + 70.2500 93.5000 -64.0 + 71.7500 93.5000 -64.0 + 72.7500 91.5000 -64.0 + 76.7500 87.5000 -64.0 + 77.7500 85.5000 -64.0 + 75.7500 83.5000 -64.0 + 75.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 148.2500 82.5000 -64.0 + 148.2500 84.5000 -64.0 + 150.2500 86.5000 -64.0 + 150.2500 88.5000 -64.0 + 152.5000 93.7500 -64.0 + 152.7500 91.5000 -64.0 + 150.7500 87.5000 -64.0 + 150.7500 84.5000 -64.0 + 152.5000 83.7500 -64.0 + 159.5000 85.7500 -64.0 + 162.5000 84.7500 -64.0 + 160.7500 83.5000 -64.0 + 156.7500 82.5000 -64.0 +} -64.0 +{ -64.0 + 139.2500 88.5000 -64.0 + 139.2500 89.5000 -64.0 + 140.2500 91.5000 -64.0 + 142.5000 91.7500 -64.0 +} -64.0 +{ -64.0 + 121.2500 101.5000 -64.0 + 121.2500 102.5000 -64.0 + 121.7500 103.5000 -64.0 + 122.7500 101.5000 -64.0 +} -64.0 +{ -64.0 + 154.2500 101.5000 -64.0 + 154.2500 104.5000 -64.0 + 153.5000 106.2500 -64.0 + 152.7500 105.5000 -64.0 + 152.2500 106.5000 -64.0 + 153.2500 108.5000 -64.0 + 153.2500 110.5000 -64.0 + 154.5000 111.7500 -64.0 + 156.7500 108.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 112.5000 -64.0 + 90.5000 113.2500 -64.0 + 88.5000 113.2500 -64.0 + 85.5000 118.2500 -64.0 + 85.2500 124.5000 -64.0 + 83.2500 129.5000 -64.0 + 81.5000 130.2500 -64.0 + 77.7500 127.5000 -64.0 + 74.7500 123.5000 -64.0 + 73.5000 124.2500 -64.0 + 72.7500 123.5000 -64.0 + 68.5000 122.2500 -64.0 + 68.2500 123.5000 -64.0 + 71.5000 123.7500 -64.0 + 79.2500 131.5000 -64.0 + 81.2500 135.5000 -64.0 + 83.2500 141.5000 -64.0 + 85.2500 142.5000 -64.0 + 88.5000 142.7500 -64.0 + 90.2500 143.5000 -64.0 + 89.5000 144.2500 -64.0 + 89.2500 146.5000 -64.0 + 90.5000 146.7500 -64.0 + 92.2500 148.5000 -64.0 + 94.5000 148.7500 -64.0 + 102.2500 154.5000 -64.0 + 103.7500 153.5000 -64.0 + 94.7500 147.5000 -64.0 + 95.5000 145.7500 -64.0 + 97.5000 145.7500 -64.0 + 100.5000 146.7500 -64.0 + 102.2500 147.5000 -64.0 + 110.5000 147.7500 -64.0 + 116.5000 144.7500 -64.0 + 118.2500 146.5000 -64.0 + 117.5000 148.2500 -64.0 + 107.5000 153.2500 -64.0 + 107.2500 154.5000 -64.0 + 108.5000 154.7500 -64.0 + 115.7500 150.5000 -64.0 + 120.5000 148.7500 -64.0 + 124.5000 145.7500 -64.0 + 126.5000 144.7500 -64.0 + 128.5000 141.7500 -64.0 + 130.7500 135.5000 -64.0 + 133.5000 132.7500 -64.0 + 131.7500 129.5000 -64.0 + 131.5000 123.2500 -64.0 + 131.2500 125.5000 -64.0 + 130.2500 128.5000 -64.0 + 127.5000 131.2500 -64.0 + 125.5000 131.2500 -64.0 + 121.7500 127.5000 -64.0 + 122.5000 126.7500 -64.0 + 121.7500 125.5000 -64.0 + 122.7500 123.5000 -64.0 + 123.5000 121.7500 -64.0 + 126.7500 117.5000 -64.0 + 125.7500 114.5000 -64.0 + 119.5000 114.2500 -64.0 + 118.5000 116.2500 -64.0 + 116.5000 116.2500 -64.0 + 116.2500 118.5000 -64.0 + 118.2500 122.5000 -64.0 + 118.2500 127.5000 -64.0 + 123.2500 132.5000 -64.0 + 123.2500 134.5000 -64.0 + 122.2500 137.5000 -64.0 + 115.5000 142.2500 -64.0 + 109.5000 145.2500 -64.0 + 103.5000 145.2500 -64.0 + 96.5000 142.2500 -64.0 + 91.7500 135.5000 -64.0 + 91.7500 131.5000 -64.0 + 97.7500 125.5000 -64.0 + 98.7500 116.5000 -64.0 + 97.5000 115.2500 -64.0 + 93.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 113.5000 -64.0 + 102.5000 116.2500 -64.0 + 102.2500 119.5000 -64.0 + 104.2500 123.5000 -64.0 + 109.5000 123.7500 -64.0 + 113.5000 121.7500 -64.0 + 113.7500 116.5000 -64.0 + 110.5000 114.2500 -64.0 +} -64.0 +{ -64.0 + 88.7500 116.5000 -64.0 + 90.5000 115.7500 -64.0 + 92.2500 116.5000 -64.0 + 90.2500 119.5000 -64.0 + 92.5000 119.7500 -64.0 + 91.7500 118.5000 -64.0 + 93.5000 116.7500 -64.0 + 94.2500 118.5000 -64.0 + 96.2500 125.5000 -64.0 + 94.5000 126.2500 -64.0 + 91.5000 129.2500 -64.0 + 87.5000 129.2500 -64.0 + 85.7500 125.5000 -64.0 + 86.5000 123.7500 -64.0 + 85.7500 122.5000 -64.0 + 86.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 103.7500 116.5000 -64.0 + 104.5000 115.7500 -64.0 + 109.5000 116.7500 -64.0 + 111.2500 118.5000 -64.0 + 111.2500 120.5000 -64.0 + 109.5000 122.2500 -64.0 + 106.5000 122.2500 -64.0 + 103.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 85.7500 136.5000 -64.0 + 86.5000 135.7500 -64.0 + 87.2500 136.5000 -64.0 + 86.5000 137.2500 -64.0 +} -64.0 +v 484 z -162.000000 -64.0 +{ -64.0 + 96.2500 29.5000 -64.0 + 92.5000 32.2500 -64.0 + 89.5000 32.2500 -64.0 + 87.7500 31.5000 -64.0 + 87.2500 32.5000 -64.0 + 89.2500 34.5000 -64.0 + 89.2500 36.5000 -64.0 + 87.5000 37.2500 -64.0 + 87.2500 40.5000 -64.0 + 84.5000 43.2500 -64.0 + 84.5000 44.7500 -64.0 + 86.5000 45.7500 -64.0 + 86.7500 44.5000 -64.0 + 89.7500 41.5000 -64.0 + 88.7500 39.5000 -64.0 + 89.5000 38.7500 -64.0 + 92.7500 38.5000 -64.0 + 89.7500 34.5000 -64.0 + 91.5000 33.7500 -64.0 + 94.2500 36.5000 -64.0 + 95.5000 34.7500 -64.0 + 96.7500 30.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 32.5000 -64.0 + 106.5000 34.2500 -64.0 + 104.2500 34.5000 -64.0 + 105.2500 36.5000 -64.0 + 105.2500 39.5000 -64.0 + 101.2500 41.5000 -64.0 + 103.5000 41.7500 -64.0 + 105.2500 43.5000 -64.0 + 104.5000 45.2500 -64.0 + 102.5000 45.2500 -64.0 + 101.5000 47.2500 -64.0 + 102.5000 47.7500 -64.0 + 104.5000 46.7500 -64.0 + 115.5000 52.7500 -64.0 + 125.5000 56.7500 -64.0 + 124.5000 55.2500 -64.0 + 111.5000 47.2500 -64.0 + 108.7500 44.5000 -64.0 + 109.5000 43.7500 -64.0 + 109.7500 40.5000 -64.0 + 107.7500 38.5000 -64.0 + 108.5000 36.7500 -64.0 + 110.5000 36.7500 -64.0 + 112.5000 35.7500 -64.0 + 114.5000 36.7500 -64.0 + 116.5000 35.7500 -64.0 + 120.5000 37.7500 -64.0 + 123.2500 42.5000 -64.0 + 122.2500 45.5000 -64.0 + 123.5000 46.7500 -64.0 + 126.5000 45.7500 -64.0 + 126.7500 42.5000 -64.0 + 124.7500 40.5000 -64.0 + 124.7500 37.5000 -64.0 + 123.7500 35.5000 -64.0 + 119.5000 34.2500 -64.0 + 120.2500 35.5000 -64.0 + 119.5000 36.2500 -64.0 + 117.7500 35.5000 -64.0 + 112.5000 35.2500 -64.0 + 109.5000 36.2500 -64.0 + 107.7500 34.5000 -64.0 + 108.5000 33.7500 -64.0 + 118.7500 33.5000 -64.0 + 114.7500 32.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 38.5000 -64.0 + 94.5000 39.7500 -64.0 + 96.5000 40.7500 -64.0 + 95.7500 38.5000 -64.0 +} -64.0 +{ -64.0 + 77.2500 47.5000 -64.0 + 77.2500 49.5000 -64.0 + 79.5000 49.7500 -64.0 + 83.2500 51.5000 -64.0 + 79.2500 59.5000 -64.0 + 80.2500 61.5000 -64.0 + 80.2500 64.5000 -64.0 + 81.5000 64.7500 -64.0 + 80.7500 63.5000 -64.0 + 80.7500 59.5000 -64.0 + 81.7500 56.5000 -64.0 + 84.5000 52.7500 -64.0 + 86.5000 52.7500 -64.0 + 86.7500 49.5000 -64.0 + 84.5000 50.2500 -64.0 + 82.7500 49.5000 -64.0 + 84.7500 48.5000 -64.0 + 80.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 99.2500 48.5000 -64.0 + 99.2500 49.5000 -64.0 + 98.2500 51.5000 -64.0 + 101.5000 51.7500 -64.0 + 99.7500 49.5000 -64.0 + 100.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 50.5000 -64.0 + 136.5000 56.2500 -64.0 + 136.5000 57.7500 -64.0 + 140.5000 55.7500 -64.0 + 144.5000 55.7500 -64.0 + 146.2500 56.5000 -64.0 + 144.2500 57.5000 -64.0 + 146.5000 57.7500 -64.0 + 149.5000 56.7500 -64.0 + 151.7500 54.5000 -64.0 + 149.5000 54.2500 -64.0 + 143.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 54.5000 -64.0 + 91.2500 58.5000 -64.0 + 88.2500 64.5000 -64.0 + 89.5000 63.7500 -64.0 + 92.2500 65.5000 -64.0 + 91.5000 66.2500 -64.0 + 97.5000 67.7500 -64.0 + 99.5000 66.7500 -64.0 + 103.5000 66.7500 -64.0 + 105.5000 65.7500 -64.0 + 114.5000 64.7500 -64.0 + 118.5000 62.7500 -64.0 + 117.7500 61.5000 -64.0 + 108.5000 59.2500 -64.0 + 98.5000 54.2500 -64.0 + 96.5000 55.2500 -64.0 +} -64.0 +{ -64.0 + 135.2500 58.5000 -64.0 + 135.2500 59.5000 -64.0 + 136.5000 59.7500 -64.0 +} -64.0 +{ -64.0 + 138.2500 59.5000 -64.0 + 137.2500 60.5000 -64.0 + 141.5000 60.7500 -64.0 + 143.2500 63.5000 -64.0 + 141.2500 64.5000 -64.0 + 143.5000 64.7500 -64.0 + 151.2500 68.5000 -64.0 + 155.2500 69.5000 -64.0 + 152.5000 71.2500 -64.0 + 145.7500 69.5000 -64.0 + 141.5000 69.2500 -64.0 + 140.5000 69.7500 -64.0 + 147.5000 70.7500 -64.0 + 148.2500 72.5000 -64.0 + 146.5000 73.2500 -64.0 + 144.5000 75.7500 -64.0 + 148.5000 73.7500 -64.0 + 150.5000 73.7500 -64.0 + 152.5000 72.7500 -64.0 + 156.5000 72.7500 -64.0 + 158.5000 71.7500 -64.0 + 159.2500 72.5000 -64.0 + 161.5000 72.7500 -64.0 + 160.7500 70.5000 -64.0 + 155.7500 68.5000 -64.0 + 157.5000 66.7500 -64.0 + 154.5000 65.2500 -64.0 + 145.5000 63.2500 -64.0 + 142.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 56.2500 61.5000 -64.0 + 55.5000 62.2500 -64.0 + 55.5000 63.7500 -64.0 + 60.5000 64.7500 -64.0 + 62.2500 65.5000 -64.0 + 69.5000 65.7500 -64.0 + 71.2500 66.5000 -64.0 + 72.5000 65.7500 -64.0 + 74.5000 65.7500 -64.0 + 76.2500 66.5000 -64.0 + 78.5000 64.2500 -64.0 + 76.5000 65.2500 -64.0 + 74.5000 65.2500 -64.0 + 70.7500 63.5000 -64.0 + 66.5000 63.2500 -64.0 + 63.5000 62.2500 -64.0 + 61.7500 61.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 67.5000 -64.0 + 115.5000 69.2500 -64.0 + 116.2500 72.5000 -64.0 + 121.5000 72.7500 -64.0 + 121.7500 71.5000 -64.0 + 123.5000 69.7500 -64.0 + 126.5000 69.7500 -64.0 + 121.7500 67.5000 -64.0 +} -64.0 +{ -64.0 + 63.2500 71.5000 -64.0 + 63.2500 72.5000 -64.0 + 65.2500 73.5000 -64.0 + 69.5000 73.7500 -64.0 + 67.7500 72.5000 -64.0 + 69.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 73.5000 -64.0 + 93.2500 74.5000 -64.0 + 97.5000 74.7500 -64.0 + 99.2500 75.5000 -64.0 + 98.5000 76.2500 -64.0 + 93.5000 76.2500 -64.0 + 90.5000 77.2500 -64.0 + 91.2500 78.5000 -64.0 + 93.5000 78.7500 -64.0 + 95.2500 79.5000 -64.0 + 99.5000 79.7500 -64.0 + 101.5000 81.7500 -64.0 + 103.5000 80.7500 -64.0 + 105.5000 80.7500 -64.0 + 109.5000 82.7500 -64.0 + 112.5000 81.7500 -64.0 + 115.2500 84.5000 -64.0 + 114.5000 85.2500 -64.0 + 114.5000 86.7500 -64.0 + 116.5000 87.7500 -64.0 + 116.7500 86.5000 -64.0 + 118.5000 84.7500 -64.0 + 120.2500 85.5000 -64.0 + 117.2500 89.5000 -64.0 + 120.5000 89.7500 -64.0 + 121.2500 91.5000 -64.0 + 119.2500 93.5000 -64.0 + 121.5000 93.7500 -64.0 + 121.7500 91.5000 -64.0 + 123.5000 90.7500 -64.0 + 125.2500 92.5000 -64.0 + 124.5000 93.2500 -64.0 + 124.2500 96.5000 -64.0 + 125.5000 95.7500 -64.0 + 129.5000 95.7500 -64.0 + 131.7500 93.5000 -64.0 + 132.7500 91.5000 -64.0 + 135.5000 87.7500 -64.0 + 137.5000 87.7500 -64.0 + 137.7500 84.5000 -64.0 + 138.7500 81.5000 -64.0 + 136.5000 83.2500 -64.0 + 133.5000 83.2500 -64.0 + 130.5000 84.2500 -64.0 + 128.7500 83.5000 -64.0 + 128.7500 81.5000 -64.0 + 127.7500 78.5000 -64.0 + 129.7500 77.5000 -64.0 + 121.5000 77.2500 -64.0 + 118.5000 76.2500 -64.0 + 116.5000 77.2500 -64.0 + 114.7500 76.5000 -64.0 + 110.5000 76.2500 -64.0 + 104.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 73.5000 -64.0 + 130.2500 76.5000 -64.0 + 131.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 137.2500 73.5000 -64.0 + 136.2500 75.5000 -64.0 + 138.5000 75.7500 -64.0 + 138.7500 74.5000 -64.0 +} -64.0 +{ -64.0 + 69.2500 77.5000 -64.0 + 68.5000 78.2500 -64.0 + 65.5000 78.2500 -64.0 + 63.5000 79.2500 -64.0 + 59.5000 79.2500 -64.0 + 53.5000 82.2500 -64.0 + 51.5000 82.2500 -64.0 + 50.2500 84.5000 -64.0 + 54.5000 84.7500 -64.0 + 63.5000 81.7500 -64.0 + 65.2500 84.5000 -64.0 + 67.5000 81.7500 -64.0 + 65.7500 80.5000 -64.0 + 67.5000 78.7500 -64.0 + 69.2500 79.5000 -64.0 + 70.5000 78.7500 -64.0 +} -64.0 +{ -64.0 + 86.2500 77.5000 -64.0 + 82.5000 81.2500 -64.0 + 81.7500 79.5000 -64.0 + 80.5000 79.2500 -64.0 + 81.2500 80.5000 -64.0 + 80.5000 84.2500 -64.0 + 81.2500 85.5000 -64.0 + 80.2500 90.5000 -64.0 + 81.5000 88.7500 -64.0 + 81.7500 84.5000 -64.0 + 84.5000 81.7500 -64.0 + 87.5000 81.7500 -64.0 + 87.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 76.2500 79.5000 -64.0 + 74.5000 81.2500 -64.0 + 73.2500 87.5000 -64.0 + 67.5000 93.2500 -64.0 + 68.5000 93.7500 -64.0 + 70.5000 91.7500 -64.0 + 72.5000 91.7500 -64.0 + 77.5000 86.7500 -64.0 + 75.7500 85.5000 -64.0 + 76.7500 80.5000 -64.0 +} -64.0 +{ -64.0 + 150.2500 87.5000 -64.0 + 150.2500 89.5000 -64.0 + 152.2500 93.5000 -64.0 + 153.2500 102.5000 -64.0 + 151.5000 103.2500 -64.0 + 151.2500 104.5000 -64.0 + 152.2500 107.5000 -64.0 + 152.7500 106.5000 -64.0 + 151.7500 104.5000 -64.0 + 152.5000 103.7500 -64.0 + 155.2500 107.5000 -64.0 + 155.5000 110.7500 -64.0 + 155.7500 105.5000 -64.0 + 153.7500 101.5000 -64.0 + 152.7500 91.5000 -64.0 + 151.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 138.2500 88.5000 -64.0 + 138.5000 88.7500 -64.0 + 142.2500 91.5000 -64.0 + 143.7500 91.5000 -64.0 + 139.7500 88.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 90.5000 -64.0 + 110.2500 91.5000 -64.0 + 111.2500 93.5000 -64.0 + 113.5000 91.7500 -64.0 +} -64.0 +{ -64.0 + 79.2500 92.5000 -64.0 + 79.2500 93.5000 -64.0 + 78.2500 96.5000 -64.0 + 77.5000 98.2500 -64.0 + 77.2500 102.5000 -64.0 + 77.7500 103.5000 -64.0 + 79.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 59.2500 97.5000 -64.0 + 57.5000 101.2500 -64.0 + 57.2500 105.5000 -64.0 + 58.2500 107.5000 -64.0 + 59.7500 106.5000 -64.0 + 60.7500 101.5000 -64.0 + 58.7500 100.5000 -64.0 + 59.7500 98.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 102.5000 -64.0 + 123.5000 103.2500 -64.0 + 124.2500 105.5000 -64.0 + 123.2500 107.5000 -64.0 + 124.2500 109.5000 -64.0 + 126.7500 104.5000 -64.0 + 125.7500 102.5000 -64.0 +} -64.0 +{ -64.0 + 76.2500 104.5000 -64.0 + 75.2500 106.5000 -64.0 + 75.7500 107.5000 -64.0 + 76.7500 105.5000 -64.0 +} -64.0 +{ -64.0 + 153.2500 110.5000 -64.0 + 153.2500 111.5000 -64.0 + 154.5000 111.7500 -64.0 +} -64.0 +{ -64.0 + 87.2500 112.5000 -64.0 + 86.5000 113.2500 -64.0 + 87.2500 114.5000 -64.0 + 86.2500 117.5000 -64.0 + 87.5000 116.7500 -64.0 + 89.2500 117.5000 -64.0 + 89.2500 119.5000 -64.0 + 90.2500 121.5000 -64.0 + 89.5000 122.2500 -64.0 + 90.2500 124.5000 -64.0 + 91.5000 124.7500 -64.0 + 93.2500 125.5000 -64.0 + 90.5000 128.2500 -64.0 + 87.5000 128.2500 -64.0 + 85.7500 126.5000 -64.0 + 85.7500 121.5000 -64.0 + 84.5000 120.2500 -64.0 + 84.2500 130.5000 -64.0 + 87.2500 134.5000 -64.0 + 86.5000 135.2500 -64.0 + 84.2500 135.5000 -64.0 + 83.2500 137.5000 -64.0 + 87.5000 144.7500 -64.0 + 100.5000 151.7500 -64.0 + 104.2500 154.5000 -64.0 + 108.5000 154.7500 -64.0 + 110.5000 153.7500 -64.0 + 114.5000 150.7500 -64.0 + 122.5000 146.7500 -64.0 + 125.7500 143.5000 -64.0 + 127.7500 139.5000 -64.0 + 126.7500 137.5000 -64.0 + 125.5000 138.2500 -64.0 + 119.5000 141.2500 -64.0 + 116.5000 141.2500 -64.0 + 110.5000 144.2500 -64.0 + 108.5000 144.2500 -64.0 + 106.5000 145.2500 -64.0 + 105.7500 144.5000 -64.0 + 102.5000 144.2500 -64.0 + 94.5000 140.2500 -64.0 + 87.7500 133.5000 -64.0 + 89.7500 131.5000 -64.0 + 96.7500 128.5000 -64.0 + 97.7500 126.5000 -64.0 + 95.5000 126.2500 -64.0 + 94.7500 124.5000 -64.0 + 95.5000 122.7500 -64.0 + 97.5000 122.7500 -64.0 + 99.5000 124.7500 -64.0 + 103.5000 122.7500 -64.0 + 107.5000 124.7500 -64.0 + 115.5000 120.7500 -64.0 + 120.5000 121.7500 -64.0 + 122.5000 119.7500 -64.0 + 123.2500 120.5000 -64.0 + 122.2500 125.5000 -64.0 + 120.5000 127.2500 -64.0 + 120.2500 129.5000 -64.0 + 122.5000 130.7500 -64.0 + 124.5000 131.7500 -64.0 + 126.2500 132.5000 -64.0 + 128.7500 132.5000 -64.0 + 131.5000 128.7500 -64.0 + 131.7500 125.5000 -64.0 + 132.7500 123.5000 -64.0 + 131.7500 121.5000 -64.0 + 131.7500 119.5000 -64.0 + 130.5000 118.2500 -64.0 + 124.5000 115.2500 -64.0 + 124.2500 117.5000 -64.0 + 123.5000 119.2500 -64.0 + 121.7500 117.5000 -64.0 + 120.7500 115.5000 -64.0 + 117.7500 113.5000 -64.0 + 116.5000 114.2500 -64.0 + 112.5000 114.2500 -64.0 + 107.5000 113.2500 -64.0 + 99.5000 117.2500 -64.0 + 96.5000 117.2500 -64.0 + 94.7500 116.5000 -64.0 + 93.5000 114.2500 -64.0 + 91.5000 113.2500 -64.0 + 89.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 71.2500 119.5000 -64.0 + 70.2500 121.5000 -64.0 + 72.5000 121.7500 -64.0 + 72.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 92.7500 59.5000 -64.0 + 93.5000 58.7500 -64.0 + 94.2500 59.5000 -64.0 + 93.5000 60.2500 -64.0 +} -64.0 +{ -64.0 + 93.7500 61.5000 -64.0 + 94.5000 60.7500 -64.0 + 95.2500 61.5000 -64.0 + 94.5000 62.2500 -64.0 +} -64.0 +{ -64.0 + 107.7500 61.5000 -64.0 + 109.5000 60.7500 -64.0 + 117.2500 62.5000 -64.0 + 114.5000 64.2500 -64.0 + 110.5000 64.2500 -64.0 + 103.5000 66.2500 -64.0 + 95.5000 66.2500 -64.0 + 93.7500 65.5000 -64.0 + 96.5000 63.7500 -64.0 + 98.5000 63.7500 -64.0 + 100.5000 62.7500 -64.0 + 107.5000 62.7500 -64.0 +} -64.0 +{ -64.0 + 118.7500 83.5000 -64.0 + 119.5000 82.7500 -64.0 + 120.2500 83.5000 -64.0 + 119.5000 84.2500 -64.0 +} -64.0 +{ -64.0 + 103.7500 116.5000 -64.0 + 105.5000 115.7500 -64.0 + 107.2500 116.5000 -64.0 + 104.5000 119.2500 -64.0 + 102.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 116.5000 -64.0 + 108.5000 115.7500 -64.0 + 111.2500 120.5000 -64.0 + 109.5000 122.2500 -64.0 + 107.5000 122.2500 -64.0 + 105.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 128.7500 125.5000 -64.0 + 129.5000 124.7500 -64.0 + 130.2500 125.5000 -64.0 + 129.5000 126.2500 -64.0 +} -64.0 +{ -64.0 + 126.7500 127.5000 -64.0 + 127.5000 126.7500 -64.0 + 129.2500 127.5000 -64.0 + 127.5000 129.2500 -64.0 +} -64.0 +{ -64.0 + 95.7500 145.5000 -64.0 + 96.5000 144.7500 -64.0 + 102.5000 146.7500 -64.0 + 104.2500 147.5000 -64.0 + 110.5000 147.7500 -64.0 + 113.5000 146.7500 -64.0 + 114.2500 148.5000 -64.0 + 112.5000 149.2500 -64.0 + 106.5000 152.2500 -64.0 + 104.7500 151.5000 -64.0 + 102.5000 151.2500 -64.0 + 98.5000 148.2500 -64.0 + 96.5000 147.2500 -64.0 +} -64.0 +v 400 z -164.000000 -64.0 +{ -64.0 + 95.2500 31.5000 -64.0 + 90.5000 42.2500 -64.0 + 88.7500 41.5000 -64.0 + 85.5000 43.2500 -64.0 + 88.5000 47.7500 -64.0 + 88.7500 45.5000 -64.0 + 90.5000 43.7500 -64.0 + 91.2500 44.5000 -64.0 + 92.5000 42.7500 -64.0 + 93.2500 43.5000 -64.0 + 92.5000 45.2500 -64.0 + 93.5000 45.7500 -64.0 + 94.5000 42.7500 -64.0 + 97.5000 43.7500 -64.0 + 98.2500 45.5000 -64.0 + 96.5000 47.2500 -64.0 + 93.5000 47.7500 -64.0 + 97.2500 49.5000 -64.0 + 96.2500 50.5000 -64.0 + 98.5000 50.7500 -64.0 + 97.7500 49.5000 -64.0 + 98.7500 47.5000 -64.0 + 101.5000 45.7500 -64.0 + 106.5000 39.7500 -64.0 + 108.5000 40.7500 -64.0 + 110.5000 37.7500 -64.0 + 116.5000 39.7500 -64.0 + 118.5000 38.7500 -64.0 + 121.2500 43.5000 -64.0 + 120.5000 45.2500 -64.0 + 121.2500 46.5000 -64.0 + 125.5000 46.7500 -64.0 + 127.5000 45.7500 -64.0 + 127.7500 42.5000 -64.0 + 126.5000 42.2500 -64.0 + 124.7500 40.5000 -64.0 + 124.7500 36.5000 -64.0 + 122.5000 35.2500 -64.0 + 115.7500 33.5000 -64.0 + 109.5000 33.2500 -64.0 + 107.5000 34.2500 -64.0 + 99.5000 35.2500 -64.0 + 97.5000 38.2500 -64.0 + 95.5000 39.2500 -64.0 + 93.7500 38.5000 -64.0 + 94.5000 37.7500 -64.0 + 95.7500 32.5000 -64.0 +} -64.0 +{ -64.0 + 80.2500 48.5000 -64.0 + 79.2500 49.5000 -64.0 + 83.2500 50.5000 -64.0 + 84.5000 49.7500 -64.0 +} -64.0 +{ -64.0 + 85.2500 50.5000 -64.0 + 86.2500 51.5000 -64.0 + 86.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 137.2500 50.5000 -64.0 + 137.2500 54.5000 -64.0 + 136.5000 56.2500 -64.0 + 136.2500 61.5000 -64.0 + 141.2500 63.5000 -64.0 + 140.2500 66.5000 -64.0 + 141.5000 66.7500 -64.0 + 142.7500 64.5000 -64.0 + 140.7500 60.5000 -64.0 + 146.5000 57.7500 -64.0 + 148.5000 57.7500 -64.0 + 149.7500 56.5000 -64.0 + 143.7500 52.5000 -64.0 + 141.5000 53.2500 -64.0 +} -64.0 +{ -64.0 + 95.2500 53.5000 -64.0 + 92.5000 55.2500 -64.0 + 90.2500 61.5000 -64.0 + 91.5000 60.7500 -64.0 + 91.7500 58.5000 -64.0 + 93.5000 56.7500 -64.0 + 97.5000 57.7500 -64.0 + 97.7500 55.5000 -64.0 +} -64.0 +{ -64.0 + 79.2500 56.5000 -64.0 + 79.2500 62.5000 -64.0 + 77.2500 66.5000 -64.0 + 78.5000 65.7500 -64.0 + 79.5000 66.7500 -64.0 + 79.7500 63.5000 -64.0 + 81.5000 61.7500 -64.0 + 80.7500 60.5000 -64.0 + 81.5000 58.7500 -64.0 +} -64.0 +{ -64.0 + 83.2500 58.5000 -64.0 + 82.2500 60.5000 -64.0 + 83.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 58.5000 -64.0 + 109.5000 58.7500 -64.0 + 113.2500 61.5000 -64.0 + 112.5000 62.2500 -64.0 + 100.5000 62.2500 -64.0 + 94.5000 65.2500 -64.0 + 92.5000 65.2500 -64.0 + 90.5000 66.2500 -64.0 + 87.5000 66.2500 -64.0 + 87.2500 67.5000 -64.0 + 97.5000 67.7500 -64.0 + 99.5000 66.7500 -64.0 + 104.5000 66.7500 -64.0 + 106.5000 65.7500 -64.0 + 109.5000 65.7500 -64.0 + 111.5000 64.7500 -64.0 + 113.5000 64.7500 -64.0 + 115.5000 63.7500 -64.0 + 120.5000 63.7500 -64.0 + 120.7500 62.5000 -64.0 + 119.5000 62.2500 -64.0 + 114.5000 60.2500 -64.0 + 110.7500 58.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 65.5000 -64.0 + 128.2500 66.5000 -64.0 + 129.5000 66.7500 -64.0 +} -64.0 +{ -64.0 + 133.2500 65.5000 -64.0 + 133.2500 67.5000 -64.0 + 133.7500 66.5000 -64.0 +} -64.0 +{ -64.0 + 64.2500 66.5000 -64.0 + 63.5000 67.2500 -64.0 + 59.5000 67.2500 -64.0 + 56.5000 68.2500 -64.0 + 54.7500 67.5000 -64.0 + 53.2500 68.5000 -64.0 + 55.5000 68.7500 -64.0 + 57.2500 69.5000 -64.0 + 62.5000 69.7500 -64.0 + 69.5000 70.7500 -64.0 + 71.2500 72.5000 -64.0 + 71.2500 74.5000 -64.0 + 74.5000 74.7500 -64.0 + 73.5000 74.2500 -64.0 + 71.7500 71.5000 -64.0 + 72.5000 70.7500 -64.0 + 74.7500 70.5000 -64.0 + 72.5000 70.2500 -64.0 + 68.7500 66.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 69.5000 -64.0 + 126.2500 70.5000 -64.0 + 127.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 70.5000 -64.0 + 142.2500 71.5000 -64.0 + 148.5000 71.7500 -64.0 + 150.5000 72.7500 -64.0 + 152.5000 71.7500 -64.0 + 156.7500 71.5000 -64.0 + 152.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 157.2500 70.5000 -64.0 + 157.5000 70.7500 -64.0 + 159.5000 71.7500 -64.0 + 159.7500 70.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 71.5000 -64.0 + 115.5000 72.2500 -64.0 + 107.5000 72.2500 -64.0 + 105.5000 73.2500 -64.0 + 90.5000 73.2500 -64.0 + 90.2500 75.5000 -64.0 + 88.5000 77.2500 -64.0 + 85.5000 75.2500 -64.0 + 84.2500 79.5000 -64.0 + 82.5000 80.2500 -64.0 + 80.5000 79.2500 -64.0 + 80.2500 82.5000 -64.0 + 79.5000 84.2500 -64.0 + 77.5000 84.2500 -64.0 + 70.5000 90.2500 -64.0 + 68.2500 91.5000 -64.0 + 67.2500 93.5000 -64.0 + 69.5000 92.7500 -64.0 + 74.5000 88.7500 -64.0 + 76.5000 88.7500 -64.0 + 77.5000 90.7500 -64.0 + 78.7500 86.5000 -64.0 + 80.5000 85.7500 -64.0 + 80.7500 84.5000 -64.0 + 83.5000 81.7500 -64.0 + 86.5000 81.7500 -64.0 + 88.5000 80.7500 -64.0 + 87.7500 79.5000 -64.0 + 88.5000 77.7500 -64.0 + 90.2500 78.5000 -64.0 + 94.5000 78.7500 -64.0 + 96.5000 77.7500 -64.0 + 112.5000 77.7500 -64.0 + 114.2500 78.5000 -64.0 + 115.5000 80.7500 -64.0 + 117.5000 81.7500 -64.0 + 121.5000 79.7500 -64.0 + 122.5000 80.7500 -64.0 + 126.5000 78.7500 -64.0 + 127.2500 79.5000 -64.0 + 126.2500 81.5000 -64.0 + 128.2500 85.5000 -64.0 + 128.2500 87.5000 -64.0 + 127.5000 89.2500 -64.0 + 128.5000 89.7500 -64.0 + 128.7500 87.5000 -64.0 + 130.5000 85.7500 -64.0 + 132.5000 85.7500 -64.0 + 133.5000 83.7500 -64.0 + 134.2500 84.5000 -64.0 + 135.2500 86.5000 -64.0 + 137.5000 88.7500 -64.0 + 139.5000 89.7500 -64.0 + 143.2500 91.5000 -64.0 + 143.7500 90.5000 -64.0 + 142.5000 90.2500 -64.0 + 139.7500 87.5000 -64.0 + 139.7500 82.5000 -64.0 + 138.7500 79.5000 -64.0 + 137.5000 81.2500 -64.0 + 135.7500 80.5000 -64.0 + 133.5000 80.2500 -64.0 + 131.7500 78.5000 -64.0 + 132.5000 76.7500 -64.0 + 136.5000 74.7500 -64.0 + 133.5000 73.2500 -64.0 + 131.5000 74.2500 -64.0 + 129.5000 74.2500 -64.0 + 126.5000 73.2500 -64.0 + 124.7500 72.5000 -64.0 + 125.7500 71.5000 -64.0 +} -64.0 +{ -64.0 + 141.2500 73.5000 -64.0 + 141.2500 76.5000 -64.0 + 142.7500 73.5000 -64.0 +} -64.0 +{ -64.0 + 68.2500 77.5000 -64.0 + 66.5000 79.2500 -64.0 + 64.5000 79.2500 -64.0 + 65.2500 80.5000 -64.0 + 65.2500 83.5000 -64.0 + 63.2500 90.5000 -64.0 + 67.7500 81.5000 -64.0 + 71.5000 78.7500 -64.0 + 70.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 76.2500 79.5000 -64.0 + 75.5000 81.2500 -64.0 + 76.2500 82.5000 -64.0 + 77.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 147.2500 79.5000 -64.0 + 146.5000 80.2500 -64.0 + 148.2500 82.5000 -64.0 + 150.2500 86.5000 -64.0 + 150.2500 89.5000 -64.0 + 151.2500 91.5000 -64.0 + 151.2500 93.5000 -64.0 + 152.2500 95.5000 -64.0 + 152.2500 98.5000 -64.0 + 151.5000 100.2500 -64.0 + 150.5000 99.2500 -64.0 + 150.2500 101.5000 -64.0 + 151.2500 103.5000 -64.0 + 151.2500 107.5000 -64.0 + 153.2500 111.5000 -64.0 + 155.5000 111.7500 -64.0 + 155.7500 110.5000 -64.0 + 154.5000 111.2500 -64.0 + 152.7500 109.5000 -64.0 + 152.7500 107.5000 -64.0 + 153.5000 105.7500 -64.0 + 154.2500 107.5000 -64.0 + 155.5000 107.7500 -64.0 + 155.7500 105.5000 -64.0 + 153.7500 101.5000 -64.0 + 153.7500 97.5000 -64.0 + 152.7500 95.5000 -64.0 + 152.7500 90.5000 -64.0 + 150.7500 86.5000 -64.0 + 150.7500 81.5000 -64.0 + 152.5000 80.7500 -64.0 + 151.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 61.2500 93.5000 -64.0 + 58.2500 100.5000 -64.0 + 57.2500 105.5000 -64.0 + 58.2500 107.5000 -64.0 + 59.7500 106.5000 -64.0 + 64.5000 97.7500 -64.0 + 63.5000 97.2500 -64.0 + 61.5000 99.2500 -64.0 + 60.7500 97.5000 -64.0 + 61.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 112.5000 -64.0 + 116.5000 113.2500 -64.0 + 106.5000 113.2500 -64.0 + 100.5000 116.2500 -64.0 + 96.5000 116.2500 -64.0 + 94.5000 118.2500 -64.0 + 94.2500 123.5000 -64.0 + 95.2500 126.5000 -64.0 + 93.5000 127.2500 -64.0 + 91.7500 125.5000 -64.0 + 91.7500 122.5000 -64.0 + 90.7500 119.5000 -64.0 + 87.7500 115.5000 -64.0 + 85.5000 115.2500 -64.0 + 83.2500 121.5000 -64.0 + 84.2500 123.5000 -64.0 + 84.2500 128.5000 -64.0 + 86.2500 130.5000 -64.0 + 94.5000 130.7500 -64.0 + 96.5000 128.7500 -64.0 + 98.2500 129.5000 -64.0 + 99.7500 129.5000 -64.0 + 100.7500 127.5000 -64.0 + 103.5000 123.7500 -64.0 + 105.2500 124.5000 -64.0 + 108.5000 124.7500 -64.0 + 114.5000 121.7500 -64.0 + 117.5000 121.7500 -64.0 + 121.2500 124.5000 -64.0 + 124.5000 124.7500 -64.0 + 124.7500 117.5000 -64.0 + 119.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 120.5000 -64.0 + 129.5000 124.2500 -64.0 + 129.2500 126.5000 -64.0 + 127.5000 128.2500 -64.0 + 127.2500 130.5000 -64.0 + 129.5000 130.7500 -64.0 + 132.5000 125.7500 -64.0 + 132.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 140.5000 -64.0 + 88.5000 141.2500 -64.0 + 89.5000 143.7500 -64.0 + 93.2500 146.5000 -64.0 + 96.5000 146.7500 -64.0 + 100.5000 149.7500 -64.0 + 105.5000 150.7500 -64.0 + 108.5000 151.7500 -64.0 + 116.5000 147.7500 -64.0 + 120.7500 145.5000 -64.0 + 121.7500 143.5000 -64.0 + 120.5000 144.2500 -64.0 + 119.7500 143.5000 -64.0 + 112.5000 143.2500 -64.0 + 110.5000 144.2500 -64.0 + 106.5000 144.2500 -64.0 + 99.5000 143.2500 -64.0 + 97.7500 142.5000 -64.0 + 92.5000 142.2500 -64.0 + 90.7500 140.5000 -64.0 +} -64.0 +{ -64.0 + 108.7500 34.5000 -64.0 + 109.5000 33.7500 -64.0 + 111.2500 35.5000 -64.0 + 109.5000 37.2500 -64.0 + 108.7500 36.5000 -64.0 +} -64.0 +{ -64.0 + 111.7500 35.5000 -64.0 + 112.5000 34.7500 -64.0 + 114.5000 34.7500 -64.0 + 115.2500 36.5000 -64.0 + 113.5000 37.2500 -64.0 +} -64.0 +{ -64.0 + 92.7500 40.5000 -64.0 + 93.5000 39.7500 -64.0 + 94.2500 40.5000 -64.0 + 93.5000 42.2500 -64.0 +} -64.0 +{ -64.0 + 96.7500 41.5000 -64.0 + 98.5000 40.7500 -64.0 + 99.2500 42.5000 -64.0 + 97.5000 43.2500 -64.0 +} -64.0 +{ -64.0 + 99.7500 43.5000 -64.0 + 100.5000 42.7500 -64.0 + 101.2500 43.5000 -64.0 + 100.5000 44.2500 -64.0 +} -64.0 +{ -64.0 + 136.7500 59.5000 -64.0 + 137.5000 58.7500 -64.0 + 138.2500 59.5000 -64.0 + 137.5000 60.2500 -64.0 +} -64.0 +{ -64.0 + 111.7500 73.5000 -64.0 + 112.5000 72.7500 -64.0 + 113.2500 73.5000 -64.0 + 121.5000 73.7500 -64.0 + 130.5000 74.7500 -64.0 + 132.2500 75.5000 -64.0 + 131.5000 76.2500 -64.0 + 107.5000 76.2500 -64.0 + 105.7500 75.5000 -64.0 + 107.5000 74.7500 -64.0 + 109.5000 73.7500 -64.0 +} -64.0 +{ -64.0 + 90.7500 76.5000 -64.0 + 91.5000 75.7500 -64.0 + 92.2500 76.5000 -64.0 + 91.5000 77.2500 -64.0 +} -64.0 +{ -64.0 + 69.5000 77.7500 -64.0 + 70.2500 78.5000 -64.0 + 68.5000 80.2500 -64.0 + 67.7500 79.5000 -64.0 +} -64.0 +{ -64.0 + 136.7500 83.5000 -64.0 + 137.5000 82.7500 -64.0 + 138.2500 83.5000 -64.0 + 137.5000 84.2500 -64.0 +} -64.0 +{ -64.0 + 59.7500 100.5000 -64.0 + 60.5000 99.7500 -64.0 + 61.2500 100.5000 -64.0 + 60.5000 101.2500 -64.0 +} -64.0 +{ -64.0 + 104.7500 116.5000 -64.0 + 106.5000 115.7500 -64.0 + 111.5000 116.7500 -64.0 + 112.2500 118.5000 -64.0 + 111.2500 121.5000 -64.0 + 108.5000 123.2500 -64.0 + 101.7500 119.5000 -64.0 + 102.5000 117.7500 -64.0 +} -64.0 +v 233 z -166.000000 -64.0 +{ -64.0 + 105.2500 34.5000 -64.0 + 102.5000 37.2500 -64.0 + 100.5000 35.2500 -64.0 + 98.5000 36.2500 -64.0 + 98.2500 40.5000 -64.0 + 100.2500 42.5000 -64.0 + 102.5000 42.7500 -64.0 + 103.5000 40.7500 -64.0 + 106.5000 40.7500 -64.0 + 108.2500 41.5000 -64.0 + 111.5000 38.7500 -64.0 + 112.2500 40.5000 -64.0 + 118.5000 40.7500 -64.0 + 119.2500 42.5000 -64.0 + 121.2500 43.5000 -64.0 + 121.2500 45.5000 -64.0 + 122.2500 47.5000 -64.0 + 125.7500 47.5000 -64.0 + 123.5000 47.2500 -64.0 + 122.7500 45.5000 -64.0 + 126.5000 42.7500 -64.0 + 124.7500 41.5000 -64.0 + 125.5000 40.7500 -64.0 + 125.7500 37.5000 -64.0 + 122.7500 36.5000 -64.0 + 121.5000 37.2500 -64.0 + 118.7500 34.5000 -64.0 + 116.5000 35.2500 -64.0 + 113.5000 34.2500 -64.0 + 111.5000 35.2500 -64.0 + 110.5000 34.2500 -64.0 + 108.5000 35.2500 -64.0 +} -64.0 +{ -64.0 + 87.2500 38.5000 -64.0 + 91.2500 41.5000 -64.0 + 91.7500 40.5000 -64.0 + 93.5000 39.7500 -64.0 + 90.7500 38.5000 -64.0 +} -64.0 +{ -64.0 + 86.2500 43.5000 -64.0 + 87.2500 44.5000 -64.0 + 86.5000 46.2500 -64.0 + 87.2500 47.5000 -64.0 + 88.5000 45.7500 -64.0 + 90.5000 44.7500 -64.0 + 89.7500 43.5000 -64.0 +} -64.0 +{ -64.0 + 94.2500 44.5000 -64.0 + 95.2500 45.5000 -64.0 + 93.5000 46.2500 -64.0 + 95.2500 48.5000 -64.0 + 94.5000 52.2500 -64.0 + 92.5000 52.2500 -64.0 + 95.2500 53.5000 -64.0 + 96.5000 52.7500 -64.0 + 95.7500 50.5000 -64.0 + 96.5000 48.7500 -64.0 + 98.5000 48.7500 -64.0 + 99.5000 45.7500 -64.0 + 110.5000 51.7500 -64.0 + 111.2500 53.5000 -64.0 + 120.5000 56.7500 -64.0 + 121.5000 56.2500 -64.0 + 106.5000 48.2500 -64.0 + 100.5000 44.2500 -64.0 + 97.5000 45.2500 -64.0 +} -64.0 +{ -64.0 + 129.2500 44.5000 -64.0 + 129.2500 46.5000 -64.0 + 130.7500 44.5000 -64.0 +} -64.0 +{ -64.0 + 137.2500 60.5000 -64.0 + 136.5000 61.2500 -64.0 + 137.5000 63.7500 -64.0 + 139.5000 64.7500 -64.0 + 140.2500 66.5000 -64.0 + 141.2500 68.5000 -64.0 + 143.5000 68.7500 -64.0 + 143.7500 67.5000 -64.0 + 141.7500 65.5000 -64.0 + 143.7500 64.5000 -64.0 + 142.7500 62.5000 -64.0 + 138.5000 62.2500 -64.0 +} -64.0 +{ -64.0 + 129.2500 63.5000 -64.0 + 127.2500 66.5000 -64.0 + 128.2500 68.5000 -64.0 + 128.2500 72.5000 -64.0 + 129.5000 72.7500 -64.0 + 132.2500 76.5000 -64.0 + 132.2500 78.5000 -64.0 + 134.2500 82.5000 -64.0 + 134.2500 84.5000 -64.0 + 136.2500 86.5000 -64.0 + 146.2500 93.5000 -64.0 + 146.7500 92.5000 -64.0 + 142.7500 88.5000 -64.0 + 141.7500 79.5000 -64.0 + 139.5000 76.2500 -64.0 + 135.7500 74.5000 -64.0 + 135.7500 71.5000 -64.0 + 134.5000 72.2500 -64.0 + 131.5000 72.2500 -64.0 + 128.7500 68.5000 -64.0 + 128.7500 66.5000 -64.0 + 129.7500 64.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 68.5000 -64.0 + 80.5000 70.2500 -64.0 + 78.5000 70.2500 -64.0 + 83.2500 73.5000 -64.0 + 84.2500 75.5000 -64.0 + 83.5000 77.2500 -64.0 + 79.5000 77.2500 -64.0 + 77.5000 75.2500 -64.0 + 77.2500 77.5000 -64.0 + 75.5000 79.2500 -64.0 + 72.7500 77.5000 -64.0 + 72.7500 75.5000 -64.0 + 71.5000 75.2500 -64.0 + 67.5000 77.2500 -64.0 + 67.2500 79.5000 -64.0 + 64.2500 85.5000 -64.0 + 63.2500 90.5000 -64.0 + 58.2500 100.5000 -64.0 + 57.2500 105.5000 -64.0 + 58.2500 107.5000 -64.0 + 60.7500 106.5000 -64.0 + 67.5000 93.7500 -64.0 + 71.5000 90.7500 -64.0 + 79.5000 86.7500 -64.0 + 81.7500 84.5000 -64.0 + 86.5000 75.7500 -64.0 + 86.7500 72.5000 -64.0 + 83.5000 72.2500 -64.0 + 82.7500 70.5000 -64.0 + 85.7500 68.5000 -64.0 +} -64.0 +{ -64.0 + 74.2500 69.5000 -64.0 + 73.5000 70.2500 -64.0 + 74.2500 71.5000 -64.0 + 74.2500 73.5000 -64.0 + 74.7500 72.5000 -64.0 + 75.5000 70.7500 -64.0 +} -64.0 +{ -64.0 + 147.2500 77.5000 -64.0 + 143.2500 79.5000 -64.0 + 147.2500 80.5000 -64.0 + 150.2500 86.5000 -64.0 + 150.2500 89.5000 -64.0 + 151.2500 91.5000 -64.0 + 151.2500 96.5000 -64.0 + 150.5000 98.2500 -64.0 + 149.5000 97.2500 -64.0 + 149.2500 99.5000 -64.0 + 150.2500 101.5000 -64.0 + 150.2500 105.5000 -64.0 + 152.2500 111.5000 -64.0 + 155.5000 111.7500 -64.0 + 155.7500 107.5000 -64.0 + 153.7500 101.5000 -64.0 + 153.7500 96.5000 -64.0 + 152.7500 94.5000 -64.0 + 151.7500 85.5000 -64.0 + 149.7500 78.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 111.5000 -64.0 + 113.5000 114.2500 -64.0 + 112.7500 113.5000 -64.0 + 106.5000 113.2500 -64.0 + 100.5000 116.2500 -64.0 + 92.5000 115.2500 -64.0 + 89.2500 116.5000 -64.0 + 91.2500 120.5000 -64.0 + 92.2500 127.5000 -64.0 + 90.5000 128.2500 -64.0 + 85.7500 118.5000 -64.0 + 84.5000 118.2500 -64.0 + 82.5000 120.2500 -64.0 + 82.2500 124.5000 -64.0 + 85.2500 130.5000 -64.0 + 92.5000 130.7500 -64.0 + 94.2500 132.5000 -64.0 + 97.5000 132.7500 -64.0 + 100.7500 127.5000 -64.0 + 103.5000 124.7500 -64.0 + 107.5000 124.7500 -64.0 + 109.5000 123.7500 -64.0 + 117.5000 122.7500 -64.0 + 125.5000 127.7500 -64.0 + 131.5000 124.7500 -64.0 + 131.7500 121.5000 -64.0 + 130.7500 119.5000 -64.0 + 131.5000 117.7500 -64.0 + 130.5000 116.2500 -64.0 + 122.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 149.5000 -64.0 + 114.2500 150.5000 -64.0 + 115.2500 153.5000 -64.0 + 115.7500 152.5000 -64.0 +} -64.0 +{ -64.0 + 134.7500 77.5000 -64.0 + 135.5000 76.7500 -64.0 + 136.2500 77.5000 -64.0 + 135.5000 78.2500 -64.0 +} -64.0 +{ -64.0 + 70.5000 78.7500 -64.0 + 72.5000 78.7500 -64.0 + 77.2500 83.5000 -64.0 + 76.5000 85.2500 -64.0 + 72.5000 88.2500 -64.0 + 70.5000 89.2500 -64.0 + 63.5000 97.2500 -64.0 + 62.7500 95.5000 -64.0 + 63.7500 90.5000 -64.0 + 66.7500 86.5000 -64.0 + 67.7500 81.5000 -64.0 +} -64.0 +{ -64.0 + 58.7500 104.5000 -64.0 + 59.5000 103.7500 -64.0 + 60.2500 104.5000 -64.0 + 59.5000 105.2500 -64.0 +} -64.0 +{ -64.0 + 152.7500 106.5000 -64.0 + 153.5000 105.7500 -64.0 + 155.2500 109.5000 -64.0 + 154.5000 111.2500 -64.0 + 152.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 120.7500 112.5000 -64.0 + 121.5000 111.7500 -64.0 + 122.2500 112.5000 -64.0 + 121.2500 114.5000 -64.0 + 122.2500 117.5000 -64.0 + 120.5000 118.2500 -64.0 + 118.5000 119.2500 -64.0 + 116.5000 119.2500 -64.0 + 108.5000 123.2500 -64.0 + 104.5000 123.2500 -64.0 + 102.7500 122.5000 -64.0 + 96.5000 122.2500 -64.0 + 94.7500 120.5000 -64.0 + 96.5000 117.7500 -64.0 + 101.7500 117.5000 -64.0 + 108.5000 114.7500 -64.0 + 110.2500 115.5000 -64.0 + 116.5000 115.7500 -64.0 + 118.5000 113.7500 -64.0 +} -64.0 +v 207 z -168.000000 -64.0 +{ -64.0 + 105.2500 35.5000 -64.0 + 104.2500 37.5000 -64.0 + 102.5000 38.2500 -64.0 + 100.5000 36.2500 -64.0 + 98.5000 37.2500 -64.0 + 97.2500 45.5000 -64.0 + 95.5000 46.2500 -64.0 + 93.7500 44.5000 -64.0 + 92.5000 46.2500 -64.0 + 89.5000 46.2500 -64.0 + 89.2500 49.5000 -64.0 + 94.5000 56.7500 -64.0 + 95.7500 52.5000 -64.0 + 99.7500 46.5000 -64.0 + 106.5000 42.7500 -64.0 + 114.5000 42.7500 -64.0 + 119.5000 44.7500 -64.0 + 123.2500 48.5000 -64.0 + 126.5000 48.7500 -64.0 + 128.5000 46.2500 -64.0 + 126.5000 47.2500 -64.0 + 122.7500 46.5000 -64.0 + 125.5000 43.7500 -64.0 + 128.7500 43.5000 -64.0 + 124.7500 42.5000 -64.0 + 124.7500 38.5000 -64.0 + 120.5000 38.2500 -64.0 + 119.7500 36.5000 -64.0 + 118.5000 36.2500 -64.0 + 116.5000 37.2500 -64.0 + 113.7500 35.5000 -64.0 + 112.5000 36.2500 -64.0 +} -64.0 +{ -64.0 + 92.2500 39.5000 -64.0 + 91.2500 41.5000 -64.0 + 93.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 84.2500 63.5000 -64.0 + 84.2500 64.5000 -64.0 + 82.2500 68.5000 -64.0 + 75.5000 74.2500 -64.0 + 70.5000 74.2500 -64.0 + 69.2500 75.5000 -64.0 + 64.2500 85.5000 -64.0 + 63.2500 90.5000 -64.0 + 58.5000 101.2500 -64.0 + 58.2500 106.5000 -64.0 + 60.5000 106.7500 -64.0 + 63.5000 103.7500 -64.0 + 63.7500 101.5000 -64.0 + 68.7500 91.5000 -64.0 + 66.5000 92.2500 -64.0 + 66.2500 93.5000 -64.0 + 64.5000 95.2500 -64.0 + 63.7500 93.5000 -64.0 + 64.5000 91.7500 -64.0 + 66.7500 85.5000 -64.0 + 68.7500 80.5000 -64.0 + 71.5000 76.7500 -64.0 + 75.2500 79.5000 -64.0 + 75.2500 82.5000 -64.0 + 76.2500 84.5000 -64.0 + 73.5000 87.2500 -64.0 + 71.5000 88.2500 -64.0 + 69.5000 90.7500 -64.0 + 78.5000 86.7500 -64.0 + 82.7500 82.5000 -64.0 + 86.7500 74.5000 -64.0 + 87.7500 67.5000 -64.0 + 85.2500 72.5000 -64.0 + 84.5000 74.2500 -64.0 + 83.7500 73.5000 -64.0 + 82.7500 71.5000 -64.0 + 83.5000 69.7500 -64.0 + 85.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 63.5000 -64.0 + 129.5000 65.2500 -64.0 + 129.2500 67.5000 -64.0 + 130.2500 69.5000 -64.0 + 130.2500 72.5000 -64.0 + 133.2500 78.5000 -64.0 + 134.2500 83.5000 -64.0 + 136.5000 85.7500 -64.0 + 146.2500 92.5000 -64.0 + 146.7500 91.5000 -64.0 + 142.7500 87.5000 -64.0 + 142.7500 84.5000 -64.0 + 141.7500 82.5000 -64.0 + 142.5000 78.7500 -64.0 + 146.5000 78.7500 -64.0 + 150.2500 86.5000 -64.0 + 151.2500 95.5000 -64.0 + 150.5000 97.2500 -64.0 + 147.7500 93.5000 -64.0 + 147.2500 94.5000 -64.0 + 149.2500 98.5000 -64.0 + 149.2500 101.5000 -64.0 + 151.2500 105.5000 -64.0 + 151.2500 109.5000 -64.0 + 153.5000 111.7500 -64.0 + 155.5000 110.7500 -64.0 + 155.7500 105.5000 -64.0 + 153.7500 101.5000 -64.0 + 153.7500 94.5000 -64.0 + 152.7500 92.5000 -64.0 + 151.7500 83.5000 -64.0 + 150.7500 81.5000 -64.0 + 150.7500 79.5000 -64.0 + 147.7500 75.5000 -64.0 + 143.5000 75.2500 -64.0 + 139.5000 73.2500 -64.0 + 137.7500 69.5000 -64.0 + 136.5000 70.2500 -64.0 + 134.7500 69.5000 -64.0 + 132.5000 71.2500 -64.0 + 131.7500 70.5000 -64.0 + 131.7500 67.5000 -64.0 + 133.5000 65.7500 -64.0 + 136.5000 65.7500 -64.0 + 138.2500 66.5000 -64.0 + 138.5000 68.7500 -64.0 + 138.7500 65.5000 -64.0 + 136.5000 65.2500 -64.0 + 134.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 111.5000 -64.0 + 113.5000 114.2500 -64.0 + 111.7500 113.5000 -64.0 + 107.5000 113.2500 -64.0 + 101.5000 116.2500 -64.0 + 94.5000 116.2500 -64.0 + 91.5000 115.2500 -64.0 + 87.2500 116.5000 -64.0 + 83.5000 123.2500 -64.0 + 83.2500 127.5000 -64.0 + 84.2500 130.5000 -64.0 + 89.5000 135.7500 -64.0 + 94.5000 136.7500 -64.0 + 97.5000 133.7500 -64.0 + 97.7500 131.5000 -64.0 + 100.5000 127.7500 -64.0 + 104.7500 125.5000 -64.0 + 103.7500 123.5000 -64.0 + 101.5000 123.2500 -64.0 + 99.5000 124.2500 -64.0 + 97.5000 124.2500 -64.0 + 97.2500 126.5000 -64.0 + 95.5000 128.2500 -64.0 + 93.7500 127.5000 -64.0 + 93.7500 125.5000 -64.0 + 92.5000 125.2500 -64.0 + 89.7500 122.5000 -64.0 + 93.5000 117.7500 -64.0 + 100.5000 117.7500 -64.0 + 106.5000 114.7500 -64.0 + 110.5000 114.7500 -64.0 + 112.5000 115.7500 -64.0 + 114.5000 114.7500 -64.0 + 116.5000 114.7500 -64.0 + 122.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 113.5000 -64.0 + 131.2500 115.5000 -64.0 + 131.2500 118.5000 -64.0 + 129.5000 120.2500 -64.0 + 129.2500 124.5000 -64.0 + 125.5000 127.2500 -64.0 + 122.7500 123.5000 -64.0 + 123.5000 121.7500 -64.0 + 125.5000 121.7500 -64.0 + 124.7500 120.5000 -64.0 + 119.5000 119.2500 -64.0 + 118.5000 121.2500 -64.0 + 115.5000 121.2500 -64.0 + 113.5000 122.2500 -64.0 + 113.2500 124.5000 -64.0 + 114.5000 123.7500 -64.0 + 118.5000 123.7500 -64.0 + 126.5000 130.7500 -64.0 + 132.5000 122.7500 -64.0 + 132.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 142.5000 -64.0 + 116.5000 143.2500 -64.0 + 113.5000 146.2500 -64.0 + 111.7500 145.5000 -64.0 + 107.5000 145.2500 -64.0 + 107.2500 146.5000 -64.0 + 111.2500 148.5000 -64.0 + 114.2500 154.5000 -64.0 + 116.5000 153.7500 -64.0 + 116.7500 148.5000 -64.0 + 119.5000 144.7500 -64.0 + 119.7500 142.5000 -64.0 +} -64.0 +{ -64.0 + 89.7500 47.5000 -64.0 + 91.5000 46.7500 -64.0 + 92.2500 48.5000 -64.0 + 90.5000 49.2500 -64.0 +} -64.0 +{ -64.0 + 59.7500 103.5000 -64.0 + 60.5000 102.7500 -64.0 + 61.2500 104.5000 -64.0 + 59.5000 106.2500 -64.0 + 58.7500 105.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 106.5000 -64.0 + 153.5000 105.7500 -64.0 + 155.2500 108.5000 -64.0 + 154.5000 110.2500 -64.0 + 152.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 86.7500 122.5000 -64.0 + 87.5000 121.7500 -64.0 + 88.2500 122.5000 -64.0 + 87.5000 124.2500 -64.0 +} -64.0 +v 246 z -170.000000 -64.0 +{ -64.0 + 105.2500 36.5000 -64.0 + 104.5000 37.2500 -64.0 + 102.5000 38.2500 -64.0 + 100.7500 37.5000 -64.0 + 98.5000 38.2500 -64.0 + 98.2500 39.5000 -64.0 + 95.5000 42.2500 -64.0 + 93.5000 42.2500 -64.0 + 93.2500 44.5000 -64.0 + 89.5000 48.2500 -64.0 + 88.2500 54.5000 -64.0 + 85.2500 60.5000 -64.0 + 86.5000 60.7500 -64.0 + 87.7500 58.5000 -64.0 + 88.7500 56.5000 -64.0 + 89.5000 54.7500 -64.0 + 91.5000 53.7500 -64.0 + 93.2500 54.5000 -64.0 + 94.2500 56.5000 -64.0 + 91.2500 63.5000 -64.0 + 92.7500 62.5000 -64.0 + 96.5000 55.7500 -64.0 + 96.7500 52.5000 -64.0 + 103.5000 46.7500 -64.0 + 109.5000 43.7500 -64.0 + 112.5000 43.7500 -64.0 + 117.5000 45.7500 -64.0 + 125.2500 52.5000 -64.0 + 128.2500 58.5000 -64.0 + 128.5000 62.7500 -64.0 + 130.5000 59.7500 -64.0 + 132.2500 60.5000 -64.0 + 133.2500 62.5000 -64.0 + 131.5000 64.2500 -64.0 + 129.5000 65.2500 -64.0 + 129.2500 67.5000 -64.0 + 130.2500 69.5000 -64.0 + 130.2500 71.5000 -64.0 + 133.2500 77.5000 -64.0 + 133.2500 79.5000 -64.0 + 134.2500 82.5000 -64.0 + 135.5000 82.7500 -64.0 + 146.2500 92.5000 -64.0 + 149.2500 98.5000 -64.0 + 149.2500 100.5000 -64.0 + 150.2500 102.5000 -64.0 + 150.2500 104.5000 -64.0 + 151.2500 106.5000 -64.0 + 151.5000 109.7500 -64.0 + 153.5000 110.7500 -64.0 + 155.5000 109.7500 -64.0 + 155.7500 105.5000 -64.0 + 154.7500 103.5000 -64.0 + 154.7500 101.5000 -64.0 + 153.7500 99.5000 -64.0 + 153.7500 94.5000 -64.0 + 152.7500 92.5000 -64.0 + 152.7500 87.5000 -64.0 + 151.7500 85.5000 -64.0 + 151.7500 82.5000 -64.0 + 149.7500 76.5000 -64.0 + 146.7500 73.5000 -64.0 + 142.5000 72.2500 -64.0 + 134.7500 63.5000 -64.0 + 134.7500 61.5000 -64.0 + 131.7500 57.5000 -64.0 + 128.7500 51.5000 -64.0 + 126.7500 50.5000 -64.0 + 128.5000 48.7500 -64.0 + 128.5000 45.2500 -64.0 + 126.5000 44.2500 -64.0 + 124.7500 39.5000 -64.0 + 120.5000 39.2500 -64.0 + 119.7500 37.5000 -64.0 + 110.5000 37.2500 -64.0 +} -64.0 +{ -64.0 + 84.2500 62.5000 -64.0 + 83.5000 63.2500 -64.0 + 83.2500 65.5000 -64.0 + 80.5000 68.2500 -64.0 + 76.5000 71.2500 -64.0 + 74.5000 71.2500 -64.0 + 71.5000 72.2500 -64.0 + 69.2500 74.5000 -64.0 + 68.2500 76.5000 -64.0 + 67.5000 78.2500 -64.0 + 65.2500 84.5000 -64.0 + 63.5000 88.2500 -64.0 + 63.2500 90.5000 -64.0 + 62.2500 93.5000 -64.0 + 59.5000 99.2500 -64.0 + 59.2500 101.5000 -64.0 + 58.2500 104.5000 -64.0 + 59.2500 106.5000 -64.0 + 61.7500 106.5000 -64.0 + 69.7500 90.5000 -64.0 + 68.2500 90.5000 -64.0 + 65.5000 94.2500 -64.0 + 64.7500 93.5000 -64.0 + 65.7500 88.5000 -64.0 + 66.7500 85.5000 -64.0 + 69.7500 78.5000 -64.0 + 72.5000 75.7500 -64.0 + 76.5000 73.7500 -64.0 + 77.2500 74.5000 -64.0 + 77.2500 83.5000 -64.0 + 71.5000 88.7500 -64.0 + 76.5000 86.7500 -64.0 + 83.7500 81.5000 -64.0 + 85.7500 77.5000 -64.0 + 86.5000 75.7500 -64.0 + 88.7500 69.5000 -64.0 + 90.7500 64.5000 -64.0 + 89.2500 65.5000 -64.0 + 88.2500 67.5000 -64.0 + 87.5000 69.2500 -64.0 + 85.2500 75.5000 -64.0 + 83.5000 76.2500 -64.0 + 81.7500 74.5000 -64.0 + 80.7500 72.5000 -64.0 + 82.7500 71.5000 -64.0 + 83.7500 66.5000 -64.0 + 84.7500 63.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 112.5000 -64.0 + 102.5000 116.2500 -64.0 + 103.5000 116.7500 -64.0 + 107.5000 113.7500 -64.0 + 109.5000 113.7500 -64.0 + 111.2500 115.5000 -64.0 + 115.5000 115.7500 -64.0 + 119.5000 113.7500 -64.0 + 122.5000 113.7500 -64.0 + 123.7500 112.5000 -64.0 + 121.5000 112.2500 -64.0 + 117.5000 114.2500 -64.0 + 112.5000 114.2500 -64.0 + 108.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 115.5000 -64.0 + 88.5000 116.2500 -64.0 + 87.2500 118.5000 -64.0 + 100.5000 118.7500 -64.0 + 101.7500 117.5000 -64.0 + 94.5000 117.2500 -64.0 +} -64.0 +{ -64.0 + 131.2500 115.5000 -64.0 + 130.2500 117.5000 -64.0 + 130.7500 118.5000 -64.0 + 131.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 86.2500 119.5000 -64.0 + 85.2500 120.5000 -64.0 + 84.2500 125.5000 -64.0 + 85.2500 128.5000 -64.0 + 86.5000 128.7500 -64.0 + 86.7500 125.5000 -64.0 + 85.7500 123.5000 -64.0 + 86.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 120.5000 -64.0 + 120.5000 121.2500 -64.0 + 118.5000 121.2500 -64.0 + 112.5000 124.2500 -64.0 + 110.7500 123.5000 -64.0 + 108.5000 123.2500 -64.0 + 108.2500 124.5000 -64.0 + 113.5000 124.7500 -64.0 + 115.5000 123.7500 -64.0 + 117.5000 123.7500 -64.0 + 121.5000 125.7500 -64.0 + 122.2500 127.5000 -64.0 + 124.2500 131.5000 -64.0 + 124.2500 134.5000 -64.0 + 126.5000 134.7500 -64.0 + 128.5000 131.7500 -64.0 + 128.7500 129.5000 -64.0 + 130.7500 125.5000 -64.0 + 129.7500 123.5000 -64.0 + 127.5000 123.2500 -64.0 + 129.2500 124.5000 -64.0 + 129.2500 127.5000 -64.0 + 126.5000 129.2500 -64.0 + 125.7500 128.5000 -64.0 + 122.7500 123.5000 -64.0 + 123.5000 122.7500 -64.0 + 126.7500 122.5000 -64.0 + 124.5000 122.2500 -64.0 + 122.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 124.5000 -64.0 + 93.2500 126.5000 -64.0 + 87.5000 131.2500 -64.0 + 89.2500 134.5000 -64.0 + 95.5000 138.7500 -64.0 + 97.5000 137.7500 -64.0 + 97.7500 131.5000 -64.0 + 100.7500 127.5000 -64.0 + 105.5000 125.7500 -64.0 + 103.7500 124.5000 -64.0 + 100.5000 124.2500 -64.0 + 96.5000 127.2500 -64.0 + 94.5000 134.2500 -64.0 + 92.5000 134.2500 -64.0 + 90.7500 132.5000 -64.0 + 90.7500 130.5000 -64.0 + 94.5000 127.7500 -64.0 + 94.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 139.5000 -64.0 + 120.5000 140.2500 -64.0 + 118.5000 141.2500 -64.0 + 114.5000 144.2500 -64.0 + 105.5000 144.2500 -64.0 + 102.5000 143.2500 -64.0 + 103.5000 144.7500 -64.0 + 109.5000 147.7500 -64.0 + 111.5000 145.7500 -64.0 + 114.5000 145.7500 -64.0 + 116.5000 144.7500 -64.0 + 117.2500 145.5000 -64.0 + 117.5000 148.7500 -64.0 + 117.7500 146.5000 -64.0 + 121.7500 141.5000 -64.0 + 122.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 154.5000 -64.0 + 113.2500 156.5000 -64.0 + 113.7500 155.5000 -64.0 +} -64.0 +{ -64.0 + 140.7500 75.5000 -64.0 + 142.5000 74.7500 -64.0 + 146.2500 77.5000 -64.0 + 149.2500 82.5000 -64.0 + 149.2500 84.5000 -64.0 + 150.2500 86.5000 -64.0 + 151.2500 94.5000 -64.0 + 150.5000 96.2500 -64.0 + 141.7500 84.5000 -64.0 + 141.7500 82.5000 -64.0 + 139.7500 81.5000 -64.0 + 139.7500 77.5000 -64.0 +} -64.0 +{ -64.0 + 134.7500 76.5000 -64.0 + 136.5000 75.7500 -64.0 + 138.2500 77.5000 -64.0 + 137.5000 78.2500 -64.0 + 135.5000 78.2500 -64.0 +} -64.0 +{ -64.0 + 60.5000 102.7500 -64.0 + 62.2500 103.5000 -64.0 + 60.5000 106.2500 -64.0 + 58.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 105.5000 -64.0 + 153.5000 104.7500 -64.0 + 155.2500 107.5000 -64.0 + 154.5000 109.2500 -64.0 + 152.7500 108.5000 -64.0 +} -64.0 +v 234 z -172.000000 -64.0 +{ -64.0 + 104.2500 38.5000 -64.0 + 103.5000 40.2500 -64.0 + 98.5000 39.2500 -64.0 + 98.2500 40.5000 -64.0 + 94.5000 43.2500 -64.0 + 90.2500 48.5000 -64.0 + 83.2500 62.5000 -64.0 + 76.5000 69.2500 -64.0 + 74.5000 69.2500 -64.0 + 69.5000 73.2500 -64.0 + 59.5000 100.2500 -64.0 + 59.2500 105.5000 -64.0 + 62.5000 105.7500 -64.0 + 66.7500 98.5000 -64.0 + 67.7500 93.5000 -64.0 + 70.5000 89.7500 -64.0 + 78.5000 84.7500 -64.0 + 82.5000 80.7500 -64.0 + 84.5000 79.7500 -64.0 + 91.7500 65.5000 -64.0 + 100.5000 50.7500 -64.0 + 104.5000 47.7500 -64.0 + 110.5000 44.7500 -64.0 + 115.5000 45.7500 -64.0 + 122.2500 51.5000 -64.0 + 127.2500 59.5000 -64.0 + 127.2500 61.5000 -64.0 + 128.5000 62.7500 -64.0 + 128.7500 60.5000 -64.0 + 127.7500 58.5000 -64.0 + 129.5000 56.7500 -64.0 + 131.2500 57.5000 -64.0 + 134.2500 62.5000 -64.0 + 133.2500 65.5000 -64.0 + 131.5000 66.2500 -64.0 + 129.5000 65.2500 -64.0 + 129.2500 67.5000 -64.0 + 130.2500 69.5000 -64.0 + 130.2500 71.5000 -64.0 + 133.2500 77.5000 -64.0 + 133.2500 79.5000 -64.0 + 139.2500 83.5000 -64.0 + 140.2500 85.5000 -64.0 + 145.2500 90.5000 -64.0 + 149.2500 97.5000 -64.0 + 149.2500 99.5000 -64.0 + 152.2500 109.5000 -64.0 + 154.5000 109.7500 -64.0 + 156.7500 106.5000 -64.0 + 155.7500 104.5000 -64.0 + 155.7500 102.5000 -64.0 + 153.7500 98.5000 -64.0 + 152.7500 86.5000 -64.0 + 148.7500 73.5000 -64.0 + 144.5000 71.2500 -64.0 + 138.5000 65.2500 -64.0 + 128.7500 50.5000 -64.0 + 128.7500 46.5000 -64.0 + 125.7500 44.5000 -64.0 + 125.7500 42.5000 -64.0 + 123.5000 40.2500 -64.0 + 120.5000 41.2500 -64.0 + 118.5000 38.2500 -64.0 + 116.5000 39.2500 -64.0 + 114.5000 38.2500 -64.0 + 112.5000 39.2500 -64.0 +} -64.0 +{ -64.0 + 106.2500 112.5000 -64.0 + 104.5000 113.2500 -64.0 + 103.5000 115.2500 -64.0 + 99.5000 118.2500 -64.0 + 96.5000 118.2500 -64.0 + 94.5000 119.2500 -64.0 + 89.5000 118.2500 -64.0 + 88.2500 119.5000 -64.0 + 92.5000 119.7500 -64.0 + 94.5000 121.7500 -64.0 + 100.5000 119.7500 -64.0 + 106.5000 113.7500 -64.0 + 109.5000 113.7500 -64.0 + 111.2500 115.5000 -64.0 + 115.2500 116.5000 -64.0 + 118.7500 115.5000 -64.0 + 113.5000 115.2500 -64.0 + 109.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 113.5000 -64.0 + 121.5000 114.2500 -64.0 + 119.5000 114.2500 -64.0 + 122.5000 115.7500 -64.0 + 125.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 116.5000 -64.0 + 130.2500 117.5000 -64.0 + 131.5000 117.7500 -64.0 + 131.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 118.5000 -64.0 + 119.2500 120.5000 -64.0 + 114.5000 124.2500 -64.0 + 111.5000 124.2500 -64.0 + 109.7500 123.5000 -64.0 + 106.5000 125.2500 -64.0 + 98.5000 125.2500 -64.0 + 95.5000 124.2500 -64.0 + 94.2500 127.5000 -64.0 + 90.2500 131.5000 -64.0 + 89.2500 133.5000 -64.0 + 90.2500 135.5000 -64.0 + 92.5000 130.7500 -64.0 + 94.5000 129.7500 -64.0 + 96.2500 130.5000 -64.0 + 96.2500 135.5000 -64.0 + 95.5000 137.2500 -64.0 + 93.5000 138.2500 -64.0 + 91.7500 136.5000 -64.0 + 91.2500 137.5000 -64.0 + 101.2500 145.5000 -64.0 + 103.5000 145.7500 -64.0 + 107.2500 148.5000 -64.0 + 108.7500 148.5000 -64.0 + 107.7500 146.5000 -64.0 + 108.5000 145.7500 -64.0 + 112.5000 145.7500 -64.0 + 116.5000 143.7500 -64.0 + 118.2500 144.5000 -64.0 + 118.5000 148.7500 -64.0 + 118.7500 145.5000 -64.0 + 123.5000 140.7500 -64.0 + 129.5000 132.7500 -64.0 + 129.7500 130.5000 -64.0 + 126.5000 131.2500 -64.0 + 124.7500 128.5000 -64.0 + 124.7500 125.5000 -64.0 + 126.5000 124.7500 -64.0 + 130.5000 126.7500 -64.0 + 130.7500 125.5000 -64.0 + 128.7500 123.5000 -64.0 + 125.5000 123.2500 -64.0 + 121.7500 121.5000 -64.0 + 121.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 85.2500 123.5000 -64.0 + 85.2500 125.5000 -64.0 + 86.5000 125.7500 -64.0 + 86.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 160.5000 -64.0 + 113.2500 161.5000 -64.0 + 114.7500 160.5000 -64.0 +} -64.0 +{ -64.0 + 98.7500 46.5000 -64.0 + 99.5000 45.7500 -64.0 + 100.2500 46.5000 -64.0 + 99.5000 47.2500 -64.0 +} -64.0 +{ -64.0 + 93.7500 49.5000 -64.0 + 94.5000 48.7500 -64.0 + 98.2500 50.5000 -64.0 + 96.2500 53.5000 -64.0 + 95.2500 55.5000 -64.0 + 93.2500 60.5000 -64.0 + 87.5000 67.2500 -64.0 + 87.2500 70.5000 -64.0 + 86.2500 73.5000 -64.0 + 78.5000 81.2500 -64.0 + 68.5000 90.2500 -64.0 + 66.5000 90.2500 -64.0 + 65.7500 88.5000 -64.0 + 66.7500 85.5000 -64.0 + 69.7500 78.5000 -64.0 + 72.5000 74.7500 -64.0 + 76.5000 72.7500 -64.0 + 76.7500 71.5000 -64.0 + 80.5000 68.7500 -64.0 + 82.5000 68.7500 -64.0 + 82.7500 67.5000 -64.0 + 86.7500 59.5000 -64.0 + 89.7500 57.5000 -64.0 + 88.7500 55.5000 -64.0 + 90.5000 53.7500 -64.0 + 94.5000 53.7500 -64.0 + 94.7500 51.5000 -64.0 +} -64.0 +{ -64.0 + 124.7500 51.5000 -64.0 + 126.5000 50.7500 -64.0 + 128.2500 51.5000 -64.0 + 128.2500 53.5000 -64.0 + 126.5000 54.2500 -64.0 +} -64.0 +{ -64.0 + 140.7500 75.5000 -64.0 + 141.5000 74.7500 -64.0 + 145.5000 74.7500 -64.0 + 147.2500 76.5000 -64.0 + 147.2500 78.5000 -64.0 + 149.2500 82.5000 -64.0 + 149.2500 85.5000 -64.0 + 150.2500 87.5000 -64.0 + 150.2500 90.5000 -64.0 + 151.2500 92.5000 -64.0 + 150.5000 94.2500 -64.0 + 148.7500 92.5000 -64.0 + 147.7500 90.5000 -64.0 + 145.5000 88.2500 -64.0 + 140.7500 81.5000 -64.0 + 137.7500 77.5000 -64.0 + 138.5000 76.7500 -64.0 +} -64.0 +{ -64.0 + 65.7500 91.5000 -64.0 + 66.5000 90.7500 -64.0 + 67.2500 91.5000 -64.0 + 65.5000 94.2500 -64.0 + 64.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 62.5000 99.7500 -64.0 + 63.2500 100.5000 -64.0 + 62.5000 101.2500 -64.0 + 62.2500 103.5000 -64.0 + 60.5000 104.2500 -64.0 + 59.7500 102.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 104.5000 -64.0 + 153.5000 103.7500 -64.0 + 154.2500 104.5000 -64.0 + 155.2500 106.5000 -64.0 + 154.5000 108.2500 -64.0 + 152.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 115.7500 124.5000 -64.0 + 117.5000 123.7500 -64.0 + 120.5000 124.7500 -64.0 + 123.2500 128.5000 -64.0 + 123.2500 133.5000 -64.0 + 122.2500 136.5000 -64.0 + 119.5000 140.2500 -64.0 + 111.5000 144.2500 -64.0 + 109.7500 143.5000 -64.0 + 105.5000 143.2500 -64.0 + 101.7500 141.5000 -64.0 + 98.7500 137.5000 -64.0 + 98.7500 134.5000 -64.0 + 97.7500 132.5000 -64.0 + 98.7500 129.5000 -64.0 + 101.5000 126.7500 -64.0 + 103.5000 126.7500 -64.0 + 105.5000 125.7500 -64.0 + 109.5000 125.7500 -64.0 + 111.5000 124.7500 -64.0 +} -64.0 +v 203 z -174.000000 -64.0 +{ -64.0 + 106.2500 39.5000 -64.0 + 103.5000 41.2500 -64.0 + 100.5000 40.2500 -64.0 + 96.5000 44.2500 -64.0 + 94.5000 44.2500 -64.0 + 94.2500 45.5000 -64.0 + 89.2500 50.5000 -64.0 + 86.2500 56.5000 -64.0 + 77.5000 66.2500 -64.0 + 69.5000 72.2500 -64.0 + 59.5000 100.2500 -64.0 + 60.2500 101.5000 -64.0 + 60.2500 104.5000 -64.0 + 63.5000 104.7500 -64.0 + 65.7500 101.5000 -64.0 + 67.7500 92.5000 -64.0 + 76.5000 83.7500 -64.0 + 78.5000 82.7500 -64.0 + 86.7500 75.5000 -64.0 + 92.7500 64.5000 -64.0 + 98.7500 56.5000 -64.0 + 100.7500 52.5000 -64.0 + 107.5000 46.7500 -64.0 + 114.5000 46.7500 -64.0 + 120.2500 50.5000 -64.0 + 123.2500 54.5000 -64.0 + 123.2500 56.5000 -64.0 + 126.2500 60.5000 -64.0 + 130.2500 68.5000 -64.0 + 131.2500 74.5000 -64.0 + 139.5000 81.7500 -64.0 + 144.2500 88.5000 -64.0 + 150.2500 98.5000 -64.0 + 150.2500 103.5000 -64.0 + 152.2500 107.5000 -64.0 + 155.5000 107.7500 -64.0 + 156.7500 103.5000 -64.0 + 154.7500 99.5000 -64.0 + 153.7500 91.5000 -64.0 + 151.7500 84.5000 -64.0 + 150.7500 77.5000 -64.0 + 148.5000 72.2500 -64.0 + 146.5000 71.2500 -64.0 + 136.7500 60.5000 -64.0 + 123.7500 42.5000 -64.0 + 119.5000 42.2500 -64.0 + 118.7500 40.5000 -64.0 + 109.5000 40.2500 -64.0 +} -64.0 +{ -64.0 + 107.2500 111.5000 -64.0 + 105.2500 112.5000 -64.0 + 107.5000 112.7500 -64.0 + 114.2500 116.5000 -64.0 + 118.5000 116.7500 -64.0 + 120.2500 117.5000 -64.0 + 119.2500 119.5000 -64.0 + 114.5000 124.2500 -64.0 + 110.5000 124.2500 -64.0 + 108.5000 125.2500 -64.0 + 101.5000 125.2500 -64.0 + 98.5000 124.2500 -64.0 + 97.7500 122.5000 -64.0 + 101.5000 119.7500 -64.0 + 102.7500 116.5000 -64.0 + 94.5000 121.2500 -64.0 + 96.2500 123.5000 -64.0 + 96.2500 126.5000 -64.0 + 93.5000 129.2500 -64.0 + 89.5000 131.2500 -64.0 + 89.5000 136.7500 -64.0 + 91.5000 133.7500 -64.0 + 93.5000 132.7500 -64.0 + 95.2500 133.5000 -64.0 + 99.2500 141.5000 -64.0 + 104.2500 144.5000 -64.0 + 113.5000 144.7500 -64.0 + 116.5000 143.7500 -64.0 + 121.5000 139.7500 -64.0 + 122.2500 141.5000 -64.0 + 120.5000 143.2500 -64.0 + 120.2500 147.5000 -64.0 + 122.7500 142.5000 -64.0 + 130.5000 133.7500 -64.0 + 130.7500 131.5000 -64.0 + 129.2500 132.5000 -64.0 + 128.2500 134.5000 -64.0 + 123.5000 138.2500 -64.0 + 122.7500 137.5000 -64.0 + 124.5000 134.7500 -64.0 + 124.7500 128.5000 -64.0 + 126.5000 126.7500 -64.0 + 129.5000 126.7500 -64.0 + 131.5000 128.7500 -64.0 + 131.7500 126.5000 -64.0 + 128.7500 122.5000 -64.0 + 125.5000 124.2500 -64.0 + 122.2500 124.5000 -64.0 + 123.2500 126.5000 -64.0 + 123.2500 131.5000 -64.0 + 121.2500 137.5000 -64.0 + 118.5000 140.2500 -64.0 + 113.5000 143.2500 -64.0 + 106.5000 143.2500 -64.0 + 103.5000 142.2500 -64.0 + 100.7500 139.5000 -64.0 + 97.7500 133.5000 -64.0 + 97.7500 129.5000 -64.0 + 100.5000 126.7500 -64.0 + 107.5000 126.7500 -64.0 + 117.5000 123.7500 -64.0 + 121.5000 123.7500 -64.0 + 120.7500 122.5000 -64.0 + 120.7500 119.5000 -64.0 + 123.5000 116.7500 -64.0 + 127.2500 117.5000 -64.0 + 127.7500 116.5000 -64.0 + 122.7500 115.5000 -64.0 + 114.5000 115.2500 -64.0 + 108.7500 111.5000 -64.0 +} -64.0 +{ -64.0 + 85.2500 124.5000 -64.0 + 84.2500 126.5000 -64.0 + 86.5000 126.7500 -64.0 + 86.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 143.5000 -64.0 + 104.5000 147.7500 -64.0 + 107.2500 150.5000 -64.0 + 107.7500 149.5000 -64.0 + 105.5000 147.2500 -64.0 + 98.7500 143.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 148.5000 -64.0 + 119.2500 150.5000 -64.0 + 119.7500 149.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 161.5000 -64.0 + 112.2500 162.5000 -64.0 + 113.5000 162.7500 -64.0 + 113.7500 161.5000 -64.0 +} -64.0 +{ -64.0 + 97.7500 46.5000 -64.0 + 98.5000 45.7500 -64.0 + 100.2500 46.5000 -64.0 + 101.2500 48.5000 -64.0 + 99.5000 50.2500 -64.0 + 98.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 94.7500 50.5000 -64.0 + 95.5000 49.7500 -64.0 + 98.2500 52.5000 -64.0 + 97.2500 54.5000 -64.0 + 94.5000 57.2500 -64.0 + 94.2500 59.5000 -64.0 + 91.2500 62.5000 -64.0 + 90.2500 64.5000 -64.0 + 88.5000 65.2500 -64.0 + 88.2500 66.5000 -64.0 + 85.2500 73.5000 -64.0 + 82.2500 76.5000 -64.0 + 81.2500 78.5000 -64.0 + 79.5000 79.2500 -64.0 + 73.5000 85.2500 -64.0 + 69.5000 88.2500 -64.0 + 67.5000 89.2500 -64.0 + 66.7500 87.5000 -64.0 + 67.7500 84.5000 -64.0 + 71.7500 74.5000 -64.0 + 77.5000 68.7500 -64.0 + 81.5000 66.7500 -64.0 + 84.5000 63.7500 -64.0 + 86.7500 56.5000 -64.0 + 89.5000 54.7500 -64.0 + 92.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 124.7500 52.5000 -64.0 + 126.5000 51.7500 -64.0 + 128.2500 52.5000 -64.0 + 129.2500 54.5000 -64.0 + 130.5000 54.7500 -64.0 + 136.2500 63.5000 -64.0 + 136.2500 65.5000 -64.0 + 134.5000 67.2500 -64.0 + 132.5000 67.2500 -64.0 + 128.7500 62.5000 -64.0 + 126.7500 58.5000 -64.0 + 128.7500 57.5000 -64.0 + 124.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 142.7500 74.5000 -64.0 + 144.5000 73.7500 -64.0 + 146.2500 74.5000 -64.0 + 148.2500 78.5000 -64.0 + 148.2500 80.5000 -64.0 + 149.2500 82.5000 -64.0 + 150.2500 90.5000 -64.0 + 149.5000 92.2500 -64.0 + 138.7500 77.5000 -64.0 + 139.5000 75.7500 -64.0 + 141.5000 75.7500 -64.0 +} -64.0 +{ -64.0 + 63.5000 97.7500 -64.0 + 64.2500 98.5000 -64.0 + 63.5000 99.2500 -64.0 + 63.2500 101.5000 -64.0 + 62.5000 103.2500 -64.0 + 60.7500 102.5000 -64.0 + 60.7500 100.5000 -64.0 +} -64.0 +{ -64.0 + 152.7500 101.5000 -64.0 + 153.5000 100.7500 -64.0 + 155.2500 103.5000 -64.0 + 154.5000 105.2500 -64.0 + 152.7500 104.5000 -64.0 +} -64.0 +v 187 z -176.000000 -64.0 +{ -64.0 + 103.2500 41.5000 -64.0 + 102.5000 42.2500 -64.0 + 99.5000 42.2500 -64.0 + 91.2500 49.5000 -64.0 + 82.2500 59.5000 -64.0 + 81.2500 61.5000 -64.0 + 69.5000 72.2500 -64.0 + 69.2500 74.5000 -64.0 + 68.2500 77.5000 -64.0 + 66.2500 82.5000 -64.0 + 65.5000 84.2500 -64.0 + 62.2500 93.5000 -64.0 + 60.5000 97.2500 -64.0 + 60.2500 103.5000 -64.0 + 63.5000 103.7500 -64.0 + 65.7500 100.5000 -64.0 + 66.7500 95.5000 -64.0 + 67.7500 92.5000 -64.0 + 79.5000 79.7500 -64.0 + 87.7500 73.5000 -64.0 + 91.7500 65.5000 -64.0 + 97.7500 58.5000 -64.0 + 103.5000 50.7500 -64.0 + 108.5000 47.7500 -64.0 + 112.5000 47.7500 -64.0 + 117.5000 49.7500 -64.0 + 121.2500 53.5000 -64.0 + 124.2500 58.5000 -64.0 + 129.2500 66.5000 -64.0 + 131.2500 72.5000 -64.0 + 140.2500 80.5000 -64.0 + 144.2500 87.5000 -64.0 + 145.2500 89.5000 -64.0 + 148.2500 93.5000 -64.0 + 151.2500 99.5000 -64.0 + 151.2500 103.5000 -64.0 + 152.5000 104.7500 -64.0 + 154.5000 105.7500 -64.0 + 155.5000 103.7500 -64.0 + 154.7500 102.5000 -64.0 + 154.7500 96.5000 -64.0 + 153.7500 94.5000 -64.0 + 153.7500 91.5000 -64.0 + 152.7500 89.5000 -64.0 + 152.7500 87.5000 -64.0 + 151.7500 85.5000 -64.0 + 151.7500 82.5000 -64.0 + 150.7500 80.5000 -64.0 + 150.7500 77.5000 -64.0 + 148.7500 72.5000 -64.0 + 140.7500 64.5000 -64.0 + 139.5000 62.2500 -64.0 + 131.7500 52.5000 -64.0 + 130.7500 50.5000 -64.0 + 123.7500 44.5000 -64.0 + 121.5000 44.2500 -64.0 + 117.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 115.5000 -64.0 + 118.2500 118.5000 -64.0 + 118.2500 120.5000 -64.0 + 114.5000 124.2500 -64.0 + 112.5000 124.2500 -64.0 + 110.5000 125.2500 -64.0 + 111.5000 125.7500 -64.0 + 113.5000 124.7500 -64.0 + 116.5000 124.7500 -64.0 + 120.5000 122.7500 -64.0 + 120.7500 118.5000 -64.0 + 119.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 98.2500 120.5000 -64.0 + 97.2500 122.5000 -64.0 + 98.2500 125.5000 -64.0 + 100.2500 126.5000 -64.0 + 104.7500 126.5000 -64.0 + 99.7500 122.5000 -64.0 + 99.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 121.5000 -64.0 + 128.2500 123.5000 -64.0 + 124.5000 127.2500 -64.0 + 121.2500 137.5000 -64.0 + 112.5000 143.2500 -64.0 + 108.5000 143.2500 -64.0 + 102.5000 141.2500 -64.0 + 94.7500 130.5000 -64.0 + 90.5000 130.2500 -64.0 + 88.7500 128.5000 -64.0 + 88.5000 123.2500 -64.0 + 88.2500 129.5000 -64.0 + 90.2500 131.5000 -64.0 + 88.2500 135.5000 -64.0 + 89.5000 135.7500 -64.0 + 93.5000 133.7500 -64.0 + 95.2500 134.5000 -64.0 + 97.2500 138.5000 -64.0 + 103.2500 143.5000 -64.0 + 107.2500 144.5000 -64.0 + 112.5000 144.7500 -64.0 + 117.5000 142.7500 -64.0 + 120.5000 139.7500 -64.0 + 122.5000 138.7500 -64.0 + 124.5000 134.7500 -64.0 + 124.7500 130.5000 -64.0 + 127.5000 127.7500 -64.0 + 130.5000 127.7500 -64.0 + 132.2500 129.5000 -64.0 + 132.2500 131.5000 -64.0 + 133.7500 130.5000 -64.0 + 131.7500 126.5000 -64.0 + 131.7500 123.5000 -64.0 + 129.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 125.5000 -64.0 + 106.2500 126.5000 -64.0 + 108.5000 126.7500 -64.0 + 108.7500 125.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 137.5000 -64.0 + 123.2500 142.5000 -64.0 + 125.7500 140.5000 -64.0 + 126.7500 138.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 149.5000 -64.0 + 120.2500 152.5000 -64.0 + 121.5000 150.7500 -64.0 +} -64.0 +{ -64.0 + 107.2500 151.5000 -64.0 + 107.2500 152.5000 -64.0 + 109.2500 156.5000 -64.0 + 109.7500 155.5000 -64.0 + 108.7500 152.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 152.5000 -64.0 + 114.5000 153.2500 -64.0 + 114.2500 156.5000 -64.0 + 116.5000 154.7500 -64.0 +} -64.0 +{ -64.0 + 97.7500 46.5000 -64.0 + 98.5000 45.7500 -64.0 + 101.2500 49.5000 -64.0 + 98.5000 51.2500 -64.0 + 97.7500 50.5000 -64.0 +} -64.0 +{ -64.0 + 93.7500 50.5000 -64.0 + 94.5000 49.7500 -64.0 + 98.2500 52.5000 -64.0 + 96.2500 57.5000 -64.0 + 88.5000 65.2500 -64.0 + 88.2500 67.5000 -64.0 + 85.2500 71.5000 -64.0 + 84.2500 73.5000 -64.0 + 72.5000 85.2500 -64.0 + 68.5000 87.2500 -64.0 + 67.7500 85.5000 -64.0 + 68.7500 82.5000 -64.0 + 72.7500 72.5000 -64.0 + 75.5000 69.7500 -64.0 + 80.7500 65.5000 -64.0 + 81.7500 63.5000 -64.0 + 89.5000 54.7500 -64.0 + 91.7500 54.5000 -64.0 +} -64.0 +{ -64.0 + 124.7500 53.5000 -64.0 + 125.5000 52.7500 -64.0 + 129.5000 52.7500 -64.0 + 132.2500 56.5000 -64.0 + 132.5000 59.7500 -64.0 + 136.2500 62.5000 -64.0 + 138.2500 66.5000 -64.0 + 139.5000 66.7500 -64.0 + 143.2500 70.5000 -64.0 + 146.2500 74.5000 -64.0 + 148.2500 78.5000 -64.0 + 148.2500 81.5000 -64.0 + 149.2500 83.5000 -64.0 + 149.2500 86.5000 -64.0 + 150.2500 88.5000 -64.0 + 149.5000 89.2500 -64.0 + 147.5000 88.2500 -64.0 + 139.7500 78.5000 -64.0 + 139.7500 76.5000 -64.0 + 141.5000 74.7500 -64.0 + 140.7500 73.5000 -64.0 + 136.5000 73.2500 -64.0 + 133.7500 70.5000 -64.0 + 133.7500 67.5000 -64.0 + 130.7500 65.5000 -64.0 + 130.7500 62.5000 -64.0 + 127.7500 59.5000 -64.0 +} -64.0 +{ -64.0 + 62.7500 96.5000 -64.0 + 63.5000 95.7500 -64.0 + 64.2500 96.5000 -64.0 + 64.2500 98.5000 -64.0 + 63.2500 101.5000 -64.0 + 61.5000 102.2500 -64.0 + 60.7500 100.5000 -64.0 +} -64.0 +v 182 z -178.000000 -64.0 +{ -64.0 + 106.2500 41.5000 -64.0 + 105.5000 42.2500 -64.0 + 102.5000 42.2500 -64.0 + 94.5000 46.2500 -64.0 + 72.2500 69.5000 -64.0 + 69.5000 73.2500 -64.0 + 69.2500 75.5000 -64.0 + 68.2500 78.5000 -64.0 + 66.5000 82.2500 -64.0 + 66.2500 84.5000 -64.0 + 63.2500 90.5000 -64.0 + 62.2500 95.5000 -64.0 + 61.5000 97.2500 -64.0 + 61.2500 101.5000 -64.0 + 63.5000 101.7500 -64.0 + 65.5000 98.7500 -64.0 + 65.7500 96.5000 -64.0 + 67.7500 91.5000 -64.0 + 75.7500 83.5000 -64.0 + 76.7500 81.5000 -64.0 + 89.7500 69.5000 -64.0 + 90.7500 67.5000 -64.0 + 96.5000 59.7500 -64.0 + 98.7500 58.5000 -64.0 + 99.7500 56.5000 -64.0 + 104.5000 51.7500 -64.0 + 110.5000 48.7500 -64.0 + 113.5000 49.7500 -64.0 + 119.2500 52.5000 -64.0 + 129.2500 66.5000 -64.0 + 131.2500 70.5000 -64.0 + 137.5000 76.7500 -64.0 + 139.5000 77.7500 -64.0 + 139.7500 75.5000 -64.0 + 133.7500 69.5000 -64.0 + 133.7500 67.5000 -64.0 + 130.7500 64.5000 -64.0 + 130.7500 62.5000 -64.0 + 127.7500 59.5000 -64.0 + 123.7500 52.5000 -64.0 + 122.7500 50.5000 -64.0 + 123.5000 48.7500 -64.0 + 125.2500 51.5000 -64.0 + 128.5000 51.7500 -64.0 + 131.2500 55.5000 -64.0 + 133.5000 59.7500 -64.0 + 135.5000 60.7500 -64.0 + 141.2500 67.5000 -64.0 + 147.2500 75.5000 -64.0 + 147.2500 77.5000 -64.0 + 148.2500 79.5000 -64.0 + 148.2500 83.5000 -64.0 + 147.5000 85.2500 -64.0 + 140.2500 78.5000 -64.0 + 145.2500 88.5000 -64.0 + 149.2500 93.5000 -64.0 + 152.2500 97.5000 -64.0 + 152.2500 100.5000 -64.0 + 153.5000 101.7500 -64.0 + 153.7500 97.5000 -64.0 + 152.7500 95.5000 -64.0 + 152.7500 90.5000 -64.0 + 151.7500 88.5000 -64.0 + 151.7500 83.5000 -64.0 + 150.7500 81.5000 -64.0 + 150.7500 77.5000 -64.0 + 146.7500 69.5000 -64.0 + 135.7500 57.5000 -64.0 + 134.7500 55.5000 -64.0 + 128.5000 48.2500 -64.0 + 115.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 116.5000 -64.0 + 115.2500 117.5000 -64.0 + 116.5000 117.7500 -64.0 + 118.2500 120.5000 -64.0 + 117.5000 121.2500 -64.0 + 113.5000 119.2500 -64.0 + 114.2500 120.5000 -64.0 + 115.2500 122.5000 -64.0 + 114.2500 124.5000 -64.0 + 119.5000 124.7500 -64.0 + 121.5000 123.7500 -64.0 + 121.7500 121.5000 -64.0 + 119.7500 117.5000 -64.0 + 117.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 121.5000 -64.0 + 100.2500 126.5000 -64.0 + 103.5000 126.7500 -64.0 +} -64.0 +{ -64.0 + 87.2500 127.5000 -64.0 + 86.5000 128.2500 -64.0 + 84.5000 129.2500 -64.0 + 84.2500 130.5000 -64.0 + 86.2500 131.5000 -64.0 + 87.5000 130.7500 -64.0 + 89.5000 130.7500 -64.0 + 91.2500 134.5000 -64.0 + 93.5000 134.7500 -64.0 + 95.2500 135.5000 -64.0 + 98.2500 139.5000 -64.0 + 104.5000 143.7500 -64.0 + 113.5000 144.7500 -64.0 + 115.2500 145.5000 -64.0 + 115.2500 148.5000 -64.0 + 116.7500 147.5000 -64.0 + 115.7500 145.5000 -64.0 + 116.7500 143.5000 -64.0 + 119.5000 140.7500 -64.0 + 121.5000 139.7500 -64.0 + 124.5000 134.7500 -64.0 + 124.7500 131.5000 -64.0 + 127.5000 128.7500 -64.0 + 128.2500 129.5000 -64.0 + 130.5000 129.7500 -64.0 + 134.5000 131.7500 -64.0 + 135.7500 130.5000 -64.0 + 132.5000 128.2500 -64.0 + 127.5000 127.2500 -64.0 + 124.5000 130.2500 -64.0 + 122.2500 136.5000 -64.0 + 116.5000 141.2500 -64.0 + 110.5000 143.2500 -64.0 + 108.7500 142.5000 -64.0 + 105.5000 142.2500 -64.0 + 102.5000 141.2500 -64.0 + 93.7500 131.5000 -64.0 + 89.5000 130.2500 -64.0 + 88.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 139.5000 -64.0 + 125.5000 140.2500 -64.0 + 120.2500 150.5000 -64.0 + 121.7500 151.5000 -64.0 + 125.7500 141.5000 -64.0 + 128.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 143.5000 -64.0 + 94.2500 144.5000 -64.0 + 98.7500 144.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 148.5000 -64.0 + 108.5000 152.2500 -64.0 + 105.5000 150.2500 -64.0 + 105.2500 151.5000 -64.0 + 108.2500 155.5000 -64.0 + 109.5000 155.7500 -64.0 + 111.5000 149.7500 -64.0 + 113.2500 150.5000 -64.0 + 114.5000 152.7500 -64.0 + 114.7500 149.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 43.5000 -64.0 + 108.5000 42.7500 -64.0 + 113.5000 42.7500 -64.0 + 115.2500 44.5000 -64.0 + 118.5000 44.7500 -64.0 + 119.2500 46.5000 -64.0 + 118.5000 48.2500 -64.0 + 114.7500 46.5000 -64.0 + 108.5000 46.2500 -64.0 + 105.5000 47.2500 -64.0 + 103.7500 46.5000 -64.0 + 104.5000 45.7500 -64.0 + 106.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 96.7500 47.5000 -64.0 + 98.5000 46.7500 -64.0 + 101.2500 50.5000 -64.0 + 99.2500 51.5000 -64.0 + 97.2500 55.5000 -64.0 + 92.2500 60.5000 -64.0 + 87.2500 68.5000 -64.0 + 77.5000 79.2500 -64.0 + 70.5000 85.2500 -64.0 + 68.7500 84.5000 -64.0 + 69.7500 79.5000 -64.0 + 71.5000 77.7500 -64.0 + 71.7500 74.5000 -64.0 + 77.5000 66.7500 -64.0 + 79.5000 65.7500 -64.0 + 89.5000 55.7500 -64.0 + 94.5000 49.7500 -64.0 + 96.5000 49.7500 -64.0 + 95.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 62.7500 95.5000 -64.0 + 63.5000 94.7500 -64.0 + 64.2500 95.5000 -64.0 + 63.5000 96.2500 -64.0 +} -64.0 +v 164 z -180.000000 -64.0 +{ -64.0 + 107.2500 41.5000 -64.0 + 106.5000 42.2500 -64.0 + 104.5000 42.2500 -64.0 + 101.2500 43.5000 -64.0 + 94.5000 46.2500 -64.0 + 91.5000 49.2500 -64.0 + 87.5000 55.2500 -64.0 + 85.5000 56.2500 -64.0 + 70.2500 71.5000 -64.0 + 69.2500 76.5000 -64.0 + 68.2500 78.5000 -64.0 + 67.2500 85.5000 -64.0 + 64.2500 91.5000 -64.0 + 63.2500 96.5000 -64.0 + 63.7500 97.5000 -64.0 + 65.7500 93.5000 -64.0 + 67.5000 89.7500 -64.0 + 69.5000 88.7500 -64.0 + 77.7500 80.5000 -64.0 + 78.7500 78.5000 -64.0 + 76.5000 79.2500 -64.0 + 72.5000 82.2500 -64.0 + 70.7500 81.5000 -64.0 + 70.7500 78.5000 -64.0 + 74.7500 70.5000 -64.0 + 77.5000 66.7500 -64.0 + 82.7500 62.5000 -64.0 + 96.5000 47.7500 -64.0 + 98.5000 47.7500 -64.0 + 100.2500 48.5000 -64.0 + 100.2500 51.5000 -64.0 + 91.2500 61.5000 -64.0 + 89.2500 65.5000 -64.0 + 84.2500 70.5000 -64.0 + 83.2500 72.5000 -64.0 + 84.5000 72.7500 -64.0 + 90.7500 67.5000 -64.0 + 91.7500 65.5000 -64.0 + 105.5000 51.7500 -64.0 + 111.5000 49.7500 -64.0 + 116.5000 51.7500 -64.0 + 126.2500 61.5000 -64.0 + 127.2500 63.5000 -64.0 + 137.2500 74.5000 -64.0 + 138.2500 76.5000 -64.0 + 146.2500 87.5000 -64.0 + 147.2500 89.5000 -64.0 + 149.2500 90.5000 -64.0 + 150.5000 89.7500 -64.0 + 150.7500 79.5000 -64.0 + 149.7500 77.5000 -64.0 + 149.7500 74.5000 -64.0 + 145.7500 68.5000 -64.0 + 144.7500 66.5000 -64.0 + 136.5000 58.2500 -64.0 + 134.5000 57.2500 -64.0 + 132.7500 53.5000 -64.0 + 129.7500 49.5000 -64.0 + 124.5000 46.2500 -64.0 + 115.7500 41.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 115.5000 -64.0 + 113.5000 119.2500 -64.0 + 110.5000 119.2500 -64.0 + 104.5000 121.2500 -64.0 + 101.5000 120.2500 -64.0 + 99.2500 126.5000 -64.0 + 100.2500 128.5000 -64.0 + 102.5000 128.7500 -64.0 + 104.5000 123.7500 -64.0 + 108.5000 121.7500 -64.0 + 110.2500 122.5000 -64.0 + 110.2500 124.5000 -64.0 + 108.5000 126.2500 -64.0 + 105.5000 126.2500 -64.0 + 105.2500 127.5000 -64.0 + 108.5000 127.7500 -64.0 + 110.5000 126.7500 -64.0 + 112.5000 126.7500 -64.0 + 114.5000 124.7500 -64.0 + 115.2500 126.5000 -64.0 + 116.5000 126.7500 -64.0 + 119.5000 123.7500 -64.0 + 120.2500 124.5000 -64.0 + 121.5000 123.7500 -64.0 + 121.7500 120.5000 -64.0 + 120.7500 117.5000 -64.0 + 119.5000 117.2500 -64.0 + 117.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 128.5000 -64.0 + 125.2500 130.5000 -64.0 + 128.5000 130.7500 -64.0 + 130.2500 132.5000 -64.0 + 136.5000 132.7500 -64.0 + 136.7500 131.5000 -64.0 + 130.5000 131.2500 -64.0 +} -64.0 +{ -64.0 + 87.2500 131.5000 -64.0 + 86.2500 133.5000 -64.0 + 87.5000 133.7500 -64.0 + 90.5000 132.7500 -64.0 + 92.2500 135.5000 -64.0 + 96.2500 136.5000 -64.0 + 97.2500 138.5000 -64.0 + 103.2500 143.5000 -64.0 + 108.2500 144.5000 -64.0 + 109.2500 146.5000 -64.0 + 107.5000 148.2500 -64.0 + 104.5000 147.2500 -64.0 + 100.7500 143.5000 -64.0 + 98.5000 143.2500 -64.0 + 101.5000 146.7500 -64.0 + 105.2500 149.5000 -64.0 + 108.5000 149.7500 -64.0 + 111.5000 148.7500 -64.0 + 114.5000 149.7500 -64.0 + 115.5000 147.7500 -64.0 + 115.5000 145.2500 -64.0 + 111.5000 143.2500 -64.0 + 102.5000 141.2500 -64.0 + 98.7500 137.5000 -64.0 + 97.7500 135.5000 -64.0 + 90.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 132.5000 -64.0 + 123.5000 133.2500 -64.0 + 123.2500 135.5000 -64.0 + 118.5000 140.7500 -64.0 + 122.5000 138.7500 -64.0 + 122.7500 137.5000 -64.0 + 124.5000 135.7500 -64.0 + 124.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 138.5000 -64.0 + 122.5000 144.2500 -64.0 + 120.5000 145.2500 -64.0 + 120.2500 146.5000 -64.0 + 122.5000 146.7500 -64.0 + 126.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 43.5000 -64.0 + 108.5000 42.7500 -64.0 + 112.5000 42.7500 -64.0 + 126.5000 49.7500 -64.0 + 129.2500 52.5000 -64.0 + 132.2500 56.5000 -64.0 + 133.2500 58.5000 -64.0 + 139.5000 64.7500 -64.0 + 144.2500 71.5000 -64.0 + 147.2500 76.5000 -64.0 + 147.2500 79.5000 -64.0 + 146.5000 81.2500 -64.0 + 143.5000 80.2500 -64.0 + 140.7500 77.5000 -64.0 + 139.7500 75.5000 -64.0 + 133.7500 68.5000 -64.0 + 133.7500 66.5000 -64.0 + 131.7500 64.5000 -64.0 + 128.7500 60.5000 -64.0 + 126.7500 56.5000 -64.0 + 125.5000 56.2500 -64.0 + 124.7500 54.5000 -64.0 + 120.7500 50.5000 -64.0 + 115.5000 47.2500 -64.0 + 108.5000 46.2500 -64.0 + 106.5000 48.2500 -64.0 + 104.5000 48.2500 -64.0 + 102.7500 47.5000 -64.0 + 102.7500 45.5000 -64.0 +} -64.0 +v 148 z -182.000000 -64.0 +{ -64.0 + 109.2500 40.5000 -64.0 + 108.5000 41.2500 -64.0 + 106.2500 41.5000 -64.0 + 93.5000 47.2500 -64.0 + 90.2500 51.5000 -64.0 + 89.2500 53.5000 -64.0 + 90.5000 53.7500 -64.0 + 98.5000 47.7500 -64.0 + 101.5000 47.7500 -64.0 + 101.7500 46.5000 -64.0 + 104.5000 44.7500 -64.0 + 108.5000 42.7500 -64.0 + 113.5000 42.7500 -64.0 + 115.2500 43.5000 -64.0 + 120.2500 46.5000 -64.0 + 127.2500 50.5000 -64.0 + 130.2500 54.5000 -64.0 + 132.7500 54.5000 -64.0 + 130.7500 50.5000 -64.0 + 124.5000 46.2500 -64.0 + 113.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 47.5000 -64.0 + 108.5000 48.2500 -64.0 + 106.5000 48.2500 -64.0 + 102.5000 50.2500 -64.0 + 100.5000 50.2500 -64.0 + 100.2500 51.5000 -64.0 + 97.2500 54.5000 -64.0 + 95.2500 58.5000 -64.0 + 91.2500 61.5000 -64.0 + 90.2500 63.5000 -64.0 + 85.2500 68.5000 -64.0 + 83.2500 72.5000 -64.0 + 89.5000 66.7500 -64.0 + 91.5000 65.7500 -64.0 + 96.5000 59.7500 -64.0 + 104.5000 53.7500 -64.0 + 109.5000 50.7500 -64.0 + 111.5000 50.7500 -64.0 + 119.5000 54.7500 -64.0 + 133.5000 68.7500 -64.0 + 138.2500 75.5000 -64.0 + 139.2500 77.5000 -64.0 + 145.2500 83.5000 -64.0 + 146.2500 85.5000 -64.0 + 148.5000 85.7500 -64.0 + 149.5000 83.7500 -64.0 + 149.7500 76.5000 -64.0 + 144.7500 66.5000 -64.0 + 139.7500 61.5000 -64.0 + 138.7500 59.5000 -64.0 + 136.5000 57.2500 -64.0 + 134.5000 56.2500 -64.0 + 134.2500 57.5000 -64.0 + 135.2500 60.5000 -64.0 + 139.2500 64.5000 -64.0 + 145.2500 72.5000 -64.0 + 145.2500 75.5000 -64.0 + 144.5000 77.2500 -64.0 + 142.5000 77.2500 -64.0 + 134.7500 68.5000 -64.0 + 133.7500 66.5000 -64.0 + 127.7500 59.5000 -64.0 + 127.7500 57.5000 -64.0 + 124.5000 54.2500 -64.0 + 120.7500 51.5000 -64.0 + 114.7500 47.5000 -64.0 +} -64.0 +{ -64.0 + 87.2500 55.5000 -64.0 + 85.5000 56.2500 -64.0 + 79.5000 62.2500 -64.0 + 77.5000 63.2500 -64.0 + 70.5000 72.2500 -64.0 + 69.2500 83.5000 -64.0 + 70.2500 85.5000 -64.0 + 72.5000 84.7500 -64.0 + 80.7500 76.5000 -64.0 + 81.7500 74.5000 -64.0 + 80.5000 74.2500 -64.0 + 76.5000 78.2500 -64.0 + 72.7500 77.5000 -64.0 + 72.7500 75.5000 -64.0 + 75.7500 69.5000 -64.0 + 87.7500 57.5000 -64.0 + 88.7500 55.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 113.5000 -64.0 + 113.2500 116.5000 -64.0 + 115.2500 117.5000 -64.0 + 114.5000 119.2500 -64.0 + 112.5000 119.2500 -64.0 + 110.5000 125.2500 -64.0 + 111.2500 126.5000 -64.0 + 114.5000 126.7500 -64.0 + 118.5000 123.7500 -64.0 + 120.5000 124.7500 -64.0 + 122.5000 123.7500 -64.0 + 121.7500 122.5000 -64.0 + 121.7500 118.5000 -64.0 + 118.5000 118.2500 -64.0 + 116.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 98.2500 124.5000 -64.0 + 99.2500 127.5000 -64.0 + 100.5000 125.7500 -64.0 + 99.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 126.5000 -64.0 + 124.5000 129.2500 -64.0 + 124.2500 133.5000 -64.0 + 123.2500 136.5000 -64.0 + 120.5000 140.2500 -64.0 + 120.2500 143.5000 -64.0 + 122.5000 143.7500 -64.0 + 128.5000 135.2500 -64.0 + 126.5000 136.2500 -64.0 + 125.7500 134.5000 -64.0 + 126.5000 132.7500 -64.0 + 128.5000 132.7500 -64.0 + 132.5000 134.7500 -64.0 + 134.5000 133.7500 -64.0 + 132.7500 131.5000 -64.0 + 127.5000 131.2500 -64.0 + 126.7500 129.5000 -64.0 + 129.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 127.5000 -64.0 + 100.2500 128.5000 -64.0 + 103.5000 128.7500 -64.0 + 103.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 133.5000 -64.0 + 87.5000 134.2500 -64.0 + 88.2500 135.5000 -64.0 + 88.2500 138.5000 -64.0 + 89.5000 138.7500 -64.0 + 90.5000 136.7500 -64.0 + 92.5000 135.7500 -64.0 + 95.5000 136.7500 -64.0 + 98.2500 140.5000 -64.0 + 97.2500 143.5000 -64.0 + 104.2500 147.5000 -64.0 + 106.5000 147.7500 -64.0 + 108.5000 146.7500 -64.0 + 110.5000 146.7500 -64.0 + 114.5000 148.7500 -64.0 + 114.7500 146.5000 -64.0 + 113.7500 144.5000 -64.0 + 110.5000 144.2500 -64.0 + 106.5000 142.2500 -64.0 + 101.5000 141.2500 -64.0 + 99.5000 139.2500 -64.0 + 97.7500 134.5000 -64.0 + 95.7500 133.5000 -64.0 +} -64.0 +v 148 z -184.000000 -64.0 +{ -64.0 + 108.2500 40.5000 -64.0 + 94.5000 47.2500 -64.0 + 80.5000 61.2500 -64.0 + 78.5000 62.2500 -64.0 + 71.5000 72.2500 -64.0 + 71.2500 80.5000 -64.0 + 72.5000 81.7500 -64.0 + 75.5000 80.7500 -64.0 + 84.7500 71.5000 -64.0 + 85.7500 69.5000 -64.0 + 97.5000 58.7500 -64.0 + 108.5000 51.7500 -64.0 + 112.5000 51.7500 -64.0 + 117.5000 53.7500 -64.0 + 123.5000 57.7500 -64.0 + 131.5000 65.7500 -64.0 + 139.2500 76.5000 -64.0 + 145.2500 81.5000 -64.0 + 147.5000 81.7500 -64.0 + 148.5000 79.7500 -64.0 + 148.7500 76.5000 -64.0 + 147.7500 74.5000 -64.0 + 147.7500 72.5000 -64.0 + 142.7500 63.5000 -64.0 + 132.7500 53.5000 -64.0 + 131.5000 51.2500 -64.0 + 114.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 114.5000 -64.0 + 114.2500 118.5000 -64.0 + 107.5000 124.2500 -64.0 + 103.5000 124.2500 -64.0 + 103.2500 125.5000 -64.0 + 105.2500 127.5000 -64.0 + 100.5000 129.2500 -64.0 + 98.5000 127.2500 -64.0 + 98.2500 130.5000 -64.0 + 99.5000 130.7500 -64.0 + 103.5000 128.7500 -64.0 + 105.5000 128.7500 -64.0 + 107.5000 127.7500 -64.0 + 109.5000 128.7500 -64.0 + 112.7500 127.5000 -64.0 + 107.7500 126.5000 -64.0 + 113.5000 123.7500 -64.0 + 115.5000 123.7500 -64.0 + 116.7500 121.5000 -64.0 + 115.7500 119.5000 -64.0 + 116.5000 117.7500 -64.0 +} -64.0 +{ -64.0 + 120.2500 120.5000 -64.0 + 119.5000 121.2500 -64.0 + 120.2500 122.5000 -64.0 + 116.2500 125.5000 -64.0 + 122.5000 126.7500 -64.0 + 124.2500 129.5000 -64.0 + 124.5000 135.7500 -64.0 + 126.5000 136.7500 -64.0 + 132.5000 133.7500 -64.0 + 132.7500 132.5000 -64.0 + 128.5000 132.2500 -64.0 + 126.7500 130.5000 -64.0 + 125.7500 128.5000 -64.0 + 127.5000 126.7500 -64.0 + 130.5000 126.7500 -64.0 + 134.5000 128.7500 -64.0 + 134.7500 127.5000 -64.0 + 130.7500 125.5000 -64.0 + 127.5000 125.2500 -64.0 + 124.5000 124.2500 -64.0 + 121.7500 120.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 124.5000 -64.0 + 97.2500 125.5000 -64.0 + 97.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 133.5000 -64.0 + 88.5000 135.2500 -64.0 + 88.2500 139.5000 -64.0 + 92.5000 135.7500 -64.0 + 94.5000 135.7500 -64.0 + 96.2500 137.5000 -64.0 + 98.2500 141.5000 -64.0 + 95.5000 143.2500 -64.0 + 98.2500 144.5000 -64.0 + 109.5000 145.7500 -64.0 + 113.2500 148.5000 -64.0 + 115.5000 148.7500 -64.0 + 115.7500 144.5000 -64.0 + 110.5000 145.2500 -64.0 + 104.7500 141.5000 -64.0 + 100.5000 141.2500 -64.0 + 97.7500 138.5000 -64.0 + 98.5000 137.7500 -64.0 + 98.7500 135.5000 -64.0 + 97.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 137.5000 -64.0 + 120.5000 139.2500 -64.0 + 121.5000 139.7500 -64.0 + 123.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 140.5000 -64.0 + 117.5000 141.2500 -64.0 + 118.5000 141.7500 -64.0 + 119.7500 140.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 43.5000 -64.0 + 108.5000 42.7500 -64.0 + 110.5000 42.7500 -64.0 + 112.2500 43.5000 -64.0 + 113.5000 42.7500 -64.0 + 117.5000 44.7500 -64.0 + 119.2500 45.5000 -64.0 + 125.2500 49.5000 -64.0 + 131.2500 54.5000 -64.0 + 133.2500 58.5000 -64.0 + 134.5000 58.7500 -64.0 + 135.2500 60.5000 -64.0 + 139.2500 64.5000 -64.0 + 142.2500 69.5000 -64.0 + 143.2500 71.5000 -64.0 + 142.5000 73.2500 -64.0 + 140.5000 73.2500 -64.0 + 136.7500 69.5000 -64.0 + 135.7500 67.5000 -64.0 + 127.7500 58.5000 -64.0 + 127.7500 56.5000 -64.0 + 125.7500 54.5000 -64.0 + 118.5000 50.2500 -64.0 + 112.5000 47.2500 -64.0 + 110.5000 48.2500 -64.0 + 108.5000 48.2500 -64.0 + 106.5000 49.2500 -64.0 + 103.5000 49.2500 -64.0 + 101.5000 51.2500 -64.0 + 98.5000 51.2500 -64.0 + 98.2500 52.5000 -64.0 + 96.5000 54.2500 -64.0 + 96.2500 56.5000 -64.0 + 92.2500 60.5000 -64.0 + 91.2500 62.5000 -64.0 + 85.2500 67.5000 -64.0 + 84.2500 69.5000 -64.0 + 77.5000 75.2500 -64.0 + 75.7500 74.5000 -64.0 + 75.7500 70.5000 -64.0 + 77.7500 68.5000 -64.0 + 78.7500 66.5000 -64.0 + 89.7500 55.5000 -64.0 + 92.5000 51.7500 -64.0 + 94.5000 50.7500 -64.0 + 98.5000 47.7500 -64.0 + 103.5000 44.7500 -64.0 + 106.7500 45.5000 -64.0 +} -64.0 +v 122 z -186.000000 -64.0 +{ -64.0 + 110.2500 39.5000 -64.0 + 94.5000 47.2500 -64.0 + 78.5000 63.2500 -64.0 + 72.2500 73.5000 -64.0 + 74.2500 77.5000 -64.0 + 76.5000 77.7500 -64.0 + 82.5000 73.7500 -64.0 + 92.5000 62.7500 -64.0 + 99.5000 56.7500 -64.0 + 107.5000 52.7500 -64.0 + 113.5000 52.7500 -64.0 + 119.5000 54.7500 -64.0 + 126.2500 59.5000 -64.0 + 133.2500 68.5000 -64.0 + 142.2500 77.5000 -64.0 + 144.5000 77.7500 -64.0 + 146.5000 76.7500 -64.0 + 146.7500 73.5000 -64.0 + 145.7500 71.5000 -64.0 + 145.7500 69.5000 -64.0 + 139.7500 59.5000 -64.0 + 129.5000 49.2500 -64.0 + 123.5000 46.2500 -64.0 + 120.7500 43.5000 -64.0 + 113.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 114.5000 -64.0 + 112.5000 116.2500 -64.0 + 114.2500 117.5000 -64.0 + 115.5000 116.7500 -64.0 + 115.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 118.5000 -64.0 + 101.2500 119.5000 -64.0 + 102.5000 119.7500 -64.0 + 102.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 121.2500 121.5000 -64.0 + 121.2500 123.5000 -64.0 + 116.5000 125.2500 -64.0 + 117.2500 126.5000 -64.0 + 120.5000 126.7500 -64.0 + 123.2500 129.5000 -64.0 + 123.2500 133.5000 -64.0 + 122.2500 136.5000 -64.0 + 114.5000 143.2500 -64.0 + 110.5000 143.2500 -64.0 + 102.5000 140.2500 -64.0 + 99.7500 137.5000 -64.0 + 99.7500 132.5000 -64.0 + 103.5000 129.7500 -64.0 + 104.5000 128.2500 -64.0 + 102.5000 129.2500 -64.0 + 99.5000 129.2500 -64.0 + 96.2500 131.5000 -64.0 + 91.5000 133.2500 -64.0 + 88.5000 138.2500 -64.0 + 88.2500 141.5000 -64.0 + 89.5000 141.7500 -64.0 + 90.7500 137.5000 -64.0 + 94.5000 134.7500 -64.0 + 96.5000 135.7500 -64.0 + 101.2500 142.5000 -64.0 + 100.5000 143.2500 -64.0 + 104.2500 145.5000 -64.0 + 108.5000 145.7500 -64.0 + 114.5000 149.7500 -64.0 + 114.7500 148.5000 -64.0 + 116.5000 147.7500 -64.0 + 126.5000 135.7500 -64.0 + 131.5000 134.7500 -64.0 + 131.7500 133.5000 -64.0 + 127.5000 133.2500 -64.0 + 125.7500 131.5000 -64.0 + 125.7500 128.5000 -64.0 + 122.7500 125.5000 -64.0 + 123.5000 124.7500 -64.0 + 125.5000 125.7500 -64.0 + 126.7500 124.5000 -64.0 + 122.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 43.5000 -64.0 + 108.5000 42.7500 -64.0 + 110.5000 42.7500 -64.0 + 112.2500 43.5000 -64.0 + 111.5000 44.2500 -64.0 + 111.2500 46.5000 -64.0 + 107.5000 49.2500 -64.0 + 103.5000 49.2500 -64.0 + 103.2500 50.5000 -64.0 + 96.5000 54.2500 -64.0 + 96.2500 56.5000 -64.0 + 94.5000 57.2500 -64.0 + 94.2500 58.5000 -64.0 + 92.5000 60.2500 -64.0 + 90.5000 61.2500 -64.0 + 83.5000 68.2500 -64.0 + 79.5000 71.2500 -64.0 + 78.7500 69.5000 -64.0 + 79.7500 66.5000 -64.0 + 89.5000 55.7500 -64.0 + 99.5000 46.7500 -64.0 + 101.5000 46.7500 -64.0 + 103.5000 44.7500 -64.0 + 105.2500 45.5000 -64.0 +} -64.0 +{ -64.0 + 113.7500 43.5000 -64.0 + 114.5000 42.7500 -64.0 + 115.5000 43.7500 -64.0 + 119.5000 45.7500 -64.0 + 126.2500 50.5000 -64.0 + 126.2500 52.5000 -64.0 + 128.5000 52.7500 -64.0 + 134.2500 58.5000 -64.0 + 137.2500 62.5000 -64.0 + 140.2500 67.5000 -64.0 + 139.5000 69.2500 -64.0 + 137.5000 67.2500 -64.0 + 135.5000 66.2500 -64.0 + 134.7500 64.5000 -64.0 + 130.7500 60.5000 -64.0 + 129.7500 58.5000 -64.0 + 128.5000 58.2500 -64.0 + 127.7500 56.5000 -64.0 + 125.5000 54.2500 -64.0 + 119.5000 51.2500 -64.0 + 113.7500 46.5000 -64.0 +} -64.0 +v 113 z -188.000000 -64.0 +{ -64.0 + 109.2500 39.5000 -64.0 + 93.5000 48.2500 -64.0 + 82.2500 59.5000 -64.0 + 75.5000 69.2500 -64.0 + 75.5000 73.7500 -64.0 + 77.5000 74.7500 -64.0 + 82.5000 72.7500 -64.0 + 89.7500 65.5000 -64.0 + 90.7500 63.5000 -64.0 + 92.5000 62.7500 -64.0 + 97.5000 57.7500 -64.0 + 107.5000 52.7500 -64.0 + 114.5000 52.7500 -64.0 + 124.5000 56.7500 -64.0 + 125.2500 58.5000 -64.0 + 137.5000 71.7500 -64.0 + 141.2500 74.5000 -64.0 + 143.5000 74.7500 -64.0 + 144.7500 70.5000 -64.0 + 142.7500 66.5000 -64.0 + 142.7500 64.5000 -64.0 + 138.7500 58.5000 -64.0 + 128.5000 48.2500 -64.0 + 114.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 114.5000 -64.0 + 108.5000 115.2500 -64.0 + 105.2500 115.5000 -64.0 + 108.5000 115.7500 -64.0 + 110.5000 114.7500 -64.0 + 111.2500 115.5000 -64.0 + 114.5000 115.7500 -64.0 + 114.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 122.5000 -64.0 + 122.5000 123.7500 -64.0 + 126.2500 125.5000 -64.0 + 128.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 124.5000 -64.0 + 119.5000 125.2500 -64.0 + 116.5000 125.2500 -64.0 + 115.2500 126.5000 -64.0 + 119.5000 126.7500 -64.0 + 123.2500 129.5000 -64.0 + 123.2500 135.5000 -64.0 + 120.5000 139.2500 -64.0 + 122.2500 140.5000 -64.0 + 121.5000 141.2500 -64.0 + 118.5000 146.2500 -64.0 + 118.2500 149.5000 -64.0 + 122.7500 140.5000 -64.0 + 127.5000 135.7500 -64.0 + 129.5000 135.7500 -64.0 + 132.7500 134.5000 -64.0 + 129.5000 134.2500 -64.0 + 125.7500 132.5000 -64.0 + 125.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 103.2500 128.5000 -64.0 + 99.2500 130.5000 -64.0 + 97.2500 134.5000 -64.0 + 99.2500 138.5000 -64.0 + 98.5000 139.2500 -64.0 + 98.2500 142.5000 -64.0 + 100.2500 144.5000 -64.0 + 108.5000 146.7500 -64.0 + 112.2500 149.5000 -64.0 + 113.5000 148.7500 -64.0 + 110.7500 145.5000 -64.0 + 111.5000 144.7500 -64.0 + 117.5000 143.7500 -64.0 + 119.7500 140.5000 -64.0 + 118.5000 140.2500 -64.0 + 114.5000 143.2500 -64.0 + 109.5000 143.2500 -64.0 + 101.5000 139.2500 -64.0 + 99.7500 136.5000 -64.0 + 100.5000 132.7500 -64.0 + 105.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 132.5000 -64.0 + 89.5000 133.2500 -64.0 + 90.2500 135.5000 -64.0 + 89.5000 137.2500 -64.0 + 89.2500 142.5000 -64.0 + 90.5000 142.7500 -64.0 + 90.7500 140.5000 -64.0 + 91.7500 138.5000 -64.0 + 90.7500 136.5000 -64.0 + 90.7500 133.5000 -64.0 + 92.7500 132.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 43.5000 -64.0 + 109.5000 42.7500 -64.0 + 110.2500 44.5000 -64.0 + 109.5000 46.2500 -64.0 + 110.2500 47.5000 -64.0 + 102.5000 51.2500 -64.0 + 100.5000 51.2500 -64.0 + 84.5000 65.2500 -64.0 + 83.7500 64.5000 -64.0 + 85.7500 60.5000 -64.0 + 97.5000 48.7500 -64.0 + 103.5000 44.7500 -64.0 + 107.5000 45.7500 -64.0 +} -64.0 +{ -64.0 + 119.5000 46.7500 -64.0 + 121.5000 46.7500 -64.0 + 125.2500 49.5000 -64.0 + 125.2500 51.5000 -64.0 + 123.5000 52.2500 -64.0 + 120.5000 51.2500 -64.0 + 117.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 128.5000 52.7500 -64.0 + 136.2500 61.5000 -64.0 + 135.5000 63.2500 -64.0 + 132.7500 61.5000 -64.0 + 131.7500 59.5000 -64.0 + 126.7500 54.5000 -64.0 +} -64.0 +v 98 z -190.000000 -64.0 +{ -64.0 + 108.2500 39.5000 -64.0 + 100.5000 43.2500 -64.0 + 94.5000 47.2500 -64.0 + 84.5000 57.2500 -64.0 + 79.2500 65.5000 -64.0 + 78.2500 70.5000 -64.0 + 79.5000 71.7500 -64.0 + 81.5000 70.7500 -64.0 + 83.5000 70.7500 -64.0 + 98.5000 56.7500 -64.0 + 103.5000 53.7500 -64.0 + 105.5000 53.7500 -64.0 + 109.5000 51.7500 -64.0 + 111.2500 52.5000 -64.0 + 113.5000 51.7500 -64.0 + 123.5000 55.7500 -64.0 + 134.5000 67.7500 -64.0 + 138.2500 70.5000 -64.0 + 141.5000 70.7500 -64.0 + 141.7500 66.5000 -64.0 + 137.7500 58.5000 -64.0 + 130.7500 49.5000 -64.0 + 129.5000 49.2500 -64.0 + 126.7500 46.5000 -64.0 + 115.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 122.5000 -64.0 + 115.2500 126.5000 -64.0 + 119.5000 126.7500 -64.0 + 122.5000 127.7500 -64.0 + 124.2500 131.5000 -64.0 + 123.2500 136.5000 -64.0 + 119.5000 140.2500 -64.0 + 113.5000 144.2500 -64.0 + 108.5000 143.2500 -64.0 + 102.7500 140.5000 -64.0 + 99.7500 136.5000 -64.0 + 99.7500 133.5000 -64.0 + 104.7500 129.5000 -64.0 + 100.5000 129.2500 -64.0 + 96.5000 133.2500 -64.0 + 92.5000 133.2500 -64.0 + 89.5000 134.2500 -64.0 + 89.2500 142.5000 -64.0 + 91.2500 144.5000 -64.0 + 92.7500 144.5000 -64.0 + 90.7500 140.5000 -64.0 + 90.7500 135.5000 -64.0 + 92.5000 134.7500 -64.0 + 97.5000 136.7500 -64.0 + 98.2500 138.5000 -64.0 + 101.2500 141.5000 -64.0 + 95.2500 144.5000 -64.0 + 103.5000 144.7500 -64.0 + 101.7500 142.5000 -64.0 + 102.5000 141.7500 -64.0 + 108.2500 144.5000 -64.0 + 115.5000 144.7500 -64.0 + 119.5000 141.7500 -64.0 + 121.2500 142.5000 -64.0 + 118.5000 148.2500 -64.0 + 118.5000 149.7500 -64.0 + 121.5000 145.7500 -64.0 + 121.7500 141.5000 -64.0 + 126.5000 136.7500 -64.0 + 132.7500 135.5000 -64.0 + 126.5000 135.2500 -64.0 + 124.5000 137.2500 -64.0 + 123.7500 136.5000 -64.0 + 125.5000 133.7500 -64.0 + 125.7500 130.5000 -64.0 + 129.7500 124.5000 -64.0 + 123.5000 124.2500 -64.0 + 121.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 104.2500 145.5000 -64.0 + 106.2500 146.5000 -64.0 + 106.7500 145.5000 -64.0 +} -64.0 +{ -64.0 + 107.2500 147.5000 -64.0 + 113.7500 151.5000 -64.0 + 112.7500 148.5000 -64.0 + 110.7500 147.5000 -64.0 +} -64.0 +{ -64.0 + 103.7500 45.5000 -64.0 + 105.5000 44.7500 -64.0 + 107.2500 47.5000 -64.0 + 103.5000 50.2500 -64.0 + 97.5000 52.2500 -64.0 + 92.5000 56.2500 -64.0 + 91.7500 55.5000 -64.0 + 93.7500 52.5000 -64.0 + 99.5000 47.7500 -64.0 +} -64.0 +{ -64.0 + 113.7500 46.5000 -64.0 + 114.5000 45.7500 -64.0 + 115.2500 46.5000 -64.0 + 114.5000 47.2500 -64.0 +} -64.0 +{ -64.0 + 119.7500 47.5000 -64.0 + 121.5000 46.7500 -64.0 + 125.2500 49.5000 -64.0 + 124.5000 51.2500 -64.0 + 122.5000 51.2500 -64.0 +} -64.0 +v 100 z -192.000000 -64.0 +{ -64.0 + 107.2500 39.5000 -64.0 + 102.5000 41.2500 -64.0 + 95.5000 46.2500 -64.0 + 88.5000 53.2500 -64.0 + 82.2500 63.5000 -64.0 + 81.5000 66.7500 -64.0 + 83.5000 67.7500 -64.0 + 86.5000 66.7500 -64.0 + 99.5000 55.7500 -64.0 + 109.5000 50.7500 -64.0 + 113.5000 50.7500 -64.0 + 121.5000 53.7500 -64.0 + 136.2500 67.5000 -64.0 + 138.5000 67.7500 -64.0 + 138.7500 62.5000 -64.0 + 134.7500 54.5000 -64.0 + 130.7500 50.5000 -64.0 + 129.5000 48.2500 -64.0 + 121.5000 42.2500 -64.0 + 115.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 119.5000 -64.0 + 117.2500 121.5000 -64.0 + 115.2500 122.5000 -64.0 + 114.2500 124.5000 -64.0 + 116.2500 125.5000 -64.0 + 115.5000 127.2500 -64.0 + 116.5000 127.7500 -64.0 + 122.5000 125.7500 -64.0 + 120.5000 121.2500 -64.0 +} -64.0 +{ -64.0 + 132.2500 121.5000 -64.0 + 131.2500 123.5000 -64.0 + 125.5000 126.2500 -64.0 + 124.2500 134.5000 -64.0 + 120.2500 140.5000 -64.0 + 118.5000 141.2500 -64.0 + 115.5000 144.2500 -64.0 + 109.5000 144.2500 -64.0 + 101.7500 140.5000 -64.0 + 97.7500 134.5000 -64.0 + 93.5000 134.2500 -64.0 + 91.7500 133.5000 -64.0 + 90.7500 131.5000 -64.0 + 89.2500 130.5000 -64.0 + 91.2500 136.5000 -64.0 + 97.5000 137.7500 -64.0 + 100.2500 140.5000 -64.0 + 101.2500 142.5000 -64.0 + 98.5000 144.2500 -64.0 + 92.5000 144.2500 -64.0 + 90.7500 140.5000 -64.0 + 88.5000 138.2500 -64.0 + 88.2500 141.5000 -64.0 + 91.2500 144.5000 -64.0 + 102.5000 144.7500 -64.0 + 104.2500 145.5000 -64.0 + 105.2500 147.5000 -64.0 + 107.2500 148.5000 -64.0 + 112.5000 148.7500 -64.0 + 111.7500 147.5000 -64.0 + 109.5000 147.2500 -64.0 + 102.7500 143.5000 -64.0 + 103.5000 142.7500 -64.0 + 113.2500 146.5000 -64.0 + 117.5000 144.7500 -64.0 + 120.5000 141.7500 -64.0 + 121.2500 142.5000 -64.0 + 119.2500 146.5000 -64.0 + 120.5000 146.7500 -64.0 + 123.5000 141.7500 -64.0 + 123.7500 139.5000 -64.0 + 125.5000 137.7500 -64.0 + 128.5000 137.7500 -64.0 + 129.7500 136.5000 -64.0 + 127.5000 136.2500 -64.0 + 125.5000 137.2500 -64.0 + 124.7500 135.5000 -64.0 + 129.7500 125.5000 -64.0 + 133.5000 123.7500 -64.0 +} -64.0 +{ -64.0 + 100.2500 128.5000 -64.0 + 99.2500 130.5000 -64.0 + 104.5000 130.7500 -64.0 + 104.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 129.5000 -64.0 + 109.2500 130.5000 -64.0 + 111.5000 130.7500 -64.0 + 111.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 112.7500 43.5000 -64.0 + 113.5000 42.7500 -64.0 + 115.2500 44.5000 -64.0 + 114.5000 46.2500 -64.0 + 113.7500 45.5000 -64.0 +} -64.0 +{ -64.0 + 102.7500 45.5000 -64.0 + 104.5000 44.7500 -64.0 + 106.2500 46.5000 -64.0 + 101.5000 49.2500 -64.0 + 99.7500 48.5000 -64.0 +} -64.0 +{ -64.0 + 115.7500 45.5000 -64.0 + 116.5000 44.7500 -64.0 + 118.2500 45.5000 -64.0 + 117.5000 47.2500 -64.0 +} -64.0 +v 87 z -194.000000 -64.0 +{ -64.0 + 105.2500 39.5000 -64.0 + 101.5000 41.2500 -64.0 + 90.5000 52.2500 -64.0 + 86.5000 59.2500 -64.0 + 86.2500 63.5000 -64.0 + 87.5000 63.7500 -64.0 + 99.5000 54.7500 -64.0 + 109.5000 49.7500 -64.0 + 114.5000 49.7500 -64.0 + 121.5000 52.7500 -64.0 + 132.2500 62.5000 -64.0 + 135.5000 62.7500 -64.0 + 135.5000 60.2500 -64.0 + 132.7500 53.5000 -64.0 + 126.7500 45.5000 -64.0 + 122.5000 42.2500 -64.0 + 116.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 118.5000 -64.0 + 117.2500 120.5000 -64.0 + 115.2500 124.5000 -64.0 + 117.5000 123.7500 -64.0 + 119.2500 124.5000 -64.0 + 118.5000 126.2500 -64.0 + 116.5000 127.2500 -64.0 + 116.2500 128.5000 -64.0 + 117.5000 128.7500 -64.0 + 121.5000 124.7500 -64.0 + 120.7500 121.5000 -64.0 + 119.5000 121.2500 -64.0 +} -64.0 +{ -64.0 + 131.2500 124.5000 -64.0 + 130.5000 125.2500 -64.0 + 128.2500 125.5000 -64.0 + 127.2500 127.5000 -64.0 + 129.2500 128.5000 -64.0 + 130.5000 127.7500 -64.0 + 132.5000 126.7500 -64.0 +} -64.0 +{ -64.0 + 125.2500 130.5000 -64.0 + 125.2500 132.5000 -64.0 + 122.2500 139.5000 -64.0 + 115.5000 145.2500 -64.0 + 108.5000 145.2500 -64.0 + 98.5000 139.2500 -64.0 + 101.2500 142.5000 -64.0 + 95.2500 145.5000 -64.0 + 98.5000 145.7500 -64.0 + 100.5000 144.7500 -64.0 + 106.2500 147.5000 -64.0 + 111.5000 147.7500 -64.0 + 114.7500 150.5000 -64.0 + 113.7500 148.5000 -64.0 + 115.5000 146.7500 -64.0 + 117.2500 147.5000 -64.0 + 117.5000 149.7500 -64.0 + 117.7500 147.5000 -64.0 + 123.5000 143.7500 -64.0 + 124.7500 140.5000 -64.0 + 127.5000 137.7500 -64.0 + 132.5000 137.7500 -64.0 + 135.5000 136.7500 -64.0 + 135.5000 135.2500 -64.0 + 131.5000 137.2500 -64.0 + 129.5000 136.2500 -64.0 + 126.5000 137.2500 -64.0 + 124.7500 136.5000 -64.0 + 126.5000 133.7500 -64.0 + 126.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 137.5000 -64.0 + 92.5000 138.2500 -64.0 + 88.5000 138.2500 -64.0 + 88.2500 142.5000 -64.0 + 89.5000 143.7500 -64.0 + 93.5000 145.7500 -64.0 + 89.7500 141.5000 -64.0 + 90.5000 140.7500 -64.0 + 94.5000 137.7500 -64.0 + 96.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 151.5000 -64.0 + 116.5000 154.7500 -64.0 + 116.7500 151.5000 -64.0 +} -64.0 +{ -64.0 + 110.7500 43.5000 -64.0 + 111.5000 42.7500 -64.0 + 113.2500 43.5000 -64.0 + 112.5000 45.2500 -64.0 +} -64.0 +{ -64.0 + 107.7500 44.5000 -64.0 + 108.5000 43.7500 -64.0 + 109.2500 44.5000 -64.0 + 108.5000 45.2500 -64.0 +} -64.0 +v 81 z -196.000000 -64.0 +{ -64.0 + 105.2500 39.5000 -64.0 + 101.2500 41.5000 -64.0 + 93.5000 51.2500 -64.0 + 90.2500 56.5000 -64.0 + 91.2500 58.5000 -64.0 + 93.5000 57.7500 -64.0 + 99.5000 52.7500 -64.0 + 105.5000 49.7500 -64.0 + 107.5000 49.7500 -64.0 + 109.5000 48.7500 -64.0 + 114.5000 48.7500 -64.0 + 122.5000 51.7500 -64.0 + 129.2500 57.5000 -64.0 + 131.5000 57.7500 -64.0 + 131.5000 56.2500 -64.0 + 128.7500 49.5000 -64.0 + 123.5000 43.2500 -64.0 + 119.7500 40.5000 -64.0 + 114.5000 40.2500 -64.0 + 112.7500 39.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 119.5000 -64.0 + 117.2500 120.5000 -64.0 + 116.5000 122.2500 -64.0 + 111.5000 125.2500 -64.0 + 112.2500 126.5000 -64.0 + 115.5000 126.7500 -64.0 + 116.2500 128.5000 -64.0 + 115.5000 130.2500 -64.0 + 114.7500 129.5000 -64.0 + 111.5000 129.2500 -64.0 + 107.5000 131.2500 -64.0 + 102.5000 130.2500 -64.0 + 102.5000 131.7500 -64.0 + 111.5000 132.7500 -64.0 + 113.5000 130.7500 -64.0 + 117.5000 130.7500 -64.0 + 119.5000 128.7500 -64.0 + 121.5000 129.7500 -64.0 + 121.7500 128.5000 -64.0 + 120.7500 126.5000 -64.0 + 121.5000 125.7500 -64.0 + 122.5000 122.2500 -64.0 + 118.7500 119.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 126.5000 -64.0 + 128.2500 128.5000 -64.0 + 125.5000 131.2500 -64.0 + 122.2500 140.5000 -64.0 + 118.5000 144.2500 -64.0 + 114.5000 146.2500 -64.0 + 110.5000 146.2500 -64.0 + 103.5000 143.2500 -64.0 + 96.7500 138.5000 -64.0 + 93.5000 138.2500 -64.0 + 91.5000 137.2500 -64.0 + 88.5000 138.2500 -64.0 + 88.2500 139.5000 -64.0 + 93.2500 140.5000 -64.0 + 92.2500 141.5000 -64.0 + 94.5000 141.7500 -64.0 + 97.5000 140.7500 -64.0 + 100.2500 143.5000 -64.0 + 97.2500 145.5000 -64.0 + 102.5000 145.7500 -64.0 + 106.2500 147.5000 -64.0 + 114.5000 149.7500 -64.0 + 116.2500 153.5000 -64.0 + 117.5000 153.7500 -64.0 + 117.7500 149.5000 -64.0 + 118.5000 147.7500 -64.0 + 125.5000 141.7500 -64.0 + 130.5000 138.7500 -64.0 + 133.5000 138.7500 -64.0 + 133.7500 137.5000 -64.0 + 130.5000 137.2500 -64.0 + 127.5000 138.2500 -64.0 + 125.7500 137.5000 -64.0 + 126.7500 132.5000 -64.0 + 129.5000 129.7500 -64.0 + 131.5000 128.7500 -64.0 + 134.5000 129.7500 -64.0 + 131.7500 126.5000 -64.0 +} -64.0 +v 78 z -198.000000 -64.0 +{ -64.0 + 104.2500 40.5000 -64.0 + 102.2500 41.5000 -64.0 + 98.2500 49.5000 -64.0 + 101.5000 49.7500 -64.0 + 105.5000 47.7500 -64.0 + 114.5000 47.7500 -64.0 + 125.5000 50.7500 -64.0 + 125.7500 49.5000 -64.0 + 123.7500 44.5000 -64.0 + 120.7500 41.5000 -64.0 + 113.5000 41.2500 -64.0 + 111.7500 40.5000 -64.0 +} -64.0 +{ -64.0 + 129.2500 116.5000 -64.0 + 129.2500 117.5000 -64.0 + 130.5000 117.7500 -64.0 + 130.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 118.5000 -64.0 + 116.2500 119.5000 -64.0 + 117.5000 119.7500 -64.0 + 119.2500 122.5000 -64.0 + 119.2500 126.5000 -64.0 + 116.2500 129.5000 -64.0 + 115.2500 131.5000 -64.0 + 117.5000 131.7500 -64.0 + 120.7500 130.5000 -64.0 + 121.7500 128.5000 -64.0 + 120.7500 126.5000 -64.0 + 122.7500 124.5000 -64.0 + 123.7500 122.5000 -64.0 + 118.7500 118.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 120.5000 -64.0 + 111.5000 121.2500 -64.0 + 106.5000 121.2500 -64.0 + 103.5000 124.2500 -64.0 + 101.5000 124.2500 -64.0 + 102.5000 125.7500 -64.0 + 104.5000 126.7500 -64.0 + 104.7500 125.5000 -64.0 + 108.5000 122.7500 -64.0 + 114.5000 122.7500 -64.0 + 115.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 127.5000 -64.0 + 124.5000 134.2500 -64.0 + 124.2500 137.5000 -64.0 + 120.5000 143.2500 -64.0 + 116.5000 146.2500 -64.0 + 113.5000 146.2500 -64.0 + 111.5000 147.2500 -64.0 + 99.7500 142.5000 -64.0 + 97.2500 145.5000 -64.0 + 103.5000 145.7500 -64.0 + 109.5000 148.7500 -64.0 + 114.5000 149.7500 -64.0 + 115.2500 151.5000 -64.0 + 116.7500 152.5000 -64.0 + 117.7500 147.5000 -64.0 + 120.5000 144.7500 -64.0 + 130.7500 138.5000 -64.0 + 126.5000 137.2500 -64.0 + 125.5000 139.2500 -64.0 + 124.7500 137.5000 -64.0 + 126.5000 135.7500 -64.0 + 126.7500 133.5000 -64.0 + 132.5000 128.7500 -64.0 + 133.2500 130.5000 -64.0 + 135.5000 132.7500 -64.0 + 135.7500 130.5000 -64.0 + 132.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 130.5000 -64.0 + 101.2500 132.5000 -64.0 + 104.7500 132.5000 -64.0 + 103.7500 130.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 137.5000 -64.0 + 90.2500 140.5000 -64.0 + 95.5000 140.7500 -64.0 + 98.5000 141.7500 -64.0 + 98.7500 139.5000 -64.0 + 95.7500 137.5000 -64.0 +} -64.0 +v 75 z -200.000000 -64.0 +{ -64.0 + 107.2500 89.5000 -64.0 + 107.2500 91.5000 -64.0 + 109.5000 91.7500 -64.0 +} -64.0 +{ -64.0 + 90.2500 106.5000 -64.0 + 90.2500 108.5000 -64.0 + 91.7500 109.5000 -64.0 + 92.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 116.5000 -64.0 + 114.2500 117.5000 -64.0 + 116.5000 117.7500 -64.0 + 118.2500 120.5000 -64.0 + 118.2500 124.5000 -64.0 + 117.5000 126.2500 -64.0 + 113.5000 129.2500 -64.0 + 111.5000 129.2500 -64.0 + 109.5000 130.2500 -64.0 + 103.5000 130.2500 -64.0 + 101.2500 128.5000 -64.0 + 102.2500 130.5000 -64.0 + 102.2500 132.5000 -64.0 + 100.5000 133.2500 -64.0 + 98.7500 130.5000 -64.0 + 98.7500 128.5000 -64.0 + 97.2500 128.5000 -64.0 + 99.2500 134.5000 -64.0 + 101.5000 134.7500 -64.0 + 110.5000 131.7500 -64.0 + 112.2500 132.5000 -64.0 + 117.5000 132.7500 -64.0 + 121.5000 130.7500 -64.0 + 124.2500 132.5000 -64.0 + 124.2500 136.5000 -64.0 + 119.2500 144.5000 -64.0 + 113.5000 147.2500 -64.0 + 108.5000 146.2500 -64.0 + 107.2500 147.5000 -64.0 + 110.2500 149.5000 -64.0 + 112.5000 149.7500 -64.0 + 115.5000 152.7500 -64.0 + 118.5000 148.7500 -64.0 + 118.7500 146.5000 -64.0 + 123.5000 141.7500 -64.0 + 125.5000 141.7500 -64.0 + 125.7500 139.5000 -64.0 + 127.5000 135.7500 -64.0 + 127.7500 132.5000 -64.0 + 130.5000 129.7500 -64.0 + 132.5000 129.7500 -64.0 + 133.2500 131.5000 -64.0 + 134.5000 135.7500 -64.0 + 136.5000 134.7500 -64.0 + 136.7500 132.5000 -64.0 + 134.7500 128.5000 -64.0 + 131.5000 127.2500 -64.0 + 127.5000 130.2500 -64.0 + 123.5000 130.2500 -64.0 + 121.7500 126.5000 -64.0 + 125.7500 122.5000 -64.0 + 121.5000 122.2500 -64.0 + 119.7500 118.5000 -64.0 + 116.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 137.5000 -64.0 + 94.2500 139.5000 -64.0 + 93.2500 142.5000 -64.0 + 97.5000 142.7500 -64.0 + 100.7500 141.5000 -64.0 + 97.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 138.5000 -64.0 + 87.5000 141.2500 -64.0 + 88.2500 142.5000 -64.0 + 89.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 118.7500 125.5000 -64.0 + 119.5000 124.7500 -64.0 + 120.2500 125.5000 -64.0 + 119.5000 126.2500 -64.0 +} -64.0 +v 109 z -202.000000 -64.0 +{ -64.0 + 105.2500 86.5000 -64.0 + 103.5000 88.2500 -64.0 + 101.2500 88.5000 -64.0 + 104.5000 88.7500 -64.0 + 109.5000 86.7500 -64.0 + 114.5000 87.7500 -64.0 + 111.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 119.2500 90.5000 -64.0 + 119.5000 90.7500 -64.0 + 121.5000 91.7500 -64.0 + 120.7500 90.5000 -64.0 +} -64.0 +{ -64.0 + 98.2500 91.5000 -64.0 + 97.2500 93.5000 -64.0 + 98.5000 93.7500 -64.0 +} -64.0 +{ -64.0 + 100.2500 94.5000 -64.0 + 99.5000 95.2500 -64.0 + 100.5000 95.7500 -64.0 + 101.7500 94.5000 -64.0 +} -64.0 +{ -64.0 + 109.2500 115.5000 -64.0 + 107.5000 117.7500 -64.0 + 109.5000 116.7500 -64.0 + 113.5000 116.7500 -64.0 + 117.2500 120.5000 -64.0 + 114.5000 124.2500 -64.0 + 112.5000 124.2500 -64.0 + 107.5000 128.2500 -64.0 + 104.5000 128.2500 -64.0 + 102.5000 125.2500 -64.0 + 100.5000 124.2500 -64.0 + 100.2500 125.5000 -64.0 + 105.2500 130.5000 -64.0 + 107.5000 129.7500 -64.0 + 109.2500 130.5000 -64.0 + 115.5000 128.7500 -64.0 + 115.7500 126.5000 -64.0 + 119.5000 121.7500 -64.0 + 121.2500 122.5000 -64.0 + 122.2500 124.5000 -64.0 + 120.5000 126.2500 -64.0 + 120.2500 128.5000 -64.0 + 118.5000 130.2500 -64.0 + 115.2500 130.5000 -64.0 + 114.2500 132.5000 -64.0 + 115.5000 131.7500 -64.0 + 116.5000 132.7500 -64.0 + 118.5000 131.7500 -64.0 + 121.5000 131.7500 -64.0 + 124.2500 134.5000 -64.0 + 123.2500 139.5000 -64.0 + 114.5000 147.2500 -64.0 + 110.5000 147.2500 -64.0 + 105.5000 145.2500 -64.0 + 99.7500 139.5000 -64.0 + 99.7500 136.5000 -64.0 + 104.5000 134.7500 -64.0 + 104.7500 133.5000 -64.0 + 100.5000 133.2500 -64.0 + 98.5000 130.2500 -64.0 + 98.2500 132.5000 -64.0 + 95.5000 136.2500 -64.0 + 91.2500 136.5000 -64.0 + 88.5000 140.2500 -64.0 + 88.5000 142.7500 -64.0 + 92.2500 145.5000 -64.0 + 93.5000 144.7500 -64.0 + 100.5000 144.7500 -64.0 + 109.2500 149.5000 -64.0 + 111.5000 149.7500 -64.0 + 115.5000 154.7500 -64.0 + 116.5000 150.7500 -64.0 + 118.5000 149.7500 -64.0 + 122.5000 144.7500 -64.0 + 126.5000 141.7500 -64.0 + 128.5000 141.7500 -64.0 + 130.5000 139.7500 -64.0 + 132.5000 139.7500 -64.0 + 136.5000 136.7500 -64.0 + 136.7500 131.5000 -64.0 + 134.7500 127.5000 -64.0 + 131.5000 127.2500 -64.0 + 129.5000 129.2500 -64.0 + 131.2500 130.5000 -64.0 + 131.2500 132.5000 -64.0 + 133.2500 133.5000 -64.0 + 133.2500 135.5000 -64.0 + 131.5000 137.2500 -64.0 + 128.5000 137.2500 -64.0 + 126.7500 132.5000 -64.0 + 128.7500 130.5000 -64.0 + 124.5000 130.2500 -64.0 + 121.7500 126.5000 -64.0 + 123.5000 124.7500 -64.0 + 127.5000 122.7500 -64.0 + 127.5000 121.2500 -64.0 + 125.5000 122.2500 -64.0 + 122.5000 122.2500 -64.0 + 121.7500 120.5000 -64.0 + 118.5000 117.2500 -64.0 + 114.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 106.2500 133.5000 -64.0 + 111.5000 134.7500 -64.0 + 112.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 90.7500 138.5000 -64.0 + 91.5000 137.7500 -64.0 + 93.5000 137.7500 -64.0 + 95.2500 139.5000 -64.0 + 96.2500 141.5000 -64.0 + 93.5000 144.2500 -64.0 + 90.7500 140.5000 -64.0 +} -64.0 +v 109 z -204.000000 -64.0 +{ -64.0 + 106.2500 85.5000 -64.0 + 105.2500 86.5000 -64.0 + 108.5000 86.7500 -64.0 + 109.7500 85.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 115.5000 -64.0 + 110.2500 116.5000 -64.0 + 114.2500 118.5000 -64.0 + 113.5000 120.2500 -64.0 + 108.5000 120.2500 -64.0 + 106.5000 121.2500 -64.0 + 104.5000 121.2500 -64.0 + 99.2500 124.5000 -64.0 + 102.5000 124.7500 -64.0 + 106.5000 121.7500 -64.0 + 107.5000 123.7500 -64.0 + 109.5000 124.7500 -64.0 + 113.5000 121.7500 -64.0 + 117.5000 121.7500 -64.0 + 121.2500 123.5000 -64.0 + 121.2500 128.5000 -64.0 + 119.5000 130.2500 -64.0 + 117.5000 130.2500 -64.0 + 115.5000 131.2500 -64.0 + 113.5000 131.2500 -64.0 + 112.2500 132.5000 -64.0 + 117.5000 132.7500 -64.0 + 119.5000 131.7500 -64.0 + 121.5000 132.7500 -64.0 + 125.2500 136.5000 -64.0 + 123.2500 140.5000 -64.0 + 120.5000 143.2500 -64.0 + 116.5000 150.2500 -64.0 + 114.5000 151.2500 -64.0 + 112.7500 150.5000 -64.0 + 115.7500 148.5000 -64.0 + 112.5000 148.2500 -64.0 + 109.5000 147.2500 -64.0 + 104.5000 145.2500 -64.0 + 99.7500 140.5000 -64.0 + 99.7500 138.5000 -64.0 + 101.5000 136.7500 -64.0 + 106.7500 133.5000 -64.0 + 102.5000 133.2500 -64.0 + 100.5000 134.2500 -64.0 + 98.7500 133.5000 -64.0 + 98.5000 131.2500 -64.0 + 98.2500 133.5000 -64.0 + 96.2500 135.5000 -64.0 + 97.2500 137.5000 -64.0 + 96.5000 138.2500 -64.0 + 96.2500 140.5000 -64.0 + 97.2500 142.5000 -64.0 + 96.5000 144.2500 -64.0 + 93.5000 144.2500 -64.0 + 91.7500 143.5000 -64.0 + 91.7500 141.5000 -64.0 + 90.7500 139.5000 -64.0 + 90.7500 136.5000 -64.0 + 89.2500 136.5000 -64.0 + 90.2500 138.5000 -64.0 + 89.5000 140.2500 -64.0 + 89.2500 143.5000 -64.0 + 90.5000 144.7500 -64.0 + 94.5000 146.7500 -64.0 + 96.5000 145.7500 -64.0 + 98.5000 145.7500 -64.0 + 101.5000 146.7500 -64.0 + 107.2500 149.5000 -64.0 + 109.5000 149.7500 -64.0 + 113.2500 152.5000 -64.0 + 113.2500 154.5000 -64.0 + 115.5000 157.7500 -64.0 + 117.5000 156.7500 -64.0 + 116.7500 154.5000 -64.0 + 117.7500 151.5000 -64.0 + 123.5000 144.7500 -64.0 + 129.5000 141.7500 -64.0 + 131.5000 141.7500 -64.0 + 133.5000 140.7500 -64.0 + 135.5000 140.7500 -64.0 + 137.5000 138.7500 -64.0 + 137.7500 134.5000 -64.0 + 139.7500 129.5000 -64.0 + 136.7500 125.5000 -64.0 + 134.5000 125.2500 -64.0 + 132.5000 126.2500 -64.0 + 130.5000 126.2500 -64.0 + 130.2500 128.5000 -64.0 + 128.5000 130.2500 -64.0 + 124.5000 130.2500 -64.0 + 122.7500 128.5000 -64.0 + 121.7500 126.5000 -64.0 + 125.5000 123.7500 -64.0 + 129.5000 123.7500 -64.0 + 128.7500 122.5000 -64.0 + 124.5000 122.2500 -64.0 + 122.5000 121.2500 -64.0 + 114.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 132.7500 128.5000 -64.0 + 134.5000 127.7500 -64.0 + 136.2500 128.5000 -64.0 + 133.5000 130.2500 -64.0 +} -64.0 +{ -64.0 + 130.7500 133.5000 -64.0 + 131.5000 132.7500 -64.0 + 133.2500 133.5000 -64.0 + 134.2500 135.5000 -64.0 + 132.5000 137.2500 -64.0 + 127.5000 140.2500 -64.0 + 125.7500 139.5000 -64.0 +} -64.0 +v 97 z -206.000000 -64.0 +{ -64.0 + 107.2500 86.5000 -64.0 + 105.2500 87.5000 -64.0 + 114.5000 87.7500 -64.0 + 116.5000 88.7500 -64.0 + 117.5000 88.2500 -64.0 + 113.7500 86.5000 -64.0 +} -64.0 +{ -64.0 + 110.2500 116.5000 -64.0 + 108.5000 118.2500 -64.0 + 102.5000 121.2500 -64.0 + 101.2500 124.5000 -64.0 + 107.5000 119.7500 -64.0 + 110.5000 119.7500 -64.0 + 116.5000 121.7500 -64.0 + 120.2500 125.5000 -64.0 + 119.5000 129.2500 -64.0 + 114.5000 132.2500 -64.0 + 123.5000 132.7500 -64.0 + 125.2500 134.5000 -64.0 + 125.2500 138.5000 -64.0 + 119.5000 146.2500 -64.0 + 113.5000 149.2500 -64.0 + 104.5000 146.2500 -64.0 + 99.7500 141.5000 -64.0 + 100.5000 137.7500 -64.0 + 106.5000 134.7500 -64.0 + 103.7500 133.5000 -64.0 + 100.5000 134.2500 -64.0 + 98.5000 131.2500 -64.0 + 98.2500 133.5000 -64.0 + 95.5000 137.2500 -64.0 + 90.5000 137.2500 -64.0 + 89.2500 142.5000 -64.0 + 90.2500 145.5000 -64.0 + 93.2500 147.5000 -64.0 + 95.5000 147.7500 -64.0 + 97.5000 146.7500 -64.0 + 102.5000 147.7500 -64.0 + 111.5000 151.7500 -64.0 + 110.7500 150.5000 -64.0 + 111.5000 149.7500 -64.0 + 114.5000 149.7500 -64.0 + 116.5000 148.7500 -64.0 + 118.2500 149.5000 -64.0 + 117.5000 151.2500 -64.0 + 117.2500 155.5000 -64.0 + 118.2500 157.5000 -64.0 + 117.5000 158.2500 -64.0 + 114.7500 156.5000 -64.0 + 114.7500 154.5000 -64.0 + 113.5000 153.2500 -64.0 + 113.2500 158.5000 -64.0 + 114.5000 159.7500 -64.0 + 116.5000 158.7500 -64.0 + 119.5000 158.7500 -64.0 + 117.7500 154.5000 -64.0 + 119.7500 149.5000 -64.0 + 125.5000 143.7500 -64.0 + 127.5000 143.7500 -64.0 + 131.5000 141.7500 -64.0 + 137.5000 140.7500 -64.0 + 141.5000 137.7500 -64.0 + 141.7500 132.5000 -64.0 + 140.5000 131.2500 -64.0 + 138.5000 134.2500 -64.0 + 136.7500 132.5000 -64.0 + 133.5000 134.2500 -64.0 + 131.7500 131.5000 -64.0 + 125.5000 131.2500 -64.0 + 121.7500 127.5000 -64.0 + 124.7500 123.5000 -64.0 + 117.5000 119.2500 -64.0 + 115.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 128.2500 122.5000 -64.0 + 128.2500 123.5000 -64.0 + 130.2500 124.5000 -64.0 + 131.2500 126.5000 -64.0 + 132.5000 126.7500 -64.0 + 135.7500 124.5000 -64.0 + 132.5000 124.2500 -64.0 + 131.7500 122.5000 -64.0 + 130.5000 123.2500 -64.0 +} -64.0 +{ -64.0 + 132.5000 135.7500 -64.0 + 134.2500 136.5000 -64.0 + 134.2500 138.5000 -64.0 + 132.5000 139.2500 -64.0 + 130.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 90.7500 141.5000 -64.0 + 91.5000 140.7500 -64.0 + 93.5000 140.7500 -64.0 + 98.5000 142.7500 -64.0 + 101.2500 145.5000 -64.0 + 100.5000 146.2500 -64.0 + 98.5000 145.2500 -64.0 + 96.5000 146.2500 -64.0 + 94.7500 145.5000 -64.0 + 93.5000 146.2500 -64.0 + 90.7500 143.5000 -64.0 +} -64.0 +v 120 z -208.000000 -64.0 +{ -64.0 + 101.2500 87.5000 -64.0 + 100.2500 88.5000 -64.0 + 102.5000 88.7500 -64.0 + 102.7500 87.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 116.5000 -64.0 + 111.5000 118.2500 -64.0 + 106.5000 119.2500 -64.0 + 105.5000 120.7500 -64.0 + 107.5000 119.7500 -64.0 + 111.5000 119.7500 -64.0 + 114.5000 120.7500 -64.0 + 116.2500 123.5000 -64.0 + 116.2500 126.5000 -64.0 + 115.5000 128.2500 -64.0 + 113.5000 128.2500 -64.0 + 114.5000 128.7500 -64.0 + 115.2500 130.5000 -64.0 + 112.2500 134.5000 -64.0 + 123.5000 131.7500 -64.0 + 125.5000 128.7500 -64.0 + 124.7500 127.5000 -64.0 + 124.7500 123.5000 -64.0 + 122.5000 125.2500 -64.0 + 121.7500 124.5000 -64.0 + 122.7500 121.5000 -64.0 + 121.7500 119.5000 -64.0 + 121.7500 116.5000 -64.0 + 120.5000 116.2500 -64.0 + 118.5000 117.2500 -64.0 +} -64.0 +{ -64.0 + 103.2500 121.5000 -64.0 + 102.2500 123.5000 -64.0 + 103.7500 123.5000 -64.0 + 104.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 122.5000 -64.0 + 131.2500 123.5000 -64.0 + 132.2500 125.5000 -64.0 + 134.7500 125.5000 -64.0 + 135.7500 123.5000 -64.0 + 133.7500 122.5000 -64.0 +} -64.0 +{ -64.0 + 135.2500 127.5000 -64.0 + 135.2500 128.5000 -64.0 + 136.5000 129.7500 -64.0 + 136.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 99.2500 129.5000 -64.0 + 98.5000 130.2500 -64.0 + 98.2500 134.5000 -64.0 + 94.5000 138.2500 -64.0 + 91.5000 138.2500 -64.0 + 91.2500 139.5000 -64.0 + 88.5000 143.2500 -64.0 + 90.2500 145.5000 -64.0 + 90.2500 147.5000 -64.0 + 92.2500 148.5000 -64.0 + 94.5000 148.7500 -64.0 + 96.5000 147.7500 -64.0 + 101.5000 147.7500 -64.0 + 108.5000 150.7500 -64.0 + 113.2500 155.5000 -64.0 + 113.2500 157.5000 -64.0 + 112.5000 159.2500 -64.0 + 114.2500 161.5000 -64.0 + 115.5000 160.7500 -64.0 + 113.7500 159.5000 -64.0 + 114.5000 157.7500 -64.0 + 114.7500 155.5000 -64.0 + 110.7500 151.5000 -64.0 + 111.5000 150.7500 -64.0 + 113.2500 151.5000 -64.0 + 115.5000 151.7500 -64.0 + 117.5000 149.7500 -64.0 + 118.2500 150.5000 -64.0 + 117.5000 152.2500 -64.0 + 117.2500 155.5000 -64.0 + 118.5000 156.7500 -64.0 + 118.7500 153.5000 -64.0 + 120.7500 149.5000 -64.0 + 125.5000 144.7500 -64.0 + 129.5000 144.7500 -64.0 + 135.5000 142.7500 -64.0 + 139.5000 139.7500 -64.0 + 141.7500 138.5000 -64.0 + 142.7500 136.5000 -64.0 + 141.7500 134.5000 -64.0 + 141.2500 135.5000 -64.0 + 140.5000 137.2500 -64.0 + 138.5000 137.2500 -64.0 + 137.5000 135.2500 -64.0 + 135.5000 136.2500 -64.0 + 133.5000 136.2500 -64.0 + 130.5000 135.2500 -64.0 + 128.5000 137.2500 -64.0 + 126.5000 137.2500 -64.0 + 119.5000 147.2500 -64.0 + 114.5000 150.2500 -64.0 + 111.5000 150.2500 -64.0 + 101.5000 145.2500 -64.0 + 97.7500 140.5000 -64.0 + 97.7500 138.5000 -64.0 + 100.5000 136.7500 -64.0 + 104.5000 136.7500 -64.0 + 106.5000 135.7500 -64.0 + 108.5000 135.7500 -64.0 + 108.7500 134.5000 -64.0 + 106.5000 134.2500 -64.0 + 102.5000 130.2500 -64.0 + 100.5000 131.2500 -64.0 +} -64.0 +{ -64.0 + 87.2500 130.5000 -64.0 + 87.2500 132.5000 -64.0 + 87.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 89.2500 135.5000 -64.0 + 90.2500 137.5000 -64.0 + 90.7500 136.5000 -64.0 +} -64.0 +{ -64.0 + 90.7500 143.5000 -64.0 + 91.5000 142.7500 -64.0 + 97.5000 142.7500 -64.0 + 100.2500 145.5000 -64.0 + 99.5000 146.2500 -64.0 + 96.5000 146.2500 -64.0 + 93.5000 147.2500 -64.0 + 91.7500 145.5000 -64.0 +} -64.0 +v 97 z -210.000000 -64.0 +{ -64.0 + 118.2500 115.5000 -64.0 + 117.5000 116.2500 -64.0 + 114.5000 116.2500 -64.0 + 108.5000 119.2500 -64.0 + 106.5000 119.2500 -64.0 + 103.2500 122.5000 -64.0 + 102.2500 124.5000 -64.0 + 104.5000 122.7500 -64.0 + 106.5000 121.7500 -64.0 + 112.5000 119.7500 -64.0 + 114.2500 121.5000 -64.0 + 115.2500 123.5000 -64.0 + 112.5000 126.2500 -64.0 + 112.2500 129.5000 -64.0 + 113.2500 131.5000 -64.0 + 111.5000 134.2500 -64.0 + 107.5000 134.2500 -64.0 + 104.7500 130.5000 -64.0 + 102.5000 130.2500 -64.0 + 100.7500 129.5000 -64.0 + 100.7500 127.5000 -64.0 + 98.5000 131.2500 -64.0 + 98.2500 134.5000 -64.0 + 99.2500 136.5000 -64.0 + 105.5000 137.7500 -64.0 + 111.5000 134.7500 -64.0 + 116.5000 134.7500 -64.0 + 119.5000 133.7500 -64.0 + 121.2500 134.5000 -64.0 + 123.5000 132.7500 -64.0 + 123.7500 129.5000 -64.0 + 121.5000 129.2500 -64.0 + 119.7500 128.5000 -64.0 + 119.7500 126.5000 -64.0 + 117.7500 122.5000 -64.0 + 118.5000 121.7500 -64.0 + 120.5000 120.7500 -64.0 + 121.7500 118.5000 -64.0 + 120.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 128.5000 -64.0 + 127.5000 132.2500 -64.0 + 127.2500 134.5000 -64.0 + 129.5000 132.7500 -64.0 + 131.2500 133.5000 -64.0 + 138.5000 133.7500 -64.0 + 138.7500 132.5000 -64.0 + 136.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 86.2500 131.5000 -64.0 + 86.2500 132.5000 -64.0 + 87.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 140.2500 137.5000 -64.0 + 139.5000 138.2500 -64.0 + 133.5000 138.2500 -64.0 + 129.5000 140.2500 -64.0 + 125.5000 140.2500 -64.0 + 123.2500 142.5000 -64.0 + 121.2500 146.5000 -64.0 + 116.5000 151.2500 -64.0 + 113.5000 151.2500 -64.0 + 113.2500 152.5000 -64.0 + 116.5000 155.7500 -64.0 + 118.5000 156.7500 -64.0 + 117.7500 155.5000 -64.0 + 118.7500 152.5000 -64.0 + 124.5000 146.7500 -64.0 + 128.5000 144.7500 -64.0 + 130.5000 145.7500 -64.0 + 132.5000 144.7500 -64.0 + 134.5000 144.7500 -64.0 + 137.7500 142.5000 -64.0 + 138.7500 140.5000 -64.0 + 140.5000 139.7500 -64.0 + 140.7500 138.5000 -64.0 +} -64.0 +{ -64.0 + 93.2500 141.5000 -64.0 + 92.5000 142.2500 -64.0 + 89.2500 142.5000 -64.0 + 88.2500 144.5000 -64.0 + 89.5000 147.7500 -64.0 + 93.5000 149.7500 -64.0 + 99.5000 147.7500 -64.0 + 102.5000 148.7500 -64.0 + 107.5000 150.7500 -64.0 + 113.2500 156.5000 -64.0 + 113.2500 158.5000 -64.0 + 114.5000 156.7500 -64.0 + 110.7500 152.5000 -64.0 + 110.7500 150.5000 -64.0 + 106.5000 148.2500 -64.0 + 100.5000 145.2500 -64.0 + 96.7500 141.5000 -64.0 +} -64.0 +{ -64.0 + 96.5000 143.7500 -64.0 + 98.2500 145.5000 -64.0 + 97.5000 147.2500 -64.0 + 93.5000 147.2500 -64.0 + 91.7500 146.5000 -64.0 + 92.5000 145.7500 -64.0 + 94.5000 145.7500 -64.0 +} -64.0 +v 108 z -212.000000 -64.0 +{ -64.0 + 118.2500 113.5000 -64.0 + 117.5000 115.2500 -64.0 + 114.5000 115.2500 -64.0 + 106.5000 120.2500 -64.0 + 104.5000 120.2500 -64.0 + 101.5000 123.2500 -64.0 + 101.2500 125.5000 -64.0 + 105.5000 121.7500 -64.0 + 109.5000 119.7500 -64.0 + 113.2500 120.5000 -64.0 + 114.2500 122.5000 -64.0 + 109.5000 130.2500 -64.0 + 105.5000 130.2500 -64.0 + 105.2500 131.5000 -64.0 + 103.5000 132.2500 -64.0 + 102.7500 130.5000 -64.0 + 104.7500 129.5000 -64.0 + 100.7500 128.5000 -64.0 + 100.7500 126.5000 -64.0 + 99.5000 127.2500 -64.0 + 98.5000 137.7500 -64.0 + 100.5000 138.7500 -64.0 + 100.7500 137.5000 -64.0 + 102.5000 136.7500 -64.0 + 106.5000 138.7500 -64.0 + 110.5000 136.7500 -64.0 + 120.5000 136.7500 -64.0 + 120.7500 134.5000 -64.0 + 117.7500 132.5000 -64.0 + 117.7500 124.5000 -64.0 + 116.7500 122.5000 -64.0 + 116.7500 120.5000 -64.0 + 118.5000 119.7500 -64.0 + 119.5000 117.7500 -64.0 + 119.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 122.2500 117.5000 -64.0 + 120.2500 123.5000 -64.0 + 123.2500 129.5000 -64.0 + 123.2500 132.5000 -64.0 + 124.5000 131.7500 -64.0 + 124.7500 126.5000 -64.0 + 125.5000 124.7500 -64.0 + 124.7500 123.5000 -64.0 + 125.7500 121.5000 -64.0 + 123.7500 117.5000 -64.0 +} -64.0 +{ -64.0 + 133.2500 128.5000 -64.0 + 131.5000 129.2500 -64.0 + 124.5000 137.2500 -64.0 + 124.2500 140.5000 -64.0 + 129.5000 137.7500 -64.0 + 129.7500 135.5000 -64.0 + 131.5000 134.7500 -64.0 + 133.5000 137.7500 -64.0 + 137.5000 135.7500 -64.0 + 139.5000 137.7500 -64.0 + 141.5000 136.7500 -64.0 + 140.5000 133.2500 -64.0 + 136.5000 131.2500 -64.0 + 135.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 139.5000 -64.0 + 88.2500 141.5000 -64.0 + 93.5000 141.7500 -64.0 + 95.2500 142.5000 -64.0 + 95.7500 141.5000 -64.0 + 92.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 134.2500 140.5000 -64.0 + 133.5000 141.2500 -64.0 + 131.5000 141.2500 -64.0 + 129.5000 142.2500 -64.0 + 125.2500 142.5000 -64.0 + 123.2500 146.5000 -64.0 + 124.5000 146.7500 -64.0 + 126.5000 145.7500 -64.0 + 128.5000 145.7500 -64.0 + 131.5000 146.7500 -64.0 + 135.5000 143.7500 -64.0 + 137.7500 142.5000 -64.0 + 138.7500 140.5000 -64.0 + 137.5000 141.2500 -64.0 + 135.7500 140.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 143.5000 -64.0 + 94.5000 145.2500 -64.0 + 92.5000 145.2500 -64.0 + 90.5000 146.2500 -64.0 + 88.7500 145.5000 -64.0 + 87.2500 146.5000 -64.0 + 90.5000 146.7500 -64.0 + 92.5000 147.7500 -64.0 + 96.5000 145.7500 -64.0 + 98.2500 147.5000 -64.0 + 95.5000 149.2500 -64.0 + 92.2500 149.5000 -64.0 + 95.5000 149.7500 -64.0 + 97.5000 148.7500 -64.0 + 106.7500 149.5000 -64.0 + 102.7500 146.5000 -64.0 + 100.5000 146.2500 -64.0 + 97.7500 143.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 154.5000 -64.0 + 114.2500 157.5000 -64.0 + 116.5000 159.7500 -64.0 + 116.7500 154.5000 -64.0 + 115.5000 155.2500 -64.0 + 114.7500 154.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 162.5000 -64.0 + 111.5000 163.7500 -64.0 + 113.5000 164.7500 -64.0 + 113.7500 163.5000 -64.0 +} -64.0 +v 99 z -214.000000 -64.0 +{ -64.0 + 117.2500 114.5000 -64.0 + 116.5000 115.2500 -64.0 + 111.5000 115.2500 -64.0 + 110.2500 116.5000 -64.0 + 109.2500 118.5000 -64.0 + 107.5000 119.2500 -64.0 + 105.5000 120.2500 -64.0 + 103.5000 120.2500 -64.0 + 102.2500 121.5000 -64.0 + 101.2500 123.5000 -64.0 + 99.5000 124.2500 -64.0 + 99.2500 126.5000 -64.0 + 101.2500 130.5000 -64.0 + 102.5000 129.7500 -64.0 + 104.2500 130.5000 -64.0 + 106.2500 134.5000 -64.0 + 105.5000 136.2500 -64.0 + 103.5000 137.2500 -64.0 + 100.5000 136.2500 -64.0 + 97.7500 130.5000 -64.0 + 96.2500 131.5000 -64.0 + 97.2500 133.5000 -64.0 + 97.2500 135.5000 -64.0 + 99.2500 139.5000 -64.0 + 102.5000 139.7500 -64.0 + 104.5000 138.7500 -64.0 + 107.5000 138.7500 -64.0 + 111.5000 135.7500 -64.0 + 113.5000 135.7500 -64.0 + 113.7500 134.5000 -64.0 + 112.7500 132.5000 -64.0 + 115.5000 130.7500 -64.0 + 114.7500 129.5000 -64.0 + 114.7500 127.5000 -64.0 + 115.5000 125.7500 -64.0 + 115.7500 120.5000 -64.0 + 117.5000 118.7500 -64.0 + 117.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 116.5000 -64.0 + 120.2500 119.5000 -64.0 + 118.5000 128.2500 -64.0 + 120.2500 130.5000 -64.0 + 119.2500 131.5000 -64.0 + 121.2500 135.5000 -64.0 + 122.7500 135.5000 -64.0 + 124.5000 131.7500 -64.0 + 124.7500 121.5000 -64.0 + 123.7500 119.5000 -64.0 + 123.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 131.5000 -64.0 + 129.5000 133.2500 -64.0 + 125.2500 135.5000 -64.0 + 122.2500 142.5000 -64.0 + 116.5000 149.2500 -64.0 + 112.2500 152.5000 -64.0 + 115.7500 152.5000 -64.0 + 124.5000 146.7500 -64.0 + 124.7500 142.5000 -64.0 + 126.5000 141.7500 -64.0 + 128.2500 142.5000 -64.0 + 127.2500 145.5000 -64.0 + 129.2500 146.5000 -64.0 + 132.5000 146.7500 -64.0 + 134.5000 145.7500 -64.0 + 134.7500 143.5000 -64.0 + 132.5000 143.2500 -64.0 + 131.7500 141.5000 -64.0 + 133.5000 139.7500 -64.0 + 137.5000 139.7500 -64.0 + 139.5000 140.7500 -64.0 + 141.5000 139.7500 -64.0 + 141.7500 136.5000 -64.0 + 139.7500 134.5000 -64.0 + 137.5000 134.2500 -64.0 + 134.7500 131.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 139.5000 -64.0 + 91.2500 141.5000 -64.0 + 90.5000 143.2500 -64.0 + 91.2500 144.5000 -64.0 + 93.5000 144.7500 -64.0 + 97.2500 147.5000 -64.0 + 98.7500 147.5000 -64.0 + 97.7500 145.5000 -64.0 + 97.7500 143.5000 -64.0 + 92.7500 139.5000 -64.0 +} -64.0 +{ -64.0 + 107.7500 120.5000 -64.0 + 108.5000 119.7500 -64.0 + 110.5000 119.7500 -64.0 + 112.2500 120.5000 -64.0 + 113.2500 122.5000 -64.0 + 107.5000 127.2500 -64.0 + 103.5000 127.2500 -64.0 + 101.7500 126.5000 -64.0 + 101.7500 123.5000 -64.0 + 105.5000 120.7500 -64.0 +} -64.0 +{ -64.0 + 106.7500 132.5000 -64.0 + 108.5000 131.7500 -64.0 + 109.2500 133.5000 -64.0 + 107.5000 134.2500 -64.0 +} -64.0 +v 105 z -216.000000 -64.0 +{ -64.0 + 113.2500 114.5000 -64.0 + 112.5000 115.2500 -64.0 + 110.5000 116.2500 -64.0 + 108.2500 118.5000 -64.0 + 103.2500 120.5000 -64.0 + 106.5000 120.7500 -64.0 + 108.2500 121.5000 -64.0 + 107.5000 123.2500 -64.0 + 105.5000 123.2500 -64.0 + 98.5000 122.2500 -64.0 + 98.5000 123.7500 -64.0 + 100.5000 124.7500 -64.0 + 101.2500 126.5000 -64.0 + 104.5000 127.7500 -64.0 + 106.5000 126.7500 -64.0 + 111.5000 126.7500 -64.0 + 111.7500 124.5000 -64.0 + 114.5000 122.7500 -64.0 + 114.7500 120.5000 -64.0 + 116.5000 118.7500 -64.0 + 116.7500 116.5000 -64.0 + 115.7500 114.5000 -64.0 +} -64.0 +{ -64.0 + 120.2500 116.5000 -64.0 + 119.5000 117.2500 -64.0 + 119.2500 120.5000 -64.0 + 115.2500 128.5000 -64.0 + 116.2500 130.5000 -64.0 + 115.5000 132.2500 -64.0 + 114.7500 131.5000 -64.0 + 107.5000 135.2500 -64.0 + 104.5000 135.2500 -64.0 + 102.7500 134.5000 -64.0 + 98.5000 129.2500 -64.0 + 96.5000 128.2500 -64.0 + 96.2500 131.5000 -64.0 + 97.2500 133.5000 -64.0 + 97.2500 137.5000 -64.0 + 98.2500 139.5000 -64.0 + 102.5000 139.7500 -64.0 + 106.5000 137.7500 -64.0 + 108.5000 137.7500 -64.0 + 112.5000 135.7500 -64.0 + 113.2500 136.5000 -64.0 + 117.5000 137.7500 -64.0 + 119.5000 136.7500 -64.0 + 121.5000 136.7500 -64.0 + 123.2500 137.5000 -64.0 + 124.2500 139.5000 -64.0 + 122.2500 144.5000 -64.0 + 117.5000 149.2500 -64.0 + 112.5000 152.2500 -64.0 + 107.5000 150.2500 -64.0 + 97.7500 142.5000 -64.0 + 89.5000 139.2500 -64.0 + 89.2500 140.5000 -64.0 + 90.5000 140.7500 -64.0 + 93.2500 144.5000 -64.0 + 92.2500 146.5000 -64.0 + 97.5000 146.7500 -64.0 + 110.5000 152.7500 -64.0 + 112.2500 153.5000 -64.0 + 112.2500 155.5000 -64.0 + 113.5000 156.7500 -64.0 + 115.5000 157.7500 -64.0 + 115.7500 155.5000 -64.0 + 119.5000 151.7500 -64.0 + 126.5000 145.7500 -64.0 + 127.2500 146.5000 -64.0 + 128.5000 145.7500 -64.0 + 135.5000 146.7500 -64.0 + 136.7500 145.5000 -64.0 + 137.7500 143.5000 -64.0 + 138.5000 141.7500 -64.0 + 138.7500 138.5000 -64.0 + 137.7500 135.5000 -64.0 + 135.5000 135.2500 -64.0 + 133.7500 134.5000 -64.0 + 135.5000 133.7500 -64.0 + 135.7500 132.5000 -64.0 + 134.7500 130.5000 -64.0 + 127.5000 134.2500 -64.0 + 124.7500 132.5000 -64.0 + 124.7500 129.5000 -64.0 + 126.7500 125.5000 -64.0 + 125.7500 123.5000 -64.0 + 121.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 108.7500 120.5000 -64.0 + 109.5000 119.7500 -64.0 + 110.2500 120.5000 -64.0 + 109.5000 121.2500 -64.0 +} -64.0 +{ -64.0 + 97.7500 133.5000 -64.0 + 98.5000 132.7500 -64.0 + 100.2500 134.5000 -64.0 + 101.2500 136.5000 -64.0 + 99.5000 137.2500 -64.0 +} -64.0 +{ -64.0 + 133.7500 142.5000 -64.0 + 134.5000 141.7500 -64.0 + 135.2500 142.5000 -64.0 + 136.2500 144.5000 -64.0 + 134.5000 146.2500 -64.0 + 132.7500 144.5000 -64.0 +} -64.0 +{ -64.0 + 114.5000 151.7500 -64.0 + 116.2500 152.5000 -64.0 + 114.5000 154.2500 -64.0 + 112.7500 153.5000 -64.0 +} -64.0 +v 104 z -218.000000 -64.0 +{ -64.0 + 113.2500 113.5000 -64.0 + 111.5000 114.2500 -64.0 + 112.2500 115.5000 -64.0 + 111.5000 117.2500 -64.0 + 108.5000 117.2500 -64.0 + 103.5000 121.2500 -64.0 + 101.5000 121.2500 -64.0 + 99.5000 122.2500 -64.0 + 100.5000 122.7500 -64.0 + 105.5000 123.7500 -64.0 + 113.5000 119.7500 -64.0 + 115.5000 116.7500 -64.0 + 115.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 118.2500 116.5000 -64.0 + 118.2500 117.5000 -64.0 + 117.2500 122.5000 -64.0 + 115.5000 124.2500 -64.0 + 113.2500 125.5000 -64.0 + 112.2500 127.5000 -64.0 + 108.5000 131.2500 -64.0 + 106.7500 130.5000 -64.0 + 101.5000 130.2500 -64.0 + 98.5000 127.2500 -64.0 + 96.5000 126.2500 -64.0 + 96.2500 128.5000 -64.0 + 97.5000 127.7500 -64.0 + 98.2500 128.5000 -64.0 + 99.2500 130.5000 -64.0 + 105.2500 136.5000 -64.0 + 104.5000 138.2500 -64.0 + 102.5000 138.2500 -64.0 + 98.7500 136.5000 -64.0 + 97.7500 134.5000 -64.0 + 96.5000 136.2500 -64.0 + 96.2500 139.5000 -64.0 + 94.5000 141.2500 -64.0 + 91.2500 141.5000 -64.0 + 92.2500 143.5000 -64.0 + 94.5000 143.7500 -64.0 + 95.2500 145.5000 -64.0 + 93.5000 146.2500 -64.0 + 89.5000 144.2500 -64.0 + 89.2500 147.5000 -64.0 + 91.2500 148.5000 -64.0 + 98.5000 148.7500 -64.0 + 101.5000 149.7500 -64.0 + 107.2500 152.5000 -64.0 + 115.5000 153.7500 -64.0 + 117.2500 154.5000 -64.0 + 117.2500 156.5000 -64.0 + 118.7500 153.5000 -64.0 + 122.5000 149.7500 -64.0 + 126.5000 146.7500 -64.0 + 128.5000 146.7500 -64.0 + 130.5000 145.7500 -64.0 + 133.5000 146.7500 -64.0 + 136.5000 145.7500 -64.0 + 139.5000 140.7500 -64.0 + 139.7500 137.5000 -64.0 + 138.7500 135.5000 -64.0 + 134.5000 135.2500 -64.0 + 132.7500 133.5000 -64.0 + 133.5000 132.7500 -64.0 + 135.5000 131.7500 -64.0 + 135.5000 129.2500 -64.0 + 129.5000 133.2500 -64.0 + 126.5000 133.2500 -64.0 + 123.7500 130.5000 -64.0 + 124.7500 127.5000 -64.0 + 126.7500 126.5000 -64.0 + 127.7500 124.5000 -64.0 + 123.7500 122.5000 -64.0 + 123.7500 120.5000 -64.0 + 119.7500 116.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 157.5000 -64.0 + 113.2500 159.5000 -64.0 + 114.2500 161.5000 -64.0 + 114.2500 163.5000 -64.0 + 115.5000 162.7500 -64.0 + 116.7500 157.5000 -64.0 + 115.5000 158.2500 -64.0 +} -64.0 +{ -64.0 + 117.7500 125.5000 -64.0 + 119.5000 124.7500 -64.0 + 123.2500 127.5000 -64.0 + 123.2500 129.5000 -64.0 + 119.5000 132.2500 -64.0 + 116.7500 127.5000 -64.0 +} -64.0 +{ -64.0 + 116.7500 137.5000 -64.0 + 117.5000 136.7500 -64.0 + 120.5000 136.7500 -64.0 + 123.5000 137.7500 -64.0 + 125.2500 140.5000 -64.0 + 124.5000 141.2500 -64.0 + 124.2500 143.5000 -64.0 + 121.2500 147.5000 -64.0 + 114.5000 152.2500 -64.0 + 111.5000 152.2500 -64.0 + 102.5000 148.2500 -64.0 + 98.7500 143.5000 -64.0 + 99.5000 141.7500 -64.0 + 105.5000 138.7500 -64.0 + 106.2500 139.5000 -64.0 + 108.5000 139.7500 -64.0 + 110.5000 137.7500 -64.0 +} -64.0 +v 134 z -220.000000 -64.0 +{ -64.0 + 114.2500 91.5000 -64.0 + 114.5000 92.7500 -64.0 + 116.5000 93.7500 -64.0 +} -64.0 +{ -64.0 + 90.2500 109.5000 -64.0 + 91.2500 111.5000 -64.0 + 92.5000 111.7500 -64.0 + 92.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 110.5000 -64.0 + 127.5000 110.7500 -64.0 + 129.5000 111.7500 -64.0 + 129.7500 110.5000 -64.0 +} -64.0 +{ -64.0 + 112.2500 113.5000 -64.0 + 112.2500 115.5000 -64.0 + 110.5000 117.2500 -64.0 + 107.5000 117.2500 -64.0 + 104.5000 120.2500 -64.0 + 100.5000 120.2500 -64.0 + 100.2500 121.5000 -64.0 + 102.5000 121.7500 -64.0 + 104.5000 120.7500 -64.0 + 107.5000 120.7500 -64.0 + 111.5000 117.7500 -64.0 + 114.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 115.5000 -64.0 + 115.2500 120.5000 -64.0 + 112.5000 124.2500 -64.0 + 110.5000 124.2500 -64.0 + 108.5000 126.2500 -64.0 + 110.5000 128.7500 -64.0 + 112.5000 127.7500 -64.0 + 112.7500 125.5000 -64.0 + 117.5000 123.7500 -64.0 + 120.5000 124.7500 -64.0 + 123.2500 127.5000 -64.0 + 121.5000 134.2500 -64.0 + 119.5000 134.2500 -64.0 + 117.5000 135.2500 -64.0 + 116.7500 134.5000 -64.0 + 116.7500 131.5000 -64.0 + 115.5000 131.2500 -64.0 + 114.5000 133.2500 -64.0 + 112.5000 134.2500 -64.0 + 112.2500 137.5000 -64.0 + 125.5000 137.7500 -64.0 + 126.2500 139.5000 -64.0 + 125.2500 144.5000 -64.0 + 115.5000 154.2500 -64.0 + 111.5000 154.2500 -64.0 + 107.5000 151.2500 -64.0 + 101.5000 148.2500 -64.0 + 98.7500 144.5000 -64.0 + 99.5000 142.7500 -64.0 + 103.5000 139.7500 -64.0 + 105.5000 139.7500 -64.0 + 107.5000 138.7500 -64.0 + 109.2500 139.5000 -64.0 + 109.7500 138.5000 -64.0 + 107.7500 137.5000 -64.0 + 107.7500 135.5000 -64.0 + 106.5000 135.2500 -64.0 + 105.5000 138.2500 -64.0 + 99.5000 138.2500 -64.0 + 97.7500 136.5000 -64.0 + 97.7500 134.5000 -64.0 + 96.2500 137.5000 -64.0 + 93.5000 140.2500 -64.0 + 91.5000 141.2500 -64.0 + 91.2500 142.5000 -64.0 + 89.5000 143.2500 -64.0 + 88.2500 147.5000 -64.0 + 89.5000 148.7500 -64.0 + 95.5000 149.2500 -64.0 + 94.7500 147.5000 -64.0 + 96.5000 145.7500 -64.0 + 100.2500 148.5000 -64.0 + 99.2500 149.5000 -64.0 + 102.2500 151.5000 -64.0 + 105.5000 151.7500 -64.0 + 109.2500 154.5000 -64.0 + 116.5000 154.7500 -64.0 + 118.2500 155.5000 -64.0 + 117.2500 160.5000 -64.0 + 120.7500 152.5000 -64.0 + 124.5000 148.7500 -64.0 + 128.5000 146.7500 -64.0 + 133.5000 146.7500 -64.0 + 136.5000 145.7500 -64.0 + 139.5000 142.7500 -64.0 + 140.5000 138.7500 -64.0 + 139.7500 136.5000 -64.0 + 137.5000 136.2500 -64.0 + 134.5000 140.2500 -64.0 + 130.5000 140.2500 -64.0 + 128.7500 138.5000 -64.0 + 133.5000 135.7500 -64.0 + 135.5000 135.7500 -64.0 + 137.5000 134.7500 -64.0 + 134.5000 133.2500 -64.0 + 128.5000 136.2500 -64.0 + 123.7500 130.5000 -64.0 + 123.7500 128.5000 -64.0 + 125.5000 126.7500 -64.0 + 128.7500 126.5000 -64.0 + 127.7500 124.5000 -64.0 + 124.5000 124.2500 -64.0 + 120.7500 119.5000 -64.0 + 118.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 125.5000 -64.0 + 96.5000 126.2500 -64.0 + 96.2500 128.5000 -64.0 + 97.5000 128.7500 -64.0 + 99.2500 129.5000 -64.0 + 104.5000 129.7500 -64.0 + 107.5000 128.7500 -64.0 + 107.7500 127.5000 -64.0 + 106.5000 127.2500 -64.0 + 104.5000 126.2500 -64.0 + 100.5000 128.2500 -64.0 + 98.5000 127.2500 -64.0 +} -64.0 +{ -64.0 + 134.2500 129.5000 -64.0 + 131.5000 131.2500 -64.0 + 132.5000 131.7500 -64.0 + 135.5000 130.7500 -64.0 + 135.7500 129.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 159.5000 -64.0 + 113.2500 161.5000 -64.0 + 114.5000 161.7500 -64.0 +} -64.0 +{ -64.0 + 90.7500 144.5000 -64.0 + 91.5000 143.7500 -64.0 + 93.2500 144.5000 -64.0 + 94.2500 146.5000 -64.0 + 93.5000 148.2500 -64.0 + 91.5000 148.2500 -64.0 + 89.7500 146.5000 -64.0 +} -64.0 +v 125 z -222.000000 -64.0 +{ -64.0 + 114.2500 92.5000 -64.0 + 114.2500 93.5000 -64.0 + 116.5000 93.7500 -64.0 + 115.7500 92.5000 -64.0 +} -64.0 +{ -64.0 + 95.2500 95.5000 -64.0 + 94.5000 97.7500 -64.0 + 96.5000 96.7500 -64.0 +} -64.0 +{ -64.0 + 127.2500 106.5000 -64.0 + 126.5000 107.2500 -64.0 + 127.2500 108.5000 -64.0 + 127.2500 110.5000 -64.0 + 129.7500 110.5000 -64.0 + 128.7500 107.5000 -64.0 +} -64.0 +{ -64.0 + 91.2500 109.5000 -64.0 + 91.2500 110.5000 -64.0 + 92.2500 113.5000 -64.0 + 93.5000 113.7500 -64.0 + 92.7500 112.5000 -64.0 + 92.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 90.2500 115.5000 -64.0 + 90.5000 115.7500 -64.0 + 92.5000 116.7500 -64.0 + 92.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 116.2500 115.5000 -64.0 + 112.5000 119.2500 -64.0 + 112.2500 121.5000 -64.0 + 110.5000 123.2500 -64.0 + 108.2500 123.5000 -64.0 + 114.5000 123.7500 -64.0 + 114.7500 121.5000 -64.0 + 116.5000 119.7500 -64.0 + 122.2500 128.5000 -64.0 + 121.2500 131.5000 -64.0 + 118.5000 134.2500 -64.0 + 115.5000 134.2500 -64.0 + 118.2500 136.5000 -64.0 + 117.5000 137.2500 -64.0 + 118.5000 137.7500 -64.0 + 124.5000 135.7500 -64.0 + 124.7500 126.5000 -64.0 + 123.5000 126.2500 -64.0 + 119.7500 122.5000 -64.0 + 119.7500 120.5000 -64.0 + 117.7500 118.5000 -64.0 + 117.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 101.2500 124.5000 -64.0 + 100.5000 125.2500 -64.0 + 98.5000 125.2500 -64.0 + 99.2500 126.5000 -64.0 + 99.2500 128.5000 -64.0 + 98.5000 130.2500 -64.0 + 99.5000 130.7500 -64.0 + 101.5000 128.7500 -64.0 + 106.7500 124.5000 -64.0 +} -64.0 +{ -64.0 + 126.2500 125.5000 -64.0 + 127.2500 127.5000 -64.0 + 129.5000 127.7500 -64.0 + 129.7500 126.5000 -64.0 +} -64.0 +{ -64.0 + 131.2500 128.5000 -64.0 + 131.2500 129.5000 -64.0 + 135.5000 129.7500 -64.0 + 135.7500 128.5000 -64.0 +} -64.0 +{ -64.0 + 133.2500 133.5000 -64.0 + 129.5000 135.2500 -64.0 + 127.2500 137.5000 -64.0 + 125.2500 141.5000 -64.0 + 126.2500 144.5000 -64.0 + 116.2500 155.5000 -64.0 + 117.2500 157.5000 -64.0 + 117.5000 162.7500 -64.0 + 117.7500 158.5000 -64.0 + 123.5000 150.7500 -64.0 + 130.5000 146.7500 -64.0 + 135.5000 146.7500 -64.0 + 140.5000 140.7500 -64.0 + 140.7500 138.5000 -64.0 + 139.5000 138.2500 -64.0 + 134.5000 143.2500 -64.0 + 129.5000 143.2500 -64.0 + 128.7500 141.5000 -64.0 + 129.5000 139.7500 -64.0 + 132.5000 139.7500 -64.0 + 136.5000 136.7500 -64.0 + 138.5000 136.7500 -64.0 + 138.7500 135.5000 -64.0 + 135.7500 133.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 136.5000 -64.0 + 97.2500 137.5000 -64.0 + 94.5000 139.2500 -64.0 + 90.5000 141.2500 -64.0 + 90.2500 143.5000 -64.0 + 88.5000 145.2500 -64.0 + 88.5000 148.7500 -64.0 + 90.5000 149.7500 -64.0 + 89.7500 147.5000 -64.0 + 90.5000 145.7500 -64.0 + 92.5000 144.7500 -64.0 + 94.5000 146.7500 -64.0 + 99.7500 147.5000 -64.0 + 98.7500 145.5000 -64.0 + 98.7500 143.5000 -64.0 + 100.5000 141.7500 -64.0 + 106.7500 139.5000 -64.0 + 104.5000 139.2500 -64.0 + 101.5000 138.2500 -64.0 + 98.5000 139.2500 -64.0 + 97.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 113.2500 137.5000 -64.0 + 113.5000 137.7500 -64.0 + 115.5000 138.7500 -64.0 + 115.7500 137.5000 -64.0 +} -64.0 +{ -64.0 + 100.2500 148.5000 -64.0 + 99.5000 150.2500 -64.0 + 96.5000 150.2500 -64.0 + 94.5000 149.2500 -64.0 + 92.5000 150.2500 -64.0 + 94.5000 151.7500 -64.0 + 97.5000 150.7500 -64.0 + 105.5000 152.7500 -64.0 + 111.5000 158.7500 -64.0 + 111.7500 155.5000 -64.0 +} -64.0 +{ -64.0 + 129.7500 136.5000 -64.0 + 130.5000 135.7500 -64.0 + 132.2500 136.5000 -64.0 + 131.5000 137.2500 -64.0 +} -64.0 +v 115 z -224.000000 -64.0 +{ -64.0 + 114.2500 93.5000 -64.0 + 114.5000 93.7500 -64.0 + 116.5000 94.7500 -64.0 + 115.7500 93.5000 -64.0 +} -64.0 +{ -64.0 + 96.2500 96.5000 -64.0 + 95.2500 97.5000 -64.0 + 96.7500 97.5000 -64.0 +} -64.0 +{ -64.0 + 124.2500 104.5000 -64.0 + 126.2500 108.5000 -64.0 + 126.7500 107.5000 -64.0 + 125.7500 104.5000 -64.0 +} -64.0 +{ -64.0 + 127.2500 109.5000 -64.0 + 127.2500 110.5000 -64.0 + 128.5000 110.7500 -64.0 + 128.7500 109.5000 -64.0 +} -64.0 +{ -64.0 + 92.2500 111.5000 -64.0 + 93.2500 114.5000 -64.0 + 91.2500 115.5000 -64.0 + 93.5000 115.7500 -64.0 + 93.7500 112.5000 -64.0 +} -64.0 +{ -64.0 + 132.2500 113.5000 -64.0 + 132.2500 114.5000 -64.0 + 133.7500 115.5000 -64.0 + 134.7500 113.5000 -64.0 +} -64.0 +{ -64.0 + 114.2500 115.5000 -64.0 + 111.2500 120.5000 -64.0 + 107.5000 122.2500 -64.0 + 102.5000 122.2500 -64.0 + 100.5000 123.2500 -64.0 + 102.2500 126.5000 -64.0 + 98.5000 131.2500 -64.0 + 98.5000 132.7500 -64.0 + 101.7500 130.5000 -64.0 + 103.7500 126.5000 -64.0 + 108.5000 123.7500 -64.0 + 111.5000 123.7500 -64.0 + 113.5000 120.7500 -64.0 + 115.2500 121.5000 -64.0 + 116.5000 120.7500 -64.0 + 116.7500 115.5000 -64.0 +} -64.0 +{ -64.0 + 117.2500 121.5000 -64.0 + 117.2500 122.5000 -64.0 + 120.2500 126.5000 -64.0 + 120.2500 128.5000 -64.0 + 118.5000 130.2500 -64.0 + 114.5000 133.2500 -64.0 + 114.2500 135.5000 -64.0 + 118.5000 135.7500 -64.0 + 119.2500 137.5000 -64.0 + 117.5000 139.2500 -64.0 + 115.5000 139.2500 -64.0 + 113.7500 137.5000 -64.0 + 112.2500 139.5000 -64.0 + 121.5000 139.7500 -64.0 + 122.7500 138.5000 -64.0 + 125.7500 132.5000 -64.0 + 124.7500 129.5000 -64.0 + 126.5000 125.7500 -64.0 + 125.5000 124.2500 -64.0 + 123.5000 125.2500 -64.0 + 120.7500 121.5000 -64.0 +} -64.0 +{ -64.0 + 97.2500 135.5000 -64.0 + 97.2500 136.5000 -64.0 + 95.2500 141.5000 -64.0 + 94.5000 143.2500 -64.0 + 88.5000 146.2500 -64.0 + 88.2500 149.5000 -64.0 + 94.5000 152.7500 -64.0 + 96.5000 151.7500 -64.0 + 103.5000 152.7500 -64.0 + 109.5000 155.7500 -64.0 + 108.7500 154.5000 -64.0 + 102.5000 150.2500 -64.0 + 100.5000 149.2500 -64.0 + 99.5000 151.2500 -64.0 + 96.5000 151.2500 -64.0 + 94.7500 149.5000 -64.0 + 96.5000 147.7500 -64.0 + 99.5000 148.7500 -64.0 + 97.7500 145.5000 -64.0 + 97.7500 143.5000 -64.0 + 98.5000 141.7500 -64.0 + 103.5000 141.7500 -64.0 + 107.5000 139.7500 -64.0 + 106.5000 139.2500 -64.0 + 104.7500 138.5000 -64.0 + 105.7500 136.5000 -64.0 + 103.5000 136.2500 -64.0 + 101.5000 138.2500 -64.0 + 98.7500 135.5000 -64.0 +} -64.0 +{ -64.0 + 130.2500 135.5000 -64.0 + 124.5000 142.2500 -64.0 + 127.2500 145.5000 -64.0 + 124.2500 149.5000 -64.0 + 131.5000 145.7500 -64.0 + 137.5000 145.7500 -64.0 + 140.7500 141.5000 -64.0 + 138.5000 141.2500 -64.0 + 134.5000 144.2500 -64.0 + 131.5000 144.2500 -64.0 + 129.7500 143.5000 -64.0 + 138.5000 139.7500 -64.0 + 138.5000 136.2500 -64.0 + 136.5000 135.2500 -64.0 + 137.2500 136.5000 -64.0 + 136.5000 138.2500 -64.0 + 134.7500 137.5000 -64.0 + 132.5000 138.2500 -64.0 + 131.5000 140.2500 -64.0 + 129.7500 139.5000 -64.0 + 131.7500 135.5000 -64.0 +} -64.0 +{ -64.0 + 115.2500 164.5000 -64.0 + 115.2500 166.5000 -64.0 + 116.5000 166.7500 -64.0 + 116.7500 164.5000 -64.0 +} -64.0 + -64.0 \ No newline at end of file diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom1249.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom1249.pts new file mode 100644 index 000000000000..e3d4e09ed6a0 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom1249.pts @@ -0,0 +1,1249 @@ +1248 +27.850301 -17.970299 134.875148 +-25.310101 -17.089901 117.229948 +-30.421501 -21.008499 144.254249 +0.114400 -1.784400 50.132200 +-18.264400 12.484400 101.627799 +17.396600 -1.906600 99.023301 +21.175900 -19.185901 135.392952 +21.063600 -19.043600 132.826796 +-22.225100 -15.724900 108.897448 +8.249500 -14.839500 101.639749 +29.463299 -5.123300 142.671651 +28.427000 -18.197000 149.973500 +20.364199 6.405800 114.632099 +14.811500 -9.141500 105.235749 +-15.004000 -8.116000 98.497997 +19.542701 -11.952700 123.446353 +-10.693900 -4.016100 58.998050 +-18.223399 -13.286600 96.398302 +-24.134400 11.784400 107.332801 +-23.475999 8.946000 104.191998 +-4.457700 9.027700 56.901148 +16.912700 15.277300 98.476347 +12.924100 12.075900 77.677051 +-21.715099 6.515100 96.397452 +10.053100 -2.053100 61.576548 +8.974900 -5.644900 68.852447 +29.422501 -20.732500 142.186247 +31.027899 -19.127900 149.983950 +27.245601 -13.955600 143.737795 +27.104600 -21.824600 149.962300 +22.975500 -13.585500 143.232755 +17.288300 -16.248301 111.504147 +11.139900 -5.079900 66.779953 +5.708200 -5.798200 66.274099 +9.299900 -4.059900 60.559951 +18.658001 -17.238001 120.339001 +28.983600 -7.483600 149.996800 +27.157400 -17.317400 149.988700 +30.981799 -14.521800 149.960900 +20.507200 17.852800 112.518598 +14.246800 -7.776800 92.238399 +15.299200 -12.349200 106.839596 +20.051600 -15.941601 125.510798 +17.014300 -12.824300 114.637149 +22.088301 -9.988300 120.869147 +18.696699 -9.706700 114.113353 +21.106100 -15.646100 129.163047 +22.033800 -2.333800 121.891898 +-19.762800 -11.657200 96.948599 +-20.256000 10.436000 98.992001 +-2.200600 2.110600 56.369702 +4.071700 -2.541700 66.255849 +3.152600 -1.982600 62.086299 +9.701500 -1.501500 62.625749 +14.424000 10.726000 88.107003 +-17.650600 6.960600 97.964700 +-16.106900 1.746900 89.671550 +3.865300 -3.635300 75.612649 +3.290200 -2.310200 69.370102 +-16.555599 8.445600 91.712202 +-7.549400 1.549400 62.095299 +6.940000 -9.100000 95.914998 +7.074300 -4.804300 73.542148 +-19.513600 4.613600 100.078202 +-20.076300 6.286300 102.651850 +-18.569800 -9.290200 100.035102 +-20.560200 1.840200 99.014901 +-17.004301 -7.375700 95.372852 +-15.204500 -11.905500 99.517748 +-11.031800 -10.748200 96.414102 +-4.650500 -7.619500 80.814746 +10.709000 -15.099000 110.989500 +9.578600 -12.348600 107.329301 +0.532000 -11.422000 103.195997 +-20.686101 6.686100 104.721952 +-15.619500 -8.810500 100.040252 +-15.200400 -10.819600 104.194798 +-12.088800 -11.001200 104.220598 +10.674700 -9.114700 102.117354 +20.819301 -18.709300 132.819646 +20.199099 -12.049100 128.674543 +19.385099 -11.085100 123.957550 +-20.917200 -9.272800 92.751403 +-4.043800 -2.546200 51.163101 +-9.308000 -4.242000 58.466000 +-16.998900 -14.221100 97.475553 +-15.706300 -13.303700 92.791853 +-19.028101 -12.051900 90.675951 +-22.591499 15.911500 100.584248 +-15.927600 14.587600 91.711202 +3.550800 8.709200 54.815400 +16.712400 11.697600 99.021201 +-19.986700 12.906700 96.921649 +-11.174600 7.344600 64.152697 +-13.900700 8.860700 77.674651 +11.669300 -3.059300 65.219648 +15.810500 0.239500 89.140254 +5.729900 -1.889900 53.249949 +7.298300 1.991700 57.419149 +23.049200 11.560800 111.494597 +20.645301 4.974700 113.057652 +13.972400 -3.812400 76.116204 +25.074399 0.045600 121.367202 +24.139500 4.980500 116.704751 +24.998800 -17.598800 145.279407 +26.568401 -16.038400 146.854205 +29.687400 -21.817400 149.958700 +22.317100 -19.487100 141.113554 +25.554001 -17.094000 148.407002 +23.782200 -13.892200 146.856105 +27.890600 -16.050599 147.355294 +12.177100 -4.727100 67.308550 +9.268400 -5.148400 63.159200 +10.442500 -4.652500 60.026251 +11.252200 -4.762200 65.236098 +8.167200 -3.957200 64.183597 +7.972200 -4.402200 66.261099 +-19.830300 13.350300 103.164847 +30.963699 -7.213700 149.951850 +19.028700 14.271300 109.414352 +18.123000 15.257000 105.256499 +25.123199 -0.783200 126.596598 +23.697200 8.712800 116.683601 +22.574900 2.235100 119.282450 +22.567500 9.082500 114.078753 +23.254100 5.555900 117.232048 +20.163701 14.096300 113.586848 +24.498400 -20.888400 149.954200 +18.343900 -7.843900 101.601949 +15.379100 -10.709100 108.904548 +15.561800 -12.021800 110.440903 +12.753200 -13.093200 108.906598 +17.214001 -12.934000 112.521998 +17.983100 -12.533100 114.631549 +12.877700 -11.097700 103.713851 +12.889700 -9.189700 101.594849 +12.393600 -13.353600 103.161797 +20.851200 -17.701200 130.215605 +20.459600 -17.209600 127.624799 +20.577200 -13.737200 125.553598 +19.710300 -16.280299 122.945149 +19.676200 -15.496200 122.928099 +12.485200 -11.985200 105.252599 +11.968600 -13.238600 106.829296 +21.251200 -8.951200 115.150604 +21.900801 -7.770800 118.780403 +19.093600 -0.583600 105.761803 +22.807101 0.602900 117.213548 +22.114700 6.175300 112.542348 +12.904200 -9.734200 107.327101 +11.800100 -10.420100 109.390052 +19.031600 -11.781600 121.380802 +21.798900 2.881100 117.214448 +22.072500 5.927500 114.596249 +22.255400 -4.445400 119.797696 +22.579200 -0.669200 119.284600 +18.505701 -11.765700 116.707851 +23.753101 -11.153100 131.261549 +23.506001 -2.996000 123.983000 +23.473301 -5.973300 123.966650 +22.830800 -4.360800 121.870398 +-19.869601 -13.140400 97.955200 +-20.318900 -11.191100 95.365552 +-21.455201 -1.124800 98.992401 +-20.642100 -9.617900 96.928949 +-22.819500 11.419500 103.675251 +-21.773300 11.133300 102.113354 +-21.579701 9.669700 99.015151 +-2.144400 1.054400 53.792799 +-4.323100 1.703100 55.838451 +-0.517400 -2.832600 58.471300 +-1.598500 -0.901500 53.790749 +-3.327100 -1.722900 54.831450 +-6.151400 2.481400 58.479300 +-7.639500 -2.870500 58.995250 +-4.462400 -3.167600 61.063802 +-8.892300 -3.417700 59.488850 +2.383600 -2.413600 66.271799 +-1.912000 4.502000 55.359001 +8.304700 -1.794700 60.532351 +6.917900 -0.907900 57.918949 +0.455600 1.654400 54.312800 +4.490400 -0.380400 55.310201 +4.719600 1.400400 55.329801 +5.251200 -3.031200 61.070602 +4.253600 -2.293600 55.836801 +-1.507200 5.247200 57.431399 +9.099200 -1.539200 61.579598 +-3.477400 5.587400 57.436299 +5.813900 -3.023900 62.626949 +5.740100 -3.320100 64.685051 +7.698300 0.961700 61.079152 +7.038400 3.821600 60.524201 +-1.123300 5.973300 58.473350 +-11.906800 -9.293200 96.391602 +-11.910600 -8.269400 97.959700 +0.503600 -10.243600 101.626799 +-4.825000 -9.885000 98.487497 +17.830800 5.989200 98.510397 +-14.861700 10.991700 86.029151 +15.921900 13.058100 92.750953 +15.026600 9.873400 88.103303 +-19.060499 10.430500 98.994751 +-18.130300 12.180300 96.929849 +-17.176200 10.856200 94.316901 +-17.909900 2.589900 96.955049 +-19.156400 4.436400 96.916799 +-19.930999 4.581000 98.499497 +5.521700 -4.311700 71.965850 +-19.701600 12.661600 100.069202 +-20.812100 11.672100 98.483947 +-20.825200 12.795200 96.917399 +-18.757200 13.337200 93.281400 +-18.345499 13.475500 90.702251 +-20.228600 9.038600 97.455703 +-18.708099 7.788100 96.405952 +-16.348100 9.858100 90.195947 +-7.977300 3.337300 60.541351 +-11.808700 4.728700 71.995650 +-10.434000 3.634000 65.202998 +-5.086500 -4.323500 71.466753 +0.870600 -3.170600 75.100303 +-2.508200 -4.341800 75.095903 +-9.061500 5.131500 65.209248 +0.447400 8.312600 61.558698 +0.540500 9.129500 65.230248 +-7.760200 6.150200 62.099899 +-5.932200 9.472200 62.098899 +-10.075900 7.105900 68.332051 +7.026000 -4.076000 69.872998 +10.748600 -1.578600 65.744302 +7.064500 -3.804500 67.802246 +-14.228600 7.048600 81.830697 +0.624000 -3.784000 78.732002 +-2.199100 -7.120900 83.945449 +0.910300 -4.610300 79.770153 +-1.691200 -6.778800 81.879397 +-14.983700 -7.696300 96.913149 +-8.715400 -8.384600 93.307300 +-13.627000 -7.513000 93.826496 +13.315700 8.914300 81.347851 +14.384600 -1.814600 84.457303 +3.888300 -2.638300 71.449153 +-20.895399 9.765400 102.112304 +-19.105800 9.415800 100.592098 +-19.144600 7.074600 99.522698 +-21.144901 7.764900 101.102553 +-21.158100 5.308100 100.035952 +-20.203401 4.733400 100.078302 +-20.285100 6.535100 99.552448 +-19.867501 6.977500 97.956250 +-16.701200 -10.818800 102.654400 +-16.249600 -11.180400 101.110203 +-19.134101 -12.015900 97.987950 +-16.947700 -11.412300 97.981150 +-17.707000 -10.403000 98.506497 +-19.436600 -9.163400 100.031702 +-21.721901 2.901900 99.029051 +-21.651400 4.391400 101.599299 +-17.619800 -10.570200 96.935099 +-19.640300 -10.629700 95.374852 +-18.564900 -1.845100 97.447553 +-17.973400 -4.876600 94.328301 +-17.237900 -8.492100 96.956049 +-19.617101 -9.482900 95.876448 +-19.072001 -7.548000 95.898998 +-20.384401 1.644400 95.907798 +-16.475200 2.025200 89.642400 +-0.915300 -11.574700 99.532348 +5.236500 -11.196500 101.118253 +7.105100 -12.185100 103.692551 +-4.833600 -12.456400 99.548198 +3.587700 -12.287700 104.233848 +-11.012100 -10.037900 99.548948 +-14.849800 -12.400200 99.520098 +-11.471800 -11.978200 100.044102 +-13.937900 -10.512100 99.546048 +-14.697600 -10.622400 102.126204 +-16.399499 -13.070500 97.435253 +-16.645599 -10.554400 96.437202 +-14.318900 -9.381100 96.435552 +-16.075000 -11.765000 97.432503 +-13.879100 -11.310900 96.405452 +8.370300 -6.840300 78.730152 +5.836600 -8.476600 90.158297 +8.049600 -7.739600 84.989800 +6.871800 -13.841800 100.060902 +2.995900 -5.875900 79.272949 +-9.843800 -11.666200 93.308100 +-10.480200 -12.669800 96.439902 +4.401700 -4.881700 74.040852 +4.844300 -6.424300 70.932149 +6.401900 -6.821900 76.635950 +-2.854500 -7.305500 75.117753 +-12.435900 -5.864100 77.672051 +-16.050100 -6.369900 87.584948 +-14.378200 -7.051800 91.210898 +-17.341500 -3.838500 91.719252 +-16.670000 -7.100000 92.790003 +-16.213400 -6.776600 90.183297 +-14.210300 -9.339700 95.369852 +-0.693600 -3.496400 66.798203 +1.874500 -4.614500 73.032251 +16.307500 -14.677500 114.098753 +12.886800 -14.746800 108.388402 +16.145200 -14.355200 111.992601 +19.079701 -15.199700 120.344851 +18.376101 -14.066100 116.163047 +-6.587500 -13.632500 101.591249 +-12.355600 -12.534400 102.152204 +2.780700 -13.090700 104.190348 +-16.055700 -13.014300 100.557148 +-18.943901 -9.896100 101.638049 +-19.953901 2.633900 100.033052 +-11.035400 -9.444600 102.652300 +-14.802200 -9.647800 103.188897 +-19.080200 4.940200 100.034902 +-19.051199 9.191200 102.634400 +11.654100 -9.624100 105.782053 +3.878300 -11.078300 104.199148 +10.226000 -14.306000 110.443003 +-20.797801 -12.252200 92.231099 +18.481301 1.958700 105.255649 +3.080900 -10.280900 101.090453 +-20.208101 13.128100 90.710951 +-9.834500 10.214500 64.157747 +-21.474900 13.394900 95.362552 +2.548200 -1.428200 49.629099 +6.123200 -2.783200 54.286600 +4.486300 2.443700 51.688151 +5.448100 2.181900 53.784049 +9.673400 0.846600 60.536701 +9.712600 8.327400 65.196298 +22.982500 17.437500 112.026251 +23.942899 12.657100 115.671450 +18.971300 8.268700 104.755652 +21.303101 8.846900 111.491547 +21.161500 11.518500 111.515747 +20.607900 -4.577900 108.883948 +22.374501 15.865500 108.362252 +29.379899 -7.159900 148.399952 +22.148200 -18.958199 138.514098 +23.999200 -14.069200 146.359601 +30.092000 -20.322000 145.316007 +25.465401 -18.835400 147.887698 +9.726500 -4.096500 61.043252 +10.248800 -4.328800 62.629399 +9.941900 -2.591900 62.635949 +10.080400 -1.990400 63.665200 +5.986500 -3.566500 66.793253 +7.280200 -4.320200 66.260099 +31.057399 -6.397400 149.998700 +21.694800 8.405200 114.607399 +22.731200 13.688800 113.030602 +22.918801 11.191200 113.589398 +21.985999 12.554000 113.048002 +21.906799 11.493200 113.573398 +22.248400 1.821600 119.794196 +16.536301 -2.806300 94.323151 +18.774899 -2.934900 105.782453 +15.962600 -10.982600 108.911298 +17.625200 -11.455200 112.532598 +14.680600 -10.850600 106.805296 +14.956100 -11.846100 108.878048 +16.422500 -11.012500 112.516248 +15.800800 -10.710800 110.950400 +16.323700 -13.233700 110.441853 +12.565700 -12.055700 101.607849 +12.073700 -9.623700 103.671851 +9.856000 -6.856000 78.237998 +19.813300 -12.463300 123.476653 +11.211700 -10.151700 103.685851 +13.702600 -11.622600 107.356301 +13.741200 -11.611200 106.795596 +10.592600 -14.672600 109.941299 +10.970000 -14.090000 104.730002 +20.161701 -8.141700 108.380852 +18.341101 -2.181100 103.670551 +21.176500 -4.256500 115.113254 +19.864300 -3.604300 110.972150 +19.000100 -2.800100 107.320051 +15.300200 -9.330200 107.320101 +17.744199 -11.234200 114.607099 +18.064699 -11.294700 116.687351 +18.155199 -10.645200 117.212598 +22.239300 0.710700 119.319650 +23.097000 5.023000 116.683501 +22.833101 4.646900 119.306550 +23.943600 0.026400 121.896798 +24.344800 0.935200 121.887398 +22.038699 5.551300 114.109353 +21.817901 7.242100 114.098953 +22.650900 6.489100 114.590449 +22.047599 -3.577600 117.238798 +23.728501 -3.518500 121.894248 +21.818500 -1.128500 117.224248 +20.224299 -3.374300 113.042152 +20.642800 -3.622800 115.146404 +23.035299 0.004700 119.307650 +22.762501 -3.402500 119.271250 +26.109100 -5.889100 131.774553 +26.260599 -2.320600 129.175297 +24.383699 -5.773700 126.556848 +24.585801 -3.455800 123.987900 +24.507800 -1.517800 123.478903 +23.095200 -1.885200 121.892598 +-21.069200 -10.340800 95.895398 +-21.263501 -9.066500 97.443253 +-21.871401 11.921400 102.154304 +-22.629499 10.979500 102.125254 +-3.089700 4.849700 54.810150 +-1.995700 1.025700 53.247149 +-3.808300 4.718300 55.315851 +-2.563500 -2.246500 53.773249 +-4.778300 -1.591700 55.310851 +-3.715500 -2.444500 54.827250 +-2.715500 -1.094500 53.787249 +-4.852400 3.982400 58.473800 +-4.653400 4.553400 57.393299 +-4.061100 2.651100 56.904448 +-2.546700 2.416700 55.326651 +-8.068300 -1.411700 58.985850 +-3.838900 1.728900 56.915548 +-7.604500 -2.105500 58.462750 +-6.998900 -3.171100 58.460550 +-5.521700 0.361700 57.949149 +-2.973200 1.153200 55.353401 +-1.923500 -0.326500 55.353251 +-10.482400 3.952400 67.303800 +-3.653800 -3.206200 65.213098 +-1.448400 -3.021600 66.765803 +-9.218600 3.098600 65.190698 +-0.462900 2.592900 54.273550 +8.063300 -0.003300 58.476650 +2.443600 -1.503600 52.196802 +1.720900 -0.570900 51.685451 +0.261300 -1.001300 51.715651 +-1.007300 0.077300 53.236349 +1.049300 -1.919300 54.794650 +-1.498700 0.418700 54.270650 +-1.444500 0.014500 54.827750 +4.184200 2.065800 54.802100 +4.460000 2.760000 53.254999 +6.734300 2.025700 57.927149 +4.345700 1.744300 56.382852 +-0.237900 -2.462100 58.461050 +5.872000 -0.702000 55.336001 +6.442400 1.107600 57.931199 +3.319600 -1.989600 58.474800 +4.282500 1.017500 55.351251 +-1.445000 3.595000 55.877501 +-0.485100 2.845100 55.877451 +-1.454600 2.024600 54.822700 +5.745400 2.754600 55.857701 +5.633700 0.426300 55.311851 +4.461200 -0.811200 52.715598 +3.570900 1.759100 53.270449 +3.250700 0.399300 52.195352 +5.723800 3.876200 56.881898 +-0.977000 5.387000 57.396499 +4.967600 -2.257600 53.778799 +-1.971400 5.711400 56.384302 +8.033400 1.716600 60.016701 +9.139800 -0.679800 61.599898 +8.949100 -0.669100 61.074552 +9.047300 -1.457300 62.088649 +7.109500 4.410500 59.479750 +7.933100 3.676900 60.556551 +-8.984900 -9.175100 95.897548 +0.598900 -9.778900 100.034452 +-17.128199 12.078200 96.925899 +16.645199 2.394800 95.882598 +15.626100 1.453900 90.703051 +14.841600 12.258400 90.150797 +-15.930800 9.370800 90.169597 +15.111600 10.078400 89.650800 +-18.572300 12.242300 100.033852 +-19.811201 12.281200 97.984400 +-16.347099 13.737100 91.741452 +-18.811701 13.021700 92.269149 +-17.837300 13.337300 92.276349 +-17.081200 13.271200 93.314400 +-17.856500 4.066500 98.516747 +-18.786001 4.746000 98.476997 +-21.000300 3.670300 98.474847 +-20.752300 2.872300 98.513847 +7.249400 -5.679400 69.369702 +5.777500 -4.487500 70.408752 +4.603200 -3.233200 67.296600 +5.974100 -4.854100 67.287050 +5.335200 -3.745200 69.372602 +-16.499700 13.289700 90.685151 +-20.912000 12.362000 96.958999 +-21.594200 12.804200 98.517897 +-20.775100 12.475100 98.502447 +-20.759800 13.199800 96.950099 +-15.283200 13.193200 86.533398 +-19.654900 12.824900 93.807546 +-18.396400 7.436400 94.846797 +-18.371999 13.702000 89.129004 +-7.789900 4.059900 59.475050 +-9.356500 1.886500 62.606749 +-10.212100 3.162100 62.613949 +-15.292300 10.132300 86.038851 +-14.785000 9.135000 81.832497 +-10.827800 2.417800 64.156097 +-10.210600 2.390600 65.759702 +-6.756800 -3.573200 65.236598 +-9.469600 1.919600 64.170197 +-2.924400 -3.455600 69.902798 +-10.137300 5.887300 68.861347 +-12.612300 6.612300 77.713851 +1.076400 9.473600 64.698201 +-2.029800 6.949800 57.415099 +3.301900 -2.221900 67.790946 +8.036200 6.673800 64.173097 +-10.128600 6.178600 66.245699 +-8.139300 6.189300 61.570348 +-4.122300 7.932300 58.973850 +-4.172100 8.732100 59.488950 +-8.603300 3.333300 62.608349 +0.563200 -2.753200 66.791603 +0.562000 9.988000 68.346001 +-9.018100 7.958100 62.615949 +-6.984000 8.674000 61.562998 +-9.686800 7.526800 64.176597 +-7.311800 6.531800 62.604099 +-11.889900 7.249900 71.455053 +-10.956700 7.646700 65.726652 +-10.665100 6.305100 70.952449 +-9.969900 7.579900 65.210048 +-9.153600 7.653600 65.723202 +9.043200 -4.543200 67.796596 +8.712100 -4.102100 66.776053 +11.849900 -4.369900 67.794946 +6.775700 -3.965700 71.967850 +10.736500 1.233500 65.738252 +11.129600 8.350400 71.974800 +9.522200 -0.442200 62.591099 +8.286700 3.443300 61.598348 +9.468700 0.561300 62.619349 +-11.538400 -8.511600 96.410802 +14.541400 9.548600 87.060702 +13.429200 -2.329200 77.184597 +-19.824700 11.724700 101.637649 +-20.738800 10.828800 100.560598 +-20.055999 10.966000 100.551998 +-19.408699 9.348700 98.990651 +-20.488900 9.278900 101.080553 +-21.865900 7.415900 99.537048 +-21.178800 4.638800 98.470597 +-20.600600 5.500600 101.599699 +-20.710699 6.380700 97.959650 +-20.677699 6.937700 97.976150 +-20.338200 5.858200 99.525898 +-20.277300 11.417300 102.156354 +-20.647399 7.817400 102.631300 +-16.013600 -13.416400 100.578198 +-18.070301 -13.779700 99.544848 +-19.446700 -12.923300 99.541648 +-17.209300 -11.720700 99.545348 +-16.739900 -11.550100 99.520048 +-19.026900 -9.703100 100.061552 +-17.887701 -12.452300 99.546148 +-15.971300 -11.148700 99.559348 +-15.678100 -9.831900 101.605949 +-15.446900 -11.083100 102.661550 +-20.269301 -9.190700 100.045352 +-19.640699 -10.939300 98.474647 +-21.477400 5.407400 100.046302 +-18.805799 -11.964200 96.437102 +-17.937401 -2.042600 95.886298 +-17.162600 -0.177400 91.728702 +-18.283601 0.073600 95.878198 +-20.225801 -2.194200 95.902098 +-19.877400 -1.292600 97.466303 +-17.522800 -8.377200 98.513597 +-19.861900 -0.118100 97.474053 +-19.426100 1.256100 97.436953 +-19.457500 -9.512500 96.936249 +-18.080600 -9.899400 96.954699 +-20.346100 -9.883900 95.351952 +-18.459300 -7.490700 96.930349 +-18.618901 -7.741100 95.880548 +-18.978800 -8.421200 96.920599 +-20.064400 -7.895600 97.452803 +-19.394500 -4.695500 97.452753 +-19.944901 -8.645100 94.317551 +-20.432301 -8.337700 95.883848 +-19.915901 -5.434100 95.892048 +-21.048100 -0.571900 95.905948 +-14.592100 8.032100 80.798946 +-1.273500 -10.286500 100.048252 +2.758700 -11.898700 101.104353 +4.969800 -11.599800 101.074903 +0.497400 -11.537400 101.103703 +0.686300 -10.626300 101.633149 +-1.961500 -11.018500 100.049252 +8.126300 -10.126300 100.583148 +3.692500 -11.092500 102.666250 +6.195400 -11.235400 102.677700 +6.806500 -13.476500 102.123254 +5.796200 -12.036200 102.148104 +7.812300 -13.262300 101.596149 +7.333800 -11.483800 102.121904 +4.534400 -13.864400 102.132204 +0.311100 -12.631100 101.100553 +-2.320100 -13.109900 101.094953 +-0.060000 -12.310000 102.650000 +7.110100 -12.570100 103.695051 +-13.817700 -9.012300 99.521148 +-11.398700 -9.541300 101.090653 +-13.059600 -9.500400 97.980200 +-1.984100 -10.455900 101.612949 +-10.137700 -10.152300 97.456153 +-10.090500 -11.269500 97.479753 +-7.062300 -11.657700 98.473847 +-10.540700 -9.509300 99.529648 +-8.871800 -10.628200 100.589098 +-9.435300 -11.774700 99.022351 +-12.858100 -11.651900 99.020951 +-10.158400 -11.291600 100.555798 +-14.481000 -12.549000 97.469503 +-9.823700 -10.536300 102.638150 +-4.578100 -11.361900 101.630949 +-4.400300 -11.479700 100.034852 +-13.624600 -10.285400 97.952700 +-12.417300 -11.102700 102.671350 +-12.059100 -11.050900 101.110453 +-13.340600 -10.629400 101.079703 +-12.703600 -11.966400 100.583198 +-13.709000 -11.591000 101.070503 +-13.886400 -11.173600 102.646800 +-14.580800 -10.569200 102.654600 +-16.395599 -13.674400 96.957199 +-15.273900 -12.876100 94.853047 +-16.463399 -12.186600 95.398302 +-16.845900 -12.194100 97.467053 +-16.270699 -10.559300 94.849647 +-14.895900 -7.924100 95.357052 +-15.952600 -11.837400 95.888698 +8.999400 -8.169400 88.624699 +-1.951400 -7.968600 80.839296 +1.519900 -13.839900 99.029951 +-3.163900 -13.006100 99.523048 +-2.444000 -8.756000 87.058002 +-2.377500 -11.922500 96.416252 +-5.825300 -11.704700 98.497347 +-4.285300 -11.234700 98.502347 +-3.072700 -9.337300 92.783653 +-2.852700 -9.197300 91.228648 +-10.256200 -13.323800 100.046902 +-7.767800 -12.682200 99.541098 +3.179500 -5.899500 75.594749 +3.816800 -5.836800 74.068402 +5.268300 -4.898300 74.594148 +5.013300 -5.403300 77.176647 +4.839400 -5.449400 76.149704 +-0.478400 -6.161600 78.725802 +-3.160100 -6.699900 78.209948 +4.905800 -4.335800 74.037902 +5.658800 -5.768800 73.034401 +-18.743100 -12.386900 94.838447 +-5.969000 -5.351000 71.455503 +-14.914300 -4.505700 78.207848 +-12.596700 3.606700 72.476647 +-16.529799 -2.190200 87.570098 +-14.929800 -2.460200 80.835096 +-16.021900 -2.008100 85.479047 +-16.434299 -4.845700 85.492847 +-17.649101 -4.930900 92.780453 +-17.411000 -5.029000 91.759502 +-15.047400 -7.062600 89.661300 +-19.743401 -10.336600 92.773303 +-19.632000 -11.398000 92.253999 +-20.240601 -10.509400 94.334701 +-8.613500 -8.606500 90.718251 +-10.367600 -8.342400 93.286200 +-14.576100 -12.593900 91.751952 +-15.813600 -11.806400 91.203198 +-16.881300 -10.578700 93.819346 +-5.934000 -8.366000 88.118003 +-3.775600 -6.304400 76.112204 +-3.915400 -5.844600 74.572298 +-2.848200 -4.781800 73.530898 +1.946800 -5.566800 71.978400 +3.504500 -4.074500 74.042252 +3.815800 -4.355800 72.992901 +4.350600 -5.480600 71.435303 +4.330000 -5.250000 72.494997 +3.807500 -5.237500 70.398752 +2.250300 -5.580300 73.030151 +-1.741100 -4.118900 73.514448 +-0.621600 -3.908400 71.474203 +-1.640700 -5.509300 77.179647 +-1.134300 -4.735700 76.117854 +0.886300 -4.846300 77.178147 +0.960500 -4.980500 75.595249 +19.434700 -15.774700 122.917349 +16.403399 -15.823400 113.566698 +14.380000 -13.650000 106.839996 +12.812500 -13.552500 106.791246 +12.593000 -14.553000 106.286500 +14.959600 -14.949600 109.944799 +14.348700 -12.868700 108.369352 +14.253200 -14.333200 110.456603 +15.051900 -15.101900 112.025951 +19.063800 -12.133800 118.796903 +17.765000 -16.035001 115.677500 +-1.132400 -12.367600 103.168797 +-7.281300 -14.248700 101.594349 +-12.936200 -13.733800 102.126904 +-19.031599 -1.878400 99.009201 +-18.427901 2.807900 98.486047 +5.566800 -11.906800 104.233398 +8.440000 -10.640000 104.229998 +18.891900 1.818100 107.355951 +-20.619101 -12.610900 92.240449 +2.507200 -0.277200 49.103599 +18.247300 3.062700 102.113654 +19.661600 11.418400 109.920799 +17.886900 4.673100 102.113454 +-19.567501 14.097500 89.146254 +-8.484300 9.104300 61.052852 +-10.928400 9.608400 64.670801 +9.342000 5.998000 62.605999 +12.389100 10.620900 74.074552 +23.612199 17.337800 114.111103 +20.930699 7.409300 110.460353 +19.408001 3.942000 107.339001 +21.632499 12.437500 109.396252 +19.459799 11.880200 107.834897 +21.044199 9.885800 109.952099 +19.995600 12.884400 111.507797 +20.822699 10.117300 112.011351 +21.259400 9.530600 112.034701 +20.094301 15.515700 110.992150 +22.501500 15.058500 110.950750 +21.912701 12.347300 111.506347 +19.004100 15.795900 105.242049 +19.710200 15.499800 108.905098 +21.259000 16.191000 110.434503 +17.803699 13.776300 102.156854 +15.177400 9.722600 87.078702 +21.939200 -18.989199 138.529598 +23.911700 -13.801700 146.315851 +9.310900 -2.930900 62.110449 +23.127999 13.542000 113.034002 +22.026599 15.673400 113.068302 +22.630500 10.409500 114.110253 +22.306500 13.003500 113.578248 +21.877799 12.492200 113.558898 +22.036099 10.133900 114.108053 +9.660500 -9.490500 100.570248 +13.234500 -11.634500 105.267249 +15.683900 -11.453900 110.986950 +15.229400 -10.339400 108.919698 +16.328500 -11.218500 110.444253 +11.132700 -14.082700 102.661350 +14.446700 -13.526700 106.293350 +10.165900 -10.055900 104.192948 +11.387200 -9.647200 103.683601 +12.260800 -13.720800 104.740402 +11.562800 -13.462800 106.811396 +20.435100 -3.325100 110.967550 +21.217500 1.302500 117.223748 +20.850901 2.799100 115.150454 +22.218400 5.011600 117.219198 +22.275201 5.924800 114.597599 +23.548200 4.351800 118.784103 +23.407600 2.952400 119.283800 +20.810401 -3.450400 115.130204 +22.672000 1.668000 119.800996 +23.458500 0.581500 119.309250 +22.526901 -4.516900 119.833446 +26.467201 -2.627200 129.168597 +25.050799 -2.240800 126.560398 +-18.884899 -12.705100 96.397552 +-20.838900 -11.701100 96.910549 +-20.707300 -10.302700 94.346351 +-21.245200 12.155200 100.077402 +-2.979900 -0.100100 53.750049 +-1.436100 -1.653900 54.831950 +-1.004900 -1.265100 54.287550 +-4.738300 -2.201700 54.835850 +-2.840700 -0.669300 54.839650 +-2.847700 3.237700 55.851151 +-3.452400 4.162400 56.373802 +-1.977500 1.127500 54.316250 +-3.410300 2.150300 55.324851 +-9.306400 1.176400 60.556801 +-9.533000 1.113000 61.563498 +-9.235700 1.735700 61.552148 +-5.845100 -0.054900 57.392449 +-6.742400 -0.627600 58.988800 +-6.203500 -2.826500 56.913248 +-6.574700 -0.845300 58.472650 +-4.095700 0.715700 55.857151 +-3.577500 -1.022500 55.876251 +-1.324400 4.944400 58.997800 +1.937000 -0.987000 50.133500 +0.420500 1.349500 53.775249 +2.204900 0.255100 50.642450 +8.248700 -1.888700 59.484350 +6.950800 0.389200 57.935399 +-0.660600 -0.699400 53.269699 +-1.436900 0.696900 53.776549 +-2.051700 1.461700 55.334151 +-1.472900 -0.287100 54.813550 +-0.004700 0.984700 54.317650 +-0.319900 -2.520100 57.950049 +3.078400 -1.708400 53.254199 +5.237000 3.113000 55.848501 +-1.456500 2.376500 55.346751 +5.973600 2.056400 55.336801 +3.632100 -0.452100 52.756048 +3.661100 0.328900 51.675551 +5.372600 3.557400 57.401299 +-1.218900 5.388900 56.375552 +-16.900299 0.640300 92.754853 +-8.766600 -8.563400 94.831697 +-17.369600 11.989600 98.505197 +-14.430800 11.680800 83.424602 +-18.450301 11.330300 98.474847 +-18.156600 12.666600 92.276699 +-19.437900 12.877900 95.391052 +-19.977801 5.607800 97.986100 +7.468500 -4.268500 67.279250 +7.634000 -4.934000 68.831997 +6.310500 -3.440500 68.330251 +-17.804000 13.144000 97.973000 +-19.238299 12.828300 98.505847 +-16.842600 13.172600 89.123704 +-17.875700 9.275700 97.457153 +-17.528501 10.848500 95.360752 +-10.420200 1.940200 61.599898 +-5.235100 4.685100 57.397449 +-10.689100 1.659100 62.080449 +-9.898600 0.778600 63.675700 +-6.698200 -4.701800 70.430902 +-10.887500 -1.062500 63.111250 +0.190800 -3.010800 71.970400 +-0.084200 -3.165800 74.037902 +-8.963700 6.073700 65.758152 +-9.851000 6.131000 66.774503 +-2.943200 -6.006800 79.243399 +-2.575900 -4.564100 76.122054 +-10.995400 5.735400 71.472303 +7.643600 5.836400 61.051802 +6.448300 4.791700 58.964150 +-1.015200 6.165200 57.427399 +11.096800 9.553200 71.478403 +9.057300 6.952700 65.208648 +-8.771400 3.781400 62.074299 +-3.283700 7.473700 57.433149 +-2.533300 6.363300 57.943349 +-3.161800 8.221800 57.929099 +-6.149500 6.839500 58.980250 +-7.230500 8.290500 61.049752 +-7.556200 4.366200 60.541901 +-9.994300 4.304300 64.187847 +-8.963900 4.083900 63.148050 +-7.231200 8.501200 62.094399 +-4.680400 9.130400 60.029801 +-8.176900 6.906900 62.606549 +-6.618500 9.308500 63.665750 +-6.622300 8.532300 63.663850 +7.832100 4.517900 61.581048 +9.177400 6.492600 64.188697 +11.363700 8.996300 73.526848 +-14.315900 8.395900 81.857047 +9.925000 -8.095000 91.732502 +7.637400 -8.527400 92.273699 +-16.025100 -1.074900 87.597448 +13.503600 11.316400 80.826796 +14.441300 4.428700 82.915648 +3.068000 -5.418000 79.238999 +5.164300 -4.084300 73.037151 +-19.133900 10.793900 100.578048 +-19.882701 9.742700 100.553648 +-21.877999 8.168000 101.086003 +-18.307699 12.037700 100.076152 +-18.956600 8.146600 99.531698 +-20.833301 8.623300 99.538348 +-20.579900 5.269900 98.515047 +-21.368699 7.318700 97.965650 +-15.711300 -13.398700 102.149354 +-18.242199 -14.137800 99.543898 +-19.128900 -13.381100 99.530548 +-18.751200 -13.208800 101.079403 +-17.369601 -13.450400 100.595198 +-15.470100 -10.289900 99.554948 +-17.622000 -11.998000 97.979000 +-18.969501 -12.970500 97.985250 +-20.297800 -9.522200 98.486097 +-20.041400 -8.988600 97.464303 +-22.337700 6.107700 101.606149 +-21.421200 4.661200 98.519397 +-19.942101 -5.897900 94.318951 +-20.196300 -2.363700 97.471853 +-20.205400 0.605400 97.467303 +-20.026100 1.306100 97.471953 +-19.501500 0.671500 96.914249 +-18.046900 -9.563100 98.506547 +-20.152400 -9.007600 96.918799 +-19.113601 -8.916400 98.483197 +-19.917400 -5.452600 98.991301 +-19.058700 -7.431300 97.455653 +-20.600200 -5.409800 95.879898 +-20.391500 -4.828500 97.459253 +-18.158801 0.618800 95.375602 +-18.085800 -0.914200 94.352101 +-21.077800 1.227800 97.451103 +-20.904700 3.534700 95.892648 +-20.725500 -0.774500 94.337251 +1.656800 -12.046800 99.528398 +1.375800 -10.685800 101.107903 +-2.204500 -9.755500 96.942749 +2.351300 -13.141300 100.560648 +4.268100 -13.268100 100.564048 +4.446000 -11.966000 101.073003 +1.185800 -12.065800 102.652900 +3.278700 -13.098700 102.124354 +2.657400 -11.867400 102.678700 +-0.041200 -11.088800 101.619399 +4.417300 -12.107300 102.673650 +7.918300 -9.928300 102.149154 +5.226100 -13.316100 101.623049 +7.224300 -13.044300 102.157154 +7.005200 -14.205200 101.632599 +-0.241100 -13.088900 101.084453 +-1.299100 -11.680900 101.605449 +-0.725400 -11.414600 101.107303 +-3.895800 -12.704200 101.622099 +-2.657700 -12.092300 101.626149 +-1.259700 -13.020300 102.145154 +5.117700 -13.427700 103.683851 +6.028100 -12.468100 104.194048 +-9.005600 -11.644400 97.432203 +-7.580700 -10.549300 99.009651 +-8.126200 -9.903800 98.991901 +-9.141600 -11.488400 98.999201 +-9.957600 -9.722400 100.566198 +-6.761800 -12.628200 100.064102 +-10.849200 -11.060800 97.435403 +-10.337200 -11.122800 98.996401 +-15.430000 -13.560000 99.015001 +-13.858600 -13.471400 99.030701 +-11.126300 -12.393700 98.481847 +-5.201100 -10.968900 102.114454 +-4.884800 -10.385200 100.587598 +-7.142300 -10.377700 100.583848 +-9.404900 -10.375100 102.127554 +-2.794400 -12.145600 100.062802 +-3.641800 -11.558200 98.484097 +-4.366100 -10.783900 100.051952 +-16.248799 -12.571200 95.905598 +-15.558200 -9.601800 100.070902 +-12.069800 -11.720200 102.115104 +-12.968800 -11.831200 102.110604 +-14.535100 -11.014900 101.092453 +-13.630600 -11.569400 99.529698 +-16.839200 -13.770800 98.515397 +-15.121400 -13.008600 95.889298 +-16.586300 -7.463700 93.801846 +-16.328800 -11.351200 97.950600 +-14.892000 -11.678000 97.994000 +-1.479300 -7.400700 81.845347 +1.704500 -9.164500 92.257249 +-2.526900 -13.033100 97.476553 +0.609300 -13.289300 98.999651 +-5.638200 -12.681800 98.505897 +-2.951500 -9.328500 90.199247 +-8.721500 -12.178500 98.494247 +-10.965500 -12.024500 99.027251 +-9.812600 -12.037400 97.448703 +4.922200 -5.582200 75.621099 +3.014000 -6.524000 74.052002 +2.992300 -5.082300 76.651150 +3.315700 -5.645700 77.702851 +-0.489900 -6.620100 79.760053 +-2.971100 -6.778900 76.119454 +-0.741400 -7.228600 79.774303 +7.418000 -5.658000 71.979000 +4.855800 -5.685800 74.582898 +-15.413100 -6.296900 84.993450 +-13.719500 7.869500 77.700251 +-13.932100 5.432100 80.283950 +-14.582700 -7.297300 93.833646 +-16.340899 -0.519100 89.144554 +-16.430900 -7.379100 92.264549 +-16.089500 -7.260500 92.760253 +-20.344100 -10.375900 92.792953 +-15.898200 -12.141800 92.775903 +-17.373301 -10.936700 95.353352 +-3.282800 -6.947200 76.158604 +-4.096200 -5.783800 73.541898 +-4.712700 -4.817300 73.548648 +-5.949000 -5.221000 73.025501 +-3.369100 -5.470900 76.115454 +-5.298600 -6.371400 75.600699 +-2.107300 -4.812700 75.101353 +-2.906500 -5.103500 74.561748 +-1.200300 -4.249700 72.479847 +3.349200 -4.039200 73.014601 +3.784100 -5.264100 71.457053 +3.755100 -5.135100 73.027551 +1.703800 -4.023800 73.006901 +1.724800 -4.194800 71.992400 +0.728000 -4.668000 76.129004 +-1.398100 -6.191900 79.785953 +1.302400 -4.142400 75.636199 +0.616200 -5.796200 76.138104 +1.033800 -5.393800 76.666900 +0.773000 -5.513000 78.736502 +2.573000 -4.103000 75.111503 +2.523700 -4.603700 75.086853 +3.848400 -4.078400 75.099203 +0.352600 -5.902600 75.101303 +14.779300 -13.719300 108.399652 +14.169000 -13.929000 108.374502 +14.034200 -12.924200 108.887098 +13.809100 -14.669100 109.939549 +15.374200 -15.574200 111.992101 +14.246600 -14.726600 110.453303 +14.163200 -15.183200 109.926599 +17.995099 -14.645100 116.172547 +18.727100 -12.777100 116.718551 +5.203500 -14.453500 102.116754 +-7.577200 -12.942800 101.621399 +-12.417200 -14.212800 102.121404 +-10.189200 -13.710800 101.630399 +-12.684800 -12.595200 100.592598 +-18.994600 3.034600 100.077702 +17.938500 1.271500 102.139254 +18.172200 1.587800 103.676101 +20.542300 8.107700 112.536148 +-8.325600 8.975600 60.522201 +12.273400 11.316600 74.556698 +11.399500 10.250500 69.889748 +20.038900 15.501100 106.809446 +19.741400 12.578600 109.395702 +21.220699 13.649300 107.315351 +20.607401 11.942600 110.958700 +21.035200 8.784800 110.982600 +20.700001 9.330000 110.440003 +21.564700 11.035300 113.597348 +21.831000 16.478999 112.030501 +22.718699 15.041300 110.959350 +22.218999 13.341000 110.999500 +21.832900 16.197100 110.431453 +21.624699 13.385300 109.392352 +20.001500 14.638500 109.430752 +20.050601 16.059400 108.890298 +13.800800 8.389200 81.310401 +8.918300 -3.068300 61.594148 +9.239100 -2.609100 62.609549 +24.849800 4.640200 121.359902 +23.048699 12.901300 113.559348 +11.362700 -9.082700 100.551348 +12.453900 -9.783900 105.236949 +8.091000 -10.551000 102.150504 +13.143600 -13.903600 106.286800 +9.834300 -14.154300 108.357152 +11.236900 -14.266900 108.898448 +24.045800 2.204200 119.297900 +21.579900 -1.089900 117.204948 +24.209099 0.660900 121.354552 +-19.920200 -12.139800 96.954899 +-19.705199 -12.014800 96.402402 +-21.253200 -11.796800 96.958399 +-20.864600 -10.305400 94.347701 +-22.000500 12.300500 101.599749 +-1.911700 -1.348300 55.359151 +-2.414800 -1.665200 55.347601 +-1.634800 -0.775200 53.242599 +-0.924200 -0.765800 52.752898 +-4.062100 6.662100 56.903948 +-2.764500 4.794500 55.312751 +-9.752800 -0.927200 60.543601 +-9.007200 1.597200 61.056402 +-4.900900 -3.109100 57.959549 +-3.373400 0.763400 55.833301 +-0.303400 1.973400 53.788299 +6.939600 -0.359600 57.439799 +-0.322800 2.972800 54.818600 +2.601000 -0.291000 50.120500 +5.754300 1.385700 55.862151 +-1.026300 3.766300 55.321851 +8.488900 -3.988900 63.154450 +-8.255500 -9.234500 97.472253 +-8.875700 -9.104300 96.412152 +21.135701 13.684300 106.807846 +-18.171500 12.571500 97.959250 +-16.929101 13.089100 94.845447 +-18.142899 12.772900 93.833546 +-17.440600 12.530600 94.834697 +7.168700 -4.628700 69.389352 +-19.107301 11.067300 98.486347 +-17.802200 11.132200 96.923899 +-10.431200 -0.448800 61.079402 +-10.630100 0.010100 64.709951 +-2.191800 6.771800 57.914099 +-9.452200 4.712200 64.178897 +-10.022000 3.532000 64.679001 +-8.746800 8.916800 62.591599 +-7.065500 8.015500 62.072249 +-8.323400 7.803400 64.193297 +-8.401500 5.931500 64.154247 +-8.958500 7.108500 64.150747 +-7.750500 6.760500 63.154750 +6.902000 -4.952000 73.026001 +9.089200 5.610800 64.199597 +2.031200 -9.061200 93.800596 +0.774000 -9.234000 95.372002 +6.025700 -8.835700 94.357851 +-18.693999 10.284000 99.008001 +-20.413700 5.623700 98.513147 +-21.500199 7.400200 97.984900 +-20.939700 -9.680300 98.505147 +-20.005100 -12.404900 99.522448 +-15.512100 -13.887900 100.568948 +-18.016201 -13.173800 99.001901 +-19.614299 -8.925700 98.487847 +-20.485701 -7.234300 93.302150 +-20.235900 0.045900 97.452053 +-20.594000 -6.066000 98.998001 +-19.252000 -7.988000 97.439003 +-20.366200 -5.503800 94.351901 +-20.729201 -8.130800 95.900398 +-20.545800 -7.314200 94.342101 +-19.504900 -7.225100 96.912549 +-17.878101 0.438100 95.350952 +-21.312100 3.762100 98.488947 +3.354600 -12.344600 99.007301 +4.605200 -13.745200 100.557598 +1.130300 -12.400300 99.520148 +2.467000 -12.477000 102.673500 +2.390500 -11.400500 102.635250 +-4.104200 -10.285800 98.507897 +5.943600 -13.203600 101.626799 +-0.886200 -12.363800 102.676900 +-9.807600 -10.262400 97.451203 +-4.884100 -10.545900 100.052952 +-6.285300 -10.394700 100.042352 +-5.408200 -11.391800 100.050902 +-7.472800 -12.127200 100.053602 +-13.600500 -13.159500 100.569748 +-14.267400 -12.442600 98.996301 +-11.429100 -12.900900 98.500447 +-15.557100 -13.072900 97.436453 +-11.864500 -12.355500 97.432753 +-7.649700 -10.000300 102.125154 +-3.450800 -12.419200 100.079602 +-12.173600 -12.366400 99.018201 +-15.638900 -12.681100 98.995551 +-14.039000 -11.321000 97.995500 +-5.541200 -9.768800 96.949399 +-9.023300 -12.576700 98.513347 +-10.629400 -11.940600 97.460303 +-0.440800 -6.669200 80.829596 +-2.398300 -5.061700 76.140854 +4.359800 -4.659800 73.014901 +-17.483601 -4.606400 92.783203 +-3.060700 -6.689300 75.079653 +-3.945400 -6.184600 74.557298 +-5.946100 -5.913900 75.601949 +-5.400000 -6.040000 77.164997 +3.948800 -4.358800 72.489397 +-1.300700 -4.529300 74.594648 +-1.090000 -4.620000 75.095003 +-0.904500 -4.375500 73.552748 +1.464500 -5.244500 74.042252 +-1.689200 -5.650800 78.205398 +-3.034000 -6.826000 79.267999 +-0.047900 -5.592100 77.176047 +3.118000 -5.058000 75.633999 +14.808100 -12.418100 108.899048 +16.335901 -15.715900 111.507947 +-1.860800 -14.149200 102.634600 +-11.396100 -13.473900 101.091953 +-9.172300 -11.177700 102.153854 +-12.565700 -13.394300 100.567148 +-19.577500 1.877500 100.046252 +8.466200 -9.386200 100.578098 +19.573299 12.556700 109.406652 +21.416699 14.473300 113.053352 +22.896101 13.143900 113.578048 +11.592400 -9.272400 100.581198 +24.156601 5.503400 118.783303 +-19.708999 -12.051000 94.845497 +-21.051500 -9.698500 97.464253 +-21.918201 12.088200 102.130904 +-2.026100 -1.613900 55.831951 +-4.465300 6.075300 57.437349 +-2.882900 5.062900 55.348551 +-3.651000 -2.789000 58.954500 +-5.789400 -0.200600 57.915299 +-0.009000 0.189000 52.235502 +-18.146099 12.766100 96.436952 +-17.815799 13.105800 93.837096 +-5.299400 -5.510600 76.135304 +-4.335300 -4.734700 74.557348 +-6.351800 7.451800 61.064102 +-6.890500 8.200500 61.059752 +-8.940100 7.870100 64.714951 +9.550500 3.949500 63.675250 +8.953900 4.346100 62.631949 +-18.979699 9.259700 99.035151 +-16.512000 -12.938000 99.548998 +-20.079299 -8.850700 98.510347 +5.940500 -12.870500 102.130254 +0.809800 -13.409800 102.639900 +1.534600 -13.684600 100.587298 +9.148800 -14.488800 106.804396 +-9.647300 -11.772700 100.551348 +-8.129600 -12.640400 100.070202 +-13.581900 -11.868100 97.974050 +-3.431600 -12.718400 99.559198 +-16.493100 -12.906900 97.953450 +6.116500 -8.966500 93.318250 +-7.767700 -12.922300 99.541148 +-3.544400 -13.235600 101.092803 +-5.058200 -11.761800 96.940899 +1.882300 -5.152300 73.036151 +1.651600 -4.141600 74.075802 +1.381800 -3.981800 75.095903 +-0.766000 -6.334000 80.806996 +2.533300 -5.673300 74.576648 +-20.022500 1.102500 99.023751 +-20.421800 -0.278200 98.994101 +20.742200 9.897800 108.386102 +20.921700 15.538300 106.790846 +10.002500 -14.412500 108.351252 +-20.510999 -12.299000 94.854497 +-3.427100 4.807100 55.851451 +-4.795400 8.915400 60.512301 +-5.921800 8.331800 62.104099 +-17.686700 -12.443300 98.996651 +6.241100 -12.721100 103.705551 +1.394800 -13.844800 102.667400 +-4.408600 -13.111400 101.095703 +-4.308600 -13.251400 101.590699 +-4.643600 -12.316400 97.958200 +1.869400 -4.909400 74.054702 +20.499800 9.810200 108.359902 +19.769800 9.660200 108.369902 +20.653601 9.906400 109.941799 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom384.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom384.pts new file mode 100644 index 000000000000..36c8cf42d385 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/thom384.pts @@ -0,0 +1,384 @@ +383 +27.850301 -17.970299 134.875148 +-30.421501 -21.008499 144.254249 +0.114400 -1.784400 50.132200 +-18.264400 12.484400 101.627799 +17.396600 -1.906600 99.023301 +21.063600 -19.043600 132.826796 +29.463299 -5.123300 142.671651 +28.427000 -18.197000 149.973500 +20.364199 6.405800 114.632099 +14.811500 -9.141500 105.235749 +19.542701 -11.952700 123.446353 +-15.004000 -8.116000 98.497997 +-10.693900 -4.016100 58.998050 +-24.134400 11.784400 107.332801 +-23.475999 8.946000 104.191998 +-4.457700 9.027700 56.901148 +16.912700 15.277300 98.476347 +12.924100 12.075900 77.677051 +-21.715099 6.515100 96.397452 +10.053100 -2.053100 61.576548 +8.974900 -5.644900 68.852447 +8.249500 -14.839500 101.639749 +29.422501 -20.732500 142.186247 +27.104600 -21.824600 149.962300 +31.013999 -2.164000 149.977000 +27.157400 -17.317400 149.988700 +30.981799 -14.521800 149.960900 +31.027899 -19.127900 149.983950 +20.507200 17.852800 112.518598 +21.309300 -12.729300 134.384644 +19.385099 -11.085100 123.957550 +22.975500 -13.585500 143.232755 +14.246800 -7.776800 92.238399 +15.299200 -12.349200 106.839596 +-20.686101 6.686100 104.721952 +10.410300 -14.950300 109.945149 +-0.572800 -12.837200 104.743602 +9.430900 -11.520900 105.765453 +22.088301 -9.988300 120.869147 +18.696699 -9.706700 114.113353 +20.051600 -15.941601 125.510798 +17.014300 -12.824300 114.637149 +25.541301 -12.251300 134.885648 +22.033800 -2.333800 121.891898 +-18.289400 -7.380600 96.930299 +-21.954500 4.094500 101.622749 +-19.513600 4.613600 100.078202 +-20.256000 10.436000 98.992001 +-13.608300 -11.011700 97.960850 +-2.165500 -7.894500 80.802246 +-2.200600 2.110600 56.369702 +14.424000 10.726000 88.107003 +-17.650600 6.960600 97.964700 +-16.106900 1.746900 89.671550 +3.865300 -3.635300 75.612649 +3.290200 -2.310200 69.370102 +-16.555599 8.445600 91.712202 +-7.549400 1.549400 62.095299 +7.074300 -4.804300 73.542148 +10.674700 -9.114700 102.117354 +6.940000 -9.100000 95.914998 +-20.917200 -9.272800 92.751403 +-4.043800 -2.546200 51.163101 +-15.706300 -13.303700 92.791853 +-22.591499 15.911500 100.584248 +-15.927600 14.587600 91.711202 +3.550800 8.709200 54.815400 +-19.986700 12.906700 96.921649 +-11.174600 7.344600 64.152697 +5.729900 -1.889900 53.249949 +7.298300 1.991700 57.419149 +17.288300 -16.248301 111.504147 +11.139900 -5.079900 66.779953 +9.299900 -4.059900 60.559951 +23.049200 11.560800 111.494597 +24.139500 4.980500 116.704751 +29.687400 -21.817400 149.958700 +22.317100 -19.487100 141.113554 +23.782200 -13.892200 146.856105 +28.643601 -7.063600 145.816796 +-19.830300 13.350300 103.164847 +19.028700 14.271300 109.414352 +28.074900 -4.714900 140.597449 +22.833101 4.646900 119.306550 +22.090100 5.439900 116.685051 +22.567500 9.082500 114.078753 +20.163701 14.096300 113.586848 +20.742100 -11.562100 131.231049 +21.981901 -17.111900 134.370944 +25.385999 -12.786000 140.117995 +24.287300 -11.777300 136.968650 +27.245601 -13.955600 143.737795 +27.890600 -16.050599 147.355294 +21.251200 -8.951200 115.150604 +12.877700 -11.097700 103.713851 +-18.707900 5.677900 101.101053 +12.688800 -9.448800 105.264399 +-11.035400 -9.444600 102.652300 +-14.368000 -10.892000 101.091003 +-1.861500 -14.028500 102.634250 +-13.923300 -12.566700 98.998351 +12.485200 -11.985200 105.252599 +11.048700 -13.378700 106.834346 +15.585200 -10.855200 108.912598 +16.027501 -12.237500 112.513748 +14.253200 -14.333200 110.456603 +16.070500 -14.640500 114.080253 +17.983100 -12.533100 114.631549 +6.535600 -13.215600 105.777803 +21.772400 1.057600 117.201198 +22.093599 -4.353600 119.821796 +12.941200 -11.261200 110.465603 +8.894700 -11.624700 107.357351 +19.696600 0.693400 108.898298 +21.726600 6.443400 112.543298 +18.646500 -13.406500 116.678251 +21.180000 -14.900000 129.675001 +24.322701 -5.942700 126.056352 +20.577200 -13.737200 125.553598 +23.806999 -11.367000 134.358494 +21.780000 -11.330000 131.770003 +23.553400 -3.403400 121.911698 +-18.976199 -4.463800 99.036901 +-18.976499 -2.053500 99.036751 +-20.277900 -7.612100 97.431053 +-20.563300 -1.986700 97.458353 +-21.594099 7.434100 103.177947 +-20.604900 6.144900 101.112553 +-19.292400 9.542400 100.588798 +-22.819500 11.419500 103.675251 +-21.773300 11.133300 102.113354 +-16.047000 -8.803000 98.486497 +-17.838200 -12.431800 97.955900 +-18.931901 -9.888100 98.489047 +-2.144400 1.054400 53.792799 +-4.323100 1.703100 55.838451 +1.430600 -2.270600 61.570298 +-2.026100 -1.613900 55.831951 +2.131900 -1.761900 54.815950 +-0.320800 -1.229200 52.214602 +6.954800 -1.014800 57.937399 +4.719600 1.400400 55.329801 +-6.380700 2.000700 58.964650 +1.736200 -5.286200 72.513097 +5.514400 -4.744400 71.962200 +3.504500 -4.074500 74.042252 +-0.940300 5.240300 57.939849 +0.447400 8.312600 61.558698 +7.754600 1.155400 61.057302 +7.038400 3.821600 60.524201 +-18.130300 12.180300 96.929849 +0.591600 -4.271600 79.750803 +-16.671001 -7.499000 95.374502 +-17.649101 -4.930900 92.780453 +-14.640000 -9.350000 96.914999 +-9.162100 -7.997900 88.098953 +-15.918000 -6.132000 86.515998 +-19.701600 12.661600 100.069202 +-20.835200 13.045200 96.912399 +-18.631699 13.451700 92.279149 +-18.708099 7.788100 96.405952 +-7.977300 3.337300 60.541351 +-10.023200 0.453200 62.598399 +-7.388900 -3.921100 68.870547 +-3.846100 -3.533900 69.391952 +0.788000 -3.358000 76.674000 +-2.012200 -3.767800 75.083903 +-7.760200 6.150200 62.099899 +-9.870600 7.370600 66.764703 +-11.900100 5.990100 72.514947 +3.315700 -5.645700 77.702851 +-0.920200 -10.459800 101.614899 +-1.343500 -7.016500 82.893248 +6.011700 -11.191700 100.565848 +7.105100 -12.185100 103.692551 +-10.273400 -10.216600 99.028301 +-11.712200 -9.327800 96.408902 +-8.960200 -11.809800 97.454903 +3.113900 -12.953900 100.591948 +3.243300 -10.013300 101.081653 +-20.770601 -11.609400 92.244699 +-19.028101 -12.051900 90.675951 +-20.208101 13.128100 90.710951 +-9.834500 10.214500 64.157747 +4.486300 2.443700 51.688151 +9.673400 0.846600 60.536701 +9.712600 8.327400 65.196298 +13.512100 -4.832100 74.061052 +12.061000 -4.051000 66.245499 +22.982500 17.437500 112.026251 +23.673800 14.956200 114.606899 +20.499800 9.810200 108.359902 +21.161500 11.518500 111.515747 +22.374501 15.865500 108.362252 +24.998800 -17.598800 145.279407 +26.518900 -9.998900 142.679451 +27.565800 -12.355800 145.307907 +24.669799 -12.679800 143.214905 +23.095200 -1.885200 121.892598 +24.370300 1.799700 121.900148 +21.694800 8.405200 114.607399 +24.475301 -14.645300 142.167647 +23.101000 -12.941000 136.965500 +23.011600 -11.721600 136.445796 +11.249500 -10.039500 102.144754 +11.478300 -9.638300 105.789153 +-12.076300 -11.093700 102.666850 +-10.158400 -11.291600 100.555798 +-14.430500 -13.689500 100.589748 +-11.942100 -12.587900 101.628949 +4.210800 -13.780800 102.150404 +11.627100 -10.087100 103.713551 +13.965000 -12.725000 108.367502 +13.494400 -10.934400 107.342201 +11.087800 -11.727800 107.343901 +17.523701 -10.653700 114.596849 +15.976999 -14.507000 112.003501 +22.654100 0.555900 117.237048 +21.217500 1.302500 117.223748 +10.458900 -12.888900 110.959450 +20.789201 -3.569200 115.119604 +12.419000 -14.169000 106.289500 +26.735001 -12.275000 134.897498 +23.753101 -11.153100 131.261549 +25.044499 -9.814500 134.397244 +-15.024300 -9.735700 103.167847 +-18.943901 -9.896100 101.638049 +-19.183900 -0.826100 97.473053 +-21.081500 4.011500 100.074252 +-21.030300 -7.229700 97.474853 +-20.216900 -5.253100 99.011551 +-20.370299 9.710300 100.569848 +-18.827300 4.747300 101.606349 +-17.820599 -13.119400 96.429702 +-19.615700 -11.634300 96.937149 +-17.897401 -11.592600 99.541298 +-4.505300 -1.134700 55.352351 +-3.076800 -0.133200 54.281600 +-1.984000 -0.956000 53.782999 +-1.971800 5.601800 55.859101 +4.345700 1.744300 56.382852 +4.337700 0.212300 53.788849 +-5.845100 -0.054900 57.392449 +-2.207900 2.327900 56.896048 +-4.803200 5.673200 58.448400 +-3.315500 7.895500 58.437250 +-4.058200 3.998200 57.390899 +-2.918700 2.268700 55.330651 +1.922000 -4.172000 72.991001 +8.036200 6.673800 64.173097 +9.331000 0.699000 62.070499 +15.177400 9.722600 87.078702 +-15.047600 -11.302400 96.401202 +-18.230100 -10.259900 96.959949 +-19.210901 -7.459100 95.914548 +-20.057501 -6.162500 95.906248 +-14.785000 9.135000 81.832497 +-6.880700 -4.639300 67.304650 +0.504400 -5.664400 76.667200 +-9.644500 3.944500 63.637750 +-5.252100 8.492100 60.543951 +-8.323400 7.803400 64.193297 +-7.812700 5.902700 64.168647 +12.889700 -9.189700 101.594849 +-8.747400 -8.232600 93.291300 +-8.437700 -9.452300 99.006151 +4.299700 -11.999700 101.089853 +-13.059600 -9.500400 97.980200 +-4.751400 -11.228600 101.629299 +-5.702600 -11.687400 100.078702 +-0.019300 -11.130700 99.550348 +-1.125500 -12.214500 101.077253 +1.704500 -9.164500 92.257249 +-8.743600 -12.276400 95.388202 +-6.535000 -12.745000 98.482497 +-0.395100 -12.694900 102.657450 +8.012100 -6.662100 76.156054 +5.773300 -7.943300 83.946649 +-13.410600 -8.179400 97.974700 +2.629100 -10.759100 104.719552 +17.136201 12.023800 100.573098 +18.969300 1.950700 106.829646 +18.233000 12.227000 105.786503 +19.635699 9.214300 108.397852 +-19.567501 14.097500 89.146254 +-10.928400 9.608400 64.670801 +4.128600 -1.358600 51.189301 +23.612199 17.337800 114.111103 +22.350301 12.439700 113.035152 +20.050601 16.059400 108.890298 +25.622900 -14.602900 141.656443 +13.433900 -12.663900 105.271949 +14.446700 -13.526700 106.293350 +-12.458200 -10.991800 104.215898 +-7.977000 -12.133000 102.136504 +-10.337200 -11.122800 98.996401 +8.685300 -12.285300 103.677651 +11.915700 -12.805700 110.432853 +15.323500 -12.373500 108.876748 +21.036700 2.813300 115.143354 +20.474001 -10.874000 126.566998 +-15.678100 -9.831900 101.605949 +-18.537900 -9.082100 100.051052 +-19.415301 0.275300 95.892348 +-20.074500 -1.855500 98.997751 +-20.657700 -11.132300 96.921149 +-16.127301 -11.362700 102.676350 +-4.404800 -1.805200 55.352601 +3.603800 0.256200 52.236902 +-1.456500 2.376500 55.346751 +-6.989300 -0.650700 59.515350 +-3.508500 6.938500 57.420749 +13.405600 2.894400 79.752803 +5.013300 -5.403300 77.176647 +-16.463399 -12.186600 95.398302 +-17.237900 -8.492100 96.956049 +-15.187700 -11.322300 99.526148 +-19.380301 -9.519700 94.354851 +-17.254100 -10.525900 93.792946 +-10.367600 -8.342400 93.286200 +-18.943799 -7.526200 94.333101 +-18.886901 -5.823100 95.911548 +-18.345499 13.475500 90.702251 +0.806700 -5.676700 77.718351 +1.046900 -4.706900 77.708451 +-9.061500 5.131500 65.209248 +-11.407800 7.057800 72.511097 +-4.013600 -10.796400 100.058202 +3.416100 -12.676100 104.238048 +2.260000 -12.440000 102.655000 +7.753900 -12.673900 102.156954 +9.956900 -9.976900 102.113454 +7.505000 -11.235000 104.212498 +5.119000 -10.599000 102.669500 +-3.021400 -11.178600 103.199297 +-8.721000 -11.079000 99.034501 +-5.856500 -11.553500 98.481747 +3.042600 -10.732600 99.536298 +1.399600 -11.809600 101.119803 +-8.425600 8.965600 60.527201 +2.854500 -0.104500 50.117250 +20.102601 14.287400 110.996300 +20.071300 15.338700 106.825646 +25.300099 -13.550100 140.075045 +-14.544200 -10.735800 102.672900 +8.899800 -11.309800 103.694901 +8.373500 -13.593500 103.701751 +14.957000 -13.707000 108.393502 +-14.790800 -10.369200 100.579598 +-19.526100 -0.693900 99.016951 +-19.891100 1.501100 99.004451 +-20.159900 -11.180100 95.360052 +-19.838100 -11.101900 93.795946 +3.044600 0.755400 51.682301 +3.687800 1.442200 52.738898 +-6.885100 -3.294900 61.557448 +-6.215400 1.495400 59.492300 +-17.352500 -7.377500 94.313751 +-16.239999 -6.860000 91.224998 +-20.576800 0.046800 95.891598 +-18.031599 5.911600 96.409202 +-16.499700 13.289700 90.685151 +-9.316800 8.566800 63.131600 +-6.187100 -10.722900 98.486447 +3.329400 -10.959400 102.659700 +-9.227300 -10.502700 100.586348 +-5.203100 -11.776900 96.948449 +2.934500 -1.344500 50.157250 +21.912201 13.157800 111.506097 +-17.928601 0.158600 95.890698 +-17.785900 3.815900 96.932049 +-20.299200 3.889200 98.485397 +4.120400 0.749600 54.270200 +-17.981600 -6.818400 94.324201 +-19.942101 -5.897900 94.318951 +-18.396400 7.436400 94.846797 +-9.592500 7.612500 63.663750 +21.840700 14.839300 110.435353 +-20.119800 2.629800 96.935099 +21.831000 16.478999 112.030501 +20.249299 14.330700 108.894648 +21.416699 14.473300 113.053352 +21.707799 13.162200 109.433902 diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/data/torus_ran.pts b/Alpha_shapes_3/demo/Alpha_shapes_3/data/torus_ran.pts new file mode 100644 index 000000000000..0ee8d1f9dec2 --- /dev/null +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/data/torus_ran.pts @@ -0,0 +1,500 @@ +500 +231.000000 182.000000 0.000351 +14.000000 115.000000 -15.999829 +71.000000 94.000000 31.999592 +68.000000 54.000000 47.999560 +207.000000 119.000000 31.999602 +108.000000 241.000000 -31.999965 +36.000000 131.000000 -31.999798 +61.000000 79.000000 -16.000061 +158.000000 29.000000 47.999573 +171.000000 20.000000 32.000102 +80.000000 21.000000 15.999613 +208.000000 209.000000 -32.000094 +72.000000 154.000000 -0.000168 +130.000000 195.000000 0.000267 +159.000000 185.000000 0.000415 +165.000000 172.000000 -15.999620 +189.000000 138.000000 -16.000149 +180.000000 211.000000 -48.000257 +152.000000 182.000000 -32.000245 +196.000000 216.000000 -0.000361 +171.000000 63.000000 47.999650 +8.000000 118.000000 -0.000377 +167.000000 228.000000 0.000447 +149.000000 64.000000 -0.000335 +26.000000 166.000000 -31.999897 +62.000000 132.000000 15.999507 +129.000000 244.000000 -15.999563 +223.000000 57.000000 15.999837 +142.000000 25.000000 47.999532 +119.000000 12.000000 15.999691 +51.000000 213.000000 -32.000051 +67.000000 59.000000 47.999558 +244.000000 118.000000 16.000059 +229.000000 186.000000 0.000022 +151.000000 232.000000 0.000274 +177.000000 166.000000 -0.000265 +139.000000 71.000000 16.000400 +201.000000 184.000000 16.000257 +149.000000 26.000000 47.999937 +144.000000 184.000000 -32.000347 +212.000000 44.000000 16.000372 +122.000000 243.000000 -32.000271 +63.000000 226.000000 -15.999717 +14.000000 92.000000 -0.000228 +79.000000 191.000000 -48.000345 +168.000000 174.000000 -31.999750 +94.000000 239.000000 -15.999957 +128.000000 196.000000 -0.000407 +10.000000 151.000000 -0.000198 +28.000000 63.000000 16.000490 +50.000000 217.000000 -15.999698 +147.000000 242.000000 -16.000115 +11.000000 139.000000 -16.000482 +208.000000 183.000000 16.000006 +153.000000 28.000000 47.999911 +63.000000 29.000000 15.999721 +18.000000 173.000000 0.000064 +80.000000 86.000000 31.999967 +214.000000 131.000000 -31.999614 +25.000000 164.000000 -32.000292 +18.000000 81.000000 15.999688 +174.000000 164.000000 -15.999519 +112.000000 58.000000 48.000316 +221.000000 196.000000 0.000020 +87.000000 228.000000 0.000271 +85.000000 82.000000 31.999577 +136.000000 185.000000 -31.999946 +139.000000 12.000000 15.999814 +207.000000 136.000000 -31.999751 +243.000000 127.000000 -16.000406 +238.000000 83.000000 16.000043 +236.000000 175.000000 0.000133 +59.000000 39.000000 -0.000173 +138.000000 58.000000 48.000435 +63.000000 125.000000 -15.999958 +148.000000 59.000000 47.999763 +11.000000 116.000000 16.000295 +12.000000 104.000000 16.000059 +99.000000 195.000000 -47.999545 +176.000000 168.000000 -32.000485 +97.000000 186.000000 -0.000049 +26.000000 69.000000 0.000408 +67.000000 196.000000 -48.000408 +197.000000 73.000000 -15.999752 +180.000000 99.000000 15.999739 +246.000000 145.000000 0.000341 +54.000000 184.000000 15.999968 +194.000000 78.000000 -15.999879 +16.000000 144.000000 15.999772 +100.000000 28.000000 47.999568 +26.000000 108.000000 32.000427 +188.000000 58.000000 48.000056 +104.000000 23.000000 0.000019 +186.000000 193.000000 -47.999712 +242.000000 100.000000 16.000407 +139.000000 12.000000 31.999602 +229.000000 168.000000 -31.999564 +96.000000 230.000000 -0.000241 +144.000000 71.000000 31.999954 +139.000000 184.000000 -16.000332 +158.000000 226.000000 -48.000437 +54.000000 143.000000 -31.999968 +241.000000 163.000000 -0.000375 +110.000000 59.000000 47.999725 +88.000000 27.000000 0.000264 +159.000000 25.000000 0.000204 +228.000000 68.000000 0.000450 +53.000000 114.000000 31.999861 +76.000000 22.000000 16.000012 +238.000000 172.000000 -16.000306 +27.000000 174.000000 -32.000074 +71.000000 64.000000 48.000089 +58.000000 73.000000 -16.000054 +226.000000 75.000000 31.999956 +64.000000 224.000000 -32.000409 +219.000000 79.000000 -16.000015 +171.000000 219.000000 -48.000443 +17.000000 149.000000 15.999620 +85.000000 219.000000 -47.999948 +139.000000 243.000000 -31.999927 +64.000000 132.000000 -15.999923 +133.000000 60.000000 0.000370 +141.000000 13.000000 32.000016 +144.000000 193.000000 0.000487 +29.000000 77.000000 32.000389 +186.000000 227.000000 -31.999584 +51.000000 211.000000 -0.000140 +100.000000 67.000000 -0.000192 +153.000000 240.000000 -31.999932 +184.000000 64.000000 48.000329 +118.000000 233.000000 0.000081 +37.000000 196.000000 -32.000450 +196.000000 35.000000 32.000130 +43.000000 51.000000 32.000190 +97.000000 61.000000 47.999902 +18.000000 174.000000 -15.999889 +54.000000 112.000000 32.000389 +244.000000 102.000000 -0.000141 +26.000000 89.000000 31.999633 +183.000000 101.000000 -0.000397 +190.000000 155.000000 -32.000059 +141.000000 61.000000 -0.000261 +122.000000 69.000000 31.999905 +159.000000 239.000000 -31.999703 +180.000000 156.000000 -16.000295 +122.000000 186.000000 -32.000017 +159.000000 16.000000 31.999811 +111.000000 62.000000 0.000081 +30.000000 73.000000 32.000406 +40.000000 131.000000 -32.000022 +185.000000 50.000000 47.999556 +46.000000 121.000000 32.000010 +15.000000 91.000000 15.999817 +139.000000 243.000000 -15.999875 +194.000000 110.000000 -15.999682 +200.000000 221.000000 -16.000194 +146.000000 183.000000 -32.000064 +106.000000 191.000000 0.000436 +182.000000 156.000000 -0.000125 +201.000000 71.000000 -16.000001 +127.000000 59.000000 0.000459 +141.000000 242.000000 -32.000493 +171.000000 235.000000 -31.999615 +61.000000 176.000000 15.999908 +151.000000 14.000000 31.999740 +121.000000 185.000000 -16.000410 +9.000000 110.000000 -0.000308 +36.000000 124.000000 31.999681 +162.000000 16.000000 16.000300 +80.000000 234.000000 -16.000029 +15.000000 164.000000 -15.999884 +208.000000 72.000000 -16.000103 +67.000000 114.000000 15.999868 +120.000000 60.000000 0.000358 +153.000000 24.000000 -0.000315 +167.000000 77.000000 0.000084 +88.000000 178.000000 -0.000296 +178.000000 88.000000 31.999579 +75.000000 99.000000 16.000467 +151.000000 241.000000 -31.999550 +47.000000 183.000000 15.999840 +151.000000 180.000000 -15.999625 +112.000000 230.000000 -47.999580 +152.000000 60.000000 47.999920 +145.000000 183.000000 -15.999679 +62.000000 123.000000 -16.000320 +228.000000 142.000000 -32.000272 +106.000000 232.000000 0.000122 +89.000000 33.000000 48.000060 +118.000000 231.000000 -48.000438 +162.000000 239.000000 -15.999565 +196.000000 220.000000 -31.999656 +189.000000 117.000000 15.999870 +73.000000 46.000000 48.000414 +193.000000 37.000000 0.000188 +187.000000 221.000000 0.000304 +61.000000 140.000000 15.999972 +115.000000 184.000000 -15.999817 +153.000000 231.000000 -0.000374 +46.000000 134.000000 -31.999890 +68.000000 201.000000 -47.999923 +217.000000 55.000000 -0.000048 +200.000000 34.000000 16.000119 +152.000000 195.000000 -48.000153 +146.000000 72.000000 32.000142 +105.000000 242.000000 -15.999819 +158.000000 69.000000 0.000177 +145.000000 72.000000 15.999652 +103.000000 73.000000 32.000330 +246.000000 112.000000 -0.000307 +243.000000 128.000000 16.000331 +46.000000 48.000000 0.000354 +99.000000 15.000000 31.999993 +96.000000 70.000000 0.000313 +192.000000 129.000000 15.999724 +171.000000 36.000000 48.000142 +56.000000 41.000000 -0.000237 +87.000000 236.000000 -32.000264 +110.000000 242.000000 -32.000440 +90.000000 26.000000 0.000233 +219.000000 176.000000 16.000414 +196.000000 32.000000 15.999647 +225.000000 119.000000 31.999763 +168.000000 81.000000 31.999513 +103.000000 182.000000 -31.999641 +28.000000 192.000000 -16.000020 +225.000000 136.000000 -32.000475 +62.000000 117.000000 -15.999916 +58.000000 182.000000 16.000479 +94.000000 71.000000 0.000277 +210.000000 43.000000 16.000458 +238.000000 86.000000 -0.000143 +186.000000 28.000000 32.000422 +208.000000 46.000000 32.000427 +99.000000 60.000000 47.999544 +85.000000 36.000000 47.999560 +14.000000 140.000000 16.000064 +174.000000 91.000000 16.000080 +72.000000 33.000000 0.000351 +230.000000 95.000000 31.999702 +153.000000 15.000000 31.999736 +180.000000 44.000000 48.000142 +147.000000 13.000000 16.000173 +168.000000 27.000000 0.000135 +16.000000 168.000000 -16.000330 +12.000000 98.000000 0.000077 +84.000000 88.000000 15.999770 +175.000000 162.000000 -15.999729 +122.000000 12.000000 31.999587 +194.000000 145.000000 16.000214 +245.000000 104.000000 0.000096 +38.000000 50.000000 16.000261 +102.000000 231.000000 -0.000273 +120.000000 70.000000 32.000247 +103.000000 241.000000 -15.999562 +24.000000 73.000000 0.000059 +153.000000 241.000000 -16.000022 +80.000000 29.000000 -0.000425 +73.000000 223.000000 0.000246 +25.000000 91.000000 -15.999716 +110.000000 13.000000 31.999612 +142.000000 230.000000 -47.999894 +23.000000 185.000000 -16.000220 +226.000000 180.000000 -31.999881 +230.000000 105.000000 32.000364 +80.000000 169.000000 -31.999656 +219.000000 203.000000 -16.000266 +69.000000 142.000000 -0.000292 +33.000000 61.000000 0.000446 +66.000000 119.000000 15.999737 +29.000000 178.000000 -31.999839 +122.000000 195.000000 0.000250 +95.000000 79.000000 15.999537 +53.000000 141.000000 -32.000021 +228.000000 113.000000 31.999506 +110.000000 196.000000 -48.000009 +84.000000 167.000000 -16.000145 +221.000000 123.000000 32.000377 +192.000000 126.000000 -16.000016 +163.000000 237.000000 -32.000336 +107.000000 73.000000 15.999636 +30.000000 59.000000 15.999555 +143.000000 233.000000 -0.000014 +76.000000 233.000000 -16.000291 +140.000000 24.000000 48.000373 +13.000000 122.000000 -16.000396 +119.000000 243.000000 -15.999928 +219.000000 52.000000 15.999516 +39.000000 207.000000 -16.000205 +11.000000 153.000000 0.000400 +153.000000 227.000000 -47.999632 +197.000000 182.000000 15.999689 +96.000000 15.000000 16.000408 +189.000000 27.000000 16.000370 +85.000000 173.000000 -32.000317 +137.000000 185.000000 -15.999535 +186.000000 113.000000 0.000316 +47.000000 72.000000 -16.000307 +26.000000 147.000000 -31.999760 +34.000000 59.000000 0.000272 +184.000000 191.000000 -47.999729 +135.000000 195.000000 0.000041 +137.000000 22.000000 0.000252 +137.000000 70.000000 16.000342 +25.000000 164.000000 16.000081 +241.000000 162.000000 -16.000253 +25.000000 91.000000 31.999907 +204.000000 44.000000 -0.000409 +110.000000 184.000000 -32.000070 +71.000000 191.000000 -47.999714 +186.000000 141.000000 -0.000049 +112.000000 22.000000 -0.000413 +27.000000 187.000000 -0.000197 +28.000000 139.000000 -31.999749 +155.000000 76.000000 16.000041 +31.000000 135.000000 -31.999815 +99.000000 240.000000 -32.000440 +218.000000 59.000000 32.000098 +240.000000 164.000000 -16.000179 +186.000000 62.000000 48.000381 +193.000000 120.000000 -15.999543 +87.000000 19.000000 32.000031 +185.000000 148.000000 -0.000396 +187.000000 139.000000 -0.000262 +194.000000 177.000000 15.999986 +13.000000 133.000000 15.999525 +217.000000 131.000000 -32.000238 +73.000000 229.000000 -31.999844 +218.000000 196.000000 -31.999779 +62.000000 218.000000 -0.000483 +131.000000 12.000000 16.000284 +68.000000 136.000000 -0.000446 +14.000000 94.000000 16.000185 +112.000000 197.000000 -48.000241 +223.000000 198.000000 -15.999801 +71.000000 161.000000 -32.000219 +86.000000 18.000000 16.000351 +100.000000 227.000000 -47.999777 +17.000000 169.000000 -0.000308 +118.000000 24.000000 47.999953 +190.000000 100.000000 31.999686 +72.000000 103.000000 0.000019 +214.000000 124.000000 32.000046 +221.000000 132.000000 -32.000248 +81.000000 217.000000 -48.000242 +54.000000 71.000000 -16.000327 +14.000000 161.000000 -16.000004 +64.000000 31.000000 31.999705 +196.000000 223.000000 -16.000117 +114.000000 194.000000 0.000448 +239.000000 109.000000 -15.999611 +242.000000 155.000000 -15.999961 +62.000000 138.000000 15.999829 +155.000000 188.000000 -0.000170 +12.000000 131.000000 15.999532 +230.000000 150.000000 -31.999836 +12.000000 124.000000 -15.999937 +244.000000 137.000000 -15.999895 +38.000000 200.000000 0.000110 +175.000000 93.000000 16.000389 +40.000000 124.000000 32.000203 +129.000000 11.000000 15.999840 +39.000000 48.000000 16.000091 +23.000000 70.000000 15.999560 +89.000000 222.000000 -47.999557 +73.000000 26.000000 31.999999 +242.000000 94.000000 -0.000065 +229.000000 148.000000 -32.000276 +86.000000 237.000000 -15.999800 +229.000000 190.000000 -15.999638 +115.000000 71.000000 15.999835 +180.000000 95.000000 -0.000262 +247.000000 137.000000 0.000076 +130.000000 69.000000 31.999978 +38.000000 205.000000 -15.999885 +95.000000 238.000000 -31.999829 +155.000000 179.000000 -16.000164 +25.000000 153.000000 -32.000133 +17.000000 106.000000 -15.999715 +178.000000 167.000000 -31.999967 +209.000000 207.000000 -0.000472 +68.000000 34.000000 0.000071 +239.000000 146.000000 15.999682 +81.000000 38.000000 47.999976 +110.000000 23.000000 -0.000396 +27.000000 81.000000 31.999842 +136.000000 70.000000 32.000427 +145.000000 232.000000 0.000270 +140.000000 231.000000 -47.999598 +148.000000 196.000000 -48.000069 +16.000000 111.000000 -16.000408 +108.000000 14.000000 31.999518 +240.000000 91.000000 16.000149 +230.000000 160.000000 -32.000275 +64.000000 123.000000 15.999728 +16.000000 87.000000 15.999844 +8.000000 141.000000 0.000100 +222.000000 194.000000 -0.000178 +160.000000 61.000000 48.000409 +174.000000 20.000000 15.999672 +171.000000 174.000000 0.000162 +84.000000 81.000000 -0.000264 +151.000000 75.000000 15.999741 +36.000000 79.000000 -16.000373 +163.000000 18.000000 31.999651 +68.000000 116.000000 -0.000288 +185.000000 205.000000 -48.000148 +193.000000 135.000000 16.000057 +187.000000 119.000000 0.000122 +19.000000 80.000000 0.000444 +173.000000 64.000000 47.999899 +237.000000 82.000000 0.000371 +212.000000 211.000000 -15.999928 +229.000000 87.000000 31.999870 +69.000000 114.000000 0.000236 +97.000000 194.000000 -48.000360 +36.000000 176.000000 15.999577 +55.000000 213.000000 -0.000157 +189.000000 228.000000 -15.999840 +110.000000 192.000000 -0.000275 +174.000000 235.000000 -15.999655 +73.000000 99.000000 -0.000327 +28.000000 116.000000 31.999974 +229.000000 107.000000 31.999858 +153.000000 14.000000 15.999576 +103.000000 14.000000 16.000290 +130.000000 186.000000 -31.999906 +162.000000 62.000000 48.000005 +75.000000 160.000000 0.000127 +13.000000 161.000000 -0.000169 +183.000000 222.000000 -0.000352 +107.000000 182.000000 -15.999640 +105.000000 13.000000 15.999856 +50.000000 38.000000 16.000248 +175.000000 86.000000 0.000015 +30.000000 196.000000 -15.999867 +51.000000 42.000000 31.999990 +241.000000 93.000000 15.999799 +131.000000 243.000000 -16.000487 +243.000000 102.000000 15.999527 +30.000000 182.000000 -32.000239 +120.000000 185.000000 -31.999833 +66.000000 136.000000 -16.000264 +200.000000 42.000000 -0.000351 +25.000000 102.000000 32.000231 +176.000000 87.000000 32.000019 +160.000000 194.000000 -47.999614 +96.000000 240.000000 -16.000345 +230.000000 91.000000 -15.999643 +243.000000 157.000000 -0.000306 +243.000000 153.000000 -16.000310 +217.000000 124.000000 32.000136 +188.000000 197.000000 -47.999767 +121.000000 70.000000 15.999790 +242.000000 134.000000 16.000201 +165.000000 229.000000 -0.000410 +102.000000 24.000000 -0.000139 +230.000000 164.000000 16.000285 +182.000000 32.000000 0.000135 +247.000000 114.000000 -0.000002 +43.000000 204.000000 -32.000367 +210.000000 212.000000 -15.999682 +37.000000 59.000000 32.000195 +94.000000 16.000000 15.999830 +112.000000 25.000000 48.000203 +95.000000 17.000000 31.999534 +171.000000 192.000000 -48.000241 +125.000000 60.000000 0.000292 +12.000000 151.000000 -15.999890 +162.000000 193.000000 -48.000247 +161.000000 184.000000 0.000343 +70.000000 107.000000 -0.000360 +31.000000 120.000000 32.000491 +73.000000 209.000000 -47.999995 +106.000000 73.000000 31.999769 +145.000000 63.000000 -0.000340 +183.000000 152.000000 0.000134 +138.000000 197.000000 -47.999966 +106.000000 182.000000 -32.000377 +95.000000 176.000000 -15.999590 +61.000000 115.000000 -16.000234 +80.000000 169.000000 0.000431 +149.000000 23.000000 0.000338 +242.000000 121.000000 -16.000055 +63.000000 130.000000 16.000208 +229.000000 65.000000 15.999791 +152.000000 73.000000 31.999837 +9.000000 143.000000 -0.000190 +13.000000 100.000000 15.999721 +78.000000 89.000000 0.000382 +175.000000 226.000000 -0.000207 +79.000000 64.000000 47.999724 +165.000000 83.000000 15.999635 +173.000000 191.000000 -48.000118 +67.000000 141.000000 -15.999508 +149.000000 229.000000 -48.000104 +75.000000 156.000000 -15.999668 +13.000000 155.000000 -15.999930 +110.000000 71.000000 32.000201 From 3779d21163b3a80f3e1cce95c2f41fb6ff3c58aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 25 Aug 2023 14:36:51 +0200 Subject: [PATCH 353/943] doc that the functions depend on Eigen --- .../interpolated_corrected_curvatures.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h index 4b940f157e88..b90d66cbde2e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/interpolated_corrected_curvatures.h @@ -1037,6 +1037,8 @@ class Interpolated_corrected_curvatures_computer * By providing mean, Gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * @@ -1127,6 +1129,8 @@ void interpolated_corrected_curvatures(const PolygonMesh& pmesh, * * computes the interpolated corrected mean curvature across the mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. @@ -1198,6 +1202,8 @@ void interpolated_corrected_mean_curvature(const PolygonMesh& pmesh, * * computes the interpolated corrected Gaussian curvature across the mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. @@ -1268,6 +1274,8 @@ void interpolated_corrected_Gaussian_curvature(const PolygonMesh& pmesh, * * computes the interpolated corrected principal curvatures and directions across the mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam VertexCurvatureMap a model of `WritablePropertyMap` with * `boost::graph_traits::%vertex_descriptor` as key type and @@ -1341,6 +1349,8 @@ void interpolated_corrected_principal_curvatures_and_directions(const PolygonMes * By providing mean, Gaussian and/or principal curvature and direction property maps as named parameters, the user * can choose which quantites to compute. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * @@ -1426,6 +1436,8 @@ void interpolated_corrected_curvatures_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected mean curvature at vertex `v` of mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * @@ -1503,6 +1515,8 @@ interpolated_corrected_mean_curvature_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected Gaussian curvature at vertex `v` of mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * @@ -1580,6 +1594,8 @@ interpolated_corrected_Gaussian_curvature_one_vertex(const PolygonMesh& pmesh, * \ingroup PMP_corrected_curvatures_grp * computes the interpolated corrected principal curvatures and directions at vertex `v` of mesh `pmesh`. * +* \note This function depends on the \eigen 3.1 (or later) library. +* * @tparam PolygonMesh a model of `FaceListGraph`. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". * From 1db314ee4424a115df56520a15a526ab27cf30b9 Mon Sep 17 00:00:00 2001 From: David Coeurjolly Date: Fri, 25 Aug 2023 14:39:38 +0200 Subject: [PATCH 354/943] Fixing image filenames in the doxyfile --- .../doc/Polygon_mesh_processing/Doxyfile.in | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in index 8c263a409995..ca887f906691 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in @@ -23,7 +23,40 @@ EXCLUDE_SYMBOLS += experimental HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/selfintersections.jpg \ ${CGAL_PACKAGE_DOC_DIR}/fig/mesh_smoothing.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png + ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png \ + ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png \ + ${CGAL_PACKAGE_DOC_DIR}/fig/ bimba-dmax0.020000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.020000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.030000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.030000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.040000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.040000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.050000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.050000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.020000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/ bimba-dmin0.020000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.030000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.030000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.040000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.040000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.050000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.050000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.020000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.020000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.030000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.030000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.040000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.040000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.050000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.050000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.030000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.030000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.040000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.040000-0.002000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.050000-0.000000.png\ + ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.050000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/decimate_cheese.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/decimate_colors.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/decimate_rg_joint.png From c16b155d4ee72ef3fd0f44086b84dee79b683269 Mon Sep 17 00:00:00 2001 From: David Coeurjolly Date: Fri, 25 Aug 2023 14:39:59 +0200 Subject: [PATCH 355/943] Removing old image file. --- Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in index ca887f906691..8afaceb878f4 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in @@ -23,8 +23,6 @@ EXCLUDE_SYMBOLS += experimental HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/selfintersections.jpg \ ${CGAL_PACKAGE_DOC_DIR}/fig/mesh_smoothing.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/icc_diff_radius.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/ bimba-dmax0.020000-0.000000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.020000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.030000-0.000000.png\ From 4b450a594840de692804db70433aa900ed670dca Mon Sep 17 00:00:00 2001 From: David Coeurjolly Date: Fri, 25 Aug 2023 15:12:56 +0200 Subject: [PATCH 356/943] Cleaning up not used images --- .../doc/Polygon_mesh_processing/Doxyfile.in | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in index 8afaceb878f4..5cdf93414ac8 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in @@ -23,30 +23,9 @@ EXCLUDE_SYMBOLS += experimental HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/selfintersections.jpg \ ${CGAL_PACKAGE_DOC_DIR}/fig/mesh_smoothing.png \ ${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/ bimba-dmax0.020000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.020000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.030000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.030000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.040000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.040000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.050000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.050000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.020000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/ bimba-dmin0.020000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.030000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.030000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.040000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.040000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.050000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.050000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.020000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.020000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.030000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.030000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.040000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.040000-0.002000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.050000-0.000000.png\ - ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.050000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.000000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.002000.png\ ${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.030000-0.000000.png\ From 28efeb20569b20b5baa1ac8b15d1476caa8681b7 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 27 Aug 2023 19:13:42 +0300 Subject: [PATCH 357/943] integrated curvature vis to display property still need to add the radius setting part --- .../Display/Display_property_plugin.cpp | 77 ++++++++++++++++++- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 994dcd2e8d9b..ed0de184db33 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -22,11 +22,13 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -47,6 +49,8 @@ using namespace CGAL::Three; + + Viewer_interface* (&getActiveViewer)() = Three::activeViewer; class DockWidget @@ -99,6 +103,11 @@ class Display_property_plugin MAX_VALUE }; + enum CurvatureType { + MEAN_CURVATURE, + GAUSSIAN_CURVATURE + }; + public: bool applicable(QAction*) const Q_DECL_OVERRIDE { @@ -238,6 +247,14 @@ private Q_SLOTS: dock_widget->maxBox->setRange(0, 360); dock_widget->maxBox->setValue(0); } + else if (property_name == "Interpolated Corrected Gaussian Curvature" || + property_name == "Interpolated Corrected Mean Curvature") + { + dock_widget->minBox->setRange(-1000, 1000); + dock_widget->minBox->setValue(0); + dock_widget->maxBox->setRange(-1000, 1000); + dock_widget->maxBox->setValue(0); + } else if(property_name == "Scaled Jacobian") { dock_widget->minBox->setRange(-1000, 1000); @@ -432,11 +449,15 @@ private Q_SLOTS: dock_widget->propertyBox->addItems({"Smallest Angle Per Face", "Largest Angle Per Face", "Scaled Jacobian", - "Face Area"}); + "Face Area", + "Interpolated Corrected Mean Curvature", + "Interpolated Corrected Gaussian Curvature"}); property_simplex_types = { Property_simplex_type::FACE, Property_simplex_type::FACE, Property_simplex_type::FACE, - Property_simplex_type::FACE }; + Property_simplex_type::FACE, + Property_simplex_type::VERTEX, + Property_simplex_type::VERTEX }; detectSMScalarProperties(*(sm_item->face_graph())); } else if(ps_item) @@ -506,10 +527,15 @@ private Q_SLOTS: { CGAL_assertion(static_cast(dock_widget->propertyBox->count()) == property_simplex_types.size()); + const int property_index = dock_widget->propertyBox->currentIndex(); + // leave it flat if it was, otherwise set to flat+edges - if(sm_item->renderingMode() != Flat && sm_item->renderingMode() != FlatPlusEdges) + if(sm_item->renderingMode() != Flat && sm_item->renderingMode() != FlatPlusEdges && property_simplex_types.at(property_index) == Property_simplex_type::FACE) sm_item->setRenderingMode(FlatPlusEdges); + if(sm_item->renderingMode() != Gouraud && sm_item->renderingMode() != GouraudPlusEdges && property_simplex_types.at(property_index) == Property_simplex_type::VERTEX) + sm_item->setRenderingMode(GouraudPlusEdges); + const std::string& property_name = dock_widget->propertyBox->currentText().toStdString(); if(property_name == "Smallest Angle Per Face") { @@ -527,6 +553,14 @@ private Q_SLOTS: { displayArea(sm_item); } + else if(property_name == "Interpolated Corrected Mean Curvature") + { + displayCurvature(sm_item, MEAN_CURVATURE); + } + else if(property_name == "Interpolated Corrected Gaussian Curvature") + { + displayCurvature(sm_item, GAUSSIAN_CURVATURE); + } else { const int property_index = dock_widget->propertyBox->currentIndex(); @@ -629,6 +663,8 @@ private Q_SLOTS: removeDisplayPluginProperty(item, "f:display_plugin_largest_angle"); removeDisplayPluginProperty(item, "f:display_plugin_scaled_jacobian"); removeDisplayPluginProperty(item, "f:display_plugin_area"); + removeDisplayPluginProperty(item, "f:display_plugin_mean_curvature"); + removeDisplayPluginProperty(item, "f:display_plugin_gaussian_curvature"); } void displayExtremumAnglePerFace(Scene_surface_mesh_item* sm_item, @@ -809,6 +845,32 @@ private Q_SLOTS: displaySMProperty("f:display_plugin_area", *sm); } + void displayCurvature(Scene_surface_mesh_item* sm_item, + const CurvatureType curvature_type) + { + SMesh* sm = sm_item->face_graph(); + if(sm == nullptr) + return; + + bool not_initialized; + std::string tied_string = (curvature_type == MEAN_CURVATURE) ? + "v:display_plugin_mean_curvature" : "v:display_plugin_gaussian_curvature"; + + SMesh::Property_map vcurvature; + std::tie(vcurvature, not_initialized) = sm->add_property_map(tied_string, 0); + + if (curvature_type == MEAN_CURVATURE) + { + CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature(*sm, vcurvature); + } + else if (curvature_type == GAUSSIAN_CURVATURE) + { + CGAL::Polygon_mesh_processing::interpolated_corrected_Gaussian_curvature(*sm, vcurvature); + } + + displaySMProperty(tied_string, *sm); + } + private: template bool call_on_PS_property(const std::string& name, @@ -964,6 +1026,10 @@ private Q_SLOTS: zoomToSimplexWithPropertyExtremum(faces(mesh), mesh, "f:display_plugin_scaled_jacobian", extremum); else if(property_name == "Face Area") zoomToSimplexWithPropertyExtremum(faces(mesh), mesh, "f:display_plugin_area", extremum); + else if(property_name == "Interpolated Corrected Mean Curvature") + zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, "v:display_plugin_mean_curvature", extremum); + else if(property_name == "Interpolated Corrected Gaussian Curvature") + zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, "v:display_plugin_gaussian_curvature", extremum); else if(property_simplex_types.at(property_index) == Property_simplex_type::VERTEX) zoomToSimplexWithPropertyExtremum(vertices(mesh), mesh, property_name, extremum); else if(property_simplex_types.at(property_index) == Property_simplex_type::FACE) @@ -1298,7 +1364,10 @@ isSMPropertyScalar(const std::string& name, if(name == "f:display_plugin_smallest_angle" || name == "f:display_plugin_largest_angle" || name == "f:display_plugin_scaled_jacobian" || - name == "f:display_plugin_area") + name == "f:display_plugin_area" || + name == "f:display_plugin_mean_curvature" || + name == "f:display_plugin_gaussian_curvature") + return false; // the dispatch function does the filtering we want: if it founds a property From 46ac0f90604291123bacd57e40b9bfa8c9b2b044 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Sun, 27 Aug 2023 19:27:23 +0300 Subject: [PATCH 358/943] trim whitespaces --- .../demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index ed0de184db33..e5baf54cfd7e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -247,7 +247,7 @@ private Q_SLOTS: dock_widget->maxBox->setRange(0, 360); dock_widget->maxBox->setValue(0); } - else if (property_name == "Interpolated Corrected Gaussian Curvature" || + else if (property_name == "Interpolated Corrected Gaussian Curvature" || property_name == "Interpolated Corrected Mean Curvature") { dock_widget->minBox->setRange(-1000, 1000); From 49d6821d9bf3ad827ad664e739c90e0cd8c24909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 28 Aug 2023 13:51:57 +0200 Subject: [PATCH 359/943] accomodate update to c++17 STL --- Kernel_23/include/CGAL/Kernel/function_objects.h | 16 ++++++++-------- .../Polygon_mesh_processing/autorefinement.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Kernel_23/include/CGAL/Kernel/function_objects.h b/Kernel_23/include/CGAL/Kernel/function_objects.h index 8974b762dcb4..8309a3c97ce7 100644 --- a/Kernel_23/include/CGAL/Kernel/function_objects.h +++ b/Kernel_23/include/CGAL/Kernel/function_objects.h @@ -2211,8 +2211,8 @@ namespace CommonKernelFunctors { Plane plane3 = construct_plane(p3, q3, r3); const auto res = typename K::Intersect_3()(plane1, plane2, plane3); - CGAL_assertion(res!=boost::none); - const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(res!=std::nullopt); + const Point* e_pt = std::get_if(&(*res)); CGAL_assertion(e_pt!=nullptr); return *e_pt; } @@ -2221,8 +2221,8 @@ namespace CommonKernelFunctors { operator()(const Plane& plane1, const Plane& plane2, const Plane& plane3) const { const auto res = typename K::Intersect_3()(plane1, plane2, plane3); - CGAL_assertion(res!=boost::none); - const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(res!=std::nullopt); + const Point* e_pt = std::get_if(&(*res)); CGAL_assertion(e_pt!=nullptr); return *e_pt; } @@ -2245,8 +2245,8 @@ namespace CommonKernelFunctors { Segment s2 = construct_segment(p2, q2); const auto res = typename K::Intersect_3()(s1, s2); - CGAL_assertion(res!=boost::none); - const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(res!=std::nullopt); + const Point* e_pt = std::get_if(&(*res)); CGAL_assertion(e_pt!=nullptr); return *e_pt; } @@ -2255,8 +2255,8 @@ namespace CommonKernelFunctors { operator()(const Segment& s1, const Segment& s2) const { const auto res = typename K::Intersect_3()(s1, s2); - CGAL_assertion(res!=boost::none); - const Point* e_pt = boost::get(&(*res)); + CGAL_assertion(res!=std::nullopt); + const Point* e_pt = std::get_if(&(*res)); CGAL_assertion(e_pt!=nullptr); return *e_pt; } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 0fb843c31c00..b3133304bb96 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -292,8 +292,8 @@ void old_intersection_coplanar_triangles_cutoff(const typename Kernel::Point_3& CGAL_kernel_assertion_code(int pt_added = 0;) - const typename Kernel::Point_3* prev = &(*boost::prior(inter_pts.end())); - Iterator stop = inter_pts.size() > 2 ? inter_pts.end() : boost::prior(inter_pts.end()); + const typename Kernel::Point_3* prev = &(*std::prev(inter_pts.end())); + Iterator stop = inter_pts.size() > 2 ? inter_pts.end() : std::prev(inter_pts.end()); for(Iterator it=inter_pts.begin(); it!=stop; ++it) { const typename Kernel::Point_3& curr = *it; From 4fbcb937044844d9afb5f486f45bdd664704c366 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 28 Aug 2023 16:54:30 +0200 Subject: [PATCH 360/943] a few cleanups --- .../demo/Circular_kernel_3/CMakeLists.txt | 8 ++--- .../demo/Alpha_shapes_2/CMakeLists.txt | 12 +------ .../demo/Apollonius_graph_2/CMakeLists.txt | 19 ++++------- .../demo/Bounding_volumes/Bounding_volumes.ui | 2 +- .../demo/Bounding_volumes/CMakeLists.txt | 34 ++++--------------- 5 files changed, 17 insertions(+), 58 deletions(-) diff --git a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt index 3f46c3dcd935..2ed07a6904ec 100644 --- a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt +++ b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt @@ -12,18 +12,16 @@ endif() find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGL OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) - add_executable( - Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + add_executable(Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Circular_kernel_3) target_link_libraries(Circular_kernel_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 - Qt6::Widgets Qt6::OpenGL Qt6::OpenGLWidgets) + Qt6::Widgets Qt6::OpenGL) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Circular_kernel_3) diff --git a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt index 4049f54c00d5..f8e410b6a4ea 100644 --- a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt +++ b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt @@ -4,19 +4,9 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Alpha_shapes_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) -include_directories(BEFORE ./include) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) diff --git a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt index 9cf502573e57..a7bf703fb43b 100644 --- a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt +++ b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt @@ -15,25 +15,18 @@ endif() find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) - #-------------------------------- - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Apollonius_graph_2.ui) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Apollonius_graph_2.qrc) - - # use the Qt MOC preprocessor on classes that derives from QObject - - # The executable itself. - add_executable( - Apollonius_graph_2 Apollonius_graph_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Apollonius_graph_2 Apollonius_graph_2.cpp Apollonius_graph_2.ui + Apollonius_graph_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Apollonius_graph_2) diff --git a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.ui b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.ui index 6228db3d7178..73b0415f93c6 100644 --- a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.ui +++ b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.ui @@ -197,7 +197,7 @@ - icons/min_circle.pngicons/min_circle.png + :/cgal/Actions/icons/min_circle.png:/cgal/Actions/icons/min_circle.png Minimum Enclosing &Circle diff --git a/GraphicsView/demo/Bounding_volumes/CMakeLists.txt b/GraphicsView/demo/Bounding_volumes/CMakeLists.txt index 56ed6427701e..bdf70858d185 100644 --- a/GraphicsView/demo/Bounding_volumes/CMakeLists.txt +++ b/GraphicsView/demo/Bounding_volumes/CMakeLists.txt @@ -4,46 +4,24 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Bounding_volumes_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) -include_directories(BEFORE ./include) - +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_INCLUDE_CURRENT_DIR ON) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Bounding_volumes.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Bounding_volumes.qrc) - - # use the Qt MOC preprocessor on classes that derives from QObject - - # The executable itself. - add_executable( - Bounding_volumes Bounding_volumes.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Bounding_volumes Bounding_volumes.cpp Bounding_volumes.ui Bounding_volumes.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Bounding_volumes) target_link_libraries(Bounding_volumes PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 - Qt6::Gui) - - include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) - cgal_add_compilation_test(Bounding_volumes) + Qt6::Widgets) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Bounding_volumes) From 3a52549c410a87a8c01be35367d612809e1d9da9 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 29 Aug 2023 16:35:15 +0200 Subject: [PATCH 361/943] more cleanup of CMake scripts for Qt6 --- .../demo/Circular_kernel_3/CMakeLists.txt | 11 +---- .../demo/Alpha_shapes_2/CMakeLists.txt | 13 ++---- .../demo/Apollonius_graph_2/CMakeLists.txt | 9 ----- .../demo/Circular_kernel_2/CMakeLists.txt | 29 +++----------- GraphicsView/demo/Generator/CMakeLists.txt | 24 ++--------- GraphicsView/demo/GraphicsView/CMakeLists.txt | 13 +----- .../demo/L1_Voronoi_diagram_2/CMakeLists.txt | 25 +++--------- .../demo/Largest_empty_rect_2/CMakeLists.txt | 25 +++--------- .../Periodic_2_triangulation_2/CMakeLists.txt | 13 +----- GraphicsView/demo/Polygon/CMakeLists.txt | 25 ++---------- .../Segment_Delaunay_graph_2/CMakeLists.txt | 26 +++--------- .../CMakeLists.txt | 32 +++------------ .../demo/Snap_rounding_2/CMakeLists.txt | 27 +++---------- .../demo/Snap_rounding_2/Snap_rounding_2.qrc | 9 +++-- .../demo/Spatial_searching_2/CMakeLists.txt | 26 +++--------- .../demo/Stream_lines_2/CMakeLists.txt | 26 +++--------- .../demo/Triangulation_2/CMakeLists.txt | 40 ++++++------------- 17 files changed, 83 insertions(+), 290 deletions(-) diff --git a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt index 2ed07a6904ec..42cc885bbffa 100644 --- a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt +++ b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt @@ -1,22 +1,13 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Circular_kernel_3_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) - add_executable(Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp) + qt_add_executable(Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Circular_kernel_3) diff --git a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt index f8e410b6a4ea..39e6c10e48ba 100644 --- a/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt +++ b/GraphicsView/demo/Alpha_shapes_2/CMakeLists.txt @@ -12,17 +12,12 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) - - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Alpha_shapes_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Alpha_shapes_2.qrc) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) # The executable itself. - add_executable( - Alpha_shapes_2 Alpha_shapes_2.cpp ${DT_UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Alpha_shapes_2 Alpha_shapes_2.cpp Alpha_shapes_2.ui Alpha_shapes_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shapes_2) diff --git a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt index a7bf703fb43b..219466b79416 100644 --- a/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt +++ b/GraphicsView/demo/Apollonius_graph_2/CMakeLists.txt @@ -4,15 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Apollonius_graph_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Qt6 QUIET COMPONENTS Widgets) diff --git a/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt b/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt index 054e5feeedb4..940c5bcc27d3 100644 --- a/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt +++ b/GraphicsView/demo/Circular_kernel_2/CMakeLists.txt @@ -4,37 +4,20 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Circular_kernel_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Circular_kernel_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Circular_kernel_2.qrc) - - # use the Qt MOC preprocessor on classes that derives from QObject - - # The executable itself. - add_executable( - Circular_kernel_2 Circular_kernel_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) - + qt_add_executable( + Circular_kernel_2 Circular_kernel_2.cpp + Circular_kernel_2.ui Circular_kernel_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Circular_kernel_2) target_link_libraries(Circular_kernel_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 diff --git a/GraphicsView/demo/Generator/CMakeLists.txt b/GraphicsView/demo/Generator/CMakeLists.txt index 2b6dbe1c77be..cea168a2c9d9 100644 --- a/GraphicsView/demo/Generator/CMakeLists.txt +++ b/GraphicsView/demo/Generator/CMakeLists.txt @@ -3,15 +3,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Generator_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) @@ -21,18 +12,11 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Generator_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Generator_2.qrc) - - # use the Qt MOC preprocessor on classes that derives from QObject - - # The executable itself. - add_executable(Generator_2 Generator_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable(Generator_2 Generator_2.cpp + Generator_2.ui Generator_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Generator_2) diff --git a/GraphicsView/demo/GraphicsView/CMakeLists.txt b/GraphicsView/demo/GraphicsView/CMakeLists.txt index 771f3225dd64..aa84ba549cb6 100644 --- a/GraphicsView/demo/GraphicsView/CMakeLists.txt +++ b/GraphicsView/demo/GraphicsView/CMakeLists.txt @@ -3,25 +3,16 @@ cmake_minimum_required(VERSION 3.1...3.23) project(GraphicsView_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) - add_executable(min min.cpp ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable(min min.cpp) add_to_cached_list(CGAL_EXECUTABLE_TARGETS min) diff --git a/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt b/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt index e8c2499c325e..058ac7ad55b3 100644 --- a/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt +++ b/GraphicsView/demo/L1_Voronoi_diagram_2/CMakeLists.txt @@ -4,18 +4,9 @@ cmake_minimum_required(VERSION 3.1...3.23) project(L1_Voronoi_diagram_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) include_directories(BEFORE ./include) if(CGAL_Qt6_FOUND AND Qt6_FOUND) @@ -23,17 +14,13 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES L1_voronoi_diagram_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./L1_voronoi_diagram_2.qrc) - # The executable itself. - add_executable( - L1_voronoi_diagram_2 L1_voronoi_diagram_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + L1_voronoi_diagram_2 L1_voronoi_diagram_2.cpp + L1_voronoi_diagram_2.ui L1_voronoi_diagram_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS L1_voronoi_diagram_2) diff --git a/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt b/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt index 8fedcbb9f469..275095d4b70d 100644 --- a/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt +++ b/GraphicsView/demo/Largest_empty_rect_2/CMakeLists.txt @@ -4,35 +4,22 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Largest_empty_rect_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Largest_empty_rectangle_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Largest_empty_rectangle_2.qrc) - # The executable itself. - add_executable( - Largest_empty_rectangle_2 Largest_empty_rectangle_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Largest_empty_rectangle_2 Largest_empty_rectangle_2.cpp + Largest_empty_rectangle_2.ui Largest_empty_rectangle_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Largest_empty_rectangle_2) diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt index f8acebb2ee4c..f6b0698e4cba 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt @@ -1,18 +1,9 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Periodic_2_triangulation_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) include_directories(BEFORE ./include) if(CGAL_Qt6_FOUND AND Qt6_FOUND) @@ -35,7 +26,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) source_group("QT" FILES ${QT_headers}) # The executable itself. - add_executable( + qt_add_executable( Periodic_2_Delaunay_triangulation_2 Periodic_2_Delaunay_triangulation_2.cpp ${DT_UI_FILES} diff --git a/GraphicsView/demo/Polygon/CMakeLists.txt b/GraphicsView/demo/Polygon/CMakeLists.txt index db1fe276a5ea..341021360a39 100644 --- a/GraphicsView/demo/Polygon/CMakeLists.txt +++ b/GraphicsView/demo/Polygon/CMakeLists.txt @@ -4,15 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polygon_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) @@ -28,23 +19,15 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) if(CGAL_Core_FOUND) add_definitions(-DCGAL_USE_CORE) endif() - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Polygon_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Polygon_2.qrc) - - # add_library( CGAL SHARED IMPORTED ) - # SET_PROPERTY(TARGET CGAL PROPERTY IMPORTED_LOCATION ${CGAL_LIBRARY} ) - - # The executable itself. - add_executable(Polygon_2 Polygon_2.cpp ${DT_UI_FILES} ${DT_RESOURCE_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable(Polygon_2 Polygon_2.cpp + Polygon_2.ui Polygon_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Polygon_2) diff --git a/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt b/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt index 7a947227eece..463f5a424c11 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt +++ b/GraphicsView/demo/Segment_Delaunay_graph_2/CMakeLists.txt @@ -4,37 +4,23 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Segment_Delaunay_graph_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) include_directories(BEFORE ./include) if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) - # UI files (Qt Designer files) - qt6_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Segment_voronoi_2.qrc) - # The executable itself. - add_executable( - Segment_voronoi_2 Segment_voronoi_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Segment_voronoi_2 Segment_voronoi_2.cpp + Segment_voronoi_2.ui Segment_voronoi_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Segment_voronoi_2) diff --git a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt index e3cb33be16c0..980aa3401a2a 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt +++ b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt @@ -4,40 +4,20 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Segment_Delaunay_graph_Linf_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) -set(QT_USE_QTXML TRUE) -set(QT_USE_QTMAIN TRUE) -set(QT_USE_QTSCRIPT TRUE) -set(QT_USE_QTOPENGL TRUE) - -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) include_directories(BEFORE ./include) if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) - include(${CGAL_USE_FILE}) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) add_definitions(-DQT_NO_KEYWORDS) - # UI files (Qt Designer files) - qt6_wrap_ui(CDT_UI_FILES Segment_voronoi_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Segment_voronoi_2.qrc) - - # The executable itself. - add_executable( - Segment_voronoi_linf_2 Segment_voronoi_linf_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Segment_voronoi_linf_2 Segment_voronoi_linf_2.cpp + Segment_voronoi_2.ui Segment_voronoi_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Segment_voronoi_linf_2) diff --git a/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt index 896dfc63b086..ab1015f2fc36 100644 --- a/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt +++ b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt @@ -4,34 +4,19 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Snap_rounding_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Widgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) add_definitions(-DQT_NO_KEYWORDS) - set(CMAKE_INCLUDE_CURRENT_DIR ON) - - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Snap_rounding_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Snap_rounding_2.qrc) - # The executable itself. - add_executable( - Snap_rounding_2 Snap_rounding_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Snap_rounding_2 Snap_rounding_2.cpp + Snap_rounding_2.ui Snap_rounding_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Snap_rounding_2) diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc index 7604c41cc813..b4307047176a 100644 --- a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc @@ -1,8 +1,11 @@ - + + icons/grid.png + icons/snapped.png + icons/unsnapped.png - - ../resources/about_CGAL.html + + ../resources/about_CGAL.html about_Snap_rounding_2.html diff --git a/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt b/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt index 55770b5f4c3a..78c6acd254de 100644 --- a/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt +++ b/GraphicsView/demo/Spatial_searching_2/CMakeLists.txt @@ -4,35 +4,21 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Spatial_searching_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Spatial_searching_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Spatial_searching_2.qrc) - - # The executable itself. - add_executable( - Spatial_searching_2 Spatial_searching_2.cpp ${DT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Spatial_searching_2 Spatial_searching_2.cpp + Spatial_searching_2.ui Spatial_searching_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Spatial_searching_2) diff --git a/GraphicsView/demo/Stream_lines_2/CMakeLists.txt b/GraphicsView/demo/Stream_lines_2/CMakeLists.txt index 71deef9e9100..f3f3133898a1 100644 --- a/GraphicsView/demo/Stream_lines_2/CMakeLists.txt +++ b/GraphicsView/demo/Stream_lines_2/CMakeLists.txt @@ -4,35 +4,21 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Stream_lines_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(DT_UI_FILES Stream_lines_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Stream_lines_2.qrc) - - # The executable itself. - add_executable( - Stream_lines_2 Stream_lines_2.cpp ${DT_UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + qt_add_executable( + Stream_lines_2 Stream_lines_2.cpp + Stream_lines_2.ui Stream_lines_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Stream_lines_2) diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index 6ee55850f86d..a3ff3a16dd43 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -4,16 +4,9 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Triangulation_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - -set(CMAKE_AUTOMOC TRUE) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR TRUE) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) @@ -31,13 +24,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # The "constrained Delaunay" demo: Constrained_Delaunay_triangulation_2 #-------------------------------- -qt6_add_resources(CD_RES_FILE Constrained_Delaunay_triangulation_2.qrc) -qt6_wrap_ui(CD_UI_FILES Constrained_Delaunay_triangulation_2.ui) -# The executable itself. -add_executable( +qt_add_executable( Constrained_Delaunay_triangulation_2 - Constrained_Delaunay_triangulation_2.cpp ${CD_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CD_RES_FILE}) + Constrained_Delaunay_triangulation_2.cpp + Constrained_Delaunay_triangulation_2.ui Constrained_Delaunay_triangulation_2.qrc) target_link_libraries(Constrained_Delaunay_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) target_include_directories(Constrained_Delaunay_triangulation_2 @@ -48,12 +38,9 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2) #-------------------------------- # The "Delaunay" demo: Delaunay_triangulation_2 #-------------------------------- -qt6_wrap_ui(D_UI_FILES Delaunay_triangulation_2.ui) -qt6_add_resources(D_RES_FILE Delaunay_triangulation_2.qrc) -# The executable itself. -add_executable( - Delaunay_triangulation_2 Delaunay_triangulation_2.cpp ${D_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${D_RES_FILE}) +qt_add_executable( + Delaunay_triangulation_2 Delaunay_triangulation_2.cpp + Delaunay_triangulation_2.ui Delaunay_triangulation_2.qrc) target_link_libraries(Delaunay_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) @@ -63,12 +50,9 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2) # The "Regular" demo: Regular_triangulation_2 #-------------------------------- -# The executable itself. -qt6_add_resources(R_RES_FILE Regular_triangulation_2.qrc) -qt6_wrap_ui(R_UI_FILES Regular_triangulation_2.ui) -add_executable( - Regular_triangulation_2 Regular_triangulation_2.cpp ${R_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${R_RES_FILE}) +qt_add_executable( + Regular_triangulation_2 Regular_triangulation_2.cpp + Regular_triangulation_2.ui Regular_triangulation_2.qrc) target_link_libraries(Regular_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) From 7af862ec8a0194e9943caf3d6df44e15d830a6c8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 29 Aug 2023 16:55:28 +0200 Subject: [PATCH 362/943] fix trailing space --- GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt index 980aa3401a2a..842ed5ff23bb 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt +++ b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/CMakeLists.txt @@ -16,7 +16,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) qt_add_executable( - Segment_voronoi_linf_2 Segment_voronoi_linf_2.cpp + Segment_voronoi_linf_2 Segment_voronoi_linf_2.cpp Segment_voronoi_2.ui Segment_voronoi_2.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Segment_voronoi_linf_2) From 1f13a625b11732ec9240e3249c1a279a08556a18 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 30 Aug 2023 09:32:17 +0200 Subject: [PATCH 363/943] restore the OpenGL format in DemosMainWindow That still does not work well when the widget is a `QOpenGLWidget`. We probably need to derive from that class, to call `glClearColor(..)` in the `paintGL()` method. --- .../include/CGAL/Qt/CreateOpenGLContext.h | 12 ++++-------- .../include/CGAL/Qt/DemosMainWindow_impl.h | 15 +++++++++------ GraphicsView/include/CGAL/Qt/debug_impl.h | 1 - GraphicsView/include/CGAL/Qt/qglviewer.h | 2 -- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 1 - 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h b/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h index e85911f73e87..5c37bffe9a05 100644 --- a/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h +++ b/GraphicsView/include/CGAL/Qt/CreateOpenGLContext.h @@ -19,16 +19,12 @@ namespace Qt{ inline QOpenGLContext* createOpenGLContext() { QOpenGLContext *context = new QOpenGLContext(); + QSurfaceFormat format; + format.setVersion(2,1); + format.setProfile(QSurfaceFormat::CompatibilityProfile); + context->setFormat(format); context->create(); return context; - - //QSurfaceFormat format; - //format.setVersion(2,1); - //format.setProfile(QSurfaceFormat::CompatibilityProfile); - //context->setFormat(format); - //QGLContext *result = QGLContext::fromOpenGLContext(context); - // result->create(); - //return result; } } // namespace Qt } // namespace CGAL diff --git a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h index 9b1761e6b868..8b6cb174703c 100644 --- a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h +++ b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h @@ -208,19 +208,22 @@ void DemosMainWindow::setUseOpenGL(bool checked) { if(checked) { - // AF QOpenGLWidget* new_viewport = new QOpenGLWidget; + QOpenGLWidget* new_viewport = new QOpenGLWidget(this); + new_viewport->setUpdateBehavior(QOpenGLWidget::NoPartialUpdate); // Setup the format to allow antialiasing with OpenGL: // one need to activate the SampleBuffers, if the graphic driver allows // this. - // AF QGLFormat glformat = new_viewport->format(); - // AF glformat.setOption(QGL::SampleBuffers); - // AF new_viewport->setFormat(glformat); + auto glformat = new_viewport->format(); + glformat.setSamples(4); + new_viewport->setFormat(glformat); - // AF view->setViewport(new_viewport); + view->setViewport(new_viewport); + view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); } else { - view->setViewport(new QWidget); + view->setViewport(new QWidget(this)); + view->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate); } statusBar()->showMessage(tr("OpenGL %1activated").arg(checked?"":"de-"), 1000); diff --git a/GraphicsView/include/CGAL/Qt/debug_impl.h b/GraphicsView/include/CGAL/Qt/debug_impl.h index 4f3c152697c6..a9e0d6da5b1a 100644 --- a/GraphicsView/include/CGAL/Qt/debug_impl.h +++ b/GraphicsView/include/CGAL/Qt/debug_impl.h @@ -23,7 +23,6 @@ #include #include #include -#include #include namespace CGAL { namespace Qt { diff --git a/GraphicsView/include/CGAL/Qt/qglviewer.h b/GraphicsView/include/CGAL/Qt/qglviewer.h index a89a66a4b744..8ee3b4135f29 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer.h @@ -70,8 +70,6 @@ class CGAL_QT_EXPORT QGLViewer : public QOpenGLWidget, public QOpenGLFunctions { Q_OBJECT public: - //todo check if this is used. If not remove it - explicit QGLViewer(QOpenGLContext* context, QWidget *parent = nullptr, ::Qt::WindowFlags flags = ::Qt::WindowType(0)); explicit QGLViewer(QWidget *parent = nullptr, diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index b6bfc70e9ac3..3cca531c5fb2 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -2446,7 +2446,6 @@ void CGAL::QGLViewer::setMouseBinding(::Qt::Key key, ::Qt::KeyboardModifiers mod ClickBindingPrivate cbp(modifiers, button, false, ::Qt::NoButton, key); clickBinding_.remove(cbp); - } From 4740f81a1b706af3c8ecd6153f24d6d3fbd5b3fe Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 31 Aug 2023 15:43:44 +0200 Subject: [PATCH 364/943] add a target to compile all CGALlab --- Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index dea8e54d2b0a..f4129a57c9fc 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -64,6 +64,10 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) if(TARGET Polyhedron_3) add_dependencies( ${plugin_name} Polyhedron_3 ) endif() + if(NOT TARGET CGALlab_all_plugins) + add_custom_target(CGALlab_all_plugins) + endif() + add_dependencies(CGALlab_all_plugins ${plugin_name}) #metadata management #create "${plugin_implementation_base_name}.json" in BINARY_DIR STRING(TOLOWER "${plugin_implementation_base_name}.json" base_name) From 4dc2ad3f36a9f2023e3e0ceaa5e44bf38b7332ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 4 Sep 2023 14:05:18 +0200 Subject: [PATCH 365/943] fix map type --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index b3133304bb96..32765252a6f2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1480,12 +1480,13 @@ void autorefine_triangle_soup(PointRange& soup_points, // TODO: reuse the fact that maps per triangle are already sorted #ifdef CGAL_LINKED_WITH_TBB - std::conditional_t, - std::map> point_id_map; + typedef std::conditional_t, + std::map> Point_id_map; #else - std::map point_id_map; + typedef std::map Point_id_map; #endif + Point_id_map point_id_map; #if ! defined(CGAL_NDEBUG) || defined(CGAL_DEBUG_PMP_AUTOREFINE) std::vector exact_soup_points; @@ -1605,7 +1606,7 @@ void autorefine_triangle_soup(PointRange& soup_points, #else //option 2 (without mutex) /// Lambda concurrent_get_point_id() - tbb::concurrent_vector::iterator> iterators; + tbb::concurrent_vector iterators; auto concurrent_get_point_id = [&](const typename EK::Point_3 pt) { auto insert_res = point_id_map.insert(std::make_pair(pt, -1)); @@ -1616,7 +1617,7 @@ void autorefine_triangle_soup(PointRange& soup_points, //use map iterator triple for triangles to create them concurrently and safely soup_triangles_out.resize(offset + new_triangles.size()); - std::vector::iterator, 3>> triangle_buffer(new_triangles.size()); + std::vector> triangle_buffer(new_triangles.size()); tbb::parallel_for(tbb::blocked_range(0, new_triangles.size()), [&](const tbb::blocked_range& r) { for (size_t ti = r.begin(); ti != r.end(); ++ti) { From 9d68f5350e491bb1b23a42f14027285477a18780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 4 Sep 2023 14:58:47 +0200 Subject: [PATCH 366/943] doc + changes --- Installation/CHANGES.md | 6 ++++++ .../include/CGAL/Polygon_mesh_processing/autorefinement.h | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 479984002682..b361d15dec76 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -35,6 +35,12 @@ Release date: October 2023 - Removed the class templates `Gray_image_mesh_domain_3`, `Implicit_mesh_domain_3`, and `Labeled_image_mesh_domain_3` which are deprecated since CGAL-4.13. +### [Polygon Mesh Processing](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolygonMeshProcessing) + +- Added the function + `CGAL::Polygon_mesh_processing::autorefine_triangle_soup()` that refines a soup of triangles so that no pair of triangles intersects + (they can share an edge or a vertex). Also added, the function `autorefine()` operating directly on a triangle mesh and updating it + using the aforementioned function on triangle soup. [Release 5.6](https://github.com/CGAL/cgal/releases/tag/v5.6) ----------- diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 32765252a6f2..884ce3477aa8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1128,8 +1128,9 @@ void generate_subtriangles(std::size_t ti, /** * \ingroup PMP_corefinement_grp * -* refines a soup of triangles so that no pair of triangles intersects in their interior. -* Note that points in `soup_points` can only be added (intersection points) a the end of the container, with the initial order preserved. +* refines a soup of triangles so that no pair of triangles intersects. +* Output triangles may share a common edge or a common vertex (but with the same indexed position in `points`). +* Note that points in `soup_points` can only be added (intersection points) at the end of the container, with the initial order preserved. * Note that if `soup_points` contains two or more identical points and only the first copy (following the order in the `soup_points`) * will be used in `soup_triangles`. * `soup_triangles` will be updated to contain both the input triangles and the new subdivides triangles. Degenerate triangles will be removed. From 0303b8dfd5eb99acb0668ff02e5e22c4d2c60424 Mon Sep 17 00:00:00 2001 From: Nicolas Saillant Date: Tue, 5 Sep 2023 15:58:43 +0200 Subject: [PATCH 367/943] Update CMakeLists for QT6 --- .../Polyline_simplification_2/CMakeLists.txt | 27 +++++-------------- .../Surface_mesh_deformation/CMakeLists.txt | 5 ---- .../demo/Triangulation_3/CMakeLists.txt | 25 +++++------------ 3 files changed, 12 insertions(+), 45 deletions(-) diff --git a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt index 90254ff949da..db32bac7b395 100644 --- a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt +++ b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt @@ -4,39 +4,24 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Polyline_simplification_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) set(CMAKE_INCLUDE_CURRENT_DIR ON) -find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Widgets) +find_package(Qt6 QUIET COMPONENTS Widgets) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include) if(CGAL_Qt6_FOUND AND Qt6_FOUND) - set(CMAKE_AUTOMOC ON) - add_definitions(-DQT_NO_KEYWORDS) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # UI files (Qt Designer files) - qt6_wrap_ui(CDT_UI_FILES Polyline_simplification_2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.qrc) # The executable itself. - add_executable( + qt_add_executable( Polyline_simplification_2 - ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.cpp ${CDT_UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} ${CGAL_Qt6_MOC_FILES}) + Polyline_simplification_2.cpp Polyline_simplification_2.ui Polyline_simplification_2.qrc) target_link_libraries(Polyline_simplification_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) diff --git a/Surface_mesh_deformation/demo/Surface_mesh_deformation/CMakeLists.txt b/Surface_mesh_deformation/demo/Surface_mesh_deformation/CMakeLists.txt index 33263a815435..3f5e0bdb430e 100644 --- a/Surface_mesh_deformation/demo/Surface_mesh_deformation/CMakeLists.txt +++ b/Surface_mesh_deformation/demo/Surface_mesh_deformation/CMakeLists.txt @@ -4,11 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Surface_mesh_deformation_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - set_property(DIRECTORY PROPERTY CGAL_NO_TESTING TRUE) find_package(CGAL REQUIRED) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index bce91a5a51b3..1058b455a761 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -4,14 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Triangulation_3_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -20,7 +12,7 @@ set(CMAKE_AUTOMOC ON) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets OpenGL) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) if(Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) @@ -48,24 +40,19 @@ endif() if(CGAL_Qt6_FOUND AND Qt6_FOUND) include_directories(BEFORE ./) - - # ui files, created with Qt Designer - qt6_wrap_ui(uis MainWindow.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./T3_demo.qrc) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) # cpp files - add_executable( + qt_add_executable( T3_demo T3_demo.cpp MainWindow.cpp Viewer.cpp PreferenceDlg.cpp Scene.cpp - ${uis} - ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + MainWindow.ui + T3_demo.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS T3_demo) From 167db62e0753cf73965e97eccbe6b2545e96d59c Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:50:39 +0300 Subject: [PATCH 368/943] moved bib to cgal_manual.bib & restored geom.bib --- Documentation/doc/biblio/cgal_manual.bib | 23 +++++++++++++++++ Documentation/doc/biblio/geom.bib | 25 +------------------ .../Polygon_mesh_processing.txt | 10 ++++---- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Documentation/doc/biblio/cgal_manual.bib b/Documentation/doc/biblio/cgal_manual.bib index 89d062ddddf5..453f1968678e 100644 --- a/Documentation/doc/biblio/cgal_manual.bib +++ b/Documentation/doc/biblio/cgal_manual.bib @@ -1331,6 +1331,29 @@ @INPROCEEDINGS{cgal:la-srpss-13 address = {Girona, Spain} } +@article{cgal:lrtc-iccmps-20, + author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert and David Coeurjolly}, + journal = {Computer Graphics Forum (Proceedings of Symposium on Geometry Processing)}, + number = {5}, + title = {Interpolated Corrected Curvature Measures for Polygonal Surfaces}, + volume = {39}, + month = aug, + year = {2020}, + url = {https://doi.org/10.1111/cgf.14067}, + doi = {10.1111/cgf.14067} +} + +@article{cgal:lrt-ccm-22, + author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert}, + journal = {Discrete & Computational Geometry}, + title = {Corrected Curvature Measures}, + volume = {68}, + pages = {477-524}, + month = jul, + year = {2022}, + url = {https://doi.org/10.1007/s00454-022-00399-4} +} + @article{cgal:lm-clscm-12, author = {Lafarge, Florent and Mallet, Clement}, title = {{Creating large-scale city models from 3D-point clouds: a robust approach with hybrid representation}}, diff --git a/Documentation/doc/biblio/geom.bib b/Documentation/doc/biblio/geom.bib index f072116a2e27..5d6a1f80b0c4 100644 --- a/Documentation/doc/biblio/geom.bib +++ b/Documentation/doc/biblio/geom.bib @@ -152043,7 +152043,6 @@ @article{cvl-ew-12 Pages = {215--224}, Year = {2012}, Url = {https://monge.univ-mlv.fr/~colinde/pub/09edgewidth.pdf} -} @inproceedings{tang2009interactive, title={Interactive Hausdorff distance computation for general polygonal models}, @@ -152054,26 +152053,4 @@ @inproceedings{tang2009interactive pages={74}, year={2009}, organization={ACM} -} - -@article{lachaud2020, - author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert and David Coeurjolly}, - journal = {Computer Graphics Forum (Proceedings of Symposium on Geometry Processing)}, - number = {5}, - title = {Interpolated corrected curvature measures for polygonal surfaces}, - volume = {39}, - month = jul, - year = {2020} -} - -@article{lachaud2022 - author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert}, - journal = {Discrete & Computational Geometry}, - title = {Corrected Curvature Measures}, - volume = {68}, - pages = {477-524}, - month = jul, - year = {2022}, - url = {https://doi.org/10.1007/s00454-022-00399-4} -} - +} \ No newline at end of file diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 9773216f3cb6..d81a1f6029e4 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -940,7 +940,7 @@ not provide storage for the normals. \section PMPICC Computing Curvatures This package provides methods to compute curvatures on polygonal meshes based on Interpolated -Corrected Curvatures on Polyhedral Surfaces \cgalCite{lachaud2020}. This includes mean curvature, +Corrected Curvatures on Polyhedral Surfaces \cgalCite{cgal:lrtc-iccmps-20}. This includes mean curvature, Gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces (for n-gons, the centroid must be inside the n-gon face). The algorithms used prove to work well in general. Also, on meshes with noise on vertex positions, @@ -955,10 +955,10 @@ in each direction is called the principal curvature: \f$ k_1 \f$ and \f$ k_2 \f$ curvatures). Curvature is usually expressed as scalar quantities like the mean curvature \f$ H \f$ and the Gaussian curvature \f$ K \f$ which are defined in terms of the principal curvatures. -The algorithms are based on the two papers \cgalCite{lachaud2022} and \cgalCite{lachaud2020}. They -introduce a new way to compute curvatures on polygonal meshes. The main idea in \cgalCite{lachaud2022} is +The algorithms are based on the two papers \cgalCite{cgal:lrt-ccm-22} and \cgalCite{cgal:lrtc-iccmps-20}. They +introduce a new way to compute curvatures on polygonal meshes. The main idea in \cgalCite{cgal:lrt-ccm-22} is based on decoupling the normal information from the position information, which is useful for dealing with -digital surfaces, or meshes with noise on vertex positions. \cgalCite{lachaud2020} introduces some +digital surfaces, or meshes with noise on vertex positions. \cgalCite{cgal:lrtc-iccmps-20} introduces some extensions to this framework. As it uses linear interpolation on the corrected normal vector field to derive new closed form equations for the corrected curvature measures. These interpolated curvature measures are the first step for computing the curvatures. For a triangle \f$ \tau_{ijk} \f$, @@ -1285,7 +1285,7 @@ is covered by a set of prisms, where each prism is an offset for an input triang That is, the implementation in \cgal does not use indirect predicates. The interpolated corrected curvatures were implemented during GSoC 2022. This was implemented by Hossam Saeed and under -supervision of David Coeurjolly, Jaques-Olivier Lachaud, and Sébastien Loriot. The implementation is based on \cgalCite{lachaud2020}. +supervision of David Coeurjolly, Jaques-Olivier Lachaud, and Sébastien Loriot. The implementation is based on \cgalCite{cgal:lrtc-iccmps-20}. DGtal's implementation was also used as a reference during the project. From 72fd73e2b7f4db9e9b4c1f20cdfaddfafe6ee05f Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:51:28 +0300 Subject: [PATCH 369/943] Update geom.bib --- Documentation/doc/biblio/geom.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/doc/biblio/geom.bib b/Documentation/doc/biblio/geom.bib index 5d6a1f80b0c4..969a1a79b5ba 100644 --- a/Documentation/doc/biblio/geom.bib +++ b/Documentation/doc/biblio/geom.bib @@ -152053,4 +152053,4 @@ @inproceedings{tang2009interactive pages={74}, year={2009}, organization={ACM} -} \ No newline at end of file +} From 5ddcf716b618c7683e6427e6310e7b361d6177d1 Mon Sep 17 00:00:00 2001 From: hoskillua <47090776+hoskillua@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:52:34 +0300 Subject: [PATCH 370/943] fixed order in bib --- Documentation/doc/biblio/cgal_manual.bib | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Documentation/doc/biblio/cgal_manual.bib b/Documentation/doc/biblio/cgal_manual.bib index 453f1968678e..5fc304486601 100644 --- a/Documentation/doc/biblio/cgal_manual.bib +++ b/Documentation/doc/biblio/cgal_manual.bib @@ -1331,6 +1331,16 @@ @INPROCEEDINGS{cgal:la-srpss-13 address = {Girona, Spain} } +@article{cgal:lm-clscm-12, + author = {Lafarge, Florent and Mallet, Clement}, + title = {{Creating large-scale city models from 3D-point clouds: a robust approach with hybrid representation}}, + journal = {International Journal of Computer Vision}, + volume = {99}, + number = {1}, + pages = {69-85}, + year = {2012}, +} + @article{cgal:lrtc-iccmps-20, author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert and David Coeurjolly}, journal = {Computer Graphics Forum (Proceedings of Symposium on Geometry Processing)}, @@ -1354,16 +1364,6 @@ @article{cgal:lrt-ccm-22 url = {https://doi.org/10.1007/s00454-022-00399-4} } -@article{cgal:lm-clscm-12, - author = {Lafarge, Florent and Mallet, Clement}, - title = {{Creating large-scale city models from 3D-point clouds: a robust approach with hybrid representation}}, - journal = {International Journal of Computer Vision}, - volume = {99}, - number = {1}, - pages = {69-85}, - year = {2012}, -} - @inproceedings{ cgal:lt-fmeps-98, author = "Peter Lindstrom and Greg Turk", title = "Fast and memory efficient polygonal simplification", From b286df4b96923e23d4bb72dce15839fc04999c28 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 8 Sep 2023 11:49:32 +0200 Subject: [PATCH 371/943] fix warnings (and ASAN errors) --- .../Arrangement_on_surface_2/PropertyValueDelegate.cpp | 2 +- .../examples/Arrangement_on_surface_2/draw_arr.cpp | 8 +++----- .../include/CGAL/Curved_kernel_via_analysis_2/Point_2.h | 8 ++++---- .../demo/Periodic_3_triangulation_3/MainWindow.h | 6 +++--- .../demo/Periodic_Lloyd_3/MainWindow.cpp | 2 +- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/PropertyValueDelegate.cpp b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/PropertyValueDelegate.cpp index 0f2dbb004986..ba47beb81df0 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/PropertyValueDelegate.cpp +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/PropertyValueDelegate.cpp @@ -22,7 +22,7 @@ PropertyValueDelegate::PropertyValueDelegate( QObject* parent ): QItemEditorFactory* factory = new QItemEditorFactory; QItemEditorCreatorBase* creator = new QStandardItemEditorCreator< PositiveSpinBox >( ); - factory->registerEditor( QVariant::UInt, creator ); + factory->registerEditor( QMetaType::UInt, creator ); this->setItemEditorFactory( factory ); } diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp index 8c3c9b4daf85..91da88edc68a 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/draw_arr.cpp @@ -22,8 +22,8 @@ std::tuple hsv_to_rgb(float hue, float sat, float value) { float red, green, blue; float fc = value * sat; // Chroma - float hue_prime = fmod(hue / 60.0f, 6); - float fx = fc * (1.0f - fabs(fmod(hue_prime, 2) - 1.0)); + float hue_prime = fmod(hue / 60.0f, 6.f); + float fx = fc * (1.0f - fabs(fmod(hue_prime, 2.f) - 1.f)); float fm = value - fc; if(0 <= hue_prime && hue_prime < 1) { @@ -104,9 +104,7 @@ int main() { float h = 360.0f * id++ / arr.number_of_faces(); float s = 0.5; float v = 0.5; - float r, g, b; - typedef unsigned char uchar; - std::tie(r, g, b) = hsv_to_rgb(h, s, v); + auto [r, g, b] = hsv_to_rgb(h, s, v); return CGAL::IO::Color(r,g,b); }, "hsv colors", true); diff --git a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h index 789f24b841e4..f64c67b70eac 100644 --- a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h @@ -736,13 +736,13 @@ class Point_2 : swallow(is, '('); // read values - is >> iformat(rep._m_xy); + is >> IO::iformat(rep._m_xy); swallow(is, ','); - is >> iformat(rep._m_x); + is >> IO::iformat(rep._m_x); swallow(is, ','); - is >> iformat(rep._m_curve); + is >> IO::iformat(rep._m_curve); swallow(is, ','); - is >> iformat(rep._m_arcno); + is >> IO::iformat(rep._m_arcno); swallow(is, ','); is >> rep._m_location; diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h index 0972fe6db4c1..79b3e5bec140 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h @@ -103,15 +103,15 @@ class MainWindow : public QMainWindow } ~MainWindow() { - delete(ui); - delete(s); process->close(); delete(process); + delete(s); + delete(ui); } public Q_SLOTS: void help() { - QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QString app = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QDir::separator(); #if !defined(Q_OS_MAC) app += QString("assistant"); diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/MainWindow.cpp b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/MainWindow.cpp index 8287214bbcfa..f4eb7aeb793a 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/MainWindow.cpp +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/MainWindow.cpp @@ -204,7 +204,7 @@ MainWindow::newPoints(int n) } void MainWindow::help() { - QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QString app = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QDir::separator(); #if !defined(Q_OS_MAC) app += QString("assistant"); From a4136707b24d991c7694018b6d0ac83e7da82757 Mon Sep 17 00:00:00 2001 From: Nicolas Saillant Date: Mon, 11 Sep 2023 09:51:06 +0200 Subject: [PATCH 372/943] More CMakeLists Updates for QT6 --- GraphicsView/demo/Generator/CMakeLists.txt | 2 +- .../Periodic_3_triangulation_3/CMakeLists.txt | 24 ++++--------------- .../demo/Periodic_Lloyd_3/CMakeLists.txt | 23 ++++-------------- .../CMakeLists.txt | 9 +++---- .../Polyline_simplification_2/CMakeLists.txt | 2 -- .../Triangulation_on_sphere_2/CMakeLists.txt | 17 +++---------- 6 files changed, 17 insertions(+), 60 deletions(-) diff --git a/GraphicsView/demo/Generator/CMakeLists.txt b/GraphicsView/demo/Generator/CMakeLists.txt index cea168a2c9d9..6a3c0d9a4ac0 100644 --- a/GraphicsView/demo/Generator/CMakeLists.txt +++ b/GraphicsView/demo/Generator/CMakeLists.txt @@ -5,7 +5,7 @@ project(Generator_Demo) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt index d2cfa5ea7706..da044276aec7 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt @@ -4,20 +4,11 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Periodic_3_triangulation_3_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - # Find CGAL find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Widgets OpenGL OpenGLWidgets Help ToolsTools) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL Help ToolsTools) if(Qt6_FOUND) add_definitions(-DQT_NO_KEYWORDS) @@ -30,11 +21,9 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET ${CGAL_QCOLLECTIONGENERATOR_TARGET}) - # UI files (Qt Designer files) - qt6_wrap_ui(UI_FILES MainWindow.ui) - - # qrc files (resource files) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Periodic_3_triangulation_3.qrc) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) # use the Qt MOC preprocessor on classes that derive from QObject qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Scene.cpp") @@ -52,7 +41,7 @@ if(CGAL_Qt6_FOUND ${CMAKE_CURRENT_BINARY_DIR}/Periodic_3_triangulation_3.qhc) # The executable itself - add_executable( + qt_add_executable( periodic_3_triangulation_3_demo Scene.cpp moc_Scene.cpp @@ -61,9 +50,6 @@ if(CGAL_Qt6_FOUND periodic_3_triangulation_3_demo.cpp MainWindow.ui moc_MainWindow.cpp - ${UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES} Periodic_3_triangulation_3.qhc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS periodic_3_triangulation_3_demo) diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt index 03a49088d023..038cb121393f 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt @@ -4,14 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Periodic_Lloyd_3_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. @@ -19,7 +11,7 @@ set(CMAKE_AUTOMOC ON) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGL OpenGLWidgets Help ToolsTools) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL Help ToolsTools) set(CGAL_QCOLLECTIONGENERATOR_TARGET Qt6::qhelpgenerator) @@ -29,11 +21,8 @@ if(CGAL_Qt6_FOUND include_directories(BEFORE ./) - # ui file, created with Qt Designer - qt6_wrap_ui(uis MainWindow.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Periodic_Lloyd_3.qrc) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) if(DEFINED QT_QCOLLECTIONGENERATOR_EXECUTABLE) @@ -51,15 +40,13 @@ if(CGAL_Qt6_FOUND ${CMAKE_CURRENT_BINARY_DIR}/Periodic_Lloyd_3.qhc WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - add_executable( + qt_add_executable( Periodic_Lloyd_3 Periodic_Lloyd_3.qhc Periodic_Lloyd_3.cpp MainWindow.cpp Viewer.cpp - ${uis} - ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + Periodic_Lloyd_3.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Periodic_Lloyd_3) diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt index cda66cbac6e7..d57ee2e529bc 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt @@ -20,14 +20,11 @@ if((CGAL_Core_FOUND OR LEDA_FOUND) include_directories(BEFORE include) - # ui files, created with Qt Designer - qt6_wrap_ui(UIS P4HDT2.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(RESOURCE_FILES Main_resources.qrc) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) # cpp files - add_executable(P4HDT2 P4HDT2.cpp ${RESOURCE_FILES} ${UIS}) + qt_add_executable(P4HDT2 P4HDT2.cpp P4HDT2.ui) target_link_libraries(P4HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(TARGET CGAL::CGAL_Core) diff --git a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt index db32bac7b395..e8ffecc2a3dd 100644 --- a/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt +++ b/Polyline_simplification_2/demo/Polyline_simplification_2/CMakeLists.txt @@ -17,8 +17,6 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) - - # The executable itself. qt_add_executable( Polyline_simplification_2 Polyline_simplification_2.cpp Polyline_simplification_2.ui Polyline_simplification_2.qrc) diff --git a/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt b/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt index 6499a9d7ffbb..5fc26c32a7f7 100644 --- a/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt +++ b/Triangulation_on_sphere_2/demo/Triangulation_on_sphere_2/CMakeLists.txt @@ -11,20 +11,12 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() # Find CGAL and CGAL Qt6 find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets OpenGL) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) @@ -33,12 +25,9 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET CGAL::Eigen3_support) # Include this package's headers first include_directories(BEFORE ./ ./include) - # ui file, created with Qt Designer - qt6_wrap_ui( uis Mainwindow.ui ) - - #qt6_generate_moc( main.cpp Mainwindow.moc) + set(CMAKE_AUTOUIC ON) - add_executable ( Triangulation_on_sphere_2_Demo main.cpp Viewer.cpp ${uis}) + qt_add_executable ( Triangulation_on_sphere_2_Demo main.cpp Viewer.cpp) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Triangulation_on_sphere_2_Demo ) From 0d7280ea63ac21e406a9608871f4e6e1f0abc5d5 Mon Sep 17 00:00:00 2001 From: Nicolas Saillant Date: Mon, 11 Sep 2023 16:10:20 +0200 Subject: [PATCH 373/943] CMakeLists updates for Qt6 --- .../Hyperbolic_triangulation_2/CMakeLists.txt | 20 ++++-------- .../demo/Linear_cell_complex/CMakeLists.txt | 32 +++++-------------- Mesh_2/demo/Mesh_2/CMakeLists.txt | 5 --- .../Periodic_3_triangulation_3/CMakeLists.txt | 2 +- .../demo/Periodic_Lloyd_3/CMakeLists.txt | 3 +- .../CMakeLists.txt | 2 +- .../demo/Triangulation_3/CMakeLists.txt | 2 +- 7 files changed, 19 insertions(+), 47 deletions(-) diff --git a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt index 0c4ea157c891..9d46e7227294 100644 --- a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt +++ b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt @@ -7,33 +7,27 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) find_package(LEDA QUIET) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND AND (CGAL_Core_FOUND OR LEDA_FOUND)) - # ui files, created with Qt Designer - qt6_wrap_ui(UIS HDT2.ui) - qt6_add_resources(RESOURCE_FILES resources/Delaunay_triangulation_2.qrc) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # cpp files - add_executable ( HDT2 HDT2.cpp ${CGAL_Qt6_RESOURCE_FILES} ${RESOURCE_FILES} ${UIS}) + qt_add_executable ( HDT2 HDT2.cpp) target_include_directories(HDT2 PRIVATE ./ ./include) add_to_cached_list( CGAL_EXECUTABLE_TARGETS HDT2 ) - target_link_libraries ( HDT2 CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) + target_link_libraries ( HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(CGAL_Core_FOUND) - target_link_libraries ( HDT2 CGAL::CGAL_Core) + target_link_libraries ( HDT2 PRIVATE CGAL::CGAL_Core) else() - target_link_libraries ( HDT2 ${LEDA_LIBRARIES}) + target_link_libraries ( HDT2 PRIVATE ${LEDA_LIBRARIES}) endif() include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) diff --git a/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt b/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt index c001d50f23ff..b152c55bd9da 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt +++ b/Linear_cell_complex/demo/Linear_cell_complex/CMakeLists.txt @@ -5,18 +5,8 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Linear_cell_complex_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) ## To add expensive tests # add_definitions("-DCGAL_CHECK_EXPENSIVE") @@ -42,7 +32,7 @@ add_definitions(-DCMAP_WITH_INDEX) # to use cc with index (handle otherwise) ################## find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) -find_package(Qt6 COMPONENTS Widgets OpenGL OpenGLWidgets) +find_package(Qt6 COMPONENTS Widgets OpenGL) if(NOT CGAL_Qt6_FOUND OR NOT Qt6_FOUND) @@ -51,17 +41,14 @@ if(NOT CGAL_Qt6_FOUND OR NOT Qt6_FOUND) else() add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - # ui file, created with Qt Designer - qt6_wrap_ui(uis MainWindow.ui CreateMesh.ui CreateMenger.ui - CreateSierpinskiCarpet.ui CreateSierpinskiTriangle.ui) - - # qrc files (resources files, that contain icons, at least) - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES ./Linear_cell_complex_3.qrc) - - add_executable( + qt_add_executable( Linear_cell_complex_3_demo Linear_cell_complex_3_demo.cpp + Linear_cell_complex_3.qrc MainWindow.cpp Viewer.cpp Linear_cell_complex_3_subdivision.cpp @@ -69,15 +56,12 @@ else() typedefs.h import_moka.h MainWindow.h - Viewer.h - ${uis} - ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + Viewer.h) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Linear_cell_complex_3_demo) target_link_libraries(Linear_cell_complex_3_demo - PUBLIC CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGLWidgets Qt6::OpenGL) + PUBLIC CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGL) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Linear_cell_complex_3_demo) diff --git a/Mesh_2/demo/Mesh_2/CMakeLists.txt b/Mesh_2/demo/Mesh_2/CMakeLists.txt index 6619032f709f..5087c477a12d 100644 --- a/Mesh_2/demo/Mesh_2/CMakeLists.txt +++ b/Mesh_2/demo/Mesh_2/CMakeLists.txt @@ -4,11 +4,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Mesh_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - find_package(CGAL REQUIRED) include(${CGAL_USE_FILE}) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt index da044276aec7..22c26c48986b 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt @@ -55,7 +55,7 @@ if(CGAL_Qt6_FOUND add_to_cached_list(CGAL_EXECUTABLE_TARGETS periodic_3_triangulation_3_demo) target_link_libraries(periodic_3_triangulation_3_demo - PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGLWidgets Qt6::OpenGL) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGL) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(periodic_3_triangulation_3_demo) diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt index 038cb121393f..cb944392edf4 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt @@ -50,8 +50,7 @@ if(CGAL_Qt6_FOUND add_to_cached_list(CGAL_EXECUTABLE_TARGETS Periodic_Lloyd_3) - target_link_libraries(Periodic_Lloyd_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 - Qt6::OpenGLWidgets Qt6::OpenGL) + target_link_libraries(Periodic_Lloyd_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGL) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Periodic_Lloyd_3) diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt index d57ee2e529bc..d3ba88394b2f 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt @@ -13,7 +13,7 @@ include(${CGAL_USE_FILE}) find_package(LEDA QUIET) -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if((CGAL_Core_FOUND OR LEDA_FOUND) AND Qt6_FOUND AND CGAL_Qt6_FOUND) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index 1058b455a761..ab246bc44268 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -57,7 +57,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_to_cached_list(CGAL_EXECUTABLE_TARGETS T3_demo) target_link_libraries(T3_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6) - target_link_libraries(T3_demo PRIVATE Qt6::OpenGLWidgets Qt6::OpenGL) + target_link_libraries(T3_demo PRIVATE Qt6::OpenGL) if(TARGET CGAL::TBB_support) target_link_libraries(T3_demo PUBLIC CGAL::TBB_support) endif() From b77659beb202fc494a5b1c18c28218be1b3429d5 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Mon, 11 Sep 2023 17:21:37 +0200 Subject: [PATCH 374/943] Added support for vtk images (vti format) --- .../Polyhedron/Plugins/Mesh_3/CMakeLists.txt | 4 ++-- .../Plugins/Mesh_3/Io_image_plugin.cpp | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 2cc3f58854f2..706ce2d36439 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -34,14 +34,14 @@ if(ITK_FOUND) target_link_libraries(mesh_3_plugin PUBLIC CGAL::ITK_support) endif(ITK_FOUND) -find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE) +find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage vtkIOXML NO_MODULE) if(VTK_FOUND) if(VTK_USE_FILE) include(${VTK_USE_FILE}) endif() if("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5) if(TARGET VTK::IOImage) - set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral) + set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral VTK::IOXML) endif() if(NOT VTK_LIBRARIES) message(STATUS "NOTICE: DICOM files (.dcm) require the VTK libraries, and will not be readable.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 80eedf998fa9..32ec637c9210 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -1089,6 +1090,7 @@ QString Io_image_plugin::nameFilters() const return QString("Inrimage files (*.inr *.inr.gz) ;; " "Analyze files (*.hdr *.img *.img.gz) ;; " "Stanford Exploration Project files (*.H *.HH) ;; " + "VTK image files (*.vti) ;; " "NRRD image files (*.nrrd) ;; " "NIFTI image files (*.nii *.nii.gz)"); } @@ -1128,8 +1130,25 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) QApplication::restoreOverrideCursor(); Image* image = new Image; + // read a vti file + if(fileinfo.suffix() == "vti") + { +#ifdef CGAL_USE_VTK + vtkNew reader; + reader->SetFileName(fileinfo.filePath().toUtf8()); + reader->Update(); + auto vtk_image = reader->GetOutput(); + vtk_image->Print(std::cerr); + *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data +#else + CGAL::Three::Three::warning("VTK is required to read VTI files"); + delete image; + return QList(); +#endif + } + // read a nrrd file - if(fileinfo.suffix() == "nrrd") + else if(fileinfo.suffix() == "nrrd") { #ifdef CGAL_USE_VTK vtkNew reader; @@ -1146,7 +1165,7 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) } // read a NIFTI file - if(fileinfo.suffix() == "nii" + else if(fileinfo.suffix() == "nii" || ( fileinfo.suffix() == "gz" && fileinfo.fileName().endsWith(QString(".nii.gz"), Qt::CaseInsensitive))) { From 303282aec6841421ea9d623670d89f1906866fa5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 11 Sep 2023 17:33:34 +0200 Subject: [PATCH 375/943] fix "Save as..." in CGAL Lab --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 5829ffb5e22c..1714b547af9e 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1948,10 +1948,10 @@ void MainWindow::on_actionSaveAs_triggered() return; } - Q_FOREACH(QString string, filters) + for(QString string: filters) { QStringList sl = string.split(";;"); - Q_FOREACH(QString s, sl){ + for(QString s: sl){ QRegularExpressionMatch match = extensions.match(s); if(match.hasMatch()) filter_exts.append(match.capturedTexts()); @@ -1987,9 +1987,9 @@ void MainWindow::on_actionSaveAs_triggered() if(filename.isEmpty()) return; last_saved_dir = QFileInfo(filename).absoluteDir().path(); - // AF extensions.indexIn(sf.split(";;").first()); + auto match = extensions.match(sf.split(";;").first()); QString filter_ext, filename_ext; - // AF filter_ext = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) + filter_ext = match.captured().split(" ").first();// in case of syntax like (*.a *.b) filter_ext.remove(")"); filter_ext.remove("("); From c276b54e94594a876183a0f83260b21659616401 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 11 Sep 2023 17:33:54 +0200 Subject: [PATCH 376/943] Remove one occurence of "qt5" --- .github/workflows/cmake-all.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake-all.yml b/.github/workflows/cmake-all.yml index d0507b4d4305..77f607ab8849 100644 --- a/.github/workflows/cmake-all.yml +++ b/.github/workflows/cmake-all.yml @@ -20,7 +20,7 @@ jobs: mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DBUILD_TESTING=ON .. ctest -L Installation -j $(getconf _NPROCESSORS_ONLN) - cmake-testsuite-with-qt5: + cmake-testsuite-with-qt: runs-on: ubuntu-latest From 873c3b26cfc97b19909fcdda7b38e7d1685ab6ba Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 11 Sep 2023 17:46:27 +0200 Subject: [PATCH 377/943] remove a few occurrences of "qt5" There are still a lot! --- AABB_tree/demo/AABB_tree/AABB_demo.cpp | 2 +- Alpha_shapes_3/demo/Alpha_shapes_3/Alpha_shape_3.cpp | 4 ++-- .../demo/Arrangement_on_surface_2/arrangement_2.cpp | 2 +- Documentation/doc/Documentation/Third_party.txt | 4 ++-- Documentation/doc/Documentation/Usage.txt | 4 ++-- .../doc/Documentation/advanced/Configuration_variables.txt | 4 ++-- Documentation/doc/Documentation/advanced/Installation.txt | 2 +- Documentation/doc/Documentation/windows.txt | 2 +- Documentation/doc/resources/1.8.13/BaseDoxyfile.in | 2 +- Documentation/doc/resources/1.9.6/BaseDoxyfile.in | 2 +- GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp | 2 +- GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp | 2 +- GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp | 2 +- GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp | 2 +- GraphicsView/demo/Generator/Generator_2.cpp | 2 +- .../demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp | 2 +- .../demo/Largest_empty_rect_2/Largest_empty_rectangle_2.cpp | 2 +- .../Periodic_2_Delaunay_triangulation_2.cpp | 2 +- GraphicsView/demo/Polygon/Polygon_2.cpp | 2 +- .../demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp | 2 +- GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp | 2 +- GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp | 2 +- GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp | 2 +- .../Triangulation_2/Constrained_Delaunay_triangulation_2.cpp | 2 +- .../demo/Triangulation_2/Delaunay_triangulation_2.cpp | 2 +- GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp | 2 +- .../demo/Hyperbolic_triangulation_2/HDT2.cpp | 2 +- .../demo/Periodic_Lloyd_3/Periodic_Lloyd_3.cpp | 2 +- Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp | 2 +- 29 files changed, 33 insertions(+), 33 deletions(-) diff --git a/AABB_tree/demo/AABB_tree/AABB_demo.cpp b/AABB_tree/demo/AABB_tree/AABB_demo.cpp index 9727327004f0..881fd8710dbf 100644 --- a/AABB_tree/demo/AABB_tree/AABB_demo.cpp +++ b/AABB_tree/demo/AABB_tree/AABB_demo.cpp @@ -30,7 +30,7 @@ int main(int argc, char **argv) app.setOrganizationName("INRIA"); app.setApplicationName("AABB tree demo"); - // Import resources from libCGALQt (Qt5). + // Import resources from libCGALQt (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/Alpha_shapes_3/demo/Alpha_shapes_3/Alpha_shape_3.cpp b/Alpha_shapes_3/demo/Alpha_shapes_3/Alpha_shape_3.cpp index 784ee1af57ff..3ec08a1113ec 100644 --- a/Alpha_shapes_3/demo/Alpha_shapes_3/Alpha_shape_3.cpp +++ b/Alpha_shapes_3/demo/Alpha_shapes_3/Alpha_shape_3.cpp @@ -16,8 +16,8 @@ int main(int argc, char** argv) application.setOrganizationName("GeometryFactory"); application.setApplicationName("Alpha Shape Reconstruction"); - // Import resources from libCGALQt (Qt5). - // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE + // Import resources from libCGAL_Qt6 + // See https://doc.qt.io/qt-6/qtresource-proxy.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Alpha_shape_3); diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/arrangement_2.cpp b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/arrangement_2.cpp index 35d589585d8d..f0a5ccfe47fa 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/arrangement_2.cpp +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/arrangement_2.cpp @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) QCoreApplication::setOrganizationName("CGAL"); QCoreApplication::setApplicationName("2D Arrangements Demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; ArrangementDemoWindow demoWindow; diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index d55d10c2cbef..569599ae0fdf 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -107,8 +107,8 @@ the location of third-party software during configuration. Qt is a cross-platform application and UI framework. -The component libCGAL_Qt5 is essential to run the \cgal demos and basic viewers. -It requires \qt5 installed on your system. +The component libCGAL_Qt6 is essential to run the \cgal demos and basic viewers. +It requires \qt6 installed on your system. In case \qt is not yet installed on your system, you can download it from `https://www.qt-project.org/`. diff --git a/Documentation/doc/Documentation/Usage.txt b/Documentation/doc/Documentation/Usage.txt index 1c02423cf496..046f3d6da384 100644 --- a/Documentation/doc/Documentation/Usage.txt +++ b/Documentation/doc/Documentation/Usage.txt @@ -171,9 +171,9 @@ In order to link against Qt5, you need to run: brew link qt@5 -After that, you will have to specify the Qt5_DIR by hand to cmake, using something like +After that, you will have to specify the Qt6_DIR by hand to cmake, using something like - -DQt5_DIR=/usr/local/opt/qt5/lib/cmake/Qt5 + -DQt6_DIR=/usr/local/opt/qt6/lib/cmake/Qt6 where `/usr/local/` is actually your current brew installation directory. Check this directory to be sure where the Qt5 is placed on your machine. diff --git a/Documentation/doc/Documentation/advanced/Configuration_variables.txt b/Documentation/doc/Documentation/advanced/Configuration_variables.txt index 8434b496014b..7cedae4344ac 100644 --- a/Documentation/doc/Documentation/advanced/Configuration_variables.txt +++ b/Documentation/doc/Documentation/advanced/Configuration_variables.txt @@ -27,7 +27,7 @@ configure and/or build. Their values can be ON or OFF. | `WITH_examples` | OFF | | `WITH_demos` | OFF | | `WITH_CGAL_Core` | ON | -| `WITH_CGAL_Qt5` | ON | +| `WITH_CGAL_Qt6` | ON | | `WITH_CGAL_ImageIO` | ON | \subsection installation_flags Compiler and Linker Flags @@ -181,7 +181,7 @@ Under Linux, the \gmpxx is also searched for, and you may specify the following \subsection installation_qt5 Qt5 Library You must set the cmake or environment variable `Qt5_DIR` to point to the path -to the directory containing the file `Qt5Config.cmake` created by your \qt5 installation. If you are +to the directory containing the file `Qt6Config.cmake` created by your \qt6 installation. If you are using the open source edition it should be `/qt-everywhere-opensource-src-/qtbase/lib/cmake/Qt5`. \subsection installation_leda LEDA Library diff --git a/Documentation/doc/Documentation/advanced/Installation.txt b/Documentation/doc/Documentation/advanced/Installation.txt index 933565ad78fc..7bf4f0f98748 100644 --- a/Documentation/doc/Documentation/advanced/Installation.txt +++ b/Documentation/doc/Documentation/advanced/Installation.txt @@ -61,7 +61,7 @@ See the page | :-------- | :------------- | :------------ | :----------- | | \cgal | none | Main library | \gmp, \mpfr, \boost (headers) | | `CGAL_ImageIO` | `WITH_CGAL_ImageIO` | Utilities to read and write image files | \zlib, \vtk (optional) | -| `CGAL_Qt5` | `WITH_CGAL_Qt5` | `QGraphicsView` support for \qt5-based demos | \qt5 | +| `CGAL_Qt6` | `WITH_CGAL_Qt6` | `QGraphicsView` support for \qt6-based demos | \qt6 | \subsection installation_examples CGAL Examples and Demos diff --git a/Documentation/doc/Documentation/windows.txt b/Documentation/doc/Documentation/windows.txt index d40059d76cd3..8b4674530077 100644 --- a/Documentation/doc/Documentation/windows.txt +++ b/Documentation/doc/Documentation/windows.txt @@ -114,7 +114,7 @@ not depend on `Qt`. However, one of the examples in the Triangulation_2 package for visualization purposes. If you already have `Qt` installed, you can simply fill in the requested CMake variables and paths. Otherwise, you can also install it using `vcpkg`: - C:\dev\vcpkg> .\vcpkg.exe install qt5 + C:\dev\vcpkg> .\vcpkg.exe install qt6 Remember to specify `--triplet` or the related environment variable in case you target 64-bit applications. diff --git a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in index 7f347c1529c0..137dd3e63d87 100644 --- a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in @@ -78,7 +78,7 @@ ALIASES = "cgal=%CGAL" \ "gnu=GNU" \ "ms=MS" \ "qt=Qt" \ - "qt5=Qt5" \ + "qt6=Qt6" \ "eigen=Eigen" \ "opengr=OpenGR" \ "libpointmatcher=libpointmatcher" \ diff --git a/Documentation/doc/resources/1.9.6/BaseDoxyfile.in b/Documentation/doc/resources/1.9.6/BaseDoxyfile.in index f5d4533ce70e..3548e27a271c 100644 --- a/Documentation/doc/resources/1.9.6/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.9.6/BaseDoxyfile.in @@ -87,7 +87,7 @@ ALIASES = "cgal=%CGAL" \ "gnu=GNU" \ "ms=MS" \ "qt=Qt" \ - "qt5=Qt5" \ + "qt6=Qt6" \ "eigen=Eigen" \ "opengr=OpenGR" \ "libpointmatcher=libpointmatcher" \ diff --git a/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp b/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp index d81a7cb7c49c..31222218e48f 100644 --- a/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp +++ b/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp @@ -311,7 +311,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Alpha_shape_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp b/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp index 31c3c828d765..7d42f4bddf10 100644 --- a/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp +++ b/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp @@ -313,7 +313,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Apollonius_graph_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Apollonius_graph_2); diff --git a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp index c224faf6e663..7b6071d93abf 100644 --- a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp +++ b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp @@ -573,7 +573,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Bounding_volumes demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; diff --git a/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp b/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp index e593af52c147..53555763d100 100644 --- a/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp +++ b/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp @@ -336,7 +336,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Circular_kernel_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Generator/Generator_2.cpp b/GraphicsView/demo/Generator/Generator_2.cpp index 0072354e66c3..a10c3566a108 100644 --- a/GraphicsView/demo/Generator/Generator_2.cpp +++ b/GraphicsView/demo/Generator/Generator_2.cpp @@ -338,7 +338,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Generator_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Generator_2); diff --git a/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp b/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp index 726a509b885f..57aaab80f01f 100644 --- a/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp +++ b/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp @@ -395,7 +395,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("L1 Voronoi diagram_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Largest_empty_rect_2/Largest_empty_rectangle_2.cpp b/GraphicsView/demo/Largest_empty_rect_2/Largest_empty_rectangle_2.cpp index 67e4f336075d..20e13248017e 100644 --- a/GraphicsView/demo/Largest_empty_rect_2/Largest_empty_rectangle_2.cpp +++ b/GraphicsView/demo/Largest_empty_rect_2/Largest_empty_rectangle_2.cpp @@ -327,7 +327,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Largest_empty_rectangle_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Largest_empty_rectangle_2); diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp index 00beec2bc227..b878c6c69dd7 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp @@ -476,7 +476,7 @@ int main(int argc, char **argv) app.setOrganizationName("Nico Kruithof"); app.setApplicationName("Periodic_2_Delaunay_triangulation_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; diff --git a/GraphicsView/demo/Polygon/Polygon_2.cpp b/GraphicsView/demo/Polygon/Polygon_2.cpp index 67c16d0b3dca..dc9fdf66275a 100644 --- a/GraphicsView/demo/Polygon/Polygon_2.cpp +++ b/GraphicsView/demo/Polygon/Polygon_2.cpp @@ -596,7 +596,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Polygon_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Polygon_2); diff --git a/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp b/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp index 07845c04bc31..de2e7b18cee9 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp +++ b/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp @@ -426,7 +426,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Segment Voronoi 2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp index 8ab184cfdce2..9af19ac62f11 100644 --- a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp @@ -341,7 +341,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Snap_rounding_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Snap_rounding_2); diff --git a/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp b/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp index d25a215c8cc0..0c982df5ccb9 100644 --- a/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp +++ b/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp @@ -302,7 +302,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Spatial_searching_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Spatial_searching_2); diff --git a/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp b/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp index 37e2138ece54..7dd2b13661b7 100644 --- a/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp +++ b/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp @@ -279,7 +279,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Stream_lines_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Stream_lines_2); diff --git a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp index 5da75ee41da8..990a8952cad2 100644 --- a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp @@ -923,7 +923,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Constrained_Delaunay_triangulation_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp index e00d9fa260fd..55a11c0171bf 100644 --- a/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp @@ -412,7 +412,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Delaunay_triangulation_2 demo"); - // Import resources from libCGAL (QT5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp index 6df0dd319011..07a3ed67ad0a 100644 --- a/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp @@ -334,7 +334,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Regular_triangulation_2 demo"); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/HDT2.cpp b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/HDT2.cpp index bd76416342bb..9dd9c45c7f95 100644 --- a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/HDT2.cpp +++ b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/HDT2.cpp @@ -411,7 +411,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Hyperbolic_Delaunay_triangulation_2 demo"); - // Import resources from libCGAL (QT5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; MainWindow mainWindow; diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.cpp b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.cpp index ae0074e0bcc8..0f8f1dd27b93 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.cpp +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.cpp @@ -13,7 +13,7 @@ int main(int argc, char** argv) application.setOrganizationName("INRIA"); application.setApplicationName("3D Periodic Lloyd"); - // Import resources from libCGAL (QT5). + // Import resources from libCGAL (Qt6). // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE CGAL_QT_INIT_RESOURCES; Q_INIT_RESOURCE(Periodic_Lloyd_3); diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp index 7b6e5225dfe3..05f30fa3da64 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo.cpp @@ -54,7 +54,7 @@ Polyhedron_demo::Polyhedron_demo(int& argc, char **argv, std::cout.precision(17); std::clog.precision(17); - // Import resources from libCGAL (Qt5). + // Import resources from libCGAL (Qt6). CGAL_QT_INIT_RESOURCES; this->setOrganizationDomain("geometryfactory.com"); From 25c82a2ea29c9c790b4edaa49f2390cf25928df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Pa=C4=91en?= <49401914+ipadjen@users.noreply.github.com> Date: Tue, 22 Aug 2023 23:28:56 +0200 Subject: [PATCH 378/943] UpdateSizing_field_base docs Co-authored-by: Andreas Fabri --- .../internal/Isotropic_remeshing/Sizing_field_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h index 55cdfceff24e..580601bbaecb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h @@ -31,7 +31,7 @@ namespace Polygon_mesh_processing * * \cgalModels PMPSizingField * -* \sa `isotropic_remeshing` +* \sa `isotropic_remeshing()` * \sa `Uniform_sizing_field` * \sa `Adaptive_sizing_field` * From 04e3be8b8c9cac56c1a36e771bc49843e3696aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Pa=C4=91en?= <49401914+ipadjen@users.noreply.github.com> Date: Tue, 22 Aug 2023 23:29:28 +0200 Subject: [PATCH 379/943] Update Concepts/PMPSizingField docs Co-authored-by: Andreas Fabri --- .../doc/Polygon_mesh_processing/Concepts/PMPSizingField.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h index 8f89b3a88967..afd1db889147 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Concepts/PMPSizingField.h @@ -48,7 +48,7 @@ std::optional is_too_long(const vertex_descriptor va, std::optional is_too_short(const halfedge_descriptor h, const PolygonMesh& pmesh) const; -/// called to define the location of the halfedge `h` split in case `is_too_long` +/// called to define the location of the halfedge `h` split in case `is_too_long()` /// returns a value. Point_3 split_placement(const halfedge_descriptor h, const PolygonMesh& pmesh) const; From 237e915d2baecc52ea8890cf10a323a555b92459 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 23 Aug 2023 21:00:28 +0200 Subject: [PATCH 380/943] Use any argument convertible to double for overloads in isotropic_remeshing() in split_long_edges() --- .../Uniform_sizing_field.h | 2 +- .../CGAL/Polygon_mesh_processing/remesh.h | 31 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 7e8c24f3dd22..2ef86ab0233c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -80,7 +80,7 @@ class Uniform_sizing_field : public Sizing_field_base * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. The default * vertex point map of pmesh is used to construct the class. */ - Uniform_sizing_field(const FT& size, const PolygonMesh& pmesh) + Uniform_sizing_field(const FT size, const PolygonMesh& pmesh) : Uniform_sizing_field(size, get(CGAL::vertex_point, pmesh)) {} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index db036a4be6ac..a8da9fd9a019 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -51,7 +51,8 @@ namespace Polygon_mesh_processing { * @param pmesh a polygon mesh with triangulated surface patches to be remeshed * @param faces the range of triangular faces defining one or several surface patches to be remeshed * @param sizing uniform or adaptive sizing field that determines a target length for individual edges. -* If a number is passed, it uses uniform sizing with the number as a target edge length. +* If a float is passed (i.e. sizing is convertible to a double), it will use a `Uniform_sizing_field()` +* with the float as a target edge length. * If `0` is passed then only the edge-flip, tangential relaxation, and projection steps will be done. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @@ -197,7 +198,8 @@ namespace Polygon_mesh_processing { template + , typename NamedParameters = parameters::Default_named_parameters + , typename = typename std::enable_if_t>> void isotropic_remeshing(const FaceRange& faces , SizingFunction& sizing , PolygonMesh& pmesh @@ -338,9 +340,11 @@ void isotropic_remeshing(const FaceRange& faces // Overload when using target_edge_length for sizing template + , typename SizingValue + , typename NamedParameters = parameters::Default_named_parameters + , typename = typename std::enable_if_t>> void isotropic_remeshing(const FaceRange& faces - , const double target_edge_length + , const SizingValue target_edge_length , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { @@ -377,8 +381,8 @@ void isotropic_remeshing(const FaceRange& faces * * @param pmesh a polygon mesh * @param edges the range of edges to be split if they are longer than given threshold -* @param sizing the sizing function that is used to split edges from 'edges' list. If a number is passed, -* all edges longer than the number are split into sub-edges. +* @param sizing the sizing function that is used to split edges from 'edges' list. If a float is passed (i.e. sizing +* is convertible to a double), it will use a `Uniform_sizing_field()` with the float as a target edge length. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin @@ -424,7 +428,8 @@ void isotropic_remeshing(const FaceRange& faces template + , typename NamedParameters = parameters::Default_named_parameters + , typename = typename std::enable_if_t>> void split_long_edges(const EdgeRange& edges , SizingFunction& sizing , PolygonMesh& pmesh @@ -473,21 +478,17 @@ void split_long_edges(const EdgeRange& edges fimap, false/*need aabb_tree*/); - // check if sizing field needs updating - if constexpr (!std::is_same_v>) - { - //todo ip: check if sizing field needs to be checked and updated here - } - remesher.split_long_edges(edges, sizing); } // Convenience overload when using max_length for sizing template + , typename SizingValue + , typename NamedParameters = parameters::Default_named_parameters + , typename = typename std::enable_if_t>> void split_long_edges(const EdgeRange& edges - , const double max_length + , const SizingValue max_length , PolygonMesh& pmesh , const NamedParameters& np = parameters::default_values()) { From ec1793f54d46112ccc35f94e73cf8518fc5a5b79 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Thu, 24 Aug 2023 17:50:16 +0200 Subject: [PATCH 381/943] Documentation update --- .../CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 5 ++++- .../include/CGAL/Polygon_mesh_processing/remesh.h | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index 2ef86ab0233c..c49273921074 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -44,7 +44,10 @@ namespace Polygon_mesh_processing */ template ::const_type> -class Uniform_sizing_field : public Sizing_field_base +class Uniform_sizing_field +#ifndef DOXYGEN_RUNNING + : public Sizing_field_base +#endif { private: typedef Sizing_field_base Base; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index a8da9fd9a019..45ce27304cb8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -51,8 +51,8 @@ namespace Polygon_mesh_processing { * @param pmesh a polygon mesh with triangulated surface patches to be remeshed * @param faces the range of triangular faces defining one or several surface patches to be remeshed * @param sizing uniform or adaptive sizing field that determines a target length for individual edges. -* If a float is passed (i.e. sizing is convertible to a double), it will use a `Uniform_sizing_field()` -* with the float as a target edge length. +* If a number convertible to a double is passed, it will use a `Uniform_sizing_field()` +* with the number as a target edge length. * If `0` is passed then only the edge-flip, tangential relaxation, and projection steps will be done. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @@ -381,8 +381,8 @@ void isotropic_remeshing(const FaceRange& faces * * @param pmesh a polygon mesh * @param edges the range of edges to be split if they are longer than given threshold -* @param sizing the sizing function that is used to split edges from 'edges' list. If a float is passed (i.e. sizing -* is convertible to a double), it will use a `Uniform_sizing_field()` with the float as a target edge length. +* @param sizing the sizing function that is used to split edges from 'edges' list. If a number convertible to +* a double is passed, it will use a `Uniform_sizing_field()` with the number as a target edge length. * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin From f73e7d4a79a833268f4d134cd2ca877b162ddd15 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Wed, 6 Sep 2023 21:38:01 +0200 Subject: [PATCH 382/943] Add adaptive sizing information to the user manual --- Documentation/doc/biblio/cgal_manual.bib | 10 ++++++++ .../Polygon_mesh_processing.txt | 23 +++++++++++++++--- .../fig/uniform_and_adaptive.png | Bin 0 -> 316564 bytes 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/uniform_and_adaptive.png diff --git a/Documentation/doc/biblio/cgal_manual.bib b/Documentation/doc/biblio/cgal_manual.bib index 89d062ddddf5..713047b1ed50 100644 --- a/Documentation/doc/biblio/cgal_manual.bib +++ b/Documentation/doc/biblio/cgal_manual.bib @@ -3073,6 +3073,16 @@ @article{ecvp-bhhhk-14 bibsource = {dblp computer science bibliography, https://dblp.org/} } +@inproceedings {dunyach2013curvRemesh, + booktitle = {Eurographics 2013 - Short Papers}, + title = {{Adaptive Remeshing for Real-Time Mesh Deformation}}, + author = {Dunyach, Marion and Vanderhaeghe, David and Barthe, Loïc and Botsch, Mario}, + year = {2013}, + publisher = {The Eurographics Association}, + ISSN = {1017-4656}, + DOI = {10.2312/conf/EG2013/short/029-032} +} + @book{botsch2010PMP, title={Polygon mesh processing}, author={M. Botsch and L. Kobbelt and M. Pauly and P. Alliez and B. L{\'e}vy}, diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 8f5863bd1f0f..0f89da2c013f 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -116,10 +116,19 @@ to the original surface to keep a good approximation of the input. A triangulated region of a polygon mesh can be remeshed using the function `CGAL::Polygon_mesh_processing::isotropic_remeshing()`, as illustrated -by \cgalFigureRef{iso_remeshing}. The algorithm has only two parameters : -the target edge length for the remeshed surface patch, and -the number of iterations of the abovementioned sequence of operations. The bigger -this number, the smoother and closer to target edge length the mesh will be. +by \cgalFigureRef{iso_remeshing}. The algorithm has two parameters: +the sizing field object for the remeshed surface patch, and +the number of iterations of the abovementioned sequence of operations. + +The sizing field establishes the target edge length for the remeshed surface. The sizing field can be uniform or +adaptive. With the uniform sizing field, initiated by the `CGAL::Polygon_mesh_processing::Uniform_sizing_field()` constructor, +all triangle edges are targeted to have equal lengths. On the other hand, with the adaptive sizing field, initiated by +the `CGAL::Polygon_mesh_processing::Adaptive_sizing_field()`, triangle edge lengths depend on the local curvature -- +shorter edges appear in regions with a higher curvature and vice versa. The outline of the adaptive sizing +field algorithm is available in \cgalCite{dunyach2013curvRemesh}. The distinction between uniform and adaptive +sizing fields is depicted in figure \cgalFigureRef{uniform_and_adaptive}. + +As the number of iterations increases, the mesh tends to be smoother and closer to the target edge length. An additional option has been added to \e protect (\e i.\e e. not modify) some given polylines. In some cases, those polylines are too long, and reaching the desired target edge length while protecting them is not @@ -134,6 +143,12 @@ Isotropic remeshing. (a) Triangulated input surface mesh. (d) Surface mesh with the selection uniformly remeshed. \cgalFigureEnd +\cgalFigureBegin{uniform_and_adaptive, uniform_and_adaptive.png} +Sizing fields in isotropic remeshing. +(a) Uniform sizing field. +(b) Curvature-based adaptive sizing field. +\cgalFigureEnd + \paragraph Delaunay-Based Surface Remeshing The mesh generation algorithm implemented in the \ref PkgMesh3 package can be used to remesh a given triangulated surface mesh. The algorithm, based on Delaunay refinement of a restricted Delaunay triangulation, diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/uniform_and_adaptive.png b/Polygon_mesh_processing/doc/Polygon_mesh_processing/fig/uniform_and_adaptive.png new file mode 100644 index 0000000000000000000000000000000000000000..4aca8a398d26d773f009845adefcaa90bc7e5915 GIT binary patch literal 316564 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 #hjnJo7ye52 zV?=rLg*Ijd1k7oUwWPZZ;9Fvo>*fN8r{Q2pjy!FH39Ffw#%U+2YZjwa6I;YX(thd0 zF|2BLzNQipfJKrK&GJYXO zwHENZ0dKii+0NV%Q+~=Uz-+wA7%>;7Hsim(8GYLUmBXsI&Lm$aof;TLM%cJWg1qfU z-%Evo<+EMuj2}VLkuTV>pZFMYxuEenS)M0|uF0Rh9sm7b2ir2toGFQWfXm_FaZMZs zSCN&9=`nAT0kAt7A2bb|uEND_WjzEe{s4??XiA*4$Tp)N|tr6f9 zU?D-{*q;`tg&B`zpW+?6mA|y(n!wJverQz;9vyBp=f}4)i%!feURes2tow0!wt1f9 zaPxtq8RhGWUa8zNs;e(y;!Z9$S-C4OB0m6m4MBEi9u}5aoQ>%)TSV79yK^uvW>{CI z?U6iXVJI)u$cVC#*?unBn(;Jov^$x+gcv#d8wjYUhmQ_q($Jq<-W z;+zrf41Uj!z)vUKe=RO!#tLULE5VJNFWMPjlc}ACQb>oHFTSx293?EK45KPM;6x5D z5M8;#swM6^yV7yrnN@bAxNwZ*;X;(a2)_=~zc$7U!4eqr1Sds|-aDYUkQ~SyRJZLV zadGPqCt8jok+*2PXGi^mrqpnF%*aG#5F(h@rR7XI3l<(Jl_4|%h4=eZ^`Q0hA0c4C z(Xs!X4b_+OfgerF>HQ8D* zURX1&uH@un@ZR=~T7{XDKeAof`xZ_XYoq6)U}MbUuQJhvF?UzeapO+|v9)GAaiPtQ)a9AofTNzLGDfEBG!Ag-Ng2>C)B60r6G+6@E--GG8> zI{vW`oTI1p;`=1>U{iuhH(Gh8^`!QWPX>}cuNJk&Y_Fuf6)*~NlzHeO1Ii{BV&)xv z6#-{}c?zG^ER&H|)Ncv&rtO;s`EtW{;@Ve16rhdxN*n`z(JFG0vp9o1P3| z?w2WA)s2kP0fNI_U(nSP5PLH-mv__Dhb#m2aMawC@BLfQV+0B0M$oP-k=+~be6v5{ z^ycTHhlnLsWXN0(6EkaLX$tU0smYC2r#^?vYQqOKHF5&zwdV_9aDfNfkqnX#Pvk64 zAM$Idj&s?A3y+7As}x#9`S&cKOdJCxk~g(=x>5ZWMN+q5{S{i#j8C}0pZ8T?`*;28 z)-aqIq44|9@Yk=qeh@PCRQlfdRh?5)1QNOVcZS}>&}TT@^Ih`>YQVKdCIg7s0j0SB z`BC`g#e;I~>DvpJTIAZp&f=y8N!F7(?w7OS7DC$=5<+hj8HSCQm!`3Dl$)HQR-)vmJ+iKaQQnel)uMIR*z!x0G#^Nq=9{6rIHz%#?5A&kK>n zCROms_JTI_4pT9moka*{snM)08mMkrZjrsYcl1;U@>Wo1QWS9ASF{RRWQBn<8wXCf zZQ+MuMGssHTsFFdD>Tb>*teP+{^k`%W=0p{4jP*L@|-(#7k$#}x?Z+0B3xrr5MY_R z6F%|cJbkf&b?bhMU*3oQ6u1Xs=P~e;+NBBAw`AaWepm}PmT~r7yZ-80U-3ck3uq_i z1J~rWmL<2rnm$~sHQ57>OvJo!l=P50sVYT1gyb_18EV6(ky^IRHh)rws=`HV)?|Ja zRXD%Xe*dH)$~6eA^CP63)CKQMWyp3?AFY3mNv!QX0}ep$jzd_7MG4PZ zh{MO!x#Mh<8}|%#uLS-J_^X1YOnB|;M2O*ys2abmupfaFMYQ@_(V42Z?-cqDW~59R z*c=7f7RYi6JZH;^c>PCoXNgK_hpj{;dCDJKaYFFO2tR_WsJB;+X2U95Xnx9-R~vPV zOT9^4a!V@=Y!}1>4(H(?f~mu0g}l^Rq00mNKPh!DXQ@@@M!d8GOd3Y)FGRqtO>u7@ z9B5)$xfI@WZ_7ZaCBEspZ&U&-v#FcjPAi|rx{kkbL7>AUxS)?F@?#R^Qg?*EAmCh~ zU-S~>XzuDyoZ9r;aEiMhtoP-PufXq4h7;y&=Kl57PPI@~EST0JucmRp2d-f|mgyyO zPgg7On0WP7Wf}xKi~JC{WtrAY0cK=(rB=3Sx}CL%1=LG|^u-PLJk!(0!$4Ugclvzz zCBW+5-X-y56-XpgI<`1MwVXY2*ol|>oWf#uIr@Os=jZ86s20B6uwIq*(>tNSmAILN zv1z7TnXCj0ho-9DXPHFkB=kzN_2aU&3tY9{Zr5efMKH8KF0HU4Vo6jIRpdhngXK;-lF^noFIerxTWyaG}e`5ufiPn41{d*;gG6 z7MShfXHRJW-%V~)8CTBD(AmCj#QrRE-d@Y-VQPvZ2|+0vr1N0mMi=cK&zq$LjJl>70?QSQ!wCTI@X-b(IgYg;0n#Q4e{&= z10J>fndZM#AFCsPLhrF^5y%4EtVnws7<;Soe*&r|Iz7T)U3{;BprCngOOUs4Qlk^U zJ+?=T^)~a&w&&{EUrH@zf#8x?pPoD(+!($jp%TF!yWi;fbHl7o6^aQxZ*K}_j8x)?g{Tuz=4<2Ya>D;3Hn+1+w3XgXw!~t^|Ux-aJoFtdk;|p66jrVe{ zN!GzOMdE2*aj_&wlx?`_Amd4Lg~tfP4wXY;7=r>O4QDQ9kegHn*ble#kac?R$1io8 zQzh7zHb}H=Y%ZkwtI_MZB;^~P({A!Ohb^Q;d1wB5W93k&d7Pr#7WBhTuUzk28*&70 zGcx{?GBCAMwCJlfpf7w7MSXIaNQqTwCorwjcv2`!S(A6{08H-{9N16IJalq;I=QMt z#>FIB=ec> z&4mgN;6$~(`4GrWi$*+|BhwhS=rgtyaHC|IsCzXhaNckvdsi@&&H@s!gy`>7>c9!I z=N66;>mX)UhEg3RY<7L3F^WX<)7?57`wq_;r6vlILKjHm=@{kVhrh}pI@Y*KP)qXc zl8H3TP$~-IdGze#gS)t6_-rlTz)(w|ia7dwO54dsqXQ3Uvw0yux)wdaMlf2yqTzyd zVAKfQGCbf;2iTjPUgu2f?qQH@REhvg`po_C&5r^OwH#XHv>g+!TqwGPemV(@&A+^{ zcWR_ZgOp9?2*F8tciHV@_DPmjPw(FV-c?O|( zPwdDnvBCPoqRl-{=YMP~4mGgYTF$b(!R6R&pMc?bPOwHxV0!3*vrXRTIJ*!N0>sL> zzAWW?UNb`P>-gU7v3GQA1_T|62FTHL0CSxE>HR+;CM7!C9$N($^+xK z`oeh)0%pLMy}}B<%#Rl*oR;}bI1D6uMj1DKY|}j&bw;*X2s=iF{Ty_wf@@OBPDo%m z&cnfPM7kF=Z#RL##EJmaMR}1{8yEGB@khL>d(YUc0j}~bZs75lGo4-h^yV2(HQs$=B-yXb&fXaI6gTJQwWu7(Q^2H{L6FczKUQpK_Hb(Q+fE8daw(<8ar6ljly(5_;8#M27SO zw!#?-ScOvDktN8gY=CUc`;?~HjF~w_NPQ8qr?LcNB9EA>LCyJOf4nNV8%>m|3`&d8eOb=$h!`Y8yVj@Ms)wuHQPHv|UKFH`S7 z2snAn^A?`z9oBC+TbKR@)Pc~E_xZwCxl4Dg+N6LQmJ-s@-mFG)#@e3Pz1w4dJy%C? z{zPfs?Bw$Xray1wz|k|Nr!9@HU%)`(zdeIzbia|=6E&5OiZos*XL`z1r@_b_GZ9tp z8~AnV`Cv2q$*nT)(mBh>;^Fgce!a9 zFvM8~H8E+cT$-oIhs)fx5|gK1|AM!<gH1&ROIQ`AIdw2AUB>50C(|8+_{WZNP4TJXr!2I)8Y!|S1sX=UE##9HC_m|OXW zT9tc;!uGnQ+^ZgT@-<0n_vTU+o9@ z<|2?vc~bAZP8TkyJ}i?_SL>_ej)ltjPJhwz>E7F7d(q-yEN0EUK6~S`^PW4tWl^s0 zpH$NNd&%gN=KA1M+0JI z<(@v;K2%v4$#@U1fq|ojNp!kp5>AEWqWhuz`f&=KCn6>{Ov} zQSS(F@!qH8&WJtfqZbru8@)I%JZQ;AHBrm*$cyd0#qzZbk7X>rZ_5?}+E~8ZRb8b=#;;^_#l80?sIxAdZPnz1AYm}kA#Jr^(z1~VG-)=3pHob z8ZCxOZxmcCsid23vkZoFLf>%rnS^xph>mNSErNAEF2I>p#KCo7;0^h9J(zkMZ|j{q z4_Jcg5*tp0=HDbk;T9x6aU&+ZN8!zMP9`UqlSaiTdi?UqZ~mOtHP%+4HF;Vf>TkZV zoAN)t`|<7jk0f$s<=Tnd`(w{J(FIo2QboR=_g}(N1wsXX^~ik&p`sv8?5JIbxMrR! z=uT@;Le*VxbzMu1d}HnX7wh$4L#CL!0OT`RGkOD_{{jH7;PVK5b> zfkCV8(M#N~2}pnFM2c{7KzPxkbMy|SoHBkJMG7A?<6AjpfMk8~I@fA7OKu2dkq8idl_qy|0`EQ&r zN#oM?R5Ip*aDkVR>?qF>>0dEecyVD7!oM*%&H#0-w_cNxvr4O)Ted5`(paWVEq~8X zTmvdLuRw&8I|AORpv8)s50-OTW{?!G;S7?4yFuR8gc+QvQs(}FOj3ZCjsu`ycNpLH zHm}SR3)J!iw;5NdDK0|Uuismub#XG2Me@cLyd-*@5A+Cr855yZ=IGb~b;s`ZT#C&q zY?&e6M9kgSAg9cV9EL(=$YjD9@^eP%1dR1QIjUDd*Y4TKd^9IG+j*z;mvh1h6JVPQ z06TKvA>pbg?zVfDUjr5#u~DiJEC4Pc6ixIRBq$eO#d2aOwY*yoynb$}{6Ct`GAgPz zY}-RgBSVWwcS?6N!~nvO($X!G3P^~EFn|m#Ekh3_GK3(gJTyv|q$1KtgY9A+-dtcXi9!J@VW1i<06Ln8qVD8d+w;K*{U=KzM!JeZ3a*4>M|_;i-t!nk0xLF_I`XfyZ`y!%k*m;9r=5Xa!I2x z1t9awk)UF-g9 zg&V30w$_5hymy;@A>WslH^5W-A%8rj+z@jtTVbWZv)4~A%33&=VZ;1{&k5AwK#Gh+ zpEq#@z_MNP$9w^W2t@fnL=^lU*z_7S?!YJ^2?X7qyPN}Y$^Rtm8Fsl&L&>f_N~ zdTc%#`z0~oS!xht#J?Tx!Dz`#o9>PyWs~&l;4XI;=$V!7td#uAPlUqNs{`f^r$qxz z#^?{lv5G4DEG0tv&-8-lj+&f7N*8hRBk6JOyfhZD~3brTH^B#qPA( z{O~(I>HCv3i~__pCz6UBX-mBam21-Oa?SZ7!4>v}g%u{*MuC?a*L9`u{O*_V=&N7C zSLVDY*B^n(h3Zq==|$3i-eS+>JrP@)BOl$34Y!FdS8V^gULO4&AP;Xb5W8;Bhfdnh zUffS_S{-)Hn^PP!G9~%!miBC~Q1n2=+g0+wszkMQ8psN>ro2Kc!Czf#c=#xUeGL9l zMDNA8gm$Tp8ON)|w}n%@WBLsN9GsU1IaQ4ogvPr8cCtz9t5)YV=baxD50Yn|$%`C_ z?~l&mIE~IVTtrEkBoVB_2L*z68oUX%=4#I!r<5-i1FdID+jp-&tY-$l+(yc{`qd11 zhS{%9qrCsT=POsquIbwjWS$yjy=3to5Z3ox_Eg9Sz80`sy{7fxav2kxIG&|h>28Gn z9`=k`RrEQ{3Q?rbs|@yZxzbdWKDrn;N=H>Mzi+$>h-oY!Nvw|(`@q{Me{~=s@xR zxT%BvHK#VkJ|e+H<#Um|r#ulk81r8XYp4ihRIFQ9IBQ1}F>^%2pk3+l2RUtH;v~^s zPs&p=d0w?Yv6P|ec0*tBBzOU5o_5Qa`aJqT6ue8(0{RXMv*IK@Sg}ATTf3)#!A-jM z#}fcD33UH{*k9RGX%r2{#40na&AhO5L?3${x zaRb^6beLI52fX86=bC$6JiGAQjY=^wwS#)Q71BXyw(5Ha#PT)^px&cO4}67xW(?4| ztQK+AKPPZ9eSzN*#U7n^5N}BnJrlRA>K&PgedxFDkCjx5;5i?ilT z7z2U}Xt7&Pg-4IrYtp*Dxm~t1X1l`nCiObxZ*ebdg&`3TEqJQ~mvX21mT~(+5-Q4% zl}$dG1(ZI!aMwLu+P`IM|~cIktz> z2fAY%TT5DFSZ#(lKnDD^+#d9|PG84aL{nd$tmOH_3F8!4Ub8wpEXbkh*5k8gEMaoL z_Ul-7O0)BEm^w3Yixr&;XS_zk`Y7zZd)XB3H_8BsqZjU8Q}Td2E`LnWszZ+7**OA@e7m!HsAZSSNz4 zZ@htZF=b$~D_nE;xRpVBV)$*x7aB71f-+2*`vz}MSG5!fjHOSrFf={C zy=j>NM)U;3P0@6Y`{ z_mUH2nZ;s;PjB6LxD9VwfiVZ$^$VVH8{R2b;N?gVUiNc1jb6XN9!?ffY3eo>Ky&%| zFk%dQM}LYek5DDtvb4RRAUQM2G7Ua3R8P{%R5(5j43f4D=={Gd;OVyWXd_9{r%JA9 z(CYs)4^C`?-7!JYZ=AtvTT9{WN=fdD&G|f`V(Mx8|EO)b1|!xYGRt_G7oL|bX606f|A;m16*Q7EzgyOiHq*)RXF*}IJ)>V>@+{ z(+j=x+$(7hbM*?eoErQypdsnXY+1g!4qlrn^H7}7Zy*ywlo-%DN*-Y?okLr12OTn< zZT>u%3^$h_q;Y2SfZS+5jm_~=Bw~2?+pM!6j9kyWf4wvQf>C1qy>w~}W5>-Cjj_PP zq^@+Q>1NOq2s_)Tp6ae+)WNzl1VibLjo8hEDNg!xWR>)xZopXy`2rq~V)=AO&A9F+ z!y#Au>~XL#GLQr?Y|z@Ab^!t!caMj9Fl{uB777N6ZUrNJPU~#`8B)BoqwSqDVLAO z(ZhY9<|S3fXUFJ1*R-w(*gOcP`K)JJd~gCzr2kF+7P6>o@ZxTc1AK^Q=q~G?3`R>L z2b!!wa}c5peQF*%EQTR+iumjRCYrjcTYxtCcjh*qKCTL=|3C4wBZNFjhP~6%39Dl> zu#lngZfvaQwJg1(sF57@Cs6gKX=RY+0=y6V3THRRgb@?Av_~4r!<+Mi!E(|ouo|o@ z(@*Kuc9-XjCGXeMVDB!Q(4KP!Go`%nMsl0qxi7s;#x(IWzxBHuJPAKNu#5bhxwY@^ zIHvvfat__=P(HOi@q2W;S|)k$BZ!m^YK)TIV}%MkVZ=ji>3{VeClM6v_;sDsoi9Xm zj^}WEv&{{!&3Jmh!^NA=e$1lsYxIwBgB}20BfIB${_k20UGAU?Bbi~F6CJu1zPe68 z9hepVFwOS!8h~%fN!~7uZKqAPxIdBfSnNYzEE7k3@DzUm@E3Y799ZUmaBE@lp8Abj zj4%l&R8GC*BR-aOtsRnhrF^Qe9hXHY^itj!u*qO};PxA*B6W{F2@>tMl@l<%Nn;qN zm2`A4dKb8+gK9_KS)v~bdG+)0;1P%@@u&Qm7~%WiE)t=-1O2tK5T@DvfMTvR#bY55 zZ2Xp@h;DYIchY$P`!txU8wuCg3s41Cu9V*ZScPx&!+Ej_g<7loUDp_Y2Mm`Pv4%nr zDBPbLLB__GP(X;n>VTOOtayUoei_=mSATIv)HSEG-tlNF!7KGqI_YY(#|T&juc_5! zyG#K3n7NfFsw}qUBBNJVgt#Q!ox}rBTyeFz`oc!vroXyfk+yN*?`QN_Eq;^zNuA1S zXKcnVet_e+ih?@$FCR?`;2y(JCXkhBc_ zhj-2>kuyYmZyx{|7>GuJ!P6fo4CYpto#}z8I6mOkTA0fq^cEU%buto$ez2*cuQV9| z%#tUJ_fE1vSlom_yXM+3Z@I%goc!Y}?@K70yd>b4Jb!8<#-VpS+ny8MY;FN$rcj>Cl$OU>Caq`kBW6^&;TBbz5Jo1VaTTt#piVnrT{&AhbK ziyC$W{;(nL(;y;89Xj%66`Y?i>W0bJ%nY--BAmC1I7K;w)IrB|GPEk}r^M@=kIRQr zlo_o19q+>uAQASJ4DuX<8tDwC-?RV`dpL~f2)zze@q@h6yj&=_I4EX(FZ+yPYoQif zknjplEd?^CMB$iN2e(;xELtLJ0&F>PifxNfWr_x@Uyk?jj7IxHMA0`Ix|`AdvPi(+ zo1_a)#~Q~t3CEk%#S)`wwho!6M&WtofWCm0Qs2B6IWC~XQI`6oL@A0yG9`L)5uEVw z6NSy9CbxDK-UGe}*aHwv5}QV)>ky(W{sC!g3vW}rELR*|Ld|sV3TWM_ftOMOlnisg z10ZHAhT>H3)OEfCgFi>WSo_$E=8AI;*t>us+LkT{j9PoULU=9TA2*tKv1>4ItG%hF zpaFe^7|=tom{6Jp=r)5~?*tpmRf(YU>*n3D@1m9Sb!? zoz96hS-|QH0xli8*G*xZV>4<=IEBe9`JSIoy_Y&&axy(;fDa%>o8xC{v5xeqP=z*4 z&-cS2Vk%97p-Qk3Rbo}FDLgV*yT-lnXXRvQdSZE|WV-=~a&SV<>(z2T(Ts2KE&uXN z|KtN4ZGz&p=TrWpB;wG?_6^6&Hf!T21=V@;pA>ZU)~hx`1Np;?w(Z=E)9>T*A;tr3 zBoV4ESr+!S=#wD8QhJd?kW%W%MR(d5*4~!Y#dvbWwrr!;#al zl_TnUW-W*HE#9UPEZ47WTc^I$+_)<>E8`7`BV&52ry_!X`QU4~1)NZzRX~;Ne!yug zO;}gj%jLqB7epuDOf4XBND)J-Zh8SXako(0A3p`iN`hxznKFZ!;!6Vwt2h7%QLld! z>g)HppsoJ6u{SR%*R%R^y74S=K^B1ZI&DaedT8jQkvXNMgX+2@>cb{Y;ZwznIXnTS zM3VW0KgXT<0s^O^di?{&-gw+0FN&jUk(q+EmHvQE9QWa2bgMzB4Rqhf;55OXK&hN4 zQlla*I*HUfhrQz9Jy+fqAspyGN6W!KRY(hUhrr2XB*ks>*&xR&xL}qah7<7>*f#S( zl(dz;)Kk5o0?wpqkO zNjd@Ga=2OY-PD_Ip`Iz(rQCIV#I3S;hdw7! z*&rirFfc;#Qm~|=G{Ate#jFbe7;pecyVloZ9x$odcs#&I9&`dml^rn#rOQYz8n)F9 zQ^(XaajQz$x13xQPGYHE-VSx|@D-(C&su0;OZU&EG;bdo3}wivsrxu0Z~jbPK<6)> zeb1e`fS_fV*UB7YYk8J_Ek2c+Mn|U!oJ*P!$Fh$1`}FWmRRA-NyCxldw@Ne^lO+ya(L3!9d6SX~bD`ZzT_YilZ8Ci6t>utT8BlH&7Pp z_-En!7z>RwPl}k$?XA9i{5EY`1YDlZq?fTD6bVZQ4VeDuwV54l_4$Y8wCUjrFwVWh zo6CS#KcorX)R}R(`>V9NaI7!tv*)O_GBSAcn@L&Zac~Xe(2K|?loG6sNlMj(;#dTF zZv0wW_49jw^h!d7zZt3qw#B~BpVt5M{KN~yU^DUjqnns@s-iMy0#D2%DXkCS<%o5qd zP^{;b%m2l2@I&=2eaSk6`N4&qv!WwUQhY~_w9MJcYFGAqf1iI1zdg7mzLoxwr1__0 zP5jJ6Kc0-sO=ZR-@_j*J=PUns5<*-RkOqBvv;wA9%SNw-_GiK%yEB%MA7?O#?P+|2 zO-Sx`ow=2h@$=doRPnZl;=P|*#FcDFaFN=&jCIPo-?DVeqk;W6rcH41vCT)e0tG-| zWIY$n6ssAl;fdBP7UxHcgKd4w!i2y6Hkc0>kEnso&!)z`+PMcw9794%^q7cS9dfwf z4zhQy%-LhJ+GqID3=y9IhdzNhdb|B_g(?k9c9Hfi?OTmnzWhWZMrvgM-Kf|8P_BVE z`5LmezOHR#%5n2hq|F(yEGOg_342jHa)0{7Z6vf@r{efw{pDl|_Z}43%woW8C5jh0 zw|C2k3xok9wqd`#SY*EJ=$Ps=@{>>JS~=>q@bz;gaK=Y(OS;9ej~NnI>l@c)dl*#? za?2f_`PJ~VMZTNH^K^Ztj9)pP@$_oilRF@f=ExD-5bD9&TrOy|hi%JG`xg_-UiJd; ztBrlrWPnQN3*bY1-}+43QsTQk_=VY)x^zA{)ZD0v(sVwH@l$wu==JDs zKyOyJ9z`DB!|NNOP#cZAoLO_Zfd14e-e$$%W__Q(QJxFi(a%p^C>Yo|?*V)i#7IBV zP(%q>(<+t%z-EiVKeDOd;eued_95Vh zg#&p!kM_*y1{R4AZtsC(W6q&V)8l~d^Pxkzc?aFXYp}rLB5zVcm_)1ns&XAKXSe@v zZ@`B*RVhldiZ_w%_Tj%*mbPy4L^lCp5UlI_c8s~DgSrojucSrl`G_w(adhcKMQV4! zh?g@9s3?JZuR*4|CBL)I<~s!Pzuw;B5*Tj^0qdAs7@(oYGaCh`#2_}mzFl&qC&ur4 zl&{9h(J~YMUp~*_q^bW^^ajPmfGxg0>^rqlOQ`*ZYMZ-<$K2aVb!TH>F|^$TSciM| zSX?IM8c@biWI(}>p)9pYVAilJmrm1@iCDJj1-rAcwXo{+(b8Ky&p`~`gi ze1HHLiDGuX>yGue0jzr`@U2=QT^jYl)FjD| zcMb9x*JIgHldk^0wbeN?BLD7)5F?6>YPsBk+8y-KZG&F(bcN6YU_zJFNhrnCOCnRS zO(t^6s^Erp^L!t!7@D#%*#lH-`qQPeM{D{OME5|LSb~FdN46mkFc@qVnNd`1x>V}J zAuS5%x8?)=Ywso_J?LIyst%NiC7pN>PWa|==)~uVQ~C0&vA|@5=|Bo=xe;D%K|24g&<=p%M>`DgMR6vpD3` z`Ip15>G7%Y33%FQB+b_fyHgJ>ihaMvIMK0sq?I0Cu7dPAqfTa+9oLO1&-ICWu86lW z%bYC-3B=k2s#4l+Q0N5FCVnx=0fNtjaqOb2lhdhtqb)X-|&9VVa@Ci|rHmVFnBO+LBdW|F)X;hkWh96+uV@*@vo z#L-EErbN=rLhRnTEal3G6WO|2vKYtl@;}aIY(0oxMN)O4v6op*onO<$m3rbbn*d30 z9LkfT2~zzxk*!-0>lv5$*`ARxho<{~rFMH3WSKWiO`{2njZcG@Vsw1(zlup}rTCY8 z7uj}lDF8q_wQHl-p?_uNT3v)NH7m)IL)Ou=o(1diUK{~#n-Repz!Gr%dfW4=U`qZ& zm7PL_s&jjKym2Ucs!5UXz#~ch+5WgT#GRCJ@lCj7eOLxB`US7jCbLhAe4B0eV63<^ zK9ayV_0$J&-Rkl5{BxAK_BZycUiL)&p~oj4E^Rg5uhO`26t&IxspZLoPT97spAG{E zjj%;E+H?cls=4_0#ev`m5PZF>kw2dY_+?^2D|!hEsx*o$%?l&HGcvROvkkPw>u>RL zxV#tcQA-6oe#5Q(2+a1+k%9Ht*Qu-Bj}>Y8=ZPBlKxbQjqU3uqN5~RWM3_GSSGx00 zf5_S7ahY=Sh_JA#^vGjdW!8ai%F|*EF0AwMZoDH0877}@X%qX>l#J*$yx{x^r=c|& zp_o{-K=I;!0mk8;8|$!_xK{w?>(|BRfFSt(IB^QkRrwuV1%u!k%maej31Ch7Q?vfx ztkTAodx}M7WO42p(S_Z13%|(a42cy#$Ysc!NPZDHEuW0ZaH@l3@UGA@**(ffpYcJk zYtIGi6~Vh%N-wZet>hPN`SS*nYjeb#nGVNnWG<#Wd)FKR>l~uegpHho4}4z3>x58S zvG_Ji1>TqU&!|l0-~YLMK&Bc>jYEuZVv({fPvBos<(XnnDKFPxknNiu`W;+rYX4_*W`<5rZ=xsQ|9aDw(e_k>Ks55aY00+CMItDlfQ4+Yju^fb`W6ujP zy>%IUr9-evktd*H#8d-)g)m-9$TXrg0c?xVm!JO=es)6w9m)dbKQ$n;uPDcd1!M>% zDD;pkCWAQRL~=K%4Q^@wh6(L-fnNj=>p2e&;l~Y7!p7%c?m~8VlWqUDKBM3XH2;ye zC3$gsfjt9y+tdNeAjV%gSegtA^9I9_&{;m6s`V4at%Y4-2r**(6%&1IhQ$6}e^+wl z4^!ZRYA17dy33Z*eS^$mjT7TX2>OOcskxY}jCF0#>9`|5)5`R{)T9-0Z|j@)`Jb6_ zaGm)Q0E)-UXpTtD-}{L3?gek@DkiWByj?N=#s$(~D9mCtbudoX<(2V>khWWVrw{VW zCT*_=$r|9;xPb)I9S3bdJ|a0nO@B`gIp8~3O0cP0FY7$?O*S7*)_UJPST3xH;$l|U z?E3q8%-iHE5m7y;sa%-*GUaM;xOv}uS!QUGJIsZ8_u&(( ze36z?$cG2CtoqwSFEdDgM80&Gc8dsu;Rb>$nj_H+RZit1czCToc>by6vQCwj)pX>s z-lYw6oSBw*6zHM3Ql}D5Jo$8L?x>Rg5X<*D&ecr|rfv-ZfVvZfB%!GY&g$A`*2HLx z|H_--cJe<=s-_d&?~IDYqcg)8Jz`BaUyKvm9n5E8=y2oMAz-7Oe!{p(GuGqYwgeW> zfwD6mxeOg;<%#exA21Ua!IXE^VXRAH)QXTucpzv!rZ5`CC0WmGX3b*qm(?eE(ra?q4f2XbTwXgZC4S(2{tBem$< zRdkA`ek+Fio+RhIe#b){XnIcuwP=Jn7rHmh6{BNI9U3ZhVEt}Qe?e`ivsio?gV)|x>aB924h{l=myd{1)mpe1 z&m0_1e8Sx>^R*`{a%x}4eI}7JAu{oG;zlF4^~J{*wZCOk1~sXZk02rwq4Si`zP-%qAhr&s3&jQ`pJ7@b3R0OHrfIKX5v!cGm<4|jH`zx zlFD&#-O~gf?-kNo>dv-HCX< zNI3IrS*h7%*FW*a6wf70>y19F^4~m&PZ2c7rpJ#h{wIlpqWy)FlD``F%uJ24LbKoB zcYZsZRDRO;;B&-;fbr{iX4h);GX zeQn2o;vB0`@A+-}lMuJ4rc~fg0$;{lb44B)e_6T*uiCBlQCAGv6(GZsi3YOfn3HSFDZ90Ie!mMLXryZH6A2<{6lt0!FBq8pUo@c)D{6&+fGXOW7KQ>WuJltJxGOL`kE;~dj>W%3v z`^%u1)uch%Mkxd1Gw>FB=VpD(6Z`cQ=TG?<^#>+ac(m+@!o`{ftIA9b*|7M^9>CB3 z^~1u2>&GNRp{L7PJ?`oM%m1O*E4huX~ z7!_2U(Qdm%q)QcNv$^;NWUx{XKR-6Kn4H?NM3IP$xU4!iS3IO7E*iW862D=V(V}VH zw$YiA7FFElQxDK|3a8*+O#r@Rv~w{)`vBGU5Hy+Q=A@$Ts5$cSmyB0w+%+eC`jQ&^ z>ab9)-)g2=_t{-7X-&t z^fDN!S@@oGq!Yq{8JP6k(GGVkx}1Pok6KS=t)a9Oz&-At38zDi%*adSZtrN7RNZJcXJJ3YkEwe=l z9VG;_1eA(El)1T{g$SkdRg_M9H+AmsC8!b1Tcw2R;r8=jK2y)^4UzORZ_xJ0( z=?RKSO}`KFX3MAZZd_Y0v$7JSy~h{f_u*BYix{5|bH5s8E$mT%Umn1zI*WS9CN}d4 zoII0w`PDwZka{hZxXEpkV_Fmhyr5B?Bl!lfGb*n_98QYKuhQKQBw~{#xDo-wy-zGM zp}#f?(M7p0w)ZS=`WxpJg}2zyw-lh=iUijN9)#RUu#SL{jazgqh?}Nhipx^cAVp=$}!3PgTJ46~|hm7W5 zT%S3;MN(Oibrtw^7s+pwR{>l7ofU44A4f?)j7TfJ7qi?N|1LV&TU<~Atvx(otRW!@ zHp$LIIy6tKE@yw9AM`4a+l|!L7bgQ9=B!jSvrlCw9XnErc7l;VQJ6c{TKOBCmpvi+ z(m)cUUDc{s`9-%wdl^P^@Q7YfPu0}Tk{p$ykw?E}{k4Y?Aez8giu!Y7HV7~48xu>? zly%rAA9NlMF163Rx?AVsKCVI)wp5`ZdK)%^$J&Y#fG7Q7|Jw(00opZTy3wX2*TCnp zJN#=#jP{5?C7FC;i;2~ueE)2!D#j4+DeNHoKbg9wY7V3nhQUJzwx*VezN3T9CF$<_ zlv`%q2clYn9^Rx}=hKZa*6D&bP)$uC2ADC($wCzNi={H+SClv$4RC0*SMUg7Amq__|JAkKcv60qyE@aH<@^2>75E=6PYPvc>!698IEJw9QvHm$-hak( z!r1$I*l;VVwY^AhL+-qm$%`ork`ED{|19X&cKe_vSg|n!-}1GT-Bg;c)Z85aTz6nTpT5ZUzOm1nCm>8( z69Ybf7$;KV30a--ixg5&cn4t9-iuX_5U54RS_yOZ8ahNz-7}J_-iXS9xaejHFkA-| z!k^a_X_H95hVZ7VQd9)mNVCa94c_K0{>*z%N~KG2)ONV?-7*d3(ux`x>i3Kq)QO6R zZYJl-D*dp#R2CcuJT9>q?jH0p@tM5cDRTKaFNU5hSVA3WMJE;{C4w{q17lStH$6f* zHoUp+bG6Qd>m4Rg!)*5rN#Ka?7xOW1PX`q zmHxL{nxL~nF0k)hNa{YRLv=3wd1^ugz!!f4mNPnRK6AMJudd9)0&EqxJcuqfx=j;t^S<)I`x3MxdOw($cqeB%KVJO(+he3kRcviy=Bl?qCC2=%)?jQqtfAc<;eEqb*qw+&= zY7v>eaYvE!y|XO;OwOGGnSNzyZ}l_Ee~XqW+OPSGs)NXjvgz5tG5u0#fzhb9z~wgt z{P@Ca$>rgf-lkz3g!8uTP$6uV4peY0uC@98 zN@;fc@mL+OaSFlIu(_ogMg<}`k-(SCAtXTOY)lp?R-*w5MBio~A8Rbm-i7t*JwCIL z!no#qjd|ng_=x^qqeX+}*U07PL`OLFKXG{twg`CNSUMNQTflxQbd>XD>(P?fq-^mt zJDH7_yNS^|Nb8fIEO6db_Ze^sSZ4@m5_Kg3YNNC?W+RQiAs@n<2Yyz zXV7`RG;P=X>Rt4RW;51BpV-=V=Zi-=tGjMiHu=B!3HjCY=w!}cz`ypQA#gQlp|OMS zfZJ7EM8 zkA37<+o8hEmyKpRX0`z%rOn{6Zqao;ykj=nyR9=hzWybl`D&_k^$peG?8-ki3G+n# z6I0K`K;a(&PowkAujnA3ASS)U9sbYu-69t1DB_0q0DdmufE_&zs!9pd+=ZU|=(VK* zq+m<})Acm`J=;1snvCgtZ}6QP@BwIn&F~NIcPc4K&sFgO_xUVAwW@LAp>0cK^?&8J z0LbyiL44ye2uIq`d@NszunQqnI@k?dIDclO^uDZwUWXGT0iIn6+H*44U|H?)KP+s( z`+dq@qMmNFw_Zr34f{HSQCQa+y6bY_1ERLC2#D#ZZU4lDn7-x^g8{U9ospnW$Q zXe&#|kvka!=`9u?gBm*RxVcU)tZ32i*uJe%4{oQc&T)Bj;`y*_FsV(umG}S3(zyN9Z%vkAf7BIzw#j{9p$i#PD+ToG7SJf z;Eu`EY#?5Tay@1zxE9Se{`9qqT4(#$J?`)@?82q)Ox79)o$k~$ifH=mF*}JW~ z3in-9>c>)Xzt8S()$rX$4#$(x>tX{wabjUyv=Sk6Wrif_v~7I{@2$#Rf%ZY@U4he+iulkHMbZ=VG&NE0lElw(M^qwM! z9pn68e~M*~bFekp3ot6uCK5v6|C|uyM~uhJV&nUcsDd^0IL1_*wK8aR1}Z%p{jrIU zf0Qe5YyrzI(+#Qs1Zi%)Zn}K>t6gIIJt1KFZ!yo(SVOWxU{UOkfMW%~gUD-GWTaP! z-z49>Ac#7({*z03kr9sSd<8ZE`Xlwp8t)#yl1RHX5S|QoI`pp!Gd_1N@>lU&uxPDX z9uCi^V%1ERpp{JG+<*Ey)xg3_~BXrxMGIB;U>{QbAp zRVTma1r>rMsfal{tq9e5Y8c@59o|tKIq^QbEgcJ{q}l6%&LhQ_4CZ~BbP{&!xNqK(E!ti<`1tbyIsy{EWK=wq;EWO;)?JIKJ?T^6|9eGAh=Om zKlFGhO%OcTyvk-D*r9AmXTIItHLlCD@qacOQ3NWVycdd`$i_5vQ702dok#r~C?=5^ zL{~ZA`kCq!eO1FUZl1=g<2a3BDp*PZdHoJO6nBmPZRBZ- zqip5+H>Gn#-dRsgg?q4%-#8TC0RO3)lwbcRFB8wRW+y~#^ces7My{+U;-P5nBmKO< zabR8x_DK};@q=TYwTr#%=_tKJ4VKbb%uyFtfH-jg!X5v4r|`c0@0$0p)#Tp8DGLS7 zxu;jkoI}_KkS5H3Z5dL0d~p0RPOPeC3a5aVyji$Aa?_#dc%gN#05P`Hx^OZlt9(A+ z(herb4J82kz%&VOk($q&k&t_Q$JF|1Xh`0412iJkEpN~fgwYDFLB1;QgQ za~6I>yO>{6|L#5<0~VN#ww_6%a3ZWX?UEQ zS)`P|kFFzvvu>fUL|mIE&Gv^~of2+ZB`=ABl>l*3X=mK3(aCK27OE6YmHRHstib_6 z<3*2d4s==GV14mEne;`pDAsHemP(@a2lh!_KlOm`*TQNbBAZF!ImXb(VHTeGMOB7|R_w)0E7j4QqKr^sIt{ zSx>^8P4-R+iNjvo>Im`C3#8BBM6WdVurN^0W#|t`V%+YI#OX={YbK0f`PHRby*0ETHJ>pz3iV`84U}fIMaSIX=@3n@*p?(AmL76ZJXvzZ_1R3(HhgK zjZTg>srQise#Wk_&luIyAnBFRh|YGX-LTiY+gthyxgO6-^k!7I7GbaZTuwD`yfn;)(yrW zSl=i95wRl?NIZYSDoBP;8R*f?6q+beb?21E5SYZWcK}O?Taj36+49Z|NeMy<$@d*~at0znpH z`?=7?&vG4Z>DPi1&M{N8^hpBrW#@L@HrwC!+&vjf^L|*ulo}Br6||Se>%m##M!~;H zH>3on{Ec3q75p-P&5{}WxXuXPb_2VTW#eXLOJKzLg=?;OF;@n@FhSK}CRK4!#u@iV zReQ1F)r353K--}_RQ-gsFwlSEVrB5M{pF1eR;5L=56{%$MJJ*au-)na#2g{NY;KE9 ze}Mhv=pX_f^BqnPCIh3Xx;A;vs-<{2JFLRFQ5pEr9^Keq%@e%C{@fz84~YvCxpCKV z=QucvMo%qt75>QvA1{zB&=jU@U`xv%+@TJJa?o~-q*=N6y9t$HmN43kLsPHDM%T8Z zDv~qB`lk*KZ$(P{$xQyMD&0Bwkto{R6{;pR~hR9UwqRy22ep7&gJOUW})sEAOT4h9sr4^Eg^z- zJCkxuH6eRBketc65bCIH7I~2GBL2=}USy`hkhQ@Om8gVidhL!297PLi1lrjd_1{&> zyD7DGmVnZd>Q4v-!Klr{1E~mPEv1VNN1_jC2Hn7ToUiQiIi&UA?dC)7D^vAvjEdre z*ULaki^^K%ArMygV5tyJITYsw53`==($K1FaxF=5JU%9O$*=nzj971)<#m$mtPlln zoKpKCW&CLpG3}*q0Jh<8+D03fdOlMKXj?Zhb$<%J zwMQeRU@ueB;0yoYQ;@^;Y(k?{X7NB=XY|xI1$P#k3!))KpZ-J@G+`s)jp;uTCe9CH zqZ3F-X`pAaq@|_NFV4|Y)+g5+zV4P~NTg6!dhWsGSKy)NL;?X@$+=k z(vrcvWzv~f(P@$I4fV@kQG=TXqs_9?2%A^YA*Q9~nif@)zVe{I(FgR2Y~oj;&vcp9 zFP~M9WocLvgqd8FfPA~d)LF!nL3-9%5wpHW<#ga+A;*^{|3tt4T1%2FAh8o1te{i( z02@ch2J9vrVe+@Xa3C?en9nbla)Y1gq{0Y1S&qTcPXw*)Ws&?~8uM6VVhsC+d!Mn( zV}lT-H>t-3tkgon+qf#i2>gp)2QX?lri+u{o)BDFoy!iNBg4<1ppa6$9A^Y} z9f;*u1jYJkw9jjdu%fj;Z3^QxCA}oHrIz3wL{2=qt&t7ix8lAJZ~y}Vor)Nrx6M(^ zyVoh2@!bzN8pgUyQ*&tBh#MXe9UXvNt{S-bLS{uThlLqq4Nur^T=X7i(wHy?rE=S-%avC9K)e z7L(s^B7e1bBoOu$|A-Ec7~y4p&Pm~Y&JYO%0bvh|kaH))JC&tnMQXK~p8~r6o4uOl zU;^d&%_{!A3pBt+ALY98qfPYB=^^Dn7!J{~vz^>aU0bs*EtaU0)Y+N&M05_`5CIxm z5d=3&3-da6<~{lM3)`Xq>T%mdkLi!R<3TJ(-}f}pWa-zQ{qrdn?skpe2kd?^MTAOS zkpj1tok)i&Fu4)&oHXD;m}V!wg?azPX^7@MNC0;7#Y=Td)V#vP~@LIT#X71QgIY4*Kp_(bVKC$+36;6|0$fD9h z#?VZpTHP$|zOg212-utKMvO?J06EPEac*xccc6`KsEc>~_kCWnrM!(GFyA}}jxIM` z!i&BZ2o0Y;q9k_Y$|F#`^=ZiQ>#U(BG%1NI)XSi3^T&U)%D=QZQHzA*NEe*;nR>a{ z=Gz-k7t+y=*8Cv`IV)V#sX!!AW!(%7ws2@T->84a|7=sJ{+@fLFG$ z$B`1--}7ZaZeqm7Nhi-?S?Fy%csv^D(#Yb>Vr3t9mpgFnc8+-mE{(c5K*!&M*A%m| z;pV`JMWB988wGdp+08+v=DQdWJs0Ckdm+tm&X_s2|1Fr7!Dc||$5cxvkSJHfkdwb*8Q_Mqdq0e{qtd%S?CgnIN?rsq|K z{kR@KS0Wp_oTLb5!4(o7%@i%i@{sE8S?ze7LoIor!-3Lb+29`(NnPMGs}2ULtzSnf zg!O~wino+sg3n!*sCGv6OH@5)=WTlPvCEp1Swbc|8)@ zyLi%K4P`MYGK59(B#d7^>OOxd1!8LA(G#(VwWTlcQ~DPgzKfUFfA@FQ6?tea%WL7~ zQwd1|$ZX0(w3z_5?vcmM$90?^j|LB6w)+?&niI;L`|`)!9iN!POd3o}%+>l@9Ja6bM zwD(A12Jl?js`@}s$Zn<6u`(;&F2#mX&dTtr#q$c)f&0+T{ln7f%cPrE8&}5${K%=J z_ahY;*CBz3crc5djGL4Jg^rm@WJ5w$e(6V%x7jQo4U@t_Jp#_}&A2gs+IKM|h1)W{ zskk(>27YA?ZQd~USG8$CM;4f$@4d}mVX_Hldg@I&pJW=aHS zxe9S~=&0Xc(1085I_30j#_0bE(MbAuSs=k!;Xlxv6~0L_6J^@O4VBQ1HF3999i8@H zyZ%$-14i=A31pYg1(uy6G8<|e+i2`{pY#97{eLW7WmHsuv>gVJ4(SHz4v|ht0f7OA zZV+jZ?vxx#kdPX>W2CzzC8ZIh8>CD6-T!;8jzc z#r@XM#I!#mt8mK}qfF(Tl_hNU4K4Rh$5E`$XFQqJKcR zAeA9!Jrjn%aD3x_%Vl2M9-vBJT=YAHsLwQEYBOUCwUJZT0+Bfzb0X6WI`r=mwKAWcqhjf9>@85 zH$7)vamwV#j!XuNQwGDbL8G7ked|xt)3VU@ztNrO6UJEdX}(K<&w`@x=koyD88!FO@0}S#{#(%|oFsoW1Q2JP}@f)p^{{;vh3IssblRVH=w~rJ*3^Z*B zBYcOkIg{DT{w>cv8(2w~z_=rymO8FhnAxId59~()Ht={VQs6n?vjR*U1u$u9Gxqx2 zkRWvE_*Sy<|AD^hf$#w>M4>d3gaOG5Mj&WIht%%n!<8iR@*U zwejgD)EFqPjMHT%bG&=GuXg?zw4`8uAy7zC2!KCM5dm)*Fcl5BOD)Ydk8L;jIUV(@ z$i{%tva>4v1CC`veV0)Jk{#r=ahux(}y4? zt>rSPV!{(w6iu0^*v-8E#XfOD5NJ*(^XdS`M4_=C-Z{WSK>Tz zI&6HmUT6>aNS-%woNYL2h~ONOAKl^)=VwS2>Cq(#v>Ne4Gfbl@2CeFZ>aPV5&s+sC ziAYJq*_-wcKpy~X3}Ox|QwPk3AVn_|f_7Hz+mRoFqm7JwN^e!gUoOo*NR>bfBZ9*; zrd`k}RY!aKMEcp`0I4nK>@XJI!RiedKNnkm! zu-_HiK}_Fl9Dd^}ArxKGX29mA>DEkI73wTNI`O(bv`c z7mC;peP7B-r5EfKwi>iR>_Xv66eI z#;NY8p4I>Q2yq10aNaI`3^UXI7&B!f6PBpp0Ziiis#6kHlL6HV-QvY-Cy^cGBidfe z%JYzJnoy12Kuuf)_dByvg$%+=sWb2g94j=5WfTZwV#%bmm>L`4Y_NybAMURxy7F(| zPrGtEwh`me9`9GXaXY2(3jSZ`+C`4iWZw+_o5eM48{l^p(0brgargZ*ZhEUKU zAGn-!1*^=$;L~yA)?l&q>mrdEMZ-J+hd<+U9xEbJ9y++Kub5tEn3T#T=DxlgJqv6J z5A*`+0avWR*%46fLG}A4Tz~{qrwwMJ0Y>r0avOxmGQ~bPbvwVb;IAQboE3n+)F|Yt z8C0F1F5U+33zReA)#n%xScGR)ljjs#tu)Xb@lg%KN{gAl?Dqll4zdHNUEE~er*XZv zxAbYhy_a~)nQrJ^wdZ0%M2g;oG`%W0|i{I_k$r#Qh6( zBUq0C+TH#5x!#^iIRwY=jLqDr?oG?y#zF#blAJ=KF{3rmKN|a*;Go6|nmDjT@S?-U zV+yM%JIQFOyKD_xDPL7KTZ&10q!t$oXgXl5u{=S5gAe`mRXLCpNUMfaZ1QN!eYnaI zmQYWCJ(ysMeY58N;R}A*88o!?ie&R6Gp1t-P|6tjHH}|lT|5&oydw*tTBk_)gvWZL zzg1Kl9&cF`#ei>@nb;4gHPXQ2_r!{8<;Vd5JN=2lx&X23F?KU|$Bs-49l$2p$SVNz zlDgW)d7M0?Xe2ya{8XbY;8BXvb;#EkFKRa|KRdrK(5Q5)^PJ-Lmvxhab4q-{@6W&H zfhuf2Rq9iSWR9R3zLc5IAdp|8Go+0S+mxB_QgHJ%xixeE0y4ULxFZ^;5d3#P7uaII z4mcewR*P>wm}sF{blLkWa*$R_i>955H1^P)qez?^pnwAJDY=-M?caLBxBL-}EKaSlUbK<4=wrv1UxH;&< zIEIHb&;hqVvUDK~6)FdCf;=!u8gedD8}XAN8rF_p;L&;B#Ra?6MP7Q1ae8?2k@L;? z4OIzJLZ+i5@57_><)w9ztHqR^ic!v3z%I?b__{=_1AbPNm#SMi!S2BsVwcSZ9yo0L zKrC;)TMAZ~>#M)T4kql}nPJ$jvnGq~AYF34ZU|LVpV=$5j4ztHP*(n=I}?AA%*%QB z>nP}@Myz2O7U|UCuCEpOMMhNU!1Uc}B+JPmZGhUuh6*IRV=dp7$|LNP^r&(fDo^5fx8mEC{FGmKWP)t6mZttP@d4IhSev+%zewvJ1uNhLTqF zhEAI`Qh0xKTW##5aaTvQV{=a*rLpzR+8wOMbGH47)$}H@>89Q_81d@-y|&U_v1$ z87;T2Nm&q$p@=9yKTjK^ByYXNgkqdRD~+wLus!y6Ql1PDZXafgYjHhcn;{$f+LTOb z7MVph0rrc(*}j)vvww+Sv(wewh9{%F9gJQiVK-5Fxm>zmUFg22GG4b=lY8uMA0Y&H zL5BPJXS8YMo3=O@r>G9Ay-}~EpZ>8RZCko1j>X-s9OQr&Lh(1Y|GJOhOX&~gqlcwd zZkq1eV3+4O1UHcu$IlRbA2l`UD=5{MZzZc z&$Z~Bs`u|YgtWa;V9LBR><^!AL%nYlWluCW#(Hi!R4~2N-8o%f*1c-d`5Q5)WW53f z^>-Gmn1&_mX`EOLSL{WD6~O(P8`huJc2;|HqjP#C#7qf&2oJ+z12T2`f;B?ugNJ&D z@EMj1H6Z@SKc>E9ch$DGsc2a05*sSdImD~X&%FEqVuDnDwYsSLQCe(KfgGFc?yaqZ z6l;y+g9$nvS}q|u*{AB*hL!iY>@PluIyA#sTKScG-}e5jeCuP^CF_0g6arGl!`%LP zf2SCH78`=MekR+I)DHB>DEFpUR zw2bHtcA-TJrdRZtxI&bQ%c5?~)?YZh#XF|In^s zNqp@rZ-fW2+IgVjHEJqqMRM+#OqC50^cGa7=3SiwF-X;m%D)RV7u{;C+u>NvutwM&H#^V86!6G&L+ zeyZSdf@?^_fhkwhNrU_jX9udY6b_^w|HSxpoECHjSk?Vi($R{z|7z^|OAXU6c07{W zUo^FYi&b&{5o3)|L)g1TE#svVk<(4&iFu3$F4)1W?Xb3{=Z(Y<_c=sg6Jmbr%fex? zTDb<`{IWmZwhO8Y0voD`WdmpNulIZ?eo-e@AVweU*|0Yr&S_XM6ucBiI?3GKZ&dENvn$K zc$VIe)<9PFx|+3NfS@QN7{4H%jSL;Dq^h^yj5;RTr)*;>^W<6o@iW1iCFUSWy|GSL zL{s~R4O;u<7=%fOC?NepjKCn;*G5q`9EeC~gZvc`XNmE%c|LSGp$>{h+LScmEtn!4 z+7&+I+W&4s9Eh-uGC1oXmx@|&)ymJbm2UU6i6;rkCsvP~s<7#g|9O--V*NpBp0!?s zbFHMqZCG%{B>bT%^l zCB?i~6w)mdoA*lf#Lp=Le_(3XFq}Ogw8AVZY=@!1L{~$~NlBw5Vx$GaB(^ccDb{bJ zINam%ZP3e!+kUPY(-yQs-{4dl`zVFVtG{b>?QIkmkHcu2v&_A+U-CZz zBeZhCiSiMHqj$D%(Ik)m1iS1;(B~vdYZRfx<{&}XZRosa2j>GdHCAIV*@<5u&+JAR zbT7#50YmJS{$c6_3k&6s_r60_`r>Q1itK$5k~ay?heaun_FvfX7}5f>{NaT}S!p&^ zF##NFdp@KRugp-UfZOYceGqe&_fTCsZir8S?y({<6mh>{W}<-0o0fn1sxT z`s^g0O&)d@Jk`~{SX|ZNDL9Tec(m!LPyV0}MCnmEvhcdLc*Kt(s?Zpnw!OKE{8#RR zKi-Dq!_bJ>I8E?o2n+OUf+u}nSJw1jEvF8$J()shv%@1ty-Sky!dsmEs_%(GEi@GV z*QB3L=cKrUEr8RARgV~n2)M(Ld{sqnAY!n((ffia&=tw_MmB#YH(ylgug6h~i3K^& z3+T`6ViH{iaMU|{n%-2Pj<9_}Mpe;~si~~160DzXD-{i1kq0?R!VjP-NrjWl2A!d1 zJ$1&cGes0I%w&_Bk+~F;&SdMCrNwyqxi-D8*r*hV;?xRQqrT$;CM%18R$KW|sOky* z7e8Vj9&BwLy0JKON_}aikaOq(bXgCAmr1%~?@{H1?LuQXAtc}H-7)4gUhs0dlXzC~ zN;6C|KX2t)OgR>cA(lchpqN;gCAPrOoF5Coa=iNgfFoW$I5EHN zWS5H_4W>G9BOWWBfC~GgG}|slX9@|aeUZ#`r`O8OeXeF@?Ik0!riA0*r9S8MvzN27 zW+bFICKW8-CZ@sclQtYLGXVjXOAvKk{4!=Cl}~k}zh!k6PT2L&5|6v#3l*i!6nHAK@Qf29sLhN*u_{o%_tT5WTiV2IT1OFpx?1A?C zXm+Bj!U~pzEv3=1?`_p4$>G+yv*DIPNU=J49LjGuGyP6_muRRo$d*{ni4(F}o8Kk& zFT_dDNzE8pVv%J|UHA>0sEV7zyBhgWqNl2#gA=* zJ|`QTL5vk(th_!@f<{Kn3NEVZ!P%}5>Zeh5K57h}Bm~PVqnCmd=;p@^9y65+FI>%ikYAjITj)ZqqBl<7a$h-$=2SBS;8!Owt6 zZjT7!Hi~kaN*6?*fR4CqVE>PUK4l57{tNs;QYz66VCWHQqv?)n#{DmD3 zcIgi})80@78&#1^Rd%zh^)wX&^7&I^0B#Npy`F-2JuEe*}msHy!9s6oH>x(4=iq$SpHCTS+v}6(& zC01IX6{*xI6e((oHkgWas`>pc}3(+Qde^T=XrGB){q)c_U#$yqfV zT4|DX$ZzFr+|E2x{m7<%l0sR#Nc5%H&yGeU(U(->H6v%x`6s00Ht=tqg9!Sr1^)u;Zi1uoM0uFhhyBiU(2~jMd{@fl|>?*W$inwV0vS)lri7k zc}?$HsvfeS2JxHlTls@s(^_R_IbDSs*dULL_Q3B^uvL*!><0lzBu(?J*RP;aMc7313wwz_%S%Cdr?>`qdUm}6Ohz{si$mQ{ltBdq z+gliiLg1_STPUz(o8I@Ag-o<(?kxDo3L`{Ly)oLHW`*Aa^T6`Nwbuv55urGX{s++k zmuvg|H;$N*EWSa?Q6<>lJm|(R>J29Yr(2`4g!p$-@{%aRWlrdSW#ug@EbA>hcuZzl zG5wC);pH|ah2d-psFaKTi1#oY9$xI6iO$sdAa9o#VT>>|khBgMph70)t^&)y4zVW+ zM}>_HXec^VC=rqD87K#arek%jr*JJuc*dvp?t(_mb>4~$8emS*jedwP$ z&=PJoNOAejX;8KB`+&7L#Ez96Up+a#`eS97wB)a5Lc#5P$j?m_*Et>T*h_%P2&Ui8 zYg4Q48^_DJQ~ld@)r3NZnq0p z!u|AV*Pah3*kk-PDScHL5^j2_MVHGqH!7~`#SQ1d3MwilEC*I7!!6D#dwWiz{d1M| z!5ZPK)`=U!WuYp9C64E6o{VKM9V41fP6dNN)7AW)FKQR6Mvb4Z*{?A5 zb@RjqL%IM=VJ$S|bP2K#2pBd=DhJYOV6 zx&=#l6H02zWVHUHL|P+!INn5_ZY2)I;ar^FnFiuZyvyyZ&|PC;PBObP;w3IyqjkI2 zGYv%HW^V0v{0e|u+OOMn4%%bky85Ch*P%Ewk>ANR&Q{vt9|^rO8AA2^Z~Vd*7|| z30JMY1@WoSzuoxt(-ief8kcz>;%diAzrCU|)BM4Bq#nq|vJmYzVIQwHD#8DVSr<=p zma1b_cosAE;|vYM`6O zoxeiPQ!Xo{eWlly-h0BzUl7Nwv6;Lc(JB}xCbZhpl=nv(mnic6ooml|m9)!HArBJh zxN{qi&+PA@5va*u7Mn<*er{1LVR;%EKs-a5lmQBzq>(pIDlSHttb&OERDsALzhrGp z(((N&{Zg8Vc6OQ{`)xz5qpHqN0VslANYs7o!j8^UQ8<<71SawBKm!GTcE_lOw_*#i zA5jzWWQX2~IU#!=n#u7{0e2qb+Op?36jM2MwwIcJ`Rsiq$~7$+lzAx2ck>}Yzvg?T zsw%{p!R)e?=VUm4u|k!x;Zv?qUZb}##QsBZ*~-iuc^HhvF)J9eNZ#ODR`{VJNA z9oBLjY#Y-(lOz2n`lU4A{H@34lqQV-q+w#{X8m*}$d1ZabTXmtpxUEB764yoO+xY$O;;v`Hu2X+iH51SPnHmIfK*eg4z~I)6e5?)7_S z14o0B%QaWwS6l#%~JUE67EBA6Il-f?b{GqO0uam>|bz44wy7j05^|Ub&56+_0QAz}) zSTJZMvdO$sz=l|k1SL`t{@J*A@&IDXqhnfURpOt{a!{mX3RKE_a$=LXeA{Q zj?Y_+&cjN=syTH0Vrw`-tY&2g6RCjZ&u^X|-$&~{(pjvk)MT7#a6BAZLyi$1>kFLY>d0U zCnU0AEhnzNN+x_&s>q|CYCaQ7t24!s5m9HjK|+Unt2XO_y1`fDHTbMcrhh3@>Vnx< z-%|2#4DJAI83kreftEq-7 z`)C%?V)14Fxi2hd0Ch}^@VIcj-{Hj6hJs%s{sJyRxkhCHI)JImJ&tC|(MT6$VHA=K zo~l6ayS*f7UwoG+sxwZ0q5NyerD76mmzz^4!(lNhlw)jSGve#PSStY!d_gq>?dEYQ zv5OBv<$s+9&@tzFJX?A>w7U!l4M!6ffEIP>p}#SVGZ z2!S#a6a%8)e5F0~P)O6X@mq1?1wQh?SKq&VbqQ)H!3>P-NR}VNqpHSWSKOLq0xtuC zO>VL8O>`C08HzubjDNMn(RMalb=P<3i_3a4{@Ze#hPjy}oe1P9V#9^Zd>WH0=BaOv zOzmE%`71o7sV;4Q7$P%Xk`JW$(!h2MUw z33ge^aCb3Fr>^zZ;LxEgR1jfO@#ahr+!Cn~ zhs`c3hBw3iuE2dRl&W&!7X=qve%_LDL6tpD9KmwW+&RBb={|x;4x)@M-#!pS^(3{%t9l&zstk39i8~3Pib98Gi@9#4<49!_MfOhI2E2tXC(2VBX)! zL=Q~k{MBO$_4X!xvoP2N5V^pt_Bq-GZsjIYS700Nlxh(>6}=blaFA}!Uu2?(SZKY1 zKyCYJD!PAKj-XC;!v$bR3hO>G!>SU-34=Llh$}B6>aW{2znQ5C%QF?<-wR$ZpO%AJ zX;$ueQd;xM_P8SOIanJfr7m;_D0^CW2teEKHxOLMeEr_a8YghBM0r5ZsU$4;^(W)| zyKx*!a$ftlRG|jDW3@DjPWUh1oI97de@$~+!i5y--G{Bn69d@aiGN8oPc&DZt}IhR z2f=Q3>7XW>*ZhRf%3jw-9OwC7Br;>~R~oh+it-!>w=mDhhMW}^navle`@KFe?;^Ny zIVIUE5sQx2tlmuIeX2Au(c%>8od`=47cGbm9C2q54)AHg<6yaC=86)_zYbF52I0H) zoR$1L{d6P9y#Nh2EBdZ%%XpbH_ixJ+v6BySLU?&R^{jG5{x5cb4!|Hf9LL&H@Wte< z*88SyF&nZ_VG}dF_`$=Zjw$+GG%8LiojmDA6E%$vuyEG>vz%M-zk7hX!th$AW=YK^ipo3$B0tu7STDL`yhebq! zTXcW$3u?cJeIx^|tr!P|Px7lw&>vRg00kcvQ0^gZng2nF&2UaSpE;4Bhri3N0;k@wZM1$-bZ#`!elr|3Uq*w*KhYy1NB-?yAEV@fU!%l0o^nFniEzFyn!wl^P_94w4+Y@%}>;o*Ubg6Z#P7wJ54io5_? zdipRmRXY7TI$kJne(|g4MWXLvD_7CVmc*I<9~Y0Gv}Plk_^ju8Ru|CRcc+Wh0C`KG z15hye-J=S4de<7ceM~4xqPq0CHtn$1SH(=`M5p>aC_}WATk7`n zgem!thm=>GMk!q;0ZKmazY6;9B=qj3OI5cAt>iz5*O7z)QH)+kn!3B~eD3x8UplbH z@w-C+YsRC*V{8thlM$K`XnmG}F90$>55HYazmWYVBJ~_J(0(of`cHR`NSyAX%(kBq zS;Z?DzYPT8zfgTJ0{-SahVOmjN0Xocg@tTNy#$5T)XC0h28aXpus0^8nb*kAUCsPq zF=B>N6M$q-5b^#_`Eo@`!b#xfrUOLh?jHVYk~o3*$Pj_J@>u4t-*lcWhP)9IbXWzU zTYlUQQXKo2cyE|({K}oC#S?y!9}js0GXFR89RC#m?YfHLXesacTLKEm{Q3vvjbFC- z$#C5My>YEz7?b_Q{4R~i;7p9{Os<49p=yWzY~?dSTxcZ`>EF>-J}GyAuC2lOQ2bL$Zx`07ad zy2Q->u&~ePA@1Xz%=U!tKL7OLb3dPl&Dr4=E#AfeOO4QDbRxgocw7Zliy7Iwb2r^p z?YqfNg2Gl9Rt!aUw(5@2yH#XT9*yMgU60StuckcC+JibNcDd(e;#m%OvRB>GBKIgf z9=E)w8~tUYo_6g6x@_)%5M99cfUE#bwsr&>W@glDN{Y7zD|JK1F)k}LQtLd)4$Te zrg#^>pf_t zGqy|@{}5&Hj4V*wYu#0gA4JiPT*;gpuM>N#s!TW&uIQwvV};N7Hj2g1tDT_W*WY*n)Kko#4C{Db?xqTn7wbp@XLcs+k^1eQ^^NS1*%G_DgSc(A7}$69b~|yvx*#buXJ^}g=LAz zS7`TXAla2+OAwLVbiZ;jM+;Ld5xVA z#)hex$`b{s$D9|NH(L2$GyhWy>4RAluhSKoLDEP>O5N)ra=9ol5UdL&&Len|V!O)j z9oS`k5->nLDwz98lRHf@&Omzu$i}DSD&Jbf(a{NsDtj8xvTAag)hivo@pf3DheXWs z4w^N7&CDdgW2`=@e2s$a6Q#JS@r(iTHk*(F2V)VCQ>LbfeAd^A#{rPd zN(r|86((1mdUD72n^P~Mm~vD$1I-V2f7T-U&J7Nf4?cCWO-2#~Eu0c#5uwH2%OR0S zo#ol*U#S$`MBS`CEeAyg7D$mH$rFbvL=5R!gaf#o!#BbECh_?hhj5kPw2nba=!`25 zOeT@{W6H&2toWP6La00icdOteq^bUyWowU#U+lGD)-PmS6qq!5rvRHqkQjx9LGUx~ZbT1qLvV}2Ju)I(eYHIf&fw(6V)`4eJ!g7b#~ z(nm3MyH6d&u22hnJAFm9dsUB6CM^xw7B>@e-+jJ;`JX_J57);U_F!N)f4w?!W!g#i zL_N!Z?E%HNmemP4`1Ys0*1-SISIWi|lvmg|4Qt;5TwJV0a3yN#!Hjf`8lDbSsg8y% zHSMddPurr{$#ezr-4QamHjWA_4EJh6&Q7hB8T3}+!9cFRu(d)w;s_cDBW0i?f zaqz+gDQS982Y=yqj&| zQuL|XyMI~VkOvrjT?JM^g()(mYAgWNdn;#$OfQ6O@Nf$NQne~6GkF$SB2v(AuUZmI zKImf-vE8hkkqVa$I(lDEVvtE(umEIh`+7g0I*AY}tOQS(DqF=%b(gc^HHou+3b7Am ztEA?Cazu7g61`3NSC#nzOpl!h|JYBl2Dy7a`f9+vl8&9}d>%}4nf*zvoAv>(N*qZV z7{==3O~P2Ns~{ARe3fZ0KxM-~^(R1raF$$+E-e>;mODf3mVdR$KJQ_4B_S5kSJ6u!wMcIhR93g+9ZoFy-o$@Pt$!pP zfma?jFu&qLL0NgWkkQneg}H-oBiJ3Na|`>qIM;s5&5p;XV%f3xil)Q5FfigDyI=WLO#4B5M#m3!FgX6t4H;gr#W^^B=>*3zIy_jFD< zOV#*{INzh`Zbh}ws8Fqlq-aq3YQZ7O?rSM6V>8Nm`wpom_>O1Md5#ZHyKWoq>n=OM zxE5xv)v3`gW%gGQIr!7Lev_B|^1hR$)RLs?Ht#{kYW+U{%!7|0k7>??>JgoK+8GaG z-mluO*IQ&|(P2f`*fPg<{PsJWDV}sX8d|dGP`ry{#?7G1K*QXKz^qPu8A4Z*lK0v& zUUkL6Hr`EPz_?Dv(7hcM!&J>0RvSKCdyOz6^w`f$KQ z<$|f9p+fP<>+0UW`Y&>|d6uFt=e%2o7mseuN$E{n*U?XvfjS$j+2S{T+dwsg^ySsa z`8WH+9rc#Ss`+3M(&d+jw$KA7b-e+z?fl9juQ(H(EA&(N!GXM;oaQKVMv!!ZMM6)) zfBYVJNH$4xJ?4Nd&pQuK$e1MZ-QHDL-}cnV-W8H;te5duK<{~4eR)Fv$@kgstS%ZFmfdVSr?r z1AbT42wR#&EsT({H(Hq6BWPsH9eXU=+!pK?>OjGf$D;c~Vu4lf0&p+sKLr+6hu7a< z{`vg{3Rm%RltAp=jbj6jN^ruT08tQ;$pG3-SKcYn0;C@5vT5r!jE<7v@@+*v_b*2g z^2B_JzqL_sHax)nN8*jCle)e?>3>X89Ka-%9rF>5MQi-7WnU?}bnRxX6xx}cnSlfx zUzgaG77trP7ABniKFOWIkB=9ZR|r@7Kjs5<_PV7l2Hm_^nSkO|;cR-7aXNK0U1@~o zB5y;ow^d>N_lE4=k-0P){xQEg01GA=Z2gY*Iy+;+O?nzurh1?xnL)+ic z_SA|lfvPNllDtm=*n${9fiSF9>-rEY`gu^elIwtg3N_A~-04 z_?IuSp%3YiQ|WGvrh2MXX>FV0A3#T8^HQnOb?K`=2?N|!TK+=UtTe1oQf|L`*GJ#t z>E8XQmG@m?8j%*-&c_$Xy)0+T%!04_l2k>$lwQ}?AgLnS+$ej*B?jylrj7a&&V+cp znZBexst%rtc6(b01rzyWyYi;#3-$y1Bg*R&z>9zj#AS=ChVKtRF6wp_nh^9k-tA~9#@SZ;3{vmiO+(mi0UW}I~n{k^)|YFF^_ z@7M|&b8-GV#DXFj7##S+O&Fs$ux$E+qaiO9>%f7Wfxn5 zRuIQoJ&ar@&Vz^CDqHf5+0DV0yiMbyBu@je*zu0YuDYWO-OGNgs@(V#kT&vUs5}-~ zNLH;W5(8Skfaiii_)L+_R!DhXRWJayJb1E_#*kUyd01O9WR!pvs(k9KJ0GkNJg^f2 z>XQZ*`3}M?Gk}hU7}0Jmvq=i-J4zBx1FMfA7UfWIaQ^#{qY2SdJv5RI)FSF~SFk)~ z=t1}(4VPXe@{Y6<^i!feam4WLpc?_JU3!X8Rwo09srgrNuv`d63Jp>L8pRcbcrH4$ zCm%KT)<98dMpddB?^A&-%V8(_|kLM!DoiD3Y@BdIxmf$r@ zWl63*ZFwCHyf-dztuvb(2QmaJr2eAcZ~V>}j}we;ja}&k!O1#J2PK;&#;uWgPnI{3 zLjN{jzo`w=aEUvw=F$GBVp=jMbDh`ebfaGv2iI3k{MD)Phy;CWPOUd{^N*@brOKq3rs>gM zB?L*EGE8;8R>$n6bl#?BQC=`RK)*_x_W;lKQ5B(|yBCN2)bKcb*tq$-E~sOQie!Px zu{F`rpj!1=ohC?b)wATyi?v8W;7XeI^S^!UWM#RcZU)2=@)JkvU}|-@)bP?Ror9JJ zJDP8mdoiRCA!`0f%36hu;kcfwOIAH-_fT~HZoNWEC@limw32b$J|7}atyk4eAMEs5 zKJXcEY)}|Wy$wer@xdnjh(&TJZCSC}R$9*Z3!%MN)TPfULbpx{ ziD57wwZ=D2mL=^r|3KRzN!=F58;^0u$CXPD=-~#@e=l`Y@5!H|suK{Ipg4!3kj$Q5 z1m`!YC?hCy>Xzl}l_%l}u}Cfsee+)jcC3C}i30x@mjtW>!Dn4R0F0w8zR5iBW}baX zmxL2O_x$w9Ac&T;miDjkFN3Tye=Nt5IW$tv;&!!_Vr6Q`<7I*9LV%{Sfo^9#;Z zf>iCP;CRs;O%pj(K&0WuIw5x*)eCSI;_VpNBSF+S&*DOtw?hcx?#@6AkR6NS1Chm# zj(bGT18a3sv>iHr0<$mTpXD?L{no-JXm0P*hh1hGfOXi1LkAyY&eaM*1p&+^(;g$p zG5%vM#lm5SB!d=WW;K8!OhazTDPV~D=k+Dj-KbG-AaWyF>MQ;zpT`&o%UR#Z?@>zKwi1{J2mxA0L`U&~B`R3B&h65axw1U1enbyrbMn#~i63_pn^h5_09yG@sr z#bOhzIG|@2w{JbWHR89i(_xQ!P(3)NmAj}r|5^xg#olQ5N8j4pjZof8#$vKF-zCq! zuzJ$OAWQ)F;wv{Ora&w0ie~HP%{Nyj`Y@Fch@ROzcI=N4xf}D_?lG#m^?W%2DYO7r;qgTdpnJOAnGIHq-m(o%J) z`z)utU6F2jd5*i~{WMORs6~z^JODNn{p^=%(#pqgt>6AaU^b^Ljyse4!?u-o;>hUj zEBZve7S`Tjd6BnhnJkvpk)fV}*FV~EG1;6#vZ9zuuJFi!-}Ju^NSPphWX{SdI&={4 z>c?iJFA`{+>hj$rjpV1-|9ya2>Bav7RELhU(uf;~syJ8izx&JT7n=uIM_gr#Bt|k_ z{0I2uWe~c(>Q<{bUGYIuj($%vL%8+1O@}};Kma}0J39;c8QR!Uc-^ti41r;2&3Sd&M~i*a%S?5s9kMtcUZh%IQID88+D zb7GisqM6Tk*?z%o@(`%uH7A4HNvz6q4i3hSfC~QQ+wOXiJTfd#NiCTn43cDT^NV3@ zYGWj7V=FFoF-hT_)JmL}#7{{LR$XP4#u@T`x&{XFW&P^=EgU{UIy8TtPvR0JUTMGj zO@Kil+8V0zkk>ksX$^?%9w4Ulew?M(H_aX@{FR0o@=SP@S$wBGsq+D2#Rn})eQ!gF zmOMqNO)kihRN-ofWaEs~MvX>z z;M#ISwGiswhu!SD8~kjwfcc6EXScOB8MKe&t3- z)sMlP7d#mKjU{W&WBi?w$P(^3gsLL*_MJ=;Ki#}7@<8Bd2Q5sJvcXN%s>7s()p)~h z*RU??o85+?^5f65{3}ehOr7LSWsm*%Dyw}i!xxNJBM{u>C+n1(_{QRDMec&e!o~7N zlLi=9c7uDndG@~&mWYo<5L=&B(3T-#6q_SHoGX`<7P7y)nfJao}=&blHg-yM$NoAn`a z+()HbeXQg5y(;%H=?C=A8#Jhd`hh-*KNwh$Ud&<(9LPlf!_rv>MA>#-dnhT9Te?9J zr9q@ya7gLymTra=1QbxZLArbBZb4d7aww&SM!MlUdA|2IpfFdQd#}CLvEc*9$E~5; z>*IGT_Zbc2Lk&{}Guy+&qutBkmK)fqM;FK-4ZELL9w7P=K0H%*{FBD9Z5oyVJ!rY{ zD^*5r-&`r5q-1EHGP?+G9@k_*+rjwjOm3?31;(}JfplBg4O>g^oamwO5zOSMKC^9c ztRVZJov-w*<$4=oY@)i@k&c((Z=bu5?$cqTqfJtid;b~``R5sMd&yUy*dSGw(3!W} zs8eqYOH(Cb78SLx&6Q`wq=>AG(e4tr=}#$?J&FufMjcu%|0zfe+uOR_X)--4b_;A? zu%vquwGNvMig17Rcxs2Re7%HrE8_R5wxoc)e7^fw*j@s=ZNu(Uf4O9i`+6LVqlN}wo#P6cywk*ZSrJk*n-?|keeyg}HNCD#rt9~@fs}NHS{jbi z>rthzW`c+2Ki=)vhAw$#6HkrfV7Bz?&Ibu&tWEN~2jP=Pm6#N4UO^syLYoN+8n0rW z6sQ-yWqzD+@8dinfFgrUWdEzFLA>gZBv2#CmK99z$Y0aZk01#lX!CqTSY zA0@0g5u{l%Gw*nby-MoyEyAW?x#dQzl14UcaQZJcPy!3RgQo`r$XZUK`6}geUtC5- znYPMIH?~Qhv{9YR1~{x}cU^st~QEb1w8|8 zcdO5D z$gCy<-EN!rXfClf`a}j)(HJAl+kWZxUqpI%K zBDf@b<@NhFCE2Ct$bcR}rJ_Ip;O5+7x1pY|Y5$Oc@9M{WP{^dbcAFoHWh?Z|+FG#U zWUjE)d78yU&m+QOKBe+vTU&+NhL1v+{{7oG0fYlwyHv_j@8{#czC#L8p8B>tj^&++ z6%4j*6{Q^|5zvjcA99=17bqv^MRH+~*w=Vxj*faO!TlJtYqJ!GIBL=UgYR#6?F@2T zeM#MpYOXr4Ux)&8X3me>4WToI_?}tor!MyA{>6)}XoF3Eps3^Z>ts`S=zB)Cqh552 z8v=;)whep6Lyzr2zoPVs#lywgL&LiJ=G3IY0$YvWn?de+EuA#~V4GobHAhmdPH*z7 z9B@e52G;k!5`NX`#HwAoHMQ*#o}~uY_A9}dr}213lK43N*MI&wXVy5Z-u_R&dSrrn zQSp~LV~KReSc!F}&gydTdOnu>Hn_;B0#U}rAS1eN3ZI!G0;b;*3k-^d(-Zf1@K;&taqQBXwDe-8AK{>}F1ltZjol7qw2SgSscI)5AKBWuB8~ z+Zrd3+>CkD9>Ef~dEv^I}!!y9`afD zTft}6CbV;PH4fcn<>Q==HqoBmMeMC(Bk-5Q+scvjw$VpvNVe^EQY>*ISrg<{|JJhg zrLQd=uL+~(qkT;zQdo&R+h)hfU{$-)zq?+uPF+nQlkeaMLQG$%c*t{#uYZN+uFb-%xYzuLgDh)a%%j zGH>~!fruK_Dy_k{%iWW>wb5~yGIVHO(p`C(_}LmtGpo1*=K0y9{r6v&Tw#5<1^JNy zkbIP%C?$`=F~Y^`tja_yQOv}2xev5&mp4$S1E9m#Xr|rFJl3$7+Q&I(ZSfxB0XaN3 zr~GV2S-~V8YF-)pflyS6Q+1t0Ib4#{t47MA^CH5;LG97PXQai^3O;$_<; zXZ1|%=(Ate@7{Ze*b5?ssk=@G^a^W*wYR;FTh6X=NYubu5*ukJs;7(-!QSn<%PP*B zHKjs^GEi7;*V{a_;*n%z&I0qN-azQB(T^O4=&JZpJM_@J_J&{$o7m}u)PIo;VXio= z)#?8yZ7p_feja5H$YJ~QWGxJSI$Pimv=FKr!@pX*QGfc5vutFH2rK(t(WcUAc{!*i z-b4#rwvDM*l&4{m5OWexMSdslC>)(emGUu!$YyN@K-n)49&lkh1knp-<&&se_p1J3 zBl3glX%wl0JGNx?(S|^13%xF~Nj||-7K*Z|ScMU`$GF6IK1aK>;A3WJRzgHi>R8s1Lv|rFwHqFH7 z&gNllUfg^cp(r2Z+;R9zZ{gg24*f0@0ooIRC?v&!*B9xGXB{65i9T6XXYN6ub;@nE2T>mH4+ zup_fYSTsr6=O7_XyN#b6`c}|2|Mzk$S2vJ2@aVelD2?#w3a>2gCuQ%eXrYfD+-VWO zoAd=t(8AFsLXoA`8m6rNX9uF>l9%r?>dDO=UV?GrEq1v%#fGelb2 zwoc~M)d*{IMtNje7WAckUB3J)yxKvFooZ7%d%ZZQ`k0=k#Zxw};@E@@Vd!|9sfl9L zd)>9F8Z-&Wek-peFhz9Twisb%>FSyu58kvl3zi@m@n$+yx#dl@ zw|Ce|xx$5!n6o~&6{bIH9Z~w_x&IFtVGd?+d|(FWc9IU{-%eyr_hpuqh14K88 zgNlXZBs-n<9~}4DT}@@{rjU28&BZ6Q$0iFN$Ys=jeV3s4VA_3@-{<%oRPA_}4tI;2 zA}yk|z*HZcgZ_?1$5&Qyr{jZbXZ7X!a=CprqiZ&o-k_xy7qGLGH3&Dn0v+p(`QFp{ zK!!IEBC{_HSkvsoIRwF^cxM}cRU|+-JEB!(2SJQj$9qYJLGXrSHgz18qR~Gujj!y zGdqXUQf@60Y*pB*{l)t@Md8vF-G8Tk(nu_G9ZH>D`IMgoLR4Rz@ckIA-mx5^$BfqZ zi6F$`{@4os@fkz0Wac^iml>m#e==Ne-n&qE@azYn80DT!-Vte&C#QF-IU#C zTLSlVOBE5et4}oNcks=$l(;#N7(-!XY7H}cfleypLmZ{?yK)(2qhStzy0j=W>N~N| z-&RYEtQC#PV}!EQ;%j*?(g2&g0B@4h+jz^Ej%*sS{lQ`nl{PuUcEjJ%nnT+{e{UvQ z5(n`xR?ywsDq@f~bimAf9pUo!;?|5Adu|!TT7w2WNf4^EE@;khVnEL6SEd znf8KOt6wJNOO_|mVkR_rm$hfYo87t1@tS!Hd+k^pb4g8Bcs4ZaaEOI%`_+2xeWlwv z==4=h8`W!eP-bu`F>=Clq<5;6>eM4^hZ$_p_T3t(bQiHo8x~4-(Pe6CmeDW zUewY?^|$%8W%rR6xaGhtY=hLZq@AJ!S?^L>UI{5%4Eio zBDMpd^5piC{~_7&9k6mR!k9X-E}FiS?Cy&2V8@M(jjLahE`?x(85Wf=FiiM7SFSY% zd8*y7hNH=(A*u>({O>w{nem!8mhfKh?jW|%_BnL93#0s@77S;dIc@9}`d>DFdv?CY zAiHeB2sIQf!kaVW_pu>-1xiNks;%36?a;Ol-72YH8Xx{36*SXcgy4rEBIUK~`m*rp z01QL*l3nEU`VO8iiZf7LWuj=EHfz3<6Bu=v$?p%YOS%E0%~X?N9I? zn)0=3lWrA)6hWX_gZxDmBFedN;x~E2`6sQR;>8PBQMXn-rTurNwm2kSZA@83ZU`pv zOdA^I+P?6#yTzQkH%$Dzy}xjt8lSkA7on&6Lovc{{FsxXjmP&RW37rDTD=))g|mt} zXVAim?^M)srWPV1d(N`zv%rFj~M6LnomadE%nw6$1e zKL)Gr`77gM>t783y_;52+K!cTfanD z!jIt1L)e7U-!&4bT49niDzndme04qv^kuzAZkAm_Bi_35PTSkPdwcwtH)6mGJG zBDGUjGrCyHrjFE^tQ=nW{oV0bYw`I~;%Ha(2XA9JNlqZ>U&|pq4f+LUqHvQme?0%s z=bJURSFa*aJJ_ec1HRKMI1bI8$oBR2aD#DGxfdP6!F@|m>UngtCO*lKGNrGdZpiKz zZqoU49J17D=3GDfkOg|;qe6u?ce@3;+AA%Oi@lU0Lto15--DGDf|s@lUS0Pv!ukZQ zaql=)9?!OR75tQpzHQZcT7^~`{Y>2;r|CNNcY&lo^5N9iy|}AdZBWYGhj#O2f<@Uh zB0-@)U{=-c2S>a}w%OmH8<9m}b%_>tUfVe&?0vn0KYm|g19^@&d)?bD`#Z?t%b4K8 zE5*=z>yOJ+r6feWcwr6=Fb~6qN$SxScW;_^j>>Is0c|4n^zL!Wzha1bH)$h_na7=V z{5jc;CyYz>?GkXc=m2>LO>X{TH|p@Le8 z=8e_1F7Y2P@fg@iqi11;Z%Jhfuf=`%57Vj7%a&_Cl9@3F3TG@R(wR@!*>f>TG{&{p zKV0{Z9L9MsXi}9PXFLi!W#7I)HLaWt^%iYzczVEgL~D1MQJ{b{H^5GLnbFgnk~*kq zEvD9;WE?ZPcXAiP+?N@BmN!NA&&Ag6CsasWWrhHc{v@N#o4Bs=YMl3g!i`2%no&DE zz%(On69utfKT>`|RoUdVbl$Y2YcSCC=3%oxtXX(sW09xy%MHxT*bO?}ttfL!s??Vaa$0o( zr~>fIQ-BgrsK=6U1i#S|X$y&G)nu+AK^OM^_ZUD*8-3V76-WqidH^4p*sPz!%jPLU zKjho$r7$`CJUP%v)}d`dvO*qcUhgXY9-u-_$Pd|tE0MGi$obxt?Sl>Rar#Zdrq8iv z9{F%r%#g0HY|6R~$dp&Q@Fpm*xM=?R<~Z;j(VI^B2Il2ECHG|Ms!s*YA3#uQHj^Km z8jGb|aBr@yKxGp+qFtanK1^cI-b6>Uvg=9e5#9sR2o*A7puLPK zKOG!67kloug(#a~9NMtl*Vb#``GCK6|1jZ@o<&~hQ6^flkKANkOtgTL$2kP76I_*>77AZulI!pkc>mpsCa z_sd|H%6VHm|0qb>5Z4P?$TRF59N}em>9&599QfJaF)AvE0&#M-wE8(x#^vfaQ11TQ zLdT67Otf+?yXwS}01wOH#2RQkIY8@KbY#~j255=S0%C#VgI3~0{e$iPP&1Np9B8I8 z2+3D|kPUvAUACSB$_^T1CjOuEXLEQvUq<)7T|bgK2pPMhaF%d+mdfcLm`>&oc0%Fi z^qmyu2x`p`TXgBOn0;N{01&~*w}fK&5DXT2|F3gN61`SK`b%|eS+;tYOC<_F+Jaf8 zEirajU|*^uML+%_60r4Kp!dkc$ubu@FSooK{FuI`UzLd_fW~+5X>a1=o|dMQ;VQ_l z`&^0no3_>MCYno#0kbJeeBuY<~p@le?9jxTRkc>hH8+*M$U7=iN9UeC3Wz6ydyftmTB&eshQUuW*(!c zb~f#dd;|tx!u7!A{7!HLXOG;m9L;)uhr^Js=kQTFvxY4*ksa zB05q5sv$eaO4xfJl=|1pI91`Lxty6 zJ@KXCSR%?ub9&Z)b3 z`DFmENT^}yG3!w>Uxt_K(Y0X>4fkSzf>%%NDcMc(wWw?knRfwC&$e!8PmRzpiw!)6 z2p(#PPj+2J52sLw_GTA{i5TD4QHnZHy-IV|B({1Ow~~m!Y4bO?d%@BpiNZ54!*zugQ>=gF)l)cO7 zqJ2tNR)-F9t5&c+f!(J)C8_X$M_zooq)snnl9G_75DOSIa1XUb%F~O|n-jhL7G+s% zr|c%RJbus2A|}X3Kht{gdXc#GhUgcBs?e?*A|P(<{G!QdV_l$0Upg_`-~$~w06?_GKc{f-y>OoIp&Es zKSaZ#WVA%qK?jI^K9H4vK+UW59~YIz2o*fUCfVx^(x7v%vce#OtDbf~7qi7=wNYDT z!~i^Cyo}{o{HY*y9Vcy4sV%l@!1N~x06%6YZn*S?4aT+<97OP>`0ZK{-_F8{?Qr_P z4THE3NJ6}JBJEwpuevz?g(;C@LQ8CK82;s`>-42hM$Efsdc;ZjPvdYi*ZG!C2=OXC z{fgVC_Z<6nPjlvN)-347ZK77w?0A&0*hS7<>NUMWKJqGH$zc&)o@*l~>rh>3q9;FA zyZ6Vr`Bn;qQIyL8e?ayQmSoBt{+@rid$M#YZ)%Ep>QqHW`{b$4b?QMKZZKJ|o>pzU zbtJO$&`a9`j3*q_H4Ch1ix0$GsDU`pESsfMuIa0({rD$Qh zeAf+&=}nq6z3T0Z35GT^3xQCM<(zW6_oW3*8Nk2QJyMQVcq-(%rbAnlHZwn0w;FQq zW1BI8Nqyk`BoMkWkRF{&dZ1%HqE-5lo81Xs%p0Q-A5<|RQW&A?fdG$~?i|U&f2UX_y6Y)k5w<(yvANnA{$_voR4L!i z5S1(7knjlh5&SJ$ssvHXaH=;{d?lF8aWhueZ~Lq~S_4x;zK3p%!BT9S1EFX1_qzY} zH|4G-^i_&YKKiE{mp0^{iV7_iB4$PCYqk81Es5~tjyNuo_4`v*6tp=dbecj}CK}?EIK?kdutC^JTR#Z+ppZ`IFmSXjdJQ*)<34{{J zTX}^8E(_sQOs%oXC_D^I6d#68=q1_tcIsu|Hh)@G`=HzoJeU&0X3)dHTHpx+NW`Fp zr=hW;laQvWP`V*M+(1|_pr^U3vwm64_$gz=hI?m@Z}5_c&T4jomi3KSRYQpHc7WtT zonMIW0ZI>p?T}A(a01@W)EEseN!{r7o#p+cmqJ}WktZ0snDdESw`y1R3s|(-Zab56 zA0A^oOVTg|^~yki|AIfAww>JN()iS`&2fR8(ShJbYc?LrP#fevcBSX;&q%GiWrLR@ zSvq)JqN{?{m>8k(ZQ8;S{Jb5y1{<2!Ul(84G+_CZ+-+Cc)PGn3-dS96s+7Tkot5!K z@3Aw|iqyS!Bdx@4-VtXoI#>dWT~ImQlF+|ih20Jxdm?|kg{#vZ0v%=|%)16%u34pT z*hK!nJnz>%-g^d_5mMWVw0c=Z72vZVZPtnMRdaL@LN}?O^72T{`|74;>K;$}JsK;} zbU-Wk{S_AoNi&BhpV>n?LH-2;@(`g~4P-zO&sZxTxD{GX$^86nMl;!JZy+G`6FyL% zaDe*s=KMH;QZgpF9nL{v7 z>hV2K@u#^fe;)ax8Q^6m9@tqO8D2&n>(;zr>DTj5>$kWJEF)uqjgAl!Je!ooT5qH` z=}NQ6uJ5=ck6NyO$J!2Bm@j!C zaOF>}_vTkJsncTOW1;$uW_4I62s8COTn%y20#$Q+U#UAx$RCjX|NmK&%v&f`>uJ;j z$7yj@z(b?Z8{JtRxwaa*!#XpogDVk47A#>J4MthPJ|4Fk&IYXoFxpi(fZ9!H&jaZR(0Gc-cBmTBMDiNWt) znBd7qI5a)K^?5-$?mYUs&dosfXzB~P)!NDZk0t7RS_n}d>}ENmPiQ&VBA>mGy<~@l zK`D1>>@`5fI~{~c;IGi_LA?A}08@s9 z_Uz6JR+f z%4AZmy%lhGC+2q0jcH>2NQAMa`IaP=DXiKwx8MmUs(_V#OYNNLE{YV($Frre-#uQx zLl+oxOw3VM>v?oczD%J=(P;?+PgCQ1=+R}(GEAi9fdh-2Z5I%22ceC>0V4MgiIZA+Ci(dG=mT5N3PC~@ftHEGo4|GBfQrwOwkqT!mqw7 z?|mqh^XMgtkQ+McuX7oWEz|aycEH|0;7BzJ)Eq&f@X`N#ieQ~@!X#4bQqX{4DBCel zngEJ9a~4|vkG%2(oJirS$9YUuw&@6__z|!5N056|jWHR?t3ZZq)X*lHqxK>XtfGsg z(Jwo^GxX)d%;=#=4)*J=vw^SH%aPNLT*_)E7pLh}4myn`yT|snC4zbue@l+O!-2<5 z5gU;Pn8LS(lq4mt8e+^c?`3iLQHy|C68ojKns(}2K2CtH(JY^jt(gMMkPR*-(2KKy zCv0jFHMI6y3YL9mK{M0)?I8|75BB>l*`J_7aYdn$K z>?{hGo_~)hd1bX)VaR!YuRBLc)$g;mlm^`}lOmwt$&q2&f1`aAe(gyHCgPVc>Ve$J zk5D*Ukrzt(%U}NIR+OV=uI1b(mWVXv9n+aH!};^VlLcbxp?`tuw<5d@{6{XUc6R}I z*_GKvk6(Mcf_KcZU(&NWFP~PIJ>K_$pX^6WOET3IfU0|<#QeB!pYJH}e3>J8P3rx% z;*oCcoMoAbGKJ#GI#acmYjlvJE5izR}-wBU=m zF?Br2y1%R`lJ?!o2`?nOmG`QEeqYhwGJ&W-@H^Dv+Z)-KrK=9-uK0ScNh?V9slL;# zH{!Phy++ zF9oM@S!!3Kee;3G%jw;^V&#{&F!y3S$tg~aQoc6zpqGyk_10u1THRNz&}>!Y_cO}V zxNQ|5zv-1nH_X_3ztHg7?5{*@IryrEYqxZ*ep~w|YfB%$YRMOhgfn~lVTki@{Ys6c z=5zHc!U(gY0o=+)`zX5nk*o?czUoK$e9vGeYTdv^Y`?M#DhJme&nfX#F~Y>HU+79U zKVfyruF49T>BIhm(g)fKfyi)$2LEwXdQ>Q|=4-5`pKFu)7)c8)<;4Upq5(&jjnVNn z$&38`ZeDrbiBN+IA&dgGAUEJFKR>By&if}Aw4OkFctl*c5GImzmst3(aaJ#g?^Awe z$9F`sj7X_qCDxj4Bu~L)kwr&AXHJ9H2g>i!das8N*K7CaVSC&acHyG0hMLm`p(=?} zgcI$x$G=qH2jW0r_SpeBnR=Dln6bJ6J?<&xg?p%v0($@m2M>bdJ6IqkXpgnjGR06| z)at>e;PNi2AlakEZeSALS~&S~WPGh2)%pmJcN@2brrIl2*|uTQk>ZzL%ygy#w!PE? zJE9%K5q?30u-E^*qiqg*lh~*CQm0f1IDaNY?_UC=1iOKj1C3{DDQp27Zby9v-1q^^ zm&VKoMn6`@YhPX>E-x;Z=~r{xPoB&-!=0DvhL4qel>%%-|27+Vjep7Jx;dHaD|it# z*Dg>>MA&wnD8?w!&VB%Nuoa|p&lM|ozgsqhM_y$w@kI-rR|S>~HSslG7E;vybqN6F6bJ0LVT{6m0ie^mJP8 zfSMRULY374Rp6NyZ-ay@r>X?$Wv#%WV`R!9J!EQSL_7^C0~j_m4$%T)g$`%)6@w2r ziv~ZE!GGfdLnXI}cig|Mj)D%c9omJvC&O0H9a_1=B)Guggahg|L7c*=%5L1GUIE=* zOUj%yg5i6JGShq8pdde;vhOolGf0C%KZkB<32~w)IbLiZdkxE}ulqBiM#D{P;8zlo z6f^7*VT;q>lK2+hRkM!hp|AY=5R9AO1t*ip?Ye9Gpaxr9X*7HCCHUt7C?j(8D}CJC zAKglQf}9`RwXBeBm>huh3V+q^Da9YKpM+q1>kFCk>Ti8R$FADu?HsJYQoV9cMgr1N zH_55&Lmg(_+B59Ku{%L{zNjUCm8e1l6`MvfqLD@y`t~&EQv@SbyGY`?iPa7 z=!~#F!2Yb|ea)xfO42m4>BFm}@!Ohgr7(L^q1*gi|9oiw+FhS96ZO9kb(`(rjeqmC zk=CvfG4oOes}W)ct$;V`Fc?-`shv(TEg|oLS|zU#X|6L^v-P4 zkR+EcFvFGAb2R#?@MrXnJOP{V9|F?$UZQeExY4cnGxeD-N*y7~XWus(_ z-7*QkQNIeXBNUX58{hb!xsnpUCmv*MHW9*$+ztqkC|+)h!@ z!Qd=mR962CFv^a7-Iz=05O&U0i7_HFrhrferX2mIXWd}P2MWZFeRgA#T2=7SF;{pQ z!N2IP47PsCJ2wO22-@dtP>Ba57~Ehb^@X;~)0NUxYK-e3_-{ zoqS#nM*se)9HR>giJGboU27dXF=m_|eH$h^RZW)S<s)m`q#)*bsBh&>5>hS$N5S!9`9hWa;3urkqrQNu(Osk<=mbvDpuE!#KGvQ z(4=B2Tg`1Wx$)XtpAbw1>_4p{U!aFFPyZ{XAFt#BZ^5v8wH9-5!G#0yP@#i>{DbB{ znD+;D3Y}5)q!EC2a!@*jGLlgsn{STV8qXs;(4#;91c(Sdw?FcPj`c? zE#$MTf_yLj1@L7*&?{cZsIlXyloAp&15#sNc*bQ1@mQlrUj>@@q=)}#*A{kwDV9K| z3Z&i3BH_r2fN~fXjqr)^^ zQ!9(>0B*D7nVUo;oKw|gXZz+-Ta_{Ll!Y(;h2C_()-%F-On|h_<%H%)C~sm%*h3?h?#gkfRC3VK4nI2@*SI;pMUou=y!`w8m9f6ZOfD}c0EpjvN{8SpmzG=NUM5XZDZCihDW+B%A$RFiDr_m9y zAHaQrPDd+4nPdq?n*hKIj}MA_K6K<1r@Og?ka)QOg^G%;pZZmm3w32?Jh|EY;5G&b zuAmkc`5BFft2+4_RJ(ku5vFD=Hlt{0M75{FR|<=zQ0Cml?H-2IJfuMNBUon4eSlB} zoTl&iNOaaCO$Pnjo*lb(eky9{&~!-u(9xeeKK~5r1aN-gjLp7ab=gZ)MhT5qdE?S4 zGgd_7v?ra8%LFbnU*M#*845l0?Q>H0P)xEdjXXwxh*LtzT?z|)moSxtUe^8-GlCuW zu-9fb`Bkdc2V$tyA;gSOB}=Bt|8Qf-HHtTaZAa&YG5V3JI5=OgH;+NL`oLigok0&R zJQJGSq#$N2c`Pbqq$R9rjS;Lf~6xCz^q(G=uI4;kLeYI{~H-BM^=*1CS<4+KS>FA zQ$5$<_tpYtI=ft30Sa<~+fNX>>Umyvj-lwXd4#SdJIMOreI5Gewff~)E;k=Bj>i$o zsXmyCISNtsR#e=sA_T*@s=#<2Rw)kye(Zy}ONz&$*I`*tKg}oT)OI>shKE5!aF`Hx zYS%QKYWR;83_TXRM!s$Bg&w_$z^CQEi%Sp|2~GUoe{igX!{EEeprhVVJb((k28R>H zV`_TtDOK`7>Cb@dGLl0iYbzqrzM?;>3(LSd%~Wj#a6DUALRI8Rak}%%^ex`9)Fb?X3A_ zRQtg6cXQmUwIIU97s{*2-m|60*pMjN?F3;<@W?z(n9MRnw&oa)r@QK*iU*jL4$lE| zlp0E?cv|;<0`B3@X)(Q)+Q-zTrBjddj#t#nhI7{gTaUyZ@0nlN#c_^nrY1k0YdE#n z+24vRb#2+MXSqEhCc<6XE%*ljEbfP5nHX=)3@$##&n)GPYS@KFM^a|I!f3X7ql`Z` zvc1hHPvv=99pL%PQ&8m;K8>GWq@~hf`@3-WoVz2bB59c8KnzD?8tXqMc=ose%%m7R zEg~jYT8jnk!MT7VRl0~iuA7Skmjyzh)0ID{Y~G}5 ze+x-COWc03g<1LpP1QVxQn}-B7MPE4(WVtjoIMy&!GN80+n(9j{O|*DYK`$*0+d|T zn#rF_^)C;^P@x(NyuF!1h9ukt5Hn=!#oQ!HZ?nWdO;*SXnPaT<49<&^S&WE|RVL8` zPq{@YC`(mXk?%|1$2?!SKJ}s@GHP+Yk2~cy>sAnXlQ_1w>RP(qM|7ZM>DJ&f@`VGY ztup-C-6Yy)l(jnfgO+2*f4}Hg$3e>Lp*}}t#N)?^c<>RNFPzo2>q1mIjz^lUnXPE@>aX`>@QJ@=nB4 zvo_;7lD^F{#Zi{YruZfAJTMc4Mx28&c0$)0vnK8QPSuV-CP6~K{UB5$D;YK1fO?8b zDs%(4ygl#651dfX4XQ^m`}uH-rCaNUx0}~-O~wCA#jaWY(x^fHJ6dR+bP%y*?u$Dv z&?xV~2w&2+CJxBGEoe^6O1-N2wvWD&_7-spw~26Z4HX#jm1@O(@B_Fk0H#7G7@QmW zurpZ54J7M`^#D!X=l2Pz?fqtBW!8A0Pu55GpU@ql-@>E{>y3}Xn4=b5fp=6~We%0J zVu1A1UNR%mDA{Lj$X?eriWDRP-CU7j@u+5#joEt&z-jHSwqeXc8stUf8bXy+vx~&b_`^DmGNhGVKy?!_ z@`H*v0XK

    Awxf*T|iRJz80V)9XQb-exm|Ty{F+oW+7;-9ae>C+>wYUCtG_njU#m z9(xW}grmIBw~Bua%2eE!Mi_&n^7s9#@2!50^(%8c4=@uFAYFiDzqa|tG?~h4itvDZ zp?~j?$<#~KZ3&j=?7lA35=$?>~m!V!+XIaM~+08wn zS0nvDM%1qmdO$dSvS7_kz?cDcsPOhp6INq-uMpcdfFrO;CHgtL^>amyaz7L{ZBNXyQkvq?1YSpsf4i^P`yT~exzc$wESB}Jb4}~o}Y>lTM3kA?GTKP zvkWzXjEuaDd} z$`ym9Ak;s%qXN3KGcD2PM_Fu!Ob9+a5{6HF6FVw4|tB0RjY0!#nb-Sy*0B+ zt&~O>WcieF`WyT7l7F4yqbFq#s|HOP=P{0p zKX%j8e1m@aQWc?buM<4zKzd9pawz;w9EKENKz!2tt}0vPoDsr^_JE3c|53h)ay3AT z4u9DWx+(Ell%bf+Cu8QA9kp|RPe3_MpyP$g-zVNIBx>w~3hwu?XSyx<=2`MySWI%_ z;u!0`T2V^tN1F~s8gA;Hw!D2p#l@;ru)*@uTnb%lk4QB;2e7Pf;NN$9+oK3f4LfzW zH%P6~zSmxTQ#$r!B{&|?DR~*NA3|<)5iAQBPdE=zywgQLA#y9#QV9|tm&2<1QTM@B zFkXxS-r0{WD?eD;kM{(h5ut#C&p0uLtdR|xQnA|#EXa}SXb@;H(P?KIn6DMAv%X-0 z&XrzXYhwMo(8Ea<(R9RM){N&eBInloW>7kR7+W9v^mj*yuaMzW^7NAV#=8m8Y!E)1 zjkPB4?~cYMV>CY=O-sSBmU=Ew~lvuUFo0b3C<6cGCJwaG$??;AcvxoehJg zQo&Nq-)rwOQpBM@l-IZf#CEdK^bJ7UnTWt;^3cq8mF}jD;}}de>NNz z4_MdkQPfJuJ{E|&{lHT9^0)45L)wJ#XL>Fy6{c!`AK@OrOX*qcTBeeIhL50!Lu}?g zJ$P%bl`~N!^O)dAf^ez^<8kI@4`FA;*WW~f*>()_^4w21D$0Uy=VpCEEh>-JhJDXg zK@=NJT;0qGk>(;D;U6PA#>9N9DWC~PiLMX}EON*~%T9%D1wP}k)OKw24w-I~)sDZJ z=y((EQ1o}ARVrdT<`05(L$@4-cHKUi8EBB6wW&MBZhN~YTm7b1ip&ful_2Vh$I+S+)NS5UF1)d-wIyRF4&TrpYqzr#C#&@{b_k)6UiuU(Hjrpu_ZEZTqvdg-$1{ zI`z4#0zVSH`H5q?Wy~$oOG=o|r28q)`-GjYahwQC3@ey#ujn7wu?2O2nCsBGEn}ye z<{CotOD;*!D=+dZw~Y_JKow{_@#oEK3Ff-{gN0OP$tvn?S)^n5Q`0$$%YtD#nj_M# zxEsvUXUt-(Qz)+yf{4&`pelPaZtYEikkRET{pQq`mDi;#@X2muB@(Xl^U(QPgIp^8 zxNY$KI`RtQ?~i$Qg9cDU4 zLz^|-_###tEhRCIsKo~3!zS_{`%i4X^jQJXi)^cYJF6dqgV3qgO7M?<_PJ{sy2U)M z@9uV1jY@~Oq*D8wI_o>A$HE`S{B*sQi) z6|dOFPrVPen^>9|n?%K$ve0}onWIvLE$*wUeKlKwgSL!-tc*=#igkD6+ zWTu|Kb@q3r?onWceJx%PZ)JG{Q=+!Re+>w?bqa+K(>(HW^Ims@$#_1C6Ccs)b4wqK zbvRiw?#8@~QQCHHb+S%*f!%+ME;70@JNIK)YoTG47?3;qAP+aC@473bjz>$x8kHzS z>Goi=PLNVCTuV8Kx7MIzQYuWMH|fe+dNLDMHk3h?l+mLpdl?>vxiUt$7?d@hY0)Iz zzb`Z9Sr5()!iwkXbJDL&A6~Q>J4Px4uq-}BNq%BZUZ&NoOWO0rOTMSZ!ud#c;oE=O zd^eN9zx5a9Xtu%u(UBrl_OMI8MUd-p%7quG@s%Q52`iD!MzVJ=Jy6Kce#i>B`hArv z)c29qA*}rO3x_OgM&=$!r+GyoFa)vTCt!U=~#Wu^BOS~mi2cSfB(~G02PXrZBB@uNVT)4NKA?a zxihJw>eDHKx1*ntzN$_|WdZftb#g4RfrPR0av_obH=QOH{P89*A?>Z?QM|c1KwoM~ zNaEt0zmpN-vrAbMf7lU$<+qHGo}Ue0 zp2x@L_>Vi>Fb#yH|JKDl3_X3#6wjwL$-l-EXHol2yW$g$ev#)=>4?{stvV{l&JVLg zSB!8zBbvBDJKdPiA(=tbLGzdGG{+w&%O)8)Ttv3ZuhJp|C3Jh($!ywh%7FOcqqbV4B=?ip?S*sj%<(ML9OHDCrQW=97%DFH8%t z8SF)m$xl*iL`q`9B;tl~U-9}yAQ^APJ7*(XS)DJ|4c1oxc%5Q${xD$W%dzCR@OQVj zJ7Wx?a9Q(!mFm;{kQ6g$>flJj#!u;mrx_QCRQ*AJKGRV&=^E82A_fG=-?01{xW@cj z>vyhBL>^!&mpIHpj3@GGdwg8bLcQxMLk{#mh$eN64j}I?|1&a_raWa zKsmG4dY|XMuj`Il5w%;5Uujo&B6W;g*094*PaOBT!cZIwv(IWXQG@zV!7Q=4qEEn! zV+mcdb5gS+MXYnHimJogrpvbgN9+jP#Hrw^%&j10PfP`vmOUKcg&m0rdDQ)_`CmE> zLM%Lf_mDQaekinJGdkFSJrj=XQ`i~;Nf1Je8 zYLo9H16W>K=5hXVclV@}_v!freqRr3k^>8=3ns{|{ZF-A7ACz_Gx)$aBiF?MR9y3L z71w1I_F>!>Ct0Ji)oOkk86}iI9%ww#y`E)H8K!n1acXGHI?tU>Bd%1gb<75tw{|6{ zfWqk<-x~T8gksUN{pYc;t$RhgTBpKLUswJ0RoC+*T-<6Gg+vv8G)13>P>M-~JZ#yg88!32|{-sg3VksP|Ud+y` zt+FKX5+fAiv#O9a0=Tmp71C#;y0(rmR*=3n1`eHfU>7MMzvrT`ajGUZCZGdiJ;dIB z60OOk!DB|Ch;zJmc@kCt*4jFCp`eeBho2wy?~!LQj&HAW**Qb3Xs7@_2#&02VVnv zH(ZQPV+m>Rtb-oGHo9+*l7=$Pi`e^?_XKxEvmMg@08ZFLIpZ=W=nA}sV6F}08Z0zq zZi_-zvcmC!Wr(8f?fELw2QZn3uV&rl(?T44*3xwacIqKfK zjCPI$f_VB1-BW-=WIK$x#D4jiPn7Tu?d9jjmmlRsldD(=hb|mIUcO;u8HQxk=C#EL zJQn-eB=k|P3`6W^8y6w#c@vI$+*V;zD`(Y*35XxKcs{3c01CQyf;N0p{7X%>{)l6( znScA$JGRF{i z0Rz$L27?}P-SI0?BR!!~r=_VH@Y9m~U&q3A=xs!Qy(nlejx9IxfHxrc3)){lKucBh z@hBgDta{m&)EJqL?Vh~7*XQk4b^ygwnov=8FI#}>_O-%~A9DpTY=zOR>jN_sOUxm6*zRj<1?DYzY;+zv6%HqHvil{T&Ntml6p3@DIqDQpMOUI*YuAd13{x~6 zyc15Zao{7~b7cH)&+;yfN-!l|E#IvSPSs4zle(4`UUO;KlRD|;@l?#lOAn*~AFjv| zbEg7r#Rq*nMtTh7ilq|BKEv@0*udK7-0^{R%^GCAG2$9e49KQuAuqw(*zruz!`hmC z{yOabKh9*S>bJ$XwZ_&A_a|P$B9lV%wLd6b3=mJ!X?*&SgA=evB=qkvUp-DSskqTv z9B;f)tQ&7nrD2~K3>Y+LeUZVk^L_{L<7XVcrP118F&)+mjEEaXSD&+tI&|p@oWFUz zbrQF#EgXU@F#DTD848EebS_aJ{}VZ=Y%DxFA~@ZCrD=iEUT z@nlV1w3{%*k}Cc>bQ+$mo?Jj#5JUk?6M0MICCif)ISV6Q)&kIo^M=Yf8Jv z5ynzr?P$z|(L<<`9{c`ZBWs1rSbQmRpYCUKv~-W-Z)S(wpuNIDTClo~@fMwwe@DHi zs061uT~j-v`-{7#htdna2xCd{HCDTcu2d6TNp@=skQHVB+@qW-_n`um(Bm5#8ToBG z6tM_3f3D;WaD7gvV6u`D1Lu78;*qai*Olg$F@I~phD|)OdVx^YPq6m7Zw|!VkqHTR zAb>ytFQ5J`a79%5vvUPeDiJ9BpM;t()5px#y$AzN zL4J=+jEvj^RJDjIYET$7hz}e_BY8c$6`>i}geo8Y{_Ia!X{aq7W-@RmVZq|_vYTbd zzYvCGhzQAcDEMfgJOhKa4_;7ALZABjYI-L)hgjl2eV0(VehjU^&nT)~L}mC~{swyF zyT*H7ZpD>@{DA(+MB>uT&0kl-NOBI6ssljXPKK1K1IO(I^(iohWdX{P+LGv1@jTPf z&h;GZUsLd9gS=hIF7LHC(6In)v*ElIAQT)vBel|@eoleUQTUb3A=`YR0R^OhJLXAO z^JpsRa~i%j5B(&`8dZVBMSj8cuav9}$aUwp0@a>IU5J3$n?Vz>0tbvp(XOOov1h&0 zj<{qg_DY%*%Df)UirWIS0GStQ+r0HliPwBsmlRuE<42jdYsci&tx7ihe3dUpZ(6=Z zevaG;oCDLp?<&%beDe2DkxV;%1VNZkfL~M00x?BZcUoe?cO^k(*FWl{ZQr4NIC!3!yx*8n%BbHPe-{12Nk8_f(dKHj-b`QA4 zi~`+mtsfYUxNElUqph@6O0If^6whNJzZ@du!oyE7sV|oQCC8bG;XM`(rB8Rl@c#3B zmJLWuMVS)A$gwCA5{$s4n#q-(v%TOO-hTxc0mMhlU#gLc4a0u2OtG<;H+rJlEE=qiQ8p9Zn)`yREt|5S27Q zsLfnB{ntgJ%U?AOZtQy_vK4wq?NDZ)`#fV(wT$0>Q4=7A!ky?IS0>vs0VapJyh7_J zyY8RrsdX&I4Y1VtJ8}02v>0wJ6*=(+eVtiTN*fGisIwhn9i*puN>_@z8k{ZENF^9M zloPR}!wp*&8J%TrL|Syjuw3Ij^5hXXQX{w0D`BI@Qr?!QiKj=md|Z-@(lMA# zgrG{u`n`35-)c=CgRGdI1o;fp*(>-ro4#)v)aXG@WH)o+?87l4ua_w#?pz_9bhlJ) zw8@eS@1B*Yey+$BVwgy5B;MA^-*(7xtxc#AO@efTmC4v!TAqxtyr|fimGCjy_Gv&_xOW^6r zg;gQ)vQWFS|D=ydwRVnSer74zT+Xq7HA6~oy_TW9Ar9wU6C=YZ<2;UGf1*^>L=7=O z+J2HQ`HjxuB|N+eM%C8E&Y(e!1rkd6_VPoTX!siAVj8Kh?Y2lFSN6`Zt?r?7CWC za2^Pvcqii}S|-`%HiXo&TgyjM!6aWE>xWMZZgcJ;2b#|!5>XFVx}b zhb=N?V;$z7CO+U`r(1qGq9a{uAaLop@5cY1libbZz~a8}ZR*(Ga{?Uiznda165l#+ zzkc%^%&dAS3a@~L4htqb^fW*dvaORh+va$_EcA4E+ih$i>DZ(oiG-@S*#>t|-1@9L zZU>u3Mx(n$6gLHS>;#r-I7zU@a_SJ%GwM2J@A8=^-JW?uE zx{mT(p9)c<3dZkRaf|4S7|rQh!u}BF-pdZL@)XHh9PMaz^Bl8oByj-zZ9DjxusiZS zi~cnOZI*y; zx3EV6-%UZMS>pKwV0c?$6Z?=-YK@x5QTx35o%M~n_TgU>wZ_Es1)LW>1oWGfbONaq zusa?9xIys6TpfOEXq6f+oNpNowEL3?P4{YX>#vz7kSw12a=;I*6l>;%e2IDJyeyok!>bx4#f#BGmYIXr9h()??S`vSsd_4-Nc&MGc9|#R zh*{>0&Z$}YBnuhMSE@8yX(mMIGid#36xa22^UZl9|8>AhcutewP5!2xs_My^BAXnc z?!&nGjXHFQ+P#%M8MTNQTDOj@oP5@*nc5#e7g}?zd0CA4rfW?mjNo(}_@+=)_DGIqHADSglwpjZ+I6l!?iF1)2ns(>|kDZbd^Tz+T zi7IZwAts~|^nm74_OFD3eJGlanSth*(}9Fl_v9B=dI9Bp_1{LP`25{xKt_erp}Z3? zU2Y;$NBuqhS2l)%!aWb{Ka_J?3Sez4pr z@5+pl=x27iW1ObXcZ3Pv$nrT(c3X;|bSYOCG4%DMPRDOxS3gD&1>`a}jDurUC)h_L z`{O{eUC<+s%rf*}B3*KH3F`hdta_z6LkTr|M0>@$EsP=U(WOg-fjAc5n!o`!@X3Z5 z-r>XLdQB?6K45xTMZK^Qhw}$C=*@9_DDf&lPbVqELf4!a`H<$7zY>|koU9&iO#j3S zZS^|me=8%;PkbB5yr~!&lQaRp0yI$BE&^4x`B^OnG3k%51lrsjt1!93(dB@KXPioPv;DDEV`f=e6 zlTiE;-4t>Rr>sjWeqkv4shf~)iN%Z9#>O$R1~zld!i}Bs0*SP*p0H1*siEMK{VCxP z(37S1*S%W=J%yRXF*>(AzCKVOQ{>2pUc!%dkgSOp%wRvdCOHihSx?3{*Ei0sT-kom z!YLK!%4L|$&TWDTqu~o`ANtFA?H33ZI+d4beGF3vb*Y1CwdB!wO7uG=YHY?#(gNgi z(mV_pLTOMX;_?q)Xsib_a6a_n){|5Q%e8o+J(?gzgsYt}H*!rqrGY?A~}&8a#yP%)Fl z8Ox>W?xZZJQ7G5xL=mlh+&WjKko{1M6YrO$1n!zj*k(J^2=XvPq5QedLcT217Q+-_EP-o)y=zA+vay5U;OY0BK4`q-r$=Q0rYdS3c>p4 z^kimk_RB!;G3>rusP<5stdvDE9+ zScTlTZ+2!_g#QESQD+UG0(~LYON{80WgK;XgeQ6AWzm$nv7BV^P!lESq>k;GoXRHW zW-}9hi5ZceZl{BZ194nu_RBFF5x4W#DA1tE$8!H1H%N(K*>>5X0;4u5T957N;>Jau z(qLffIAD^GXhZ2}n;fmxn!&~sTwVo?yHH-ae><=%@pGEd zyovu}yLro(uf_@aL4GA7O5vr)u&_^*FL0cv*OZ<0hY&q94Yj5%=7dcIVCm2kL6W>I zv^hlRshB_Qcfo3KOq71t{0BcNwk)LhoOTzi;QI8@aYyjI0VePpL=`WFEyu}Ur{r&) z)rnA;x0+xNWE3{@cI;=Py|~4M_UnZ1M>nq~@z8#xeSKEmRJg=ewDo?%T`sO(ql#aD zA4{t_>#sw6932j{QGjb2=K1c!XrrYHDBjX`-s#LHryu@xu;zpV^}ew^ z$B|1WuQ^1DxlUhI!Q5yA2nW`V#f3RR3MT6^`7lU3!Vu*1I+61SNbu|Y2ZeRv27q2c zUPH1g`GS|N5;LVqVmrCPP6G5RIIB+Zj+%Lx#r}d%0{+1tk-NV?U$;4+GE8B;#sp|Z zRv<|rMDoQUV7;50pq}wb$@ZmUsqAg?2^s)qbZHg%@w%~1y0|@gzY}0Wwlo35Te=@* zfHai8(m=i+pRG^{`v}o*(cwz9mgV5>a-w-l9f~Zrki>t76nZNOhb`zRDZLq~kve;P z<9&&68#iLBHpz#w{J`#OR%0J#8etnyWc2^AC}w*S3UA2QK*`QeKWsR7XqXnqb1L-s zBy+|e3AOou>olK=Dp`s?Nwb+DXAycj9#s4|_2i~zo#nWnVDO^0Jrb)i;=x=g`t4pu z;7?&Jv}fTD^<()R6KtwpF=c<^ zPcrn#XCZc_9$`dctE?2nbJOeK>D@B@V5ub15t0M%c|IPqMFtF5N{r#oeqy#ao6&u- zUKZ)#jR5A=K{F_db~688dmMuKk@;YIY>k*j8Jq#Iy2OKxP zNj^&LeuvwsT^i(~Q}9W%bp_ezoqs`2h0+~MgZOfCQB;_jY1y0q7=rIk)R)I+*&V?F zUcp^9%i-!7pn$ms3Yd@#mV*^6Tyu2E66aNK0*0wLcABD}x}o)o@XS}Y)&oNDojI11 zQN?4eU#V@w$ak*4lxe?&2+rDpde?b{K=_%zTlN$itBb=2g#OPrx{5#-(U7S{app^R zg=+DBX=*YT6*^TX$GqBlN|=U0u1d(D#pF_^rn38U7;aZWKV|&Lz9af^=taIBO!rgR zIa}TnRXz2h5rNHX3Tfx@c546~qcHr-pzBMnh$CnR{u(@0Xn)^UJE$Oy!y z02dKPi)z3sXF`{|2c6LF!q<>N5|Tsn`$rM5vsLcj=fkB(EFH{swxwJJfC0MkDwH&c zx4FJH?*n68iLy^t@NNJI6>$$${(#8|zO4NQO|trfN(ZSaAbR)5=R|W{@PnF`4O--T zt(I79E9({!AYajfMrgDYPy~wgy|Gv>yLqY@kjHg9abHuMU9wAIKmHz|LIU$qIZuyP zxicZ5%*2})vSK^BIf%OqMk?&DAskzsPFkb&PEMOsQB&N%Y$_vCsj?V2m!^x+bE#_# zVLwlA|A*in7JzE7FLDLLX3hce6EQ*h*c+MC*=P~SFdx`aWVxv%vVHwyE$V_5L@mxc zxb^ZFH)sf^iQUs&t|1b z)^Vugyob;ge__T3hv8|7!-S5q>C=E;?@VA!rzdt|EO&(-WCAP!O8%I zS3H*A?N(Uq{F=m-PO)wR)Rd z>M;Cr*5ve>Gd2PSw`kPR1L`V61Jw$pV#7o*ZKjrHy8H@ca9qQXw$4Cu-NFTKjD+q` z^)lJ84*?lkWB3!X2o$4^HCK7qlLX~fg|gLF3eT3_3dm|$El2NWhB)h#G>>h zeqsDz@sBAy?Tvf^0fG#`7~0FPKb=c3>O8YAnFmP$^qH2^xqtUaywsQ^@dlcrkU+!Q zE(@1htu0%ajkb)Bn3DhXy8%PIHj+2PS1Bj0Io>+E&-Q*+FYySLf})mE_|ul4q>$bR zr_<87ZI6j^TcUH%ojmHU5OO7Uuo49q=b-O(_ev;)JGnbQwM%n#=qIxgBZI_=bxV>! zlB@2ZhSmQjpc#x;y8*j7Qjy%cxkOmWm|cY zBw+H$wZye+iX4xutbz@@|0a}LvBdWC%e;nG;EACR&`ZZ4<=;X~YyX&oTfY4}r#wCT zaf)?_Dc2CnH&yK_)U`Q1W?GddZlgDPBWf)VXLH|Aoo=NxGWCBQ#jJ1t`tP>%L>SGm zI37do>xolp#gwm}nw9e4v`h2wROIHA&lT2s5%%+f6#~~_ef_omca~cNQm(_TxSkM> z^WHbt3^ejdKHC_-1pN4UB`?5|-F zsLA^_#;)M0pl>&?jT@=qejKTHyCyxS=b64m3W7RUm*JxVmsIEX5a^DR@MA@;P|aXt z6FcNG5=ZM4WPX%)6fU?GxoVfSBO*8;V@bBB zOvlk&p{Bn2eTeJ!q=8LSd)Q)tz+6*q-op4qRZ{<@sZQ!wPt3IuW{L9& zOn`>b@aVQ@H)cWyruBc0r0-V7<6z);HN5RarBZ0}UCr5ur-`Rx@E1q`vyv-TN=|Wh zpMzg<6uI_4N{yUqZxsMSITSIZoxEmEan}6cZS5(pSjp3xQ#s9my(tM+qt19kjsq|) z-yj8&2ad0|`O#Zc+-qJTQ>pyB+^K>4+S>5}u=aMrAKs+=#OHSY37S~N(X8w z-^b(${1_RIAO8Du$XbQMcrGQ9rRfjA-D}O7%xMHOPqM&FW6ozqUO>9sMqpN27g9G9 z?oT1FOb?xtzDX9C)jH}1kt@cV9Pg`WABOVyRR-;G?>(pm&TS#CQ`?HJ!=1xQEFsX@ z8=s$X$zdA>)t}?2(yhRoEDPo9z--ik%fAU*;-h0e){@KvaH_8LIMhq8vjknLmypSG z0CgxMtaWNSFsBvF`r>&QExn*OlBw{BLGu@B!0&RF^L~w5DM*}#%^uTqDmi=LFiz9y z2b^tgWd#C!cZ><^1^3RTW6)j{2OXj{ppN|Vt3F~4oHHvKboA)~%5&)315m?gr{w<_ zEiyMMB-_lhGO4wV(;ajpnRYQH1@Eg6V9~4F^$2lzSgI3Cr}??WWz0y{L?di#_9O_? z>J!`PyCjcg@TI=$fg>b|y;>igPONHs5H}%U;P3LSu~kH4Sm|jVqMkY&)$MjCo8*o! zj<34LgftpklijzQnTPN@@Fp9I_xW&j=BaMa7o%?+aT3OrjW2a67n?=F13=tfAki!* z3zi#J{w3|Xq8o99TJNyTYAWw#1CFhr5R1SjpOR8fi(+6J=im22o(Pxq9~1&tdwgFV zN{yPcz?@iS`}U7wOO3YuNS29!dlw^J?A%Y6z~v?Z#FyG?lFt4*~)-EnN; z?*2R+=(I7BTPo@9z|rpI0q02mUoz001s_k;ufiE=3?ZEOfj7GX!>2Rb)XY=k+fm&_ zp`~vKLTJjx3dBo>FPlR?j~k+;MZX!t$-j8&-P`nOg_KgTX(G45(zw1uhw-q?@3U&n)B%vJ1kN1xGn^GqaiI9!Eg>_Q+c%wF7AoIAeurqE@KO z3TuDb|Id|L!i{L&V(Rr4{8@{edx24n=Fuzs>9v)rs`L37EqLOjU=q{qQ>Y952l=9cDQ-Rn1ug$T^bv!M$f;T1?AjquDyV-09X1L(gUB{8V5h>$2JEPU0}O zbWu5+aZeL^^eXw#(4AYcgjW$JZMQ#rqZUyINR_t8-j#XkmllPWmn?spFxT~j+)ie| zgS|rbR$uB4v=ePQb{spEjyFn zje!+NArRrB^q{Q%$J4YLyCr05U>j5(n?uBQI42k==gmiy^DoG*URXyEg;DeS)>_yNijQ@ zKAH@>ttIlVHT1mcp~pc1HJ#$WEPn=OyauKIchcpRa+Wok^;)x)ENdZW0zoZuz}g5C zue&SIJ{`qw(I{~927Ax|L=L*}4>6tW{8P`bABUy$%`ZWpc2$?J`RKeRO`Ep3ciwuk#EcJKN>e zpMXU9?YON{bI(@96JfTo@Y{J4Yo|66OLYTWLscR%3#62=r1xF7l5!nV9sFTFn_4K7 z{OVh()o_2Y&+DBd!i$@enot6aq47nRjv|!UCux9HPuNt~CUnh~{U~YoNwgBg?qhHm zaYb4&*cY{Be$*uNw4DfjVL0N{<_k*Q*b#pDf((T>47)WdM`cnnkD;d&J6OD`JR(YvL;&vZ`1l#)zs+Xh>1gGqvf|6Ll6Gpv9@HFZ@pXxNplJ|)xAO74- zan>1Y1e{pzYmKGiV%K3SnvpR7+D3cGK~dAd2vHZokR|gu#-&1ub53!!em=jwH}f zVfd2cTDk{T8&6)A%^Lb-_5A!e>bjij^&R|^FYnhq(@ zEil&8!k0t_@Hs)oh^bBPvV}<&)lR!3=)+ojz*51hiBUCnS`~37!Y5No8rsLPbl%%_ zWS+ZNBm@MW8X3LldPK!cRfI|rL<(asmM+}@vb9v^t^ib$t&+4d;>v`1I6z=Pwc#0q zvW9I{c*^76t;b<~bg&{iQ)n~30h1W3YgyU3u-xaii)fvz-1Y{cU*_pV%PNl>1v2f; ztht!c8c5iN;^v9=jHXmFp6s;jLpvZrW@jSzH0*Z)pE0+wRUudp&2-#C#l*bg(g zQ=u5?l4jAx;_i2X}Uv`}*di#n+wTsa6W!|?K zXa@inp3DZ{Bvr_Cr&#~^H#9x!6_UuOUOE*Vr8nFDTPGrA^91@XGS!4=k&m#FyDQx6 zRLwL5hvSXQ+qYbnvVQ&x$XZK%nc{V2^{@Hgv~Le|(PH4M%!Y7gFVfZu!|0S0sWLN5_lV!QtrgZEoztO=M0hE;mU%1rOmZim ze1-0kF6z)Fu7xFBJ58MnQ3kp#{M5|+dgvD!u>+142EWO%Aqv7Agknz#&fO<+fn26& z#QT!91m^ zh2mFrf;5N=J!sG0x5JNQ1@ajwmKL%OFVf0zUvIe9Flx-j*4uzN_vh$fB@+11+_00M z^Tk_ORRML)x{Zej4~o^JkGV>#ISC(I|@O$dCGd@YIa9UPQ z0y8c!XK$2^`!4FHv=iq_M7o;#nR1Cu!mm<3k{DdA1)5X)D9bt=E&4eZr zZB@IA`JXEMHe`B`+fs6IAew{->5*?`r>+4F@lC|kwddNL`VG3?-f#>;8gv!vST7EaF;%+-(a=ov_5lFr|2GZ4*&TeH5ZIbX< z$j$s?%@?DpYMtJ%vTYw6&TH(QBP>`j#uJ;v#h{W(x-9#m^q@r%Xw)ChJYsVyW(2^o zas{L;n^!#oByoLBs#VD?iw1~GSNU)ZezwwAlNM;fwC10H=3(J?YJu99vA0Zck5pcz zvTU@_bSCnM*W4}W!BEK*G}@~2gY_yKTlb8DiafCq9^j-!4}&m$8H?^@a8(Cd2<#6o z)I=<(cGB3gD^@58;O`n${v~R<_{$iZ47eXxgAxM(TV(HTx|)-)xFP+2l!Ag2(XX89 z;9}Awl~DL|JW{R5pG-FffUK6Wfzm~YSwnpU2GU|tUQS3eG7hP*ZEc-WEYrsCyvxEb zQAcoWrTKmT%=s@$UI}eON6%TJ4@GO>5?PSNlG3+nXPz^c;QRjHOeiJE?#6@P%+`l; z%+7B7->+~>^EULG8zy!I<41QjD9%O8Hhm85L|v^K^qpyl2;_JJ3~xjo5ye*5dGBRgu{Wws#4T}f`?_m;rA}Vw}hdx z_#8#eD%z0MiNx(eS!s{`qk6dBVrC5YU~$f=?#LR^V0;hgB>qT z-u20QH!rgq;K~|WX>KGOK@|H&fERVRrds-vaFZd=_?wx4*`G~4RFgvlUGZ!)7c7=O zE;^x4{Y@*~i!#cai!`fNbgXaQTIwq;(&TRAUd^9}?luMV_{q9Dls#qr89xa;!Sq`mz z9%ua!bDQB{e<|KJRZuWvdnKn#6DTJ5rx3GwsLYhQLdxD?i&k+CYcR7C9uC2#6141o zkQDf7A`kg!l7{FpV?}J0!*!jwrg~_7hDpF}TQ{Q758KEZ96F~IKJ`L@G}R@n9r@B7|En~~FP>TG zf@(&-Y1ioofO(=tZUEb_FoGrCc-^lqJkDW7bi#my=#~Wn@SwDsgIjF}{VYraoQ@~z zD4jVPVts;N;E<#sf(`CfIespZeQpS!js0zecDXr-IX*BF>&xfN;;fO|13qgUxl(`W zWN_#Ac4=FmS7hU{-j9M{9XTKSSZYi9UVR`11VuE%c)licohru1j}N>hBX&wanD0OE zL=W5LGv)hwdPJ#YC>k2R?66oyI9R5a$_RO;l0-kg`O}{Pgp8J%eHd?UsBFO5mGuMN`x?Vle)Qe&W91Bo_eA`#xY-)xsA*p}+)f zEN)65Akc*GkD~?0_k~|}aOdl0-}zCx?{MGhx|(}EB}D>1AQctj-!*1mZj~@#6;HXu zcONDV{a$ok@u&pOMqD$Zsj9VQXIgYZA5){@Da4w9G{Mt>$CkXcvHWT#;0a*`tSSP) zBT|IB^F0>iwgTSiwVi(;2S30v52HH}fIeZ1~Aj@ktnJz@B=o}HfaPI5abFM+Xh@`+xx z0KMN>Fbd%R@`ogJXI`(s9Q&Y4Y-=M-8v^9e3F|_3`1Td#C#cWQtEL<)aXY(RY+H znxsvFtsK7O$iMezLT8D<5E1vy;rlF{?z3b!Xi{}uhZ_s z1B_-kpn^Qg2EhVqyC7QkSVvcGr&3VY=^9huTv|YUyauj^`DpJ?irzi}4`I7Pv zHjq&@T*ImEVi>v22yj=btPAuR)wAVHVU%j}d{mnL)#%i+xVbT_#JfW}@m2DEazU&0 zD9Rz%bHrU=wC-9FCiuuMs7x;G*wM7mLhHM_%g>?lFu7}ugZ~;imOu$3`g6~*mP|w* zd57Y8V~cx@8;1$KyAVpDHaFp9p3Pt3UwC(CCxK3P9<513Jwj>gTb|rf^9?$bPEm@# z5HU?eeR9D=V@9bHUA0@Ib?U?1hYR?~8^5*62ht%LX;$ij+fqU?{(_#8nzl0UXJ1y1 zY@uS=)?oA0V17}99xi4RTBxLuS1M4hK{7tlopqph?A(+wvrHx^2#s9>JOjHP|7i@y za?Dtn;cz)s`z437UhEkbMX1rpYm^h@^P)hhH&r}{|2*7>ij zVf18-oOL#|Frd=p_PH~5UkyLC)!D?G>65Cr0Fhh&EJNWdhe`DNI~PX z`jy3)+=hVnTUep>EwwEN*NPRcn{|!g?{UZpcT0Gda%+C0W#VtKz;i z-0q;R5tMa7Zna`Gr)*X#sVW8arrGSMRk*y@_k3>Gz7*?U@zcpm6h9Cx+3`%jC@>*A zvRRw4!9I(i=Ra&$93WRR`PK#E;@?>Yg0I2Fd!5EdY^Su2JH=bbOK$H1fe>7r3aHGo zfn#?xg9L`4cRF`-la3V?e|HQF_hkU3m4;eLwu6!s8Qc1ggplL?Y%}%nJuvWg{rb>G z(hwr1IkE|gkWCxkz{l0(@(v^`9$mUH{MNZx#~JwB1k3HByZ*x3k-oVdw4JUAST%a5E~D)%@xX?pMElYd_Q<+>AGR z7W?OaNEU+$Rq~{Q<~L2hQ(5x#0inQ==tXw#{~!t>mr&lyJTC8TvU7^N->-C1U`VXH zDrM2m3pZh)?8zE+pL&m0cr_`eQ&*81`5zKRa(Ht6eI(jolxd1bvu>hn&$253D?cqt zSY2I;m?$NGyTR%ie0LU%w{DY+^!Pd7(c29Xh=NaE^jf6BsNVKzEw_o+cFn1q6+`*v zepTs;2~G|;$-TQ> zx!>0OrwjdJ?fyDMuRUeSqdVdw-k(_ArTijOZ-4^yGm{Ins*W(8Ke3j`L+GT3~_u+~G2% z5{}84B`9o0q6VwI%S=RYJd=fKP7{NA!Dwi>W+UtPM&c~=!0&KEMX7FXO zcsI<^3hb(#oIDiJf@6U{bhlo`{z08i0zcou*Dd;`Z$|JQ7OvJN-y;S{Hu)d4$i@mt zEG-k^BEHGJo{M)Db{||hi=vO10hLqHQo?OKe1ZOD#lug$ts@ZU0xFdMksLyKI*A5h zdYq?u3;^N$0&o8+&{y^gazqPg%1GKbzqf1lej}@k+vgR)h7Z#tIIxN(TnaJ5nrlLW?A-US{I2cbH{0u}p(DCoRp*D<5|+=r5upjfk^xoG`)h5Y~#or_p1!zVO+>uT4s2uVIk zaD(~Ku%_&}R4T_;I*s%w-Hy1fMvb>U_vWg$oJ)xoQ5R=;2ZeUfzau0<1Z2Z$5ImvY zY~KP#IG{0YnFhf?1@jIv>AE-jhW>{E$&+UpvcjtMx@8jLPpnvL8vi~ixtc;I)aSUK zNFYVl5>?9})~|V)0%`9vTU62;IXfc0BELFXZ{tMrHk+Sju#gwYjU-|>tXCbkN7T&z zc~SdPK#`b9UBH^^d%>~NVY%+o3^c>^en2m~V zh5_PMXF3zw|9!HfP)d6vUn?9%nBD370kbxJl9#o4iCzLpZGT(praMo>pS<#!n-cA! zf*A9+c_(W%R{kQkHRvsbXh32U;w0z9e@;C81{dXk|7>TKdjIa2{Xlp~8wvO@02d$h zUnA1cv{^p-+HYp5F>W&9RPYqYGKS0UMukoqj+!#sOu7=Qp;utU&pN+jY}* z?tj)I>NqXkHv$SpI&`tP5YUPdYgasVh~XbTOwp1)Aa$5#b4ssu?3GLCTI;GzQ<`X+ z2{(6@lu}3dHEiz{hYh{nGsxLyGiTPUtd&_QVfpGD2#HNL1^^1uVPqIKc}CPt-dnpEO8(r{38W=6exGPhM!@U!3c-GFD;? z0%rBaA!2>lJ?GJ(Jx?;>Dn~7@H{V~wMn*V)M^bU|>k)?#uRE69lt=TAAAC zpfp##NM}Eqyfd_uGI~&$m0dd(0s1$TjKA{A+nQ)!{SF`UyKd%eFVY<4@)(jUxn2}W zX(g&AW4E~1#s;59Dy1WaS7DwB)Qs$v5*>U#e8sV4C1zv09Kx3;=*LGV&9EW3@R)m5 z@y_l_4g$k*@sGWYW<*PxdQV~H9oKa~ws>t{tDG>WyFt)QgKcy5t_dYbU?>$}%iWBkj7TJx!yNKv$ z*Y&ec1J0lhn|pT8eDvZnXHYvjND2?Jj(5xcSqL&X+i#KHz zuM!%qx3Qp%Z;vF5KQ4#IViUq~_u}Inq8eg&D5r*FKpld_xoL@jmaEOS{faKk9sAvG zbEe&D39gOTZ{-FEXb)Qs&9pWYn^-!qHp>yRw;6zr4GJbv#;37Hl_#PbZZa82 zolMBuh^_|tDJ&sR+|^k(hUn!nh-lq+#iOFGCM7-@%6Hv^j{p74-AVRJ<`-h+>j6aK zS6M_4x5|jDL6C8im|gqT)paHir1(QP(FvQF(Smt;(rzKx)boqC3$6Uj-nH?xUl`KV zlLE6cYt*XQ8{*wElNi66(4mvI;I69)DDZx6Y0Nm7z?9oC$m{--M3*QyrOZ><(gxij z*`O%Ti1Hqr>Ypq($#K*V!9QFEe^e5_EG8q6TyJ)3uhy zjkNQ*Jst(2>P{P|EI>(UQYFJ#$kiD$sL~S9Rz#;wstpX5b_E>J`+M*}%Cuy}5UEU` zKCxE2dg}FUoapcfe5UWSY8rV4JOsc_EMn($PaYr|?lM8vl%y=ql=3gx8=q(_wYI%D z?NRVm&fBF}zbE3puc3K+@eP-8rJ*^Rvf!&6Mc(-AhJO0D<@>U>ox71~9<;7Xytf`< zxkAlfd2Z(8;ggk>Jd7)uav z<8=c>^NUKZw@*~XgZnw}RTG#}hH&IgJ~&$m(uj&$a2>{>xSS2XNH|^jwCk&j!`5wP<#C$AI&TF^B8u0fHY>VpI8pH0q`y}4QW@zKATF?aaqYr1*? zYoCF>-D;x+WlcoyR-um1<*o+9!{S!W{Zh}I9{7ui(NP{rZw%#ieE*H$M@qJ%2b zC93@a38#Cu+NYZwc+uAS1qV4-9)nN(AC|5%D$1^F4_zYC9V#H*-O?e=&>`I*Al(Rv zG)PF7Al;o0-3;9@NDbXE(%;Ryz8_~Te}S_&v(MhwzQS$Vy07hv7xWMdktBI^zED92 zV329`7c{$?|5q2M^52UGH>e$UOxz6h-&_xnsRJN22C{hkWrmV*2qMSJ+H-q-1gIad zCt1xjF`)RsKkvj?uOrgHLjY3_eyYVwoGFz`%fa@ogK`^!@V$n_1|UA&P)@tf$(HDt zgU$G-6=Zgjh&js$Aqx+))yKv7lh5DMH^*bF`jqdghy&xWB?#8>)--!onk$1p{9Gt7 z2EuW+E!3~*J;uf{DV4Q;c7xsfo-Pt(9l2z?rIHQk&C$c(RAN_ePb* zohPgc$W=f2^aJ}?`?2L~tm=OQ@T)~|hGhTfpqQD-g0~Tj1q(&tRlz5E6Ozd57yXg> zOl0{P)4{XS0t$-}@yddqF_2TbsT(c?G0OH8W;f8G3(~5UCzK^NUI&L)sB|>bHW!@y z`9hiDXKK%tHriI3uiotO!psC+*zhx_qsmRmzhw`-?$4Eq6Rx%?1Om8-Oo@Q-^2#q! z_R#rcndaj6ac(!iT7hzEy1+}PNfTVmXEf{4$;(V;c{ws>scTOMu#W48m|w`+)n3XB z`aj=j;V?`9X-uc#Iy$jNEey5gj$_N2ylm-|MgY$KB9Qq234>6-#ldmZ? zlPnLBQYzvIKUB5E=4a$9#?f&0QiFZ++MLXw4p@5 z1d3HG#&dZ0GV>2em>|60nQqWa`m^!qA&e*K6wjUN&~v*ZyHIJ*<#{RJA0j>SLIwkE zDTsP#i&+cgH_apbSK@!lwc!20-12-l?R@n;e}O_%ISpR?2lRO{$(cURfKQxx-h#%e zeB0TT5(*d%MDqL;s-cV5FbkGdoQb6KUZdJ1J&I}4&N2s29|qsrV#dvBh=>u8yX>Ge0> z3`+q`$tfpwkDySA2EKJS>G^NSL*Ayq4dZGk?@ zUI@lmtEy0c5x8Jd>8viNo3l&31lDM;fB_x}a4VBi$3ctm49aN_R67^HOru(bvrl=G zz<_MAmPtk%+Tuweo$pTfGb7g`Ul+&=7NTPUcN1Jdu9IHCkN+X!$3qX?F<$||oCh>w zv{wYml9(C+BsiUb1P35efR@}P)GvvWWep0Q-WD}gVMNsbc+}EOC(l(J2NVm~qosn_ zeBICj4YUJK@rvrXNKj zI0Z~XOqwULh~8q~=`_tIXopz<5;zmxtJ$(*2~N7Veco?ysJ%23xTUMi6!qsKr@deP zyZssWM}sS`aRvd^s_?}M`)d?W$)Fcr5r9nRo}n&2NRPwM<>z^xk1I1a4LzAn{wdC3 zr6p<`I~j~>Eg&!}yNv)+u3goluMr)A&dOD7M5+$iIVnWND>TNPZyl+Ny@Z-5r#Qcq zhf!^w>;^J@)`BDjsH}qw^d@ca!zhagv1icChD^!Bt6wmpG1Vma4jq%7>{w z?p+lf*6s#IEq@5HlqgGK7ADJy6x#Auy_}NlX(`3|S@OcSDa;q+ZmNO$c*5gRg}P#R z**SdIfc`Y{9iBi_QuKFZu`9NdR{BcS^6Ap6(MvjZCeb^$SHY~vyfvN9Cw1Z=^vA(~ z*+)ZLSh7#2ZQa)^MPd#K+qZT;#wn(ssa64vMCn80_?p>~$f#zf*v6OR z276;#HzMAFRzQ$|Of&J}?>XSIqLA*!7jv$Xta;|jz;1W|15X%};U%fHw8_;phf+gi%iM)T(Y zDz~eD0oFPZoxK3JIX69{_;Gtjipl+cne{EuCl)$f1&$*)&3#{AY&=AUy?O)FnA>^S zzuY|pGGM0u`TI_&a|d`?IPA2Hj-^%${#@n>oTM79B}-T30w`TQFGXlK*Ep)uMMQRG z*gCmo>>K2%CqeKZFT7P{==_870^jM9Tlrr5?5%@af}@IkSrNe%AN)MbPG7rJ;qq&K z(-V(lJx;yF%;l2SDb=B@amYt}v9&#~Sn7=4DxtATXo>rpZ&xMl&qvWG`h|d>m?G&9Cr1FR(7$u67!bt zj$i}ccVijTs7c10;T0U2AxxZf?Q};u8OFedPj0ucocV+ftiAq{v1u+VZl@w5&o=fa8EBaXfLO((r*Ij=-Dt=O;$;nsA!S_GNk@4o^ds8k))~uAd4U1j{C%5TqiG7 zfX(nWlz2g952GZ43(TdON<|kVGAZcTL8Rl%B#LTGQkY!8YLyj9QQg0y={+D}s2}+@ zyJX8T4UwuUyH9(kseDqb+CD@l$hiLyN-y*lY&NQBboEj3MMxNwNQw_a&3WwKKBtf? zMRI7BUK6TpotjD3=ArAm7iDHw${g9HEG^g5C{kBTMX+47ErVhH&Uvi8ol7Kpz>fX+ zs4OZQwl0UAr9Ba5c{y5bH&?dY#OIKv?gJ<&sYI%n5C#c*1#C^q4fJ=50OU6Eso|!u zfsnMK`gs6a9?d(B)_y+y>ZOBm6_rRX%g0ddzl|DorC@;~fL`d?La}2{72EygQgMeI zv-QY;x6<3yu6y@nna?wkA|lG8y1J%E&Esy>e=XDbb6uZL7QpN8<=cHU!vP~D(y&7y z1_@H|g_FG;KzM-QDDn=~c&~df*vHZ!`#qs7K)?)#Tk2&-0WPvcb0&uX5yLFsRnmSb z@s?StW^p-;F7zQCy_*^S97mOE(Ix-3|jkYjIB8PAPU^_Xp;B_ zvDO2#IiEtaTnaUbT#<|(BUeK;VIU{`TUqgI3!BA%my!ls@rnBQQ9gchm7`_qN5f@t zTAtHe-mk|g3#wUS|CngHpXp;r-Rmd6H|??;M#zZ$!qd}mV$-XJvwkPX8uwSIYJ4@lF;LwJ=oIdk0=9DmSb zo9=Q7?WWJFG+J^U9l8$CYhS6pQrE zRGokW2sP8*<^qIN0WZm7Q#Gwmx?%E5?#i|T%ZRQoD3?uj7bP8Zp67}JPT&`b`9xH3`ic+ArSQvpFAt z{FttpOE&#n8-6;6jy0jvw+Qc_;p;lNi;DmJj_XwR#g+@S+s6?nKKkIik9$stnHG{z zCXcdzjtr}DqR};J>}=PLp`b~a0NCp|tYO|=2HMGfn1G2WKYzu~u*dNl9#8Mva*QE^ zIUdIb99cjv=yhGxJn*}M8Y3xz+kN{NfzLtOip>v?gKfG3sX*iNs_g&zu7Rm43PD1^ zd_yW30ty9e)k%TuSZmP6u05x<(pI0Nqd+6D{2-HsJlKLR(wQA@`0rz$K3}DKOY@1P z-zxD;O zDBa6@O@Et1@><5guz8;&z$od&-S#ytlo}Z2nHNeMJ_mC(EnYZHqB^yx3xupwoBYk z|2GnS<#S8m6E(fK-QDCl4p1^M-`7a>y6v(3@*x@ijhPgk?`fQ2^2g_xuR`7z-fUni zMWjV?vjj-{Hi33Sw>=Puh@OIt2~MrzGy50;Q9K;p6d*v4#SfCc_N(mpJrYzT8J7i{ zD=W(z%IeZ?%ON1=Gnb0xiI$R5=Vz;e|7ISwWBNTC-fyF;jShz7@Jl!ch1(DrHhK z8mpiN*o`CyZ%=4XL!7Y=c`dAhAAqi7_8JADEX?QdrjsJrSs6rD;)?dEB4+i{{U@TZ!KYxr&uPtQY;hCW*rpH z+Lz7*&(CW(KPjhL$}|`Hpaye2tcFjpnW$N6pqa%T3;;$dr9w^YCoFCc5R=TDR6dOR zq-^zMk!5xY#+FM$isoB*!E(*Z5<&^5>4Ra_BK1g-kiXN!@W=bUD1qXiEThIk#xfiK zLb?P(hExGhFIxRT&8oEqoAnjjT4hhCq~Z8B%ElPLyp-c5*b{yidj|pK_E_0K3bSR_ z2sI!vwXw_EgNggcDaNa$k(3l`mbJ!ICnS3GN{$wqD2l3?o)z=t7M`lZTvi!3bmT!C zfbSO4o4W1`ZW^lwGEb*{Wx%skDi6AcBLfL}_HDDf(q+zY%=*CDKQsWTfIFS1zd2?? ztnpOrh-%Ea(#>5Bt`jx_a;nJ=yom(^W|bU8qukd$PxUU=XX|YA6pk00sANVn%ghx9 ziJ+IdU_t7yDqhB)oQabb%CcpAJN&4G1|6ZUACf-V9Z-&oMwvv5Lh1Q< zULUSbqbF+-AY9X>joliL9O^ElFS0DBSE~X5cCq94tmJha$kt5he(T}By6C()u4)IW zE98y4`bhYUyM7L%JH=p?bzhLgAca%QjjgqG++3iJB^$KpS?X%%^OIP z=R6;Ia)G~9PKGtVSIoi`qd$&T*&7i03x#>pk~+RPe&gD_bWR3yfAtrzrm4tsdDckW z3c;Qm;f{+&1HB@Fy8!3M<|9@LGO!eB-)kkBL>@t$0d5={GkuU*6Fr@QPO9*$kxVqH2gPpmDkjK$+KgRm;B!v4=cWdD&-1eK&mTh*2M&kNiE`DXra) z$?$2yw5Tv>B@h|63lrOEB_e#mr>+U*b_$KrQLSIyPv?@I)N3q;iP#cZMpIacuMeD7 zX)xkbktMwl@DTGtLqT~>|Fw(D+FSYi-tcq76oVYIuJ6ZB*Jog3X}34VZRL+c+2ZK6 zkqU{Q7YnI-xd++$!nVYNum%HZ0*?*~ZF6lUAF%EsU^{Oql+m(4&x@BdVSkN z=$87sFhC}o8d@a~T}tGzFvgTw{t8UaZdfc?3w{l*c^##PReSG1h?v|^mYXaR1T|QT zjE^Sl|2)uF+2rH6G(w6+_`LrsRf{R3uIuRtS2c-h>smesg~5t{MR5A=ft5d$@D=A< zv5;?lKU$Qg4f9eSOY1*`Hh5pQVuFW?Bn9dz$MU`3ebM48JU%woL?4){d_^>-GT<}b zro8~KV?Q4EtK?zz*;-OsgeD+24qdX}^Znjid9zG%%^viw;Gm?vG5w=@4)cRZM6cZn7qUe+hesa0y0_%UwFx=OGfC;47Fd+N zrF~chj5_ntV$=nm8c6xZ@obK3tv>VMBhiQkj+rR*ZM6+Hu^i+j$i%qzTRnqz94PNo z%}80CZaAy{L?-BsGc1q&9A`W5B=I>HF9c09JhZs<*ybEse!idTiu`k3Z8jY+vHt`(c!inmCnU9 zGQ{w#ZJE~*qdw7k`^VTLp$cAWE~JEk&K-FJZ&WwzNO451*|*}3k|62cf$w;dieK6@ zs$G4qJ6)P+FKeA|$r3(jc?fi7`&H=;u6tMa_)qQ2{Z-U!l%^H0zj?`*&9<`4^JU`= zg>#34mAv2lS%Wkh-#3Df3vQT~kCbN`*iuX#+&j(7R(>p}7G+p@Up+6%21-FFAymuP zX?i92H93tTeWO(F>Cw5%2nL+Jhka!OHPAHZ%CeehT>73ADB@1j?$pfQuN($(5)xjW zIG(#ys-nKnIOFVqPGsH~|9NVs^2|0l*s?*%X~@t=fE~9{jbhYwQi>8Cy!RQr)`GBz zRrwIj@Eo=Xc+S>&T}+a;+%d*m5)$G#DO?y!M9r`Zg|hO~e$>Vt%12#Rn!_Zad-<#V zJx6jLotyP=_GhG@cw+N#eykBGAk<7iiWCZXy58yQU5V!73|Zo=^6E$(H|43fcAUyk zPgbX0{D%9ke=_PB14s1Vih%i^l-C!fkeZpUy-wq~B3<#$&oYtN%=m^JC#Q;Bb3|I@ zLOxLEZMb^BQe71C;b}&Yp85P9)|;?}>e@HVoY zG#FYBK1{L3RTo1W%KvirlzpL}ysW#nTHT3ln;Ty|s0g{#eP(+9_b7F-x^|V{wEI&7 zu_aoq7&&OlJ9LbVtJbLSpwwT-hhnCFQJl)Yf@H(&4*jEr--jb%2m8pf$s{CJ~4go_Ri?r=+nH7+Y=EBT2%$}f8y!`l6g z5?91-ro1QBRXrRcLT>Pe?ud`QVI>C_{D-IL?q~$=ldZ#bxMVTEOF+5*GPx zOoh^n+1hkNB%vi{MzuIBT0+9d_l=@|H0{7Ed-TB?nQj)EHaQL@osP=My2wHGdJA>Xt+|+lavqBB+F$ z%i=!O+}6td{!0qOK(&+19>HO!2fO0Mcn@BG>2&&|a6sNy=<#9VXU=!(v{Wl_x#lkq z&?XUbCS~rPp(!$n-DtNhGdIWY;uKER$0bu!BM zygF9ZcB*`iO5>Ky&pC^I2t7p`o0BL6K*vQlf7;?doX)MZwYl=STkcxhw@I6AuSP*L(isR)U$z(IG61 zu?qX2{{iW{R;3WL$OAVXg7m&6;qL<=y zdz_c*huq6{iw@fE2tKm^^(E|71Q!PmbdF{54SuY+3e|ZGe5ug4OQo?7QrAI zUX+wiw0U3nL6Ss)3?YYM;*hBeewUq3Y@uhOPZ|bCFUX=BIC_^SouKP3rT;F5_U5v! zZm+}oH(&XuYE#Q!*MGVV7Bxwf$yCTX+nh!yOoY0AR;qksg~GQMYR8!-LGzYBM8o)m z)Ke(fkA?%}PMavW&U*{*f3ep4OD?crL4`lw{JP=xt?LG=!S2*e#Ua+T%{Ti}dNd2n zF~|0^1Rvr>m$UTh$Et6^Mykz~_7bTFbIbf!y+No7UtEq%`XL%J(AYa)~XMfQd`qu88g325IDiuYK@14D=UFmC$2ujO3ZH*pR*2AcG zaoX1gNEGwh2ZB>gZ^!RJ4XzPSp?~;IhmBtynVLW~RYKx<5SPeuTdCZLEd70s<_bD? zZUIl?Wp~>Wh&nI1!*0Sy+6@2QODpzIoc15n;X+90_549&a#Y^8f4;#fxz4G-tvpng zx034`GhENa9z5uXr4AY*jb$6@WZLP;Y6yr9@98`HWt7hCQJ}45XJ;Z)Fx5vL`l#y!vfaFG}AOUqP zL!Q6Xig53Q(T(#bvyZXKOWybP!=DD*X%`7zp1zk}1_3ldaf43fv!N{b10L~iBb6vN z?FL1p6+V9Zgh%^B@o9qWNg&7}p?Q0Rhgi1RN>6`;gBg|iQrRms0V^&hlB>4lcS5g| zdGY&bDv{p5Yk$=8<>NU9CZO6}(NyYM@jOiRem~U`i=|!8N9t*RZ&@mtZ_#?JC4OFD zRiLWqa&Ss_RwQHnXfU7Z@5E9jzi87Ic5=9WT=gGtKtWsYK6PP%1RnFhb;IVdVY|N7 z7eUffTd3`?ci9x&deANANX&~KiGz9;J0BlJLGf`1wp(FwB&JspeZ`D9D4_tq=aMocR~{jluI)*?MT$?pxSBS(p}UsrWlS(_?nlaHAN zCuzppUgu!sqLWcB-`atOP_{rD!&26}&x44=$c~8%o0G_Q8D3^whINPQfpgO=pDRv3 zs`L8>YH|P{;wWDdT?>27{N3UD4foIG zyYA;(s*Xd=1#2UyCbBimllYkb#@j0bA6a8$ID=)MjN(mF`3DPwS=X21cx&NhPt6 z?^Irz0pb|%i4$G8JEQ$QpB$e4ohjt}H)Yfn&NXjB|O>+v?F&SRrPRn_^n?&~qiW(PpY z4nVI$bErPsl^A$J`~n;Co@}U4hyrt*z`VX%6EKFm#8xnL0xtpp<)v&dYq~e z)9R_*lF)7ZMJw}VZds{^dG7add2P3QweW@&M9!vn@mAX<S4 z+Nrmnq*7JZL+sJv{yS0A`KEspYS5iIinzJQ`dZ= z{O-|7FK)GEGe-oA0I2#!6i+(Qk4*bWudD&s62+zr#n#u5FNZ3P?Px-sJ20-Fj-P0T84*+5a}MMtfN<4 zh}pV}gZc{nvD&nMv;2};*w~n+5p0Brh5dN}gT(tDG3l7zv|n*Hd^&(n59)qw$szf} zGnz%;R3PrvK;KpnhrEFdQ3nl+8hsRaP63nNT0~e2#XgWEqB`dkR|Z=@I{Pk1zzfdK zclXI&>2{q@*E}bu$h0~eK}U&baQq+U&Dt$@x38C^@RDz*m&4wrA~r87Q+tCV0Rr^) zr{_SZ9&{u_FF1t3r|bNeZO&k5^tTM&~_2q)s!+!>DA%iISzUsfa>+IYVr{xJC z(%R#E#-l#zP=?Wg4!FglwXKTW9fflGc&s8$zId_IQmf+I@OaRIywAf ztx6?Cj%@#TYQ)Aei$<%Nix<`2QyEi^b!O6@es5~g5~A0o1fB&6Z&_bNm8X-Mw57Xs z%U3-(XNq1us*>{z$9%HwzO`(I+8#CH?OD}EYo=SXT$gS~HmkuJuH*ER@ z1}>(%vlHm}0yYXZd6x5dwzb_T`#5$(7+p-pog}XynVprk0!fLG@>y#DyudskS`|Y~ zwO7qU7h{KZz%`k|z|~u+*H2BWP9b>vQ^4=ED&?e!u8Qx_3?ruD5A6@k8%aGIqIz(m z001c|cJ%gzGIs`xdOldV7-)e9ArJb-DeDBs3$4$$JRfU_Z{pp;uc;_S1%7_k#vgXb!8(j@X#K8nVaU>1rd} z46$j5glX9_2$`--!bO{RI}-jfs!x+a$p|NH z(KsigiOD8`SSmAfT`nY25sPtbCpx05!i8eWs*6_zlDHJ@Z_I7s( zu{;E?;PdNBe>4A4bQA32NMkz|v1tuTf__<~qeh7@QRmwi%+JgI>fR{3k4_Z=L%?3E zu$PkBPu{fCPVnNCkzN^^OyVh(s+=&vpA>9Aq=!xkFP%l?C+3rM&$znWfc1Pwcyj{H zEn}I9h!^rw+O;hQe*LJHR?l*wizHV5NAogL2RxpvJz+*?J;~^#iJ(&9qke3lowN#a zIPJn7a`6ZE6tN=th?H@~2nprC7FEKOl;$FRU!iY=JIaN)GbJ5*Q;DE=y4#bzX*i8* zgN*S$eo4|v5U&BKC?H4hGab(2Pi7hFm zA|fS`&2g=oW=bccTu(-cAo$4h=I%*>#P)fD{4v#Qb0Y`M{wF`ZtYD~P4Ps;{`j5>h z(K7V*pdqtYv=M!`=Ic=zcTv_XZ-3r*STS|8*g$y^-T}jr@ec>stl95SS9W zBfP*9^cQ%7n2&V`O^=MUEj~aW_jEIb4@gB^&W=F`l-@lV#3%%z>ZbRY?XJ4Hy3yXT zgMOG+gb?aWW08Oj))p>;xc*MzKzf>J(C8l5`@xGDCWUjLk{EC`8nge1g-njos=bk+ zF?iS~iD&SM7!SD`@ja|IbI~0sBVF%|y?E#o0%}77+h*&IZMqJO6Ac8lZt%t#UuG(eA(9Yq|2yOvgodqAfvt`nJA0b z-wSUi0)>>nE5p88)#4~aCkS7{1Ct5R@a$@PS7JCcNRT_mGw|(m*Q@0Z*(Kr!Q!3yh zEy&S1*zxU$^}^jeFhJB+OMDbr>v;mF)DYsK;hVc=^U za@~8VsWn+OWe(2g)~KE zowY+Fqd3Znr$iDt;x>HrWI{q+`nFYf;4#^E)Ci`(&xZb`nP81rA8mkX47T;Ctl!7- z7#q%tn!dx6rHcet({k~BPsq&!zq5~_A~qeLv~!j$Bb8lovyE8=M`4+L=8mR~&A8)o zEmVoalT#wVz-!Wl=AE>O@drZXtMdJEWZQ)AW(>XdEkdNvd(NqcPJO?gQg7yCP>(s6 zxtP6Sk|nVHXLd>TqZCi%cqbBfz%0->vMH;r%;JkVLU_g<{@Ab7lBTKi$=tNa?M(hV zLEz3`J=72zNY}^ge%5x{JUaahpJ(~?r$_ypjAp(rp~ZE?=Go{Iirne_^+x9s7B|Yq zs*|Fu>@h}`IYeQeE5L}`krxxmdw$8O)XV?KE2Zzy9F+@YI|}B9gX83l5p+b>*q5~+ z7&PKgdHlW0(MXSF0@X12tM{Zt(c^?7L77^r(NzS12SnX>(*z$IXIH2n$aaU@-b$pii9dNWFBBHWK%&;5z{tSG*%gb;A~H9-5b_H}SF0GHnfZl4muZ{Ujo zH-e_^W>8_Bq@GyA(~mmKQj7NIlxC*S?OOLeXHQ$aEXf=|(}f+jt@TY_uLGa68*Dq5 z;HO48sN_NQ&jUQrcK>N;j}w;f^jA|=mv*n`RXSTCPX&+r(tcZ?xy_5i<8!0xcjNr0 ztMhK{zRF|{HU7H+E3iZRtJRrjZ@<*?k(0wc)tT6*v%0Iy-GEE4JAKfgspsr zkhUqev0?Lp_AT9_AXyxTD~v&3fwyk_RM@u<|MvMk`|~HEiwlT!l^|#zXxPS|VPt%E zBd}>;R3gsAx@?{PYOHf3zK}(FIqk<>ITffR_vxw0p^NQNSLkRuF1b^O{12)b>^f8C zuesr$maKrOyq_M}`+UBp{{+`tM;wiH$PCGA;D7H54r3}keKHO)79P7D+Hab@4_lT$ zIZ3hK%70n8!#{v#MmtXA*Ix;{wOQ$<8`qV4eezFR6e_c?U1rMFh1yEBG?qQiLiHVs z*0k5+i^`njnREV#;fwzaY*BHo*p>|p5ew^ZG~c({HSu*G5dYy zQa3K+`rhlL?6EMAe=+8X$^YY>%eS=w09Gl00p+A++TR*Gu>5O|Cf!K>Rs3QBw7^{`Yt_@6dhpz-90`V#~hl&%9mT@Q-Vk#&wh6X=5M)De+lcq@M?HUz?5|L3>F)@}Lm|o7Zm1X~tpLr)$ zrfzCg(Q&%}gO6vQ6Jf)OT$nf%*P0#u&yFH9(LLQCk56F%IpX4{A0Kw`iMM*r19KoZ zB59MZ?pDO7ZM+z=7sb_cOYgJMJ7Ir)19rTA*rAUb9JshRn}z@V zSGIR=bfQp8QRM%Lu{0rJ7Ft=E*y!*e^^K5Kbye;&U^jMEkM#P+=-h5!e?}Pc#Y+Rz zI#|^x411R+cUu8Tu1NLl?XTStU8r;;OVS#GW0szUo|k-$=g{#_qAL2-2p5HdMRHkI zkt~)D zjCXv$Z{I9hi6-vA0}q!xQJUC+A4k#BwA$tkA6Kx%z{hw$l@z*KTNF@Sxj6uqp=SPG zwfwgHP@A?JbrxTyG`n`}x3g4aC-zd0GjZUEnXjUakOlD&dOWMA-XcC#*`aWhM*7M; zUCRhL@uRZ;4+GhxA_nZNE+_BE!<6qxhdQjv)poWw6k>7D{4Uv7qAc@Y>23qOfL#jm zBaM)jfb8!%(!0?QY^b0YtWn@)o7X-Sm@Gb^p=At*#rnK{IiN4VWw@wdOcFR*x^V?| zI<6o+)lHPGC-$HtUornH5s-j!?BiTJ@-?tdsmArtrhS74Gz1CFZssAv{6wNj1%IB< zVps2dXc>(ExREIkn3T&_#`thlOSDNlbaA?%xg(MAsBhmt(MHL@NIGEdBz%}$2Dy{P<_BqWK z@96Y212at>P9xk+V`}%Wl+eW zYN9Kf&Sbb~nBPrgn9xfyo5(N6iIYyKMml1B+U!Br?lA_7C1WY#BSM5`$f=|yTK;!U259#>wfTr(5O=H}e-2pc#0Z2Y7OEas;3*RLYX!KejQ>_f2KWlF1|MVY1spv9r6|@kozA@Y^GLs~aiii1 zD71nObfL|Bcih^scpmZ??k?V$D3iPVcgy2W22B&>eYyZ(UMj(M*5KiH#29f5`aMJV zP8=5MIRy|DzkJ<>{yTVkMI?(A^bbumzI7l!G$@2)I&U&emp!0u(U_-&9=mZ;+i zCzmE7g+ag8MxkI$p2%QH9xsE0QfXKA)18;lLv36J?7^|qBU8MQ;|p!T-|O?ZTOwm( zY8G4>x*?xcZ;`7-Z-b+|zeUn6SF@0v4r=SyqA7^-5UO*Fr&T@`Q7t2T+Nk!YIq%Yy zQp7stCKA19{}&{z)UT7cer5%{9shW<+J3E4)umficq~P6WVL`iCl=v2A7E1@9B57c z1?6GmEx!^$gX-%0h-Gf#L&qjQ&0)a7`fO1EqrR$j%8v_ zKT$bD%zZ_UiP~Zr4xUNA#2gu*3l*&{;0K;A~zUMVcuvWaDg1bp%GZaCgP} zuhexHH14K}N=PiCArnM~3yme^&NiiR4iG3;a4`~gwEH~%L@3&&ZtmDSZgTECeG1nujHyFyfr_Bj`wcv$G-ejr=RtEuT+OTawddN7Bo3Ht zaL|-U8;*ACX@z68rlZCU-#L`bcbu}6J)bOUW%u_z{izEVf4$MCxJuwGc<FDbb_ zevAK%E0HHA&kOyV>M!E8Hg&%q(UjSMbn5RT6lC@&5O@S+a8W^@KeRa90G&NbP%gX~ zQ_BpgmW%#|VqfF~)gZt{V*8p>9J0f$-)QIC@Pqq1RWCOV_Na50MCvo23Szr=lolSi zn6d)tepOIqpeNSeCbBeur>E2eaeUA*lVLGq08fe4o)&0bl2%I93oit8tI<@tx|aEc zw^V$ITPAdcXAT&sRyJ!}xrcof8tPr=rkgiEm>ye?WtXzd$TLUG2IsUK=``4*o`}@FwkK4MSr{*Gdv1m%2oUTD#eVoB{>(r{Q7j)r} z@41qaIl$GoTFMnwb2%9BL6*FV2UcM)faORB$wSTX&`8d1j!rsxVFFUN1@~ zWrgZWpwA(~+N9nHk)cUoruv`j3%msP%X z5F1;MY~{hnxecgHEQLR5s?0# z-vd3MOOD%U`tPLSj^{?&xMjQT8(_oI4J>Vcz{PkAFWgoHc)LG^SrN?{@A*t)Rvr({ zJ7|yapwxZImi*nnO1Hz39dc-1md07u_$pUjTMHg$cMw$dAkTX)q{cIf#2vgI#uUW|5G);o$J`Y#fCx*e2M$_k|pmqs1g-?vjS(;Sfz+(8iB%&RA4!t}f~Kzq#O3$LGqMO}+l9;v5zfgqW}`xXBUk?XM= zQQ@u2?5S2*23ikR_F}uxFeRZuI3^7Tf%3=vy^o`+ybKc8nsndvCAZcVIN8aG)eCzt zLw~EsWR((MENbBn+&e41(8!SEr~!7u%YF|8Ql;?oHMYYb*h%?*`UnQ4Nq+da^B1j& zR`75AMEswWM$day7~NzY@f`wA+#*%;VPH$4qaukOTd6rueP%sPB;(ELzuReVRhgN= zo5!3B6@SemSRrr|9Cpfu&AQN>mv;U0s<0(2m{g~B_$yp5;Ammih#6q$;AcGzaqPW%`lEmnxT5pvUJfw@Y+K zhu$aG6;{8zB(UIBBIU3$V*b)G-T@|vi8nR26fKP9#;Lhl`uUpyP_u$tpN-8-MQJeF zc(-ELho>HGet8E;Fvu&w>Xfuua`}6Ab2;4HK6el=_b!KA zR4GU%^frmLcqp9B?%2ayE3jX?MJ+fEAx5U9zOZIK`hv#CY@5>>MXXw$S5RT@r4wu- zZ>ZH#pfh#QzHWkH`^079H8bmg%9$=A@c0c%3O-sFL-)w7b;~0LMmLX5i2fgzfeuX? zQ@*zcKvsBR+myK}^t|3?f5@_}T34g}c1a@Qb9t(sz0M*AGfv&FYRc+{3e%6LllOxMIeIgS zUHR`#C#EU>)}7%B={$)?`%wJ#xn1EaJn6=k>N;JQorEk8#9YOBoaRmNOn>&4U&dp_ zz%}2>!zjJDImhe;Ksg9Aw(3n?SUFEPt}+p%(NpYaX&Ao+?*rbBFcc{gS?B?kB2=zT zEbui+IGpO7yN|20EG&rlj=BUh)UXvKK7uD#z4 zohX8_I)n1M({JgiPs5W>%ic8X&LEGag2j}I2iun9-yiF*PQrVKhp>X>ru&DnPYoqa zj1AQ*7(eb@$dgQ81k!a6T#pM0APAg?aVF>d1{u1uS~UP7#H7~QbK3ldOKyvo@y&W4 zv(2d1G1P4J_C~#u+1CGU0Opoi4(+6AG<|#F{%1ieu|zi z=whD8V%>6)24?6EEoW7)9B)?zhWCJ%aM1iV^P%p#d%l(+w%~pP9hRJE3RurTKIxnK zfzxJMsz2L-FPhY z0t8YVr5DXeqEbXJ=1y*qd_$}5F_6kVZCpI&(?m6uyz3J z6KryEpWkS&I7Sb%bIZb=BK*BDO>9;mpsY6_7)pE5(sG)?f`JCJ`Ho%teGI+UxBz>P zX_AeZU&Y@F%fv_e$cv`{VUzG(8!Hg;2Z&E0yVXqpqbUMz=v#9XG>KSvrj9ihT+3YO zq9K_m~}*+9!^4FEQ2mdXACKSp6`d184}?fOAWkzH$1Yf#Ek{z}T~^T2Bfd!M%> zaGs)Mmk8zK@ry(qlm+IP=o9Wek(Kn3R$aKzq+9B8UR_yi-4K|?mM1bf*SP7u7U;zQ)9YGdC-|(6;(UdW!`fzCiM$z4NvR%D?7W^dw9rq)Z z%&(K=w@Y4i!Q_NgV$~ir)w>$(tT&4ui&j1~?SZHqZUm+DmJ7-&Xo41F0X!~=fo^#z z0zN7^z&x+Dz`{PRE~(jPj+qp30HdEo(}={^2{1rW~5%O#P?rm8=xeADkI7 z78>({y}cCRQG~pDlFn9_*&Y`%jEXH!m3Y z{f|sr=&czeG!7hdnq--LyS=v*heqsL@s&WT)PCpJf+6L89UYQBNewibBST@rJ{>&qUdXQ^_PhKdNewxpGPW+L*rP$AgnUq}Tx{P; zaS|ILZb>3$6(qBSN?w}Ms4Jop(Y#sWH#3SOxh5ZagIJ{hOj%(QO}ui{`#)j~4e82u zET4;Lp_Z#NjHXJ)^7ARMiaR2TI{Z!`h91a|(2O=ZdgJ;920+%JpxnzwH|^|f8lTZp z`Emvke{Oe3YYw5{js?DC?3fzdGFx>?!1Sy%6}F9^WAY%o)wii7&IU;1moPCdH_H8h z66=GBI46&d$$lUAXANC}?&m$<&snyIUz5jB`n6tD5SXE+mbcQ4WO7T6epojfKzyZ% z%A=1m z#9aSKqE6LqyF&56ZwC&$jzLi*F* z$GTfvbBU!9&9YhZ4NgvC*WV2cOu4{%gapZOr1r&=+b`F0cJMcEnhJVp@W~rrK7H4L zc}X}k$kOfc&3AMbn$XeJHj}|~dqfQY5W4Ty3dzt@!_b^9NKd~UcVhuprVP;|R0$PM zhjUkXS|OrACSnMh!g{}cmH6f{=X_(Xza(_P;A`QOD1p!0v4-Isu-T6JCHK%4I)N~Vc z0|YWTn9ALU-2zn{78?A895YOdFP>u3HaU?HH%s7rtgwd#R@iONzai+vTt7=kQ<=7~E}ZI>A7?D@K592-pUd>6X^ih;bubzg@7z~=$1f>0s$i6fOB-3Rs3#=ELb?&2 z0vMGiaV;^dnUOK4q_*<7t5>|$-xC>-&BkRX&vd8#-oBsM;e1lPtY7#;KXd2V&Vl#h zFC5IL0JW(0auY7h~kXItd4hp;{-u6@$3Bigi7 z-tcG#22yPa2Fc-UJv-|b!xt8U$g39?N{^q-Ht>f*>)qR))y&Q64EvYtv-LCbTz^M@ zKlZs*Eq#dhwP^IYeEk+?VrmM24_vt6|GDQl~!`Eae*`B@U-f%^*Qt0HWUU$gM&HqF=iH}6Q znHG@_G!}!Cn}V!{V)m}_rD|20l!Nd6cAW5nX4rGHPmNmm?9EI=@|NHAcZ=#DF_;l2 zots;K_y+yu*`tIb;Qy0Q4b9#aB))9n!oMd<<>lXdvlLl|8W(Q`&q)TcX)>J*;WAvP zzAnO4lg28N%Z>*zu`gLdfk|4D)VAgzUlA=?l?29|A*OQhZQ^UkTkvwP%(Ep_T2n*7 z4kC@g!);*B6{Yt&VK0AMFEReBF^&*Dpc+o>25@D)KWf2eYZ`PtFif}95;{^7Gh;cp ziY&$8Z(OdQaf0jQMi2x0%ALKa#pJ`ds_*v*-fwWG!>pOF=Orj;KeU(QQ2pSfD#hXo z>Gjy_7T(07zc*f&n@h8}?Z%h~R^J-zH(~Uj#W7TF(oVMm+M`u^IjlWXXNJDsOmQtz zXGOc!+A6lp012!MgM_VC1h)l*oxF|S%@vUbFsTmj9?!HfZTE(g9v>+az%`Q`c3Ueh zOQE%KJuK79Bb*i_CDH7=(w2hZbTBzY^Id+#j7{*r5W2Q+C1IgIdHh`24zI^faC%FL zKkmFBXdZx_7tj@nN1**ZxcysyH;L1lK_N$a=E+BF3A_3SCd*m8`fInbSV?i8OZhT6 zlyNY9Ny!s|tnnDVaj_?(mbwfR)iW-BFkj2J_ zykjkSQk?-NZ;GepUJG8f?J&5+-`{@5`OmAuZiijM08=YQU(LHn3)5gN{iti9e#E`S zSR@$NgbJ;)Q%6g9{QXtSx*s6WBEtx~1x%!&HB1oMTGl<;9El37eEn2(3T0BHN-^sk2k+6#oRN*2d zx7Dnp!TI7wgSo&98T;Yr5iVWXmUi^D1Ly;Xm<1xs`<}#F>zeV zd5)X5zzMtQ6QI_a2*jr*mk3hZQMhc)*Xx(Hff`XCI7+()$7{L1gD_36$Z~*RL{XCY zzckloZa?~G$&6~_2O**d5D9lZ(p%q^^nAI57fkU=nvgLVGV2Q6~X<6X3s z?nHv*#m?|pX^^C>c)B)2wwH2Rrt`gB_H0Cw5%_;!P^Wp1y%f6WEx0|;uwx&&x4>dr zO~|qSQzHF^R8jkFw0dIpj%^X5B_P?uK*3ECYpv}#SGAN9bIY--Gvr%5P7h9g;^g*` zv5N}sOXlv=#<_6n0UBp?a%G7HAgB-v3I`PBRigT|GD(7lMXFzf*sMroDouvJ?z;dE z^u*WE{VSm)oO`1G`9;H9aq^D8l4OiqjfHM%2bJZhP_dtdJ#t)a9$xHwjF>snL_kDG zbA8bRcxnL8BUV~!9cj7v<`i1=M+^ut{k*nGNdNLzo451 za)h3VMBd>u6I4~-ec7$69QA%#d`(B8P!Be?fXJ(N_EC_1aQ>&qTlZXa0A+WP}@~ZC_E%k(};6=5spOqRqIkrZx3cq5vPK!7ug&!ra!(F3G2F zze=CqiruAR+>F=eLETg$hAoi^A5`UEVe=hQF20WZ5gDDeFYBno$+XmhxW)V6=D4TE zQ(+$tW>S>s3XtW}h(&SN~SIy@s?|=Q#+W1kLnl)fo7Sj2m~Y`BTp? zt6|Y9^NxCWA2n6>$dze%NA5FMiffpB_u-@tgN&Y zMY-93(TsV5-e)VD1GS96wW(toVv3cfumPDD)MVRFU|oQ&|Dix6>!2hs1g`D7TxD4W z<2y_8yeDHhnYWz&Ox*G{HjPQAgW!d)5{U^{{#EjK-TR+N%#yZUU+0~0pV!eCKTQ?v z&ytIC;0*{uM?92O79R&W8?aU{M{ikupfmO?HVLdCuHLs4ejhpr7thH(zcqA;X~r11 z?vI2RQLH8~5b6eUb!ZBi%f{`qsxhdb!fX?rBhSQXRUk_@r>DN8He{mT%)7Ihup2%~ zs#=pTRqbzryfen(_L9h8=vqRU*H4SBUe2A_WfiuPQ-J1YeJ?=_u1wd+nw>g%yH?ce zuQIOd%?Kn?4nlHN^WQvId-o<}P z0UpA*9jd(Z9{~$*+^hm~d9 z+as}9ygFW$q3{fQ{jP83?@I1}-qmin7`lJK<5Fg$gNjU>r^>eR)R#$&spImd=grZ> zhCcPjNMCuhfs`& zR6@r9Jw+nQsn(1g_4n@Q?S0D0fEg=yZW^scMRD2eJ(SP%G5jKqqhG$Ge?f!wJu|T_ zG3Rk_kTejzEt(7zpY@RnIX;WKFXi$Ow%OhMX{SC;C>_fgDKWN3tGsw>hx<(4(s-m~ zxB2`;Gq4tEm4Z`XlN~ ziI)%9mO?ra8zqrVrF}cpaSX@>L_Om%5}c>bL>povIDjUAAFhEom7`{cUk(dQsSSHIUhW^924)4AuQi7i#x=it%ye`S@x|g zV%kA2R4??Ai)Q$p$!(yY}de7h!M5I+;CMJ$9_;lzCs*t?UY=u9G?~_{apVz5W@QC0s%YyHC<^%jq};^5D9a{^&k4q zPf#Pniq!V(-+I|m=}(JCnDT0K4P)IapXA~sskvPQX#cG78|CnVG!21d>+Sj-x zh4}fJLL=|ITT2^l_(M?ct!qrDSQRpFm2oJX(tL?&2i+B=E!oPT&96~ktHEGE%AN87 zh!ZtSP(IGu^n2|28mekD@(o09iq4g9OtC&C^hSi>GRKLM;xSyXAv@Ics(*!}p_EZs zsi}}>h|7)cFxk6NX~7HTx(p2l4_47gG~Xk%-irsI_`&}iIi+R}oM=?pS7(YQlbO+v zp(`VXmvNb^tm7M~*F!sE-*q%9*|natA%tJ4sGYh({Dkwo(eO)A^rxwMz2Di0V4Xc) zkT~l6)E_4qmS6dk_ax_WoRma~VeeVG*`M2mnIMonNcdIoIyZl*NOeCWS_%5%p{^lw zCLxZx`*pZWJM7HxxKR!FV9JEgME`OTC{3c~leR7uc+Mt_v#v3aPZpx{8C|41M59C= z-d2nVyWbb1Rk@bl7n6cTGzX$*pG+x~ZAS5alZN|D!h#@d+=lo_>p{)8upHT?{U+{vd zVTEd{a3k@npo)7=ODIPj%A{iN7RXh>UA4wC9K9^e?{}mm3L?ycLLKk(ZJ3qq4g0!gPFDruMES~6c@fL+Ek5E*xDD6im*OHBaHTxevI1}4q(maQ5j?4x&} zu7ne_+Rl>MGENdDLqU$*j-hSUZ$Y9nVPx2xem_raj0JyXlk_3GY+6q>)F?<9`d&K-6 zfg#VaPd=Q(F`7S`l__n^ZL1ryU8AhrXLqu*Hw%t9j^swn4j=m&kJ?V4-{mV_Xuma~ znD?_?t;yq3eEWhSyc}9OaZ|k|(T=9OMGnQ4`|Y~&7R9J9Dv8omeayJKsak@ixfm|j zUS&VVEdA&f$9d7db2%Uqt;{uwL%U-Oi-)m&hUG05tt>oaoimz)mlzGKEVdqVyLIpk z(ZYN)#cW<5#8a!NcF15PXAL2ci6z))_hGM)o}|Pd#vs;&oGT?B1C!CD6%#J zor}%97!%K~=x9;XEd{2y9S5i9=Y&Dg8Xc>ya?>`G&A%VMbK%NQ;RQT5ikLYX4Fmyn z5$8f5I8rr(BAQ!X|7jpzT^o`77Ca=EvOq1n=PLgJwUs9t?Rmal5<1qiCMjslPh zu37FqXC7ba><=;_({UDM7(G-7A5xlJ0}%wS#2Rm%yj_E6{H&^B0c z=k@P6NELr=;E(>ga!5?4e(P?j4xvJWKv$^_wjH+K0P9$V$#7FGUXV1AAB|u^yWD<4 zSpZ*B9hN59^zy2O>6DALCoa!3e?$SDq`7B1_HuX6q*qaVzZQ?=eWY2zJ9=-@CkOx1 zeHm&U96!xRd0=Fek@B7Fo+*(-fXAJ}LC3#nqx!k5@A=}a0{w$ItV#oWFlX_WPv&)3 zi^Cz*FcN2DhzREB=-3KK!vgeP%P=IDfZ?g6v57q)zT^Txn)4CiHNok+?*=M0}P(Lr(Nb~&3*J`xphufc6+6&t>C7)Qp%V9c)BbzU zWTg)UMG6BWXGBPiGx1$`{;$8Ss~CN(E0&c@>BQ3bLR()#SFrCL#;cDBV4}LDzd94p z;@yV#YW$-vxU~`vAdQD!N5(K=Q{}291OI5CVLJPu>qroYz9$MzIRSdz`(|F&gy7P@ zI5R$}Dr@9(a^}@|pzsf#1;$=e=nuTYsCFbuS(9)E&{J3XJ@vZd^>mOhBgy&YW~$<7 z6~uOiKgMyLKFgr%-RkNuH^3@hb#j$ArP1Xz zu>0O}xhw2(hOMqHwxVPyQ!iC8VqJgUZy1wus_rvJy{Ww?VoTLAm29HIwEsOazQoO^ z3J^0pJ%6x*5gB1p_Y0$N_}~+3ufeY9a5lbHG4??uR((-1gD8`^HMNJ>uVk7~Qwz|B`GY*Qp(DdUpB z9SiaBLjsbYJq~U> zA8v&AyyLhD<=nLV5z9GPZi~ma$|kls-?C z3fZsUdt9Yk-wH>=AJ4p0&vN5(BL;*8cm2>=B$;)I|>8WwQ{+>BQ=18!-XAdlRp7@zjXW1$$|CzPwC*Mj|TJM{R7tqYt;f=)vBi;c~n6?MzupjWt0y6Djx+flmM1}Elq z%e{pLv@u%^OMg)AQX8i8D$NL+ex>}vcjS*Y={!lQVoeqGL&^_30hc*!%upM9NF9&z z$r$!zi+1_eNYxEweLe$pI;ryimG{IT&x3fRr%!*+vb8jWH zSh_!;F^{+N^NG%JR4#Xzht_8?7^Q)pmwV6U6kro(_s2jXc^`RW5~V)l<5 zKW|cb>Z{bvqRqMsTz0x3kGCG(aW~(k+Rj;!(LkVT^b=|`F4XzyPSRT`VQ0 zP$zkRQA26xl z;6ITWP)nyThqKJ5%OZyRt5CmB4aV5HBlVw;M}9<*JHBYD zqpi%zq4ces&7_j23{cqw#21gG0&6C+40aKM@+N{*<^_&Qu|ICpHqQ=JZSHFHwn#h( zmaJXh9DGG_cyd;6wVcnFGi5&Yuu&PK4zY?iyS#eP zPL4pMZ5z-ySAczMI5obb5Yy}i938)^dc(b&%aXVnVaUJtAkf& z0S@P1UmZ=xIOSxfAN;Jp4+D(t3y}8sPAb$fi%QgJWF@X=K0x@mELcCA3x4TSyeGk> zu3n*N6ai01)0~pF$g99eyx9nOTmm%>BYP`g#u=Lz9FSSoX{D&~vR|S@Mj!aco$)E= z<&Uob?30)jqGBoTdH#kgmh5w?*orq&OTS(?19HmIboMV2S=HfROyKu$w*08|;Z`Zg z7^z*TI+-g4BAd!ld(;$yt>sQ@{FT(o)OVyYayQua0}$Y;LX9c$mhQrkuqExi6V*FE z-R&l8d~GT)QLva{Hre7VbTpPF^0U1&sfCbqPHh^V?D*p=c}v%3;Hd8fJW{ubnK;)u#HcU$>m8!R4kbcp-H6i68?i+|JYQMuQ6H%f*Hdr~WQ!T$MGEl8PnQ`pJa0cz{bs}R8fp-Y47#RkB4M#Q9ZpE@RrEFp z$chaC25^w@g7+`4VmlF?cd0B=Z8Dazrg;hBe+Ttckt=vnq2sBo`d+3D20hvCB)0XAl zgGMJ4LQ4H&&2k#t$}p4xF2~C|qBpFJBO(pp{VMJ3k3|{csC<4_>)drwmBPxl{l#7< zxS>|i;TfZ#j3&kDuG%nyCi_d%P7O40%=`qg1P&|U4V@s>_9vwcUoxh&$-sDhCQAHE z1>Re{hEn&6&dL*wZV!aKi2y1kfRlNO^-wg*B`ECQn$L`-Hc!N4ZSsOvMa@!OMXW;x zxC~ldw>-fNl}%~64xmcQ5L9V7M7^W1Yl=1^e*VL|a62RfA%{-~%joAqk*el_*fFX7 z%-Zd8YI$I`JJY+&MZ$6wi+s5`a7=9|_iMiE^Mmv`ph1h|@&3*JxsL!UO6lpI97CAkz$o< zms?VmtAdr|e_^kwr8lI;)R;J?BxEs%oZGs7`}fk*LxP|Ui$HRI4w#=~D?G~dc1_Dg zY>00v3egPbeapHV=7p`i1?+=1oWZ0jsPm6z)WOT!lbs^bwa91TWYH9h8^PpG)&<7B z49*P>kn4e%vmT}v`K`fK0xsM3Um9)r4|J`ACDFQG$VmTGwwuAz4ooDFu$)f#V;>7u z1HoSYGxh9*z>4>N2@)|YH_^J$4BEO2Dx`mLnTtY-%J$jPuqaj$6tY}G#}-t zgkR^Br&#Mnv%1%8SX|v!s@gEe@E1vR-;G^taZVKf5MWdn9)8W@ciX7hSn$n6nlQpS4%gOL>E=_mg`qv zlM7(1Iw$5EkGh0v8pg;fT5N~@{_)70sf`ST4H*mi40;}2`qd#Z$o;Y`lSSv@$hS%7 z`@I5!;3y1&mx&COsEgLmEw74ev}RZaUc)MIb`mLWUGQQhC^`}ESQ@vp5!%5y^bI8H zQP#&E#8{Tq>jg6qaz6E(t33$}gM>yzT;oGQ#M=b(19J7Mnfen@*? z@(UTA#+~3#-f(HcW+pnxnT|Dbut14qC=%50&rqpIh5E~Cca3)Ufq9ZDM4IUAZ4}2x zO|8Lo71gmS2v+~gEoZZ5kpff2Cq5u_b+s!K=$6eOt2X;+SM*1kq$m2m7bKiT3=Q`B zJ@2K6`!)`eBoUCe?^Uh8z6A}zhTyNU6y0F;hb_<)wSObRKL#;E6*praUVPcq?IqY4 zV`%xXyUMIn_O^yOMpCF++#RQFyP;C>S^MUP3zx z=$s*gPkv>fo+vCxR75;uVlf(Tdq&LJtlApUtW^`{j4ym#u=e80bHK@s@$4|{A#sq z?Vx{*s({7u-Y=Yi@S#%T@GTS^CNfG$OAcA|t#3e>Ghb1Htz`HsJ}LDr*ATOkFpX=i z95b&VoLb_BP`^3JteRqYP!gFM%2Zu;(+gqw%C2}wP+&}$khJ6WES?-}7oEs)sp06# z8ChuH8n*8K!Dme_U_>wW_oL8-=>)DJ(P^ijXg;8TejxQzwd%%psR45f2Hk*Q2cfZC zQBQv?Q5pr7Ddc_K?OkLPRbjvXf_ImISR`GMDxagz-vWz(1qcjKes#jMh=^z0i05kv z0_AQZnQV_ z7Bw=;f6Ws2<=3Sj1qT*A?z1V)*7haM7cv)3r7SrzK9(l-1mRN-R*=hDacLiE!%rq! zGDIgh8P9#nXbSrVf6^5pwjAd5C28`PV>I446ZJ?}?F;pU82pYxwOa2S1;ZsLSar$G zb%8)8N;K}tX8z%8BQ*eDC}EkT|Lh|RZHNZbIKdH_rv9mQ zh&EHXe&>m`&i;8u$>4RKon98&f5iN9qaJ5XX=L`>{fK@Scn?X0q;V;qNn+zphTnOlj&V6U&q;bk#7f9J3U$apWK+sJ%>|hd zogYt~Oafz^Fim2%K=Dmiv({r6=0&99Tr!b>X3yVyMNraO$6-Fd1s0erMQ$LAi-bAg z!@9a@Kv%r3KK5t*u>D zhLJ$Lpl9<{B&J@v4VH{XYO&j5vT(G4XBnQR3Y*@9p!0Ju3ucDD3=$i+_p3>FP8>P0 zVI);)kZLNiv?>M`SFPo^jj|KWb;GuN2fFYIzg;g?@uvf99t7hE0w!m4Hg$ogdoxEt zI`XOs(c8Bi?7riDR5)%dDuP)TYTTZt_Xh;raKn){3YCg>_>sTh8BKPH~{X=?eN ze6>|b?7{W4nefA7R>iaHZ+qdwMW#OvhBI+9%6LO)Ki0EVBg4vS{F9n*6Rz$-?EpHe zZy;yBFj62{Qs04$Q~O)-P?~6{V&Qh8WSpa#`LopFIAH3+yrU$XnGIsorE|@ybu~>kEB$VNSbj;+IodtKo=fpP8^zC zX$$>5ZVc9)wV}oo>`WXh2#J{5GFPnv7He7KEo7fI58IUn|EM8t zbRNADf^KFEF|eKZ5{*H*-i1TkiqY3uy*nODjR$NrdRRjl6zo!$Kb(tv7C!M{VEuN= z{#umm@t0#4DE@S;@Cch5nS}jx4y*9yy^E!=uOVKAHL|90ZoLC^jcMz(@?s#)bUUHs zqDYp)HxobmG6mPG+Yayf-JkSw)tNO|Zz2Q5_Jf3j8Y)UI0q7IJt0ffqpBnn(@L)9X z`S|>)FSBpUrGh~~ip1A;=`l1*XdKgYBNh-LZ)*4{d((Cw20harZkipll_ne*US6K< zo6t3#k-4B&@0r|{tA|?$3OqqE@#RWlt^_I2>b3S7=*WnSAWaN0gxy+?`@8GqaNj@M z$ZPJxj3V7@TUAdznJRG0D^RDLikzXgC6oE!Jdx~h5}rTA*8SGA9rhcJLEg0Tqj0Oz z9PrIrT|hA$p@X?Bd(4C!@A6{rWXst-5zT;BAId2UV)UorKTgcD{vDh7GrV=5`B-YS zY5&*Fp@x#a`jys$u#Ohsjrjd1yL6{vgdjAtrHP0uaB7BBd4tlYaHvT!P~sDmu%dLi<|?ZBSYxEhzJ0v% z^~oq`Q&gavTkG#){AiF=|8ETd?m;N7cV+!Ebt+L0cj&=?eJZt9VzCT77kyD2}yEKs-J6 z3<}5Oe78nOnN1i;PM1mnEM2KktmhCwlgo!&Hpers^tUwINfq z*T=KmCq3ct#L}@pljo?V?1)6HOIR@yhs$+Rxlhl?R^1;A?)C@B4QT`9t6t5{za3&> zDqtD%D9u3>fp|i7Evz`h&yKt#jDP~v7iBqAtaHRO z5CSxS0Q7qN6I2%Q0(HEfyexR{Ct&J_ziMbDJrW_MF&eMh$OUoBXAkUdSoR8VsJR>~ zki^rkUl0KQUhxt`sB-H<{-O?7k7DE%`2LijmFqR1O>Zq~5TT@exiJWPge=7V%+G@l zGK}*+^ufLM`{IN9Yrg$2)uphEcq*Z!7w-QrjDF}pqVhQO0gN}~S<$+7yYFsr!YU>@ zlf065&&o8W(n>IDWuIFhQ^z)?p!`aGi-(gp>l@V^IfpdrIjb7nfJ~HlwD@XO`7w)r zR#`As1jdw0#6S%KHKfQm(y;{ zlXb;~)RONwgr}Svj1f+Pt{x zc$bM4iGXW#54r0$^78@kri%!-Z4q3Y@1_Hlt>T6$9VVJJCk|7cE8Tf z%rtMCD^V=AjJW29S~EK8SYR3+E1G2&T9W^KaNxY9wXM&WYqKpswU}#>+e#3tK)|it zXjMtTS5ZJtLl{c12+VXA@VMh;KjxQrRO?P{J?eLs{LR73hSK{LkYkW#?e;{9Sk+UX zn+Vw!f{Vp(hM*DY(P09HEK$*DGd*)&HhD2LFaiK@lVb*NQcwn-;;=lC@4=EM62#b{ zTTMEvVT*j!MhANsH$l)YMZpT{UWhjHmtKMZQ=WmWpptHV$vNL|JefmbF^!iHnHcS) zjW@m>+pheZIcSGp0TrxhNWh-CAAT|83)+E5Iz(nz*{?YYS-j?c8GG-7ZWiR>3KhM& zvaliz<~QiYc#v?^yU4#hRxLbYP=3U){$$HN)9Layv#%$O)AbzmX0VtyAVMHmHmV(j zGM8=5ra)z(_pQaCJPI5W>8ZuN5>;p2PBSW30*-1l!+5JPZ&?{_AMtf_Ik?8f5Z#L?VoFofjx01}6>R-9!ocgswdNYrYuFFPZEK zZFOVak12~IAMJQvcMn}Uj>awb3mL;k~oenw5|96;dL!!O^s0`(- zr`UrX<$%I-fb~5%b>-uNdvYEk1#NSoV!Z^lq0}{b{z-;`S&iT%hPsbjRd|>N3D@(u z+&A~`!a%!R-zOk{MfP1tOCc830*61`;ssTxQPLNp9;!=LBqM&`{h<%B1)~cO@4`0S z3;wrB9ISai?RAp$Ms;!Q^-@_o^@m(=Kt;SjyOU+@Pmb*7P}0`7<2t;vRpq*bF0eI4MeK_V8YllgU_I0ddSjDGSeL)tl;* zq=z)Tuf)Sq3rGylU(zM-NT{0;mrSV8#T(L&>*u=~y1#)1Hq(1WI@p-0p@+h8w`YI* zl)h3=s8A$YaC=D|^Ry}S^WE@J5Gnc1wsARLMF@WwwtqfTsHhC72FrVYL)>WoRj`E= zAi+G8e`O_ql>weXQPSeyoYlhVP4{3svw{4Esj}xRHV>YppYS`dVuv&nljJ-X2!{#l zt8;W=?S$Q=)x>@-{=6NJ*|bv&%jawfyLJVu94sN+GcJK9hE1={id2>2Z+`e1m%g`cKf_#qim{B2boqY;`;5)zlkp>~KsQ|fx6lzo0YNhPeqVQ^ zg$+e1VtNJYCPdGhc~ULW>@8)QS!g|ViPS69Wl^5Ji(r{16OdQk>9%w;RW(>A<0ft> zUk0{ysz}tF1fgVyISnzDim3~ziFY^2YX#*mcUitZ5lGqn zX-UG>T3w}6*(QjdL<#*HW3uGr8tSf#&3$klAHj3M7ME)9j$$dwvug#36TYK!K)PZm z%pb)@-_QOy&RiUM5&!>aI?J#qqqPeU-6BZ0lyrkg2}&c9Lw7dk=`7ya&z&-tNeGjN9+(4=3doPUkB? zi#2wiD|#b7c&}0ovS(EAj)#VG(IGS)7rLt#7Lma={opMLpRqV4A5&DwTn9{@poV~L7VseDx!o=6e6G#KXdI)k6tye@Vm_~2s#$tPw% z;D@X#V<_^93BgjK%1oYS<0`e(S1_KP@hey2eUCNH;d@vUb$6@$?`+ zTdpC!+8Vl+MqZ#CN%&EL*HV%^IOtWn{lcDKcBttp44);+B;7m7YD`^0XyhWUbd=&Qp$ZDhn}=-)9RgIsaT6 ztf}&2iB0?fam?=8Rzh0u0Ye6c6w=%1CG^zaX5%vu!>3L%*(`RPcz?2(LUTc?rUChX6wbP@w|;h4K@Ps?hm z+RqI#mh=V|L+pffFz9r~c z#7lEDzP+n?oKYt+fWUxFqpqRMPvcIJsOw35&UD~E8V!?*uxxbo;^3B!FWdQ0jNh#1 zHL4_rVAX)?(-0%;hJ>B*ZXgl2l7B=;*{&ZZ+OE*~@@1-RkJFC*4HATyU7vl&I0K5h z?kmfC)}}Ni;?lowLC!@o2&Gd}c=aGNJn@IPB1PFlkK}r;)5x%(za6RaYv*blPC{C{ z!&d=w6h3I_yzOvJ@&2CM!*H;VMSVV2HS_Sx2g}id6GtZ5@YZIH& zR_>+|^lR@TV~ZgpC+Wds*lycxsXTued@*9Pi3b49{~xZHF~}b?`V~EP%g{ApcG8jk z8RL>gh~tX3ZT&rC=J#yJ2LG(x7-9b)x9@>%H&ckP>(`(j?d<|Ep^s6u4;$z|JLK|% zb)aL@ISmJ*=0}3gI~$Lk(|_5Sc>Lnxy>1|+hjI@1$g@#2j5H-WEZo?7rf};*<>v&H zMCD)qV}7uHQ$_&-#=Jp6l^lLhV)O{O)HklR>$<%R(_e~H&7f`@=%EidTl9uy*V}QfEK|_D_5u75`^h}QOUd`h z^sM3=3v>=l8xrBxv?0+4@`_xGE5EpV#(0*?3reC8VmCOd_Q!6 z$wd9dw)k~ispFnYypE;CWHxDVNYJa*Mag}${nz^YKGxY*VJB}e@Y7f z&0{cahvpl;Z|Fn{-ZMKD1+Lz~LHJ$~qm5vuG#Y~69h-rW>$tU46*O4vDK@AP0jJlL zg!}%U(p-OLmOM^4PFj8RctUij-$03Nlq}0%ME;DeY79qoGMy%RJ8|hlH|^sEay?Xwd!|&JNDRx+AVAH zlLOI*@ixmp2$JJ{QlEg2LdDNFU*Q0 zO221q^gblYCI-ZS{slei7u=toU}L$fu%jwU-#%A&B8hRs#;*bM6SNMgq*e)^>g_t_ zi&h3R0OQ6Oq9K1QOm|mPa*pUSUJX(wjGl7Fgi>vekm4p)d{2~Jy}UV0kOw37ku`iO zwa`FM90c(Aa4Fh`r}^lMRB6iJNx;V|_j$gCapXoGlv2vwEakvCCrr6fTo{>U?NaMI zWxD46@~T(rY)U;8Q5+k)A4ki-7YFuaM9?5FgiW`hK5}#8zfx0PAOfb}07MLQ2=eQC z7NUhOzSanv>@Is7$D3)Wvzx`wOEALZDKrQ|B9bPOsX^fl7>XYSj8_s{UNC^dhg}ZG zd7Tcc6IH)&if4qY5M{HS3}Mm$U?rdL?)eFTP;&fcaGohJ}l`%i-53t{+z?Xrqup@0{~$EqwbBRSWLsDKF|`- zCzm`^whJB;-IjX5DpmER_ut?mUpLT|;%MN=F~+WIYc$o6-V6RNe%t_EzoT!?BmW88nr^QoJFE*O_&+_ug`N-%cxPJLUIikGy~Vx-23{OE!6bUrG|#5&TNhL z-V}>^r{V+2lH6kCR?OCO1cAcyU{E2FxP={nHh#Ul;>*Lmt8%gh@YVLNM8Us&@;b35 zc$Xj6Yt@pIi6~vneZ_??YN{=()AA-w=*29qasZS1@{^%arXII>`9ainu#q^3<)~S2zNn!O7NrKgP}B-@ySC7`<}q zoqW(<@C&9lO8`s7sPrP;nwZDgs1ehApiRhhLwI>XsHZeMk$Eb$o(;5tbjS=DP-}KV z21o7d_gFBwds)DAxLRMC4lP2A7$jez6E#zurXi~OKLwo^m>Env(qhNHPaNaFfhV@I zo{%~Z$4cqw{xwK3pS^1=E^hFlXTwwQ4v1U}2(EhDayQ^Br!LH=(>&gz4%vQH2ofggsz;;^+#=B(dzu?P`%iJ3Jsc;&TX|40URsL zL8KtCm<~8WmEM@Hwkbf0%~IlaA8RugIhqrbRx*}5u=0bTiDRc7Af4yvG_7Uc8>a%< z(m%EXI#KfMo|`l1D|}kKNrRU6K%-|QYX2;$XF{Dq|HWPJ#I!i1QYcbnrWWb6tBvJM zpX-Ukx!I%>DJ@gyqDx^x)_zW;Brj`ENJ0u2`u|XHekQHb6+VgcQJNH}K|ICbNdC>G?AZSxUEhCQP*-RzS7h0W|AV}O{b4ejK-u=V z^vTHIwmn9Kk7pT)z!O>&>GOL^)LPIl0S$#Y0)&6Do(bjcii1H15` zlbtb?S2G3v_}CM21Qv^yf7rJ?xnrX5^knilwztlq$t;5pnWDmp2b`&QaDI3Y+M<*J zSj~^CDApoG6kF0*wQcg&I|_AF+uK4h3XCE1tnME?9?az4%!)4cywHgeEh-_-5ZY-$qQ zaYy~CQqEk1N1pSQ@V+hWc6_d~bNLO!b(9_QNqA8J0P9LD$Vgq-65gMC7v{sdB*d8MR=kqT- z(SL~K#rmj7kHb+&_DqogKrr=Q_zfoA@gIauz6FKG_0;W-00W9nn4aBso+~EN3MjzoG5=m z6{fSfS_!&c?aCN7oB2v;`pJM;M{(4W2^YaG`V}DoQIhOeE zLlYqRJEh!zbWq7xsO!F81Xs*QG-aZXsIemVE{D@(qoLgsqOE9 zstB7llJaDvJ(`9VwTl!-{d@A6q|&MPAO39`#nqCx#5ttV(I}IWj#`a5ow)EtrOoY> ztYbG7ksH^s7`U*zG2Wxb=iLRi&TWJME7wM7eI>2KT3b?9p3vwLQ3bQjw;JxXSF(|o zfUc)yiQp8DbD*BZNlzp(r{!W=t$)glP1u!B7&;NeN`2D25jL*mYr@~lr zMr7C^atC#uAUpM9pFOv#;UL4>{^1+OQp0)OQ<~brv9P!m$Oi70aeZw%SLq(?yjfGM z)>QRDQ<+~JZ_eyh%0R=V4Zpoq)Pr6`f)q zFKRa5w;+?~H{-`!agRW%IyXIW*~y084xKC3F&@;8&h8&3ay*%-dFSt#WqvO?U`^5& z@b-3{m2?ydv8qNQDF+Y;GCOr&s*XrOyq2Q-|I=4dgEi%MW#9bT6#7WvljddIO#Z_5 zFoD^P75Ylk2*+(hOQR_uPtViuqp(3D__ z25cB^dM+ood*>tl=u|!fN_!Q6sPg>*-@8yua(_FUWGyeZU(TSy;ce=q(ZCXgu%vmJ zQjp0ar>a;W?8VQ=NHHq9vSdN00qj$0#>`4q2O(mFUb(a0i}=kpq&R93I)%w5u2I}R zv6Nb=6N@oSOwAI{fxbJN)uuK5apRp9cp!<_uja{*at5D3q{YiXhw?z--5nKAI|tsS z{-(lV*1{Bd-|ACxmQoHfEUN`VrR?SA5|kDI%6;T_a2c7!=l+`!(Xf)6K6KV@tF-v( z0f|>F{ApZmmSN((t=E(dNxOzVXu0?RjB6E6)A3n{t3NLwnrz|S^}kmc?{BR9?y)`@ zqmP6>^_&ypmkicXusf|JRFQ1=7+vPdp?1Ji3>SJiz7Yn(Mr0o5tb4+nq}j51CxAhV zqeJ@K(7r!z>(Mby+!ecs-YB~4+^fDWc`=r?jM!M?mt%d)yXKpF_uYRhDBJVh?`ITv zKmJvrKC}DOj}0sc004!`C|)k zf<7M)ex*C&0Wi}nqj6P)XTV~wh8zXy-b9|p7p?s>yR`-$98A3R77?Z=d$kN2+LK)< z`Xy7uPPl8{8a1r4D&!6}ZP>0-1vZo+?tkn#VN@Bra&q=RgO4TT9B=K?n%+Dm(qS}5 zzwHP!VxPcoYxtTjyetw`#bP$EUmccq^$hW&Z=%5}{-lgbPA%PD;1pe~IF zJsJE*fW-MSOd9C6A>B3eyAN?% zt@B%os#fI;h%t%&AoaT*k1LlxRRV5YeLjd8N$UA46>&s~u3&R0(Rde`p}65z!adLB zjjyDsEpycB3nOkt{3{HIhac!-5Da}ba7+DMg#@YQ8Bs&N(w^ai9H!rSQk}7=`vTf% zBEM%oBEnDqtt2s&^>?cJqO>V;;4p!l8iweftDag(k3jor&dihUPYwCWVTWtD^X#3H z-s{?iRwJE1+z)A5s629zP+X+nZsb79WgrO4!3FFDXzz|Fqohk}07W}l?=|pwKV`Hz zbZSOT05qHC4;I64Azt#wK1D(zN-x)n4r1sKdHk~v4vh9u)OgSsEQBiRY{g zK6|^0sKc(&KE|bGf$+PcwI5^+-=eFxY@C?ov#*WIK8}B%{g(g+;j(_T-L^VYn=$!> zzwSHtzZpNNSpl;iG%RNrXrU{+C?hv#9cPFsQ3Y;B977%dWmDt*vMS4y__K4Ymr>%d z;n&!S3QiW`&T$P9*;lLSAD4!8A~!z{-~V2F{wqW10;|#>tK}{VY>fV6yc7BND&Syc zz8`92_&7>i*|<%BK+HVk zyM7mm#3&yhiNL46a*2K9o|kTJlqt*=+juuv61r{A%*MJ)ZJ1So((c2MwKagZ3sw^# zz+mD>mvI&Dh-7BZf2Jk13KEfEArjr$^yWD-)02m!Yp>t~U^{1Bz=hJE^>6d!{}2VE z6SkS!xcaC^-@GJVP(8|TcJZMa=K)IO#Gc5>)h zWfhqWgSmECVNrHFIhEY+8^1xh?!AI14}RiMmRe3*y{DSedExvc0zK6mb?JJ{A%lSP z5jZCVMg1qLl1*Nc9>Jx#6!t+-5_MwV#wYSOrz79B!|@^ivu+~**cof0Q2D5VAie7& zL5n7Py`yJZ`c%y9a1U5&sZF8ptyq9L$|WaQPNlBJcVMc#`SVFH(>bNBT~oV0pMTOu zkMUPU6^ZyWZk*hg)bPXkAQkl8(03V7C)6A@1b&Wg6mGa|qL+F+b!}8QZG8_q>fBjH zMMHSv&6lmf6o%x6Q9G}OC^m}h+lgS2Q@ujeksoaXqAT7CnvC?rdQ7-`^7de zvV*;D1|q@490O#iAeY}DJ&h2MMlgiMS}e7QlVJiQN|xl}_E1DJOR`B7HLV#Ck26yh zGqTeL^*>b!2hB%|=pQ+U(Z_Ama#hT)Q+^>=j*7$^pf>Ey&Ang%Ny{D-Pk)SFc_?ji zVWvL0+NwRGXS){T+WBn(>Wt)Ohi5y#=lVBQdSEaC_pzaY8f9sHTnTx1?07!kJh#HB zA18Cz%Yzct7l6d$S^T`kY!KggE{08xi=%?$jRe*i#Z2B(O;yS++`3nsJp5<%u#vI~ z12tR*h6yPlq5J!at#8pl^JR6>j#TZxZ+~|yD@9Ett=G$i3 z?KZY-S)z_Wc37P>@)R{PBj51_MMzJMFJ(Wxd7kVkp|+!`ckaOzlSGLZ*;{;1Sp<{? zns+E!CO`Ag-XI&N!5Y?pUN8B@`wjALY%*I9@R;B0`1QVEID3gR+YSA)_C$Mbzr!#( zzeky3iwmABjLtw010!TbyG7Z+!@s)b;PtdTpnabBNIsA2l-OhMCNBQD-VBsYb!j>p z@X_CYi8l#;_gqY*Dd@kko1edfe1@{y2ess>TdLrr!N&d(W*B8zzJ$yaV-j*opUINb zw>g@x*S{~&Ey;`XeFR{m{O0IzKMX~8r?<0@tf%_*hl$9~N`8sXM5OyEq z;2_#^PHCz1jbB9U1FX}Sk3+ZTQh!M?EF+c;hn$Q3!1Dfx4K~j8J1kwb6YHW^%=A}a zwC&N)e8J-tWs(_=)Nk_C&r!Gi<>LC)?SpjO7a3>`h3yw zrIa;hvi!>WpS-W}+L$q(BxZN+)(*ijAqQ6~G!rNa^Ct4x0u^A-cRv%|D~X8u{9V7K zBpwtQ!)0`^&X4QFz1_aG74)d(y92P~P5L#Pb45as-5(ve-B#B!;B2Z&yI&9~`1D69oNL=?|5V=%6gWlT zeMv#7VvLc7l@#0iPdsZ7eX~#oAyK{YcV%FzX{;KZJ`?ekE5NowMajB>h4q#J`1oVF zz_slQWZK4{sgxUkuoHGI6&F+%TA+uaG8V$Pxd&KDsrS;nB&L2$Ol>L;Hd7rszM z3Y^USUp))V*m=89<3dq#6%}IW+zeBkKYjLhrQZ2=R?k>LC4H?UG8VsvzKa29|5bg- z=#!WoKD{%EReFY2kxN=OioPF;J=oy|(rv14naq)&_jcSG^@9w12fN>IOAMNe8_A?A9wVZG`YKp9<#~Q zNcumw2(&;ywgR>o;a}Q$9WiO?qiJ`;&pYLDQm_X+iihMfgf>RZKy?;Sk>jzpwVdNy zFA3dzmxBv-8?wujV%7o6+SIRDh)$RD>wY%bI_t5HnZ?K1efRxN)W1bX_aJZe0+?@x z3%UVc4<&&p56FXAD5?6@aU38h8d>#uY@_OEl++TH(M{)EiTFOz)7LpMS-$C~$SMf! zUAw@O7-T2;G>W;rv3!`Zp|Mi+xPLflAmo=4U+sVeNIx-0Msr*s|Ly8-4Py8H8fI97 zz18nA-S*ji_nMIrj$TpPSF^u6jbI698E#XxfE6l={!r__D@eS+u7|FjsIvrG+G4nO zwHd#G#?jiXUiRmK!@BQPJ`1-)xLux*quvwf#Ma3oy9NyxeB_PgK%Bbe7G(>CdHD-2 zcLNMD7Xz<_J_HyWY%zJ$xf+{VO*}2fxBcYX<5EXR_0uvUIyD~+#vG;k(TWuC@AhCo z2W%tF zN-c0{emvaiflp(|S5@}r+pe<4?)5h;!=#;Y+?e_&u+{1US!iu!S>JcX7{iJ&lpc={ zA-co^%whj}9fh>1B!@m_dFxp2^n@ymKU0}z!OTcx`Q8@g4HOCAQgHXm5q06 z;~$@A&_fX>&s3&Jhf@g6jP0f~G$DLTtiM@0*kr5pU1DJ5U43T{Q>?1>em$W)+EbCT zp}V?meZxJ4@>lhhB;~OpIaTV^Bjp8A#dgoKN#EDxIa|&jU4Jbg?cop^n2ijHQJlAa z5OR&cK~K?9BL0(>)aKK$_NWgrc|4=j{fb_Rd6@A#bX)J6r&a)^!>2oS!yIN9bF3=H zlp;k)fvIH4nz6771@@@sRU`bZz0;I?X3GD#B)?3rlPI zYhN+aUZp(fBv;oVY>MBebW{HjfSlx6+lp-sZO7WvVd$YDn9z6 z0#PzDx@j0H86rxA*3-dJwk85jg5w2)XZAUZ%Cnb&(&mc5&&-t}^k+xtA+A}2=5R2F zu|WutcpM`ptui4589)CTs6Ecvz_j3TaQPS1p%H83B>-GOCs%&nOZ`a90R$PG@=ZV; zAXpxUIDHThyitBZU?n>hHjeAsoUd-qqBP6qOuNJAtD`T1Sthz`9g}X1-qWuWwA*3= z5!e==KcNXz?rR^f) zBm+6g2InHn@C)b^#M++p+B+g?NNiGQ;Ys)N^Gm{s7Ej;a)@_D`KYsE+B}utQ5AbT# z?U$)*^TCSp=`p{0ICt?}R60ii(nN&}G)#Nc&p(4py<<%pqK@LxJ5r>5K0(A-PGRw8 z4gf>JQCMS8VFfb`asnO3Lpiw&vY+xwmMM8E_!6dVQx9-yxd^pCC+S#sV3zq1bJk<@ zcznCYZV(#`W$AZp?UnXg-94>6y{Z=-#mvuozRAs_9a?+x0V0c2DCeZu4mY(IQk@fSr#hX| zx);2^2j_y`4%*aPsf!?FmXV6O5(&;Z6y|PpzV=vy`N6(F0R$agH5Naz0Hd}shD^Vk zfnkh?*o2ZlftxJ@3e-axWp5q467}UQ0^eoWb_ta!&Jqns4L&;_LMNZn)7Bz?%@WJ8 z_%OP9IpV3RwauKHrBU%tX&jxO2RtSvwP-+~Hb&qi2-8B5!Vo3004p|OK(WD-?CiQ` zL3<7F*I526m&+eP1GZitFeMVT95R=~TTRK&jv)HQ=*5VRsUK5Lpn)tbwLupJDB@tE_Hm)*8(cTk%jXBD>iz z0xoq&8vTPC3peK}bV(VLBcpsPwMqD~AMRbYq5W#L>=fSRKwLz{2qLPet{xbJa1_|f zV`IkI8^Sf#P2=rjm}~Y{Y)C;(DV%j|MZ`8MezAHb2jAu1}WJh7J;BzP`PZs%FdyXyAz2~QeVTe;X{Bdf#0 zC3~%J$PE9e)Gc7dGd)+U#aVU44PB7^M3>~NJ01#>R=jE9zfvNMk?h{)~)wJVQTu_MER*s?};#X=qPYT5J@oE`(M zMzw}kWSiE?rENRQWq#_r;Ncg5`a=p6joQCnJrjpyFnjRzsCqj?~pP9c2lu~B&+0q)$g+0ne$Z-W$e1;*+4f8K*ygH$@IeMN8+ z?2gxaK};G&TTYSNeVi!-#2x=VfRMDaGRFqFbxYAKUyb_Uu)9r#2Vu`H2dg`L+XNbf zJ|@3^4DlH|Z%nz>TC8Jp_3QEwz-^lJnTy@&icclc#ZWi7K%f=Y2esv?@n>T_d(bzh z5y@&@N@qU1f+RJ@!5y2i)UC2p%=9ORyeeLE+6w8zu5)dO>;2#B`|J-_htG%+GRLeP zTI5MwR7bHbPf@~?6xhBSNj>-A$e;_#6SGVc9~dkwIKQwtH-sidf`xfF5R8$I=^-l= zL5j&40d-83W~uEnL*0Kk3|0RYXFn$o1+O)v6Ntf-8Jnbbn$Y1K@D>X#b(B==yeGKa zO7-fDss)N;X`khB3O^|6ekneFN02&r{ST${b~dyxzA)Lv2pTgFV~q9BKCeVeU$1ZL z{>X?)2p2*rNA;Pz?Gs}&ue*zqR&=mi;EF6`3_N9bhJLzcxV}ysue<4cRY(eZ4970S z)HfjdR?E#VHa}4IVDgnfm1AHfx4kZ#xpo~=>!JLqAAU^95vsA4t9t&{7y4BfhbfrY zoY{`KDyb$8%=lCoF>8Yp>r~UuoI%L<@$?U%+8_ta*oCkg5XYeK-A~qPqO1$H4eHQm zQp!xD@CWUexrdWsodkId6S%~Knb)<=pM)BiV}WDFt_nm&f|#l-eP*AwX?6^FMl<%M z>M!O5M8C0MJUiqD2jPxKs7iIw+_dw;QAHJH_WVN6PF`bB-<#pPVIw1WI*8>D&O{3J zuetIgKH7Qr%GLQwHmJh{WlxgPD z>)HL`;Q-*1ecQ2Wh!;W!L1rkp0Ye!C!o+(ogq%#@BEEl;iY#mu=zRy$(t8X21g9_0 zPcAkj8Y_8I3M5rzp@(zg0v-_T;!o}CS-Kh@P2wunqbS@D{5)twGut)0B&=U z7w^`y+5=bKd$YsOO(!?NHF$$T682fLr>Xjh=cu%knq?JpU%KA6T`S5H zwR6wRDIM$@7tx;inNuaa0cs?+i%Y>FDyEost0d6`x32NZeJC^nHQ1<^e_nb z?aCDv(Q2b^_w=etIdWFqk3itpo1YbqpNxWJRn#NBIxTiVA)3c*STVjfh6*$Yk59-5 zTJ6>(62NBZ`^E}5cSw?75;Mn0w+(mrX_Pn&oES~KOOiEtV*)bP_6Xj;y5*x=yAvP0 zIA8#FZXw9VSpFbVy`)^#V%PKhXE;dSzK1*npD#I%4S75O#>AxEvV*ObCyK^tp0ck9 z@yM|j#KlVkhbbZ|*dmYre#>=ZfAlQdUR?|=xi*F$v@dv_sXFJh6J!0U>Oi)n{ii~y zE;+y>r|;rohL3n1or<=Rh0lPo2s572t7_tNRb!vJOu^8^wP|AK+ z>?WRnI^nhDA3!xhS_hHCUC6`Jzq)5fjiJErnRcIBpTJz4GXz4ZX@DJtwYn7--0Kc( zdPSvb6qL-miJ~?UN)+|E331J|GR4)5ZqUi&^^#4SCod@W#f&{4`0i7$36wiitJ-pM z2u*%deyC%Z2l~VgwG?={s*ZO+8v>UuwZMSI>zX^moH;+H-b{a;rJ;(h{0&orHR-zh z`KtGUme%S*9nyk|{s!cT|A$@-0pXfaoaU}`V@?x9Ow?k%t|P)r_sSIMEY-gf9L#{2 zz~yl9Zw2r8{Z?D|;nC+59x*CG8&afgH}P{2=7)o;lxaWq93MN-VWdOr0HvAtSNN0# z*j5gwXd~0_ccX~Lx}s$>5e#r*V*R*>ch`q|@=&!s~W`jk24QUzTIc$RhSk+0Kr3tFZOOlYWH%nKEVw}o= z^`xDhidhwzkuxsjdqaWb@x~9H-`f}7A=`;ZZ+UozDbySCGrpH`$khKzhE}(~Z@~=M z@nBmb{!0x3b(uc$ZtvbzBFWsmq#`2`qo?&2FUnyqggtW2a6glu&CJ${f7m3dN!oob@)(z5ZZ!O zD3AuS!bAb^fKe{Aur-hX8E^+dZafC-c5&UPSz?9Uao0-n8w*6ZWLVOSokGjVzJR$t zL?(60L)id&Q)gys);TkyXt~(R<#t1Css5xqD%|%6{hpKoB19}fdghQlwH(g6fa_`$ zyYNz}kebsP(N3s5Z|AKS3fGr){He2=z%F6X1AF~3>8;>A}Sxi%E_3iJXc#+U^d{E&bv6^*iwj8IDY=Z7M|R1%NW ze~T<16kb>_4FZcfAyD|%c6oUiVQnzn4cqL9cUj>WNM%5f{b z9u$Qbm+cHU%IFrnPDxcK{ZWEq3fV8;#Mw+{j#f(A2z3j>gLpfw(|@K@n<<$3#z~1$ z6RklU&*JLhsiS1NQC;GKv;>T%Oc3P zWCxF{1JaL5({?i_g9FE^!aoD_OnU5Jc1o{PNn@#_kjB<0F%oprY;R}K=bOOBn3%g0 z(QYP2ukziRl++;A0aVL+=}k<+=Zw{%po(4LaPx$EBL=MG^4Q^c%~WBCh5 zHTXRR$Cp`P&Jy&KRt*I@-D4)eJxBS*um=8$DunN$t>2c#51K%V>f$fANY0Jp>9uW~ zF-d?Ea65=eh3+_B1>jSFWEpEn7c#9n=v8fFROv#A42VY^V_oyq(u9}PjK=83?a0)| zAOK3Tkph5x`S}v;_tU>9QP?rqBY@TmMw6E*QBCpkG38;HWh z&c7w%tlHr?th|5l;L9EC-Npw3s%F5&<3~n+ArmZ)2f@XiBT*}wZy}g8yOgz_{X4qQ z^YX1%1}NyjY{GS*&~H5k_)cPRYH_ zfh&p@`2ZtdWFO3#m*x2NP!Mx4j#Eg7H!k3yqcQsaZ-A}FGPQUdAljrod%p7VS@g6S z6Ih00QYW01xNG%=y9B>cJWhhzcMz%g%}f`#jB2JxI3(A>+e#cgQ&CQeN<6x0;x_ai z@t*9M{7|rNHceghI{i{i_o6?evX3@aChUubdX<{SL2VBKZjuz;V2SM1OJmCTr>1z= zh50FxUkJj9DoqS3+!sO3g9V0lWOTz?{7o2~Jx+{%lkc3AkLz!(9?20b!wOC1EJWpZ z0D|%7J$>u_)04po$}4dFbKCB-wV#if$BQ259W-$$p$n)&h>--Ic{`)QpYN=cVbVGg z9v9<}pJml|5nAM8yBMWt$K^0ebW?MZz(i6UJ6uMuHMw>kF>bR;KH_e9&ja1Rre13dFY+=&V|Hs%QHX)xmLSPBp1DAjpO^7#ii@L`g(zf z4B6hSbn}_yY5VpEh}8Gm7ozxGzpKdaBjO#e9A8-m|9cwAIQf+$2R}>GDpB5L@08bk z?-XoKBw8*ARVG%DV;*oicQ>V*VkHozugtTc*#C_185ekxkxZ5-8ambbA60&gP~zo7 zkQ+|JY+x0o*P5N2GUyeo+?a(cv0O07uR(KDW~5b*h)h%%hk1 zdvGSz(@`g}`sR0{ZC(bOJIMI{d_I8X&)Gu8iXvm&T1=>)Lzfn%jN5uiD^UZBVFUY$9fT~}Rkbt-Sg<#lQcO{Z4eVx;qrNw(EUJ{W9oTKi>un zzP@J!|1|~(me_C8JpzacOYp{LOT@N9&Bof;!G{<&5(PVdRz$ z?j>>FeYAz9J3GaZ;`|u#w67zX8?|ugEKHK^?-~$#xPmfrC+}RaIB-J5FO$k)r}l5` zO73~)c`%wBd;0RLIF)IcQ`PVF{zksgs2f+#zm}{oZ{jUEqQ_Xt8idAOwSKj-gDSr@ zW#JM$-~Ig_ni5ScE974l(I2wKYDIjjq}Qq%$8N+ln)^NAOH#@}=l5;b6g{d#6KS3M z03~%zVT12ac1T3W{j-ozrfrhqsKWdknad!Mwt*O|B;nsa0gv7BF4#Z>K*9B1Cf>KCxjnF<>L zFuS6!#z{oLH2e?BSO_-b<2*Y(<&^TR+m33XvFB48>^ODk8V57!v7RtS4b_i~8p2N# zFMO?)fxu4$PZ-xDWvE%+2CE}DARHSfLQ&R|f7H#-+aKwhfx#*Ks%`n>| zytt$7w9gx`(eAE03H*VXEf;y1;Cf|&1B|I!$joO39+n8Rxo+VIq9pJDa#Tw#MP zBP&E-o=BQ6>=H1q(GCNQB%UxuejZo#=ow=609*ogZjVJlJxcS94##30ibo>ka8gq1hFnqk!-+fHp{b? z7ZX4Fn;DJLEf(5G+`|!yEySrXx1K0VG$aty@GV((isORa;#UupXe#Y6R@v<-yD9;r zyF5nnl(?E(O8gvq6N>fAjew_AV#2o)JoA%(+@P?j-A75-3{RrS0PV~w>8jNaB|}Hs z=}h$4Kuf?L1Jz=XGPo5}PY9}lobQRxlJOa0GmyVrYHQKkqNJEbsLYGNo8%tN;`o4! zlualy+8mN@;2=*Cz}Miw_I(6cBVgJ9(fhUocCDvZ2K#bnCFJ zNPKS58Js99Ve~S{w#2cV)5C`nf~YJ;buwe^`iso#Q6O12@X_;`pFdOjD-H;<1|_^* z>*@cxH&gOqv0qKg8NcZye0Xs#7#jix1CBE}a!e{#}`uKb{3wt-;zR&=q{|akAFOBp~H2ql+O~w94RIe zmh0xMpi^Ns*ayS_(KrUFa99nBK~f2eT{ar~Yw-%HM}32q-3Ad-A1GxB5rbSB{-gTh z4t^Br#!jf>oYQ6gz)Hcao>UKGi~;G7K3*FA*Ahn+I+2XQ5j@F~KO!H> zJL=->pz~e+wYId!O6D_|tqYaDu5_eG_q9r}!o?lVdz0IHFo(St52A}CjHTrzYyY@+`y5~oae44X9N>5` zvHrK)&C+(RfSwi$>LXU9Zr2Bsk2?E^5~6?VK32zT1`05<`#9a->HYt&p4_ErfB50x z4vLg4gAUh`A2413Vv6@?y!A-MzkY`Z2Y6R`L8z=oJRU(Ni1uZ|H+WV&@LENUk`{O? zHL4~s=9pq|;g?JOZ;q5ZpR2hJ;%BG6f+x0JL&0rF<$z=sJ+1_@uu9PP$VH0nQkuObdwY1%3#YvHPauI(4v8kR8P#>eL9lTBh+ zFy564I1NfvRAvcN4M|1vx`XFT3u#0ElSW$u6TvM-+3AD4RJQpL$uQ<9ozbqB7X>ex z=XTLz&u$mY|0X&4zyErTxh!%j>!w_qpY!xu5>gW#&F&$${+=ZM;Qo_;qIv=L+>f7l_&5}RpnE4Exy&P%B3D;iaxzyl*l}(PFrMESE!PbtL6*Amd#pjk z5P-xs#WAT3QqYO=1qgL>Ag*kZJ&Jk!;pBdT{$y>>&*a~q+YX=xLB6FZ$hY*=fI-}a z`Qr`^U?}Ma2g4B%W%-Fm7*Qd`0&CZN@01LpqKetwdtgm2K5Xt2GWh`F6at`i`?|~mJ!$)Rz-|6-y(qa3SDB6*DWC~Vo|sb+9Q?*< zY6S!xc@>ik`Opd0assILd2+*K7^bP^ui^}pXt($^>+cj?6R!u(Q<%$A9F^j=vIDdV zhOV+zHLT<7T;G`J>QBmFAV6&EBRLE|lC!3nlIcnTyIFo-l|#Nu5YHGoGxm6;{cO-7 zjN4ggkUd4;AJB46?wcv>-xI;Swt*}C0SIt_jJ#KsGd*p0lF#>$(Ll8=RBTb#l#DB%m?bqhmHh<=jogFklD%k&TAz&-S*N^i60b0i!A4>Tb1fl!7lPe7| ztTshE*z^SX+=cebd1?`}9dYh9Q_&2|Nt6+~fkhfyXOc??DU9Ns?4+H$smupH89+M_ z%IX!%JfEV*UWf0gsyl_2&jOQ9TRjx$X?Xf}Zn~P8oNXSRw|8iw^&(rJ(og*1^1uo0 zp6+ptH~NApo-52Be?Ao+%lf^r7cTkg>6z{3Go6^Y1v{s5B4@!Z;uRw8`M;bRvtHzQ zI)B0FttuA1uUs#SW#Rv5ddsk=-u`=gKw3h2Xr#NlYe+!`89Jo9q(M+p7#azs84z$N zX+c^_X{1p=LXeR90!ls?_w)O|*axpTh&}t-pIGZ$v?iM&J!FO`G<{~pS1z*(eh2X} z7yM&8U{*Bi$(5;KYP3fFkGS(;Tu}!&DncDEFvpdNn=fE@_i&&>B+9btcgbUqJ zX-fiJ2r7Mv!9V>SoaSe--Ox(KG&m-5z0Ua2`+;YM!x65Nxqo2sbW*ebx=YH#8MQF! zKkg##-Ygi*UZWMC(=5G)L=zwl3AH0IPq`orBb+QhEX3=Z7fmIE?Gg_YwJ9h;^8mMH zbV($I@xz){um202YGh8LlEdBEL-0lm>xzahvE^zy8%+3sNJf08`C<*@`%lti@#{P-lED2yZ?5p2wu=} z#y&yvfsr$yeUAQWi9BRtlLml(O8~4{uyvgn&Bn^3zpkVvwVHn%W(eA45r? z`*Q_XQr;++UbqG_n|O_|aZN&Wi+Uv(FzK}BV;B0NA3p}|G=p4qo7W#DweMBjTtm9{ z@VVk*sHGbm-V3Wbf$sVE88K<%p&>ltnSJxOjM*S{`0(S7bk|6=$7oHa==G{1hKu zpU8$pqD?cvn#|<=bmOzCq*-t6G=P&R=-bKI|DN~s|J)(HfKlD;o013?pO=StU?_}> zr=!qj^eT<`f9uDN@hFe~X7|YBQH~TR}amkCE&A`sM#_a*}5GInO~b;+;67O%=f- zZnSpToz;NAjgx=7D!m&xZMTC0YVnZdI|til+4EdWi6Vs-IuvP zrAzLU;~j;TzO%dl51n7#`$0#+OnOWk(I2m6Jh&vu=Pp=M^P*s%&5v)O3fpD5#o1gs zr-t33w1V_Mh0o|;T>x&Yi4`$CQeCaFkQgJCg(O}~64ux*^ z2imvlkUH0+tknMJEVUW4=|JE@h9;}rwlc)Z`0omYL+Dbxcp&94WSdj=Pv3^YzH;&s zR4oLM!|$wic~f7#Fop(b{xvw(bho^v$&MnO>aoOzayYOae zHF)$Ez#O$ujwBt=Y?w3fYYmz=Pds4C=co^g^+^(Xl&K$GnsCx89|`b9R=RJ3fkcKT zYdp&XD=*qZ7lUL;U_-N8$ydx?F{)QWIpZ&bKv2s6^j>on$nKbe_AYU?wVXs6c~=YB z44x9BQ@N4%nuAeDp~V1V_QYzeLa_<6Y=?GNpEMWD-te%P^yIdtG1g>>Pnv)>(kRJh zt3_5As40t{Sh1+|we^kXm!tG00WzC#SPbQ-pLNr-L}Z_MshxTj`6cZYNX`BD;8p0j z_3u9SbG6$2J)B$IV=~E{4nh|KD92-Yw5FBF;#o*f1pUg~?#|X&J|06)vj!4+)?&4^ zq)tG84RSGz0pS7=&svs)Z$C@hiNshFE$=79A!)zuW;tz?p?eBGpevA~u?o>nOtiG$ z13~Y7_}}Dx2n4KoK7DrvW0r+f!}~Ug#ae!1vw?Nj18jd+SmS9K9B}5eBazV6S=*bw>XI#>E!fYl@^h%=(h;2P-ODFNj5`#?U5 zz6wu%kC~c+uGf5IIRG9)q#enXQBm}wns-emVF?W3kQ`GpSZzor3p6exZ zn?1?2YzKmbRj^VcVP-`lO$^hX0y%bZ$i2vNOXH06R4D^e2`vJY=5Ym^h`LlS)B|Iw z(wXv^IDuYJ1M=k>v{3~b--hv-K;T&J9G#fQp16F)!vC&r67II~(iU!AkN!(sKsu*> zmDJH+L71+F$ouh3HHaAKiz7*2E6!9@>45d=hXL&*ex?MP198iTzc)@!&!^5Iz3FT? zf#{mh7)Oko3(MDZ9c5tJKL5eNb0;sD^&vEGJ*Vw`E#4c`Oh>`Wp)QF}&iT5$`VN=d zI8lJ5!B?w5OE^FEY$R@dQh}Fb1uTlwE%~CN(+(ZU28B#|=LsZg#|)jni8Yi5bh7A= zNeo;p;oi%&X=Ja=Vna09bMehF_e|f+wN;_+QUb^*B_>=_*7tXj62wJ^@$QBEqDcRB zxtAZRd^p3RV-q)rS|WL&x} zZ(38WKb1k(Jm=Zx-2-Un9MZMvV3A+Ds*WD z9*v3WI{bgTs2_Itd%(3nGg4zm-2+arz{~3dLzQZl#GN5NE1E1(Gw+`>*e0S# zqqQYfMC>H(7a6<3sYg0wE*n9gYPx!R$?n7tJb$ar{r?lIG&zUn9!9KPl>9URVAks& z?e(1OAoGQNy0vN39@Lr7BbtiqL?j`9_LN9=oNLT-q$897wHwd|US~?vKA3XbQPX7c z*}GX8xos&C%UK1D@DY$^reqg8UcPpq8s@10fgZ+qC0%Di3A?1Qvx`AM1ZGccEC;%u z<1->RMGtN?jPEV^a5_S{A)!v;StJ`4ms3IYN1}sD1Bw(t&RNSl7~Iu*Z+S-n%Db<+#jv@P=f9t&+*D|Dlh)BV4qlT2Fv^5#)>cfa1g!9NJOf zqZtGGRbp^^WK-5eWn?@Dj4|O!Uul4z*v5YMw)EuJ}cj(m46c}B(a zqtAM`exQfZnM{ zzt_1WLPiG;AQ$(=-HrAWR3z(K^_A4=gWW6fN^oU(&IBRGO@ctfR%Z&!LXl~2*uIk_(4hqs zVVytXy=L#IDkE5UQ6+Z@Ea_k%dz{^fl|OKwk03eiI-#!-g$%&KX{iL)T8GP_Lq z7BUHQ(6~M+Xq+?{i1^ceW~$Gpriz(&g1j-P^Ykb2QU}C z_r?RCN0ieHiDnOym7pAWw58;+l)7;rL#x!0VrB>f4~5DC%tX?moi(ldo<&v3Q}AaCW4ykVu=2!>@|qYi`NYORRhV{bn_Y zOX`6A9tYZ(DOAQ+vo2 z!X@V(%~^H~Z2L{cy0*#{_xga!Tb)80X9&6EtnYQQ(`R{Uj&UhS0?ZKXy%iX9X|EOW zAs8;tccssNoghU^0jUFH5lsV^schr({8qmux7_SIxNWf3>>um6 zv~N8tFw8%)@MH-95`An2iFA;%_!hw?HNauS2m@rttyHo>^uy6Cv8jlr^U#&tIkXkv zTkklX2eSPODT-j@J+Ic!w1(V;3J1pr(s^7}kdn7OgipJp&V-)v-zk{U58QFeoV4J! z=mjjo`vV0LuU`u2KlFDVUkOQ(O6)jX` zwD(}yuZ{#P{E}?lsz}OLvT&g8REE|1e_sA|FjG2Mc-Hv!7h=?y&Fmrag3(nKzlj_1 z9R{{Z(7fi(ku17i<^L$$UH#o-tvDOK{)5ZInI6AEoTv>++y}ZGO`9jY zSv_|iACuCuA?qTJsa*d8U}#Yo6-0X@ZA%kC)k|Yt5ALm%rUSMx%hde4CfAqQ?K*L*vUI#?;)n9f>XTyJ__WITPO`bO`JBy^u|RI;=SO02WSF z3&wG#0hc@PHZ@=5ay1{R^!(-Rj0fRN3w-S2xfki*lWX?%B3B<-YoyB-u_1pXq!;yN zC>vSn{BTP?w-Myd^GV0W3B+IYtwr?=o4xN~0*GLYJ4vx$c%dVP$HYt&r-A=o#7Zxq zwPU3weK5d8uU7S2wy?eN^9PCNg9yQL%WMa7@oy&LB6eV4@nIQ=LoOERWoNMXV2Gf1 z@7WUlC#-HcCZ6&ZV^!drvBR{{S!ZSc)Jt6g_=TJ+zLrx-*6^V7fz;*~jZ*q2om!sd zz`L#nm*`JttJDA@d>8~0;ud{W&#KZsDbjm%sL#}|KKHWQgI%rW*)|JzOQkKRqrA2*8uDB-$eAAV)* z`XhL=*Ad_qfRXu&5o?W=SIQQ)=d;<2D`vcq5_!Z_1+#J~N^0&$CDmZ&<1Ib{ogh1V z|C1fI6Z`jj&+DIK=}4>ljl5veoC&G3$dnVQg{V<^260<6G_Xg*hAjPL&$~ zdGtT2UB%7mz~OBkYbGx0+FRw7iC1E&X17UVSt%;L!Z9!^V0Lf#b?gg6+Go_M{ zx=Q@~9g<0v+@vE-*^Z}V(C|xe-u`(SG-n=o`Qi8h74qWi4I5Qcmyt896 z92y}1h0)vk`a3nFs9Rnm8?+)B;`&(kk>6@$-NE=ciC}{JmO77?p|iBEW!8+XztdT0 zaIZx3e{whoitpielU<(x#G|EA5R|r`m0q_dK%S8bGw1^BaI?ZQT|4hs`Tpgcre~J4 zQgM}8vFq+xRXlN@%Q{i7h8q}UtXqkJ=0z%b`F!AM=`#69-b<*0p{vRhjXcSFRN$pgzJ%l}ec-*SFo^kBb?Ih6`J>pngGeoI85FMSiiX8-GoqMSX(@S}Re z9t#Xu`?WpVx95kd?mujRXL0d(?g(1vxzHMig#eK!&I5GTpOvHgtwAZ`&yXO4S>gX_ z<$JC{_>$tkTN(FYkO5@>B1I!B_^MrG+9Z~g>#MW-N(`ke{MiuS9@wWhO0SSn+;^mI z?Oq%~oh?0ZCB(@1sv-7yUOP&`#-S^lq_ihb)8hswN6UXH);oq>nhnWlB2z;2&&5mu zCyT4h27ql-;f{TF~8(kJjVDFAmZ66mEyU090e1dzEsh_V0dF%TA^EIVF+A*LBFLM z5>l9g+?aVJ0oe8U$Wj>FPzPF>T4tl8@vUBtsA5)n8O@;(sFl;=2Jwz(-QOweoE_kq z0Z}-16NIeeF;M)fhDzFPXH0fvV+jB+F}w?iWKRN4>-t7Os~4<62?(u}dVM>)GJgL# zB%1UviWy|*HS~9gM}N>lHV=*7nTlXV%!%5Oja$TARHkSBX>YuLKI!LA;7FKjqqK>~ zpvGlaW4p6L&)ZiBfRB*QV$Rqy92mj8j^;ZR2Zn|fv6<<7y3cI?~+E}1}Bhp&ZO*kNVK8@t1 zq7QE~)SPvjrn57-kAJ4>Yn4k1c286G)bdNOH-=3~T|Z|}O{FtxR@ma%D*fpBU9gZe z+KB7-*9`sJv}ZCHF-qzJ1Z+sRXq@LcjI1O*+j(*Gk!0$jmOwplLR7bBdvSfRack~F zv?y8g!tYq@etoGmB^@qDTEe7&}yT`Y)UYc&ZpcK^RU)0q<9BxgIv zuO)CUf4W$eIO`kdA05k3Yg5c#t`sa6dsCaT@UYi!s$+yjd9A{hNFuZ>A>7?&c16KR z_PjL)$vhuOUkBWS34?zKP`n6K&=c=XD zAFsphPQ{)Kw<$84|LUJBrM(^5(wohQtKaCS`$hPdy|V1Y!NPK zQaPibP3$39-rG>J>`dA;%!bq^!@%M>ar;CL0)<&8|HI97TwAIb;1=}0M=^Q<1_b0F z%^2q;PgI$-jo}E09ZmXfD7>-e^sdN`X#RhFo4i9ELoO1d&;3DJl&qU_ju#ThKQJKw zj|e>y&yqRkJo4w0_!miLR)2KGyRc+7Bme_a->J0!oIm8SI7%`I$U4wrZvl|*yj3yS zMD0)-jWz{0Ar2D5?boDR*ZNRo!#bN%-G^Fj=xbe8hz|dowQ`*p0vtNF+ zz{BLN0~Cy_x_rrl^hg0GaT-Q99*?$y=}>@^mc3VXQ-ZR-4rou+l(Z=LJ$J^#=~O`T za6~ut7kKT;jSicgJ`nk25(5GyPgZ&N*>&dZXdw+$jS3YOFC@>7q(gAm$;zTGxg5eNR>!B^O>3IHA0W>?c!BNhRjm2cb`EG#HLVgHotIR z3-M%dSuLfl1$_IZ(vc{kM+lfNK0-2IN5C3c5om;NY?MMi4w?1Purs)BQ;0pQ`>(6z z@103Yb%zot5lJ9I_G^l3KYw)H@21^d6Q^&wqaGGqKj}4zxf@M`;$jyvCHG15!@m_C zzhGZfqvSA|1~~X>+c|6+!}5iL*pY0BIlzQWwTsiiW7GJqf-mYwve=2CuZ0ch%{)?CR`|E~wI;;-yYbBRAY`29Aup+B? zLu_A7=&nej?qq`m5l(!d0A8&FgY$Pbl>GmtkU##~2|`6kFcFcGd!tLu55I_dXImi( zUg-p_ae|(r@2hPllSQR?)W4{1cH^?1tJO$lC8-V@6*X=6*>JPB}Iu{#Jo`m5Ik2G@eFH* z(%tVfa-goZteoP7eC;!cXYtt@Ku!Jr74acI-W0Z|e=X3fbeBfu%2 zNp ze|Iijw>ZE6o&@Erg%Vf|_}Drlg@)>uFw(OA2i4FeqrG7Vq(RzqTiBEBFu+5k2K- zz8B^f)RcIj26BF_`##d#=99>l6S2b$w*!lFcp!2o6Cb87MLrEJ_hWH$IT&TyT;1-4 z1%5P~^S^HU!`@6e=o7zRXg3(YPIk^Qtcg0;2z$8=d&yR%LfR4d0FUy%7PC?uOHWDQ zgQ7_G*6coUPoE9X!L0rH^>PCDMohAodQIPG_wEjF7O z{NnPQH0Xu8?lMO_7kN78$DTrKtco>AhRvLSctZX6i}4T6ZQq4!)uF4{i6B>AuVxiT z{Ng0H#q5fY;o*~#4>LY+z}XA~Le^1zuNQZGU&XPU$3OaT7-%>uxo^R~gFpSCgIG+|t z>~t!;>J9!Y_M|%GTJLXsGk=AbPhNe(h?D%);_`6?L5Wc`K4fjTb&-w3c9*3}=Ld!j}0@4^I*kal%` zO=Mpv$@@whnwjTZ%d#ps=1@}ss9G7XO^o$(X_`RiI(=gqWs&|jfu}N+-$w=E>~D}S z_m6(D68hu~f8lFfIdkk)^%S5?2(Z|^Lu})*juq=*;HqeI4XBv zuE?6Cu=(Fiml}qf9WXl?QAhkeSWwXt=dB}BWrXFRcFe212O`ykvCh7poDa`G)lhWC zl*n?QD&W+tPkrDZ>ikOQL)+hv5A^~{bkdz)PZyIK zI>a}H;FXZ6TFoxEhTxZoN8h{JVX@}bS0KhZv~#Rp0x?>6XTq~8&iS11#uS&$*Uc-6 zSOep42q_O=GneyLTgmWp6Sf(f%!PJJa46CQ^20am7H_WJCOkQq-*Y2(Vsv7-#t6bU zVGn<3`?XgK?;^K+$8-NHmad!iORLYf(!qifrOCe93)s4KZ?)@-@W~H!R*1ro)Ta zJ9o!tjY5&xUK8{BRK?lGh+^+qS2^L>wJ3v_SM!@m%RlmK*#dB_^r7H(nZP&k8N-~H z=xA}?D<73MBl(a%Ar5+N%65X7_<*BQu;ZO%40U>%v5W z6889q&IX7%OI}#g7Xv%}$l(G7=E{!?0m)_!91-m(<61t1hII6Rd|%NC-tg0PR~nl} zB!_OBLC5E7+{*Zjo&j{h=>@0vEg8~DE%CYQb9>CJ^eNNVWVJ)2l^f|#F-^x=LMi>d z+~3t*G1gdRQ7i(J``s^Iy+4(N^VfXs_A!es7CNe*sA3;wdV;?FW z{^B;Ppvd$^<@^aEr4_tp09QUMGK1cy`1_Sl*WkUwP-<0x4h}RsOH1x(o+lY3ieU#& z=&7JG>T^HzkT*lx7BSwE#z2T;I}At zq>@1KkEWk;|Iz$2ISfZX50)EUqq8&Z5`KZy)-p9^bHO?`?ToG-X7+FlMuo&5)@~R&z=2xSYAAn!e;&!M9vWM0tYftcR>B4F5K=W5nP1Km1UEf9G?!d8Gr>3 zrHQKs8~Rtj@X^7Vs}MC}L@RM2T+UUUO`-k=Zt;(nQfsbl(|2k_F9{P1yqRpDSO&nP{Euewv< z{!XC3Ek8v$ZD+dlbR%Qw9irZ9(GKGs_en3DpEYlq!u+}&-p`3z6!*T3<`lVV12322 z@gY7M?c>jVw(d9mOq>B z%)VKcWgl%R<|(Jzdp?_WbAJcq*zuM-P+H{{H6UOEc_KpLS^fG0x=Hz`a)3{tlv%|w zFfHrQaiintsMVY5@;w7!uF>bW-L5R>G$CEQ<(tCdzvwIVzd;AiTZi>hxQ8)USGs4F&gQ(d zPC@MT!dw*ob&Hho$C0N7w59e)ak09xfoCnPEO7PkEb!xc71tsfTBn&Pn!)DUEHa&- z$x7?^B%tO6_uZpvU{CZfYT#YXIN8v>9~X$$=~u^0{n-1thZ7x17r!Ad=ZZ+|BQm4m zl?hkF=(W`phk7QkW(=5RtBjMeZ?%$~)_)yTv1XEDKalgCOGVA6cklbQ<7WF>o(g-S zjOdUGeu=XUAL zlvU`q#7Oe-sSR&=f)ks-kPAED!=yUQ&ZH3y{Rjf7Qq8@Zz0gIekwV%rSHb*DitiA9 zg+(7p1)oOa-yS@MK^!RddPA5(Cyy86>87BVSN7B6v9lyan$@dKv*e$3JIhXt?IZbK z-@Fxxmrt@(R@Rbbt>W%(vSqjhV{CNYG6Adp^0G3^=#K3Wy`Im%4V1Z*%@!m!y*Ap2 z29Tns)Ohs`x29F05puH?dt!j$WI5NAV*2~n){KIa0Dl2KS~wptTY`V zj~RP|^PH@DoMuOBx`QM2oW{47Mw{TV^#**h_y8?X#P2`q{qf>-YOsoPP1l2;!~V_tt`w8_URF4I5;p&GV{E4e3Sz z?Z9vDRBY)RS*bXhA*Y}p;g;V$f23>d<9?V?>7b`$rvG}pp!^A7TA(}DjrKkZd$vON ziJ%-+BaM6s&}ZJPV%^;FiPAGO_wwUQ542WNv~?P-k7_aKEIc0ft){#S%A#-E{bf<( z{wn@SdS5}(#BFLiqfW0~Mb<8XlZ-a=SD9{4)z!I$|y~tBO2|- z^yhFS?K7skTc!8s6Vwv-3II+|1jocP9euQ+f!~i*ES?23?!Gx>hYqVgeLi=?&mJH0 zXz8hKbe+2&KHTlQA)$j>ntZ}T?`^rd=X$NJk2*xYnj~VbvB4cG2++P&_tEJJ%^DT$ zhQ&Vf>HUrWTJ7xNb~N!uI^T6?wCF1y?;DPLz3$2sAt5Q6S24i3p^{k6_$chDMydLk z1mSQb)@_wY(zG1+_=hARWQPT*q)ry`9G)j6dpXHtv$5IwglwD&a7Hv>f0Djo7-TmlJ%yP zA5Ke;^ZcurX0CZxZ^$5tT_oU3cOz(SU}_jWV8G2M-PnLT9A}NkpZ}!FgMMzjcD%fs zgGp5%H8j^h=dPh0tu%M=z^2ia&wQaFl=O@Y-9y2kH*DX2l{Al!`Ta%gSuu#HXz}0o zO>R;{IMeXd2jzSiy`&D5jlCrC^PW*;Kolo9RKq68G?ezPa&KK@(t6m`q30gqQNE%c z^w+pz)nN({tcKJpcq~5Z#brVpqd&+chcUAzh8|qtf_k9x7c2hV;dzmAty64WS6~Wu z&`AF|PAdt5p-N!A0R;|MWovM}U_xVw_(#p=3?a+~%<)@~^u8@vzewpz>oC@;D>1F- zfi3#Jo$Qe^_a~BvCzckv(I-@=VUKchiFAHhC+u!*Wr}(rji)qGU|wTV@tUD2jHjCtkF8T7&q5{%vcC}-r{Gh z(rRysV#a%U(5gP+4O{K4ev#=#{lL9TZ2BKZjFKg9ibP)F>mxS$CcH)p>%vBT55c{I z3_aRTXY2VAR-Nnhb45`ND*n&`-)@8^gU(4j_MS*^C41rpv`QrFiveZM%S|(NgS!Gp zE@?lBV`OYy7mr5=`$4{sv#^IvyMOoD^}RzgxxM{Hbj6YRx^)~EI>V?k0Z27GLN(<% zL}T8@JUQ{v*Cw{hgqbrKIT|5x zW=to4slC%$Poc%NV${glXsK+c)AA&^nEBjZ08!yME}Pn<_=ns#Cc*6aCF z7nnM12N?v_zAaL#@g{%bC^znx++aIS|4_8U;INo{Mv|hKdNu|VHQ=P7%f4|QKc;8+;W^HZikQF%&1bH7S0C8JEToR&MxOeK z+Dbv1KQAb>$hmj2@ho_IV(SE=PufqgC8om4?M{|br~2BVDUL-y-8r(-8V?+MAD%+uH8)q=_?Fhxpoa2q1 zTAI4i0^^b3AE^ZD=9lm+cij3FrIcbto(|oZtYVgg#}JpCwbz`lAVZeQs(7U8-78OD z@gO}PpdTWa=H%u)>|a^u+xCgOD5JIP^^pJktBexq3)`Mz{#8qxcsdvK`=Fh0>mIHw zRe{@qZRx#os~5OE7$e9YreP<+0lbp_br-7dwr{!4ct!sHXp=h(mnxMDy}RTLg!ItmYKdwTbLA?8hWW}Ky{zYp~#`x%;^a+ zYS3JT=j~}DLI@VeHBiJ>^-dopWv8O>`U{!55#?^r)$X(3Z^m49z|mRL_90C7jBYV> zu9CrJPkN6N{9c?r2M0wy3y!?l?c_b9^sgU6=;2lRKiy+Fl-r2^svk-`#70`as&>Jj zl)4~!{2x2!Q1}XuVpA<|&CnN8gVwJsTDxhiy*Jt?u6))=Ev%4(J+(Sg}zdJyw?JpKAs$)mU8mb{vWEDO@m zVr|)hA!T5k^}zH4%jr-NdpPZrx6j{(d90-=gjqGWMdyvv==_s*K7GT}?$M%1x8(Vv zSyKM#bo4augT%KR2f2+9B}%h6E+hOo&RFf(3yP;;$P+vR138#=$aMcyl-j_}{J)YC z3Q=_mj38gK+*t*t>%p?*4=#nUx1Z>VY;CW}HFB0C#;!XPKQFEP#9J>&s!ar5&*8ZG zHqBCQf@nCyk3a2`g$)%6Xfl|}s3#w(qj!mHIXlu=Plw^Hp@sZs$~xL=spGUcAh@Wi)jQO6VXiM-5n5P= znkW0vHq_OOcHXSG%0FdH`*bZq7(7kqQal3*e=&R!?`h5$05PIp`ey|}q*i)+uCB^^ zy$`1Qy1?hBJ1w5-L0z73)}fdX8rae0op=1$=yV#2b4XsDt-<5VPhyF~Geeb?5`VHi9DGKVR{fjpB;Zi(I0BBVNLdTH!{UW`)I z$9E0sR7t#We4cZ$;@M>AQPL<22Xx%TZ}mfHb^A$uW=1Ufgh#`HaMSInh?(U$K8H>A z=vc_};dIEJJfqlHVWs?9jx7@_`}Sf(`+3b=P>ON?1ZOgmPXYh0ckZZE`}O|z{JD-) z+q&hp@PC8Y>3&PceXU80F*?*3mBQusGKquckhsb%6R9K7(P?B8H+Cmw&(qZyGKl|< zIjh;$7f}1lN8%C(@W@evuy)4n<{vliknWem^@HPzC7qX-}Rk-`ZwMuYg3%Y#Z^Bq<1BvuKDv$*sMvO_Q)Yn9}uXwn_NAtgSj4EX7{ z$+mZB%Z`M!S8-W4oVm<1YIGVgdlDAu9?tIJztq@vwB98Fxzd#hr$&_3Y6IG;fgXQl z|D(O}g>-`{97cDbr(wAr#FO=luy_mqcxQq(g$H}R|2a8?2W9f}yE>TG1$GHD8zVDX zv3-A-%ds9MDopoJ%E-({lEDV*MeJy9Ix#5lP%@#fQjMv7O|)DWhLY=r4XGYc3@*y3 z#3h}(;_JNn59~>qaR&7Noc~<{qnyXH zLb0Bf`BE>4VU((c^oI6F_$s;orThuXmR+{nPRUnGQWK7T*YK>@CdvJ8R8#b%wv1nu z8eSD&JxX(`Lib-YGT_@9Oafbhv7nBe z9bI>}cr-deIQsiAboHxdiKC|Rh_1Hf56FtQIm97Jfp<==7lJU=zu`;E=yiN@oHC4d7b$tfXx3e3{iW-b`dK@&^oq{j)2XjelAw4Q;ExZ~`xC_IVwr;@!-z_|ADGyHv~$L{!8+!#8)C@BN7R_Q(g$Ap z$LrJ&@Fdo?_JecLg9RAuv%iScvhBB~oZjqSYeCHo;O_WS)5hD=J9drQ%pm1x+2U!= z=a`T~eig)L=)*kWhc6y2j}N%zhYrbW4Fze#)hY1B6E^U21}0zd{kMZz5x4dv4m?uv zMZUCJEc#4v5Cqd;si@d>JtJDrC{>MNZ$Nic!_8!> zqVNdu%@n zsQ)lkKr@=DW<+6nZ3nSkt&=AQ0LBgFM-8Zu1r^EUx^w-@ia zaWBofKBrveF&t7x5Twcm?0z@TEZYfL8~7P_uN2K~7Aa3>y=e=r+ss?KfGAr{l%Mr1#6k%$7g!h8Ce4*6U&pdi~6oRc{;l8rMVvm)Y*|2L5bg#8n$9x zO6nWX=19xFFNpKt?#miJ(e z?aO$YI0+4LST6Vb+-s3Wo?hlEC^AQwxdvyL4DA!t$?se`3wpqLX0=V)q9Y(ElS&4T zz(M}sj?xl+R+R~$p6I!jZ(EnQx-yi@j3%wnCF8GoldkX{jD_NavwhOl{AuQPhl>yc z^+&YDY%V(Kgfh$Ep(j%cCvofdAE+?XdRngMc2i*f{&ys0C#?p1IYF*>Q;G&nWwjoU zO&AMExj6F*CVzP)2|ez@BkkvjRS>TjT6-N`|Fpc}&C8&Y`s5*f8lF|J zw(k9|`S&)Nxx$7v=NAWg_gjz3Muew~+%$AGEd`x&dPko&9y2p%&s4M@BDvoiTe4M6 zCY=TF_&E8Ka^Xmg2I;-omkbb{?+1wEx2YNGo2cdk{Vu2Gg9t9sb~u-fg~+#Bj`XLQ z@_ISH=1d1$Qy*oReoZwj3(US&Mpb-}r>e|mAAPnz_`~C?M5eICgbnVWrIj&R zDv_oNOp6#_h9*2a{&M&HaRQ3a)KihU5wk8AT?jYy-dk^nsyZONygqF1oo~C;x~u9n zpcq9ux3wDhb}KqBtX~T$kWTAR#B*vxBWx*!vGVN*nav#dqN?}$GFF9vk4xo$*QLsHpXV6=fQ&E~eC+m4S z_x@JkCTanq~eR?VRNddN@@+531K6avwuIdD}h;4*@#O+sS(D zE0h54QFn0-jm_Rk@LgH-IN236N!_F{l`VB5+U%rreU#=zk;WXbxka-lwuqneFSmUs zao_8L=rboGbE!Cc5-Z3w*u&Z8*PR?{5tYf6RQAe(RC|pW1@c7Ak<`1SSXayxmGoc% zGyCB&mv9rtxu4BoKZtK{w13Pl2C{!EkU?!j>9jA7?7bm!b`=j6#lEM!z7zm(H@_;c zLkYywO8w$EsLgaIJM)t?@6irNMQM-F0=JS> zgkda}ON7v3v|Yyx452VN_!7s59|Pp~9oRK~(0*SZrjFNyP9#{G1=A)29%}w54n0+S zA>E%f_mj%e<=Q4VXPjnyZ?cT98jq=U@-X{(Y&(QAqT$x$FG7V;P=ok<0W|bt4hEwt zw4eT(>(a^SF0zA;M|c1=gt!dd*aTR-+6VX!wu2>g!IQCQ%8=jRMCXDfl&F9iu;uCi=%BsO(L^` zcSWV_GRCw1(J4-N;@6@A4kSsq&+ z^u$wDgOdvuk478)G$+uZ;5Dq!XR_5YURq*&_PdN;yzy=I9Je$U*?|6YWNTB6St@6d zA)E}vjiZKNdQqr5LrndJV{T1~190*!^UD7Hji~=OqO`nttX7$*^oH52^u3q8uMA=U zzoCKWuf45Ev&UF{45Dhf3X0mxe^rGJ1m0t{+$=r ziHe12uX_y9F;905otMPZ>QGP$Kgl5&w*d7gH)aD9VURXOJZQQtm=oKiNgSfmv3hLK z(PV5*KRMy_Vglxmq-#_*-_DIBehNu0%xq((pe@tp=F#;e_6V)~iNM0rN)fd<4Vs~YiaDtf75OhLDkr~RwK@I%pnH+fXBaBOfj_xNk5OR)=UQ&5j zQDD5i$)FG|otZ#pAvzo|3I3w=8FUr8sR1)k(;s5#U{(m%`WmuJ4_w_d*NGc$) zDe3NRq$Q-;NF$vRBGM@!vFQeBlwGz|@4ePN=N!K= zCg=%{$<9|kniqCOgxf@AHraUW><1~=4_IB&ony<&*ma?((u8pa7KL$6DPf-fP7ICF z#h0ZJW1{9OhB6$mo66xDNlbz{9auQNH>sxSEh`qBzB?K&_EJyK%3ey7^X#t_5D)%o zJR><0@C^12WWs^X3?vWNyX2{N`OK!^o%2FYh=RpqSP&i6i7jOO?Z#p1rnKY`N8=&-GD^|zMVkuc6$#tGS*l#eV`WR( z5FN`3_H<}U`mv(sFbnr#Pfq;g0t%|32^@$=Vz$DYlv++T5vR4p#|UmeOAzq-sF=g0 zTMry5=Za#bY@4z0JQ?w_B|0iCyd*u7LU@LYF>VYja{`91?$~0$c5H&dqR=UIz3k4v z*@+r9L0rk6u-&&uN-g}uhm2WH zIw1T=3!nYi8;+1Qc_h101O(>Z;?pF2cs5frErRN{cG1+}NrO%}hwkW;w(nzCn8NkR zG~-1c0vYHGbWf5-8Od+E8avMAG#ibW<1*)I_WyQ`sG5&=(#gA+p%{~??ccwb2#7-d z(U|llmgTPHHsYGQuH5~^Rt<*feWMB^$V5@aHMvDK4Ub8ncSJztyNg6y zsnkv!Ff<9FE|afZ4Q|=_iB3IiKl`~ujrd9RL~T*Hkl1Huf&>l#_{YPn-9`Nn)oLoz z(218PQ|Zl@=0BRrSizB_H0%d-Ld0c>_n9YA{v~%eq$5}(G0IaFhb#PHk%ya$oARwp zmtryC_6WwEKEzmL1I#g*7TNDv>#GPrery{U^(!-Lx^2GueWIUZ|3cAvhd$0O2fjUd zMN4Y!k>omrD;uuOJJh4HOYFY_s{4<)2$}L+|h#NwPWBsQ*v!-kV!ku ze)~NL-E=5IPmNBoc4UnJ98P3Y-xMBRXnsjTQ;ntd18|tj7~|<$j(Usy@30c6yfBFU~fK5 zz!|U)?OXys7IK{1%ctXCv7{%YEpG>8{TzTS)=TYErI7_RIB*qo>aDLa%j zuFeG{K?hKp|0^mhM=hN`Zrz?mc0HlRQ!m5s;Sgmq=`i7$3;9tUgEuVmkPF z1)`{al!aOOB1e<_o)ruai+o$<5WgL=;J9l^dW|9IX0V&Yt!DMk|c^lCrh8=3cpq=;{A7b6Wo5?6i zL1ULPlmH+ZHjSPOIvtd=b3IQ?cRK$%y$}eZg=Z_|wYE3i2FvN|MCG(*1jeAAzl!C+ zjsIDtlt0?nTVcAS2>H_;19b0)cBooQ#i@^oTZ1sD#=gYe>Uz$=z`X@(o(J?0z>UN>7 z17r$36|zjRHbGQ=z_>xrbeULxfeO-2$Z0F0dk0L`8%qYX@Xt@xbF{N1gWARH&L!jI z#WNgB^XZF?`z|YQN8UCJ!WH9ngWl19@j*Z80i{b;68mq$SXh( zkw}q$cIhAQR&)r7ev2m$Eu2v6j!5`AzZ?*epPdrUS&lhivj0^>a)Ga460!4?fLvse z3=EiCvbTj_ zX1Kei-G_tEpvB%GIGy(*nm*DZY%k*-^A|}|hLsnxWn`6gh*}XW{xo9lALLfWKwDgx z!r{|;B)F%4xwfgu=;y}5_H&H6+8gq%FdMN9S9*zG-(t-|bj)oYx3l2*EI7!$#IDem zDY_RHTdu3x2}N4qlMHlPJ|b(k~m=_dUG_(jB08q7d=Rjwpf~-dn>P zPl!0+oId0oXDr~BugL|-ZTr0~g-m@Y$s?TtOG^AO{Nl$Upnk}(q2$R*v3IAO9VZg$ z5raV7M23|Ix2~pFO4bs1hgI~F*N%IuPeH+$qJFV^B+XGUr?6HNR4B}v5p%g3_(#Oc zfOD=y%!fz~PALtR+zHzhqg0nGEiwj@5Zs&;gQ1x?Ku6=n9`X;!)j$|pW$dVC!BJPo z@_3t4IdXKfZ!E*KFzWAtxkdt(uLp{|CKa4`eW=t%UvOo#2&IlSW)73PS|3jn7+Mbp z9vcnUUVDQVbXoJz4wVENQ^!uurJOZ^3jboX+opl777g3nzzYWzeLAOV+A$_mB71G< zOKudi%)=sNd4uXqG^HQPscA7~JTj}A<+p{geMJ6&Qm9&mrpDe(c#AK%I0vr^<=^V@ zP7VUi%Ok_jYY0z8yl!-IOH~H@5|I+KnaLjYZE$!KspD2L^yVzLh(!!33zq}S8Vd%+C*Cu; z*ipb^wFa34g3SmFWSPddWRm^^7v__u%fp9=w~l@s#w^_UV>4V2O_OoyCx>UpZ7c~0 z%1Fj6X+@^od(rm$=TpO|?cAUa_XBnK)9ClxJWfAOgpKoP}K~+VW zChjnEibJ~W+}1o~^AG7u6aH`4p#0}k+wgX-+2%eOF=`bD@bzZP5IV@xa^?*+h4a{y zX9;QGd@_?pgXEJ5MUn;(=*(kx}GS}TB2DOkI~lT5kj zu)Jy@Pra_+%rRhLkeu!1SZ}e~I8KR;V;@)Xt#HPXVCk2zaY1Yxs0n>-Epj8@U+@+W z8l`S_=-uL7-N1al1rEmwW-*Wy&mfZe(Z7aK7gTNiI(*unqfqbvCRTyShDfI*aRwbf zLx1+4Z$cnq+i_}{o_Pf~5t_X|QMqXrUV=?*@(|AxgXdBf{Q5?q*~NvdfX_Y~eDX`@ zL^^l)3{p#t|GphGDYB_xB*>WT?yT)uQfM3%oVpPi>o-rRGz8x~yk#HkRqYlDtLf|; zJ=!61>UE$<%F)%H=mQ^wECEseo@p^nEnH+?G$r;m+a0c-ObuA$%68P^_{7aCiCTU8I z0eQWRHXZ`M@T)GS(M?<5`K?6F;C5mE4KZ)C!J=quSm0dr%|a47`-l065l3+_h3*UQ z_#!}rr|*?cMXP&3Tv|4b(^0Rw2y;L8TP-A&xBM82#Mg7XEiC&wlRqqPStN6LAWuA3 zB!l^-8Md9gCk=b#oqrMN`SoUP@>RmE`?}+&xs9|;xFM?KlweSlsoLY^BQ=QOy!GVl>HH238eLEF|-B_pitx9MXEhc4> zB1yTf%ls~FPUL|bp0#|d_0Q>f9%MwXAFrBXP-0T2p< zA_(O4Eg;qQdNA<#7ka(`v+Y^0I}c`%*Yz%>*UGLI4db9Zari=>#goB>-S}G*u`n;C zU9op{(k8Vj^hK%Umx_Mv-=n`XN0I(m2;GrNmPbJyb(Ha5N2=)ML4de*^+sZ<`ih6* zu(gliu6Lsz2;N<+&-P%L=dn1a`E&#bG?rCQf1Zr_1_b| zvjKhjR~{x|oN?;q16J=ldJXkT*s3gJ@+!4_k>%H?xI0_J?gn2-Q1!tJF4%%CIKag# zG*J-loNDpVY+hYmLj4(cgPVzcqtI}6;6vYRNb5_QFamyddB@XOukRbY+`ryEP>_F_ ziMe9cj`8ruN4NbTr5%@s%pBI*>h-d%mpT7h9>rdkamlcm>lmK$k$a|WODbqa6;x~V zgxOesmg+4|7yO3iG&Vf-cO|9OvgKL3!7E1!NPz65&udxqxvRG|MNOUDqlnSE3()?Z zW(rLpfldKA8mC)1;vo|JJcDctt&sTJST+PeQ_-v!gi1n5fvMY84{d*A@CMr0=3M?W z&gX)kO+h4K8Ck@~pM6p7$%U_86u$5hdwH zO!`PJJ)cjOGm-mHu;uPO#Qkn{V6uA+^lEPX_Z0m_18N9v{XY8!CG|zxt113PRaZO` z)wxgWS`ZA_ujxRv*QjCCOJ6e^Yo*>QEPfgZsrc8*`ncXBzo~sz5fMLk;cKY#$Nx+G zCdf%?3?E+qg}HyF)2J_PG)k}X>>}d<7&{tHm!5hP-ts@Z`bd7aJX?L70FVVsLstdWDLbLS%?l83%0N=}@|3^Lne%PkRp=S%B<9}= z&=Y26F(f;77?h}Q?tv-P}|cvhzZBGM=V(O=v*1Xo0B^P=t5r~xKb zCG+l-o)|r2a>(DCW;2V1%=c$qiyAAFF)t6U04gg4)^=vpy9LHf$qcAgp8_KOjQo}` zieug;w?|3q!Rk%tTsI^K)}z|ZAq_o0jlgk+1hvUfTp|_Z4?qj=paF zi*Q|5WE+)V-;BB~Pm>mqg@$rQ9{vS2Mn<|uhF4y{50bHTn9$9OM zBdi;HJBxt3Ozkh`N?h0MF2V{-0%207VGx_z9i7%oyrrt3z%ql_=@hr!LE7>I-%`xn zlyBbBClRj}aMWWw*m~=rC>QyOCB158}SyhwU zj@*o>7Y@KP(@TU8vD&iO4u-My zZX9C4^MZbGfq7|WY?XJ)Up07kk;0zD*6WDnw=~Id>1<+;UKLhpv||3DiIG;-Gj4c| zK`UH?UU7i7Qjea&oSH^x%A18X7kQ z`LRE9-C_7DGdeVm4720|aD$wz{+wSlLb0XFn$kj%(84QENx95fY+!Jj>Q20)EB;ms zy3=QX!2KmtP}KmsQpgc)?rxc{O@>hiI;N>revfZ2I2e3!GLI+=0wjv%K>vXYj8<$P zjUiDi7JW_8+7S^cOM$X#rA8ZR-hYKMX&T3|;>x=k3R6bKQ56XMSYq)%^Q^GUQ5G;-CJNB)P&Sx2drf3JTffbH!U=H5XJ>6Isl%k$D$YFvH`fqbcNCxeVR&#FKmo_uZS;<8ZJ5>K@M1K_oW6rk2v zK9{BPlzK3f;V|_bQv(g6KPAO!3XG;(@=$pYFqL(}w{t)+n9L+8t&F4*TO;CGw#+)9 z%-TOOQ$P|72(l4}e{TPLSLr1AF#}^YeeO#ab;#y;G>V4r>KZe9LsZQt?Vs={4m`XS zH9O8F`?U6=_Xh7}yRH^9Xt&osqM7yyumyrk*dJheh8}6Eh#Y)*>8PbrnmB4Ovuybp zHl#NHCqz1V{-kK8TGn^Gu}=^>uULSp$=HX)YRy6oB(xxfm;Rs>!U@CaNlP;87y3ss z*hked+E8NfQ^=(kSjc2n&ibiBsno(brauQ$Mm^d*nn$DY=hKpCB%T@sNJsmc-gc)9 zpHlwK)7`899(_fEq>+Yu?#`sc{`R^z*lp@e6dPdoDhSLl2$CMMHS6D0o}GL}cSwNJf=_(gqM zM22jS-Ev3L;DTo|fYS}!eF0>

    E4KA!S3%W%sAOTB4X|FauljzJVcoznoPpbAEGNO_>zDgt6LBI{`J0=mt;!fVGd+CiZLn zhE_cc#TeRmKqB1M*} zVa|`hN4HeL!ARQt-u>df$^wV-|4(!6 z^e6iPf0jh9j2Cg6-_>HTvZq}ePkDX`P3o)BG-2JT_sJbkBoe};BMdIXqqHsY!quHAM>Zs%rFzdJe;+GexZ2aC(wusW81t3Xc&-Zg~` z+AvC%%sBd_#>*-ux{(a~M;PG;C{$c$48#OoES$v0C6X%NpR}}?^tEGr->6hErD)Fu zpzX5`_}ty#XozpA`&bcj_oqxyW#nPc&%ZAOKwQmZOGH zl{w<0a`8q+&%f~g(=drBhUUn3v67kWlhsw%>!G`p`vBei?LvQ1$Ao?T_>}=axGokE z=C|^wwH^gDYTw?7D?_C+XC`z~JXxy$-r0{us5~U;*~^a=o%*lXs%sLBKb8!WH}^r) z3DL~XsLgyWq!CH~o{6h@cx=>gG@{|iLJaZ0srEsKB0cT$xVX z9hws9^RiEt2Lrt;ny`IIIG7BOCyV-)r#g8-63yr` zbvO2VWu<$on!qvdLn!=QV;KX<%hSEgN@jEB8T;+8Lqu&!jV^V(J?sdi-Z#e5JCJm5#4KLhi;O7M& zcO-ORFX5`y`W-6nEuaH!>)NL z2?tTebr8FzT`EFG5{1^!;nPI+=$511)-B{JkkixG=*KwOp;J;b)*Zn!J8y2{;JY8@ zGhDyY_KyE14_xMq?cn!QWmkI(1khM$z8ltQn6W$RylnYR|70X3_il(te{^3(~ z1%_t{{bz6F+Oip}c<*+~Um&kg0hj3Az?+XD;1_#BK`v7I^Bc+Qhsn{cX$xPZDsFDM0e)#>;+}AE-tGA0#DqvB1L4bjhvAQ}d*@P5H~< zKhuk1S_+0&5YXQ~wooc(2r>a)8MixicU~la9mq6X_XXMUVFkpbJSa9Kj3@e#Vxhhl&IcNe4qH$+~g-i^K zML8R}t-36Mzt>l_*h%{>)y{&-_;+un76R9pI<9n??Ez&=kXQSrDR^mSj&iFpJfALORR-IXg9iOIz1F#$OX|WS<7&Q5Cyyu8CPuuZ-R+N9I zj;3Ih_$>NTcStW|DY4pHGSDv;n{7nb;K>P*ur82{8{@)&iJ0MxgNds%w%?XP5!oxC z4?c5L98QP0TQ(|BP0LHkxMM!yoE>PhI5{cUghLamyFVeGzx9??PNcKXgXpQO~CVn=_p!8m`?m4x*b@=Dg7cyKPsQC&y?kx z4?OM3I{i8mjsnC6IYglG&;Rswm|g{yV%M4+EBMc7IwUIoRPrTH;rW$;dnbZEEwzzFLK$yHo!N6J)SguB zls~JT@xT1Yj%5t`{FKhW?i6Xcz)EnEhb@yet3lMFgr3wDwiV1Sd6&dHG6iTPIU>$l>SAyaq&BBZf3JOYYzpZ zk56abND;7mG~;wU&}3k0P;tHPWc!jv&gp`yEtB-m=x6qO2V@9+DZ-ds5RLc1Fy>M21Os!BJrD(yo~_b#;4tX;-96^X#Js56DPW;K-DzAL?lDy77I?v3 zYeC2iRq>yvak^u9)vr+Ub&F(h>IAXiDNR^cqTUDCvrwvRd4v5?5WyUg1a}u#CboRT z@Y|sy46mB*{(Pe$kwFW*sUraF`!gn{c+~i`_g?UmzWzW66{KbtEZaL2TuuoItgw(# zcZ@Cxno~UO4(VW%h3>=CO@)_tV>&fnd!UpHe;m~l0SNS%D}-jYeIp`h2nw*9NAR3*wDwoBwBzk9zO|Q>Ak*iUw8^9*`nEqx08VF7H}yvri8MQD3XdK|4;-|t{HfQ! z6KB347LJfkii>)fu+{4TXy$p7liJ;FgPSbDkB^^m6xp-`Q9-W1YDr5l*X7XI#mnPY zavBX{*bu;mSRP*78U5-|V!nJ&eBew{|LZSKq3Yv(v^QKdRqoc5%+b6kFcffHJp}nu zsmQFJ>GKY(f(1{Z1te5#$|2AouO$zgvCu(G!@fzZ-Uhy0@Fr2>hfw|N2361-VzYn85P~I%HLx>hKE03{|x7S6IC$|=UZIe~#pAz{{ z>NwqgJ2a~gzi>72ySXvI4BwI?**e>fTgiK-AD9r_g-IE4K96v)AQgv0TCP?0U|(PH zhK?*}n?>X2!7y-3bfZT}Xl|mE$QUvGNsa*IupeUbINS%N6=HM_sDhgoE{Lw7H*haZ z$Rlps{K8K%ipD^oQI&h;FQ)9gf1E&1Ksrj(AbtMt&|W{5m8BX1Cwj<%Na$3;FZHdQ ze2M5xa``+3hn`V|B{?i))=v7N5wvWJ*P&?D8i#zGN4zl%6L^I~C;H18t?yi7-oawD zTLzvx5-8xA)~AWEcb8%LZjm+Heb`YJzjz3XD6;vf z@JU;20LGQa%Lh1RK;1&l+L~UZFu-BzN}d~FO<^HufkfGX-h+OCn-i9R5(l0XiMU(c!%Ag#6_ zJRpwS&na(C9}q^AAqjqK)NUn!z;S{S-_bdBzhx8H#yYPUdoCBs2Mu6vhgg~HLsG); zX&6^Vv9XrGDLD~9zw%CrpPZ(eKgX8Qn?vynZze-l?H=Ps0Jd68M8e(ZyC`ROmdA6F zp07xIOU@_*tH6CUC!{r3n|*)9Bt?s3zp@*)=aIm}Aphip>rixf;o6%0Ws_eLrAr`Z zF$dxj%01yHAe+X>KGs#tE13UoDuOP-q(e@q{rZ;r2v( zorkXdX`5ELG1UUK>d=oz6ZV?i(4y?jJ39SR4FTGM%IipCU%?%z1X@0#qV+0B@>O9U z6CA`7YeDh9-apM+@ssa_Qep74s?r=oVzmesQiGr6#C;Dh_R&ef^}11B4*rdd&> zo#P%q1FgQIm_W)a-shaD)Pbg&y&MUYf!|*Qu=9+EYE~%PeLR|LiGrQ~FPH#pj zWUngJKi*O3WS3c@FFqP#;mF2HLtb)@b<3KE(S&270_@r?G7eqKS#q0iyB+eQ_3&|a zjHN`UQ`4oHzVwk3=_IIph!Ov&*G4tg!`)Bdw=S2>XVt$JeM;xwyJZ%Rv{#VAa``mB z=WLySD5wX$(QqJF|2v1=a-+DXd@Lg;30cJ5{EKKP;T0`ds`li%s zAzWJxHrK!mml8$423Po^2H6(7Qrla;^I#8#Tx06~tEHpoCcNDZv_IqZ0l7F)L48!% zuKW*U-Mhzyx33W)^Oqi7WbLl586tHF8ISJ))b)|`6cWo=n%T+&TCh|kDmIXpPn|j# z3`G}C^xOKksMIt|47GlXy&%rSqYAE6Fcr=1@@q+ul0rDtP{G9VPv|zUjtjV(Or72q zQ;cwMYYt+r?wz>BHop%`WSMV8iuQew>`}B^MeqZe93lI*8H8RLOu-pMAjH8EQlr)m zf;P}UFY?BjO5{9V^{ohh{W8x(S(|{Q;hg^`?E@_m0cmq~cw{MCV#FzhTApZwkgD#7 z7TceLkLdnlPsTdIp7v8cW6cx&%`-k5Nj4R%#ykKs3VCTS$+#?{6o+!oeJ5UHur`Zc zN0EG;pdE;qd2v^`PGZy>5#9-t!upWCzyLt8JWf6_DYVtU;DFyMqWaL^M6v$+#G*z6 za62M^+g++$xjYKJDadI*G(bvOG9*?yQZz*Hb$N1{JUXE=JFe`mPtl63(K`K%`@g9< zS8v&S0^ym~*`)`K%czfm$G?}hJi&ZUK?Sg2Y3QcGJWAuPlMarf??b8KbtkU<8^&KW zh3gYTXUAWh^44cCT*2#kVQINg82s`PfMxC(fAHQh$kaQmA-MU~lYbhHtR^*T8M9y#o5`CzLeFng`55?<>CV?TU&-R4Cg{X6;DUmm0B9$h zEBB8%1mFeOySned4rh4>s|8x>=Zj6CiI3vQq^?AB6ggoV(-M4Cm}=M6dGg`Jt@w_; z#&_Ia+UDFsUvT(&;N9RuqfjE#>>w&0GrT3kIe%|Ip5cTSL{%Yu75c8bp2h_{_SKu& z;={c&dm@!4_F@yXd>)@^VmdyKpOrWnrCmy4UEgIM3F)RW8*BbI${4|n7tBShommI3 zuk~(2JslP?qq>YLNxYwX->fCvI~1akXZ~RuYv#yRR9$t1A2Jbber zFJKYKd8jjlx?a9Z1^-#j=D-c6GY6f|t~?2Gdk5+A)dHZ1Nygs4u|qNY)$p}aiBm_d zI^1kcOK)%(jLk4>bE|iVo|+h&59^ke(W8-Y4^e*9d>Z|>zC6=N^R+dVLAfaxEgyYN zSoZ&Y@Zz7Bz>G=;OqZWR05NF!*Kwsz^d$fU2t9gHA_fUR(neCcGe@(FlyFoPL2cqK zR;o`>EDAoNvO(A(=H8*po&Kdxov2xWydeTpT_l4WU$UolchpT-H|#Slqdy2!hhIO6 z1?*#b^>fB=%`BO+MZ2YsUX^SXGrodRy)TA;GNfJ^O`E7B znIG(H&xQ~c@%4Dn&6L5T&a%3aQTuh>-mtD;lX+0Fxy%>K4QZ45v}`!vji!k5(nJVp zgJonz+S#3r5wocD&F*#5fO5jfPZG|+t!wJ*ML5ae!!566esM-}?`dbGcgA*ghLq$1 zHheGd;%p&geRsO8ZyE1b4dsym3u?jm#Z?}*ruBVVO~-=auR%DEAtx=l&WW_!Yb$+C zmSYsE;jAO!RfSgaP+8BH7a1ic6~2{M20quO;l$)CFkUVutMV{&{24BMb<_BRn3O z2%Ao+9IN86o8-ih6V68V$-LsyvYB-&3{6-!Hx|B*$me&T4gMDarv|kzvifxd0hdeP zAP8xe0jVFpl+DJ*Yvx6MYdLtI`QF)<=kUGRH5sO;{A3644~?GeJC z+-`*zum8tBPn{Xx0Scn^3CM>*`R|{y|A>WW+VQ|_q<<;+j~a6cXwm=MTuvJ^R!J;g zN1>6(eKB9rkJaA?l+%#>BIZb4nX;KJaja?e{H7gi+V8kQ+d zAz0G;O%n~IK57u=1!eVP#oLcS_sUXVj))ZFB|K15DB|W>b5h@g=C<0jJu-G8+-kB= z&!{WfPw%f5R$M@*oOQ6Zax-!sW?ul{$cS^M;5TxROi)4YE>_Kj*4raI(qB2&?^|BO z>Gv~jXpXeWqNW0UTb17Am5JEK$mD2@w~Q%mq~q)D_JmQtYi z|6_b#1n1Db&WV);MsLbrBq+ibxq_LB)h>LB#Kj!JJvxB_S;Kif0WXnkbsU~XD;i2h z{WJt``WiNS@qg(nyXY_(USng<+xdBK330>hshzbO7@838zo(Hr_i4gC4=E$u)dgHR z_)K5DLqIkiFmQ(h7H$b7ws5-I4YD3rD!x@3<(mZ$5P3qtRi|=?&+@|oRoRq`A^`*s z*TgS#TRo@G%n4OUs~FQd4ADBTG8C6ncp%sAnQ2KARI(3w%5ZdtO4V)^wN`7gXfr6Q zN|Rzw(&zpz$Fwx4E*8@LkgwFIha|D|dhXc5E8WXGm7$J_NGwXs&`L8HSH|0jCakEf zh!BP;`lvl{V`dLARQoe=(n1-U3{QpwhPVl~O<*!$)DWc0`vt7q(Pm13oS;}Uhwsl` zVt~Iyv||PhQrb-3>wUX`0D1hw{hqu|tqL>!xpL?(N|#Eu)VA3O;mWac>fb2D@cM*< zIUGmKOS${1MyEyhl(2RH^(vQ}#qFy^FwMBG^FkX2#bSdI-K$#Zm`mg6>K<-gnC5Iz zP5^>JZ#BgDtznyG+7gXq8ofeIa{A`?K$54pGC}*C_bW240@qqWU|RG{1V?bE3~LLa zFRws&CUYxNBMd!oh6A_vF?&$Hg;tduQs&O|n%0=qO-5F>elb=$H0ROk4C%YXe!O}g ze>@L8cs(%hIsM?!3(~~&WiX+KtTZM&lg5}V>~B0X&e38%rSxp^%Zf?U+GfV?cesZ1eht?w z5Ws){0csQ(Z z$Wvq-iYpTyeHI-ULnKHGw_(#j0ZwRvi8F^t2r$(m?=9S+@L>LX33&&gMMxi4-hB9D zs?1}$%sBXQx-9j1jv}Ay(xxFr>7qyrg7j<(U0$27grA$nM~sK0j0R@S4XXyJe$E|E z>|qK^WC%tK;p;{cl%IqYd|CvtG3U(|mZpEPO)a=}+z&kZ`4O(9;J~?TSyF1ysD&qG zA&vhSma!KYkF)wPW?(0fa7AIa5<1&Qw&J6-r40l=aFPgh?kV2p9a?cw=OaR3zRwXbs$OJ!;i zV{$jQBX?4orxLWmTrB4Zt|~(knLve4kd@&_=uB*m z)Kt0_w8+34XYGk&%~Q4Q;Y*pdPSF4DcNDC9))ukqM^0d+A?ZTOaw151qK8BDKWVad z>bTV06P7Sd2=Z#4Yt~Qp{(^7M;*gM*;{-G{=}bVYQR?$z{N?)rtG0If&CN5twxA=t z*Uzh=wW%RiQ{UWB`pOobDk+3^x!gLf_S)mhr)K6G$l2IAI9=drGIB|u^< z>6Ph^g;uJLI6MsE=tufJ30dW!Qe&&T;H$@y5%ZSl{m{D-^-gWsCoct^LIE73-xzOl zXizQz(s4dj$^k{KUwN?fFP^#u~2!4>uMr~lsJ70U=XGM~&;K=JlVle*V(bP-69nT?>6<1m-Uh z23mP1sGX>4W07QWsFtY;W&_K)2er`IHEHC&myyBfLfO_&h~K)WSipUn(V;=Tr72zh z>Kn#{{1bOHv4j_^Q~H<_Qn*XjR4|Aj;#iP&OM(Xiqg+3r8{xL+$J;@~UJ%Y`=l9d_g){8ONA z6Y*cxM=b(`ED-I{;NZKk;tf7nG{_3|{z1pj-lthgKkp$`M7`i1R$9IIBwvz0AQ#O8 zGBq0V-iZbtpY+d(1#bP_Ar6S`(G66yq_nX!6Jgr5on*?5mBvu&VsbKjGwC*91J(h^ zsOj7#sj`#byX=FF0d^BU38*g4-H>tnMlSiZM_OI~&nQwFl!#7?{GbXLZHpE?AR z3Zies)nt*bMC}!R%Mtj)In*Uhw^*y1z|em!xNZI)CLrmyG)`nDWIMIkb?&Ts4IXuO ztC>?{(&bYeh)y|)U)C=ht#1nGe`3rMeBVE(hLn%08#Q;1n3x4|#Qn?0#-0X%*5j2{PRS?(Qv^-4oanPr^i_ri~E&wz^*K^u99aVoEsA z0VkiWXkbk+;E|S*x@W-D?gYwpLTahrXXfZ>T{i7%yA&WpgU;-mX%-=)1A)XiV@#&$4X zB**9IMqA|-s&Gk`tvM%kE4|-lQ0^>%$y|8adZK2VCV%*He0MC5w{Y(Dr1$cx5k(l} z=;#;$!WBFFeboo37+o z!0qLdZ17S(_VA7X!xpd_3T`evPE3NMfNKhMlL;#=jtfvPrd7>>+87l%UgQ+9WXLcK zhB4_3Ou*PKDB#b{Z%j6bhgezC{uycOgJ{5!%gbQ#<*+|eU*+V>@ z-JCU0VbD-e+i zJL%P&xJ5gE{;B9%i6TYy-_6a}k3bW75*oxp(&eb~qMb=?lFlpKCgrgLc&&rE59$N3 z{C4To7me9cv$Mg`!~TiI7W2+5C2$H`*EnBDin`jE^`>-ER=*60y}LAYd?EHQ1`FD? zj*W|YInWDZta3vK00R@m`0ire~-^4O}guUfUp~s{tNn3#^Cw7|L1g!-eRbS1+ai*Y!viL zXnO88K$5V`W_F?#RMD7aXiYw?LiB?;rLlSYRLed97J$?kQvy7TFn}6G-afBkwmKu4 zWSNxy=5+Re0B(%7AFXxR@@9V1KIkazyv(>WQAyuZM0k1Pz;&hbDOuuB2d%}YN0*B@ zR=Qb7t*b99wiw$6xlsFDXFX^*Hdv00ADI;JKrpmi+-~e1C8bs!_-oger>(&c&q4p= zYRC(?^hdur!qEaDGzl8VAf*&7Y@}Dk>8(a5`t3==hkK9WaL(#9T5jj5kO&N+-=A}H zGu|d<=J{8%JxP`}rk7NNwvGWE?GNCAPk}KsYU2RN!%$u)NYc+}%4h;^ zP~KwrV*OEd-7)v%j7n@DO%ARt$*b~=7y?}yH=oYEni>z(ELHQ81gj}G0biR%BtLBt z>dYm1OBmTZ5@AxbPSdLraYQW0rd<^~Y}fOoUoD%FO*3uFp5{&ZgbrZcpH9X23gv zVLF!LxYn|jx0__43q2j-@zc-#R$=y;0&JDGGpv*ZGICy!S@@rD=@=VoT$zLvL=e_l zzZUZX2?6qaX<-{Rw=9MxqJ-WuYT-jD%wOj~Ng)VfJ9sqK(a4Y0TwHIz;)|2~AV$Gy zp{|=e`1Fbf$IsHl1dSR{6FWxC`ITJ65H;6oa4mg3cnN8G{_k+p78eZmZ&E*hv38RJ zB)2Hr!6$Y=r`1!#9|P_He_fy#a` z6v7p4D9Gw^PrzC1kd6Se^>Y+$4H>k!RUhS|>dOef)(EdRt*Gwhy;UeN+PJJo?0)hy z=dTaJv=+;IzDC1n2Cb76(Ag=q0AlfKuW%4zwvP_nb{J3V+K2!#HbN~#UDp3ql|4m`D&I&~>eRipa~#v@Fo^Qh2P zPD^!HEFn_WXmfc>-bcR8F;E3OJ=a%}Ac@O4SBh=N1MfNM9x4SnJ)#*1+$jzd4|{x( z5nmD=l}Jy~M-bJOT^I->v}bY>99iKjFC5h}hl_&HiM?4AZ`x=rAL7_?4if9owY>4J*s7Vg89VhrD#h>KI8!Tp32*T|6v)v<5>mQjNRtnKT8Q zC35$%at5W@ZA@tZ%oxCXKk@J#q_vy;P8VK_1Y7(F#X#`J8%k-=3N^YwiT+En7NHGd>^^pHwRsn$2$URdg= zp>X2LywvD)Q%m~nwxaqL;@CqU1|qbAKyJV`+abs(UAzW}EE3o=90J#YP50lC-Y8wUO$^r2rJztk&<@s}u9hRRi8b3j z{~O6qp=JiF)L8dzD9Xl_yf6R3D# zjQXXzzr3}*(tQ7^r% zt{erZsdnuTdLky|KNjgEu56B&7S(k4WWQNbG}W_4 z^(1%{H+7<-oR(+_Vt+haP3`hTW+B8wf~P1-o+1 z9=ao4*pCf8!3G3ty2yv!erwd$H*4B_A=+TY4P5-?9!rgp>@BNZZOlnRG#t6loVnI4 z-%kb8-LM_QLnjJ>NUi3+lqU4fhvTY{v1^gBdqyUwKw=~o80$+}fJmGzNn|6K4FYTx z&#cYEwg69rheO$^ZSjxbGo68@QQEmTds=$=^`1k%XI<$Kqu{R{lgID`pjP2$sCW{C zoGyrXzza|IGbZ@QPCHQcLw>C86S?Pc(Nn`;v59<2MQnX7vWYqX0Bk^={4_-NTB?jO z5*NdLvt?A|ZWtnfn1uyW3%{Pjgfik0!>7?&WC!6pZo3Mi=abz`P?vL*Fo zP-)>>K8h7CjP&qVJsA<_5vqlbn>obkP6XLQ7YhT53=&u|GCLCpnfgFK{5c~}fFRIW zV5a8DZW2yt{H;7bd!F(q=SPw=BY}zyas)gy>XkTI+tU(t5^%GD`7ea*){Ee^Yuhr} z=r`Uu+i@on-S?Ut8oG&`u!=P|Ayq~jId#cK`iDe$OGyOAC$zzdc!_gAY>k+sV`TJ{ zXpC#-V2T8_zD~!O?U!{WmgCO~wKNsYg3z~6Bst@$U4(dj&;Sa73>jI;#jF$c3#QrQ z{q=h%nzYt#_=ze<;=1lj>To`vD)RsvC~Y|8|Iu`oVNtDZ6dqDiVd$;_Nu|4cXrx=Z zK~lN|q#LB91tg_gx?2H3kS+lUkrI^eopa9j!|OWN@rSVYo;~mLthMfCC`*d84m?Oy zOIm%36G`O4RLBTxni;oS+1=+~So6 zfw;POUDELphFcO#t2(DdEBvpvvvLAy19~5HN~+$yx_#iBWsg}w>bHwH_gUJJ{$##% z_6rP!J&PQ>2_`16A!#W3Oaib0lEl}ZQuRE=J{00K(IGZb7l+!yA9J}wz6Eh#bFtonBx=F#Egu{})pCTS;koBCp@(-WAr+=?2caczPUB%K_?nB-2q-`nk4J zKLR)-Tx_(TSXYj70avNrd{!b!$`(Yfm?9#@`t8mU{yI2W&QAmC1Y z&sxu2^iLM4h5ZEg0azgW1wZaFp!JP#Q5i-bfYlLVeFT{HqTrq=9~s}bBnUpsBd_2z zb@vq~{8%+c%1!g>-19pF@PU80Mc_NMp6J?HY>jK8z^Mv+fE8z zNQZoPw#Na$wE2QaPM6e6MF!;S`!4yWIXWLeNz>V(gXexXQnuVcV~*9MZP%;(xWIE2V3Ms-hNvH9JHZVueskn zM4Z5QQ#if9-+Mt$qvZ2im6J1KMl>2&rEQJ2kSso8Q$#<#sUFKGJC7$G^C^~%}ZA(fGoCc zE9RX0n%c5`!c2GZNZs9C(oiOBY9~#dNNW9VQ@UDF+a zT39rDd4&P3IkDlabO2vIVoG*fWspJjh&F%YyPB~cxKDx~``-JJLJ>yKGS9yoj^nqiMLynu{^1J_NQni63i$uVrs4l@pp+#{7%x zVfWWy^_392?g*f!`4(VLR&@HwAK(w+k*-U-ry0gyLprH-3+#}l&qZrcH5*C_+j6aE zdYqz*sRog^{}iz5pvN=_f|=)q%d2x;K(8f1yvrp^nW8V)4d>r79W%={(Pm)`J}b~C z`+4l|ycy42FLp1imG~!yTu&O~V!lBgs1pUeBqJ5E|2cBovv_S1d%Y7>vVY@+lw@&! zBm%a9>YL>HWyEt2>M?4;3t8sq>x;ZA@}mHG#&}j`++OGqo^M>Jo6hUcC>va4g@=3U z9Kw;)`Pn`;&XPCx23t(M*JKr(UvH5I|LU=JgyeE&w56fQ6~lCi*>b;?xKbXh9$A0$a;-OI7*D;HcspW@R5BXO8 z6DdYO;}pd*3Vh$1EnjnSRShcl!}kaOsR$xVf>y83kq9XS(esQw@%ooULxnP`|Z-WPZn%2USfS3y_8U=G8PLc<+aJrS5WU* zi^Ed1=@}B1JixR600Mn__P)5%5KEPHIEsF!94lqO(Z*)jRX;O$s%gl2pNmZ@KE5B) z7Z`)OWzQaz0oSWuqQ&Q#n;oMM2^)?7EeGjQ5IGunoN(dx2CP!N3lLwa8m}9`D<=-Y z4f*_aPlO)%I=$2HH%*9BL1i`R0lB&Vl*KDsy{YrpqvuWKGL>P^Fd}|9YvkBMTY%u7 z9*BNuh7JK3D{C0s=3;V!ISH*zqu}#ypfb70<)4&^l;8H}Yx&QI+qu+8e%m}|N0`cTh zqHt-z2!=cw%1{m^8v=y zy)!xSrXqp<#KW^}j!POi<74WhTRqeuW9ju#*z@n?*K z#Ypm7SY6cTaZy&wA4vrK#j@$^810ULbV?}KSVm*S|vb{#f9 zXgD*#RR~slhod(Q?c+zbFmvtVRuE`FeEIT)b9IaF zVi%z5zcrVsrqWF(V7Q8Vcaa39fj(9@tUuR`V>$J*Y?iiSPbvyY$ASzYz0K)OZ2fBw zAf`HXeM_&DBK?R9O)*vDzzAi{$g8z$`$ni-EK*}jY+a9ti0FnUt`7c|2Lr0&NKe@`@TGQN;rBZEL zX?^I~)FEij_lw;CYTSb_pEDXeIe@y3FGpL+9VwrB$_+PrZDn=JEMmyl35?b1^Zy0VIA=GiY#lm02 zUvJAY*8EJP>4(`7aRkVhI2w-tt$n-;4QowISVIxwp@Yg(Wvl2D&;Y$Q9NW7zY$OO< zmx?H@*rxZ1TZtx>KHs5|FDv4D3fxa(77v0{8KjYa<7hkzm*UBIkb^w_2r^j1kg?!6 zD`8x6W?U%EG2|d^mLzNF2?BDtsNw6!9{pBS9*&Hnm2q}pqGYm=Jp%%G$Mzbi3fQQK zZ7LuVS8eA`$hfF?Ym|=C;4DoEC=b9JQDjK9QejW%;=dU3x4WBTJei^(s9nqdfd1G} z2dyfF$;+}r`0|GR87zT!wd3%Q-P&z~kM3rwJY!r)?PYY+^b2n{puH;53;DkVekbFJ z?c2t1&FRFv%pZ@Q~rij(s zNz~FcN4>iqJ-_>##xlyRlK|I@25UbA*H#Gq@>4`Xddm#wMzlx$dg-(5@3GGw2iE-o zY}3fd2S!V;rkFmBk=Smrn4<=~e{^pM-_0iSMVkeyAoNh9H;<{|sOxY$MM5|^sKr4v z29Rkp?tu?v@1!qyswu{(GH{e+d1C$%X)A}7gbYuZ3xBhS^{ z@bv#Y#(uvBdrkbAxU|N-^SPn37TU6{B~J;KKl@w@DSbZIW1;o~?tbj;{MVD2SAgXR zVFAd5_j@)*h)0_k{EMS+PXNZOSE#z`N#ye_Tb#rj;a3B0YcAbV4{o z(%=;D>i2fuHf zFE7Dd%E3boQuf*XZg~x3X)QHsGhjSMvTER({|q$K2r&8-15&ml1fuGg{~GDd4lLQq zVWI>9`D4~5a_&YAk@j-CY|3)t;&;@nOke1ApNz>p(qCkyi>Ak~=WNlDgG5kEhc)Ck zwwGgrN$DC6l3U^mr0D@k%-&!Ppdby38d*U>8nGwYDK0D|X=p;q3;29M>EUqCUmU)j zrFLOVsJw{(GfWGy{?~AT2~WqzxKE63)B1UD&#pCwV_$t>z8@5>^dXIN>TSvui&}1~ z1pw6x3mWv|>dF110Yy43Sh#FU_m%hmAksw_ws+y$z#@Fh{X;(j5OTe{m^2${?Mn{i zM~ihSWuTLOm<+>E>+~yzFtlJ33EPyY=WKg-#t1RN$hIwpS6F2mo1yWmZQ#2>9VJGKAQp$ z&#_s-nkE#a;rc5uQ)8I(5M~CUFx|J8n*i-nQ!$b^$UT6;P*`JDMkB<)Q7mO|+$;T;`KUAb<=^8-+XOemQ&`+W zn=pT6t!bY=wrODe-hR_T`cOq~&Mr|&5{P68r20-ew;Z%q?J zMm3#J0D`gWpH8TH!TG{zl57Q&E-^*YYQxtlbBMq^ptmW2_l)2tjDnlR`$B*U&qYdr z4#UpiMT5Wrsy%3Xu%_scjS(cY|KeMLB&gVg;|7GX7|7|JP)8b(*6E zhG74!+jfA`joIemSBS}e|F9Zt3EgGHVl`?hST)p$of8W#*^zw-T9g#vFzKvW@VIUC zHbu6+=~ZIYk*?VLaoF^sm@redDe=*^>MfR1vi6iRnL`ISP+jMp3tAM1B z)blvSAiXY2GT}Ezh)O#O1W;rJf9Dc^EuWf}7T~ATLUr~FrdPAi7KGgWmBBtNCr_Q4 z;nEnTf8|AHaK!aX0kZz*AcbeSG3Fmc*;nZ!- ztBr!4@)40OC~{d{@#*Iod)27M>N0^gtPEB(-9wNuou;N&AbBgI_yrp($7;h%c3?ax zmz@o;0gCkt3IEo0FpIhn%MgH%D77aL;lTHO0+}M6#-J|+OHu;Alz@n;&wIPt3DB&V4}KS{y_-|Nc!`wWr(I<*M;=xXtV4| zR(Q_%Ko?5Uy(1(VL3_N^6OyL>bd zSpFny34K+HJh~JoS%-`Tk*S?nJ24U1<91~w72wSDCdM|;W+2H4R0f6!#<$?K|;Xp;Pa7S4jCpN z@C{yqCcc-;4hBHMUwJh&bJb!PKb_ZJ^nxOXJq~{;UI65y;^A%jIMolxMV$NMpwij9 z8e!A868Ff1C6&7PS%P3E{gwp&QqNz6O)H*77*eoYaNifoaj&mLdh+eZ@C+D~c8+OM zM1eHAv+Hql{;WPbS+4caAkYc0LKE4M$v`hmTbvR#obsl7{;wS4t`e!2X%keQ$?VO< zFWl|@M+I*CG~eWJ(p>qweW zMoi%}+52jJV+%#;76mXfdS}?QR=hk~$4WyvN~a&h=*XejDtx!TWXZs7VAPz8E7v99 zAZ=8{^V-cr;|V&Ne_o)Ra^x%Y3INisqK1=T1`&^#FU{?&lN*3RE7pNZn?qB(&j+yo z|2c%O%0mQwrj4*bMPDeJOnO)6WYR=5#8$d}fP2~e z-B0eEV6f=B9MMBAM|f+*tMFuWGub%ig)mV2^vA8gZvfZ9OnmrpMh49bR5ZBVe=AS9 zt#{pC4x}PMN~)XgC3y_Kpb8TUIt-X0nm#nS%dNIsm9I`3?0=kN4=YkOfgaGBB-$EN z-6LGUTe!d|vgkW1O3o!8iRiiK&}34bU*>d~%GQqS<#MlBBk61Iw9}M|eMmHA3PgWO zgq;g=3V`FF9fPKt*&&@nw+j=F4~N=5Rs9xX-m%VN5q_5O&Q~{stTO{uGy?aN@OU!l zq3N-0DCywOeGNLivBh7f7Xm+!hB*_%i(BETt5<1Yco`^bp)`Y2!w#>U_89-P z0(0%hjaIIC7A+(3fE<#-?0^_aUxRZDpcEd7?|1MuNF9{;PEO2WyDN28g?sL9It}5C zN>8BYf+2ipbA=CQB$__C^rJOjk`7T8CiW)4X7*FG%;%C`R{~VE;fN z`9zB2&t@GAh>^)z#!tRM$3A-OQA zM&+}ar8bZf4)`*ca*gfcVXY)1SCba5Am5{HivhrD8!N|0qE zMOb1W&k>CT+nr$A_!DKI9$fgFnU#t*u~?E?28eSr%AMdWhDK@syM-38wW-grPkw?8 z>B~Ktt~eDHhoi>rS*D_BjiR?_slhV0%&PR|{;VO=X!s-6O#sX8_Hg80 zzY0#_bx34REvxv1DTT=(wOJm{C33%GV>|z{0IUdv-OEerzMSSGjj+XK@B$~!?t95T zyWvzkx-AMeiW=LM&)+Rpe~LbQ4I9U5uk?5%g&4i38ts5Z9rX_($VVWywcL#Z`04v# zbf+@63Z{S;BP?AZ`kQiO@5fLLOtfvE7FGS0)wicpu!J!4rlEjEx^!jS<%OXZwJxJ& z!;O5xbbiix*@8)a!TsWqTl2R(69nP&Sp1g1>mfwx!F&oQ@W)Xdh6)P553=mZz}7|Q$3yQuXz3lJL#fs-${S* zs-iH zb*RcSrSmS3|Cj-C4AORSH2{F3c{}@n4-4c2xHT{Lgw*Ka>#T9GXmXj0*6eSK+l@?H zp?4lFL!nL=n)C6^zh@*9zzdGpGowlT>a-Fx3RFL7Mg@@%5ltQ9X{nhmErAIL=X(8I z@_;5my{QZ%dbT|~g|zaAc8mcO!wLSoF?;)&L2brz)-26WBeWCZvTw-<{U)=cO@y8v zSqzPR9XY%4GPFir7jfcGm3RKzETx86x6mwueAkl}pc+A5fEI$)KuqW$0LY^!wc@M+ zv;CFKQ!T%hwQ1N(F z#R~jRJBPv|co2A4^Z4NI42jEdoC zxz6Xq+{lF6Zv;P5teG#KEYB<;?CS1u-#W`PWKPX=aKsl?ukV zX8XL7o-s85Q6#J{Z0=6bkRe8c7eUAHjxuo>qd|*J3a}x?Nv>k7A}Y0d;y;f>QB%5s zqyn5C&XCx293=gutCJ1pWIh41Rm5K)l=`W zbD~QaX=)p}L3&m38a@rQ9}=irRD{pE?58n1@UT?`g|T0@KwS7&g2~Dc=6}6j zh9)>V#4;}5IHXh(D*i0fY4DRf?6vCbvN=$4^vAT_*ga&V4pH~am>$KzfPac<8$2NE z6&y2dn}}lArsD&^=AIQzs-F!tw6wRg)tq0N5$gS8@Ryj7 z4t#d`u4|IN_!Y+d|G&Gd)na| z+|lO&u8nE!Xm{Yrv@r1cC~_;aI7bfWn9StuQ0WP=GLBi+s)~IgO)dEgo~L7$?A0~Q3dAEQBzmVfynayr!Np@_bP0`VnRM21PMbB{q_9s7|PL1)4t zL3|w{U22Y-7Ek)aBu2h!%pCHDC9BFGW-xY5937I2x^zz9NISY}20d`GAg`Xmo5GB| z@llO2UWxGLO}N`__Fln1H8OrUlQyv9E;fqb3jU76I;@LOsE`MG(BL8J0e+~vk4iU{i$|AAnFpZY@Z_RSQ|w( zug`jVrx5$hNrO5Xp`Rdyj)`uZ(Job~6!|2FvU#dG5Qh$Ql`+Isu_B*V#Kzi&-%@Kk zD81n_GKV#eirWl4tBkQ@Gx9b~NiQ}0q788|WdvaMU=&be_cs{)tSBw(%_n~hAX&=Q z)erMlUUG$q%8ZSZyc{3d`17D1LP8%+;w2RI;Gq}7Sn5CQ<%D&ALML6Bu30U}{ULni z*C*b?+4Vh|lp+9OvMy~qD_~FmP%QZCp6GXOs0HZDXb%aHMSm^Drdfr^_i58wfCfEk z!Nu9PC&2NX<6js|-TC9RvLVwtT7M*(Lb7+3w`A_Uj;68jc;aUzc@9n39PLDQ-awQE z4y!YcNm*_5c@pN~P*y3~cL&4U&OXcUDst(CP`X-3{JZLo{9h>_VDTj0LUAA>0?N~T z%6TAWKZ-}cf!N2Ug-~I-M&LI}GGtnP>$&k2y))ON^Trac#$YU|d8zij@njR%=pwXX z>wwF-9q`^C*GwMtzmGE!qqYlnc{XoR))fXStYH|stUz^QmDMw9!&d6eV=oa zANLXDpCoOvY#8ip(`7jO=}QR2cyR}hT67K#atbQxjxVc)X?ouGe|zrc*0Ob62PrsY zT$4_L09WTyhY6GNqz#9gO`#3L_{y>Lv5%x0ROjo&dB(`=s3P6Yrj$j{q*{l_iJ6ZS z18MC-@w2h_SLc~v-^AYOcUbP=c3|`>X*hxcrTclxLbr>!IOg}WxR$zhm()oYUG~;d zFm7!V?UMH=d>TvwjON=huFb~XDz3q2Bfw+fZSi$wAEgd3{yeh9GfuX=LNX(T3Z}2VvG%u;Wud{?; z-4h(jt6QfJ0U%vr8@}}{ECw~YYD^ue+ZhD{f;^r6_bau4D|n=^6X};xXeyxnkO(~l zu_gkRLo~>f@qsq~l{7#Np*3@=!qIt!IVw5PQ_2YNw_y98wwT2ERSp_*^)&^?KY&(>E3$Lo1Z%=0fkge&6VzDT|M0NorU7@zR^bZ0242Ugp=Kx!3dA3Sd zLBAR(3{*coXGI|rX(}ku?52?g>oa=z9V=}8YP0gtZ(@-DvKw_1{RNjDTC$tg+JnM; z4nVW(o0YEE)OvNF(1a$&eHW(A0gQedX;z2wW9 zXaJm|=U_4@TrN0iGZhX?mzaz)Oc`092T*B952(ng??y`Tk$O$#v#)P<^#(LLt6p!9 z(yclhn5=*YIDwP(cibHx1kuV3kj7?h;;K;Dl;Py9h9wJFT;-dc&_t^l7gC?xM51g= zvg6`Om$G@;BCV}%6i5PZ7r}qk&J|(C;0xrS?^fIoTl^~8?U*~7p3NADdgISQ)(4EK zh3$4v*(^r&b9@*YTe>se$D2^66V_+j)!Hg!-dq-a7aE->6%NuRPb*?&`BX;`Q)C6D z_N7y#^`){bOOf9!rh2(Spx}=J0T6u@2#8PFZg3sa#Yn2vw1dtv1lb%Q*CpO^9Q1bF zFX>QuJ>*UzkOg>lGT)CY*Ju#tOoF9*veb%Z1?UJ{ZpMdWz>M((-VeQMvBn?O0As)g zc?Onr4-q@{$4k`~`)#if3;X9fh>aZ)1|U}wH3dsD;s~eCT(WzTIQl%hM?fhCp#b|$69ea#m9D`x~>i1fsVE3PE1N%btwU4FsUmjSMFv>Ik z*!qx7+P~=NVe7&e1Ip&mA&YH)MFsMciv`$yo#yRpW0UC+C^Ucs*L~|PKy#?mI<4^4 zxxat-R>4dlDRl@jNdmgt^wA09+C)N@1H+okh`pFBDbTA7EhS7JUR>82Bn!R$+~@+1 z3cl1>u$bS!c^C@k4)Lp_Hro)JhW>&-yqK22&w(<+T^ut@(2q^D-jTzRW0HGO5?amP z^Y&p)Zbr_r-3bMr>o46KoTsk~{?Md-aCf$vpVKA6e3%}O;KQB z{pQS^Tv*+uOBl^MfFlO#x{M3=+?mxt%O@ z%v__GzkUIWH$sBOBEikd!hV`en<8k~SFYjcS2W&eLKv$DGro0)oBz!;KY)E_k=umKZd( z7qen;JYg=vK~it|_&%_5p$5ddGsbjQ2YyRi{&_w#J@}BenRv-Qn@TxF)W3pk$h1Eg zd@_JnE@$KCU>zPY4k5_)rPy56^DcgI6Mi1D#c4&o+`#oF?2_`*672R~PS#4KZ%Md4 zqgN)!q;8pqQ>YkdHc}u%2LT1mL#52Tl~GtUm>fhpo^!X6lo}I7(;4qb+>)~CaYQ1Bnh1@mFtCQhFn&a_ozzn zQz@?m9ULTIxnwK*^I@K_#+{7Ee|_J(&8CK41^(K)UU@7|+^M#;5A3UgdOAZwVU|_( z#D#ZHOeXO_`VuDg7 z%uT-R2i?j7>uowx*tY(tISsA(c54@;b3(!HRkLgmQ#P=e4#rq?xc!@2RZ^B0#;sX<2*dR(WkuSOI*p z0NOEzb95&})%TE)%`&Fawj|FAruv6Ej#~(;){MJhaeI3BLnH*tM!{e{Hfw7C`AZ|l z#`6m4^GcuGpK~+*SordNz_kLSatdDlS@MGHv@#lyu8m9Hl4$}5S5SVa-nM}pR4!$} zO{-yJX2I#TZ1PM{QqpHL4*e8h_15ey80rQ!!x}Y{W+ZS6#9r3Il}!P9A~Aym5Lo@A zfz?z}jk5S70wFpxph;P}3oP5+X7_ll@^tLjXR6=BQL$ z8*#?X%MJd=aOOc2MsgnoG1KZ|GB@)3?POWaKvYufbjpOhOg}dvS?I;3@Lb;2BN5LQ z99CsUI09@tsQ{&1zCZ$B+`>~0oQGY1DXqT}M9pFsDaLjKi% zx%1X>b@>_PloG5=V7Nq~1>-dlkDYX-Xx)&PfGlBccAor$wJ*w~Zzfc*j<@ONWVCDZ z^YvJ6Rx)@U`08)~-5t0J%^Styn!l3fw2W75;bNysA3iXCk&E_3=uj_jA4qchYTHJ#XVNLG&Ce-8>j;(k5rD-&>b-H^o{eZ4 zQ&PRdz?Xw6E(hOO;SaMW=YL}9Itv@bT3~vCbeS8668)2KL zlePI0d~Urd!+Yu%nDlkevt4_N^*_)LR>3iMpPZX5Z`uF#$$-^Y*x{#4@S6S>dHE6a z3ks$9{EITQeQ5&Z&%v&a)sq!C=Gz=O<~D|n&xeSJ8lc6yr_1;o`R9`gBU}=$!8si& zMI&c)F&XG$U4i>8x@aH4`ok%0P@^Lf3@bgUR|5a1m^?o`7|+fJRvP5dp^kbs=lI`E+czRn5ykd^J>aEUq?pRr93!vnm8No$#%?| zR&t3tQfQbu9D0196adxR_BdeXa|>(1YE`kr?UwiX8>3wdh=aD z9i`jpZ#$>c)${G}NLicwNCn*B~X?fUhj* z#sLHCd+XlD@e1K5`A5U*sx=X;v65=^)rRtW%=H3Xy5=zRxfuHO;aL!bD2LkJ{(+Of zPk?Jl)J&OVv|oc{=&XG@Y>LT^L}h%Q*P{%U@XPngfW^(jA}oSUYa(}F0?Ac5B4Nlx zmypIaDAOo|Desv)CWGZ_CVa_X`={a-Kly{>9=5KJU-6 za0DF)B5C1gL;CW0r7N)lbKU%aBN_N8z2jDCEmttX752yaT#kR|IJiuygch-1_ZYzT?Jj9^7abXNG2>DFF zYE^*Q|=rxXhFVUx1%3Qe1@rkdaDf zToS~807TN_Kn>Mj4B~@{jotygq9^!rgCKd03<39m5rCWUL3PHu0-~f5K}DIW&0$`6 z1*F#vHHc^tsdNhLSR055JlOxVg)v63gEl8vNL2-CHX8Oor3MzO=NN13SCZNpA3^(? zwFCgIbDNy7P?=vW;K~$BQnp#hyB*Q5s8<`RZ5w~~l3tN~Pem=Mbjd%HM~ER*lYN;TQX<5D$Q-*b*31~xNLdFQ!D7syk_N2wyZe{7zntL&#))Y4)yoQ$9Q zk&PfztNZ1)m~^rRugHBVJ4Uraa@`nXClGdgMohV<1}~BYT7I;i4y6R!GVSTWauTz9 z0|GqtE$Sf}T(iS8i-#g--#`bo{vMlAkgllJ&p@8`X}<9>rGQ=T{kP9!AZ4l0wamTL zJ4XKxj{|atRnkS{Jc(6A=)@@fkDhSJ>YiqYD3MU0APc#oi;osq7AC~zXQ9)j|{9s>F}XMa%$?O!2CR;BOA5@or?{^wBO zB7e9J?kHG(x}d#EL3C1qhf@LA#nu6qRisE!L&=<^Fv&MY_adca1#PY<10OfZ`l}QF zuhPMwR1p%x^!gOeufvbc8|C?7afM?RQOuFg-*G~W3+MrV6?riZ^n`3X`vxA>@x7`j zRt`D3@0}(`xvTvg zU_fzy_~rGTi3P1$Po#7nxB>T2)~otS+e$TmH*lA-vBH3EO5CMz_X)0vBv_o&#J1(G zO)LHzGsJ_$6_Xi`+dHOt7|K_vC3rEOVjL#y82wa$(E?L%RoA)*(G0{{^RpdK5h_EQ zyuC(B*Bm}OB%C6P@UqB!rh4k`5k^)CKFMhevE)WXPK@S>Ma`*;$<&_K?W14*1o|e|dbc``4JJ zBWMcOx%c}gw*TOvb^JB3I0XFN?CNNkJOw1xbBryqmYu0`<0yI65g2)Ul!+Jvg9DB? z;I~woaM6>x6QKR9Vli2|&a5Pc<)N^`H70a(o}VC9W?%9xsxUuYuAqHoz>FgNQYr5n z4q8nF+t#-0>;W5h}1WzwP_SMnM_a9v046V2E%77W3`c%tS4$arE z2FS550e*a5)LSmP0$PWJ;`0n!*<^V?)X_r5NZsBBchl0EXMKyF!?9S?d%y2;qKl@U zGR<0=ZG%=uTY5!(y#+us2YrQnSt#o%)uQTl-4?*R^h*%{^OL51)u07eQTM$yxJx^L z*XHHc2=x6ekn!`nnsuWh2KPNlK@iDjR}3^`;`sCb4crKV#Q;SG2Z7e#>vOLEVlX&c zhLw(U!7gba|Es_Hr0UiUe4S{{)hUDTHn7ae6f865{+tp*(l^foUj5QyB$BHy3m=Dd z5jA9#MD&zNsoks)xkvDEe17YTB7LNcmgVBrbKA_l3zjJ=Z~fE0 zvfFi1evkW+gqEiRi95^+{tSm)ap_!XpdtpKK`nrne{1>6_DvO7Z0LURa4}28A3%H< zPyQ)$5B69+2Z;CwK;?R6!}47uXH9Q~wG;fh9p~VeYrMI*qXagY&YCZ>i29AM`I@87 ztlB;fn$xav0K}&&$HX(Sz^+T|*jw|u@Y*2K(0z``!^8GxWog;5XMbOSxA}xhM0nj% zTQv6NKtr8_!nVA^6)M_r!y$<%A2s2gI79Y{#q-^NEXSKt0i}w&72SGj*yC!onJJqwEI|vN-!3p0Ow4$fmhR5( zZWWF`@{9{+=n!Gr5Z(kGRaJu1N-X$;4M8ls`DoNp=)dW{1bkDF3@5Uq{1d$D4E*C2 zl^=m{xs;t~@~EN!9M;WfXgc>3`nbMTna%`>gt(vAR#y_dq~CusMUd3;>~!E@^Sh!( z6Stk}W||EAMlw4f}kLr5RO(p3d(p>hDF<+=C$Ey6N%#TqMYn-yLMh&}BD_>LDE zK;MckOexHJCD{Gro6q(DBcChS8(t?WRmK)pk;3WUQFJ=tx|U8n9dl-WHwTf2lDacA zFsIIja|UWspE{rkEo(d~&<=AboFBxKP9gtM3#ktoou0LM!-qnaQee2!ELsb0J&@o2 zEiOr9_NKUY1~Qj=#BE|uHvZ+}JqW6m&=%HlQ!vKp%FB@PCMjF$?0y1puH2QEZX3Qi zfcpm0m7wSA`maGD>_!v-z!3Kd0RoFyZnpP z5WuI+9^?nDKYJ<8YpXVF&ul*7N8+(Woeq`Ez=)L^RT4ve0#le@v{lf+hb5*-9E`9G zebuJ~7Vthn4>va)^xo@=uIMIch4+zM95X9R9B@d=(P}*~IL`$$l13ZrPO+r?sqWKp z%569)8QUL&NI80}G>XMVgORVR_$h^~n%W>%xI$d{oG{LfGJP=o46!5q9YH-YMM zVsgJe<=FAM=rF_;Q6uRFb%m@tDOS9lYXaTu55&wu@hV8ax`Wdrj)FnPHVVmV03Y9YUar9!9P|lsG((EIcuAxx&l0mHna$_Af4A24j2;vP;?k+) zy|DmPOC7=s(fi2yB7P5Yls$g@=3x!%cU=7xz_I|0|Fm&*;W$odob~Fn(mbmmKbV2P zeYFXUZhaprp8+}L&fr5uIjv^nFd^kLXSP^LQG>#8R$0Pfl`(3^$(Vt+d)5E~6Ath{ zjQ=cqByB=#q*y(4C-YuY3?UB5i29J@oGbsJHrkigkFeL?{1_GO{y{A2ZlQ5{p(9lb z`h_F?SaC@j*GxU8D8G#Vb0&$rPdwZ@mf#=UO?*skPU&AQ(Q*BAG)r_Yp|!wxZcLTK zVC#a;{i@Y~Sg>L7qw~ds8OyZdpF+|)Q}3}q^%=|dC3Hd7qbMw`m}?^Zep$j7>JM*% zKcFUq?V*uQfas*^E0^vkESbx{x_(_v4R-w3zb<6)*?GOCE?9Zt@gm?Sfi|{)mlCRZ z4({o@ZiNd_s5T=|Fuv6O+zWt$bO9PfVrm$))wql_dRuQYn!%x26V^MkOln5|N9_%Y zcz?L5C;#N-aL1j%Yt8kmXF;GCcw;%bsS6uwLKRZrTa~Ck8Qt zETJVjg`pp3Up zB!Tah+k~fVF@OSNpyp^=yk{9H5Rz}-l=HwQ65)8vGGg0fT(t?~)=n9c+NvMtO`pZu z1jkQo-3~;REa(s5aFUk(q*u*cK^B4_vw%FP;AsqD@Xh$v@lA*dxuY4vm-52h%+Ywp z`~kJ_Ld)shKsM3MsYOmQqb8+ydhiO=lB)b@I)4I%th(nB5FZmjLz=hHHolxLkF&gP zv_+KhkOo>8=q@6+LpvJ{13$X}`vhB%E|!6#XJmx#U^y~e3zaRju!I4RDH;pJL5HUC z*zL8$%9Y56KI*H)Gn!urS7Ll>b&mhp`UNBYxE{<=QozZ4@+6fRx#>y=BATumMLHze zhcUnwBYEu54GLTffCW+nAYUVSJp1*MNDUvDRW6uIUqvU$_CW_pfmYj(KLiH3-AiO8 zC}zTH6#gK9riKG(Dsq8R=Ylj)k)G!!TmoqA(_?S;)&f4TU{g25@3T(bO7A*r_*s#` z=!E0#ou@s4bUY*npF7Uk=F$yp#1_Y7DBL5eqaEJL;QdMZ)QBO6jG(^YP3g`S7sM>c zfvexjm4r;;3kC7+lX8w9UP2!(@&mqGpBD)oRUCOe>f#{DmMLAfJyB@`WN}%25FsB0IPz4G^8#e--k0Hd36=B$8F#|#`BlLRY|F`>_Rfy zt3~R52iH32RDlYyTXFASWGU=p8h2k+~8wa zdC1dhkml%N#iM9?bZPO*zrd$sygC@XvjDi6|9mjTS_sdhH}a|D=Hva?FI%w_Li z)@**KZA3S~j8A_%m7DoMP?;1-;)799Og_`rTn)qEY2V5&MP`=pd`0WDT}>SW`*79j#j#^6470 zCx@mJ+`l4Fo@N2Gf4`v@FrI}fRjDF<>^g%%NhT3o{2`}>&3wdmA)A1dI-O#x-+KfG61zQ58tHBc_~GfhJB(+X=Cvi^71ZG!{Ew%qK^xFku{>9BQpSRPebZ;u`^ ztt|)KgwJjESJB=7czWxgsJ}m6cMY50=T-6_$>-Q5UMf~0hJ zhcrm+J^Y^M-akGAGYm63yL-+%UX_Sy9i%`o4EDy)hb9UOoWXHcw@Gaxf^xLj(QV8? zvG6>G__h;}02Y1(<;Nk65{hI%Lx1mo04eTuy%+!;;2VM~Z$A*-dXFiv5>LPq^Rr4- zOsW`8H5x8OLlO+eSCv|xxG}LZ^kI_XuotN0DD?;RZ7!I_>1%)+j`Dm}nsjFSYOM>D zvjLIy71r6kEG zgG=OU&>WL4o|m}Db5cjOH~p7EyLPT1tkr^0T_W6&ws?w|`is}M+)kW+b#V6ys-g`> zuG@Y-&!6lx$-uh>(UXG!k+C$$DJ5h~wQ$ zT%0X2l$=6eapGSawey}(*Y(SC`=Tnzd#=45-N8gv=67%IoWol3OGOzNGA24Blh2}b z2?%q9j1!p_I{yG_v+Jl8OJ4p%JP&>a9!pA-!QtFXP7D!eZkhW3pR?_05dbhO6IA9fl`xAk<-nmEmMnIU9C5GPk7#Y9#IK4cCHVNq;!8GATYKklZ z*5EB`j8=6WHt#iHLh>5gz+;mXFW*Aq_O*p8K=S2)@ zVUg#Y<(Yol)ph;Y1Pp&6Kx`PzHByYN-1#lKdvJSyj`Aj~`1rn*38bIX|B3GmzC-~m}I`fvI zM(*{DwO%NVb#WpS&$!8)r~lhgO~-T;u%Y<%ZHQ&|Ii<+=R3Q;9PG)12{Ckh{&(;Zp zbEVulnpd|q4eArc^;J}lSCDoXs`usSwNY$P3I#G#K$XE~&53t<7 zC5js63c9L>g}Obwx=?&sVY~^#*5o1Dium8pA*64u3c%Hg7+%PzZ>!o1f|b^LHzjxe z_TzIR7~qCm%RmKP*(5oV6FnGnl_?RdWMX;7C-Al0Y51}!fG;=jMZ4LvtSLp^I{!W% zW8>XI#3W6h{NE86QQJ5>pz!9x$27v>E84&+Zv^fcY*{=qHa2&OFxrl5yM&|&C zPa5|g&u_!l*}W4i^&z-mUE?P}kN8Aw`*!J>)C;P<#Q+6oFQA!Vw$mgnh-JR({haVh zL@WA>2Eue$i^6{v_7p2aA%kw(pRapOfUhhg#x)lU+goD+ku%laOW6|l4Q{Z(Y#^YE zvBy_!DZx`f7D5)L%xa*!Qk9hZAYF&wu$oKcxT7^uf9(nJNvZ=FS+lhrcMM346s#9ak`%X3nS`5r5T=gdM8I9bv}U99;{?pw-_WOmwDdgzcg)s9j=gFG$sIaVT?1`2dq>GTuwh0=R3agy z`}k^-L~FM<`%COE-Z&ZZ*8?geQ5o3J{?xRQo0IiR!O*8EI>xBLu+1Zf?;svbXF@Eo zcM>4VNw?D^!1pW`s8Io7aIB==uT!EeNu8IrR4U+nu2fwLnILon#3^{Q_q87SBB{%f z@WQPF6U!Vh(>y<(n<*A+?hKbE<1*F#F2|3%gRH(d|1y(5Huyd@W?0VYc#hFn^1@hB zmTFF%t1XvTJ(BJt{;~gy7;1+D&NdknxZm63Gl9<#YJjruEYPZ-h{h0V>MKw5)*m}F zjLwi4f(RPOmERf3AZWTpJ;dsmO8;QzXl*7rh|dDC3ZvarU--PjkE#P#eJ(Yi+n}@f z0#>RKE_*$`)0gcV9v5-x-@s%EHPHIuo}_iIIIANz{h2hpF2eR3->7M-Nc+UuNDrP| z8aL9$iA!&g-IMar;Vz?UQ0aJSuEp`thAp}j5G(^v;fz^oZ8-wc+j5^^5+Hh|8%|Og zwc=es9Q*wWK^53gwq#I~ROLrj#W((apGWPxZKR1J6E5&FfyxpW?+>d-? zU15d?DA%g?%(Z&Ej`_~?jn((?k_~F-OlX05YPNmkyKC##`B4Kn_xB?9QmIjy`aZs! zg^67|3T}TsPA=8EJcXtMs%fj%UTx-cma9UvT1r-Hm#BoVMyjfrwy1=q>w#)J?5Ln` zH?>I=S~PAgHqynRvTK&qdI6bi8J_%jQhW4JPJd^Xx$Cff7?}Z#)|X+yu(~J9x-PId zr$dSXn&L;=i*=VjNTISUi6iJS({ocgT=x zqI#$~IS3=>UlF?Et0xQ#6`YSBD0E*v&EUSedus+Y{*? zD^j|EB^QC0wL98$d}fYL-O;>ww&wuSVU%SmR`o%OkyRJyo6e$|?3%}59eif1pvX)P zY(BOQomK!&c>yRk3l%8F_)>>_v-bVWl}5$`m*U@d3sw|ng-tFlg*;3*=`0I6k;x^F zEzkJR+xzppEdBuCM+D9jGXr=orb9f=G&Tz|FI(rFNTf;Sp*TGkWVA!qOn@=NbPUWL zy7?Obl%@)o@5}k0+I~C+biVGV$s}pJ6}}Q);k<79mciG5-Y%|I@dsp>EIM$F^2{8B*3j7ekuMhfa5Q6w79_@csI)}D+mSxahntktNiRrO)j`YlC z^gN)Mji@YbSLMyFtHK&{&u0#JCwF|b#(+tI2uWGn42lYvxvO($ zz?TE^V}#X@rrFQ0l5E4FP)KFa@!h7%ooR2s!3yUN!{~}1wbmw=98W)X8%uN(x$}9( z5Ri9tdzS;0%zc;HdfW8#1yf0(ee0%dW*$52{{aKC;DpGf7G@e&{YE`hjshKt4{|O& zT-1A2MS|m`2I$QuNTd;Yc60=v z%U7=TS2)&xGdI;|h51~XpW(u~=%Ga*dI;NvZ~iT8tM%}^`KAO_8!)!023`RF0nuF@ z9tw{g%Xh?MFYySVFw>+C>rHui1X@{J1`ig9 zRntlRcNnA64Da%V`=d9tGFie>e4nrq*|8gfONjXurcu>buF@B(wxWFzI}L5xsbmU; z@OPAfHB)h_5Tr?4{PIsP(PEC>Y?bRy{vm=}L<~akW&%v~(x57>pYio|jyStCA$-Us z`574=w@1PjHw?(D?`LSb6S4a#B9%bvMbQ80d0h$rHlN&u^oVjqIFt9xK?1*r;p(d4 zyrC>2!58)%{8i{e7lBaqrUS7QAT80MbP>Q1>hxQA>L~Yn9_~XNRo0DXE5QpOR=|af z=iC%6TQ7Sz9bVbJTz&lS^vT8^v%-rg>n#(;2T+(1o>SNQdZ57Dit_n^pc_O26ZvU) zzZ%k`p>GzT^uhf&us}}r`SM$yZSJ>YnaZc`_3co%4|$1)yZ6ZSuZpV63h#ZL!&nQy z{6h8S|H%EWD(m{oT&E%=I8%;3jISGQBzl8ePa`5?$sCzrFk{`r2r4-ZaR6TZuQ?Uk zWxW=U6)u<$k&Xa6Xaf4c59k`TrMfhj{;IKFF1>gEYb7_l73g4}WfSfc{wOkSnJM$Kwh~FyvVcR1 z6kw~vz4T{KVs7y4tfjmrvmQi+ohQqF;Pulrycxu7V>m<`+`Tj5ra$?h8pDNWy%kFx znBK?*4b`t)^r9gl2QJ716+ zPbMG-O1l2&=vT(;OSHJE6}219^zNs|>*JXM8_NkJ(W<0CADj;duHYoG#(x>k1SqJNIb!JK(s8Fjy825=8rj zOiEa{QVG#!$_L51q&ZSV)f^6RnK9;dXAzW0pz9I9^C*hzykUw5JDG15CxAsm2Xy_C zsWpPol;0^MyQF&%k8XBky5Ej(c%%VNho6&{Wc5DpKz9aE{={}il37#ZYBlgR zqfwWena+NPv%S|RdBTqGjv5`ueEZB5Ia+%fsTz11fmKcI^U5rsJyxE%)s8I#62kxT zD{2ir5tw`mB`J%i>Aw0O`!G?{1_EoS!54B^2kjLr(O+CaU>Y(+uY{U}j{OzVhr1H~ z#>x4JSH&5E+a1|G6xoziX?>LbZ5IQ1&S6r_%*K(g!`@fHG3Fv74V#vG_}a-2~ZlJzBB%(BV7Zs z9X|gr-(iJ>QI{g^q(Mva;(; zIpL4CU>ok@N3d{v=G+DVmGlRz=OmP8y4S0>aU&^@IKU9*_3oEv&xdDIdl1*Qe&pA- zLUoCH`=-s?_$B>>sKX@eV*U9)*(+m=*w6_fu4PoAcp1@0d^&F8&5&+()!0x_4{S$i0BN~zpVI=9 z;8tDGgy_Q%VK)n1RnagjPX#S^3EnTFo+==a!; zI0v-b$c5$xuc#@|P^|{Z#HM8fVG_V?8lLei8$YcV{pf0pd?9|#R~gTIqUCKAoYz+V zfPQu@SXVm-Y;_@9zHfBnhI-!sy4lAYjXlwR+~&%Ews)t&haBp3e#S}l(9d6LBKZ1& zv=UW^(y#tUh6u;>CZZ*JeOF#RB~M1fS-J|NU+GDw z`s-@cX7h!dKTKg#aIIGKKlCk`7Xk7lT2}tcQu}mS? zBM@|%Gv%->(D;(6mpznoIFw_@{ebHfjTodzTcPwdekWwlzlR{17J}mPVO917gQ}DZ ztBr*gmktlaXj!q*q3HH^Q@_&~-V0f?z(;qXd!&B ze;rJA=*7_+bj97qavi&MebX3wCiDSD#&Y{nbiBXqQ-b2=k=q8C6d3xl& z$?&{MZP-m`Rl25cIrO}C8%^Q08U39p=6&p*;Qok(9O0FVx{o{=E;585|HJ?vammtI zwfpvA+4nPC?}U)#D3kIS4V>kD<1EoC>#JW;R|fIIvFBXyH5yt_n+*MN{ei;y2=^C~ z1cbGIp{H;NiWG-68EQt!*h&rky5yOPkUYojQms4k!-@QIlX&r6R+}Vb)eP2(^!AIJ za3KxZi{DVwqLn=Csc$bG5dXG^wIZJv8Vnm^#|ONSL{Vo8cIdvjwyl~XD8P;Qo&{GN z^dU%+Crp!IiaA+Zjoo@<>OAPpLn3^HK}gWnNRV6`)qQ9{l~WI|ZP(S6ZQ5Vu?pvjC z58L}g4E1FA7{pL%hDVv)`Xdr1eOzxiEy1tQI>*{Mti zo7WWxc;P%M*KpY!J$4^=;d&CHk?0&iXk*l-W@t+9_hkHjPI^pg>o&{HXdu;!1+o{CN!WYY*#aLbB)x-X)`4Z6qlE-Y`l@(ZK*8$+q!LIWK7|;-u-Pvf5!Dtc5KTXh?q+C z8&%5iuYA$DO5bbz7&N|$XHS3puM&SR`=6OBP=+|W~)8pw~X^m?8|XeXXl6a|2h(nARjnOu*w>`a$H7~ zLp<@8^t1ID(+^uCuzfv;M4nFZ_zbGQBWZd!`p~eP*f0K=P(y^|oc^-vEP=S z8mui7`E)tT8MMz4@n-Uf5$xukGMW*G?PUB+sFR+!6uuS1m{_=&y0Cs>!7f+6T7>>E zYK+(On||BbiQAG$q7i0u9~>#W$k|!HByK)6n|t%H1dFTs=r}x}v)D_e6O}hx<(s|x zZfsM#|34FQzMaL1UCPfA>n8&}tr&X2#RdP!B}qiDMJSHjD6+E9KM#m+M}3xanykm| zP)$$mDn#eG5F+z4K>f)nBIa8#aGp6W$IeOf)Un|6Bu9ozp7p}0$2VM+J_9caIIV!e~fe%+M%Nz5b zJ_L7VF;8sX`9k*#m$R&Ay3nxn<&gKmhp=ZYWrO%ItI3^ZyN4QvA;u^{4TP6Ku1G{LL5* zWI&iKSBO6;?zD$)X7EQiW zoIz=3(J=zZQp2tuT=tAo{ubvU(XQ?q?uK|VElPFnqtE7f>1%9BtH_48?2_r^8%kIH z`zCa}74#&Ny;lzxX{@u|Rz6;tq{72`MvRfOmh43%s1*qUY8t;jkmMf3t`|cSh%_7s zr@3^E-lUjrC%UeNi}TtnM3K@(xYk8Xk*irsopAEJlYCs>}Tzzd(tHS}_Z| zr!T=y!is8`nwQU`i$1P^TSE{+@TwZhbAaCUjulN=prUl=j+esXIG1gbII=w=F+PNn z%?qc3Sfe8<5_QXu?1LKaMVA&du_8uY6`DKE`Y*$Gj7v(b$m_A@lZLTB3DfQkdD4I# zQhd9)H|dAL7B%UV(}fFG*-G!jTPgxXtD#fLj#w5q>jI5cxHGSTLhokqGg8XY!-A}51`MoF5z@wlua&V#vw8SzJ*HJ5lS_@(Gg zTK=W_r@6=XK4MfZu=Os*nXRLUk4O{?Cc>M1N~MU%gz50I6&)YIpV(|$6q+!y;R)Q} z<9ve1z-jFBYn)N@`&~<7Th*vWcPpww6fQF3{^(1$e3B5P$7t>)9hgUM< z3EIuV^LDOp55bb}boKOGLDV*ywTgvjlJ-A$s=&{zh*|V#Y5HD;0n#-RCK`izYvJiM zk9H^YLTuTZqWoJw7$>mW3}AY)Q6TiL8<(pU3XvdQelJ8)PSq_yn9cVY5qjzBSqW6I z&9PM9q~8vn^sg@NLZ=At;Df?ZCqwJvQKUz4jy<#pqRI(2e7`0^>rn}WBp{NoShMnU zo2HLSv?Z*xvSRj1y80SKQtSwbTW*xQVrnFD_E0N>%7H9I2@kcdjYn?|!GNzP!Wg?a zx9at3pqyxa$<{W9@rC?*%nu`FIy=|72`5_<*UT^%_enaG|>=L`J4v!3(q&_D#NWCp4F1Nwj_>F zED;-iPU(ryW&R_raX9y#ZMZwXLR$HiI^wy_Y1D`Td-q6RQlfCG*T>%NoHg?7|J;8R zR}qI4`G~>vnqB@%5Nrz@_Dg6ndtULgipL@87x8|CKiwOElvvUd%Fu;3BVMU$N-sMWX>2 zb$x_?;jQSuA$7ht#cPU+P3YPbU81qbNORH){uG4?==Pdsj zLU~~0Eq>j8B($&-yj?vu=e(4Nu2J(!X0r-QW3JfgQO+mF64N(tuHU8noYG&SKEk{8 z+^EBhENJMoUd@rpZgv0atev#-7ne%NiS3(rhhJ=#9fX@!r4#NQen#wa;Jke=Kls}i zEyJL`)u(Dx@bqgfPCG99q6d}$pJ5gXg;~4W_rl5&&|LWz`| zJ!@KTJtc)sp-N3tp%kzEq1P1?yLIt1_1FPaxFoyFmzWl7jv}zV_T9h)A30oF|*U_J^zvh zbckSrzEq0?Iw_>NTf82NsWj~}_AU*ppaMf{x^qIjmKj&q2F`WQ(Vmi$XPzq(t+EZTx%zI?Q* z_iK0gyNZ%6j(OE5FkKdD$ZM%SurXIAJ#l2SoH^-RQmwhj2Yl&gnK0EF_h}zF@9ZJC z!JO`mU|?!Y(rW#wZuUk0uxQ3WF_iuC@K-iBsDvp5YB@S@6yDS`l@noIk*x5^$Op5P z`@5UHWEie~8KSFRJ{=NKoO#9lC5{@I>E|2G71;(<`#JgwC%Tt!ZNFj}nCq9n@3MyO zX!4cWGUdpRBgC7kR<)ztsQIepBwVF>($^J-*qRE7R3a#Z(@F~!e&ia93)JlhBOsT0 z6NeW!$Aw14BrTF~HDjrxBR8`jE@h>%!*Acyc^w$nTRgqsMJVJZo33Kr|JeZ2`IazS=i8v@wDa^;!4zYltMP?VPy%19pRrue!B3nL3_99Q=&|F zGb0TM77PR9YE7axXM>6q={g|I!7W4zp;~rE25qKVea?T$F&y7jl2tP1H0g zd%OG{rOuv?#BbJW+BkcV5F{c{qB~ztnqf*zpUt}8?z(PVuQCrDtgJG?Dy}#xjnchGr3O0~ znJxJJ8ozM(Jj5aLG3k+}$+~L}jF)M-M-gDXu0NW^gw@|`!3>%sJSH zROm({K%^POz9Ja8RS6tY3(y)0OAjZg6PZzQ!CEg{6=y?J(bt2qolP^uqX;X{`b{&u z$+R3${mh6H4?=en3SMg{M6+!+UppAAw#FMvASaoB-6+87SenEl5@Ci~a}qFRE}p&> z{qWFE(FFFTzNOvF>gbCdt@l&pI)1)=y8I;bMr_XS~8IHvIzvFuw|aAZ|#9 zsEZ#ZsYVlivHo}7!%e_fX{x?Fkj4i`2bUL?cs>50_!NRZ$8k*#*DrkiTFg0H`-8TA zq8J|`a+{yR4vRjRlW;_~^Na6nz`TX_DCdVZaMOt|N!se;v1`O4sX=^KA{(H3R7TvZ z{K<5=Z%RxFtqSfN<6Bewz}(u)QhiHE0y!?LAVi-_4BK0?V8(xo*wyj04YFlv*qx^5 z|0j$XI|DtoF`ST{HuvL3rY(g$AqGjH=ERvWA(JMFq1VPW41c>t{k(+yHb`|sQ`F&u=Eu76L(k*);o!L2T1K(|WfAc$TwDo4roQd% z^WGaBNaL)zrdhM;)d*c^6(&*tq5OVPk(gnd@t2JUv3~VmYn1vc&Z!Ru=qv~+ z20}>jfO2sVs>18oNW`_$&V!?M?dY7zQH)>6GQG`KTS$MkyOBalREe%HNb9eYUEH7? zSSn7fK80&ZLHwzr`mKR(xvQf-O92O6!UmjNntQQ>0R;;4crmrQCy}7pU+En*ZG%2Pjt>=)iUM3G z4g!$={8^C=Lm^;R)cxtFF-G0hWchnX3~vq`i+=|Dz56Ch4LLqL?X89c4faNd41GHi zcn|way+Nb*O}$^Ff&9Wd@pah|(T2QQnDS&=1^ zXpN+=-P4rl>Kf$=P9(wUbe@Op0Qs`3;@HNr`vb>6P#kN-An!vdt7d8v>bxlWzMfF% zlSJG{-bx{od{y=mhmX)@v#tLzh=73@TKZZc$P!x3uWN`@NL-Uk#W$}j=V|M%RD8L$kd9=brjxEtBm0fC-@Xc4v`P6N;g3wS z@@)dz4(M6~)$eoYhmG2py40Zmk!1X`>9|M~+{ODQwgi=uoGbrrXjqYAm&F?-Fx_CN zi1ck1!(LFuGvLmbH(LX%ATl@QqcTLucFEl>WmwTd$S7l)W7R+Bz}R*x7#!M){SaJ0kZM3S#BiUx9MKr@IY>xifo%< zVRPYzEX^5~=4m14Y#|+z2~nK(9w8t|ovZ?PhxU zH0NC|l<;pw)7ksp_Rmvk-tmlhgC}{a)*rAuAZj7HOaA4SO`dRGP0uH1@&XLZU%v5V z-c%Sp-6-&mu?Dz21>m$UYPAIU%0IXtpYaXY?ro{>sQ}N}x?-W$-|lQJh(j#_^nzZE zeziM>=P&!fw}M@~jB?vez-sbBHib&WS>G3~SIEh+(JFAKPvdK;smeC{f{#ZU)lNcI z?LV#P9P8rvwjcLu2Z+l}8lF+wcc=nsyaq)V(5IK6H=;Ohv8766xVU6c5^hkreGAro zKZiX3uE3$zB?WVN8?^VAuzpS0u!B6*GFn!mCm8=~ov|DraOf&pnR=(BVTTs^F7*J} zC{<>F>u^XbymYea;Yb710NT8lY+!e(wa%%NdhYtGRCe{qhpb#<6|nQUn= z-1o=FvwX=|e8p1n6djA!;yQB;xV)f|2MGzYJ7)%KhcYEw@hTWCoTP{U>36ulaCz>d zj)~*a_+#?~Oor9A4wwhxD>VTuw%YW0r-WP!r^W4T`ctryv>#f(=1WoyD1WKuT`=Nm za>d#EewCnvlYKvn=$?_RDH%J05dMj3@wLy@4;pp)ruBT|sK?zUhfOO-wDSF~BbIuv#dTr9r*XW8mUqdqDj zjB@t6lt6(bJNz2dlUF067y)XAKV^mB65wSI)WMTEbEYP5u69`9`g@uX_sZO}6QnzN> zoybD~KHSvgKMVr$>5Qq1IvIY-?kIZs_4c&Y@A|8k6i;^{k{aE)PgO{@h+*hN?B-jK zB?zH2;|Kg1f7owFus+`boR$q<-2BMVL5AA$N_(g{6+SHTN3OV$F_kS<2D-ks$wILl zPt__ybfcV&iMLRJ2xfzHDi-hbLNE*Hauuz~rCa#|Gx@#VaE~o@Exu0RpDwR=_QsMk ziQVm=h#XZFo3;nL=mGda|O`+=f%jjX;C=AkeldJ6vOYA62R{dr0b z>WhiiKmi}ug&rOQvkUeko2ty{9l+bX6a2d=D*6% z6LR0S#V@~3T$d8C;)kk0!h|CvUwWm{7@qeibl~dkn0idDNm2$4RlmG;V3{zJ)`(ud zKHT&FrI#xlmMYy{O&U^oO>)WYZnpDzN+ZsF7{<2mSlaL4|D-ojclEvbbS;a>^N;)L zS(`@k%ZoUa$h%K9$Gx4aY#&t*Z;LQ^SRe_hc@Mv19CwZjdurjP4%CJ~_fdcCZDe-V zowsdsjsdjMr8MP6Zn=TR#2zJREW#*uLvk7FS(;z1Q?eLxnF%p5rs}bOFv4;;pz)u%Ga2wFgB@k9*ZRA2 z2h!-!yh>URGba`_G&oZD%2(wAq6q`z)!J3>Yb%4D{^2>15UwuAm9hE=xgi{@4N5jWwN z(xqxXWJ#YYbVWFLMv+d#LfuR)#lcVZDQZG5sFt2WhNQBjviAaI`Zo}^WmL0^dwlxX zh6yuQh<6M;%oo0^l+~gm6r&ILgB@$!U2A-o7!2FzGABIGiPD=qAu|jqOj4m5ZYx|R zGaLoC#Hx6z(Kw4Wu2obfEXaS@YPjz>xl9UC5KbFHYv#%E$*>L*KPw$$dl7YXJMXPk zvi7k?CAWg|vv>$f)I(&N!+&x*(QHLVe%A$dv<|}(L{JQGoO?FamAiYSHO&x9c-gXn z`u@^`^v{c{B&5HY_%!p+{gd5$y>gj_I&U)eUY{%V*>J#*ow#vQwzcVC^314l>5xv&y22Y zpvN@5cgcS={duh>X-``|0E*5 zMrY`aCwi}Fi=D0~B_O1S_0~n%)3nN)=Ped-hIK^xH2k)i{XN`Kc}Qf#k;ep=79`|b z6%dPlyl~edKP4hz{rajmZK}c|Z!!-Wi7yj|*awes*!_#xAV+`id-@k5PnPDqHvblN z7e!0ovjR_7Lk!)09YkDDqN~h&nS>QAr8>nd+l_xS{04~jdoOHPuMdJ;*2be=6UjPH zlNCv7U<|UVYabRNMd(rr`TchWV=470*O>@o!7H0YRja`8%!ghzi>BHt*Bd!IC|7 zb{A(f%S(es>IpBG0DV0?CNB##7AD~kocFL`baU-TJEf~}BXtx49ZHdT#(zFOtImX( zvSdaf%3dpv71l^dik}k(a_8C1r)(*rJt||FvP%#mnNQbs+!RlfC=|Vp2yC@~rg!RX z=Doiud}-aO4M{-g8!&n2Nj;lq`U?}1plO0m0B1gWK3*N;OKZtGOBDIzUnQ17u+DeK z-I1Z7eR_qZ9#R85Q32^Mo1Pm1ETP}YWGiB)@Oq~A*W@H)r83GW4W_$9b!u@#1@!c;<$@$zb8Wc3*HwP=exw|{4Vv>7NDT@blAZDjeAeacWS z8+Ge@kQZg3W{H!T-i&6wVm6H4EQ-j$>cX;ut6>Oy)Gd~7X#F-EX!=4`qVhp9hO$Xx zza$QGrB4Hi#W%VClzh-5(&`XUYp=#a|1WCb3;NcK=8DmwhW4xB`HZG~_SVZD`(my& zR&FnBZEZ9r+xpzgf0ED_>F_~q&JlSpZYh3h444_QzmgVey+3}gYA)u7W3rgVlE0%A za~OlEV>g1$+=s^s(@QA}icKxB^t1W?s#j5hJG93GX-hKJa^^ro$-nESu-w8&vvJM$ zwM{JJq#Vb~#d{7+k}Lja=p@_;F#>D?cuTvJ#;A2wY~!M1GSo74 zA^6_NXqp=_j36X)G7S|1;AV|w4!>47 z2}hWuS|*0f@&sVrfGOR=cSEhqYqH>99R??Wh< z-D1Zskt}cEPH=eZMtJAfzo8Dttjjzh{7Vl@p~FJAcuK@kH(9UxlSTuHh*aqygu}8Rj~*Y$LcIe`ocbfA zPDhP65S!1h%G=GssbV&~q!GE;GO;Wk(+ zYUTu1^Ms2iQGR&x?p+n%-r4Fp9?M?quwW(xOz<*kpuTiAHf3*;%%S`X$s3(UUm*Dp zLHm$nW_o~Lu%X|eEL!Xpm!|sOBe9aEfp6;2jjHb{>8W6qeG3zRt^JBUYK?ob^#kwV zn%QQ)T>)Gawd={b`ca2tW7o$ zhj(^NVqu68shf6U_O0&~e_ca6f65L7sN7}G`S>A45b>QSe;S?dU?gCzcodAT>!DfF77~3#<8IAO9^V*D5SNWzDN?@2FLp-D~ zws?4jgT}LbL)5C4T<{OE>o5t4M5hHa4Bb2s^>c`O{z z;Ua&k^82fbnGz^@Z3cfRhR*B|;h`!U>9Z3ko#BncHD^!k$my3cF^V*x!gG7r7QVy% zk06qijY%cDIFSu2t!Bo9GhX{Xg+J$(a*&v6r9q1?9hK?cup-Q!^jfrtAjl&7^5wPt zJsm(||Ddajf*a#~atTWd(jQ*7PI2><`f^AF%jW^VrsTn6eTCpoTazJ`GK!391w0}Vid+^2}2=wT- zbt80|Gqlt?9u( z#l3ElIyVJBUc%)OP7g4z*@B-V(fQ)rKK9aFud7B`wix3p9BP?_<%8F|$oO*r2f3Kh z<)b?q-Xg;jDrCI#xB*fMg&i%tfB)5{X5yQ12eqkpam^w=MzLs3tPtP0ItSVLDMU)+ zUWESl{>>Yw)DfNh;=CVZkwwZ?cyLZ8TKoiihGDTD@xqqjSnOArMF1WJ^hVwC7c)j< zWu`mrZ@GH{E3A+8L{R2zUskDJ4byP45+B;(@nxs^o(7{V9|Q8uivSjr_KICOvXjP8 z363FsCjR!xk9Co)G}?PX36m+>|7;&PEM(fXk*$>R7@rP4H?jhP>6O( zN4U7%@=-pl`m)jbF$(Z7Vob%(EFzY-tAB1mQO$Gbhvks`683cZdGunbtw&OKjpzvo;MS zE>gyA0t!4oV&afoH9)AJ0U~Q7z#nj1U-L(O?iJj#{Ajz3+h;ZTOigsk+VsU0mEL#? zYa5l8hftPj7_gMh-mZ*3mf-1U*y+ALG~P%kJ|AL*Oi#+0jTt`H^F5|D|OB?eAqFha@^!!sAezY)@JD56I9E`D%i?nB5u=(-c+W^`-{O^=g zlMH$dK2foP|9;C+zX>jsoS1pBxs@NzLpd<>G$EU($E53ky#Lc2rHe(6r2_z(6D1Di zWlbJ$hb0J4$Bu7Yw(lE5$Dok@EE$|oaVEXrr7S{_B21zy5wR#rBM1C>VSgw)62ZJ^ z^&o5<&6KcohPZxcEDaT!`v*;fcpEW{h|ZL6O9FmeRGm)0J}g7B2Aj=3%g)TGy7=CZ zOUIp)t$5wSemvO+PET()BAW{dQ!G1Kn95}Qz_(%Sqhg@x8rl zEbFnK2;q_TW;OHhdx+tYL^qA*ADcdk*?l}6JMncF1f!2i@l_csAAa#VSEONe`tEk zsHnd8|9fa@!~rCwrMp{TKzir~>6Y&1BO%@0Ipi>ufRxf8-62S~G)M^l$g;0nC z*N2&VFTe~2gVu+tRE}5-=$3YPEqV*)lCbbJfj=QLCSvpBCw5XIP4mpx?b)XUu6;Ja zAb4@6(aIR@>1hl;+kzF+*=Sv-kv_*>e&KrD=`J)V@K*DsRA+wn%m^u{sPeMgHA zJ{-X&peX~>H+yZL@a|1NkXvk73y#p)`~^n{#B6boa)oP2w~%cj#xa)f?FUO zg-I(XHK@zUZl&!*c<7B@-7djJ5|$p{kF`O|rRMACax7UMyZ)DiRA*ADPm%i4;W+(1 zGXLkEgqWB2MDa07neIvj2n0O6-1qT+oO2g%bJEs%PIWI`wA5^)gk^Tb&}AdMPxRjG z9m5u<2?a8kiHa*G{(C!{^WT7&zT*sm*8H2U(_hc-!Rvq|M7jQK2afRj*d2K`bbd(} zxXAPSAZ#Cfs6ff;4z;R17O>Er%k(P6=k3Q#af-TjX`qBhM#3u#+MeGD^b$I(`d2d- z$8?+8!oi#c-$ylTSZ6+vJf_?BBlpiD%f5B*GUXP;(8FqYLE(h( zD<`f+%5)g4%;h`meVDLDSk&0DL*R5zZzK&K|3 z9Z$dO&YI-X?@A0O{?Q!TEGTCVGFJMYp*4j`E5cqiQ;{K4D3Pd%Q$`*RCbx4XPp9b_ zYGRc43wy_XgKsDe0~mqmN&`M04zPNzyH12kvfOAEzNZ`ecH#`<+G%n2_cUv&XB(Gl zo)if8o7in~YU`r6LbT5yzc_8x>F6*#9HaZXHg8sVL9+Nm;c>F_zv2_%IiEr10`_m< z-%d6rdQYaeZ|;Nlm+mLf7U@4UEexYI?81}iW!;G?*sqYxC_}a-(v`!D-P>*{jwmum zYG;gwfh0kZd?+DP`FJ&N$jhj`3Gi^n2%__pCl_xA;i!*;7M(g?v*I)y3x+nC$JK(# zjF0SjP|8BdhLA23g0FhbKkD2~iU;PjMjJ&E(j!N$`4@z0aMtK&YLBQd+03#wTSHD8 zYw>G7#P1Xf;Yq*Wd#d(f;DO-_$2WB$$Q)|potolNCJC6l(i%v6CO~>MD4%VNJ!r}H ziT~8+zjPQ!Dx;-_mJ%>&_`FK1Qwr8nbJ*9 z?=&WFuq~2Psxy$8a|g`1zmZQJpjhTzO_0Lq`M+$!SJ6XDT&f33Kz|)6ej{(J&Q4u7 z64cvJBkdwHYR-aW8d}WKqkS3pos_!3l3yYCZ}Jaz5C6H`hUd=Z1ZI71!In=|$fam1 z?1?P%DLB-$zDNWwC2iH+8!iEVnEpNL$gpB(bS`*lf;Z#Si+yBn;L5px6nmGo*>PH9 zi27&J8gn|^%}>q>I$E}QVhu;N;WVW-M{ix%ze)D%cgAnZ+~UtD z6-y{_$WWAAHPaqV8cj-&2F>n%dWQU=2UF-~+h3|axoa^^3j9rii5P`>rUqGz8 z*aU)gU6I_I#KplNhA*z008(92*VbUjXWPI%a(9szGq1o%=oSrk>xynDpD`A4F$6e+5&AsHITaosyD?BgT)y?-ldSNS zzlpk(YD(aPBf)lAd4dYyisrq!7@TG%m`=xg4!hySNU&{e0onq@Ui!#+;~mKl@%p&#CfNzheH;oJx(|hxy#!Yu|kHww0x!!dp%v#z9Wo_{%tV=@b3bt^Kkt%`^HU)a<;>Yh@$ZctD$QwE-U5NyXBmY<4O!Rp z*|=M_e)+=n^9K}TmJrJyDEv&Z^#DOs}?-exj?k?ms*oU`1n+caB`T*Y-B+VP~74;N6n z8aSciRyho0sc`+FU6efW{v&3x6kgWry;uR6-~ASzXa{cj5C^osNA9=3wi069Znc+x z2hmX_L|5K)Z?g({t-$5c%2u2MjltIKr@QunJk5^wG`iF+-)E-Z9VP6(U27Gqp5;L{ zA58@`i;2-vySPh~*;+VSkl}!MoQ&w2o)3|N=Xh6ry1CkHHB30ZWwAcm0OHI&+udYf zA})wWQf6xcn7FPl;{1r_4l}C+J$H^L>le==tPmKBYjiml@0@eRIV0vLt8J}*ZVDMO zW*X~hPVMIFb0*A>cQ{PIW%KJ+1hs2T;`-7D>Kg)7eT^#vNKS$$2&-!|&vT+(1hrff@xM`L9@8|hoh!ZHJ!+JUFg(I! zs!iBVpc-M-7^n&|foB}Sk0PwaqFH7u=BwXNc_N4JP-I$Pb>&Bvw69dL&NXJT@N2&{ zu@lCnTkB{K(1x3#%dX5e!W@*U)c`nyB(Sz%$}MXugF}~}pqcz52^HYqMI?wI8-I{tug3R=8v)V*c6@&_$O8QS@gkXiz zhD%Lhy?rCv!)zh}5Sh&0isv+aBKz?M_*F$g=QWlcP;)WVoJ#SGQ9`ql;k;X4 z^VRRK;7{>L>O+*gGOAj`hxC^4u_eF4l>yz6KYhvY$4sSGm$3n~X`>#!x9u*Ccg0f8 z0-0$c$&WkfbNZ>KNU5(7ETR!F`3aFBL};;C^ci)ynWFsFv(}b>%EI^~to3`|BZNtm zf2c8wP#b@ldWFyBkQrS&2cu3*MvhI@s#O|ikZR@t?}UZE`SzduIts{^@;MOH1C)m* zXPZ4o50XR*eSk$I$*QM!aNIo<$l5%aAWi|jRyKTyJu3_MNTYE7fay?quE4M^0jUrz z05#fkaY2dm*Qz~9HrOy=1vFV5j8qL@lge?1i>8vqec1QA9<7$_8}quqk-7Z z#3pHn7N_;|y8mo-k<-DH-0|n{IuvrqIg=qlb^Tj*WSd9g7#&SCS7KNPkBD=_Ve*YV z!H}@9|Ixy%DMpn5ms?NR;-?Y_iCXtGZ+~Q zEw<{@$*&7ym%)z@p1J=^el>~jXo~?^4j;g?ea&@v1lTTc@Jbrd+{iBkkjj@gGGS>a z*bM7Du4ZEmZN#V&7WV%zrpbi$dVwRFhzyAiYNgkx+zfmqOeHzm=vBvJklGk}tj^Cm zj%*zUX}>!d@)I539cfX0x?VI$rW)NvPc?ynlDxV59RbBL;+63SSaAt|>PU|P1`!)? zdUsM{=6}ENqu!OMjO$LVgW7bFK*0U}%4vTOifvfzqF$D)x6cH;Bw2ZL0mY zegYY!>a|_44h+pipWa+CX*l-%M+VgrN@sh2N!(f)aG5Fr)cLghyv4j6{s!lxbl$AY zmuLOwysjm;YkTgA{bJ=yCpsuu>b&DAVROS`51bDfW7a+3-na1iHMIU~|F<_dBuQGW zli`~tW%EZ@{!_KR9kA`}sa64i1tQbw41lD8U9MsyOya4&L#4WcZHvB@a(~l z>f8EHL8kk7&{XtX(PeoWx-R**8Q|6jdOmnH8u`3EHgdJqST3W7nHz>B)>;!wN6mod z#yQv#k5Q+oVInsIM5jw_LK~iMf%(qr$2+lDNo?w*i-!OD$5X#kqnQ6+#u7h`?cF9E zGF;*j>`uVE6sa-oo}W@Cu_@VpR$c+y-l*At7e+GkcM~FUKxtB)h`Z@G@f$ zpN7QV?*x%1^lZ{u!(7y?A4(enyBheXS?>1$AxU>MuHRqVs`mGHwzkDR-=!@^fS0AT zeSN^c!2XgUnZF+fcJw{ogc_NZEt0|W-V{G8GiE$Axar zqU~I}2l$$-v?r66{#EsT-5KCExWxkk~sh>4vWN+TpS6cXNMQ2VeSm2{ygjY0+_=D7M zr~3J!5;HQ4ogpZOrp$_`L?A^0W$IfKaUk@I%!E$v{gb`I7$&ps{w?p%(0{#WPit?_ zzom3yUkJ)=Z|@+lg|GEW7>3A>09`GPSpO@gW$tP!VeHr9o1feFB-5l_dZ!yuL;00o zGUZq4P59?cUQ95N0XzNt!G$iLj)op|z{Si%p%%1kM3q_JC>V5?yyy5W`IsS8aT@4z zB|9;4TC+I$k$RzwxuiVrR9sx4vlOJ#KkhVEuL%UuWp6b)W2vCIE%m4-GsNj3KP)_& zrMEKoAS+#U`P&010B!pnt<>b*RRzrrBjNtR9|uO-NR$3{J1FKkxJOTX1fZYr9wlU4 z@Bm4ZR1i3}V@-$=dL>nYEXNrw-){k$b3m>d*i@LQni4ux(V8sBSwoG^RvefmP%TKuTQ5Y@PZ>bhpbepUV85GJ{P z`7G9uGwZu@)bt6p!wWfMzgX=&6oXa3QQ(J$5B^_G&aYtd^raS3 zo|VRLT%L5p_&`Ngt26(8`Vnj|vlhe}T6w2Z&zvqii=?qIv_7w7PZa>W_Ba0S1^Flw z|J_QRVl3#dG*S#aAFNfoGfF z$0t+WF=qBP);;aZ+$N1Ru!1v`a4gaN&bcXLD9(DKjN^Ng5kn`Qgbt76F|T~lUsoNNb=W2XO7O@ zw&`Jbu{=Um$ob&Wqj$P0a(bLIUvO&PlI|TvqCXKSBi3xjaJ?HKbw$6}-Zw^to4>@U5cypl`}HZ7h)lBJyqhyfbRa3aeC}-T4=D)S z3~#-VY&Ih5caydKXwGGvd}zvf#h3Qc9O9tpXFl;oAK@Fr0;s8b!K?;VWu&wX;k=u< zkiyxb(Rs8VZ33(&o`!iYan(SkKzE>$#LG|9nPve)CwTe&i%xht#i*OEkDWOgCgNeh zK5y}5M&yW*9cBho_J}lRaWd0R@ zo1Z&DSolJOJh=#%s$95Sc^YD@kdgBCUx1Hf-&*Hs-A($$CXvNB!NdQ{VAJ(1mYN!< zT3L=(-c=j^S4sffRY5HL+1I|#8xGi5mm5|EKCcji0|zQiS_EWW>Td=3=3bFA9(C#> zio`tm)3lHXjTRM-MwS>r8+T89S`&GSDbHE7PgAn~>|kXA^IoSRWrx!kw0Tb{gz86q zV}`h5+ZR>IO!_={)F$;n@TZuDuWAv@cgWjkgq<+;8phLNC$zSGq}U?(K&~cdN?QD| zEO6eY2;+Fy`KA7x7)vp|2%Q00?vx_LE%YS(o9)n#lblUIc$uF|@;Ua7KG`-Z1j>P%wfO8X1p2)84d)<`u6HzPW6H#C@lto00)$GhnD#lf`;# zog-LLoOenz*(5m1nCIuZA=NRt-b#xeS*f7#7E6_C)Os)^$t2gRaVvK~PDj1D$!B;4 z6dhLm#d#zeQrCbG4>-MU2%F;(B?= z^W{6RUR72s`eo5I2B?a46I>a>o2JiBm-L!rSqLcZLIc#3XgP~Em;~|unx{T%%9~8G zSLhyw(8krKZuzf&Zo!mf1JMRg^uMQs&cbq;X97zwpmJy~<5$E60u@H?_`2hxSbk4n z^{BirLV{%><|EhxuyAl?O8UfENUq;Os2)ibm!Ov2rS|dZJwsWx9?+bNYF*_OmN@_ZYce8qxX=9&htvoVOm1Tz2Xk+0KDJ53&>CuJ=yI^}GkShJ4=MhsO6uwhd#$G#qCTNA!O1BJ#=^i6 z|6CRMl?94A1U(~+Vrc`yq*Q_Oeg`QJ>v7*Ky2)RbgYKlufIJP*E!KV=r0=ryk{$Ok z^?;@!;G?N-bGBVzr^8-kvHEe3Nh4Q9Rox}UxIPuv7nIk?+*|bhj3?Fmy^WqKKruMG zvV_;=N)QS3ujc}i4RIbS-DADl^GwEHzF6#Bej)bJflI?#H11P@8^}ZvYPoY z0JDU+O<(Eqv*FuQ(irzdLg}>Ov4(Ksy2C3oWa)tYm{oUc%e(j6A=9mWC zZ+sT6K^-Dx#p#ejkzqH-26deuW6=T*c2PYRbT2F`2#OZlN0w{U>h)zRbbh~E>SmBO>0$1dMvhSDZVPE>8T z=1p)BWUxYc!k0!b?!r|_G#yjL$s5hj+kg}s)JMxNKrOuaVSu7fV=1nU<--qcnrJQn z`tUU^F{>!Wvm4u(z3`6EK}Osrm?D32GN+CQ}|= zreYk9GtXSo`OMzL4j|ljfpq7{W1V{`TC~n=RKKvp{4~^uf;m@yfrDjF3>jrSEu~yL zZg8t^7?-vNu~@^mrGG5?*zE$e;G!pF-gZM@>i`9$3c#~b0E|h_+@E`0+uW_)hr!h7 zaZ;5sx|~Bs_{5M=3B-Ajk*H*=-_~xL{>C@OaPg`{-&HzLiMP7deerY(EJO#X1gI;4 zq1&sDds0O4*oX9n$-TUani~0r@oIAwth?6Xss(NIU|c5Lno6={%bePnk+uNqAk)@_ zjIQt8cp!`~-9=m1B$M8MwuZNmner9>N$-B{clQGp;S&@{zsqK1tenzmiWF_aitHjYQUl)kC;R@K zBNf%dN}Kwn$w%D#Tfi`Ex)n+nOt~}He>F{t2TXeE1(pE3MMs(jn5AnEEZHO4Z5>d- z+J8W5hOf_}Yf!zg2s6gUqmf!Hf&AEQL~F#u)PtqCDu|^<<8nwvN<%1Hf@bTOw>jiVdlU$)1M0LLwW(5wGloXTtU_E z8PlkkKeK%#&2XC*V_)6T*3*KmTRUa>Q0TOokYq@ExwjbhFdOz>W_d1C7XBHReQu&^ zKNF?+Zp~mdySR)GkXm06d+8cuft+6DfBvq51cqNx`0MzheFjr93mC2DuwsI>Ve)hC zdV}`u0jij^BojYK_WOp}jvCEBisAcHaRZ6|w*b^(o_ObWzHwjaTGCFBrWHf+X7>^! zfMD?Uua1=|wZO;u@IGc3!bA`ERGIx#r%|^^$i6R0sKy}chf;1aZA1OgVq_D1rYbY> ze*MBWySPlF$`rCP#aRUwkCvAX@I$qn+jXYE2!7+hCvP>o)(hb9p&!PCTX|f{XQTGN2obQTW5%ay%Tjga+Cat|nObUM&FYb#1>Y z0JM;2xG02j>&Gy@D~yiE?=oR2r8mfU3G)jSw)UCup)z?YMrI?AuwrgKc`_M_ZB7I{ zUb1Z2HZwcrn$pvgKg~rjlj1MU^?nn0NF~=Sel%%*&M#hnfsYdPs>xu&4q+wwy6TWl zaKKH-I1(f+-Bk^VNj%%L47tX~lhDZ)x3+>HPsK9~@{j~HwT)n5v!VRT$Pg-UaLkS5%phkhw zqCJagHcj5^RuLE23;|}ff-e!E2h%DA+kA3QM8ljdoA1Ht^KJ2pD{h8}`vTjPaEUaof9Tc9c7D#$+MaqG(Y9xRrH`TO+=6 zo)u%Y+kTbmP;|J=o;N==EA$7Qg!BfVkn6*9rKHd%pf~0XO=|u%!XRV@O5iMRpBCLn zD`A{DhZ{)WMckyY7S?jHg<3pL>VQpo`o(57Sv>gtg)p?Y8tt>Z*I$kEHIZIEiZ0e+ zQj8ca4-w2;^1GcdtCV6k6#?Dh-Ge!Xb{42sBJ8wt+XhhXkwEN(#Am+$IW8S9(u#Qd zGWF0wNY<`2YW4NzOD}57DnG5I>S4>7yynA*MUCFO3IrwO@4x)}`_Gy;afrHm2Ak%q z(9Js(s$LoIJW6Jf91?9C=IX{M4KeIIdE^r5#2q9#)=DFaXk;GMU+qvueaX4Q+E?Az z)W~hc)k;;neale?vE9xQ+ac!qQ1(P^waSL+GQunI^d+zlBKlXwI1LdO4;&-vh~??z z?#osQK5hc2cns2X2hRU~`AKSuBiD&t=Vv6b#@F{hTLd@=>S70_o^su(fP7s6EyMS~ zJ0myMS+q3deyz2ws8N~J(HGk>n%E=S`f;tR2C~(I0J1^&6G7y-wf;P1v>$r-bq9jY_Dq1D~|D+s}Px(OstwG z{{85KWIXc&C6po3u#qcoVaUQoV%9S?-{$9|9)^%--gH#+!b}M>V#b0uAA;5~TiGr^ z%^W*sSZYh3NmS>p&F8I73f0a=iWP+ah<0Cb3(WfZyn5O8t?47B+>~#$2m+7Zpwdu@ zHN*-W3N(oZi;7BS3$Vy)nSwzeAd5&J0+mHgCMje^hWx_$4`?h!2lV;lJ(?jAVuBB{ z8IfWle2>2hmw*4+OvBOA=BaYf(xt^H03=#UUA}AFC?x!ZzQyL`RDV+(UOjSZ7k2+Qa4H&jy$wWsOD6iC^-~Wgp`=GUTekq5jED*Ojy7#gb`0}!1aA^}Z`LC6>*2K| z{SlKVOPLV4wvCJ(i!FfsQdF~Vrp3^9x{LGgAx(03wOrsV0s`PKfxRD!#3ul4Q+*@$ zwM-ac(hsB`kw8K~s=2?T`Zxk0ok?JEm$|;{Rr6l^#hZnE?la4!DULhtYIN*A4!gYZ zX`hNgh0?KICfwzb1e$xo!YYB3aI~3zfqa-0GK8$jNwyc*EP@~YAp%(!-W`Z;b_4%? zMZ_)7-OP^DkA#TJZyFdeU%D`SK&^`C(-MgQT(|GvP-3ybwaQ7UxYRe)RW57lAKL7+ z=U&+3;_AFk&l=f7sZv+S-{66`S?{yMpNw-;;Vm>Yk51kp>+NR>XmE2-6N zb2Gs-NX>HpY5pcrV+qL>)>|fr=|_Vv<{i&q_0U+nCXkFiJC`*bpzY8K!**?wQV%!j zPt8b=mU1Vm*WaZKv=WqEW=Tww9J8*yeY!v z@Cm1c6adBv0R=Q$(q|kVR0^OZ1Lz*vpG2DeaqlJ(01VM2KrKRZmkt>Qf>6g3BBZ8( zssU;k&?mb@bNWaWf(%rxI{9L32Gj+KncU2(@*zjQSD#EE&QuzOuv~P}c^gWzb~tB< ze!{nc9+XG`mv2{U4+tqBz&x<{X%|Ox+PyC%@sHbd2~6AUARCs_9~SD(=DjmSA8JjL zwPSs;EDv{m=3aVAB^8VC^@DI{_k>xZzC6oQ7MjQ%Lg!LEjnLZj8{4V`N}*PR_Zn&y zQpIEE&fEH>u$Pc`wPCVqTBcPT&460O_x!hKz96Q!S9SGi1wbgRZ$0$}r#%K%)ug_S z9kDBwsq|)BDx%!W(J6Cazib~cH6&9NMFDI2{s%r3B5Qa0_~q6gEzaM01Q)tZsBR?P z^P(?4f3@ez5-dDNv=bXyL}h(&;;Wx_0=9Dl4wR`<^i zs~9!-wd)lk8zu+LGvU1EerA5;m}GZ`oD@V+7H3Z97b0e++>*t&lM}zT^Sbd1$;fLx zUuk|f!o6lW{H`Gb%|VLAVW#r;tm}hkzrw-?r?uz(nd{Zo{Y}HrBnPDbu&Iyk5Wu84 z-RLlpu^Il^&CwT|rLZj^+B0VK+$r=E8n&k;hDoM!6;-M+wDgemu(QFJe*QnT(^dxj z4^M}2qm5A`0W&NGQPQEsejUR%FsZ2&u*>Wz5xxEEDi(1+qR?HY%{#{`L?2)_Z&XDT zIyp4LBw#FB6Ij35e+(EA6+^$y0?8by-;jU2h3Dg)NW82ov5)}7HzRrR`1xazCULw# z;1wo+_G{{v{-M(F5E56LZBfdg#P)vMN3(FB^zZTG_X#iV>Wv#_XEhc_W6zDpG~t)1 z>zXgn#eZV;1%P-nO5;Ava^JT#N*BJ+>g@+Wr^wzXzVa7eP@{DgSU#Y-{TJ&;1oTVs zslGnYiuqi1_6uASt|Xi4q(W;|$qt}v7WjP2h)q(SwghB_2AF*%K0^-zU5%3h0E|H5 zrVRkAJoO$FkO-@}LyZpU{&-b9s!GIlk@*O>?yJLKht^!Oxc%43^&-Vp!fN#vIfU!3{qajl-H<6T^q!;u=&XgaOtDA+_SRj{#q=y@;rfD?c<(CpN!KRPh z0oF|SdAG17n>rxNh4z2UGx-(yAnH#^Z-x>Y9gXis$_tP_?HtMIbx8!lfnV2TBwzg_ zxPk}FLW~)A6a?iW9PL5?_HixAN-M z0z-fo>;d!%sU#m37(WiQ13(0Tm6!Ywp#OKtf4|~#{kpAU@gM49buapec3d#my@C@< z{c=3!^6U7Hm+F^58}jRl@hP3#dUz+Izq~!vFT}4m{+mePZ~ljFG2PBRFC5#P_QFTb zE5jho9@oUn5u6)E{IGey} z>qct}MLyB?Td^utZl;G@bF}KpFT^@~2rUUh3TI%cd+j^YS*S745J-@ykRl2JC{xd{ z&L9r2lmB2?3PibK5P!Dn)#E*|kVRwk$LS`h5m3MJGV6an>!D3+L6f=3J+^Unyy(8> zC1J+`i`Ne!$}E&0G($@k1}UEXa5_2HF0CF4@!0%UI?=*A-_il}xxSsdJzyZ6TeER4 zDv?qLz)%0lU=w(f7a)L;KT({W_BIuD6ZW6kMxlGfV9_+u9RBhH8?=~8i*ujHZjleR zQV5w0_xs zqfJDQ4bc7t$on^ed3aXj067v#3N7`>eU_&Siv{Tuw&4?^0Vp5(6jh*`gh9Fp*^s$E zSkmduKG=Vgp_H0!%fIwj%xG8_>w(?R)Qz#}U4cq4$kdvBKWN5TF&FM5p#(CDNtH__ zeMq8KCx7@lb@{;%NN`b4b$$6edQ`6YE)Sc+nM&^%7;u-}uky89Qm4`iuA8$4{7XKl z$MJhQU8T`f%8Sl)2q#>!55~-8JvzRl3(i4~ZF$Ky-&{vsA&!%_!OM*088OO~)PLh? z#gwhPF59cdk1-fAwn!jcm@h{*B*XXmcQH*Fvp$!2Z!*6xu3%0ttW;2n|8aKrKRYpA z(yx58DxaM~ItG@2I{+<2G5Im?ORAYUj(ofAQ1=$l%+NZXsXozc{qi^A9AM6F07zDE zI2>5ESbpS?$@LOw zR+E7q`N8-_AL!*~is46$b7_r7 zWV%W2>M&K85W3j1D;64D!VOgmRuOGDq0>g$d4iS-_kRp^bhBPnI`By<%j}b;!z#(r zL$l!q&U(EnmDu`W(UqjkKQU7`U`p0=jm139dG~7)4}g%iOL?%o4G2PZnS-U%Kv@x% z!@wt>w6P;V5m$7TfA!|Bzc@r>;x7>#*5KV>!W+I*(Ltb4=Y4ocj)I6^t7mh+W=K5J zY*4Q<5)s$3hiIym*;BbmCOC)O(?WD)+8pKD5|X3C2_pXrvUsCzi$E1jI-pvGI48K2 zrkB2FQTMGn>a=3ib(p>Y;uJBw+zhE=!x_zRG&xCG+4q?x&{EQ|g(%r@*-S;0XlNB& z1hNFXZqAA&Ojs~mGqIS8=V7L{Cj;o8z-wvYPN=p-i3w?;sKB5_gdLelRCg_M&pOJS z#_JIn5NNIWK;SIPb>}upI;_8Ksa(!o=D+vJ$vIoz?r7(Q{=9r`-1`X5^v-(AH&l1> zip=bp`DW+Wlp_u*`oH{#v!P3B!%j6n3}2q5?7c+vA8e9Gk&Jsb*8+OI4tM4suKi6u zhSRTS1W&)8(vfq^LyGb2t=5`G;(cRKV{NVh5W!DF@$v>eyQdi4jLBD=3Z|!xK=&3l zMO|buTJ2jg5S1!TLy*lQjsejuAG|}Qf;DyPmcL`KE&TpjmV~n%R2s$z)k66suiE?6 zSY~?c{vr5?oyp_J^6*@kjkX^at?+!a>Vmb+Mv}Yh5zNBis8X ztTE()l!s?(bAj2T1~---==zbl={L&6iL`8+8K#Wko44-q*TMV?=Gz#GL$YCT0UBxTifRK8Lk2gU!4IUO9sNIr(TWeI$FZe%)@xc z<>z16DHMp%0VV6HOC{e4w1@K~j7VhAZ^^4?BJ>3yy69LWCBf`}S#(yR|Q9!8->K>|oti8u}{-cPPjEJDdlOXbY8V? zmm_XZ3gY)(W11C`oCTyT?VZ1={P|nOJIC8r$)v40m>oDPuFBXi*0Q=<3X>L4wF(yE zSTD|hW-)uLEay_F2LGQ;^eKvZG`jBX|HnUE<>v9W*8vU4mGP1#_3QJH;iFdNH{Hcn z$(pj>MMgJsp{KzTB`PQnD~Jcfu@9q|^-#DR;ASAmCnn4y<{m z+-bM4y{e5U0o^1x&Rg4@KP8|Z+}kQ_cctb=zn|J2r-B!wNJBEjd|$$7a-=A-xB5FB zjzk~NH#;Lj^#r>kikDYGU4CXMCUxk8QIxzU5^N9Jz5K7`w!%4?7*!+2)`DKmw0OeOU5mjdl)`rz%8261<1r3yvwIv zZ1{PP(yvAC!bkWk$O?}77Y1o~DxsRr{w2@1DDK#9E)QVn#cVBh1m_5B92m?w0W)Lf*Y3Ig4#E4!eb+^;w+=JH zNeh(=<9ADS?k0{$$`X3^PYo-cYq#I^gg-j9hdqs#3;A4X{WK~Y8)aAC@mikLn#)`B zOSzR^V6HsVj5mg#cU4RaIj%1eXtn&0kt?V9w|JsNq7g^3*>4&fa-#gYYA!=3^3dyV z7w<;J8rf1EcIS0&Jj3|gn{Mqd%kB*p(-Gx|?O!?gOIe5PFk%!Z6SKAc=wpb#^>Hp5 zgV?cTNWZZshfhSNV=JIVV^MUL<71hgJZMQoB(E$QA^oy}Sy&4B* z7xYwgYBXRTxm(5o8n5xCYJR~!9QPgkIT*H~-D`&9aoM`7fN$2nIn8)$SZ_O+KPEWc z&zok$OP#!+S8;VEng?$$b1(ioer|c1!10}ksr+}rp$cKOis9?xfxsiFNMs0_3-Hlh zR*1|7%|j{=Cug5sIP9AicLi3Qv51?4#Wz#rJ|vw0++s+9c>O-gz{J~Al53_3W;Ei? zM{nb2A3uJyh>)tMral4SaI$K2Y=@@$%WOcu4?(Cakv4U-Rek)Z8VU)L^!8oNSnhrt zPi7FnCcbm@vsgs=#}GRaJ#E+A8aMRkU&%&_q%W^_pyE1KexkjFKdedYrAsM38-^C# z)Ltl*uDRn}2RF9fv*u;W~?DoG4J{*gr`*1eZ%qix?DTxDXW$pHFYDBY+eDu z{Qy{x!|jmqn-y?8*m110O08xQNjBHATK}~j=k(cFl`Z; z7-_!fGHca1%EKt28$v^9pq$xl^CB`r)En z7f9yEZd5#=HC!i_QXlv}vYBNyBBvEqi}BBsaI>FW4C+0{8c5k*A>x+)9SjY zk9^w;YdlX`igt9Yqt-T%{mMEE(vS8sYQvcIj>g(*es)yW0a9(#!}6#ovvzSuCbrNb;|0JqV<&cR0upZ&3B9ZJoK1Y6CZB#e>_B z-I%^u>t7Puo)@WQX-O{9(z(80NA;p36z*TRJ#{1vE8GoZ_Pm_yB5E)uH z{Y@6ikUnBHP}p&`FY>?H87I$%f0ad8l3v1DgL4#HzesUwyPpHXI?~y@$+J=O#J-0t ztGh1)Xa^z7yqN8W;q(%&q{vWIHM*I}m$gygK?qZxSW}uSsH8myD}lFn zZZC}-yZ8o~7_?IaAlogzotXwjJoY;)x>+rY=&L$9#sG8ViVzS;qm_wz ziv`x^=xRa@UfqiyJ1~f$7r%HKCH!v+6Qys!-eG87?0o`t%!=0S=~v;Hp$(??c%Z}b zcO>8?8E#m{dsS9FN6Kf9t1O&Aipd<^jCld}d0Z`VCsfUB9OVRB$Qws1N~;TQ=;=wd zri+&CebopY>cczote!=u49kt0_5y}mhf0k|H}r=_1mERGZ*X6SX$zryK*Q_egCTk@ULs#U?@N_iOF=e zBh{{#mnL;iUThIy#NF_9n{Mr|k5L~k>)B?nuEyyeNyO}(jDtB`-; z^3d8l3t?CLz)eXgnrpsy96F(Pn33M6L{6-<^F-Xkt>`t(BDI7B@Wqyb~l&mRUK>HRi>HXDi~?4BZR*kPB*Oh@7sV- z|DBz|QL-JBzP-5SO>}yKyoy!gdUZE#OTn+m(wf=A^K`q^#dLn;)cyij=xi;%TE7LZJhq}+AJN{FUMrcm08I$iN(=x8xR|DDRayuf zd8EyD#4P#$SUT@`s^9s;6K`FPy#B{wpjlu5VA)E~}5uAidccG_xb(Rx~MdHoGYj zO8D}bAVFL>2@zmi=REF-P#e-_qVicFqF$zH0?pvvkJT^aZ68q(ZGk-zLY4+l#!NO#3ox%AOx`ODw>)0oPS7#TFxz8l0dFr zYVbdzEd&Uejh8#-IUw>!a^6Y^9mp*zEy4`8eBS;$v)GC?lgG|GK1D}$Cs4sS14efW zo8jKx0V5h69~NWj`-*l>BDoQfC(_oa>q3M{Ii0*HAY$GFKwiLHpKsOk$lb z-U}jWPTl)e-rl~MED?^e)AeF}Eo!80=O;hVuew*OGs40@)@k_uCvTum2DTcFjpa83 zg{4D^K!uD%yY_2>^~Q`vT;}Se0P2(0;H&qVJk3c(U#$cb==I%ai9r<7G^K+gmqdG) zy;x!V+A{(UF7OcwB4kJX4PoIfHl%_CrQNa}dxpL{u-U7OmcP!eXixT|P=Mc4?Nbc^ z3ksl^Q*0976ZHr)Z3M!i+?gf+OUn7=FJ=o!%!EqkmMvB5+=O>eEj z{37dPzN4{sixo4F^)Pd>GZy$@qqPB+v*14gp`NdV%1CrlN*~Y|nyT89mQ6Ge!l~cV$%-4n;N}LtX z89n%K=cz<@-s-=CZ@rvHU$uBJlONQ?^-z>5ym?1&#<<~Gu52*SK@L=SMM$xc41Rd9YB&@U<2Z^xgypE!@k|!w|ym za&o#*5pBCf07&{Gk^EMp@A*zk1W$#klB5V{G~@+7FlzKaZu;!P19FNObzaa=tGnft zl00Sx>a1?;x`@QJW{*pccb=!R5ujWd0@fpMz=Wvd+ze1t<>gVqWJw<$?Y|H!>rs?; zGlG}deT!@goN|gnM)Lx(4m;o>p4Tnki$#wx4E!R$!9Wu*=S0(5>Ey8h^P0-t0YAHCX-YC9_oG01JbIWpOofHE35{(XkETM|**=Fo<#(BCRZ z%I0kX@DPT~=%{cC-Gzzg<^u2JC*lci!?~oRDT7|P2gbDsGYcsh?Nfv3rD&RwP_QbU zFkyb^8wMv)>#fgC`%MKi!x_G_$ZZM2Vx>EXvPpW+ny5BHkAyD~w>OMy2R^2@XWbAA z>s&o8@wMhpYMxeCQ#DBKY~K%mr2Y~|Wt<=JWP@AxYO%Z~vRTu3);~uIG5x(4-*`C) zx+YJuFeV1w;g4iDrn`~C4s+FHQpHm^wW#?wsh^Vpv>&!Ub7!M zqzWWU>Q1}&?-AxB)XLhiYsH#O@!IdtCcWRMMxn=7t}iTiuV>udQ15Yg(CDXlknIN7 z*Gv;rNkoy;%Mueup0XD*{9xb~Gg&qS#X7QskJ>IMOI0$uGT#@0bkw6)WVf%^31AV_ zx|W@k+~95t1`$_BS**Ki6iE!RYDSTOHgO1$3d)5@&!$tDZFuWGFyRAFyp+B;E=w9= zu^R(XErDiD_LVupjwdi$hcl<{(?($l#__ReVs^p^&@Umq0%&%MWJGJe!pQ1&d_)S8 z(Y03EM^R-G^i^U{c0e9=IvSR z8sNz;GSF#N33!0r2eZKs;?197U5>XPJ!h^@m%o?}ienr$Z!pWN5Fnda8QL7-My3Nw6 zZA!dfx3g15UY9c?-`b$f=^@PkV;{?5npDmH*ppS>yD)a)nEsa~Bw+UyC@+2JGU`7k zW#o`&6S8PHT zr&nH@7k8(8eH@p>n7BdbMzt0y!%qG1aJKLpUi+wyv|8`0(=Nw$DZd%BqfEH>{2=)u z?hmt7t~)R`MF;94o@@tlb{X;=gqyr0+h^F497vag1y3eXzBZEl4;&M}>|NHWUTt3A2W!k$e1FNA=PuBeC*S)3Nwj0o5Q|6=mTI*O1xEiC)!8#rfrAHXtwxw{S6GmfK`Whq*Gvbr|X< zJ86c)WfhCy3Vw5sS>n+#ALXfU{Ra+8yAy=aL%5k(ZX5r91e^)|hNfaucEZGqK?S=} z^Fued+@~kQco@rA=W7-USqDew9R7Ak^ae6C4wrm{hwD^oYG#T=8OZcBf!Gf> zMC;*ZX;HP$U5Mh0e=kgDq;)@(q|<1_6!A5Wf5mgHOt(4(>ade3JY)UMe-<_B+>qCCID_OXb<;t%j%^CJ3@Fko>qlmA{<{ULv0;iDfc5X(~?& z57JD|uGWQo-<9hCpHHA63DER1wO?y^T_q`$Ct0m*reknpUZnTsk2PX%)ZmU)_h-B& zq3le-soC~5Mf3Dn!8LM^$quv%TglA_p=kO;!Qq?3WWt2l_w@fVsw4KE?(lQ*Y!uq4 zVuzW%tC3GBZ#Dfk;7fSW?7Jx2Q0*+OnKYp|i><%S_O~ zIfA9reiI#cwh_>Q`;y|T&6j?Z%y>k(y#G4z52Lv`TvqSy5`0&PwF;zLGqFQolF;UF-mzf8#ej{n)x$+>W zU(Fw9RH;lZ+A?XMQRcLV>qtRd*>3*N5@kQTyA05Nh@2%{OBpI?2DP^{2i{i@h~04; zGq{WDgZMLx-OYT)=3{B_dQ^iLw7 zXu3U=adc}6@doVW!F>ZzsP6b}aeFWVY(c?bE>eIsl6gFRY@UYw8eQw&J(O?r=<3ZU zpg{K?=q4mp?EBG~ouKGCZtZAaU^m1W4143$<8Ob6>5g)Q_O=t;&$-im4m7-U6+W{! z;;)N#5XN>kd(Yt3d85rsYm{*;@e3#vv_y-CIEF5Ld)nD-JylJU+30{@X^hVs7=jnC z@c(p|;Jf*5kpUgM@|0niYOAPs#gsIZB;s^JRy+yJ?pE4AB~(C{M3sieP0H(snqzE2%SmED>E0U{;1)AfJ_*x6E8U5Gk>lK z^ad5!(!TF2iw4Ql)!zC-HfFP7sofuS0r-D%8v4Jj-Gw9sMqIF~Y=_>Hx%f$KaUj zivPtJp%;EtlCz}eDw{Z4lJif%t)I#$wkOzFkT{CTNaiYoiGYc3y-hp=_^V9w&9lahHRNauJ8FU$tS8^ ztaL%MusJ`#5%gO^@Hg89Y4Kut#nn zz@hbiDKeapzHbJ*qt|C{@x#uT=Fis9!~S*u;G`b|!e%!(KvG&n$K=hO+eP&E-~-LP z+}odA)Bl>R%sWzO;;eU z1B?@6usU#w|1!~*Uc>Djq0su%PChqXj6eF2cRWd&+PhLiQP-kpw{*O~s-Xl};3z|& zT7L&oKx*|NTm5c;2ew)cV5Mc_FJ3qtHA-i+210Y^Y+j&voGl--K-9zkr8TYsPbQeg(+Wz+Q@{iFIswVt?Bs-ub z4MNE}L9v=h;t0^hk1mqvRRao%u;wyj@bSz`X4N)pG=5Gmv+9|k`lrF_7mcaaqC=`R-w|SQnClYCs_(=sW%Vna zaezcLCcK_pUzK}C9X9<}nI>7>s69g(mmYP8WUaC?;2v)fed83-s= z==f2!@o>rK`L)9535-gfQ&`X5?LwiRxdAxbb?Ho^x7UTjaAljZtlu10K?wq@g>xHc zP#`PC_g^LbQc8aw8wa#r_FMu_?pyHHx9hk1elK~O;4KJ?qJbHFfWMvDM}ussLO>2E z^SJ9h(}Uz*I+EQi3>S8QA4*<9`5^39a>V5AE88ICEl6P09i1L#5WK}uD12Ng{mnLo0yQ;#(yPSfjzsr|FLRCu<2d8;0V{Fs*6B%&hKg-Q4h0Z#639YI0ehq)jQ85uGWtQkhD4E_Y4w z!FirG_-<2kF0I5YyMzrL4&==d(|q4%M-uy0vm#nRqqbnQs@_cEbIkc%Who_5 z?(fRv)+gWjUr?Su^J8>)adk@o>(x1k_WRzvA965o4rh}`ndGYj5)x8DE4PnGTc|tm z-31|JXO@CyvGcgWpnOQpKC79%aTZE0;D_)d?Hx1bLin!FruP`_!P<)QpK2PX!Mi}) z-5rF#c*h1ofF%-)!wfJlmseyaozj}K4^r^HBf>BtVkv#LvhvNCLwNKj} z#X*?bW9#@rCGnK$uA2ZVW4~308U+;wA?eegL$LxQ9hY?~Dz;po4<~dGpd+ey<=pF& zhjqV9;T>@>mAy|x;Rd*NpgKYUD(5_qyX4~zw~u8&s=J^^L^ImDSotPJ5>Zhe$!{hd za8LB^oOB3WnFgQ=2k_K&SuxbM!1#?A;_mL>V7Ti=-fDoyRNw!oyHF@ET04rQ zk*Siby`C#Rf73dT;|{|>%*MsKe_3qdzEaBfg+wu8QGK{$@8Qc`S6MFOlm)Q-V6<@* z?<%{3g417@4nSbCL|;cB=0qt*4rzGsKd&Hf&1ch77hG4R^l6_REzSyXM;;TxJo-kI zj~cY6@R!B31cNlUS5Vb`qM{M!xD+ZEpeYZVbJPSg%4V8&{_@;s6Ml-N6{XaUFhlW` z#6vI2gk$gA15Q4?{z2aLrS;SMHeR9Sb9gVVu>9d#Yo^|KQC85!9WC$RZ96woylz}9IkIM)cVAV8r=E)C zyiXWJwQ^m?tQ>-K0q!+7kT|b38Xq~nD>uG7?U4>wDAT9omWdcs=($`LZ%EO*=z=Ss zWF9gY^%m6w`L9t`ctL3!0_b~5*K|e)#(K$;7ogGhq=A(vF zI)i83A8^X|WX-bM(9c6S(Y;uzgIUKNvLIQZe@bw##|hcNJZDIDnS6#k4f71^A425y?erGUw%VrS^z(eYfjs6NL2ldZOPaQu zGelbNOybML5GK4#-O&a$2sf#qGDDp##SQ)1S*VQphS@<-;pxo?96_M6ms!CQXj(yX z<|2gdZNEdfiS&(R;R9juOBf`h-{t=JHp3MDz)r*k5HMzrCpX1wHg1+ziE{AIT`WCo zaP&$nzazDDZA;Z-QYJcu6?y)C*y)kW3*%>j-={O&IeQnE{bMuhBae>)c^}Tz&O6rLXDv;&nS#r$W+9;2JgeVPgImV4-8R6Xm~VR%%&;Qkt6m`Qim5ps8N=q;rQs+6 zwp=VLOd^G!CR;s@x8A&^<(u>+|A3Yg_!|51LE*MA{u)F!F}AL!*znKrdXwnnhLdi( z9{-nETqNnS=6ckykJQ(CwV+&3<3;Bb>A|7AD3IE<7Th{H{33Y ztn5b@7cv-EHOn6CnEV99cslkfos&%6of2%q_NSyd@U)|IE(RycPnUEn8H1f4t7VH* zrF-{UxZzL}Ku9@C^VLjy=k$|=f2ssY>U&4#zd#lUtwJE%E49|O{k$f32ov&g%CBN1 zf!=je@6Eyh6hnW}4Mbi`OtGPht0=8M9nZnne4}J8jo#MCVioSsZv39ZE^!<(pqYNC z?j683d!jZJM8g^=6vCTB&glk$t-5dg9C^mMDq$?~zgchKZUb(+Q-zHw^o;t#p-OIF zi>lu(c{Qs)q$=Jex<#F zbO7EQ-w!8g%Nn2$OEi)i!yQZM54^YJ{MgvP+Y%v$n?ceg3mks;rPp(A6O+?vaDoxo zEJeNdb?-UA9|M2(^*7zJVPIkvvvd|z5`ow)e`o2*sORLaHF`#tox|!9?);FAv^@gA zUMR9h(^YSM2)>X2pQ-!c8Q4F$VNjRN>1=UKFv(7Pe0+PA)!$vtH|X{o`< zjtA^gk4gfZ-^9?p2~@e}2JtH-3Y^53Jo#%d1DqmCUT zGeM&N-4Fksvm6F#P`Hz*(MV&6`lop@up+X=qUL3U991hhxhe1JplY1%e5E;p_MS=g zOYL5$q{Hd4XIAMz$9SH1Zr5FPcn^tyrgP=>^=j0zDv1F~@wUT?ezYia89I$E?RfX* zcUk;;vHydORhqyR|32e-)b&H*V$!cjUi*bwzc66>`0NoR_D;WSBf$17_Mnw=ciWQB zR>UA^;~JYcbUm`P_h+5or?JkpI@k4<$NT?=MDh^dn|ha6pi(KV;B2Dtp~rZX#bWz5 z#{a_kkG0unXXW!CaQs$DL_XWUS;qJX3zn?DyRrj;yfP2{yyP$b!7DhJTct7fJXrmV z%c2jKT2L&|sQE>=*fM)BuAFVKU{FxhlL0f%$jxAuWkZ@ZcMZv^u8-QLt*F{Rz}4v7i<4p4PK_0=bYj^kvwa(d z9G=)Ts9lf^tQJ<8+0-trDi>Yy_Cs3$#hYCkeujqCAV)e%q+j|8Jia8Cv_w> zwRvmX(PL6N`fk$bTs?Ogd}@rJ--)Xqu_{uBX|Vosa5||$cSwnM+j=#?(K8vNqvQ6j zsc+S^9Fd^U9dmm_`lMOgh|bmc4(>t0w`vAndbzT*D<;T76%p_+-tO#Uk%-TK>@9$@ zN5mW=F@{6?d9BA^-&~nd_4f`1)31{s866EwuV5#W!P^V78I0FCusr%n><~?=r|_c; zRqGDUu-B=b&zn@81HkQyVA()&HUG}%t??+NZ_H=8S0))g3U2q!MN?B5bfRJ-3$c$% z9*X&)e99g=wnj|Gr?FXom;F2zU33zimP__6MQ1gp)ck$_JCb?0QkhW&x{p)mfs`8y zATU2JCm~I0GW=yo>_J29>ES>Ec(zu6XFCDuvD?0~L$Fs|!^AYoKku&C#!C4B>AMQ} z_NRnE5gwpCwe|P1U4Xx^DNMG(^1TM_4}nV(#r3yrXt3R1_?i+-n80|wVb&e_nZa?=MVG2JkO+0g3 zJ#J-ei<199zN|N88((X4)ZFADNrgj9<#<9!S@_Ywda4MD#zM2oA;H+V=2} zOyrWJt%A!ZeW5CXe}Tx6Cie9{9R9lpD^IbzU1gx_x?ie#5HQSCD3MyrFsz8)T}l&r z8h=eD0&hHe33%&fHIx}*PvTgq<3npE3M8n!`AzX=>V8lB1f{cjZQp)ucMDi8$ z%6-3c2bsE~PcF;Gqq15nTw})N>l$?^XvGj-St~4+0;_%xlAft2U1HDcwgHg8^nM+` zGAmDRfvxT79$OvVJe`PTIy>oo+9CjA##R6_Se#0%q+_cZ6SgzYPQgKC2rQN+TnLw z{DedebYnLdW0O>&ExxDaBC|>0d}Z)>`{QhLH(n#|_R+Dv=f4QXdSzDEGt)d2!JPrg za+y`#LrTIbl|)>zj>)Xs;c;wQ-@?kjatV(Zj_O3~`ryr$4nv{Iff8;D;zP?c#8i@fI-Bz79&r9L;0R_KYq8{mi>Gj~y{DE7aGU%lVB=yX82i{@K@;Kd__Z z-@^jWw|0T6Qq)^QZmwr;+Ws`Yj_E$mG~DpltW<@1+4fv@utv;lMXK$}6{f~kFw2%= zMZN!;MWf-^fdG*Lf+AgGBK>)riccR@YC@_e3Ze<(-qDGxYYfXjF9-EywQsqxGzGHR z%@Ehy$6j=C%ja#<%E{^xeZvh?+rUfWe64}cqBd~(P_KASH=LFv5)>diTol!qL!tGs zYYc&|UUw}+(Sl=1jZgwKDKJkVA&*G7_3rv--Y3;j_|Ju$q3KyQ-7fj;6@BjhvT0|t z%g7C3rhc@Nx+JOZvU&<(061_ub~lQtVQ0bXU2nd%Z`FA$!>Mc5Xb;+jFSb~X4p6zH z4@={Azp~v{Ed*Q5!vdw|QG)Etd3=;J`}h(#Cd>(pF+xfn_?tKk2nk^)K!D)rV`*F<0Y zEK|?|O`jVe#5wuWT+?f$>8K#KLKH@_ z-ExB0kk9%PZ6v&py68WtP4(?i4Liq!Q%equJgaNZF=}(}J^eR2e%1i6VtMtG_oI>K zlh*L;;qO6b1=9cYIz;0jR)H$H;OV`v?O(mo(Mv5CLyN4%?K~j+R z1}hrZ;(^KEE+C^8;=dsX5k+rDOhtrfWNbp+d+PSp()KVEubFL? zn_l`E&~n-T-D*oezwscokIdCKJT)T=EnycC`+i|ZMA0p2xmfe6hizj5Sgb^}A0`ff zxerZ%-D4wC4lK)#kOLdL??xb_{P_xDr$eTZ^&(3RMRRP&w$;khIh*bg^(W=!Tqg)} z0+ha6#1HOpK#WX)g@3Bo2%rY}IX}R&t0!ZV0$E|5-_-v{q4_WF!gh%JUV9NAWJVw} z6|nmjPpa|@R?EneX<_utlFeQ&td@42UrQ0AE~j8=%&XJVa+^FT`<~&h^+<7x7ahde zobes%{cl@Pcy+u&?{U*@15!&KU;K6;*VR8p=QP|iNc9$>Dj@>|TC}-o^D<)TtA5Un z$p%=2KA5(lCG?&nVIY`pnCx;z6M>+eT9K|3?@TGy1FLw*;bN96Exs2=UI|p!R;Pbe zYKP-z{L~D7J(bto5w-u-@DdDmqUV5#X4R4k@|NRmW_R^l&m=%zP%ZisZey&(PL?$A z=IG%#xk1XWo=R&23|G>>!4$Pz{)|My&s81>(Zkp8ISL5&X!q&-EO@=GW)>YIHv0H_ zarw7j;3IFW_%*}4ITPaVzL#SF*LiKo_kX&EXu6@^$maq=&o}Q&UDF zr3v1)OZXTnek)}ywY?Et_F0O)x@T#(75Ad@(njsN5ptbzs^!}bth$jg+|UU6y*GPI z!fAqYfjs1j+V|ZbNmpt!R6}k;k-=zrmHPNu8;iPWVm)ydJb<WFD@sV^l@^r7ey4G%Q>BgS7j)8 zDy(KM{qE;`QCFT7K68<-;Lui{_q7ozHB1yZ`~@PP1-i6T{ztkv=g9CD@0fBv=ZJP? zeIvK*J_?HLL_89NHLaD8X*xa?`=E|WbV>M*ps~YhJNhgZ#h@RJ}Kr5H~A)sbX z$PE)M!$~XOy!hFcA!o@SVQ(()o=UsdW=VdpHa?K7j|qN2zEJAKv}$^%Q`1^Q2VN|j zrkrIMt3HT(GY~;lDA=R%sp!87Z&3-(7e(^)x7;fW@qClQ&)5xK@l>u6bio3-G|~TP zG?zhJ!K!>u0V17Wke$%ePA$&+5u;~&^x`h9Cq8VVCk3Uz6$+q{-CWK;B5wSJ^(fP#RL6ZkX(Q459c;Eu8IAw+Y;}`3_pWsN& z5Zd@(VfmD^#;S5`vp9)-`a@pPk(NnxEcgZ+2~tK@@l@KgSyRw$ke?&__!@h@xG@Hi z)9HPOm*u~sk>m0uiOSdkuhf+clMs08dnA59H2mm8#c7`RJ{c_e&0R5A!&-RyV8wXZ ziFfYnd;hh@%H!^Id#_)<^LHYCI_n-kjc!3Mvm*5P>R;>Xdl^(Alh!BS$zwL1FCxvX zjoFF*G7OEP2jEJr!<^pVAR#n=(@3K0CltO(iiz?_WAS@Wq|&Dx&iF|fyroeP9EUU!{CEqS*&WV1khf_q$%`5Nh(&E|j6LYghI zn#uJ9#Y*(3yMshgV?UN&k(nTBbt!icOTKrwp@8@HPqBC7UUd8+g1znxrN^Q#k z;-^5is&g{j--w!EsTrvDk=huAj8Vhfz{$8tQ;K$!{Zhhk&4GsLQ$F9TpS<*r03kK>wTuU4J zU&(05W21cq9RdIJ=2Z#%!>5bHrQbwj(_UZiz4$(WXfJpm=^rT80*Uy7J`^vMmLPvC z4c>9Q+SZqTvu0DJ$I6V`lLN)`;u8C_8|TL@uU@GW=u>-p~}CCdBT0NQD!5rsc7yMGb(>U zXBL74;Hz8GV)5{u4s^YwyS-vi=YGpALeSFNiY1_$xWnL$M((vOuj!J7J{ienlt%i!7GPngI?rOs- zi^hTm=v{AXV&6QqDO{-9%$2MxiY86>e8G5u`l{*2h?N4kLB9%JKL+q9cqFY>Rt=~& zdPrBn(q1U?pS*~v_S0NJYr1>z?=z*TeNOe(%4XCdD*hGhk8DWlW+!0fXkLEsXWPxJ zp7)=be-^H#+iYgvNlH7O-fuWHPEH2rYylD`<8Pn4=e6k0fU>c{GW3bH?)vTfD?Z== z$9J>^AR=+wvii0CF;o?Pj}Io3VzskqNTLlSkO*a}Dt$h|_VJzHu6{2UXH=L{o$b>E znmQ#EgH3Rsq_LpheBMUQKe~ev z8<-vP3E2`CDoVm2bDrJ&Wk2F2qVBpxJ*K<I<{=)2L4z7Xi2!pn`SHh+sM!L(oD>G;Djf^NOY$%RYN50g2u ziRLJs`kI`A!r{lup9PoGaG&;Ij-wj9J>1ylv<#gAz<hTz*m-Z>ufo^Wr}-B=3$yv`N;<>AXXyDZf{dGMu2!xQ*0h zzMU&eBSN4;q$=B~qzo>RnU*@~)H2M^>X{fB!av=lLlAGiJzjZS_88=dtL;P^gRPv?zI&MqTr1 z=85NrcOT5f|87$#s)M2q{ncW<=fbaX9g{elv>+|JmY1qSzzJ@S#LcMpXT~3tk9+u@ zzEJGdANOk>NN3db47(Vkup-s|3DqJ{!lq+(l(D%eMBNk_Ej_nmF#)5$=}vynuY>mG zUP17Roqyonuu0FfbFRJ7P{{GN|Bt76x3@IC3ofwoMR0w2Eh!y6zhk?Yl(~_GYwP@` z;b+ZiQyK*MTgGcknNqYkK{)P>0G}1X3tolp^1A}swH8B6CZc;??|=JRBxY^7dHENs z(~sw4L=*1#vkt0-p^$-zl5LE!U1Mb2j{W~I%U>poJ~A?2{Iqov+xv^+%qchSSle1E zBLJ`6!^$EGKFtUOSx&bzrtWs@_hQYUSquH_HJOB1X<16D-LE$MR;j68b7buB6&!ti zU5HL=0;e1;*PhdbSyr^1c}AAzuy@lT68bKfkNXP7?4l@deyaYCq6Im~bO65oN2b73BPu^n9qk+C(GvE{|pd|HJP0(O^K z#N+@u0|Crv`k-yMt$?B2z#;#uQ_Gg;%^|Wellf3+$&N06{(U`%{vu_IR6<{TB536N z{82JqgjuX=icAR{yn*w*93c}Hn`&P99ywmvmr!CP<9Nu*j1x|8uQ)TJg_ANc`(1BM z2n4A<5695#Hm#~0_&gXXRI~?F-V$1E`N86XH@-Jgn!4d|HisOf;~w*4lzGI&9JmAI5TPP&&H+K#eC87*{eEH5U!ljG(r*eXFr=1zK3>8mdZax`R`btAKP8*j1 zL)eP^@7s(q<{I7Mi-Y%n4)wVVoozy5B!xDv{1w0vY6Rj+$Zx5+5` zN0=XHr9C4zGK-#jGAwpWZQ!hIDe6NJ)kyVH&ruj@oGt}{lgyZ1NBUrLDUVI%kmrJD zZVx;Z9sb|M#%Nf+=#kNb7rhom7DI7wn)A+Jf>yZ&fwSrpEH|dPwe$2d0cL;Gcn}e4 z3CM^MUyWJ|Btj`Y4;c~+BzUx!WgkXT-`vgOuQvlS-Drk8pF2SWDmu*&GiD-4*)+eE z!pIfdRoeZ_A+}shNI?JIw3w)`hB*wIb;?3iWml+Evza<6?QXwMFVpE+r9tCqR3=WvY~dKno7uTfJd)k-wEpX(MM-b4 z26V-!Q^~AfaQiuD!SCi_b@{`I-8}~E-;#k3u}Q`I|E64GJ1p^SL`B#S7?)SS3da~w zUw+DR^~H^h3?V4Rt@JX-$+$ht1@u$`e~p`78V;1iSr_v4+?L>LwSNuOyq9rnBP2^~ zM(bwU;b+^p+&&7SI{6{Z`M$>k;kD4bPobmjJBmzf@58OwHJ7_XtvCZvP!coIM9Ng(@%Ateq%kU6#|nwPIp zi}kWcu|{H>{iMh z^RsNh%j9O2%haXF?wWSDg0UT{x#37b0SgdB-UX^2;OudUp8Je^lUC<#zYBf69MHbhK9wEp5mch7E00^#U zC{L_b9hIrdyP)e#jM*=5>R zfPSq@ob7C;)6Z=*O3U+_@y;}>{HRMG@~@X14S&G}-*=7`ENv}HfnwQNJk#a0RYiSi zt3p+e{!VsSy_M<<89~M~9xWI-`{W$BX5P%enbmezqrkay@>tAaPES>ApyqmOwaS{V zihmgZ%DBiGbs4xYg`=Yd2KZb%|Wl<+x_lj42kZzo#rdrRHC^Tqy-T7cCT4%`RZ7?d+8RJHq7 zIB`fl$?rh_Sz0-pN{RYGV5vw{@zfaUO|4g1gdD>UFy1WwNEqp8U8fWz=GenDB#_&H zNIfjgQvF>fM&kt@+a(PKyMINcJ009$`rTxw1az24>`>*&m*#=sa0TI9e> z1IJMdk*|Rj8zp1?KP$byW?eXl_^NY-G;IJ>C*I0Wqi<0YqVJ$A-O zD{VJQ*AuFK&cf-}%8%-K;iC+N$H@4R^SOZCecm6QE6lR}kATgKwSKtfhl`jGczX)P zC=r<7F}fF0ch|5u52(Lbh|;GV>EDF68d>CgK+B}es;RAhJw8HB_`hi1S5TK;h0oR~ zzfh{j8nd1lSD18)>!o-xmm4rf>EWQI{&i9O$pb%ES9*NO|A18xaYy0AafB2;#Io33 zq&w#LGs4B@CsphN@sYli@6QQ-x%%x6uOW&;<1G63cdCrj#8v>lgJy@3%<44=ow(83BkU2C0k{Y zoA~f&@BIUYO)()MsQU;dkt64JPN9fErDFlZi(E1q)?Vg0gJ1w^Bl>RJc)ixoB5_Hf zvmG1}!>xP2WfB^Jv#=96n29jvbdOhU9tPhrszoTbs)*_58=Iv$dMl%Cf3zW-fwZ)9 zP;B8H0rwqt>j%L+aKogm&f5vJgw_1f^;<@4!EIhh?pZfPX7CfRN^T(yF_D~gGdFad z@>2|dXc%Un#nWE}nFlVDT9;)~!lT)wcCfQQVFs#6qF1xDmy9-mCV2r6X+U(-v6cR4 zv#m;65V8rz+eLhYN6x<*wkJNmI7nW(bU)ka-E(PhwBwH7Y5OxD=^@vlSbqW1#D$|KIavHvJVQkUB)_V(#Ld(Q#h^`h4}mpEYN1W0>XQJ5?7n{=gPITT9tHPWr3u0pA}+NU2H23;gT78qM5{ zn}1v`tqvT|o?Jx&uZp{hU@=Yvx#Ew2u%i$W1gK`2uOtBw$T8dL{^G6HN!c*}smogs zcTG_8y^zjw zjp(fSGN+#HZp0n(bE!XR0diQ8fR%?_8Wcm@p#guiTQ{zG-_uHOe)VmI;Ir7@afO-Z zIn;IF*K_1<{)w!Qv*29GAN`4Xu~{)^)i#iuwg&E6r@C=#n}rz4|1-kXTM0IaMWY

    As!dHE7o8jMW_{y1=-@ljrM3 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Ðcz*wyt?!F;-3sdea$IE)D%y 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 O0D-5gpUXO@geCyMVxb5C literal 0 HcmV?d00001 From cd6692661d8c5314ba9409d9a132e1e2f3728fd9 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sat, 9 Sep 2023 11:32:18 +0200 Subject: [PATCH 383/943] Move Sizing_field_base.h out of internal --- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 2 +- .../{internal => }/Isotropic_remeshing/Sizing_field_base.h | 0 .../include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/{internal => }/Isotropic_remeshing/Sizing_field_base.h (100%) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index fcc96deb9baf..b1794a6a6b77 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -15,7 +15,7 @@ #include -#include +#include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Isotropic_remeshing/Sizing_field_base.h similarity index 100% rename from Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/Sizing_field_base.h rename to Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Isotropic_remeshing/Sizing_field_base.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h index c49273921074..02d21df369be 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Uniform_sizing_field.h @@ -15,7 +15,7 @@ #include -#include +#include #include From 22b08dfaf86a0a5792ea6d656b8b34a1b911dced Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sat, 9 Sep 2023 11:46:43 +0200 Subject: [PATCH 384/943] Update documentation Info on curvature calculation in Adaptive_sizing_field Update reference manual welcome page --- .../doc/Polygon_mesh_processing/PackageDescription.txt | 7 +++++-- .../CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 83929a699818..74bfc24e231b 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -115,8 +115,6 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::split()` \cgalCRPSection{Meshing Functions} -- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::isotropic_remeshing()` \endlink -- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::split_long_edges()` \endlink - `CGAL::Polygon_mesh_processing::remesh_planar_patches()` - `CGAL::Polygon_mesh_processing::remesh_almost_planar_patches()` - `CGAL::Polygon_mesh_processing::refine()` @@ -131,9 +129,14 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::smooth_mesh()` (deprecated) - `CGAL::Polygon_mesh_processing::angle_and_area_smoothing()` - `CGAL::Polygon_mesh_processing::tangential_relaxation()` +- `CGAL::Polygon_mesh_processing::tangential_relaxation_with_sizing()` - `CGAL::Polygon_mesh_processing::smooth_shape()` - `CGAL::Polygon_mesh_processing::random_perturbation()` +\cgalCRPSection{Sizing Fields} +- `CGAL::Polygon_mesh_processing::Uniform_sizing_field()` +- `CGAL::Polygon_mesh_processing::Adaptive_sizing_field()` + \cgalCRPSection{Orientation Functions} - `CGAL::Polygon_mesh_processing::orient_polygon_soup()` - `CGAL::Polygon_mesh_processing::orient()` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index b1794a6a6b77..60c9e5f76597 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -32,6 +32,9 @@ namespace Polygon_mesh_processing * provides a set of instructions for isotropic remeshing to achieve variable * mesh edge lengths as a function of local discrete curvatures. * +* The local discrete curvatures are calculated using the +* `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures_and_directions()` function. +* * Edges longer than the local target edge length are split in half, while * edges shorter than the local target edge length are collapsed. * From 7037103416379b20e7254325460696b95d98a20d Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sat, 9 Sep 2023 12:49:03 +0200 Subject: [PATCH 385/943] Introduce ball_radius NP for curvature calculation in Adaptive_sizing_field --- .../Adaptive_sizing_field.h | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 60c9e5f76597..783b7f5e5669 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -71,31 +71,50 @@ class Adaptive_sizing_field : public Sizing_field_base * * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, * model of `Range`. Its iterator type is `ForwardIterator`. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tol the error tolerance, used together with curvature to derive target edge length. - * Lower tolerance values will result in shorter mesh edges. + * Lower tolerance values will result in shorter mesh edges. * @param edge_len_min_max is the stopping criterion for minimum and maximum allowed * edge length. * @param face_range the range of triangular faces defining one or several surface patches * to be remeshed. It should be the same as the range of faces used for `isotropic_remeshing()`. * @param pmesh a polygon mesh with triangulated surface patches to be remeshed. It should be the * same mesh as the one used in `isotropic_remeshing()`. + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + + * \cgalNamedParamsBegin + * \cgalParamNBegin{ball_radius} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures + * by summing measures of faces inside a ball of this radius centered at the + * vertex expanded from. The summed face measures are weighted by their + * inclusion ratio inside this ball.} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures. + * It can effectively smooth the curvature field and consequently the sizing field.} + * \cgalParamType{`Base::FT`} + * \cgalParamDefault{`-1`} + * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of + * measures on faces around the vertex.} + * \cgalParamNEnd */ - template + template Adaptive_sizing_field(const double tol , const std::pair& edge_len_min_max , const FaceRange& face_range - , PolygonMesh& pmesh) + , PolygonMesh& pmesh + , const NamedParameters& np = parameters::default_values()) : tol(tol) , m_short(edge_len_min_max.first) , m_long(edge_len_min_max.second) , m_vpmap(get(CGAL::vertex_point, pmesh)) , m_vertex_sizing_map(get(Vertex_property_tag(), pmesh)) { + if (face_range.size() == faces(pmesh).size()) { // calculate curvature from the whole mesh - calc_sizing_map(pmesh); + calc_sizing_map(pmesh, np); } else { @@ -108,14 +127,16 @@ class Adaptive_sizing_field : public Sizing_field_base is_selected, std::back_inserter(selection)); Face_filtered_graph ffg(pmesh, selection); - calc_sizing_map(ffg); + calc_sizing_map(ffg, np); } } ///@} private: - template - void calc_sizing_map(FaceGraph& face_graph) + template + void calc_sizing_map(FaceGraph& face_graph + , const NamedParameters& np) { //todo ip: please check if this is good enough to store curvature typedef Principal_curvatures_and_directions Principal_curvatures; @@ -123,6 +144,10 @@ class Adaptive_sizing_field : public Sizing_field_base typedef typename boost::property_map::type Vertex_curvature_map; + using parameters::choose_parameter; + using parameters::get_parameter; + typename Base::FT radius = choose_parameter(get_parameter(np, internal_np::ball_radius), -1); + #ifdef CGAL_PMP_REMESHING_VERBOSE int oversize = 0; int undersize = 0; @@ -132,7 +157,8 @@ class Adaptive_sizing_field : public Sizing_field_base Vertex_curvature_map vertex_curvature_map = get(Vertex_curvature_tag(), face_graph); interpolated_corrected_principal_curvatures_and_directions(face_graph - , vertex_curvature_map); + , vertex_curvature_map + , parameters::ball_radius(radius)); // calculate vertex sizing field L(x_i) from the curvature field for(vertex_descriptor v : vertices(face_graph)) { From 426c6f9f5b156b1938ab59f19e2682c5cf7e3ff5 Mon Sep 17 00:00:00 2001 From: Ivan Paden Date: Sat, 9 Sep 2023 15:56:04 +0200 Subject: [PATCH 386/943] Update polyhedron demo with ball_radius np in Adaptive_sizing_field --- .../Adaptive_sizing_field.h | 7 +- .../Plugins/PMP/Isotropic_remeshing_dialog.ui | 219 ++++++++++-------- .../PMP/Isotropic_remeshing_plugin.cpp | 73 ++++-- 3 files changed, 191 insertions(+), 108 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 783b7f5e5669..6525d7b2f85f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -85,10 +85,9 @@ class Adaptive_sizing_field : public Sizing_field_base * \cgalNamedParamsBegin * \cgalParamNBegin{ball_radius} - * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures - * by summing measures of faces inside a ball of this radius centered at the - * vertex expanded from. The summed face measures are weighted by their - * inclusion ratio inside this ball.} + * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures. + * It can potentially smooth the curvature and consequently the sizing field in the + * case of noisy input.} * \cgalParamDescription{a scalar value specifying the radius used for expanding curvature measures. * It can effectively smooth the curvature field and consequently the sizing field.} * \cgalParamType{`Base::FT`} diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui index 540a52c1bff9..fd2e9c6ab6c3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_dialog.ui @@ -10,7 +10,7 @@ 0 0 381 - 545 + 620 @@ -59,7 +59,68 @@ Isotropic remeshing - + + + + + + + + + + + + Minimum edge length + + + + + + + + + + + + + + 0 + + + 100 + + + 1 + + + + + + + Error tolerance + + + + + + + + + + true + + + + + + + + + + 0.00 + + + @@ -109,7 +170,7 @@ - + Qt::Vertical @@ -122,87 +183,17 @@ - - - - Qt::Vertical - - - QSizePolicy::Maximum - - - - 20 - 24 - - - - - - - - Error tolerance - - - - - - - - - - 0.00 - - - - - - - Minimum edge length - - - - - - - - - - - - - - 0 - - - 100 - - - 1 - - - - - - - - - - true - - - - - + + - Number of Smoothing iterations + Allow 1D smoothing along borders Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + Protect borders/selected edges @@ -212,24 +203,14 @@ - + - - - - Allow 1D smoothing along borders - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - + Preserve duplicated edges @@ -239,7 +220,7 @@ - + @@ -252,7 +233,7 @@ - + Number of Main iterations @@ -265,6 +246,22 @@ + + + + Qt::Vertical + + + QSizePolicy::Maximum + + + + 20 + 24 + + + + @@ -312,6 +309,46 @@ + + + + Number of Smoothing iterations + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Ball radius + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Curvature smoothing + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + -1 + + + false + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index a819c2c22943..06155a62c217 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -300,7 +300,8 @@ class Polyhedron_demo_isotropic_remeshing_plugin : const double target_length, const double error_tol, const double min_length, - const double max_length) + const double max_length, + const double curv_ball_r) { std::vector p_edges; for(edge_descriptor e : edges(pmesh)) @@ -335,7 +336,8 @@ class Polyhedron_demo_isotropic_remeshing_plugin : error_tol , edge_min_max , faces(*selection_item->polyhedron()) - , *selection_item->polyhedron()); + , *selection_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r)); CGAL::Polygon_mesh_processing::split_long_edges( p_edges , adaptive_sizing @@ -394,6 +396,8 @@ public Q_SLOTS: unsigned int nb_smooth = ui.nbSmoothing_spinbox->value(); bool protect = ui.protect_checkbox->isChecked(); bool smooth_features = ui.smooth1D_checkbox->isChecked(); + bool curv_smooth = ui.curvSmooth_checkbox->isChecked(); + double curv_ball_r = ui.curvSmoothBallR_edit->value(); // wait cursor QApplication::setOverrideCursor(Qt::WaitCursor); @@ -425,7 +429,8 @@ public Q_SLOTS: { if (edges_only) { - do_split_edges(edge_sizing_type, selection_item, pmesh, target_length, error_tol, min_length, max_length); + do_split_edges(edge_sizing_type, selection_item, pmesh, + target_length, error_tol, min_length, max_length, curv_ball_r); } else //not edges_only { @@ -461,7 +466,8 @@ public Q_SLOTS: } else { - do_split_edges(edge_sizing_type, selection_item, pmesh, target_length, error_tol, min_length, max_length); + do_split_edges(edge_sizing_type, selection_item, pmesh, + target_length, error_tol, min_length, max_length, curv_ball_r); } } @@ -517,7 +523,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*selection_item->polyhedron()) - , *selection_item->polyhedron()); + , *selection_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r)); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing(faces(*selection_item->polyhedron()) , adaptive_sizing_field @@ -600,7 +607,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*selection_item->polyhedron()) - , *selection_item->polyhedron()); + , *selection_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r)); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing(selection_item->selected_facets , adaptive_sizing_field @@ -675,9 +683,10 @@ public Q_SLOTS: { std::pair edge_min_max{min_length, max_length}; PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol - , edge_min_max - , faces(pmesh) - , pmesh); + , edge_min_max + , faces(pmesh) + , pmesh + , CGAL::parameters::ball_radius(curv_ball_r)); CGAL::Polygon_mesh_processing::split_long_edges( edges_to_split , target_length @@ -704,7 +713,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(pmesh) - , pmesh); + , pmesh + , CGAL::parameters::ball_radius(curv_ball_r)); CGAL::Polygon_mesh_processing::split_long_edges( edges_to_split , adaptive_sizing_field @@ -799,7 +809,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol , edge_min_max , faces(*poly_item->polyhedron()) - , *poly_item->polyhedron()); + , *poly_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r)); if (fpmap_valid) CGAL::Polygon_mesh_processing::isotropic_remeshing( faces(*poly_item->polyhedron()) @@ -862,6 +873,8 @@ public Q_SLOTS: unsigned int nb_iter = 1; bool protect = false; bool smooth_features = true; + bool curv_smooth = false; + double curv_ball_r = -1; std::vector selection; for(int index : scene->selectionIndices()) @@ -902,6 +915,8 @@ public Q_SLOTS: nb_iter = ui.nbIterations_spinbox->value(); protect = ui.protect_checkbox->isChecked(); smooth_features = ui.smooth1D_checkbox->isChecked(); + curv_smooth = ui.curvSmooth_checkbox->isChecked(); + curv_ball_r = ui.curvSmoothBallR_edit->value(); } } } @@ -1011,6 +1026,8 @@ public Q_SLOTS: unsigned int nb_iter_; bool protect_; bool smooth_features_; + bool curv_smooth_; + double curv_ball_r_; protected: void remesh(Scene_facegraph_item* poly_item, @@ -1042,7 +1059,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ , edge_min_max , faces(*poly_item->polyhedron()) - , *poly_item->polyhedron()); + , *poly_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r_)); CGAL::Polygon_mesh_processing::split_long_edges( border_edges , target_length_ @@ -1072,7 +1090,8 @@ public Q_SLOTS: PMP::Adaptive_sizing_field adaptive_sizing_field(error_tol_ , edge_min_max , faces(*poly_item->polyhedron()) - , *poly_item->polyhedron()); + , *poly_item->polyhedron() + , CGAL::parameters::ball_radius(curv_ball_r_)); CGAL::Polygon_mesh_processing::isotropic_remeshing( faces(*poly_item->polyhedron()) , target_length_ @@ -1234,6 +1253,10 @@ public Q_SLOTS: ui.minEdgeLength_edit->hide(); ui.maxEdgeLength_label->hide(); ui.maxEdgeLength_edit->hide(); + ui.curvSmooth_checkbox->hide(); + ui.curvSmooth_label->hide(); + ui.curvSmoothBallR_edit->hide(); + ui.curvSmoothBallR_label->hide(); } else if (index == 1) { @@ -1245,6 +1268,25 @@ public Q_SLOTS: ui.minEdgeLength_edit->show(); ui.maxEdgeLength_label->show(); ui.maxEdgeLength_edit->show(); + ui.curvSmooth_checkbox->show(); + ui.curvSmooth_label->show(); + ui.curvSmoothBallR_edit->show(); + ui.curvSmoothBallR_label->show(); + } + } + + void update_after_curvSmooth_click() + { + if (ui.curvSmooth_checkbox->isChecked()) + { + ui.curvSmoothBallR_label->setEnabled(true); + ui.curvSmoothBallR_edit->setEnabled(true); + } + else + { + ui.curvSmoothBallR_label->setEnabled(false); + ui.curvSmoothBallR_edit->setValue(-1); + ui.curvSmoothBallR_edit->setEnabled(false); } } @@ -1268,6 +1310,7 @@ public Q_SLOTS: connect(ui.splitEdgesOnly_checkbox, SIGNAL(clicked(bool)), this, SLOT(update_after_splitEdgesOnly_click())); connect(ui.edgeSizing_type_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(on_edgeSizing_type_combo_box_changed(int))); + connect(ui.curvSmooth_checkbox, SIGNAL(clicked(bool)), this, SLOT(update_after_curvSmooth_click())); //Set default parameters Scene_interface::Bbox bbox = poly_item != nullptr ? poly_item->bbox() @@ -1313,6 +1356,10 @@ public Q_SLOTS: on_edgeSizing_type_combo_box_changed(0); ui.protect_checkbox->setChecked(false); ui.smooth1D_checkbox->setChecked(true); + ui.curvSmooth_checkbox->setChecked(false); + ui.curvSmoothBallR_label->setEnabled(false); + ui.curvSmoothBallR_edit->setEnabled(false); + ui.curvSmoothBallR_edit->setValue(-1); if (nullptr != selection_item) { From b370381e0a54153a2c48b8748001b244c4d232d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 12 Sep 2023 15:26:31 +0200 Subject: [PATCH 387/943] add missing ending --- .../include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h index 6525d7b2f85f..d77803bba822 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Adaptive_sizing_field.h @@ -95,6 +95,7 @@ class Adaptive_sizing_field : public Sizing_field_base * \cgalParamExtra{If this parameter is omitted (`-1`), the expansion will just by a weightless sum of * measures on faces around the vertex.} * \cgalParamNEnd + * \cgalNamedParamsEnd */ template From cf1b5fd46af49ea1d557c2fb499d99a6c07fc043 Mon Sep 17 00:00:00 2001 From: Nicolas Saillant Date: Wed, 13 Sep 2023 11:38:45 +0200 Subject: [PATCH 388/943] Update CMakeLists for QT6 --- .../Hyperbolic_triangulation_2/CMakeLists.txt | 2 +- .../Periodic_3_triangulation_3/CMakeLists.txt | 3 +- .../CMakeLists.txt | 2 +- .../CMakeLists.txt | 33 +++---------------- .../Principal_component_analysis/PCA_demo.cpp | 6 ---- 5 files changed, 9 insertions(+), 37 deletions(-) diff --git a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt index 9d46e7227294..c4191347bfdc 100644 --- a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt +++ b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt @@ -20,7 +20,7 @@ if(CGAL_Qt6_FOUND set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) - qt_add_executable ( HDT2 HDT2.cpp) + qt_add_executable ( HDT2 HDT2.cpp resources/Delaunay_triangulation_2.qrc) target_include_directories(HDT2 PRIVATE ./ ./include) add_to_cached_list( CGAL_EXECUTABLE_TARGETS HDT2 ) target_link_libraries ( HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt index 22c26c48986b..7225c76cd3ba 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt @@ -50,7 +50,8 @@ if(CGAL_Qt6_FOUND periodic_3_triangulation_3_demo.cpp MainWindow.ui moc_MainWindow.cpp - Periodic_3_triangulation_3.qhc) + Periodic_3_triangulation_3.qhc + Periodic_3_triangulation_3.qrc) add_to_cached_list(CGAL_EXECUTABLE_TARGETS periodic_3_triangulation_3_demo) diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt index d3ba88394b2f..3b838ba2c829 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt @@ -24,7 +24,7 @@ if((CGAL_Core_FOUND OR LEDA_FOUND) set(CMAKE_AUTORCC ON) # cpp files - qt_add_executable(P4HDT2 P4HDT2.cpp P4HDT2.ui) + qt_add_executable(P4HDT2 P4HDT2.cpp P4HDT2.ui Main_resources.qrc) target_link_libraries(P4HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(TARGET CGAL::CGAL_Core) diff --git a/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt b/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt index 9b7e95914aae..9a6ace55f2b3 100644 --- a/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt +++ b/Principal_component_analysis/demo/Principal_component_analysis/CMakeLists.txt @@ -3,15 +3,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Principal_component_analysis_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - include_directories(./) # Find CGAL and CGAL Qt6 @@ -25,30 +16,16 @@ if(NOT TARGET CGAL::Eigen3_support) endif() # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets OpenGL) +find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) if(CGAL_Qt6_FOUND AND Qt6_FOUND) set(CMAKE_INCLUDE_CURRENT_DIR ON) - qt6_wrap_ui(UI_FILES MainWindow.ui) - - include(AddFileDependencies) - - qt6_generate_moc("MainWindow.h" - "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp") - add_file_dependencies(MainWindow_moc.cpp - "${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h") - - qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") - add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h") - - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES PCA_demo.qrc) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - add_file_dependencies( - PCA_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp" - "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp") - add_executable(PCA_demo PCA_demo.cpp ${UI_FILES} ${CGAL_Qt6_RESOURCE_FILES} - ${CGAL_Qt6_MOC_FILES}) + qt_add_executable(PCA_demo PCA_demo.cpp MainWindow.ui MainWindow.cpp Viewer.cpp Scene.cpp) target_link_libraries(PCA_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 CGAL::Eigen3_support Qt6::Widgets Qt6::OpenGL) diff --git a/Principal_component_analysis/demo/Principal_component_analysis/PCA_demo.cpp b/Principal_component_analysis/demo/Principal_component_analysis/PCA_demo.cpp index 04b8cf11f13c..a5a393c4d478 100644 --- a/Principal_component_analysis/demo/Principal_component_analysis/PCA_demo.cpp +++ b/Principal_component_analysis/demo/Principal_component_analysis/PCA_demo.cpp @@ -51,9 +51,3 @@ int main(int argc, char **argv) return app.exec(); } -# include "Scene.cpp" -# include "Viewer.cpp" -# include "Viewer_moc.cpp" -# include "MainWindow.cpp" -# include "MainWindow_moc.cpp" - From 4b3279e66589ddce5159d4973cebc4b1f51e28ec Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 13 Sep 2023 14:59:10 +0200 Subject: [PATCH 389/943] Remove the "Use OpenGL" option from 2D demos --- .../include/CGAL/Qt/DemosMainWindow.h | 2 - .../include/CGAL/Qt/DemosMainWindow_impl.h | 40 ------------------- 2 files changed, 42 deletions(-) diff --git a/GraphicsView/include/CGAL/Qt/DemosMainWindow.h b/GraphicsView/include/CGAL/Qt/DemosMainWindow.h index d28d98b37188..8f71f6bf1171 100644 --- a/GraphicsView/include/CGAL/Qt/DemosMainWindow.h +++ b/GraphicsView/include/CGAL/Qt/DemosMainWindow.h @@ -89,7 +89,6 @@ public Q_SLOTS: protected Q_SLOTS: void setUseAntialiasing(bool checked); - void setUseOpenGL(bool checked); void popupAboutCGAL(); void popupAboutDemo(); @@ -108,7 +107,6 @@ protected Q_SLOTS: GraphicsViewNavigation* navigation; QLabel* xycoord ; - QAction *actionUse_OpenGL; QAction *actionUse_Antialiasing; QAction *actionAbout; QAction *actionAboutCGAL; diff --git a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h index 8b6cb174703c..5f8c85c1d7f3 100644 --- a/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h +++ b/GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -41,7 +40,6 @@ # include #endif #include -#include #include // needed to get CGAL_VERSION_STR #include @@ -62,13 +60,6 @@ DemosMainWindow::DemosMainWindow(QWidget * parent, ::Qt::WindowFlags flags) xycoord->setMinimumSize(xycoord->sizeHint()); xycoord->clear(); - actionUse_OpenGL = new QAction(this); - actionUse_OpenGL->setObjectName("actionUse_OpenGL"); - actionUse_OpenGL->setCheckable(true); - actionUse_OpenGL->setText(tr("Use &OpenGL")); - actionUse_OpenGL->setStatusTip(tr("Make Qt use OpenGL to display the graphical items, instead of its native painting system.")); - actionUse_OpenGL->setShortcut(tr("Ctrl+G")); - actionUse_Antialiasing = new QAction(this); actionUse_Antialiasing->setObjectName("actionUse_Antialiasing"); actionUse_Antialiasing->setCheckable(true); @@ -151,12 +142,9 @@ DemosMainWindow::setupOptionsMenu(QMenu* menuOptions) if(!menuOptions->isEmpty()) { menuOptions->addSeparator(); } - menuOptions->addAction(actionUse_OpenGL); menuOptions->addAction(actionUse_Antialiasing); connect(actionUse_Antialiasing, SIGNAL(toggled(bool)), this, SLOT(setUseAntialiasing(bool))); - connect(actionUse_OpenGL, SIGNAL(toggled(bool)), - this, SLOT(setUseOpenGL(bool))); actionUse_Antialiasing->setChecked(true); } @@ -203,34 +191,6 @@ DemosMainWindow::setUseAntialiasing(bool checked) 1000); } -CGAL_INLINE_FUNCTION -void -DemosMainWindow::setUseOpenGL(bool checked) -{ - if(checked) { - QOpenGLWidget* new_viewport = new QOpenGLWidget(this); - new_viewport->setUpdateBehavior(QOpenGLWidget::NoPartialUpdate); - - // Setup the format to allow antialiasing with OpenGL: - // one need to activate the SampleBuffers, if the graphic driver allows - // this. - auto glformat = new_viewport->format(); - glformat.setSamples(4); - new_viewport->setFormat(glformat); - - view->setViewport(new_viewport); - view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - } - else { - view->setViewport(new QWidget(this)); - view->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate); - } - statusBar()->showMessage(tr("OpenGL %1activated").arg(checked?"":"de-"), - 1000); - view->viewport()->installEventFilter(navigation); - view->setFocus(); -} - CGAL_INLINE_FUNCTION QMenu* DemosMainWindow::getMenu(QString objectName, QString title) From 0d9037b8dacbae191c3f7deac483d30fffca06a3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 13 Sep 2023 14:59:21 +0200 Subject: [PATCH 390/943] add the ui file --- .../demo/Hyperbolic_triangulation_2/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt index c4191347bfdc..2f75d88b48ae 100644 --- a/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt +++ b/Hyperbolic_triangulation_2/demo/Hyperbolic_triangulation_2/CMakeLists.txt @@ -4,9 +4,6 @@ project(Hyperbolic_triangulation_2_Demo) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) find_package(LEDA QUIET) @@ -17,10 +14,11 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND AND (CGAL_Core_FOUND OR LEDA_FOUND)) + set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) - qt_add_executable ( HDT2 HDT2.cpp resources/Delaunay_triangulation_2.qrc) + qt_add_executable ( HDT2 HDT2.cpp HDT2.ui resources/Delaunay_triangulation_2.qrc ) target_include_directories(HDT2 PRIVATE ./ ./include) add_to_cached_list( CGAL_EXECUTABLE_TARGETS HDT2 ) target_link_libraries ( HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) From 67baec27a1e9b9d64128d054ddc12fdd625a090c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 13 Sep 2023 15:37:01 +0200 Subject: [PATCH 391/943] Fix Optimal_transportation_reconstruction_2_Demo --- .../CMakeLists.txt | 56 +++---------------- .../dialog_options.cpp | 3 + .../dialog_options.h | 1 + .../scene.h | 1 + .../window.cpp | 1 - 5 files changed, 14 insertions(+), 48 deletions(-) create mode 100644 Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.cpp diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt index 2b4aafc27cb8..5b8060beca2b 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt @@ -3,27 +3,11 @@ cmake_minimum_required(VERSION 3.1...3.23) project(Optimal_transportation_reconstruction_2_Demo) -if(NOT POLICY CMP0070 AND POLICY CMP0053) - # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. - cmake_policy(SET CMP0053 OLD) -endif() - -if(POLICY CMP0071) - cmake_policy(SET CMP0071 NEW) -endif() - -# Include this package's headers first -include_directories(BEFORE ./ ./include) - # Find CGAL and CGAL Qt6 find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) -if(Qt6_FOUND) - add_definitions(-DQT_NO_KEYWORDS) - set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif(Qt6_FOUND) # Find CImg find_path( @@ -40,33 +24,15 @@ else() endif() if(CGAL_Qt6_FOUND AND Qt6_FOUND) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) - set(SRCS glviewer.cpp scene.cpp Otr2_demo.cpp window.cpp render.cpp) - - set(CGAL_Qt6_MOC_FILES moc_dialog_options.cxx moc_glviewer.cxx moc_window.cxx) - - set(UIS pwsrec.ui options.ui) - - qt6_wrap_ui(UI_FILES ${UIS}) - - include(AddFileDependencies) - - qt6_generate_moc("window.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_window.cxx") - add_file_dependencies(moc_window.cxx "${CMAKE_CURRENT_SOURCE_DIR}/window.h") - - qt6_generate_moc("glviewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_glviewer.cxx") - add_file_dependencies(moc_glviewer.cxx - "${CMAKE_CURRENT_SOURCE_DIR}/glviewer.h") - - qt6_generate_moc("dialog_options.h" - "${CMAKE_CURRENT_BINARY_DIR}/moc_dialog_options.cxx") - add_file_dependencies(moc_dialog_options.cxx - "${CMAKE_CURRENT_SOURCE_DIR}/dialog_options.h") - - qt6_add_resources(CGAL_Qt6_RESOURCE_FILES pwsrec.qrc) + add_definitions(-DQT_NO_KEYWORDS) + set(CMAKE_INCLUDE_CURRENT_DIR ON) - add_executable(Otr2_demo ${SRCS} ${CGAL_Qt6_MOC_FILES} ${UI_FILES} - ${CGAL_Qt6_RESOURCE_FILES}) + add_executable(Otr2_demo glviewer.cpp scene.cpp Otr2_demo.cpp window.cpp render.cpp dialog_options.cpp + pwsrec.ui options.ui pwsrec.qrc) target_link_libraries(Otr2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGLWidgets) @@ -86,9 +52,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test(Otr2_demo) -else( - CGAL_Qt6_FOUND - AND Qt6_FOUND) +else() set(OTR2_MISSING_DEPS "") @@ -102,6 +66,4 @@ else( message("NOTICE: This demo requires ${OTR2_MISSING_DEPS} and will not be compiled.") -endif( - CGAL_Qt6_FOUND - AND Qt6_FOUND) +endif() diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.cpp b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.cpp new file mode 100644 index 000000000000..4419cbc979d5 --- /dev/null +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.cpp @@ -0,0 +1,3 @@ +#include "dialog_options.h" + +Dialog_options::~Dialog_options() {} diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.h b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.h index 8df3c2c86056..25d3f497bd51 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.h +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/dialog_options.h @@ -26,6 +26,7 @@ public Q_SLOTS: { setupUi(this); } + virtual ~Dialog_options(); void set_all_ranges() { diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/scene.h b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/scene.h index 7ac83c723f59..9cc6b7240571 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/scene.h +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/scene.h @@ -17,6 +17,7 @@ #ifdef CGAL_USE_CIMG #define cimg_display 0 // To avoid X11 or Windows-GDI dependency #include +#include #endif #include // std::pair #include diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/window.cpp b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/window.cpp index 31003233b111..3e52a5ef95e6 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/window.cpp +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/window.cpp @@ -11,7 +11,6 @@ // local #include "window.h" -#include "ui_options.h" #include "dialog_options.h" MainWindow::MainWindow() : From b01da56a56ee4418dc2396f6541ed1ffa7796497 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 13 Sep 2023 17:13:39 +0200 Subject: [PATCH 392/943] remove occurrences of OpenGLWidgets in demos' CMake scripts --- GraphicsView/demo/Polygon/CMakeLists.txt | 2 +- .../Optimal_transportation_reconstruction_2/CMakeLists.txt | 4 ++-- .../demo/Polyhedron/implicit_functions/CMakeLists.txt | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/GraphicsView/demo/Polygon/CMakeLists.txt b/GraphicsView/demo/Polygon/CMakeLists.txt index 341021360a39..303b381e038f 100644 --- a/GraphicsView/demo/Polygon/CMakeLists.txt +++ b/GraphicsView/demo/Polygon/CMakeLists.txt @@ -13,7 +13,7 @@ if(NOT TARGET CGAL::Eigen3_support) return() endif() -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt index 5b8060beca2b..d62d77e37b77 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt @@ -7,7 +7,7 @@ project(Optimal_transportation_reconstruction_2_Demo) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -find_package(Qt6 QUIET COMPONENTS Widgets OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Widgets) # Find CImg find_path( @@ -34,7 +34,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_executable(Otr2_demo glviewer.cpp scene.cpp Otr2_demo.cpp window.cpp render.cpp dialog_options.cpp pwsrec.ui options.ui pwsrec.qrc) - target_link_libraries(Otr2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::OpenGLWidgets) + target_link_libraries(Otr2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6) # Link with pthread if necessary if(CIMG_INCLUDE_DIR) diff --git a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt index b821fd3e7791..174535ff5d5e 100644 --- a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt @@ -23,11 +23,7 @@ include_directories(BEFORE ${Mesh_3_implicit_functions_BINARY_DIR} ../include) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) # Find Qt6 itself -set(QT_USE_QTXML TRUE) -set(QT_USE_QTMAIN TRUE) -set(QT_USE_QTSCRIPT TRUE) -set(QT_USE_QTOPENGL TRUE) -find_package(Qt6 QUIET COMPONENTS OpenGLWidgets) +find_package(Qt6 QUIET COMPONENTS Core) if(CGAL_Qt6_FOUND AND Qt6_FOUND) # put plugins (which are shared libraries) at the same location as From 03e89cc97b23d23c75964274969a69ba89fb138a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 13 Sep 2023 17:57:54 +0200 Subject: [PATCH 393/943] fix periodic_3_triangulation_3_demo --- .../demo/Periodic_3_triangulation_3/CMakeLists.txt | 10 +--------- .../demo/Periodic_3_triangulation_3/MainWindow.cpp | 8 ++++++++ .../demo/Periodic_3_triangulation_3/MainWindow.h | 7 +------ 3 files changed, 10 insertions(+), 15 deletions(-) create mode 100644 Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.cpp diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt index 7225c76cd3ba..bab63515c66d 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/CMakeLists.txt @@ -25,12 +25,6 @@ if(CGAL_Qt6_FOUND set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) - # use the Qt MOC preprocessor on classes that derive from QObject - qt6_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Scene.cpp") - qt6_generate_moc("MainWindow.h" - "${CMAKE_CURRENT_BINARY_DIR}/moc_MainWindow.cpp") - qt6_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_Viewer.cpp") - # generate QtAssistant collection file add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Periodic_3_triangulation_3.qhc @@ -44,12 +38,10 @@ if(CGAL_Qt6_FOUND qt_add_executable( periodic_3_triangulation_3_demo Scene.cpp - moc_Scene.cpp Viewer.cpp - moc_Viewer.cpp + MainWindow.cpp periodic_3_triangulation_3_demo.cpp MainWindow.ui - moc_MainWindow.cpp Periodic_3_triangulation_3.qhc Periodic_3_triangulation_3.qrc) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.cpp b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.cpp new file mode 100644 index 000000000000..2d77555e636b --- /dev/null +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.cpp @@ -0,0 +1,8 @@ +#include "MainWindow.h" + +MainWindow::~MainWindow() { + process->close(); + delete(process); + delete(s); + delete(ui); +} diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h index 79b3e5bec140..ca9bf07e1160 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h @@ -102,12 +102,7 @@ class MainWindow : public QMainWindow this, SLOT(about())); } - ~MainWindow() { - process->close(); - delete(process); - delete(s); - delete(ui); - } + ~MainWindow(); public Q_SLOTS: void help() { From 09a4ac1ad7769a229985094188815368a673ff4b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 14:39:45 +0200 Subject: [PATCH 394/943] cosmetic changes --- .../Optimal_transportation_reconstruction_2/CMakeLists.txt | 2 +- .../demo/Periodic_Lloyd_3/CMakeLists.txt | 6 +++--- Three/include/CGAL/Three/exceptions.h | 3 --- Triangulation_3/demo/Triangulation_3/CMakeLists.txt | 4 +--- Triangulation_3/demo/Triangulation_3/MainWindow.cpp | 4 +--- Triangulation_3/demo/Triangulation_3/MainWindow.ui | 6 ------ 6 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt index d62d77e37b77..207781a6c6b9 100644 --- a/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt +++ b/Optimal_transportation_reconstruction_2/demo/Optimal_transportation_reconstruction_2/CMakeLists.txt @@ -61,7 +61,7 @@ else() endif() if(NOT Qt6_FOUND) - set(OTR2_MISSING_DEPS "Qt6.4, ${OTR2_MISSING_DEPS}") + set(OTR2_MISSING_DEPS "Qt6, ${OTR2_MISSING_DEPS}") endif() message("NOTICE: This demo requires ${OTR2_MISSING_DEPS} and will not be compiled.") diff --git a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt index cb944392edf4..579699f9b6e7 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt +++ b/Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/CMakeLists.txt @@ -7,7 +7,6 @@ project(Periodic_Lloyd_3_Demo) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) @@ -21,8 +20,9 @@ if(CGAL_Qt6_FOUND include_directories(BEFORE ./) - set(CMAKE_AUTOUIC ON) - set(CMAKE_AUTORCC ON) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) if(DEFINED QT_QCOLLECTIONGENERATOR_EXECUTABLE) diff --git a/Three/include/CGAL/Three/exceptions.h b/Three/include/CGAL/Three/exceptions.h index 927489b4f203..ccf67496230f 100644 --- a/Three/include/CGAL/Three/exceptions.h +++ b/Three/include/CGAL/Three/exceptions.h @@ -19,9 +19,6 @@ #include #include #include -//#include -//#include -//#include #include #include diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index ab246bc44268..1cf16c563dfd 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -7,9 +7,6 @@ project(Triangulation_3_Demo) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed. -set(CMAKE_AUTOMOC ON) - find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) @@ -40,6 +37,7 @@ endif() if(CGAL_Qt6_FOUND AND Qt6_FOUND) include_directories(BEFORE ./) + set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) diff --git a/Triangulation_3/demo/Triangulation_3/MainWindow.cpp b/Triangulation_3/demo/Triangulation_3/MainWindow.cpp index 3e8af7b0b0b1..030948e7a2ca 100644 --- a/Triangulation_3/demo/Triangulation_3/MainWindow.cpp +++ b/Triangulation_3/demo/Triangulation_3/MainWindow.cpp @@ -72,8 +72,6 @@ void MainWindow::connectActions() // Help menu actions QObject::connect(this->actionDemo_Help, SIGNAL(triggered()), this->viewer, SLOT(help())); - QObject::connect(this->actionAbout_T3_demo, SIGNAL(triggered()), - this, SLOT(popupAboutDemo())); // Quit QObject::connect(this->actionQuit, SIGNAL(triggered()), @@ -214,7 +212,7 @@ void MainWindow::on_actionClear_Scene_triggered() void MainWindow::popupAboutCGAL() { // read contents from .html file - QFile about_CGAL(":/documentation/documentation/about.html"); + QFile about_CGAL(":/documentation/documentation/about_CGAL.html"); about_CGAL.open(QIODevice::ReadOnly|QIODevice::Text); QString about_CGAL_txt = QTextStream(&about_CGAL).readAll(); diff --git a/Triangulation_3/demo/Triangulation_3/MainWindow.ui b/Triangulation_3/demo/Triangulation_3/MainWindow.ui index e808c9eda3ba..0bdf33a8176f 100644 --- a/Triangulation_3/demo/Triangulation_3/MainWindow.ui +++ b/Triangulation_3/demo/Triangulation_3/MainWindow.ui @@ -112,7 +112,6 @@ Help - @@ -555,11 +554,6 @@ Stop Animation - - - About T3_demo - - From e93a09901caa9c96eafb667e128e3e593459c0d3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 15:13:46 +0200 Subject: [PATCH 395/943] finish review of polyhedron demo --- Polyhedron/demo/Polyhedron/Scene.cpp | 1 - Polyhedron/demo/Polyhedron/Show_point_dialog.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene.cpp b/Polyhedron/demo/Polyhedron/Scene.cpp index a00ef63117f3..feb5ab6f0024 100644 --- a/Polyhedron/demo/Polyhedron/Scene.cpp +++ b/Polyhedron/demo/Polyhedron/Scene.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp index 5df594bc57c4..915c6a0494f6 100644 --- a/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp +++ b/Polyhedron/demo/Polyhedron/Show_point_dialog.cpp @@ -53,7 +53,7 @@ void Show_point_dialog::interprete_string(const QString& string) + "$"; QRegularExpression re(full_re); - QRegularExpressionMatch match = re.match(string); // AF @todo QRegExp had exactMatch() + QRegularExpressionMatch match = re.match(string); if(match.hasMatch()) { // const double x = re.cap(1).toDouble(); // const double y = re.cap(2).toDouble(); From 2f6d51b49b495b2693d0be912e344876dee6e87a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 16:27:16 +0200 Subject: [PATCH 396/943] Remove a few occurrences of CGAL_Qt5 ... and replace by CGAL_Qt6 --- .../Arrangement_on_surface_2.txt | 4 +- .../CGAL/draw_arrangement_2.h | 4 +- .../CGAL/draw_polygon_set_2.h | 4 +- .../include/CGAL/draw_polygon_set_2.h | 4 +- .../create_and_use_a_cmakelist.txt | 6 +- .../doc/Documentation/Third_party.txt | 2 +- .../doc/scripts/test_doxygen_versions.sh | 2 +- GraphicsView/include/CGAL/Qt/CGAL_Qt_config.h | 4 +- GraphicsView/include/CGAL/auto_link/Qt.h | 4 +- GraphicsView/include/CGAL/export/Qt.h | 2 +- .../CGAL_Qt5_moc_and_resource_files.cmake | 25 ---- .../CGAL_SetupCGAL_Qt5Dependencies.cmake | 127 ------------------ ...GAL_enable_end_of_configuration_hook.cmake | 6 +- .../Help/CGAL_SetupCGAL_Qt5Dependencies.rst | 1 - .../Help/CGAL_SetupCGAL_Qt6Dependencies.rst | 1 + Installation/cmake/modules/Help/index.rst | 2 +- Installation/test/Installation/CMakeLists.txt | 96 ++++++------- .../test/Installation/link_to_CGAL_Qt6.cpp | 11 ++ ...make.in => test_configuration_qt.cmake.in} | 6 +- ...tion_qt5.cpp => test_configuration_qt.cpp} | 0 .../CGAL/draw_linear_cell_complex.h | 4 +- .../Linear_cell_complex.txt | 4 +- Nef_3/doc/Nef_3/CGAL/draw_nef_3.h | 4 +- Nef_3/doc/Nef_3/Nef_3.txt | 4 +- .../CGAL/draw_periodic_2_triangulation_2.h | 4 +- Point_set_3/doc/Point_set_3/Point_set_3.txt | 4 +- Point_set_3/include/CGAL/draw_point_set_3.h | 4 +- Polygon/doc/Polygon/Polygon.txt | 4 +- Polygon/include/CGAL/draw_polygon_2.h | 4 +- .../include/CGAL/draw_polygon_with_holes_2.h | 4 +- .../doc/Polyhedron/CGAL/draw_polyhedron.h | 4 +- Polyhedron/doc/Polyhedron/Polyhedron.txt | 4 +- .../doc/Surface_mesh/Surface_mesh.txt | 4 +- Surface_mesh/include/CGAL/draw_surface_mesh.h | 4 +- .../CGAL/draw_face_graph_with_paths.h | 4 +- .../Surface_mesh_topology.txt | 8 +- Testsuite/test/post_process_ctest_results.py | 2 +- .../CGAL/draw_triangulation_2.h | 8 +- .../doc/Triangulation_2/Triangulation_2.txt | 4 +- .../CGAL/draw_triangulation_3.h | 4 +- .../doc/Triangulation_3/Triangulation_3.txt | 4 +- .../CGAL/draw_voronoi_diagram_2.h | 4 +- .../Voronoi_diagram_2/Voronoi_diagram_2.txt | 4 +- 43 files changed, 134 insertions(+), 275 deletions(-) delete mode 100644 Installation/cmake/modules/CGAL_Qt5_moc_and_resource_files.cmake delete mode 100644 Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake delete mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt6Dependencies.rst create mode 100644 Installation/test/Installation/link_to_CGAL_Qt6.cpp rename Installation/test/Installation/{test_configuration_qt5.cmake.in => test_configuration_qt.cmake.in} (89%) rename Installation/test/Installation/{test_configuration_qt5.cpp => test_configuration_qt.cpp} (100%) diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt index 5254543120c7..b7c41b3e5ccb 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt @@ -6750,8 +6750,8 @@ An arrangement data structure can be visualized by calling the \link PkgArrangem \cgalExample{Arrangement_on_surface_2/draw_arr.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{aos_fig-draw_arr,draw_arr.png} A snapshot of the window created by the program diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/draw_arrangement_2.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/draw_arrangement_2.h index f415f5c9e7ec..a22a398115e0 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/draw_arrangement_2.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/draw_arrangement_2.h @@ -28,9 +28,9 @@ namespace CGAL { * opens a new window and draws `arr`, an instance of the `CGAL::Arrangement_2` * class template. A call to this function is blocking; that is, the program * continues only after the user closes the window. This function requires - * `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is + * `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is * defined. Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link - * with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. + * with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. * * \tparam GeometryTraits_2 a geometry traits type, a model of a 2D arrangement * traits concept. At this point it must be an instance of either diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/draw_polygon_set_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/draw_polygon_set_2.h index df7a777dbdc9..5728fe8b86c6 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/draw_polygon_set_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/draw_polygon_set_2.h @@ -3,8 +3,8 @@ namespace CGAL { /*! \ingroup PkgDrawPolygonSet2 -opens a new window and draws `aps`, an instance of the `CGAL::Polygon_set_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +opens a new window and draws `aps`, an instance of the `CGAL::Polygon_set_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam PS an instance of the `CGAL::Polygon_set_2` class. \param aps the polygon set to draw. diff --git a/Boolean_set_operations_2/include/CGAL/draw_polygon_set_2.h b/Boolean_set_operations_2/include/CGAL/draw_polygon_set_2.h index 3a5a31421be5..6eaa81b02f7b 100644 --- a/Boolean_set_operations_2/include/CGAL/draw_polygon_set_2.h +++ b/Boolean_set_operations_2/include/CGAL/draw_polygon_set_2.h @@ -27,9 +27,9 @@ namespace CGAL { * * opens a new window and draws `aps`, an instance of the `CGAL::Polygon_set_2` * class. A call to this function is blocking, that is the program continues as - * soon as the user closes the window. This function requires `CGAL_Qt5`, and is + * soon as the user closes the window. This function requires `CGAL_Qt6`, and is * only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. Linking with - * the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add + * the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add * the definition `CGAL_USE_BASIC_VIEWER`. * \tparam PS an instance of the `CGAL::Polygon_set_2` class. * \param aps the polygon set to draw. diff --git a/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt b/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt index 02ff32da6bc3..14eb07f8d8f0 100644 --- a/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt +++ b/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt @@ -33,14 +33,14 @@ This section describes a minimal example of a program that uses \cgal and Qt5 fo \skip cmake_minimum_required \until project -\skip #CGAL_Qt5 is needed for the drawing. +\skip #CGAL_Qt6 is needed for the drawing. \until endif() \skip #create the executable of the application \until "draw_surface_mesh.cpp" -\skip if(CGAL_Qt5_FOUND) -\until target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Qt5) +\skip if(CGAL_Qt6_FOUND) +\until target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Qt6) \skip endif \until #end of the file diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index 569599ae0fdf..67533c1aef90 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -77,7 +77,7 @@ we recommend that you define the environment variable \subsection thirdpartyMPFR GNU Multiple Precision Arithmetic (GMP) and GNU Multiple Precision Floating-Point Reliably (MPFR) Libraries GMP Version 4.2 or later, MPFR Version 2.2.1 or later -The components `libCGAL`, `libCGAL_Core`, and `libCGAL_Qt5` require +The components `libCGAL`, `libCGAL_Core`, and `libCGAL_Qt6` require \gmp and \mpfr which are libraries for multi precision integers and rational numbers, and for multi precision floating point numbers. diff --git a/Documentation/doc/scripts/test_doxygen_versions.sh b/Documentation/doc/scripts/test_doxygen_versions.sh index f71d5c6e0220..c847e110a2d2 100644 --- a/Documentation/doc/scripts/test_doxygen_versions.sh +++ b/Documentation/doc/scripts/test_doxygen_versions.sh @@ -117,7 +117,7 @@ if [ "$HAS_REF" -ne "1" ]; then if [ $IS_RELEASE = 0 ]; then cd $ROOT mkdir -p ./build && cd ./build - cmake -DWITH_CGAL_Core=false -DWITH_CGAL_ImageIO=false -DWITH_CGAL_Qt5=false .. 1>> ./build_logs + cmake -DWITH_CGAL_Core=false -DWITH_CGAL_ImageIO=false -DWITH_CGAL_Qt6=false .. 1>> ./build_logs CGAL_NAME="$(cat $PWD/VERSION)" cd $ROOT rm -rf ./build diff --git a/GraphicsView/include/CGAL/Qt/CGAL_Qt_config.h b/GraphicsView/include/CGAL/Qt/CGAL_Qt_config.h index 118426a54df1..6aad119ecc35 100644 --- a/GraphicsView/include/CGAL/Qt/CGAL_Qt_config.h +++ b/GraphicsView/include/CGAL/Qt/CGAL_Qt_config.h @@ -14,8 +14,8 @@ #include -#if defined(CGAL_Qt5_DLL) -# if defined(CGAL_Qt5_EXPORTS) +#if defined(CGAL_Qt6_DLL) +# if defined(CGAL_Qt6_EXPORTS) # define CGAL_QT_EXPORT Q_DECL_EXPORT # else # define CGAL_QT_EXPORT Q_DECL_IMPORT diff --git a/GraphicsView/include/CGAL/auto_link/Qt.h b/GraphicsView/include/CGAL/auto_link/Qt.h index bcaf3cbd99c3..a08e108e2d34 100644 --- a/GraphicsView/include/CGAL/auto_link/Qt.h +++ b/GraphicsView/include/CGAL/auto_link/Qt.h @@ -16,13 +16,13 @@ #include #if (! defined (CGAL_NO_AUTOLINK_QT)) -#if ( ! defined( CGAL_EXPORTS ) && (! defined ( CGAL_Qt5_EXPORTS ))) +#if ( ! defined( CGAL_EXPORTS ) && (! defined ( CGAL_Qt6_EXPORTS ))) // If CGAL_EXPORTS is defined it means that we are building the CGAL // library as a DLL. The CGAL.dll does not really depend on CGAL_Qt, // whatever the header inclusion graph says. -#define CGAL_LIB_NAME CGAL_Qt5 +#define CGAL_LIB_NAME CGAL_Qt6 #include diff --git a/GraphicsView/include/CGAL/export/Qt.h b/GraphicsView/include/CGAL/export/Qt.h index 7d79a2069917..a1392b2610a2 100644 --- a/GraphicsView/include/CGAL/export/Qt.h +++ b/GraphicsView/include/CGAL/export/Qt.h @@ -18,7 +18,7 @@ #if ( defined(CGAL_BUILD_SHARED_LIBS) && ( ! defined(CGAL_HEADER_ONLY) ) ) \ || defined(CGAL_USE_Qt5_RESOURCES) -# if defined(CGAL_Qt5_EXPORTS) || defined(CGAL_USE_Qt5_RESOURCES) +# if defined(CGAL_Qt6_EXPORTS) || defined(CGAL_USE_Qt5_RESOURCES) // defined by CMake or in cpp files of the dll # define CGAL_QT_EXPORT CGAL_DLL_EXPORT diff --git a/Installation/cmake/modules/CGAL_Qt5_moc_and_resource_files.cmake b/Installation/cmake/modules/CGAL_Qt5_moc_and_resource_files.cmake deleted file mode 100644 index 2d566decf613..000000000000 --- a/Installation/cmake/modules/CGAL_Qt5_moc_and_resource_files.cmake +++ /dev/null @@ -1,25 +0,0 @@ -if(CGAL_Qt5_moc_and_resource_files_included) - return() -endif() -set(CGAL_Qt5_moc_and_resource_files_included TRUE) -# qrc files (resources files, that contain icons, at least) -if(EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc) - qt5_add_resources (_CGAL_Qt5_RESOURCE_FILES_private - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/resources/CGAL.qrc - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Input.qrc - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/File.qrc - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Triangulation_2.qrc) -else() - # Installed version, in CMake resources - file ( COPY - ${CGAL_MODULES_DIR}/demo/resources - ${CGAL_MODULES_DIR}/demo/icons - DESTINATION ${CMAKE_BINARY_DIR}) - qt5_add_resources (_CGAL_Qt5_RESOURCE_FILES_private - ${CMAKE_BINARY_DIR}/resources/CGAL.qrc - ${CMAKE_BINARY_DIR}/icons/Input.qrc - ${CMAKE_BINARY_DIR}/icons/File.qrc - ${CMAKE_BINARY_DIR}/icons/Triangulation_2.qrc) -endif() - -qt5_wrap_ui(_CGAL_Qt5_UI_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/ImageInterface.ui) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake deleted file mode 100644 index c6701aeb1a1b..000000000000 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ /dev/null @@ -1,127 +0,0 @@ -#.rst: -# CGAL_SetupCGAL_Qt5Dependencies -# ------------------------------ -# -# The module searches for the dependencies of the `CGAL_Qt5` library: -# - the `Qt5` libraries -# -# by calling -# -# .. code-block:: cmake -# -# find_package(Qt5 QUIET COMPONENTS OpenGL Widgets) -# -# and defines the variable :variable:`CGAL_Qt5_FOUND` and the function -# :command:`CGAL_setup_CGAL_Qt5_dependencies`. -# - -if(CGAL_SetupCGAL_Qt5Dependencies_included) - return() -endif() -set(CGAL_SetupCGAL_Qt5Dependencies_included TRUE) - -#.rst: -# Used Modules -# ^^^^^^^^^^^^ -# - :module:`Qt5Config` -find_package(Qt5 QUIET COMPONENTS OpenGL Widgets OPTIONAL_COMPONENTS Svg) - -set(CGAL_Qt5_MISSING_DEPS "") -if(NOT Qt5OpenGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "Qt5OpenGL") -endif() -if(NOT Qt5Widgets_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5Widgets") -endif() -if(NOT Qt5_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5") -endif() -if(NOT EXISTS ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsItem.h) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} headers") -endif() - -#.rst: -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# .. variable:: CGAL_Qt5_FOUND -# -# Set to `TRUE` if the dependencies of `CGAL_Qt5` were found. -# -if(NOT CGAL_Qt5_MISSING_DEPS) - set(CGAL_Qt5_FOUND TRUE) - set_property(GLOBAL PROPERTY CGAL_Qt5_FOUND TRUE) - - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Qt5_moc_and_resource_files.cmake) - - if(NOT TARGET CGAL_Qt5_moc_and_resources) - add_library(CGAL_Qt5_moc_and_resources STATIC - ${_CGAL_Qt5_MOC_FILES_private} - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsViewNavigation.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/DemosMainWindow.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsItem.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsViewInput.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/camera.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/frame.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/keyFrameInterpolator.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/manipulatedCameraFrame.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/manipulatedFrame.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/qglviewer.h - ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/image_interface.h - ${_CGAL_Qt5_UI_FILES} - ${_CGAL_Qt5_RESOURCE_FILES_private}) - target_include_directories( CGAL_Qt5_moc_and_resources PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(CGAL_Qt5_moc_and_resources PROPERTIES - POSITION_INDEPENDENT_CODE TRUE - EXCLUDE_FROM_ALL TRUE - AUTOMOC TRUE) - target_link_libraries(CGAL_Qt5_moc_and_resources PUBLIC CGAL::CGAL Qt5::Widgets Qt5::OpenGL ) - if(Qt5Svg_FOUND) - target_link_libraries(CGAL_Qt5_moc_and_resources PUBLIC Qt5::Svg) - endif() - add_library(CGAL::CGAL_Qt5_moc_and_resources ALIAS CGAL_Qt5_moc_and_resources) - add_library(CGAL::Qt5_moc_and_resources ALIAS CGAL_Qt5_moc_and_resources) - endif() - -endif() - -#get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) -#message( STATUS "Qt5Core include: ${Qt5Core_INCLUDE_DIRS}" ) -#message( STATUS "Qt5 libraries: ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5OpenGL_LIBRARIES}" ) -#message( STATUS "Qt5Core definitions: ${Qt5Core_DEFINITIONS}" ) -#message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) -#message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) - -#.rst: -# -# Provided Functions -# ^^^^^^^^^^^^^^^^^^ -# -# .. command:: CGAL_setup_CGAL_Qt5_dependencies -# -# Link the target with the dependencies of `CGAL_Qt5`:: -# -# CGAL_setup_CGAL_Qt5_dependencies( target ) -# -# The dependencies are -# added using :command:`target_link_libraries` with the ``INTERFACE`` -# keyword. -# -function(CGAL_setup_CGAL_Qt5_dependencies target) - - if($ENV{CGAL_FAKE_PUBLIC_RELEASE}) - target_compile_definitions( ${target} INTERFACE CGAL_FAKE_PUBLIC_RELEASE=1 ) - endif() - target_link_libraries( ${target} INTERFACE CGAL::CGAL) - target_link_libraries( ${target} INTERFACE CGAL::Qt5_moc_and_resources) - target_link_libraries( ${target} INTERFACE Qt5::OpenGL Qt5::Widgets ) - - # Remove -Wdeprecated-copy, for g++ >= 9.0, because Qt5, as of - # version 5.12, has a lot of [-Wdeprecated-copy] warnings. - if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" - AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9" ) - target_compile_options( ${target} INTERFACE "-Wno-deprecated-copy" "-Wno-cast-function-type" ) - endif() - -endfunction() - diff --git a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake index 81f62d9aab45..a25a85fa50c4 100644 --- a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake +++ b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake @@ -24,7 +24,7 @@ function(CGAL_hook_check_targets) endif() get_property(_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY BUILDSYSTEM_TARGETS) set(_list_of_deps) - set(_special_targets demos examples tests ALL_CGAL_TARGETS CGAL_Qt5_moc_and_resources uninstall install_FindCGAL) + set(_special_targets demos examples tests ALL_CGAL_TARGETS CGAL_Qt6_moc_and_resources uninstall install_FindCGAL) foreach(t ${_special_targets}) if(NOT TARGET ${t}) continue() @@ -110,8 +110,8 @@ function(CGAL_hook_fix_ctest_depending_on_Qt5) continue() endif() get_property(_target_links TARGET ${_target} PROPERTY LINK_LIBRARIES) - if("CGAL_Qt5" IN_LIST _target_links OR "CGAL::CGAL_Qt5" IN_LIST _target_links) - set_property(TEST "compilation of ${_target}" APPEND PROPERTY FIXTURES_REQUIRED CGAL_Qt5_moc_and_resources_Fixture) + if("CGAL_Qt6" IN_LIST _target_links OR "CGAL::CGAL_Qt6" IN_LIST _target_links) + set_property(TEST "compilation of ${_target}" APPEND PROPERTY FIXTURES_REQUIRED CGAL_Qt6_moc_and_resources_Fixture) endif() endforeach() endfunction() diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst deleted file mode 100644 index 815f7a4dd5f1..000000000000 --- a/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst +++ /dev/null @@ -1 +0,0 @@ -.. cmake-module:: ../CGAL_SetupCGAL_Qt5Dependencies.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt6Dependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt6Dependencies.rst new file mode 100644 index 000000000000..87365f45ac4a --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt6Dependencies.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupCGAL_Qt6Dependencies.cmake diff --git a/Installation/cmake/modules/Help/index.rst b/Installation/cmake/modules/Help/index.rst index b47d4211d9b3..b13ae1e506f9 100644 --- a/Installation/cmake/modules/Help/index.rst +++ b/Installation/cmake/modules/Help/index.rst @@ -16,7 +16,7 @@ Contents: CGAL_SetupBoost CGAL_SetupCGALDependencies CGAL_SetupCGAL_CoreDependencies - CGAL_SetupCGAL_Qt5Dependencies + CGAL_SetupCGAL_Qt6Dependencies CGAL_SetupCGAL_ImageIODependencies TODO diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index d8b14c0bb170..c057119bbd3c 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -78,10 +78,10 @@ else() set(NON_STANDARD_INSTALL_PREFIX ${CMAKE_BINARY_DIR}) endif() -if(WITH_CGAL_Qt5) +if(WITH_CGAL_Qt6) find_package(Qt6 QUIET COMPONENTS Core) - if(Qt5_FOUND) - create_link_to_program(CGAL_Qt5) + if(Qt6_FOUND) + create_link_to_program(CGAL_Qt6) endif() endif() @@ -152,12 +152,12 @@ file(MAKE_DIRECTORY "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install") file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_build) file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/test_config_file) -if(CGAL_Qt5_FOUND) - file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt5) - file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt5) - file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/test_config_file_qt5) - configure_file(test_configuration_qt5.cmake.in ${CMAKE_BINARY_DIR}/test_config_file_qt5/CMakeLists.txt @ONLY) -endif()#CGAL_Qt5_FOUND +if(CGAL_Qt6_FOUND) + file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt) + file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt) + file(MAKE_DIRECTORY ${NON_STANDARD_INSTALL_PREFIX}/test_config_file_qt) + configure_file(test_configuration_qt.cmake.in ${CMAKE_BINARY_DIR}/test_config_file_qt/CMakeLists.txt @ONLY) +endif()#CGAL_Qt6_FOUND #If ctest is ran from a global config, CGAL_SOURCE_DIR exists, but from Installation/test it doesn't. In that case, however, there is a CGAL_DIR. if("${CGAL_SOURCE_DIR}" STREQUAL "") @@ -173,28 +173,28 @@ configure_file(test_configuration.cmake.in ${CMAKE_BINARY_DIR}/test_config_file/ #test CGAL_DIR = source_dir (Git_root or CGAL-5.x dir. get_filename_component(CGAL_DIR_CORRECT_PATH "${CGAL_SOURCE_DIR}/CGALConfig.cmake" DIRECTORY) -add_test(NAME test_config_file +add_test(NAME test_config_file_in_CGAL_SOURCE_DIR COMMAND ${CMAKE_COMMAND} ${GENERATOR} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} "${CMAKE_BINARY_DIR}/test_config_file" #src - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file") #build -list(APPEND test_config_lst "test_config_file") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_in_CGAL_SOURCE_DIR") #build +list(APPEND test_config_lst "test_config_file_in_CGAL_SOURCE_DIR") if(RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE)#CGAL_BRANCH_BUILD #test CGAL_DIR = CGAL-5.x/lib/cmake/CGAL get_filename_component(CGAL_DIR_CORRECT_PATH "${CGAL_SOURCE_DIR}/lib/cmake/CGAL/CGALConfig.cmake" DIRECTORY) - add_test(NAME test_config_file_2 + add_test(NAME test_config_file_in_lib_cmake_CGAL COMMAND ${CMAKE_COMMAND} ${GENERATOR} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} "${CMAKE_BINARY_DIR}/test_config_file" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_2") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_in_lib_cmake_CGAL") else()#CGAL_BRANCH_BUILD #use the CGAL_DIR get_filename_component(CGAL_DIR_CORRECT_PATH "${CGAL_SOURCE_DIR}/Installation/lib/cmake/CGAL/CGALConfig.cmake" DIRECTORY) - add_test(NAME test_config_file_2 + add_test(NAME test_config_file_in_lib_cmake_CGAL COMMAND ${CMAKE_COMMAND} ${GENERATOR} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} "${CMAKE_BINARY_DIR}/test_config_file" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_2") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_in_lib_cmake_CGAL") endif()#CGAL_BRANCH_BUILD -list(APPEND test_config_lst "test_config_file_2") +list(APPEND test_config_lst "test_config_file_in_lib_cmake_CGAL") #configure cgal for a non standard install without Qt6 get_filename_component(CORRECT_INSTALL_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install/dummy.txt" DIRECTORY) @@ -206,40 +206,40 @@ add_test(NAME config_non_standard_cgal add_test(NAME install_non_standard_cgal COMMAND ${CMAKE_COMMAND} --build "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build" --target "install" --config "$") -#test CGAL_DIR=non standard place without cgal_qt5 +#test CGAL_DIR=non standard place without cgal_qt get_filename_component(CGAL_DIR_CORRECT_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install/lib/cmake/CGAL/CGALConfig.cmake" DIRECTORY) -add_test(NAME test_config_file_3 +add_test(NAME test_config_file_non_standard_install_lib_cmake COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} "${CMAKE_BINARY_DIR}/test_config_file" -WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_3") -list(APPEND test_config_lst "test_config_file_3") +WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_non_standard_install_lib_cmake") +list(APPEND test_config_lst "test_config_file_non_standard_install_lib_cmake") -if(CGAL_Qt5_FOUND) +if(CGAL_Qt6_FOUND) #configure cgal for a non standard install with Qt6 - add_test(NAME config_non_standard_cgal_qt5 - COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt5 -DCGAL_INSTALL_LIB_DIR=lib + add_test(NAME config_non_standard_cgal_qt + COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt -DCGAL_INSTALL_LIB_DIR=lib "${CGAL_SOURCE_DIR}" - WORKING_DIRECTORY "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt5") + WORKING_DIRECTORY "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt") #install cgal in the non standard place - add_test(NAME install_non_standard_cgal_qt5 - COMMAND ${CMAKE_COMMAND} --build "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt5" --target "install" --config "$") + add_test(NAME install_non_standard_cgal_qt + COMMAND ${CMAKE_COMMAND} --build "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build_qt" --target "install" --config "$") - #test CGAL_DIR=non standard place with cgal_qt5 - get_filename_component(CGAL_DIR_CORRECT_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt5/lib/cmake/CGAL/CGALConfig.cmake" DIRECTORY) - add_test(NAME test_config_file_4 + #test CGAL_DIR=non standard place with cgal_qt + get_filename_component(CGAL_DIR_CORRECT_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_install_qt/lib/cmake/CGAL/CGALConfig.cmake" DIRECTORY) + add_test(NAME test_config_file_non_standard_install_lib_cmake_with_qt COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} - "${CMAKE_BINARY_DIR}/test_config_file_qt5" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_4") - list(APPEND test_config_lst "test_config_file_4") -endif()#CGAL_Qt5_FOUND + "${CMAKE_BINARY_DIR}/test_config_file_qt" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_non_standard_install_lib_cmake_with_qt") + list(APPEND test_config_lst "test_config_file_non_standard_install_lib_cmake_with_qt") +endif()#CGAL_Qt6_FOUND #test CGAL_DIR=non standard build get_filename_component(CGAL_DIR_CORRECT_PATH "${NON_STANDARD_INSTALL_PREFIX}/non_standard_build/CGALConfig.cmake" DIRECTORY) -add_test(NAME test_config_file_5 +add_test(NAME test_config_file_non_standard COMMAND ${CMAKE_COMMAND} ${INIT_FILE} -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=${CGAL_DIR_CORRECT_PATH} -DCGAL_GIVEN_DIR=${CGAL_DIR_CORRECT_PATH} "${CMAKE_BINARY_DIR}/test_config_file" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_5") -list(APPEND test_config_lst "test_config_file_5") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-test_config_file_non_standard") +list(APPEND test_config_lst "test_config_file_non_standard") foreach(tgt ${test_config_lst}) #add_custom_target(${tgt}_target) @@ -268,19 +268,19 @@ foreach(tgt ${test_config_lst}) endforeach() set_property(TEST install_non_standard_cgal APPEND PROPERTY DEPENDS config_non_standard_cgal) -set_property(TEST config_non_standard_cgal APPEND PROPERTY FIXTURES_SETUP test_config_file_3_target) -set_property(TEST install_non_standard_cgal APPEND PROPERTY FIXTURES_SETUP test_config_file_3_target) -set_property(TEST test_config_file_3 test_config_file_5 APPEND PROPERTY FIXTURES_REQUIRED test_config_file_3_target) +set_property(TEST config_non_standard_cgal APPEND PROPERTY FIXTURES_SETUP test_config_file_non_standard_install_lib_cmake_target) +set_property(TEST install_non_standard_cgal APPEND PROPERTY FIXTURES_SETUP test_config_file_non_standard_install_lib_cmake_target) +set_property(TEST test_config_file_non_standard_install_lib_cmake test_config_file_non_standard APPEND PROPERTY FIXTURES_REQUIRED test_config_file_non_standard_install_lib_cmake_target) set_property(TEST install_non_standard_cgal APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) set_property(TEST config_non_standard_cgal APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) -if(CGAL_Qt5_FOUND) - set_property(TEST install_non_standard_cgal_qt5 APPEND PROPERTY DEPENDS config_non_standard_cgal_qt5) - set_property(TEST config_non_standard_cgal_qt5 APPEND PROPERTY FIXTURES_SETUP test_config_file_4_target) - set_property(TEST install_non_standard_cgal_qt5 APPEND PROPERTY FIXTURES_SETUP test_config_file_4_target) - set_property(TEST test_config_file_4 APPEND PROPERTY FIXTURES_REQUIRED test_config_file_4_target) +if(CGAL_Qt6_FOUND) + set_property(TEST install_non_standard_cgal_qt APPEND PROPERTY DEPENDS config_non_standard_cgal_qt) + set_property(TEST config_non_standard_cgal_qt APPEND PROPERTY FIXTURES_SETUP test_config_file_non_standard_install_lib_cmake_with_qt_target) + set_property(TEST install_non_standard_cgal_qt APPEND PROPERTY FIXTURES_SETUP test_config_file_non_standard_install_lib_cmake_with_qt_target) + set_property(TEST test_config_file_non_standard_install_lib_cmake_with_qt APPEND PROPERTY FIXTURES_REQUIRED test_config_file_non_standard_install_lib_cmake_with_qt_target) - set_property(TEST install_non_standard_cgal_qt5 APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) - set_property(TEST config_non_standard_cgal_qt5 APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) -endif()#CGAL_Qt5_FOUND + set_property(TEST install_non_standard_cgal_qt APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) + set_property(TEST config_non_standard_cgal_qt APPEND PROPERTY LABELS Installation_Tests CGAL_cmake_testsuite) +endif()#CGAL_Qt6_FOUND diff --git a/Installation/test/Installation/link_to_CGAL_Qt6.cpp b/Installation/test/Installation/link_to_CGAL_Qt6.cpp new file mode 100644 index 000000000000..f83cad157054 --- /dev/null +++ b/Installation/test/Installation/link_to_CGAL_Qt6.cpp @@ -0,0 +1,11 @@ +// Use something defined not in headers but in the CGAL library to test that is was indeed properly built and linked to, + +#include + +typedef QRectF (*mapToSceneFunction)(const QGraphicsView* , const QRect); + +int main() +{ + mapToSceneFunction f = CGAL::Qt::mapToScene; + return (&f > 0) ? 0 : 1; +} diff --git a/Installation/test/Installation/test_configuration_qt5.cmake.in b/Installation/test/Installation/test_configuration_qt.cmake.in similarity index 89% rename from Installation/test/Installation/test_configuration_qt5.cmake.in rename to Installation/test/Installation/test_configuration_qt.cmake.in index 548c6fba2bf8..6283fc661205 100644 --- a/Installation/test/Installation/test_configuration_qt5.cmake.in +++ b/Installation/test/Installation/test_configuration_qt.cmake.in @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1...3.23) project(test_configuration) -find_package(CGAL COMPONENTS Qt5) +find_package(CGAL COMPONENTS Qt6) add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS) get_filename_component(CGAL_DIR_PATH "${CGAL_DIR}/CMakeConfig.cmake" DIRECTORY) @@ -10,5 +10,5 @@ if(NOT ${CGAL_DIR_PATH} STREQUAL ${CGAL_GIVEN_DIR_PATH}) message("${CGAL_DIR_PATH} != ${CGAL_GIVEN_DIR_PATH}") message( FATAL_ERROR "The CGAL_DIR is wrong !") endif() -add_executable(test_configuration @CMAKE_CURRENT_SOURCE_DIR@/test_configuration_qt5.cpp) -target_link_libraries(test_configuration PUBLIC CGAL::CGAL CGAL::CGAL_Qt5) +add_executable(test_configuration @CMAKE_CURRENT_SOURCE_DIR@/test_configuration_qt.cpp) +target_link_libraries(test_configuration PUBLIC CGAL::CGAL CGAL::CGAL_Qt6) diff --git a/Installation/test/Installation/test_configuration_qt5.cpp b/Installation/test/Installation/test_configuration_qt.cpp similarity index 100% rename from Installation/test/Installation/test_configuration_qt5.cpp rename to Installation/test/Installation/test_configuration_qt.cpp diff --git a/Linear_cell_complex/doc/Linear_cell_complex/CGAL/draw_linear_cell_complex.h b/Linear_cell_complex/doc/Linear_cell_complex/CGAL/draw_linear_cell_complex.h index 0e0d2f392b58..648d2c81ef3c 100644 --- a/Linear_cell_complex/doc/Linear_cell_complex/CGAL/draw_linear_cell_complex.h +++ b/Linear_cell_complex/doc/Linear_cell_complex/CGAL/draw_linear_cell_complex.h @@ -3,8 +3,8 @@ namespace CGAL { /*! \ingroup PkgDrawLinearCellComplex -opens a new window and draws `alcc`, a model of the `LinearCellComplex` concept. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +opens a new window and draws `alcc`, a model of the `LinearCellComplex` concept. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam LCC a model of the `LinearCellComplex` concept. \param alcc the linear cell complex to draw. diff --git a/Linear_cell_complex/doc/Linear_cell_complex/Linear_cell_complex.txt b/Linear_cell_complex/doc/Linear_cell_complex/Linear_cell_complex.txt index 0cb7753c302a..cac02fc6200d 100644 --- a/Linear_cell_complex/doc/Linear_cell_complex/Linear_cell_complex.txt +++ b/Linear_cell_complex/doc/Linear_cell_complex/Linear_cell_complex.txt @@ -265,8 +265,8 @@ A linear cell complex can be visualized by calling the \link PkgDrawLinearCellCo \cgalExample{Linear_cell_complex/draw_linear_cell_complex.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_lcc,draw_lcc.png} Result of the run of the draw_linear_cell_complex program. A window shows two 3D cubes and allows to navigate through the 3D scene. diff --git a/Nef_3/doc/Nef_3/CGAL/draw_nef_3.h b/Nef_3/doc/Nef_3/CGAL/draw_nef_3.h index f65883f84053..d61f502cc4f0 100644 --- a/Nef_3/doc/Nef_3/CGAL/draw_nef_3.h +++ b/Nef_3/doc/Nef_3/CGAL/draw_nef_3.h @@ -4,8 +4,8 @@ namespace CGAL { \ingroup PkgDrawNef3 Open a new window and draws `anef3`, the `Nef_polyhedron_3`. A call to this function is blocking, that is the program continues as soon as the user closes the window. -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam Nef3 a model of the `Nef_polyhedron_3` concept. \param anef3 the nef polyhedron to draw. diff --git a/Nef_3/doc/Nef_3/Nef_3.txt b/Nef_3/doc/Nef_3/Nef_3.txt index 60e98f188640..2edbb56529d6 100644 --- a/Nef_3/doc/Nef_3/Nef_3.txt +++ b/Nef_3/doc/Nef_3/Nef_3.txt @@ -424,8 +424,8 @@ A nef polyhedron can be visualised by calling the \link PkgDrawNef3 CGAL::draw( \cgalExample{Polygon/draw_polygon.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_polygon,draw_polygon.png} Result of the run of the draw_polygon program. A window shows the polygon and allows to navigate through the scene. diff --git a/Polygon/include/CGAL/draw_polygon_2.h b/Polygon/include/CGAL/draw_polygon_2.h index 1ab6ea142674..800e15e18a06 100644 --- a/Polygon/include/CGAL/draw_polygon_2.h +++ b/Polygon/include/CGAL/draw_polygon_2.h @@ -25,8 +25,8 @@ namespace CGAL { /*! \ingroup PkgDrawPolygon2 -opens a new window and draws `ap`, an instance of the `CGAL::Polygon_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +opens a new window and draws `ap`, an instance of the `CGAL::Polygon_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam P an instance of the `CGAL::Polygon_2` class. \param ap the polygon to draw. diff --git a/Polygon/include/CGAL/draw_polygon_with_holes_2.h b/Polygon/include/CGAL/draw_polygon_with_holes_2.h index d8b72c9bdd92..a530ad0a221b 100644 --- a/Polygon/include/CGAL/draw_polygon_with_holes_2.h +++ b/Polygon/include/CGAL/draw_polygon_with_holes_2.h @@ -28,9 +28,9 @@ namespace CGAL { * opens a new window and draws `aph`, an instance of the * `CGAL::Polygon_with_holes_2` class. A call to this function is blocking, that * is the program continues as soon as the user closes the window. This function - * requires `CGAL_Qt5`, and is only available if the macro + * requires `CGAL_Qt6`, and is only available if the macro * `CGAL_USE_BASIC_VIEWER` is defined. Linking with the cmake target - * `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition + * `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition * `CGAL_USE_BASIC_VIEWER`. * \tparam PH an instance of the `CGAL::Polygon_with_holes_2` class. * \param aph the polygon with holes to draw. diff --git a/Polyhedron/doc/Polyhedron/CGAL/draw_polyhedron.h b/Polyhedron/doc/Polyhedron/CGAL/draw_polyhedron.h index 3ce65574799e..9ed56fe232c2 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/draw_polyhedron.h +++ b/Polyhedron/doc/Polyhedron/CGAL/draw_polyhedron.h @@ -3,8 +3,8 @@ namespace CGAL { /*! \ingroup PkgDrawPolyhedron -opens a new window and draws `apoly`, an instance of the `CGAL::Polyhedron_3` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +opens a new window and draws `apoly`, an instance of the `CGAL::Polyhedron_3` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam POLY an instance of the `CGAL::Polyhedron_3` class. \param apoly the polyhedron to draw. diff --git a/Polyhedron/doc/Polyhedron/Polyhedron.txt b/Polyhedron/doc/Polyhedron/Polyhedron.txt index cff55a73257d..e9d9cb1a5b35 100644 --- a/Polyhedron/doc/Polyhedron/Polyhedron.txt +++ b/Polyhedron/doc/Polyhedron/Polyhedron.txt @@ -284,8 +284,8 @@ A polyhedron can be visualized by calling the \link PkgDrawPolyhedron CGAL::draw \cgalExample{Polyhedron/draw_polyhedron.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_polyhedron,draw_polyhedron.png} Result of the run of the draw_polyhedron program. A window shows the polyhedron and allows to navigate through the 3D scene. diff --git a/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt b/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt index e7a521eaaabc..b7be50a395fc 100644 --- a/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt +++ b/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt @@ -388,8 +388,8 @@ A surface mesh can be visualized by calling the \link PkgDrawSurfaceMesh CGAL::d \cgalExample{Surface_mesh/draw_surface_mesh.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_surface_mesh,draw_surface_mesh.png} Result of the run of the draw_surface_mesh program. A window shows the surface mesh and allows to navigate through the 3D scene. diff --git a/Surface_mesh/include/CGAL/draw_surface_mesh.h b/Surface_mesh/include/CGAL/draw_surface_mesh.h index 8dd25acd5b2b..72158e05836c 100644 --- a/Surface_mesh/include/CGAL/draw_surface_mesh.h +++ b/Surface_mesh/include/CGAL/draw_surface_mesh.h @@ -17,8 +17,8 @@ /*! \ingroup PkgDrawSurfaceMesh -Open a new window and draw `asm`, an instance of the `CGAL::Surface_mesh` class. The function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +Open a new window and draw `asm`, an instance of the `CGAL::Surface_mesh` class. The function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam SM an instance of the `CGAL::Surface_mesh` class. \param asm the surface mesh to draw. diff --git a/Surface_mesh_topology/doc/Surface_mesh_topology/CGAL/draw_face_graph_with_paths.h b/Surface_mesh_topology/doc/Surface_mesh_topology/CGAL/draw_face_graph_with_paths.h index e2a13b4bf5ff..df9bde13a6f3 100644 --- a/Surface_mesh_topology/doc/Surface_mesh_topology/CGAL/draw_face_graph_with_paths.h +++ b/Surface_mesh_topology/doc/Surface_mesh_topology/CGAL/draw_face_graph_with_paths.h @@ -4,7 +4,7 @@ namespace CGAL { \ingroup PkgDrawFaceGraphWithPaths opens a new window and draws `amesh`, either a 2D linear cell complex or a model of the FaceGraph concept, plus the paths lying on this mesh given in `apaths`. -A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the flag `CGAL_USE_BASIC_VIEWER` is defined at compile time. +A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the flag `CGAL_USE_BASIC_VIEWER` is defined at compile time. \tparam Mesh either a 2D linear cell complex or a model of the FaceGraph concept. \param amesh the mesh to draw. \param apaths the paths to draw, which should lie on `amesh`. @@ -17,7 +17,7 @@ void draw(const Mesh& amesh, \ingroup PkgDrawFaceGraphWithPaths opens a new window and draws `amesh`, either a 2D linear cell complex or a model of the FaceGraph concept, plus the paths lying on this mesh given in `apaths`. -A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the flag `CGAL_USE_BASIC_VIEWER` is defined at compile time. +A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the flag `CGAL_USE_BASIC_VIEWER` is defined at compile time. \tparam Mesh either a 2D linear cell complex or a model of the FaceGraph concept. \param amesh the mesh to draw. \param apaths the paths to draw, which should lie on `amesh`. diff --git a/Surface_mesh_topology/doc/Surface_mesh_topology/Surface_mesh_topology.txt b/Surface_mesh_topology/doc/Surface_mesh_topology/Surface_mesh_topology.txt index 4ce425fb91f2..ad624ea45868 100644 --- a/Surface_mesh_topology/doc/Surface_mesh_topology/Surface_mesh_topology.txt +++ b/Surface_mesh_topology/doc/Surface_mesh_topology/Surface_mesh_topology.txt @@ -153,20 +153,20 @@ In order to find the edge width of the surface, one can make use of the routine \cgalExample{Surface_mesh_topology/edgewidth_surface_mesh.cpp} -In these two examples, the mesh and the cycles can be visualized if CGAL_Qt5 is enabled. +In these two examples, the mesh and the cycles can be visualized if CGAL_Qt6 is enabled. \subsection SMTopology_Example_IV Compute Face Width -The following example computes the face width, and visualizes it if CGAL_Qt5 is enabled. +The following example computes the face width, and visualizes it if CGAL_Qt6 is enabled. \cgalExample{Surface_mesh_topology/facewidth.cpp} \subsection SMTopology_Example_V Basic Homotopy Test -The following example shows how to load an off file and how to create three closed paths on this surface. Contractibility and free homotopy tests are then performed. The example also shows how to use the \cgal viewer if CGAL_Qt5 is enabled. +The following example shows how to load an off file and how to create three closed paths on this surface. Contractibility and free homotopy tests are then performed. The example also shows how to use the \cgal viewer if CGAL_Qt6 is enabled. \cgalExample{Surface_mesh_topology/path_homotopy_double_torus.cpp} \subsection SMTopology_Example_VI Basic Simplicity Test -The following example shows how to test the simplicity of a closed path on a double torus. The original path is visualized if CGAL_Qt5 is enabled. +The following example shows how to test the simplicity of a closed path on a double torus. The original path is visualized if CGAL_Qt6 is enabled. \cgalExample{Surface_mesh_topology/path_simplicity_double_torus_2.cpp} \subsection SMTopology_Example_VI_VII Polygonal Schema diff --git a/Testsuite/test/post_process_ctest_results.py b/Testsuite/test/post_process_ctest_results.py index 120094cabbb3..2ec152996977 100644 --- a/Testsuite/test/post_process_ctest_results.py +++ b/Testsuite/test/post_process_ctest_results.py @@ -47,7 +47,7 @@ name="libCGALCore_shared" elif name == "libCGAL_ImageIO": name="libCGALimageIO_shared" - elif name == "libCGAL_Qt5": + elif name == "libCGAL_Qt6": name="libCGALQt5_shared" if name=="incomplete": is_writing=False diff --git a/Triangulation_2/doc/Triangulation_2/CGAL/draw_triangulation_2.h b/Triangulation_2/doc/Triangulation_2/CGAL/draw_triangulation_2.h index 4b63d19a344d..6ca50c894cf4 100644 --- a/Triangulation_2/doc/Triangulation_2/CGAL/draw_triangulation_2.h +++ b/Triangulation_2/doc/Triangulation_2/CGAL/draw_triangulation_2.h @@ -8,9 +8,9 @@ has constraints they are drawn. If the face type has a member function `bool is_in_domain()` the faces inside and outside of the domain are drawn in different colors. -A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with -`CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +`CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam T2 a triangulation class derived from `Triangulation_2` or `Constrained_triangulation_2` \param at2 the triangulation to draw. @@ -26,8 +26,8 @@ opens a new window and draws a constrained triangulation. If the triangulation has constraints they are drawn. The faces inside and outside of the domain, based on the property map, are drawn in different colors. -A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam CT2 a triangulation class derived from `Constrained_triangulation_2` \tparam InDomainPMap a class model of `ReadWritePropertyMap` with diff --git a/Triangulation_2/doc/Triangulation_2/Triangulation_2.txt b/Triangulation_2/doc/Triangulation_2/Triangulation_2.txt index 249c5a0117de..a7aead03e285 100644 --- a/Triangulation_2/doc/Triangulation_2/Triangulation_2.txt +++ b/Triangulation_2/doc/Triangulation_2/Triangulation_2.txt @@ -509,8 +509,8 @@ A 2D triangulation can be visualized by calling the \link PkgDrawTriangulation2 \cgalExample{Triangulation_2/draw_triangulation_2.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_triangulation_2,draw_triangulation_2.png} Result of the run of the draw_triangulation_2 program. A window shows the 2D triangulation and allows to navigate through the scene. diff --git a/Triangulation_3/doc/Triangulation_3/CGAL/draw_triangulation_3.h b/Triangulation_3/doc/Triangulation_3/CGAL/draw_triangulation_3.h index 266e73dcca29..82d1caf91248 100644 --- a/Triangulation_3/doc/Triangulation_3/CGAL/draw_triangulation_3.h +++ b/Triangulation_3/doc/Triangulation_3/CGAL/draw_triangulation_3.h @@ -3,8 +3,8 @@ namespace CGAL { /*! \ingroup PkgDrawTriangulation3 -opens a new window and draws `at3`, a model of the `TriangulationDataStructure_3` concept. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires CGAL_Qt5, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +opens a new window and draws `at3`, a model of the `TriangulationDataStructure_3` concept. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires CGAL_Qt6, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam T3 a model of the `TriangulationDataStructure_3` concept. \param at3 the triangulation to draw. diff --git a/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt b/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt index 0b1170a552ed..84daca88505f 100644 --- a/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt +++ b/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt @@ -569,8 +569,8 @@ A 3D triangulation can be visualized by calling the \link PkgDrawTriangulation3 \cgalExample{Triangulation_3/draw_triangulation_3.cpp} -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalFigureBegin{fig_draw_triangulation_3,draw_triangulation_3.png} Result of the run of the draw_triangulation_3 program. A window shows the 3D triangulation and allows to navigate through the 3D scene. diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/draw_voronoi_diagram_2.h b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/draw_voronoi_diagram_2.h index 1eb06f9c3530..530bcaf5dda2 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/draw_voronoi_diagram_2.h +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/draw_voronoi_diagram_2.h @@ -6,8 +6,8 @@ namespace CGAL { opens a new window and draws `av2`, the `Voronoi_diagram_2` constructed from a Delaunay Graph which is a model of `DelaunayGraph_2` concept. The class `Voronoi_diagram_2` provides an adaptor to view a triangulated Delaunay graph as their dual subdivision, the Voronoi diagram. A call to this function is blocking, that is the program continues as soon as the user closes the window. -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \tparam V2 a model of the `AdaptationTraits_2` concept. \param av2 the voronoi diagram to draw. diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/Voronoi_diagram_2.txt b/Voronoi_diagram_2/doc/Voronoi_diagram_2/Voronoi_diagram_2.txt index 2ee66c16c184..437036f97efd 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/Voronoi_diagram_2.txt +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/Voronoi_diagram_2.txt @@ -493,8 +493,8 @@ location queries. A 2D Voronoi Diagram can be visualized by calling the \link PkgDrawVoronoiDiagram2 CGAL::draw() \endlink function as shown in the following example. This function opens a new window showing the Voronoi Diagram of the given input sites/vertex locations. A call to this function is blocking, that is the program continues as soon as the user closes the window. -This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. -Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. +This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. +Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. \cgalExample{Voronoi_diagram_2/draw_voronoi_diagram_2.cpp} From 48f37a14dc9563617633c3a313c94d2cf00d8e1b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 17:02:21 +0200 Subject: [PATCH 397/943] remove occurrences of Qt5 --- .gitignore | 8 ------ .../Developer_manual/cmakelist_script.txt | 2 +- .../create_and_use_a_cmakelist.txt | 4 +-- .../doc/Documentation/Third_party.txt | 4 +-- Documentation/doc/Documentation/Usage.txt | 8 +++--- .../advanced/Configuration_variables.txt | 8 +++--- Documentation/doc/Documentation/windows.txt | 9 +++---- GraphicsView/TODO | 11 -------- .../Segment_voronoi_linf_2.cpp | 2 +- GraphicsView/include/CGAL/export/Qt.h | 4 +-- Installation/LICENSE | 11 ++++---- ...GAL_enable_end_of_configuration_hook.cmake | 4 +-- .../config/support/print_QT4_version.cpp | 19 -------------- Installation/include/CGAL/export/helpers.h | 2 +- .../Installation/test_configuration_qt.cpp | 2 +- .../Linear_cell_complex_3_demo.cpp | 2 +- Mesh_2/demo/Mesh_2/README.txt | 2 +- .../Polyline_simplification_2.cpp | 2 +- .../fundamental_group_of_the_torus.cpp | 2 +- Testsuite/test/post_process_ctest_results.py | 2 +- Three/doc/Three/Three.txt | 25 +++++++++---------- 21 files changed, 46 insertions(+), 87 deletions(-) delete mode 100644 GraphicsView/TODO delete mode 100644 Installation/cmake/modules/config/support/print_QT4_version.cpp diff --git a/.gitignore b/.gitignore index a53ed4269ce2..90f003227c6f 100644 --- a/.gitignore +++ b/.gitignore @@ -178,12 +178,6 @@ GraphicsView/demo/Triangulation_2/Makefile GraphicsView/demo/Triangulation_2/Regular_triangulation_2 GraphicsView/demo/Triangulation_2/qrc_*.cxx GraphicsView/demo/Triangulation_2/ui_*.h -GraphicsView/src/CGAL_Qt5/*.dll -GraphicsView/src/CGAL_Qt5/*.lib -GraphicsView/src/CGAL_Qt5/*.so -GraphicsView/src/CGAL_Qt5/Makefile -GraphicsView/src/CGAL_Qt5/moc_*.cxx -GraphicsView/src/CGAL_Qt5/qrc_*.cxx HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake HalfedgeDS/test/HalfedgeDS/test_hds HalfedgeDS/test/HalfedgeDS/test_hds_decorator @@ -879,7 +873,6 @@ Surface_mesher/demo/Surface_mesher/.*.deps Surface_mesher/demo/Surface_mesher/.qglviewer.xml Surface_mesher/demo/Surface_mesher/Makefile Surface_mesher/demo/Surface_mesher/Surface_mesher -Surface_mesher/demo/Surface_mesher/Surface_mesher_Qt5_Demo Surface_mesher/demo/Surface_mesher/VTK/Makefile Surface_mesher/demo/Surface_mesher/VTK/mesh_a_3D_image Surface_mesher/demo/Surface_mesher/VTK/mesh_a_VTK_3D_image @@ -894,7 +887,6 @@ Surface_mesher/demo/Surface_mesher/out*.off Surface_mesher/demo/Surface_mesher/polyhedron_remesher Surface_mesher/demo/Surface_mesher/polyhedron_remesher_with_edges Surface_mesher/demo/Surface_mesher/qrc_*.c* -Surface_mesher/demo/Surface_mesher/qt5-demo Surface_mesher/demo/Surface_mesher/ui_*.h Surface_mesher/doxygen Surface_mesher/examples/Surface_mesher/.*.deps diff --git a/Documentation/doc/Documentation/Developer_manual/cmakelist_script.txt b/Documentation/doc/Documentation/Developer_manual/cmakelist_script.txt index 7b451bf81784..26c1f7c0ef4b 100644 --- a/Documentation/doc/Documentation/Developer_manual/cmakelist_script.txt +++ b/Documentation/doc/Documentation/Developer_manual/cmakelist_script.txt @@ -23,7 +23,7 @@ If the parameter is not given, the script creates one executable for each giv source file.

    `-c com1:com2:...`
    Lists components ("com1", "com2") of \cgal to which the executable(s) should be linked. Valid components are \cgal's -libraries (i.e.\ "Core", "ImageIO", and "Qt5"). An example is `-c Core`. +libraries (i.e.\ "Core", "ImageIO", and "Qt6"). An example is `-c Core`.
    `-b boost1:boost2:...`
    Lists components ("boost1", "boost2") of \boost to which the executable(s) should be diff --git a/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt b/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt index 14eb07f8d8f0..d55f4c0819ba 100644 --- a/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt +++ b/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt @@ -25,8 +25,8 @@ the section \subpage thirdparty. - `-frounding-math` with gcc - `/fp:strict /fp:except-` with MSVC -\section secexample Minimal Example Using Qt5 -This section describes a minimal example of a program that uses \cgal and Qt5 for some GUI features. +\section secexample Minimal Example Using Qt6 +This section describes a minimal example of a program that uses \cgal and Qt6 for some GUI features. \subsection subcmake CMakeLists.txt \dontinclude Surface_mesh/CMakeLists.txt diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index 67533c1aef90..dda99763ac9d 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -102,8 +102,8 @@ version shipped with \cgal. The page \ref configurationvariables lists CMake and environment variables which can be used to specify the location of third-party software during configuration. -\subsection thirdpartyQt Qt5 -Version 5.9.0 or later +\subsection thirdpartyQt Qt6 +Version 6.4 or later Qt is a cross-platform application and UI framework. diff --git a/Documentation/doc/Documentation/Usage.txt b/Documentation/doc/Documentation/Usage.txt index 046f3d6da384..0cfdb9ba30ec 100644 --- a/Documentation/doc/Documentation/Usage.txt +++ b/Documentation/doc/Documentation/Usage.txt @@ -166,17 +166,17 @@ if no debugging is intended. Users should thus run: cd CGAL-\cgalReleaseNumber/examples/Triangulation_2 cmake -DCGAL_DIR=$HOME/CGAL-\cgalReleaseNumber -DCMAKE_BUILD_TYPE=Release . # we are here using a release tarball -The package Qt5 on brew is "keg-only", which means it is not "linked" with brew. -In order to link against Qt5, you need to run: +The package Qt6 on brew is "keg-only", which means it is not "linked" with brew. +In order to link against Qt6, you need to run: - brew link qt@5 + brew link qt@6 After that, you will have to specify the Qt6_DIR by hand to cmake, using something like -DQt6_DIR=/usr/local/opt/qt6/lib/cmake/Qt6 where `/usr/local/` is actually your current brew installation directory. Check this directory -to be sure where the Qt5 is placed on your machine. +to be sure where the Qt6 is placed on your machine. \subsection usage_configuring_cmake_gui Specifying Missing Dependencies diff --git a/Documentation/doc/Documentation/advanced/Configuration_variables.txt b/Documentation/doc/Documentation/advanced/Configuration_variables.txt index 7cedae4344ac..7c475f547766 100644 --- a/Documentation/doc/Documentation/advanced/Configuration_variables.txt +++ b/Documentation/doc/Documentation/advanced/Configuration_variables.txt @@ -85,7 +85,7 @@ and will serverly limit performances. | Variable | Description | Type | %Default Value | | :- | :- | :- | :- | | `CGAL_DIR` | Full-path to the binary directory where \cgal was configured |Either CMake or Environment | none | -| `Qt5_DIR` | Full-path to the Qt cmake directory |CMake| platform-dependent| +| `Qt6_DIR` | Full-path to the Qt cmake directory |CMake| platform-dependent| \subsection installation_variables_third_party Variables Providing Information About 3rd-Party Libraries @@ -178,11 +178,11 @@ Under Linux, the \gmpxx is also searched for, and you may specify the following -\subsection installation_qt5 Qt5 Library +\subsection installation_qt6 Qt6 Library -You must set the cmake or environment variable `Qt5_DIR` to point to the path +You must set the cmake or environment variable `Qt6_DIR` to point to the path to the directory containing the file `Qt6Config.cmake` created by your \qt6 installation. If you are -using the open source edition it should be `/qt-everywhere-opensource-src-/qtbase/lib/cmake/Qt5`. +using the open source edition it should be `/qt-everywhere-opensource-src-/qtbase/lib/cmake/Qt6`. \subsection installation_leda LEDA Library diff --git a/Documentation/doc/Documentation/windows.txt b/Documentation/doc/Documentation/windows.txt index 8b4674530077..0dd5839a8b3b 100644 --- a/Documentation/doc/Documentation/windows.txt +++ b/Documentation/doc/Documentation/windows.txt @@ -118,7 +118,7 @@ CMake variables and paths. Otherwise, you can also install it using `vcpkg`: Remember to specify `--triplet` or the related environment variable in case you target 64-bit applications. -As Qt5 is modular and as the \cgal examples and demos use only some of these modules +As Qt6 is modular and as the \cgal examples and demos use only some of these modules you can save download and compilation time by specifying an *installation option*: C:\dev\vcpkg> .\vcpkg.exe install cgal[qt] @@ -234,11 +234,10 @@ A typical `Qt` installation would consist of the following steps: diff --git a/GraphicsView/TODO b/GraphicsView/TODO deleted file mode 100644 index ec7ea6d5649d..000000000000 --- a/GraphicsView/TODO +++ /dev/null @@ -1,11 +0,0 @@ -Les inputs se sont seulement un simple mousePressEvent (pour un circle, il faut cliquer deux fois) -Pour le cercle, ça serait bien d'avoir la possibilité d'entrée un cercle par centre/rayon, ou deux points diamétraux, ou trois points. -Bloquer l'input sur un truc // aux axes (avec shift) -S'inspirer de ipe, en général. - -Control: pour les navigations -Shift: pour // aux axes. - -Affichage du (x,y) par rapport à l'origine de l'objet en cours. - -Integrer src/CGALQt5 dans le build process de CGAL, avec CMake. diff --git a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp index 7b67d31ad4a5..77d9e7c4dc00 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp +++ b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp @@ -522,7 +522,7 @@ int main(int argc, char **argv) app.setOrganizationName("GeometryFactory"); app.setApplicationName("Segment Voronoi 2 demo"); - // Import resources from libCGAL (Qt5) + // Import resources from libCGAL (Qt6) CGAL_QT_INIT_RESOURCES; if (argc == 2) { diff --git a/GraphicsView/include/CGAL/export/Qt.h b/GraphicsView/include/CGAL/export/Qt.h index a1392b2610a2..a5b1c82fa197 100644 --- a/GraphicsView/include/CGAL/export/Qt.h +++ b/GraphicsView/include/CGAL/export/Qt.h @@ -16,9 +16,9 @@ #include #if ( defined(CGAL_BUILD_SHARED_LIBS) && ( ! defined(CGAL_HEADER_ONLY) ) ) \ - || defined(CGAL_USE_Qt5_RESOURCES) + || defined(CGAL_USE_Qt6_RESOURCES) -# if defined(CGAL_Qt6_EXPORTS) || defined(CGAL_USE_Qt5_RESOURCES) +# if defined(CGAL_Qt6_EXPORTS) || defined(CGAL_USE_Qt6_RESOURCES) // defined by CMake or in cpp files of the dll # define CGAL_QT_EXPORT CGAL_DLL_EXPORT diff --git a/Installation/LICENSE b/Installation/LICENSE index 1ba1accba3e1..dd6e40c93dcb 100644 --- a/Installation/LICENSE +++ b/Installation/LICENSE @@ -5,9 +5,8 @@ The CGAL software consists of several parts, each of which is licensed under an open source license. It is also possible to obtain commercial licenses from GeometryFactory (www.geometryfactory.com) for all or parts of CGAL. -The source code of the CGAL library can be found in the directories -"src/CGAL", "src/CGALQt", "src/CGALQt5" and "include/CGAL" (with the -exception of "include/CGAL/CORE", "include/CGAL/OpenNL"). +The source code of the CGAL library can be found in the directory +"include/CGAL" (with the exception of "include/CGAL/CORE", "include/CGAL/OpenNL"). It is specified in each file of the CGAL library which license applies to it. This is either the GNU General Public License or the GNU Lesser General Public License (as published by the Free Software @@ -26,9 +25,9 @@ Distributed along with CGAL (for the users' convenience), but not part of CGAL, are the following third-party libraries, available under their own licenses: -- CORE, in the directories "include/CGAL/CORE" and "src/CGAL_Core", is - licensed under the LGPL (see LICENSE.LGPL). -- ImageIO, in the directory "src/CGAL_ImageIO", is licensed under the LGPL +- CORE, in the directory "include/CGAL/CORE" is licensed under the LGPL + (see LICENSE.LGPL). +- ImageIO, in the directory "include/CGAL/ImageIO", is licensed under the LGPL (see LICENSE.LGPL). - OpenNL, in the directory "include/CGAL/OpenNL", is licensed under the LGPL (see LICENSE.LGPL). diff --git a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake index a25a85fa50c4..4b6053671fc8 100644 --- a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake +++ b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake @@ -103,7 +103,7 @@ disable this ${type}.\n\ endif() endfunction() -function(CGAL_hook_fix_ctest_depending_on_Qt5) +function(CGAL_hook_fix_ctest_depending_on_Qt6) get_property(_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY BUILDSYSTEM_TARGETS) foreach(_target ${_targets}) if(NOT TEST "compilation of ${_target}") @@ -120,7 +120,7 @@ function(CGAL_hooks_at_end_of_all_directories) CGAL_hook_check_targets() CGAL_hook_check_unused_cpp_files() if(BUILD_TESTING) - CGAL_hook_fix_ctest_depending_on_Qt5() + CGAL_hook_fix_ctest_depending_on_Qt6() endif() endfunction() diff --git a/Installation/cmake/modules/config/support/print_QT4_version.cpp b/Installation/cmake/modules/config/support/print_QT4_version.cpp deleted file mode 100644 index cd290f2f4e4a..000000000000 --- a/Installation/cmake/modules/config/support/print_QT4_version.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2008 GeometryFactory, Sophia Antipolis (France) -// -// This file is part of CGAL (www.cgal.org) -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial - -// Tests if QT5 is available and prints its version string. - -#include -#include - -int main() -{ - std::cout << "version=" << QT_VERSION_STR << std::endl; - - return 0; -} diff --git a/Installation/include/CGAL/export/helpers.h b/Installation/include/CGAL/export/helpers.h index 4b384c71f4bc..3f5750902f80 100644 --- a/Installation/include/CGAL/export/helpers.h +++ b/Installation/include/CGAL/export/helpers.h @@ -12,7 +12,7 @@ #ifndef CGAL_EXPORT_HELPERS_H #define CGAL_EXPORT_HELPERS_H -#if defined(CGAL_HEADER_ONLY) && ! defined(CGAL_USE_Qt5_RESOURCES) +#if defined(CGAL_HEADER_ONLY) && ! defined(CGAL_USE_Qt6_RESOURCES) # define CGAL_DLL_IMPORT # define CGAL_DLL_EXPORT # define CGAL_DLL_LOCAL diff --git a/Installation/test/Installation/test_configuration_qt.cpp b/Installation/test/Installation/test_configuration_qt.cpp index 73206ca0b4fe..34436111e123 100644 --- a/Installation/test/Installation/test_configuration_qt.cpp +++ b/Installation/test/Installation/test_configuration_qt.cpp @@ -26,7 +26,7 @@ int main(int argc, char**) { std::istream_iterator end; Triangulation t; t.insert(begin, end); - if(argc == 3) // do not test Qt5 at runtime + if(argc == 3) // do not test Qt6 at runtime CGAL::draw(t); std::cout<<"OK."< > paths={pij, pkl}; - CGAL::draw(sm, paths); // Enable only if CGAL was compiled with Qt5 + CGAL::draw(sm, paths); // Enable only if CGAL was compiled with Qt6 #endif // CGAL_USE_BASIC_VIEWER */ for (int i=-4; i<=4; ++i) diff --git a/Testsuite/test/post_process_ctest_results.py b/Testsuite/test/post_process_ctest_results.py index 2ec152996977..6da4d7de21c1 100644 --- a/Testsuite/test/post_process_ctest_results.py +++ b/Testsuite/test/post_process_ctest_results.py @@ -48,7 +48,7 @@ elif name == "libCGAL_ImageIO": name="libCGALimageIO_shared" elif name == "libCGAL_Qt6": - name="libCGALQt5_shared" + name="libCGALQt6_shared" if name=="incomplete": is_writing=False is_ignored=False diff --git a/Three/doc/Three/Three.txt b/Three/doc/Three/Three.txt index b8987352aea0..593d7623b2f3 100644 --- a/Three/doc/Three/Three.txt +++ b/Three/doc/Three/Three.txt @@ -322,7 +322,7 @@ To create an external plugin, you must make a new Cmake project.\n project( Example_plugin ) -Configure CMake as you desire and fetch the right Qt5 packages : +Configure CMake as you desire and fetch the right Qt6 packages : # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -331,13 +331,13 @@ Configure CMake as you desire and fetch the right Qt5 packages : cmake_minimum_required(VERSION 3.1...3.23) #Find CGAL - find_package(CGAL COMPONENTS Qt5) + find_package(CGAL COMPONENTS Qt6) include( ${CGAL_USE_FILE} ) - # Find Qt5 itself - find_package(Qt5 + # Find Qt6 itself + find_package(Qt6 QUIET - COMPONENTS OpenGL Script Svg Xml - OPTIONAL_COMPONENTS ScriptTools) + COMPONENTS OpenGLWidgets Svg + OPTIONAL_COMPONENTS WebSockets) You will probably have to fetch the libraries exported by the Polyhedron_demo, like the Scene_items. @@ -370,15 +370,14 @@ Notice that an external plugin will not be automatically loaded in the Polyhedro cmake_minimum_required(VERSION 3.1...3.23) #Find CGAL - find_package(CGAL COMPONENTS Qt5) + find_package(CGAL COMPONENTS Qt6) include( ${CGAL_USE_FILE} ) - # Find Qt5 itself - find_package(Qt5 - QUIET - COMPONENTS OpenGL Script Svg Xml - OPTIONAL_COMPONENTS ScriptTools) + # Find Qt6 itself + find_package(Qt6 QUIET + COMPONENTS OpenGLWidgets Svg + OPTIONAL_COMPONENTS WebSockets) - if(Qt5_FOUND AND CGAL_FOUND) + if(Qt6_FOUND AND CGAL_FOUND) find_package(CGAL_polyhedron_demo) include( ${CGAL_POLYHEDRON_DEMO_USE_FILE} ) From 68f7646dcbca3066ec65a81fd22b371a3605b4e5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 17:02:49 +0200 Subject: [PATCH 398/943] remove stray CMake debug messages --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 4aaa5a99984d..afcfd708dc06 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -40,10 +40,6 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 ImageIO) set_package_properties(CGAL PROPERTIES TYPE REQUIRED) include(${CGAL_USE_FILE}) -if(CGAL_Qt6_FOUND) - message( STATUS "we found CGAL_Qt6") -endif() - # Find Qt6 itself find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Widgets Qml @@ -55,12 +51,7 @@ set_package_properties( PURPOSE "Enables the 3D Features, for GUI and visualization." DESCRIPTION "To find this package, it should be sufficient to fill the Qt6_DIR variable with: ///lib/cmake/Qt6") -if(NOT Qt6_FOUND) - message( STATUS "we did not find it") -endif() - if(Qt6_FOUND) - message( STATUS "we did find Qt6") add_definitions(-DQT_NO_KEYWORDS) add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE) endif(Qt6_FOUND) @@ -128,17 +119,6 @@ set_package_properties( DESCRIPTION "A library for parallel programming." PURPOSE "Plugins such as Mesh_3, Bilateral smoothing, and WLOP are faster if TBB is linked.") - - -if(NOT CGAL_Qt6_FOUND) - message( STATUS "NOT CGAL_Qt6_FOUND") -endif() - -if(NOT Qt6_FOUND) - message( STATUS "NOT Qt6_FOUND") -endif() - - if(CGAL_Qt6_FOUND AND Qt6_FOUND) include(${CGAL_USE_FILE}) From 9bba3bd5fa57a8c8fb861fcd07b541e9238d97d5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 17:06:34 +0200 Subject: [PATCH 399/943] fix the list of used Qt6 components --- Documentation/doc/Documentation/Third_party.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index dda99763ac9d..1784cd7f88c5 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -112,9 +112,9 @@ It requires \qt6 installed on your system. In case \qt is not yet installed on your system, you can download it from `https://www.qt-project.org/`. -The exhaustive list of \qt5 components used in demos is: -`Core`, `Gui`, `Help`, `OpenGL`, `Script`, `ScriptTools`, `Svg`, `Widgets`, -`qcollectiongenerator` (with `sqlite` driver plugin), and `Xml`. +The exhaustive list of \qt6 components used in demos is: +`Core`, `Gui`, `Help`, `OpenGL`, `OpenGLWidgets`, `Qml`, `Svg`, `Widgets`, +`WebSockets`, `Network`, and `qcollectiongenerator` (with `sqlite` driver plugin). \subsection thirdpartyEigen Eigen Version 3.3.4 or later From b05e1e9e4604aa8663366f6f6aed416c215cce7e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 14 Sep 2023 17:32:55 +0200 Subject: [PATCH 400/943] Remove UseCGAL.cmake and our old CMake macros `use_lib` and `use_component`. --- .../Arrangement_on_surface_2/CMakeLists.txt | 1 - .../Arrangement_on_surface_2/CMakeLists.txt | 3 - CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt | 2 - .../benchmark/Filtered_kernel/CMakeLists.txt | 6 +- GraphicsView/demo/Polygon/CMakeLists.txt | 1 - Installation/CHANGES.md | 1 + Installation/CMakeLists.txt | 3 - .../cmake/modules/CGALConfig_binary.cmake.in | 4 +- .../cmake/modules/CGALConfig_install.cmake.in | 3 +- Installation/cmake/modules/CGAL_Macros.cmake | 121 ------------------ Installation/cmake/modules/UseCGAL.cmake | 51 -------- Installation/lib/cmake/CGAL/CGALConfig.cmake | 4 +- Installation/test/Installation/CMakeLists.txt | 2 - .../Linear_cell_complex_2/CMakeLists.txt | 6 +- .../cmake/FindCGAL.cmake | 93 -------------- .../Linear_cell_complex_3/CMakeLists.txt | 4 +- Mesh_2/demo/Mesh_2/CMakeLists.txt | 6 +- Mesh_3/examples/Mesh_3/CMakeLists.txt | 3 +- .../CMakeLists.txt | 1 - Polyhedron/demo/Polyhedron/CMakeLists.txt | 10 +- .../Plugins/Surface_mesh/CMakeLists.txt | 2 - .../Plugins/Three_examples/CMakeLists.txt | 3 - .../Polyhedron/polyhedron_demo_macros.cmake | 2 +- Surface_mesh/benchmark/CMakeLists.txt | 6 +- Three/doc/Three/Three.txt | 2 - 25 files changed, 21 insertions(+), 319 deletions(-) delete mode 100644 Installation/cmake/modules/UseCGAL.cmake delete mode 100644 Linear_cell_complex/benchmark/Linear_cell_complex_2/cmake/FindCGAL.cmake diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt index 5e9bf30e1d7a..b1de5935340d 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/CMakeLists.txt @@ -16,7 +16,6 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) find_package(Qt6 QUIET COMPONENTS Widgets) if (CGAL_Qt6_FOUND AND Qt6_FOUND) - include(${CGAL_USE_FILE}) add_compile_definitions(QT_NO_KEYWORDS) include_directories( BEFORE ./ ) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/CMakeLists.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/CMakeLists.txt index bd49b35a5ac5..f138fb0beb3e 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/CMakeLists.txt +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/CMakeLists.txt @@ -8,7 +8,4 @@ enable_testing() find_package(CGAL REQUIRED COMPONENTS Core) -include (${CGAL_USE_FILE}) -# Since CMake-2.8.12: New CMake script, that defines the targets and -# the CTest test cases. include(${CMAKE_CURRENT_SOURCE_DIR}/cgal_test.cmake) diff --git a/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt b/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt index f017575dd855..98a5ab469f39 100644 --- a/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt +++ b/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt @@ -20,8 +20,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") find_package(CGAL REQUIRED COMPONENTS Core) -include(${CGAL_USE_FILE}) - find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) if(NOT TARGET CGAL::Eigen3_support) diff --git a/Filtered_kernel/benchmark/Filtered_kernel/CMakeLists.txt b/Filtered_kernel/benchmark/Filtered_kernel/CMakeLists.txt index b894f7392295..b240de403f81 100644 --- a/Filtered_kernel/benchmark/Filtered_kernel/CMakeLists.txt +++ b/Filtered_kernel/benchmark/Filtered_kernel/CMakeLists.txt @@ -9,12 +9,10 @@ add_executable(bench_simple_comparisons bench_simple_comparisons.cpp) find_package(CGAL REQUIRED COMPONENTS Core) add_executable(bench_orientation_3 "orientation_3.cpp") -target_link_libraries(bench_orientation_3 ${CGAL_LIBRARIES} - ${CGAL_3RD_PARTY_LIBRARIES}) +target_link_libraries(bench_orientation_3 CGAL::CGAL_Core) add_executable(bench_comparisons "orientation_3.cpp") -target_link_libraries(bench_comparisons ${CGAL_LIBRARIES} - ${CGAL_3RD_PARTY_LIBRARIES}) +target_link_libraries(bench_comparisons CGAL::CGAL_Core) set_property( TARGET bench_comparisons APPEND diff --git a/GraphicsView/demo/Polygon/CMakeLists.txt b/GraphicsView/demo/Polygon/CMakeLists.txt index 303b381e038f..ee30af0275eb 100644 --- a/GraphicsView/demo/Polygon/CMakeLists.txt +++ b/GraphicsView/demo/Polygon/CMakeLists.txt @@ -16,7 +16,6 @@ endif() find_package(Qt6 QUIET COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND) - include(${CGAL_USE_FILE}) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index eb1e09caa197..a0202f39624f 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -14,6 +14,7 @@ Release date: October 2023 - **Breaking change**: The usage of `boost::shared_ptr` has been replaced by `std::shared_ptr`. Packages affected are 2D Straight Line Skeleton and Shape Detection. - **Breaking change**: The usage of `boost::optional` has been replaced by `std::optional`. Packages affected are 2D Straight Line Skeleton, 3D Fast Intersection and Distance Computation (AABB Tree), and the Kernel intersection. - **Breaking change**: The usage of `boost::variant` has been replaced by `std::variant`. Packages affected are 2D Arrangements, and the Kernel intersection. +- **Breaking chahge**: The file CMake file `UseCGAL.cmake` has been removed from CGAL. Usages of the CMake variables `${CGAL_USE_FILE}` and `${CGAL_LIBRARIES}` must be replaced by a link to the imported target `CGAL::CGAL`, for example: `target_link_library(the_target PRIVATE CGAL::CGAL)`. #### 2D Arrangements diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index d773903a310a..d9a0eecee3cc 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -656,7 +656,6 @@ endif() # # Variables used when WITH_{demos|examples|tests} are TRUE # -set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) get_property(CGAL_FOUND GLOBAL PROPERTY CGAL_FOUND) get_property(CGAL_Core_FOUND GLOBAL PROPERTY CGAL_Core_FOUND) get_property(CGAL_ImageIO_FOUND GLOBAL PROPERTY CGAL_ImageIO_FOUND) @@ -755,8 +754,6 @@ install(PROGRAMS ${scripts} DESTINATION ${CGAL_INSTALL_BIN_DIR}) install(DIRECTORY ${CGAL_MODULES_REL_DIR}/ DESTINATION ${CGAL_INSTALL_CMAKE_DIR}) -install(FILES ${CGAL_MODULES_REL_DIR}/UseCGAL.cmake - DESTINATION ${CGAL_INSTALL_CMAKE_DIR}) if(IS_DIRECTORY auxiliary/gmp/include AND IS_DIRECTORY auxiliary/gmp/lib) install(DIRECTORY auxiliary/gmp/include/ DESTINATION ${CGAL_INSTALL_INC_DIR}) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 7987a2bbd1f3..eaab3c7f7f7a 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -93,8 +93,6 @@ set(CGAL_ImageIO_USE_ZLIB "@CGAL_ImageIO_USE_ZLIB@" ) set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUGFIX_VERSION}") -set(CGAL_USE_FILE "${CGAL_MODULES_DIR}/UseCGAL.cmake" ) - if ( CGAL_FIND_REQUIRED ) set( CHECK_CGAL_COMPONENT_MSG_ON_ERROR TRUE ) set( CHECK_CGAL_COMPONENT_ERROR_TYPE FATAL_ERROR ) @@ -169,7 +167,7 @@ foreach( CGAL_COMPONENT ${CGAL_FIND_COMPONENTS} ) endforeach() # Starting with cmake 2.6.3, CGAL_FIND_COMPONENTS is cleared out when find_package returns. -# But we need it within UseCGAL.cmake, so we save it aside into another variable +# But we need it within CGAL_CreateSingleSourceCGALProgram.cmake, so we save it aside into another variable set( CGAL_REQUESTED_COMPONENTS ${CGAL_FIND_COMPONENTS} ) # for preconfigured libs diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index 9ee7c0ba8803..eac955bb91c0 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -54,7 +54,6 @@ set(CGAL_ImageIO_USE_ZLIB "@CGAL_ImageIO_USE_ZLIB@" ) set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUGFIX_VERSION}") -set(CGAL_USE_FILE "${CGAL_MODULES_DIR}/UseCGAL.cmake" ) set(CGAL_GRAPHICSVIEW_PACKAGE_DIR "${CGAL_INSTALL_PREFIX}" CACHE INTERNAL "Directory containing the GraphicsView package") if ( CGAL_FIND_REQUIRED ) @@ -153,7 +152,7 @@ foreach( CGAL_COMPONENT ${CGAL_FIND_COMPONENTS} ) endforeach() # Starting with cmake 2.6.3, CGAL_FIND_COMPONENTS is cleared out when find_package returns. -# But we need it within UseCGAL.cmake, so we save it aside into another variable +# But we need it within CGAL_CreateSingleSourceCGALProgram.cmake, so we save it aside into another variable set( CGAL_REQUESTED_COMPONENTS ${CGAL_FIND_COMPONENTS} ) # for preconfigured libs diff --git a/Installation/cmake/modules/CGAL_Macros.cmake b/Installation/cmake/modules/CGAL_Macros.cmake index 2cc35fdc572e..3636673f55eb 100644 --- a/Installation/cmake/modules/CGAL_Macros.cmake +++ b/Installation/cmake/modules/CGAL_Macros.cmake @@ -211,127 +211,6 @@ if( NOT CGAL_MACROS_FILE_INCLUDED ) endmacro() - macro( use_lib ) - - set (lib "${ARGV0}") - - set (vlib ${CGAL_EXT_LIB_${lib}_PREFIX} ) - - if ( ${vlib}_FOUND AND (NOT TARGET CGAL OR WITH_${lib})) - - if ( NOT ${vlib}_SETUP ) # avoid double usage - - if ( "${ARGC}" EQUAL "2" ) - - set (usefile "${ARGV1}") - - include( ${usefile} ) - message (STATUS "Configured ${lib} from UseLIB-file: ${usefile}") - - # UseLIB-file has to set ${vlib}_SETUP to TRUE - # TODO EBEB what about Qt6, zlib? - - else() - - ####message( STATUS "${lib} include: ${${vlib}_INCLUDE_DIR}" ) - include_directories ( SYSTEM ${${vlib}_INCLUDE_DIR} ) - - # TODO EBEB remove definitions? - ####message( STATUS "${lib} definitions: ${${vlib}_DEFINITIONS}" ) - add_definitions( ${${vlib}_DEFINITIONS} "-DCGAL_USE_${vlib}" ) - - if ( ${vlib}_LIBRARIES ) - ####message( STATUS "${lib} libraries: ${${vlib}_LIBRARIES}" ) - link_libraries( ${${vlib}_LIBRARIES} ) - endif() - - ####message (STATUS "Configured ${lib} in standard way") - - set( ${vlib}_SETUP TRUE ) - - endif() - - endif() - - if (NOT ${vlib}_SETUP ) - - message( WARNING "${vlib} has not been set up" ) - - endif() - - else() - - if ( WITH_${lib} ) - message( SEND_ERROR "Try to use ${lib} that is not found") - endif() - - endif() - - endmacro() - - - macro( use_component component) - - message (STATUS "Requested component: ${component}") - - if(WITH_CGAL_${component}) - if(TARGET CGAL::CGAL_${component}) - add_to_list( CGAL_LIBRARIES CGAL::CGAL_${component} ) - elseif(TARGET CGAL_${component}) - add_to_list( CGAL_LIBRARIES CGAL_${component} ) - else() - add_to_list( CGAL_LIBRARIES ${CGAL_${component}_LIBRARY} ) - endif() - add_to_list( CGAL_3RD_PARTY_LIBRARIES ${CGAL_${component}_3RD_PARTY_LIBRARIES} ) - - add_to_list( CGAL_3RD_PARTY_INCLUDE_DIRS ${CGAL_${component}_3RD_PARTY_INCLUDE_DIRS} ) - add_to_list( CGAL_3RD_PARTY_DEFINITIONS ${CGAL_${component}_3RD_PARTY_DEFINITIONS} ) - add_to_list( CGAL_3RD_PARTY_LIBRARIES_DIRS ${CGAL_${component}_3RD_PARTY_LIBRARIES_DIRS} ) - - # To deal with imported targets of Qt6 and Boost, when CGAL - # targets are themselves imported by another project. - - if (${component} STREQUAL "Qt6") - find_package(Qt6 COMPONENTS Widgets OpenGLWidgets Gui Core Script ScriptTools QUIET) - endif() - - else(WITH_CGAL_${component}) - - # now we are talking about 3rd party libs - list( FIND CGAL_CONFIGURED_LIBRARIES "CGAL_${component}" POSITION ) - if ( "${POSITION}" EQUAL "-1" ) # if component is not a CGAL_ - - if (NOT DEFINED CGAL_EXT_LIB_${component}_PREFIX) - set(CGAL_EXT_LIB_${component}_PREFIX ${component}) - endif() - - set( vlib "${CGAL_EXT_LIB_${component}_PREFIX}" ) - - if (${vlib}_FOUND) - - use_lib( ${component} ${${vlib}_USE_FILE}) - - else() - - ####message( STATUS "External library ${vlib} after find") - if (${vlib}_FOUND) - ####message( STATUS "External library ${vlib} about to be used") - use_lib( ${component} ${${vlib}_USE_FILE}) - endif() - - endif() - else() - - if (NOT WITH_CGAL_${component}) - message(STATUS "NOTICE: The CGAL_${component} library seems to be required but is not build. Thus, it is expected that some executables will not be compiled.") - endif() - - endif() - - endif(WITH_CGAL_${component}) - - endmacro() - function( cgal_setup_module_path ) # Avoid to modify the modules path twice if(NOT CGAL_MODULE_PATH_IS_SET) diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake deleted file mode 100644 index 43449b85e512..000000000000 --- a/Installation/cmake/modules/UseCGAL.cmake +++ /dev/null @@ -1,51 +0,0 @@ -# -# UseCGAL.cmake can be included in a project to set the needed compiler and linker -# settings to use CGAL in a program. -# -# The variables used here are defined in the CGALConfig.cmake generated when CGAL was installed. -# -# -include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) - -cgal_setup_module_path() - -if(NOT USE_CGAL_FILE_INCLUDED) - set(USE_CGAL_FILE_INCLUDED 1) - - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Common.cmake) - if( CGAL_DEV_MODE OR RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE ) - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupFlags.cmake) - else() - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_display_flags.cmake) - endif() - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_TweakFindBoost.cmake) - - set( CGAL_LIBRARIES ) - - foreach ( component ${CGAL_REQUESTED_COMPONENTS} ) - use_component( ${component} ) - endforeach() - - include_directories( "${CMAKE_CURRENT_BINARY_DIR}" ) - - if(TARGET CGAL::CGAL) - add_to_list( CGAL_LIBRARIES CGAL::CGAL ) - elseif(TARGET CGAL) - add_to_list( CGAL_LIBRARIES CGAL ) - else() - add_to_list( CGAL_LIBRARIES ${CGAL_LIBRARY} ) - endif() - - #message (STATUS "LIB: ${CGAL_LIBRARY}") - #message (STATUS "LIBS: ${CGAL_LIBRARIES}") - - include_directories ( ${CGAL_INCLUDE_DIRS}) - include_directories ( SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS} ) - add_definitions ( ${CGAL_3RD_PARTY_DEFINITIONS} ${CGAL_DEFINITIONS} ) - - if(NOT CGAL_NO_BLANKET_LINKING) - link_directories ( ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) - link_libraries ( ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) - endif() -endif() diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index abd23a6e7fe0..7b3f2c419cb4 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -2,7 +2,7 @@ # This file is the CGALConfig.cmake for a header-only CGAL installation # -# For UseCGAL.cmake +# For CGAL_CreateSingleSourceCGALProgram.cmake set( CGAL_REQUESTED_COMPONENTS ${CGAL_FIND_COMPONENTS} ) set(CGAL_LIBRARIES CGAL) @@ -113,8 +113,6 @@ include(${CGAL_MODULES_DIR}/CGAL_Common.cmake) include(${CGAL_MODULES_DIR}/CGAL_TweakFindBoost.cmake) include(${CGAL_MODULES_DIR}/CGAL_enable_end_of_configuration_hook.cmake) -set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) - include(${CGAL_CONFIG_DIR}/CGALConfigVersion.cmake) # Temporary? Change the CMAKE module path diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index c057119bbd3c..5a22a7c42333 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -32,8 +32,6 @@ endmacro() find_package(CGAL REQUIRED COMPONENTS Core) -include(${CGAL_USE_FILE}) - include(CGAL_CreateSingleSourceCGALProgram) create_single_source_cgal_program("endian.cpp") diff --git a/Linear_cell_complex/benchmark/Linear_cell_complex_2/CMakeLists.txt b/Linear_cell_complex/benchmark/Linear_cell_complex_2/CMakeLists.txt index c63decf81000..cfa7f45bb92c 100644 --- a/Linear_cell_complex/benchmark/Linear_cell_complex_2/CMakeLists.txt +++ b/Linear_cell_complex/benchmark/Linear_cell_complex_2/CMakeLists.txt @@ -26,12 +26,12 @@ link_directories(${OPENMESH_LIBRARY_DIR}) # Polyhedron add_executable(polyhedron_performance performance_2.h polyhedron_performance.h polyhedron_performance.cpp) -target_link_libraries(polyhedron_performance ${CGAL_LIBRARIES}) +target_link_libraries(polyhedron_performance CGAL::CGAL) # LCC_2 add_executable(lcc_performance_2 performance_2.h lcc_performance_2.h lcc_performance_2.cpp) -target_link_libraries(lcc_performance_2 ${CGAL_LIBRARIES}) +target_link_libraries(lcc_performance_2 CGAL::CGAL) # Surface_mesh add_executable( @@ -80,7 +80,7 @@ add_executable( target_link_libraries( performance_2 - ${CGAL_LIBRARIES} + CGAL::CGAL surface_mesh algo assimp diff --git a/Linear_cell_complex/benchmark/Linear_cell_complex_2/cmake/FindCGAL.cmake b/Linear_cell_complex/benchmark/Linear_cell_complex_2/cmake/FindCGAL.cmake deleted file mode 100644 index a4b0902e60d4..000000000000 --- a/Linear_cell_complex/benchmark/Linear_cell_complex_2/cmake/FindCGAL.cmake +++ /dev/null @@ -1,93 +0,0 @@ -# -# The following module is based on FindVTK.cmake -# - -# - Find a CGAL installation or binary tree. -# The following variables are set if CGAL is found. If CGAL is not -# found, CGAL_FOUND is set to false. -# -# CGAL_FOUND - Set to true when CGAL is found. -# CGAL_USE_FILE - CMake file to use CGAL. -# - -# Construct consistent error messages for use below. -set(CGAL_DIR_DESCRIPTION "directory containing CGALConfig.cmake. This is either the binary directory where CGAL was configured or PREFIX/lib/CGAL for an installation.") -set(CGAL_DIR_MESSAGE "CGAL not found. Set the CGAL_DIR cmake variable or environment variable to the ${CGAL_DIR_DESCRIPTION}") - -if ( NOT CGAL_DIR ) - - # Get the system search path as a list. - if(UNIX) - string(REGEX MATCHALL "[^:]+" CGAL_DIR_SEARCH1 "$ENV{PATH}") - else() - string(REGEX REPLACE "\\\\" "/" CGAL_DIR_SEARCH1 "$ENV{PATH}") - endif() - - string(REGEX REPLACE "/;" ";" CGAL_DIR_SEARCH2 "${CGAL_DIR_SEARCH1}") - - # Construct a set of paths relative to the system search path. - set(CGAL_DIR_SEARCH "") - - foreach(dir ${CGAL_DIR_SEARCH2}) - - set(CGAL_DIR_SEARCH ${CGAL_DIR_SEARCH} ${dir}/../lib/CGAL ) - - endforeach() - - - # - # Look for an installation or build tree. - # - find_path(CGAL_DIR CGALConfig.cmake - - # Look for an environment variable CGAL_DIR. - $ENV{CGAL_DIR} - - # Look in places relative to the system executable search path. - ${CGAL_DIR_SEARCH} - - # Look in standard UNIX install locations. - /usr/local/lib/CGAL - /usr/lib/CGAL - - # Read from the CMakeSetup registry entries. It is likely that - # CGAL will have been recently built. - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9] - [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10] - - # Help the user find it if we cannot. - DOC "The ${CGAL_DIR_DESCRIPTION}" - ) - -endif() - -if ( CGAL_DIR ) - - if ( EXISTS "${CGAL_DIR}/CGALConfig.cmake" ) - include( "${CGAL_DIR}/CGALConfig.cmake" ) - set( CGAL_FOUND TRUE ) - endif() - -endif() - -if( NOT CGAL_FOUND) - if(CGAL_FIND_REQUIRED) - MESSAGE(FATAL_ERROR ${CGAL_DIR_MESSAGE}) - else() - if(NOT CGAL_FIND_QUIETLY) - MESSAGE(STATUS ${CGAL_DIR_MESSAGE}) - endif() - endif() -endif() - -if(CGAL_FOUND) - message(STATUS "Found CGAL.") -endif() diff --git a/Linear_cell_complex/benchmark/Linear_cell_complex_3/CMakeLists.txt b/Linear_cell_complex/benchmark/Linear_cell_complex_3/CMakeLists.txt index 4b65e2ee3c5e..5502fe39111c 100644 --- a/Linear_cell_complex/benchmark/Linear_cell_complex_3/CMakeLists.txt +++ b/Linear_cell_complex/benchmark/Linear_cell_complex_3/CMakeLists.txt @@ -33,7 +33,7 @@ target_link_libraries( OpenVolumeMesh boost_timer boost_system - ${CGAL_LIBRARIES} + CGAL::CGAL algo assimp container @@ -65,7 +65,7 @@ target_link_libraries( # LCC_3 add_executable(lcc_performance_3 performance_3.h lcc_performance_3.h lcc_performance_3.cpp) -target_link_libraries(lcc_performance_3 ${CGAL_LIBRARIES} +target_link_libraries(lcc_performance_3 CGAL::CGAL ${MAP_VIEWER_LIBRARIES}) # OpenVolumeMesh diff --git a/Mesh_2/demo/Mesh_2/CMakeLists.txt b/Mesh_2/demo/Mesh_2/CMakeLists.txt index 5087c477a12d..74c8b7f2d86a 100644 --- a/Mesh_2/demo/Mesh_2/CMakeLists.txt +++ b/Mesh_2/demo/Mesh_2/CMakeLists.txt @@ -6,16 +6,14 @@ project(Mesh_2_Demo) find_package(CGAL REQUIRED) -include(${CGAL_USE_FILE}) - # conform target add_executable(conform conform.cpp) -target_link_libraries(conform ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) +target_link_libraries(conform CGAL::CGAL) add_to_cached_list(CGAL_EXECUTABLE_TARGETS conform) # mesh target add_executable(mesh mesh.cpp) -target_link_libraries(mesh ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) +target_link_libraries(mesh CGAL::CGAL) add_to_cached_list(CGAL_EXECUTABLE_TARGETS mesh) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) diff --git a/Mesh_3/examples/Mesh_3/CMakeLists.txt b/Mesh_3/examples/Mesh_3/CMakeLists.txt index 0b59088e04a2..16e7bcd755de 100644 --- a/Mesh_3/examples/Mesh_3/CMakeLists.txt +++ b/Mesh_3/examples/Mesh_3/CMakeLists.txt @@ -124,8 +124,7 @@ if(TARGET CGAL::CGAL_ImageIO) add_executable(mesh_3D_gray_vtk_image mesh_3D_gray_vtk_image.cpp) target_link_libraries( mesh_3D_gray_vtk_image - PUBLIC CGAL::Eigen3_support CGAL::CGAL CGAL::CGAL_ImageIO - ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ${VTK_LIBRARIES}) + PUBLIC CGAL::Eigen3_support CGAL::CGAL CGAL::CGAL_ImageIO ${VTK_LIBRARIES}) cgal_add_test(mesh_3D_gray_vtk_image) add_to_cached_list(CGAL_EXECUTABLE_TARGETS mesh_3D_gray_vtk_image) endif() diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt index 3b838ba2c829..ee592422710c 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/CMakeLists.txt @@ -9,7 +9,6 @@ include_directories(${CMAKE_BINARY_DIR}) set(CMAKE_AUTOMOC ON) find_package(CGAL REQUIRED COMPONENTS Core Qt6) -include(${CGAL_USE_FILE}) find_package(LEDA QUIET) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index afcfd708dc06..28bf9132603b 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -38,7 +38,6 @@ option(POLYHEDRON_QTSCRIPT_DEBUGGER # Find CGAL find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 ImageIO) set_package_properties(CGAL PROPERTIES TYPE REQUIRED) -include(${CGAL_USE_FILE}) # Find Qt6 itself find_package(Qt6 QUIET @@ -120,8 +119,6 @@ set_package_properties( PURPOSE "Plugins such as Mesh_3, Bilateral smoothing, and WLOP are faster if TBB is linked.") if(CGAL_Qt6_FOUND AND Qt6_FOUND) - include(${CGAL_USE_FILE}) - qt6_wrap_ui(MainWindowUI_files MainWindow.ui) qt6_wrap_ui(SubViewerUI_files SubViewer.ui) qt6_wrap_ui(statisticsUI_FILES Statistics_on_item_dialog.ui) @@ -209,7 +206,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_library(scene_basic_objects SHARED Scene_plane_item.cpp Scene_spheres_item.cpp) target_link_libraries( - scene_basic_objects PUBLIC demo_framework ${CGAL_LIBRARIES} Qt6::OpenGLWidgets + scene_basic_objects PUBLIC demo_framework CGAL::CGAL_Qt6 Qt6::OpenGLWidgets Qt6::Gui Qt6::Widgets) add_library(scene_color_ramp SHARED Color_ramp.cpp) target_link_libraries(scene_color_ramp PRIVATE Qt6::Core) @@ -225,7 +222,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) macro(add_item item_name) add_library(${item_name} SHARED ${ARGN}) target_link_libraries( - ${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt6::OpenGLWidgets Qt6::Gui + ${item_name} PUBLIC demo_framework CGAL::CGAL_Qt6 Qt6::OpenGLWidgets Qt6::Gui Qt6::Widgets) add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${item_name}) endmacro(add_item) @@ -376,8 +373,7 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) target_link_libraries(Polyhedron_3 PRIVATE demo_framework) # Link with CGAL - target_link_libraries(Polyhedron_3 PUBLIC ${CGAL_LIBRARIES} - ${CGAL_3RD_PARTY_LIBRARIES}) + target_link_libraries(Polyhedron_3 PUBLIC CGAL::CGAL_Qt6) add_to_cached_list(CGAL_EXECUTABLE_TARGETS Polyhedron_3) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index e1b75611bac6..0af285ce58fb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -7,8 +7,6 @@ if(NOT CGAL_DISABLE_GMP) if(TARGET CGAL::Eigen3_support) find_package(CGAL REQUIRED COMPONENTS Core) - include(${CGAL_USE_FILE}) - qt6_wrap_ui(parameterizationUI_FILES Parameterization_widget.ui OTE_dialog.ui) polyhedron_demo_plugin(parameterization_plugin Parameterization_plugin ${parameterizationUI_FILES}) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt index 9761cea5fd5f..23f8d5f89994 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Three_examples/CMakeLists.txt @@ -17,9 +17,6 @@ find_package(Qt6 QUIET OPTIONAL_COMPONENTS WebSockets) if(RUNNING_CGAL_AUTO_TEST OR CGAL_TEST_SUITE) - if(Qt6_FOUND) - include(${CGAL_USE_FILE}) - endif() polyhedron_demo_plugin(example_plugin Example_plugin) qt6_wrap_ui(basicUI_FILES Basic_dialog.ui) diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index f4129a57c9fc..6bdda967ab8b 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -60,7 +60,7 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) set_property(TEST "compilation of ${plugin_name}" APPEND PROPERTY FIXTURES_REQUIRED demo_framework_SetupFixture) endif() # Link with CGAL - target_link_libraries( ${plugin_name} PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) + target_link_libraries( ${plugin_name} PUBLIC CGAL::CGAL ) if(TARGET Polyhedron_3) add_dependencies( ${plugin_name} Polyhedron_3 ) endif() diff --git a/Surface_mesh/benchmark/CMakeLists.txt b/Surface_mesh/benchmark/CMakeLists.txt index 33ae6c845694..818e8cb6b9d3 100644 --- a/Surface_mesh/benchmark/CMakeLists.txt +++ b/Surface_mesh/benchmark/CMakeLists.txt @@ -12,12 +12,12 @@ add_definitions("-std=c++1y") # Polyhedron add_executable(polyhedron_performance performance_2.h polyhedron_performance.h polyhedron_performance.cpp) -target_link_libraries(polyhedron_performance PRIVATE ${CGAL_LIBRARIES}) +target_link_libraries(polyhedron_performance PRIVATE CGAL::CGAL) # LCC_2 add_executable(lcc_performance_2 performance_2.h lcc_performance_2.h lcc_performance_2.cpp) -target_link_libraries(lcc_performance_2 PRIVATE ${CGAL_LIBRARIES}) +target_link_libraries(lcc_performance_2 PRIVATE CGAL::CGAL) # Surface_mesh add_executable( @@ -29,7 +29,7 @@ add_executable( performance_2 performance_2.cpp performance_2.h polyhedron_performance.h surface_mesh_performance.h lcc_performance_2.h) -target_link_libraries(performance_2 PRIVATE ${CGAL_LIBRARIES}) +target_link_libraries(performance_2 PRIVATE CGAL::CGAL) create_single_source_cgal_program("sm_sms.cpp") create_single_source_cgal_program("poly_sms.cpp") diff --git a/Three/doc/Three/Three.txt b/Three/doc/Three/Three.txt index 593d7623b2f3..2afe5f4d27ca 100644 --- a/Three/doc/Three/Three.txt +++ b/Three/doc/Three/Three.txt @@ -332,7 +332,6 @@ Configure CMake as you desire and fetch the right Qt6 packages : #Find CGAL find_package(CGAL COMPONENTS Qt6) - include( ${CGAL_USE_FILE} ) # Find Qt6 itself find_package(Qt6 QUIET @@ -371,7 +370,6 @@ Notice that an external plugin will not be automatically loaded in the Polyhedro #Find CGAL find_package(CGAL COMPONENTS Qt6) - include( ${CGAL_USE_FILE} ) # Find Qt6 itself find_package(Qt6 QUIET COMPONENTS OpenGLWidgets Svg From 40a7f324d3487876bf647737101835717b4a5407 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 15 Sep 2023 11:27:43 +0200 Subject: [PATCH 401/943] fix a compilation error The generated `ui_Deform_mesh.h` was not is in the right directory. I have moved the definition of the item in the plugin directory. --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 7 ------- .../Plugins/Surface_mesh_deformation/CMakeLists.txt | 8 ++++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 28bf9132603b..d2d45f83c7b4 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -295,13 +295,6 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND) add_item(scene_textured_item Scene_textured_surface_mesh_item.cpp texture.cpp) target_link_libraries(scene_textured_item PUBLIC CGAL::Eigen3_support) - qt6_wrap_ui(editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui) - add_item(scene_edit_item - Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp - ${editionUI_FILES}) - target_link_libraries( - scene_edit_item PUBLIC CGAL::Eigen3_support scene_surface_mesh_item - scene_k_ring_selection scene_basic_objects) add_item(scene_mcf_item Plugins/PMP/Scene_mcf_item.cpp) target_link_libraries(scene_mcf_item PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt index ce9c7e682094..36cbea480cd9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt @@ -2,6 +2,14 @@ include(polyhedron_demo_macros) if(TARGET CGAL::Eigen3_support AND "${EIGEN3_VERSION}" VERSION_GREATER "3.1.90") + qt6_wrap_ui(editionUI_FILES Deform_mesh.ui) + add_item(scene_edit_item + Scene_edit_polyhedron_item.cpp + ${editionUI_FILES}) + target_link_libraries( + scene_edit_item PUBLIC CGAL::Eigen3_support scene_surface_mesh_item + scene_k_ring_selection scene_basic_objects) + polyhedron_demo_plugin(edit_plugin Edit_polyhedron_plugin Deform_mesh.ui) target_link_libraries(edit_plugin PUBLIC scene_surface_mesh_item scene_edit_item scene_selection_item) From fe68498e9521ca4e1cc52ea10ac64024569ce35c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 19 Sep 2023 14:59:11 +0200 Subject: [PATCH 402/943] CGALConfig.cmake remove the early return() Otherwise we have a lot of warnings like: ``` CMake Warning at /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake:284 (message): When trying to collect dependencies of target 'Constrained_Delaunay_triangulation_2', the non-existent target 'Qt6::Svg' was encountered. This can likely be fixed by moving the find_package call that pulls in 'Qt6::Svg' to the scope of directory '/home/lrineau/Git/cgal-testsuite-dockerfiles/testsuite/CGAL-6.0-Ic-66/test/Triangulation_2_Demo' or higher. This warning can be silenced by setting QT_SILENCE_MISSING_DEPENDENCY_TARGET_WARNING to ON. Call Stack (most recent call first): /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake:320 (__qt_internal_print_missing_dependency_target_warning) /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake:609 (__qt_internal_collect_all_target_dependencies) /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake:709 (_qt_internal_finalize_executable) /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake:564:EVAL:1 (qt6_finalize_target) test/Triangulation_2_Demo/CMakeLists.txt:DEFERRED ``` The issue was that `find_package(Qt6) ...` is required in any sub-directory, because imported targets like `Qt6::Svg` are local to the directory scope. --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 7b3f2c419cb4..93e9e8830f0a 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -146,11 +146,6 @@ foreach(cgal_lib ${CGAL_LIBRARIES}) set(CGALConfig_all_targets_are_defined FALSE) endif() endforeach() -if(CGALConfig_all_targets_are_defined) - return() -endif() - -message(STATUS "Using header-only CGAL") if(NOT CGAL_FOUND) return() From 0ffb2563519e010abec22682b05ca71ae27f28c5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 19 Sep 2023 15:11:55 +0200 Subject: [PATCH 403/943] fix the workflow demo.yml The four batches were wrong: they all compiled all the plugins, instead of only a fourth of them. --- .github/test.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/test.sh b/.github/test.sh index a744f6d5b08a..cf69ebee9552 100755 --- a/.github/test.sh +++ b/.github/test.sh @@ -3,11 +3,10 @@ FACTOR=$1 set -ex cd Polyhedron/demo -LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build . -t help | egrep 'plugin$' |& cut -d\ -f2) +/usr/local/bin/cmake -S Polyhedron -B build -DCGAL_DIR=$2 +LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build build -t help | egrep 'plugin$' |& cut -d\ -f2) PLUGINS_ARRAY=(${LIST_OF_PLUGINS}); NB_OF_PLUGINS=${#PLUGINS_ARRAY[@]} DEL=$(($NB_OF_PLUGINS / 4)) -mkdir build cd build -/usr/local/bin/cmake -DCGAL_DIR=$2 ../Polyhedron make -j2 ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))} From 88bcd4096625b172d1091e33cfb37118513e50a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:48:42 +0200 Subject: [PATCH 404/943] Enable changing the oracle in the AW3 builder --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index f12ad06804b1..86010b27dfcf 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -173,7 +173,7 @@ class Alpha_wrap_3 using Alpha_PQ = Modifiable_priority_queue, CGAL_BOOST_PAIRING_HEAP>; protected: - const Oracle m_oracle; + Oracle m_oracle; SC_Iso_cuboid_3 m_bbox; FT m_alpha, m_sq_alpha; @@ -183,10 +183,12 @@ class Alpha_wrap_3 Alpha_PQ m_queue; public: - // Main constructor + Alpha_wrap_3() + : m_queue(4096) + { } + Alpha_wrap_3(const Oracle& oracle) - : - m_oracle(oracle), + : m_oracle(oracle), m_dt(Geom_traits(oracle.geom_traits())), // used to set up the initial MPQ, use some arbitrary not-too-small value m_queue(4096) @@ -198,6 +200,8 @@ class Alpha_wrap_3 public: const Geom_traits& geom_traits() const { return m_dt.geom_traits(); } + Oracle& oracle() { return m_oracle; } + const Oracle& oracle() const { return m_oracle; } Dt& triangulation() { return m_dt; } const Dt& triangulation() const { return m_dt; } const Alpha_PQ& queue() const { return m_queue; } From 4512b0e6f44ec1ac42ae0854bba2abb12588b7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:52:20 +0200 Subject: [PATCH 405/943] Rewrite the extraction of possibly non-manifold wraps --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 295 ++++++++++++------ 1 file changed, 193 insertions(+), 102 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 86010b27dfcf..6e8e323e85a9 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -648,165 +648,256 @@ class Alpha_wrap_3 return true; } -public: - // Manifoldness is tolerated while debugging and extracting at intermediate states - // Not the preferred way because it uses 3*nv storage - template - void extract_possibly_non_manifold_surface(OutputMesh& output_mesh, - OVPM ovpm) const +private: + void extract_boundary(std::vector& points, + std::vector >& faces) const { - namespace PMP = Polygon_mesh_processing; - -#ifdef CGAL_AW3_DEBUG - std::cout << "> Extract possibly non-manifold wrap... ()" << std::endl; -#endif - - clear(output_mesh); - - CGAL_assertion_code(for(auto cit=m_dt.finite_cells_begin(), cend=m_dt.finite_cells_end(); cit!=cend; ++cit)) - CGAL_assertion(cit->tds_data().is_clear()); + std::unordered_map vertex_to_id; - for(auto cit=m_dt.finite_cells_begin(), cend=m_dt.finite_cells_end(); cit!=cend; ++cit) + for(auto fit=m_dt.all_facets_begin(), fend=m_dt.all_facets_end(); fit!=fend; ++fit) { - Cell_handle seed = cit; - if(seed->info().is_outside || seed->tds_data().processed()) + Facet f = *fit; + if(!f.first->info().is_outside) + f = m_dt.mirror_facet(f); + + const Cell_handle ch = f.first; + const int s = f.second; + const Cell_handle nh = ch->neighbor(s); + if(ch->info().is_outside == nh->info().is_outside) continue; - std::queue to_visit; - to_visit.push(seed); + std::array ids; + for(int pos=0; pos<3; ++pos) + { + Vertex_handle vh = ch->vertex(Dt::vertex_triple_index(s, pos)); + auto insertion_res = vertex_to_id.emplace(vh, vertex_to_id.size()); + if(insertion_res.second) // successful insertion, never-seen-before vertex + points.push_back(m_dt.point(vh)); - std::vector points; - std::vector > faces; - std::size_t idx = 0; + ids[pos] = insertion_res.first->second; + } - while(!to_visit.empty()) - { - const Cell_handle cell = to_visit.front(); - CGAL_assertion(!cell->info().is_outside && !m_dt.is_infinite(cell)); + faces.emplace_back(std::array{ids[0], ids[1], ids[2]}); + } + } - to_visit.pop(); + template + void extract_manifold_surface(OutputMesh& output_mesh, + OVPM ovpm) const + { + namespace PMP = Polygon_mesh_processing; - if(cell->tds_data().processed()) - continue; +#ifdef CGAL_AW3_DEBUG + std::cout << "> Extract manifold wrap... ()" << std::endl; +#endif - cell->tds_data().mark_processed(); + CGAL_assertion_code(for(Vertex_handle v : m_dt.finite_vertex_handles())) + CGAL_assertion(!is_non_manifold(v)); - for(int fid=0; fid<4; ++fid) - { - const Cell_handle neighbor = cell->neighbor(fid); - if(neighbor->info().is_outside) - { - // There shouldn't be any artificial vertex on the inside/outside boundary - // (past initialization) -// CGAL_assertion(cell->vertex((fid + 1)&3)->info() == DEFAULT); -// CGAL_assertion(cell->vertex((fid + 2)&3)->info() == DEFAULT); -// CGAL_assertion(cell->vertex((fid + 3)&3)->info() == DEFAULT); - - points.push_back(m_dt.point(cell, Dt::vertex_triple_index(fid, 0))); - points.push_back(m_dt.point(cell, Dt::vertex_triple_index(fid, 1))); - points.push_back(m_dt.point(cell, Dt::vertex_triple_index(fid, 2))); - faces.push_back({idx, idx + 1, idx + 2}); - idx += 3; - } - else - { - to_visit.push(neighbor); - } - } - } + clear(output_mesh); - PMP::duplicate_non_manifold_edges_in_polygon_soup(points, faces); + std::vector points; + std::vector > faces; + extract_boundary(points, faces); - CGAL_assertion(PMP::is_polygon_soup_a_polygon_mesh(faces)); - PMP::polygon_soup_to_polygon_mesh(points, faces, output_mesh, - CGAL::parameters::default_values(), - CGAL::parameters::vertex_point_map(ovpm)); + if(faces.empty()) + { +#ifdef CGAL_AW3_DEBUG + std::cout << "Empty wrap?..." << std::endl; +#endif + return; + } - PMP::stitch_borders(output_mesh, CGAL::parameters::vertex_point_map(ovpm)); - CGAL_assertion(is_closed(output_mesh)); + if(!PMP::is_polygon_soup_a_polygon_mesh(faces)) + { + CGAL_warning_msg(false, "Failed to extract a manifold boundary!"); + return; } - for(auto cit=m_dt.finite_cells_begin(), cend=m_dt.finite_cells_end(); cit!=cend; ++cit) - cit->tds_data().clear(); + PMP::polygon_soup_to_polygon_mesh(points, faces, output_mesh, + CGAL::parameters::default_values(), + CGAL::parameters::vertex_point_map(ovpm)); CGAL_postcondition(!is_empty(output_mesh)); CGAL_postcondition(is_valid_polygon_mesh(output_mesh)); CGAL_postcondition(is_closed(output_mesh)); - - PMP::orient_to_bound_a_volume(output_mesh, CGAL::parameters::vertex_point_map(ovpm)); + CGAL_postcondition(PMP::does_bound_a_volume(output_mesh, CGAL::parameters::vertex_point_map(ovpm))); } template - void extract_manifold_surface(OutputMesh& output_mesh, - OVPM ovpm) const + void extract_possibly_non_manifold_surface(OutputMesh& output_mesh, + OVPM ovpm) const { namespace PMP = Polygon_mesh_processing; + using vertex_descriptor = typename boost::graph_traits::vertex_descriptor; + using halfedge_descriptor = typename boost::graph_traits::halfedge_descriptor; + using face_descriptor = typename boost::graph_traits::face_descriptor; + #ifdef CGAL_AW3_DEBUG - std::cout << "> Extract wrap... ()" << std::endl; + std::cout << "> Extract possibly non-manifold wrap... ()" << std::endl; #endif - CGAL_assertion_code(for(Vertex_handle v : m_dt.finite_vertex_handles())) - CGAL_assertion(!is_non_manifold(v)); - clear(output_mesh); - // boundary faces to polygon soup std::vector points; - std::vector > faces; + std::vector > polygons; - std::unordered_map vertex_to_id; - std::size_t nv = 0; + // Explode the polygon soup into indepent triangles, and stitch back edge by edge by walking along the exterior + std::map facet_ids; + std::size_t idx = 0; - for(auto fit=m_dt.finite_facets_begin(), fend=m_dt.finite_facets_end(); fit!=fend; ++fit) + for(auto fit=m_dt.all_facets_begin(), fend=m_dt.all_facets_end(); fit!=fend; ++fit) { Facet f = *fit; if(!f.first->info().is_outside) f = m_dt.mirror_facet(f); - const Cell_handle c = f.first; + const Cell_handle ch = f.first; const int s = f.second; - const Cell_handle nh = c->neighbor(s); - if(c->info().is_outside == nh->info().is_outside) + const Cell_handle nh = ch->neighbor(s); + if(ch->info().is_outside == nh->info().is_outside) continue; - std::array ids; - for(int pos=0; pos<3; ++pos) - { - Vertex_handle vh = c->vertex(Dt::vertex_triple_index(s, pos)); - auto insertion_res = vertex_to_id.emplace(vh, nv); - if(insertion_res.second) // successful insertion, never-seen-before vertex - { - points.push_back(m_dt.point(vh)); - ++nv; - } + facet_ids[f] = idx / 3; - ids[pos] = insertion_res.first->second; - } + points.push_back(m_dt.point(ch, Dt::vertex_triple_index(s, 0))); + points.push_back(m_dt.point(ch, Dt::vertex_triple_index(s, 1))); + points.push_back(m_dt.point(ch, Dt::vertex_triple_index(s, 2))); + polygons.push_back({idx, idx + 1, idx + 2}); - faces.emplace_back(std::array{ids[0], ids[1], ids[2]}); + idx += 3; } - if(faces.empty()) - return; - - if(!PMP::is_polygon_soup_a_polygon_mesh(faces)) + if(polygons.empty()) { - CGAL_warning_msg(false, "Could NOT extract mesh..."); +#ifdef CGAL_AW3_DEBUG + std::cout << "Empty wrap?..." << std::endl; +#endif return; } - PMP::polygon_soup_to_polygon_mesh(points, faces, output_mesh, - CGAL::parameters::default_values(), + CGAL_assertion(PMP::is_polygon_soup_a_polygon_mesh(polygons)); + + std::unordered_map i2f; + PMP::polygon_soup_to_polygon_mesh(points, polygons, output_mesh, + CGAL::parameters::polygon_to_face_output_iterator(std::inserter(i2f, i2f.end())), CGAL::parameters::vertex_point_map(ovpm)); + auto face_to_facet = get(CGAL::dynamic_face_property_t(), output_mesh); + + idx = 0; + for(auto fit=m_dt.all_facets_begin(), fend=m_dt.all_facets_end(); fit!=fend; ++fit) + { + Facet f = *fit; + if(!f.first->info().is_outside) + f = m_dt.mirror_facet(f); + + const Cell_handle ch = f.first; + const int s = f.second; + const Cell_handle nh = ch->neighbor(s); + if(ch->info().is_outside == nh->info().is_outside) + continue; + + put(face_to_facet, i2f[idx++], f); + } + + // grab the stitchable halfedges + std::vector > to_stitch; + + for(face_descriptor f : faces(output_mesh)) + { + const Facet& tr_f = get(face_to_facet, f); + const Cell_handle ch = tr_f.first; + CGAL_assertion(ch->info().is_outside); + + for(halfedge_descriptor h : halfedges_around_face(halfedge(f, output_mesh), output_mesh)) + { + const vertex_descriptor sv = source(h, output_mesh); + const vertex_descriptor tv = target(h, output_mesh); + + // only need the pair of halfedges once + if(get(ovpm, sv) > get(ovpm, tv)) + continue; + + // One could avoid these point comparisons by using the fact that we know that the graph + // has faces built in a specific order (through BGL::add_face()), but it's better to make + // this code more generic (and it is not very costly). + auto graph_descriptor_to_triangulation_handle = [&](const vertex_descriptor v) + { + const Point_3& p = get(ovpm, v); + for(int i=0; i<4; ++i) + if(ch->vertex(i)->point() == p) + return ch->vertex(i); + + CGAL_assertion(false); + return Vertex_handle(); + }; + + const Vertex_handle s_vh = graph_descriptor_to_triangulation_handle(sv); + const Vertex_handle t_vh = graph_descriptor_to_triangulation_handle(tv); + CGAL_assertion(get(ovpm, sv) == m_dt.point(s_vh)); + CGAL_assertion(get(ovpm, tv) == m_dt.point(t_vh)); + + const int facet_third_id = 6 - (ch->index(s_vh) + ch->index(t_vh) + tr_f.second); // 0 + 1 + 2 + 3 = 6 + Vertex_handle third_vh = ch->vertex(facet_third_id); + + // walk around the edge (in the exterior of the wrap) till meeting an inside cell + Cell_handle start_ch = ch, curr_ch = ch; + do + { + const int i = curr_ch->index(s_vh); + const int j = curr_ch->index(t_vh); + + // the facet is incident to the outside cell, and we walk in the exterior + const int facet_third_id = 6 - (curr_ch->index(s_vh) + curr_ch->index(t_vh) + curr_ch->index(third_vh)); + third_vh = curr_ch->vertex(facet_third_id); + curr_ch = curr_ch->neighbor(Dt::next_around_edge(i,j)); + + if(!curr_ch->info().is_outside) + break; + } + while(curr_ch != start_ch); + + CGAL_assertion(curr_ch != start_ch); + CGAL_assertion(!curr_ch->info().is_outside); + + const int opp_id = 6 - (curr_ch->index(s_vh) + curr_ch->index(t_vh) + curr_ch->index(third_vh)); + const Facet tr_f2 = m_dt.mirror_facet(Facet(curr_ch, opp_id)); + CGAL_assertion(facet_ids.count(Facet(curr_ch, opp_id)) == 0); + CGAL_assertion(tr_f2.first->info().is_outside); + CGAL_assertion(tr_f2.first->neighbor(tr_f2.second) == curr_ch); + CGAL_assertion(tr_f2.first->has_vertex(s_vh) && tr_f2.first->has_vertex(t_vh)); + + const face_descriptor f2 = i2f[facet_ids.at(tr_f2)]; + halfedge_descriptor h2 = halfedge(f2, output_mesh), done = h2; + while(get(ovpm, target(h2, output_mesh)) != get(ovpm, source(h, output_mesh))) + { + h2 = next(h2, output_mesh); + CGAL_assertion(h2 != done); + if(h2 == done) + break; + } + + CGAL_assertion(get(ovpm, source(h, output_mesh)) == get(ovpm, target(h2, output_mesh))); + CGAL_assertion(get(ovpm, target(h, output_mesh)) == get(ovpm, source(h2, output_mesh))); + CGAL_assertion(get(ovpm, target(next(h2, output_mesh), output_mesh)) == m_dt.point(third_vh)); + + to_stitch.emplace_back(opposite(h, output_mesh), opposite(h2, output_mesh)); + } + } + + PMP::internal::stitch_halfedge_range(to_stitch, output_mesh, ovpm); + + collect_garbage(output_mesh); + CGAL_postcondition(!is_empty(output_mesh)); CGAL_postcondition(is_valid_polygon_mesh(output_mesh)); CGAL_postcondition(is_closed(output_mesh)); - - PMP::orient_to_bound_a_volume(output_mesh, CGAL::parameters::vertex_point_map(ovpm)); + CGAL_postcondition(PMP::does_bound_a_volume(output_mesh, CGAL::parameters::vertex_point_map(ovpm))); } +public: template void extract_surface(OutputMesh& output_mesh, OVPM ovpm, From 4d50ec46b361ca0c912f3725d91fe673ff6ed869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:53:12 +0200 Subject: [PATCH 406/943] Consider all cases in facet_status In a normal run of the algorithm, we shall never ask the facet status of a facet that is already outside, but it's better to be complete and it costs nothing. --- .../include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 6e8e323e85a9..7c48a51ba6c5 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1027,6 +1027,15 @@ class Alpha_wrap_3 // skip if neighbor is OUTSIDE or infinite const Cell_handle ch = f.first; const int id = f.second; + + if(!ch->info().is_outside) + { +#ifdef CGAL_AW3_DEBUG_FACET_STATUS + std::cout << "Facet is inside" << std::endl; +#endif + return IRRELEVANT; + } + const Cell_handle nh = ch->neighbor(id); if(m_dt.is_infinite(nh)) return TRAVERSABLE; From bff07b2fc9ef0c26209475deae428ed77c29fecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:55:11 +0200 Subject: [PATCH 407/943] Simplify the gate comparer: we can also sort artificial facets like normal facets Artificial facets are *not* infinite facets. --- .../include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h index 8d63e34c9e3b..824d27bc2c10 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h @@ -68,11 +68,6 @@ struct Less_gate template bool operator()(const Gate& a, const Gate& b) const { - // @fixme? make it a total order by comparing addresses if both gates are bbox facets - if(a.is_artificial_facet()) - return true; - else if(b.is_artificial_facet()) - return false; return a.priority() > b.priority(); } }; From 5304f739b9f4e26c49630a1fe2970e5c5711b20e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:57:02 +0200 Subject: [PATCH 408/943] Enable restarting from a previous wrap --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 82 ++++++++++++++++--- .../internal/parameters_interface.h | 1 + 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 7c48a51ba6c5..9a0ee2ddb619 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -176,8 +176,8 @@ class Alpha_wrap_3 Oracle m_oracle; SC_Iso_cuboid_3 m_bbox; - FT m_alpha, m_sq_alpha; - FT m_offset, m_sq_offset; + FT m_alpha = FT(-1), m_sq_alpha = FT(-1); + FT m_offset = FT(-1), m_sq_offset = FT(-1); Dt m_dt; Alpha_PQ m_queue; @@ -268,6 +268,20 @@ class Alpha_wrap_3 const bool do_enforce_manifoldness = choose_parameter(get_parameter(in_np, internal_np::do_enforce_manifoldness), true); + // This parameter enables avoiding recomputing the triangulation from scratch when wrapping + // the same meshes for multiple values of alpha (and typically the same offset values). + // + // /!\ Warning /!\ + // + // If this is enabled, the 3D triangulation will NEVER be cleared and re-initialized + // at launch. This means that the triangulation is NOT cleared, even when: + // - the triangulation is empty; you will get nothing. + // - you use an alpha value that is greater than what was used in a previous run; you will + // obtain a denser result than what you might expect. + // - you use a different offset value between runs, you might then get points that are not + // on the offset surface corresponding to your latter offset value. + const bool resuming = choose_parameter(get_parameter(in_np, internal_np::refine_triangulation), false); + #ifdef CGAL_AW3_TIMER CGAL::Real_timer t; t.start(); @@ -275,7 +289,7 @@ class Alpha_wrap_3 visitor.on_alpha_wrapping_begin(*this); - if(!initialize(alpha, offset, seeds)) + if(!initialize(alpha, offset, seeds, resuming)) return; #ifdef CGAL_AW3_DEBUG_DUMP_EVERY_STEP @@ -648,6 +662,35 @@ class Alpha_wrap_3 return true; } + // This function is used in the case of resumption of a previous run: m_dt is not cleared, + // and we fill the queue with the new parameters. + bool initialize_from_existing_triangulation() + { + std::cout << "restart from a DT of " << m_dt.number_of_cells() << " cells" << std::endl; + + Real_timer t; + t.start(); + + for(Cell_handle ch : m_dt.all_cell_handles()) + { + if(!ch->info().is_outside) + continue; + + for(int i=0; i<4; ++i) + { + if(ch->neighbor(i)->info().is_outside) + continue; + + push_facet(std::make_pair(ch, i)); + } + } + + t.stop(); + std::cout << t.time() << " for scanning" << std::endl; + + return true; + } + private: void extract_boundary(std::vector& points, std::vector >& faces) const @@ -1105,7 +1148,8 @@ class Alpha_wrap_3 template bool initialize(const double alpha, const double offset, - const SeedRange& seeds) + const SeedRange& seeds, + const bool resuming = false) { #ifdef CGAL_AW3_DEBUG std::cout << "> Initialize..." << std::endl; @@ -1121,20 +1165,38 @@ class Alpha_wrap_3 return false; } + if(resuming) + { + if(offset != m_offset) + { +#ifdef CGAL_AW3_DEBUG + std::cerr << "Warning: resuming with a different offset!" << std::endl; +#endif + } + } + m_alpha = FT(alpha); m_sq_alpha = square(m_alpha); m_offset = FT(offset); m_sq_offset = square(m_offset); - m_dt.clear(); m_queue.clear(); - insert_bbox_corners(); - - if(seeds.empty()) - return initialize_from_infinity(); + if(resuming) + { + return initialize_from_existing_triangulation(); + } else - return initialize_with_cavities(seeds); + { + m_dt.clear(); + + insert_bbox_corners(); + + if(seeds.empty()) + return initialize_from_infinity(); + else + return initialize_with_cavities(seeds); + } } template diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 7792ad5cdb60..435075df6e2a 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -237,6 +237,7 @@ CGAL_add_named_parameter(smooth_constrained_edges_t, smooth_constrained_edges, s // List of named parameters used in Alpha_wrap_3 CGAL_add_named_parameter(do_enforce_manifoldness_t, do_enforce_manifoldness, do_enforce_manifoldness) CGAL_add_named_parameter(seed_points_t, seed_points, seed_points) +CGAL_add_named_parameter(refine_triangulation_t, refine_triangulation, refine_triangulation) // SMDS_3 parameters CGAL_add_named_parameter(surface_facets_t, surface_facets, surface_facets) From 36017331c2e12a62a055943732b1cfed4d128eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:58:30 +0200 Subject: [PATCH 409/943] Add an example of successive AW3 restarts --- .../examples/Alpha_wrap_3/CMakeLists.txt | 1 + .../Alpha_wrap_3/successive_wraps.cpp | 151 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/CMakeLists.txt b/Alpha_wrap_3/examples/Alpha_wrap_3/CMakeLists.txt index 2014b9baa7ca..11dec5f4134d 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/CMakeLists.txt +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/CMakeLists.txt @@ -12,3 +12,4 @@ create_single_source_cgal_program("triangle_soup_wrap.cpp") create_single_source_cgal_program("point_set_wrap.cpp") create_single_source_cgal_program("wrap_from_cavity.cpp") create_single_source_cgal_program("mixed_inputs_wrap.cpp") +create_single_source_cgal_program("successive_wraps.cpp") diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp new file mode 100644 index 000000000000..600d533ee411 --- /dev/null +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp @@ -0,0 +1,151 @@ +#define CGAL_AW3_TIMER + +#include +#include + +#include +#include +#include +#include + +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +using K = CGAL::Exact_predicates_inexact_constructions_kernel; +using FT = K::FT; +using Point_3 = K::Point_3; + +using Mesh = CGAL::Surface_mesh; + +// We want decreasing alphas, and these are relative ratios, so they need to be increasing +const std::vector relative_alphas = { 1, 2/*50, 100, 150, 200, 250*/ }; +const FT relative_offset = 600; + +int main(int argc, char** argv) +{ + std::cout.precision(17); + std::cerr.precision(17); + + // Read the input + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/cube.off"); + std::cout << "Reading " << filename << "..." << std::endl; + + Mesh mesh; + if(!PMP::IO::read_polygon_mesh(filename, mesh) || is_empty(mesh) || !is_triangle_mesh(mesh)) + { + std::cerr << "Invalid input." << std::endl; + return EXIT_FAILURE; + } + + std::cout << "Input: " << num_vertices(mesh) << " vertices, " << num_faces(mesh) << " faces" << std::endl; + + const CGAL::Bbox_3 bbox = CGAL::Polygon_mesh_processing::bbox(mesh); + const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) + + CGAL::square(bbox.ymax() - bbox.ymin()) + + CGAL::square(bbox.zmax() - bbox.zmin())); + + // =============================================================================================== + // Naive approach: + + CGAL::Real_timer t; + double total_time = 0.; + + for(std::size_t i=0; i>> [" << i << "] alpha: " << alpha << " offset: " << offset << std::endl; + + Mesh wrap; + CGAL::alpha_wrap_3(mesh, alpha, offset, wrap, + CGAL::parameters::do_enforce_manifoldness(false)); + + t.stop(); + std::cout << " Result: " << num_vertices(wrap) << " vertices, " << num_faces(wrap) << " faces" << std::endl; + std::cout << " Elapsed time: " << t.time() << " s." << std::endl; + + std::string input_name = std::string(filename); + input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); + input_name = input_name.substr(0, input_name.find_last_of(".")); + std::string output_name = input_name + + "_" + std::to_string(static_cast(relative_alphas[i])) + + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + std::cout << "Writing to " << output_name << std::endl; + CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); + + total_time += t.time(); + } + + std::cout << "Total elapsed time (naive): " << total_time << " s.\n" << std::endl; + + // =============================================================================================== + // Re-use approach + // + // Here, we restart from the triangulation of the previous state, and carve according + // to a (smaller) alpha value. This enables considerable speed-up: the cumulated time taken + // to run `n` successive instances of `{alpha_wrap(alpha_i)}_(i=1...n)` will be equal to the + // time taken to run alpha_wrap(alpha_n) from scratch. + // + // For example: + // naive: + // alpha_wrap(alpha_1, ...) ---> 2s + // alpha_wrap(alpha_2, ...) ---> 4s + // alpha_wrap(alpha_3, ...) ---> 8s + // will become with reusability: + // alpha_wrap(alpha_1, ..., reuse) ---> 2s + // alpha_wrap(alpha_2, ..., reuse) ---> 2s // 2+2 = 4s = naive alpha_2 + // alpha_wrap(alpha_3, ..., reuse) ---> 4s // 2+2+4 = 8s = naive alpha_3 + // Thus, if we care about the intermediate results, we save 6s (8s instead of 14s). + // The speed-up increases with the number of intermediate results, and if the alpha values + // are close. + // + // !! Warning !! + // The result of alpha_wrap(alpha_1, ...) followed by alpha_wrap(alpha_2, ...) with alpha_2 + // smaller than alpha_1 is going to be close but NOT exactly equal to that produced by calling + // alpha_wrap(alpha_2, ...) directly. + + total_time = 0.; + t.reset(); + + using Oracle = CGAL::Alpha_wraps_3::internal::Triangle_mesh_oracle; + using Wrapper = CGAL::Alpha_wraps_3::internal::Alpha_wrap_3; + Wrapper wrapper; // contains the triangulation that is being refined iteratively + + for(std::size_t i=0; i>> [" << i << "] alpha: " << alpha << " offset: " << offset << std::endl; + + // The triangle mesh oracle can be initialized with alpha to internally perform a split + // of too-big facets while building the AABB Tree. This split in fact yields a significant + // speed-up for meshes with elements that are large compared to alpha. This speed-up makes it + // faster to re-build the AABB tree for every value of alpha than to use a non-optimized tree. + Oracle oracle(alpha); + oracle.add_triangle_mesh(mesh, CGAL::parameters::default_values()); + wrapper.oracle() = oracle; + + Mesh wrap; + wrapper(alpha, offset, wrap, + CGAL::parameters::do_enforce_manifoldness(false) + .refine_triangulation((i != 0))); + + t.stop(); + std::cout << " Result: " << num_vertices(wrap) << " vertices, " << num_faces(wrap) << " faces" << std::endl; + std::cout << " Elapsed time: " << t.time() << " s." << std::endl; + + total_time += t.time(); + } + + std::cout << "Total elapsed time (successive): " << total_time << " s." << std::endl; + + return EXIT_SUCCESS; +} From 19cb693a1b9ff119593057c76402493b03e474e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 20 Sep 2023 12:59:46 +0200 Subject: [PATCH 410/943] Improve debug code --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 84 +++++++++++++------ 1 file changed, 60 insertions(+), 24 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 9a0ee2ddb619..0579297c4335 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1053,6 +1053,24 @@ class Alpha_wrap_3 TRAVERSABLE }; + inline const char* get_status_message(const Facet_queue_status status) + { + constexpr std::size_t status_count = 3; + + // Messages corresponding to Error_code list above. Must be kept in sync! + static const char* message[status_count] = { + "Irrelevant facet", + "Artificial facet", + "Traversable facet" + }; + + if(status > status_count || status < 0) + return "Unknown status"; + else + return message[status]; + } + +public: // @speed some decent time may be spent constructing Facet (pairs) for no reason as it's always // just to grab the .first and .second as soon as it's constructed, and not due to API requirements // e.g. from DT3 @@ -1062,9 +1080,9 @@ class Alpha_wrap_3 #ifdef CGAL_AW3_DEBUG_FACET_STATUS std::cout << "facet status: " - << f.first->vertex((f.second + 1)&3)->point() << " " - << f.first->vertex((f.second + 2)&3)->point() << " " - << f.first->vertex((f.second + 3)&3)->point() << std::endl; + << m_dt.point(f.first, Dt::vertex_triple_index(f.second, 0)) << " " + << m_dt.point(f.first, Dt::vertex_triple_index(f.second, 1)) << " " + << m_dt.point(f.first, Dt::vertex_triple_index(f.second, 2)) << std::endl; #endif // skip if neighbor is OUTSIDE or infinite @@ -1119,6 +1137,7 @@ class Alpha_wrap_3 return IRRELEVANT; } +private: bool push_facet(const Facet& f) { CGAL_precondition(f.first->info().is_outside); @@ -1127,19 +1146,29 @@ class Alpha_wrap_3 if(m_queue.contains_with_bounds_check(Gate(f))) return false; - const Facet_queue_status s = facet_status(f); - if(s == IRRELEVANT) + const Facet_queue_status status = facet_status(f); + if(status == IRRELEVANT) return false; const Cell_handle ch = f.first; - const int id = f.second; - const Point_3& p0 = m_dt.point(ch, (id+1)&3); - const Point_3& p1 = m_dt.point(ch, (id+2)&3); - const Point_3& p2 = m_dt.point(ch, (id+3)&3); + const int s = f.second; + const Point_3& p0 = m_dt.point(ch, Dt::vertex_triple_index(s, 0)); + const Point_3& p1 = m_dt.point(ch, Dt::vertex_triple_index(s, 1)); + const Point_3& p2 = m_dt.point(ch, Dt::vertex_triple_index(s, 2)); - // @todo should prob be the real value we compare to alpha instead of squared_radius + // @todo should prob be the real value that we compare to alpha instead of squared_radius const FT sqr = geom_traits().compute_squared_radius_3_object()(p0, p1, p2); - m_queue.resize_and_push(Gate(f, sqr, (s == ARTIFICIAL_FACET))); + m_queue.resize_and_push(Gate(f, sqr, (status == ARTIFICIAL_FACET))); + +#ifdef CGAL_AW3_DEBUG_QUEUE + static int gid = 0; + std::cout << "Queue insertion #" << gid++ << "\n" + << " ch = " << &*ch << " (" << m_dt.is_infinite(ch) << ") " << "\n" + << "\t" << p0 << "\n\t" << p1 << "\n\t" << p2 << std::endl; + std::cout << " Status: " << get_status_message(status) << std::endl; + std::cout << " SQR: " << sqr << std::endl; + std::cout << " Artificiality: " << (status == ARTIFICIAL_FACET) << std::endl; +#endif return true; } @@ -1160,7 +1189,7 @@ class Alpha_wrap_3 if(!is_positive(alpha) || !is_positive(offset)) { #ifdef CGAL_AW3_DEBUG - std::cout << "Error: invalid input parameters" << std::endl; + std::cerr << "Error: invalid input parameters: " << alpha << " and" << offset << std::endl; #endif return false; } @@ -1230,7 +1259,9 @@ class Alpha_wrap_3 std::cout << m_queue.size() << " facets in the queue" << std::endl; std::cout << "Face " << fid++ << "\n" << "c = " << &*ch << " (" << m_dt.is_infinite(ch) << "), n = " << &*neighbor << " (" << m_dt.is_infinite(neighbor) << ")" << "\n" - << m_dt.point(ch, (id+1)&3) << "\n" << m_dt.point(ch, (id+2)&3) << "\n" << m_dt.point(ch, (id+3)&3) << std::endl; + << m_dt.point(ch, Dt::vertex_triple_index(id, 0)) << "\n" + << m_dt.point(ch, Dt::vertex_triple_index(id, 1)) << "\n" + << m_dt.point(ch, Dt::vertex_triple_index(id, 2)) << std::endl; std::cout << "Priority: " << gate.priority() << std::endl; #endif @@ -1246,7 +1277,9 @@ class Alpha_wrap_3 std::string face_name = "results/steps/face_" + std::to_string(static_cast(i++)) + ".xyz"; std::ofstream face_out(face_name); face_out.precision(17); - face_out << "3\n" << m_dt.point(ch, (id+1)&3) << "\n" << m_dt.point(ch, (id+2)&3) << "\n" << m_dt.point(ch, (id+3)&3) << std::endl; + face_out << "3\n" << m_dt.point(ch, Dt::vertex_triple_index(id, 0)) << "\n" + << m_dt.point(ch, Dt::vertex_triple_index(id, 1)) << "\n" + << m_dt.point(ch, Dt::vertex_triple_index(id, 2)) << std::endl; face_out.close(); #endif @@ -1373,7 +1406,7 @@ class Alpha_wrap_3 inc_cells.reserve(64); m_dt.incident_cells(v, std::back_inserter(inc_cells)); - // Flood one inside and outside CC. + // Flood one inside and outside CC within the cell umbrella of the vertex. // Process both an inside and an outside CC to also detect edge pinching. // If there are still unprocessed afterwards, there is a non-manifoldness issue. // @@ -1664,7 +1697,8 @@ class Alpha_wrap_3 private: void check_queue_sanity() { - std::cout << "Check queue sanity..." << std::endl; + std::cout << "\t~~~ Check queue sanity ~~~" << std::endl; + std::vector queue_gates; Gate previous_top_gate = m_queue.top(); while(!m_queue.empty()) @@ -1674,15 +1708,16 @@ class Alpha_wrap_3 const Facet& current_f = current_gate.facet(); const Cell_handle ch = current_f.first; const int id = current_f.second; - const Point_3& p0 = m_dt.point(ch, (id+1)&3); - const Point_3& p1 = m_dt.point(ch, (id+2)&3); - const Point_3& p2 = m_dt.point(ch, (id+3)&3); + const Point_3& p0 = m_dt.point(ch, Dt::vertex_triple_index(id, 0)); + const Point_3& p1 = m_dt.point(ch, Dt::vertex_triple_index(id, 1)); + const Point_3& p2 = m_dt.point(ch, Dt::vertex_triple_index(id, 2)); const FT sqr = geom_traits().compute_squared_radius_3_object()(p0, p1, p2); - std::cout << "At Facet with VID " << get(Gate_ID_PM
    (), current_gate) << std::endl; - - if(current_gate.priority() != sqr) - std::cerr << "Error: facet in queue has wrong priority" << std::endl; + std::cout << "At Facet with VID " << get(Gate_ID_PM
    (), current_gate) << "\n"; + std::cout << "\t" << p0 << "\n\t" << p1 << "\n\t" << p2 << "\n"; + std::cout << " Artificiality: " << current_gate.is_artificial_facet() << "\n"; + std::cout << " SQR: " << sqr << "\n"; + std::cout << " Priority " << current_gate.priority() << std::endl; if(Less_gate()(current_gate, previous_top_gate)) std::cerr << "Error: current gate has higher priority than the previous top" << std::endl; @@ -1691,7 +1726,8 @@ class Alpha_wrap_3 m_queue.pop(); } - std::cout << "End sanity check" << std::endl; + + std::cout << "\t~~~ End queue sanity check ~~~" << std::endl; // Rebuild CGAL_assertion(m_queue.empty()); From 029d7a8fba55237bcdc8d608c40d79d0ec5273ab Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Sep 2023 16:50:48 +0200 Subject: [PATCH 411/943] fix test/Installation tests on Windows --- Installation/test/Installation/CMakeLists.txt | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index 5a22a7c42333..db725c17645f 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -7,32 +7,16 @@ project( Installation_Tests ) macro(create_link_to_program COMPONENT) - add_executable(link_to_${COMPONENT} link_to_${COMPONENT}.cpp) - - include_directories(${${COMPONENT}_3RD_PARTY_INCLUDE_DIRS}) - - add_definitions(${${COMPONENT}_3RD_PARTY_DEFINITIONS}) - - link_directories(${${COMPONENT}_3RD_PARTY_LIBRARIES_DIRS}) - - # Link the executable to CGAL and third-party libraries - if(CGAL_AUTO_LINK_ENABLED OR CGAL_HEADER_ONLY) - target_link_libraries(link_to_${COMPONENT} ${CGAL_3RD_PARTY_LIBRARIES} - ${${COMPONENT}_3RD_PARTY_LIBRARIES}) - else() - target_link_libraries( - link_to_${COMPONENT} CGAL::${COMPONENT} ${CGAL_3RD_PARTY_LIBRARIES} - ${${COMPONENT}_3RD_PARTY_LIBRARIES}) - endif() - + target_link_libraries(link_to_${COMPONENT} CGAL::${COMPONENT}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS link_to_${COMPONENT}) - + CGAL_add_test(link_to_${COMPONENT}) endmacro() find_package(CGAL REQUIRED COMPONENTS Core) include(CGAL_CreateSingleSourceCGALProgram) +include(CGAL_SetupGMP) create_single_source_cgal_program("endian.cpp") @@ -68,6 +52,7 @@ if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL Windows) target_link_libraries(display_dll_version_info version) add_executable(test_gmp_mpfr_dll test_gmp_mpfr_dll.cpp) target_link_libraries(test_gmp_mpfr_dll version) + use_CGAL_GMP_support(test_gmp_mpfr_dll) CGAL_add_test(test_gmp_mpfr_dll) add_to_cached_list( CGAL_EXECUTABLE_TARGETS test_gmp_mpfr_dll ) string(RANDOM RDM_DIR)#5 random chars to avoid conflicts in parallel testsuites From 76746841468f58b545860b2d2adebb7fc8609113 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Thu, 21 Sep 2023 13:12:41 +0200 Subject: [PATCH 412/943] Dirty Fix : diminished maximum number of subdomain + rebased branch on cgal-5.6 --- .../Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp | 4 ++-- Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp index ce75e3eafd31..9474af80b371 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp @@ -150,9 +150,9 @@ public Q_SLOTS: if(!tet_item) return; Scene_c3t3_item* c3t3_item = tet_item->c3t3_item(); - if(c3t3_item->subdomain_indices().size() > 96) + if(c3t3_item->subdomain_indices().size() > 25) { - QMessageBox::warning(nullptr, "Warning", tr("The filtering is only available for items with less than 96 subdomains, and this one has %1").arg(c3t3_item->subdomain_indices().size())); + QMessageBox::warning(nullptr, "Warning", tr("The filtering is only available for items with less than 24 subdomains, and this one has %1").arg(c3t3_item->subdomain_indices().size())); return; } int counter = 0; diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp index 7dc8c51f1ce9..334bc7741cf3 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp @@ -659,7 +659,7 @@ Scene_triangulation_3_item::triangulation_changed() } const int max_subdomain_index = max; d->visible_subdomain.resize(max_subdomain_index+1, true); - d->is_filterable &=( d->subdomain_ids.size() < 96); + d->is_filterable &=( d->subdomain_ids.size() <= 24); for (Tr::Finite_facets_iterator fit = triangulation().finite_facets_begin(), end = triangulation().finite_facets_end(); fit != end; ++fit) { From a89b39f8edca25cc50f2a9f487a237e0262a9bcc Mon Sep 17 00:00:00 2001 From: ange-clement <47100137+ange-clement@users.noreply.github.com> Date: Thu, 21 Sep 2023 15:02:58 +0200 Subject: [PATCH 413/943] Fixed previous fix --- Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp index 334bc7741cf3..debb0673e631 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp @@ -659,7 +659,7 @@ Scene_triangulation_3_item::triangulation_changed() } const int max_subdomain_index = max; d->visible_subdomain.resize(max_subdomain_index+1, true); - d->is_filterable &=( d->subdomain_ids.size() <= 24); + d->is_filterable &=( d->subdomain_indices_.size() <= 24); for (Tr::Finite_facets_iterator fit = triangulation().finite_facets_begin(), end = triangulation().finite_facets_end(); fit != end; ++fit) { From c44d66f84fccd55106ca1d53c27c1c6deb94f679 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Fri, 22 Sep 2023 11:55:55 +0200 Subject: [PATCH 414/943] Changed limit from 24 to 128 This limit can be changed by updating number_of_bitset in * Scene_triangulation_3_item.h * shader_c3t3.frag * shader_c3t3_edges.frag --- .../Mesh_3/Tetrahedra_filtering_plugin.cpp | 9 +++++++-- .../Polyhedron/Scene_triangulation_3_item.cpp | 17 ++++++++++------- .../Polyhedron/Scene_triangulation_3_item.h | 1 + .../demo/Polyhedron/resources/shader_c3t3.frag | 13 +++++++++---- .../Polyhedron/resources/shader_c3t3_edges.frag | 9 +++++++-- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp index 9474af80b371..1e8854dd2923 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp @@ -11,6 +11,7 @@ #include #include "Scene_c3t3_item.h" +#include "Scene_triangulation_3_item.h" #include "Scene_tetrahedra_item.h" #include "Messages_interface.h" #include "CGAL_double_edit.h" @@ -150,9 +151,13 @@ public Q_SLOTS: if(!tet_item) return; Scene_c3t3_item* c3t3_item = tet_item->c3t3_item(); - if(c3t3_item->subdomain_indices().size() > 25) + unsigned int max_number_of_item = 32*Scene_triangulation_3_item::number_of_bitset-1; + if(c3t3_item->subdomain_indices().size() >= max_number_of_item) { - QMessageBox::warning(nullptr, "Warning", tr("The filtering is only available for items with less than 24 subdomains, and this one has %1").arg(c3t3_item->subdomain_indices().size())); + QString message = tr("The filtering is only available for items with less than %1 subdomains, and this one has %2") + .arg(max_number_of_item) + .arg(c3t3_item->subdomain_indices().size()); + QMessageBox::warning(nullptr, "Warning", message); return; } int counter = 0; diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp index 334bc7741cf3..f76097804fd9 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp @@ -353,6 +353,7 @@ struct Scene_triangulation_3_item_priv { is_aabb_tree_built = false; alphaSlider = NULL; is_filterable = true; + memset(visible_biteset, 0xFFFF, Scene_triangulation_3_item::number_of_bitset * sizeof(uint)); // all bits set to 1 } void computeIntersection(const Primitive& facet); void fill_aabb_tree() { @@ -492,7 +493,7 @@ struct Scene_triangulation_3_item_priv { QVector colors; QVector colors_subdomains; boost::dynamic_bitset<> visible_subdomain; - std::bitset<24> bs[4] = {16777215, 16777215, 16777215, 16777215}; + std::bitset<32> visible_biteset[Scene_triangulation_3_item::number_of_bitset]; bool show_tetrahedra; bool is_aabb_tree_built; bool last_intersection; @@ -659,7 +660,7 @@ Scene_triangulation_3_item::triangulation_changed() } const int max_subdomain_index = max; d->visible_subdomain.resize(max_subdomain_index+1, true); - d->is_filterable &=( d->subdomain_ids.size() <= 24); + d->is_filterable &=( d->subdomain_indices_.size() < 32*number_of_bitset-1); for (Tr::Finite_facets_iterator fit = triangulation().finite_facets_begin(), end = triangulation().finite_facets_end(); fit != end; ++fit) { @@ -972,8 +973,9 @@ void Scene_triangulation_3_item::draw(CGAL::Three::Viewer_interface* viewer) con program->bind(); if(d->is_filterable) { - QVector4D visible_bitset(d->bs[0].to_ulong(),d->bs[1].to_ulong(),d->bs[2].to_ulong(),d->bs[3].to_ulong()); - program->setUniformValue("is_visible_bitset", visible_bitset); + GLuint visible_bitset_ulong[number_of_bitset]; + memcpy(visible_bitset_ulong, d->visible_biteset, number_of_bitset * sizeof(uint)); + program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong, number_of_bitset); } program->setUniformValue("is_filterable", d->is_filterable); program->release(); @@ -1051,8 +1053,9 @@ void Scene_triangulation_3_item::drawEdges(CGAL::Three::Viewer_interface* viewer program->bind(); if(d->is_filterable) { - QVector4D visible_bitset(d->bs[0].to_ulong(),d->bs[1].to_ulong(),d->bs[2].to_ulong(),d->bs[3].to_ulong()); - program->setUniformValue("is_visible_bitset", visible_bitset); + GLuint visible_bitset_ulong[number_of_bitset]; + memcpy(visible_bitset_ulong, d->visible_biteset, number_of_bitset * sizeof(uint)); + program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong, number_of_bitset); } program->setUniformValue("is_filterable", d->is_filterable); program->release(); @@ -2050,7 +2053,7 @@ void Scene_triangulation_3_item::switchVisibleSubdomain(int id) int i = compact_id/32; int j = compact_id%32; - d->bs[i][j] = d->visible_subdomain[id]; + d->visible_biteset[i][j] = d->visible_subdomain[id]; } void Scene_triangulation_3_item::computeIntersection() diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h index 8cd2b81bd126..6098288b31b0 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h @@ -31,6 +31,7 @@ using namespace CGAL::Three; Q_OBJECT public: typedef CGAL::qglviewer::ManipulatedFrame ManipulatedFrame; + static const int number_of_bitset = 4; // also defined in "shader_c3t3.frag" and "shader_c3t3_edges.frag" Scene_triangulation_3_item(bool display_elements = true); Scene_triangulation_3_item(const T3 t3, bool display_elements = true); diff --git a/Polyhedron/demo/Polyhedron/resources/shader_c3t3.frag b/Polyhedron/demo/Polyhedron/resources/shader_c3t3.frag index 27b255c5e1c6..f7b5c3d59ba7 100644 --- a/Polyhedron/demo/Polyhedron/resources/shader_c3t3.frag +++ b/Polyhedron/demo/Polyhedron/resources/shader_c3t3.frag @@ -1,4 +1,7 @@ #version 150 + +const int number_of_bitset = 4; + in vec4 color; in vec4 fP; in vec3 fN; @@ -19,8 +22,8 @@ uniform bool writing; uniform sampler2D sampler; uniform float alpha; uniform bool is_surface; -uniform vec4 is_visible_bitset; uniform bool is_filterable; +uniform int is_visible_bitset[number_of_bitset]; out vec4 out_color; float depth(float z) @@ -33,11 +36,13 @@ void main(void) { { uint domain1 = uint(subdomain_out.x); uint domain2 = uint(subdomain_out.y); - uint i1 = domain1/25u; - uint i2 = domain2/25u; + uint i1 = domain1/32u; + uint j1 = domain1%32u; + uint i2 = domain2/32u; + uint j2 = domain2%32u; uint visible1 = uint(is_visible_bitset[i1]); uint visible2 = uint(is_visible_bitset[i2]); - if((visible1>>(domain1%25u))%2u == 0u && (visible2>>(domain2%25u))%2u == 0u) + if(((visible1>>j1)&1u) == 0u && ((visible2>>j2)&1u) == 0u) { discard; } diff --git a/Polyhedron/demo/Polyhedron/resources/shader_c3t3_edges.frag b/Polyhedron/demo/Polyhedron/resources/shader_c3t3_edges.frag index c3fbb6bba004..a6d15c1a6a91 100644 --- a/Polyhedron/demo/Polyhedron/resources/shader_c3t3_edges.frag +++ b/Polyhedron/demo/Polyhedron/resources/shader_c3t3_edges.frag @@ -1,9 +1,12 @@ #version 150 + +const int number_of_bitset = 4; + in vec4 color; flat in vec2 subdomain_out; uniform bool is_surface; -uniform vec4 is_visible_bitset; uniform bool is_filterable; +uniform int is_visible_bitset[number_of_bitset]; out vec4 out_color; void main(void) { @@ -12,10 +15,12 @@ void main(void) uint domain1 = uint(subdomain_out.x); uint domain2 = uint(subdomain_out.y); uint i1 = domain1/32u; + uint j1 = domain1%32u; uint i2 = domain2/32u; + uint j2 = domain2%32u; uint visible1 = uint(is_visible_bitset[i1]); uint visible2 = uint(is_visible_bitset[i2]); - if((visible1>>(domain1%32u))%2u == 0u && (visible2>>(domain2%32u))%2u == 0u) + if(((visible1>>j1)&1u) == 0u && ((visible2>>j2)&1u) == 0u) { discard; } From 87003941220f792096961bb9a3896afc5afdfb2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 24 Sep 2023 22:52:20 +0200 Subject: [PATCH 415/943] boost::mpl::if_ -> std::conditional --- .../CGAL/AABB_face_graph_triangle_primitive.h | 9 ++- .../AABB_halfedge_graph_segment_primitive.h | 9 ++- .../include/CGAL/number_utils.h | 16 ++--- .../include/CGAL/Arr_batched_point_location.h | 3 +- .../include/CGAL/Arr_overlay_2.h | 5 +- .../include/CGAL/Arr_tags.h | 59 +++++++++---------- .../CGAL/Arr_vertical_decomposition_2.h | 3 +- .../Arr_traits_adaptor_2_dispatching.h | 23 +++----- .../Arrangement_on_surface_2_global.h | 10 ++-- .../Arrangement_on_surface_2/test_tags.cpp | 1 - .../test_traits_dispatching.cpp | 1 - .../internal/OM_iterator_from_circulator.h | 29 ++++----- .../internal/initialized_index_maps_helpers.h | 4 +- .../CGAL/boost/graph/named_params_helper.h | 18 +++--- BGL/include/CGAL/boost/graph/properties.h | 10 ++-- .../CGAL/boost/graph/properties_OpenMesh.h | 15 +++-- BGL/include/CGAL/boost/graph/property_maps.h | 1 - .../CGAL/Combinatorial_map_iterators_base.h | 34 +++++------ .../CGAL/Compact_container_with_index.h | 11 ++-- Filtered_kernel/include/CGAL/Lazy_kernel.h | 1 - .../CGAL/Generalized_map_iterators_base.h | 1 - .../include/CGAL/sibson_gradient_fitting.h | 1 - Kernel_23/include/CGAL/Kernel_traits.h | 1 - Mesh_3/benchmark/Mesh_3/StdAfx.h | 2 - .../Implicit_to_labeling_function_wrapper.h | 7 +-- .../Image_to_labeled_function_wrapper.h | 1 - Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h | 7 +-- Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h | 7 +-- .../CGAL/Mesh_3/Triangulation_helpers.h | 1 - .../CGAL/NewKernel_d/Cartesian_filter_K.h | 1 - .../NewKernel_d/Cartesian_static_filters.h | 7 +-- .../CGAL/NewKernel_d/KernelD_converter.h | 9 ++- .../include/CGAL/NewKernel_d/functor_tags.h | 3 +- NewKernel_d/include/CGAL/NewKernel_d/utils.h | 8 +-- NewKernel_d/test/NewKernel_d/Epick_d.cpp | 4 +- Number_types/include/CGAL/Lazy_exact_nt.h | 10 ++-- Number_types/include/CGAL/Quotient.h | 8 +-- .../Algebraic_structure_traits.h | 8 +-- .../CGAL/Sqrt_extension/Coercion_traits.h | 4 +- ...t_to_labeled_subdomains_function_wrapper.h | 7 +-- .../CGAL/Periodic_3_function_wrapper.h | 7 +-- .../CGAL/Periodic_3_regular_triangulation_3.h | 1 - ...ABB_traversal_traits_with_transformation.h | 1 - .../internal/Corefinement/face_graph_utils.h | 7 +-- .../Polygon_mesh_processing/intersection.h | 1 - .../CGAL/Polygon_mesh_processing/locate.h | 1 - .../include/CGAL/Polygon_mesh_slicer.h | 9 ++- Polynomial/include/CGAL/Polynomial.h | 1 - .../include/CGAL/Polynomial/Polynomial_type.h | 6 +- Polynomial/include/CGAL/Polynomial_traits_d.h | 6 +- .../include/CGAL/Dynamic_property_map.h | 7 +-- .../CGAL/Mesh_complex_3_in_triangulation_3.h | 1 - .../include/CGAL/Compact_container.h | 10 ++-- .../CGAL/Concurrent_compact_container.h | 4 +- .../include/CGAL/Handle_with_policy.h | 6 +- .../include/CGAL/Named_function_parameters.h | 13 ++-- .../include/CGAL/transforming_iterator.h | 7 +-- .../include/CGAL/Skin_surface_base_3.h | 1 - .../include/CGAL/Fuzzy_iso_box.h | 2 - .../include/CGAL/Search_traits_adapter.h | 12 ++-- .../Straight_skeleton_aux.h | 11 ++-- .../CGAL/Constrained_triangulation_2.h | 5 +- .../include/CGAL/Regular_triangulation_2.h | 1 - .../include/CGAL/Triangulation_hierarchy_2.h | 1 - .../include/CGAL/Regular_triangulation_3.h | 1 - ...n_cell_base_with_weighted_circumcenter_3.h | 1 - .../include/CGAL/Triangulation_3.h | 1 - .../include/CGAL/Triangulation_hierarchy_3.h | 1 - .../include/CGAL/_test_cls_delaunay_3.h | 1 - .../CGAL/_test_cls_parallel_triangulation_3.h | 1 - .../test_regular_insert_range_with_info.cpp | 18 +++--- 71 files changed, 212 insertions(+), 292 deletions(-) diff --git a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h index 5422c84b2ae6..021cdc6270ab 100644 --- a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h @@ -21,7 +21,6 @@ #include #include #include -#include namespace CGAL { @@ -57,9 +56,9 @@ template < class FaceGraph, class CacheDatum=Tag_false > class AABB_face_graph_triangle_primitive #ifndef DOXYGEN_RUNNING - : public AABB_primitive::face_descriptor, - std::pair::face_descriptor, const FaceGraph*> >::type, + : public AABB_primitive::face_descriptor, + std::pair::face_descriptor, const FaceGraph*> >, Triangle_from_face_descriptor_map< FaceGraph, typename Default::Get::const_type >::type VertexPointPMap_; typedef typename boost::graph_traits::face_descriptor FD; - typedef typename boost::mpl::if_ >::type Id_; + typedef std::conditional_t > Id_; typedef Triangle_from_face_descriptor_map Triangle_property_map; typedef One_point_from_face_descriptor_map Point_property_map; diff --git a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h index 135682273199..3f5481d0cfe1 100644 --- a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h @@ -24,7 +24,6 @@ #include #include #include -#include #include @@ -70,9 +69,9 @@ template < class HalfedgeGraph, class CacheDatum = Tag_false > class AABB_halfedge_graph_segment_primitive #ifndef DOXYGEN_RUNNING - : public AABB_primitive< typename boost::mpl::if_::edge_descriptor, - std::pair::edge_descriptor, const HalfedgeGraph*> >::type, + : public AABB_primitive< std::conditional_t::edge_descriptor, + std::pair::edge_descriptor, const HalfedgeGraph*> >, Segment_from_edge_descriptor_map< HalfedgeGraph, typename Default::Get::const_type >::type VertexPointPMap_; typedef typename boost::graph_traits::edge_descriptor ED; - typedef typename boost::mpl::if_ >::type Id_; + typedef std::conditional_t > Id_; typedef Segment_from_edge_descriptor_map Segment_property_map; typedef Source_point_from_edge_descriptor_map Point_property_map; diff --git a/Algebraic_foundations/include/CGAL/number_utils.h b/Algebraic_foundations/include/CGAL/number_utils.h index c17823d72b9d..5a5bc2d242d3 100644 --- a/Algebraic_foundations/include/CGAL/number_utils.h +++ b/Algebraic_foundations/include/CGAL/number_utils.h @@ -194,21 +194,21 @@ root_of( int k, Input_iterator begin, Input_iterator end ) { template< class Number_type > inline // select a Is_zero functor -typename boost::mpl::if_c< - ::std::is_same< typename Algebraic_structure_traits< Number_type >::Is_zero, - Null_functor >::value , +typename std::conditional_t< + std::is_same_v< typename Algebraic_structure_traits< Number_type >::Is_zero, + Null_functor >, typename Real_embeddable_traits< Number_type >::Is_zero, typename Algebraic_structure_traits< Number_type >::Is_zero ->::type::result_type +>::result_type is_zero( const Number_type& x ) { // We take the Algebraic_structure_traits<>::Is_zero functor by default. If it // is not available, we take the Real_embeddable_traits functor - typename ::boost::mpl::if_c< - ::std::is_same< + std::conditional_t< + std::is_same_v< typename Algebraic_structure_traits< Number_type >::Is_zero, - Null_functor >::value , + Null_functor > , typename Real_embeddable_traits< Number_type >::Is_zero, - typename Algebraic_structure_traits< Number_type >::Is_zero >::type + typename Algebraic_structure_traits< Number_type >::Is_zero > is_zero; return is_zero( x ); } diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_batched_point_location.h b/Arrangement_on_surface_2/include/CGAL/Arr_batched_point_location.h index 42715621e4b2..85ba6ccc235f 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_batched_point_location.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_batched_point_location.h @@ -26,7 +26,6 @@ #include #include -#include #include namespace CGAL { @@ -120,7 +119,7 @@ locate(const Arrangement_on_surface_2& arr, * Use the form 'A a(*b);' and not ''A a = b;' to handle the case where A has * only an implicit constructor, (which takes *b as a parameter). */ - typename boost::mpl::if_, const Bgt2&, Bgt2>::type + std::conditional_t, const Bgt2&, Bgt2> ex_traits(*geom_traits); // Define the sweep-line visitor and perform the sweep. diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_overlay_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_overlay_2.h index 2951b1983fe8..dfa6fb89ffc1 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_overlay_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_overlay_2.h @@ -25,7 +25,6 @@ #include #include -#include #include #include @@ -247,8 +246,8 @@ overlay(const Arrangement_on_surface_2& arr1 * Use the form 'A a(*b);' and not ''A a = b;' to handle the case where A has * only an implicit constructor, (which takes *b as a parameter). */ - typename boost::mpl::if_, - const Ovl_gt2&, Ovl_gt2>::type + std::conditional_t, + const Ovl_gt2&, Ovl_gt2> ex_traits(*traits_adaptor); Ovl_visitor visitor(&arr1, &arr2, &arr, &ovl_tr); diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_tags.h b/Arrangement_on_surface_2/include/CGAL/Arr_tags.h index 91313be6c5d8..1aac06155855 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_tags.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_tags.h @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -246,14 +245,14 @@ struct Arr_all_sides_not_finite_tag : struct Arr_not_all_sides_not_finite_tag : public virtual Arr_not_all_sides_oblivious_tag {}; -typedef boost::mpl::bool_ Arr_true; -typedef boost::mpl::bool_ Arr_false; +typedef std::true_type Arr_true; +typedef std::false_type Arr_false; template struct Arr_is_side_oblivious { typedef ArrSideCategory Side_cat; typedef std::is_same Is_same; - typedef boost::mpl::if_ result; + typedef std::conditional result; typedef typename result::type type; }; @@ -261,7 +260,7 @@ template struct Arr_is_side_open { typedef ArrSideCategory Side_cat; typedef std::is_same Is_same; - typedef boost::mpl::if_ result; + typedef std::conditional result; typedef typename result::type type; }; @@ -269,7 +268,7 @@ template struct Arr_is_side_identified { typedef ArrSideCategory Side_cat; typedef std::is_same Is_same; - typedef boost::mpl::if_ result; + typedef std::conditional result; typedef typename result::type type; }; @@ -277,7 +276,7 @@ template struct Arr_is_side_contracted { typedef ArrSideCategory Side_cat; typedef std::is_same Is_same; - typedef boost::mpl::if_ result; + typedef std::conditional result; typedef typename result::type type; }; @@ -285,7 +284,7 @@ template struct Arr_is_side_closed { typedef ArrSideCategory Side_cat; typedef std::is_same Is_same; - typedef boost::mpl::if_ result; + typedef std::conditional result; typedef typename result::type type; }; @@ -307,10 +306,10 @@ struct Arr_all_sides_oblivious_category { /*! Boolean tag that is Arr_all_sides_oblivious_tag if all sides are * oblivious, otherwise Arr_not_all_sides_oblivious_tag */ - typedef typename boost::mpl::if_, - Arr_all_sides_oblivious_tag, - Arr_not_all_sides_oblivious_tag>::type + typedef std::conditional_t result; }; @@ -340,10 +339,10 @@ struct Arr_all_sides_not_open_category { /*! Boolean tag that is Arr_all_sides_not_open_tag if all sides are not-open, * otherwise Arr_not_all_sides_not_open_tag */ - typedef typename boost::mpl::if_, - Arr_all_sides_not_open_tag, - Arr_not_all_sides_not_open_tag>::type + typedef std::conditional_t result; }; @@ -379,18 +378,18 @@ struct Arr_sides_category { typedef boost::mpl::or_ Bot_obl_or_ope; typedef boost::mpl::or_ Top_obl_or_ope; - typedef typename boost::mpl::if_, - Arr_all_sides_not_finite_tag, - Arr_not_all_sides_not_finite_tag>::type + typedef std::conditional_t tmp; public: - typedef typename boost::mpl::if_, - Arr_all_sides_oblivious_tag, tmp>::type + typedef std::conditional_t result; }; @@ -532,11 +531,11 @@ struct Arr_two_sides_category { Is_open; public: - typedef typename boost::mpl::if_::type>::type>::type>::type + typedef std::conditional_t>>> result; }; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_vertical_decomposition_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_vertical_decomposition_2.h index 75c8f25e0c96..099f44192ee5 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_vertical_decomposition_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_vertical_decomposition_2.h @@ -24,7 +24,6 @@ #include #include -#include #include namespace CGAL { @@ -124,7 +123,7 @@ decompose(const Arrangement_on_surface_2& arr, * Use the form 'A a(*b);' and not ''A a = b;' to handle the case where A has * only an implicit constructor, (which takes *b as a parameter). */ - typename boost::mpl::if_, const Vgt2&, Vgt2>::type + std::conditional_t, const Vgt2&, Vgt2> ex_traits(*geom_traits); // Define the sweep-line visitor and perform the sweep. diff --git a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arr_traits_adaptor_2_dispatching.h b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arr_traits_adaptor_2_dispatching.h index e4533596dd2b..283b2dc66b5c 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arr_traits_adaptor_2_dispatching.h +++ b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arr_traits_adaptor_2_dispatching.h @@ -17,7 +17,6 @@ #include -#include #include #include #include @@ -59,25 +58,21 @@ struct Or_traits { private: - typedef boost::mpl::bool_< true > true_; - typedef boost::mpl::bool_< false > false_; + typedef std::conditional< + std::is_same_v< Arr_smaller_implementation_tag, Arr_use_traits_tag >, + std::true_type, std::false_type > Smaller_traits; - typedef boost::mpl::if_< - std::is_same< Arr_smaller_implementation_tag, Arr_use_traits_tag >, - true_, false_ > Smaller_traits; - - typedef boost::mpl::if_< - std::is_same< Arr_larger_implementation_tag, Arr_use_traits_tag >, - true_, false_ > Larger_traits; + typedef std::conditional_t_< + std::is_same_v< Arr_larger_implementation_tag, Arr_use_traits_tag >, + std::true_type, std::false_type > Larger_traits; public: //! the result type (if one side asks for traits, then ask traits! //! Or vice versa: If both ask for dummy, then dummy!) - typedef typename boost::mpl::if_< - boost::mpl::or_< Smaller_traits, Larger_traits >, - Arr_use_traits_tag, - Arr_use_dummy_tag >::type type; + typedef std::conditional_t< + Smaller_traits, Larger_traits >::value || Arr_use_traits_tag::value, + Arr_use_dummy_tag > type; }; diff --git a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_on_surface_2_global.h b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_on_surface_2_global.h index 0f2957d47149..ee072c95778c 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_on_surface_2_global.h +++ b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_on_surface_2_global.h @@ -23,8 +23,6 @@ #include #include -#include -#include #include #include @@ -271,7 +269,7 @@ insert_empty(Arrangement_on_surface_2& arr, * Use the form 'A a(*b);' and not ''A a = b;' to handle the case where A has * only an implicit constructor, (which takes *b as a parameter). */ - typename boost::mpl::if_, const Cgt2&, Cgt2>::type + std::conditional_t, const Cgt2&, Cgt2> traits(*geom_traits); // Define a surface-sweep instance and perform the sweep: @@ -326,7 +324,7 @@ void insert_empty(Arrangement_on_surface_2& * Use the form 'A a(*b);' and not ''A a = b;' to handle the case where A has * only an implicit constructor, (which takes *b as a parameter). */ - typename boost::mpl::if_, const Cgt2&, Cgt2>::type + std::conditional_t, const Cgt2&, Cgt2> traits(*geom_traits); // Define a surface-sweep instance and perform the sweep. @@ -379,7 +377,7 @@ void insert_non_empty(Arrangement_on_surface_2, const Igt2&, Igt2>::type + std::conditional_t, const Igt2&, Igt2> traits(*geom_traits); // Create a set of existing as well as new curves and points. @@ -979,7 +977,7 @@ non_intersecting_insert_non_empty(Arrangement_on_surface_2, const Igt2&, Igt2>::type + std::conditional_t, const Igt2&, Igt2> traits(*geom_traits); // Create a set of existing as well as new curves and points. diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_tags.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_tags.cpp index 81eae4204966..a86325de2afc 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_tags.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_tags.cpp @@ -6,7 +6,6 @@ #include #include -#include struct Traits1 { typedef CGAL::Arr_open_side_tag Left_side_category; diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits_dispatching.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits_dispatching.cpp index 5c8e19fa12e0..ce17f3b9105e 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits_dispatching.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits_dispatching.cpp @@ -4,7 +4,6 @@ #include #include -#include int dispatch(CGAL::Arr_use_dummy_tag) { return 0; diff --git a/BGL/include/CGAL/boost/graph/internal/OM_iterator_from_circulator.h b/BGL/include/CGAL/boost/graph/internal/OM_iterator_from_circulator.h index e726e161a6bd..01104c546804 100644 --- a/BGL/include/CGAL/boost/graph/internal/OM_iterator_from_circulator.h +++ b/BGL/include/CGAL/boost/graph/internal/OM_iterator_from_circulator.h @@ -20,8 +20,6 @@ #include #include -#include - namespace CGAL { // adapted from circulator.h, does not support @@ -45,23 +43,20 @@ class OM_iterator_from_circulator { typedef typename I__traits::iterator_category iterator_category; - typedef typename - boost::mpl::if_c< Prevent_deref - , C - , typename C::value_type - >::type value_type; + typedef std::conditional_t< Prevent_deref + , C + , typename C::value_type> + value_type; typedef typename C::difference_type difference_type; - typedef typename - boost::mpl::if_c< Prevent_deref - , C& - , typename C::reference - >::type reference; - typedef typename - boost::mpl::if_c< Prevent_deref - , C* - , typename C::reference - >::type pointer; + typedef std::conditional_t< Prevent_deref + , C& + , typename C::reference + > reference; + typedef std::conditional_t< Prevent_deref + , C* + , typename C::reference + > pointer; OM_iterator_from_circulator(){} diff --git a/BGL/include/CGAL/boost/graph/internal/initialized_index_maps_helpers.h b/BGL/include/CGAL/boost/graph/internal/initialized_index_maps_helpers.h index 2d85e38d35c1..eddefcec7fb2 100644 --- a/BGL/include/CGAL/boost/graph/internal/initialized_index_maps_helpers.h +++ b/BGL/include/CGAL/boost/graph/internal/initialized_index_maps_helpers.h @@ -276,8 +276,8 @@ class GetInitializedIndexMap { public: // Check if there is an internal property map; if not, we must a dynamic property map - typedef typename boost::mpl::if_c< - CGAL::graph_has_property::value, Tag, DynamicTag>::type Final_tag; + typedef std::conditional_t< + CGAL::graph_has_property::value, Tag, DynamicTag> Final_tag; typedef typename internal_np::Lookup_named_param_def< PropertyTag, diff --git a/BGL/include/CGAL/boost/graph/named_params_helper.h b/BGL/include/CGAL/boost/graph/named_params_helper.h index 1e0efd6faa60..4dce0049b1ab 100644 --- a/BGL/include/CGAL/boost/graph/named_params_helper.h +++ b/BGL/include/CGAL/boost/graph/named_params_helper.h @@ -20,7 +20,6 @@ #include #include -#include #include #include @@ -43,11 +42,10 @@ class property_map_selector { public: typedef typename graph_has_property::type Has_internal_pmap; - typedef typename boost::mpl::if_c::type, - typename boost::cgal_no_property::type - >::type type; - typedef typename boost::mpl::if_c::type, + typename boost::cgal_no_property::type> type; + typedef std::conditional_t::const_type, typename boost::cgal_no_property::const_type >::type const_type; @@ -209,10 +207,10 @@ struct GetGeomTraits_impl::value, - typename GetK::Kernel, - Fake_GT>::type type; + typedef std::conditional_t::value, + typename GetK::Kernel, + Fake_GT> type; }; template typedef ValueType value_type; typedef Handle key_type; - typedef typename boost::mpl::if_< std::is_reference, - ValueType&, - ValueType >::type Reference; + typedef std::conditional_t< std::is_reference, + ValueType&, + ValueType > Reference; Point_accessor() {} Point_accessor(Point_accessor) {} @@ -172,9 +172,9 @@ struct Is_writable_property_map // property map must define. template struct Is_writable_property_map - : boost::mpl::if_c::reference>::type>::value, - CGAL::Tag_false, CGAL::Tag_true>::type + CGAL::Tag_false, CGAL::Tag_true> { }; } // namespace internal diff --git a/BGL/include/CGAL/boost/graph/properties_OpenMesh.h b/BGL/include/CGAL/boost/graph/properties_OpenMesh.h index 861f5aea98b6..f6f56cea7ef8 100644 --- a/BGL/include/CGAL/boost/graph/properties_OpenMesh.h +++ b/BGL/include/CGAL/boost/graph/properties_OpenMesh.h @@ -13,7 +13,6 @@ #include #include #include -#include #ifndef OPEN_MESH_CLASS #error OPEN_MESH_CLASS is not defined @@ -29,13 +28,13 @@ namespace CGAL { template class OM_pmap { public: - typedef typename boost::mpl::if_::vertex_descriptor>, - OpenMesh::VPropHandleT, - typename boost::mpl::if_::face_descriptor>, - OpenMesh::FPropHandleT, - typename boost::mpl::if_::halfedge_descriptor>, - OpenMesh::HPropHandleT, - OpenMesh::EPropHandleT >::type>::type>::type H; + typedef std::conditional_t::vertex_descriptor>, + OpenMesh::VPropHandleT, + std::conditional_t::face_descriptor>, + OpenMesh::FPropHandleT, + std::conditional_t::halfedge_descriptor>, + OpenMesh::HPropHandleT, + OpenMesh::EPropHandleT >>> H; typedef boost::lvalue_property_map_tag category; diff --git a/BGL/include/CGAL/boost/graph/property_maps.h b/BGL/include/CGAL/boost/graph/property_maps.h index aab29d9b8811..b6973feb65c8 100644 --- a/BGL/include/CGAL/boost/graph/property_maps.h +++ b/BGL/include/CGAL/boost/graph/property_maps.h @@ -15,7 +15,6 @@ #include #include -#include namespace CGAL{ diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h b/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h index a50266f76592..555dc554c58e 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h @@ -18,7 +18,6 @@ #include #include -#include #include @@ -68,24 +67,24 @@ namespace CGAL { class CMap_dart_iterator; template < typename Map_,bool Const> - class CMap_dart_iterator: public boost::mpl::if_c< Const, + class CMap_dart_iterator: public std::conditional_t< Const, typename Map_::Dart_container::const_iterator, - typename Map_::Dart_container::iterator>::type + typename Map_::Dart_container::iterator> //public internal::CC_iterator { public: typedef CMap_dart_iterator Self; - typedef typename boost::mpl::if_c< Const, + typedef std::conditional_t< Const, typename Map_::Dart_container::const_iterator, - typename Map_::Dart_container::iterator>::type Base; + typename Map_::Dart_container::iterator> Base; // typedef internal::CC_iterator Base; - typedef typename boost::mpl::if_c< Const, - typename Map_::Dart_const_descriptor, - typename Map_::Dart_descriptor>::type + typedef std::conditional_t< Const, + typename Map_::Dart_const_descriptor, + typename Map_::Dart_descriptor> Dart_descriptor; - typedef typename boost::mpl::if_c< Const, const Map_, Map_>::type Map; + typedef std::conditional_t< Const, const Map_, Map_> Map; typedef std::input_iterator_tag iterator_category; typedef typename Base::value_type value_type; @@ -180,25 +179,24 @@ namespace CGAL { template < typename Map_,bool Const > class CMap_dart_iterator: - /*public boost::mpl::if_c< Const, + /*public std::conditional_t< Const, typename Map_::Dart_container::const_iterator, - typename Map_::Dart_container::iterator>::type*/ + typename Map_::Dart_container::iterator>*/ public internal::CC_iterator_with_index { public: typedef CMap_dart_iterator Self; - /*typedef typename boost::mpl::if_c< Const, + /*typedef std::conditional_t< Const, typename Map_::Dart_container::const_iterator, - typename Map_::Dart_container::iterator>::type Base;*/ + typename Map_::Dart_container::iterator> Base;*/ typedef internal::CC_iterator_with_index Base; - typedef typename boost::mpl::if_c< Const, - typename Map_::Dart_const_descriptor, - typename Map_::Dart_descriptor>::type + typedef std::conditional_t< Const, + typename Map_::Dart_const_descriptor, + typename Map_::Dart_descriptor> Dart_descriptor; - typedef typename boost::mpl::if_c< Const, const Map_, - Map_>::type Map; + typedef std::conditional_t< Const, const Map_, Map_> Map; typedef std::input_iterator_tag iterator_category; typedef typename Base::value_type value_type; diff --git a/Combinatorial_map/include/CGAL/Compact_container_with_index.h b/Combinatorial_map/include/CGAL/Compact_container_with_index.h index d3d67c57a88d..dbb9aa8bae6d 100644 --- a/Combinatorial_map/include/CGAL/Compact_container_with_index.h +++ b/Combinatorial_map/include/CGAL/Compact_container_with_index.h @@ -861,14 +861,13 @@ namespace internal { typedef typename DSC::value_type value_type; typedef typename DSC::size_type size_type; typedef typename DSC::difference_type difference_type; - typedef typename boost::mpl::if_c< Const, const value_type*, - value_type*>::type pointer; - typedef typename boost::mpl::if_c< Const, const value_type&, - value_type&>::type reference; + typedef std::conditional_t< Const, const value_type*, + value_type*> pointer; + typedef std::conditional_t< Const, const value_type&, + value_type&> reference; typedef std::bidirectional_iterator_tag iterator_category; - typedef typename boost::mpl::if_c< Const, const DSC*, DSC*>::type - cc_pointer; + typedef std::conditional_t< Const, const DSC*, DSC*> cc_pointer; CC_iterator_with_index(): m_ptr_to_cc(nullptr), m_index(0) diff --git a/Filtered_kernel/include/CGAL/Lazy_kernel.h b/Filtered_kernel/include/CGAL/Lazy_kernel.h index 911a86debc30..c6b6cb2444ab 100644 --- a/Filtered_kernel/include/CGAL/Lazy_kernel.h +++ b/Filtered_kernel/include/CGAL/Lazy_kernel.h @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff --git a/Generalized_map/include/CGAL/Generalized_map_iterators_base.h b/Generalized_map/include/CGAL/Generalized_map_iterators_base.h index 034b1600f936..1747f89f354b 100644 --- a/Generalized_map/include/CGAL/Generalized_map_iterators_base.h +++ b/Generalized_map/include/CGAL/Generalized_map_iterators_base.h @@ -19,7 +19,6 @@ #include #include #include -#include namespace CGAL { diff --git a/Interpolation/include/CGAL/sibson_gradient_fitting.h b/Interpolation/include/CGAL/sibson_gradient_fitting.h index f08600a4603c..f6d6d0559dd8 100644 --- a/Interpolation/include/CGAL/sibson_gradient_fitting.h +++ b/Interpolation/include/CGAL/sibson_gradient_fitting.h @@ -23,7 +23,6 @@ #include #include -#include #include #include diff --git a/Kernel_23/include/CGAL/Kernel_traits.h b/Kernel_23/include/CGAL/Kernel_traits.h index 4839184ff304..e12d38503bca 100644 --- a/Kernel_23/include/CGAL/Kernel_traits.h +++ b/Kernel_23/include/CGAL/Kernel_traits.h @@ -19,7 +19,6 @@ #include #include -#include namespace CGAL { diff --git a/Mesh_3/benchmark/Mesh_3/StdAfx.h b/Mesh_3/benchmark/Mesh_3/StdAfx.h index 57890430a5b2..9648697498aa 100644 --- a/Mesh_3/benchmark/Mesh_3/StdAfx.h +++ b/Mesh_3/benchmark/Mesh_3/StdAfx.h @@ -42,11 +42,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include diff --git a/Mesh_3/include/CGAL/Implicit_to_labeling_function_wrapper.h b/Mesh_3/include/CGAL/Implicit_to_labeling_function_wrapper.h index 7e3af3de705e..3ab3f0d3ba5f 100644 --- a/Mesh_3/include/CGAL/Implicit_to_labeling_function_wrapper.h +++ b/Mesh_3/include/CGAL/Implicit_to_labeling_function_wrapper.h @@ -33,7 +33,6 @@ #include #include -#include #include #include @@ -67,9 +66,9 @@ class Implicit_to_labeling_function_wrapper } private: - typedef typename boost::mpl::if_, - Function_*, - Function_>::type Stored_function; + typedef std::conditional_t, + Function_*, + Function_> Stored_function; /// Function to wrap Stored_function f_; diff --git a/Mesh_3/include/CGAL/Mesh_3/Image_to_labeled_function_wrapper.h b/Mesh_3/include/CGAL/Mesh_3/Image_to_labeled_function_wrapper.h index 45246e4463db..3d1c030ff08b 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Image_to_labeled_function_wrapper.h +++ b/Mesh_3/include/CGAL/Mesh_3/Image_to_labeled_function_wrapper.h @@ -26,7 +26,6 @@ #include #include #include -#include namespace CGAL { diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h b/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h index 44e4f82b82d2..ad023df618e2 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h @@ -37,7 +37,6 @@ #include #include -#include #include #include @@ -172,9 +171,9 @@ template::value, + std::is_convertible_v, // Parallel # ifdef CGAL_MESH_3_USE_LAZY_UNSORTED_REFINEMENT_QUEUE @@ -209,7 +208,7 @@ template # endif - >::type // boost::if (parallel/sequential) + > // std::conditional (parallel/sequential) #else // !CGAL_LINKED_WITH_TBB diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h index b4e2af503757..50e0a6cef08d 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -640,9 +639,9 @@ template class Base_ = Refine_facets_3_base, #ifdef CGAL_LINKED_WITH_TBB - class Container_ = typename boost::mpl::if_c // (parallel/sequential?) + class Container_ = std::conditional_t // (parallel/sequential?) < - std::is_convertible::value, + std::is_convertible_v, // Parallel # ifdef CGAL_MESH_3_USE_LAZY_UNSORTED_REFINEMENT_QUEUE Meshes::Filtered_deque_container @@ -679,7 +678,7 @@ template # endif - >::type // boost::if (parallel/sequential) + > // std::conditional (parallel/sequential) #else // !CGAL_LINKED_WITH_TBB diff --git a/Mesh_3/include/CGAL/Mesh_3/Triangulation_helpers.h b/Mesh_3/include/CGAL/Mesh_3/Triangulation_helpers.h index db2dde5b6d3d..e8517c94945a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Triangulation_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/Triangulation_helpers.h @@ -23,7 +23,6 @@ #include #include -#include #include #include diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_filter_K.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_filter_K.h index c02efa6dcc65..25ec0c4f25c4 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_filter_K.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_filter_K.h @@ -15,7 +15,6 @@ #include #include #include -#include #include namespace CGAL { diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index 5c3a64287d28..122cfe90885b 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -16,7 +16,6 @@ #include // bug, should be included by the next one #include #include -#include namespace CGAL { namespace SFA { // static filter adapter @@ -98,9 +97,9 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { template struct Functor : Inherit_functor {}; template struct Functor { typedef - //typename boost::mpl::if_ < - //std::is_same, - //typename Get_functor::type, + //std::conditional_t < + //std::is_same_v, + //typename Get_functor, SFA::Orientation_of_points_2 // >::type type; diff --git a/NewKernel_d/include/CGAL/NewKernel_d/KernelD_converter.h b/NewKernel_d/include/CGAL/NewKernel_d/KernelD_converter.h index d62b8215cc52..edfb15ae9e95 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/KernelD_converter.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/KernelD_converter.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -80,12 +79,12 @@ class KernelD_converter_ // Explicit calls to boost::mpl functions to avoid parenthesis // warning on some versions of GCC - typedef typename boost::mpl::if_ < + typedef std::conditional_t < // If Point==Vector, keep only one conversion - boost::mpl::or_, + duplicate::value || // For iterator objects, the default is make_transforming_iterator - boost::mpl::bool_<(iterator_tag_traits::is_iterator && no_converter::value)> >, - Do_not_use,K1_Obj>::type argument_type; + (iterator_tag_traits::is_iterator && no_converter::value), + Do_not_use,K1_Obj> argument_type; //typedef typename KOC::argument_type K1_Obj; //typedef typename KOC::result_type K2_Obj; public: diff --git a/NewKernel_d/include/CGAL/NewKernel_d/functor_tags.h b/NewKernel_d/include/CGAL/NewKernel_d/functor_tags.h index a3255d25eb00..4eb0e8900631 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/functor_tags.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/functor_tags.h @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -233,7 +232,7 @@ namespace CGAL { #undef CGAL_DECL_ITER_OBJ templatestruct Get_functor_category,B,C> : - boost::mpl::if_c::is_iterator, + std::conditional::is_iterator, Construct_iterator_tag, Construct_tag> {}; diff --git a/NewKernel_d/include/CGAL/NewKernel_d/utils.h b/NewKernel_d/include/CGAL/NewKernel_d/utils.h index a1ac6faeddd2..f2e6a2f3ada5 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/utils.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/utils.h @@ -145,11 +145,11 @@ struct Has_type_different_from #define CGAL_KD_DEFAULT_FUNCTOR(Tg,Name,ReqTyp,ReqFun) \ template \ struct Get_functor::value \ || !Provides_types >::value \ || !Provides_functors >::value \ - , int, void>::type> \ + , int, void>> \ { \ typedef CGAL_STRIP_PAREN_ Name type; \ typedef K Bound_kernel; \ @@ -159,11 +159,11 @@ struct Has_type_different_from #define CGAL_KD_DEFAULT_TYPE(Tg,Name,ReqTyp,ReqFun) \ template \ struct Get_type::value \ || !Provides_types >::value \ || !Provides_functors >::value \ - , int, void>::type> \ + , int, void>> \ { \ typedef CGAL_STRIP_PAREN_ Name type; \ typedef K Bound_kernel; \ diff --git a/NewKernel_d/test/NewKernel_d/Epick_d.cpp b/NewKernel_d/test/NewKernel_d/Epick_d.cpp index 18ac1657ee63..5693977869a4 100644 --- a/NewKernel_d/test/NewKernel_d/Epick_d.cpp +++ b/NewKernel_d/test/NewKernel_d/Epick_d.cpp @@ -509,8 +509,8 @@ void test3(){ ; CP_ cp_ Kinit(construct_point_d_object); CV_ cv_ Kinit(construct_vector_d_object); - typename boost::mpl::if_,Construct_point3_helper,CP_>::type cp(cp_); - typename boost::mpl::if_,Construct_point3_helper,CV_>::type cv(cv_); + std::conditional_t,Construct_point3_helper,CP_> cp(cp_); + std::conditional_t,Construct_point3_helper,CV_> cv(cv_); CCI ci Kinit(construct_cartesian_const_iterator_d_object); CC cc Kinit(compute_coordinate_d_object); CL cl Kinit(compare_lexicographically_d_object); diff --git a/Number_types/include/CGAL/Lazy_exact_nt.h b/Number_types/include/CGAL/Lazy_exact_nt.h index 3f06ef3fb329..3f8a2812968a 100644 --- a/Number_types/include/CGAL/Lazy_exact_nt.h +++ b/Number_types/include/CGAL/Lazy_exact_nt.h @@ -19,7 +19,6 @@ #include // for Root_of functor #include -#include #include #include @@ -1179,12 +1178,11 @@ struct Coercion_traits< Lazy_exact_nt, Lazy_exact_nt > Are_implicit_interoperable; \ private: \ static const bool interoperable \ - =std::is_same< Are_implicit_interoperable, Tag_false>::value; \ + =std::is_same< Are_implicit_interoperable, Tag_false>::value; \ public: \ - typedef typename boost::mpl::if_c \ - ::type Type; \ - typedef typename boost::mpl::if_c >::type Cast; \ + typedef std::conditional_t Type; \ + typedef std::conditional_t > Cast; \ }; \ \ template \ diff --git a/Number_types/include/CGAL/Quotient.h b/Number_types/include/CGAL/Quotient.h index e91e22208a50..8c117c2fb6d8 100644 --- a/Number_types/include/CGAL/Quotient.h +++ b/Number_types/include/CGAL/Quotient.h @@ -627,13 +627,13 @@ template< class NT > class Algebraic_structure_traits_quotient_base< Quotient::Sqrt, - Null_functor >::value, + typedef std::conditional_t< + !std::is_same_v< typename Algebraic_structure_traits::Sqrt, + Null_functor >, typename INTERN_QUOTIENT::Sqrt_selector< Type, Is_exact >::Sqrt, Null_functor - >::type Sqrt; + > Sqrt; class Simplify : public CGAL::cpp98::unary_function< Type&, void > { diff --git a/Number_types/include/CGAL/Sqrt_extension/Algebraic_structure_traits.h b/Number_types/include/CGAL/Sqrt_extension/Algebraic_structure_traits.h index b0913afb1b6f..b1500148b598 100644 --- a/Number_types/include/CGAL/Sqrt_extension/Algebraic_structure_traits.h +++ b/Number_types/include/CGAL/Sqrt_extension/Algebraic_structure_traits.h @@ -204,10 +204,10 @@ class Algebraic_structure_traits< Sqrt_extension< COEFF_, ROOT_, ACDE_TAG,FP_TAG typedef Sqrt_extension< COEFF_, ROOT_, ACDE_TAG,FP_TAG > Type; // Tag_true if COEFF and ROOT are exact - typedef typename ::boost::mpl::if_c< - bool( ::std::is_same::Is_exact,::CGAL::Tag_true>::value )&& - bool( ::std::is_same::Is_exact,::CGAL::Tag_true>::value ) - ,::CGAL::Tag_true,::CGAL::Tag_false>::type Is_exact; + typedef std::conditional_t< + std::is_same_v::Is_exact,::CGAL::Tag_true> && + std::is_same::Is_exact,::CGAL::Tag_true> + ,::CGAL::Tag_true,::CGAL::Tag_false> Is_exact; typedef typename Algebraic_structure_traits::Is_numerical_sensitive Is_numerical_sensitive; diff --git a/Number_types/include/CGAL/Sqrt_extension/Coercion_traits.h b/Number_types/include/CGAL/Sqrt_extension/Coercion_traits.h index 6b4344348d4d..5b5ddfa45c69 100644 --- a/Number_types/include/CGAL/Sqrt_extension/Coercion_traits.h +++ b/Number_types/include/CGAL/Sqrt_extension/Coercion_traits.h @@ -178,7 +178,7 @@ template struct CT_ext_not_to_fwsqrt; // template struct Coercion_traits_for_level, B , CTL_SQRT_EXT> -:public ::boost::mpl::if_c< +:public std::conditional_t< // if B is fwsqrt ::boost::is_base_and_derived< Field_with_sqrt_tag, @@ -192,7 +192,7 @@ typename Algebraic_structure_traits::Algebraic_category >::value , //else take Intern::Coercion_traits not for fwsqrt INTERN_CT::CT_ext_not_to_fwsqrt< Sqrt_extension ,B> - >::type + > {}; // diff --git a/Periodic_3_mesh_3/include/CGAL/Implicit_to_labeled_subdomains_function_wrapper.h b/Periodic_3_mesh_3/include/CGAL/Implicit_to_labeled_subdomains_function_wrapper.h index a96c2eafa366..d821ab2fe3f9 100644 --- a/Periodic_3_mesh_3/include/CGAL/Implicit_to_labeled_subdomains_function_wrapper.h +++ b/Periodic_3_mesh_3/include/CGAL/Implicit_to_labeled_subdomains_function_wrapper.h @@ -15,7 +15,6 @@ #include #include -#include #if defined(BOOST_MSVC) # pragma warning(push) @@ -47,9 +46,9 @@ class Implicit_to_labeled_subdomains_function_wrapper } private: - typedef typename boost::mpl::if_, - Function_*, - Function_>::type Stored_function; + typedef std::conditional_t, + Function_*, + Function_> Stored_function; /// Function to wrap Stored_function f_; diff --git a/Periodic_3_mesh_3/include/CGAL/Periodic_3_function_wrapper.h b/Periodic_3_mesh_3/include/CGAL/Periodic_3_function_wrapper.h index 2780d6183932..b1ee5e650654 100644 --- a/Periodic_3_mesh_3/include/CGAL/Periodic_3_function_wrapper.h +++ b/Periodic_3_mesh_3/include/CGAL/Periodic_3_function_wrapper.h @@ -18,7 +18,6 @@ #include #include -#include namespace CGAL { @@ -46,9 +45,9 @@ class Periodic_3_function_wrapper } private: - typedef typename boost::mpl::if_, - Function_*, - Function_>::type Stored_function; + typedef std::conditional_t, + Function_*, + Function_>: Stored_function; /// Function to wrap Stored_function f_; diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_regular_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_regular_triangulation_3.h index 7eed15886cd0..63fb94044699 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_regular_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_regular_triangulation_3.h @@ -31,7 +31,6 @@ #include #include -#include #include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/AABB_traversal_traits_with_transformation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/AABB_traversal_traits_with_transformation.h index 838842771364..7dad2004ecd0 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/AABB_traversal_traits_with_transformation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/AABB_traversal_traits_with_transformation.h @@ -27,7 +27,6 @@ #include #include -#include namespace CGAL { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/face_graph_utils.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/face_graph_utils.h index 4a15d9e59c74..68f0c9e5e6c8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/face_graph_utils.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/face_graph_utils.h @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -388,12 +387,12 @@ struct TweakedGetVertexPointMap typedef typename std::is_same::value_type>::type Use_default_tag; - typedef typename boost::mpl::if_< - Use_default_tag, + typedef std::conditional_t< + Use_default_tag::value, Default_map, Dummy_default_vertex_point_map::vertex_descriptor > - >::type type; + > type; }; template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h index 26e205ea43d9..f32f9d907a98 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h @@ -29,7 +29,6 @@ #include #include -#include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h index ef361b175299..b99ed460a6f6 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h @@ -30,7 +30,6 @@ #include #include -#include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h index f1b88540a606..a608179f49ae 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h @@ -30,7 +30,6 @@ #include #include -#include #include #include @@ -79,12 +78,12 @@ template::type >::type, + typename boost::property_map< TriangleMesh, vertex_point_t>::type >, Default, - VertexPointMap>::type> > >, + VertexPointMap>>>>, bool UseParallelPlaneOptimization=true> class Polygon_mesh_slicer { diff --git a/Polynomial/include/CGAL/Polynomial.h b/Polynomial/include/CGAL/Polynomial.h index b3681eb43b5f..ad61432cd405 100644 --- a/Polynomial/include/CGAL/Polynomial.h +++ b/Polynomial/include/CGAL/Polynomial.h @@ -34,7 +34,6 @@ #include #include #include -#include #include #include diff --git a/Polynomial/include/CGAL/Polynomial/Polynomial_type.h b/Polynomial/include/CGAL/Polynomial/Polynomial_type.h index e2529d2e3495..de6bcdc447bd 100644 --- a/Polynomial/include/CGAL/Polynomial/Polynomial_type.h +++ b/Polynomial/include/CGAL/Polynomial/Polynomial_type.h @@ -486,9 +486,9 @@ class Polynomial // and NT would be changed by NTX typedef typename Fraction_traits::Is_fraction Is_fraction; typedef typename Coercion_traits::Type Type; - typedef typename ::boost::mpl::if_c< - ::std::is_same::value, Is_fraction, CGAL::Tag_false - >::type If_decomposable_AND_Type_equals_NT; + typedef std::conditional_t< + std::is_same_v, Is_fraction, CGAL::Tag_false + > If_decomposable_AND_Type_equals_NT; return sign_at_(x,If_decomposable_AND_Type_equals_NT()); } diff --git a/Polynomial/include/CGAL/Polynomial_traits_d.h b/Polynomial/include/CGAL/Polynomial_traits_d.h index 6eb4f0d6e3f2..dfbf7cf31357 100644 --- a/Polynomial/include/CGAL/Polynomial_traits_d.h +++ b/Polynomial/include/CGAL/Polynomial_traits_d.h @@ -999,7 +999,7 @@ class Polynomial_traits_d_base< Polynomial< Coefficient_type_ >, // Sign_at, Sign_at_homogeneous, Compare // define XXX_ even though ICoeff may not be Real_embeddable - // select propoer XXX among XXX_ or Null_functor using ::boost::mpl::if_ + // select propoer XXX among XXX_ or Null_functor using ::std::conditional_t private: struct Sign_at_ { private: @@ -1036,8 +1036,8 @@ class Polynomial_traits_d_base< Polynomial< Coefficient_type_ >, typedef Real_embeddable_traits RET_IC; typedef typename RET_IC::Is_real_embeddable IC_is_real_embeddable; public: - typedef typename ::boost::mpl::if_::type Sign_at; - typedef typename ::boost::mpl::if_::type Sign_at_homogeneous; + typedef std::conditional_t Sign_at; + typedef std::conditional_t Sign_at_homogeneous; typedef typename Real_embeddable_traits::Compare Compare; diff --git a/Property_map/include/CGAL/Dynamic_property_map.h b/Property_map/include/CGAL/Dynamic_property_map.h index a7dc48b5354a..bca414e19b00 100644 --- a/Property_map/include/CGAL/Dynamic_property_map.h +++ b/Property_map/include/CGAL/Dynamic_property_map.h @@ -19,7 +19,6 @@ #include #include -#include #include @@ -127,9 +126,9 @@ struct Dynamic_with_index { typedef Key key_type; typedef Value value_type; - typedef typename boost::mpl::if_< std::is_same, - value_type, - value_type&>::type reference; + typedef std::conditional_t< std::is_same_v, + value_type, + value_type&> reference; typedef boost::read_write_property_map_tag category; Dynamic_with_index() diff --git a/SMDS_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h b/SMDS_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h index f77f1d9c07f3..ef7c6164f2d0 100644 --- a/SMDS_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h +++ b/SMDS_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index 24f7ef91c721..81ff5cf1bce2 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -35,8 +35,6 @@ #include #include -#include - // An STL like container with the following properties : // - to achieve compactness, it requires access to a pointer stored in T, // specified by a traits. This pointer is supposed to be 4 bytes aligned @@ -866,10 +864,10 @@ namespace internal { typedef typename DSC::value_type value_type; typedef typename DSC::size_type size_type; typedef typename DSC::difference_type difference_type; - typedef typename boost::mpl::if_c< Const, const value_type*, - value_type*>::type pointer; - typedef typename boost::mpl::if_c< Const, const value_type&, - value_type&>::type reference; + typedef std::conditional_t< Const, const value_type*, + value_type*> pointer; + typedef std::conditional_t< Const, const value_type&, + value_type&> reference; typedef std::bidirectional_iterator_tag iterator_category; // the initialization with nullptr is required by our Handle concept. diff --git a/STL_Extension/include/CGAL/Concurrent_compact_container.h b/STL_Extension/include/CGAL/Concurrent_compact_container.h index 7f18ab80f57e..e6a2a5dbecf1 100644 --- a/STL_Extension/include/CGAL/Concurrent_compact_container.h +++ b/STL_Extension/include/CGAL/Concurrent_compact_container.h @@ -1,4 +1,4 @@ -// Copyright (c) 2012 INRIA Sophia-Antipolis (France). +3// Copyright (c) 2012 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org) @@ -36,8 +36,6 @@ #include #include -#include - namespace CGAL { #define CGAL_GENERATE_MEMBER_DETECTOR(X) \ diff --git a/STL_Extension/include/CGAL/Handle_with_policy.h b/STL_Extension/include/CGAL/Handle_with_policy.h index 5f952a66e15f..528bf8061d10 100644 --- a/STL_Extension/include/CGAL/Handle_with_policy.h +++ b/STL_Extension/include/CGAL/Handle_with_policy.h @@ -21,8 +21,6 @@ #include #include -#include - #include #ifdef CGAL_USE_LEDA @@ -728,10 +726,10 @@ class Handle_with_policy { static Bind bind; // Define type that is used for function matching - typedef typename ::boost::mpl::if_c< + typedef std::conditional_t< is_class_hierarchy, ::CGAL::Tag_true, - ::CGAL::Tag_false >::type + ::CGAL::Tag_false > Class_hierarchy; //! the internal representation, i.e., \c T plus a reference count diff --git a/STL_Extension/include/CGAL/Named_function_parameters.h b/STL_Extension/include/CGAL/Named_function_parameters.h index d0f1648f816e..7558aae88f25 100644 --- a/STL_Extension/include/CGAL/Named_function_parameters.h +++ b/STL_Extension/include/CGAL/Named_function_parameters.h @@ -19,7 +19,6 @@ #include #include -#include #include #include @@ -143,14 +142,14 @@ struct Lookup_named_param_def typedef typename internal_np::Get_param::type NP_type; typedef typename internal_np::Get_param::reference NP_reference; - typedef typename boost::mpl::if_< - std::is_same, - D, NP_type>::type + typedef std::conditional_t< + std::is_same_v, + D, NP_type> type; - typedef typename boost::mpl::if_< - std::is_same, - D&, NP_reference>::type + typedef std::conditional_t< + std::is_same_v, + D&, NP_reference> reference; }; diff --git a/STL_Extension/include/CGAL/transforming_iterator.h b/STL_Extension/include/CGAL/transforming_iterator.h index bd94ad33c4fd..21d88e8f69cf 100644 --- a/STL_Extension/include/CGAL/transforming_iterator.h +++ b/STL_Extension/include/CGAL/transforming_iterator.h @@ -12,7 +12,6 @@ #ifndef CGAL_TRANSFORMING_ITERATOR_H #define CGAL_TRANSFORMING_ITERATOR_H #include -#include #include #include #include @@ -55,10 +54,8 @@ class transforming_iterator_helper typedef typename Default::Get>>::type value_type; // Crappy heuristic. If we have *it that returns a Weighted_point and F that returns a reference to the Point contained in the Weighted_point it takes as argument, we do NOT want the transformed iterator to return a reference to the temporary *it. On the other hand, if *it returns an int n, and F returns a reference to array[n] it is not so good to lose the reference. This probably should be done elsewhere and should at least be made optional... - typedef typename boost::mpl::if_< - boost::mpl::or_, - std::is_integral >, - reference_, value_type>::type reference; + typedef std::conditional_t || std::is_integral_v, + reference_, value_type> reference; public: typedef boost::iterator_adaptor< diff --git a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h index 6962b1ec8f21..528ea1e0e832 100644 --- a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h +++ b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h @@ -42,7 +42,6 @@ #include -#include #include namespace CGAL { diff --git a/Spatial_searching/include/CGAL/Fuzzy_iso_box.h b/Spatial_searching/include/CGAL/Fuzzy_iso_box.h index 0b34898eff93..08cc1da0063c 100644 --- a/Spatial_searching/include/CGAL/Fuzzy_iso_box.h +++ b/Spatial_searching/include/CGAL/Fuzzy_iso_box.h @@ -22,8 +22,6 @@ #include #include -#include - #include diff --git a/Spatial_searching/include/CGAL/Search_traits_adapter.h b/Spatial_searching/include/CGAL/Search_traits_adapter.h index ff640dc639a4..7a518cf68eed 100644 --- a/Spatial_searching/include/CGAL/Search_traits_adapter.h +++ b/Spatial_searching/include/CGAL/Search_traits_adapter.h @@ -224,16 +224,16 @@ class Search_traits_adapter : public Base_traits{ // Select type of iterator + construct class depending on whether // point map is lvalue or not - typedef typename boost::mpl::if_< - std::is_reference::reference>, + typedef std::conditional_t< + std::is_reference_v::reference>, typename Base::Cartesian_const_iterator_d, - No_lvalue_iterator>::type + No_lvalue_iterator> Cartesian_const_iterator_d; - typedef typename boost::mpl::if_< - std::is_reference::reference>, + typedef std::conditional_t< + std::is_reference_v::reference>, Construct_cartesian_const_iterator_d_lvalue, - Construct_cartesian_const_iterator_d_no_lvalue>::type + Construct_cartesian_const_iterator_d_no_lvalue> Construct_cartesian_const_iterator_d; struct Construct_iso_box_d: public Base::Construct_iso_box_d{ diff --git a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h index a799eccda60b..30b1e25de59a 100644 --- a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h +++ b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h @@ -20,7 +20,6 @@ #include #include -#include #include #include @@ -36,12 +35,10 @@ struct Has_inexact_constructions { typedef typename K::FT FT ; - typedef typename boost::mpl::if_< boost::mpl::or_< std::is_same - , std::is_same - > - , Tag_true - , Tag_false - >::type type ; + typedef std::conditional_t< std::is_same_v || std::is_same_v + , Tag_true + , Tag_false + > type ; } ; template diff --git a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h index 4ce20796d1ab..02b050f790ad 100644 --- a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h @@ -34,7 +34,6 @@ #include #include -#include #include #include @@ -96,9 +95,9 @@ namespace internal { template struct Itag { - typedef typename boost::mpl::if_::Is_exact, + typedef std::conditional_t<(typename Algebraic_structure_traits::Is_exact)::value, Exact_intersections_tag, - Exact_predicates_tag>::type type; + Exact_predicates_tag> type; }; } // namespace internal diff --git a/Triangulation_2/include/CGAL/Regular_triangulation_2.h b/Triangulation_2/include/CGAL/Regular_triangulation_2.h index f7e4a653060b..c3ab2223a0ad 100644 --- a/Triangulation_2/include/CGAL/Regular_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Regular_triangulation_2.h @@ -23,7 +23,6 @@ #include #include -#include #include #include diff --git a/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h b/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h index 93e00b1680ff..295132483846 100644 --- a/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h @@ -26,7 +26,6 @@ #include #include -#include #include #include #include diff --git a/Triangulation_3/include/CGAL/Regular_triangulation_3.h b/Triangulation_3/include/CGAL/Regular_triangulation_3.h index aa58c124ed1f..7795840a2e6d 100644 --- a/Triangulation_3/include/CGAL/Regular_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Regular_triangulation_3.h @@ -54,7 +54,6 @@ #include #endif -#include #include #include #include diff --git a/Triangulation_3/include/CGAL/Regular_triangulation_cell_base_with_weighted_circumcenter_3.h b/Triangulation_3/include/CGAL/Regular_triangulation_cell_base_with_weighted_circumcenter_3.h index 3a73305b380e..f2c945342e8e 100644 --- a/Triangulation_3/include/CGAL/Regular_triangulation_cell_base_with_weighted_circumcenter_3.h +++ b/Triangulation_3/include/CGAL/Regular_triangulation_cell_base_with_weighted_circumcenter_3.h @@ -22,7 +22,6 @@ #include #include -#include #include namespace CGAL { diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index 7b8ef9ab6c8a..fd4b530c7a88 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -48,7 +48,6 @@ #include #include #include -#include #include #include #include diff --git a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h index 021e40e2ffef..c852a4bed75c 100644 --- a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h @@ -48,7 +48,6 @@ #include #include #include -#include #include #include diff --git a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h index 78b8822f5984..01f08ac186ce 100644 --- a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h +++ b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h @@ -25,7 +25,6 @@ #include #include -#include #include #include diff --git a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_parallel_triangulation_3.h b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_parallel_triangulation_3.h index e93418c19cf1..20c4351bc498 100644 --- a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_parallel_triangulation_3.h +++ b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_parallel_triangulation_3.h @@ -16,7 +16,6 @@ #include #include -#include template diff --git a/Triangulation_3/test/Triangulation_3/test_regular_insert_range_with_info.cpp b/Triangulation_3/test/Triangulation_3/test_regular_insert_range_with_info.cpp index e4f80d9149f0..c1b00d9aca9b 100644 --- a/Triangulation_3/test/Triangulation_3/test_regular_insert_range_with_info.cpp +++ b/Triangulation_3/test/Triangulation_3/test_regular_insert_range_with_info.cpp @@ -37,9 +37,9 @@ struct Tester void test_iterator_on_pair() const { typedef std::vector > Container; - typedef typename boost::mpl::if_, - std::add_const_t, - Container>::type Cast_type; + typedef std::conditional_t, + Container> Cast_type; Container points; points.push_back(std::make_pair(Weighted_point(Bare_point(0.160385, 0.599679, 0.374932), -0.118572), 0)); @@ -90,9 +90,9 @@ struct Tester void test_zip_iterator() const { typedef std::vector Container; - typedef typename boost::mpl::if_, - std::add_const_t, - Container >::type Cast_type; + typedef std::conditional_t, + Container > Cast_type; Container points; points.push_back(Weighted_point(Bare_point(0,0,0),1)); @@ -156,9 +156,9 @@ struct Tester void test_transform_iterator() const { typedef std::vector< Weighted_point > Container; - typedef typename boost::mpl::if_, - std::add_const_t, - Container >::type Cast_type; + typedef std::conditional_t, + Container > Cast_type; Container points; points.push_back(Weighted_point(Bare_point(0,0,0),1)); From da67575f3b66d7d48f6cb16a90af3c4fde471ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Wed, 20 Sep 2023 10:06:18 +0200 Subject: [PATCH 416/943] Fix general_polygon_example.png The visibility zone is slightly offset on the original image. This version displays the correct zone. --- .../fig/general_polygon_example.png | Bin 19759 -> 108727 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Visibility_2/doc/Visibility_2/fig/general_polygon_example.png b/Visibility_2/doc/Visibility_2/fig/general_polygon_example.png index 2f06e9a7b7406a143f6015510c736096e7fd9835..59c2cc63e99276b4dfa0c15fa268ea642e7a3ff0 100644 GIT binary patch literal 108727 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%0Au~ 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 Q;2~!Wp00i_>zopr03T@3Hvj+t From eadd12cdb0e5545494e78946403fb7649fb611a6 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 25 Sep 2023 15:14:43 +0100 Subject: [PATCH 417/943] reindent --- .../CGAL/Variational_shape_approximation.h | 108 +++++++++--------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index d24ecb93ffa5..13e2e29944b8 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -1904,64 +1904,64 @@ class Variational_shape_approximation { if_subdivide = true; } else { - FT dist_max(0.0); - Vector_3 chord_vec = vector_functor(pt_begin, pt_end); - const FT chord_len = CGAL::approximate_sqrt(chord_vec.squared_length()); - bool degenerate_chord = false; - if (chord_len > FT(0.0)) { - Segment_3 seg(pt_begin, pt_end); - chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); - for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - //Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); - //vec = cross_product_functor(chord_vec, vec); - //const FT dist = CGAL::approximate_sqrt(vec.squared_length()); - const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance(m_vpoint_map[target(*citr, *m_ptm)], seg)); - if (dist > dist_max) { - chord_max = citr; - dist_max = dist; - } - } + FT dist_max(0.0); + Vector_3 chord_vec = vector_functor(pt_begin, pt_end); + const FT chord_len = CGAL::approximate_sqrt(chord_vec.squared_length()); + bool degenerate_chord = false; + if (chord_len > FT(0.0)) { + Segment_3 seg(pt_begin, pt_end); + chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); + for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { + //Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); + //vec = cross_product_functor(chord_vec, vec); + //const FT dist = CGAL::approximate_sqrt(vec.squared_length()); + const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance(m_vpoint_map[target(*citr, *m_ptm)], seg)); + if (dist > dist_max) { + chord_max = citr; + dist_max = dist; + } } - else { - degenerate_chord = true; - for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance( - pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); - if (dist > dist_max) { - chord_max = citr; - dist_max = dist; - } - } + } + else { + degenerate_chord = true; + for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { + const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance( + pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); + if (dist > dist_max) { + chord_max = citr; + dist_max = dist; + } } + } - FT criterion = dist_max; - if (relative_to_chord && !degenerate_chord) - criterion /= chord_len; - else - criterion /= m_average_edge_length; - - if (with_dihedral_angle) { - // suppose the proxy normal angle is acute - std::size_t px_left = get(m_fproxy_map, face(he_first, *m_ptm)); - std::size_t px_right = px_left; - if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) - px_right = get(m_fproxy_map, face(opposite(he_first, *m_ptm), *m_ptm)); - FT norm_sin(1.0); - if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) { - Vector_3 vec = cross_product_functor( - m_px_planes[px_left].normal, m_px_planes[px_right].normal); - norm_sin = CGAL::approximate_sqrt(vec.squared_length()); - } - criterion *= norm_sin; - } - if (is_boundary) { - if (criterion > boundary_subdivision_ratio) - if_subdivide = true; - } - else { - if (criterion > subdivision_ratio) - if_subdivide = true; + FT criterion = dist_max; + if (relative_to_chord && !degenerate_chord) + criterion /= chord_len; + else + criterion /= m_average_edge_length; + + if (with_dihedral_angle) { + // suppose the proxy normal angle is acute + std::size_t px_left = get(m_fproxy_map, face(he_first, *m_ptm)); + std::size_t px_right = px_left; + if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) + px_right = get(m_fproxy_map, face(opposite(he_first, *m_ptm), *m_ptm)); + FT norm_sin(1.0); + if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) { + Vector_3 vec = cross_product_functor( + m_px_planes[px_left].normal, m_px_planes[px_right].normal); + norm_sin = CGAL::approximate_sqrt(vec.squared_length()); } + criterion *= norm_sin; + } + if (is_boundary) { + if (criterion > boundary_subdivision_ratio) + if_subdivide = true; + } + else { + if (criterion > subdivision_ratio) + if_subdivide = true; + } } if (if_subdivide) { // subdivide at the most remote vertex From aad5976559a333bbbf4b3ddd8476c0404c03e831 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 25 Sep 2023 16:20:25 +0100 Subject: [PATCH 418/943] Change default --- .../include/CGAL/Variational_shape_approximation.h | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index 13e2e29944b8..ea3896cf1f60 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -799,7 +799,7 @@ class Variational_shape_approximation { * \cgalParamNBegin{boundary_subdivision_ratio} * \cgalParamDescription{the chord subdivision ratio threshold to the chord length or average edge length for boundary edges} * \cgalParamType{`geom_traits::FT`} - * \cgalParamDefault{`5.0`} + * \cgalParamDefault{`subdivision_ratio`} * \cgalParamNEnd * * \cgalParamNBegin{relative_to_chord} @@ -840,7 +840,7 @@ class Variational_shape_approximation { using parameters::choose_parameter; const FT subdivision_ratio = choose_parameter(get_parameter(np, internal_np::subdivision_ratio), FT(5.0)); - const FT boundary_subdivision_ratio = choose_parameter(get_parameter(np, internal_np::boundary_subdivision_ratio), FT(5.0)); + const FT boundary_subdivision_ratio = choose_parameter(get_parameter(np, internal_np::boundary_subdivision_ratio), subdivision_ratio); const bool relative_to_chord = choose_parameter(get_parameter(np, internal_np::relative_to_chord), false); const bool with_dihedral_angle = choose_parameter(get_parameter(np, internal_np::with_dihedral_angle), false); const bool optimize_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_anchor_location), true); @@ -1912,9 +1912,6 @@ class Variational_shape_approximation { Segment_3 seg(pt_begin, pt_end); chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { - //Vector_3 vec = vector_functor(pt_begin, m_vpoint_map[target(*citr, *m_ptm)]); - //vec = cross_product_functor(chord_vec, vec); - //const FT dist = CGAL::approximate_sqrt(vec.squared_length()); const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance(m_vpoint_map[target(*citr, *m_ptm)], seg)); if (dist > dist_max) { chord_max = citr; @@ -1926,7 +1923,7 @@ class Variational_shape_approximation { degenerate_chord = true; for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance( - pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); + pt_begin, m_vpoint_map[target(*citr, *m_ptm)])); if (dist > dist_max) { chord_max = citr; dist_max = dist; @@ -1949,7 +1946,7 @@ class Variational_shape_approximation { FT norm_sin(1.0); if (!CGAL::is_border(opposite(he_first, *m_ptm), *m_ptm)) { Vector_3 vec = cross_product_functor( - m_px_planes[px_left].normal, m_px_planes[px_right].normal); + m_px_planes[px_left].normal, m_px_planes[px_right].normal); norm_sin = CGAL::approximate_sqrt(vec.squared_length()); } criterion *= norm_sin; From dd36cae7ccd12996d2788f534fd77e2bcd1f57d8 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 25 Sep 2023 16:26:59 +0100 Subject: [PATCH 419/943] remove unused variable --- .../include/CGAL/Variational_shape_approximation.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index ea3896cf1f60..23cfab856f61 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -1910,7 +1910,6 @@ class Variational_shape_approximation { bool degenerate_chord = false; if (chord_len > FT(0.0)) { Segment_3 seg(pt_begin, pt_end); - chord_vec = scale_functor(chord_vec, FT(1.0) / chord_len); for (Boundary_chord_iterator citr = chord_begin; citr != chord_end; ++citr) { const FT dist = CGAL::approximate_sqrt(CGAL::squared_distance(m_vpoint_map[target(*citr, *m_ptm)], seg)); if (dist > dist_max) { From 595897e7c74ccc757a0b4889972119d5d0e0330b Mon Sep 17 00:00:00 2001 From: ange-clement Date: Tue, 26 Sep 2023 15:22:49 +0200 Subject: [PATCH 420/943] Factorized vtk image loading --- .../Plugins/Mesh_3/Io_image_plugin.cpp | 68 +++++++++++-------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 32ec637c9210..8da04e3cc8e2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -54,6 +54,7 @@ #include #include +#include #include #include #include @@ -333,6 +334,8 @@ class Io_image_plugin : QString nameFilters() const override; bool canLoad(QFileInfo) const override; QList load(QFileInfo fileinfo, bool& ok, bool add_to_scene = true) override; + template + bool load_vtk_file(QFileInfo fileinfo, Image* image); bool canSave(const CGAL::Three::Scene_item*) override; bool save(QFileInfo fileinfo, QList& items ) override @@ -1123,6 +1126,25 @@ void convert(Image* image) image->image()->wordKind = WK_FLOAT; } + +template +bool +Io_image_plugin::load_vtk_file(QFileInfo fileinfo, Image* image) +{ +#ifdef CGAL_USE_VTK + vtkNew reader; + reader->SetFileName(fileinfo.filePath().toUtf8()); + reader->Update(); + auto vtk_image = reader->GetOutput(); + vtk_image->Print(std::cerr); + *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data + return true; +#else + return false; +#endif +} + + QList Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { @@ -1130,20 +1152,15 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) QApplication::restoreOverrideCursor(); Image* image = new Image; + QString warningMessage; // read a vti file if(fileinfo.suffix() == "vti") { #ifdef CGAL_USE_VTK - vtkNew reader; - reader->SetFileName(fileinfo.filePath().toUtf8()); - reader->Update(); - auto vtk_image = reader->GetOutput(); - vtk_image->Print(std::cerr); - *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data + ok = load_vtk_file(fileinfo, image); #else - CGAL::Three::Three::warning("VTK is required to read VTI files"); - delete image; - return QList(); + ok = false; + warningMessage = "VTK is required to read VTI files"; #endif } @@ -1151,16 +1168,10 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) else if(fileinfo.suffix() == "nrrd") { #ifdef CGAL_USE_VTK - vtkNew reader; - reader->SetFileName(fileinfo.filePath().toUtf8()); - reader->Update(); - auto vtk_image = reader->GetOutput(); - vtk_image->Print(std::cerr); - *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data + ok = load_vtk_file(fileinfo, image); #else - CGAL::Three::Three::warning("VTK is required to read NRRD files"); - delete image; - return QList(); + ok = false; + warningMessage = "VTK is required to read NRRD files"; #endif } @@ -1170,16 +1181,10 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) && fileinfo.fileName().endsWith(QString(".nii.gz"), Qt::CaseInsensitive))) { #ifdef CGAL_USE_VTK - vtkNew reader; - reader->SetFileName(fileinfo.filePath().toUtf8()); - reader->Update(); - auto vtk_image = reader->GetOutput(); - vtk_image->Print(std::cerr); - *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data + ok = load_vtk_file(fileinfo, image); #else - CGAL::Three::Three::warning("VTK is required to read NIfTI files"); - delete image; - return QList(); + ok = false; + warningMessage = "VTK is required to read NifTI files"; #endif } @@ -1286,11 +1291,16 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) if(!success) { ok = false; - delete image; - return QList(); } } + if (!ok) { + if (warningMessage.length() > 0) + CGAL::Three::Three::warning(warningMessage); + delete image; + return QList(); + } + // Get display precision QDialog dialog; ui.setupUi(&dialog); From a3ab2aa68eaf164f31f909af355a07f7585a6779 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Tue, 26 Sep 2023 15:57:05 +0200 Subject: [PATCH 421/943] Mooved templeted function load_vtk_file out of Io_image_plugin class --- .../Plugins/Mesh_3/Io_image_plugin.cpp | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 8da04e3cc8e2..d1e98bfdf49c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -79,6 +79,23 @@ #include #include +template +bool +load_vtk_file(QFileInfo fileinfo, Image* image) +{ +#ifdef CGAL_USE_VTK + vtkNew reader; + reader->SetFileName(fileinfo.filePath().toUtf8()); + reader->Update(); + auto vtk_image = reader->GetOutput(); + vtk_image->Print(std::cerr); + *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data + return true; +#else + return false; +#endif +} + // Covariant return types don't work for scalar types and we cannot // have templates here, hence this unfortunate hack. @@ -334,8 +351,6 @@ class Io_image_plugin : QString nameFilters() const override; bool canLoad(QFileInfo) const override; QList load(QFileInfo fileinfo, bool& ok, bool add_to_scene = true) override; - template - bool load_vtk_file(QFileInfo fileinfo, Image* image); bool canSave(const CGAL::Three::Scene_item*) override; bool save(QFileInfo fileinfo, QList& items ) override @@ -1127,24 +1142,6 @@ void convert(Image* image) } -template -bool -Io_image_plugin::load_vtk_file(QFileInfo fileinfo, Image* image) -{ -#ifdef CGAL_USE_VTK - vtkNew reader; - reader->SetFileName(fileinfo.filePath().toUtf8()); - reader->Update(); - auto vtk_image = reader->GetOutput(); - vtk_image->Print(std::cerr); - *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data - return true; -#else - return false; -#endif -} - - QList Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { From c82f2a9d9c2c082f477b7d5e2af7f57e319e3acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 27 Sep 2023 10:11:31 +0200 Subject: [PATCH 422/943] Update some variable names to reflect the genericity of the triangulation --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 9 +-- .../internal/gate_priority_queue.h | 16 ++--- .../Alpha_wrap_3/internal/geometry_utils.h | 62 +++++++++---------- 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index f2ad170c95e7..8f7b1f5efc9c 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -290,7 +290,7 @@ class Alpha_wrap_3 extract_surface(output_mesh, ovpm, true /*tolerate non manifoldness*/); #ifdef CGAL_AW3_DEBUG_DUMP_EVERY_STEP - dump_triangulation_faces("intermediate_dt3.off", false /*only_boundary_faces*/); + dump_triangulation_faces("intermediate_tr.off", false /*only_boundary_faces*/); IO::write_polygon_mesh("intermediate.off", output_mesh, CGAL::parameters::vertex_point_map(ovpm).stream_precision(17)); #endif @@ -350,7 +350,7 @@ class Alpha_wrap_3 #ifdef CGAL_AW3_DEBUG_DUMP_EVERY_STEP IO::write_polygon_mesh("final.off", output_mesh, CGAL::parameters::stream_precision(17)); - dump_triangulation_faces("final_dt3.off", false /*only_boundary_faces*/); + dump_triangulation_faces("final_tr.off", false /*only_boundary_faces*/); #endif #endif @@ -643,7 +643,9 @@ class Alpha_wrap_3 // and we fill the queue with the new parameters. bool initialize_from_existing_triangulation() { - std::cout << "restart from a DT of " << m_tr.number_of_cells() << " cells" << std::endl; +#ifdef CGAL_AW3_DEBUG_INITIALIZATION + std::cout << "Restart from a DT of " << m_tr.number_of_cells() << " cells" << std::endl; +#endif Real_timer t; t.start(); @@ -1050,7 +1052,6 @@ class Alpha_wrap_3 public: // @speed some decent time may be spent constructing Facet (pairs) for no reason as it's always // just to grab the .first and .second as soon as it's constructed, and not due to API requirements - // e.g. from DT3 Facet_queue_status facet_status(const Facet& f) const { CGAL_precondition(!m_tr.is_infinite(f)); diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h index 824d27bc2c10..5e14a4d08ea1 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h @@ -28,11 +28,11 @@ namespace Alpha_wraps_3 { namespace internal { // Represents an alpha-traversable facet in the mutable priority queue -template +template class Gate { - using Facet = typename DT3::Facet; - using FT = typename DT3::Geom_traits::FT; + using Facet = typename Tr::Facet; + using FT = typename Tr::Geom_traits::FT; private: Facet m_facet; @@ -65,24 +65,24 @@ class Gate struct Less_gate { - template - bool operator()(const Gate& a, const Gate& b) const + template + bool operator()(const Gate& a, const Gate& b) const { return a.priority() > b.priority(); } }; -template +template struct Gate_ID_PM { - using key_type = Gate; + using key_type = Gate; using value_type = std::size_t; using reference = std::size_t; using category = boost::readable_property_map_tag; inline friend value_type get(Gate_ID_PM, const key_type& k) { - using Facet = typename DT3::Facet; + using Facet = typename Tr::Facet; const Facet& f = k.facet(); return (4 * f.first->time_stamp() + f.second); diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h index d3814d0f3b25..7d66cfd19f41 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h @@ -40,16 +40,16 @@ struct Orientation_of_circumcenter } }; -template +template bool -less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha, - const typename Dt::Facet& fh, - const Dt& dt) +less_squared_radius_of_min_empty_sphere(typename Tr::Geom_traits::FT sq_alpha, + const typename Tr::Facet& fh, + const Tr& tr) { - using Cell_handle = typename Dt::Cell_handle; - using Point = typename Dt::Point; + using Cell_handle = typename Tr::Cell_handle; + using Point = typename Tr::Point; - using CK = typename Dt::Geom_traits; + using CK = typename Tr::Geom_traits; using Exact_kernel = typename Exact_kernel_selector::Exact_kernel; using Approximate_kernel = Simple_cartesian; using C2A = Cartesian_converter; @@ -65,17 +65,17 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha, const int ic = fh.second; const Cell_handle n = c->neighbor(ic); - const Point& p1 = dt.point(c, Dt::vertex_triple_index(ic,0)); - const Point& p2 = dt.point(c, Dt::vertex_triple_index(ic,1)); - const Point& p3 = dt.point(c, Dt::vertex_triple_index(ic,2)); + const Point& p1 = tr.point(c, Tr::vertex_triple_index(ic,0)); + const Point& p2 = tr.point(c, Tr::vertex_triple_index(ic,1)); + const Point& p3 = tr.point(c, Tr::vertex_triple_index(ic,2)); // This is not actually possible in the context of alpha wrapping, but keeping it for genericity // and because it does not cost anything. - if(dt.is_infinite(n)) + if(tr.is_infinite(n)) { Orientation ori = orientation_of_circumcenter(p1, p2, p3, - dt.point(c, 0), dt.point(c, 1), - dt.point(c, 2), dt.point(c, 3)); + tr.point(c, 0), tr.point(c, 1), + tr.point(c, 2), tr.point(c, 3)); if(ori == POSITIVE) { @@ -84,18 +84,18 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha, } else { - Comparison_result cr = compare_squared_radius(dt.point(c, 0), dt.point(c, 1), - dt.point(c, 2), dt.point(c, 3), + Comparison_result cr = compare_squared_radius(tr.point(c, 0), tr.point(c, 1), + tr.point(c, 2), tr.point(c, 3), sq_alpha); return cr == LARGER; } } - if(dt.is_infinite(c)) + if(tr.is_infinite(c)) { Orientation ori = orientation_of_circumcenter(p1, p2, p3, - dt.point(n, 0), dt.point(n, 1), - dt.point(n, 2), dt.point(n, 3)); + tr.point(n, 0), tr.point(n, 1), + tr.point(n, 2), tr.point(n, 3)); if(ori == NEGATIVE) { @@ -104,8 +104,8 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha, } else { - Comparison_result cr = compare_squared_radius(dt.point(n, 0), dt.point(n, 1), - dt.point(n, 2), dt.point(n, 3), + Comparison_result cr = compare_squared_radius(tr.point(n, 0), tr.point(n, 1), + tr.point(n, 2), tr.point(n, 3), sq_alpha); return cr == LARGER; } @@ -113,40 +113,40 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha, // both c and n are finite if(orientation_of_circumcenter(p1, p2, p3, - dt.point(c, 0), dt.point(c, 1), dt.point(c, 2), dt.point(c, 3)) != + tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)) != orientation_of_circumcenter(p1, p2, p3, - dt.point(n, 0), dt.point(n, 1), dt.point(n, 2), dt.point(n, 3))) + tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3))) { Comparison_result cr = compare_squared_radius(p1, p2, p3, sq_alpha); #ifdef CGAL_AW3_DEBUG_TRAVERSABILITY std::cout << "dual crosses the face; CR: " - << typename Dt::Geom_traits().compute_squared_radius_3_object()(p1, p2, p3) + << typename Tr::Geom_traits().compute_squared_radius_3_object()(p1, p2, p3) << " sq alpha " << sq_alpha << std::endl; #endif return cr == LARGER; } else { - Comparison_result cr = compare_squared_radius(dt.point(c, 0), dt.point(c, 1), - dt.point(c, 2), dt.point(c, 3), + Comparison_result cr = compare_squared_radius(tr.point(c, 0), tr.point(c, 1), + tr.point(c, 2), tr.point(c, 3), sq_alpha); #ifdef CGAL_AW3_DEBUG_TRAVERSABILITY std::cout << "dual does not cross the face; CR(c): " - << typename Dt::Geom_traits().compute_squared_radius_3_object()(dt.point(c, 0), dt.point(c, 1), - dt.point(c, 2), dt.point(c, 3)) + << typename Tr::Geom_traits().compute_squared_radius_3_object()(tr.point(c, 0), tr.point(c, 1), + tr.point(c, 2), tr.point(c, 3)) << " sq alpha " << sq_alpha << std::endl; #endif if(cr != LARGER) return false; - cr = compare_squared_radius(dt.point(n, 0), dt.point(n, 1), - dt.point(n, 2), dt.point(n, 3), + cr = compare_squared_radius(tr.point(n, 0), tr.point(n, 1), + tr.point(n, 2), tr.point(n, 3), sq_alpha); #ifdef CGAL_AW3_DEBUG_TRAVERSABILITY std::cout << "dual does not cross the face; CR(n): " - << typename Dt::Geom_traits().compute_squared_radius_3_object()(dt.point(n, 0), dt.point(n, 1), - dt.point(n, 2), dt.point(n, 3)) + << typename Tr::Geom_traits().compute_squared_radius_3_object()(tr.point(n, 0), tr.point(n, 1), + tr.point(n, 2), tr.point(n, 3)) << " sq alpha " << sq_alpha << std::endl; #endif From 62bb2a58d098dc08076f2165d104670dfa65388a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 27 Sep 2023 10:13:39 +0200 Subject: [PATCH 423/943] Put the warnings outside of verbosity macros (too important) --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 8f7b1f5efc9c..3ee6061d0d89 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1173,15 +1173,11 @@ class Alpha_wrap_3 return false; } - if(resuming) - { - if(offset != m_offset) - { -#ifdef CGAL_AW3_DEBUG - std::cerr << "Warning: resuming with a different offset!" << std::endl; -#endif - } - } + if(resuming && alpha > m_alpha) + std::cerr << "Warning: resuming with an alpha greater than last iteration!" << std::endl; + + if(resuming && offset != m_offset) + std::cerr << "Warning: resuming with a different offset!" << std::endl; m_alpha = FT(alpha); m_sq_alpha = square(m_alpha); From bc8351f15678b90955a9d5c2a5cc4b0389b49642 Mon Sep 17 00:00:00 2001 From: Mael Date: Wed, 27 Sep 2023 11:06:49 +0200 Subject: [PATCH 424/943] Fix typo --- Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 6d544be058d6..639c9a3f4685 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1418,7 +1418,7 @@ class Alpha_wrap_3 squared_distance(m_dt.point(c, 0), m_dt.point(c, 2)), squared_distance(m_dt.point(c, 0), m_dt.point(c, 3)), squared_distance(m_dt.point(c, 1), m_dt.point(c, 2)), - squared_distance(m_dt.point(c, 3), m_dt.point(c, 3)), + squared_distance(m_dt.point(c, 1), m_dt.point(c, 3)), squared_distance(m_dt.point(c, 2), m_dt.point(c, 3)) }); }; From 67bfce985be5d9c2fdc03b30999a95053661c0b2 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Thu, 28 Sep 2023 14:54:53 +0200 Subject: [PATCH 425/943] Fixed reset button + Filtering can be deleted an recreated on subdomain page --- .../Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp | 14 +++++++++++++- .../demo/Polyhedron/Scene_triangulation_3_item.cpp | 11 +++++++++++ .../demo/Polyhedron/Scene_triangulation_3_item.h | 2 ++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp index 1e8854dd2923..0fb84c348adb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Tetrahedra_filtering_plugin.cpp @@ -59,6 +59,10 @@ public : addDockWidget(dock_widget); connect(dock_widget->resetButton, &QPushButton::clicked, [this](){ + if(!tet_item) + return; + tet_item->c3t3_item()->resetVisibleSubdomain(); + tet_item->c3t3_item()->computeIntersection(); filter(); }); } @@ -130,6 +134,7 @@ public Q_SLOTS: connect(dock_widget->minEdit, &DoubleEdit::editingFinished, tet_item, QOverload<>::of(&Scene_tetrahedra_item::setMinThreshold)); connect(dock_widget->maxEdit, &DoubleEdit::editingFinished, tet_item, QOverload<>::of(&Scene_tetrahedra_item::setMaxThreshold)); + onFilterIndexChanged(dock_widget->filterBox->currentIndex()); dock_widget->show(); } @@ -163,6 +168,13 @@ public Q_SLOTS: int counter = 0; int limit = static_cast(std::ceil(CGAL::approximate_sqrt(EPICK::FT(c3t3_item->subdomain_indices().size())))); QGridLayout *layout = dock_widget->gridLayout; + //delete all items (see https://stackoverflow.com/questions/4272196/qt-remove-all-widgets-from-layout) + QLayoutItem* item; + while ((item = layout->takeAt(0))) + { + delete item->widget(); + delete item; + } for (std::set::iterator it = c3t3_item->subdomain_indices().begin(), end = c3t3_item->subdomain_indices().end(); it != end; ++it) { @@ -170,7 +182,7 @@ public Q_SLOTS: QPushButton* button = new QPushButton(tr("%1").arg(index)); buttons.push_back(button); button->setCheckable(true); - button->setChecked(true); + button->setChecked(c3t3_item->isVisibleSubdomain(index)); QColor color = c3t3_item->getSubdomainIndexColor(index); QString s("QPushButton { font-weight: bold; background: #" + QString::number(90,16) diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp index f76097804fd9..0e5ae6248ae3 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.cpp @@ -2046,6 +2046,12 @@ QColor Scene_triangulation_3_item::getSubdomainIndexColor(int i) const return d->colors_subdomains[i]; } +void Scene_triangulation_3_item::resetVisibleSubdomain() +{ + d->visible_subdomain.set(); + memset(d->visible_biteset, 0xFFFF, number_of_bitset * sizeof(uint)); +} + void Scene_triangulation_3_item::switchVisibleSubdomain(int id) { d->visible_subdomain[id] = !d->visible_subdomain[id]; @@ -2056,6 +2062,11 @@ void Scene_triangulation_3_item::switchVisibleSubdomain(int id) d->visible_biteset[i][j] = d->visible_subdomain[id]; } +bool Scene_triangulation_3_item::isVisibleSubdomain(int id) const +{ + return d->visible_subdomain[id]; +} + void Scene_triangulation_3_item::computeIntersection() { for(auto v : CGAL::QGLViewer::QGLViewerPool()) diff --git a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h index 6098288b31b0..6ca88cdca070 100644 --- a/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_triangulation_3_item.h @@ -142,7 +142,9 @@ using namespace CGAL::Three; QColor get_histogram_color(const double v) const; + void resetVisibleSubdomain(); void switchVisibleSubdomain(int); + bool isVisibleSubdomain(int) const; void itemAboutToBeDestroyed(Scene_item *) Q_DECL_OVERRIDE; From a72ccf2089be07f42913514d6267c5f32f413d0b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Sep 2023 15:04:35 +0200 Subject: [PATCH 426/943] Fix CMake error on Windows https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-6.0-Ic-73/Installation/TestReport_Christo_MSVC-2022-Preview-Release.gz ``` CMake Error at cmake/modules/CGAL_SetupGMP.cmake:73 (target_link_libraries): The plain signature for target_link_libraries has already been used with the target "test_gmp_mpfr_dll". All uses of target_link_libraries with a target must be either all-keyword or all-plain. The uses of the plain signature are here: * test/Installation/CMakeLists.txt:54 (target_link_libraries) Call Stack (most recent call first): test/Installation/CMakeLists.txt:55 (use_CGAL_GMP_support) ``` --- Installation/test/Installation/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index db725c17645f..cf090c2d39ad 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -49,9 +49,9 @@ endif() if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL Windows) add_executable(display_dll_version_info display_dll_version_info.cpp) - target_link_libraries(display_dll_version_info version) + target_link_libraries(display_dll_version_info PRIVATE version) add_executable(test_gmp_mpfr_dll test_gmp_mpfr_dll.cpp) - target_link_libraries(test_gmp_mpfr_dll version) + target_link_libraries(test_gmp_mpfr_dll PRIVATE version) use_CGAL_GMP_support(test_gmp_mpfr_dll) CGAL_add_test(test_gmp_mpfr_dll) add_to_cached_list( CGAL_EXECUTABLE_TARGETS test_gmp_mpfr_dll ) From f324943fba613e48477f4fbc84afe07ec5e1f8f2 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Thu, 28 Sep 2023 17:16:03 +0200 Subject: [PATCH 427/943] Added item in dropdown for selected edges + Fixed logic tautology when selecting edges before mesh --- .../demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index c17f4879f1dc..7c5d37c8f9ff 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -368,9 +368,9 @@ std::optional Mesh_3_plugin::get_items_or_return_error_string() const { auto poly_items_ptr = std::get_if(&items.value()); auto image_items_ptr = std::get_if(&items.value()); - if(poly_items_ptr && poly_items_ptr == nullptr) + if(poly_items_ptr != nullptr) poly_items_ptr->polylines_item = polylines_item; - else if(image_items_ptr && image_items_ptr == nullptr) + else if(image_items_ptr != nullptr ) image_items_ptr->polylines_item = polylines_item; } @@ -663,6 +663,8 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, ui.protectEdges->addItem(boundary_only.first, v(boundary_only.second)); } else ui.protectEdges->addItem(sharp_edges.first, v(sharp_edges.second)); + if (polylines_item != nullptr) + ui.protectEdges->addItem(input_polylines.first, v(input_polylines.second)); } else if (items->index() == IMAGE_MESH_ITEMS) { if (polylines_item != nullptr) { ui.protectEdges->addItem(input_polylines.first, QVariant::fromValue(input_polylines.second)); @@ -729,6 +731,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, const auto pe_flags = ui.protectEdges->currentData().value(); protect_borders = ui.protect->isChecked() && pe_flags.testFlag(BORDERS); protect_features = ui.protect->isChecked() && pe_flags.testFlag(FEATURES); + const bool protect_polylines = ui.protect->isChecked() && polylines_item != nullptr; const bool detect_connected_components = ui.detectComponents->isChecked(); const int manifold = (ui.manifoldCheckBox->isChecked() ? 1 : 0) + @@ -811,7 +814,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, { thread = cgal_code_mesh_3( polyhedrons, - (polylines_item == nullptr) ? plc : polylines_item->polylines, + protect_polylines ? polylines_item->polylines : plc, bounding_polyhedron, item_name, angle, From 685caf955d43580cdaba25fd1c35ca455f1d5626 Mon Sep 17 00:00:00 2001 From: ange-clement Date: Fri, 29 Sep 2023 10:54:53 +0200 Subject: [PATCH 428/943] Renamed variable for clarity --- .../demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index 7c5d37c8f9ff..a146afb007a0 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -778,7 +778,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, sm_items.removeAll(make_not_null(bounding_sm_item)); } - Scene_polylines_item::Polylines_container plc; + Scene_polylines_item::Polylines_container polylines_empty_container; SMesh* bounding_polyhedron = (bounding_sm_item == nullptr) ? nullptr : bounding_sm_item->polyhedron(); @@ -814,7 +814,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, { thread = cgal_code_mesh_3( polyhedrons, - protect_polylines ? polylines_item->polylines : plc, + protect_polylines ? polylines_item->polylines : polylines_empty_container, bounding_polyhedron, item_name, angle, @@ -881,11 +881,11 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, ? image_item->image_weights() : nullptr; - Scene_polylines_item::Polylines_container plc; + Scene_polylines_item::Polylines_container polylines_empty_container; thread = cgal_code_mesh_3( pImage, - (img_polylines_item == nullptr) ? plc : img_polylines_item->polylines, + (img_polylines_item == nullptr) ? polylines_empty_container : img_polylines_item->polylines, angle, facets_sizing, facets_min_sizing, From 00f167a8357ab5fe72fb22e0a547c5543f8f1d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:02:47 +0200 Subject: [PATCH 429/943] Add benchmarking scripts --- .../benchmark/Alpha_wrap_3/CMakeLists.txt | 15 + .../compute_performance_benchmark_data.py | 61 ++++ .../generate_performance_benchmark_charts.py | 156 ++++++++++ .../Performance/performance_benchmark.cpp | 65 +++++ .../Quality/compute_quality_benchmark_data.py | 54 ++++ .../Alpha_wrap_3/Quality/distance_utils.h | 151 ++++++++++ .../generate_quality_benchmark_charts.py | 182 ++++++++++++ .../Quality/quality_benchmark.cpp | 271 ++++++++++++++++++ .../compute_robustness_benchmark_data.py | 96 +++++++ .../generate_robustness_benchmark_charts.py | 154 ++++++++++ .../Robustness/robustness_benchmark.cpp | 106 +++++++ .../benchmark/Alpha_wrap_3/benchmarking.sh | 86 ++++++ .../CGAL/Alpha_wrap_3/internal/validation.h} | 0 .../test_AW3_cavity_initializations.cpp | 2 +- .../Alpha_wrap_3/test_AW3_manifoldness.cpp | 2 +- .../Alpha_wrap_3/test_AW3_multiple_calls.cpp | 2 +- .../Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp | 2 +- 17 files changed, 1401 insertions(+), 4 deletions(-) create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/CMakeLists.txt create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/performance_benchmark.cpp create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/distance_utils.h create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/quality_benchmark.cpp create mode 100755 Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/compute_robustness_benchmark_data.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/generate_robustness_benchmark_charts.py create mode 100644 Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/robustness_benchmark.cpp create mode 100755 Alpha_wrap_3/benchmark/Alpha_wrap_3/benchmarking.sh rename Alpha_wrap_3/{test/Alpha_wrap_3/alpha_wrap_validation.h => include/CGAL/Alpha_wrap_3/internal/validation.h} (100%) diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/CMakeLists.txt b/Alpha_wrap_3/benchmark/Alpha_wrap_3/CMakeLists.txt new file mode 100644 index 000000000000..a9aa0d1d63cb --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/CMakeLists.txt @@ -0,0 +1,15 @@ +# Created by the script cgal_create_cmake_script +# This is the CMake script for compiling a CGAL application. + +cmake_minimum_required(VERSION 3.1...3.20) +project(Alpha_wrap_3_Benchmark) + +find_package(CGAL REQUIRED) + +include_directories (BEFORE ../../include ./Quality ./Robustness) # AW3 includes +include_directories (BEFORE ../../../CGAL-Patches/include) + +# create a target per cppfile +create_single_source_cgal_program("Performance/performance_benchmark.cpp") +create_single_source_cgal_program("Quality/quality_benchmark.cpp") +create_single_source_cgal_program("Robustness/robustness_benchmark.cpp") diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py new file mode 100644 index 000000000000..86c57d351465 --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py @@ -0,0 +1,61 @@ +# Copyright (c) 2019-2023 Google LLC (USA). +# All rights reserved. +# +# This file is part of CGAL (www.cgal.org). +# +# $URL$ +# $Id$ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +# Author(s) : Pierre Alliez +# Michael Hemmer +# Cedric Portaneri +# +#!/usr/bin/python + +import os, sys, subprocess, datetime, time, getopt + +def compute_performance_benchmark_data(execname, filename, alpha): + + output = "" + cmd = ("/usr/bin/time", "-v", + execname, "-i", + filename, "-a", alpha) + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + start_new_session=True) + + outs, errs = proc.communicate() + output = outs.decode("utf-8") + errs.decode("utf-8") + + for output_line in output.split("\n"): + if "User time (seconds): " in output_line: + print(output_line[len("User time (seconds): "):]) + continue + if "Maximum resident set size (kbytes): " in output_line: + print(output_line[len("Maximum resident set size (kbytes): "):]) + continue + +def main(argv): + execname="" + filename="" + alpha="" + try: + opts, args = getopt.getopt(sys.argv[1:], 'e:i:a:') + except getopt.GetoptError: + sys.exit(2) + for opt, arg in opts: + if opt == "-e": + execname = arg + elif opt == "-i": + filename = arg + elif opt == "-a": + alpha = arg + + compute_performance_benchmark_data(execname, filename, alpha) + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py new file mode 100644 index 000000000000..445b69232778 --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py @@ -0,0 +1,156 @@ +# Copyright (c) 2019-2023 Google LLC (USA). +# All rights reserved. +# +# This file is part of CGAL (www.cgal.org). +# +# $URL$ +# $Id$ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +# Author(s) : Pierre Alliez +# Michael Hemmer +# Cedric Portaneri +# +#!/usr/bin/python + +import os, sys, subprocess, datetime, time, signal, getopt +import numpy as np +import matplotlib.pyplot as plt + +def main(argv): + + inputdir="" + outputdir="" + commit_hash="" + alpha="" + do_diff=False + diffdir="" + diff_hash="" + try: + opts, args = getopt.getopt(sys.argv[1:], 'i:a:o:c:d:p:') + except getopt.GetoptError: + sys.exit(2) + for opt, arg in opts: + if opt == "-i": + inputdir = arg + elif opt == "-a": + alpha = arg + elif opt == "-o": + outputdir = arg + elif opt == "-c": + commit_hash = arg + elif opt == "-d": + diff_hash = arg + do_diff = True + elif opt == "-p": + diffdir = arg + + all_metric = { + "Time_(second)" : {}, + "Memory_Peak_(kbytes)" : {}} + num_input = 0 + for filename in os.listdir(inputdir) : + new_path = os.path.join(inputdir,filename) + new_file = open(new_path) + is_empty_new = os.path.getsize(new_path) <= 1 + if do_diff : + old_path = os.path.join(diffdir,filename) + old_file = open(old_path) + is_empty_old = os.path.getsize(old_path) <= 1 + for key in all_metric: + if is_empty_new or is_empty_old : + new_val = 0. + old_val = 0. + else : + new_val = float(new_file.readline().rstrip('\n')) + old_val = float(old_file.readline().rstrip('\n')) + mesh_id = str(filename.split('.')[0]) + all_metric[key][mesh_id] = [new_val, old_val] + else : + for key in all_metric: + if is_empty_new : + new_val = 0. + else : + new_val = float(new_file.readline().rstrip('\n')) + mesh_id = str(filename.split('.')[0]) + all_metric[key][mesh_id] = [new_val, new_val] + num_input = num_input+1 + + # update .pdf chart + date_now = datetime.datetime.now() + date_for_filename = str(date_now.year) +"_"+ str(date_now.month) +"_"+ str(date_now.day) +"_"+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn" + for key in all_metric: + goal = 0 + num_el = range(len(all_metric[key])) + avg_diff_to_goal = 0. + avg = 0. + x1 = [] + x2 = [] + for value in all_metric[key].values() : + avg += value[0] + diff_to_goal = abs(value[1]-goal) - abs(value[0]-goal) + avg_diff_to_goal += diff_to_goal + x1.append(value[0]) + x2.append(value[1]) + avg_diff_to_goal /= float(len(all_metric[key])) + avg /= float(len(all_metric[key])) + + plt.figure(figsize=(8,8)) + if do_diff : + plt.hist(x2, bins=100, color='tab:green', alpha=0.5) + plt.hist(x1, bins=100, color='tab:blue', alpha=0.5) + plt.vlines(x = goal, ymin=plt.ylim()[0], ymax=plt.ylim()[1], linestyles='dashed') + + title = "" + if do_diff : + title += "Diff between " + commit_hash + " and " + diff_hash + " on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha + else : + title += "Benchmarking on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha + + avg_str = str(format(abs(avg), '.2f')) + if key == "Time_(second)" : + title += "\nIn average we spend " + avg_str + " seconds" + else : + title += "\nIn average we use up to " + avg_str + " kbytes" + + if do_diff and avg_diff_to_goal == 0. : + title += "\nNo change between the two commits" + elif do_diff : + avg_diff_str = str(format(abs(avg_diff_to_goal), '.2f')) + if key == "Time_(second)" : + if avg_diff_to_goal < 0 : + title += "\nIn average we get slower by " + else : + title += "\nIn average we get faster " + title += avg_diff_str + " seconds" + else : + if avg_diff_to_goal < 0 : + title += "\nIn average we use " + avg_diff_str + " more" + else : + title += "\nIn average we use " + avg_diff_str + " less" + title += " kbytes" + + plt.title(title, fontsize=15) + plt.xlabel(key.replace("_"," "), fontsize=14) + plt.ylabel("# of meshes", fontsize=14) + plt.tick_params(axis="x", labelsize=9) + plt.tick_params(axis="y", labelsize=9) + + chart_filename = "" + if do_diff : + chart_filename += "diff_"+commit_hash+"_"+diff_hash+"_"+key+"_"+date_for_filename+".pdf" + else : + chart_filename += "results_"+commit_hash+"_"+key+"_"+date_for_filename+".pdf" + chart_path = os.path.join(outputdir+"/charts",chart_filename) + if os.path.isfile(chart_path) : + os.remove(chart_path) + plt.savefig(chart_path, bbox_inches="tight") + plt.close() + + print("pdf updated") + + sys.exit() + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/performance_benchmark.cpp b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/performance_benchmark.cpp new file mode 100644 index 000000000000..207b4704635a --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/performance_benchmark.cpp @@ -0,0 +1,65 @@ +#include +#include + +#include + +#include + +#include +#include +#include +#include + +using K = CGAL::Exact_predicates_inexact_constructions_kernel; +using Point_3 = K::Point_3; +using Vector_3 = K::Vector_3; + +using Mesh = CGAL::Surface_mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int argc, char** argv) +{ + const int argc_check = argc - 1; + const char* entry_name_ptr = nullptr; + double relative_alpha_ratio = 20., relative_offset_ratio = 600.; + + for(int i=1; i points; + std::vector > faces; + if(!CGAL::IO::read_polygon_soup(entry_name_ptr, points, faces) || faces.empty()) + { + std::cerr << "Error: Invalid input data." << std::endl; + return EXIT_FAILURE; + } + + CGAL::Bbox_3 bbox; + for(const Point_3& p : points) + bbox += p.bbox(); + + const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) + + CGAL::square(bbox.ymax() - bbox.ymin()) + + CGAL::square(bbox.zmax() - bbox.zmin())); + const double alpha = diag_length / relative_alpha_ratio; + const double offset = diag_length / relative_offset_ratio; + + Mesh wrap; + CGAL::alpha_wrap_3(points, faces, alpha, offset, wrap); + + return EXIT_SUCCESS; +} diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py new file mode 100644 index 000000000000..3b996cb57490 --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py @@ -0,0 +1,54 @@ +# Copyright (c) 2019-2023 Google LLC (USA). +# All rights reserved. +# +# This file is part of CGAL (www.cgal.org). +# +# $URL$ +# $Id$ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +# Author(s) : Pierre Alliez +# Michael Hemmer +# Cedric Portaneri +# +#!/usr/bin/python + +import os, sys, subprocess, datetime, time, getopt + +def compute_quality_benchmark_data(execname, filename, alpha): + + output = "" + cmd = (execname, "-i", + filename, "-a", alpha) + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + start_new_session=True) + + outs, errs = proc.communicate() + output = outs.decode("utf-8") + errs.decode("utf-8") + + print(output) + +def main(argv): + execname="" + filename="" + alpha="" + try: + opts, args = getopt.getopt(sys.argv[1:], 'e:i:a:') + except getopt.GetoptError: + sys.exit(2) + for opt, arg in opts: + if opt == "-e": + execname = arg + elif opt == "-i": + filename = arg + elif opt == "-a": + alpha = arg + + compute_quality_benchmark_data(execname, filename, alpha) + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/distance_utils.h b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/distance_utils.h new file mode 100644 index 000000000000..379573e9c90a --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/distance_utils.h @@ -0,0 +1,151 @@ +// Copyright (c) 2019-2022 Google LLC (USA). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Pierre Alliez +// Michael Hemmer +// Cedric Portaneri + +#ifndef CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_ +#define CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Aw3i { + +enum Distance_metric { HAUSDORFF = 0, MEAN = 1, RMS = 2 }; + +template +inline double approximate_hausdorff_distance(const std::vector& sample_points, + const AABBTree& tree, + Point& hint) +{ + double hdist = 0; + for(const Point& pt : sample_points) + { + hint = tree.closest_point(pt, hint); + auto dist = CGAL::squared_distance(hint, pt); + double d = CGAL::to_double(CGAL::approximate_sqrt(dist)); + if(d > hdist) + hdist = d; + } + + return hdist; +} + +template +inline double approximate_mean_distance(const std::vector& sample_points, + const AABBTree& tree, + Point& hint) +{ + double mdist = 0; + for(const Point& pt : sample_points) + { + hint = tree.closest_point(pt, hint); + auto dist = CGAL::squared_distance(hint, pt); + double d = CGAL::to_double(CGAL::approximate_sqrt(dist)); + mdist += d; + } + + return mdist / sample_points.size(); +} + +template +inline double approximate_rms_distance(const std::vector& sample_points, + const AABBTree& tree, + Point& hint) +{ + double rmsdist = 0; + for(const Point& pt : sample_points) + { + hint = tree.closest_point(pt, hint); + auto dist = CGAL::squared_distance(hint, pt); + rmsdist += CGAL::to_double(dist); + } + + return CGAL::to_double(CGAL::approximate_sqrt(rmsdist / sample_points.size())); +} + +template +inline double approximate_distance(const TriangleMesh& tm1, + const TriangleMesh& tm2, + const Distance_metric& metric) +{ + using GT = typename CGAL::GetGeomTraits::type; + using Point_3 = typename GT::Point_3; + + using Primitive = CGAL::AABB_face_graph_triangle_primitive; + using AABB_traits = CGAL::AABB_traits; + using AABB_tree = CGAL::AABB_tree; + + using CGAL::parameters::choose_parameter; + using CGAL::parameters::get_parameter; + + std::vector original_sample_points; + CGAL::Polygon_mesh_processing::sample_triangle_mesh(tm1, std::back_inserter(original_sample_points), + CGAL::parameters::all_default()); + + std::vector sample_points(std::begin(original_sample_points), + std::end(original_sample_points)); + CGAL::spatial_sort(sample_points.begin(), sample_points.end()); + + AABB_tree tree(faces(tm2).first, faces(tm2).second, tm2); + tree.build(); + + auto vpm_2 = get(CGAL::vertex_point, tm2); + Point_3 hint = get(vpm_2, *vertices(tm2).first); + + if(metric == HAUSDORFF) + return approximate_hausdorff_distance(sample_points, tree, hint); + else if(metric == MEAN) + return approximate_mean_distance(sample_points, tree, hint); + else if(metric == RMS) + return approximate_rms_distance(sample_points, tree, hint); + else + std::cerr << "Metric unknown\n" << std::endl; + + return -1.0; +} + +template +double get_longest_diag_bbox(const TriangleMesh& tm) +{ + CGAL::Bbox_3 bbox = CGAL::Polygon_mesh_processing::bbox(tm); + return std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) + + CGAL::square(bbox.ymax() - bbox.ymin()) + + CGAL::square(bbox.zmax() - bbox.zmin())); +} + +template +inline double approximate_distance_relative_to_bbox(const TriangleMesh& tm1, + const TriangleMesh& tm2, + const Distance_metric& metric) +{ + double longest_diag_length = get_longest_diag_bbox(tm1); + return approximate_distance(tm1, tm2, metric) / longest_diag_length; +} + +template +inline double approximate_distance_relative_to_bbox(const TriangleMesh& tm1, + const TriangleMesh& tm2, + const Distance_metric& metric, + const FT& longest_diag_length) +{ + return approximate_distance(tm1, tm2, metric) / CGAL::to_double(longest_diag_length); +} + +} // namespace Aw3i + +#endif // CGAL_CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_ diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py new file mode 100644 index 000000000000..0df5ed5e0f4e --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py @@ -0,0 +1,182 @@ +# Copyright (c) 2019-2023 Google LLC (USA). +# All rights reserved. +# +# This file is part of CGAL (www.cgal.org). +# +# $URL$ +# $Id$ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +# Author(s) : Pierre Alliez +# Michael Hemmer +# Cedric Portaneri +# +#!/usr/bin/python + +import os, sys, subprocess, datetime, time, signal, getopt +import numpy as np +import matplotlib.pyplot as plt + +def main(argv): + + inputdir="" + outputdir="" + commit_hash="" + alpha="" + do_diff=False + diffdir="" + diff_hash="" + try: + opts, args = getopt.getopt(sys.argv[1:], 'i:a:o:c:d:p:') + except getopt.GetoptError: + sys.exit(2) + for opt, arg in opts: + if opt == "-i": + inputdir = arg + elif opt == "-a": + alpha = arg + elif opt == "-o": + outputdir = arg + elif opt == "-c": + commit_hash = arg + elif opt == "-d": + diff_hash = arg + do_diff = True + elif opt == "-p": + diffdir = arg + + all_metric = { + "Mean_Min_Angle_(degree)" : {}, + "Mean_Max_Angle_(degree)" : {}, + "Mean_Radius_Ratio" : {}, + "Mean_Edge_Ratio" : {}, + "Mean_Aspect_Ratio" : {}, + "Complexity_(#_of_triangle)" : {}, + "#_of_almost_degenerate_triangle" : {}, + "Hausdorff_distance_output_to_input_(%_of_bbox_diag)" : {}} + num_input = 0 + print("inputdir = ", inputdir) + for filename in os.listdir(inputdir) : + new_path = os.path.join(inputdir,filename) + new_file = open(new_path) + if do_diff : + old_path = os.path.join(diffdir,filename) + old_file = open(old_path) + is_empty_old = os.path.getsize(old_path) <= 1 + for key in all_metric : + try : + new_val = float(new_file.readline().rstrip('\n')) + old_val = float(old_file.readline().rstrip('\n')) + mesh_id = str(filename.split('.')[0]) + all_metric[key][mesh_id] = [new_val, old_val] + except ValueError: + pass + else : + for key in all_metric : + try : + new_val = float(new_file.readline().rstrip('\n')) + mesh_id = str(filename.split('.')[0]) + all_metric[key][mesh_id] = [new_val, new_val] + except ValueError: + pass + num_input = num_input+1 + + # update .pdf chart + date_now = datetime.datetime.now() + date_for_filename = str(date_now.year) +"_"+ str(date_now.month) +"_"+ str(date_now.day) +"_"+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn" + for key in all_metric: + goal = 0 + if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)": + goal = 60 + elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" : + goal = 1 + + num_el = range(len(all_metric[key])) + avg_diff_to_goal = 0. + avg = 0. + x1 = [] + x2 = [] + for value in all_metric[key].values() : + avg += value[0] + diff_to_goal = abs(value[1]-goal) - abs(value[0]-goal) + avg_diff_to_goal += diff_to_goal + x1.append(value[0]) + x2.append(value[1]) + avg_diff_to_goal /= float(len(all_metric[key])) + avg /= float(len(all_metric[key])) + + plt.figure(figsize=(8,8)) + if do_diff : + plt.hist(x2, bins=100, color='tab:green', alpha=0.5) + plt.hist(x1, bins=100, color='tab:blue', alpha=0.5) + plt.vlines(x = goal, ymin=plt.ylim()[0], ymax=plt.ylim()[1], linestyles='dashed') + + title = "" + if do_diff : + title += "Diff between " + commit_hash + " and " + diff_hash + " on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha + else : + title += "Benchmarking on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha + + avg_str = str(format(abs(avg), '.2f')) + if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)": + title += "\nIn average we have " + avg_str + "°" + elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" : + title += "\nIn average we have a ratio of " + avg_str + elif key == "Hausdorff_distance_output_to_input_(%_of_bbox_diag)" : + title += "\nIn average we have a distance of " + avg_str + "% of bbox diag" + elif key == "Complexity_(#_of_triangle)" or key == "#_of_almost_degenerate_triangle" : + title += "\nIn average we have " + avg_str + " triangles" + + if do_diff and avg_diff_to_goal == 0. : + title += "\nNo change between the two commits" + elif do_diff : + avg_diff_str = str(format(abs(avg_diff_to_goal), '.2f')) + if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)": + if avg_diff_to_goal < 0 : + title += "\nIn average we loose " + else : + title += "\nIn average we gain " + title += avg_diff_str + "° toward 60°" + elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" : + if avg_diff_to_goal < 0 : + title += "\nIn average we loose " + else : + title += "\nIn average we gain " + title += avg_diff_str + " of ratio toward 1" + elif key == "Hausdorff_distance_output_to_input_(%_of_bbox_diag)" : + if avg_diff_to_goal < 0 : + title += "\nIn average we increase by " + else : + title += "\nIn average we reduce by " + title += avg_diff_str + " the bbox ratio" + elif key == "Complexity_(#_of_triangle)" or key == "#_of_almost_degenerate_triangle" : + if avg_diff_to_goal < 0 : + title += "\nIn average we get " + avg_diff_str + " more" + else : + title += "\nIn average we get " + avg_diff_str + " less" + title += " triangles" + + plt.title(title, fontsize=15) + plt.xlabel(key.replace("_"," "), fontsize=14) + plt.ylabel("# of meshes", fontsize=14) + plt.tick_params(axis="x", labelsize=9) + plt.tick_params(axis="y", labelsize=9) + + chart_filename = "" + if do_diff : + chart_filename += "diff_"+commit_hash+"_"+diff_hash+"_"+key+"_"+date_for_filename+".pdf" + else : + chart_filename += "results_"+commit_hash+"_"+key+"_"+date_for_filename+".pdf" + chart_path = os.path.join(outputdir+"/charts",chart_filename) + if os.path.isfile(chart_path) : + os.remove(chart_path) + plt.savefig(chart_path, bbox_inches="tight") + plt.close() + + print("pdf updated") + + sys.exit() + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/quality_benchmark.cpp b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/quality_benchmark.cpp new file mode 100644 index 000000000000..4565cca641a1 --- /dev/null +++ b/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/quality_benchmark.cpp @@ -0,0 +1,271 @@ +#include + +#include +#include + +#include + +#include + +#include +#include +#include + +using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel; +using Point_3 = Kernel::Point_3; +using Vector_3 = Kernel::Vector_3; +using Triangle_3 = Kernel::Triangle_3; +using FT = Kernel::FT; + +using Mesh = CGAL::Surface_mesh; +using face_descriptor = boost::graph_traits::face_descriptor; + +using Oracle = CGAL::Alpha_wraps_3::internal::Triangle_mesh_oracle; +using Dt = CGAL::Alpha_wraps_3::internal::Alpha_wrap_3::Triangulation; + +namespace PMP = CGAL::Polygon_mesh_processing; + +std::array triangle_angles(const Triangle_3& tr) +{ + FT sq_a = CGAL::squared_distance(tr[0], tr[1]); + FT sq_b = CGAL::squared_distance(tr[1], tr[2]); + FT sq_c = CGAL::squared_distance(tr[2], tr[0]); + + FT two_ab = 2. * CGAL::sqrt(sq_a) * CGAL::sqrt(sq_b); + FT two_bc = 2. * CGAL::sqrt(sq_b) * CGAL::sqrt(sq_c); + FT two_ca = 2. * CGAL::sqrt(sq_c) * CGAL::sqrt(sq_a); + + FT angle_a = (sq_b + sq_c - sq_a) / two_bc; + FT angle_b = (sq_c + sq_a - sq_b) / two_ca; + FT angle_c = (sq_a + sq_b - sq_c) / two_ab; + if(angle_a < -1.) angle_a = -1.; + if(angle_b < -1.) angle_b = -1.; + if(angle_c < -1.) angle_c = -1.; + if(angle_a > 1.) angle_a = 1.; + if(angle_b > 1.) angle_b = 1.; + if(angle_c > 1.) angle_c = 1.; + angle_a = std::acos(angle_a); + angle_b = std::acos(angle_b); + angle_c = std::acos(angle_c); + + return {angle_a, angle_b, angle_c}; +} + +bool is_almost_degenerate(const Triangle_3& tr, + double threshold) +{ + FT sq_area = tr.squared_area(); + return (CGAL::sqrt(CGAL::to_double(sq_area)) < threshold); +} + +auto surface_mesh_face_to_triangle(const face_descriptor fd, + const Mesh& sm) +{ + typename boost::graph_traits::halfedge_descriptor hd = halfedge(fd,sm); + return Triangle_3(sm.point(target(hd,sm)), + sm.point(target(next(hd,sm),sm)), + sm.point(target(next(next(hd,sm),sm),sm))); +} + +double mean_min_angle(const Mesh& mesh) +{ + double mean_min_angle = 0.; + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + std::array angles = triangle_angles(tr); + + FT min_angle = std::min({angles[0], angles[1], angles[2]}); + + min_angle = min_angle * (180.0 / CGAL_PI); + mean_min_angle += min_angle; + } + + mean_min_angle /= static_cast(mesh.number_of_faces()); + return mean_min_angle; +} + +double mean_max_angle(const Mesh& mesh) +{ + double mean_max_angle = 0.; + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + std::array angles = triangle_angles(tr); + + FT max_angle = std::max({angles[0], angles[1], angles[2]}); + + max_angle = max_angle * (180.0 / CGAL_PI); + mean_max_angle += max_angle; + } + + mean_max_angle /= static_cast(mesh.number_of_faces()); + return mean_max_angle; +} + +double mean_radius_ratio(const Mesh& mesh, + double degenerate_threshold) +{ + double mean_radius_ratio = 0.; + size_t num_almost_degenerate_tri = 0; + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + if(is_almost_degenerate(tr, degenerate_threshold)) + { + ++num_almost_degenerate_tri; + continue; + } + + FT circumsphere_radius = std::sqrt(CGAL::squared_radius(tr[0], tr[1], tr[2])); + + FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1])); + FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2])); + FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0])); + FT s = 0.5 * (a + b + c); + FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s); + FT radius_ratio = circumsphere_radius / inscribed_radius; + radius_ratio /= 2.; // normalized + mean_radius_ratio += radius_ratio; + } + + mean_radius_ratio /= static_cast(mesh.number_of_faces() - num_almost_degenerate_tri); + return mean_radius_ratio; +} + +double mean_edge_ratio(const Mesh& mesh, + double degenerate_threshold) +{ + double mean_edge_ratio = 0.; + size_t num_almost_degenerate_tri = 0; + + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + if(is_almost_degenerate(tr, degenerate_threshold)) + { + ++num_almost_degenerate_tri; + continue; + } + + FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1])); + FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2])); + FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0])); + FT min_edge = std::min({a, b, c}); + FT max_edge = std::max({a, b, c}); + FT edge_ratio = max_edge / min_edge; + + mean_edge_ratio += edge_ratio; + } + + mean_edge_ratio /= static_cast(mesh.number_of_faces() - num_almost_degenerate_tri); + return mean_edge_ratio; +} + +double mean_aspect_ratio(const Mesh& mesh, + double degenerate_threshold) +{ + double mean_aspect_ratio = 0.; + size_t num_almost_degenerate_tri = 0; + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + if(is_almost_degenerate(tr, degenerate_threshold)) + { + ++num_almost_degenerate_tri; + continue; + } + + FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1])); + FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2])); + FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0])); + FT s = 0.5 * (a + b + c); + FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s); + FT max_edge = std::max({a, b, c}); + FT aspect_ratio = max_edge / inscribed_radius; + aspect_ratio /= (2. * std::sqrt(3.)); // normalized + mean_aspect_ratio += aspect_ratio; + } + + mean_aspect_ratio /= static_cast(mesh.number_of_faces() - num_almost_degenerate_tri); + return mean_aspect_ratio; +} + +size_t num_almost_degenerate_tri(const Mesh& mesh, + double degenerate_threshold) +{ + size_t num_almost_degenerate_tri = 0; + for(const face_descriptor f : faces(mesh)) + { + const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); + if(is_almost_degenerate(tr, degenerate_threshold)) + { + ++num_almost_degenerate_tri; + } + } + return num_almost_degenerate_tri; +} + +int main(int argc, char** argv) +{ + const int argc_check = argc - 1; + char *entry_name_ptr = nullptr; + double relative_alpha_ratio = 20.; + double relative_offset_ratio = 600.; + + for(int i=1; i +#include + +#include +#include + +#include + +using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel; +using Point_3 = Kernel::Point_3; +using Mesh = CGAL::Surface_mesh; + +namespace CGAL { +namespace Alpha_wraps_3 { +namespace internal { +namespace { + +enum Robustness_benchmark_exit_code +{ + // Success + VALID_SOLID_OUTPUT = 0, + + // Failure + OUTPUT_IS_NOT_TRIANGLE_MESH = 1, + OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD = 2, + OUTPUT_HAS_BORDERS = 3, + OUTPUT_HAS_DEGENERATED_FACES = 4, + OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS = 5, + OUTPUT_DOES_NOT_BOUND_VOLUME = 6, + OUTPUT_DOES_NOT_CONTAIN_INPUT = 7, + OUTPUT_DISTANCE_IS_TOO_LARGE = 8, +}; + +} // namespace +} // namespace internal +} // namespace Alpha_wraps_3 +} // namespace CGAL + +namespace PMP = CGAL::Polygon_mesh_processing; +namespace AW3i = CGAL::Alpha_wraps_3::internal; + +int main(int argc, char** argv) +{ + const int argc_check = argc - 1; + char* entry_name_ptr = nullptr; + double relative_alpha_ratio = 20.; + double relative_offset_ratio = 600.; + + for(int i=1; i $2/Robustness/results/$5/$filename.log + + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py \ + -e $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/build-release/performance_benchmark -i $6 -a $3 \ + > $2/Performance/results/$5/$filename.log + + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py \ + -e $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/build-release/quality_benchmark -i $6 -a $3 \ + > $2/Quality/results/$5/$filename.log +} +export -f compute_benchmark_data + +# $1: directory containing the alpha wrap project +# $2: directory containing the input data folder +# $3: directory containing the output results +# $4: alpha value +# $5: timeout value for robustness benchmark in seconds +# $6: number of virtual thread used +# $7: hash of the latest commit +# $8: hash of a commit to perform the diff with latest +cd $1 + +mkdir -p $3/Robustness/results/$7 +mkdir -p $3/Performance/results/$7 +mkdir -p $3/Quality/results/$7 +mkdir -p $3/Robustness/charts_data +mkdir -p $3/Performance/charts_data +mkdir -p $3/Quality/charts_data +mkdir -p $3/Robustness/charts +mkdir -p $3/Performance/charts +mkdir -p $3/Quality/charts +mkdir -p $3/Robustness/log +mkdir -p $3/Performance/log +mkdir -p $3/Quality/log +mkdir -p $3/charts + +find $2 -mindepth 1 | parallel -j$6 compute_benchmark_data $1 $3 $4 $5 $7 ::: + +python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/generate_robustness_benchmark_charts.py -i $3/Robustness/results/$7 -o $3/Robustness -a $4 -c $7 + +if [ -z "$8" ]; then + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py -i $3/Performance/results/$7 -o $3/Performance -a $4 -c $7; +else + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py -i $3/Performance/results/$7 -o $3/Performance -a $4 -c $7 -p $3/Performance/results/$8 -d $8; +fi + +if [ -z "$8" ]; then + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py -i $3/Quality/results/$7 -o $3/Quality -a $4 -c $7; +else + python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py -i $3/Quality/results/$7 -o $3/Quality -a $4 -c $7 -p $3/Quality/results/$8 -d $8; +fi + +charts_path="$(ls "$3/Robustness/charts"/* -dArt | tail -n 1) $(ls "$3/Performance/charts"/* -dArt | tail -n 2) $(ls "$3/Quality/charts"/* -dArt | tail -n 9)" + +pdfjam --nup 2x6 $charts_path --outfile $3/charts/results_$7_$8_alpha_$4_$(date '+%Y-%m-%d_%H:%M:%S').pdf diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/alpha_wrap_validation.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/validation.h similarity index 100% rename from Alpha_wrap_3/test/Alpha_wrap_3/alpha_wrap_validation.h rename to Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/validation.h diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp index d7567bab205b..1e37919756ab 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_cavity_initializations.cpp @@ -6,7 +6,7 @@ #include #include -#include "alpha_wrap_validation.h" +#include #include diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp index 638431e30567..189cc73fa2dc 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_manifoldness.cpp @@ -5,7 +5,7 @@ //#define CGAL_AW3_DEBUG_QUEUE #include -#include "alpha_wrap_validation.h" +#include #include #include diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp index e2abc6f1f12f..a7abdf6674e5 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_AW3_multiple_calls.cpp @@ -4,7 +4,7 @@ #include #include -#include "alpha_wrap_validation.h" +#include #include #include diff --git a/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp b/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp index 470d48e40d44..e7a362fc7098 100644 --- a/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp +++ b/Alpha_wrap_3/test/Alpha_wrap_3/test_alpha_wrap_3_mesh.cpp @@ -6,7 +6,7 @@ //#define CGAL_AW3_DEBUG_QUEUE #include -#include "alpha_wrap_validation.h" +#include #include #include From 53c89475a379a29e6516b0d93746653c4b255e28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:12:17 +0200 Subject: [PATCH 430/943] Rename a variable --- Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp index ffcedc7f1cbb..4e96d6c1116c 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp @@ -105,8 +105,8 @@ int main(int argc, char** argv) CGAL::Alpha_wraps_3::internal::Alpha_wrap_3 aw3(oracle); - Mesh output_mesh; - aw3(alpha, offset, output_mesh); + Mesh wrap; + aw3(alpha, offset, wrap); t.stop(); std::cout << "Took " << t.time() << std::endl; @@ -123,7 +123,7 @@ int main(int argc, char** argv) std::string output_name = ts_name + "_" + ss_name + "_" + ps_name + "_" + std::to_string(static_cast(relative_alpha)) + "_" + std::to_string(static_cast(relative_offset)) + ".off"; std::cout << "Writing to " << output_name << std::endl; - CGAL::IO::write_polygon_mesh(output_name, output_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } From e3854f68e3269da5d3ecb472c0f1a69f5f78999c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:12:31 +0200 Subject: [PATCH 431/943] Expose useful typedefs from Alpha_wrapper_3 --- .../include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 3ee6061d0d89..3aaabefd94fc 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -124,8 +124,13 @@ class Alpha_wrap_3 using Default_Tds = CGAL::Triangulation_data_structure_3; using Default_Triangulation = CGAL::Delaunay_triangulation_3; +public: using Triangulation = typename Default::Get::type; + // Use the geom traits from the triangulation, and trust the (advanced) user that provided it + using Geom_traits = typename Triangulation::Geom_traits; + +private: using Cell_handle = typename Triangulation::Cell_handle; using Facet = typename Triangulation::Facet; using Vertex_handle = typename Triangulation::Vertex_handle; @@ -134,9 +139,6 @@ class Alpha_wrap_3 using Gate = internal::Gate; using Alpha_PQ = Modifiable_priority_queue, CGAL_BOOST_PAIRING_HEAP>; - // Use the geom traits from the triangulation, and trust the (advanced) user that provided it - using Geom_traits = typename Triangulation::Geom_traits; - using FT = typename Geom_traits::FT; using Point_3 = typename Geom_traits::Point_3; using Vector_3 = typename Geom_traits::Vector_3; From cfae913d77ec5e346aed9e5d3c90e3d591dea4ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:13:31 +0200 Subject: [PATCH 432/943] Complete the sort functor in AW3's main queue --- .../internal/gate_priority_queue.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h index 5e14a4d08ea1..a9bdd7e0491b 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h @@ -68,6 +68,24 @@ struct Less_gate template bool operator()(const Gate& a, const Gate& b) const { + // If one is artificial and the other is not, give priority to the artificial facet + // + // The artificial facet are given highest priority because they need to be treated + // regardless of their circumradius. Treating them first allow the part that depends + // on alpha to be treated uniformly in a way: whatever the alpha, we'll do the same + // first treatmen + if(a.is_artificial_facet() != b.is_artificial_facet()) + return a.is_artificial_facet(); + + if(a.priority() == b.priority()) + { + // arbitrary, the sole purpose is to make it a total order for determinism + if(a.facet().first->time_stamp() == b.facet().first->time_stamp()) + return a.facet().second < b.facet().second; + + return a.facet().first->time_stamp() < b.facet().first->time_stamp(); + } + return a.priority() > b.priority(); } }; From 7e2386f97e9d935bd61d3120736832eca3200f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:14:42 +0200 Subject: [PATCH 433/943] Use the real circumradius value to sort the facets Meaning, use the value that we compare against alpha, and not simply the radius of the smallest circumscribing ball. This strongly changes the order of the queue and thus thus results are very different, but still the same (same guarantees, same element quality, only a little bit more elements, etc.) Also a massive, ~35% speed-up, that needs to be investigated. --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 11 +-- .../Alpha_wrap_3/internal/geometry_utils.h | 74 +++++++++++++++++++ 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 3aaabefd94fc..14ad83cdbd36 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1131,17 +1131,16 @@ class Alpha_wrap_3 if(status == IRRELEVANT) return false; + const FT sqr = smallest_squared_radius_3(f, m_tr); + m_queue.resize_and_push(Gate(f, sqr, (status == ARTIFICIAL_FACET))); + +#ifdef CGAL_AW3_DEBUG_QUEUE const Cell_handle ch = f.first; const int s = f.second; const Point_3& p0 = m_tr.point(ch, Triangulation::vertex_triple_index(s, 0)); const Point_3& p1 = m_tr.point(ch, Triangulation::vertex_triple_index(s, 1)); const Point_3& p2 = m_tr.point(ch, Triangulation::vertex_triple_index(s, 2)); - // @todo should prob be the real value that we compare to alpha instead of squared_radius - const FT sqr = geom_traits().compute_squared_radius_3_object()(p0, p1, p2); - m_queue.resize_and_push(Gate(f, sqr, (status == ARTIFICIAL_FACET))); - -#ifdef CGAL_AW3_DEBUG_QUEUE static int gid = 0; std::cout << "Queue insertion #" << gid++ << "\n" << " ch = " << &*ch << " (" << m_tr.is_infinite(ch) << ") " << "\n" @@ -1151,6 +1150,8 @@ class Alpha_wrap_3 std::cout << " Artificiality: " << (status == ARTIFICIAL_FACET) << std::endl; #endif + CGAL_assertion(status == ARTIFICIAL_FACET || sqr >= m_sq_alpha); + return true; } diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h index 7d66cfd19f41..f39a47012862 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/geometry_utils.h @@ -154,6 +154,80 @@ less_squared_radius_of_min_empty_sphere(typename Tr::Geom_traits::FT sq_alpha, } } +template +bool +smallest_squared_radius_3(const typename Tr::Facet& fh, + const Tr& tr) +{ + using Cell_handle = typename Tr::Cell_handle; + using Point = typename Tr::Point; + using FT = typename Tr::Geom_traits::FT; + + using CK = typename Tr::Geom_traits; + using Exact_kernel = typename Exact_kernel_selector::Exact_kernel; + using Approximate_kernel = Simple_cartesian; + using C2A = Cartesian_converter; + using C2E = typename Exact_kernel_selector::C2E; + + using Orientation_of_circumcenter = Filtered_predicate, + Orientation_of_circumcenter, + C2E, C2A>; + + Orientation_of_circumcenter orientation_of_circumcenter; + + auto squared_radius = tr.geom_traits().compute_squared_radius_3_object(); + + const Cell_handle c = fh.first; + const int ic = fh.second; + const Cell_handle n = c->neighbor(ic); + + const Point& p1 = tr.point(c, Tr::vertex_triple_index(ic,0)); + const Point& p2 = tr.point(c, Tr::vertex_triple_index(ic,1)); + const Point& p3 = tr.point(c, Tr::vertex_triple_index(ic,2)); + + // This is not actually possible in the context of alpha wrapping, but keeping it for genericity + // and because it does not cost anything. + if(tr.is_infinite(n)) + { + Orientation ori = orientation_of_circumcenter(p1, p2, p3, + tr.point(c, 0), tr.point(c, 1), + tr.point(c, 2), tr.point(c, 3)); + if(ori == POSITIVE) + return squared_radius(p1, p2, p3); + else + return squared_radius(tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)); + } + + if(tr.is_infinite(c)) + { + Orientation ori = orientation_of_circumcenter(p1, p2, p3, + tr.point(n, 0), tr.point(n, 1), + tr.point(n, 2), tr.point(n, 3)); + if(ori == NEGATIVE) + return squared_radius(p1, p2, p3); + else + return squared_radius(tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3)); + } + + // both c and n are finite + if(orientation_of_circumcenter(p1, p2, p3, + tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)) != + orientation_of_circumcenter(p1, p2, p3, + tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3))) + { + // Dual crosses the face + return squared_radius(p1, p2, p3); + } + else + { + // Dual does not crosses the face + FT cr = squared_radius(tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)); + FT cnr = squared_radius(tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3)); + return (CGAL::min)(cr, cnr); + } +} + + } // namespace internal } // namespace Alpha_wraps_3 } // namespace CGAL From be42e0fbe887abff709b4c18d5070b5261ad71ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:19:39 +0200 Subject: [PATCH 434/943] Minor debug code cleaning --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 14ad83cdbd36..a7130c2a3774 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1228,8 +1228,10 @@ class Alpha_wrap_3 CGAL_precondition(!m_tr.is_infinite(f)); const Cell_handle ch = f.first; - const int id = f.second; - const Cell_handle neighbor = ch->neighbor(id); + const int s = f.second; + CGAL_precondition(ch->is_outside()); + + const Cell_handle neighbor = ch->neighbor(s); #ifdef CGAL_AW3_DEBUG_QUEUE static int fid = 0; @@ -1237,10 +1239,11 @@ class Alpha_wrap_3 std::cout << m_queue.size() << " facets in the queue" << std::endl; std::cout << "Face " << fid++ << "\n" << "c = " << &*ch << " (" << m_tr.is_infinite(ch) << "), n = " << &*neighbor << " (" << m_tr.is_infinite(neighbor) << ")" << "\n" - << m_tr.point(ch, Triangulation::vertex_triple_index(id, 0)) << "\n" - << m_tr.point(ch, Triangulation::vertex_triple_index(id, 1)) << "\n" - << m_tr.point(ch, Triangulation::vertex_triple_index(id, 2)) << std::endl; - std::cout << "Priority: " << gate.priority() << std::endl; + << m_tr.point(ch, Triangulation::vertex_triple_index(s, 0)) << "\n" + << m_tr.point(ch, Triangulation::vertex_triple_index(s, 1)) << "\n" + << m_tr.point(ch, Triangulation::vertex_triple_index(s, 2)) << std::endl; + std::cout << "Artificiality: " << gate.is_artificial_facet() << std::endl; + std::cout << "Priority: " << gate.priority() << " (sq alpha: " << m_sq_alpha << ")" << std::endl; #endif visitor.before_facet_treatment(*this, gate); @@ -1255,9 +1258,9 @@ class Alpha_wrap_3 std::string face_name = "results/steps/face_" + std::to_string(static_cast(i++)) + ".xyz"; std::ofstream face_out(face_name); face_out.precision(17); - face_out << "3\n" << m_tr.point(ch, Triangulation::vertex_triple_index(id, 0)) << "\n" - << m_tr.point(ch, Triangulation::vertex_triple_index(id, 1)) << "\n" - << m_tr.point(ch, Triangulation::vertex_triple_index(id, 2)) << std::endl; + face_out << "3\n" << m_tr.point(ch, Triangulation::vertex_triple_index(s, 0)) << "\n" + << m_tr.point(ch, Triangulation::vertex_triple_index(s, 1)) << "\n" + << m_tr.point(ch, Triangulation::vertex_triple_index(s, 2)) << std::endl; face_out.close(); #endif From 8ccce4c536ea7c3e04f1a15d34e6ca362ae84bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 29 Sep 2023 11:19:52 +0200 Subject: [PATCH 435/943] Avoid one useless facet check This doesn't bring any speed-up because it was a very fast exit in push_facet(): the neighbor was necessarily outside (since we come from it), and we are done. --- .../include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index a7130c2a3774..2174363240b6 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -1355,15 +1355,16 @@ class Alpha_wrap_3 } } } - else + else // no need for a Steiner point, carve through and continue { // tag neighbor as OUTSIDE neighbor->is_outside() = true; // for each finite facet of neighbor, push it to the queue - for(int i=0; i<4; ++i) + const int mi = m_tr.mirror_index(ch, s); + for(int i=1; i<4; ++i) { - const Facet neighbor_f = std::make_pair(neighbor, i); + const Facet neighbor_f = std::make_pair(neighbor, (mi+i)&3); push_facet(neighbor_f); } } From 05e11d381f952251538a134bd114871b1eb90173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 9 Aug 2021 17:32:43 +0200 Subject: [PATCH 436/943] add experimental function to refine a mesh along an isocurve --- .../internal/refine_mesh_at_isolevel.h | 129 ++++++++++++++++++ .../Polygon_mesh_processing/CMakeLists.txt | 5 + .../test_geodesic_isolevel_refinement.cmd | 1 + .../test_geodesic_isolevel_refinement.cpp | 63 +++++++++ 4 files changed, 198 insertions(+) create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h new file mode 100644 index 000000000000..f4b0f7cc6497 --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h @@ -0,0 +1,129 @@ +// Copyright (c) 2021 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sebastien Loriot + +#ifndef CGAL_POLYGON_MESH_PROCESSING_CLIP_H +#define CGAL_POLYGON_MESH_PROCESSING_CLIP_H + +#include + +#include + +namespace CGAL { +namespace Polygon_mesh_processing { +namespace experimental { + + +template +void refine_mesh_at_isolevel(PolygonMesh& pm, + ValueMap value_map, + typename boost::property_traits::value_type isovalue, + const NamedParameters& np) +{ + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef typename boost::graph_traits::edge_descriptor edge_descriptor; + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::face_descriptor face_descriptor; + + using parameters::choose_parameter; + using parameters::get_parameter; + using parameters::is_default_parameter; + + typedef Static_boolean_property_map Default_ECM; + typedef typename internal_np::Lookup_named_param_def::type ECM; + typedef typename GetVertexPointMap < PolygonMesh, NamedParameters>::type VPM; + + VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), + get_property_map(vertex_point, pm)); + + ECM ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), Default_ECM()); + + std::unordered_map > faces_to_split; + std::vector to_split; + for (edge_descriptor e : edges(pm)) + { + vertex_descriptor src = source(e, pm), tgt = target(e, pm); + if (get(value_map, src)==isovalue) + { + for (halfedge_descriptor h : halfedges_around_source(halfedge(e, pm), pm)) + { + face_descriptor f = face(h, pm); + if (f!=boost::graph_traits::null_face()) + faces_to_split[f].push_back(opposite(h, pm)); + } + continue; + } + if (get(value_map, tgt)==isovalue) + { + for (halfedge_descriptor h : halfedges_around_target(halfedge(e, pm), pm)) + { + face_descriptor f = face(h, pm); + if (f!=boost::graph_traits::null_face()) + faces_to_split[f].push_back(h); + } + continue; + } + if ( (get(value_map, tgt) < isovalue) != (get(value_map, src) < isovalue) ) + { + to_split.push_back(e); + } + } + + for (edge_descriptor e : to_split) + { + vertex_descriptor src = source(e, pm), tgt = target(e, pm); + double ds = get(value_map, src); + double dt = get(value_map, tgt); + double alpha = (isovalue - dt) / (ds - dt); + halfedge_descriptor hnew = CGAL::Euler::split_edge(halfedge(e, pm), pm); + put(vpm, target(hnew, pm), barycenter(get(vpm,src), alpha, get(vpm, tgt), 1-alpha)); + put(value_map, target(hnew, pm) , isovalue); + face_descriptor f = face(hnew, pm); + if (f!=boost::graph_traits::null_face()) + faces_to_split[f].push_back(hnew); + hnew=pm.prev(opposite(hnew, pm)); + f = face(hnew, pm); + if (f!=boost::graph_traits::null_face()) + faces_to_split[f].push_back(hnew); + } + + for (const auto& p : faces_to_split) + { + if(p.second.size()!=2) continue; + + std::pair res = edge(target(p.second[0],pm), + target(p.second[1],pm), pm); + if (res.second) + { + // no split as the edge already exists (the two vertices are on the isolevel) + put(ecm, res.first, true); + continue; + } + + halfedge_descriptor hnew = CGAL::Euler::split_face(p.second[0], p.second[1], pm); + put(ecm, edge(hnew, pm), true); + } +} + +template +void refine_mesh_at_isolevel(PolygonMesh& pm, + ValueMap value_map, + typename boost::property_traits::value_type iso_level) +{ + refine_mesh_at_isolevel(pm, value_map, iso_level, parameters::all_default()); +} + +} } } // end of CGAL::Polygon_mesh_processing::experimental + + +#endif diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index eb9b98cbe593..6f5d1e7c7ce9 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -125,6 +125,11 @@ else() message(STATUS "NOTICE: Tests are not using Ceres.") endif() +if (TARGET CGAL::Eigen3_support) + create_single_source_cgal_program("test_geodesic_isolevel_refinement.cpp") + target_link_libraries( test_geodesic_isolevel_refinement PUBLIC CGAL::Eigen3_support) +endif() + if(BUILD_TESTING) set_tests_properties( "execution of triangulate_hole_Polyhedron_3_no_delaunay_test" diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd new file mode 100644 index 000000000000..36105ee3a020 --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd @@ -0,0 +1 @@ +${CGAL_DATA_DIR}/meshes/elephant.off 0.001 0.01 0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 10 diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp new file mode 100644 index 000000000000..a2098c63e3b9 --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp @@ -0,0 +1,63 @@ +#include +#include + +#include + +#include +#include + +#include +#include + +typedef CGAL::Simple_cartesian Kernel; +typedef Kernel::Point_3 Point_3; +typedef CGAL::Surface_mesh Triangle_mesh; + +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; +typedef boost::graph_traits::edge_descriptor edge_descriptor; + +typedef Triangle_mesh::Property_map Vertex_distance_map; +typedef CGAL::Heat_method_3::Surface_mesh_geodesic_distances_3 Heat_method; + +int main(int argc, char* argv[]) +{ + const char* filename = argv[1]; + + Triangle_mesh tm; + if(!CGAL::IO::read_polygon_mesh(filename, tm) || + CGAL::is_empty(tm) || !CGAL::is_triangle_mesh(tm)) + { + std::cerr << "Invalid input file." << std::endl; + return EXIT_FAILURE; + } + + //property map for the distance values to the source set + Vertex_distance_map vertex_distance = tm.add_property_map("v:distance", 0).first; + + Heat_method hm(tm); + + //add the first vertex as the source set + vertex_descriptor s = *(vertices(tm).first); + hm.add_source(s); + hm.estimate_geodesic_distances(vertex_distance); + + //property map for the constrained status of edges + auto ecm = tm.add_property_map("e:is_constrained", 0).first; + + + for (int i=2; i splitted; + + CGAL::Polygon_mesh_processing::split_connected_components(tm, splitted, CGAL::parameters::edge_is_constrained_map(ecm)); + +#ifdef CGAL_TEST_SUITE + assert(splitted.size() == 22); +#else + for(std::size_t i=0; i Date: Sat, 30 Sep 2023 08:41:07 +0200 Subject: [PATCH 437/943] add doc --- .../internal/refine_mesh_at_isolevel.h | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h index f4b0f7cc6497..8bb6502865f7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h @@ -10,10 +10,10 @@ // // Author(s) : Sebastien Loriot -#ifndef CGAL_POLYGON_MESH_PROCESSING_CLIP_H -#define CGAL_POLYGON_MESH_PROCESSING_CLIP_H +#ifndef CGAL_POLYGON_MESH_PROCESSING_REFINE_MESH_AT_ISOLEVEL_H +#define CGAL_POLYGON_MESH_PROCESSING_REFINE_MESH_AT_ISOLEVEL_H -#include +#include #include @@ -21,12 +21,43 @@ namespace CGAL { namespace Polygon_mesh_processing { namespace experimental { - -template +/*! \ingroup PkgPolygonMeshProcessingRef + * Function object that computes the intersection of a plane with + * a triangulated surface mesh. + * + * @tparam PolygonMesh a model of the concepts `EdgeListGraph` and `FaceListGraph` + * @tparam ValueMap a model of the concept `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and with its value type being model of `LessThanComparable`. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" for `pm` + * + * @param pm the polygon mesh to be refined + * @param value_map the property map containing value at each vertex for a given function defined over the mesh + * @param isovalue the value used to defined the cut locus of edges having their incident vertices associated with + * values respectively larger and smaller than `isovalue` in `value_map` + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * + * \cgalNamedParamsBegin + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{an ouput property map associating `true` to all new edges added by the cut, and false to input edges. + * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{No marks on edges will be put} + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd + * \cgalNamedParamsEnd + * + */ +template void refine_mesh_at_isolevel(PolygonMesh& pm, ValueMap value_map, typename boost::property_traits::value_type isovalue, - const NamedParameters& np) + const NamedParameters& np = parameters::default_values()) { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::edge_descriptor edge_descriptor; @@ -115,14 +146,6 @@ void refine_mesh_at_isolevel(PolygonMesh& pm, } } -template -void refine_mesh_at_isolevel(PolygonMesh& pm, - ValueMap value_map, - typename boost::property_traits::value_type iso_level) -{ - refine_mesh_at_isolevel(pm, value_map, iso_level, parameters::all_default()); -} - } } } // end of CGAL::Polygon_mesh_processing::experimental From 5f012f87464ab14cda32fb734a6384d61847120d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 2 Oct 2023 10:54:54 +0100 Subject: [PATCH 438/943] By default do the same thing for border edges --- .../include/CGAL/Variational_shape_approximation.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index 23cfab856f61..c6966ccaac01 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -824,7 +824,7 @@ class Variational_shape_approximation { * \cgalParamNBegin{optimize_boundary_anchor_location} * \cgalParamDescription{If `true`, optimize the anchor locations of boundary vertices} * \cgalParamType{`Boolean`} - * \cgalParamDefault{`true`} + * \cgalParamDefault{`optimize_anchor_location`} * \cgalParamNEnd * * \cgalParamNBegin{pca_plane} @@ -844,7 +844,7 @@ class Variational_shape_approximation { const bool relative_to_chord = choose_parameter(get_parameter(np, internal_np::relative_to_chord), false); const bool with_dihedral_angle = choose_parameter(get_parameter(np, internal_np::with_dihedral_angle), false); const bool optimize_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_anchor_location), true); - const bool optimize_boundary_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_boundary_anchor_location), true); + const bool optimize_boundary_anchor_location = choose_parameter(get_parameter(np, internal_np::optimize_boundary_anchor_location), optimize_anchor_location); const bool pca_plane = choose_parameter(get_parameter(np, internal_np::pca_plane), false); // compute averaged edge length, used in chord subdivision From eacc3ab4d1c8eb17818d8caf33b87ae367e82206 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 Oct 2023 12:13:54 +0200 Subject: [PATCH 439/943] add missing typedef --- Mesh_3/include/CGAL/Mesh_vertex_base_3.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_vertex_base_3.h b/Mesh_3/include/CGAL/Mesh_vertex_base_3.h index 2cf97e4bdc1e..46b09094e954 100644 --- a/Mesh_3/include/CGAL/Mesh_vertex_base_3.h +++ b/Mesh_3/include/CGAL/Mesh_vertex_base_3.h @@ -115,6 +115,7 @@ class Mesh_vertex_3 // Types typedef Index_ Index; typedef typename GT::FT FT; + typedef typename Vb::Point Point; // Constructor Mesh_vertex_3() @@ -324,6 +325,7 @@ struct Mesh_vertex_base_3 { #endif using Vertex_handle = typename Triangulation_data_structure::Vertex_handle; using Cell_handle = typename Triangulation_data_structure::Cell_handle; + using Point = typename Vb::Point; template < class TDS3 > struct Rebind_TDS { From c17841356a3228ff9509a6edc58bc22fee672071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 2 Oct 2023 13:10:38 +0200 Subject: [PATCH 440/943] Minor error message tweak --- Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp | 2 +- Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp | 2 +- Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp | 2 +- Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp | 2 +- Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp | 2 +- Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp index 8742a2a20011..aeb47b80152e 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp @@ -23,7 +23,7 @@ int main(int argc, char** argv) Point_container points; if(!CGAL::IO::read_points(filename, std::back_inserter(points)) || points.empty()) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp index 600d533ee411..59010d1212ea 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp @@ -35,7 +35,7 @@ int main(int argc, char** argv) Mesh mesh; if(!PMP::IO::read_polygon_mesh(filename, mesh) || is_empty(mesh) || !is_triangle_mesh(mesh)) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp index 00e2e4fd9fc5..369cf375a6ff 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp @@ -25,7 +25,7 @@ int main(int argc, char** argv) Mesh mesh; if(!PMP::IO::read_polygon_mesh(filename, mesh) || is_empty(mesh) || !is_triangle_mesh(mesh)) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp index 626e3bdc3ba4..6e1321c302dd 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp @@ -30,7 +30,7 @@ int main(int argc, char** argv) std::vector > faces; if(!CGAL::IO::read_polygon_soup(filename, points, faces) || faces.empty()) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp index 113215b631a1..682cffac3390 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp @@ -70,7 +70,7 @@ int main(int argc, char** argv) Faces faces; if(!CGAL::IO::read_polygon_soup(filename, points, faces) || faces.empty()) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp index 1c1d6c7b3d72..9de47aefbcd2 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp @@ -25,7 +25,7 @@ int main(int argc, char** argv) if(!PMP::IO::read_polygon_mesh(filename, input) || is_empty(input) || !is_triangle_mesh(input)) { - std::cerr << "Invalid input." << std::endl; + std::cerr << "Invalid input:" << filename << std::endl; return EXIT_FAILURE; } From 9fa445f21754a1ac7923f2b5d190647ebd818dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 2 Oct 2023 13:13:40 +0200 Subject: [PATCH 441/943] Change nomenclature to clarify the different types of gate permissiveness --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 39 +++++++++++-------- .../internal/gate_priority_queue.h | 16 ++++---- .../Alpha_wrap_3/Alpha_wrap_3_plugin.cpp | 6 +-- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 2174363240b6..7c9509b9185a 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -523,7 +523,7 @@ class Alpha_wrap_3 continue; } - // Mark the seeds and icosahedron vertices as "artificial vertices" such that the facets + // Mark the seeds and icosahedron vertices as "scaffolding vertices" such that the facets // incident to these vertices are always traversable regardless of their circumcenter. // This is done because otherwise some cavities can appear on the mesh: non-traversable facets // with two vertices on the offset, and the third being a deeper inside seed / ico_seed. @@ -592,11 +592,12 @@ class Alpha_wrap_3 std::vector inc_cells; inc_cells.reserve(64); m_tr.incident_cells(seed_v, std::back_inserter(inc_cells)); + for(Cell_handle ch : inc_cells) ch->is_outside() = cavity_cell_outside_tag(ch); } - // Might as well go through the full triangulation since only seeds should have been inserted + // Should be cheap enough to go through the full triangulation as only seeds have been inserted for(Cell_handle ch : m_tr.all_cell_handles()) { if(!ch->is_outside()) @@ -1027,21 +1028,24 @@ class Alpha_wrap_3 } private: + // A permissive gate is a gate that we can traverse without checking its circumradius enum Facet_queue_status { IRRELEVANT = 0, - ARTIFICIAL_FACET, + HAS_INFINITE_NEIGHBOR, // the cell incident to the mirrored facet is infinite (permissive) + SCAFFOLDING, // incident to a SEED or BBOX vertex (permissive) TRAVERSABLE }; inline const char* get_status_message(const Facet_queue_status status) { - constexpr std::size_t status_count = 3; + constexpr std::size_t status_count = 4; // Messages corresponding to Error_code list above. Must be kept in sync! static const char* message[status_count] = { "Irrelevant facet", - "Artificial facet", + "Facet incident to infinite neighbor", + "Facet with a bbox/seed vertex", "Traversable facet" }; @@ -1079,7 +1083,7 @@ class Alpha_wrap_3 const Cell_handle nh = ch->neighbor(id); if(m_tr.is_infinite(nh)) - return TRAVERSABLE; + return HAS_INFINITE_NEIGHBOR; if(nh->is_outside()) { @@ -1089,7 +1093,7 @@ class Alpha_wrap_3 return IRRELEVANT; } - // push if facet is connected to artificial vertices + // push if facet is connected to scaffolding vertices for(int i=0; i<3; ++i) { const Vertex_handle vh = ch->vertex(Triangulation::vertex_triple_index(id, i)); @@ -1097,9 +1101,9 @@ class Alpha_wrap_3 vh->type() == AW3i::Vertex_type:: SEED_VERTEX) { #ifdef CGAL_AW3_DEBUG_FACET_STATUS - std::cout << "artificial facet due to artificial vertex #" << i << std::endl; + std::cout << "Scaffolding facet due to vertex #" << i << std::endl; #endif - return ARTIFICIAL_FACET; + return SCAFFOLDING; } } @@ -1132,7 +1136,8 @@ class Alpha_wrap_3 return false; const FT sqr = smallest_squared_radius_3(f, m_tr); - m_queue.resize_and_push(Gate(f, sqr, (status == ARTIFICIAL_FACET))); + const bool is_permissive = (status == HAS_INFINITE_NEIGHBOR || status == SCAFFOLDING); + m_queue.resize_and_push(Gate(f, sqr, is_permissive)); #ifdef CGAL_AW3_DEBUG_QUEUE const Cell_handle ch = f.first; @@ -1147,10 +1152,10 @@ class Alpha_wrap_3 << "\t" << p0 << "\n\t" << p1 << "\n\t" << p2 << std::endl; std::cout << " Status: " << get_status_message(status) << std::endl; std::cout << " SQR: " << sqr << std::endl; - std::cout << " Artificiality: " << (status == ARTIFICIAL_FACET) << std::endl; + std::cout << " Permissiveness: " << is_permissive << std::endl; #endif - CGAL_assertion(status == ARTIFICIAL_FACET || sqr >= m_sq_alpha); + CGAL_assertion(is_permissive || sqr >= m_sq_alpha); return true; } @@ -1242,8 +1247,8 @@ class Alpha_wrap_3 << m_tr.point(ch, Triangulation::vertex_triple_index(s, 0)) << "\n" << m_tr.point(ch, Triangulation::vertex_triple_index(s, 1)) << "\n" << m_tr.point(ch, Triangulation::vertex_triple_index(s, 2)) << std::endl; - std::cout << "Artificiality: " << gate.is_artificial_facet() << std::endl; std::cout << "Priority: " << gate.priority() << " (sq alpha: " << m_sq_alpha << ")" << std::endl; + std::cout << "Permissiveness: " << gate.is_permissive_facet() << std::endl; #endif visitor.before_facet_treatment(*this, gate); @@ -1547,7 +1552,7 @@ class Alpha_wrap_3 } // Some lambdas for the comparer - auto has_artificial_vertex = [](Cell_handle c) -> bool + auto has_scaffolding_vertex = [](Cell_handle c) -> bool { for(int i=0; i<4; ++i) { @@ -1625,9 +1630,9 @@ class Alpha_wrap_3 // @todo give topmost priority to cells with > 1 non-manifold vertex? auto comparer = [&](Cell_handle l, Cell_handle r) -> bool { - if(has_artificial_vertex(l)) + if(has_scaffolding_vertex(l)) return false; - if(has_artificial_vertex(r)) + if(has_scaffolding_vertex(r)) return true; const int l_bf_count = count_boundary_facets(l, v); @@ -1706,7 +1711,7 @@ class Alpha_wrap_3 std::cout << "At Facet with VID " << get(Gate_ID_PM(), current_gate) << "\n"; std::cout << "\t" << p0 << "\n\t" << p1 << "\n\t" << p2 << "\n"; - std::cout << " Artificiality: " << current_gate.is_artificial_facet() << "\n"; + std::cout << " Permissiveness: " << current_gate.is_permissive_facet() << "\n"; std::cout << " SQR: " << sqr << "\n"; std::cout << " Priority " << current_gate.priority() << std::endl; diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h index a9bdd7e0491b..b091b2cabe24 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/gate_priority_queue.h @@ -37,17 +37,17 @@ class Gate private: Facet m_facet; FT m_priority; // circumsphere sq_radius - bool m_is_artificial_facet; + bool m_is_permissive_facet; public: // Constructors Gate(const Facet& facet, const FT& priority, - const bool is_artificial_facet) + const bool is_permissive_facet) : m_facet(facet), m_priority(priority), - m_is_artificial_facet(is_artificial_facet) + m_is_permissive_facet(is_permissive_facet) { CGAL_assertion(priority >= 0); } @@ -60,7 +60,7 @@ class Gate public: const Facet& facet() const { return m_facet; } const FT& priority() const { return m_priority; } - bool is_artificial_facet() const { return m_is_artificial_facet; } + bool is_permissive_facet() const { return m_is_permissive_facet; } }; struct Less_gate @@ -68,14 +68,14 @@ struct Less_gate template bool operator()(const Gate& a, const Gate& b) const { - // If one is artificial and the other is not, give priority to the artificial facet + // If one is permissive and the other is not, give priority to the permissive facet // - // The artificial facet are given highest priority because they need to be treated + // The permissive facet are given highest priority because they need to be treated // regardless of their circumradius. Treating them first allow the part that depends // on alpha to be treated uniformly in a way: whatever the alpha, we'll do the same // first treatmen - if(a.is_artificial_facet() != b.is_artificial_facet()) - return a.is_artificial_facet(); + if(a.is_permissive_facet() != b.is_permissive_facet()) + return a.is_permissive_facet(); if(a.priority() == b.priority()) { diff --git a/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/Alpha_wrap_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/Alpha_wrap_3_plugin.cpp index a1b29fd5689d..e66d6c83dd3f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/Alpha_wrap_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Alpha_wrap_3/Alpha_wrap_3_plugin.cpp @@ -113,10 +113,10 @@ struct Iterative_AW3_visualization_visitor if(!points || !faces || !fcolors || !vcolors) return; - // If the next top of the queue has vertices on the bbox, don't draw (as to avoid producing + // If the next top of the queue has vertices on the bbox, don't draw (try to avoid producing // spikes in the visualization) // const auto& gate = wrapper.queue().top(); -// if(wrapper.triangulation().number_of_vertices() > 500 && gate.is_artificial_facet()) +// if(wrapper.triangulation().number_of_vertices() > 500 && gate.is_permissive_facet()) // return; // Skip some... @@ -216,7 +216,7 @@ struct AW3_interrupter_visitor { } // Only overload this one because it gives a better state of the wrap (for other visitor calls, - // we often get tetrahedral spikes because there are artificial gates in the queue) + // we often get tetrahedral spikes because there are scaffolding gates in the queue) template void before_Steiner_point_insertion(const Wrapper& wrapper, const Point& p) { From 1d79ab5023e81ba4725868ce91f638bdb399d8a2 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 Oct 2023 16:28:04 +0200 Subject: [PATCH 442/943] rename B_ --- Mesh_3/include/CGAL/Mesh_3/mesh_standard_cell_criteria.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/mesh_standard_cell_criteria.h b/Mesh_3/include/CGAL/Mesh_3/mesh_standard_cell_criteria.h index c5a148d78fa8..e9543925efbf 100644 --- a/Mesh_3/include/CGAL/Mesh_3/mesh_standard_cell_criteria.h +++ b/Mesh_3/include/CGAL/Mesh_3/mesh_standard_cell_criteria.h @@ -202,7 +202,7 @@ class Cell_uniform_size_criterion { #ifdef CGAL_MESH_3_DEBUG_FACET_CRITERIA std::cerr << "Cell too small (uniform size): sq_radius[" << size - << "] bound[" << B_ << "]\n"; + << "] bound[" << sq_radius_bound_ << "]\n"; #endif return Is_bad(Quality(sq_radius_bound_/size)); } From e8651b8a58f50774263118ccfe7dedabf7de104c Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 Oct 2023 16:30:21 +0200 Subject: [PATCH 443/943] add min_radius_bound member and accessor --- Mesh_3/include/CGAL/Mesh_facet_criteria_3.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_facet_criteria_3.h b/Mesh_3/include/CGAL/Mesh_facet_criteria_3.h index ef69c9413d53..7043597f336b 100644 --- a/Mesh_3/include/CGAL/Mesh_facet_criteria_3.h +++ b/Mesh_3/include/CGAL/Mesh_facet_criteria_3.h @@ -25,6 +25,8 @@ #include #include +#include + namespace CGAL { /*! @@ -131,9 +133,13 @@ class Mesh_facet_criteria_3 const DistanceField& distance_bound, const Mesh_facet_topology topology = FACET_VERTICES_ON_SURFACE, const FT& min_radius_bound = 0.) + : min_radius_bound_(std::nullopt) { if (FT(0) != min_radius_bound) + { init_min_radius(min_radius_bound); + min_radius_bound_ = min_radius_bound; + } if ( FT(0) != angle_bound ) init_aspect(angle_bound); @@ -173,6 +179,10 @@ class Mesh_facet_criteria_3 return topology_; } + std::optional min_radius_bound() const { + return min_radius_bound_; + } + private: void init_aspect(const FT& angle_bound) { @@ -242,6 +252,7 @@ class Mesh_facet_criteria_3 private: Criteria criteria_; Mesh_facet_topology topology_; + std::optional min_radius_bound_; }; // end class Mesh_facet_criteria_3 } // end namespace CGAL From 05b80838e7f62f46bb6e6a14830274835f304e66 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 Oct 2023 16:31:29 +0200 Subject: [PATCH 444/943] check min_size before inserting facets or edges in refinement queues --- .../CGAL/Mesh_3/Refine_facets_manifold_base.h | 61 +++++++++++++++---- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h index c46dad7a808f..9f266793fc6a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h @@ -95,6 +95,7 @@ class Refine_facets_manifold_base mutable bool m_bad_vertices_initialized; bool m_with_manifold_criterion; bool m_with_boundary; + std::optional m_facet_min_size; private: // computes and return an ordered pair of Vertex @@ -141,7 +142,7 @@ class Refine_facets_manifold_base return this->r_tr_.min_squared_distance(fcenter, cp(wp)) - cw(wp); } - Facet + std::pair biggest_incident_facet_in_complex(const Vertex_handle v) const { #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS @@ -195,10 +196,12 @@ class Refine_facets_manifold_base << std::endl; #endif // CGAL_MESHES_DEBUG_REFINEMENT_POINTS - return biggest_facet; + return { biggest_facet, biggest_sq_dist }; } - Facet biggest_incident_facet_in_complex(const Edge& arete) const { + std::pair + biggest_incident_facet_in_complex(const Edge& arete) const + { // Find the first facet in the incident facets // of the edge which is in the Complex // use the list of incident facets in the complex @@ -239,7 +242,25 @@ class Refine_facets_manifold_base << biggest_sq_dist << std::endl; #endif // CGAL_MESHES_DEBUG_REFINEMENT_POINTS - return biggest_facet; + return { biggest_facet, biggest_sq_dist }; + } + + bool biggest_incident_facet_is_smaller_than_min_size(const Edge& e) const + { + if(!m_facet_min_size) + return false; + + const FT sq_dist = biggest_incident_facet_in_complex(e).second; + return (sq_dist < CGAL::square(*m_facet_min_size)); + } + + bool biggest_incident_facet_is_smaller_than_min_size(const Vertex_handle& v) const + { + if(!m_facet_min_size) + return false; + + const FT sq_dist = biggest_incident_facet_in_complex(v).second; + return (sq_dist < CGAL::square(*m_facet_min_size)); } /////////////////////// @@ -324,6 +345,7 @@ class Refine_facets_manifold_base , m_bad_vertices_initialized(false) , m_with_manifold_criterion((mesh_topology & MANIFOLD_WITH_BOUNDARY) != 0) , m_with_boundary((mesh_topology & NO_BOUNDARY) == 0) + , m_facet_min_size(criteria.min_radius_bound()) { #ifdef CGAL_MESH_3_DEBUG_CONSTRUCTORS std::cerr << "CONS: Refine_facets_manifold_base"; @@ -357,11 +379,14 @@ class Refine_facets_manifold_base ( (!m_with_boundary) && (this->r_c3t3_.face_status(*eit) == C3t3::BOUNDARY) ) ) { + if (biggest_incident_facet_is_smaller_than_min_size(*eit)) + continue; + #ifdef CGAL_LINKED_WITH_TBB // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(*eit), + this->insert_bad_facet(biggest_incident_facet_in_complex(*eit).first, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB @@ -395,7 +420,11 @@ class Refine_facets_manifold_base end = this->r_tr_.finite_vertices_end(); vit != end; ++vit) { - if( this->r_c3t3_.face_status(vit) == C3t3::SINGULAR ) { + if( this->r_c3t3_.face_status(vit) == C3t3::SINGULAR ) + { + if(biggest_incident_facet_is_smaller_than_min_size(vit)) + continue; + #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS std::cerr << "m_bad_vertices.insert(" << this->r_tr_.point(vit) << ")\n"; @@ -404,7 +433,7 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(vit), + this->insert_bad_facet(biggest_incident_facet_in_complex(vit).first, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB @@ -489,7 +518,7 @@ class Refine_facets_manifold_base << this->r_tr_.point(edgevv.second) << "\n"; #endif // CGAL_MESHES_DEBUG_REFINEMENT_POINTS - return biggest_incident_facet_in_complex(first_bad_edge); + return biggest_incident_facet_in_complex(first_bad_edge).first; } else { CGAL_assertion(!m_bad_vertices.empty()); const Vertex_handle& v = *m_bad_vertices.begin(); @@ -506,7 +535,7 @@ class Refine_facets_manifold_base dump_c3t3(this->r_c3t3_, "dump-crash"); CGAL_error_msg("this->r_c3t3_.face_status(v) != C3t3::SINGULAR"); } - return biggest_incident_facet_in_complex(v); + return biggest_incident_facet_in_complex(v).first; } } //end Sequential } @@ -568,11 +597,13 @@ class Refine_facets_manifold_base (this->r_c3t3_.face_status(edge) == C3t3::BOUNDARY) ) ) { + if (biggest_incident_facet_is_smaller_than_min_size(edge)) + continue; #ifdef CGAL_LINKED_WITH_TBB // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(edge), + this->insert_bad_facet(biggest_incident_facet_in_complex(edge).first, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB @@ -616,6 +647,9 @@ class Refine_facets_manifold_base // !this->r_c3t3_.is_regular_or_boundary_for_vertices(*vit) ) { + if(biggest_incident_facet_is_smaller_than_min_size(*vit)) + continue; + #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS std::cerr << "m_bad_vertices.insert(" << this->r_tr_.point(*vit) << ")\n"; @@ -624,7 +658,7 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(*vit), + this->insert_bad_facet(biggest_incident_facet_in_complex(*vit).first, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB @@ -635,7 +669,8 @@ class Refine_facets_manifold_base } if ( this->r_c3t3_.has_incident_facets_in_complex(v) && - (this->r_c3t3_.face_status(v) == C3t3::SINGULAR) + (this->r_c3t3_.face_status(v) == C3t3::SINGULAR) && + !biggest_incident_facet_is_smaller_than_min_size(v) // !this->r_c3t3_.is_regular_or_boundary_for_vertices(v) ) { @@ -647,7 +682,7 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(v), + this->insert_bad_facet(biggest_incident_facet_in_complex(v).first, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB From 83b49e296b0324e4170ca7a4fad4c27717430c18 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 2 Oct 2023 15:40:51 +0100 Subject: [PATCH 445/943] Fix typos in the User Manual --- .../Surface_mesh_approximation/Surface_mesh_approximation.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt index 5a486de1ad1f..e2ea8e5b1b51 100644 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt +++ b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt @@ -121,7 +121,7 @@ In order to approximate complex boundaries well, more anchors are generated by r \f[ d = d / input\_mesh\_average\_edge\_length. \f] Optionally, \f$ d \f$ can be measured as the ratio of the chord length: \f[ d = d / \Vert(\mathbf{a}, \mathbf{b})\Vert. \f] -Also, we can add a dihedral angle weight \f$ sin(\mathbf{N}_i,\mathbf{N}_j) \f$ to the distance measurement, where \f$ \mathbf{N}_i,\mathbf{N}_j \f$ are the normals of the proxies separated by the chord \f$ (\mathbf{a}, \mathbf{b}) \f$. If the angle between proxy \f$ P_i \f$ and \f$ P_j \f$ is rather small, then a coarse approximation will do as it does not add geometric information on the shape. Trivial chords (less than 4 edges) are not subdivided if they are non-circular. In case of circular chords, additional anchors maybe added to maintain the topology even if they are trivial, as detailed in Section \ref sma_anchors_additional. +Also, we can add a dihedral angle weight \f$ sin(\mathbf{N}_i,\mathbf{N}_j) \f$ to the distance measurement, where \f$ \mathbf{N}_i,\mathbf{N}_j \f$ are the normals of the proxies separated by the chord \f$ (\mathbf{a}, \mathbf{b}) \f$. If the angle between proxy \f$ P_i \f$ and \f$ P_j \f$ is rather small, then a coarse approximation will do as it does not add geometric information on the shape. Trivial chords (made of a single edge) are not subdivided. In case of circular chords, additional anchors may be added to maintain the topology, as detailed in Section \ref sma_anchors_additional. \cgalFigureBegin{chord, chord.jpg} Varying the chord error. From left to right: clustering partition, and meshing with decreasing absolute chord error 5, 3 and 1 without dihedral angle weight. The boundaries of the partition (red lines) are approximated with increasing accuracy. @@ -132,7 +132,7 @@ Varying the chord error. From left to right: clustering partition, and meshing w For a boundary cycle without any anchor such as the hole depicted Figure \cgalFigureRef{operations}, we first add a starting anchor to the boundary. We then subdivide this circular chord to ensure that every boundary cycle has at least 2 anchors (i.e., every chord is connecting 2 different anchors, Figure \cgalFigureRef{anchors}). Finally, we add additional anchors to ensure that at least three anchor vertices are generated on every boundary cycle. \cgalFigureBegin{anchors, anchors.jpg} -Adding anchors. From left to right: starting from a partition (grey) with a hole (while) and two encircled regions (green and blue), we add a starting anchor (orange disk) to the boundary cycle (red dash line) without any anchor (2nd), subdivide the circular chord (3rd, the number indicates the level of recursion) and add anchors to the boundary cycle with less than 2 anchors (4th, red dash lines). +Adding anchors. From left to right: starting from a partition (grey) with a hole (white) and two encircled regions (green and blue), we add a starting anchor (orange disk) to the boundary cycle (red dash line) without any anchor (2nd), subdivide the circular chord (3rd, the number indicates the level of recursion) and add anchors to the boundary cycle with less than 2 anchors (4th, red dash lines). \cgalFigureEnd \subsubsection sma_triangulation Discrete Triangulation From d46efd537fbb43c73687d11aa2ba54808113769c Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 Oct 2023 16:59:42 +0200 Subject: [PATCH 446/943] avoid computing twice the biggest incident facet --- .../CGAL/Mesh_3/Refine_facets_manifold_base.h | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h index 9f266793fc6a..6eadbfac52f4 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h @@ -245,22 +245,17 @@ class Refine_facets_manifold_base return { biggest_facet, biggest_sq_dist }; } - bool biggest_incident_facet_is_smaller_than_min_size(const Edge& e) const + bool is_smaller_than_min_size(const FT& sq_dist) const { if(!m_facet_min_size) return false; - - const FT sq_dist = biggest_incident_facet_in_complex(e).second; - return (sq_dist < CGAL::square(*m_facet_min_size)); + return sq_dist < CGAL::square(*m_facet_min_size); } - bool biggest_incident_facet_is_smaller_than_min_size(const Vertex_handle& v) const + template //T may be Edge or Vertex_handle + bool biggest_incident_facet_is_smaller_than_min_size(const T& t) const { - if(!m_facet_min_size) - return false; - - const FT sq_dist = biggest_incident_facet_in_complex(v).second; - return (sq_dist < CGAL::square(*m_facet_min_size)); + return is_smaller_than_min_size(biggest_incident_facet_in_complex(t).second); } /////////////////////// @@ -379,15 +374,15 @@ class Refine_facets_manifold_base ( (!m_with_boundary) && (this->r_c3t3_.face_status(*eit) == C3t3::BOUNDARY) ) ) { - if (biggest_incident_facet_is_smaller_than_min_size(*eit)) + const auto [biggest_f, sq_dist] = biggest_incident_facet_in_complex(*eit); + if (is_smaller_than_min_size(sq_dist)) continue; #ifdef CGAL_LINKED_WITH_TBB // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(*eit).first, - typename Base::Quality()); + this->insert_bad_facet(biggest_f, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB { // Sequential @@ -422,7 +417,8 @@ class Refine_facets_manifold_base { if( this->r_c3t3_.face_status(vit) == C3t3::SINGULAR ) { - if(biggest_incident_facet_is_smaller_than_min_size(vit)) + const auto [biggest_f, sq_dist] = biggest_incident_facet_in_complex(vit); + if (is_smaller_than_min_size(sq_dist)) continue; #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS @@ -433,8 +429,7 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(vit).first, - typename Base::Quality()); + this->insert_bad_facet(biggest_f, typename Base::Quality()); } else #endif // CGAL_LINKED_WITH_TBB { // Sequential @@ -597,15 +592,17 @@ class Refine_facets_manifold_base (this->r_c3t3_.face_status(edge) == C3t3::BOUNDARY) ) ) { - if (biggest_incident_facet_is_smaller_than_min_size(edge)) + const auto [biggest_f, sq_dist] = biggest_incident_facet_in_complex(edge); + if (is_smaller_than_min_size(sq_dist)) continue; + #ifdef CGAL_LINKED_WITH_TBB // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(edge).first, - typename Base::Quality()); - } else + this->insert_bad_facet(biggest_f, typename Base::Quality()); + } + else #endif // CGAL_LINKED_WITH_TBB { // Sequential m_bad_edges.insert(Bad_edge(edge_to_edgevv(edge), @@ -647,7 +644,8 @@ class Refine_facets_manifold_base // !this->r_c3t3_.is_regular_or_boundary_for_vertices(*vit) ) { - if(biggest_incident_facet_is_smaller_than_min_size(*vit)) + const auto [biggest_f, sq_dist] = biggest_incident_facet_in_complex(*vit); + if (is_smaller_than_min_size(sq_dist)) continue; #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS @@ -658,9 +656,9 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(*vit).first, - typename Base::Quality()); - } else + this->insert_bad_facet(biggest_f, typename Base::Quality()); + } + else #endif // CGAL_LINKED_WITH_TBB { // Sequential m_bad_vertices.insert(*vit); @@ -669,11 +667,14 @@ class Refine_facets_manifold_base } if ( this->r_c3t3_.has_incident_facets_in_complex(v) && - (this->r_c3t3_.face_status(v) == C3t3::SINGULAR) && - !biggest_incident_facet_is_smaller_than_min_size(v) + (this->r_c3t3_.face_status(v) == C3t3::SINGULAR) // !this->r_c3t3_.is_regular_or_boundary_for_vertices(v) ) { + const auto [biggest_f, sq_dist] = biggest_incident_facet_in_complex(v); + if (is_smaller_than_min_size(sq_dist)) + return; + #ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS std::cerr << "m_bad_vertices.insert(" << this->r_tr_.point(v) << ")\n"; @@ -682,9 +683,9 @@ class Refine_facets_manifold_base // Parallel if (std::is_convertible::value) { - this->insert_bad_facet(biggest_incident_facet_in_complex(v).first, - typename Base::Quality()); - } else + this->insert_bad_facet(biggest_f, typename Base::Quality()); + } + else #endif // CGAL_LINKED_WITH_TBB { // Sequential m_bad_vertices.insert(v); From 7d12160e185cfe8b7cde24138d6e4372197ef626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 3 Oct 2023 11:52:04 +0200 Subject: [PATCH 447/943] update doc --- .../PackageDescription.txt | 1 + .../Polygon_mesh_processing/CMakeLists.txt | 2 + .../geodesic_isolevel_refinement.cpp} | 33 +++++++++----- .../{internal => }/refine_mesh_at_isolevel.h | 44 ++++++++++++------- .../Polygon_mesh_processing/CMakeLists.txt | 5 --- .../test_geodesic_isolevel_refinement.cmd | 1 - 6 files changed, 51 insertions(+), 35 deletions(-) rename Polygon_mesh_processing/{test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp => examples/Polygon_mesh_processing/geodesic_isolevel_refinement.cpp} (65%) rename Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/{internal => }/refine_mesh_at_isolevel.h (79%) delete mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index b17c41399d0b..1d17b286dc5c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -258,6 +258,7 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - `CGAL::Polygon_mesh_processing::triangle()` - `CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()` - `CGAL::Polygon_mesh_processing::detect_corners_of_regions()` +- `CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel()` \cgalCRPSection{I/O Functions} - \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()`\endlink diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index c755ecf63e8e..0ad5f79a261b 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -73,6 +73,8 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(delaunay_remeshing_example PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program("remesh_almost_planar_patches.cpp") target_link_libraries(remesh_almost_planar_patches PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("geodesic_isolevel_refinement.cpp") + target_link_libraries(geodesic_isolevel_refinement PUBLIC CGAL::Eigen3_support) else() message(STATUS "NOTICE: Examples that use Eigen will not be compiled.") endif() diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/geodesic_isolevel_refinement.cpp similarity index 65% rename from Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/geodesic_isolevel_refinement.cpp index a2098c63e3b9..76f97bf3dc66 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/geodesic_isolevel_refinement.cpp @@ -3,7 +3,7 @@ #include -#include +#include #include #include @@ -21,7 +21,7 @@ typedef CGAL::Heat_method_3::Surface_mesh_geodesic_distances_3 He int main(int argc, char* argv[]) { - const char* filename = argv[1]; + const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/elephant.off"); Triangle_mesh tm; if(!CGAL::IO::read_polygon_mesh(filename, tm) || @@ -31,33 +31,42 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } + // default isovalues for cutting the mesh + std::vector isovalues = {0.001, 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 10}; + + if (argc>2) + { + isovalues.clear(); + for (int i=2; i("v:distance", 0).first; Heat_method hm(tm); - //add the first vertex as the source set + //use heat method to compute approximated geodesic distances to the source vertex `s` vertex_descriptor s = *(vertices(tm).first); hm.add_source(s); hm.estimate_geodesic_distances(vertex_distance); - //property map for the constrained status of edges + // property map to flag new cut edge added in the mesh auto ecm = tm.add_property_map("e:is_constrained", 0).first; + // refine the mesh along isovalues + for (double isovalue : isovalues) + CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel(tm, vertex_distance, isovalue, CGAL::parameters::edge_is_constrained_map(ecm)); - for (int i=2; i splitted; - CGAL::Polygon_mesh_processing::split_connected_components(tm, splitted, CGAL::parameters::edge_is_constrained_map(ecm)); -#ifdef CGAL_TEST_SUITE - assert(splitted.size() == 22); -#else + assert(argc!=1 || splitted.size() == 22); + + // export each submesh in a file for(std::size_t i=0; i::%vertex_descriptor` - * as key type and with its value type being model of `LessThanComparable`. + * @tparam ValueMap a model of the concept `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and with its value type being the type of the coordinates of points associated with vertices + * in the vertex map provided to the `vertex_point_map()` named parameter. * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" for `pm` * - * @param pm the polygon mesh to be refined - * @param value_map the property map containing value at each vertex for a given function defined over the mesh - * @param isovalue the value used to defined the cut locus of edges having their incident vertices associated with - * values respectively larger and smaller than `isovalue` in `value_map` + * @param pm the polygon mesh to be refined. + * @param value_map the property map containing value at each vertex for a given function defined over the mesh. + * @param isovalue the value used to defined * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin * \cgalParamNBegin{edge_is_constrained_map} - * \cgalParamDescription{an ouput property map associating `true` to all new edges added by the cut, and false to input edges. + * \cgalParamDescription{an ouput property map associating `true` to all new edges added by the cut, and false to input edges.} * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%edge_descriptor` * as key type and `bool` as value type} * \cgalParamDefault{No marks on edges will be put} + * \cgalParamNEnd + * * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `pm`} * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` @@ -53,7 +62,7 @@ namespace experimental { * \cgalNamedParamsEnd * */ -template +template void refine_mesh_at_isolevel(PolygonMesh& pm, ValueMap value_map, typename boost::property_traits::value_type isovalue, @@ -63,6 +72,7 @@ void refine_mesh_at_isolevel(PolygonMesh& pm, typedef typename boost::graph_traits::edge_descriptor edge_descriptor; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::property_map::value_type FT; using parameters::choose_parameter; using parameters::get_parameter; @@ -113,9 +123,9 @@ void refine_mesh_at_isolevel(PolygonMesh& pm, for (edge_descriptor e : to_split) { vertex_descriptor src = source(e, pm), tgt = target(e, pm); - double ds = get(value_map, src); - double dt = get(value_map, tgt); - double alpha = (isovalue - dt) / (ds - dt); + FT ds = get(value_map, src); + FT dt = get(value_map, tgt); + FT alpha = (isovalue - dt) / (ds - dt); halfedge_descriptor hnew = CGAL::Euler::split_edge(halfedge(e, pm), pm); put(vpm, target(hnew, pm), barycenter(get(vpm,src), alpha, get(vpm, tgt), 1-alpha)); put(value_map, target(hnew, pm) , isovalue); @@ -146,7 +156,7 @@ void refine_mesh_at_isolevel(PolygonMesh& pm, } } -} } } // end of CGAL::Polygon_mesh_processing::experimental +} } // end of CGAL::Polygon_mesh_processing #endif diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 6f5d1e7c7ce9..eb9b98cbe593 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -125,11 +125,6 @@ else() message(STATUS "NOTICE: Tests are not using Ceres.") endif() -if (TARGET CGAL::Eigen3_support) - create_single_source_cgal_program("test_geodesic_isolevel_refinement.cpp") - target_link_libraries( test_geodesic_isolevel_refinement PUBLIC CGAL::Eigen3_support) -endif() - if(BUILD_TESTING) set_tests_properties( "execution of triangulate_hole_Polyhedron_3_no_delaunay_test" diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd deleted file mode 100644 index 36105ee3a020..000000000000 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_geodesic_isolevel_refinement.cmd +++ /dev/null @@ -1 +0,0 @@ -${CGAL_DATA_DIR}/meshes/elephant.off 0.001 0.01 0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 10 From 42b5aab4b170761f473d8464eea4bba75ee8d7cd Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 3 Oct 2023 11:18:58 +0200 Subject: [PATCH 448/943] Update Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_mesh_at_isolevel.h --- .../CGAL/Polygon_mesh_processing/refine_mesh_at_isolevel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine_mesh_at_isolevel.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine_mesh_at_isolevel.h index 7e916fc76980..8a649b15ead4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine_mesh_at_isolevel.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine_mesh_at_isolevel.h @@ -45,7 +45,7 @@ namespace Polygon_mesh_processing { * * \cgalNamedParamsBegin * \cgalParamNBegin{edge_is_constrained_map} - * \cgalParamDescription{an ouput property map associating `true` to all new edges added by the cut, and false to input edges.} + * \cgalParamDescription{an output property map associating `true` to all new edges added by the cut, and `false` to input edges.} * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%edge_descriptor` * as key type and `bool` as value type} * \cgalParamDefault{No marks on edges will be put} From ad5ae27c42ccf59683cd84a6ac52c6d6c6043d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 4 Oct 2023 22:49:06 +0200 Subject: [PATCH 449/943] Factorize code generating filenames out of examples --- .../Alpha_wrap_3/mixed_inputs_wrap.cpp | 5 +++-- .../examples/Alpha_wrap_3/output_helper.h | 19 +++++++++++++++++++ .../examples/Alpha_wrap_3/point_set_wrap.cpp | 8 +++----- .../Alpha_wrap_3/successive_wraps.cpp | 9 +++------ .../Alpha_wrap_3/triangle_mesh_wrap.cpp | 9 +++------ .../Alpha_wrap_3/triangle_soup_wrap.cpp | 9 +++------ .../examples/Alpha_wrap_3/volumetric_wrap.cpp | 9 +++------ .../Alpha_wrap_3/wrap_from_cavity.cpp | 8 +++----- 8 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 Alpha_wrap_3/examples/Alpha_wrap_3/output_helper.h diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp index 4e96d6c1116c..fdba4de5f514 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/mixed_inputs_wrap.cpp @@ -120,8 +120,9 @@ int main(int argc, char** argv) std::string ps_name = std::string(ps_filename); ps_name = ps_name.substr(ps_name.find_last_of("/") + 1, ps_name.length() - 1); ps_name = ps_name.substr(0, ps_name.find_last_of(".")); - std::string output_name = ts_name + "_" + ss_name + "_" + ps_name + "_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + std::string output_name = ts_name + "_" + ss_name + "_" + ps_name + "_" + + std::to_string(static_cast(relative_alpha)) + "_" + + std::to_string(static_cast(relative_offset)) + ".off"; std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/output_helper.h b/Alpha_wrap_3/examples/Alpha_wrap_3/output_helper.h new file mode 100644 index 000000000000..3ce1155f4ef5 --- /dev/null +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/output_helper.h @@ -0,0 +1,19 @@ +#ifndef CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H +#define CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H + +#include + +std::string generate_output_name(std::string input_name, + const double alpha, + const double offset) +{ + input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); + input_name = input_name.substr(0, input_name.find_last_of(".")); + std::string output_name = input_name + + "_" + std::to_string(static_cast(alpha)) + + "_" + std::to_string(static_cast(offset)) + ".off"; + + return output_name; +} + +#endif // CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H \ No newline at end of file diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp index aeb47b80152e..a602cf5c58bf 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/point_set_wrap.cpp @@ -1,3 +1,5 @@ +#include "output_helper.h" + #include #include @@ -53,11 +55,7 @@ int main(int argc, char** argv) std::cout << "Took " << t.time() << " s." << std::endl; // Save the result - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name + "_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp index 59010d1212ea..f9b35f88b1f7 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/successive_wraps.cpp @@ -1,5 +1,7 @@ #define CGAL_AW3_TIMER +#include "output_helper.h" + #include #include @@ -69,12 +71,7 @@ int main(int argc, char** argv) std::cout << " Result: " << num_vertices(wrap) << " vertices, " << num_faces(wrap) << " faces" << std::endl; std::cout << " Elapsed time: " << t.time() << " s." << std::endl; - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name - + "_" + std::to_string(static_cast(relative_alphas[i])) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alphas[i], relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp index 369cf375a6ff..d49534904461 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_mesh_wrap.cpp @@ -1,3 +1,5 @@ +#include "output_helper.h" + #include #include @@ -56,12 +58,7 @@ int main(int argc, char** argv) std::cout << "Took " << t.time() << " s." << std::endl; // Save the result - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name - + "_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp index 6e1321c302dd..51e04974c28a 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/triangle_soup_wrap.cpp @@ -1,3 +1,5 @@ +#include "output_helper.h" + #include #include @@ -63,12 +65,7 @@ int main(int argc, char** argv) std::cout << "Took " << t.time() << " s." << std::endl; // Save the result - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name - + "_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp index 682cffac3390..3ac28de33022 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/volumetric_wrap.cpp @@ -1,3 +1,5 @@ +#include "output_helper.h" + #include #include @@ -113,12 +115,7 @@ int main(int argc, char** argv) auto dt = aw3.triangulation(); // Save the result - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name - + "_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); diff --git a/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp b/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp index 9de47aefbcd2..9422e4d969be 100644 --- a/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp +++ b/Alpha_wrap_3/examples/Alpha_wrap_3/wrap_from_cavity.cpp @@ -1,3 +1,5 @@ +#include "output_helper.h" + #include #include @@ -64,11 +66,7 @@ int main(int argc, char** argv) std::cout << "Took " << t.time() << " s." << std::endl; // Save the result - std::string input_name = std::string(filename); - input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1); - input_name = input_name.substr(0, input_name.find_last_of(".")); - std::string output_name = input_name + "_cavity_" + std::to_string(static_cast(relative_alpha)) - + "_" + std::to_string(static_cast(relative_offset)) + ".off"; + const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset); std::cout << "Writing to " << output_name << std::endl; CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17)); From 660d6203308e7e32bbe37b0aea020f9a818459a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 4 Oct 2023 22:52:32 +0200 Subject: [PATCH 450/943] Accelerate trees manually to avoid skewing timers in flood_fill() If one day this becomes annoying because one wishes to call oracle.add_XXX() multiple times AND it's a significant runtime burden, we can just add a function add_XXXs() with a single call of accelerate_distance_queries() --- .../include/CGAL/Alpha_wrap_3/internal/Point_set_oracle.h | 6 ++++++ .../CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h | 6 ++++++ .../CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h | 6 ++++++ .../CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Point_set_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Point_set_oracle.h index 7bad2ff313d4..8ccbf049a33e 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Point_set_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Point_set_oracle.h @@ -115,6 +115,12 @@ class Point_set_oracle this->tree().insert(std::next(std::cbegin(m_points), old_size), std::cend(m_points)); + // Manually constructing it here purely for profiling reasons: if we keep the lazy approach, + // it will be done at the first treatment of a facet that needs a Steiner point. + // So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes + // to accelerate the tree. + this->tree().accelerate_distance_queries(); + CGAL_postcondition(this->tree().size() == m_points.size()); } }; diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h index d02a9f9faaf8..08e76dc6f5d3 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h @@ -113,6 +113,12 @@ class Segment_soup_oracle #endif this->tree().insert(std::next(std::cbegin(m_segments), old_size), std::cend(m_segments)); + // Manually constructing it here purely for profiling reasons: if we keep the lazy approach, + // it will be done at the first treatment of a facet that needs a Steiner point. + // So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes + // to accelerate the tree. + this->tree().accelerate_distance_queries(); + CGAL_postcondition(this->tree().size() == m_segments.size()); } }; diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h index c87f82ac75fe..869c108693d2 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h @@ -164,6 +164,12 @@ class Triangle_mesh_oracle Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits()); } + // Manually constructing it here purely for profiling reasons: if we keep the lazy approach, + // it will be done at the first treatment of a facet that needs a Steiner point. + // So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes + // to accelerate the tree. + this->tree().accelerate_distance_queries(); + #ifdef CGAL_AW3_DEBUG std::cout << "Tree: " << this->tree().size() << " primitives (" << num_faces(tmesh) << " faces in input)" << std::endl; #endif diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h index 0a8f589fc2df..35966be46447 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h @@ -169,6 +169,12 @@ class Triangle_soup_oracle Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits()); } + // Manually constructing it here purely for profiling reasons: if we keep the lazy approach, + // it will be done at the first treatment of a facet that needs a Steiner point. + // So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes + // to accelerate the tree. + this->tree().accelerate_distance_queries(); + #ifdef CGAL_AW3_DEBUG std::cout << "Tree: " << this->tree().size() << " primitives (" << faces.size() << " faces in input)" << std::endl; #endif From 88468764767950cda8daae96f5ab47885776afa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 4 Oct 2023 22:54:06 +0200 Subject: [PATCH 451/943] Check for degenerate segments + add warnings --- .../internal/Segment_soup_oracle.h | 20 +++++++++++++++++-- .../internal/Triangle_mesh_oracle.h | 5 +++++ .../internal/Triangle_soup_oracle.h | 10 ++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h index 08e76dc6f5d3..63f3532cf67e 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Segment_soup_oracle.h @@ -40,7 +40,8 @@ struct SS_oracle_traits { using Geom_traits = Alpha_wrap_AABB_geom_traits; // Wrap the kernel to add Ball_3 + custom Do_intersect_3 - using Segments = std::vector; + using Segment = typename GT_::Segment_3; + using Segments = std::vector; using SR_iterator = typename Segments::const_iterator; using Primitive = AABB_primitive; @@ -105,8 +107,22 @@ class Segment_soup_oracle return; } + typename Geom_traits::Is_degenerate_3 is_degenerate = this->geom_traits().is_degenerate_3_object(); + const std::size_t old_size = m_segments.size(); - m_segments.insert(std::cend(m_segments), std::cbegin(segments), std::cend(segments)); + + for(const Segment& s : segments) + { + if(is_degenerate(s)) + { +#ifdef CGAL_AW3_DEBUG + std::cerr << "Warning: ignoring degenerate segment " << s << std::endl; +#endif + continue; + } + + m_segments.push_back(s); + } #ifdef CGAL_AW3_DEBUG std::cout << "Insert into AABB tree (segments)..." << std::endl; diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h index 869c108693d2..ffd8326a44f6 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_mesh_oracle.h @@ -153,7 +153,12 @@ class Triangle_mesh_oracle for(face_descriptor f : faces(tmesh)) { if(Polygon_mesh_processing::is_degenerate_triangle_face(f, tmesh, np)) + { +#ifdef CGAL_AW3_DEBUG + std::cerr << "Warning: ignoring degenerate face " << f << std::endl; +#endif continue; + } const Point_ref p0 = get(vpm, source(halfedge(f, tmesh), tmesh)); const Point_ref p1 = get(vpm, target(halfedge(f, tmesh), tmesh)); diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h index 35966be46447..27322a554e36 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Triangle_soup_oracle.h @@ -164,7 +164,12 @@ class Triangle_soup_oracle const Triangle_3 tr = triangle(p0, p1, p2); if(is_degenerate(tr)) + { +#ifdef CGAL_AW3_DEBUG + std::cerr << "Warning: ignoring degenerate face " << tr << std::endl; +#endif continue; + } Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits()); } @@ -190,7 +195,12 @@ class Triangle_soup_oracle for(const Triangle_3& tr : triangles) { if(is_degenerate(tr)) + { +#ifdef CGAL_AW3_DEBUG + std::cerr << "Warning: ignoring degenerate triangle " << tr << std::endl; +#endif continue; + } Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits()); } From 8e36b7b37e6dd2e14d55e3997d70d1ec3b0af26e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 5 Oct 2023 09:32:22 +0200 Subject: [PATCH 452/943] the map is either const or take by copy --- Property_map/include/CGAL/property_map.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Property_map/include/CGAL/property_map.h b/Property_map/include/CGAL/property_map.h index 12fd06503fee..f1115cbf05a8 100644 --- a/Property_map/include/CGAL/property_map.h +++ b/Property_map/include/CGAL/property_map.h @@ -661,7 +661,7 @@ struct Boolean_property_map return pm.set_ptr->count(k) != 0; } - friend void put(Boolean_property_map& pm, const key_type& k, bool v) + friend void put(Boolean_property_map pm, const key_type& k, bool v) { CGAL_assertion(pm.set_ptr!=nullptr); if (v) From d53d30a69b763ad489c0476b510aa664630c0f3c Mon Sep 17 00:00:00 2001 From: albert-github Date: Thu, 5 Oct 2023 13:27:54 +0200 Subject: [PATCH 453/943] Defining a new resource directory to be used with doxygen master 1.10.0 Doxygen master 1.10.0 has support for the c++ concept of modules but as in the past doxygen used the term "modules" for the grouping of information (`commands like `\defgroup`, `\ingroup` etc.) an new term for the later has been introduced: Topics. The introduction of the new term also has some influence on the generated files and file names. The consequence of this is that part of CGAL documentation (i.e. the "Reference Manual") item didn't appear anymore in a.o. the treeview. - creating a new setup - adding the "topics" to the layout files as in the past the "modules" were. - adjusting the "hack.js" where some manipulation of the TreeView is done and this had "modules" coded into it. - adjusting the "header_packages.html" as this used the name "modules.js" --- Documentation/doc/CMakeLists.txt | 2 +- .../doc/resources/1.10.0/BaseDoxyfile.in | 813 ++++++++++++++++++ .../doc/resources/1.10.0/CGAL_mathjax.js | 35 + .../doc/resources/1.10.0/DoxygenLayout.xml | 177 ++++ .../resources/1.10.0/DoxygenLayoutPackage.xml | 178 ++++ .../doc/resources/1.10.0/cgal_stylesheet.css | 386 +++++++++ .../doc/resources/1.10.0/footer.html | 21 + Documentation/doc/resources/1.10.0/hacks.js | 128 +++ .../doc/resources/1.10.0/header.html | 82 ++ .../doc/resources/1.10.0/header_package.html | 144 ++++ .../doc/resources/1.10.0/menu_version.js | 109 +++ 11 files changed, 2074 insertions(+), 1 deletion(-) create mode 100644 Documentation/doc/resources/1.10.0/BaseDoxyfile.in create mode 100644 Documentation/doc/resources/1.10.0/CGAL_mathjax.js create mode 100644 Documentation/doc/resources/1.10.0/DoxygenLayout.xml create mode 100644 Documentation/doc/resources/1.10.0/DoxygenLayoutPackage.xml create mode 100644 Documentation/doc/resources/1.10.0/cgal_stylesheet.css create mode 100644 Documentation/doc/resources/1.10.0/footer.html create mode 100644 Documentation/doc/resources/1.10.0/hacks.js create mode 100644 Documentation/doc/resources/1.10.0/header.html create mode 100644 Documentation/doc/resources/1.10.0/header_package.html create mode 100644 Documentation/doc/resources/1.10.0/menu_version.js diff --git a/Documentation/doc/CMakeLists.txt b/Documentation/doc/CMakeLists.txt index 481b1792c4fd..0e7ddd3b95af 100644 --- a/Documentation/doc/CMakeLists.txt +++ b/Documentation/doc/CMakeLists.txt @@ -263,7 +263,7 @@ set(CGAL_DOC_DXY_DIR "${CMAKE_BINARY_DIR}/doc_dxy") file(MAKE_DIRECTORY "${CGAL_DOC_DXY_DIR}") #Setting the resource directory depending on the version of doxygen -set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.9.6") +set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.10.0") # first look if resources for the specific doxygen version is available, fallback # on the default otherwise diff --git a/Documentation/doc/resources/1.10.0/BaseDoxyfile.in b/Documentation/doc/resources/1.10.0/BaseDoxyfile.in new file mode 100644 index 000000000000..7322b03d12e0 --- /dev/null +++ b/Documentation/doc/resources/1.10.0/BaseDoxyfile.in @@ -0,0 +1,813 @@ +# Doxyfile 1.9.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# Only the settings that are not the default ones are kept in this file + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = YES + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = NO + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:^^" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) + +ALIASES = "cgal=%CGAL" \ + "protocgal=C++gal" \ + "plageo=Plageo" \ + "stl=STL" \ + "gmp=GMP" \ + "gmpxx=GMPXX" \ + "iso=ISO" \ + "lisp=Lisp" \ + "ieee=IEEE" \ + "ascii=ASCII" \ + "exacus=Exacus" \ + "mpir=MPIR" \ + "mpfr=MPFR" \ + "leda=LEDA" \ + "gcc=GCC" \ + "dcel=DCEL" \ + "bgl=BGL" \ + "boost=Boost" \ + "gnu=GNU" \ + "ms=MS" \ + "qt=Qt" \ + "qt5=Qt5" \ + "eigen=Eigen" \ + "opengr=OpenGR" \ + "libpointmatcher=libpointmatcher" \ + "core=Core" \ + "mpfi=MPFI" \ + "ntl=NTL" \ + "pdb=PDB" \ + "esbtl=ESBTL" \ + "tbb=TBB" \ + "laslib=LASlib" \ + "opencv=OpenCV" \ + "tensorflow=TensorFlow" \ + "metis=METIS" \ + "zlib=zlib" \ + "ceres=Ceres" \ + "glpk=GLPK" \ + "scip=SCIP" \ + "osqp=OSQP" \ + "rs=RS" \ + "rs3=RS3" \ + "unix=Unix" \ + "api=API" \ + "vtk=VTK" \ + "visualstudio=Visual Studio" \ + "taucs=TAUCS" \ + "lapack=LAPACK" \ + "blas=BLAS" \ + "opennl=OpenNL" \ + "cpp=C++" \ + "cpp11=C++11" \ + "CC=C++" \ + "cgalExample{1}=
    File \ref \1 \include \1" \ + "cgalFigureAnchor{1}=\anchor fig__\1" \ + "cgalFigureRef{1}=\ref fig__\1" \ + "cgalFigureBegin{2}=\anchor fig__\1 ^^ \image html \2 ^^ \image latex \2 \"\" width=15cm ^^ \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{3}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=7.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=7.5cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{4}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=5cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{5}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=3.75cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3.75cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3.75cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3.75cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{6}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=3cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3cm ^^ \image html \6 ^^ \image latex \6 \"\" width=3cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{7}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=2.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.5cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.5cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.5cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.5cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{8}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=2.1cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.1cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.1cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.1cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.1cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.1cm ^^ \image html \8 ^^ \image latex \8 \"\" width=2.1cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{9}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=1.9cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.9cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.9cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.9cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.9cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.9cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.9cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.9cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureBegin{10}=\anchor fig__\1 ^^
    \image html \2 ^^ \image latex \2 \"\" width=1.6cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.6cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.6cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.6cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.6cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.6cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.6cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.6cm ^^ \image html \10 ^^ \image latex \10 \"\" width=1.6cm ^^
    \htmlonly[block]
    \endhtmlonly ^^ \ref fig__\1" \ + "cgalFigureEnd=\htmlonly[block]
    \endhtmlonly
    " \ + "cgalFigureCaptionBegin{1}=\htmlonly[block]
    \endhtmlonly \ref fig__\1" \ + "cgalFigureCaptionEnd=\htmlonly[block]
    \endhtmlonly
    " \ + "cgalConcept=\details
    ^^ \brief" \ + "cgalConceptNamespace=\details
    ^^ \brief" \ + "cgalRefines=Refines" \ + "cgalRefines{1}=
    @cgalRefines
    @c \1
    " \ + "cgalRefines{2}=
    @cgalRefines
    @c \1
    @c \2
    " \ + "cgalRefines{3}=
    @cgalRefines
    @c \1
    @c \2
    @c \3
    " \ + "cgalRefines{4}=
    @cgalRefines
    @c \1
    @c \2
    @c \3
    @c \4
    " \ + "cgalRefines{5}=
    @cgalRefines
    @c \1
    @c \2
    @c \3
    @c \4
    @c \5
    " \ + "cgalRefinesBare{1}=
    @cgalRefines
    \1
    " \ + "cgalRefinesBare{2}=
    @cgalRefines
    @c \1
    \2
    " \ + "cgalModelsHeader=Is model of" \ + "cgalModels{1}=
    @cgalModelsHeader
    @c \1
    " \ + "cgalModels{2}=
    @cgalModelsHeader
    @c \1
    @c \2
    " \ + "cgalModels{3}=
    @cgalModelsHeader
    @c \1
    @c \2
    @c \3
    " \ + "cgalModels{4}=
    @cgalModelsHeader
    @c \1
    @c \2
    @c \3
    @c \4
    " \ + "cgalModels{5}=
    @cgalModelsHeader
    @c \1
    @c \2
    @c \3
    @c \4
    @c \5
    " \ + "cgalModels{6}=
    @cgalModelsHeader
    @c \1
    @c \2
    @c \3
    @c \4
    @c \5
    @c \6
    " \ + "cgalModelsBareBegin=
    @cgalModelsHeader
    " \ + "cgalModelsBareEnd=
    " \ + "cgalModelsBare{1}=
    \1
    " \ + "cgalGeneralizes=\xrefitem generalizes \"Generalizes\" \"Generalization Relationships\"" \ + "cgalHasModelsHeader=Has models" \ + "cgalHasModelsBegin=
    @cgalHasModelsHeader
    " \ + "cgalHasModels{1}=
    `\1`
    " \ + "cgalHasModelsBare{1}=
    \1
    " \ + "cgalHasModelsEnd=
    " \ + "cgalDebugBegin=\htmlonly[block]
    Debugging Support
    \endhtmlonly ^^" \ + "cgalDebugEnd=\htmlonly[block]
    \endhtmlonly" \ + "cgalDebugFunction=This is a function for debugging purpose." \ + "cgalAdvancedBegin=^^ \htmlonly[block]
    Advanced
    \endhtmlonly ^^" \ + "cgalAdvancedEnd=\noop ^^ \htmlonly[block]
    \endhtmlonly" \ + "cgalAdvancedFunction=This is an advanced function." \ + "cgalAdvancedClass=This is an advanced class." \ + "cgalAdvancedType=This is an advanced type." \ + "cgalAdvancedConcept=This is an advanced concept." \ + "cgalRequiresCPP11=\warning This function requires a C++11 compiler." \ + "cgalPkgPicture{1}=
    ^^ \image html \1 ^^
    " \ + "cgalPkgSummaryBegin=
    " \ + "cgalPkgSummaryEnd=
    " \ + "cgalPkgShortInfoBegin=
    " \ + "cgalPkgShortInfoEnd=
    " \ + "cgalPkgAuthor{1}=
    \1
    " \ + "cgalPkgAuthors{1}=\cgalPkgAuthor{\1}" \ + "cgalPkgDesc{1}=
    \1
    " \ + "cgalPkgSince{1}=Introduced in: \cgal \1
    " \ + "cgalPkgDependsOn{1}=Depends on: \1
    " \ + "cgalPkgLicense{1}=License: \1
    " \ + "cgalPkgDemo{2}=Windows demo:
    \1
    Common demo dlls: dlls
    " \ + "cgalPkgDemo{4}=Windows demos: \1, \3
    Common demo dlls: dlls
    " \ + "cgalPkgDemo{6}=Windows demos: \1, \3, \5
    Common demo dlls: dlls
    " \ + "cgalPkgDescriptionEnd=" \ + "cgalModifBegin=\htmlonly
    \endhtmlonly \xrefitem Modification \"Modifications\" \"MODIFICATIONS\"" \ + "cgalModifEnd=\htmlonly
    \endhtmlonly \latexonly END MODIFICATIONS \endlatexonly" \ + "cgalPkgBib{1}=BibTeX: \1-${CGAL_RELEASE_YEAR_ID}
    " \ + "cgalFootnote{1}=\1" \ + "cgalFootnoteCode{1}=\1" \ + "cgalAutoToc=\htmlonly[block]
    \endhtmlonly" \ + "cgalTagTrue=\link CGAL::Tag_true `CGAL::Tag_true`\endlink" \ + "cgalTagFalse=\link CGAL::Tag_false `CGAL::Tag_false`\endlink" \ + "cgalHeading{1}= \1
    " \ + "cgalClassifedRefPages=\htmlonly[block]

    Classified Reference Pages

    \endhtmlonly" \ + "cgalCRPSection{1}=

    \1

    " \ + "cgalCRPSubsection{1}=

    \1

    " \ + "cgalCite{1}=\cite \1" \ + "cgalPackageSection{2}=\htmlonly[block]
    \endhtmlonly \section \1 \2 ^^ \htmlonly[block]
    \endhtmlonly" \ + "cgalNamedParamsBegin=
    Optional Named Parameters
    " \ + "cgalNamedParamsBegin{1}=
    \1
    " \ + "cgalNamedParamsEnd=
    " \ + "cgalParamNBegin{1}= \htmlonly[block]
    \endhtmlonly
      " \ + "cgalParamDescription{1}=
    • \1
    • " \ + "cgalParamType{1}=
    • Type: \1
    • " \ + "cgalParamDefault{1}=
    • %Default: \1
    • " \ + "cgalParamExtra{1}=
    • Extra: \1
    • " \ + "cgalParamNEnd=
    \htmlonly[block]
    \endhtmlonly " \ + "cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \ + "cgalParamSectionEnd=\cgalParamNEnd" \ + "cgalParamPrecondition{1}=
  • Precondition: \1
  • " \ + "cgalBigO{1}=\f$O(\1)\f$" \ + "cgalBigOLarge{1}=\f$O\left(\1\right)\f$" \ + "cgalInclude{1}=`#include<\1>`" + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. + +EXTENSION_MAPPING = txt=C++ + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = YES + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = YES + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = YES + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = NO + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = ${CGAL_DOC_RESOURCE_DIR}/DoxygenLayoutPackage.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = ${CGAL_DOC_BIBLIO_DIR}/cgal_manual.bib \ + ${CGAL_DOC_BIBLIO_DIR}/geom.bib + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.cpp \ + *.txt \ + *.md \ + *.h \ + *.hpp + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# ANamespace::AClass, ANamespace::*Test + +EXCLUDE_SYMBOLS = Tr \ + Vb \ + Cb \ + Fb \ + K \ + Traits \ + internal + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = *.cpp \ + *.h + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = YES + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE} + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = svg + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 +# This tag requires that the tag USE_MATHJAX is set to YES. + +${CGAL_DOC_MATHJAX_LOCATION_FULL_OPTION_LINE} + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = TeX/AMSmath \ + TeX/AMSsymbols + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = ${CGAL_DOC_RESOURCE_DIR}/CGAL_mathjax.js + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /